On 12/07/2016 07:42 PM, Yangbo Lu wrote: > The LS1012AQDS board has a hardware issue. When there is no eMMC > adapter card inserted in SDHC2 adapter slot, 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 QDS to > disable SDHC2 status if no eMMC adapter card is detected. > > Signed-off-by: Yangbo Lu <yangbo...@nxp.com> > --- > Changes for v2: > - Added annotation in code > - Added return value > - Modified commit message > Changes for v3: > - None > --- > board/freescale/ls1012aqds/ls1012aqds.c | 28 ++++++++++++++++++++++++++++ > 1 file changed, 28 insertions(+) > > diff --git a/board/freescale/ls1012aqds/ls1012aqds.c > b/board/freescale/ls1012aqds/ls1012aqds.c > index 94440b3..88fb4ce 100644 > --- a/board/freescale/ls1012aqds/ls1012aqds.c > +++ b/board/freescale/ls1012aqds/ls1012aqds.c > @@ -121,6 +121,34 @@ int board_eth_init(bd_t *bis) > return pci_eth_init(bis); > } > > +int esdhc_status_fixup(void *blob, const char *compat) > +{ > + char esdhc0_path[] = "/soc/esdhc@1560000"; > + char esdhc1_path[] = "/soc/esdhc@1580000"; > + u8 card_id; > + > + do_fixup_by_path(blob, esdhc0_path, "status", "okay", > + sizeof("okay"), 1);
Don't you need to search it by compatible? Is the path always correct? I guess it is always "okay" for esdhc0? This new function doesn't check hwconfig. Do you need to check? > + > + /* > + * The Presence Detect 2 register detects the installation > + * of cards in various PCI Express or SGMII slots. > + * > + * STAT_PRS2[7:5]: Specifies the type of card installed in the > + * SDHC2 Adapter slot. 0b111 indicates no adapter is installed. > + */ > + card_id = (QIXIS_READ(present2) & 0xe0) >> 5; > + > + /* If no adapter is installed in SDHC2, disable SDHC2 */ > + if (card_id == 0x7) > + do_fixup_by_path(blob, esdhc1_path, "status", "disabled", > + sizeof("disabled"), 1); > + else > + do_fixup_by_path(blob, esdhc1_path, "status", "okay", > + sizeof("okay"), 1); > + return 0; > +} > + > #ifdef CONFIG_OF_BOARD_SETUP > int ft_board_setup(void *blob, bd_t *bd) > { > York _______________________________________________ U-Boot mailing list U-Boot@lists.denx.de http://lists.denx.de/mailman/listinfo/u-boot