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.

[参考译文] PROCESSOR-SDK-AM437X:禁用从 UART0唤醒

Guru**** 2487425 points
Other Parts Discussed in Thread: AM4376

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

https://e2e.ti.com/support/processors-group/processors/f/processors-forum/1436279/processor-sdk-am437x-disable-wake-up-from-uart0

器件型号:PROCESSOR-SDK-AM437X
Thread 中讨论的其他器件:AM4376

工具与软件:

你(们)好

我们正在使用 AM4376并基于 AM437x-EVM 开发定制电路板。

SDK : PROCESSOR-SDK-AM437X-06.03.00.106.

我们可以使用 SUSPEND 和 RESUME functon。
UART0和 GPIO0作为 DeepSleep 0的唤醒源启用。

我们想禁用 UART0作为唤醒源。
(将仅启用 GPIO0作为唤醒源。)

如何禁用 UART0作为唤醒源?

谢谢你。

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

    您好!

    我目前正在返岗、并将尽快与您联系。 如果您尚未收到回复、请在星期四之前 Ping 此主题。

    谢谢!

    Anshu

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

    您好!

    我不太熟悉此 SDK 版本、因为它是较旧的 Linux 内核。 您是否可以尝试以下操作:

    @@ -587,15 +587,6 @@ AM4372_IOPAD(0x974, PIN_INPUT | PULL_DISABLE | SLEWCTRL_FAST | DS0_PULL_UP_DOWN_
                    >;
            };
     
    -       uart0_pins_sleep: uart0-sleep-pins {
    -               pinctrl-single,pins = <
    -                       AM4372_IOPAD(0x968, DS0_PULL_UP_DOWN_EN | INPUT_EN | MUX_MODE7) /* uart0_ctsn.uart0_ctsn */
    -                       AM4372_IOPAD(0x96C, DS0_PULL_UP_DOWN_EN | INPUT_EN | MUX_MODE7) /* uart0_rtsn.uart0_rtsn */
    -                       AM4372_IOPAD(0x970, PIN_INPUT_PULLUP | SLEWCTRL_FAST | DS0_PULL_UP_DOWN_EN | MUX_MODE0) /* uart0_rxd.uart0_rxd */
    -                       AM4372_IOPAD(0x974, PIN_INPUT_PULLDOWN | SLEWCTRL_FAST | DS0_PULL_UP_DOWN_EN | MUX_MODE0) /* uart0_txd.uart0_txd */
    -               >;
    -       };
    -
            matrix_keypad_default: matrix-keypad-default-pins {
                    pinctrl-single,pins = <
                            AM4372_IOPAD(0x9a4, PIN_OUTPUT | MUX_MODE7)
    @@ -617,9 +608,8 @@ AM4372_IOPAD(0x954, PIN_INPUT_PULLDOWN | MUX_MODE0)
     
     &uart0 {
            status = "okay";
    -       pinctrl-names = "default", "sleep";
    +       pinctrl-names = "default";
            pinctrl-0 = <&uart0_pins_default>;
    -       pinctrl-1 = <&uart0_pins_sleep>;
     };
    

     此操作用于修改 AM437x EVM 器件树: https://git.ti.com/cgit/ti-linux-kernel/ti-linux-kernel/tree/arch/arm/boot/dts/am437x-gp-evm.dts?h=ti-linux-4.19.y

    此致、
    Anshu

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

    您好!

    感谢您提供解决方案。

    即使我们应用了您的解决方案、我们也无法解决我们的问题。
    UART0仍用作唤醒源。

    当我们在 UART0控制台上键入任何键时、将退出暂停模式。
    --------------------------------------------------------

    root@AM437X-EVM:~# echo mem >/sys/power/state
    [54.160445] PM:暂停进入(深度)
    [54.164054] PM:正在同步文件系统...完成。
    [54.200131]已完成冻结用户空间过程...(经过0.001秒)。
    [54.209135] OM Killer disabled.
    [54.212507]已完成冻结剩余的可自由运行任务...(经过0.001秒)。
    [54.221339]挂起控制台(使用 NO_CONSOCKET_SUSPEND 进行调试)
    [54.767146] cpsw 4a100000.ethernet eth0:链路断开
    [ 54.779241] pm33xx pm33xx:pm:成功将所有电源域置于目标状态
    [54.779241] PM:唤醒源 UART
    [54.805183] net eth0:初始化 cpsw 版本1.15 (0)
    [54.904364] Micrel KSZ9031千兆位 PHY 4a101000.MDIO:00:连接的 PHY 驱动程序[Micrel KSZ9031千兆位 PHY](MII_BUS:phy_addr=4a101000.MDIO:00、IRQ=POLL)
    [54.941039] USB USB1:根集线器掉电或已重置
    [ 54.941060] USB USB2:根集线器掉电或被重置
    [ 54.945021] USB USB3:根集线器掉电或被重置
    [54.945044] USB USB4:根集线器掉电或已重置
    [55.120344] oom killer enable.
    [55.123507]正在重新启动任务...完成。
    [55.182911] PM:暂停退出

    --------------------------------------------------------

    您能否提供另一个解决方案?

    谢谢你。

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

    您好!

    在 AM437x TRM (https://www.ti.com/lit/ug/spruhl7i/spruhl7i.pdf)中、对于 UART0模块、有一个用于启用/禁用唤醒的 SYSC 寄存器。 有关寄存器的位字段、请参阅第21.5.1.42节 UART_SYSC 寄存器。

    可以读取寄存器来了解该位是什么。 为了实现快速修复、可以向寄存器的 ENAWAKEUP 写入0以禁用唤醒。

    您还可以查看以下现有补丁来启用/禁用 UART 唤醒: https://git.ti.com/cgit/ti-linux-kernel/ti-linux-kernel/commit/drivers/tty/serial/8250/8250_omap.c?h=ti-linux-4.19.y&id=09d8b2bdbc5c61dd6289d78ab4cb57d22dd5e0e6

    此致、

    Anshu

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

    您好!

    感谢您提供解决方案。

    我对启用/禁用 UART 唤醒的补丁有疑问。
    似乎我们可以通过 sysf 来控制 UART 唤醒功能。
    我不知道为什么启用 UART0唤醒、即使我们的板中的"disabled"值已经是/sys/class/tty/ttyS0/device/power/wakeup。

    您能告诉我们这个原因吗?

    谢谢你。

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

    您好!

    我不知道原因。 我将就此问题提交一个错误、但这可能在较新的 Linux SDK 版本中得到了修复。

    谢谢!

    Anshu

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

    您好!

    感谢您的答复。

    我们知道我们无法通过 sysf 来控制 UART 唤醒功能。
    所以、我们按如下所示进行了更改、以禁用 UART 唤醒功能。
    请检查一下并向我们提供反馈。

    --- a/drivers/tty/serial/8250/8250_omap.c
    +++ b/drivers/tty/serial/8250/8250_omap.c
    @@ -1336,6 +1336,7 @@ static int omap8250_probe(struct platform_device *pdev)
     	spin_lock_init(&priv->rx_dma_lock);
     
     	device_init_wakeup(&pdev->dev, true);
    +	device_set_wakeup_capable(&pdev->dev, false);
     	pm_runtime_use_autosuspend(&pdev->dev);
     	pm_runtime_set_autosuspend_delay(&pdev->dev, -1);

    谢谢你。

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

    您好!

    我们无法在 E2E 论坛上提供有关更改或定制驱动程序的帮助。

    此致、

    Anshu