> Date: Tue, 28 Apr 2020 23:27:00 +0200
> From: Patrick Wildt <patr...@blueri.se>
> 
> On Tue, Apr 28, 2020 at 11:16:43PM +0200, Patrick Wildt wrote:
> > Hi,
> > 
> > on my i.MX8MM EVK there's a ath10k-based WiFi chip which we
> > unfortunately do not support (yet?).  But the SD/MMC CIS parser
> > complains:
> > 
> > sdmmc0: CIS parse error at 4136, tuple code 0x14, length 0
> > manufacturer 0x0271, product 0x0701 at sdmmc0 function 1 not configured
> > 
> > It's not a transmission bug though, since I saw prints from a Linux
> > dmesg on the web[0] stating something similar:
> > 
> > <4>mmc0: queuing unknown CIS tuple 0x01 (3 bytes)
> > <4>mmc0: queuing unknown CIS tuple 0x1a (5 bytes)
> > <4>mmc0: queuing unknown CIS tuple 0x1b (8 bytes)
> > <4>mmc0: queuing unknown CIS tuple 0x14 (0 bytes)
> > 
> > I guess the ath10k-Chips use some vendor-specific tuples in the CIS
> > structure.  The thing that our CIS parser complains about is the tuple
> > without a length.
> > 
> > Section 16 of the SDIO Simplified Specification 3.0[1] describes the CIS
> > formats, with Section 16.2 describing the Basic Tuple Format.  What our
> > code calls "tpllen", the tuple body length, is called "link field" in
> > the specification.
> > 
> > The specification explicitly says, that a empty tuple body is fine, by
> > saying: "If the link field is 0, then the tuple body is empty."
> > 
> > Thus I propose that instead of complaining about that tuple, we just
> > continue our job.  I guess sometimes the existance of a code is infor-
> > mation enough.
> > 
> > ok?
> > 
> > Patrick
> > 
> > [0] 
> > https://linuxlists.cc/l/9/linux-wireless/t/3226749/ath10k-sdio:_failed_to_load_firmware
> > [1] 
> > https://www.sdcard.org/downloads/pls/pdf/index.php?p=PartE1_SDIO_Simplified_Specification_Ver3.00.jpg&f=PartE1_SDIO_Simplified_Specification_Ver3.00.pdf&e=EN_SSE1
> 
> Actually it would be even better to just remove the check, since
> then we would fall into the default case which, given SDMMC_DEBUG
> is on, also lets us know of the unknown tuple:
> 
> sdmmc0: unknown tuple code 0x1, length 3
> sdmmc0: unknown tuple code 0x22, length 4
> sdmmc0: unknown tuple code 0x1a, length 5
> sdmmc0: unknown tuple code 0x1b, length 8
> sdmmc0: unknown tuple code 0x14, length 0
> sdmmc0: unknown tuple code 0x22, length 42
> sdmmc0: unknown tuple code 0x80, length 1
> sdmmc0: unknown tuple code 0x81, length 1
> sdmmc0: unknown tuple code 0x82, length 1
> 
> The individual switch-cases are checking tpllen properly, so there
> is no harm.
> 
> ok?

ok kettenis@

> diff --git a/sys/dev/sdmmc/sdmmc_cis.c b/sys/dev/sdmmc/sdmmc_cis.c
> index 21cf530b24f..70e5b6283a7 100644
> --- a/sys/dev/sdmmc/sdmmc_cis.c
> +++ b/sys/dev/sdmmc/sdmmc_cis.c
> @@ -76,12 +76,6 @@ sdmmc_read_cis(struct sdmmc_function *sf, struct sdmmc_cis 
> *cis)
>                       continue;
>  
>               tpllen = sdmmc_io_read_1(sf0, reg++);
> -             if (tpllen == 0) {
> -                     printf("%s: CIS parse error at %d, "
> -                         "tuple code %#x, length %d\n",
> -                         DEVNAME(sf->sc), reg, tplcode, tpllen);
> -                     break;
> -             }
>  
>               switch (tplcode) {
>               case SD_IO_CISTPL_FUNCID:
> 
> 

Reply via email to