> -----Original Message----- > From: york sun > Sent: Friday, January 13, 2017 1:09 AM > To: Y.B. Lu; u-boot@lists.denx.de > Subject: Re: [U-Boot, v3, 3/3] armv8: ls1012a: define esdhc_status_fixup > for RDB board > > On 12/07/2016 07:42 PM, Yangbo Lu wrote: > > On LS1012ARDB board, three dual 1:4 mux/demux devices drive the SDHC2 > > signals to eMMC, SDIO wifi, SPI and Ardiuno shield. Only when we > > select eMMC and SDIO wifi, the SDHC2 could be used. Otherwise, the > > command inhibit bits of eSDHC2_PRSSTAT register will never release. > > This would cause below continious error messages in linux since it > > uses polling mode to detect card. > > "mmc1: Controller never released inhibit bit(s)." > > "mmc1: Controller never released inhibit bit(s)." > > "mmc1: Controller never released inhibit bit(s)." > > This patch is to define esdhc_status_fixup function for RDB to disable > > SDHC2 status if no SDIO wifi or eMMC is selected. > > > > Signed-off-by: Yangbo Lu <yangbo...@nxp.com> > > --- > > Changes for v2: > > - Added this patch > > Changes for v3: > > - Fixed checkpatch issue > > --- > > board/freescale/ls1012ardb/ls1012ardb.c | 39 > > +++++++++++++++++++++++++++++++++ > > 1 file changed, 39 insertions(+) > > > > diff --git a/board/freescale/ls1012ardb/ls1012ardb.c > > b/board/freescale/ls1012ardb/ls1012ardb.c > > index 778434d..708e0a1 100644 > > --- a/board/freescale/ls1012ardb/ls1012ardb.c > > +++ b/board/freescale/ls1012ardb/ls1012ardb.c > > @@ -113,6 +113,45 @@ int board_init(void) > > return 0; > > } > > > > +int esdhc_status_fixup(void *blob, const char *compat) { > > + char esdhc0_path[] = "/soc/esdhc@1560000"; > > + char esdhc1_path[] = "/soc/esdhc@1580000"; > > + u8 io = 0; > > + u8 mux_sdhc2; > > + > > + do_fixup_by_path(blob, esdhc0_path, "status", "okay", > > + sizeof("okay"), 1); > > + > > + /* Initialize i2c early for serial flash bank information */ > > + i2c_set_bus_num(0); > > What do you mean "early" in the comment? This function is called after > I2C is initialized. >
[Lu Yangbo-B47093] Sorry, it's really confusing comment. I will remove it. > > + > > + /* > > + * The I2C IO-expander for mux select is used to control the muxing > > + * of various onboard interfaces. > > + * > > + * IO1[3:2] indicates SDHC2 interface demultiplexer select lines. > > + * 00 - SDIO wifi > > + * 01 - GPIO (to Arduino) > > + * 10 - eMMC Memory > > + * 11 - SPI > > + */ > > + if (i2c_read(I2C_MUX_IO1_ADDR, 0, 1, &io, 1) < 0) { > > + printf("Error reading i2c boot information!\n"); > > + return 0; /* Don't want to hang() on this error */ > > In case of this error, do you want to "disable" esdhc1? [Lu Yangbo-B47093] If error occurs here, I just used return to let kernel dts decide to use it or not. > > > + } > > + > > + mux_sdhc2 = (io & 0x0c) >> 2; > > + /* Enable SDHC2 only when use SDIO wifi and eMMC */ > > + if (mux_sdhc2 == 2 || mux_sdhc2 == 0) > > + do_fixup_by_path(blob, esdhc1_path, "status", "okay", > > + sizeof("okay"), 1); > > + else > > + do_fixup_by_path(blob, esdhc1_path, "status", "disabled", > > + sizeof("disabled"), 1); > > + return 0; > > +} > > + > > int ft_board_setup(void *blob, bd_t *bd) { > > arch_fixup_fdt(blob); > > > > York _______________________________________________ U-Boot mailing list U-Boot@lists.denx.de http://lists.denx.de/mailman/listinfo/u-boot