Received: by 2002:a6b:fb09:0:0:0:0:0 with SMTP id h9csp2960089iog; Mon, 20 Jun 2022 08:17:33 -0700 (PDT) X-Google-Smtp-Source: AGRyM1tna3lUyAEj71PYvV6wC4CXkgti1avfNuQQ18Xfu94kazqcaqubZDfBkFuUgn4eoNJ51YiT X-Received: by 2002:a05:6402:51c7:b0:42d:f4ea:c09 with SMTP id r7-20020a05640251c700b0042df4ea0c09mr29553423edd.319.1655738253107; Mon, 20 Jun 2022 08:17:33 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1655738253; cv=none; d=google.com; s=arc-20160816; b=BAk1Wcv3inrl/V8F4qDCfElgxU9iAVx/XlAO5eUFn5+8Ye1/axRd9VRJO1/Gmr9R6Y qjwgH+koNiihs9Ns/8qsOWrEIhjc/UEtoHYNJmbTi+naUky54BiQW00KgeU6e14MbbDS C6I+WgveM6xDOxC2J+1Iwsn9Pxtxr4gsoX/7Bj8zutvkrKZnhp7xaaPIMdREr8TjJERd HVycUBihjEZLCI4morHKPzoG1f3J+LzYrckmcEG/Y0lQLBXWugGenHKhzEHepac0oarH 1SfNySwQu0C2Aq8P7UwW1fmnM6rRbXuskJCJZMwqLHsbnxwLeTDyaO53zNocVnnEt/xL uYHA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:content-transfer-encoding:mime-version :references:in-reply-to:message-id:date:subject:cc:to:from :dkim-signature; bh=WfituUDSg5fEW4dKt2h3fMS4b0IrVjkU8185C8pJjBY=; b=KQ9WD/BBv93quooH7jisKYooKkRs/3w1dew73QACXPtgikq8JmAN16+uw1glWTPf23 1j8olXAx8oloZCyPggKJkbuQaUxc27Ec/2aUSiGrS15WRIoGKhSyOx6S75Q6HQS9eki1 xHejIkdOdsBKqQ5tZ1HtbMda7H6BUHMRnNaprC/qqp/Qag5xZg8nhE7hvma01E2dAUCL Pl7hO102u67upovqvoU6zeoK505MwSUyhi3k8Gy5dxCpwD7+xr4Tp7H8PsklP9qDUnln 9AS27NSXHNwOKu2p60Z57uES2k9X+hWJcdVRSlDl4cJwsQnTa7NkjPf69t28BX8qwcVH Zsmw== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@semihalf.com header.s=google header.b=kFdZRoBh; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Return-Path: Received: from out1.vger.email (out1.vger.email. [2620:137:e000::1:20]) by mx.google.com with ESMTP id n14-20020a05640205ce00b0042e1708c0ebsi12812722edx.579.2022.06.20.08.17.01; Mon, 20 Jun 2022 08:17:33 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) client-ip=2620:137:e000::1:20; Authentication-Results: mx.google.com; dkim=pass header.i=@semihalf.com header.s=google header.b=kFdZRoBh; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S243385AbiFTPOz (ORCPT + 99 others); Mon, 20 Jun 2022 11:14:55 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:40964 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S243368AbiFTPMP (ORCPT ); Mon, 20 Jun 2022 11:12:15 -0400 Received: from mail-lf1-x12b.google.com (mail-lf1-x12b.google.com [IPv6:2a00:1450:4864:20::12b]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id DDC171F637 for ; Mon, 20 Jun 2022 08:02:57 -0700 (PDT) Received: by mail-lf1-x12b.google.com with SMTP id f39so2084503lfv.3 for ; Mon, 20 Jun 2022 08:02:57 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=semihalf.com; s=google; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=WfituUDSg5fEW4dKt2h3fMS4b0IrVjkU8185C8pJjBY=; b=kFdZRoBhFIxJZLPTayXCJlh5xBCUkR1K1zZ2YflpY7c0rNVWSY5swaSK9jMmPGXzxQ 1GqoSBU6NUtXhV/7NpOPU415njrI7EcPXH9XBXd4WeC09TyT7aDShPFqectxf2XnTjKY X3C+gzqVgKqrfcGzRjiq9IsokgayDx9Kp7GcauUWykhbBQlMsWd8EOV4IaSf6cl1JH9m 4LnTKNKhmnC3xGA7mV5LH3e8TIDxFESOVT9cCG43VVnWG699CI5DKudZneoExnyrS4LM ciWgtqOkaSmQjqfXB8SBoVjO9AlBPTrxQOKUvOTYOrQUx0YFbbDI3XM47H1u7DvEwL6s PPxA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=WfituUDSg5fEW4dKt2h3fMS4b0IrVjkU8185C8pJjBY=; b=kuvEqdyp5K3Z/fgy6tYNI/u4yWhpkRoxVIgDOU81zRJHoiSbve2Kzkz1uo0HB38CoP V/F+Wx7zMw/fcM3gSfC7/dpkF28VAmFcB6SiFIb9g/1Ya3SbxunxkJWv18Sz0CvQ6B5T PEn46zSZFgCnCyUfGHx+4s/u1nvW/397695pTx54mNQdsgHdeEWsI07kA+xIUPJiEqmz 7W7Dq92rWJPUE5TlFoAdSQAHxbPG3+WSar/R7YPpobTVzWNgGcev7TbWnSLAKqOTnGvp 2xX73ntkUUnOYTp4o6pqvLDGNybYCK2m0suPM13gRJYOGq0ks+WViMw8V9QxrhOhnBv0 Zi8Q== X-Gm-Message-State: AJIora9sNcBX+68uQ3y+x74/oVN29muqBUX1yIRM2pySX9UQ7kPoXmxK K2IpxubaK4Ebp5gwrSVLyMooYzKav4qzeA== X-Received: by 2002:a05:6512:214d:b0:47f:5a25:ac11 with SMTP id s13-20020a056512214d00b0047f5a25ac11mr7963474lfr.627.1655737376113; Mon, 20 Jun 2022 08:02:56 -0700 (PDT) Received: from gilgamesh.lab.semihalf.net ([83.142.187.85]) by smtp.gmail.com with ESMTPSA id e19-20020a05651236d300b0047f79f7758asm17564lfs.22.2022.06.20.08.02.54 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 20 Jun 2022 08:02:55 -0700 (PDT) From: Marcin Wojtas 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 Message-Id: <20220620150225.1307946-11-mw@semihalf.com> X-Mailer: git-send-email 2.29.0 In-Reply-To: <20220620150225.1307946-1-mw@semihalf.com> References: <20220620150225.1307946-1-mw@semihalf.com> MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Spam-Status: No, score=-2.1 required=5.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,RCVD_IN_DNSWL_NONE, SPF_HELO_NONE,SPF_PASS,T_SCC_BODY_TEXT_LINE autolearn=unavailable autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lindbergh.monkeyblade.net Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org 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 --- 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 */ +#include +#include #include #include #include @@ -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", ®); + if (is_acpi_node(port)) + err = acpi_get_local_address(ACPI_HANDLE_FWNODE(port), ®); + else + err = fwnode_property_read_u32(port, "reg", ®); if (err) { fwnode_handle_put(port); goto out_put_node; -- 2.29.0