From c50ab98a36dc26c0b8fbd08de9eae4e37486ffba Mon Sep 17 00:00:00 2001 From: Phil Elwell Date: Tue, 16 Dec 2025 14:02:11 +0000 Subject: [PATCH 1/2] overlays: Fix the rs485 support in uart[2345] Errors in the uart{2,3,4,5} overlays cause some parameters to have no effect. Fix the problem by moving the rs485 label and by declaring rs485-rts-active-low as a boolean. Fixes: 9d79fae257c7 ("Add RS485 mode support for UART2, UART3, UART4, and UART5.") See: https://forums.raspberrypi.com/viewtopic.php?t=394687 Signed-off-by: Phil Elwell --- arch/arm/boot/dts/overlays/uart2-overlay.dts | 6 +++--- arch/arm/boot/dts/overlays/uart3-overlay.dts | 6 +++--- arch/arm/boot/dts/overlays/uart4-overlay.dts | 6 +++--- arch/arm/boot/dts/overlays/uart5-overlay.dts | 6 +++--- 4 files changed, 12 insertions(+), 12 deletions(-) diff --git a/arch/arm/boot/dts/overlays/uart2-overlay.dts b/arch/arm/boot/dts/overlays/uart2-overlay.dts index 4efbbed72619da..1e52d6d8926385 100644 --- a/arch/arm/boot/dts/overlays/uart2-overlay.dts +++ b/arch/arm/boot/dts/overlays/uart2-overlay.dts @@ -19,9 +19,9 @@ }; }; - rs485: fragment@2 { + fragment@2 { target = <&uart2>; - __dormant__ { + rs485: __dormant__ { linux,rs485-enabled-at-boot-time; rs485-rts-delay = <0 0>; }; @@ -30,7 +30,7 @@ __overrides__ { ctsrts = <0>,"=1"; rs485 = <0>,"=1=2"; - rs485_invert_rts = <&rs485>,"rs485-rts-active-low"; + rs485_invert_rts = <&rs485>,"rs485-rts-active-low?"; rs485_rts_on_delay = <&rs485>, "rs485-rts-delay:0"; rs485_rts_off_delay = <&rs485>, "rs485-rts-delay:4"; }; diff --git a/arch/arm/boot/dts/overlays/uart3-overlay.dts b/arch/arm/boot/dts/overlays/uart3-overlay.dts index a1a5c12f46e29e..26643282a05de5 100644 --- a/arch/arm/boot/dts/overlays/uart3-overlay.dts +++ b/arch/arm/boot/dts/overlays/uart3-overlay.dts @@ -19,9 +19,9 @@ }; }; - rs485: fragment@2 { + fragment@2 { target = <&uart3>; - __dormant__ { + rs485: __dormant__ { linux,rs485-enabled-at-boot-time; rs485-rts-delay = <0 0>; }; @@ -30,7 +30,7 @@ __overrides__ { ctsrts = <0>,"=1"; rs485 = <0>,"=1=2"; - rs485_invert_rts = <&rs485>,"rs485-rts-active-low"; + rs485_invert_rts = <&rs485>,"rs485-rts-active-low?"; rs485_rts_on_delay = <&rs485>, "rs485-rts-delay:0"; rs485_rts_off_delay = <&rs485>, "rs485-rts-delay:4"; }; diff --git a/arch/arm/boot/dts/overlays/uart4-overlay.dts b/arch/arm/boot/dts/overlays/uart4-overlay.dts index 782e0928393f87..c58f80a40f637e 100644 --- a/arch/arm/boot/dts/overlays/uart4-overlay.dts +++ b/arch/arm/boot/dts/overlays/uart4-overlay.dts @@ -19,9 +19,9 @@ }; }; - rs485: fragment@2 { + fragment@2 { target = <&uart4>; - __dormant__ { + rs485: __dormant__ { linux,rs485-enabled-at-boot-time; rs485-rts-delay = <0 0>; }; @@ -30,7 +30,7 @@ __overrides__ { ctsrts = <0>,"=1"; rs485 = <0>,"=1=2"; - rs485_invert_rts = <&rs485>,"rs485-rts-active-low"; + rs485_invert_rts = <&rs485>,"rs485-rts-active-low?"; rs485_rts_on_delay = <&rs485>, "rs485-rts-delay:0"; rs485_rts_off_delay = <&rs485>, "rs485-rts-delay:4"; }; diff --git a/arch/arm/boot/dts/overlays/uart5-overlay.dts b/arch/arm/boot/dts/overlays/uart5-overlay.dts index 228598ebcec3c3..b4a140b3bd0a78 100644 --- a/arch/arm/boot/dts/overlays/uart5-overlay.dts +++ b/arch/arm/boot/dts/overlays/uart5-overlay.dts @@ -19,9 +19,9 @@ }; }; - rs485: fragment@2 { + fragment@2 { target = <&uart5>; - __dormant__ { + rs485: __dormant__ { linux,rs485-enabled-at-boot-time; rs485-rts-delay = <0 0>; }; @@ -30,7 +30,7 @@ __overrides__ { ctsrts = <0>,"=1"; rs485 = <0>,"=1=2"; - rs485_invert_rts = <&rs485>,"rs485-rts-active-low"; + rs485_invert_rts = <&rs485>,"rs485-rts-active-low?"; rs485_rts_on_delay = <&rs485>, "rs485-rts-delay:0"; rs485_rts_off_delay = <&rs485>, "rs485-rts-delay:4"; }; From 0e170c6b878485be177d3dabc1dde34267afd8ac Mon Sep 17 00:00:00 2001 From: Phil Elwell Date: Tue, 16 Dec 2025 15:22:09 +0000 Subject: [PATCH 2/2] overlays: Add full-duplex rs485 support to uart2-5 Add full-duplex support to the rs485 modes of UARTs 2 to 5. From the README: rs485_full_duplex When RS485 mode is enabled, enables receiving of data while sending data (default off) See: https://forums.raspberrypi.com/viewtopic.php?t=394687 Signed-off-by: Phil Elwell --- arch/arm/boot/dts/overlays/README | 8 ++++++++ arch/arm/boot/dts/overlays/uart2-overlay.dts | 1 + arch/arm/boot/dts/overlays/uart3-overlay.dts | 1 + arch/arm/boot/dts/overlays/uart4-overlay.dts | 1 + arch/arm/boot/dts/overlays/uart5-overlay.dts | 1 + 5 files changed, 12 insertions(+) diff --git a/arch/arm/boot/dts/overlays/README b/arch/arm/boot/dts/overlays/README index baa0f7452c94d0..d49fa17cbbe4e1 100644 --- a/arch/arm/boot/dts/overlays/README +++ b/arch/arm/boot/dts/overlays/README @@ -5325,6 +5325,8 @@ Params: ctsrts Enable CTS/RTS on GPIOs 2-3 (default off) drive the OE pin of an RS485 transceiver (i.e. MAX3078E); also enables the UARTx ctsrts parameter, as RTS is required (default off). + rs485_full_duplex When RS485 mode is enabled, enables receiving of + data while sending data (default off) rs485_invert_rts When RS485 mode is enabled, inverts the RTS line from active-high (default) to active-low. rs485_rts_on_delay When RS485 mode is enabled, sets the delay (in @@ -5349,6 +5351,8 @@ Params: ctsrts Enable CTS/RTS on GPIOs 6-7 (default off) drive the OE pin of an RS485 transceiver (i.e. MAX3078E); also enables the UARTx ctsrts parameter, as RTS is required (default off). + rs485_full_duplex When RS485 mode is enabled, enables receiving of + data while sending data (default off) rs485_invert_rts When RS485 mode is enabled, inverts the RTS line from active-high (default) to active-low. rs485_rts_on_delay When RS485 mode is enabled, sets the delay (in @@ -5373,6 +5377,8 @@ Params: ctsrts Enable CTS/RTS on GPIOs 10-11 (default off) drive the OE pin of an RS485 transceiver (i.e. MAX3078E); also enables the UARTx ctsrts parameter, as RTS is required (default off). + rs485_full_duplex When RS485 mode is enabled, enables receiving of + data while sending data (default off) rs485_invert_rts When RS485 mode is enabled, inverts the RTS line from active-high (default) to active-low. rs485_rts_on_delay When RS485 mode is enabled, sets the delay (in @@ -5397,6 +5403,8 @@ Params: ctsrts Enable CTS/RTS on GPIOs 14-15 (default off) drive the OE pin of an RS485 transceiver (i.e. MAX3078E); also enables the UARTx ctsrts parameter, as RTS is required (default off). + rs485_full_duplex When RS485 mode is enabled, enables receiving of + data while sending data (default off) rs485_invert_rts When RS485 mode is enabled, inverts the RTS line from active-high (default) to active-low. rs485_rts_on_delay When RS485 mode is enabled, sets the delay (in diff --git a/arch/arm/boot/dts/overlays/uart2-overlay.dts b/arch/arm/boot/dts/overlays/uart2-overlay.dts index 1e52d6d8926385..ef472e2f4b09a3 100644 --- a/arch/arm/boot/dts/overlays/uart2-overlay.dts +++ b/arch/arm/boot/dts/overlays/uart2-overlay.dts @@ -30,6 +30,7 @@ __overrides__ { ctsrts = <0>,"=1"; rs485 = <0>,"=1=2"; + rs485_full_duplex = <&rs485>,"rs485-rx-during-tx?"; rs485_invert_rts = <&rs485>,"rs485-rts-active-low?"; rs485_rts_on_delay = <&rs485>, "rs485-rts-delay:0"; rs485_rts_off_delay = <&rs485>, "rs485-rts-delay:4"; diff --git a/arch/arm/boot/dts/overlays/uart3-overlay.dts b/arch/arm/boot/dts/overlays/uart3-overlay.dts index 26643282a05de5..68e6bc1d9e25f9 100644 --- a/arch/arm/boot/dts/overlays/uart3-overlay.dts +++ b/arch/arm/boot/dts/overlays/uart3-overlay.dts @@ -30,6 +30,7 @@ __overrides__ { ctsrts = <0>,"=1"; rs485 = <0>,"=1=2"; + rs485_full_duplex = <&rs485>,"rs485-rx-during-tx?"; rs485_invert_rts = <&rs485>,"rs485-rts-active-low?"; rs485_rts_on_delay = <&rs485>, "rs485-rts-delay:0"; rs485_rts_off_delay = <&rs485>, "rs485-rts-delay:4"; diff --git a/arch/arm/boot/dts/overlays/uart4-overlay.dts b/arch/arm/boot/dts/overlays/uart4-overlay.dts index c58f80a40f637e..26db5d5ed0d985 100644 --- a/arch/arm/boot/dts/overlays/uart4-overlay.dts +++ b/arch/arm/boot/dts/overlays/uart4-overlay.dts @@ -30,6 +30,7 @@ __overrides__ { ctsrts = <0>,"=1"; rs485 = <0>,"=1=2"; + rs485_full_duplex = <&rs485>,"rs485-rx-during-tx?"; rs485_invert_rts = <&rs485>,"rs485-rts-active-low?"; rs485_rts_on_delay = <&rs485>, "rs485-rts-delay:0"; rs485_rts_off_delay = <&rs485>, "rs485-rts-delay:4"; diff --git a/arch/arm/boot/dts/overlays/uart5-overlay.dts b/arch/arm/boot/dts/overlays/uart5-overlay.dts index b4a140b3bd0a78..f90447c6191393 100644 --- a/arch/arm/boot/dts/overlays/uart5-overlay.dts +++ b/arch/arm/boot/dts/overlays/uart5-overlay.dts @@ -30,6 +30,7 @@ __overrides__ { ctsrts = <0>,"=1"; rs485 = <0>,"=1=2"; + rs485_full_duplex = <&rs485>,"rs485-rx-during-tx?"; rs485_invert_rts = <&rs485>,"rs485-rts-active-low?"; rs485_rts_on_delay = <&rs485>, "rs485-rts-delay:0"; rs485_rts_off_delay = <&rs485>, "rs485-rts-delay:4";