Message ID | 20230201084131.v2.1.I69cf3d56c97098287fe3a70084ee515098390b70@changeid |
---|---|
State | New |
Headers | show |
Series | [v2,1/2] wifi: ath11k: Use platform_get_irq() to get the interrupt | expand |
Hi Douglas, Thank you for the patch. > As of commit a1a2b7125e10 ("of/platform: Drop static setup of IRQ resource from DT core"), we need to > use platform_get_irq() instead of > platform_get_resource() to get our IRQs because > platform_get_resource() simply won't get them anymore. > > This was already fixed in several other Atheros WiFi drivers, apparently in response to Zeal Robot > reports. An example of another fix is commit 9503a1fc123d ("ath9k: Use platform_get_irq() to get the > interrupt"). ath11k seems to have been missed in this effort, though. > > Without this change, WiFi wasn't coming up on my Qualcomm sc7280-based hardware. Specifically, > "platform_get_resource(pdev, IORESOURCE_IRQ, i)" was failing even for i=0. > > Tested-on: WCN6750 hw1.0 AHB WLAN.MSL.1.0.1-00887-QCAMSLSWPLZ-1 > > Fixes: a1a2b7125e10 ("of/platform: Drop static setup of IRQ resource from DT core") > Fixes: 00402f49d26f ("ath11k: Add support for WCN6750 device") > Signed-off-by: Douglas Anderson <dianders@chromium.org> > Tested-by: Jun Yu <junyuu@chromium.org> > --- > > Changes in v2: > - Update commit message and point to patch that broke us (Jonas) > > drivers/net/wireless/ath/ath11k/ahb.c | 8 ++++---- > 1 file changed, 4 insertions(+), 4 deletions(-) > Reviewed-by: Lad Prabhakar <prabhakar.mahadev-lad.rj@bp.renesas.com> Unrelated to this patch, I think you need to call dma_unamp_resource() in the error path? Cheers, Prabhakar > diff --git a/drivers/net/wireless/ath/ath11k/ahb.c b/drivers/net/wireless/ath/ath11k/ahb.c > index d34a4d6325b2..f70a119bb5c8 100644 > --- a/drivers/net/wireless/ath/ath11k/ahb.c > +++ b/drivers/net/wireless/ath/ath11k/ahb.c > @@ -859,11 +859,11 @@ static int ath11k_ahb_setup_msi_resources(struct ath11k_base *ab) > ab->pci.msi.ep_base_data = int_prop + 32; > > for (i = 0; i < ab->pci.msi.config->total_vectors; i++) { > - res = platform_get_resource(pdev, IORESOURCE_IRQ, i); > - if (!res) > - return -ENODEV; > + ret = platform_get_irq(pdev, i); > + if (ret < 0) > + return ret; > > - ab->pci.msi.irqs[i] = res->start; > + ab->pci.msi.irqs[i] = ret; > } > > set_bit(ATH11K_FLAG_MULTI_MSI_VECTORS, &ab->dev_flags); > -- > 2.39.1.456.gfc5497dd1b-goog
Douglas Anderson <dianders@chromium.org> wrote: > As of commit a1a2b7125e10 ("of/platform: Drop static setup of IRQ > resource from DT core"), we need to use platform_get_irq() instead of > platform_get_resource() to get our IRQs because > platform_get_resource() simply won't get them anymore. > > This was already fixed in several other Atheros WiFi drivers, > apparently in response to Zeal Robot reports. An example of another > fix is commit 9503a1fc123d ("ath9k: Use platform_get_irq() to get the > interrupt"). ath11k seems to have been missed in this effort, though. > > Without this change, WiFi wasn't coming up on my Qualcomm sc7280-based > hardware. Specifically, "platform_get_resource(pdev, IORESOURCE_IRQ, > i)" was failing even for i=0. > > Tested-on: WCN6750 hw1.0 AHB WLAN.MSL.1.0.1-00887-QCAMSLSWPLZ-1 > > Fixes: a1a2b7125e10 ("of/platform: Drop static setup of IRQ resource from DT core") > Fixes: 00402f49d26f ("ath11k: Add support for WCN6750 device") > Signed-off-by: Douglas Anderson <dianders@chromium.org> > Tested-by: Jun Yu <junyuu@chromium.org> > Reviewed-by: Lad Prabhakar <prabhakar.mahadev-lad.rj@bp.renesas.com> > Signed-off-by: Kalle Valo <quic_kvalo@quicinc.com> 2 patches applied to ath-next branch of ath.git, thanks. f117276638b7 wifi: ath11k: Use platform_get_irq() to get the interrupt 95c95251d054 wifi: ath5k: Use platform_get_irq() to get the interrupt
diff --git a/drivers/net/wireless/ath/ath11k/ahb.c b/drivers/net/wireless/ath/ath11k/ahb.c index d34a4d6325b2..f70a119bb5c8 100644 --- a/drivers/net/wireless/ath/ath11k/ahb.c +++ b/drivers/net/wireless/ath/ath11k/ahb.c @@ -859,11 +859,11 @@ static int ath11k_ahb_setup_msi_resources(struct ath11k_base *ab) ab->pci.msi.ep_base_data = int_prop + 32; for (i = 0; i < ab->pci.msi.config->total_vectors; i++) { - res = platform_get_resource(pdev, IORESOURCE_IRQ, i); - if (!res) - return -ENODEV; + ret = platform_get_irq(pdev, i); + if (ret < 0) + return ret; - ab->pci.msi.irqs[i] = res->start; + ab->pci.msi.irqs[i] = ret; } set_bit(ATH11K_FLAG_MULTI_MSI_VECTORS, &ab->dev_flags);