Message ID | 20241219-topic-mcan-wakeup-source-v6-12-v6-0-1356c7f7cfda@baylibre.com (mailing list archive) |
---|---|
Headers | show |
Series | can: m_can: Add am62 wakeup support | expand |
On 19.12.2024 20:57:51, Markus Schneider-Pargmann wrote: > Hi, > > Series > ------ > am62, am62a and am62p support Partial-IO, a poweroff SoC state with a > few pin groups being active for wakeup. > > To support mcu_mcan0 and mcu_mcan1 wakeup for the mentioned SoCs, the > series introduces a notion of wake-on-lan for m_can. If the user decides > to enable wake-on-lan for a m_can device, the device is set to wakeup > enabled. A 'wakeup' pinctrl state is selected to enable wakeup flags for > the relevant pins. If wake-on-lan is disabled the default pinctrl is > selected. > > After feedback from Nishanth and Krzysztof, I moved to a wakeup-source > property that can be a list of powerstates in which the device is wakeup > capable. This describes special cases like Partial-IO where the device > is powered off but pins can be sensible to changes and trigger a wakeup. > > It is based on v6.13-rc1. > > Partial-IO > ---------- > This series is part of a bigger topic to support Partial-IO on am62, > am62a and am62p. Partial-IO is a poweroff state in which some pins are > able to wakeup the SoC. In detail MCU m_can and two serial port pins can > trigger the wakeup. > A documentation can also be found in section 6.2.4 in the TRM: > https://www.ti.com/lit/pdf/spruiv7 > > This other series is relevant for the support of Partial-IO: > > - firmware: ti_sci: Partial-IO support > https://gitlab.baylibre.com/msp8/linux/-/tree/topic/am62-partialio/v6.13?ref_type=heads > > 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.13?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 > > I tested these patches on am62-lp-sk. > > Best, > Markus > > Previous versions: > 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 > > Changes in v6: > - Rebased to v6.13-rc1 > - After feedback of the other Partial-IO series, I updated this series > and removed all use of regulator-related patches. > - wakeup-source is now not only a boolean property but can also be a > list of power states in which the device is wakeup capable. > > Changes in v5: > - Make the check of wol options nicer to read > > Changes in v4: > - Remove leftover testing code that always returned -EIO in a specific > - Redesign pincontrol setup to be easier understandable and less nested > - Fix missing parantheses around wol_enable expression > - Remove | from binding description > > Changes in v3: > - Rebase to v6.12-rc1 > - Change 'wakeup-source' to only 'true' > - Simplify m_can_set_wol by returning early on error > - Add vio-suuply binding and handling of this optional property. > vio-supply is used to reflect the SoC architecture and which power > line powers the m_can unit. This is important as some units are > powered in special low power modes. > > Changes in v2: > - Rebase to v6.11-rc1 > - Squash these two patches for the binding into one: > dt-bindings: can: m_can: Add wakeup-source property > dt-bindings: can: m_can: Add wakeup pinctrl state > - Add error handling to multiple patches of the m_can driver > - Add error handling in m_can_class_allocate_dev(). This also required > to add a new patch to return error pointers from > m_can_class_allocate_dev(). > > Signed-off-by: Markus Schneider-Pargmann <msp@baylibre.com> LGTM, next we need Krzysztof Kozlowski's ACK for DT bindings update. The dts changes (patches 5...7) will not go via the CAN tree but AFAICS via Vignesh Raghavendra. regards, Marc
Hi, Series ------ am62, am62a and am62p support Partial-IO, a poweroff SoC state with a few pin groups being active for wakeup. To support mcu_mcan0 and mcu_mcan1 wakeup for the mentioned SoCs, the series introduces a notion of wake-on-lan for m_can. If the user decides to enable wake-on-lan for a m_can device, the device is set to wakeup enabled. A 'wakeup' pinctrl state is selected to enable wakeup flags for the relevant pins. If wake-on-lan is disabled the default pinctrl is selected. After feedback from Nishanth and Krzysztof, I moved to a wakeup-source property that can be a list of powerstates in which the device is wakeup capable. This describes special cases like Partial-IO where the device is powered off but pins can be sensible to changes and trigger a wakeup. It is based on v6.13-rc1. Partial-IO ---------- This series is part of a bigger topic to support Partial-IO on am62, am62a and am62p. Partial-IO is a poweroff state in which some pins are able to wakeup the SoC. In detail MCU m_can and two serial port pins can trigger the wakeup. A documentation can also be found in section 6.2.4 in the TRM: https://www.ti.com/lit/pdf/spruiv7 This other series is relevant for the support of Partial-IO: - firmware: ti_sci: Partial-IO support https://gitlab.baylibre.com/msp8/linux/-/tree/topic/am62-partialio/v6.13?ref_type=heads 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.13?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 I tested these patches on am62-lp-sk. Best, Markus Previous versions: 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 Changes in v6: - Rebased to v6.13-rc1 - After feedback of the other Partial-IO series, I updated this series and removed all use of regulator-related patches. - wakeup-source is now not only a boolean property but can also be a list of power states in which the device is wakeup capable. Changes in v5: - Make the check of wol options nicer to read Changes in v4: - Remove leftover testing code that always returned -EIO in a specific - Redesign pincontrol setup to be easier understandable and less nested - Fix missing parantheses around wol_enable expression - Remove | from binding description Changes in v3: - Rebase to v6.12-rc1 - Change 'wakeup-source' to only 'true' - Simplify m_can_set_wol by returning early on error - Add vio-suuply binding and handling of this optional property. vio-supply is used to reflect the SoC architecture and which power line powers the m_can unit. This is important as some units are powered in special low power modes. Changes in v2: - Rebase to v6.11-rc1 - Squash these two patches for the binding into one: dt-bindings: can: m_can: Add wakeup-source property dt-bindings: can: m_can: Add wakeup pinctrl state - Add error handling to multiple patches of the m_can driver - Add error handling in m_can_class_allocate_dev(). This also required to add a new patch to return error pointers from m_can_class_allocate_dev(). Signed-off-by: Markus Schneider-Pargmann <msp@baylibre.com> --- Markus Schneider-Pargmann (6): dt-bindings: can: m_can: Add wakeup properties can: m_can: Map WoL to device_set_wakeup_enable can: m_can: Return ERR_PTR on error in allocation can: m_can: Support pinctrl wakeup state arm64: dts: ti: k3-am62: Mark mcu_mcan0/1 as wakeup-source arm64: dts: ti: k3-am62a-mcu: Mark mcu_mcan0/1 as wakeup-source Vibhore Vardhan (1): arm64: dts: ti: k3-am62p-mcu: Mark mcu_mcan0/1 as wakeup-source .../devicetree/bindings/net/can/bosch,m_can.yaml | 27 +++++ arch/arm64/boot/dts/ti/k3-am62-mcu.dtsi | 2 + arch/arm64/boot/dts/ti/k3-am62a-mcu.dtsi | 2 + .../boot/dts/ti/k3-am62p-j722s-common-mcu.dtsi | 2 + drivers/net/can/m_can/m_can.c | 111 ++++++++++++++++++++- drivers/net/can/m_can/m_can.h | 4 + drivers/net/can/m_can/m_can_pci.c | 4 +- drivers/net/can/m_can/m_can_platform.c | 4 +- drivers/net/can/m_can/tcan4x5x-core.c | 4 +- 9 files changed, 151 insertions(+), 9 deletions(-) --- base-commit: 40384c840ea1944d7c5a392e8975ed088ecf0b37 change-id: 20241009-topic-mcan-wakeup-source-v6-12-8c1d69931bd8 Best regards,