Received: by 2002:a05:6a10:206:0:0:0:0 with SMTP id 6csp3799937pxj; Tue, 11 May 2021 12:07:13 -0700 (PDT) X-Google-Smtp-Source: ABdhPJwhCfev6YKLC/iHJWlRrudbIdI2enJA2AV+JCvGwPrQKpuPdORT9X3YGrEN3dnzfmR3+nla X-Received: by 2002:a17:907:a076:: with SMTP id ia22mr33023220ejc.233.1620760032953; Tue, 11 May 2021 12:07:12 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1620760032; cv=none; d=google.com; s=arc-20160816; b=ppPQ1DESg0acWdlRNlx27IHANuO8Aj6iECmQOLLJW6/8i11F8LtRZHTA3hrCKtlMD1 trGl0n5fF0evm+R2sXGDeVy1/tfmhH7tSBeT3nzvfUf813gQxF46+IyQyNowwSOhs4Ve 9Xy5jRV583t8vsZzOo0p/GtRdp0LiliqtgKyg92IT2pCDNMplyg13oW/8JhgEizDb9F/ 0Y4AdkYZQFROjeS7AHDEyDdvCk+1A5FSl8vFT7KnXGSrdGNclSe6mWGuH3CJMv8fHeCc SsflZwE3JIfKufhEd9bq6eXLSMAG2E9Ki50KwxA1H+/+wEbWVgWL9XosJ+J/J4XFmDI1 C59w== 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; bh=ZX9EtVHLN1jkvxCUKlf0ByTFh7oEXHIDKfBWOVmEy3k=; b=GTPzF6zgQG9FqdrdpEo7o39a4L6iP8akOshvjF8/zvk5/gMIXzvKSqPYtPJChgM+yV 8RALhU91V2kb9JlIYpGQFR2wUAmY0FGLT6ygAOC6G2POZ4j7qdLKkDat1wlOW/f5ed8z KM9CQekaZfjshq0HuQYf7sN4RBsDi3gRIr82KuLYEpT20g4L5HO8MqX0acDm45EViHsL 8HzTG53VMtmHi3UbWyVFuOL87ZvpTJWqCg/FgnI5Cr/gg2Fbu2AqW1m1Lcb4i1JRmI8U x+/sB5pf6xR/OxXEjtNZPTQBUVRc9MkDu8Wka9oAImsrRDxldLwTD7t1USkJJp9CBTvs 0XBg== ARC-Authentication-Results: i=1; mx.google.com; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Return-Path: Received: from vger.kernel.org (vger.kernel.org. [23.128.96.18]) by mx.google.com with ESMTP id r18si16955920edd.372.2021.05.11.12.06.48; Tue, 11 May 2021 12:07:12 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) client-ip=23.128.96.18; Authentication-Results: mx.google.com; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S232214AbhEKTGy (ORCPT + 99 others); Tue, 11 May 2021 15:06:54 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:55568 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S231993AbhEKTGr (ORCPT ); Tue, 11 May 2021 15:06:47 -0400 Received: from plekste.mt.lv (bute.mt.lv [IPv6:2a02:610:7501:2000::195]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 1BC3CC061760; Tue, 11 May 2021 12:05:39 -0700 (PDT) Received: from [2a02:610:7501:feff:1ccf:41ff:fe50:18b9] (helo=localhost.localdomain) by plekste.mt.lv with esmtpsa (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.89) (envelope-from ) id 1lgXhA-0004HR-Tb; Tue, 11 May 2021 22:05:28 +0300 From: Gatis Peisenieks To: chris.snook@gmail.com, davem@davemloft.net, kuba@kernel.org, hkallweit1@gmail.com, jesse.brandeburg@intel.com, dchickles@marvell.com, tully@mikrotik.com, eric.dumazet@gmail.com Cc: netdev@vger.kernel.org, linux-kernel@vger.kernel.org, Gatis Peisenieks Subject: [PATCH net-next 1/4] atl1c: show correct link speed on Mikrotik 10/25G NIC Date: Tue, 11 May 2021 22:05:15 +0300 Message-Id: <20210511190518.8901-2-gatis@mikrotik.com> X-Mailer: git-send-email 2.31.1 In-Reply-To: <20210511190518.8901-1-gatis@mikrotik.com> References: <20210511190518.8901-1-gatis@mikrotik.com> MIME-Version: 1.0 Content-Transfer-Encoding: 8bit Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org The new Mikrotik 10/25G NIC maintains compatibility with existing atl1c driver. However it does have new features. This defines some new register offsets, code for identifying the new type of NIC and correct speed detection for the NIC. Signed-off-by: Gatis Peisenieks --- drivers/net/ethernet/atheros/atl1c/atl1c.h | 1 + drivers/net/ethernet/atheros/atl1c/atl1c_hw.c | 9 +++++++++ drivers/net/ethernet/atheros/atl1c/atl1c_hw.h | 7 +++++++ drivers/net/ethernet/atheros/atl1c/atl1c_main.c | 4 ++++ 4 files changed, 21 insertions(+) diff --git a/drivers/net/ethernet/atheros/atl1c/atl1c.h b/drivers/net/ethernet/atheros/atl1c/atl1c.h index 28ae5c16831e..3fda7eb3bd69 100644 --- a/drivers/net/ethernet/atheros/atl1c/atl1c.h +++ b/drivers/net/ethernet/atheros/atl1c/atl1c.h @@ -289,6 +289,7 @@ enum atl1c_nic_type { athr_l2c_b2, athr_l1d, athr_l1d_2, + athr_mt, }; enum atl1c_trans_queue { diff --git a/drivers/net/ethernet/atheros/atl1c/atl1c_hw.c b/drivers/net/ethernet/atheros/atl1c/atl1c_hw.c index 140358dcf61e..ddb9442416cd 100644 --- a/drivers/net/ethernet/atheros/atl1c/atl1c_hw.c +++ b/drivers/net/ethernet/atheros/atl1c/atl1c_hw.c @@ -648,6 +648,15 @@ int atl1c_get_speed_and_duplex(struct atl1c_hw *hw, u16 *speed, u16 *duplex) int err; u16 phy_data; + if (hw->nic_type == athr_mt) { + u32 spd; + + AT_READ_REG(hw, REG_MT_SPEED, &spd); + *speed = spd; + *duplex = FULL_DUPLEX; + return 0; + } + /* Read PHY Specific Status Register (17) */ err = atl1c_read_phy_reg(hw, MII_GIGA_PSSR, &phy_data); if (err) diff --git a/drivers/net/ethernet/atheros/atl1c/atl1c_hw.h b/drivers/net/ethernet/atheros/atl1c/atl1c_hw.h index ce1a123dce2c..73cbc049a63e 100644 --- a/drivers/net/ethernet/atheros/atl1c/atl1c_hw.h +++ b/drivers/net/ethernet/atheros/atl1c/atl1c_hw.h @@ -764,6 +764,13 @@ void atl1c_post_phy_linkchg(struct atl1c_hw *hw, u16 link_speed); #define REG_DEBUG_DATA0 0x1900 #define REG_DEBUG_DATA1 0x1904 +#define REG_MT_MAGIC 0x1F00 +#define REG_MT_MODE 0x1F04 +#define REG_MT_SPEED 0x1F08 +#define REG_MT_VERSION 0x1F0C + +#define MT_MAGIC 0xaabb1234 + #define L1D_MPW_PHYID1 0xD01C /* V7 */ #define L1D_MPW_PHYID2 0xD01D /* V1-V6 */ #define L1D_MPW_PHYID3 0xD01E /* V8 */ diff --git a/drivers/net/ethernet/atheros/atl1c/atl1c_main.c b/drivers/net/ethernet/atheros/atl1c/atl1c_main.c index c6263cf8d3c0..28c30d5288e4 100644 --- a/drivers/net/ethernet/atheros/atl1c/atl1c_main.c +++ b/drivers/net/ethernet/atheros/atl1c/atl1c_main.c @@ -644,6 +644,7 @@ static int atl1c_alloc_queues(struct atl1c_adapter *adapter) static void atl1c_set_mac_type(struct atl1c_hw *hw) { + u32 magic; switch (hw->device_id) { case PCI_DEVICE_ID_ATTANSIC_L2C: hw->nic_type = athr_l2c; @@ -662,6 +663,9 @@ static void atl1c_set_mac_type(struct atl1c_hw *hw) break; case PCI_DEVICE_ID_ATHEROS_L1D_2_0: hw->nic_type = athr_l1d_2; + AT_READ_REG(hw, REG_MT_MAGIC, &magic); + if (magic == MT_MAGIC) + hw->nic_type = athr_mt; break; default: break; -- 2.31.1