1 2 Previous Next 21 Replies Latest reply on Sep 18, 2019 6:38 AM by FaLo_4458736

    CYW43455 with i.MX8M Mini

    DaOc_4346406

      Hi,

       

      I am working on a custom board that uses a Murata Type 1MW wireless module, which uses a CYW43455 chipset, and I have a couple of questions about Linux drivers for it. I found this page on your website, which seems promising: Cypress Linux WiFi Driver Release (FMAC) [2019-05-08]

       

      I don't see any device tree example files specifically for an i.MX8; would it be much the same as the entries for the imx6ul example?

       

      I am basing my board support package on the one provided by NXP for their i.MX8M Mini EVK. It's built from yocto sumo with kernel version 4.14.78. I see all of the kernel configuration options called out in the README file from your driver release except for CONFIG_BRCMFMAC_PROTO_MSGBUF. I haven't applied the patches yet, should that becomes available after the patches are applied?

       

      Finally, the device tree example for the imx6ul mentions Bluetooth UART in the comments, but I don't see any entries for it. Are there separate instructions somewhere for how to configure everything to use Bluetooth with this chipset in Linux?

       

      Thanks,

      Dave

        • 2. Re: CYW43455 with i.MX8M Mini
          RoCh_2868046

          Hello Dave. Please take a look at the Linux Quick Start guide provided by Murata at: https://wireless.murata.com/datasheet?/RFM/data/murata_quick_start_guide_linux.pdf for steps on building images for i.MX8MMini boards. Once the image is built, the dts files should be located in "<build directory>/tmp/work-shared/<name of evk>/kernel-source/arch/arm64/boot/dts/freescale" location.

           

          For i.MX6UL dts file, you can follow the same document and build the image. The dts fies, in this case, will be in location "<build directory>/tmp/work-shared/<name of evk>/kernel-source/arch/arm/boot/dts".

           

          Note that, 1MW is incompatible with NXP i.MX8MMini EVK, since the SDIO bus interconnect is not available via M.2 interface. In case you must use 1MW, you can take a look at the EVKs made by Embedded Artists (https://www.embeddedartists.com/products/imx8m-mini-ucom/).

          1 of 1 people found this helpful
          • 3. Re: CYW43455 with i.MX8M Mini
            DaOc_4346406

            Hi,

             

            Thanks for the quick response.

             

            I am trying to bring up the 1MW on our own custom hardware, not on an EVK. We based our board and firmware on the NXP i.MX8M Mini EVK. That EVK uses a Murata Type 1PJ module, which is why I need to change the drivers in the BSP. I am not trying to use the 1MW with the EVK directly.

             

            It looks like the script in the meta_murata_wireless layer doesn't support the latest yocto build that the NXP i.MX8M Mini EVK BSP is based on: sumo, version 4.14.78.

             

            Per footnote 4 in the Quick Start Guide you linked to, since I'm using a kernel newer than 4.14.62, the fmac driver should be integrated into NXP's kernel release. As I'm sure you know, when I follow the link in that footnote to try and get more information, I'm taken back to the Murata i.MX landing page, where there is no active link to the Linux User Manual.

             

            Based on footnote 4, it seems like it should be pretty straightforward to get the driver working. Shouldn't it be as simple as setting a few options in menuconfig, and putting the correct device tree entry in my dts file? When I went looking for an example of how to do that, I found the Cypress drivers and dts files I linked to in my original post.

             

            This is probably a dumb question: does the fmac driver support Bluetooth too, or will I need a separate driver for that? I haven't seen much about Bluetooth in my research on the Type 1MW drivers.

             

            Thanks!

            Dave

            • 4. Re: CYW43455 with i.MX8M Mini
              RoCh_2868046

              Hello Dave,

               

              I understand. Unfortunately, Murata has no plan to support 4.14.78. Instead the next supported kernel will be 4.14.98 (currently under testing). I can give you a temporary workaround to build it till the official support comes. If you follow the Murata Quick Start guide, in section 3.3.2 (Download Murata's Script Files), you need to execute some wget commands to get the Murata scripts from their github. If you just replace the github path with https://github.com/bchen-murata/meta-murata-wireless/raw/master/cyw-script-utils/latest/ , you should get the scripts that would allow you to build 4.14.98 (the rest of the build steps are same). Or you can refer to this post: https://community.nxp.com/thread/496328 , where the manual steps are mentioned (this post is for i.MX6UL though, so you need to change that part).

               

              One caveat though, the i.MX8MMini EVK does not bring out SDIO interface to the M.2 interconnect, and so 1MW cannot work with it, since its SDIO based. However, I hope that is not a limitation in your custom board.

               

              Also, you might have a go with 4.14.78 as well with the new dts files you can get using the method I mentioned above, maybe they'll work!

               

              Thanks,

              Romit

              2 of 2 people found this helpful
              • 5. Re: CYW43455 with i.MX8M Mini
                RoCh_2868046

                The Bluetooth stuff is taken care of by the Bluez stack in the Linux kernel. You do not need any separate driver for that, but you do need the Bluetooth patch files (*.hcd). Those should also be installed by the Murata build script. Table 9 in the Murata Quick Start Guide shows where to find the patch files, and section 7.2 talks about BT bringup and testing.

                 

                Hope this helps!

                2 of 2 people found this helpful
                • 6. Re: CYW43455 with i.MX8M Mini
                  DaOc_4346406

                  Hi Romit,

                   

                  I was able to get the yocto image to complete without errors using the steps from your NXP post as a guide. Here's where I deviated:

                  • I didn't run the add-murata-wireless script, but I made the changes to local.conf and bblayers.conf manually
                  • I overwrote murata-binaries_1.0.bb with murata-binaries_1.0.bb@imx8 in sources/meta-murata-wireless/recipes-connectivity/murata-binaries
                  • I overwrote linux-imx_4.14.98.bbappend with inux-imx_4.14.98.bbappend.8MQ in sources/meta-murata-wireless/recipes-kernel/linux
                  • I used MACHINE=imx8mmevk (even though I know the EVK doesn't support the 1MW)

                   

                  Now I'm working on the device tree. Here's what I've pieced together so far:

                  &usdhc1 {

                    #address-cells = <1>;

                    #size-cells = <0>;

                    pinctrl-names = "default", "state_100mhz", "state_200mhz";

                    pinctrl-0 = <&pinctrl_usdhc1>, <&pinctrl_usdhc1_gpio>;

                    pinctrl-1 = <&pinctrl_usdhc1_100mhz>, <&pinctrl_usdhc1_gpio>;

                    pinctrl-2 = <&pinctrl_usdhc1_200mhz>, <&pinctrl_usdhc1_gpio>;

                   

                    enable-sdio-wakeup;

                    cd-broken;

                    wifi-host;

                    mmc-pwrseq = <&usdhc1_pwrseq>;

                    bus-width = <4>;

                    pm-ignore-notify;

                    keep-power-in-suspend;

                    non-removable;

                    status = "okay";

                   

                   

                    brcmf: bcrmf@1 {

                      reg = <1>;

                      compatible = "brcm,bcm4329-fmac";

                      /* these 3 lines are for OOB interupts, try without them if there are issues? */

                      interrupt-parent = <&gpio2>;

                      interrupts = <8 IRQ_TYPE_LEVEL_LOW>;  /* BT_WAKE_HOST (GPIO2_IO8), will this work? WL_WAKE_HOST used in Cypress dts */

                      interrupt-names = "host-wake";

                    };

                   

                  As I pointed out in the comment, the Cypress dts in the driver package I linked to in my first post seemed to use the WL_WAKE_HOST pin for the OOB interrupt, but we didn't connect that pin. We connected the BT_WAKE_HOST pin on the i.MX8 to the corresponding pin on the 1MW. Will that work? Do you see any issues with the device tree entry?

                   

                  Thanks!

                  Dave

                  • 7. Re: CYW43455 with i.MX8M Mini
                    DaOc_4346406

                    Hi Romit,

                     

                    I now have hardware in hand and am having a little trouble bringing up the 1MW. I detailed the steps I took to add meta-murata-wireless to the build in a previous post. Here are the dmesg entries that seem relevant:

                     

                    [    1.919841] sdhci-esdhc-imx 30b40000.mmc: allocated mmc-pwrseq

                    [    1.925700] sdhci-esdhc-imx 30b40000.mmc: assigned as wifi host

                    [    1.976169] mmc0: SDHCI controller on 30b40000.mmc [30b40000.mmc] using ADMA

                    [    2.022220] mmc0: queuing unknown CIS tuple 0x80 (2 bytes)

                    [    2.029382] mmc0: queuing unknown CIS tuple 0x80 (3 bytes)

                    [    2.036885] mmc0: queuing unknown CIS tuple 0x80 (3 bytes)

                    [    2.061764] mmc0: queuing unknown CIS tuple 0x80 (7 bytes)

                    [    2.080351] mmc0: queuing unknown CIS tuple 0x80 (6 bytes)

                    [    2.180207] mmc0: new ultra high speed SDR104 SDIO card at address 0001

                    [    2.184564] brcmfmac: brcmf_fw_map_chip_to_name: using brcm/brcmfmac43455-sdio.bin for chip 0x004345(17221) rev 0x000006

                    [    2.184742] brcmfmac mmc0:0001:1: Falling back to user helper

                    [    7.456204] brcmfmac: brcmf_sdio_htclk: HT Avail timeout (1000000): clkctl 0x50

                    [    8.481739] brcmfmac: brcmf_sdio_htclk: HT Avail timeout (1000000): clkctl 0x50

                    [    9.492155] brcmfmac: brcmf_sdio_htclk: HT Avail timeout (1000000): clkctl 0x50

                     

                    dmesg | grep Murata doesn't return anything, so I suspect maybe there's a problem with how I added meta-murata-wireless, based on what's in the quick state guide.

                     

                    Any advice you can give is greatly appreciated!

                     

                    Best,

                    Dave

                    • 8. Re: CYW43455 with i.MX8M Mini
                      RoCh_2868046

                      Hello Dave,

                       

                      I think the best way to check whether meta-murata-wireless is added, is to check the bitbake log. It should be located in <build_dir>/tmp/log/cooker/<platform>/ folder. Search for murata there.

                      1 of 1 people found this helpful
                      • 9. Re: CYW43455 with i.MX8M Mini
                        DaOc_4346406

                        It does show up in the log:

                         

                        Build Configuration:

                        BB_VERSION           = "1.38.0"

                        BUILD_SYS            = "x86_64-linux"

                        NATIVELSBSTRING      = "ubuntu-18.04"

                        TARGET_SYS           = "aarch64-poky-linux"

                        MACHINE              = "imx8mmevk"

                        DISTRO               = "fsl-imx-xwayland"

                        DISTRO_VERSION       = "4.14-sumo"

                        TUNE_FEATURES        = "aarch64"

                        TARGET_FPU           = ""

                        meta                

                        meta-poky            = "HEAD:c9bd4984f8f471ca2c43052714f4413ba99cf171"

                        meta-oe             

                        meta-multimedia      = "HEAD:8760facba1bceb299b3613b8955621ddaa3d4c3f"

                        meta-freescale       = "HEAD:27ca94f8a4336790ba117b4298566f6820e7e74c"

                        meta-freescale-3rdparty = "HEAD:82037216280a39957fb4272581637abec734ad50"

                        meta-freescale-distro = "HEAD:f7e2216e93aff14ac32728a13637a48df436b7f4"

                        meta-bsp            

                        meta-sdk             = "HEAD:8eeb420fad668b733ab95b460895e1c337c66b25"

                        meta-browser         = "HEAD:75640e14e325479c076b6272b646be7a239c18aa"

                        meta-gnome          

                        meta-networking     

                        meta-python         

                        meta-filesystems     = "HEAD:8760facba1bceb299b3613b8955621ddaa3d4c3f"

                        meta-qt5             = "HEAD:d4e7f73d04e8448d326b6f89908701e304e37d65"

                        meta-ainstein-imx    = "board_bring_up:c49aefd06dd3b875e377829f4d15c4e2a9dd5f72"

                        meta-murata-wireless = "imx-sumo-manda:a822711d59af70cb72ec7d6e6c214db9265b494a"

                         

                         

                        NOTE: Executing SetScene Tasks

                        NOTE: Executing RunQueue Tasks

                        NOTE: Tasks Summary: Attempted 585 tasks of which 585 didn't need to be rerun and all succeeded.

                        • 10. Re: CYW43455 with i.MX8M Mini
                          DaOc_4346406

                          I checked further and found that brcmfmac43455-sdio.1MW.txt is installed in /lib/firmware/brcm/murata-master on my board, which seems like further evidence that I added meta-murata-wireless correctly.

                           

                          Can someone please give me some advice on what might be the problem here? The probing process doesn't seem to be getting the "Request HT Avail" step, as evidenced by brcmfmac: brcmf_sdio_htclk: HT Avail timeout (1000000): clkctl 0x50

                           

                          Thanks,

                          Dave

                          • 11. Re: CYW43455 with i.MX8M Mini
                            DaOc_4346406

                            Hi Romit,

                             

                            I updated meta-murata-wireless to the latest commit to the imx-sumo-manda branch on Github (Patch fmac log string to Linux Kernel). The result is the same, but I did find a bug in meta-murata-wireless/recipes-kernel/linux/linux-imx_4.14.98.bbappend:

                             

                            SRC_URI_append = "file://0008-kernel_change_for_fmac_log_string.patch "

                             

                            should be

                             

                            SRC_URI_append = " file://0008-kernel_change_for_fmac_log_string.patch "

                             

                            There needs to be a space between " and file.

                             

                            Best,

                            Dave

                            1 of 1 people found this helpful
                            • 12. Re: CYW43455 with i.MX8M Mini
                              RoCh_2868046

                              Thanks a lot for the feedback Dave! It has been fixed.

                              • 13. Re: CYW43455 with i.MX8M Mini
                                DaOc_4346406

                                No problem. Do you have any advice for me for troubleshooting the driver errors I'm getting? Is there anything else I can check to make sure everything is installed correctly?

                                 

                                Thanks,

                                Dave

                                • 14. Re: CYW43455 with i.MX8M Mini
                                  DaOc_4346406

                                  Hi Romit,

                                   

                                  I got wifi working today. I had an error in the device tree.

                                   

                                  I still get one error message from the brcmfmac driver:

                                  brcmfmac: brcmf_sdio_ulp_preinit: ulp_sdioctrl iovar returned err = -23

                                   

                                  Do you know what that's about?

                                   

                                  I'm still not able to get Bluetooth to work.

                                   

                                  Here's what I get when I follow the instructions in the quick start guide:

                                  :~# hciattach /dev/ttymxc0 bcm43xx 3000000 flow -t 20

                                  bcm43xx_init

                                  Initialization timed out.

                                   

                                  Can you offer any guidance or things to check, please?

                                   

                                  Thanks,

                                  Dave

                                  1 2 Previous Next