mirror of https://lore.kernel.org/lkml/
 help / color / mirror / Atom feed
From: Marcin Wojtas <mw@semihalf.com>
To: linux-kernel@vger.kernel.org, linux-acpi@vger.kernel.org,
	netdev@vger.kernel.org
Cc: rafael@kernel.org, andriy.shevchenko@linux.intel.com,
	lenb@kernel.org, andrew@lunn.ch, vivien.didelot@gmail.com,
	f.fainelli@gmail.com, olteanv@gmail.com, davem@davemloft.net,
	edumazet@google.com, kuba@kernel.org, pabeni@redhat.com,
	linux@armlinux.org.uk, hkallweit1@gmail.com, gjb@semihalf.com,
	mw@semihalf.com, jaz@semihalf.com, tn@semihalf.com,
	Samer.El-Haj-Mahmoud@arm.com, upstream@semihalf.com
Subject: [net-next: PATCH 10/12] net: dsa: add ACPI support
Date: Mon, 20 Jun 2022 17:02:23 +0200	[thread overview]
Message-ID: <20220620150225.1307946-11-mw@semihalf.com> (raw)
In-Reply-To: <20220620150225.1307946-1-mw@semihalf.com>

Although the recent switch to device_/fwnode_ API covers the most
of modifications required for supporting ACPI, minor additional
changes should be applied:

* Use different subnode names with ACPI for 'ports' and 'mdio':
  * Naming of the nodes in ACPI must conform the namespace
    constraints, with regards to the characters' type
    and ACPI_NAMESEG_SIZE [1]. Because of that, the 'ports'
    subnode name used in device tree case, is not appropriate
    in ACPI world. This patch updates the subnode name depending on
    the hardware description type in runtime.
* Obtain ports indexes from _ADR fields
  * Same as in the MDIO PHY case, use this standard field instead of
    parsing 'reg' property from _DSD object.
* For now cascade topology remains unsupported in ACPI world, so
  disable ports connected to other switch devices.

[1] https://uefi.org/specs/ACPI/6.4/05_ACPI_Software_Programming_Model/ACPI_Software_Programming_Model.html#acpi-namespace

Signed-off-by: Marcin Wojtas <mw@semihalf.com>
---
 net/dsa/dsa2.c | 35 +++++++++++++++++---
 1 file changed, 31 insertions(+), 4 deletions(-)

diff --git a/net/dsa/dsa2.c b/net/dsa/dsa2.c
index 5e11d66f9057..53837dad1cca 100644
--- a/net/dsa/dsa2.c
+++ b/net/dsa/dsa2.c
@@ -6,6 +6,8 @@
  * Copyright (c) 2016 Andrew Lunn <andrew@lunn.ch>
  */
 
+#include <linux/acpi.h>
+#include <linux/acpi_mdio.h>
 #include <linux/device.h>
 #include <linux/etherdevice.h>
 #include <linux/err.h>
@@ -854,6 +856,7 @@ static int dsa_switch_setup_tag_protocol(struct dsa_switch *ds)
 static int dsa_switch_setup(struct dsa_switch *ds)
 {
 	struct dsa_devlink_priv *dl_priv;
+	char mdio_node_name[] = "mdio";
 	struct fwnode_handle *fwnode;
 	struct dsa_port *dp;
 	int err;
@@ -910,9 +913,16 @@ static int dsa_switch_setup(struct dsa_switch *ds)
 
 		dsa_slave_mii_bus_init(ds);
 
-		fwnode = fwnode_get_named_child_node(ds->dev->fwnode, "mdio");
+		/* Update subnode name if operating in the ACPI world. */
+		if (is_acpi_node(fwnode))
+			strncpy(mdio_node_name, "MDIO", ACPI_NAMESEG_SIZE);
 
-		err = of_mdiobus_register(ds->slave_mii_bus, to_of_node(fwnode));
+		fwnode = fwnode_get_named_child_node(ds->dev->fwnode, mdio_node_name);
+
+		if (is_acpi_node(fwnode))
+			err = acpi_mdiobus_register(ds->slave_mii_bus, fwnode);
+		else
+			err = of_mdiobus_register(ds->slave_mii_bus, to_of_node(fwnode));
 		fwnode_handle_put(fwnode);
 		if (err < 0)
 			goto free_slave_mii_bus;
@@ -1374,6 +1384,15 @@ static int dsa_port_parse_user(struct dsa_port *dp, const char *name)
 
 static int dsa_port_parse_dsa(struct dsa_port *dp)
 {
+	/* Cascade switch connection is not supported in ACPI world. */
+	if (is_acpi_node(dp->fwnode)) {
+		dev_warn(dp->ds->dev,
+			 "DSA type is not supported with ACPI, disable port #%d\n",
+			 dp->index);
+		dp->type = DSA_PORT_TYPE_UNUSED;
+		return 0;
+	}
+
 	dp->type = DSA_PORT_TYPE_DSA;
 
 	return 0;
@@ -1524,11 +1543,16 @@ static int dsa_switch_parse_ports_of(struct dsa_switch *ds,
 				     struct fwnode_handle *fwnode)
 {
 	struct fwnode_handle *ports, *port;
+	char ports_node_name[] = "ports";
 	struct dsa_port *dp;
 	int err = 0;
 	u32 reg;
 
-	ports = fwnode_get_named_child_node(fwnode, "ports");
+	/* Update subnode name if operating in the ACPI world. */
+	if (is_acpi_node(fwnode))
+		strncpy(ports_node_name, "PRTS", ACPI_NAMESEG_SIZE);
+
+	ports = fwnode_get_named_child_node(fwnode, ports_node_name);
 	if (!ports) {
 		/* The second possibility is "ethernet-ports" */
 		ports = fwnode_get_named_child_node(fwnode, "ethernet-ports");
@@ -1539,7 +1563,10 @@ static int dsa_switch_parse_ports_of(struct dsa_switch *ds,
 	}
 
 	fwnode_for_each_available_child_node(ports, port) {
-		err = fwnode_property_read_u32(port, "reg", &reg);
+		if (is_acpi_node(port))
+			err = acpi_get_local_address(ACPI_HANDLE_FWNODE(port), &reg);
+		else
+			err = fwnode_property_read_u32(port, "reg", &reg);
 		if (err) {
 			fwnode_handle_put(port);
 			goto out_put_node;
-- 
2.29.0


  parent reply	other threads:[~2022-06-20 15:14 UTC|newest]

Thread overview: 84+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2022-06-20 15:02 [net-next: PATCH 00/12] ACPI support for DSA Marcin Wojtas
2022-06-20 15:02 ` [net-next: PATCH 01/12] net: phy: fixed_phy: switch to fwnode_ API Marcin Wojtas
2022-06-20 17:25   ` Andy Shevchenko
2022-06-20 17:59   ` Andrew Lunn
2022-06-21  9:56     ` Marcin Wojtas
2022-06-21 10:01       ` Russell King (Oracle)
2022-06-20 15:02 ` [net-next: PATCH 02/12] net: mdio: switch fixed-link PHYs API to fwnode_ Marcin Wojtas
2022-06-20 17:32   ` Andy Shevchenko
2022-06-21  9:22     ` Marcin Wojtas
2022-06-20 15:02 ` [net-next: PATCH 03/12] net: dsa: switch to device_/fwnode_ APIs Marcin Wojtas
2022-06-20 17:41   ` Andy Shevchenko
2022-06-21  9:27     ` Marcin Wojtas
2022-06-21 11:02       ` Andy Shevchenko
2022-06-22 16:09         ` Florian Fainelli
2022-06-20 15:02 ` [net-next: PATCH 04/12] net: mvpp2: initialize port fwnode pointer Marcin Wojtas
2022-06-20 17:43   ` Andy Shevchenko
2022-06-20 17:44     ` Andy Shevchenko
2022-06-21  9:28       ` Marcin Wojtas
2022-06-20 15:02 ` [net-next: PATCH 05/12] net: core: switch to fwnode_find_net_device_by_node() Marcin Wojtas
2022-06-20 17:46   ` Andy Shevchenko
2022-06-20 23:15     ` Marcin Wojtas
2022-06-20 22:30   ` kernel test robot
2022-06-20 15:02 ` [net-next: PATCH 06/12] net: mdio: introduce fwnode_mdiobus_register_device() Marcin Wojtas
2022-06-20 17:48   ` Andy Shevchenko
2022-06-21  9:33     ` Marcin Wojtas
2022-06-20 15:02 ` [net-next: PATCH 07/12] net: mdio: allow registering non-PHY devices in ACPI world Marcin Wojtas
2022-06-20 15:02 ` [net-next: PATCH 08/12] ACPI: scan: prevent double enumeration of MDIO bus children Marcin Wojtas
2022-06-20 17:53   ` Andy Shevchenko
2022-06-20 23:04     ` Marcin Wojtas
2022-06-22 12:09       ` Rafael J. Wysocki
2022-06-22 15:05         ` Marcin Wojtas
2022-06-20 19:08   ` Andrew Lunn
2022-06-22 12:05     ` Rafael J. Wysocki
2022-06-22 16:12       ` Florian Fainelli
2022-06-22 16:21         ` Rafael J. Wysocki
2022-06-23  7:41           ` Andrew Lunn
2022-06-23 23:07             ` Marcin Wojtas
2022-06-20 15:02 ` [net-next: PATCH 09/12] Documentation: ACPI: DSD: introduce DSA description Marcin Wojtas
2022-06-20 18:19   ` Andrew Lunn
2022-06-20 23:21     ` Marcin Wojtas
2022-06-20 19:47   ` Andrew Lunn
2022-06-20 23:25     ` Marcin Wojtas
2022-06-21 11:09     ` Andy Shevchenko
2022-06-21 11:18       ` Andrew Lunn
2022-06-21 11:42         ` Andy Shevchenko
2022-06-22  9:08           ` Marcin Wojtas
2022-06-22  9:24             ` Andrew Lunn
2022-06-22 10:22               ` Marcin Wojtas
2022-06-22 10:37                 ` Andrew Lunn
2022-06-22 11:08                   ` Andy Shevchenko
2022-06-22 11:04               ` Andy Shevchenko
2022-06-22 11:03             ` Andy Shevchenko
2022-06-22 11:22               ` Andrew Lunn
2022-06-22 14:20                 ` Andy Shevchenko
2022-06-22 15:00                   ` Marcin Wojtas
2022-06-21  9:45   ` Sudeep Holla
2022-06-21 11:15     ` Andy Shevchenko
2022-06-21 11:24       ` Andrew Lunn
2022-06-21 11:46         ` Andy Shevchenko
2022-06-21 11:57           ` Andrew Lunn
2022-06-21 13:28         ` Sudeep Holla
2022-06-21 15:23           ` Rafael J. Wysocki
2022-06-21 15:37             ` Sudeep Holla
2022-06-21 16:00               ` Rafael J. Wysocki
2022-06-21 18:11                 ` Sudeep Holla
2022-06-20 15:02 ` Marcin Wojtas [this message]
2022-06-20 18:32   ` [net-next: PATCH 10/12] net: dsa: add ACPI support Andrew Lunn
2022-06-20 23:31     ` Marcin Wojtas
2022-06-20 15:02 ` [net-next: PATCH 11/12] net: dsa: mv88e6xxx: switch to device_/fwnode_ APIs Marcin Wojtas
2022-06-20 18:00   ` Andy Shevchenko
2022-06-21  9:14     ` Marcin Wojtas
2022-06-20 18:04   ` Andy Shevchenko
2022-06-21  9:15     ` Marcin Wojtas
2022-06-20 15:02 ` [net-next: PATCH 12/12] net: dsa: mv88e6xxx: add ACPI support Marcin Wojtas
2022-06-25  2:54   ` kernel test robot
2022-06-20 17:21 ` [net-next: PATCH 00/12] ACPI support for DSA Andy Shevchenko
2022-06-21 10:02   ` Marcin Wojtas
2022-06-20 17:55 ` Andrew Lunn
2022-06-20 18:07   ` Andy Shevchenko
2022-06-20 18:45     ` Andrew Lunn
2022-06-21 10:46       ` Marcin Wojtas
2022-06-22 15:40         ` Marcin Wojtas
2022-06-22 16:14           ` Andy Shevchenko
2022-06-21 10:16   ` Marcin Wojtas

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=20220620150225.1307946-11-mw@semihalf.com \
    --to=mw@semihalf.com \
    --cc=Samer.El-Haj-Mahmoud@arm.com \
    --cc=andrew@lunn.ch \
    --cc=andriy.shevchenko@linux.intel.com \
    --cc=davem@davemloft.net \
    --cc=edumazet@google.com \
    --cc=f.fainelli@gmail.com \
    --cc=gjb@semihalf.com \
    --cc=hkallweit1@gmail.com \
    --cc=jaz@semihalf.com \
    --cc=kuba@kernel.org \
    --cc=lenb@kernel.org \
    --cc=linux-acpi@vger.kernel.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux@armlinux.org.uk \
    --cc=netdev@vger.kernel.org \
    --cc=olteanv@gmail.com \
    --cc=pabeni@redhat.com \
    --cc=rafael@kernel.org \
    --cc=tn@semihalf.com \
    --cc=upstream@semihalf.com \
    --cc=vivien.didelot@gmail.com \
    /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

all inboxes | Powered by JetHome®