https://e2e.ti.com/support/processors-group/processors/f/processors-forum/991967/am3358-uart-wakeup
器件型号:AM3358我正在处理 am3358在挂起到 ram (待机)后的 UART 唤醒问题。 即使我向/sys/class/tty/ttyS0/power/wakeup.写入已启用、处理器似乎也不会唤醒 GPIO 唤醒工作正常。 我正在使用内核4.14.79。
我一直在调试该问题、如果我省略了器件勘误表的软复位修复、似乎可以解决该问题。 我使用了以下补丁并在器件树中将"ti、no-idle"添加到 uart0中。 唤醒源仍然被错误检测(MPU_WAKE)。 这是启用 uart0唤醒的正确方法吗?如果不是,您可以建议改进方法吗? 器件勘误表指出、在使用 DMA 之后和空闲之前需要进行软复位。 但是、软复位后唤醒不起作用。 是否可以将 UART 器件设置为空闲状态并仍然唤醒?
增补程序
日期:2021年4月7日星期三16:29:20 +0300
主题:[PATCH] UART:请勿执行软复位以解决器件勘误表问题
如果不在挂起模式中进入空闲状态。
--
drivers/tty/ serial/8250/8250_omap.c | 5 +++-
1个文件已更改,4个插入(+),1个删除(-)
diff --git a/drivers/tty/serial/8250/8250_omap.c b/drivers/tty/serial/8250/8250_omap.c
索引851d29ff3d19..2a5a74f449db 100644
-- a/drivers/tty/serial/8250/8250_omap.c
++ b/drivers/tty/serial/8250/8250_omap.c
@@-120、6 +120、7 @@ struct omap8250_priv
spinlock_t rx_dma_lock;
bool rx_dma_broken;
bool 油门;
+ bool no_idle;
};
struct omap8250_platdata{
@@-1283,6+1284,8 @@静态 int omap8250_probe (struct platform_device *pdev)
pdata =(struct omap8250_platdata *) of _device_get_match_data (&pdev->dev);
IF (pdata)
PRIV->Habit |= pdata -> Habit;
+ IF (of _find_property (pdev->dev.of 节点、"ti、no-idle"、NULL))
+ priv->no_idle = true;
}否则{
RET = pdev->id;
}
@@-1501、7 +1504、7 @@静态 int omap8250_runtime_suspend (struct device *dev)
return -EBUSY;
}
-如果(priv->Habit & UART_errata_clock_disable){
+ if (priv->Habit & UART_errata_clock_disable &&!priv->no_idle){
/*保存模块级唤醒寄存器*/
u32 wer = serial_in (up、UART_OMA_WER);
内转台;
--
2.27.0
dmesg 的输出
[85.948351] PM:暂停进入(浅)
[85.948365] PM:正在同步文件系统... 完成。
[85.966354]冻结用户空间进程... (已用0.001秒)。
[85.967768]禁用杀手锏。
[85.967773]冻结剩余可自由执行的任务... (已用0.001秒)。
[85.969251]暂停控制台(使用 NO_console_suspend 进行调试)
[85.989523] pm33xx pm33xx:pm:成功地将所有电源域置于目标状态
[85.989523] PM:唤醒源 MPU_WAKE
[91.962347]启用了 Killer oom。
[91.962386]正在重新启动任务...
[91.987302]完成。
[92.012512] PM:挂起退出
ttyS0和 GPIO 唤醒后的/sys/kernel/debug/wakeup_sources 输出。
将 ACTIVE_COUNT EVENT_COUNT WAKEUP_COUNT 命名为 EXPILOE_COUNT ACTIVE_INVE_INVE_TIME TOTAL_TIME max_TIME LAST_CHANGE INVE_SUSPEND_TIME
ttyS0 0 0 0 0 0 0 0 18891 0
按钮3 3 0 0 0 3 2 363657 0