[<prev] [next>] [thread-next>] [day] [month] [year] [list]
Message-Id: <20250812-topic-am62-partialio-v6-12-b4-v7-0-ac10865c2d87@baylibre.com>
Date: Tue, 12 Aug 2025 11:19:46 +0200
From: Markus Schneider-Pargmann <msp@...libre.com>
To: Nishanth Menon <nm@...com>, Tero Kristo <kristo@...nel.org>,
Santosh Shilimkar <ssantosh@...nel.org>
Cc: Vishal Mahaveer <vishalm@...com>, Kevin Hilman <khilman@...libre.com>,
Dhruva Gole <d-gole@...com>, Sebin Francis <sebin.francis@...com>,
Kendall Willis <k-willis@...com>, Akashdeep Kaur <a-kaur@...com>,
linux-arm-kernel@...ts.infradead.org, linux-kernel@...r.kernel.org,
Markus Schneider-Pargmann <msp@...libre.com>
Subject: [PATCH v7 0/2] firmware: ti_sci: Partial-IO support
Hi,
This series adds support for Partial-IO to the ti-sci driver, implementing the
firmware interface necessary to enter this low power state. It processes the
wakeup-source properties from the devicetree and communicates with the system
firmware to enter Partial-IO mode when appropriate wakeup sources are enabled.
Partial-IO Overview
------------------
Partial-IO is a low power system state in which nearly everything is
turned off except the pins of the CANUART group (mcu_mcan0, mcu_mcan1,
wkup_uart0 and mcu_uart0). These devices can trigger a wakeup of the system
on pin activity. Note that this does not resume the system as the DDR is
off as well. So this state can be considered a power-off state with wakeup
capabilities.
A documentation can also be found in section 6.2.4 in the TRM:
https://www.ti.com/lit/pdf/spruiv7
Implementation Details
----------------------
The complete Partial-IO feature requires three coordinated series, each handling
a different aspect of the implementation:
1. m_can driver series: Implements device-specific wakeup functionality
for m_can devices, allowing them to be set as wakeup sources.
https://gitlab.baylibre.com/msp8/linux/-/tree/topic/mcan-wakeup-source/v6.17?ref_type=heads
https://lore.kernel.org/r/20250812-topic-mcan-wakeup-source-v6-12-v8-0-6972a810d63b@baylibre.com
2. Devicetree series: Defines system states and wakeup sources in the
devicetree for am62, am62a and am62p.
https://gitlab.baylibre.com/msp8/linux/-/tree/topic/am62-dt-partialio/v6.17?ref_type=heads
https://lore.kernel.org/r/20250812-topic-am62-dt-partialio-v6-15-v2-0-25352364a0ac@baylibre.com
3. This series (TI-SCI firmware): Implements the firmware interface to enter
Partial-IO mode when appropriate wakeup sources are enabled.
Devicetree Bindings
-------------------
This series depends on the dt-schema pull request that adds bindings for
system-idle-states and updates the binding for wakeup-source:
https://github.com/devicetree-org/dt-schema/pull/150
This is now merged. These new bindings allow the ti-sci driver to
identify devices that can act as wakeup sources for specific system
states like Partial-IO.
Testing
-------
A test branch is available here that includes all patches required to
test Partial-IO:
https://gitlab.baylibre.com/msp8/linux/-/tree/integration/am62-partialio/v6.17?ref_type=heads
After enabling Wake-on-LAN the system can be powered off and will enter
the Partial-IO state in which it can be woken up by activity on the
specific pins:
ethtool -s can0 wol p
ethtool -s can1 wol p
poweroff
These patches are tested on am62-lp-sk.
Best,
Markus
Previous versions "firmware: ti_sci: Partial-IO support":
v1: https://lore.kernel.org/lkml/20240523080225.1288617-1-msp@baylibre.com/
v2: https://lore.kernel.org/lkml/20240729080101.3859701-1-msp@baylibre.com/
v3: https://lore.kernel.org/r/20241012-topic-am62-partialio-v6-13-b4-v3-0-f7c6c2739681@baylibre.com
v4: https://lore.kernel.org/r/20241219-topic-am62-partialio-v6-12-b4-v4-0-1cb8eabd407e@baylibre.com
v5: https://lore.kernel.org/r/20250306-topic-am62-partialio-v6-12-b4-v5-0-f9323d3744a2@baylibre.com
v6: https://lore.kernel.org/r/20250421-topic-am62-partialio-v6-12-b4-v6-0-3b5cefab1339@baylibre.com
Previous versions "can: m_can: Add am62 wakeup support":
v1: https://lore.kernel.org/lkml/20240523075347.1282395-1-msp@baylibre.com/
v2: https://lore.kernel.org/lkml/20240729074135.3850634-1-msp@baylibre.com/
v3: https://lore.kernel.org/lkml/20241011-topic-mcan-wakeup-source-v6-12-v3-0-9752c714ad12@baylibre.com
v4: https://lore.kernel.org/r/20241015-topic-mcan-wakeup-source-v6-12-v4-0-fdac1d1e7aa6@baylibre.com
v5: https://lore.kernel.org/r/20241028-topic-mcan-wakeup-source-v6-12-v5-0-33edc0aba629@baylibre.com
v6: https://lore.kernel.org/r/20241219-topic-mcan-wakeup-source-v6-12-v6-0-1356c7f7cfda@baylibre.com
Changes in v7:
- Rebase to v6.17-rc1
- Update the idle-state-name used to off-wake as introduced in
dt-schema
Changes in v6:
- Narrowed down the wakeup-source binding to phandle lists
- Split off the mcan and DT changes into separate series
Changes in v5:
- Rebased to v6.14-rc1
- Merged m_can and ti_sci series to avoid conflicts and show
dependencies more easily
- Added definitions of system-states for am62/am62a/am62p
- Moved wakeup-source definitions into board dts files as they require
a bit of support on the board.
- Updated ti_sci support to walk through the wakeup-source phandle
lists
- Added pinctrl settings for mcu_mcan0/1 on all boards
- Minor style updates for ti_sci support for transfers without response
- Update and move the dt-binding for wakeup-source from the m_can
binding to the dt-schema repository
Changes in v4:
- Rebased to v6.13-rc1
- Removed all regulator related structures from patches and implemented
the wakeup-source property use instead.
Changes in v3:
- Remove other modes declared for PREPARE_SLEEP as they probably won't
ever be used in upstream.
- Replace the wait loop after sending PREPARE_SLEEP with msleep and do
an emergency_restart if it exits
- Remove uarts from DT wakeup sources
- Split no response handling in ti_sci_do_xfer() into a separate patch
and use goto instead of if ()
- Remove DT binding parital-io-wakeup-sources. Instead I am modeling
the devices that are in the relevant group that are powered during
Partial-IO with the power supplies that are externally provided to
the SoC. In this case they are provided through 'vddshv_canuart'. All
devices using this regulator can be considered a potential wakeup
source if they are wakeup capable and wakeup enabled.
- Added devicetree patches adding vcc_3v3_sys regulator and
vddshv_canuart for am62-lp-sk
- Add pinctrl entries for am62-lp-sk to add WKUP_EN for mcu_mcan0 and
mcu_mcan1
Changes in v2:
- Rebase to v6.11-rc1
- dt-binding:
- Update commit message
- Add more verbose description of the new binding for a better
explanation.
- ti_sci driver:
- Combine ti_sci_do_send() into ti_sci_do_xfer and only wait on a
response if a flag is set.
- On failure to enter Partial-IO, do emergency_restart()
- Add comments
- Fix small things
Signed-off-by: Markus Schneider-Pargmann <msp@...libre.com>
---
Markus Schneider-Pargmann (2):
firmware: ti_sci: Support transfers without response
firmware: ti_sci: Partial-IO support
drivers/firmware/ti_sci.c | 138 +++++++++++++++++++++++++++++++++++++++++++++-
drivers/firmware/ti_sci.h | 5 ++
2 files changed, 140 insertions(+), 3 deletions(-)
---
base-commit: 062b3e4a1f880f104a8d4b90b767788786aa7b78
change-id: 20241008-topic-am62-partialio-v6-12-b4-c273fbac4447
prerequisite-change-id: 20241009-topic-mcan-wakeup-source-v6-12-8c1d69931bd8:v8
prerequisite-patch-id: 02b7142f56c849c9a3faab2d2871805febd647aa
prerequisite-patch-id: 830b339ea452edd750b04f719da91e721be630cb
prerequisite-patch-id: 2c9142d2bc47e64c49b7b8a7ca20a62a0be14870
prerequisite-patch-id: f7652a616dca17fd5e4a7e5cba59de6a6a36079f
prerequisite-change-id: 20250415-topic-am62-dt-partialio-v6-15-327dd1ff17da:v2
prerequisite-patch-id: 33c717bb60c1d01f8cc7118916c23c7c0b2199a8
prerequisite-patch-id: 707e4619d7b844e1b67ccde28b4484b7b0d27daa
prerequisite-patch-id: 412feb5d3fc125e489d11b726c0b2d8fd5ff36f3
prerequisite-patch-id: 4e3ed635267f9548b9ac7a9e440971bb1e54a5ee
prerequisite-patch-id: e0330ef081affbe91e02b2e9b5a76ebab59e6ea6
prerequisite-patch-id: 8ed14e4861cf2fb4ce2dc2712222ad4d956746d7
prerequisite-patch-id: 7b961aadd7a3298eb8ad245f173e1c5e47b37be9
Best regards,
--
Markus Schneider-Pargmann <msp@...libre.com>
Powered by blists - more mailing lists