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.

[参考译文] Linux/AM5728:清除 WiLink8 GPIO 中断事件

Guru**** 2551110 points
Other Parts Discussed in Thread: AM5728

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

https://e2e.ti.com/support/processors-group/processors/f/processors-forum/620596/linux-am5728-clearing-wilink8-gpio-interrupt-event

器件型号:AM5728

工具/软件:Linux

在我们的最后一个项目中,我们将 WiLink 8与 Renesas ARM 处理器集成在一起,并且必须修改 wlcore Linux 内核驱动程序中的 wlcore_IRQ()函数以清除中断(WLAN_IRQ),从而使无线电正常工作。 如果我们没有清除它、示波器显示线路保持高电平、无线电不工作。

 为了清除它、我们执行了以下操作:

     //我们的定制

       void __iomem *irc1 = IOMEM (0xfcfef804);

       U16值;

       值=__raW_readw (irc1);

       值= 0x0000;

       _raW_writew (value、irc1);

 

在 AM5728上、我看到 GPIO IRQ 保持高电平的行为相同、因此我认为需要清除它。 我在论坛上没有找到任何东西作为如何做到这一点的例子。

当我搜索 TRM 时、第6875页(和前几页)显示了 GPIO_IRQSTATUS_CLR_X 寄存器。 描述为“向某个位写入1会禁用相应的中断事件。”。 这是否意味着清除它?

 我的 GPIO 复用为 GPIO 1_25:

WLAN_PINS_DEFAULT:WLAN_PINS_DEFAULT{
pinctrl-single、引脚=<
- 0x234 (PIN_OUTPUT 下拉| MUX_MODE14)/* mmc3_dat6.GPIO1_24 */
- 0x1c8 (PIN_INPUT 下拉| MUX_MODE14)/* mmc3_dat7.GPIO1_25 */
+ 0x39c (PIN_OUTPUT 下拉| MUX_MODE14)/* mmc3_dat6.GPIO1_24 */
+ 0x3a0 (PIN_INPUT_PULLUX | MUX_MODE14)/* mmc3_dat7.GPIO1_25 *
>;
};

 如何清除此 IRQ 事件? 谢谢。

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

    请在 WiLink 论坛上咨询: e2e.ti.com/.../307
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好、Biser、

    我将执行此操作、但问题实际上是如何通过写入 AM5728上的寄存器来清除 IRQ 事件。

    例如、GPIO_IRQSTATUS_CLR_X 是正确的寄存器吗?

    谢谢、

    Phil
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    它应该是 GPIO_IRQSTATUS_X 寄存器。 向某个位写入1会将其清除为0。 写入0无效。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    我尝试了以下操作:

    int * clearInterrupt = 0x4ae10030;
    
    writel (0x1、clearInterrupt); 

    这导致了内核回溯:

    [29.444940]无法处理虚拟地址4ae10030
    [29.452219] PgD = eda336c0
    [29.454937][4ae10030]* PgD=00000000
    [29.458556]内部错误:Oops:A05 [#1]抢占 SMP ARM
    [29.464064]链接的模块: arc4 wl18xx wlcore mac80211 snd_soc_omap_hd_audio snd_osoc_core snd_pcm_dmaengine snd_PCM cfg80211 snd_timer rpcps_rpmcps_rpomapdrm snd core scopti_rpmsgdr_总 线 snd_kms_dms_dma_dmaengine verti video_premoti_remote_remoti_prb2pvid_omap_remote_infote_remote_infote_remote_infote_remote_infote_infote_infote_remote_infote_infote_infote_remote_infote_infote_infote_infote_remote_infote_infote_infote_infotain_infotain_infotain_infotain_infote_infotain_infotain_infotainme_infotainme_infotainme_infotainme_infotainme_infotainme_infotainme_infotainme_ Apcom_pll v4l2_common PWM_tiehrpwm videodev wlcore_SDIO RTC_Paltina media SPI_OMAP2_mcspi omap_remoteproc remotio virtio_ring uio_pdrv_genirq uio cryptodev (O) autofs4
    [29.533534] CPU 配置:664 1:CPU 配置 o 4.4.41 #19
    [29.540873]硬件名称:通用 DRA74X (平展器件树)
    [29.546991]任务:ee321200 ti:ed6a6000 task.ti:ed6a6000
    [29.552457] PC 位于 wl1271_op_add_interface+0x860/0x974 [wlcore][0x8528_r_r_r_[29.5528]
    PC 位于 wlr_r_r_arm_29.5524][0x27842b_r_r_r_r_r.24]
    ] LR:[ ] PSR:a00e0013
    [29.562781] sp:ed6a7d38 ip:ed6a7d28 fp:ed6a7d94
    [29.574307] R10:ee21cba8 R9:00000003 R8:00000000
    [ae57951] r7:ed6b8d105 R6:b600dr4:29.00r4:b6d10000r4:29.00r3 r3 r3:0000000r3:0000000r4
    00000001 r0:00000028
    [29.592659]标志:SVC_32 ISA ARM 段用户
    [29.599823]控制:30c5387d 表:ada336c0 DAC:555555
    [29.605592]进程配置(pid:
    堆栈限制= 0xed6a6210 = 0xed6a6210)[0x1606a648](0xd76428])[29.60555555642]进程配置(pid:29.60556428](pid:0x6a6a62682106428])
    ed6a7dac ee21ca8
    [29.624297] 7d40:ed6b8160 ed6b8d7c ee21c88 ee21cbac 00000000 EE21ca8 00000000
    [29.632510]7d60:64021ca8 0000000EE21c0 ed4000 6b786dc80
    eed4000 e7dc78000[29.6b7d7d7df7e7d7d7dc0007d7e7dc000:0000000e7d7d7d7d7d7dc000e7d7d7e4000 eede7d7d7d7e80]7d7d7d7d7d7df7d7d7d7d7e4000eede24000e24000e80eedeede80]7d7d7d7d7dc24000eede24000e24000eedeede247d7d7d7d7d7d7d7
    
    00001043 bf5be6a0 ee21c030 00000000 00000000 000000ca ed6a7dfc ed6a7de8
    [29.665358] 7de0:bf592dd4 bf592480 ee21c000 00001043 ed6a7e24 ed6a7e00 c00 c538c bf592dd4 bf592480 ee212480 e000e1002e7e1002 e1002
    e7e2480 e1002 e7e1002 e7e1002 7e1002 7e1002 7e1002 e24000e240007e7e1002e24e24000e7e1002e7e1002e7e1002e7e1002e1002e7e1002e1002e7e7e1002e1002e1002e1002
    :0000000e24e7e
    ed6a7e74 ed6a7e50 c03e5718 c03e55b8 00000000 ed6a7e98 00000000 edc6840c
    [29.698204] 7e60:bef44c18 00000000 ed6a7e4 ed6a7e78 c0443e58 c000000000021e5704 6a7e94204]7e0007e4002 e00024000240007e24000240002 e240002 e240007e240002 e240007e240002 e240007e240007e24000240002
    
    
    ee447520 bef44c18 c06c0140 bef44c18 ed6a6000 00000000 ed6a7ef4 ed6a7e8
    [29.731052] 7e0:c0445804 c04437e0 ed6a7f14 ed6a7ef8 c03c7468 c0445263 bef4418 c18 c0007e40
    c40
    c0007e40 c40 c40 c0007e40 c40 6a7e40 c40 c0007e40:6a307e40 c40 c40 c40 c0007e40 c0007e40
    00000000 ee447500 c000fbc4 ed6a6000 ed6a7f6c ee2d3900 00000003 e2d3900
    [ 29.763896] 7f60:00008914 bef44c18 ed6a6000 00000000 ed6a7fa4 ed6a7f80 c0135060 c0134a248 [
    29.77000248a80 f0007100000248 e0007f000248:0000000248 e0007f000248:00000003e000248e0007f100000248
    
    00095248 bef44e0c bef44f19 00000036 000951f8 bef44e0c bef44c18 00000003
    [29.796743] 7fe0:000b42dc bef44bac 0001b234 b6eb94d6 20070030 00000003 016c0100 0000028b
    [29.804951] Backtrace
    [29.7532 ](wl1271_op_add_interface [wlcore])、来自[ ](drv_add_interface+0x38/0x84 [mac80211])
    [29.818273] R10:ffff R9:00000001 R8:ee21c4c0 r7:ee21c030 R6:ee21c000 R5:ed6b83e0
    [29.826177] R4:ee21c4c0
    [29.828860] ](drv_add_interface [mac80211])、来自[ ](ieee80211_do_open+0x41c/0x908 [mac80211])
    [29.839425] R5:ed6b83e0 R4:ee21c4c8
    [29.843166][ ](ieee80211_do_open [mac80211])、来自[ ](ieee80211_open+0x58/0x5c [mac80211])
    [29.853294] R10:000000ca R9:00000000 R8:00000000 r7:ee21c030 R6:bf5be6a0 R5:00001043
    [29.861195] R4:ee21c4c0
    [29.863820] ](ieee80211_open [mac80211])从[ ](_DEV_OPEN+b0x114)
    [29.872466] R5:00001043 R4:ee21c000
    [29.876076][ ](_DEV_open)从[ ](_DEV_CHANGE_FLAGS+0x9C/0x14c)
    [29.884111] r7:00001002 R6:00000001 R5:00001043 R4:ee21c000
    [29.889832][ ](_DEV_CHANGE_FLAGS)从[ ](DEV_CHANGE_FLAGS+0x20/0x50)
    [29.898304] R9:00000000 R8:00000000 r7:edc6840c R6:00001002 R5:ee21c138 R4:ee21c000
    [29.906131][ ](DEV_CHANGE_FLAGS)从[ ](devinet_ioctl+0x684/0x738)
    [29.914340] R9:00000000 R8:bef44c18 r7:edc6840c R6:00000000 R5:ed6a7e98 R4:00000000
    [29.922162][ ](devinet_ioctl)从[ ](inet_ioctl+0x19c/0x1c8)
    [29.929848] r10:00000000 r9:ed6a6000 r8:bef44c18 r7:c06c0140 r6:bef44c18 r5:ee447520
    [29.937752] r4:00008914
    [29.940307][ ](inet_ioctl)从[ ](sock_ioctl+0x134/0x290)
    [29.947738][ ](sock_ioctl)从[ ](do_vfs_ioctl+0x3f0/0x614)
    [29.955337] r7:00000003 r6:ee2d3900 r5:ee447520 r4:bef44c18
    [29.961056][ ](do _vfs_ioctl)、从[ ](sys_ioctl+0x3c/0x64)
    [29.968393] R10:00000000 R9:ed6a6000 R8:bef44c18 r7:00008914 R6:ee2d3900 R5:00000003
    [29.976296] R4:ee2d3900
    [ 29.978852][ ](sys_ioctl)从[ ](RET_FAST_SYSCALL+0x0/0x34)
    [29.986452] R9:ed6a6000 R8:c000fbc4 r7:00000036 R6:bef44f19 r5:bef44e0c r4:00095248
    [eb116994271]代码:eb28a3b7 e3a0a043a1001- e2e1001- e2e2e2e2e2e2e1001- e2e2e2e2e2e3e2e2e1001- e2e0e2e2e2e2e2e2e1001-
    e2e0e0e2e2e 

    我还尝试了:

    void __iomem *irc1 = IOMEM (0x4ae10030);
    u32值;
    值=__raW_readw (irc1);
    值= 0xFFFFFFF;
    _raW_writew (value、irc1); 

    这也会导致回溯。

    我发现了一些在线接口、如下所示:

    omap_clear_gpio_irqstatus ()//清除
    
    OMAP-enable_IRQ ()之前的旧中断//启用 GPIO 中断 

    是否有有关如何使用这些工具的示例?

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    正如我说过的、请在 WiLink 论坛上提问。 这可能需要在驱动程序内部进行修补、WiLink 团队对此有一定的了解。