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:键盘驱动程序不工作

Guru**** 2585275 points
Other Parts Discussed in Thread: AM5728, REMOTI, TPD12S015, SYSCONFIG

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

https://e2e.ti.com/support/processors-group/processors/f/processors-forum/634114/linux-am5728-keypad-driver-not-working

器件型号:AM5728
主题中讨论的其他器件: TPD12S015SysConfig

工具/软件:Linux

我正在尝试使用 AM5728键盘器件。 我正在使用内核4.4.4.41。

我在引导加载程序的 mux_data.h 文件中复用了4行和4列:

   {VIN2A_D3、(M9 | PIN_OUTPUT)}、              // vin2a_D3.kbd_col0 *
   {VIN2A_D4、(M9 | PIN_OUTPUT)}、              /* vin2a_D4.kbd_col1 *
   {VIN2A_D5、(M9 | PIN_OUTPUT)}、              // vin2a_D5.kbd_col2 *
   {VIN2A_D6、(M9 | PIN_OUTPUT)}、              // vin2a_D5.kbd_col3 *
   {VIN1A_DE0、(M9 | PIN_INPUT_PULLUP)}、       // vin1a_de0.kbd_row0 *
   {VIN1A_FLD0、(M9 | PIN_INPUT_PULLUP)}、      /* vin1a_fld0.kbd_Row1 *
   {VIN1A_D8、(M9 | PIN_INPUT_PULLUP)}、        /* vin1a_D8.kbd_Row2 *
   {VIN1A_D9、(M9 | PIN_INPUT_PULLUP)}、        // vin1a_D9.kbd_Row3 *

我已经使用 keyboard_om4配置了内核。

我已将此条目添加到 OCP 节点中的 dra7.dtsi 文件中(请注意不同版本的中断规范、不起作用):

      键盘:键盘@4ae1c000{
           兼容="ti、OMAP4-keypad";
           reg =<0x4ae1c000 0x80>;
           中断= ;
//           中断= ;
//           中断扩展=<&crossbar_MPU GIC_SPI 115 IRQ_TYPE_LEVEL_HIGH>;
//           中断扩展=<&crossbar_MPU GIC_SPI 120 IRQ_TYPE_LEVEL_HIGH>;
           键盘、num-rows =<4>;
           键盘、num 列=<4>;
                linux、keymap =<
                   0x00000041 0x00010042 0x00020043 0x00030044
                   0x01000045 0x01010046 0x01020047 0x01030048
                        0x02000049 0x0201004a 0x0202004b 0x0203004c
                   0x0300004d 0x0301004e 0x0302004f 0x03030050
             >;
           };

此外、在我们的定制.dts 文件中:

键盘{(&P)
   状态="正常";
};

当我使用上述配置启动电路板时、我会在日志中获得以下输出:

[10.319049]  未处理故障:异步外部中止(0x1211)、0x00000000

[10.319055]  ------ [在此处剪切]-----

[10.319067]  警告:CPU:0 PID:248 at drivers/bus/omap_l3_oc.c:147 l3_interrupt_handler+0x25c/0x368 ()

[10.319071]  44000000.OCP:L3自定义错误:主 MPU 目标 L4_WKUP (读取):在功能访问期间以用户模式访问数据

[10.319130]  中链接的模块:pruss (+) omap4_keypadt (+) omap_wdt phy_omap_uag2 ti_pipe3 phy_omap_control ti_vip ti_sc_csc_vpdma v4l2_cont2mem video_mbuf2_pbudio_ti bug_video_pvideo_pvideo_pvideo_p2 video_remoti_remoti_remoti_pr_voti_voti_voti_iptine_voti_mv_v_voti_iptine_voti_mp4 voti_mvoti_iptine_voti_mvoti_mvoti_mvoti_remoti_remoti_remoti_tine_voti_voti_voti_v_

[10.319135]  CPU:0 PID:248 Comm:systemd-journal 被污染:G          O   4.4.41 #9

[10.319137]  硬件名称:通用 DRA74X (平展器件树)

[10.319141]  回溯:

[10.319151][   ](dump_backtrace)从[ ](show_stack+0x18/0x1c)

[10.319160]   r7:c02a2a78 R6:20000193 R5:00000000 R4:c06aca34

[10.319168][   ](show_stack)从[ ](dump_stack+0x8c/0xa0)

[10.319175][   ](dump_stack)从[ ](warn_slESpath_common+0x88/b8)

[10.319182]   r7:c02a2a78 r6:00000093 r5:00000009 r4:ee21bb58

[10.319188][   ](warn_slowpath_common)、来自[ ](WARN_RASPH_FMt+0x38/0x40)

[10.319196]   R8:00000017 r7:c05ddaec R6:00000002 R5:c05ddbac R4:c05ddc50

[10.319203]  [ ](warn_slowpath_fmt)、来自[ ](L3_INTERRUPT_Handler+0x25c/0x368)

[10.319207]   r3:ea22100 r2:c05ddc50

[10.319210]   R4:80080003

[10.319217]  [ ](L3_interrupt_handler)、来自[ ](handle_irq_event_perpu+b0x4/0x160)

[10.319225]   R10:c06c5ca9:eea1b540 R8:00000017 r7:00000000 R6:00000000 R5:ee1b5a0

[10.319227]   R4:eea22600

[10.319233]  [ ](handle_irq_event_perpu)、来自[ ](handle_IRQ_EVENT_+0x40/0x64)

[10.319241]   R10:00000000 R9:00000000 R8:ee808000 r7:00000000 R6:c0686cf4 R5:ee1b5a0

[10.319243]   R4:eea1b540

[10.319249][   ](handle_irq_event)从[ ](handle_fasteoi_IRQ+0xc0/0x194)

[10.319256]   r7:00000000 R6:c0686cf4 r5:eea1b5a0 r4:ee1b540

[10.319261][   ](handle_fasteoi_IRQ)、来自[ ](generic_handle_IRQ+0x2C/0x3c)

[10.319268]   r7:00000000 R6:00000000 R5:00000017 R4:c067d41c

[10.319273][   ](generic_handle_IRQ)、来自[ ](_handle_domain_IRQ+0x64/bb)

[10.319278]  [ ](_handle_domain_IRQ)、来自[ ](GIC_Handle_IRQ+0x40/0x7c)

[10.319286]   R9:00000000 R8:fa213000 r7:fa212000 R6:ee21bd18 R5:fa21200c R4:c06828c4

[10.319290][   ](GIC_Handle_IRQ)、来自[ ](_IRQ_Svc+0x40/0x74)

[10.319292]  异常堆栈(0xee21bd18至0xee21bd60)

[10.319295]  bd00:                                                      c0699560 00000009

[10.319299]  bd20:00000000 ee4722c0 ee4722c0 00000001 ee858230 ee21be38 2f2f2f2f2f 00000000

[10.319304]  bd40:00000000 ee21bd74 ee21bd78 ee21bd68 c0184048 c0490b24 20000013 ffffff

[10.319312]   R9:00000000 R8:2f2f2f2f r7:ee21bd4c R6:ffff R5:20000013 R4:c0490b24

[10.319321]  [ ](mutex_unlock)从[ ](kernfs_Iop_permiss权限+0x44/0x5c)

[10.319327][   ](kernfs_iop_permission)、来自[ ](_inode 权限+0x84/0xd8)

[10.319333]   r7:ee21be38 r6:00000001 r5:808080 r4:ee4722c0

[10.319337][   ](_inode 权限)从[ ](inode 权限+0x18/0x4c)

[10.319344]   r7:ee21be38 r6:fefefeff r5:808080 r4:ee34601d

[10.319348]  [ ](inode_permission)从[ ](LINK_PATH_BLOAD+0x6c/0x4e4)

[10.319352]  [ ](link_path_walk)从[ ](path_lookupat+0x88/0x10c)

[10.319360]   R10:00000000 R9:00000000 R8:ee21bf10 r7:00000000 R6:ee21bf10 R5:ee346000

[10.319363]   R4:ee21be38

[10.319368]  [ ](path_lookupat)从[ ](filename_lookup+0x98/0xf4)

[10.319374]   r7:00000000 R6:ee21be38 R5:ee346000 R4:00000000

[10.319378]  [ ](filename_lookup)从[ ](USER_PATH_AT_EMPTY+0x4c/0x54)

[10.319386]   R8:ee21bf40 r7:7f644ca0 r6:ee21bf10 r5:ffffffff9c r4:00000000

[10.319391][   ](USER_PATH_IT_EMPTY)从[ ](vfs_fstatat+0x54/0xa8)

[10.319397]   R6:ffffff9c R5:00000000 R4:bef47070

[10.319402]  [ ](vfs_fstatat)、来自[ ](sys_lstat64+0x28/0x44)

[10.319410]   R9:ee21a000 R8:c000fbc4 r7:000000c4 R6:7f645ca0 R5:7f644ccf R4:bef47070

[10.319416][   ](sys_lstat64)从[ ](RET_FAST_SYSCALL+0x0/0x34)

[10.319418]   R4:7f64658

[10.319421]  --[结束线迹 d673a89005621914 ]--

[10.677550]  [DRM]已初始化 DRM 1.1.0 20060810

[10.749385]  PgD = ee35d5c0

[10.752102]  [000000000000]* PgD=00000000

[10.755700]  内部错误:1211 [#1]抢占 SMP ARM

[10.76094]  链接的模块:pvrsrvkm (O+) DRM omapdss (+) omapdss 基本 pruss (+) omap4_keypadt phy_omap_osb2_ti_pipe3 mpy_control ti_vap_vap_vapi_st_stiptine_pvideo_video2 video_remoti_remoti_iptid_iptine_video2 video2 pvideo_remoti_remoti_remoti_remoti_remoti_iptine_vap2

[10.804000]  CPU:1 PID:308 Comm:systemd-udevd 被污染:G       W O   4.4.41 #9

[10.811686]  硬件名称:通用 DRA74X (平展器件树)

[10.817801]  任务:ee2e1200 ti:edd08000 task.ti:edd08000

[10.823226]  PC 位于 OMAP4_SPACK_PROBE +0x288/0x438 [OMAP4_SPACKT]

[10.829432]  LR 位于_pm_runtime_resume+0x64/0x6c

[10.834240]  PC:[ ]   LR:[ ]   PSR:400f0013

[10.834240]  sp:edd09c88 ip:edd09c68 fp:edd09cc4

[10.845764]  R10:eea6ba00 R9:00000000 R8:ed828640

[10.851008]  r7:eea89610 R6:eea89600 R5:00000000 R4:ed828000

[10.857557]  r3:fc1c000 r2:00000000 r1:600f0013 r0:00000000

[10.864110]  标志:   模式 SVC_32 ISA ARM 段用户的 FIQ 上的 nZcv IRQ

[10.871272]  控制:30c5387d 表:ae35d5c0 DAC:55555555

[10.877041]  处理系统 ud-udevd (pid:308、栈限制= 0xedd08210)

[10.883597]  堆栈:(0xedd09c88至0xedd0a000)

[10.887972]  9c80:                  00000080 00000000 eea6cf40 00000000 eea89618 c06fff5c

[10.896184]  9ca0:ee89610 bf242bdc fffdfb 0000002f ed828e48 00000000 edd09ce4 edd09cc8

[10.904396]  9cc0:c030d990 bf2423f0 c06fff5c eea89610 00000000 bf242bdc edd09d0c edd09ce8

[10.912605]  9ce0:c030bf18 c030d948 ee89610 bf242bdc ee89644 00000000 127d71dc ed828e48

[10.920816]  9d00:edd09d2c edd09d10 c030c0a0 c030bd20 00000000 bf242bdc c030c00c 00000000

[10.929027]  9d20:edd09d54 edd09d30 c030a1a0 c030c018 ee85bc5c eea6bab4 ee85bc70 bf242bdc

[10.937237]  9d40:ee8e5b00 c06b4550 edd09d64 edd09d58 c030b804 c030a13c edd09d8c edd09d68

[10.945448]  9d60:c030b440 c030b7ec bf242b50 edd09d78 bf242bdc bf245000 c0684760 ed828f40

[10.953657]  9d80:edd09da4 edd09d90 c030c840 c030b2a4 c06b4550 bf245000 edd09dbc edd09da8

[10.960273]  连接器-HDMI 连接器:找不到视频源

[10.967983]  9da0:c030d8b8 c030c7cc c0684760 bf245000 edd09dcc edd09dc0 bf245020 c030d87c

[10.976195]  9dc0:edd09e4c edd09dd0 c000978c bf24500c 00000000 00080000 00000001 ef40ea70

[10.984407]  9de0:edcb100 c010911c edd08000 ee801e40 edd09e08 00009fa3 edd09e3c edd09e08

[10.987439]  panel-dpi 显示:无法找到视频源

[10.998118]  9e00:c0114464 c011390c 00000001 c010911c 127d71dc 0000001b edcbc100 f2ca3000

[11.002968]  tpd12s015编码器:找不到视频源

[11.011834]  9e20:00000001 bf242c40 00000001 ed828f00 00000001 127d71dc ed828e48 bf242c40

[11.020047]  9e40:edd09e74 edd09e50 c00d239c c0009700 edd09e74 edd09e60 c0109208 edd09f44

[11.028259]  9e60:00000001 ed828e40 edd09f3c edd09e78 c00a9d98 c00d2340 bf242c4c 00007fff

[11.0364470]  9e80:bf242c40 c00a6f94 ee22ec00 c05bf8c8 c05bf8a0 c05bf894 c05bf8f8 c0498708

[11.044682]  9ea0:00000000 bf242c4c f2cdddc bf242de0 c068248c bf242e00 bf242c88 c00a6904

[11.052892]  9ec0:f2ca3000 0001ae2c 005c2951 00000000 0000000e 00000000 00000000 00000000 00000000

[11.061102]  9ee0:00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000

[11.069312]  9f00:00000000 00000000 00000000 000000000000000000d8 00000000 00000006 b6e47d90

[11.077523]  9f20:0000017b c000fbc4 edd08000 00000000 edd09fa4 edd09f40 c00aa1d8 c00a7fap

[11.085733]  9f40:00000002 f2ca3000 0001ae2c f2cbd83c f2cb6e33 f2cb766c 00000e00 00001040

[11.093943]  9f60:00000000 00000000 00000bec 00000024 00000025 0000000e 0000000b

[11.102155]  9f80:00000009 00000000 00000000 00000000 7f6a8de0 00000000 00000000 edd09fa8

[11.110367]  9fa0:c000fa20 c00aa15c 00000000 7f6a8de0 00000006 b6e47d90 00000000 00000000

[11.118577]  9fc0:00000000 7f6a8de0 00000000 0000017b 7f6ac428 00000000 7f6ac428 7f6ac118

[11.126788]  9fe0:bed566950 bed56940 b6e40c08 b6f2ddf2 80070030 00000006 00000000 00000000

[11.134994]  回扫:

[11.137468]  [ ](OMAP4_SPACK_PROBE [OMAP4_SPACK_PADCK_])、来自[ ](platform_drv_probe +0x54/b8)

[11.147423]   R10:00000000 R9:ed828e48 R8:0000002f r7:fffdfb R6:bf242bdc R5:ee89610

[11.155320]   R4:c06fff5c

[11.157872]  [ ](platform_drv_probe)、来自[ ](DRIVER_PROBLE_DEVICE_0x204/0x2f8)

[11.166779]   r7:bf242bdc r6:00000000 r5:ee89610 r4:c06fff5c

[11.172498]  [ ](driver_probe_device)从[ ](__driver_attach+0x94/0x98)

[11.180971]   R9:ed828e48 R8:127d71dc r7:00000000 R6:ee89644 R5:bf242bdc R4:ee89610

[11.188798]  [ ](__driver_attach)从[ ](BUS_TO_EASE_DEV_0x70/0xa4)

[11.197009]   r7:00000000 R6:c030c00c R5:bf242bdc R4:00000000

[11.202730][   ](bus_for_each_dev)、来自[ ](DRIVER_ATT+0x24/0x28)

[11.210764]   R6:c06b4550 R5:ee8e5b00 R4:bf242bdc

[11.215426][   ](driver_attach)从[ ](BUS_ADD_DRIVER+0x1a8/0x220)

[11.22348]  [ ](BUS_ADD_DRIVER)从[ ](DRIVER_REGISTER+0x80/0x100)

[11.231595]   r7:ed828f40 R6:c0684760 R5:bf245000 R4:bf242bdc

[11.237312]  [ ](driver_register)、从[ ](__platform_driver_register+0x48/0x50)

[11.246395]   R5:bf245000 R4:c06b4550

[11.250006]  [ ](__platform_driver_register)、来自[ ](OMAP4_SPACK_DRIVER_INIT+0x20/0x24 [OMAP4_SPACT])

[11.261182]   R5:bf245000 R4:c0684760

[11.264793]  [ ](OMAP4_SPACK_DRIVER_INIT [OMAP4_SPACT])、来自[ ](do_one _initcall+0x98/0x1e4)

[11.275102][   ](多个_initcall)、来自[ ](DO_INIT_MODULE+0x68/0x374)

[11.283225]   R10:bf242c40 R9:ed828e48 R8:127d71dc r7:00000001 R6:ed828f00 R5:00000001

[11.291127]   R4:bf242c40

[11.293678]  [ ](DO_INIT_MODULE)从[ ](LOAD_MODULE+0x1df8/0x2068)

[11.301710]   R6:ed828e40 R5:00000001 R4:edd09f44

[11.306365][   ](LOAD_MODULE)从[ ](SYS_FINIT_MODULE+0x88/0x98)

[11.314222]   R10:00000000 R9:edd08000 R8:c000fbc4 r7:0000017b R6:b6e47d90 R5:00000006

[11.322115]   R4:00000000

[11.324666][   ](sys_finIT_module)从[ ](RET_FAST_SYSCALL+0x0/0x34)

[11.332872]   R6:00000000 R5:7f6a8de0 R4:00000000

[11.33751]  代码:eb431885 e1a00009 eb443ac1 ea000018 (e5842018)

[11.343651]  --[结束线迹 d673a89005621915 ]--

我发现、当我使用中断115时、它会导致其他驱动程序无法加载时出现大量错误。 120的行为更好(但仍然提供堆栈转储)。 在这种情况下、会加载其他驱动程序、我会获得一个/dev/input/event0器件。 但是、按下电路板上的按钮不会导致/dev/input/event0.的任何输出

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    软件团队已收到通知。 他们将在这里作出回应。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    尊敬的 Thomas:

    如您所述、您的问题以 L3自定义错误开头:
    [10.319071] 44000000.OCP:L3自定义错误:主 MPU 目标 L4_WKUP (读取):在功能访问期间以用户模式访问数据
    我认为、这可能的根本原因是、正如您所说的、错误地使用中断。

    之后,问题似乎是键盘驱动程序与视频驱动程序有某种程度的混淆。 问题从探测键盘 DTS 开始:
    PC 位于 OMAP4_SPACK_PROBE +0x288/0x438 [OMAP4_SPACKIT]
    然后、您会发现内核无法解析视频源:
    连接器 HDMI 连接器:找不到视频源
    面板-dpi 显示:无法找到视频源
    tpd12s015编码器:找不到视频源

    您是否正在使用定制板? 您能否检查是否已删除相应的 VIN 引脚和 VIN 驱动器? VIN 和键盘都可能尝试使用事件0来注册系统中的活动。 是否可以尝试删除显示器和触摸屏驱动程序(如果有)并查看问题是否仍然存在?

    请注意、除了处理 mux_data.h 外、sdk04.01还在 u-boot 中使用 DTS 文件。 您还需要注意此设备树文件中的设置。 DTS 文件位于 arch/arm/dts/中。

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

    是的、我们使用的是定制板。 我将检查 DTS*文件,以确保我们没有多路复用冲突的引脚。
    我们还有一些其他信息可以说明这个问题。 我们看了 OMAP4-keypad.c 驱动程序文件、并注意到它在 AM57xx 寄存器空间的0x4ae1c000处读取了 KBD_REVISION 寄存器。 当我们使用 devmem 读取该寄存器时、会得到以下结果:

    # devmem 0x4ae1c000 32.
    [40.585243]未处理的故障:异步外部中止(0x1211)在0x00000000
    [40.585252]------ [在此处剪切]-----
    [40.585303]警告:CPU:0 PID:0在 drivers/bus/omap_l3_oc.c:147 l3_interrupt_handler+0x25c/0x368 ()上
    [40.585316] 44000000.OCP:L3自定义错误:主 MPU 目标 L4_WKUP (读取):在功能访问期间以用户模式访问数据
    [40.585569]链接的模块: cfg80211 bc_example (O) snd_osc_omap_hdmi 音频 snd_oc_OMAP rpmsg_rpmsg_rpd_soc_core snd_pcm_dmaengine snd_pcmd_timer snd 核心 omapdrm video_rpmsgmsgm_总 线031_kms_ssnverti voti_remoti_remoti_pri voti_pb2premoti_remoti_remoti_ombpvoti_remoti_remoti_ombpvoti_remoti_ombpb2 voti_remoti_remoti_remoti_remoti_ompvap_ompbpbpvap_remoti_remoti_remoti_remoti_remoti_remoti_ompvap_ompbpvap_ompbpbpvap_ompbpbpbpb2 voti_remoti_remoti_remoti_om Virtio_ring uio_pdrv_genirq uio cryptodev (O) Fluke_mi_HP v4l2_common videodev 介质自动配置4.
    [40.585586] CPU:0 PID:0 Comm:swapper/0被污染:g O 4.4.41 #11
    [40.585593]硬件名称:通用 DRA74X (平展器件树)
    [40.585603]背迹:
    [40.585644][ ](dump_backtrace)从[ ](show_stack+0x18/0x1c)
    [40.585672] r7:c02a2a78 r6:200f0193 r5:00000000 r4:c06aca34
    [40.585701][ ](show_stack)从[ ](dump_stack+0x8c/0xa0)
    [40.585728][ ](dump_stack)从[ ](warn_slESpath_common+0x88/b8)
    [40.585753] r7:c02a2a78 r6:00000093 r5:00000009 r4:c0681d30
    [40.585774][ ](warn_slowpath_common)、来自[ ](WARN_RASPH_FMt+0x38/0x40)
    [40.585801] R8:00000017 r7:c05ddb2c R6:00000002 R5:c05ddbec R4:c05ddc90
    [40.585824][ ](warn_slowpath_fmt)、来自[ ](L3_INTERRUPT_Handler+0x25c/0x368)
    [40.585838] r3:ea22100 r2:c05ddc90
    [40.585848] R4:80080003
    [40.585872][ ](L3_interrupt_handler)、来自[ ](handle_irq_event_perpu+b0x4/0x160)
    [40.585901] R10:c06c5ca9:eea1b540 R8:00000017 r7:00000000 R6:00000000 R5:ee1b5a0
    [40.585910] R4:eea22600
    [40.585929][ ](handle_irq_event_perpu)、来自[ ](handle_IRQ_EVENT_+0x40/0x64)
    [40.585957] r10:c06824e4 r9:c04971c4 r8:ee808000 r7:00000000 r6:c0686cf4 r5:ee1b5a0
    [40.585966] R4:eea1b540
    [40.585987][ ](handle_irq_event)从[ ](handle_fasteoi_IRQ+0xc0/0x194)
    [40.586009] r7:00000000 R6:c0686cf4 r5:ee1b5a0 r4:ee1b540
    [40.586029][ ](handle_fasteoi_IRQ)、来自[ ](generic_handle_IRQ+0x2C/0x3c)
    [40.586051] r7:00000000 R6:00000000 R5:00000017 R4:c067d41c
    [40.586069][ ](generic_handle_IRQ)、来自[ ](_handle_domain_IRQ+0x64/bb)
    [40.586086][ ](_handle_domain_IRQ)、来自[ ](GIC_Handle_IRQ+0x40/0x7c)
    [40.586113] r9:c04971c4 r8:fa213000 r7:fa212000 r6:c0681ef0 r5:fa21200c r4:c06828c4
    [40.586128][ ](GIC_Handle_IRQ)、来自[ ](_IRQ_Svc+0x40/0x74)
    [40.586137]异常堆栈(0xc0681ef0至0xc0681f38)
    [40.586149] 1e0: 00000001 00000000 fe600000 00000000
    [40.586164] 1f00:c0680000 c0682484 00000000 c0681f60 c04971c4 c06824e4 c0681f4c
    [40.586176] 1f20:c0681f2c c0681f40 c0025a84 c0010540 600f0013 ffffff
    [40.586205] R9:c04971c4 R8:c0681f60 r7:c0681f24 R6:ffff R5:600f0013 R4:c0010540
    [40.586229][ ](arch_cpu_idle)从[ ](DEFAULT_IDLE_CALL + 0x28/0x34)
    [40.586250][ ](DEFAULT_IDLE_CALL)从[ ](CPU_STARTUP_END+0x200/0x260)
    [40.586269][ ](CPU_STARTUP_INPUK)、来自[ ](REST_INIT+0x90/0x94)
    [40.586279] r7:00000000
    [40.586298][ ](REST_INIT)从[ ](start_kernel+0x404/0x410)
    [40.586313] R5:c06c8000 R4:c06c8040
    [40.586328][ ](start_kernel)从[<80008090>](0x80008090)
    [40.586336]--[结束线迹80ba50c8aa2bf87b ]---
    [40.946661] PgD = ecaa5c80
    [40.949392][00000000]* PgD=ac891003,* PMD=fe2f8003
    总线错误(转储内核)

    此错误与我们在引导日志中看到的错误非常相似。 是否知道为什么读取修订版寄存器会导致这种情况? AM5728中是否存在器件问题?

    谢谢、

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

    好的、内核似乎没有启用键盘控制器时钟。

    我在 AM5728 EVM 上遇到相同的错误:

    root@am57xx-EVM:~# devmem2 0x4AE1C000
    /dev/mem 已打开。
    [32.565004]未处理故障:异步外部中止(0x1211)、0x00000000
    [32.565008] PgD = ece37e80
    [32.565017][00000000]* PgD=94c87003,* PMD=fb904003
    [32.565049]------ [在此处剪切]-----
    映射到地址 bb6f50000的内存。
    [32.586061]警告:CPU:1 PID:27、位于/home/gtbldadm/processor-sdk-linux-rt-morty-build/build-CORTEX_1/arago-tmp-external-linaro-toolchain/work-shared/c
    [32.610669] 44000000.OCP:L3自定义错误:主 MPU 目标 L4_WKUP (读取):在功能访问期间以用户模式访问数据
    [32.622028]链接的模块:bc_example (O) xhci_plat_hcd xhci_hcd usbcore dwc3 udc_core USB_common rpmsg_proto rpmsg_RPC SHA512_generic SHA512_arm sha)
    [32.690460] CPU:1 PID:27 Comm:IRQ/23-L3-APP-I 被污染:g o 4.9.41-rt23-gc038d21a22 #2
    [32.690463]硬件名称:通用 DRA74X (平展器件树)
    [32.690467]背迹:
    [32.690485][ ](dump_backtrace)从[ ](show_stack+0x18/0x1c)
    [32.690492] r7:00000009 R6:600e0113 R5:00000000 R4:c1024b00
    [32.690506][ ](show_stack)从[ ](dump_stack+0x8c/0xa0)
    [32.690515][ ](dump_stack)从[ ](_warn+0xec/0x104)
    [32.690520] r7:00000009 r6:c0bc4f00 r5:00000000 r4:ee625e20
    [32.690527][ ](__warn)从[ ](WARN_RASPH_FMt+0x40/0x48)
    [32.690533] R9:00000010 R8:ee5f2f50 r7:c0bc4d6c R6:00000002 R5:c0bc4e2c r4:c0bc4ed0
    [32.690542][ ](warn_slowpath_fmt)、来自[ ](L3_INTERRUPT_Handler+0x25c/0x36c)
    [32.690545] r3:ee5f2dc0 r2:c0bc4ed0
    [32.690548] R4:80080003
    [32.690557][ ](L3_interrupt_handler)、来自[ ](IRQ_Forced_thread_fn+0x28/0x7c)
    [32.690563] R10:c0282010 R9:ee5fa2c0 R8:ee5f8000 r7:00000001 R6:00000000 R5:ee5f8000
    [32.690565] R4:ee5fa2c0
    [32.690572][ ](IRQ_Forced_thread_fn)、来自[ ](IRQ_THREAD+0x124/0x1f8)
    [32.690576] r7:00000001 R6:00000000 R5:ee624000 R4:ee5fa2e4
    [32.690585][ ](IRQ_THread)、来自[ ](kthread+0x100/0x118)
    [32.690590] R10:00000000 R9:00000000 R8:c0282278 r7:ee5fa2c0 R6:ee624000 R5:ee5fa300
    [32.690592] R4:00000000
    [32.690599][ ](kthread)、来自[ ](RET_FANK_F叉+0x14/0x24)
    [32.690604] R8:00000000 r7:00000000 R6:00000000 R5:c024acc8 R4:ee5fa300
    [32.690606]--[结束线迹0000000000000002 ]--
    总线错误(转储内核)


    但是、当我启用时钟时、我能够读取键盘控制器寄存器:

    root@am57xx-EVM:~# devmem2 0x4AE07878 w 00000002 =>启用来自 PRCM 的时钟
    /dev/mem 已打开。
    映射到地址 bb6f36000的内存。
    在地址0x4AE07878 (0xb6f36878)读取:0x00030000
    在地址0x4AE07878 (0xb6f36878)写入:0x00000002、回读0x00000002
    root@am57xx-EVM:~# devmem2 0x4AE1C000 =>读取 KBD 修订版寄存器
    /dev/mem 已打开。
    映射到地址 bb6f47000的内存。
    在地址0x4AE1C000 (0xb6f47000)处读取:0x5FFF2200

    在探测 kbd 器件树信息时、您能否尝试先使用 PRCM 寄存器上的_raW_writel()启用时钟?
    或者、您能否重新访问 u-boot 和 Linux 内核中的 DTS 文件并确保设置 kbd 状态="确定"?

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

    在 dra7.dtsi 文件中、在 OCP 节点下添加了以下条目:

    键盘:键盘@4ae1c000{
    兼容="ti、OMAP4-keypad";
    reg =<0x4ae1c000 0x80>;
    中断= ;
    键盘、num-rows =<4>;
    键盘、num 列=<4>;
    linux、keymap =<
    0x00000041 0x00010042 0x00020043 0x00030044
    0x01000045 0x01010046 0x01020047 0x01030048
    0x02000049 0x0201004a 0x0202004b 0x0203004c
    0x0300004d 0x0301004e 0x0302004f 0x03030050
    >;
    };

    在 u-boot mux_data.h 文件中:

    {VIN2A_D3、(M9 | PIN_OUTPUT)}、 /* vin2a_d3.kbd_col0 */
    {VIN2A_D4、(M9 | PIN_OUTPUT)}、 /* vin2a_d4.kbd_col1 */
    {VIN2A_D5、(M9 | PIN_OUTPUT)}、 /* vin2a_d5.kbd_col2 */
    {VIN2A_D6、(M9 | PIN_OUTPUT)}、 /* vin2a_d5.kbd_col3 */
    {VIN1A_DE0、(M9 | PIN_INPUT_PULLUP)}、 /* vin1a_de0.kbd_row0 */
    {VIN1A_FLD0、(M9 | PIN_INPUT_PULLUP)}、 /* vin1a_fld0.kbd_Row1 */
    {VIN1A_D8、(M9 | PIN_INPUT_PULLUP)}、 /* vin1a_d8.kbd_Row2 */
    {VIN1A_D9、(M9 | PIN_INPUT_PULLUP)}、 /* vin1a_D9.kbd_Row3 */

    修改了 OMAP4-keypad.c 驱动程序文件如下:

    DIFF - git a/drivers/input/keyboard/OMAP4-keyboard.c b/drivers/input/keyboard/OMAP4-keyboard.c
    索引6639b2b.eec5715 100644
    ----驱动程序/输入/键盘/OMAP4-keyboard.c
    ++ b/drivers/input/keyboard/OMAP4-keyboard.c
    @@-32、6 + 32、9 @@
    #include
    #include

    // Fluke 定制。
    +#define CM_WKUPAON_KBD_CLKCTRL 0x4ae07878
    +
    /* OMAP4寄存器*/
    #define OMAP4_KBD_REVISION 0x00
    #define OMAP4_KBD_SysConfig 0x10
    @@-68、6 + 71、9 @@ enum{
    kbd_revision_omap5、
    };

    // Fluke 定制。 键盘时钟使能寄存器的基地址。
    +static void __iomem *kbd_clock_register;
    +
    struct omAP4_keypad{
    struct input_dev *输入;

    @@-244、6 +250、12 @@静态内部 OMAP4_SPACK_PROBE (struct platform_device *pdev)
    Int IRQ;
    INT 错误;

    + // Fluke 定制-打开键盘控制器的时钟。
    + //映射控制寄存器。
    + kbd_clock_register = ioremap (CM_WKUPAON_KBD_CLKCTRL、4);
    + writel (0x2、kbd_clock_register);
    + iounmap (kbd_clock_register);
    +
    RES = platform_get_resource (pdev、IORESOURCE_MEM、0);
    如果(!res){
    DEV_ERR(&PDEV->DEV,"未指定基址\n");

    器件驱动程序现在加载无错误并写入/dev/input/event0.

    Tom McManus