Errors in dmesg when trying to bring up WiFi using SDIO

Hi. We have a custom board for the Jetson Nano production module. I am trying to bring up WiFi using SDIO interface.

We have a m.2 to micro-sd adapter on which we have connected the m.2 WiFi module. This adapter is powered using a micro-usb cable that is plugged into one of the USB ports on the custom board.

We have routed the Command, Clock and DATA lines to the SDIO test pads on the custom board.

I have edited the pinmux sheet to use the SDMMC3 for correct functionality.

These are the changes relevant to SDIO that I have made to the kconfig:
CONFIG_MMC=y
CONFIG_MMC_DEBUG=y

I have referred to this post for the device tree changes: Link to post
I have also made the following changes in the device tree:

sdhci2: sdhci@700b0400 {
		status = "okay";
		id = <0>;
		nvidia,is-sdio;
		fixed-clock-freq = <25500000 25500000 24000000 47000000 25000000 50000000 100000000 208000000 0 0 0>;
		max-clk-limit = <208000000>;
		uhs-mask = <0x60>;
		/delete-property/ ddr-clk-limit;
		/delete-property/ iommus;
		only-1-8-v;
		nvidia,disable-rtpm;
		force-non-removable-rescan;
		/delete-property/ cd-inverted;
		/delete-property/ wp-inverted;
		built-in;
		type_1ym_wifi@1{
			compatible = "marvell,sd8997";
			reg=<1>;
		};
	};

After boot-up if I checked the dmesg logs, they are flooded with mmc debug messages. I am attaching the dmesg logs with this post.

dmesg_mmc_logs.txt (112.0 KB)

Going through the logs, the initialization of the card goes into a loop, where it keeps on trying the frequencies 100000Hz, 200000Hz, 300000Hz and 400000Hz over and over. For each frequency it will show this message: [ 443.310241] mmc1: mmc_rescan_try_freq: trying to init card at 200000 Hz

It also always gives the following error: [ 443.319970] sdhci-tegra sdhci-tegra.2: tegra_sdhci_signal_voltage_switch_post: error -19 in comp drvup settings at 1.8v

If I load the WiFi drivers, the WiFi interface isn’t bought up. I am stuck here and would appreciate some help. Please let me know if I need to provide any more information.

I have tried turning some properties on and off. This is my latest sdhci2 node:

sdhci2: sdhci@700b0400 {
		status = "okay";
		id = <0>;
		nvidia,is-sdio;
		/*fixed-clock-freq = <200000000 25500000 24000000 47000000 25000000 50000000 100000000 200000000 0 0 0>;*/
		max-clk-limit = <200000000>;
		uhs-mask = <0x68>;
		only-1-8-v;
		nvidia,disable-rtpm;
		force-non-removable-rescan;
		/delete-property/ ddr-clk-limit;
		/delete-property/ iommus;
		/delete-property/ cd-inverted;
		/delete-property/ wp-inverted;
		nvidia,vqmmc-always-on;
		built-in;
		type_1ym_wifi@1{
			compatible = "marvell,sd8997";
			reg=<1>;
		};
	};

I also referred this post and turned off no-sdio which was being injected into the node by the plugin dtsi file.

The result is still the same. This is the output I get on the UART Debug port. This is the whole dmesg log:
dmesg_op_jul8_14_40.txt (116.6 KB)

[    9.846373] mmc1: mmc_rescan_try_freq: trying to init card at 400000 Hz
[    9.913206] mmc1: mmc_rescan_try_freq: trying to init card at 300000 Hz
[    9.972803] mmc1: mmc_rescan_try_freq: trying to init card at 200000 Hz
[   10.033633] mmc1: mmc_rescan_try_freq: trying to init card at 100000 Hz
[   11.126433] mmc1: mmc_rescan_try_freq: trying to init card at 400000 Hz
[   11.185491] mmc1: mmc_rescan_try_freq: trying to init card at 300000 Hz
[   11.248457] mmc1: mmc_rescan_try_freq: trying to init card at 200000 Hz
[   11.308420] mmc1: mmc_rescan_try_freq: trying to init card at 100000 Hz

This is an endless loop. There is function mmc_rescan in the file kernel-source-tree/drivers/mmc/core/core.c that has a for loop in it. This for loop calls the function mmc_rescan_try_freq with the above frequencies as its parameters.


The above table is from the datasheet for the Type 1YM WiFi M.2 Module.
I edited the fixed-clock-freq to have the above frequencies for the respective speed modes. But doing so didn’t help. Infact I can comment out the fixed-clock-freq property and still the result will be the same with the mmc_rescan_try_freq loop.

The module is powered on through a USB 3.0 port, but adding nvidia,vqmmc-always-on also didn’t help.

I have some questions regarding the properties in the device tree sdhci-tegra.txt document:
sdhci-tegra.txt (5.2 KB)

  1. fixed-clock-freq:
  • What is the ID MODE and what frequencies can the ID MODE be assigned?
  • The remaining values are MMC_TIMING_LEGACY, MMC_TIMING_MMC_HS, MMC_TIMING_UHS_SDR104. If some of these modes are not supported by the WiFi module, do these have to be set to 0? Also my device lists max frequency for SDR104 as 208MHz. So do I have to set the frequency for it as 208000000?

You still need to tell the board which regulator is your vmmc-supply and vqmmc-supply are using.

The power control is the basic one and should be checked first.

Hi Wayne,

Our setup is such that we are powering the WiFi card externally. I found the below in the device tree binding documentation.

MMC power
---------

Controllers may implement power control from both the connected cards and
the IO signaling (for example to change to high-speed 1.8V signalling). If
the system supports this, then the following two properties should point
to valid regulator nodes:

- vqmmc-supply: supply node for IO line power
- vmmc-supply: supply node for card's power

Because the card is powered externally, I changed added the property nvidia,vmmc-always-on to the sdhci2 node. But tegra210-porg-power-tree-p3448-0000-a00.dtsi sets vmmc-supply = <&p3448_vdd_3v3_sys>. Is there a need to put a dummy regulator here because the card is power externally?

I also removed vqmmc-supply = <&max77620_ldo6> from an override in tegra210-porg-plugin-manager.dtsi and added vqmcc-supply = <&max77620_sd3> in the sdhci2 node.

The max77620_sd3 is 1.8v regulator.

After these changes, the mmc1 logs no longer show the mmc_rescan_try_freq go into an endless loop. But I do not see an init message for the WiFi card like you mentioned in you post here: WiFi bring up on custom carrier board - #12 by WayneWWW

Loading the driver manually, the mlan0 interface for the WiFi module also isn’t shown.

I am attaching the latest .dtb converted to .dts and the kernel bootlog here.
jul15th_wifi_on_sdio_10.txt (56.1 KB)
jul15th_10.dts (284.5 KB)

Yes, you still need to give a dummy regulator to it.

Hi Wayne,

I have added the following dummy regulator:

        regulators {
		dummy_regulator_sdmmc3: regulator@11 {
			compatible = "regulator-fixed";
			reg = <11>;
			regulator-name = "dummy_regulator_sdmmc3";
			regulator-min-microvolt = <1800000>;
			regulator-max-microvolt = <1800000>;
			regulator-always-on;
		};
	};

Also, assigned the same to vmmc-supply property:

        sdhci2: sdhci@700b0400 {
		status = "okay";
		id = <0>;
		nvidia,is-sdio;
	        fixed-clock-freq = <25500000 25500000 24000000 47000000 25000000 50000000 100000000 200000000 50000000 0 0>;
		max-clk-limit = <208000000>;
		ddr-clk-limit = <50000000>;
		uhs-mask = <0x60>;
		mmc-ocr-mask = <0>;
		vqmcc-supply = <&max77620_sd3>;
		vmmc-supply = <&dummy_regulator_sdmmc3>;
		nvidia,vmmc-always-on;
		nvidia,vqmmc-always-on;
		only-1-8-v;
		nvidia,disable-rtpm;
		force-non-removable-rescan;
		no-sd;
		built-in;
		keep-power-in-suspend;
		non-removable;
		/delete-property/ cap-sd-highspeed;
		/delete-property/ cap-mmc-highspeed;
		/delete-property/ mmc-ddr-1_8v;
		/delete-property/ iommus;
		// cap-sdio-irq;
		sd-uhs-sdr12;
		sd-uhs-sdr25;
		sd-uhs-sdr50;
		sd-uhs-sdr104;
		sd-uhs-ddr50;
		/delete-property/ pwrdet-support;
		type_1ym_wifi@1{
			compatible = "marvell,sd8997";
			reg=<1>;
		};
	};

Result is the same though. In the bootlog I can see the mmc_rescan_try_freq function being called 4 times at frequencies 400KHz, 300KHz, 200KHz and 100KHz after which there are no debug messages from mmc1 which corresponds to sdhci2 / SDMMC3.

I do see this register dump in the bootlogs on UART debug port. Don’t know what to make of this:

[    4.825992] sdhci-tegra sdhci-tegra.2: Client registration for eMC Successful
[    4.828427] sdhci: =========== REGISTER DUMP (mmc1)===========
[    4.828436] sdhci: Sys addr: 0x00000000 | Version:  0x00000303
[    4.828442] sdhci: Blk size: 0x00000000 | Blk cnt:  0x00000000
[    4.828447] sdhci: Argument: 0x00000000 | Trn mode: 0x00000000
[    4.828453] sdhci: Present:  0x01fb00f0 | Host ctl: 0x00000000
[    4.828459] sdhci: Power:    0x00000000 | Blk gap:  0x00000000
[    4.828465] sdhci: Wake-up:  0x00000000 | Clock:    0x00000000
[    4.828471] sdhci: Timeout:  0x00000000 | Int stat: 0x00000000
[    4.828476] sdhci: Int enab: 0x00ff1003 | Sig enab: 0x00fc1003
[    4.828482] sdhci: AC12 err: 0x00000000 | Slot int: 0x00000000
[    4.828488] sdhci: Caps:     0x376cd08c | Caps_1:   0x10006f77
[    4.828494] sdhci: Cmd:      0x00000000 | Max curr: 0x00000000
[    4.828497] sdhci: Host ctl2: 0x00003000
[    4.828505] sdhci: ADMA Err: 0x00000000 | ADMA Ptr: 0x0000000000000000
[    4.828633] sdhci: ===========================================

Latest dtb to dts file:
jul18th_13.dts (284.8 KB)
Bootlogs:
change-13-jul-18-bootlogs.txt (57.1 KB)

Anything I can try next?

Thanks for the help so far.
Regards.

Could you refer to the device tree of TX1 which has another SDIO wifi?

In the L4T 32.4.3 sources I am looking at <kernel-sources>/nvidia/platform/t210/jetson/kernel-dts/tegra210-jetson-cv-base-p2597-2180-a00.dts. To get a better picture, I have converted the Linux_for_Tegra/kernel/dtb/tegra210-jetson-tx1-p2597-2180-a02-devkit-24x7.dtb to dts.

Are these the correct files I should be comparing with?

The <kernel-sources>/nvidia/platform/t210/jetson/kernel-dts/tegra210-jetson-cv-base-p2597-2180-a00.dts has the following:

    sdhci@700b0200 { /* SDMMC2 for Wifi */
		uhs-mask = <0x8>;
		power-off-rail;
		status = "okay";
	};

The final node from the dtb converted to dts is:

    sdhci@700b0200 {
		compatible = "nvidia,tegra210-sdhci";
		reg = <0x00 0x700b0200 0x00 0x200>;
		interrupts = <0x00 0x0f 0x04>;
		aux-device-name = "sdhci-tegra.1";
		nvidia,runtime-pm-type = <0x01>;
		clocks = <0x41 0x09 0x41 0xf3 0x41 0xc1>;
		clock-names = "sdmmc\0pll_p\0sdmmc_legacy_tm";
		resets = <0x41 0x09>;
		reset-names = "sdhci";
		status = "okay";
		vqmmc-supply = <0x56>;
		vmmc-supply = <0x67>;
		tap-delay = <0x04>;
		trim-delay = <0x08>;
		mmc-ocr-mask = <0x00>;
		max-clk-limit = <0xc28cb00>;
		ddr-clk-limit = <0x2719c40>;
		bus-width = <0x04>;
		calib-3v3-offsets = <0x505>;
		calib-1v8-offsets = <0x505>;
		compad-vref-3v3 = <0x07>;
		compad-vref-1v8 = <0x07>;
		default-drive-type = <0x01>;
		nvidia,min-tap-delay = <0x6a>;
		nvidia,max-tap-delay = <0xb9>;
		pll_source = "pll_p";
		non-removable;
		cap-mmc-highspeed;
		cap-sd-highspeed;
		keep-power-in-suspend;
		ignore-pm-notify;
		nvidia,en-io-trim-volt;
		nvidia,is-ddr-tap-delay;
		nvidia,ddr-tap-delay = <0x00>;
		uhs-mask = <0x08>;
		power-off-rail;
		force-non-removable-rescan;
		only-1-8-v;
		linux,phandle = <0xf9>;
		phandle = <0xf9>;

		prod-settings {
			#prod-cells = <0x03>;

			prod_c_ds {
				prod = <0x100 0xff0000 0x40000 0x1e0 0x0f 0x07 0x1e4 0x30077f7f 0x30000505>;
			};

			prod_c_hs {
				prod = <0x100 0xff0000 0x40000 0x1e0 0x0f 0x07 0x1e4 0x30077f7f 0x30000505>;
			};

			prod_c_sdr12 {
				prod = <0x100 0xff0000 0x40000 0x1e0 0x0f 0x07 0x1e4 0x30077f7f 0x30000505>;
			};

			prod_c_sdr25 {
				prod = <0x100 0xff0000 0x40000 0x1e0 0x0f 0x07 0x1e4 0x30077f7f 0x30000505>;
			};

			prod_c_sdr50 {
				prod = <0x100 0xff0000 0x40000 0x1c0 0xe000 0x8000 0x1e0 0x0f 0x07 0x1e4 0x30077f7f 0x30000505>;
			};

			prod_c_sdr104 {
				prod = <0x100 0xff0000 0x40000 0x1c0 0xe000 0x4000 0x1e0 0x0f 0x07 0x1e4 0x30077f7f 0x30000505>;
			};

			prod_c_ddr52 {
				prod = <0x100 0x1fff0000 0x40000 0x1e0 0x0f 0x07 0x1e4 0x30077f7f 0x30000505>;
			};

			prod_c_hs200 {
				prod = <0x100 0xff0000 0x40000 0x1c0 0xe000 0x4000 0x1e0 0x0f 0x07 0x1e4 0x30077f7f 0x30000505>;
			};

			prod_c_hs400 {
				prod = <0x100 0xff0000 0x40000 0x1c0 0xe000 0x4000 0x1e0 0x0f 0x07 0x1e4 0x30077f7f 0x30000505>;
			};

			prod_c_hs533 {
				prod = <0x100 0xff0000 0x40000 0x1c0 0xe000 0x2000 0x1e0 0x0f 0x07 0x1e4 0x30000505 0x30000505>;
			};

			prod {
				prod = <0x100 0x1fff000e 0x8090028 0x1c0 0x8001fc0 0x8000040 0x1c4 0x77 0x00 0x120 0x20001 0x01 0x128 0x43000000 0x00 0x1f0 0x80000 0x80000>;
			};
		};
	};

Am I looking at the correct node?

Hi Wayne,

I edited the Nano device tree with reference of the TX1 node from my last post. I do see some errors in the dmesg now.

[    5.778048] mmc1: tuning execution failed: -5
[    5.778055] mmc1: error -5 whilst initialising SDIO card

and

[    6.880562] mmc1: CMD CRC or end bit error, int mask 0x40000
[    6.881203] mmc1: CMD CRC or end bit error, int mask 0x40000
[    6.882249] mmc1: CMD CRC or end bit error, int mask 0x40000
[    6.882892] mmc1: CMD CRC or end bit error, int mask 0x40000

The kernel still tries rescan and init the card at 400KHz, 300KHz, 200KHz and 100KHz. I am attaching the bootlogs and the dtb.

jul19th_15.dts (284.8 KB)

bootlog_wifi_sdio_changes_as_per_tx1_jul19th.txt (57.6 KB)

I made quite a few changes as per the TX1. Are there any specific things in the TX1 device tree that you wanted me to look at? And is there any way I could try solving the errors seen in the dmesg?

Regards.

I tried a few more things after the above attempt.

sd-uhs-sdr12;
sd-uhs-sdr25;
sd-uhs-sdr50;
sd-uhs-sdr104;

Added the above speeds.

/delete-property/ cap-sd-highspeed;
/delete-property/ cap-mmc-highspeed;

Deleted the above properties.

max-clk-limit = <50000000>;
uhs-mask = <0x7C>;

Tried this to restrict interface to a lower speed.

Finally decided to try out the card at 3.3v. For this I set the jumpers on the m.2 to uSD Adapter that holds the WiFi/BLE card to use 3.3v for IO and also set it to expect the Host to have 3.3v. Accordingly I changed the vmmc-supply to a dummy regulator that has 3.3v. And set vqmmc-supply = <&max77620_ldo6>; which is a 1.8v to 3.3v LDO defined in the power tree. Also, removed the only-1-8-v; property and set uhs-mask = <0x7E>;

With this setup I got the following in dmesg

mmc1: error -110 whilst initialising SDIO card

Lastly I tried the following:

sdhci@700b0400 {
		compatible = "nvidia,tegra210-sdhci";
		reg = <0x00 0x700b0400 0x00 0x200>;
		interrupts = <0x00 0x13 0x04>;
		aux-device-name = "sdhci-tegra.2";
		nvidia,runtime-pm-type = <0x00>;
		clocks = <0x21 0x45 0x21 0xf3 0x21 0x136 0x21 0xc1>;
		clock-names = "sdmmc\0pll_p\0pll_c4_out2\0sdmmc_legacy_tm";
		resets = <0x21 0x45>;
		reset-names = "sdhci";
		status = "okay";
		tap-delay = <0x04>;
		trim-delay = <0x08>;
		mmc-ocr-mask = <0x00>;
		max-clk-limit = <0xc65d400>;
		ddr-clk-limit = <0x2faf080>;
		bus-width = <0x04>;
		calib-3v3-offsets = <0x7d>;
		calib-1v8-offsets = <0x7b7b>;
		compad-vref-3v3 = <0x07>;
		compad-vref-1v8 = <0x07>;
		pll_source = "pll_p\0pll_c4_out2";
		keep-power-in-suspend;
		ignore-pm-notify;
		non-removable;
		cap-mmc-highspeed;
		cap-sd-highspeed;
		nvidia,en-io-trim-volt;
		nvidia,min-tap-delay = <0x6a>;
		nvidia,max-tap-delay = <0xb9>;
		pinctrl-names = "sdmmc_schmitt_enable\0sdmmc_schmitt_disable\0sdmmc_clk_schmitt_enable\0sdmmc_clk_schmitt_disable\0sdmmc_drv_code\0sdmmc_default_drv_code\0sdmmc_e_33v_enable\0sdmmc_e_33v_disable";
		pinctrl-0 = <0x88>;
		pinctrl-1 = <0x89>;
		pinctrl-2 = <0x8a>;
		pinctrl-3 = <0x8b>;
		pinctrl-4 = <0x8c>;
		pinctrl-5 = <0x8d>;
		pinctrl-6 = <0x8e>;
		pinctrl-7 = <0x8f>;
		vqmmc-supply = <0x58>;
		vmmc-supply = <0x90>;
		uhs-mask = <0xff>;
		id = <0x00>;
		nvidia,is-sdio;
		fixed-clock-freq = <0x1851960 0x1851960 0x16e3600 0x2cd29c0 0x16e3600 0x2cd29c0 0x59a5380 0xc28cb00 0x00 0x00 0x00>;
		nvidia,vqmmc-always-on;
		nvidia,vmmc-always-on;
		force-non-removable-rescan;
		no-sd;
		no-mmc;
		built-in;
		default-drive-type = <0x01>;
		nvidia,is-ddr-tap-delay;
		nvidia,ddr-tap-delay = <0x00>;
		power-off-rail;
		linux,phandle = <0xb9>;
		phandle = <0xb9>;

		prod-settings {
			#prod-cells = <0x03>;

			prod_c_ds {
				prod = <0x100 0xff0000 0x10000 0x1e0 0x0f 0x07 0x1e4 0x30077f7f 0x3000007d>;
			};

			prod_c_hs {
				prod = <0x100 0xff0000 0x10000 0x1e0 0x0f 0x07 0x1e4 0x30077f7f 0x3000007d>;
			};

			prod_c_sdr12 {
				prod = <0x100 0xff0000 0x10000 0x1e0 0x0f 0x07 0x1e4 0x30077f7f 0x30007b7b>;
			};

			prod_c_sdr25 {
				prod = <0x100 0xff0000 0x10000 0x1e0 0x0f 0x07 0x1e4 0x30077f7f 0x30007b7b>;
			};

			prod_c_sdr50 {
				prod = <0x100 0xff0000 0x10000 0x1c0 0xe000 0x8000 0x1e0 0x0f 0x07 0x1e4 0x30077f7f 0x30007b7b>;
			};

			prod_c_sdr104 {
				prod = <0x100 0xff0000 0x10000 0x1c0 0xe000 0x4000 0x1e0 0x0f 0x07 0x1e4 0x30077f7f 0x30007b7b>;
			};

			prod_c_ddr52 {
				prod = <0x100 0x1fff0000 0x00 0x1e0 0x0f 0x07 0x1e4 0x30077f7f 0x30007b7b>;
			};

			prod {
				prod = <0x100 0x1fff000e 0x3090028 0x1c0 0x8001fc0 0x8000040 0x1c4 0x77 0x00 0x120 0x20001 0x01 0x128 0x43000000 0x00 0x1f0 0x80000 0x80000>;
			};
		};
	};

Here the major change was removing the subnode. I tried this because we are not going to use the kernel’s built in drivers for the sd8997 WiFi. We have compiled kernel module source code received from the HW vendor which has to be loaded manually. Is this the correct thing to do?:

type_1ym_wifi@1{
    compatible = "marvell,sd8997";
    reg=<1>;
};

There were a few other changes that are reflected in the sdhci@700b0400 node pasted above. Attached the final dtb converted to dts. Also attached the bootlogs.
Notice the debug nessage:

[    4.929297] mmc1: CMD CRC or end bit error, int mask 0xc0001
[    4.929324] mmc1: error -84 whilst initialising SDIO card

This is shown multiple times.

jul-25th-change-20.dts (284.7 KB)
change-20-bootlogs-25-jul.txt (56.2 KB)

A few questions I have are:

  1. Should a dummy regulator also be set for the vqmmc-supply?

  2. How do I decide whether nvidia,vqmmc-always-on; should be set or not?

  3. As I am trying out the 3.3v modes, how do I make sure that the Default Speed and High Speed modes shown in this table from the TX1 Ref Manual are enabled?

  4. Do the below properties have anything to do with SDIO cards?

- cap-sd-highspeed: SD high-speed timing is supported
- cap-mmc-highspeed: MMC high-speed timing is supported
  1. Can someone please take a look at the latest node and recommend any necessary changes?

Thanks and Regards.

I have made some progress.

With the below node I see this message in the dmesg: [ 5.924072] mmc1: new ultra high speed SDR25 SDIO card at address 0001

sdhci@700b0400 {
		compatible = "nvidia,tegra210-sdhci";
		reg = <0x00 0x700b0400 0x00 0x200>;
		interrupts = <0x00 0x13 0x04>;
		aux-device-name = "sdhci-tegra.2";
		iommus = <0x2b 0x1b>;
		nvidia,runtime-pm-type = <0x00>;
		clocks = <0x21 0x45 0x21 0xf3 0x21 0x136 0x21 0xc1>;
		clock-names = "sdmmc\0pll_p\0pll_c4_out2\0sdmmc_legacy_tm";
		resets = <0x21 0x45>;
		reset-names = "sdhci";
		status = "okay";
		tap-delay = <0x03>;
		trim-delay = <0x03>;
		mmc-ocr-mask = <0x00>;
		max-clk-limit = <0x2faf080>;
		ddr-clk-limit = <0x2faf080>;
		bus-width = <0x04>;
		calib-3v3-offsets = <0x7d>;
		calib-1v8-offsets = <0x7b7b>;
		compad-vref-3v3 = <0x07>;
		compad-vref-1v8 = <0x07>;
		pll_source = "pll_p\0pll_c4_out2";
		keep-power-in-suspend;
		ignore-pm-notify;
		non-removable;
		cap-mmc-highspeed;
		cap-sd-highspeed;
		nvidia,en-io-trim-volt;
		nvidia,en-periodic-calib;
		cd-inverted;
		wp-inverted;
		pwrdet-support;
		nvidia,min-tap-delay = <0x6a>;
		nvidia,max-tap-delay = <0xb9>;
		pinctrl-names = "sdmmc_schmitt_enable\0sdmmc_schmitt_disable\0sdmmc_clk_schmitt_enable\0sdmmc_clk_schmitt_disable\0sdmmc_drv_code\0sdmmc_default_drv_code\0sdmmc_e_33v_enable\0sdmmc_e_33v_disable";
		pinctrl-0 = <0x88>;
		pinctrl-1 = <0x89>;
		pinctrl-2 = <0x8a>;
		pinctrl-3 = <0x8b>;
		pinctrl-4 = <0x8c>;
		pinctrl-5 = <0x8d>;
		pinctrl-6 = <0x8e>;
		pinctrl-7 = <0x8f>;
		vqmmc-supply = <0x58>;
		vmmc-supply = <0x90>;
		uhs-mask = <0xfd>;
		id = <0x00>;
		nvidia,is-sdio;
		fixed-clock-freq = <0x1851960 0x1851960 0x16e3600 0x2cd29c0 0x16e3600 0x2cd29c0 0x59a5380 0xc28cb00 0x00 0x00 0x00>;
		nvidia,vqmmc-always-on;
		nvidia,vmmc-always-on;
		only-1-8-v;
		nvidia,disable-rtpm;
		force-non-removable-rescan;
		no-sd;
		no-mmc;
		built-in;
		wakeup-source;
		cap-sdio-irq;
		linux,phandle = <0xb9>;
		phandle = <0xb9>;

		prod-settings {
			#prod-cells = <0x03>;

			prod_c_ds {
				prod = <0x100 0xff0000 0x10000 0x1e0 0x0f 0x07 0x1e4 0x30077f7f 0x3000007d>;
			};

			prod_c_hs {
				prod = <0x100 0xff0000 0x10000 0x1e0 0x0f 0x07 0x1e4 0x30077f7f 0x3000007d>;
			};

			prod_c_sdr12 {
				prod = <0x100 0xff0000 0x10000 0x1e0 0x0f 0x07 0x1e4 0x30077f7f 0x30007b7b>;
			};

			prod_c_sdr25 {
				prod = <0x100 0xff0000 0x10000 0x1e0 0x0f 0x07 0x1e4 0x30077f7f 0x30007b7b>;
			};

			prod_c_sdr50 {
				prod = <0x100 0xff0000 0x10000 0x1c0 0xe000 0x8000 0x1e0 0x0f 0x07 0x1e4 0x30077f7f 0x30007b7b>;
			};

			prod_c_sdr104 {
				prod = <0x100 0xff0000 0x10000 0x1c0 0xe000 0x4000 0x1e0 0x0f 0x07 0x1e4 0x30077f7f 0x30007b7b>;
			};

			prod_c_ddr52 {
				prod = <0x100 0x1fff0000 0x00 0x1e0 0x0f 0x07 0x1e4 0x30077f7f 0x30007b7b>;
			};

			prod {
				prod = <0x100 0x1fff000e 0x3090028 0x1c0 0x8001fc0 0x8000040 0x1c4 0x77 0x00 0x120 0x20001 0x01 0x128 0x43000000 0x00 0x1f0 0x80000 0x80000>;
			};
		};

		type_1ym_wifi@1 {
			compatible = "marvell,sd8997";
			reg = <0x01>;
		};
	};

Complete dmesg:
change-25-sdr25-success-bootlogs-jul-27th.txt (64.2 KB)

Complete dtb:
jul-28th-change-25.dts (284.8 KB)

I see the following output for # cat /sys/kernel/debug/mmc1/ios

clock:		50000000 Hz
actual clock:	49920000 Hz
vdd:		7 (1.65 - 1.95 V)
bus mode:	2 (push-pull)
chip select:	0 (don't care)
power mode:	2 (on)
bus width:	2 (4 bits)
timing spec:	4 (sd uhs SDR25)
signal voltage:	1 (1.80 V)
driver type:	0 (driver type B)

I also enabled the mmc tracing with # echo 1 > /sys/kernel/debug/tracing/events/mmc/mmc_request_done/enable

# cat /sys/kernel/debug/tracing/trace_pipe | grep mmc1 to look at any activity being done on the mmc1 interface

While loading the driver for the 88W8997 manually, I see the following in the trace output:

insmod-4686  [003] ....  6415.723360: mmc_request_done: mmc1: end struct mmc_request[ffffffc0eeb8b900]: cmd_opcode=52 cmd_err=-16 cmd_resp=0x0 0x40000800 0x10 0x4 cmd_retries=0 stop_opcode=0 stop_err=0 stop_resp=0x0 0x0 0x0 0x0 stop_retries=0 sbc_opcode=0 sbc_err=0 sbc_resp=0x0 0x0 0x0 0x0 sbc_retries=0 bytes_xfered=0 data_err=0 can_retune=0 doing_retune=0 retune_now=0 need_retune=0 hold_retune=1 retune_period=0

In the dmesg I see the following logs at the same time, as I load the module:

[  +0.005549] wlan: Loading MWLAN driver
[  +0.004243] mmc1: starting CMD52 arg 80022000 flags 00000195
[  +0.499662] mmc1: req done (CMD52): -16: 00000000 00000000 00000000 00000000
[  +0.000015] wlan_sdio: probe of mmc1:0001:1 failed with error -16
[  +0.006159] wlan: Driver loaded successfully

Even though it says it loaded the driver successfully, I do not see the mlan0 interface in the # ifconfig -a output.

Please note the uhs-mask = <0xFD>; this means that only the sdr25 speed mode is unmasked. The card is also now running at 1.8v.

Any idea what I should do next? Thanks and Regards.