From patchwork Mon May 21 13:28:11 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: =?utf-8?b?TWljaGFsIFZva8OhxI0=?= X-Patchwork-Id: 917616 X-Patchwork-Delegate: davem@davemloft.net Return-Path: X-Original-To: patchwork-incoming-netdev@ozlabs.org Delivered-To: patchwork-incoming-netdev@ozlabs.org Authentication-Results: ozlabs.org; spf=none (mailfrom) smtp.mailfrom=vger.kernel.org (client-ip=209.132.180.67; helo=vger.kernel.org; envelope-from=netdev-owner@vger.kernel.org; receiver=) Authentication-Results: ozlabs.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: ozlabs.org; dkim=pass (2048-bit key; unprotected) header.d=gmail.com header.i=@gmail.com header.b="BeN6+RPM"; dkim-atps=neutral Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by ozlabs.org (Postfix) with ESMTP id 40qKPf5NBKz9s37 for ; Mon, 21 May 2018 23:29:26 +1000 (AEST) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1752702AbeEUN3Y (ORCPT ); Mon, 21 May 2018 09:29:24 -0400 Received: from mail-wr0-f195.google.com ([209.85.128.195]:38447 "EHLO mail-wr0-f195.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1752318AbeEUN3P (ORCPT ); Mon, 21 May 2018 09:29:15 -0400 Received: by mail-wr0-f195.google.com with SMTP id 94-v6so16018034wrf.5; Mon, 21 May 2018 06:29:14 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=OyQtEqIRe8N/9OZDWH7vDpJKzhHc1I1WJNKSGlcc2OQ=; b=BeN6+RPMxdKhF8hLQy7d85bbLexWm2lumthDnVRewye+Kr+5evBwOrlyNtGLg+UgA1 ON+RUaY3SGxIz5Bl04m9C2oltllz+7h9Q3Ej4GWKl7uLQC+deRr6e2ZhBBExJL7gYEeu 6OdXjGbKiBlvsDW8AvzEoICrBYzxIUMmJDDIyg0n1EiWH6+gas3qxGnHdsImMpC43QXl dk3vcnMQu6B27xfQWT01R+M5wR/1VcbXxRT//6M+kRkxfOOKe2YLh4lfoQZa6Y/GiSlo 40Sk0zdTlhwhXkjJFnUssxFYIUgio2M0hMQvq0hnoQq50hoPlXTrONueKVwdSDqA98KZ 6iSw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=OyQtEqIRe8N/9OZDWH7vDpJKzhHc1I1WJNKSGlcc2OQ=; b=dUpZOXtaCVRs22w0bGmfx8IlwxoMSrs1/Qmzw3IYqbH7BcxwehvQXtsffAvLhjg0uV yyFgH33MhXXM1j5VOmWKCSG1uFeqEQoTcKhCQ5+/Id0pvHIbpKpb8bARHAqTu3i44JZR Uks7Aox3u3NQZafy97GzfJVDyTx0M38YNkcIT2NSgAI+OfSoNKPvYThwwLNhG02ZfR5i OTRe78f8aKlYBXhLzAmWHWon5zRCgTaTSzcHHaGHbkbgtI7TC7+sw8/r4Eu8shyTGq8D 1avi1SnngycadxTwQMtZQ/2w30qOUPGXn/VuJSSs0DipPlx/T03DlnUrc4kb9CXbxJky V5PQ== X-Gm-Message-State: ALKqPwcJvCBgGZVWgMLIZAU7bVxLf5oYhwugHkIYGj2jQjpdKGCBhfZM +Uy4ufmrbnBmf4hKjeQ8O/+B4AYv X-Google-Smtp-Source: AB8JxZoEF8R09X/tvfVltSORD1CgI4Ker+KQmr8zlXoU80WDY/Z/9GgakV9oihkwAFAKwfJDwDHfSw== X-Received: by 2002:adf:9ae5:: with SMTP id a92-v6mr14776348wrc.180.1526909353082; Mon, 21 May 2018 06:29:13 -0700 (PDT) Received: from iota-build.ysoft.local ([89.24.100.190]) by smtp.gmail.com with ESMTPSA id 32-v6sm2402899wrf.33.2018.05.21.06.29.11 (version=TLS1_2 cipher=ECDHE-RSA-AES128-SHA bits=128/128); Mon, 21 May 2018 06:29:12 -0700 (PDT) From: "=?UTF-8?q?Michal=20Vok=C3=A1=C4=8D?=" X-Google-Original-From: =?utf-8?b?TWljaGFsIFZva8OhxI0=?= To: netdev@vger.kernel.org, michal.vokac@ysoft.com Cc: linux-kernel@vger.kernel.org, devicetree@vger.kernel.org, f.fainelli@gmail.com, vivien.didelot@savoirfairelinux.com, andrew@lunn.ch, mark.rutland@arm.com, robh+dt@kernel.org, davem@davemloft.net Subject: [PATCH net-next 5/7] net: dsa: qca8k: Allow overwriting CPU port setting Date: Mon, 21 May 2018 15:28:11 +0200 Message-Id: <1526909293-56377-6-git-send-email-michal.vokac@ysoft.com> X-Mailer: git-send-email 2.1.4 In-Reply-To: <1526909293-56377-1-git-send-email-michal.vokac@ysoft.com> References: <1526909293-56377-1-git-send-email-michal.vokac@ysoft.com> MIME-Version: 1.0 Sender: netdev-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: netdev@vger.kernel.org Implement adjust_link function that allows to overwrite default CPU port setting using fixed-link device tree subnode. Signed-off-by: Michal Vokáč Reviewed-by: Andrew Lunn Reviewed-by: Florian Fainelli --- drivers/net/dsa/qca8k.c | 43 +++++++++++++++++++++++++++++++++++++++++++ drivers/net/dsa/qca8k.h | 1 + 2 files changed, 44 insertions(+) diff --git a/drivers/net/dsa/qca8k.c b/drivers/net/dsa/qca8k.c index 14a108b38..7eba987 100644 --- a/drivers/net/dsa/qca8k.c +++ b/drivers/net/dsa/qca8k.c @@ -636,6 +636,47 @@ qca8k_setup(struct dsa_switch *ds) return 0; } +static void +qca8k_adjust_link(struct dsa_switch *ds, int port, struct phy_device *phy) +{ + struct qca8k_priv *priv = ds->priv; + u32 reg; + + /* Force fixed-link setting for CPU port, skip others. */ + if (!phy_is_pseudo_fixed_link(phy)) + return; + + /* Set port speed */ + switch (phy->speed) { + case 10: + reg = QCA8K_PORT_STATUS_SPEED_10; + break; + case 100: + reg = QCA8K_PORT_STATUS_SPEED_100; + break; + case 1000: + reg = QCA8K_PORT_STATUS_SPEED_1000; + break; + default: + dev_dbg(priv->dev, "port%d link speed %dMbps not supported.\n", + port, phy->speed); + return; + } + + /* Set duplex mode */ + if (phy->duplex == DUPLEX_FULL) + reg |= QCA8K_PORT_STATUS_DUPLEX; + + /* Force flow control */ + if (dsa_is_cpu_port(ds, port)) + reg |= QCA8K_PORT_STATUS_RXFLOW | QCA8K_PORT_STATUS_TXFLOW; + + /* Force link down before changing MAC options */ + qca8k_port_set_status(priv, port, 0); + qca8k_write(priv, QCA8K_REG_PORT_STATUS(port), reg); + qca8k_port_set_status(priv, port, 1); +} + static int qca8k_phy_read(struct dsa_switch *ds, int phy, int regnum) { @@ -909,6 +950,7 @@ qca8k_get_tag_protocol(struct dsa_switch *ds, int port) static const struct dsa_switch_ops qca8k_switch_ops = { .get_tag_protocol = qca8k_get_tag_protocol, .setup = qca8k_setup, + .adjust_link = qca8k_adjust_link, .get_strings = qca8k_get_strings, .phy_read = qca8k_phy_read, .phy_write = qca8k_phy_write, @@ -942,6 +984,7 @@ qca8k_sw_probe(struct mdio_device *mdiodev) return -ENOMEM; priv->bus = mdiodev->bus; + priv->dev = &mdiodev->dev; /* read the switches ID register */ id = qca8k_read(priv, QCA8K_REG_MASK_CTRL); diff --git a/drivers/net/dsa/qca8k.h b/drivers/net/dsa/qca8k.h index 5bda165..613fe5c5 100644 --- a/drivers/net/dsa/qca8k.h +++ b/drivers/net/dsa/qca8k.h @@ -167,6 +167,7 @@ struct qca8k_priv { struct ar8xxx_port_status port_sts[QCA8K_NUM_PORTS]; struct dsa_switch *ds; struct mutex reg_mutex; + struct device *dev; }; struct qca8k_mib_desc {