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:在 AM5728上运行 Linux 时、无法从 DSP1内核访问 GPIO5

Guru**** 2540720 points


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

https://e2e.ti.com/support/processors-group/processors/f/processors-forum/568662/linux-am5728-gpio5-not-accessible-from-the-dsp1-core-with-linux-running-on-the-am5728

器件型号:AM5728

工具/软件:Linux

您好!

在使用 rpmsg 加载固件且 Linux 在 A15端运行时、尝试从 DSP1内核访问和 GPIO5寄存器时出现以下错误。 我在 DSP1内核上运行 TI-RTOS。

[1709.580351]警告:CPU:0 PID:0、位于/opt/PHYTEC_BSPs/yocto_ti/build/arago-tmp-external-linaro-toolchain/work-shared/am57xx-phycore-rdk/kernel-source/drivers/bus/omap_l3_noc.c:147 L3_INTERRUPT_Handler+0x25c/0x368 ()

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

[1709.611690]中链接的模块: bc_example (O) SHA512_generic SHA512_arm SHA1_generic SHA1_arM_NEON SHA1_arm MD5 CBC SHA256_generic SHA256_arm HMAC drbg xfrm_user xfrm4_tunnel ipmsg xfrm_ipcomp 4 ahp4 rp4 rpc_proto af_key dw_key ssc drbac drb_dc p_ic vc_platform incru_promsg_tcp_probac v_probac v_promsg_prob_prob_prob_pr_g_probe_p_pru_pru_pru_tcpu_probot_p_pru_pru_pru_pru_tcpu_pru_pru_tcpu_pru_pru_tcpu_pru_pru_tcpu_pru_pru_pru_pru_pru_tcpu_pru_pru_pru_tcpu_pru_pru_pru_pru_pru_p extcon rng_core OMAP_DES RTC_PALMAS OMA_remoteproc remoteproc virtiio virtio_ring sch_fq_codel gdbserverproxy (O) cryptodev (O) cmemk (O)

[1709.671910] CPU:0 PID:0 Comm:swapper/0污染:G       W O   4.4.12 #3

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

[1709.685193]背迹:

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

[1709.695264] r7:c02e2d18 R6:20080193 R5:00000000 R4:c09d318c

[1709.700988][ ](show_stack)从[ ](dump_stack+0x90/0xa4)

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

[1709.716369] r7:c02e2d18 R6:00000093 R5:00000009 R4:c09b5d30

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

[1709.730822] R8:00000016 r7:c08af0a4 r6:00000002 r5:c08aec6c r4:c08aed10

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

[1709.746503] R3:ee1affc0 R2:c08aed10

[1709.750104] R4:80080003

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

[1709.762003] R10:c0a02d2d R9:ee1b03c0 R8:00000016 r7:00000000 R6:00000000 R5:ee1b0420

[1709.769905] R4:ee1b6440

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

[1709.781365] R10:c09b64d0 R9:c06e91e4 R8:ee008000 r7:00000000 R6:c09d33e4 R5:ee1b0420

[1709.789264] R4:ee1b03c0

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

[1709.800374] r7:00000000 R6:c09d33e4 R5:ee1b0420 R4:ee1b03c0

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

[1709.814739] r7:00000000 R6:00000000 R5:00000016 R4:c09b0424

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

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

[1709.837576] R9:c06e91e4 R8:fa213000 r7:fa212000 r6:c09b5ef0 r5:fa21200c r4:c09b6868

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

[1709.852906]异常堆栈(0xc09b5ef0至0xc09b5f38)

[1709.857978] 5e0:                                    00000001 00000000 fe600000 00000000

[1709.866192] 5f00:c09b4000 c09b6484 00000000 00000000 c09b5f60 c06e91e4 c09b64d0 c09b5f4c

[1709.874403] 5f20:c09b5f2c c09b5f40 c00268f4 c0010540 60080013 ffffff

[1709.881042] R9:c06e91e4 R8:c09b5f60 r7:c09b5f24 R6:ffff R5:60080013 R4:c0010540

[1709.888865][ ](arch_cpu_idle)从[ ](DEFAULT_IDLE_CALL + 0x28/0x34)

[1709.896993][ ](DEFAULT_IDLE_CALL)从[ ](CPU_STARTUP_END+0x204/0x264)

[1709.905645][ ](CPU_STARTUP_INPUK)、来自[ ](REST_INIT+0x90/0x94)

[1709.913417] r7:00000000

[1709.915972][ ](REST_INIT)从[ ](start_kernel+0x400/0x40c)

[1709.923483] R5:c0a05000 R4:c0a05040

[1709.927093][ ](start_kernel)从[<80008090>](0x80008090)

[1709.933646]--[结束线迹19bf9735e7555446 ]--

 请告诉我、这里可能会出现什么问题吗?

非常感谢。

此致、

Shaunak

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

    确保在器件 PRCM 中启用 GPIO5、并且您使用的地址正确。 您是否使用 PROCESSOR-SDK-LINUX-AM57X 或 PROCESSOR-SDK-RTOS-AM57X?

    另请参阅以下指针是否将在帮助中:

    e2e.ti.com/.../1973628
    e2e.ti.com/.../437761
    e2e.ti.com/.../373803

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

    您好、Pavel、

    感谢您的回答。 我正在使用 Processor SDK RTOS 并针对 DSP1内核进行开发。

    请简要介绍一下如何启用 GPIO5模块?

    非常感谢。

    此致、

    Shaunak

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

    在尝试访问 GPIO5模块之前、请检查寄存器 CM_L4PER_GPIO5_CLKCTRL (0x4A009778)。 [1:0] MODULEMODE 应与0x0不同、[17:16] IDLEST 应为0x0。

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

    您好、Pavel、

    我将0x101写入0x4a009778、但最终 IDLEST 位始终为0x02。

    请您告诉我我我可能犯了什么错误吗?

    非常感谢。

    此致、

    Shaunak

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

    是否可以尝试写入0x001而不是0x101、有什么区别?

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

    Shaunak、

    您是否还可以在 CM_L4PER_CLKSTCTRL[1:0] CLKTRCTRL (0x4a009700)中写入0x2? 在 CCS6 GEL 文件(ccsv6/ccs_base/emulation/gel/DRA75x_DRA74x/DRA7xx_prcm_config.gel)中、我们具有以下序列:

    #define L4PER_CM_CORE                                    0x4a009700

    #define L4PER_CM_CORE_CM_L4PER_CLKSTCTRL             0x000ul

    #define L4PER_CM_CORE_CM_L4PER_GPIO5_CLKCTRL         0x078ul

    #define SW_WKUP     (0x2)

    #define MODE_AUTO  (0x1)

     

    prcm_set_clkdomain_state (L4PER_CM_CORE、  L4PER_CM_CORE_CM_L4PER_CLKSTCTRL、   SW_WKUP);

    PRCM_SET_MODULE_MODE (L4PER_CM_CORE、  L4PER_CM_CORE_CM_L4PER_GPIO5_CLKCTRL、      MODE_AUTO、   0x00000000、0x00000000 );

     

    prcm_set_clkdomain_state (uint32_t module_base、uint32_t module_offset、uint32_t state)

      uint32_t REG_val;

      uint32_t TIMEOUT = CLKSTCTRL_TIMEOUOT;

      如果(debug_print)

      {

        GEL_TextOut ("module_base: %x\n"、、、、 MODULE_BASE);

        GEL_TextOut ("module_offset:%x\n"、、、、 MODULE_OFFSET);

      }

      REG_val = RD_MEM_32 (MODULE_BASE+MODULE_OFFSET);

      WR_MEM_32 (MODULE_BASE+MODULE_OFFSET、((REG_val &~(0x3))|(STAND& 0x3)));

     

    prcm_set_module_mode (uint32_t module_base、uint32_t module_offset、uint32_t mode、uint32_t exabits、uint32_t exabitsMask)

      uint32_t REG_val;

      uint32_t TIMEOUT = CLKCTRL_TIMEOUOT;

      如果(debug_print)

      {

        GEL_TextOut ("module_base: %x\n"、、、、 MODULE_BASE);

        GEL_TextOut ("module_offset:%x\n"、、、、 MODULE_OFFSET);

      }

      REG_val = RD_MEM_32 (MODULE_BASE + MODULE_OFFSET)和~(外部掩码| 0x00000003);

      WR_MEM_32 (MODULE_BASE+MODULE_OFFSET、(REG_VAL |(外部掩码和外部掩码)|(MODE 和0x3)));

      如果(debug_print)

      {

        GEL_TextOut ("\t 为模块空闲状态……\n");

      }

      while (((RD_MEM_32 (MODULE_BASE + MODULE_OFFSET)& 0x00030000)!= 0)&(TIMEOUT>0))

      {

        超时--;

      }

      如果(timeout=0)

      {

        GEL_TextOut ("module_base: %x\n"、、、、 MODULE_BASE);

        GEL_TextOut ("module_offset:%x\n"、、、、 MODULE_OFFSET);

        GEL_TextOut ("\tTIMEOUT\n");

      }

      其他

      {

        如果(debug_print)

        {

          GEL_TextOut ("\tDONE\n");

        }

      }

     

    还请注意、我们有一些时间等待空闲状态变为活动状态。


    此致、
    帕维尔

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好、Pavel、
    这对我很有用。 非常感谢。
    我以类似的方式配置 GPIO2。 然后、我将 GPIO2_2配置为输入、并使用触发软件中断
    GPIOTriggerPinInt (GPIO_base_ADDR、0、GPIO_LED_PIN);
    GPIO_BASE_ADDR =(0x48055000U)
    GPIO_LED_PIN = 0x02

    我在 Linux 控制台上看到以下内容:
    [408.989728]------ [在此处剪切]-----
    [408.994379]警告:CPU:0 PID:0 at /opt/PHYTEC_BSPs/yocto_ti/build/arago-tmp-external-linaro-toolchain/work-shared/am57xx-phycore-rdk/kernel-source/drivers/bus/omap_l3_noc.c:147 L3_interrupt_handler+0x25c/0x368 ()
    [409.013582] 44000000.OCP:L3自定义错误:主控 DSP1_MDMA 目标 L4_PER1_P3 (空闲):在功能访问期间以用户模式访问数据
    [409.025715]模块链接到: rpmsg_proto bc_example (O) SHA512_generic SHA512_arm SHA1_generic SHA1_arm_NEON SHA1_ARM MD5 CBC SHA256_generic SHA256_arm HMAC drbg xfrm_user xfrm4_tunch ipcomp xfrm_ipcomp dwa1_arm mas rgc sha256_generic sha256_arm_core_proc vapor_remote_proc (texp)
    [409.073659] CPU:0 PID:0 Comm:swapper/0被污染:g W O 4.4.12 8
    [409.080823]硬件名称:通用 DRA74X (平展器件树)
    [409.086938]回扫:
    [409.089412][ ](dump_backtrace)从[ ](show_stack+0x18/0x1c)
    [409.097011] r7:c02e2d18 R6:200f0193 R5:00000000 R4:c09d318c
    [409.102736][ ](show_stack)从[ ](dump_stack+0x90/0xa4)
    [409.109998][ ](dump_stack)从[ ](warn_slESpath_common+0x88/b8)
    [409.118121] r7:c02e2d18 R6:00000093 R5:00000009 R4:c09b5d30
    [409.123845][ ](warn_slowpath_common)、来自[ ](WARN_RASPH_FMt+0x38/0x40)
    [409.132578] R8:00000017 r7:c08af0a4 R6:00000000 R5:c08aec6c R4:c08aed10
    [409.139354][ ](warn_slowpath_fmt)、来自[ ](L3_INTERRUPT_Handler+0x25c/0x368)
    [409.148261] r3:ee1b6140 r2:c08aed10
    [409.151862] R4:80080003
    [409.154419][ ](L3_interrupt_handler)、来自[ ](handle_irq_event_perpu+b0x4/0x160)
    [409.163763] R10:c0a02d2d R9:ee1b0480 R8:00000017 r7:00000000 R6:00000000 R5:ee1b04e0
    [409.171666] R4:ee1b6640
    [409.174219][ ](handle_irq_event_perpu)、来自[ ](handle_IRQ_EVENT_+0x40/0x64)
    [409.183126] R10:c09b64d0 R9:c06e91e4 R8:ee008000 r7:00000000 R6:c09bc08c R5:ee1b04e0
    [409.191027] R4:ee1b0480
    [409.193581][ ](handle_irq_event)从[ ](handle_fasteoi_IRQ+0xc0/0x194)
    [409.202139] r7:00000000 R6:c09bc08c R5:ee1b04e0 R4:ee1b0480
    [409.207856][ ](handle_fasteoi_IRQ)、来自[ ](generic_handle_IRQ+0x2C/0x3c)
    [409.216502] r7:00000000 R6:00000000 R5:00000017 R4:c09b0424
    [409.222221][ ](generic_handle_IRQ)、来自[ ](_handle_domain_IRQ+0x64/bb)
    [409.230961][ ](_handle_domain_IRQ)、来自[ ](GIC_Handle_IRQ+0x40/0x7c)
    [409.239344] R9:c06e91e4 R8:fa213000 r7:fa212000 R6:c09b5ef0 R5:fa21200c R4:c09b6868
    [409.247166][ ](GIC_Handle_IRQ)、来自[ ](_IRQ_Svc+0x40/0x74)
    [409.254678]异常堆栈(0xc09b5ef0至0xc09b5f38)
    [409.259750] 5e0: 00000001 00000000 fe600000 00000000
    [409.267963] 5f00:c09b4000 c09b6484 00000000 00000000 c09b5f60 c06e91e4 c09b64d0 c09b5f4c
    [409.276177] 5f20:c09b5f2c c09b5f40 c00268f4 c0010540 600f0013 ffffff
    [409.2816] R9:c06e91e4 R8:c09b5f60 r7:c09b5f24 R6:ffff R5:600f0013 R4:c0010540
    [409.290640][ ](arch_cpu_idle)从[ ](DEFAULT_IDLE_CALL + 0x28/0x34)
    [409.298769][ ](DEFAULT_IDLE_CALL)从[ ](CPU_STARTUP_END+0x204/0x264)
    [409.307419][ ](CPU_STARTUP_INPUK)、来自[ ](REST_INIT+0x90/0x94)
    [409.315192] r7:00000000
    [409.317747][ ](REST_INIT)从[ ](start_kernel+0x400/0x40c)
    [409.325259] R5:c0a05000 R4:c0a05040
    [409.328866][ ](start_kernel)从[<80008090>](0x80008090)
    [409.33520]-[结束线迹 c5f33a20b59aa006 ]---

    我可以将同一个 I/O 配置为输出、它工作正常。
    我已按如下方式配置 DSP1 IRQ 交叉开关
    *(CTRL_CORE_DSP1_IRQ_56_57)&=~(DSP1_IRQ_56);
    *(CTRL_CORE_DSP1_IRQ_56_57)|= ENABLE_GPIO2_INT_Vector;

    #define ENABLE_GPIO2_INT_Vector0x00000019
    #define DSP1_IRQ_560x000001ff

    此外、我还使用以下 API 来启用中断
    /*设置回调函数*/
    GPIO_setCallback (USER_LED0、AppGpioCallbackFxn);

    /*在特定 GPIO 引脚上启用 GPIO 中断*/
    GPIO_enableInt (USER_LED0);

    USER_LED0对应于 GPIO2_2

    有什么建议吗?

    非常感谢。

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

    [引用 user="Shaunak Shilimkan"]是否有任何建议?

    我可以建议您打开有关新问题的新 e2e 线程。


    此致、
    帕维尔