From patchwork Wed May 23 06:20:22 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: 918750 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="PiSQyitI"; dkim-atps=neutral Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by ozlabs.org (Postfix) with ESMTP id 40rMrp69tJz9s1b for ; Wed, 23 May 2018 16:23:06 +1000 (AEST) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1754162AbeEWGWe (ORCPT ); Wed, 23 May 2018 02:22:34 -0400 Received: from mail-wm0-f65.google.com ([74.125.82.65]:40478 "EHLO mail-wm0-f65.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1754031AbeEWGVT (ORCPT ); Wed, 23 May 2018 02:21:19 -0400 Received: by mail-wm0-f65.google.com with SMTP id j5-v6so5769046wme.5; Tue, 22 May 2018 23:21:18 -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=5m06R3NzmOlBgO7YBw8cPs4EBjTdBSGlSP09U8/hm8M=; b=PiSQyitIaFWda8d1CUlO8gshAU5v6/jEefThWgFnpBlfDfgzkVWPSbLRGp7MdisPFi lTfEnEhfkf94zfoyflUYPd2GmzPNlpMDvlaDGrMvHi8bhN8Bop6jS1Ck6dM2sUT0hhLz KZPSinxCBLEdHD/+N7EpcFzolP+Wbz3imVwFlsUB7B5XG0cQRkZDbpKHGUu9PeoMjbja nyz4GMhB3zfSvQzvMd+1bN3+tl/gS/qfO6Yl4lcohcebYlit18PW/7Iw0rSw/QHnz2Kx izwkeby5PqzTomhod7kLQdalHGxqHAYYgHO5hoE3pZ5qL6bRtfzKxIHUtI3t9e7V6ar2 Qfzw== 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=5m06R3NzmOlBgO7YBw8cPs4EBjTdBSGlSP09U8/hm8M=; b=r+P1hgnDG4MwqhQ9ZyiMEZ0C1aZKztsLh2vvGCKmEWtfVioH5Sz7GSfcpdCglnvcK+ bwppE0HfXVeNYm+HGJpq9xAzSyuCyvqlYuhrrw89BYvbfhKmqVjJRVpwx0Dm1UmD792g EVkSixhw3FyVpT41dKujSCom7YGB69jytURwjugd5LTC4L3ecxHDyloG6lWBGTTGZmlm Q3MX1DmTO0SVTLfnbdkiVUDPwXt7ndWyc+glchFSzdoAihA+S74x6IiZUdjUCC32sNf0 +w2dWr7/s+VN9FBHAmKXOD50pKGydEHQ2Jn8+GQi1Fci8vdTDbWM/utPmZfRlLH3iQ3y CQ6w== X-Gm-Message-State: ALKqPwc69ugMhXHPIegKkr3HmbPBKaghSRjJODMQtOWg9luJKVID9NpA vFf546FHVTzxOM9GpUBGav57YYiI X-Google-Smtp-Source: AB8JxZqsX/gh6816Z/i7x7khQO0lUtzAbRzgTJ/SSnGHW79tZh/weRUMSOdK9BeL61gkhvxnT4TG2Q== X-Received: by 2002:a1c:e006:: with SMTP id x6-v6mr2917066wmg.80.1527056477933; Tue, 22 May 2018 23:21:17 -0700 (PDT) Received: from vokac-latitude.ysoft.local ([89.24.100.190]) by smtp.gmail.com with ESMTPSA id 38-v6sm43012912wry.61.2018.05.22.23.21.16 (version=TLS1_2 cipher=ECDHE-RSA-AES128-SHA bits=128/128); Tue, 22 May 2018 23:21:17 -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 v3 5/7] net: dsa: qca8k: Allow overwriting CPU port setting Date: Wed, 23 May 2018 08:20:22 +0200 Message-Id: <1527056424-14528-6-git-send-email-michal.vokac@ysoft.com> X-Mailer: git-send-email 2.7.4 In-Reply-To: <1527056424-14528-1-git-send-email-michal.vokac@ysoft.com> References: <1527056424-14528-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 v3: - none 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 {