GloDroidCommunity / pine64-pinephonepro

Android for the PinePhonePro based on the GloDroid project
Apache License 2.0
27 stars 3 forks source link

wifi bcm43455 load firmware failed #3

Closed andyshrk closed 1 year ago

andyshrk commented 1 year ago

Thanks for your nice job。 I have a rk3399 based board eaidk610,which have a AP6255 wifi + bt module on board,I think it is the same with pinephone pro。 I porting the device configuration from this pine64-pinephonepro project[0]: But wifi startup failed due to load firmware failed: [ 5.894232] brcmfmac: brcmf_attach Enter [ 5.894597] brcmfmac: brcmf_fwvid_attach_ops mod=wcc: enter: dev mmc0:0001:1 [ 5.894849] brcmfmac: brcmf_sdio_readshared sdpcm_shared address 0x00201F18 [ 5.895256] brcmfmac: brcmf_fwvid_request_module: mod=wcc: failed -2 [ 5.896418] brcmfmac: brcmf_sdio_isr Enter [ 5.896434] ieee80211 phy0: brcmf_attach: brcmf_fwvid_attach failed

The full kernel bootlog is here[1]: When search online, I find these discuss[2]:

It seems I should change the brcmfmac wifi driver module load order make brcmfmac-wcc insmod before brcmfmac, But I can't find a proper way to adjust the order. I also try to setting CONFIG_MODPROBE_PATH="/system/bin/modprobe" , but it also has no luck. Hope to get some advice from you.

Thanks a lot.

[0]https://github.com/andyshrk/pine64-pinephonepro/commit/0224c537e19cd4672a07cdf2ec466a9c9d3dc07b [1]https://pastebin.com/H9YDcJNT [2]https://lore.kernel.org/linux-wireless/CANnVG6=a3etRagG+RaSEH-b4_nfzxpEKffQtuMWrttrbgjunZQ@mail.gmail.com/

rsglobal commented 1 year ago

Hi @andyshrk ,

modprobe won't work without specifying the modules directory, e.g.,

modprobe -d /vendor_dlkm/lib/modules brcmfmac-wcc
rsglobal commented 1 year ago

It also looks like kernel module auto-loading is disabled:

https://cs.android.com/android/platform/superproject/+/master:system/core/rootdir/init.rc;l=19;drc=2fccf5ead36d5460c27f442a3a093b2d4d410b21

rsglobal commented 1 year ago

Adding MODULE_SOFTDEP() macro into the brcmfmac driver to load brcmfmac-wcc may work.

rsglobal commented 1 year ago

I have got the same issue with the PPP. Fixed with the kernel patch:

--- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/Makefile
+++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/Makefile
@@ -51,7 +51,2 @@ brcmfmac-$(CONFIG_DMI) += \

-ifeq ($(CONFIG_BRCMFMAC),m)
-obj-m += wcc/
-obj-m += cyw/
-obj-m += bca/
-else
 brcmfmac-$(CONFIG_BRCMFMAC) += wcc/core.o
@@ -59,2 +54 @@ brcmfmac-$(CONFIG_BRCMFMAC) += cyw/core.o
 brcmfmac-$(CONFIG_BRCMFMAC) += bca/core.o
-endif
diff --git a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/fwvid.c b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/fwvid.c
index 86eafdb40..9958a8375 100644
--- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/fwvid.c
+++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/fwvid.c
@@ -28,3 +28,3 @@ struct brcmf_fwvid_entry {
        struct list_head drvr_list;
-#if IS_MODULE(CONFIG_BRCMFMAC)
+#if 0
        struct module *vmod;
@@ -36,3 +36,3 @@ static DEFINE_MUTEX(fwvid_list_lock);

-#if IS_MODULE(CONFIG_BRCMFMAC)
+#if 0
 #define FWVID_ENTRY_INIT(_vid, _name) \
@@ -58,3 +58,3 @@ static struct brcmf_fwvid_entry fwvid_list[BRCMF_FWVENDOR_NUM] = {

-#if IS_MODULE(CONFIG_BRCMFMAC)
+#if 0
 static int brcmf_fwvid_request_module(enum brcmf_fwvendor fwvid)
rsglobal commented 1 year ago

I updated the main branch with new functionality + this workaround.

andyshrk commented 1 year ago

It also looks like kernel module auto-loading is disabled:

https://cs.android.com/android/platform/superproject/+/master:system/core/rootdir/init.rc;l=19;drc=2fccf5ead36d5460c27f442a3a093b2d4d410b21

I also get this. It seems the mainline wifi vendor-specific firmware api is conflict with android. So I revert this series patch.

andyshrk commented 1 year ago

I have got the same issue with the PPP. Fixed with the kernel patch:

--- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/Makefile
+++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/Makefile
@@ -51,7 +51,2 @@ brcmfmac-$(CONFIG_DMI) += \

-ifeq ($(CONFIG_BRCMFMAC),m)
-obj-m += wcc/
-obj-m += cyw/
-obj-m += bca/
-else
 brcmfmac-$(CONFIG_BRCMFMAC) += wcc/core.o
@@ -59,2 +54 @@ brcmfmac-$(CONFIG_BRCMFMAC) += cyw/core.o
 brcmfmac-$(CONFIG_BRCMFMAC) += bca/core.o
-endif
diff --git a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/fwvid.c b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/fwvid.c
index 86eafdb40..9958a8375 100644
--- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/fwvid.c
+++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/fwvid.c
@@ -28,3 +28,3 @@ struct brcmf_fwvid_entry {
        struct list_head drvr_list;
-#if IS_MODULE(CONFIG_BRCMFMAC)
+#if 0
        struct module *vmod;
@@ -36,3 +36,3 @@ static DEFINE_MUTEX(fwvid_list_lock);

-#if IS_MODULE(CONFIG_BRCMFMAC)
+#if 0
 #define FWVID_ENTRY_INIT(_vid, _name) \
@@ -58,3 +58,3 @@ static struct brcmf_fwvid_entry fwvid_list[BRCMF_FWVENDOR_NUM] = {

-#if IS_MODULE(CONFIG_BRCMFMAC)
+#if 0
 static int brcmf_fwvid_request_module(enum brcmf_fwvendor fwvid)

This workaround is much simple.

andyshrk commented 1 year ago

Thanks so much

rsglobal commented 1 year ago

Would you like to add eaidk_610 to the GloDroid?

andyshrk commented 1 year ago

Would you like to add eaidk_610 to the GloDroid?

Of course . I can send you a pull request when I figure out the latest recovery fastboot failed issue

andyshrk commented 1 year ago

I saw you created a rockchip-series repo, so it's better to make ppp and eaidk610 both to this rockchip-series repo ?

rsglobal commented 1 year ago

PPP is more complex and may require special AOSP patching. Therefore it is in a separate repository.

andyshrk commented 1 year ago

Do you have other boards based on rockchip soc for the rockchip-serials repo ?

rsglobal commented 1 year ago

I have an opi4 tree locally. Unfortunately, I can't make it work. I'll make a few attempts to fix it and push it anyway, regardless of its state.

andyshrk commented 1 year ago

may be i can offer you an eaidk610 board freely if you like.

rsglobal commented 1 year ago

My concern regarding this board is that it is not available for sale on international trading platforms, e.g., ali's, ebay, amazon, etc...

andyshrk commented 1 year ago

My concern regarding this board is that it is not available for sale on international trading platforms, e.g., ali's, ebay, amazon, etc...

Yes, eaidk610 is hard to find on the international market. I play with it juest because a friend gives me such one. Maybe some boards from radxa(rockpi4/rk3399, rock3a/c rk3566/8), pine64(rockpro64/rk3399, quartz64/rk3566/8), they both have communtiy support(mainline linux kernel/u-boot, armbian) are better choice.