mirror of
				https://xff.cz/git/u-boot/
				synced 2025-10-31 10:26:10 +01:00 
			
		
		
		
	mmc: sdhci: add the quirk for broken r1b response
When response type is R1b, mask value is added the SDHCI_INT_DAT_END. but in while(), didn't check that flag. So sdhci controller didn't work fine. CMD6 didn't always complete. So add the quirks for broken r1b response and add the timeout value to prevent the infinite loop. Signed-off-by: Jaehoon Chung <jh80.chung@samsung.com> Signed-off-by: Kyungmin Park <kyungmin.park@samsung.com> Acked-by: Lei Wen<leiwen@marvell.com>
This commit is contained in:
		
				
					committed by
					
						 Andy Fleming
						Andy Fleming
					
				
			
			
				
	
			
			
			
						parent
						
							e7205905e7
						
					
				
				
					commit
					3a6383207b
				
			| @@ -128,6 +128,7 @@ int sdhci_send_command(struct mmc *mmc, struct mmc_cmd *cmd, | ||||
| 	int trans_bytes = 0, is_aligned = 1; | ||||
| 	u32 mask, flags, mode; | ||||
| 	unsigned int timeout, start_addr = 0; | ||||
| 	unsigned int retry = 10000; | ||||
|  | ||||
| 	/* Wait max 10 ms */ | ||||
| 	timeout = 10; | ||||
| @@ -210,8 +211,19 @@ int sdhci_send_command(struct mmc *mmc, struct mmc_cmd *cmd, | ||||
| 		stat = sdhci_readl(host, SDHCI_INT_STATUS); | ||||
| 		if (stat & SDHCI_INT_ERROR) | ||||
| 			break; | ||||
| 		if (--retry == 0) | ||||
| 			break; | ||||
| 	} while ((stat & mask) != mask); | ||||
|  | ||||
| 	if (retry == 0) { | ||||
| 		if (host->quirks & SDHCI_QUIRK_BROKEN_R1B) | ||||
| 			return 0; | ||||
| 		else { | ||||
| 			printf("Timeout for status update!\n"); | ||||
| 			return TIMEOUT; | ||||
| 		} | ||||
| 	} | ||||
|  | ||||
| 	if ((stat & (SDHCI_INT_ERROR | mask)) == mask) { | ||||
| 		sdhci_cmd_done(host, cmd); | ||||
| 		sdhci_writel(host, mask, SDHCI_INT_STATUS); | ||||
|   | ||||
| @@ -216,6 +216,7 @@ | ||||
|  */ | ||||
| #define SDHCI_QUIRK_32BIT_DMA_ADDR	(1 << 0) | ||||
| #define SDHCI_QUIRK_REG32_RW		(1 << 1) | ||||
| #define SDHCI_QUIRK_BROKEN_R1B		(1 << 2) | ||||
|  | ||||
| /* to make gcc happy */ | ||||
| struct sdhci_host; | ||||
|   | ||||
		Reference in New Issue
	
	Block a user