* [PATCH RFC v2 01/10] dt-bindings: vendor-prefixes: Add Securifi
2026-10-06 18:17 [PATCH RFC v2 00/10] ARM: Add support for Cortina Systems CS75xx and Securifi Almond+ Fil Dunsky via B4 Relay
@ 2026-10-06 18:17 ` Fil Dunsky via B4 Relay
2026-10-06 18:17 ` [PATCH RFC v2 02/10] dt-bindings: arm: Add Cortina Systems CS7542 and Securifi Almond+ Fil Dunsky via B4 Relay
` (8 subsequent siblings)
9 siblings, 0 replies; 16+ messages in thread
From: Fil Dunsky via B4 Relay @ 2026-10-06 18:17 UTC (permalink / raw)
To: Arnd Bergmann, Linus Walleij, Krzysztof Kozlowski
Cc: Rob Herring, Krzysztof Kozlowski, Conor Dooley,
Greg Kroah-Hartman, Jiri Slaby, Russell King, Alexandre Belloni,
Drew Fustini, Lorenzo Pieralisi, linux-arm-kernel, devicetree,
linux-kernel, linux-serial, Jason Li, Conor Dooley, Fil Dunsky
From: Fil Dunsky <filipp.dunsky@gmail.com>
Securifi Ltd. makes the Almond series of touchscreen Wi-Fi routers.
Add a vendor prefix for it.
Reviewed-by: Linus Walleij <linusw@kernel.org>
Acked-by: Conor Dooley <conor.dooley@microchip.com>
Signed-off-by: Fil Dunsky <filipp.dunsky@gmail.com>
---
Documentation/devicetree/bindings/vendor-prefixes.yaml | 2 ++
1 file changed, 2 insertions(+)
diff --git a/Documentation/devicetree/bindings/vendor-prefixes.yaml b/Documentation/devicetree/bindings/vendor-prefixes.yaml
index 5ddeae3a697..71e6f82a71f 100644
--- a/Documentation/devicetree/bindings/vendor-prefixes.yaml
+++ b/Documentation/devicetree/bindings/vendor-prefixes.yaml
@@ -1497,6 +1497,8 @@ patternProperties:
description: SDMC Technology Co., Ltd
"^seagate,.*":
description: Seagate Technology PLC
+ "^securifi,.*":
+ description: Securifi Ltd.
"^seeed,.*":
description: Seeed Technology Co., Ltd
"^seirobotics,.*":
--
2.53.0
^ permalink raw reply [flat|nested] 16+ messages in thread* [PATCH RFC v2 02/10] dt-bindings: arm: Add Cortina Systems CS7542 and Securifi Almond+
2026-10-06 18:17 [PATCH RFC v2 00/10] ARM: Add support for Cortina Systems CS75xx and Securifi Almond+ Fil Dunsky via B4 Relay
2026-10-06 18:17 ` [PATCH RFC v2 01/10] dt-bindings: vendor-prefixes: Add Securifi Fil Dunsky via B4 Relay
@ 2026-10-06 18:17 ` Fil Dunsky via B4 Relay
2026-10-06 18:17 ` [PATCH RFC v2 03/10] dt-bindings: arm: cpus: Add Cortina Systems CS7542 enable method Fil Dunsky via B4 Relay
` (7 subsequent siblings)
9 siblings, 0 replies; 16+ messages in thread
From: Fil Dunsky via B4 Relay @ 2026-10-06 18:17 UTC (permalink / raw)
To: Arnd Bergmann, Linus Walleij, Krzysztof Kozlowski
Cc: Rob Herring, Krzysztof Kozlowski, Conor Dooley,
Greg Kroah-Hartman, Jiri Slaby, Russell King, Alexandre Belloni,
Drew Fustini, Lorenzo Pieralisi, linux-arm-kernel, devicetree,
linux-kernel, linux-serial, Jason Li, Fil Dunsky, Conor Dooley
From: Fil Dunsky <filipp.dunsky@gmail.com>
Add the top-level binding for boards built around the Cortina Systems
CS7542 ("Goldengate G2") network processor, a dual Cortex-A9 SoC, and
the first such board, the Securifi Almond+ touchscreen router.
Reviewed-by: Linus Walleij <linusw@kernel.org>
Signed-off-by: Fil Dunsky <filipp.dunsky@gmail.com>
Acked-by: Conor Dooley <conor.dooley@microchip.com>
---
Documentation/devicetree/bindings/arm/cortina.yaml | 31 ++++++++++++++++++++++
1 file changed, 31 insertions(+)
diff --git a/Documentation/devicetree/bindings/arm/cortina.yaml b/Documentation/devicetree/bindings/arm/cortina.yaml
new file mode 100644
index 00000000000..1c04b178159
--- /dev/null
+++ b/Documentation/devicetree/bindings/arm/cortina.yaml
@@ -0,0 +1,31 @@
+# SPDX-License-Identifier: (GPL-2.0-only OR BSD-2-Clause)
+%YAML 1.2
+---
+$id: http://devicetree.org/schemas/arm/cortina.yaml#
+$schema: http://devicetree.org/meta-schemas/core.yaml#
+
+title: Cortina Systems CS75xx platforms
+
+maintainers:
+ - Fil Dunsky <filipp.dunsky@gmail.com>
+
+description:
+ The CS75xx ("Goldengate G2") family are network processors from Cortina
+ Systems. The CS7542 has two Cortex-A9 cores with an SCU, GIC, private
+ timers and a PL310 L2 cache controller, a packet processing engine, three
+ PCIe root ports, a NAND flash controller and low speed peripherals.
+
+properties:
+ $nodename:
+ const: '/'
+ compatible:
+ oneOf:
+ - description: CS7542 based boards
+ items:
+ - enum:
+ - securifi,almondplus
+ - const: cortina,cs7542
+
+additionalProperties: true
+
+...
--
2.53.0
^ permalink raw reply [flat|nested] 16+ messages in thread* [PATCH RFC v2 03/10] dt-bindings: arm: cpus: Add Cortina Systems CS7542 enable method
2026-10-06 18:17 [PATCH RFC v2 00/10] ARM: Add support for Cortina Systems CS75xx and Securifi Almond+ Fil Dunsky via B4 Relay
2026-10-06 18:17 ` [PATCH RFC v2 01/10] dt-bindings: vendor-prefixes: Add Securifi Fil Dunsky via B4 Relay
2026-10-06 18:17 ` [PATCH RFC v2 02/10] dt-bindings: arm: Add Cortina Systems CS7542 and Securifi Almond+ Fil Dunsky via B4 Relay
@ 2026-10-06 18:17 ` Fil Dunsky via B4 Relay
2026-10-06 18:17 ` [PATCH RFC v2 04/10] ARM: goldengate: Add support for the CS75xx SoC family Fil Dunsky via B4 Relay
` (6 subsequent siblings)
9 siblings, 0 replies; 16+ messages in thread
From: Fil Dunsky via B4 Relay @ 2026-10-06 18:17 UTC (permalink / raw)
To: Arnd Bergmann, Linus Walleij, Krzysztof Kozlowski
Cc: Rob Herring, Krzysztof Kozlowski, Conor Dooley,
Greg Kroah-Hartman, Jiri Slaby, Russell King, Alexandre Belloni,
Drew Fustini, Lorenzo Pieralisi, linux-arm-kernel, devicetree,
linux-kernel, linux-serial, Jason Li, Fil Dunsky
From: Fil Dunsky <filipp.dunsky@gmail.com>
On the CS7542 the bootloader parks the secondary Cortex-A9 core in a loop
that waits for an event and then jumps to the address found in a global
software register. Add the "cortina,cs7542-smp" enable method for it and,
as with the other release-address based methods, require cpu-release-addr
to point at that register.
Reviewed-by: Linus Walleij <linusw@kernel.org>
Signed-off-by: Fil Dunsky <filipp.dunsky@gmail.com>
---
Documentation/devicetree/bindings/arm/cpus.yaml | 2 ++
1 file changed, 2 insertions(+)
diff --git a/Documentation/devicetree/bindings/arm/cpus.yaml b/Documentation/devicetree/bindings/arm/cpus.yaml
index 96136b70dac..7a394c500d6 100644
--- a/Documentation/devicetree/bindings/arm/cpus.yaml
+++ b/Documentation/devicetree/bindings/arm/cpus.yaml
@@ -269,6 +269,7 @@ properties:
- brcm,bcm63138
- brcm,bcm-nsp-smp
- brcm,brahma-b15
+ - cortina,cs7542-smp
- marvell,armada-375-smp
- marvell,armada-380-smp
- marvell,armada-390-smp
@@ -484,6 +485,7 @@ allOf:
enable-method:
enum:
- spin-table
+ - cortina,cs7542-smp
- renesas,r9a06g032-smp
required:
- enable-method
--
2.53.0
^ permalink raw reply [flat|nested] 16+ messages in thread* [PATCH RFC v2 04/10] ARM: goldengate: Add support for the CS75xx SoC family
2026-10-06 18:17 [PATCH RFC v2 00/10] ARM: Add support for Cortina Systems CS75xx and Securifi Almond+ Fil Dunsky via B4 Relay
` (2 preceding siblings ...)
2026-10-06 18:17 ` [PATCH RFC v2 03/10] dt-bindings: arm: cpus: Add Cortina Systems CS7542 enable method Fil Dunsky via B4 Relay
@ 2026-10-06 18:17 ` Fil Dunsky via B4 Relay
2026-10-07 11:40 ` Linus Walleij
2026-10-06 18:17 ` [PATCH RFC v2 05/10] ARM: debug: Add Cortina Systems CS75xx UART0 support Fil Dunsky via B4 Relay
` (5 subsequent siblings)
9 siblings, 1 reply; 16+ messages in thread
From: Fil Dunsky via B4 Relay @ 2026-10-06 18:17 UTC (permalink / raw)
To: Arnd Bergmann, Linus Walleij, Krzysztof Kozlowski
Cc: Rob Herring, Krzysztof Kozlowski, Conor Dooley,
Greg Kroah-Hartman, Jiri Slaby, Russell King, Alexandre Belloni,
Drew Fustini, Lorenzo Pieralisi, linux-arm-kernel, devicetree,
linux-kernel, linux-serial, Jason Li, Fil Dunsky
From: Fil Dunsky <filipp.dunsky@gmail.com>
The Cortina Systems CS75xx ("Goldengate G2") are network processors
with two Cortex-A9 cores, an SCU, GIC, the Cortex-A9 global and private
timers and a PL310 L2 cache controller. The family includes at least
the CS7522 and the CS7542; the CS7542 is used, among others, in the
Securifi Almond+ router.
Apart from the vendor this has little in common with the Cortina
Systems Gemini (SL3516/CS3516) supported by mach-gemini: Gemini is a
single ARMv4 FA526 with Faraday peripherals (FTINTC010, FTTMR010,
FTGPIO010, a 16550 UART) built for ARCH_MULTI_V4, while the CS75xx is
an ARMv7 MPCore whose UART, GPIO, interrupt controller and NAND
controller are different blocks. It therefore gets its own directory,
named after the Goldengate codename like in the vendor kernel. The
Kconfig symbol, ARCH_CORTINA_ACCESS, covers the whole family and is
named after Cortina Access, which last sold these chips and also makes
the newer 64-bit parts.
The generic DT machine is sufficient for the platform, so only the SMP
bring-up needs code: the bootloader parks the secondary core in a WFE
loop that polls a global software register, so boot it by writing the
physical address of secondary_startup to the register named by the
cpu-release-addr property and issuing SEV.
The CPU is a Cortex-A9 r2p1, so select the errata workarounds that apply
to that revision and can be enabled on a multiplatform kernel. The PL310
is r3p2 and needs none of the PL310 workarounds.
Signed-off-by: Fil Dunsky <filipp.dunsky@gmail.com>
---
arch/arm/Kconfig | 2 ++
arch/arm/Makefile | 1 +
arch/arm/mach-goldengate/Kconfig | 18 ++++++++++
arch/arm/mach-goldengate/Makefile | 2 ++
arch/arm/mach-goldengate/platsmp.c | 71 ++++++++++++++++++++++++++++++++++++++
5 files changed, 94 insertions(+)
diff --git a/arch/arm/Kconfig b/arch/arm/Kconfig
index 0cc289a7184..87ff6525648 100644
--- a/arch/arm/Kconfig
+++ b/arch/arm/Kconfig
@@ -391,6 +391,8 @@ source "arch/arm/mach-footbridge/Kconfig"
source "arch/arm/mach-gemini/Kconfig"
+source "arch/arm/mach-goldengate/Kconfig"
+
source "arch/arm/mach-highbank/Kconfig"
source "arch/arm/mach-hisi/Kconfig"
diff --git a/arch/arm/Makefile b/arch/arm/Makefile
index 573813ef5e7..21d7a443cf7 100644
--- a/arch/arm/Makefile
+++ b/arch/arm/Makefile
@@ -187,6 +187,7 @@ machine-$(CONFIG_ARCH_DOVE) += dove
machine-$(CONFIG_ARCH_EXYNOS) += exynos
machine-$(CONFIG_ARCH_FOOTBRIDGE) += footbridge
machine-$(CONFIG_ARCH_GEMINI) += gemini
+machine-$(CONFIG_ARCH_CORTINA_ACCESS) += goldengate
machine-$(CONFIG_ARCH_HIGHBANK) += highbank
machine-$(CONFIG_ARCH_HISI) += hisi
machine-$(CONFIG_ARCH_IXP4XX) += ixp4xx
diff --git a/arch/arm/mach-goldengate/Kconfig b/arch/arm/mach-goldengate/Kconfig
new file mode 100644
index 00000000000..d2963df0aee
--- /dev/null
+++ b/arch/arm/mach-goldengate/Kconfig
@@ -0,0 +1,18 @@
+# SPDX-License-Identifier: GPL-2.0-only
+config ARCH_CORTINA_ACCESS
+ bool "Cortina Systems CS75xx (Goldengate G2)"
+ depends on ARCH_MULTI_V7
+ select ARM_ERRATA_754322
+ select ARM_ERRATA_764369 if SMP
+ select ARM_GIC
+ select ARM_GLOBAL_TIMER
+ select CACHE_L2X0
+ select CLKSRC_ARM_GLOBAL_TIMER_SCHED_CLOCK
+ select HAVE_ARM_SCU if SMP
+ select HAVE_ARM_TWD if SMP
+ help
+ Support for the Cortina Systems CS75xx (Goldengate G2) family of
+ network processors, such as the CS7542 used in the Securifi
+ Almond+ router. These SoCs have two Cortex-A9 cores with a PL310
+ L2 cache controller, a packet processing engine, PCIe, NAND and
+ the usual low speed peripherals.
diff --git a/arch/arm/mach-goldengate/Makefile b/arch/arm/mach-goldengate/Makefile
new file mode 100644
index 00000000000..b839201c980
--- /dev/null
+++ b/arch/arm/mach-goldengate/Makefile
@@ -0,0 +1,2 @@
+# SPDX-License-Identifier: GPL-2.0-only
+obj-$(CONFIG_SMP) += platsmp.o
diff --git a/arch/arm/mach-goldengate/platsmp.c b/arch/arm/mach-goldengate/platsmp.c
new file mode 100644
index 00000000000..7cd23ee56be
--- /dev/null
+++ b/arch/arm/mach-goldengate/platsmp.c
@@ -0,0 +1,71 @@
+// SPDX-License-Identifier: GPL-2.0-only
+/*
+ * SMP support for the Cortina Systems CS75xx SoCs
+ *
+ * The bootloader parks the secondary core in a WFE loop that polls a
+ * global software register and jumps to the address found there once it
+ * becomes non-zero. The register is described by the cpu-release-addr
+ * property of the secondary CPU node.
+ */
+
+#include <linux/io.h>
+#include <linux/of.h>
+#include <linux/of_address.h>
+#include <linux/smp.h>
+#include <asm/smp_plat.h>
+#include <asm/smp_scu.h>
+
+static int cs75xx_boot_secondary(unsigned int cpu, struct task_struct *idle)
+{
+ struct device_node *np;
+ void __iomem *release;
+ u64 addr;
+ int ret;
+
+ np = of_get_cpu_node(cpu, NULL);
+ if (!np)
+ return -ENODEV;
+
+ ret = of_property_read_u64(np, "cpu-release-addr", &addr);
+ of_node_put(np);
+ if (ret) {
+ pr_err("CPU%u: missing cpu-release-addr\n", cpu);
+ return ret;
+ }
+
+ release = ioremap(addr, sizeof(u32));
+ if (!release)
+ return -ENOMEM;
+
+ writel(__pa_symbol(secondary_startup), release);
+ iounmap(release);
+
+ /* The secondary core waits in WFE, wake it up */
+ dsb_sev();
+
+ return 0;
+}
+
+static void __init cs75xx_smp_prepare_cpus(unsigned int max_cpus)
+{
+ struct device_node *np;
+ void __iomem *scu_base;
+
+ np = of_find_compatible_node(NULL, NULL, "arm,cortex-a9-scu");
+ scu_base = of_iomap(np, 0);
+ of_node_put(np);
+ if (!scu_base) {
+ pr_err("failed to map SCU\n");
+ return;
+ }
+
+ scu_enable(scu_base);
+ iounmap(scu_base);
+}
+
+static const struct smp_operations cs75xx_smp_ops __initconst = {
+ .smp_prepare_cpus = cs75xx_smp_prepare_cpus,
+ .smp_boot_secondary = cs75xx_boot_secondary,
+};
+
+CPU_METHOD_OF_DECLARE(cs7542_smp, "cortina,cs7542-smp", &cs75xx_smp_ops);
--
2.53.0
^ permalink raw reply [flat|nested] 16+ messages in thread* Re: [PATCH RFC v2 04/10] ARM: goldengate: Add support for the CS75xx SoC family
2026-10-06 18:17 ` [PATCH RFC v2 04/10] ARM: goldengate: Add support for the CS75xx SoC family Fil Dunsky via B4 Relay
@ 2026-10-07 11:40 ` Linus Walleij
0 siblings, 0 replies; 16+ messages in thread
From: Linus Walleij @ 2026-10-07 11:40 UTC (permalink / raw)
To: filipp.dunsky
Cc: Arnd Bergmann, Krzysztof Kozlowski, Rob Herring,
Krzysztof Kozlowski, Conor Dooley, Greg Kroah-Hartman,
Jiri Slaby, Russell King, Alexandre Belloni, Drew Fustini,
Lorenzo Pieralisi, linux-arm-kernel, devicetree, linux-kernel,
linux-serial, Jason Li
On Tue, Oct 6, 2026 at 8:17 PM Fil Dunsky via B4 Relay
<devnull+filipp.dunsky.gmail.com@kernel.org> wrote:
> From: Fil Dunsky <filipp.dunsky@gmail.com>
>
> The Cortina Systems CS75xx ("Goldengate G2") are network processors
> with two Cortex-A9 cores, an SCU, GIC, the Cortex-A9 global and private
> timers and a PL310 L2 cache controller. The family includes at least
> the CS7522 and the CS7542; the CS7542 is used, among others, in the
> Securifi Almond+ router.
>
> Apart from the vendor this has little in common with the Cortina
> Systems Gemini (SL3516/CS3516) supported by mach-gemini: Gemini is a
> single ARMv4 FA526 with Faraday peripherals (FTINTC010, FTTMR010,
> FTGPIO010, a 16550 UART) built for ARCH_MULTI_V4, while the CS75xx is
> an ARMv7 MPCore whose UART, GPIO, interrupt controller and NAND
> controller are different blocks. It therefore gets its own directory,
> named after the Goldengate codename like in the vendor kernel. The
> Kconfig symbol, ARCH_CORTINA_ACCESS, covers the whole family and is
> named after Cortina Access, which last sold these chips and also makes
> the newer 64-bit parts.
>
> The generic DT machine is sufficient for the platform, so only the SMP
> bring-up needs code: the bootloader parks the secondary core in a WFE
> loop that polls a global software register, so boot it by writing the
> physical address of secondary_startup to the register named by the
> cpu-release-addr property and issuing SEV.
>
> The CPU is a Cortex-A9 r2p1, so select the errata workarounds that apply
> to that revision and can be enabled on a multiplatform kernel. The PL310
> is r3p2 and needs none of the PL310 workarounds.
>
> Signed-off-by: Fil Dunsky <filipp.dunsky@gmail.com>
Reviewed-by: Linus Walleij <linusw@kernel.org>
Yours,
Linus Walleij
^ permalink raw reply [flat|nested] 16+ messages in thread
* [PATCH RFC v2 05/10] ARM: debug: Add Cortina Systems CS75xx UART0 support
2026-10-06 18:17 [PATCH RFC v2 00/10] ARM: Add support for Cortina Systems CS75xx and Securifi Almond+ Fil Dunsky via B4 Relay
` (3 preceding siblings ...)
2026-10-06 18:17 ` [PATCH RFC v2 04/10] ARM: goldengate: Add support for the CS75xx SoC family Fil Dunsky via B4 Relay
@ 2026-10-06 18:17 ` Fil Dunsky via B4 Relay
2026-10-06 18:17 ` [PATCH RFC v2 06/10] dt-bindings: serial: Add Cortina Systems CS7542 UART Fil Dunsky via B4 Relay
` (4 subsequent siblings)
9 siblings, 0 replies; 16+ messages in thread
From: Fil Dunsky via B4 Relay @ 2026-10-06 18:17 UTC (permalink / raw)
To: Arnd Bergmann, Linus Walleij, Krzysztof Kozlowski
Cc: Rob Herring, Krzysztof Kozlowski, Conor Dooley,
Greg Kroah-Hartman, Jiri Slaby, Russell King, Alexandre Belloni,
Drew Fustini, Lorenzo Pieralisi, linux-arm-kernel, devicetree,
linux-kernel, linux-serial, Jason Li, Fil Dunsky
From: Fil Dunsky <filipp.dunsky@gmail.com>
Add low-level debug output through UART0 of the Cortina Systems CS75xx
SoCs. The UART is mapped at a fixed virtual address by the generic
debug_ll_io_init(), so no platform map_io is needed.
Signed-off-by: Fil Dunsky <filipp.dunsky@gmail.com>
Reviewed-by: Linus Walleij <linusw@kernel.org>
---
arch/arm/Kconfig.debug | 16 ++++++++++++++--
arch/arm/include/debug/cs75xx.S | 37 +++++++++++++++++++++++++++++++++++++
2 files changed, 51 insertions(+), 2 deletions(-)
diff --git a/arch/arm/Kconfig.debug b/arch/arm/Kconfig.debug
index abcf14f1027..c43fe288b98 100644
--- a/arch/arm/Kconfig.debug
+++ b/arch/arm/Kconfig.debug
@@ -308,6 +308,15 @@ choice
Say Y here if you want the debug print routines to direct
their output to the second serial port on these devices.
+ config DEBUG_CS75XX_UART0
+ bool "Kernel low-level debugging messages via CS75xx UART0"
+ depends on ARCH_CORTINA_ACCESS
+ help
+ Say Y here if you want the debug print routines to direct
+ their output to UART0 of Cortina Systems CS75xx SoCs. This
+ is the console port on the Securifi Almond+. The UART is
+ expected to be set up by the bootloader.
+
config DEBUG_DAVINCI_DA8XX_UART1
bool "Kernel low-level debugging on DaVinci DA8XX using UART1"
depends on ARCH_DAVINCI_DA8XX
@@ -1531,6 +1540,7 @@ config DEBUG_LL_INCLUDE
default "debug/vt8500.S" if DEBUG_VT8500_UART0
default "debug/zynq.S" if DEBUG_ZYNQ_UART0 || DEBUG_ZYNQ_UART1
default "debug/bcm63xx.S" if DEBUG_BCM63XX_UART || DEBUG_BCMBCA
+ default "debug/cs75xx.S" if DEBUG_CS75XX_UART0
default "debug/digicolor.S" if DEBUG_DIGICOLOR_UA0
default "debug/brcmstb.S" if DEBUG_BRCMSTB_UART
default "mach/debug-macro.S"
@@ -1632,6 +1642,7 @@ config DEBUG_UART_PHYS
default 0xe8008000 if DEBUG_R7S72100_SCIF2 || DEBUG_R7S9210_SCIF2
default 0xe8009000 if DEBUG_R7S9210_SCIF4
default 0xf0000000 if DEBUG_DIGICOLOR_UA0
+ default 0xf0070110 if DEBUG_CS75XX_UART0
default 0xf1012000 if DEBUG_MVEBU_UART0_ALTERNATE
default 0xf1012100 if DEBUG_MVEBU_UART1_ALTERNATE
default 0xf7fc9000 if DEBUG_BERLIN_UART
@@ -1670,7 +1681,7 @@ config DEBUG_UART_PHYS
DEBUG_RMOBILE_SCIFA4 || \
DEBUG_S3C64XX_UART || \
DEBUG_BCM63XX_UART || DEBUG_BCMBCA || DEBUG_ASM9260_UART || \
- DEBUG_DIGICOLOR_UA0 || \
+ DEBUG_CS75XX_UART0 || DEBUG_DIGICOLOR_UA0 || \
DEBUG_AT91_UART || DEBUG_STM32_UART || \
DEBUG_STIH41X_ASC2 || DEBUG_STIH41X_SBC_ASC1 || \
DEBUG_STIH418_SBC_ASC0
@@ -1708,6 +1719,7 @@ config DEBUG_UART_VIRT
default 0xf7000800 if DEBUG_S3C64XX_UART && DEBUG_S3C_UART2
default 0xf7000c00 if DEBUG_S3C64XX_UART && DEBUG_S3C_UART3
default 0xf7020000 if DEBUG_AT91_SAMA5D2_UART1
+ default 0xf7070110 if DEBUG_CS75XX_UART0
default 0xf7fc9000 if DEBUG_BERLIN_UART
default 0xf8007000 if DEBUG_HIP04_UART
default 0xf8009000 if DEBUG_VEXPRESS_UART0_CA9
@@ -1772,7 +1784,7 @@ config DEBUG_UART_VIRT
DEBUG_QCOM_UARTDM || \
DEBUG_S3C64XX_UART || \
DEBUG_BCM63XX_UART || DEBUG_BCMBCA || DEBUG_ASM9260_UART || \
- DEBUG_DIGICOLOR_UA0 || \
+ DEBUG_CS75XX_UART0 || DEBUG_DIGICOLOR_UA0 || \
DEBUG_AT91_UART || DEBUG_STM32_UART || \
DEBUG_STIH41X_ASC2 || DEBUG_STIH41X_SBC_ASC1 || \
DEBUG_STIH418_SBC_ASC0
diff --git a/arch/arm/include/debug/cs75xx.S b/arch/arm/include/debug/cs75xx.S
new file mode 100644
index 00000000000..967821add0c
--- /dev/null
+++ b/arch/arm/include/debug/cs75xx.S
@@ -0,0 +1,37 @@
+/* SPDX-License-Identifier: GPL-2.0-only */
+/*
+ * Debugging macro include header for the Cortina Systems CS75xx UART
+ */
+
+#define CS75XX_UART_TXDAT 0x10
+#define CS75XX_UART_INFO 0x18
+#define CS75XX_UART_INFO_TX_FULL (1 << 2)
+#define CS75XX_UART_INFO_TX_EMPTY (1 << 3)
+
+ .macro addruart, rp, rv, tmp
+ ldr \rp, =CONFIG_DEBUG_UART_PHYS
+ ldr \rv, =CONFIG_DEBUG_UART_VIRT
+ .endm
+
+ .macro senduart, rd, rx
+ ARM_BE8(rev \rd, \rd)
+ str \rd, [\rx, #CS75XX_UART_TXDAT]
+ ARM_BE8(rev \rd, \rd)
+ .endm
+
+ .macro waituartcts, rd, rx
+ .endm
+
+ .macro waituarttxrdy, rd, rx
+1001: ldr \rd, [\rx, #CS75XX_UART_INFO]
+ ARM_BE8(rev \rd, \rd)
+ tst \rd, #CS75XX_UART_INFO_TX_FULL
+ bne 1001b
+ .endm
+
+ .macro busyuart, rd, rx
+1002: ldr \rd, [\rx, #CS75XX_UART_INFO]
+ ARM_BE8(rev \rd, \rd)
+ tst \rd, #CS75XX_UART_INFO_TX_EMPTY
+ beq 1002b
+ .endm
--
2.53.0
^ permalink raw reply [flat|nested] 16+ messages in thread* [PATCH RFC v2 06/10] dt-bindings: serial: Add Cortina Systems CS7542 UART
2026-10-06 18:17 [PATCH RFC v2 00/10] ARM: Add support for Cortina Systems CS75xx and Securifi Almond+ Fil Dunsky via B4 Relay
` (4 preceding siblings ...)
2026-10-06 18:17 ` [PATCH RFC v2 05/10] ARM: debug: Add Cortina Systems CS75xx UART0 support Fil Dunsky via B4 Relay
@ 2026-10-06 18:17 ` Fil Dunsky via B4 Relay
2026-10-07 11:40 ` Linus Walleij
2026-10-06 18:17 ` [PATCH RFC v2 07/10] tty: serial: Add Cortina UART driver Fil Dunsky via B4 Relay
` (3 subsequent siblings)
9 siblings, 1 reply; 16+ messages in thread
From: Fil Dunsky via B4 Relay @ 2026-10-06 18:17 UTC (permalink / raw)
To: Arnd Bergmann, Linus Walleij, Krzysztof Kozlowski
Cc: Rob Herring, Krzysztof Kozlowski, Conor Dooley,
Greg Kroah-Hartman, Jiri Slaby, Russell King, Alexandre Belloni,
Drew Fustini, Lorenzo Pieralisi, linux-arm-kernel, devicetree,
linux-kernel, linux-serial, Jason Li, Fil Dunsky
From: Fil Dunsky <filipp.dunsky@gmail.com>
Add the binding for the UART found in the Cortina Systems CS75xx
(Goldengate G2) SoCs such as the CS7542.
Signed-off-by: Fil Dunsky <filipp.dunsky@gmail.com>
---
.../bindings/serial/cortina,cs7542-uart.yaml | 52 ++++++++++++++++++++++
1 file changed, 52 insertions(+)
diff --git a/Documentation/devicetree/bindings/serial/cortina,cs7542-uart.yaml b/Documentation/devicetree/bindings/serial/cortina,cs7542-uart.yaml
new file mode 100644
index 00000000000..2879a718802
--- /dev/null
+++ b/Documentation/devicetree/bindings/serial/cortina,cs7542-uart.yaml
@@ -0,0 +1,52 @@
+# SPDX-License-Identifier: (GPL-2.0-only OR BSD-2-Clause)
+%YAML 1.2
+---
+$id: http://devicetree.org/schemas/serial/cortina,cs7542-uart.yaml#
+$schema: http://devicetree.org/meta-schemas/core.yaml#
+
+title: Cortina UART
+
+maintainers:
+ - Fil Dunsky <filipp.dunsky@gmail.com>
+
+description:
+ The UART found in the Cortina Systems CS7542 (Goldengate G2) SoC. It has
+ transmit and receive FIFOs and a 24-bit baud rate divider running from the
+ peripheral (APB) clock. Other SoCs with the same block, the rest of the
+ CS75xx family and the Cortina Access parts, are to be added with their own
+ compatible string and "cortina,cs7542-uart" as the fallback.
+
+allOf:
+ - $ref: serial.yaml#
+
+properties:
+ compatible:
+ const: cortina,cs7542-uart
+
+ reg:
+ maxItems: 1
+
+ interrupts:
+ maxItems: 1
+
+ clocks:
+ maxItems: 1
+
+required:
+ - compatible
+ - reg
+ - interrupts
+ - clocks
+
+unevaluatedProperties: false
+
+examples:
+ - |
+ #include <dt-bindings/interrupt-controller/arm-gic.h>
+
+ serial@f0070110 {
+ compatible = "cortina,cs7542-uart";
+ reg = <0xf0070110 0x30>;
+ interrupts = <GIC_SPI 6 IRQ_TYPE_LEVEL_HIGH>;
+ clocks = <&apb_clk>;
+ };
--
2.53.0
^ permalink raw reply [flat|nested] 16+ messages in thread* Re: [PATCH RFC v2 06/10] dt-bindings: serial: Add Cortina Systems CS7542 UART
2026-10-06 18:17 ` [PATCH RFC v2 06/10] dt-bindings: serial: Add Cortina Systems CS7542 UART Fil Dunsky via B4 Relay
@ 2026-10-07 11:40 ` Linus Walleij
0 siblings, 0 replies; 16+ messages in thread
From: Linus Walleij @ 2026-10-07 11:40 UTC (permalink / raw)
To: filipp.dunsky
Cc: Arnd Bergmann, Krzysztof Kozlowski, Rob Herring,
Krzysztof Kozlowski, Conor Dooley, Greg Kroah-Hartman,
Jiri Slaby, Russell King, Alexandre Belloni, Drew Fustini,
Lorenzo Pieralisi, linux-arm-kernel, devicetree, linux-kernel,
linux-serial, Jason Li
On Tue, Oct 6, 2026 at 8:17 PM Fil Dunsky via B4 Relay
<devnull+filipp.dunsky.gmail.com@kernel.org> wrote:
> From: Fil Dunsky <filipp.dunsky@gmail.com>
>
> Add the binding for the UART found in the Cortina Systems CS75xx
> (Goldengate G2) SoCs such as the CS7542.
>
> Signed-off-by: Fil Dunsky <filipp.dunsky@gmail.com>
Reviewed-by: Linus Walleij <linusw@kernel.org>
Yours,
Linus Walleij
^ permalink raw reply [flat|nested] 16+ messages in thread
* [PATCH RFC v2 07/10] tty: serial: Add Cortina UART driver
2026-10-06 18:17 [PATCH RFC v2 00/10] ARM: Add support for Cortina Systems CS75xx and Securifi Almond+ Fil Dunsky via B4 Relay
` (5 preceding siblings ...)
2026-10-06 18:17 ` [PATCH RFC v2 06/10] dt-bindings: serial: Add Cortina Systems CS7542 UART Fil Dunsky via B4 Relay
@ 2026-10-06 18:17 ` Fil Dunsky via B4 Relay
2026-10-06 18:17 ` [PATCH RFC v2 08/10] ARM: dts: cortina: Add CS7542 SoC and Securifi Almond+ board Fil Dunsky via B4 Relay
` (2 subsequent siblings)
9 siblings, 0 replies; 16+ messages in thread
From: Fil Dunsky via B4 Relay @ 2026-10-06 18:17 UTC (permalink / raw)
To: Arnd Bergmann, Linus Walleij, Krzysztof Kozlowski
Cc: Rob Herring, Krzysztof Kozlowski, Conor Dooley,
Greg Kroah-Hartman, Jiri Slaby, Russell King, Alexandre Belloni,
Drew Fustini, Lorenzo Pieralisi, linux-arm-kernel, devicetree,
linux-kernel, linux-serial, Jason Li, Fil Dunsky
From: Fil Dunsky <filipp.dunsky@gmail.com>
Add a driver for the UART found in Cortina SoCs, starting with the
Cortina Systems CS75xx (Goldengate G2) family such as the CS7542. The
block has transmit and receive FIFOs with full/empty status, a 24-bit
baud rate divider clocked from the peripheral (APB) clock, a receive
sampling point register and one interrupt line per port with per-cause
enable and write-one-to-clear status registers.
The same block, with an additional flow control register and a few more
interrupt causes, is used in the Cortina Access CAxxxx SoCs, which were
briefly supported by commit b61c8bf4694b ("tty: serial: Add UART driver
for Cortina-Access platform") before it was removed again. The driver
is therefore named after the vendor rather than one SoC, so that those
parts can be added with their own compatible strings.
The driver is a rewrite of the vendor driver shipped with the Linux
2.6.36 and 4.9 based vendor kernels, using the current serial core API
(uart_port_tx(), port lock helpers, deferred sysrq handling) and devm
resource management. It supports the system console and earlycon.
Hardware flow control is not supported.
The ports are named ttyCS so that the driver can coexist with the 8250
driver in multiplatform kernels, where the 8250 core registers ttyS0
and up even without any 8250 hardware, and PORT_GENERIC is used rather
than allocating a new port type.
Signed-off-by: Fil Dunsky <filipp.dunsky@gmail.com>
---
drivers/tty/serial/Kconfig | 24 ++
drivers/tty/serial/Makefile | 1 +
drivers/tty/serial/cortina-uart.c | 583 ++++++++++++++++++++++++++++++++++++++
3 files changed, 608 insertions(+)
diff --git a/drivers/tty/serial/Kconfig b/drivers/tty/serial/Kconfig
index bf680d22199..92443a0c7a7 100644
--- a/drivers/tty/serial/Kconfig
+++ b/drivers/tty/serial/Kconfig
@@ -1359,6 +1359,30 @@ config SERIAL_CONEXANT_DIGICOLOR_CONSOLE
If you have enabled the USART serial port on Conexant Digicolor
SoCs, you can make it the console by answering Y to this option.
+config SERIAL_CORTINA
+ tristate "Cortina UART support"
+ depends on ARCH_CORTINA_ACCESS || COMPILE_TEST
+ depends on OF
+ select SERIAL_CORE
+ help
+ Support for the on-chip UART of Cortina Systems CS75xx
+ (Goldengate G2) SoCs such as the CS7542. Cortina Access SoCs use
+ the same UART. The ports are named ttyCS0 to ttyCS3.
+
+ To compile this driver as a module, choose M here: the module
+ will be called cortina-uart.
+
+config SERIAL_CORTINA_CONSOLE
+ bool "Console on Cortina UART"
+ depends on SERIAL_CORTINA=y
+ select SERIAL_CORE_CONSOLE
+ select SERIAL_EARLYCON
+ help
+ Say Y here to use a Cortina UART as the system
+ console. This also enables the early console, which can be
+ selected with "earlycon" on the kernel command line when the
+ device tree chosen node has a stdout-path pointing at the UART.
+
config SERIAL_ST_ASC
tristate "ST ASC serial port support"
select SERIAL_CORE
diff --git a/drivers/tty/serial/Makefile b/drivers/tty/serial/Makefile
index bba7b21a4a1..7c7d749a2ce 100644
--- a/drivers/tty/serial/Makefile
+++ b/drivers/tty/serial/Makefile
@@ -36,6 +36,7 @@ obj-$(CONFIG_SERIAL_BCM63XX) += bcm63xx_uart.o
obj-$(CONFIG_SERIAL_CLPS711X) += clps711x.o
obj-$(CONFIG_SERIAL_CPM) += cpm_uart.o
obj-$(CONFIG_SERIAL_CONEXANT_DIGICOLOR) += digicolor-usart.o
+obj-$(CONFIG_SERIAL_CORTINA) += cortina-uart.o
obj-$(CONFIG_SERIAL_DZ) += dz.o
obj-$(CONFIG_SERIAL_FSL_LINFLEXUART) += fsl_linflexuart.o
obj-$(CONFIG_SERIAL_FSL_LPUART) += fsl_lpuart.o
diff --git a/drivers/tty/serial/cortina-uart.c b/drivers/tty/serial/cortina-uart.c
new file mode 100644
index 00000000000..1952629de05
--- /dev/null
+++ b/drivers/tty/serial/cortina-uart.c
@@ -0,0 +1,583 @@
+// SPDX-License-Identifier: GPL-2.0
+/*
+ * UART driver for Cortina SoCs (Cortina Systems CS75xx "Goldengate G2")
+ *
+ * Copyright (C) 2026 Fil Dunsky <filipp.dunsky@gmail.com>
+ *
+ * Based on serial_cortina.c from the Cortina Systems vendor kernel.
+ */
+
+#include <linux/bitfield.h>
+#include <linux/bits.h>
+#include <linux/clk.h>
+#include <linux/console.h>
+#include <linux/io.h>
+#include <linux/iopoll.h>
+#include <linux/module.h>
+#include <linux/mutex.h>
+#include <linux/of.h>
+#include <linux/platform_device.h>
+#include <linux/serial.h>
+#include <linux/serial_core.h>
+#include <linux/tty.h>
+#include <linux/tty_flip.h>
+
+#define CORTINA_UART_CFG 0x00
+#define CORTINA_UART_CFG_BAUD GENMASK(31, 8)
+#define CORTINA_UART_CFG_EN BIT(7)
+#define CORTINA_UART_CFG_RX_EN BIT(6)
+#define CORTINA_UART_CFG_TX_EN BIT(5)
+#define CORTINA_UART_CFG_PARITY_EN BIT(4)
+#define CORTINA_UART_CFG_PARITY_EVEN BIT(3)
+#define CORTINA_UART_CFG_STOP_2BIT BIT(2)
+#define CORTINA_UART_CFG_CHAR GENMASK(1, 0)
+#define CORTINA_UART_RX_SAMPLE 0x08
+#define CORTINA_UART_TXDAT 0x10
+#define CORTINA_UART_RXDAT 0x14
+#define CORTINA_UART_RXDAT_VALID BIT(8)
+#define CORTINA_UART_RXDAT_DATA GENMASK(7, 0)
+#define CORTINA_UART_INFO 0x18
+#define CORTINA_UART_INFO_TX_EMPTY BIT(3)
+#define CORTINA_UART_INFO_TX_FULL BIT(2)
+#define CORTINA_UART_INFO_RX_EMPTY BIT(1)
+#define CORTINA_UART_IE 0x1c
+#define CORTINA_UART_INT 0x24
+
+/* Interrupt bits, shared by the IE and INT registers */
+#define CORTINA_UART_IRQ_RX_NONEMPTY BIT(6)
+#define CORTINA_UART_IRQ_TX_EMPTY BIT(5)
+#define CORTINA_UART_IRQ_RX_OVERRUN BIT(3)
+#define CORTINA_UART_IRQ_RX_PARITY BIT(2)
+#define CORTINA_UART_IRQ_RX_STOP BIT(1)
+#define CORTINA_UART_IRQ_ALL GENMASK(6, 0)
+
+#define CORTINA_UART_DIV_MIN 16
+#define CORTINA_UART_DIV_MAX FIELD_MAX(CORTINA_UART_CFG_BAUD)
+
+#define CORTINA_UART_NR_PORTS 4
+#define CORTINA_UART_FIFO_SIZE 16
+#define CORTINA_UART_POLL_TIMEOUT_US 10000
+#define CORTINA_UART_RX_BUDGET 256
+
+struct cortina_uart_port {
+ struct uart_port port;
+ struct clk *clk;
+};
+
+static struct cortina_uart_port *cortina_uart_ports[CORTINA_UART_NR_PORTS];
+static DEFINE_MUTEX(cortina_uart_ports_lock);
+
+static void cortina_uart_ie_update(struct uart_port *port, u32 clear, u32 set)
+{
+ u32 ie = readl(port->membase + CORTINA_UART_IE);
+
+ writel((ie & ~clear) | set, port->membase + CORTINA_UART_IE);
+}
+
+static void __maybe_unused cortina_uart_putchar(struct uart_port *port,
+ unsigned char ch)
+{
+ u32 info;
+
+ readl_poll_timeout_atomic(port->membase + CORTINA_UART_INFO, info,
+ !(info & CORTINA_UART_INFO_TX_FULL), 1,
+ CORTINA_UART_POLL_TIMEOUT_US);
+ writel(ch, port->membase + CORTINA_UART_TXDAT);
+}
+
+static unsigned int cortina_uart_tx_empty(struct uart_port *port)
+{
+ u32 info = readl(port->membase + CORTINA_UART_INFO);
+
+ return (info & CORTINA_UART_INFO_TX_EMPTY) ? TIOCSER_TEMT : 0;
+}
+
+/*
+ * There are no modem control lines, but serial_core calls ->set_mctrl()
+ * unconditionally.
+ */
+static void cortina_uart_set_mctrl(struct uart_port *port, unsigned int mctrl)
+{
+}
+
+static unsigned int cortina_uart_get_mctrl(struct uart_port *port)
+{
+ return TIOCM_CTS | TIOCM_DSR | TIOCM_CAR;
+}
+
+static void cortina_uart_stop_tx(struct uart_port *port)
+{
+ cortina_uart_ie_update(port, CORTINA_UART_IRQ_TX_EMPTY, 0);
+}
+
+static void cortina_uart_tx_chars(struct uart_port *port)
+{
+ u8 ch;
+
+ uart_port_tx(port, ch,
+ !(readl(port->membase + CORTINA_UART_INFO) &
+ CORTINA_UART_INFO_TX_FULL),
+ writel(ch, port->membase + CORTINA_UART_TXDAT));
+}
+
+static void cortina_uart_start_tx(struct uart_port *port)
+{
+ cortina_uart_ie_update(port, 0, CORTINA_UART_IRQ_TX_EMPTY);
+
+ /*
+ * The TX empty interrupt only fires when the FIFO drains, so prime
+ * the FIFO here.
+ */
+ cortina_uart_tx_chars(port);
+}
+
+static void cortina_uart_stop_rx(struct uart_port *port)
+{
+ cortina_uart_ie_update(port, CORTINA_UART_IRQ_RX_NONEMPTY, 0);
+}
+
+static void cortina_uart_rx_chars(struct uart_port *port, u32 status)
+{
+ struct tty_port *tport = &port->state->port;
+ unsigned int budget = CORTINA_UART_RX_BUDGET;
+ u32 data;
+
+ if (status & CORTINA_UART_IRQ_RX_OVERRUN) {
+ port->icount.overrun++;
+ tty_insert_flip_char(tport, 0, TTY_OVERRUN);
+ }
+ if (status & CORTINA_UART_IRQ_RX_PARITY)
+ port->icount.parity++;
+ if (status & CORTINA_UART_IRQ_RX_STOP)
+ port->icount.frame++;
+
+ while (budget-- && !(readl(port->membase + CORTINA_UART_INFO) &
+ CORTINA_UART_INFO_RX_EMPTY)) {
+ u8 ch;
+
+ data = readl(port->membase + CORTINA_UART_RXDAT);
+ if (!(data & CORTINA_UART_RXDAT_VALID))
+ continue;
+
+ port->icount.rx++;
+ ch = FIELD_GET(CORTINA_UART_RXDAT_DATA, data);
+
+ if (port->ignore_status_mask & CORTINA_UART_RXDAT_VALID)
+ continue;
+ if (uart_prepare_sysrq_char(port, ch))
+ continue;
+
+ tty_insert_flip_char(tport, ch, TTY_NORMAL);
+ }
+
+ tty_flip_buffer_push(tport);
+}
+
+static irqreturn_t cortina_uart_isr(int irq, void *dev_id)
+{
+ struct uart_port *port = dev_id;
+ u32 status;
+
+ uart_port_lock(port);
+
+ status = readl(port->membase + CORTINA_UART_INT);
+ writel(status, port->membase + CORTINA_UART_INT);
+
+ cortina_uart_rx_chars(port, status);
+ cortina_uart_tx_chars(port);
+
+ uart_unlock_and_check_sysrq(port);
+
+ return IRQ_HANDLED;
+}
+
+static void cortina_uart_rx_flush(struct uart_port *port)
+{
+ unsigned int n = CORTINA_UART_RX_BUDGET;
+
+ while (n-- && !(readl(port->membase + CORTINA_UART_INFO) &
+ CORTINA_UART_INFO_RX_EMPTY))
+ readl(port->membase + CORTINA_UART_RXDAT);
+}
+
+static int cortina_uart_startup(struct uart_port *port)
+{
+ unsigned long flags;
+ u32 cfg;
+ int ret;
+
+ uart_port_lock_irqsave(port, &flags);
+ writel(0, port->membase + CORTINA_UART_IE);
+ writel(CORTINA_UART_IRQ_ALL, port->membase + CORTINA_UART_INT);
+ uart_port_unlock_irqrestore(port, flags);
+
+ ret = request_irq(port->irq, cortina_uart_isr, 0, dev_name(port->dev),
+ port);
+ if (ret)
+ return ret;
+
+ uart_port_lock_irqsave(port, &flags);
+
+ cfg = readl(port->membase + CORTINA_UART_CFG);
+ cfg |= CORTINA_UART_CFG_EN | CORTINA_UART_CFG_RX_EN | CORTINA_UART_CFG_TX_EN;
+ writel(cfg, port->membase + CORTINA_UART_CFG);
+
+ /* Drop whatever was received while the port was closed */
+ cortina_uart_rx_flush(port);
+ writel(CORTINA_UART_IRQ_ALL, port->membase + CORTINA_UART_INT);
+
+ writel(CORTINA_UART_IRQ_RX_NONEMPTY, port->membase + CORTINA_UART_IE);
+
+ uart_port_unlock_irqrestore(port, flags);
+
+ return 0;
+}
+
+static void cortina_uart_shutdown(struct uart_port *port)
+{
+ unsigned long flags;
+
+ uart_port_lock_irqsave(port, &flags);
+ writel(0, port->membase + CORTINA_UART_IE);
+ /* The console only needs the transmitter */
+ writel(readl(port->membase + CORTINA_UART_CFG) & ~CORTINA_UART_CFG_RX_EN,
+ port->membase + CORTINA_UART_CFG);
+ uart_port_unlock_irqrestore(port, flags);
+
+ free_irq(port->irq, port);
+}
+
+static void cortina_uart_set_termios(struct uart_port *port,
+ struct ktermios *termios,
+ const struct ktermios *old)
+{
+ unsigned int baud, div;
+ unsigned long flags;
+ u32 cfg;
+
+ /* No hardware flow control or mark/space parity support */
+ termios->c_cflag &= ~(CRTSCTS | CMSPAR);
+
+ baud = uart_get_baud_rate(port, termios, old,
+ DIV_ROUND_UP(port->uartclk, CORTINA_UART_DIV_MAX),
+ port->uartclk / CORTINA_UART_DIV_MIN);
+ div = DIV_ROUND_CLOSEST(port->uartclk, baud);
+
+ cfg = FIELD_PREP(CORTINA_UART_CFG_BAUD, div) | CORTINA_UART_CFG_EN |
+ CORTINA_UART_CFG_RX_EN | CORTINA_UART_CFG_TX_EN;
+ cfg |= FIELD_PREP(CORTINA_UART_CFG_CHAR,
+ tty_get_char_size(termios->c_cflag) - 5);
+ if (termios->c_cflag & CSTOPB)
+ cfg |= CORTINA_UART_CFG_STOP_2BIT;
+ if (termios->c_cflag & PARENB) {
+ cfg |= CORTINA_UART_CFG_PARITY_EN;
+ if (!(termios->c_cflag & PARODD))
+ cfg |= CORTINA_UART_CFG_PARITY_EVEN;
+ }
+
+ uart_port_lock_irqsave(port, &flags);
+
+ port->ignore_status_mask = 0;
+ if (!(termios->c_cflag & CREAD))
+ port->ignore_status_mask |= CORTINA_UART_RXDAT_VALID;
+
+ uart_update_timeout(port, termios->c_cflag, baud);
+
+ writel(cfg, port->membase + CORTINA_UART_CFG);
+ /* Sample the received bits in the middle of the bit time */
+ writel(div / 2, port->membase + CORTINA_UART_RX_SAMPLE);
+
+ uart_port_unlock_irqrestore(port, flags);
+
+ if (tty_termios_baud_rate(termios))
+ tty_termios_encode_baud_rate(termios, baud, baud);
+}
+
+static const char *cortina_uart_type(struct uart_port *port)
+{
+ return port->type == PORT_GENERIC ? "CORTINA" : NULL;
+}
+
+static void cortina_uart_config_port(struct uart_port *port, int flags)
+{
+ if (flags & UART_CONFIG_TYPE)
+ port->type = PORT_GENERIC;
+}
+
+static int cortina_uart_verify_port(struct uart_port *port,
+ struct serial_struct *serinfo)
+{
+ if (serinfo->type != PORT_UNKNOWN && serinfo->type != PORT_GENERIC)
+ return -EINVAL;
+ if (serinfo->irq != port->irq)
+ return -EINVAL;
+
+ return 0;
+}
+
+#ifdef CONFIG_CONSOLE_POLL
+static int cortina_uart_poll_get_char(struct uart_port *port)
+{
+ u32 data;
+
+ if (readl(port->membase + CORTINA_UART_INFO) & CORTINA_UART_INFO_RX_EMPTY)
+ return NO_POLL_CHAR;
+
+ data = readl(port->membase + CORTINA_UART_RXDAT);
+ if (!(data & CORTINA_UART_RXDAT_VALID))
+ return NO_POLL_CHAR;
+
+ return FIELD_GET(CORTINA_UART_RXDAT_DATA, data);
+}
+
+static void cortina_uart_poll_put_char(struct uart_port *port, unsigned char c)
+{
+ cortina_uart_putchar(port, c);
+}
+#endif
+
+static const struct uart_ops cortina_uart_ops = {
+ .tx_empty = cortina_uart_tx_empty,
+ .set_mctrl = cortina_uart_set_mctrl,
+ .get_mctrl = cortina_uart_get_mctrl,
+ .stop_tx = cortina_uart_stop_tx,
+ .start_tx = cortina_uart_start_tx,
+ .stop_rx = cortina_uart_stop_rx,
+ .startup = cortina_uart_startup,
+ .shutdown = cortina_uart_shutdown,
+ .set_termios = cortina_uart_set_termios,
+ .type = cortina_uart_type,
+ .config_port = cortina_uart_config_port,
+ .verify_port = cortina_uart_verify_port,
+#ifdef CONFIG_CONSOLE_POLL
+ .poll_get_char = cortina_uart_poll_get_char,
+ .poll_put_char = cortina_uart_poll_put_char,
+#endif
+};
+
+#ifdef CONFIG_SERIAL_CORTINA_CONSOLE
+static void cortina_uart_console_write(struct console *co, const char *s,
+ unsigned int count)
+{
+ struct cortina_uart_port *up = cortina_uart_ports[co->index];
+ struct uart_port *port;
+ unsigned long flags;
+ bool locked = true;
+ u64 timeout_us;
+ u32 ie, info;
+
+ if (!up)
+ return;
+ port = &up->port;
+
+ if (oops_in_progress)
+ locked = uart_port_trylock_irqsave(port, &flags);
+ else
+ uart_port_lock_irqsave(port, &flags);
+
+ ie = readl(port->membase + CORTINA_UART_IE);
+ writel(ie & ~CORTINA_UART_IRQ_TX_EMPTY, port->membase + CORTINA_UART_IE);
+
+ uart_console_write(port, s, count, cortina_uart_putchar);
+
+ /* Wait for the whole FIFO to drain, which is slow at low rates */
+ timeout_us = max_t(u64, CORTINA_UART_POLL_TIMEOUT_US,
+ div_u64((u64)port->frame_time * (port->fifosize + 1),
+ NSEC_PER_USEC));
+ readl_poll_timeout_atomic(port->membase + CORTINA_UART_INFO, info,
+ info & CORTINA_UART_INFO_TX_EMPTY, 1, timeout_us);
+ writel(ie, port->membase + CORTINA_UART_IE);
+
+ if (locked)
+ uart_port_unlock_irqrestore(port, flags);
+}
+
+static int __init cortina_uart_console_setup(struct console *co, char *options)
+{
+ struct cortina_uart_port *up;
+ int baud = 115200;
+ int bits = 8;
+ int parity = 'n';
+ int flow = 'n';
+
+ if (co->index < 0 || co->index >= CORTINA_UART_NR_PORTS)
+ return -ENODEV;
+
+ up = cortina_uart_ports[co->index];
+ if (!up)
+ return -ENODEV;
+
+ if (options)
+ uart_parse_options(options, &baud, &parity, &bits, &flow);
+
+ return uart_set_options(&up->port, co, baud, parity, bits, flow);
+}
+
+static struct uart_driver cortina_uart_driver;
+
+static struct console cortina_uart_console = {
+ .name = "ttyCS",
+ .write = cortina_uart_console_write,
+ .device = uart_console_device,
+ .setup = cortina_uart_console_setup,
+ .flags = CON_PRINTBUFFER,
+ .index = -1,
+ .data = &cortina_uart_driver,
+};
+
+static void cortina_uart_earlycon_write(struct console *co, const char *s,
+ unsigned int count)
+{
+ struct earlycon_device *dev = co->data;
+
+ uart_console_write(&dev->port, s, count, cortina_uart_putchar);
+}
+
+static int __init cortina_uart_earlycon_setup(struct earlycon_device *dev,
+ const char *options)
+{
+ if (!dev->port.membase)
+ return -ENODEV;
+
+ dev->con->write = cortina_uart_earlycon_write;
+
+ return 0;
+}
+
+OF_EARLYCON_DECLARE(cortina, "cortina,cs7542-uart", cortina_uart_earlycon_setup);
+
+#define CORTINA_UART_CONSOLE (&cortina_uart_console)
+#else
+#define CORTINA_UART_CONSOLE NULL
+#endif
+
+static struct uart_driver cortina_uart_driver = {
+ .owner = THIS_MODULE,
+ .driver_name = "cortina-uart",
+ .dev_name = "ttyCS",
+ .nr = CORTINA_UART_NR_PORTS,
+ .cons = CORTINA_UART_CONSOLE,
+};
+
+static int cortina_uart_probe(struct platform_device *pdev)
+{
+ struct device *dev = &pdev->dev;
+ struct cortina_uart_port *up;
+ struct uart_port *port;
+ struct resource *res;
+ int id, ret;
+
+ up = devm_kzalloc(dev, sizeof(*up), GFP_KERNEL);
+ if (!up)
+ return -ENOMEM;
+
+ port = &up->port;
+
+ port->membase = devm_platform_get_and_ioremap_resource(pdev, 0, &res);
+ if (IS_ERR(port->membase))
+ return PTR_ERR(port->membase);
+
+ port->irq = platform_get_irq(pdev, 0);
+ if (port->irq < 0)
+ return port->irq;
+
+ up->clk = devm_clk_get_enabled(dev, NULL);
+ if (IS_ERR(up->clk))
+ return dev_err_probe(dev, PTR_ERR(up->clk), "failed to get clock\n");
+
+ port->uartclk = clk_get_rate(up->clk);
+ if (port->uartclk < CORTINA_UART_DIV_MIN * 9600)
+ return dev_err_probe(dev, -EINVAL, "clock rate %u Hz is too low\n",
+ port->uartclk);
+
+ port->dev = dev;
+ port->mapbase = res->start;
+ port->mapsize = resource_size(res);
+ port->iotype = UPIO_MEM32;
+ port->ops = &cortina_uart_ops;
+ port->fifosize = CORTINA_UART_FIFO_SIZE;
+ port->flags = UPF_BOOT_AUTOCONF;
+ port->has_sysrq = IS_ENABLED(CONFIG_SERIAL_CORTINA_CONSOLE);
+
+ platform_set_drvdata(pdev, up);
+
+ mutex_lock(&cortina_uart_ports_lock);
+
+ id = of_alias_get_id(dev->of_node, "serial");
+ if (id < 0) {
+ for (id = 0; id < CORTINA_UART_NR_PORTS; id++)
+ if (!cortina_uart_ports[id])
+ break;
+ }
+ if (id >= CORTINA_UART_NR_PORTS) {
+ ret = dev_err_probe(dev, -EINVAL, "invalid port index %d\n", id);
+ goto out_unlock;
+ }
+ if (cortina_uart_ports[id]) {
+ ret = dev_err_probe(dev, -EBUSY, "port %d already in use\n", id);
+ goto out_unlock;
+ }
+
+ port->line = id;
+ cortina_uart_ports[id] = up;
+
+ ret = uart_add_one_port(&cortina_uart_driver, port);
+ if (ret)
+ cortina_uart_ports[id] = NULL;
+
+out_unlock:
+ mutex_unlock(&cortina_uart_ports_lock);
+ return ret;
+}
+
+static void cortina_uart_remove(struct platform_device *pdev)
+{
+ struct cortina_uart_port *up = platform_get_drvdata(pdev);
+
+ uart_remove_one_port(&cortina_uart_driver, &up->port);
+
+ mutex_lock(&cortina_uart_ports_lock);
+ cortina_uart_ports[up->port.line] = NULL;
+ mutex_unlock(&cortina_uart_ports_lock);
+}
+
+static const struct of_device_id cortina_uart_of_match[] = {
+ { .compatible = "cortina,cs7542-uart" },
+ { }
+};
+MODULE_DEVICE_TABLE(of, cortina_uart_of_match);
+
+static struct platform_driver cortina_uart_platform_driver = {
+ .probe = cortina_uart_probe,
+ .remove = cortina_uart_remove,
+ .driver = {
+ .name = "cortina-uart",
+ .of_match_table = cortina_uart_of_match,
+ },
+};
+
+static int __init cortina_uart_init(void)
+{
+ int ret;
+
+ ret = uart_register_driver(&cortina_uart_driver);
+ if (ret)
+ return ret;
+
+ ret = platform_driver_register(&cortina_uart_platform_driver);
+ if (ret)
+ uart_unregister_driver(&cortina_uart_driver);
+
+ return ret;
+}
+module_init(cortina_uart_init);
+
+static void __exit cortina_uart_exit(void)
+{
+ platform_driver_unregister(&cortina_uart_platform_driver);
+ uart_unregister_driver(&cortina_uart_driver);
+}
+module_exit(cortina_uart_exit);
+
+MODULE_DESCRIPTION("Cortina UART driver");
+MODULE_LICENSE("GPL");
--
2.53.0
^ permalink raw reply [flat|nested] 16+ messages in thread* [PATCH RFC v2 08/10] ARM: dts: cortina: Add CS7542 SoC and Securifi Almond+ board
2026-10-06 18:17 [PATCH RFC v2 00/10] ARM: Add support for Cortina Systems CS75xx and Securifi Almond+ Fil Dunsky via B4 Relay
` (6 preceding siblings ...)
2026-10-06 18:17 ` [PATCH RFC v2 07/10] tty: serial: Add Cortina UART driver Fil Dunsky via B4 Relay
@ 2026-10-06 18:17 ` Fil Dunsky via B4 Relay
2026-10-07 11:41 ` Linus Walleij
2026-10-06 18:17 ` [PATCH RFC v2 09/10] ARM: multi_v7_defconfig: Enable Cortina Systems CS75xx support Fil Dunsky via B4 Relay
2026-10-06 18:17 ` [PATCH RFC v2 10/10] MAINTAINERS: Add entry for Cortina Systems CS75xx Fil Dunsky via B4 Relay
9 siblings, 1 reply; 16+ messages in thread
From: Fil Dunsky via B4 Relay @ 2026-10-06 18:17 UTC (permalink / raw)
To: Arnd Bergmann, Linus Walleij, Krzysztof Kozlowski
Cc: Rob Herring, Krzysztof Kozlowski, Conor Dooley,
Greg Kroah-Hartman, Jiri Slaby, Russell King, Alexandre Belloni,
Drew Fustini, Lorenzo Pieralisi, linux-arm-kernel, devicetree,
linux-kernel, linux-serial, Jason Li, Fil Dunsky
From: Fil Dunsky <filipp.dunsky@gmail.com>
Add a minimal description of the Cortina Systems CS7542 SoC: the two
Cortex-A9 cores, SCU, GIC, global timer, private timer and watchdog,
PL310 L2 cache controller and the four on-chip UARTs.
The peripheral clock (APB) runs at 100, 150 or 170 MHz depending on the
boot strap pins. Until there is a driver for the global control block
that reads the straps, model it as a fixed clock whose rate is provided
by the board.
The Securifi Almond+ is a touchscreen Wi-Fi router with 512 MiB of DDR3,
512 MiB of NAND flash, a QCA8337 switch, QCA9880 and AR9580 Wi-Fi and an
ASM1042 USB 3.0 controller behind the SoC PCIe root ports. For now,
describe the memory, the console UART and a ramoops region, and reserve
the top 64 MiB of RAM which the vendor firmware hands to the packet
engine queue manager.
Signed-off-by: Fil Dunsky <filipp.dunsky@gmail.com>
---
arch/arm/boot/dts/Makefile | 1 +
arch/arm/boot/dts/cortina/Makefile | 3 +
.../dts/cortina/cs7542-securifi-almondplus.dts | 55 +++++++++
arch/arm/boot/dts/cortina/cs7542.dtsi | 127 +++++++++++++++++++++
4 files changed, 186 insertions(+)
diff --git a/arch/arm/boot/dts/Makefile b/arch/arm/boot/dts/Makefile
index 28fba538d55..cf4433001dd 100644
--- a/arch/arm/boot/dts/Makefile
+++ b/arch/arm/boot/dts/Makefile
@@ -12,6 +12,7 @@ subdir-y += broadcom
subdir-y += calxeda
subdir-y += cirrus
subdir-y += cnxt
+subdir-y += cortina
subdir-y += gemini
subdir-y += hisilicon
subdir-y += hpe
diff --git a/arch/arm/boot/dts/cortina/Makefile b/arch/arm/boot/dts/cortina/Makefile
new file mode 100644
index 00000000000..93be6c9aedf
--- /dev/null
+++ b/arch/arm/boot/dts/cortina/Makefile
@@ -0,0 +1,3 @@
+# SPDX-License-Identifier: GPL-2.0
+dtb-$(CONFIG_ARCH_CORTINA_ACCESS) += \
+ cs7542-securifi-almondplus.dtb
diff --git a/arch/arm/boot/dts/cortina/cs7542-securifi-almondplus.dts b/arch/arm/boot/dts/cortina/cs7542-securifi-almondplus.dts
new file mode 100644
index 00000000000..e2988c68765
--- /dev/null
+++ b/arch/arm/boot/dts/cortina/cs7542-securifi-almondplus.dts
@@ -0,0 +1,55 @@
+// SPDX-License-Identifier: (GPL-2.0-or-later OR MIT)
+/*
+ * Device Tree Source for the Securifi Almond+ router
+ */
+
+/dts-v1/;
+
+#include "cs7542.dtsi"
+
+/ {
+ model = "Securifi Almond+";
+ compatible = "securifi,almondplus", "cortina,cs7542";
+
+ aliases {
+ serial0 = &uart0;
+ };
+
+ chosen {
+ stdout-path = "serial0:115200n8";
+ };
+
+ memory@0 {
+ device_type = "memory";
+ reg = <0x00000000 0x20000000>;
+ };
+
+ reserved-memory {
+ ranges;
+ #address-cells = <1>;
+ #size-cells = <1>;
+
+ ramoops@1bf00000 {
+ compatible = "ramoops";
+ reg = <0x1bf00000 0x100000>;
+ record-size = <0x20000>;
+ console-size = <0x80000>;
+ ecc-size = <16>;
+ no-map;
+ };
+
+ /* Reserved for the packet engine queue manager */
+ qm-buffer@1c000000 {
+ reg = <0x1c000000 0x4000000>;
+ no-map;
+ };
+ };
+};
+
+&apb_clk {
+ clock-frequency = <150000000>;
+};
+
+&uart0 {
+ status = "okay";
+};
diff --git a/arch/arm/boot/dts/cortina/cs7542.dtsi b/arch/arm/boot/dts/cortina/cs7542.dtsi
new file mode 100644
index 00000000000..29b0b7da866
--- /dev/null
+++ b/arch/arm/boot/dts/cortina/cs7542.dtsi
@@ -0,0 +1,127 @@
+// SPDX-License-Identifier: (GPL-2.0-or-later OR MIT)
+/*
+ * Device Tree Source for the Cortina Systems CS7542 SoC
+ */
+
+#include <dt-bindings/interrupt-controller/arm-gic.h>
+
+/ {
+ #address-cells = <1>;
+ #size-cells = <1>;
+ interrupt-parent = <&gic>;
+
+ /* Rate is selected by the boot strap pins, set by the board */
+ apb_clk: clock-apb {
+ compatible = "fixed-clock";
+ #clock-cells = <0>;
+ clock-output-names = "apb";
+ };
+
+ cpus {
+ #address-cells = <1>;
+ #size-cells = <0>;
+
+ cpu@0 {
+ device_type = "cpu";
+ compatible = "arm,cortex-a9";
+ reg = <0>;
+ next-level-cache = <&l2>;
+ };
+
+ cpu@1 {
+ device_type = "cpu";
+ compatible = "arm,cortex-a9";
+ reg = <1>;
+ enable-method = "cortina,cs7542-smp";
+ cpu-release-addr = <0 0xf00000b8>;
+ next-level-cache = <&l2>;
+ };
+ };
+
+ soc {
+ compatible = "simple-bus";
+ ranges;
+ #address-cells = <1>;
+ #size-cells = <1>;
+
+ uart0: serial@f0070110 {
+ compatible = "cortina,cs7542-uart";
+ reg = <0xf0070110 0x30>;
+ interrupts = <GIC_SPI 6 IRQ_TYPE_LEVEL_HIGH>;
+ clocks = <&apb_clk>;
+
+ status = "disabled";
+ };
+
+ uart1: serial@f0070140 {
+ compatible = "cortina,cs7542-uart";
+ reg = <0xf0070140 0x30>;
+ interrupts = <GIC_SPI 7 IRQ_TYPE_LEVEL_HIGH>;
+ clocks = <&apb_clk>;
+
+ status = "disabled";
+ };
+
+ uart2: serial@f0070170 {
+ compatible = "cortina,cs7542-uart";
+ reg = <0xf0070170 0x30>;
+ interrupts = <GIC_SPI 8 IRQ_TYPE_LEVEL_HIGH>;
+ clocks = <&apb_clk>;
+
+ status = "disabled";
+ };
+
+ uart3: serial@f00701a0 {
+ compatible = "cortina,cs7542-uart";
+ reg = <0xf00701a0 0x30>;
+ interrupts = <GIC_SPI 9 IRQ_TYPE_LEVEL_HIGH>;
+ clocks = <&apb_clk>;
+
+ status = "disabled";
+ };
+
+ l2: cache-controller@f5010000 {
+ compatible = "arm,pl310-cache";
+ reg = <0xf5010000 0x1000>;
+ cache-unified;
+ cache-level = <2>;
+ arm,shared-override;
+ arm,tag-latency = <1 1 1>;
+ arm,data-latency = <1 1 2>;
+ };
+
+ scu@f8000000 {
+ compatible = "arm,cortex-a9-scu";
+ reg = <0xf8000000 0x100>;
+ };
+
+ timer@f8000200 {
+ compatible = "arm,cortex-a9-global-timer";
+ reg = <0xf8000200 0x20>;
+ interrupts = <GIC_PPI 11 (GIC_CPU_MASK_SIMPLE(2) | IRQ_TYPE_EDGE_RISING)>;
+ clocks = <&apb_clk>;
+ };
+
+ timer@f8000600 {
+ compatible = "arm,cortex-a9-twd-timer";
+ reg = <0xf8000600 0x20>;
+ interrupts = <GIC_PPI 13 (GIC_CPU_MASK_SIMPLE(2) | IRQ_TYPE_EDGE_RISING)>;
+ clocks = <&apb_clk>;
+ };
+
+ watchdog@f8000620 {
+ compatible = "arm,cortex-a9-twd-wdt";
+ reg = <0xf8000620 0x20>;
+ interrupts = <GIC_PPI 14 (GIC_CPU_MASK_SIMPLE(2) | IRQ_TYPE_EDGE_RISING)>;
+ clocks = <&apb_clk>;
+ };
+
+ gic: interrupt-controller@f8001000 {
+ compatible = "arm,cortex-a9-gic";
+ reg = <0xf8001000 0x1000>,
+ <0xf8000100 0x100>;
+ #interrupt-cells = <3>;
+ interrupt-controller;
+ };
+ };
+};
--
2.53.0
^ permalink raw reply [flat|nested] 16+ messages in thread* Re: [PATCH RFC v2 08/10] ARM: dts: cortina: Add CS7542 SoC and Securifi Almond+ board
2026-10-06 18:17 ` [PATCH RFC v2 08/10] ARM: dts: cortina: Add CS7542 SoC and Securifi Almond+ board Fil Dunsky via B4 Relay
@ 2026-10-07 11:41 ` Linus Walleij
0 siblings, 0 replies; 16+ messages in thread
From: Linus Walleij @ 2026-10-07 11:41 UTC (permalink / raw)
To: filipp.dunsky
Cc: Arnd Bergmann, Krzysztof Kozlowski, Rob Herring,
Krzysztof Kozlowski, Conor Dooley, Greg Kroah-Hartman,
Jiri Slaby, Russell King, Alexandre Belloni, Drew Fustini,
Lorenzo Pieralisi, linux-arm-kernel, devicetree, linux-kernel,
linux-serial, Jason Li
On Tue, Oct 6, 2026 at 8:17 PM Fil Dunsky via B4 Relay
<devnull+filipp.dunsky.gmail.com@kernel.org> wrote:
> From: Fil Dunsky <filipp.dunsky@gmail.com>
>
> Add a minimal description of the Cortina Systems CS7542 SoC: the two
> Cortex-A9 cores, SCU, GIC, global timer, private timer and watchdog,
> PL310 L2 cache controller and the four on-chip UARTs.
>
> The peripheral clock (APB) runs at 100, 150 or 170 MHz depending on the
> boot strap pins. Until there is a driver for the global control block
> that reads the straps, model it as a fixed clock whose rate is provided
> by the board.
>
> The Securifi Almond+ is a touchscreen Wi-Fi router with 512 MiB of DDR3,
> 512 MiB of NAND flash, a QCA8337 switch, QCA9880 and AR9580 Wi-Fi and an
> ASM1042 USB 3.0 controller behind the SoC PCIe root ports. For now,
> describe the memory, the console UART and a ramoops region, and reserve
> the top 64 MiB of RAM which the vendor firmware hands to the packet
> engine queue manager.
>
> Signed-off-by: Fil Dunsky <filipp.dunsky@gmail.com>
Reviewed-by: Linus Walleij <linusw@kernel.org>
Yours,
Linus Walleij
^ permalink raw reply [flat|nested] 16+ messages in thread
* [PATCH RFC v2 09/10] ARM: multi_v7_defconfig: Enable Cortina Systems CS75xx support
2026-10-06 18:17 [PATCH RFC v2 00/10] ARM: Add support for Cortina Systems CS75xx and Securifi Almond+ Fil Dunsky via B4 Relay
` (7 preceding siblings ...)
2026-10-06 18:17 ` [PATCH RFC v2 08/10] ARM: dts: cortina: Add CS7542 SoC and Securifi Almond+ board Fil Dunsky via B4 Relay
@ 2026-10-06 18:17 ` Fil Dunsky via B4 Relay
2026-10-07 11:42 ` Linus Walleij
2026-10-06 18:17 ` [PATCH RFC v2 10/10] MAINTAINERS: Add entry for Cortina Systems CS75xx Fil Dunsky via B4 Relay
9 siblings, 1 reply; 16+ messages in thread
From: Fil Dunsky via B4 Relay @ 2026-10-06 18:17 UTC (permalink / raw)
To: Arnd Bergmann, Linus Walleij, Krzysztof Kozlowski
Cc: Rob Herring, Krzysztof Kozlowski, Conor Dooley,
Greg Kroah-Hartman, Jiri Slaby, Russell King, Alexandre Belloni,
Drew Fustini, Lorenzo Pieralisi, linux-arm-kernel, devicetree,
linux-kernel, linux-serial, Jason Li, Fil Dunsky
From: Fil Dunsky <filipp.dunsky@gmail.com>
Enable the Cortina Systems CS75xx platform and its UART driver with
console support, as used on the Securifi Almond+ router.
Signed-off-by: Fil Dunsky <filipp.dunsky@gmail.com>
---
arch/arm/configs/multi_v7_defconfig | 3 +++
1 file changed, 3 insertions(+)
diff --git a/arch/arm/configs/multi_v7_defconfig b/arch/arm/configs/multi_v7_defconfig
index 069d5a49f01..23f14435998 100644
--- a/arch/arm/configs/multi_v7_defconfig
+++ b/arch/arm/configs/multi_v7_defconfig
@@ -45,6 +45,7 @@ CONFIG_MACH_BERLIN_BG2CD=y
CONFIG_MACH_BERLIN_BG2Q=y
CONFIG_ARCH_DIGICOLOR=y
CONFIG_ARCH_EXYNOS=y
+CONFIG_ARCH_CORTINA_ACCESS=y
CONFIG_ARCH_HIGHBANK=y
CONFIG_ARCH_HISI=y
CONFIG_ARCH_HI3xxx=y
@@ -396,6 +397,8 @@ CONFIG_SERIAL_FSL_LPUART=y
CONFIG_SERIAL_FSL_LPUART_CONSOLE=y
CONFIG_SERIAL_CONEXANT_DIGICOLOR=y
CONFIG_SERIAL_CONEXANT_DIGICOLOR_CONSOLE=y
+CONFIG_SERIAL_CORTINA=y
+CONFIG_SERIAL_CORTINA_CONSOLE=y
CONFIG_SERIAL_ST_ASC=y
CONFIG_SERIAL_ST_ASC_CONSOLE=y
CONFIG_SERIAL_STM32=y
--
2.53.0
^ permalink raw reply [flat|nested] 16+ messages in thread* Re: [PATCH RFC v2 09/10] ARM: multi_v7_defconfig: Enable Cortina Systems CS75xx support
2026-10-06 18:17 ` [PATCH RFC v2 09/10] ARM: multi_v7_defconfig: Enable Cortina Systems CS75xx support Fil Dunsky via B4 Relay
@ 2026-10-07 11:42 ` Linus Walleij
0 siblings, 0 replies; 16+ messages in thread
From: Linus Walleij @ 2026-10-07 11:42 UTC (permalink / raw)
To: filipp.dunsky
Cc: Arnd Bergmann, Krzysztof Kozlowski, Rob Herring,
Krzysztof Kozlowski, Conor Dooley, Greg Kroah-Hartman,
Jiri Slaby, Russell King, Alexandre Belloni, Drew Fustini,
Lorenzo Pieralisi, linux-arm-kernel, devicetree, linux-kernel,
linux-serial, Jason Li
On Tue, Oct 6, 2026 at 8:17 PM Fil Dunsky via B4 Relay
<devnull+filipp.dunsky.gmail.com@kernel.org> wrote:
> From: Fil Dunsky <filipp.dunsky@gmail.com>
>
> Enable the Cortina Systems CS75xx platform and its UART driver with
> console support, as used on the Securifi Almond+ router.
>
> Signed-off-by: Fil Dunsky <filipp.dunsky@gmail.com>
Reviewed-by: Linus Walleij <linusw@kernel.org>
Yours,
Linus Walleij
^ permalink raw reply [flat|nested] 16+ messages in thread
* [PATCH RFC v2 10/10] MAINTAINERS: Add entry for Cortina Systems CS75xx
2026-10-06 18:17 [PATCH RFC v2 00/10] ARM: Add support for Cortina Systems CS75xx and Securifi Almond+ Fil Dunsky via B4 Relay
` (8 preceding siblings ...)
2026-10-06 18:17 ` [PATCH RFC v2 09/10] ARM: multi_v7_defconfig: Enable Cortina Systems CS75xx support Fil Dunsky via B4 Relay
@ 2026-10-06 18:17 ` Fil Dunsky via B4 Relay
2026-10-07 11:42 ` Linus Walleij
9 siblings, 1 reply; 16+ messages in thread
From: Fil Dunsky via B4 Relay @ 2026-10-06 18:17 UTC (permalink / raw)
To: Arnd Bergmann, Linus Walleij, Krzysztof Kozlowski
Cc: Rob Herring, Krzysztof Kozlowski, Conor Dooley,
Greg Kroah-Hartman, Jiri Slaby, Russell King, Alexandre Belloni,
Drew Fustini, Lorenzo Pieralisi, linux-arm-kernel, devicetree,
linux-kernel, linux-serial, Jason Li, Fil Dunsky
From: Fil Dunsky <filipp.dunsky@gmail.com>
Add an entry covering the Cortina Systems CS75xx platform code, device
trees, bindings and UART driver.
Signed-off-by: Fil Dunsky <filipp.dunsky@gmail.com>
---
MAINTAINERS | 11 +++++++++++
1 file changed, 11 insertions(+)
diff --git a/MAINTAINERS b/MAINTAINERS
index 2d137a33994..176046436cf 100644
--- a/MAINTAINERS
+++ b/MAINTAINERS
@@ -2914,6 +2914,17 @@ F: tools/perf/tests/shell/coresight/*
F: tools/perf/util/cs-etm-decoder/*
F: tools/perf/util/cs-etm.*
+ARM/CORTINA SYSTEMS CS75XX ARM ARCHITECTURE
+M: Fil Dunsky <filipp.dunsky@gmail.com>
+L: linux-arm-kernel@lists.infradead.org (moderated for non-subscribers)
+S: Maintained
+F: Documentation/devicetree/bindings/arm/cortina.yaml
+F: Documentation/devicetree/bindings/serial/cortina,cs7542-uart.yaml
+F: arch/arm/boot/dts/cortina/
+F: arch/arm/include/debug/cs75xx.S
+F: arch/arm/mach-goldengate/
+F: drivers/tty/serial/cortina-uart.c
+
ARM/CORTINA SYSTEMS GEMINI ARM ARCHITECTURE
M: Hans Ulli Kroll <ulli.kroll@googlemail.com>
M: Linus Walleij <linusw@kernel.org>
--
2.53.0
^ permalink raw reply [flat|nested] 16+ messages in thread* Re: [PATCH RFC v2 10/10] MAINTAINERS: Add entry for Cortina Systems CS75xx
2026-10-06 18:17 ` [PATCH RFC v2 10/10] MAINTAINERS: Add entry for Cortina Systems CS75xx Fil Dunsky via B4 Relay
@ 2026-10-07 11:42 ` Linus Walleij
0 siblings, 0 replies; 16+ messages in thread
From: Linus Walleij @ 2026-10-07 11:42 UTC (permalink / raw)
To: filipp.dunsky
Cc: Arnd Bergmann, Krzysztof Kozlowski, Rob Herring,
Krzysztof Kozlowski, Conor Dooley, Greg Kroah-Hartman,
Jiri Slaby, Russell King, Alexandre Belloni, Drew Fustini,
Lorenzo Pieralisi, linux-arm-kernel, devicetree, linux-kernel,
linux-serial, Jason Li
On Tue, Oct 6, 2026 at 8:17 PM Fil Dunsky via B4 Relay
<devnull+filipp.dunsky.gmail.com@kernel.org> wrote:
> From: Fil Dunsky <filipp.dunsky@gmail.com>
>
> Add an entry covering the Cortina Systems CS75xx platform code, device
> trees, bindings and UART driver.
>
> Signed-off-by: Fil Dunsky <filipp.dunsky@gmail.com>
Reviewed-by: Linus Walleij <linusw@kernel.org>
Yours,
Linus Walleij
^ permalink raw reply [flat|nested] 16+ messages in thread