mirror of
				git://git.openwrt.org/openwrt/openwrt.git
				synced 2025-11-03 14:34:27 -05:00 
			
		
		
		
	
		
			
				
	
	
		
			46 lines
		
	
	
		
			1.6 KiB
		
	
	
	
		
			Diff
		
	
	
	
	
	
			
		
		
	
	
			46 lines
		
	
	
		
			1.6 KiB
		
	
	
	
		
			Diff
		
	
	
	
	
	
From 29f6589140a10ece8c1d73f58043ea5b3473ab3e Mon Sep 17 00:00:00 2001
 | 
						|
From: Wright Feng <wright.feng@cypress.com>
 | 
						|
Date: Wed, 21 Nov 2018 07:53:52 +0000
 | 
						|
Subject: [PATCH] brcmfmac: disable command decode in sdio_aos
 | 
						|
 | 
						|
AOS is a part of the SDIOD core that becomes active when the rest of
 | 
						|
SDIOD is sleeping to keep SDIO bus alive responding to reduced set of
 | 
						|
commands.
 | 
						|
 | 
						|
Transaction between AOS and SDIOD is not protected, and if cmd 52 is
 | 
						|
received in AOS and in the middle of response state changed from AOS to
 | 
						|
SDIOD, response is corrupted and it causes to SDIO Host controller to
 | 
						|
hang.
 | 
						|
 | 
						|
Command decode for below chips are disabled in this commit:
 | 
						|
 - 4339
 | 
						|
 - 4345
 | 
						|
 - 4354
 | 
						|
 - 4373
 | 
						|
 | 
						|
Reviewed-by: Arend van Spriel <arend.vanspriel@broadcom.com>
 | 
						|
Signed-off-by: Wright Feng <wright.feng@cypress.com>
 | 
						|
Signed-off-by: Double Lo <double.lo@cypress.com>
 | 
						|
Signed-off-by: Madhan Mohan R <madhanmohan.r@cypress.com>
 | 
						|
Signed-off-by: Chi-Hsien Lin <chi-hsien.lin@cypress.com>
 | 
						|
Signed-off-by: Kalle Valo <kvalo@codeaurora.org>
 | 
						|
---
 | 
						|
 drivers/net/wireless/broadcom/brcm80211/brcmfmac/sdio.c | 6 +++++-
 | 
						|
 1 file changed, 5 insertions(+), 1 deletion(-)
 | 
						|
 | 
						|
--- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/sdio.c
 | 
						|
+++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/sdio.c
 | 
						|
@@ -3354,7 +3354,11 @@ err:
 | 
						|
 
 | 
						|
 static bool brcmf_sdio_aos_no_decode(struct brcmf_sdio *bus)
 | 
						|
 {
 | 
						|
-	if (bus->ci->chip == CY_CC_43012_CHIP_ID)
 | 
						|
+	if (bus->ci->chip == CY_CC_43012_CHIP_ID ||
 | 
						|
+	    bus->ci->chip == CY_CC_4373_CHIP_ID ||
 | 
						|
+	    bus->ci->chip == BRCM_CC_4339_CHIP_ID ||
 | 
						|
+	    bus->ci->chip == BRCM_CC_4345_CHIP_ID ||
 | 
						|
+	    bus->ci->chip == BRCM_CC_4354_CHIP_ID)
 | 
						|
 		return true;
 | 
						|
 	else
 | 
						|
 		return false;
 |