[PATCH v2 0/3] arm64: boot: dts: ti: k3-am62l: allow WKUP UART wakeup from LPM

Kendall Willis posted 3 patches 1 month ago
There is a newer version of this series
arch/arm64/boot/dts/ti/k3-am62l-wakeup.dtsi | 2 +-
arch/arm64/boot/dts/ti/k3-am62l.dtsi        | 4 ++--
arch/arm64/boot/dts/ti/k3-am62l3-evm.dts    | 4 ++++
3 files changed, 7 insertions(+), 3 deletions(-)
[PATCH v2 0/3] arm64: boot: dts: ti: k3-am62l: allow WKUP UART wakeup from LPM
Posted by Kendall Willis 1 month ago
K3 TI AM62L SoC supports wakeup from WKUP UART when the SoC is in the
DeepSleep low power mode. To allow wakeup from WKUP UART the target-module
device tree node is enabled. The ti-sysc interconnect target module driver
is used to configure the the SYSCONFIG related registers. In this case,
the interconnect target module node configures the WKUP UART to be able to
wakeup from system suspend. The SYSC register is used to enable wakeup
from system suspend for the WKUP UART. Refer to 14.7.2.5 UART in the
AM62L Techincal Reference Manual for registers referenced [1].

Previous TI SoCs configure the WKUP UART to wakeup from system suspend
using the ti-sysc interconnect target module driver. Refer to commit
ce27f7f9e328 ("arm64: dts: ti: k3-am62-wakeup: Configure ti-sysc for
wkup_uart0") for an example of this.

Testing
-------
Tested on AM62L EVM.

[1] https://www.ti.com/lit/ug/sprujb4a/sprujb4a.pdf

Signed-off-by: Kendall Willis <k-willis@ti.com>
---
Changes in v2:
- Change subject of commit "arm64: boot: dts: ti: k3-am62l3-evm: enable
  target-module node" to better match the code logic of the patch.
- Link to v1: https://lore.kernel.org/r/20251230-wkup-uart-wakeup-v1-0-cd6e15f8d956@ti.com

---
Kendall Willis (3):
      arm64: dts: ti: k3-am62l: include WKUP_UART0 in wakeup peripheral window
      arm64: boot: dts: ti: k3-am62l-wakeup: create label for target-module
      arm64: boot: dts: ti: k3-am62l3-evm: enable target-module node

 arch/arm64/boot/dts/ti/k3-am62l-wakeup.dtsi | 2 +-
 arch/arm64/boot/dts/ti/k3-am62l.dtsi        | 4 ++--
 arch/arm64/boot/dts/ti/k3-am62l3-evm.dts    | 4 ++++
 3 files changed, 7 insertions(+), 3 deletions(-)
---
base-commit: 6cd6c12031130a349a098dbeb19d8c3070d2dfbe
change-id: 20251230-wkup-uart-wakeup-8bbc95aa8f8e

Best regards,
-- 
Kendall Willis <k-willis@ti.com>
Re: [PATCH v2 0/3] arm64: boot: dts: ti: k3-am62l: allow WKUP UART wakeup from LPM
Posted by Bryan Brattlof 1 month ago
On January  6, 2026 thus sayeth Kendall Willis:
> K3 TI AM62L SoC supports wakeup from WKUP UART when the SoC is in the
> DeepSleep low power mode. To allow wakeup from WKUP UART the target-module
> device tree node is enabled. The ti-sysc interconnect target module driver
> is used to configure the the SYSCONFIG related registers. In this case,
> the interconnect target module node configures the WKUP UART to be able to
> wakeup from system suspend. The SYSC register is used to enable wakeup
> from system suspend for the WKUP UART. Refer to 14.7.2.5 UART in the
> AM62L Techincal Reference Manual for registers referenced [1].
> 
> Previous TI SoCs configure the WKUP UART to wakeup from system suspend
> using the ti-sysc interconnect target module driver. Refer to commit
> ce27f7f9e328 ("arm64: dts: ti: k3-am62-wakeup: Configure ti-sysc for
> wkup_uart0") for an example of this.

I think I may be confused. What is setting the pinmux for the wkup_uart 
to allow us to trigger the wake event? It looks like they reset to GPIO 
pins if not set. Is firmware doing this?

~Bryan
Re: [PATCH v2 0/3] arm64: boot: dts: ti: k3-am62l: allow WKUP UART wakeup from LPM
Posted by Kendall Willis 1 month ago
On 1/7/26 10:45, Bryan Brattlof wrote:
> On January  6, 2026 thus sayeth Kendall Willis:
>> K3 TI AM62L SoC supports wakeup from WKUP UART when the SoC is in the
>> DeepSleep low power mode. To allow wakeup from WKUP UART the target-module
>> device tree node is enabled. The ti-sysc interconnect target module driver
>> is used to configure the the SYSCONFIG related registers. In this case,
>> the interconnect target module node configures the WKUP UART to be able to
>> wakeup from system suspend. The SYSC register is used to enable wakeup
>> from system suspend for the WKUP UART. Refer to 14.7.2.5 UART in the
>> AM62L Techincal Reference Manual for registers referenced [1].
>>
>> Previous TI SoCs configure the WKUP UART to wakeup from system suspend
>> using the ti-sysc interconnect target module driver. Refer to commit
>> ce27f7f9e328 ("arm64: dts: ti: k3-am62-wakeup: Configure ti-sysc for
>> wkup_uart0") for an example of this.
> 
> I think I may be confused. What is setting the pinmux for the wkup_uart
> to allow us to trigger the wake event? It looks like they reset to GPIO
> pins if not set. Is firmware doing this?

On AM62L, the WKUP UART pinmux is initially set by TFA so that it is set 
to the UART pins, not GPIO. The target-module node sets the WKUP UART 
SYSC register so that wakeup is enabled.

Best,
Kendall

> 
> ~Bryan
Re: [PATCH v2 0/3] arm64: boot: dts: ti: k3-am62l: allow WKUP UART wakeup from LPM
Posted by Bryan Brattlof 4 weeks, 1 day ago
On January  7, 2026 thus sayeth Kendall Willis:
> On 1/7/26 10:45, Bryan Brattlof wrote:
> > On January  6, 2026 thus sayeth Kendall Willis:
> > > K3 TI AM62L SoC supports wakeup from WKUP UART when the SoC is in the
> > > DeepSleep low power mode. To allow wakeup from WKUP UART the target-module
> > > device tree node is enabled. The ti-sysc interconnect target module driver
> > > is used to configure the the SYSCONFIG related registers. In this case,
> > > the interconnect target module node configures the WKUP UART to be able to
> > > wakeup from system suspend. The SYSC register is used to enable wakeup
> > > from system suspend for the WKUP UART. Refer to 14.7.2.5 UART in the
> > > AM62L Techincal Reference Manual for registers referenced [1].
> > > 
> > > Previous TI SoCs configure the WKUP UART to wakeup from system suspend
> > > using the ti-sysc interconnect target module driver. Refer to commit
> > > ce27f7f9e328 ("arm64: dts: ti: k3-am62-wakeup: Configure ti-sysc for
> > > wkup_uart0") for an example of this.
> > 
> > I think I may be confused. What is setting the pinmux for the wkup_uart
> > to allow us to trigger the wake event? It looks like they reset to GPIO
> > pins if not set. Is firmware doing this?
> 
> On AM62L, the WKUP UART pinmux is initially set by TFA so that it is set to
> the UART pins, not GPIO. The target-module node sets the WKUP UART SYSC
> register so that wakeup is enabled.
> 

Nice however should we mark the UART in the board file as reserved for 
TFA or is it free to be used by Linux and only during the low power 
modes after Linux is asleep will it be used by TFA?

~Bryan
Re: [PATCH v2 0/3] arm64: boot: dts: ti: k3-am62l: allow WKUP UART wakeup from LPM
Posted by Kendall Willis 4 weeks, 1 day ago
On 1/8/26 11:05, Bryan Brattlof wrote:
> On January  7, 2026 thus sayeth Kendall Willis:
>> On 1/7/26 10:45, Bryan Brattlof wrote:
>>> On January  6, 2026 thus sayeth Kendall Willis:
>>>> K3 TI AM62L SoC supports wakeup from WKUP UART when the SoC is in the
>>>> DeepSleep low power mode. To allow wakeup from WKUP UART the target-module
>>>> device tree node is enabled. The ti-sysc interconnect target module driver
>>>> is used to configure the the SYSCONFIG related registers. In this case,
>>>> the interconnect target module node configures the WKUP UART to be able to
>>>> wakeup from system suspend. The SYSC register is used to enable wakeup
>>>> from system suspend for the WKUP UART. Refer to 14.7.2.5 UART in the
>>>> AM62L Techincal Reference Manual for registers referenced [1].
>>>>
>>>> Previous TI SoCs configure the WKUP UART to wakeup from system suspend
>>>> using the ti-sysc interconnect target module driver. Refer to commit
>>>> ce27f7f9e328 ("arm64: dts: ti: k3-am62-wakeup: Configure ti-sysc for
>>>> wkup_uart0") for an example of this.
>>>
>>> I think I may be confused. What is setting the pinmux for the wkup_uart
>>> to allow us to trigger the wake event? It looks like they reset to GPIO
>>> pins if not set. Is firmware doing this?
>>
>> On AM62L, the WKUP UART pinmux is initially set by TFA so that it is set to
>> the UART pins, not GPIO. The target-module node sets the WKUP UART SYSC
>> register so that wakeup is enabled.
>>
> 
> Nice however should we mark the UART in the board file as reserved for
> TFA or is it free to be used by Linux and only during the low power
> modes after Linux is asleep will it be used by TFA?
> 
> ~Bryan

Sorry for the confusion, I said earlier that the WKUP UART could be used 
by firmware, but that is not to say it is specifically reserved by the 
firmware in general. TFA sets the WKUP UART pins, but it does not use 
the WKUP UART for anything else. The only exception for TFA using the 
WKUP UART is if the user chooses to use the WKUP UART for TFA debugging [1].

All of this to say that the WKUP UART *can* be used by Linux, it does 
not need to be reserved for firmware.

[1] 
https://software-dl.ti.com/processor-sdk-linux/esd/AM62LX/latest/exports/docs/linux/Foundational_Components/Power_Management/pm_am62lx_debug.html

Best,
Kendall
Re: [PATCH v2 0/3] arm64: boot: dts: ti: k3-am62l: allow WKUP UART wakeup from LPM
Posted by Nishanth Menon 4 weeks, 1 day ago
On 11:52-20260108, Kendall Willis wrote:
> On 1/8/26 11:05, Bryan Brattlof wrote:
> > On January  7, 2026 thus sayeth Kendall Willis:
> > > On 1/7/26 10:45, Bryan Brattlof wrote:
> > > > On January  6, 2026 thus sayeth Kendall Willis:
> > > > > K3 TI AM62L SoC supports wakeup from WKUP UART when the SoC is in the
> > > > > DeepSleep low power mode. To allow wakeup from WKUP UART the target-module
> > > > > device tree node is enabled. The ti-sysc interconnect target module driver
> > > > > is used to configure the the SYSCONFIG related registers. In this case,
> > > > > the interconnect target module node configures the WKUP UART to be able to
> > > > > wakeup from system suspend. The SYSC register is used to enable wakeup
> > > > > from system suspend for the WKUP UART. Refer to 14.7.2.5 UART in the
> > > > > AM62L Techincal Reference Manual for registers referenced [1].
> > > > > 
> > > > > Previous TI SoCs configure the WKUP UART to wakeup from system suspend
> > > > > using the ti-sysc interconnect target module driver. Refer to commit
> > > > > ce27f7f9e328 ("arm64: dts: ti: k3-am62-wakeup: Configure ti-sysc for
> > > > > wkup_uart0") for an example of this.
> > > > 
> > > > I think I may be confused. What is setting the pinmux for the wkup_uart
> > > > to allow us to trigger the wake event? It looks like they reset to GPIO
> > > > pins if not set. Is firmware doing this?
> > > 
> > > On AM62L, the WKUP UART pinmux is initially set by TFA so that it is set to
> > > the UART pins, not GPIO. The target-module node sets the WKUP UART SYSC
> > > register so that wakeup is enabled.
> > > 
> > 
> > Nice however should we mark the UART in the board file as reserved for
> > TFA or is it free to be used by Linux and only during the low power
> > modes after Linux is asleep will it be used by TFA?
> > 
> > ~Bryan
> 
> Sorry for the confusion, I said earlier that the WKUP UART could be used by
> firmware, but that is not to say it is specifically reserved by the firmware
> in general. TFA sets the WKUP UART pins, but it does not use the WKUP UART
> for anything else. The only exception for TFA using the WKUP UART is if the
> user chooses to use the WKUP UART for TFA debugging [1].
> 
> All of this to say that the WKUP UART *can* be used by Linux, it does not
> need to be reserved for firmware.
> 

If you are going to use it for linux wakeup, then why dont we enable it for
linux? what TFA does or not should not dictate device tree unless it is
a hardware description - provide the full description in dt.

-- 
Regards,
Nishanth Menon
Key (0xDDB5849D1736249D) / Fingerprint: F8A2 8693 54EB 8232 17A3  1A34 DDB5 849D 1736 249D
https://ti.com/opensource
Re: [PATCH v2 0/3] arm64: boot: dts: ti: k3-am62l: allow WKUP UART wakeup from LPM
Posted by Kendall Willis 3 weeks, 1 day ago
On 1/8/26 12:03, Nishanth Menon wrote:
> On 11:52-20260108, Kendall Willis wrote:
>> On 1/8/26 11:05, Bryan Brattlof wrote:
>>> On January  7, 2026 thus sayeth Kendall Willis:
>>>> On 1/7/26 10:45, Bryan Brattlof wrote:
>>>>> On January  6, 2026 thus sayeth Kendall Willis:
>>>>>> K3 TI AM62L SoC supports wakeup from WKUP UART when the SoC is in the
>>>>>> DeepSleep low power mode. To allow wakeup from WKUP UART the target-module
>>>>>> device tree node is enabled. The ti-sysc interconnect target module driver
>>>>>> is used to configure the the SYSCONFIG related registers. In this case,
>>>>>> the interconnect target module node configures the WKUP UART to be able to
>>>>>> wakeup from system suspend. The SYSC register is used to enable wakeup
>>>>>> from system suspend for the WKUP UART. Refer to 14.7.2.5 UART in the
>>>>>> AM62L Techincal Reference Manual for registers referenced [1].
>>>>>>
>>>>>> Previous TI SoCs configure the WKUP UART to wakeup from system suspend
>>>>>> using the ti-sysc interconnect target module driver. Refer to commit
>>>>>> ce27f7f9e328 ("arm64: dts: ti: k3-am62-wakeup: Configure ti-sysc for
>>>>>> wkup_uart0") for an example of this.
>>>>>
>>>>> I think I may be confused. What is setting the pinmux for the wkup_uart
>>>>> to allow us to trigger the wake event? It looks like they reset to GPIO
>>>>> pins if not set. Is firmware doing this?
>>>>
>>>> On AM62L, the WKUP UART pinmux is initially set by TFA so that it is set to
>>>> the UART pins, not GPIO. The target-module node sets the WKUP UART SYSC
>>>> register so that wakeup is enabled.
>>>>
>>>
>>> Nice however should we mark the UART in the board file as reserved for
>>> TFA or is it free to be used by Linux and only during the low power
>>> modes after Linux is asleep will it be used by TFA?
>>>
>>> ~Bryan
>>
>> Sorry for the confusion, I said earlier that the WKUP UART could be used by
>> firmware, but that is not to say it is specifically reserved by the firmware
>> in general. TFA sets the WKUP UART pins, but it does not use the WKUP UART
>> for anything else. The only exception for TFA using the WKUP UART is if the
>> user chooses to use the WKUP UART for TFA debugging [1].
>>
>> All of this to say that the WKUP UART *can* be used by Linux, it does not
>> need to be reserved for firmware.
>>
> 
> If you are going to use it for linux wakeup, then why dont we enable it for
> linux? what TFA does or not should not dictate device tree unless it is
> a hardware description - provide the full description in dt.
> 

When adding a full description of WKUP UART and setting the WKUP UART to 
be enabled in Linux, the wakeup functionality stopped working. I am 
currently debugging this since I don't think that it should matter if 
the WKUP UART is enabled or disabled for the wakeup functionality to 
work with this implementation. I will post another version of this 
series once I am able to fix the problem.

Best,
Kendall Willis <k-willis@ti.com>