Received: by 2002:a25:8b91:0:0:0:0:0 with SMTP id j17csp605702ybl; Fri, 10 Jan 2020 03:55:49 -0800 (PST) X-Google-Smtp-Source: APXvYqxxs8WK6oAsjKzKBWArOZZ3p4pJzSev8Ny2Friq7WJd5tRAWLsGLYxi2u2Id/h86kzjN5D8 X-Received: by 2002:aca:48cd:: with SMTP id v196mr1972628oia.102.1578657349105; Fri, 10 Jan 2020 03:55:49 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1578657349; cv=none; d=google.com; s=arc-20160816; b=S9WsjLsv7MI+F7I/K4SOHjFhnI7vjKAE7S++XLqNAZji6MN3LVxGU0NzzKXdhRZq7a KWs5UOjJIChbH0EUyAXuvNMes0o4Smu7Q/zyYXDHz+aBw8DOKy+82hmQiWk67rA8hFJ/ fAJf/oYleZKame94O3VwLDh6Qp4Ks2m11E6glwgr9gus3uCiPqzvvD8Q9T9ziEbdEAWM DEI0ngncFmSVm4Y5f90nDOQXss9UYbaOEv401ZlljAHsLvBl/WHUwZ9xm68NF6eWSR+l PT7yaSslb6XKJQrP1rIxoeANaTUYLkxagssitRGX+E21lLfQtnMTwFlIoA+fMt8N25y5 SUvQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:references:in-reply-to:message-id:date :subject:cc:to:from; bh=S6CtAC1evVyxXv+Z5EOi3HLmp/xShCF8HmRl+yUBhTI=; b=Z2Y0hSX7UIgyfDP3dEzsB9fzRU5xI5kxQ5qtmKXnhIG1l3zzJs0iIZoN3Bwtk5nwi+ gXT3B8cfYTaaxns/9wLEjs4VDGlXv9AGjC6Bw9JeOrWlc+ilWnflmGpA8tRIO1g9I4Ij 2jwLygez1J6IH2TV9cSiwD9O6pXOwxsFmf3i1brOsytRzjacPdvM7wb5a9qwcb6P06Z5 VrVehpeNZ8L8szs5j/VeIF3/Cj4/Kg6DZLFvt3jkqRGHQrkDKHayxAI+34wavV+kxRrA R4v46aX+cU2y8pMTpa3hze3sqJ3gGibtxu6Lkc7Df4bki3560hAcRWDpOXoXWH+kYjev Qq0A== ARC-Authentication-Results: i=1; mx.google.com; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id g16si1093346otj.79.2020.01.10.03.55.37; Fri, 10 Jan 2020 03:55:49 -0800 (PST) Received-SPF: pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) client-ip=209.132.180.67; Authentication-Results: mx.google.com; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1728118AbgAJLye (ORCPT + 99 others); Fri, 10 Jan 2020 06:54:34 -0500 Received: from foss.arm.com ([217.140.110.172]:43150 "EHLO foss.arm.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1728101AbgAJLyd (ORCPT ); Fri, 10 Jan 2020 06:54:33 -0500 Received: from usa-sjc-imap-foss1.foss.arm.com (unknown [10.121.207.14]) by usa-sjc-mx-foss1.foss.arm.com (Postfix) with ESMTP id B75DB13A1; Fri, 10 Jan 2020 03:54:32 -0800 (PST) Received: from donnerap.arm.com (donnerap.cambridge.arm.com [10.1.197.44]) by usa-sjc-imap-foss1.foss.arm.com (Postfix) with ESMTPSA id 97D9A3F534; Fri, 10 Jan 2020 03:54:31 -0800 (PST) From: Andre Przywara To: "David S . Miller" , Radhey Shyam Pandey Cc: Michal Simek , Robert Hancock , netdev@vger.kernel.org, linux-arm-kernel@lists.infradead.org, linux-kernel@vger.kernel.org Subject: [PATCH 07/14] net: axienet: Fix SGMII support Date: Fri, 10 Jan 2020 11:54:08 +0000 Message-Id: <20200110115415.75683-8-andre.przywara@arm.com> X-Mailer: git-send-email 2.17.1 In-Reply-To: <20200110115415.75683-1-andre.przywara@arm.com> References: <20200110115415.75683-1-andre.przywara@arm.com> Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org With SGMII, the MAC and the PHY can negotiate the link speed between themselves, without the host needing to mediate between them. Linux recognises this, and will call phylink's mac_config with the speed member set to SPEED_UNKNOWN (-1). Currently the axienet driver will bail out and complain about an unsupported link speed. Teach axienet's mac_config callback to leave the MAC's speed setting alone if the requested speed is SPEED_UNKNOWN. This fixes axienet operation when the hardware is using SGMII. Signed-off-by: Andre Przywara --- .../net/ethernet/xilinx/xilinx_axienet_main.c | 21 ++++++++++++------- 1 file changed, 14 insertions(+), 7 deletions(-) diff --git a/drivers/net/ethernet/xilinx/xilinx_axienet_main.c b/drivers/net/ethernet/xilinx/xilinx_axienet_main.c index 8d2b67cbecf9..e83c7b005f50 100644 --- a/drivers/net/ethernet/xilinx/xilinx_axienet_main.c +++ b/drivers/net/ethernet/xilinx/xilinx_axienet_main.c @@ -1512,20 +1512,21 @@ static void axienet_mac_config(struct phylink_config *config, unsigned int mode, { struct net_device *ndev = to_net_dev(config->dev); struct axienet_local *lp = netdev_priv(ndev); - u32 emmc_reg, fcc_reg; + u32 fcc_reg, speed_reg = ~0; - emmc_reg = axienet_ior(lp, XAE_EMMC_OFFSET); - emmc_reg &= ~XAE_EMMC_LINKSPEED_MASK; switch (state->speed) { + case SPEED_UNKNOWN: + /* Keep the current MAC speed setting. Used for SGMII. */ + break; case SPEED_1000: - emmc_reg |= XAE_EMMC_LINKSPD_1000; + speed_reg = XAE_EMMC_LINKSPD_1000; break; case SPEED_100: - emmc_reg |= XAE_EMMC_LINKSPD_100; + speed_reg = XAE_EMMC_LINKSPD_100; break; case SPEED_10: - emmc_reg |= XAE_EMMC_LINKSPD_10; + speed_reg = XAE_EMMC_LINKSPD_10; break; default: dev_err(&ndev->dev, @@ -1533,7 +1534,13 @@ static void axienet_mac_config(struct phylink_config *config, unsigned int mode, break; } - axienet_iow(lp, XAE_EMMC_OFFSET, emmc_reg); + if (speed_reg != ~0) { + u32 emmc_reg = axienet_ior(lp, XAE_EMMC_OFFSET); + + emmc_reg &= ~XAE_EMMC_LINKSPEED_MASK; + emmc_reg |= speed_reg; + axienet_iow(lp, XAE_EMMC_OFFSET, emmc_reg); + } fcc_reg = axienet_ior(lp, XAE_FCC_OFFSET); if (state->pause & MLO_PAUSE_TX) -- 2.17.1