Skip to contentSkip to conversation

mmc: sdhci-s3c: add quirk about BROKEN_ADMA_ZEROLEN_DESC

PATCH Applied Jaehoon Chung 4 participants 4 messages Jul 12, 2011 – Jul 28, 2011

Subsystems (3)
lore
Share & tools
lore

Jaehoon Chung

author maintainer
#0 lore raw

PATCH 1/1 mmc: sdhci-s3c: add quirk about BROKEN_ADMA_ZEROLEN_DESC

This patch is added the quirk for Samsung SoCs.

Samsung SoCs need to set QUIRK_BROKEN_ADMA_ZEROLEN_DESC. (If ADMA operation is more than 65535, maybe set by zero.)

---
 drivers/mmc/host/sdhci-s3c.c |    3 +++
 1 files changed, 3 insertions(+), 0 deletions(-)
drivers/mmc/host/sdhci-s3c.c +3 -0
index 460ffaf..03da44a 100644
@@ -502,6 +502,9 @@ static int __devinit sdhci_s3c_probe(struct platform_device *pdev)
 	/* This host supports the Auto CMD12 */
 	host->quirks |= SDHCI_QUIRK_MULTIBLOCK_READ_ACMD12;
 
+	/* Samsung SoCs need BROKEN_ADMA_ZEROLEN_DESC */
+	host->quirks |= SDHCI_QUIRK_BROKEN_ADMA_ZEROLEN_DESC;
+
 	if (pdata->cd_type == S3C_SDHCI_CD_NONE ||
 	    pdata->cd_type == S3C_SDHCI_CD_PERMANENT)
 		host->quirks |= SDHCI_QUIRK_BROKEN_CARD_DETECTION;
#1 lore raw

Hi,

I don't know meaning of QUIRK_BROKEN_ADMA_ZEROLEN_DESC exactly. Is there any problem in ADMA descriptors?
Could you explain for this?

The following table is for ADMA length field from Host controller spec. The maximum data length descriptor line is less than 64KiB. Samsung also conforms this.
----------------------------------
Length Field | Value of Length
----------------------------------

0000h		| 65536 bytes
0001h		| 1 byte
0002h		| 2bytes

... | ...
FFFFh | 65535 bytes
----------------------------------

Best regards,
Seungwon Jeon.

Quoted 30 lines · Jaehoon Chung

This patch is added the quirk for Samsung SoCs.

Samsung SoCs need to set QUIRK_BROKEN_ADMA_ZEROLEN_DESC. (If ADMA operation is more than 65535, maybe set by zero.)

---
 drivers/mmc/host/sdhci-s3c.c |    3 +++
 1 files changed, 3 insertions(+), 0 deletions(-)
drivers/mmc/host/sdhci-s3c.c +3 -0
index 460ffaf..03da44a 100644
@@ -502,6 +502,9 @@ static int __devinit sdhci_s3c_probe(struct
 platform_device *pdev)
 	/* This host supports the Auto CMD12 */
 	host->quirks |= SDHCI_QUIRK_MULTIBLOCK_READ_ACMD12;
 
+	/* Samsung SoCs need BROKEN_ADMA_ZEROLEN_DESC */
+	host->quirks |= SDHCI_QUIRK_BROKEN_ADMA_ZEROLEN_DESC;
+
 	if (pdata->cd_type == S3C_SDHCI_CD_NONE ||
 	    pdata->cd_type == S3C_SDHCI_CD_PERMANENT)

host->quirks |= SDHCI_QUIRK_BROKEN_CARD_DETECTION;
--
To unsubscribe from this list: send the line "unsubscribe linux-mmc" in the body of a message to [email protected]
More majordomo info at http://vger.kernel.org/majordomo-info.html

#2 lore raw

One use for this is as follows:

Without the QUIRK
imagine there is one SG descriptor passed in and it is properly aligned etc. The prepare_data function (and friends) will change this to 2 ADMA descriptors. The first descriptor will point to the data / length passed in via the SG descriptor. The second descriptor will say END OF CHAIN.

With the Quirk
Only one ADMA descriptor will be used. It will contain the pointer to the data/length and be marked END OF CHAIN.

The quirk save a needless fetch.

Philip

Quoted 58 lines · Seungwon Jeon

Hi,

I don't know meaning of QUIRK_BROKEN_ADMA_ZEROLEN_DESC exactly. Is there any problem in ADMA descriptors?
Could you explain for this?

The following table is for ADMA length field from Host controller spec. The maximum data length descriptor line is less than 64KiB. Samsung also conforms this.
----------------------------------
Length Field | Value of Length
----------------------------------

0000h		| 65536 bytes
0001h		| 1 byte
0002h		| 2bytes

... | ...
FFFFh | 65535 bytes
----------------------------------

Best regards,
Seungwon Jeon.

Quoted 26 lines · Jaehoon Chung

This patch is added the quirk for Samsung SoCs.

Samsung SoCs need to set QUIRK_BROKEN_ADMA_ZEROLEN_DESC. (If ADMA operation is more than 65535, maybe set by zero.)

---
drivers/mmc/host/sdhci-s3c.c | 3 +++

1 files changed, 3 insertions(+), 0 deletions(-)
drivers/mmc/host/sdhci-s3c.c +3 -0
index 460ffaf..03da44a 100644
@@ -502,6 +502,9 @@ static int __devinit sdhci_s3c_probe(struct
 platform_device *pdev)
 	/* This host supports the Auto CMD12 */
 	host->quirks |= SDHCI_QUIRK_MULTIBLOCK_READ_ACMD12;
 
+	/* Samsung SoCs need BROKEN_ADMA_ZEROLEN_DESC */
+	host->quirks |= SDHCI_QUIRK_BROKEN_ADMA_ZEROLEN_DESC;
+
 	if (pdata->cd_type == S3C_SDHCI_CD_NONE ||
 	    pdata->cd_type == S3C_SDHCI_CD_PERMANENT)
		host->quirks |= SDHCI_QUIRK_BROKEN_CARD_DETECTION;
Quoted 4 lines

--
To unsubscribe from this list: send the line "unsubscribe linux-mmc" in the body of a message to [email protected]
More majordomo info at http://vger.kernel.org/majordomo-info.html

--
To unsubscribe from this list: send the line "unsubscribe linux-mmc" in the body of a message to [email protected]
More majordomo info at http://vger.kernel.org/majordomo-info.html

Applied
#3 lore raw
In reply to Jaehoon Chung

Hi Jaehoon,

Quoted 16 lines · Jaehoon Chung

This patch is added the quirk for Samsung SoCs.

Samsung SoCs need to set QUIRK_BROKEN_ADMA_ZEROLEN_DESC. (If ADMA operation is more than 65535, maybe set by zero.)

---
 drivers/mmc/host/sdhci-s3c.c |    3 +++
 1 files changed, 3 insertions(+), 0 deletions(-)
drivers/mmc/host/sdhci-s3c.c +0 -0
index 460ffaf..03da44a 100644

drivers/mmc/host/sdhci-s3c.c static int __devinit sdhci_s3c_probe(struct platform_device *pdev) · line 510

Quoted 9 lines
drivers/mmc/host/sdhci-s3c.c +3 -0
@@ -502,6 +502,9 @@ static int __devinit sdhci_s3c_probe(struct platform_device *pdev)
 	/* This host supports the Auto CMD12 */
 	host->quirks |= SDHCI_QUIRK_MULTIBLOCK_READ_ACMD12;
 
+	/* Samsung SoCs need BROKEN_ADMA_ZEROLEN_DESC */
+	host->quirks |= SDHCI_QUIRK_BROKEN_ADMA_ZEROLEN_DESC;
+
 	if (pdata->cd_type == S3C_SDHCI_CD_NONE ||
 	    pdata->cd_type == S3C_SDHCI_CD_PERMANENT)
 		host->quirks |= SDHCI_QUIRK_BROKEN_CARD_DETECTION;

Pushed to mmc-next for 3.1, thanks.

- Chris.

Signature · 2 lines
Chris Ball   <[email protected]>   <http://printf.net/>
One Laptop Per Child