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内核中的 GPIO 软复位失败(超时)

Guru**** 2564565 points
Other Parts Discussed in Thread: AM5728, SYSCONFIG, TMDSEVM572X

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

https://e2e.ti.com/support/processors-group/processors/f/processors-forum/612986/linux-am5728-gpio-softreset-failed-out-of-time-in-kernel-on-am5728

器件型号:AM5728
Thread 中讨论的其他器件: SysConfigTMDSEVM572X

工具/软件:Linux

您好专家、

客户正在 AM5728 EVM 板上使用 PSDK。 他尝试通过_reset (调用_OCP_softreset)函数执行 GPIO 软复位、但失败。 报告的内核

omap_hwmod:gpio1:软复位失败(等待10000 usec)

 

但在内核启动的开始阶段、它成功了

omap_hwmod:gpio1: State=0x4、Fun =_OCP_softreset、line=1938、oh->flags=0x0

omap_hwmod:gpio1: State=0x4、Fun =_OCP_softreset、line=1957、v=0x1d

omap_hwmod:gpio1:_sysc_cache=0x1d、f趣味=_update_sysc_cache、line=291

omap_hwmod:gpio1:softtrst_mask=0x2、f趣味=_set_softreset、line=457、v=0x1d

omap_hwmod:gpio1:softtrst_mask=0x2、f趣味=_set_softreset、line=461、v=0x1f

omap_hwmod:gpio1:_sysc_cache=0x1f、f趣味=_write_sysconfig、line=316

omap_hwmod:gpio1:func=omap_hwmod_write、line=3389、oh->_state=0x4、oh->_mpu_rt_va=0Xfce10000、reg_os=0x10、v=0x1f、oh->flags=0x0  

omap_hwmod:GPIO1:39 μ s 内的软复位    

 

那么、问题是如何在内核启动后对 GPIO 进行软复位? 是否有任何遗漏? 如果可能、您可以向我展示一个示例。

非常感谢。

此致、

艾伦

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

    他们可以尝试直接访问 GPIO_SysConfig[1]SOFTRESET:
    软件复位。 将此位置1可触发模块复位。 该位由硬件自动复位。 在读取期间、它总是返回0
    0x0:正常模式
    0x1:模块复位。

    他们可以使用 devmem2。

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

    您好,

    在内核启动的开始阶段、它成功了。

    然后我读取 GPIO1的 SYS_STATUS、它是0x1

    现在、我开始通过 SysConfig 重置 GPIO1

    在我将 GPIO1‘s SysConfig 设置 为0x1f,GPIO1的 sysstatus[0]变为0,并且从不变为1之后,最后一次显示 软复位失败(等待10000微秒)

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    在内核启动开始时、GPIO1将复位,正常
    内核启动后,读取 GPIO1 sysstatus[0],它是0x1

    然后我通过将 GPIO1 syssyssyssyssyssyssyssyssysconfig 设置为 val 0x1f 来重置 GPIO1,GPIO1 SYSSATUS[0]变为0,从不转至1,软重置失败(等待1000usec)

    我使用 board tmdsevm572x、am572x GPIO1的初始代码是:

    静态结构 omap_hwmod dra7xx_gpio1_hwmod ={
    .name="GPIO1"、
    .class=&dra7xx_GPIO_hwmod_class、
    clkdm_name="wkupaON_clkdm"、 // clk 源与其他 GPIO (2-8)不同
    main_clk="wkupaON_iclk_mux"、
    .prcm ={
    .OMAP4 ={
    clkctrl_offs = DRA7XX_CM_WKUPAON_GPIO1_CLKCTRL_OFFSET、
    .context_offs = DRA7XX_RM_WKUPAON_GPIO1_context_offset、
    .modulemode = MODULEMODE_HWCTRL、
    }、
    }、
    .opt_CLKS= GPIO1_OPT_CLKS、
    /opt/clks_cnt= array_size (GPIO1_opt_CLKS)、
    DEV_ATtr=&GPIO_DEV_ATtr、
    };
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好 Guru、
    我通过以下命令测试 GPIO1软件复位
    #./devmem 0x4ae10010
    /dev/mem 已打开。
    映射到地址 bb6f5f000的内存。
    地址0x4AE10010 (0xb6f5f010)上的值:0x1D
    #./devmem 0x4ae10114
    /dev/mem 已打开。
    映射到地址 bb6fd6000的内存。
    地址0x4AE10114 (0xb6fd6114)的值:0x1
    #./devmem 0x4ae10010 w 2.
    /dev/mem 已打开。
    映射到地址 bbb6f0b000的内存。
    地址0x4AE10010 (0xb6f0b010)上的值:0x1D
    写入0x2;回读0x0
    #./devmem 0x4ae10114
    /dev/mem 已打开。
    映射到地址 bb6f55000的内存。
    地址0x4AE10114 (0xb6f55114)的值:0x0
    编号
    #./devmem 0x4ae10114
    /dev/mem 已打开。
    映射到地址 bb6ffa000的内存。
    地址0x4AE10114 (0xb6ffa114)的值:0x0 SYSSTATUS[0]为0,复位未完成
    编号
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    让我检查一下这个、我会再给您回复。

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

    您好,

    您能给我一些建议吗?我仍然无法成功重置 GPIO1