[RFC PATCH] brcmfmac: add 43751 SDIO ids and initialization
Marc Gonzalez
marc.w.gonzalez at free.fr
Mon Mar 13 07:41:13 PDT 2023
On 13/03/2023 14:55, Marc Gonzalez wrote:
> On 09/03/2023 18:51, Marc Gonzalez wrote:
>
>> On 09/03/2023 15:29, Ulf Hansson wrote:
>>
>>> To narrow down the problem, I would start by preventing the WiFi
>>> driver from being insmoded. To make sure it doesn't affect the SDIO
>>> card detection process.
>>>
>>> The point is, the SDIO card should be detected properly, no matter
>>> whether there is a corresponding SDIO func driver (WiFi driver)
>>> available for it. For a detected SDIO/eMMC/SD card, mmc_add_card()
>>> prints a message about the card in the log during initialization. It
>>> could look like the below print, for example:
>>>
>>> "mmc2: new ultra high speed SDR104 SDIO card at address 0001".
>>
>> OK, I built the WiFi driver as a module which is NOT loaded at boot time.
>
> Still trying to bisect this heisenbug into submission... :(
>
> So far, I've pared it down to mmc_attach_sdio()
>
> When probe WORKS, mmc_attach_sdio() returns 0.
> When probe FAILS, mmc_attach_sdio() returns ETIMEDOUT
> via mmc_send_io_op_cond(host, 0, &ocr);
>
> Wrapping mmc_send_io_op_cond() in a loop
> makes it work on the second try.
>
> Would appreciate additional guidance. Am mostly stabbing in the dark :)
Caught the race "in the act" (in flagrante delicto)
Using this patch:
diff --git a/drivers/mmc/core/sdio.c b/drivers/mmc/core/sdio.c
index f64b9ac76a5cd..eb2c95721e32c 100644
--- a/drivers/mmc/core/sdio.c
+++ b/drivers/mmc/core/sdio.c
@@ -1204,11 +1204,24 @@ int mmc_attach_sdio(struct mmc_host *host)
struct mmc_card *card;
WARN_ON(!host->claimed);
-
+ //printk("YO %s: %s", __func__, mmc_hostname(host));
+ //msleep(500);
+
+#if 1
+ for (i = 0; i < 10; ++i) {
+ err = mmc_send_io_op_cond(host, 0, &ocr);
+ printk("YO %s", mmc_hostname(host));
+ if (!err) goto all_good;
+ }
+ printk("%s failed with %d", __func__, err);
+ return err;
+#else
err = mmc_send_io_op_cond(host, 0, &ocr);
if (err)
return err;
+#endif
+all_good:
mmc_attach_bus(host, &mmc_sdio_ops);
if (host->ocr_avail_sdio)
host->ocr_avail = host->ocr_avail_sdio;
Two boots of the same kernel:
/* THIS RUN PROBES ONCE */
[ 0.846591] loop: module loaded
[ 0.848079] g12a-mdio_mux ff64c000.mdio-multiplexer: Driver g12a-mdio_mux requests probe deferral
[ 0.853901] usbcore: registered new interface driver usb-storage
[ 0.859421] input: gpio-keys-polled as /devices/platform/gpio-keys-polled/input/input0
[ 0.867880] meson-vrtc ff8000a8.rtc: registered as rtc0
[ 0.872148] meson-vrtc ff8000a8.rtc: setting system clock to 1970-01-01T00:00:00 UTC (0)
[ 0.880251] i2c_dev: i2c /dev entries driver
[ 0.886780] psci-cpuidle: probe of psci-cpuidle rejects match -19
[ 0.891279] ledtrig-cpu: registered to indicate activity on CPUs
[ 0.891505] meson-gx-mmc ffe03000.sd: allocated mmc-pwrseq
[ 0.896644] meson-sm: secure-monitor enabled
[ 0.906242] hid: raw HID events driver (C) Jiri Kosina
[ 0.911506] usbcore: registered new interface driver usbhid
[ 0.916638] usbhid: USB HID core driver
[ 0.922897] optee: probing for conduit method.
[ 0.924837] optee: revision 2.4
[ 0.925770] optee: initialized driver
[ 0.932832] NET: Registered PF_PACKET protocol family
[ 0.936627] Key type dns_resolver registered
[ 0.941251] YO mmc2
[ 0.945287] registered taskstats version 1
[ 0.946989] Loading compiled-in X.509 certificates
[ 1.074273] sdio_read_cis: vendor=2d0 dev=aae7
[ 1.074824] sdio_read_cis: vendor=2d0 dev=aae7
[ 1.074862] mmc2: new ultra high speed SDR50 SDIO card at address 0001
/* THIS RUN REQUIRES TWO PROBES */
[ 0.855536] loop: module loaded
[ 0.857064] g12a-mdio_mux ff64c000.mdio-multiplexer: Driver g12a-mdio_mux requests probe deferral
[ 0.862952] usbcore: registered new interface driver usb-storage
[ 0.868480] input: gpio-keys-polled as /devices/platform/gpio-keys-polled/input/input0
[ 0.877000] meson-vrtc ff8000a8.rtc: registered as rtc0
[ 0.881206] meson-vrtc ff8000a8.rtc: setting system clock to 1970-01-01T00:00:00 UTC (0)
[ 0.889310] i2c_dev: i2c /dev entries driver
[ 0.895850] psci-cpuidle: probe of psci-cpuidle rejects match -19
[ 0.900536] meson-gx-mmc ffe03000.sd: allocated mmc-pwrseq
[ 0.905438] ledtrig-cpu: registered to indicate activity on CPUs
[ 0.911212] meson-sm: secure-monitor enabled
[ 0.915235] hid: raw HID events driver (C) Jiri Kosina
[ 0.920576] usbcore: registered new interface driver usbhid
[ 0.925700] usbhid: USB HID core driver
[ 0.931999] optee: probing for conduit method.
[ 0.933912] optee: revision 2.4
[ 0.934875] optee: initialized driver
[ 0.941567] YO mmc2
[ 0.941764] NET: Registered PF_PACKET protocol family
[ 0.942884] YO mmc2
[ 0.947738] Key type dns_resolver registered
[ 0.958079] registered taskstats version 1
[ 0.958190] Loading compiled-in X.509 certificates
[ 1.068023] g12a-mdio_mux ff64c000.mdio-multiplexer: Driver g12a-mdio_mux requests probe deferral
[ 1.072434] g12a-mdio_mux ff64c000.mdio-multiplexer: Driver g12a-mdio_mux requests probe deferral
[ 1.072766] meson-gx-mmc ffe07000.mmc: allocated mmc-pwrseq
[ 1.081297] cfg80211: Loading compiled-in X.509 certificates for regulatory database
[ 1.101201] sdio_read_cis: vendor=2d0 dev=aae7
[ 1.101755] sdio_read_cis: vendor=2d0 dev=aae7
[ 1.101794] mmc2: new ultra high speed SDR50 SDIO card at address 0001
NOTA BENE: for mmc1, in both runs, kernel probes 10 times and fails with:
[ 1.265231] mmc_attach_sdio failed with -110
[ 1.373006] mmc1: new HS200 MMC card at address 0001
[ 1.377242] mmcblk1: mmc1:0001 SCA16G 14.7 GiB
[ 1.383718] mmcblk1boot0: mmc1:0001 SCA16G 4.00 MiB
[ 1.387257] mmcblk1boot1: mmc1:0001 SCA16G 4.00 MiB
[ 1.391912] mmcblk1rpmb: mmc1:0001 SCA16G 4.00 MiB, chardev (246:0)
mmc_attach_sdio() fails but mmc_add_card() succeeds anyway...?
Confused.
mmc_attach_sdio() doesn't call mmc_add_card() if it exits prematurely.
Regards
More information about the linux-amlogic
mailing list