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: Yangbo Lu <yangbo.lu@nxp.com> Reviewed-by: York Sun <york.sun@nxp.com>
This commit is contained in:
parent
4a47bf8a2b
commit
6aaa539f47
|
|
@ -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;
|
||||||
}
|
}
|
||||||
|
|
||||||
mux_sdhc2 = (io & 0x0c) >> 2;
|
/* hwconfig method is used for RevD and later versions. */
|
||||||
/* Enable SDHC2 only when use SDIO wifi and eMMC */
|
if ((io & SW_REV_MASK) <= SW_REV_D) {
|
||||||
if (mux_sdhc2 == 2 || mux_sdhc2 == 0)
|
#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;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (sdhc2_en)
|
||||||
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
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue