This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

[参考译文] 66AK2E05:KeyStone II - WiFi PCIe 卡(ath9k)-无 MSI 支持-中断

Guru**** 2553260 points
Other Parts Discussed in Thread: 66AK2E05

请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/processors-group/processors/f/processors-forum/1036349/66ak2e05-keystone-ii---wifi-pcie-card-ath9k---no-msi-support---interrupt

器件型号:66AK2E05

使用 ath9k 驱动程序的 Qualcomm Atheros WiFi mini-PCIe 卡出现问题。 未分配 IRQ、未创建 WiFi 网络设备(wlan0)。


我们的器件是66AK2E05、WiFi 模块连接到第一个 PCI 控制器。

这是相关的 dmesg 输出:

[7.88364] ath9k 0000:01:00.0:启用设备(0140 -> 0142)
[7.883699] ath9k 0000:01:00.0:将 MRRS 限制为256
[7.883763] ath9k 0000:01:00.0:Request_IRQ 失败
[7.883802] ath9k:探测器0000:01:00.0失败,错误-22

lspci -vv 显示:

0000:00:00.0 PCI 桥:德州仪器(TI)器件 b009 (修订版01)(prog-if 00 [正常解码])
控制:I/O+ MEM+ busmaster+ SpectrusCycle - MemWINV- VGASnoop- ParErr+ Stepping - SERR+ FastB2B- DiscINTx+
状态:CAP+ 66MHz - UDF- FastB2B- ParErr- DEVSEL=FAST > TABORT-<TAbort- SERR-<PERR- INTx-
延迟:0、缓存行大小:64字节
中断:引脚 A 路由至 IRQ 80
区域0:存储器位于 (32位、不可预取)
总线:primary=00、secondary =01、subordinate=ff、sec-latiter=0
桥后的 I/O:[禁用]
桥后存储器:50100000-501ffff [size=1M]
桥后可预取存储器:50200000-502fff [size=1M]
次要状态:66MHz- FastB2B- ParErr- DEVSEL=fast >TAbort-<TAbort- <MAbort- <SERR- <PERR-
BridgeCtl:奇偶校验+ SERR- NoISA- VGA- VGA16- Mbort->重置- FastB2B-
PriDiscTmr- SecDiscTmr- DiscTmrStat- DiscTmrSERREN-
功能:[40]电源管理版本3
标志:PMEClk - DSI - D1- D2- AuxCurrent =0mA PME (D0-、D1-、D2-、D3hot-、D3colo-)
状态:D0 NoSoftRst- PME-启用- DSel=0 DScale=0 PME-
功能:[50] MSI:ENABLE+ Count=1/1可屏蔽- 64位以上
地址:000021800054数据:0000
功能:[70] Express (v2)根端口(插槽-)、MSI 00
DevCap:MaxPayload 256字节、PhantFunc 0
ExtTag- RBE+
DevCtl:CORERR+非 FatalErr+ FatalErr+ UnsupReq+
RlxdOrd+ ExtTag- PhantFunc-AUXPWR- NoSnoop+
MaxPayload 128字节、MaxReadReq 256字节
DevSta:CORERR-非 FatalErr- FatalErr- UnsupReq- AUXPWR-发送
LnkCap:端口#0、速度5GT/s、宽度 x2、ASPM L0s、退出延迟 L0s <512ns
ClockPm-惊喜- LActRep+ BwNot- ASPMOptComp
LnkCtl:ASPM 已禁用;RCB 128字节、已禁用- CommClk+
ExtSynch- ClockPM- AutWidDis - BWInt-自动 BWInt-
LnkSta:速度2.5GT/s (降级)、宽度 x1 (降级)
TrErr- Train - SlotClk+ DLActive+ BWMgmt- ABWMgmt-
RootCap:CRSVisible -
RootCtl:勘误表-勘误表-非致命-勘误表- PMEIntEna+ CRSVisible -
RootSta:PME ReqID 0000、PMEStatus- PMEPending -
DevCap2:完成超时:范围 ABCD、TimeoutDis + NROPrP- LTR -
10BitTagComp- 10BitTagReq-不支持 OBFF、ExtFmt- EETLPPrefix -
不支持紧急节能,紧急节能减少 Init-
FRS- LN 系统 CLS 不受支持、TPHComp - ExtTPHComp - ARIFwd-
AtomicOpsCap:路由- 32位- 64位- 128位 CAS-
DevCtl2:完成超时:50uS 至50ms、TimeoutDIS- LTR- OBFF 被禁用、ARIFWD-
AtomicOpsCtl:ReqEn - eglessBlck -
LnkCap2:支持的链路速度:2.5-5GT/s、交叉链路-重定时器- 2重定时器- DRS-
LnkCtl2:目标链路速度:5GT/s、EnterCompliance-SpeedDiss-
传输裕度:正常工作范围、EnterModifiedCompliance - ComplianceSOS-
合规去加重:-6dB
LnkSta2:当前去加重级别:-3.5dB、均衡完成-均衡 Phase1-
均衡 Phase2-均衡 Phase3-链接均衡请求-
重定时器- 2重定时器-交叉链接器:不受支持
功能:[100 v1]高级错误报告
UESTA:DLP- SDES- TLP- FCP- CmpltTO- CmpltAbrt - UnxCmplt- RxOF- MalfTLP - ECRRC - UnsupReq - ACSviol-
UEMsk:DLP- SDES- TLP- FCP- CmpltTO- CmpltAbrt - UnxCmplt- RxOF- MalfTLP - ECRC- UnsupReq - ACSviol-
UESVrt:DLP+ SDES+ TLP - FCP+ CmpltTO- CmpltAbrt - UnxCmplt- RxOF+ MalfTLP+ ECRC - UnsupReq - ACSviol-
嘉年华:RxErr- BadTLP - BadDLLP-Rollover -超时- AdvNonFatalErr-
CEMsk:RxErr- BadTLP- BadDLLP-Rollover - Timeout - AdvNonFatalErr+
AERCap:第一个错误指针:00、ECRCGenCap+ ECRCGenEn- ECRCChkCap+ ECRCChkEn-
MultHdrRecCap- MultHdrRecn- TLPPfxPres- HdrLogCap-
HeaderLog:00000000 00000000 00000000 00000000
RootCmd:CERptEn+ NFERptEn+ FERptEn+
RootSta:CERCVV- MULTCERCVV- UERCVV- MULTUERCVV-
FirstFatal - NonFatalMsg- FatalMsg- IntMsg 0
错误 Src:ERR_COR:0000 ERR_FATAL/NonFATAL:0000
正在使用的内核驱动程序:pcieport

0000:01:00.0网络控制器:Qualcomm Atheros AR958x 802.11abgn 无线网络适配器(修订版01)
子系统:器件1c14:0061
控制:I/O- MEM+总线主控-频谱周期- MemWINV- VGASnoop- ParErr+步进- SERR+ FastB2B - DiscINTx-
状态:CAP+ 66MHz - UDF- FastB2B- ParErr- DEVSEL=FAST > TABORT-<TAbort- SERR-<PERR- INTx-
中断:引脚 A 路由至 IRQ 0
区域0:50100000 (64位、不可预取)的存储器[size=128K]
50200000上的扩展 ROM [虚拟][已禁用][大小=64K]
功能:[40]电源管理版本3
标志:PMEClk - DSI - D1+ D2- AuxCurrent =375mA PME (D0+、D1+、D2-、D3hot+、D3colo-)
状态:D0 NoSoftRst- PME-启用- DSel=0 DScale=0 PME-
功能:[50] MSI:启用-计数=1/4可屏蔽+ 64位+
地址:00000000000000000000数据:0000
屏蔽:00000000挂起:00000000
功能:[70] Express (v2)端点、MSI 00
DevCap:MaxPayload 128字节、PhantFunc 0、Latency L0 <1us、L1 <8us
ExtTag- Attnbtn- AttnInd- PwrInd- RBE+ FLLReset- SlotPowerLimit 0.000W
DevCtl:CORERR-非 FatalErr- FatalErr- UnsupReq-
RlxdOrd+ ExtTag- PhantFunc-AUXPWR-无监控-
MaxPayload 128字节、MaxReadReq 256字节
DevSta:CORERR-非 FatalErr- FatalErr- UnsupReq- AUXPWR-发送
LnkCap:端口#0、速度2.5GT/s、宽度 x1、ASPM L0 L1、退出延迟 L0 <2us、L1 <64us
ClockPm-惊喜- LActRep- BwNot- ASPMOptComp
LnkCtl:ASPM 已禁用;RCB 64字节、已禁用- CommClk+
ExtSynch- ClockPM- AutWidDis - BWInt-自动 BWInt-
LnkSta:速度2.5GT/s (ok)、宽度 x1 (ok)
TrErr- Train - SlotClk+ DLActive-BWMgmt- ABWMgmt-
DevCap2:完成超时:不支持、TimeoutDis + NROPrP- LTR -
10BitTagComp- 10BitTagReq-不支持 OBFF、ExtFmt- EETLPPrefix -
不支持紧急节能,紧急节能减少 Init-
FRS- TPHComp - ExtTPHComp -
AtomicOpsCap:32位- 64位- 128位 CAS-
DevCtl2:完成超时:50uS 至50ms、TimeoutDis - LTR - OBFF 被禁用、
AtomicOpsCtl:ReqEn-
LnkCtl2:目标链路速度:2.5GT/s、EnterCompliance-SpeedDis
传输裕度:正常工作范围、EnterModifiedCompliance - ComplianceSOS-
合规去加重:-6dB
LnkSta2:当前去加重级别:-6dB、均衡化完成-均衡化 Phase1-
均衡 Phase2-均衡 Phase3-链接均衡请求-
重定时器- 2重定时器-交叉链接器:不受支持
功能:[100 v1]高级错误报告
UESTA:DLP- SDES- TLP- FCP- CmpltTO- CmpltAbrt - UnxCmplt- RxOF- MalfTLP - ECRRC - UnsupReq - ACSviol-
UEMsk:DLP- SDES- TLP- FCP- CmpltTO- CmpltAbrt - UnxCmplt- RxOF- MalfTLP - ECRC- UnsupReq - ACSviol-
UESVrt:DLP+ SDES+ TLP - FCP+ CmpltTO- CmpltAbrt - UnxCmplt- RxOF+ MalfTLP+ ECRC - UnsupReq - ACSviol-
嘉年华:RxErr- BadTLP - BadDLLP-Rollover -超时- AdvNonFatalErr-
CEMsk:RxErr- BadTLP- BadDLLP-Rollover - Timeout - AdvNonFatalErr+
AERCap:第一个错误指针:00、ECRCGenCap- ECRCGenEn- ECRCChkCap- ECRCChkEn-
MultHdrRecCap- MultHdrRecn- TLPPfxPres- HdrLogCap-
HeaderLog:00000000 00000000 00000000 00000000
功能:[140 v1]虚拟通道
电容:LPEVC=0 REFCLK=100ns PATEntryBits=1
ARB:固定式- WR32- WR64- WRR128-
CTRL:ArbSelect=Fixed
状态:INPROGRESS -
VC0:电容:PATOffset=00 MaxTimeSlots = 1 RejSnooTrans -
ARB:固定- WR32 - WRR64 - WRR128 - TWRR128 - WRR256 -
CTRL:ENABLE+ ID=0 ArbSelect=Fixed TC/VC=ff
状态:NegoPending - InProgress -
功能:[300 v1]器件序列号00-00-00-00-00-00-00-00-00

0001:00:00.0 PCI 桥:德州仪器(TI)器件 b009 (修订版01)(prog-if 00 [正常解码])
控制:I/O+ MEM+ busmaster+ SpectrusCycle - MemWINV- VGASnoop- ParErr+ Stepping - SERR+ FastB2B- DiscINTx+
状态:CAP+ 66MHz - UDF- FastB2B- ParErr- DEVSEL=FAST > TABORT-<TAbort- SERR-<PERR- INTx-
延迟:0、缓存行大小:64字节
中断:引脚 A 路由至 IRQ 89
区域0:存储器位于 (32位、不可预取)
总线:primary=00、secondary =01、subordinate=ff、sec-latiter=0
桥后的 I/O:[禁用]
桥后存储器:[禁用]
桥后可预取存储器:[禁用]
次要状态:66MHz- FastB2B- ParErr- DEVSEL=fast >TAbort-<TAbort- <MAbort- <SERR- <PERR-
BridgeCtl:奇偶校验+ SERR- NoISA- VGA- VGA16- Mbort->重置- FastB2B-
PriDiscTmr- SecDiscTmr- DiscTmrStat- DiscTmrSERREN-
功能:[40]电源管理版本3
标志:PMEClk - DSI - D1- D2- AuxCurrent =0mA PME (D0-、D1-、D2-、D3hot-、D3colo-)
状态:D0 NoSoftRst- PME-启用- DSel=0 DScale=0 PME-
功能:[50] MSI:ENABLE+ Count=1/1可屏蔽- 64位以上
地址:000021020054数据:0000
功能:[70] Express (v2)根端口(插槽-)、MSI 00
DevCap:MaxPayload 256字节、PhantFunc 0
ExtTag- RBE+
DevCtl:CORERR+非 FatalErr+ FatalErr+ UnsupReq+
RlxdOrd+ ExtTag- PhantFunc-AUXPWR- NoSnoop+
MaxPayload 128字节、MaxReadReq 256字节
DevSta:CORERR-非 FatalErr- FatalErr- UnsupReq- AUXPWR-发送
LnkCap:端口#0、速度5GT/s、宽度 x2、ASPM L0s、退出延迟 L0s <2us
ClockPm-惊喜- LActRep+ BwNot- ASPMOptComp
LnkCtl:ASPM 已禁用;RCB 128字节、已禁用- CommClk-
ExtSynch- ClockPM- AutWidDis - BWInt-自动 BWInt-
LnkSta:速度2.5GT/s (降级)、宽度 x1 (降级)
TrErr- Train - SlotClk+ DLActive-BWMgmt- ABWMgmt-
RootCap:CRSVisible -
RootCtl:勘误表-勘误表-非致命-勘误表- PMEIntEna+ CRSVisible -
RootSta:PME ReqID 0000、PMEStatus- PMEPending -
DevCap2:完成超时:范围 ABCD、TimeoutDis + NROPrP- LTR -
10BitTagComp- 10BitTagReq-不支持 OBFF、ExtFmt- EETLPPrefix -
不支持紧急节能,紧急节能减少 Init-
FRS- LN 系统 CLS 不受支持、TPHComp - ExtTPHComp - ARIFwd-
AtomicOpsCap:路由- 32位- 64位- 128位 CAS-
DevCtl2:完成超时:50uS 至50ms、TimeoutDIS- LTR- OBFF 被禁用、ARIFWD-
AtomicOpsCtl:ReqEn - eglessBlck -
LnkCap2:支持的链路速度:2.5-5GT/s、交叉链路-重定时器- 2重定时器- DRS-
LnkCtl2:目标链路速度:5GT/s、EnterCompliance-SpeedDiss-
传输裕度:正常工作范围、EnterModifiedCompliance - ComplianceSOS-
合规去加重:-6dB
LnkSta2:当前去加重级别:-3.5dB、均衡完成-均衡 Phase1-
均衡 Phase2-均衡 Phase3-链接均衡请求-
重定时器- 2重定时器-交叉链接器:不受支持
功能:[100 v1]高级错误报告
UESTA:DLP- SDES- TLP- FCP- CmpltTO- CmpltAbrt - UnxCmplt- RxOF- MalfTLP - ECRRC - UnsupReq - ACSviol-
UEMsk:DLP- SDES- TLP- FCP- CmpltTO- CmpltAbrt - UnxCmplt- RxOF- MalfTLP - ECRC- UnsupReq - ACSviol-
UESVrt:DLP+ SDES+ TLP - FCP+ CmpltTO- CmpltAbrt - UnxCmplt- RxOF+ MalfTLP+ ECRC - UnsupReq - ACSviol-
嘉年华:RxErr- BadTLP - BadDLLP-Rollover -超时- AdvNonFatalErr-
CEMsk:RxErr- BadTLP- BadDLLP-Rollover - Timeout - AdvNonFatalErr+
AERCap:第一个错误指针:00、ECRCGenCap+ ECRCGenEn- ECRCChkCap+ ECRCChkEn-
MultHdrRecCap- MultHdrRecn- TLPPfxPres- HdrLogCap-
HeaderLog:00000000 00000000 00000000 00000000
RootCmd:CERptEn+ NFERptEn+ FERptEn+
RootSta:CERCVV- MULTCERCVV- UERCVV- MULTUERCVV-
FirstFatal - NonFatalMsg- FatalMsg- IntMsg 0
错误 Src:ERR_COR:0000 ERR_FATAL/NonFATAL:0000
正在使用的内核驱动程序:pcieport

供应商说、我们需要确保禁用 CONFIG_PCI_MSI、并且我们已检查 ath9k 是否使用 use_msi=0。
但是、我们尝试使用 use_msi=1加载 ath9k、并且分配了 IRQ、并且创建了 wlan0设备、但从未到达中断。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    团队、

    您是否能够帮助解决我们客户的问题?

    谢谢、
    Daniel

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好!

    我对延迟回复表示歉意、  

    [引用 userid="498549" url="~/support/processors-group/processors/f/processors-forum/1036349/66ak2e05-keystone-ii---wifi-pcie-card-ath9k---no-msi-support---interrupt "]供应商说,我们需要确保禁用 CONFIG_PCI_MSI [/quot]

    是的、正确。 但我们必须使用"make menuconfig"禁用 CONFIG_PCI_MSI

    此链接可能会有所帮助: https://software-dl.ti.com/processor-sdk-linux/esd/docs/06_03_00_106/linux/Foundational_Components/Kernel/Kernel_Drivers/PCIe/PCIe_Root_Complex.html?highlight=pcie#pcie-root-complex

    谢谢、

    Rajarajan U

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    使用 未设置的 CONFIG_PCI_MSI 配置内核 会禁用 Keystone II PCIe 主机控制器的 Linux 内核支持(配置选择)。

    因此  、负责   CPU 66AK2E05的2个控制器的 Linux 模块的探测失败。

    PS: 从 Linux 内核`make menuconfig`:


    PCI_keyston_host 取决于 PCI_MSI_IRQ_domain、这取决于 PCI_MSI

     │符号:PCI_MSI_IRQ_domain [=n]│
     │类型 :bool│
     │  在 drivers/PCI/Kconfig:24│中定义
     │  取决于:PCI_MSI [=n]│
     │  选择:generic_MSI_IRQ_domain [=n]│

     │符号:PCI_keyston_host [=n]│
     │类型 :bool│
     │提示:PCI Keystone 主机模式│
     │位置:│
     │    ->总线支持│
     │      -> PCI 控制器驱动程序│
     │        -> DesignWare PCI 内核支持│
     │(1)      -> TI Keystone PCIe 控制器(PCI_梯 形[=y])│
     │  在 drivers/PCI/ controller/DWC/Kconfig:116│中定义
     │  取决于:PCI [=y]&& PCI_KeyStone [=y]&& PCI_MSI_IRQ_domain [=n]│
     │  选择:PCIe_DW_HOST [=n]│

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    尊敬的 TI 团队:

    我们是否有任何关于如何继续的反馈或建议?

    谢谢、

    Daniel

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    Daniel、您好!

    问题是由"Request_IRQ (IRQ、ath_ISR、IRQF_shared、"ath9k"、SC)"中的"context"参数(我们的案例是"sc"指针变量)引起的; "在处理共享中断线路时不应为 NULL (IRQF_shared 标志为 on)。

    要理解这一点,请考虑以下情形:您有两个相同的网卡共享相同的 IRQ。 同一驱动程序将传递相同的中断处理程序函数、相同的 IRQ 编号和相同的说明。 除了通过上下文参数之外、无法区分注册的两个实例。

    因此、作为预防措施、如果您传递 IRQF_SHARED 标志、则无法传递 NULL 上下文参数。 请尝试 使用 IRQF_NO_SUSPEND 并提供观察结果。

    我们将分析该变量为什么为 NULL。

    在以下文件中:"ti-processor-sdk-linux-k2e-evm-06.03.00.106/board-support/linux-4.19.94+gitAUTOINC+be5389fd85-gbe5389fd85/drivers/net/wireless/ath/ath/at9k/pci.c"

    行号:975和977

    if (!msi_enabled)
    		ret = request_irq(pdev->irq, ath_isr, IRQF_SHARED, "ath9k", sc);
    	else
    		ret = request_irq(pdev->irq, ath_isr, 0, "ath9k", sc);

    "TI-processor-sdk-linux-k2e-evm-06.03.00.106/board-support/linux-4.19.94+gitAUTOINC+be5389fd85-gbe5389fd85/drivers/net/wireless/ath/ath9k/AHB.c"

    行号:125

    ret = request_irq(irq, ath_isr, IRQF_SHARED, "ath9k", sc);

    谢谢、

    Rajarajan U

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好、Rajarajan、

    感谢您的支持。

    我们已应用您的建议(源代码补丁)、但结果与无法加载 ath9k 驱动程序之前相同。

    内核 dmesg 命令(在代码更改后)为:

     ath9k 0000:01:00.0:启用设备(0140 -> 0142)
     ath9k 0000:01:00.0:将 MRRS 限制为256
     ath9k 0000:01:00.0:Request_IRQ 失败
     ath9k:0000:01:00.0的探测失败,错误-22

    任何其他可以解决问题的建议都是值得欢迎的。

    Ioannis。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    尊敬的所有人:

    我们观察到类似的问题、解决方案是设置传统中断控制器的中断类型。  

    这可以通过在 传统中断控制器上设置#interrupt-cells =<2>来完成。
    您还需要修改中断映射。 在末尾添加 IRQ_TYPE_EDGE_RISING
    中断映射的每一行的内容。

    此致、
    Thanasis

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好、Thanasis、

    建议的解决方案解决了我们的问题。

    干得不错!

    此致、

    Ioannis。