Re: [U-Boot] [PATCH 1/3 V2] esdhc: Workaround for card can't be detected on T4240QDS

2014-01-09 Thread Pantelis Antoniou
Hi Haijun,

On Dec 11, 2013, at 7:35 AM, Haijun Zhang wrote:

 Card detection pin is ineffective on T4240QDS Rev1.0.
 There are two cards can be connected to board.
 1. eMMC card is built-in board, can not be removed. so
   For eMMC card it is always there.
 2. Card detecting pin is functional for SDHC card in Rev2.0.
 
 This workaround force sdhc driver scan and initialize the card
 regardless of whether the card is inserted or not in case Rev1.0.
 
 Signed-off-by: Haijun Zhang haijun.zh...@freescale.com
 ---
 changes for V2:
   - Add the judgement condition for this broken card
 
 drivers/mmc/fsl_esdhc.c| 9 +
 include/configs/T4240QDS.h | 2 ++
 2 files changed, 11 insertions(+)
 
 diff --git a/drivers/mmc/fsl_esdhc.c b/drivers/mmc/fsl_esdhc.c
 index 134a02d..b3b5f37 100644
 --- a/drivers/mmc/fsl_esdhc.c
 +++ b/drivers/mmc/fsl_esdhc.c
 @@ -548,6 +548,15 @@ static int esdhc_getcd(struct mmc *mmc)
   struct fsl_esdhc *regs = (struct fsl_esdhc *)cfg-esdhc_base;
   int timeout = 1000;
 
 + /*
 +  * Card detecting pin is not functional on T4240QDS with rev 1.0 SoC.
 +  * Presuming card is present.
 +  */
 +#if defined(CONFIG_T4240QDS)
 + if (!(readb(QIXIS_BASE + QIXIS_BRDCFG5)  QIXIS_MUX_SDHC) ||
 + IS_SVR_REV(get_svr(), 1, 0))
 + return 1;
 +#endif

I just don't like this. It's a bunch of completely board specific code dropped
in the middle of a generic driver.

Rework to something like this:

In the board file (T4240QDS)

#define CONFIG_ESDHC_DETECT_QUIRK \
(!(readb(QIXIS_BASE + QIXIS_BRDCFG5)  QIXIS_MUX_SDHC) || \
IS_SVR_REV(get_svr(), 1, 0)))

And do this in the driver:

#ifdef CONFIG_ESDHC_DETECT_QUIRK
if (CONFIG_ESDHC_DETECT_QUIRK)
return 1;
#endif

Do the same to all other quirks please.

   while (!(esdhc_read32(regs-prsstat)  PRSSTAT_CINS)  --timeout)
   udelay(1000);
 
 diff --git a/include/configs/T4240QDS.h b/include/configs/T4240QDS.h
 index c96df54..955e6b9 100644
 --- a/include/configs/T4240QDS.h
 +++ b/include/configs/T4240QDS.h
 @@ -165,6 +165,8 @@ unsigned long get_board_ddr_clk(void);
 #define QIXIS_RCFG_CTL_RECONFIG_IDLE  0x20
 #define QIXIS_RCFG_CTL_RECONFIG_START 0x21
 #define QIXIS_RCFG_CTL_WATCHDOG_ENBLE 0x08
 +#define QIXIS_BRDCFG50x55
 +#define QIXIS_MUX_SDHC   2
 #define QIXIS_BASE_PHYS   (0xfull | QIXIS_BASE)
 
 #define CONFIG_SYS_CSPR3_EXT  (0xf)
 -- 
 1.8.4.1
 
 

Regards

-- Pantelis

___
U-Boot mailing list
U-Boot@lists.denx.de
http://lists.denx.de/mailman/listinfo/u-boot


Re: [U-Boot] [PATCH 1/3 V2] esdhc: Workaround for card can't be detected on T4240QDS

2014-01-09 Thread Zhang Haijun

Thanks Pantelis.

I'll rework this patch as you suggested.

Thanks.

Regards,

Haijun


于 2014/1/9 18:42, Pantelis Antoniou 写道:

Hi Haijun,

On Dec 11, 2013, at 7:35 AM, Haijun Zhang wrote:


Card detection pin is ineffective on T4240QDS Rev1.0.
There are two cards can be connected to board.
1. eMMC card is built-in board, can not be removed. so
   For eMMC card it is always there.
2. Card detecting pin is functional for SDHC card in Rev2.0.

This workaround force sdhc driver scan and initialize the card
regardless of whether the card is inserted or not in case Rev1.0.

Signed-off-by: Haijun Zhang haijun.zh...@freescale.com
---
changes for V2:
- Add the judgement condition for this broken card

drivers/mmc/fsl_esdhc.c| 9 +
include/configs/T4240QDS.h | 2 ++
2 files changed, 11 insertions(+)

diff --git a/drivers/mmc/fsl_esdhc.c b/drivers/mmc/fsl_esdhc.c
index 134a02d..b3b5f37 100644
--- a/drivers/mmc/fsl_esdhc.c
+++ b/drivers/mmc/fsl_esdhc.c
@@ -548,6 +548,15 @@ static int esdhc_getcd(struct mmc *mmc)
struct fsl_esdhc *regs = (struct fsl_esdhc *)cfg-esdhc_base;
int timeout = 1000;

+   /*
+* Card detecting pin is not functional on T4240QDS with rev 1.0 SoC.
+* Presuming card is present.
+*/
+#if defined(CONFIG_T4240QDS)
+   if (!(readb(QIXIS_BASE + QIXIS_BRDCFG5)  QIXIS_MUX_SDHC) ||
+   IS_SVR_REV(get_svr(), 1, 0))
+   return 1;
+#endif

I just don't like this. It's a bunch of completely board specific code dropped
in the middle of a generic driver.

Rework to something like this:

In the board file (T4240QDS)

#define CONFIG_ESDHC_DETECT_QUIRK \
(!(readb(QIXIS_BASE + QIXIS_BRDCFG5)  QIXIS_MUX_SDHC) || \
IS_SVR_REV(get_svr(), 1, 0)))

And do this in the driver:

#ifdef CONFIG_ESDHC_DETECT_QUIRK
if (CONFIG_ESDHC_DETECT_QUIRK)
return 1;
#endif

Do the same to all other quirks please.


while (!(esdhc_read32(regs-prsstat)  PRSSTAT_CINS)  --timeout)
udelay(1000);

diff --git a/include/configs/T4240QDS.h b/include/configs/T4240QDS.h
index c96df54..955e6b9 100644
--- a/include/configs/T4240QDS.h
+++ b/include/configs/T4240QDS.h
@@ -165,6 +165,8 @@ unsigned long get_board_ddr_clk(void);
#define QIXIS_RCFG_CTL_RECONFIG_IDLE0x20
#define QIXIS_RCFG_CTL_RECONFIG_START   0x21
#define QIXIS_RCFG_CTL_WATCHDOG_ENBLE   0x08
+#define QIXIS_BRDCFG5  0x55
+#define QIXIS_MUX_SDHC 2
#define QIXIS_BASE_PHYS (0xfull | QIXIS_BASE)

#define CONFIG_SYS_CSPR3_EXT(0xf)
--
1.8.4.1



Regards

-- Pantelis





___
U-Boot mailing list
U-Boot@lists.denx.de
http://lists.denx.de/mailman/listinfo/u-boot


[U-Boot] [PATCH 1/3 V2] esdhc: Workaround for card can't be detected on T4240QDS

2013-12-10 Thread Haijun Zhang
Card detection pin is ineffective on T4240QDS Rev1.0.
There are two cards can be connected to board.
1. eMMC card is built-in board, can not be removed. so
   For eMMC card it is always there.
2. Card detecting pin is functional for SDHC card in Rev2.0.

This workaround force sdhc driver scan and initialize the card
regardless of whether the card is inserted or not in case Rev1.0.

Signed-off-by: Haijun Zhang haijun.zh...@freescale.com
---
changes for V2:
- Add the judgement condition for this broken card

 drivers/mmc/fsl_esdhc.c| 9 +
 include/configs/T4240QDS.h | 2 ++
 2 files changed, 11 insertions(+)

diff --git a/drivers/mmc/fsl_esdhc.c b/drivers/mmc/fsl_esdhc.c
index 134a02d..b3b5f37 100644
--- a/drivers/mmc/fsl_esdhc.c
+++ b/drivers/mmc/fsl_esdhc.c
@@ -548,6 +548,15 @@ static int esdhc_getcd(struct mmc *mmc)
struct fsl_esdhc *regs = (struct fsl_esdhc *)cfg-esdhc_base;
int timeout = 1000;
 
+   /*
+* Card detecting pin is not functional on T4240QDS with rev 1.0 SoC.
+* Presuming card is present.
+*/
+#if defined(CONFIG_T4240QDS)
+   if (!(readb(QIXIS_BASE + QIXIS_BRDCFG5)  QIXIS_MUX_SDHC) ||
+   IS_SVR_REV(get_svr(), 1, 0))
+   return 1;
+#endif
while (!(esdhc_read32(regs-prsstat)  PRSSTAT_CINS)  --timeout)
udelay(1000);
 
diff --git a/include/configs/T4240QDS.h b/include/configs/T4240QDS.h
index c96df54..955e6b9 100644
--- a/include/configs/T4240QDS.h
+++ b/include/configs/T4240QDS.h
@@ -165,6 +165,8 @@ unsigned long get_board_ddr_clk(void);
 #define QIXIS_RCFG_CTL_RECONFIG_IDLE   0x20
 #define QIXIS_RCFG_CTL_RECONFIG_START  0x21
 #define QIXIS_RCFG_CTL_WATCHDOG_ENBLE  0x08
+#define QIXIS_BRDCFG5  0x55
+#define QIXIS_MUX_SDHC 2
 #define QIXIS_BASE_PHYS(0xfull | QIXIS_BASE)
 
 #define CONFIG_SYS_CSPR3_EXT   (0xf)
-- 
1.8.4.1


___
U-Boot mailing list
U-Boot@lists.denx.de
http://lists.denx.de/mailman/listinfo/u-boot