
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@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