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.

[参考译文] PHYTC-3P-PHYCORE-AM335X:内核因读取复位原因而发生更改

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

https://e2e.ti.com/support/processors-group/processors/f/processors-forum/1178101/phytc-3p-phycore-am335x-kernel-changes-for-reading-cause-of-reset

器件型号:PHYTC-3P-PHYCORE-AM335X

我们想知道如何在内核级驱动程序中读取 AM335x 上的复位原因。 (我们可以在 uboot 中读取它、但要在 Linux 驱动程序中执行它)

我感到惊讶 的是、经过7年以上的驱动程序不支持后、这一问题仍未解决。

通过关注其他帖子、我认为我已经添加了我需要的函数、但是在 OMAP-WDT.c 文件中、当它检查"read_reset_sources"函数是否存在时、它会跳过它、因为我认为它是空的、或者"pdata"可能是空的。

我添加了一些用于调试的 pr_err 行、但从未转到"OMAP 看门狗复位值"行:

OMAP-WDT.c

PR_ERR ("OMAP 看门狗在复位检查前在此输入");

if (pdata && pdata->read_reset_sources){
  u32 rs = pdata->read_reset_sources();
  PR_ERR ("OMAP 看门狗复位值:0x%08X\n"、RS);
  IF (RS 和(1 << OMAP-MPU_WD_RST_SRC_ID_SHIFT)
   wdev->wdog.bootstatus = WDIOF_CARDRESET;

在 prm33xx.c 中、我添加 了 am33xx_PRM_READ_RESET_Sources 函数、并且还基于 AM335x TRM 创建了 PRM_RESET_src_MAP 结构。

然后、我将该函数链接到 PRM_LL_DATA 结构中。

(我添加了 AM33XX... 寄存器头文件中的移位位)

prm33xx.c

/* AM335x 复位映射*
静态结构 PRM_RESET_SRC_MAP omap33xx_PRM_RESET_SRC_MAP[]={
  {AM33XX_GLOBAL_RST_SHIFT、OMAP_GLOBAL_COLOW_RST_SRC_ID_SHIFT}、
  {AM33XX_GLOBAL_SW_RST_SHIFT、OMAP_GLOBAL_WARM_RST_SRC_ID_SHIFT}、
  {AM33XX_MPU_WD_RST_SHIFT、OMAP_MPU_WD_RST_SRC_ID_SHIFT}、
  {AM33XX_EXTERNAL_WARM_RST_SHIFT、OMAP_EXTWARM_RST_SRC_ID_SHIFT}、
  {AM33XX_ICEPICK_RST_SHIFT、OMAP_ICEPICK_RST_SRC_ID_SHIFT}、
  {-1、-1}、

};

(笑声)

/**
* am33xx_prm_read_reset_sources -返回最后一个 SoC 复位源
*
*返回一个 u32、表示 SoC 的最后一个复位源。 。
*返回的复位源位在 OMAP SoC 之间实现了标准化。
*

静态 u32 am33xx_prm_read_reset_sources (void)

  struct prm_reset_src_map *p;
  u32 r = 0;
  u32 v;

  v = am33xx_prm_read_reg (AM33XX_prm_device_MOD、AM33XX_prm_RSTST_offset);

  p = omap33xx_prm_reset_src_map;
  while (p->reg_shift >= 0 && p->std_shift >= 0){
    if (v &(1 << p->reg_shift))
      r |= 1 << p->std_shift;
    P++;
  }
  PR_ERR ("powerdomain:复位源寄存器:0x%08X\n"、r);

  返回 r;

(笑声)

静态结构 PRM_LL_DATA am33xx_PRM_LL_DATA ={
  read_reset_sources = am33xx_prm_read_reset_sources、
  .assert_hardreset = am33xx_prm_assert_hardreset、
  .deassert_hardreset = am33xx_prm_deassert_hardreset、
  .in_hardreset_asserted = am33xx_prm_s_s_hardreset_assert_dasserted、
  .reset_system = am33xx_prm_global_warm sw_reset、
};

为了使 OMAP-WDT 能够识别驱动程序确实支持 READ_RESET_Sources 函数、我还需要做什么?

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

    我刚刚调试了 pdata 的值、它是0x0000_0000。 未填充的原因是什么?

    (这是 Linux 5.10.65中未修改的驱动程序代码)

    OMAP-WDT.c

    静态 int omap_WDT_probe (struct platform_device *pdev)

       struct omap_wd_timer_platform_data *pdata = dev_get_platdata (&pdev->dev);

    (笑声)

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

    您好 Jason、

    由于此函数未在上游内核中实现、因此我没有查看您的实现情况。 但是、您能告诉我您需要了解哪些信息(复位源)吗? 您将如何在用户空间中使用此数据?

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

    您好、Bin、

    此帖子描述了一个与我所面临的问题非常相似的问题。 我不确定他是如何确定这是由于设备树探测器造成的。

    https://e2e.ti.com/support/processors-group/processors/f/processors-forum/419216/am355x-watchdog-reboot-detection

    用户空间实现:

    我们已启用看门狗计时器。 如果我们检测到重新启动的原因是看门狗、我们希望在日志文件中创建一条语句。

    在哪里可以提交正式请求以使内核支持此功能? 所有其他 OMAP 器件都支持此功能、TRM 详细说明了确切的复位原因、我不确定 TI 为什么不添加此功能。  

    我认为我已经完成了实现这一目标所需的一切,但 pdev->dev 不会返回复位源函数。

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

    您好 Jason、

    此论坛是请求功能/特性的渠道。 我现在可以将请求提交给我们的 SW 开发团队、但我担心该请求会处于低优先级队列中、并且很快就没有得到批准和实施。

    作为变通办法,您能否直接在应用程序中读取复位源寄存器(devmem2是要执行此操作的程序之一,或者直接在用户空间程序中实施 mmap()和 read(),具体取决于日志的生成方式...) 而不是从 sysfs 看门狗条目获取信息?

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

    您好、Bin、

    我们将根据您提供的建议来努力实现这一目标。

    请在平均时间内正式提交申请。 从现在起、这可能会帮助7年后的人...

    只是有一点背景、我们开始实施看门狗、然后想要测试/记录板是否由于看门狗而复位。 我们阅读了文档并启用了 sysfs 功能。 我们尝试从引导状态文件中读取、无论复位原因如何、该值都不会更改。 我们需要不到1天的时间进行开发、但由于此功能未实施、因此已经变成了一个星期以上的交易。

    如果有人在7年前向软件团队正式请求、我希望我们现在就可以获得。

    谢谢!

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

    您好 Jason、

    明白。

    但我认为快速的路径是让我对它进行调试并修复/实施它、然后将内核补丁直接提交给我们的软件开发团队或上游内核(具体取决于开发团队想要如何处理这种情况)。

    我本月的工作已经规划好、因此我至少在一两个月内无法进行研究。

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

    您好、Bin、

    谢谢。 我认为这对使用 AM335x 的社区和开发人员来说将非常有价值。