6 Replies Latest reply on Jul 16, 2019 2:51 PM by DaOc_4346406

    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