From: Jammy Huang <jammy_huang@aspeedtech.com>
To: Joel Stanley <joel@jms.id.au>,
Andrew Jeffery <andrew@codeconstruct.com.au>,
Rob Herring <robh@kernel.org>,
"Krzysztof Kozlowski" <krzk+dt@kernel.org>,
Conor Dooley <conor+dt@kernel.org>,
"Oskar Senft" <osk@google.com>,
Chia-Wei Wang <chiawei_wang@aspeedtech.com>
Cc: <linux-arm-kernel@lists.infradead.org>,
<linux-aspeed@lists.ozlabs.org>, <linux-kernel@vger.kernel.org>,
<devicetree@vger.kernel.org>,
Jammy Huang <jammy_huang@aspeedtech.com>
Subject: [PATCH 2/2] soc: aspeed: uart-routing: Add AST27xx dual node support
Date: Tue, 3 Feb 2026 11:55:09 +0800 [thread overview]
Message-ID: <20260203-upstream_uart_routing-v1-2-6bd5dd75ee3b@aspeedtech.com> (raw)
In-Reply-To: <20260203-upstream_uart_routing-v1-0-6bd5dd75ee3b@aspeedtech.com>
From: Chia-Wei Wang <chiawei_wang@aspeedtech.com>
Add dual node support for AST27xx SoCs.
Signed-off-by: Chia-Wei Wang <chiawei_wang@aspeedtech.com>
Signed-off-by: Jammy Huang <jammy_huang@aspeedtech.com>
---
drivers/soc/aspeed/aspeed-uart-routing.c | 424 +++++++++++++++++++++++++++++++
1 file changed, 424 insertions(+)
diff --git a/drivers/soc/aspeed/aspeed-uart-routing.c b/drivers/soc/aspeed/aspeed-uart-routing.c
index 0191e36e66..9b648f5a1b 100644
--- a/drivers/soc/aspeed/aspeed-uart-routing.c
+++ b/drivers/soc/aspeed/aspeed-uart-routing.c
@@ -15,20 +15,30 @@
#define HICRA 0x9c
/* attributes options */
+#define UART_ROUTING_IO0 "io0"
#define UART_ROUTING_IO1 "io1"
#define UART_ROUTING_IO2 "io2"
#define UART_ROUTING_IO3 "io3"
#define UART_ROUTING_IO4 "io4"
#define UART_ROUTING_IO5 "io5"
#define UART_ROUTING_IO6 "io6"
+#define UART_ROUTING_IO7 "io7"
+#define UART_ROUTING_IO8 "io8"
+#define UART_ROUTING_IO9 "io9"
#define UART_ROUTING_IO10 "io10"
+#define UART_ROUTING_IO12 "io12"
+#define UART_ROUTING_UART0 "uart0"
#define UART_ROUTING_UART1 "uart1"
#define UART_ROUTING_UART2 "uart2"
#define UART_ROUTING_UART3 "uart3"
#define UART_ROUTING_UART4 "uart4"
#define UART_ROUTING_UART5 "uart5"
#define UART_ROUTING_UART6 "uart6"
+#define UART_ROUTING_UART7 "uart7"
+#define UART_ROUTING_UART8 "uart8"
+#define UART_ROUTING_UART9 "uart9"
#define UART_ROUTING_UART10 "uart10"
+#define UART_ROUTING_UART12 "uart12"
#define UART_ROUTING_RES "reserved"
struct aspeed_uart_routing {
@@ -488,6 +498,416 @@ static const struct attribute_group ast2600_uart_routing_attr_group = {
.attrs = ast2600_uart_routing_attrs,
};
+/* routing selector for AST27xx node 0 */
+static struct aspeed_uart_routing_selector ast2700n0_uart9_sel = {
+ .dev_attr = ROUTING_ATTR(UART_ROUTING_UART9),
+ .reg = HICR9,
+ .shift = 12,
+ .mask = 0xf,
+ .options = {
+ UART_ROUTING_IO9,
+ UART_ROUTING_IO0,
+ UART_ROUTING_IO1,
+ UART_ROUTING_IO2,
+ UART_ROUTING_IO3,
+ UART_ROUTING_RES,
+ UART_ROUTING_UART0,
+ UART_ROUTING_UART1,
+ UART_ROUTING_UART2,
+ UART_ROUTING_UART3,
+ UART_ROUTING_UART12,
+ NULL,
+ },
+};
+
+static struct aspeed_uart_routing_selector ast2700n0_io9_sel = {
+ .dev_attr = ROUTING_ATTR(UART_ROUTING_IO9),
+ .reg = HICR9,
+ .shift = 8,
+ .mask = 0xf,
+ .options = {
+ UART_ROUTING_UART0,
+ UART_ROUTING_UART1,
+ UART_ROUTING_UART2,
+ UART_ROUTING_UART3,
+ UART_ROUTING_UART12,
+ UART_ROUTING_IO0,
+ UART_ROUTING_IO1,
+ UART_ROUTING_IO2,
+ UART_ROUTING_IO3,
+ UART_ROUTING_RES,
+ UART_ROUTING_UART9,
+ NULL,
+ },
+};
+
+static struct aspeed_uart_routing_selector ast2700n0_uart3_sel = {
+ .dev_attr = ROUTING_ATTR(UART_ROUTING_UART3),
+ .reg = HICRA,
+ .shift = 25,
+ .mask = 0x7,
+ .options = {
+ UART_ROUTING_IO3,
+ UART_ROUTING_IO0,
+ UART_ROUTING_IO1,
+ UART_ROUTING_IO2,
+ UART_ROUTING_UART0,
+ UART_ROUTING_UART1,
+ UART_ROUTING_UART2,
+ UART_ROUTING_IO9,
+ NULL,
+ },
+};
+
+static struct aspeed_uart_routing_selector ast2700n0_uart2_sel = {
+ .dev_attr = ROUTING_ATTR(UART_ROUTING_UART2),
+ .reg = HICRA,
+ .shift = 22,
+ .mask = 0x7,
+ .options = {
+ UART_ROUTING_IO2,
+ UART_ROUTING_IO3,
+ UART_ROUTING_IO0,
+ UART_ROUTING_IO1,
+ UART_ROUTING_UART3,
+ UART_ROUTING_UART0,
+ UART_ROUTING_UART1,
+ UART_ROUTING_IO9,
+ NULL,
+ },
+};
+
+static struct aspeed_uart_routing_selector ast2700n0_uart1_sel = {
+ .dev_attr = ROUTING_ATTR(UART_ROUTING_UART1),
+ .reg = HICRA,
+ .shift = 19,
+ .mask = 0x7,
+ .options = {
+ UART_ROUTING_IO1,
+ UART_ROUTING_IO2,
+ UART_ROUTING_IO3,
+ UART_ROUTING_IO0,
+ UART_ROUTING_UART2,
+ UART_ROUTING_UART3,
+ UART_ROUTING_UART0,
+ UART_ROUTING_IO9,
+ NULL,
+ },
+};
+
+static struct aspeed_uart_routing_selector ast2700n0_uart0_sel = {
+ .dev_attr = ROUTING_ATTR(UART_ROUTING_UART0),
+ .reg = HICRA,
+ .shift = 16,
+ .mask = 0x7,
+ .options = {
+ UART_ROUTING_IO0,
+ UART_ROUTING_IO1,
+ UART_ROUTING_IO2,
+ UART_ROUTING_IO3,
+ UART_ROUTING_UART1,
+ UART_ROUTING_UART2,
+ UART_ROUTING_UART3,
+ UART_ROUTING_IO9,
+ NULL,
+ },
+};
+
+static struct aspeed_uart_routing_selector ast2700n0_io3_sel = {
+ .dev_attr = ROUTING_ATTR(UART_ROUTING_IO3),
+ .reg = HICRA,
+ .shift = 9,
+ .mask = 0x7,
+ .options = {
+ UART_ROUTING_UART3,
+ UART_ROUTING_UART9,
+ UART_ROUTING_UART0,
+ UART_ROUTING_UART1,
+ UART_ROUTING_UART2,
+ UART_ROUTING_IO0,
+ UART_ROUTING_IO1,
+ UART_ROUTING_IO9,
+ NULL,
+ },
+};
+
+static struct aspeed_uart_routing_selector ast2700n0_io2_sel = {
+ .dev_attr = ROUTING_ATTR(UART_ROUTING_IO2),
+ .reg = HICRA,
+ .shift = 6,
+ .mask = 0x7,
+ .options = {
+ UART_ROUTING_UART2,
+ UART_ROUTING_UART3,
+ UART_ROUTING_UART9,
+ UART_ROUTING_UART0,
+ UART_ROUTING_UART1,
+ UART_ROUTING_IO0,
+ UART_ROUTING_IO1,
+ UART_ROUTING_IO9,
+ NULL,
+ },
+};
+
+static struct aspeed_uart_routing_selector ast2700n0_io1_sel = {
+ .dev_attr = ROUTING_ATTR(UART_ROUTING_IO1),
+ .reg = HICRA,
+ .shift = 3,
+ .mask = 0x7,
+ .options = {
+ UART_ROUTING_UART1,
+ UART_ROUTING_UART2,
+ UART_ROUTING_UART3,
+ UART_ROUTING_UART9,
+ UART_ROUTING_UART0,
+ UART_ROUTING_IO2,
+ UART_ROUTING_IO3,
+ UART_ROUTING_IO9,
+ NULL,
+ },
+};
+
+static struct aspeed_uart_routing_selector ast2700n0_io0_sel = {
+ .dev_attr = ROUTING_ATTR(UART_ROUTING_IO0),
+ .reg = HICRA,
+ .shift = 0,
+ .mask = 0x7,
+ .options = {
+ UART_ROUTING_UART0,
+ UART_ROUTING_UART1,
+ UART_ROUTING_UART2,
+ UART_ROUTING_UART3,
+ UART_ROUTING_UART9,
+ UART_ROUTING_IO2,
+ UART_ROUTING_IO3,
+ UART_ROUTING_IO9,
+ NULL,
+ },
+};
+
+static struct attribute *ast2700n0_uart_routing_attrs[] = {
+ &ast2700n0_uart9_sel.dev_attr.attr,
+ &ast2700n0_io9_sel.dev_attr.attr,
+ &ast2700n0_uart3_sel.dev_attr.attr,
+ &ast2700n0_uart2_sel.dev_attr.attr,
+ &ast2700n0_uart1_sel.dev_attr.attr,
+ &ast2700n0_uart0_sel.dev_attr.attr,
+ &ast2700n0_io3_sel.dev_attr.attr,
+ &ast2700n0_io2_sel.dev_attr.attr,
+ &ast2700n0_io1_sel.dev_attr.attr,
+ &ast2700n0_io0_sel.dev_attr.attr,
+ NULL,
+};
+
+static const struct attribute_group ast2700n0_uart_routing_attr_group = {
+ .attrs = ast2700n0_uart_routing_attrs,
+};
+
+/* routing selector for AST27xx node 1 */
+static struct aspeed_uart_routing_selector ast2700n1_uart10_sel = {
+ .dev_attr = ROUTING_ATTR(UART_ROUTING_UART10),
+ .reg = HICR9,
+ .shift = 12,
+ .mask = 0xf,
+ .options = {
+ UART_ROUTING_IO10,
+ UART_ROUTING_IO5,
+ UART_ROUTING_IO6,
+ UART_ROUTING_IO7,
+ UART_ROUTING_IO8,
+ UART_ROUTING_RES,
+ UART_ROUTING_UART5,
+ UART_ROUTING_UART6,
+ UART_ROUTING_UART7,
+ UART_ROUTING_UART8,
+ UART_ROUTING_UART12,
+ NULL,
+ },
+};
+
+static struct aspeed_uart_routing_selector ast2700n1_io10_sel = {
+ .dev_attr = ROUTING_ATTR(UART_ROUTING_IO10),
+ .reg = HICR9,
+ .shift = 8,
+ .mask = 0xf,
+ .options = {
+ UART_ROUTING_UART5,
+ UART_ROUTING_UART6,
+ UART_ROUTING_UART7,
+ UART_ROUTING_UART8,
+ UART_ROUTING_UART12,
+ UART_ROUTING_IO5,
+ UART_ROUTING_IO6,
+ UART_ROUTING_IO7,
+ UART_ROUTING_IO8,
+ UART_ROUTING_RES,
+ UART_ROUTING_UART10,
+ NULL,
+ },
+};
+
+static struct aspeed_uart_routing_selector ast2700n1_uart8_sel = {
+ .dev_attr = ROUTING_ATTR(UART_ROUTING_UART8),
+ .reg = HICRA,
+ .shift = 25,
+ .mask = 0x7,
+ .options = {
+ UART_ROUTING_IO8,
+ UART_ROUTING_IO5,
+ UART_ROUTING_IO6,
+ UART_ROUTING_IO7,
+ UART_ROUTING_UART5,
+ UART_ROUTING_UART6,
+ UART_ROUTING_UART7,
+ UART_ROUTING_IO10,
+ NULL,
+ },
+};
+
+static struct aspeed_uart_routing_selector ast2700n1_uart7_sel = {
+ .dev_attr = ROUTING_ATTR(UART_ROUTING_UART7),
+ .reg = HICRA,
+ .shift = 22,
+ .mask = 0x7,
+ .options = {
+ UART_ROUTING_IO7,
+ UART_ROUTING_IO8,
+ UART_ROUTING_IO5,
+ UART_ROUTING_IO6,
+ UART_ROUTING_UART8,
+ UART_ROUTING_UART5,
+ UART_ROUTING_UART6,
+ UART_ROUTING_IO10,
+ NULL,
+ },
+};
+
+static struct aspeed_uart_routing_selector ast2700n1_uart6_sel = {
+ .dev_attr = ROUTING_ATTR(UART_ROUTING_UART6),
+ .reg = HICRA,
+ .shift = 19,
+ .mask = 0x7,
+ .options = {
+ UART_ROUTING_IO6,
+ UART_ROUTING_IO7,
+ UART_ROUTING_IO8,
+ UART_ROUTING_IO5,
+ UART_ROUTING_UART7,
+ UART_ROUTING_UART8,
+ UART_ROUTING_UART5,
+ UART_ROUTING_IO10,
+ NULL,
+ },
+};
+
+static struct aspeed_uart_routing_selector ast2700n1_uart5_sel = {
+ .dev_attr = ROUTING_ATTR(UART_ROUTING_UART5),
+ .reg = HICRA,
+ .shift = 16,
+ .mask = 0x7,
+ .options = {
+ UART_ROUTING_IO5,
+ UART_ROUTING_IO6,
+ UART_ROUTING_IO7,
+ UART_ROUTING_IO8,
+ UART_ROUTING_UART6,
+ UART_ROUTING_UART7,
+ UART_ROUTING_UART8,
+ UART_ROUTING_IO10,
+ NULL,
+ },
+};
+
+static struct aspeed_uart_routing_selector ast2700n1_io8_sel = {
+ .dev_attr = ROUTING_ATTR(UART_ROUTING_IO8),
+ .reg = HICRA,
+ .shift = 9,
+ .mask = 0x7,
+ .options = {
+ UART_ROUTING_UART8,
+ UART_ROUTING_UART10,
+ UART_ROUTING_UART5,
+ UART_ROUTING_UART6,
+ UART_ROUTING_UART7,
+ UART_ROUTING_IO5,
+ UART_ROUTING_IO6,
+ UART_ROUTING_IO10,
+ NULL,
+ },
+};
+
+static struct aspeed_uart_routing_selector ast2700n1_io7_sel = {
+ .dev_attr = ROUTING_ATTR(UART_ROUTING_IO7),
+ .reg = HICRA,
+ .shift = 6,
+ .mask = 0x7,
+ .options = {
+ UART_ROUTING_UART7,
+ UART_ROUTING_UART8,
+ UART_ROUTING_UART10,
+ UART_ROUTING_UART5,
+ UART_ROUTING_UART6,
+ UART_ROUTING_IO5,
+ UART_ROUTING_IO6,
+ UART_ROUTING_IO10,
+ NULL,
+ },
+};
+
+static struct aspeed_uart_routing_selector ast2700n1_io6_sel = {
+ .dev_attr = ROUTING_ATTR(UART_ROUTING_IO6),
+ .reg = HICRA,
+ .shift = 3,
+ .mask = 0x7,
+ .options = {
+ UART_ROUTING_UART6,
+ UART_ROUTING_UART7,
+ UART_ROUTING_UART8,
+ UART_ROUTING_UART10,
+ UART_ROUTING_UART5,
+ UART_ROUTING_IO7,
+ UART_ROUTING_IO8,
+ UART_ROUTING_IO10,
+ NULL,
+ },
+};
+
+static struct aspeed_uart_routing_selector ast2700n1_io5_sel = {
+ .dev_attr = ROUTING_ATTR(UART_ROUTING_IO5),
+ .reg = HICRA,
+ .shift = 0,
+ .mask = 0x7,
+ .options = {
+ UART_ROUTING_UART5,
+ UART_ROUTING_UART6,
+ UART_ROUTING_UART7,
+ UART_ROUTING_UART8,
+ UART_ROUTING_UART10,
+ UART_ROUTING_IO7,
+ UART_ROUTING_IO8,
+ UART_ROUTING_IO10,
+ NULL,
+ },
+};
+
+static struct attribute *ast2700n1_uart_routing_attrs[] = {
+ &ast2700n1_uart10_sel.dev_attr.attr,
+ &ast2700n1_io10_sel.dev_attr.attr,
+ &ast2700n1_uart8_sel.dev_attr.attr,
+ &ast2700n1_uart7_sel.dev_attr.attr,
+ &ast2700n1_uart6_sel.dev_attr.attr,
+ &ast2700n1_uart5_sel.dev_attr.attr,
+ &ast2700n1_io8_sel.dev_attr.attr,
+ &ast2700n1_io7_sel.dev_attr.attr,
+ &ast2700n1_io6_sel.dev_attr.attr,
+ &ast2700n1_io5_sel.dev_attr.attr,
+ NULL,
+};
+
+static const struct attribute_group ast2700n1_uart_routing_attr_group = {
+ .attrs = ast2700n1_uart_routing_attrs,
+};
+
static ssize_t aspeed_uart_routing_show(struct device *dev,
struct device_attribute *attr,
char *buf)
@@ -580,6 +1000,10 @@ static const struct of_device_id aspeed_uart_routing_table[] = {
.data = &ast2500_uart_routing_attr_group },
{ .compatible = "aspeed,ast2600-uart-routing",
.data = &ast2600_uart_routing_attr_group },
+ { .compatible = "aspeed,ast2700n0-uart-routing",
+ .data = &ast2700n0_uart_routing_attr_group },
+ { .compatible = "aspeed,ast2700n1-uart-routing",
+ .data = &ast2700n1_uart_routing_attr_group },
{ },
};
--
2.34.1
prev parent reply other threads:[~2026-02-03 3:55 UTC|newest]
Thread overview: 4+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-02-03 3:55 [PATCH 0/2] Add Aspeed G7 uart routing support Jammy Huang
2026-02-03 3:55 ` [PATCH 1/2] dt-bindings: soc: aspeed: add aspeed,ast2700nx-uart-routing compatible Jammy Huang
2026-02-04 17:54 ` Conor Dooley
2026-02-03 3:55 ` Jammy Huang [this message]
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20260203-upstream_uart_routing-v1-2-6bd5dd75ee3b@aspeedtech.com \
--to=jammy_huang@aspeedtech.com \
--cc=andrew@codeconstruct.com.au \
--cc=chiawei_wang@aspeedtech.com \
--cc=conor+dt@kernel.org \
--cc=devicetree@vger.kernel.org \
--cc=joel@jms.id.au \
--cc=krzk+dt@kernel.org \
--cc=linux-arm-kernel@lists.infradead.org \
--cc=linux-aspeed@lists.ozlabs.org \
--cc=linux-kernel@vger.kernel.org \
--cc=osk@google.com \
--cc=robh@kernel.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox