User level enable/disable control of Linux brcmfmac driver

Tip / Sign in to post questions, reply, level up, and achieve exciting badges. Know more

cross mob
klauffenburger
Level 1
Level 1
First question asked Welcome!

Hello,

I am working on development of a teleconferencing product that incorporates the Laird Sterling-LWB WiFi/Bluetooth module based on the CYW4343W device.  This module is integrated into a Variscite iMX 8M Plus (imx8mp) System-on-Module.

In addition to WiFi and Bluetooth this product also features an LTE interface.  At this moment we are battling a system noise problem that is causing interference with one of the LTE bands and is preventing LTE certification to pass.  Specifically the noise peak is at 750 MHz and the LTE band that is failing is at 751 MHz.  I have found that the source of the generated noise is the WiFi module or signals attached or in close proximity with it; if I disable the brcmfmac driver, the noise peak disappears and the LTE performance is acceptable.

Here is the version of the brcmfmac driver that is currently being used:

09-16 15:14:28.946 0 0 I brcmfmac: brcmf_fw_alloc_request: using brcm/brcmfmac43430-sdio for chip BCM43430/1
09-16 15:14:28.958 0 0 I brcmfmac: brcmf_c_preinit_dcmds: Firmware: BCM43430/1 wl0: Feb 16 2020 22:39:24 version 7.45.98.97 (r724416 CY) FWID 01-bf41ed64

Here is what I would like to find out (either one would help):

(1) Is there a provision in the brcmfmac driver that can allow a user space application to disable the driver and re-enable it?  I have noticed in the device tree these signals that seem to indicate that software is able to control the power to the module and enable/disable it:

&usdhc1 {
  #address-cells = <1>;
  #size-cells = <0>;
  pinctrl-names = "default", "state_100mhz", "state_200mhz";
  pinctrl-0 = <&pinctrl_usdhc1>, <&pinctrl_wifi>;
  pinctrl-1 = <&pinctrl_usdhc1_100mhz>, <&pinctrl_wifi>;
  pinctrl-2 = <&pinctrl_usdhc1_200mhz>, <&pinctrl_wifi>;
  bus-width = <4>;
  non-removable;
  keep-power-in-suspend;
  status = "okay";

  brcmf: bcrmf@1 {
    reg = <1>;
    compatible = "brcm,bcm4329-fmac";
  };
};

pinctrl_wifi: wifigrp {
  fsl,pins = <
    MX8MP_IOMUXC_SD1_DATA5__GPIO2_IO07 0xc1 /* WIFI_EN */
    MX8MP_IOMUXC_SD1_DATA6__GPIO2_IO08 0xc1 /* WIFI_PWR */
  >;
};

However, I am not finding in the brcmfmac driver code how these signals are managed.

(2)  Is there a way to control the timing configuration in the module to possibly shift the 750 MHz component to a different frequency?  I am not sure what the source of this component is.  There is probably a clock operating at a rate that is a factor of this frequency, such as 50 MHz or 250 MHz.  I know from the data sheet that there is (should be) a clock operating at 37.4 MHz; but that would cause a peak at 748 MHz, not 750 MHz.

Thanks for any help you may be able to provide.

--ken

 

0 Likes
1 Solution
Zhengbao_Zhang
Moderator
Moderator
Moderator
250 sign-ins First comment on KBA 10 questions asked

hello:

Is there a provision in the brcmfmac driver that can allow a user space application to disable the driver and re-enable it?

   For this question I think you can try to disable the interface like:

  ifconfig wlan0 down

when you need to use the wifi function, you can type "ifconfig wlan0 up"

maybe the interface name is another one like "wlp3s0"

View solution in original post

0 Likes
3 Replies
Charles_Lai
Moderator
Moderator
Moderator
500 replies posted 250 solutions authored 250 sign-ins

Hi,

1) you can bring up/down the chip but I don't think the driver can be unloaded/reloaded at run-time.

2) Have you tried the LTE-coexistence solution or something like that?

Best regards

0 Likes
DeRa_4514941
Level 2
Level 2
10 replies posted 5 replies posted 100 sign-ins

That pinmux configuration is implemented by the SDIO bus driver, not the brcmfmac driver.  You will need to look there to see how it is managed on your platform.  Is it sufficient to take the link down, and not completely disable the chipset?  For example, 'ip link set wlan0 down'.

I seriously doubt there will be any internal clock changes possible.  If you need both radios up at the same time, and they are interfering, you will probably need to solve this with external hardware filtering...

0 Likes
Zhengbao_Zhang
Moderator
Moderator
Moderator
250 sign-ins First comment on KBA 10 questions asked

hello:

Is there a provision in the brcmfmac driver that can allow a user space application to disable the driver and re-enable it?

   For this question I think you can try to disable the interface like:

  ifconfig wlan0 down

when you need to use the wifi function, you can type "ifconfig wlan0 up"

maybe the interface name is another one like "wlp3s0"

0 Likes