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.

[参考译文] AM625:进入深度睡眠后 GPIO 电压下降

Guru**** 2458730 points


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

https://e2e.ti.com/support/processors-group/processors/f/processors-forum/1473481/am625-gpio-voltage-drop-after-entering-deep-sleep

器件型号:AM625

工具与软件:

专家们、您好!

我们注意到 GPIO 上出现了0.6V 的压降、我们希望在进入深度睡眠时保持高电平。 遗憾的是、此 GPIO 控制开关电源上的使能引脚、因此最终结果是我们进入深度睡眠时该电源会关闭。

我们运行的是 Linux Yocto SDK 10.00.07.04

我通读了10.01.10.4的发行说明、看起来这可能是 EXT_EP-12083或 EXT_EP-12093、是否有适用于 Linux 6.6.32-ti 的补丁?

该设计的链接

GPIO 是主 GPIO0_83、它连接到另一个 TI 器件(TPS63802DLAR)上的使能引脚、即使在电压为2.6V 时、该器件也应保持启用状态。

是否有办法提供更好的分辨率上传?

`标记0 `gpioset gpiochip3 82=1 μ s
`标记1 `rtcwake -d /dev/rtc0 -m mem -s 10 μ s
时间标记2器件从10秒深度睡眠模式唤醒

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

    您好!

    是否有可应用于 Linux 6.6.32-ti 的补丁程序?

    这不是一个驱动程序的单一补丁、而是涉及 Linux 驱动程序的更改、但也涉及 DM 固件和 TFA。 如果需要、我建议更新到 SDK 10.1。


    此 GPIO 上连接的电阻是否会影响电压?

    我们可以尝试调整引脚的 PADCONFIG 寄存器。 我们可以尝试根据 TRM: www.ti.com/.../spruiv7中的第14.2.1.2节焊盘配置寄存器来调整位16和17


    此致、

    Anshu

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

    类似的 SDK 更新往往会导致巨大的差异升级大小。 我会和我的团队讨论。

    我将回顾 PADCONFIG 选项并回答任何问题。

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

    要回答有关电阻器的问题:我们在此引脚上有一个100k 的下拉电阻器。

    我测试了位16和位17以及深度睡眠特定位(位15和24-28)、没有注意到任何有用的更改。

    然而、在这个测试中、我确信这个问题实际上是由 GPIO 在从深度睡眠恢复时降至0 ~6ms 所致。 这是一个省略、因为2.6V 应该处于此 GPIO 启用的部件的技术规格范围内。

    问题与 EXT_EP-12093相关、我在 ti-linux-kernel Git 中找到了此提交信息。 https://git.ti.com/gitweb?p=ti-linux-kernel/ti-linux-kernel.git;a=commit;h=bb925b66d23b8000c03fb23e12a0fc41e853f3e4

    我在问题跟踪器(https://sir.ext.ti.com/jira/browse/EXT_EP-12093)上看到有一些与 ATF 和 DM 相关的实验。 完整修复是否涉及更新 ATF 和 DM、或者上述内核是否足够?

    我们目前正尽力保持我们的固件更新的最小大小、而完整的 SDK 更新对我们来说将是一个问题。

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

    您好!

    对于延迟、我们深表歉意。

    [报价 userid="571949" url="~/support/processors-group/processors/f/processors-forum/1473481/am625-gpio-voltage-drop-after-entering-deep-sleep/5669445 #5669445"]此引脚有100k 下拉电阻。[/QUOT]

    为了正确理解、保持信号处于高电平并连接到同一引脚的目标是使用100k 的下拉电阻器? 我需要与硬件团队讨论这一点。

    欢迎您尝试该补丁。 如果这样做本身不起作用、我会考虑更改 SDK 版本。

    drivers/firmware/ti_sci.c | 38 ++++++++++++++++++++++++++++++++++++++
     1 file changed, 38 insertions(+)
    
    diff --git a/drivers/firmware/ti_sci.c b/drivers/firmware/ti_sci.c
    index 7323f44bab7e..072cbe6d6aa2 100644
    --- a/drivers/firmware/ti_sci.c
    +++ b/drivers/firmware/ti_sci.c
    @@ -3735,11 +3735,33 @@ static int ti_sci_suspend(struct device *dev)
     	return 0;
     }
     
    +
    +static	u32 gpio_dir[8], gpio_out[8];
    +
     static int ti_sci_suspend_noirq(struct device *dev)
     {
     	struct ti_sci_info *info = dev_get_drvdata(dev);
     	int ret = 0;
     
    +	void __iomem *gpio_chip_1, *gpio_chip_2; // We are saving gpio context...
    +	gpio_chip_1 = ioremap(0x00600000, 0x100);
    +	gpio_chip_2 = ioremap(0x00601000, 0x100);
    +	for (int i = 0; i < 8; i++)
    +	{
    +		if(i<4) {
    +			gpio_dir[i] = readl(gpio_chip_1 + 0x10 + i*0x28); // DIR 01 start
    +			gpio_out[i] = readl(gpio_chip_1 + 0x14 + i*0x28);  // OUT_DATA01 start next starts after 0x28
    +		}
    +		else {
    +			gpio_dir[i] = readl(gpio_chip_2 + 0x10 + (i-4)*0x28); // DIR 01 start
    +			gpio_out[i] = readl(gpio_chip_2 + 0x14 + (i-4)*0x28);  // OUT_DATA01 start next starts after 0x28
    +
    +		}
    +	}
    +	
    +	dev_info(dev, "%s: Saving gpio ctx dir = |%x| out = |%x|\n", __func__, 
    +			 gpio_dir[0], gpio_out[0]);
    +
     	ret = ti_sci_cmd_set_io_isolation(&info->handle, TISCI_MSG_VALUE_IO_ENABLE);
     	if (ret)
     		return ret;
    @@ -3754,6 +3776,22 @@ static int ti_sci_resume(struct device *dev)
     	u32 source;
     	u64 time;
     	int ret = 0;
    +	void __iomem *gpio_chip_1, *gpio_chip_2; // We are restoring gpio context...
    +	gpio_chip_1 = ioremap(0x00600000, 0x100);
    +	gpio_chip_2 = ioremap(0x00601000, 0x100);
    +	for (int i = 0; i < 8; i++)
    +	{
    +		if (i < 4) {
    +			writel(gpio_dir[i],gpio_chip_1 + 0x10 + i*0x28); // DIR 01 start
    +			writel(gpio_out[i], gpio_chip_1 + 0x14 + i*0x28);  // OUT_DATA01 start next starts after 0x28
    +		} else {
    +			writel(gpio_dir[i],gpio_chip_2 + 0x10 + (i-4)*0x28); // DIR 01 start
    +			writel(gpio_out[i], gpio_chip_2 + 0x14 + (i-4)*0x28);  // OUT_DATA01 start next starts after 0x28
    +		}
    +	}
    +	
    +	dev_info(dev, "%s: restoring gpio ctx dir = |%x| out = |%x|\n", __func__, 
    +			 gpio_dir[0], gpio_out[0]);
     
     	ret = ti_sci_cmd_set_io_isolation(&info->handle, TISCI_MSG_VALUE_IO_DISABLE);
     	if (ret)
    
    base-commit: 6de6e418c80edfbe08f4a5f851c721bd60c0123b
    -- 
    2.34.1

    此致、

    Anshu