[U-Boot] [U-Boot, v3, 2/3] armv8: ls1012a: define esdhc_status_fixup for QDS board
york sun
york.sun at nxp.com
Thu Jan 12 18:08:51 CET 2017
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.lu at 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 at 1560000";
> + char esdhc1_path[] = "/soc/esdhc at 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
More information about the U-Boot
mailing list