Thread 中讨论的其他器件:AM4376
工具与软件:
你(们)好
我们正在使用 AM4376并基于 AM437x-EVM 开发定制电路板。
SDK : PROCESSOR-SDK-AM437X-06.03.00.106.
我们可以使用 SUSPEND 和 RESUME functon。
UART0和 GPIO0作为 DeepSleep 0的唤醒源启用。
我们想禁用 UART0作为唤醒源。
(将仅启用 GPIO0作为唤醒源。)
如何禁用 UART0作为唤醒源?
谢谢你。
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.
工具与软件:
你(们)好
我们正在使用 AM4376并基于 AM437x-EVM 开发定制电路板。
SDK : PROCESSOR-SDK-AM437X-06.03.00.106.
我们可以使用 SUSPEND 和 RESUME functon。
UART0和 GPIO0作为 DeepSleep 0的唤醒源启用。
我们想禁用 UART0作为唤醒源。
(将仅启用 GPIO0作为唤醒源。)
如何禁用 UART0作为唤醒源?
谢谢你。
您好!
我不太熟悉此 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
您好!
感谢您的答复。
我们知道我们无法通过 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);
谢谢你。