Skip to content
Snippets Groups Projects
Commit 6aaa539f authored by Yangbo Lu's avatar Yangbo Lu Committed by York Sun
Browse files

armv8: ls1012ardb: support hwconfig for eSDHC1 enabling


I2C reading for DIP switch setting is not reliable for LS1012ARDB
RevD and later versions. This patch is to add hwconfig support to
enable/disable eSDHC1 manually for these boards. Also drop 'status'
fix-up for eSDHC0 and leave it as it is. It shouldn't always be
fixed up with 'okay'.

Signed-off-by: default avatarYangbo Lu <yangbo.lu@nxp.com>
Reviewed-by: default avatarYork Sun <york.sun@nxp.com>
parent 4a47bf8a
No related branches found
No related tags found
No related merge requests found
...@@ -152,34 +152,49 @@ int board_init(void) ...@@ -152,34 +152,49 @@ int board_init(void)
int esdhc_status_fixup(void *blob, const char *compat) int esdhc_status_fixup(void *blob, const char *compat)
{ {
char esdhc0_path[] = "/soc/esdhc@1560000";
char esdhc1_path[] = "/soc/esdhc@1580000"; char esdhc1_path[] = "/soc/esdhc@1580000";
u8 io = 0; bool sdhc2_en = false;
u8 mux_sdhc2; u8 mux_sdhc2;
u8 io = 0;
do_fixup_by_path(blob, esdhc0_path, "status", "okay",
sizeof("okay"), 1);
i2c_set_bus_num(0); i2c_set_bus_num(0);
/* /* IO1[7:3] is the field of board revision info. */
* The I2C IO-expander for mux select is used to control the muxing if (i2c_read(I2C_MUX_IO_ADDR, I2C_MUX_IO_1, 1, &io, 1) < 0) {
* 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_IO_ADDR, I2C_MUX_IO_0, 1, &io, 1) < 0) {
printf("Error reading i2c boot information!\n"); printf("Error reading i2c boot information!\n");
return 0; /* Don't want to hang() on this error */ return 0;
}
/* hwconfig method is used for RevD and later versions. */
if ((io & SW_REV_MASK) <= SW_REV_D) {
#ifdef CONFIG_HWCONFIG
if (hwconfig("esdhc1"))
sdhc2_en = true;
#endif
} else {
/*
* The I2C IO-expander for mux select is used to control
* the muxing of various onboard interfaces.
*
* IO0[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_IO_ADDR, I2C_MUX_IO_0, 1, &io, 1) < 0) {
printf("Error reading i2c boot information!\n");
return 0;
}
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; if (sdhc2_en)
/* 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", do_fixup_by_path(blob, esdhc1_path, "status", "okay",
sizeof("okay"), 1); sizeof("okay"), 1);
else else
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment