From patchwork Tue May 22 11:16:30 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: 918174 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="ofo2u+4c"; dkim-atps=neutral Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by ozlabs.org (Postfix) with ESMTP id 40qtTM49X9z9s5w for ; Tue, 22 May 2018 21:19:35 +1000 (AEST) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1751612AbeEVLTW (ORCPT ); Tue, 22 May 2018 07:19:22 -0400 Received: from mail-wm0-f68.google.com ([74.125.82.68]:53238 "EHLO mail-wm0-f68.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1751371AbeEVLRs (ORCPT ); Tue, 22 May 2018 07:17:48 -0400 Received: by mail-wm0-f68.google.com with SMTP id w194-v6so30689234wmf.2; Tue, 22 May 2018 04:17:47 -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=SFG3SVttvE0WgumHrfH5E2YNq4EhZACLR8IXGBirM4g=; b=ofo2u+4cd9+fwdOtKT+4FRrEOrosHkaWyzghjXfE0aITkR69MaUIwGWCDoh++A6kxJ coHIu+smusFN+wt/oXCWQAvO7wukP49o6ygJR60BC+B7AChXv3KgHoDUt86LDF9d+ABZ GrgPoaxO5bN1ONoyGU+zwHUr22rpjH377PSE9mFO6JTnP0h7fKVtgFD8KBnrDEhwjmXv /MDFehLWB0YNbJmoXveoYxFHeh06T3wTtc2jPpbX1J93ce3j11I3/A5Ytb4ZiQl+QovU hdFJR74ZlsjTc9A6E/caPHd56e4Do0B+M8EdsLY3tunz78q5um7mgGKeYwd80bBZiPDM ycAA== 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=SFG3SVttvE0WgumHrfH5E2YNq4EhZACLR8IXGBirM4g=; b=E+iOrDE5Bit0D2cwFVVgeKDi3vrrlEsWx61pWHU22subocUhVz2QgFk/0ruQHIg9nk hAM2Y6e7MTR6d2qbouNtNhKC6K5Unmrc+52LM4RTq++98pCXAmx+NHQs4R/LQGQG5XSw 7yhfc3o+EMBEQcusu53/thFrbqawNFLSS1R60HLybuR4T3LwAYq/BVABymi5pLj+xCGC RD+LLE4wEHbLohX2ik6RXzRoMI1PfzJzjw2uuiW6V0N+MyTj2MDx+QySGfSrT/tZRuyd N7kWyMP/9Kl7lwju4vTOHCvW4VzEGL0Kznw/boPvYPskojS45baEqZY5kiZE05nOSBPj 4Pww== X-Gm-Message-State: ALKqPwcU1K5zMc6oVNPopDfRfC8jJdkGwzZF3JB8XS5CnuqQ8gatp50a Q0t+OkPAR0mc++FsE/nnOFlEGDbF X-Google-Smtp-Source: AB8JxZoZMkaGBOlIiUoFK8DvXwXFVidBb2Ggz44CvAfzDpf4S3o9otP9D9BimDVR8CIyaRyjaPQV4A== X-Received: by 2002:a1c:b943:: with SMTP id j64-v6mr815700wmf.30.1526987866857; Tue, 22 May 2018 04:17:46 -0700 (PDT) Received: from iota-build.ysoft.local ([89.24.100.190]) by smtp.gmail.com with ESMTPSA id z2-v6sm15146747wmg.46.2018.05.22.04.17.45 (version=TLS1_2 cipher=ECDHE-RSA-AES128-SHA bits=128/128); Tue, 22 May 2018 04:17:46 -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 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, michal.vokac@ysoft.com Subject: [PATCH net-next v2 5/7] net: dsa: qca8k: Allow overwriting CPU port setting Date: Tue, 22 May 2018 13:16:30 +0200 Message-Id: <1526987792-56861-6-git-send-email-michal.vokac@ysoft.com> X-Mailer: git-send-email 2.1.4 In-Reply-To: <1526987792-56861-1-git-send-email-michal.vokac@ysoft.com> References: <1526987792-56861-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 --- Changes in v2: - Add "Reviewed-by" tags from Andrew and Florian. 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 {