Hi York, > -----Original Message----- > From: York Sun > Sent: 2017年12月7日 3:08 > To: Y.b. Lu <yangbo...@nxp.com>; u-boot@lists.denx.de > Subject: Re: [v3] armv8: ls1012a: enable/disable eSDHC1 through hwconfig for > new RDB > > On 12/06/2017 02:19 AM, Yangbo Lu wrote: > > For LS1012ARDB RevD and later versions, the I2C reading for DIP switch > > setting had been no longer reliable since the board was reworked. This > > patch is to add hwconfig support to enable/disable > > I think this message is not accurate. How about saying "I2C reading for DIP > switch setting is not reliable for LS1012ARDB rev D and later revisions."? >
[Y.b. Lu] Thanks. This is better. > > eSDHC1 manually for these boards. Also let kernel decide status of > > esdhc0. > > I see you dropped fixing up esdhc0. What do you mean "let kernel decide"? > How? [Y.b. Lu] I mean unless to avoid some issue, we don’t need to do any fix-up for 'status'. Let me rephrase it as "Also drop 'status' fix-up for esdhc0 and leave it as it is. It shouldn’t be always fixed up with 'okay'. ". > > > > > Signed-off-by: Yangbo Lu <yangbo...@nxp.com> > > --- > > Changes for v2: > > - Just used hwconfig() instead of getenv() and hwconfig_f(). > > Changes for v3: > > - only applied hwconfig support for RevD and later versions. > > --- > > board/freescale/ls1012ardb/ls1012ardb.c | 51 > +++++++++++++++++++++------------ > > include/configs/ls1012ardb.h | 4 +++ > > 2 files changed, 36 insertions(+), 19 deletions(-) > > > > diff --git a/board/freescale/ls1012ardb/ls1012ardb.c > > b/board/freescale/ls1012ardb/ls1012ardb.c > > index c6c1c71202..b73c7d6639 100644 > > --- a/board/freescale/ls1012ardb/ls1012ardb.c > > +++ b/board/freescale/ls1012ardb/ls1012ardb.c > > @@ -132,39 +132,52 @@ int board_init(void) > > > > int esdhc_status_fixup(void *blob, const char *compat) { > > - char esdhc0_path[] = "/soc/esdhc@1560000"; > > char esdhc1_path[] = "/soc/esdhc@1580000"; > > + u8 in1; > > I think you can reuse "io". Not a big deal though. [Y.b. Lu] Ok. Will do that. > > > u8 io = 0; > > u8 mux_sdhc2; > > - > > - do_fixup_by_path(blob, esdhc0_path, "status", "okay", > > - sizeof("okay"), 1); > > + bool sdhc2_en = false; > > > > i2c_set_bus_num(0); > > > > - /* > > - * 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) { > > + if (i2c_read(I2C_MUX_IO1_ADDR, 1, 1, &in1, 1) < 0) { > > It would be helpful to use a named macro instead of "1" here as the register > address. It is not obvious that you are reading a revision number. You can > also > put a comment. [Y.b. Lu] Let me put a comment here for this patch. I think it's proper to replace all the numbers with macro in this file in another patch. > > You said I2C reading the DIP is not reliable. Is this reading reliable? [Y.b. Lu] This is a question... Although I had verified this patch on RevE(the value read is correct), let me confirm with Kinjalk before sending new version patch. > > > printf("Error reading i2c boot information!\n"); > > - return 0; /* Don't want to hang() on this error */ > > + return 0; > > What does I2C failure mean here? Returning 0 will cause the code keep going in > fdt_fixup_esdhc(). [Y.b. Lu] I don’t know the possibility of I2C failure. If the failure happens, just print error message, leave 'status' as it is, and return 0 because the other fix-ups in fdt_fixup_esdhc() are still needed like clock-frequency. > > > + } > > + > > + if ((in1 & (~__SW_REV_MASK)) <= __SW_REV_D) { > > + if (hwconfig("esdhc1")) > > Please double check. I remember in the past if hwconfig is not enabled, any > check returns true. [Y.b. Lu] You're right. It's -ENOSYS. But what should I do here ? > > > + sdhc2_en = true; > > + } else { > > + /* > > + * 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 */ > > + } > > + > > + mux_sdhc2 = (io & 0x0c) >> 2; > > + /* Enable SDHC2 only when use SDIO wifi and eMMC */ > > + if (mux_sdhc2 == 2 || mux_sdhc2 == 0) > > + sdhc2_en = true; > > } > > > > - mux_sdhc2 = (io & 0x0c) >> 2; > > - /* Enable SDHC2 only when use SDIO wifi and eMMC */ > > - if (mux_sdhc2 == 2 || mux_sdhc2 == 0) > > + if (sdhc2_en) > > 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; > > } > > > > diff --git a/include/configs/ls1012ardb.h > > b/include/configs/ls1012ardb.h index 794117062f..d5384e6027 100644 > > --- a/include/configs/ls1012ardb.h > > +++ b/include/configs/ls1012ardb.h > > @@ -32,6 +32,10 @@ > > #define __SW_REV_MASK 0x07 > > #define __SW_REV_A 0xF8 > > #define __SW_REV_B 0xF0 > > +#define __SW_REV_C 0xE8 > > +#define __SW_REV_C1 0xE0 > > +#define __SW_REV_C2 0xD8 > > +#define __SW_REV_D 0xD0 > > I don't have strong opinion about these macros. I would not use underscore > myself. I guess I missed them at the first place. [Y.b. Lu] It's confusing why define macro like this... And the __SW_BOOT_EMU is wrong, it should be 0x02, not 0x10. > > York _______________________________________________ U-Boot mailing list U-Boot@lists.denx.de https://lists.denx.de/listinfo/u-boot