From patchwork Thu Feb 21 14:03:31 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Sudarsana Reddy Kalluru X-Patchwork-Id: 1046193 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=fail (p=none dis=none) header.from=marvell.com Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by ozlabs.org (Postfix) with ESMTP id 444x8M4J67z9s4Y for ; Fri, 22 Feb 2019 01:05:55 +1100 (AEDT) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1727939AbfBUOFx (ORCPT ); Thu, 21 Feb 2019 09:05:53 -0500 Received: from mail-eopbgr720059.outbound.protection.outlook.com ([40.107.72.59]:36138 "EHLO NAM05-CO1-obe.outbound.protection.outlook.com" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S1725858AbfBUOFx (ORCPT ); Thu, 21 Feb 2019 09:05:53 -0500 Received: from DM5PR07CA0032.namprd07.prod.outlook.com (10.168.109.18) by BY1PR0701MB1925.namprd07.prod.outlook.com (10.162.143.158) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.1643.16; Thu, 21 Feb 2019 14:05:48 +0000 Received: from DM3NAM05FT022.eop-nam05.prod.protection.outlook.com (2a01:111:f400:7e51::202) by DM5PR07CA0032.outlook.office365.com (2603:10b6:3:16::18) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384) id 15.20.1643.16 via Frontend Transport; Thu, 21 Feb 2019 14:05:48 +0000 Authentication-Results: spf=fail (sender IP is 199.233.58.38) smtp.mailfrom=marvell.com; vger.kernel.org; dkim=none (message not signed) header.d=none;vger.kernel.org; dmarc=fail action=none header.from=marvell.com; Received-SPF: Fail (protection.outlook.com: domain of marvell.com does not designate 199.233.58.38 as permitted sender) receiver=protection.outlook.com; client-ip=199.233.58.38; helo=CAEXCH02.caveonetworks.com; Received: from CAEXCH02.caveonetworks.com (199.233.58.38) by DM3NAM05FT022.mail.protection.outlook.com (10.152.98.132) with Microsoft SMTP Server (version=TLS1_0, cipher=TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA) id 15.20.1665.5 via Frontend Transport; Thu, 21 Feb 2019 14:05:47 +0000 Received: from dut1171.mv.qlogic.com (10.112.88.18) by CAEXCH02.caveonetworks.com (10.67.98.110) with Microsoft SMTP Server (TLS) id 14.2.347.0; Thu, 21 Feb 2019 06:03:35 -0800 Received: from dut1171.mv.qlogic.com (localhost [127.0.0.1]) by dut1171.mv.qlogic.com (8.14.7/8.14.7) with ESMTP id x1LE3XDC024156; Thu, 21 Feb 2019 06:03:33 -0800 Received: (from root@localhost) by dut1171.mv.qlogic.com (8.14.7/8.14.7/Submit) id x1LE3XJP024155; Thu, 21 Feb 2019 06:03:33 -0800 From: Sudarsana Reddy Kalluru To: CC: , , Subject: [PATCH net-next 1/1] qed: Read device port count from the shmem Date: Thu, 21 Feb 2019 06:03:31 -0800 Message-ID: <20190221140331.24119-1-skalluru@marvell.com> X-Mailer: git-send-email 2.12.0 MIME-Version: 1.0 X-EOPAttributedMessage: 0 X-Matching-Connectors: 131952315483585605; (abac79dc-c90b-41ba-8033-08d666125e47); (abac79dc-c90b-41ba-8033-08d666125e47) X-Forefront-Antispam-Report: CIP:199.233.58.38; IPV:CAL; CTRY:US; EFV:NLI; SFV:NSPM; SFS:(10009020)(979002)(136003)(396003)(39860400002)(376002)(346002)(2980300002)(1109001)(1110001)(339900001)(199004)(189003)(51416003)(5660300002)(80596001)(8936002)(36906005)(47776003)(68736007)(26005)(8676002)(81156014)(1076003)(14444005)(106466001)(50466002)(105606002)(69596002)(356004)(42186006)(81166006)(2351001)(85426001)(16586007)(498600001)(6862004)(87636003)(26826003)(305945005)(48376002)(4326008)(2906002)(2616005)(486006)(316002)(126002)(476003)(50226002)(336012)(54906003)(107886003)(97736004)(36756003)(86362001)(53936002)(969003)(989001)(999001)(1009001)(1019001); DIR:OUT; SFP:1101; SCL:1; SRVR:BY1PR0701MB1925; H:CAEXCH02.caveonetworks.com; FPR:; SPF:Fail; LANG:en; PTR:InfoDomainNonexistent; A:1; MX:1; X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: f3a99635-2e9c-44d8-a83c-08d69805ae1a X-Microsoft-Antispam: BCL:0; PCL:0; RULEID:(2390118)(7020095)(5600110)(711020)(4605104)(2017052603328); SRVR:BY1PR0701MB1925; X-MS-TrafficTypeDiagnostic: BY1PR0701MB1925: X-Microsoft-Antispam-PRVS: X-Forefront-PRVS: 09555FB1AD X-Microsoft-Exchange-Diagnostics: 1; BY1PR0701MB1925; 23:Hl4HevC38UfNMoytrfarEEKWonBuvcDjemXQPWT+dTjH+Y0TW+1wuVIrlxePvBfsVAQdA3u6NSpHETfO6JfwhXl8evFJcMeHAku8wpkVeqgppC8WMv9JvFdhM2oYaukz+nNhRuQxjvYV+TKVn0AiYlXPflk3nUdqzuac8ChsCLOv9GIwsa6VycMeA4PR0sp/a3ZN/icuEJZa8hsxzwIGx+eUzpBL5r2p/k4vRm5YntjVA5WeUIJ/U1PWN+5P35Ly8wjg7Axa0FCUDV9Cue4yDjaw3pf0l/Uh310AFv7y6c27+L2K14QvATqZiG3MNPneHX7WgN5QhVb0Q+gExHknD7oDYc1D5/FThnfKl23Om8Yer+mshxV3aBEB95R4jZ22Q+bXPGUfF+Qn0nr6bG/J/BcdpphM4SE6tX6zmqShVgc/5DR9JkTeCDbjH4vVJhvC/SKwT72JBRLISUJMKLEW1l0IU+dT4T7nyPA12nF6tbwb5Y8YzLErx55FRfJyxEzVPIWqCp9WE9Ha2zhM2fmAKSfruMTn74aXvjjhCjRyPohbpDGolPWqf8Pn8vxvDr4A92ZuvG/syXlrn+4FsVaDlP3VjNbi6bLsm6BURjG1rXG6dNsRT6simwW9SVeiknDjtPBZfNfxIeJ3fJbLM6Gtk4HD2tZTXb8W9HGFq6esOn7Sk4zSW3O5fH4Jh8O6QEDTS64V3hBkmdtH0uclsKjWUHkgyi9fVbv7xez5yF8GCX+QH7FfuuyK8SD2ufl0tqXnKNZsDdfiz8koLBKg/m8hG+AGxntmlG9odo84qcLBJtujaWIAdSW4w8opvUCnUxb/1Zcyfzu7Vsj60fm8u++fLtnR8MMvr1vWX3Yrgyt6QnOLHnHD550IgDNzN5oy14Ylv6aPuo95WW0OhROqEDTQFrfdfqExOkuBCivMa+HXnkudh5LHHdKDLm7AvGtMu40TQWbvTLfpV1cW7MNNRezzggGhOKAO2VdsnMxCXyubkKZNEvwvcunLNrJ/GPi8u1IlH3NL5yXx4rMlIUUTRodf9kqv9q3GoI7515lZQTZmXpMRspSf6MgzOkkQ7ej0cgt/05JgzMC5J9EkVwjxaZPUG4H2gaX4wV2Ps9IPNx9tBaWs3QT0mZb+zEZb0HWoix/vLSsYcULabcuqdhX3ex1RWxAdcwWGMVaDOo6H3ZqfQ++qqM1esaYc94uiqBjs97vj1h1muJ4KvxWHR6urKVXWLi+gAZyKiwIJ+OQED6Ga8hChR9So6x9Yse4T4CGTT8F4va2J3Qm39oRpb4J6BrbUyE6G7MmLj1Uv2TLCQeLeuEg= X-Microsoft-Antispam-Message-Info: dK65Z0JcckCwXuw1FqpPDaqIs5gq7k12K0Gip1BR4vcIHVa+UczZorjKu93ce1iXkwK2Y3mAaOWBlQrYcNlip4YG4zzZPgOjg58MCv32j1ubm8y3LIOjqNPaZDgnmcO32Ya346I4MvNB27IWRpwvnMS1C28AioG55NyKDLs+mIkFv+w9BK+ro8JbYN+J4NJOIZdVDLQBrzavHD+78PRIjjzuq267sVIBpDCdjkgTnp4FFQYcKsNIY/ES5P+r/J8BIT1tVtPOW227DNXg4s/lugoeT/K8xjAJ7Uq79LQAsd5Pa6RgKwnDWqQoG+rwHLD4iVRy1z8kDdxQAAugaWgtQJFuhUTtRkESwmt51V1JzLrqEKSm3l/+AB2MEdeSmFiG14C1HbHaY8PF2xfctlGDDh6NfKsnP23WdnOkpEpOY9I= X-MS-Exchange-CrossTenant-OriginalArrivalTime: 21 Feb 2019 14:05:47.8661 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: f3a99635-2e9c-44d8-a83c-08d69805ae1a X-MS-Exchange-CrossTenant-Id: 5afe0b00-7697-4969-b663-5eab37d5f47e X-MS-Exchange-CrossTenant-OriginalAttributedTenantConnectingIp: TenantId=5afe0b00-7697-4969-b663-5eab37d5f47e; Ip=[199.233.58.38]; Helo=[CAEXCH02.caveonetworks.com] X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem X-MS-Exchange-Transport-CrossTenantHeadersStamped: BY1PR0701MB1925 Sender: netdev-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: netdev@vger.kernel.org Read port count from the shared memory instead of driver deriving this value. This change simplifies the driver implementation and also avoids any dependencies for finding the port-count. Signed-off-by: Sudarsana Reddy Kalluru Signed-off-by: Michal Kalderon --- drivers/net/ethernet/qlogic/qed/qed.h | 6 +- drivers/net/ethernet/qlogic/qed/qed_dev.c | 95 ++++++++++++------------------- drivers/net/ethernet/qlogic/qed/qed_l2.c | 4 +- drivers/net/ethernet/qlogic/qed/qed_mcp.h | 4 -- drivers/net/ethernet/qlogic/qed/qed_ptp.c | 2 +- 5 files changed, 44 insertions(+), 67 deletions(-) diff --git a/drivers/net/ethernet/qlogic/qed/qed.h b/drivers/net/ethernet/qlogic/qed/qed.h index 2d21c94..43a57ec 100644 --- a/drivers/net/ethernet/qlogic/qed/qed.h +++ b/drivers/net/ethernet/qlogic/qed/qed.h @@ -753,6 +753,7 @@ struct qed_dev { #define CHIP_BOND_ID_SHIFT 0 u8 num_engines; + u8 num_ports; u8 num_ports_in_engine; u8 num_funcs_in_port; @@ -892,7 +893,6 @@ void qed_configure_vp_wfq_on_link_change(struct qed_dev *cdev, void qed_clean_wfq_db(struct qed_hwfn *p_hwfn, struct qed_ptt *p_ptt); int qed_device_num_engines(struct qed_dev *cdev); -int qed_device_get_port_id(struct qed_dev *cdev); void qed_set_fw_mac_addr(__le16 *fw_msb, __le16 *fw_mid, __le16 *fw_lsb, u8 *mac); @@ -939,6 +939,10 @@ void qed_db_recovery_execute(struct qed_hwfn *p_hwfn, writel((u32)val, (void __iomem *)((u8 __iomem *)\ (cdev->doorbells) + (db_addr))) +#define MFW_PORT(_p_hwfn) ((_p_hwfn)->abs_pf_id % \ + qed_device_num_ports((_p_hwfn)->cdev)) +int qed_device_num_ports(struct qed_dev *cdev); + /* Prototypes */ int qed_fill_dev_info(struct qed_dev *cdev, struct qed_dev_info *dev_info); diff --git a/drivers/net/ethernet/qlogic/qed/qed_dev.c b/drivers/net/ethernet/qlogic/qed/qed_dev.c index e2cbd77..9df8c4b 100644 --- a/drivers/net/ethernet/qlogic/qed/qed_dev.c +++ b/drivers/net/ethernet/qlogic/qed/qed_dev.c @@ -3269,55 +3269,43 @@ static void qed_get_num_funcs(struct qed_hwfn *p_hwfn, struct qed_ptt *p_ptt) p_hwfn->enabled_func_idx, p_hwfn->num_funcs_on_engine); } -static void qed_hw_info_port_num_bb(struct qed_hwfn *p_hwfn, - struct qed_ptt *p_ptt) -{ - u32 port_mode; - - port_mode = qed_rd(p_hwfn, p_ptt, CNIG_REG_NW_PORT_MODE_BB); - - if (port_mode < 3) { - p_hwfn->cdev->num_ports_in_engine = 1; - } else if (port_mode <= 5) { - p_hwfn->cdev->num_ports_in_engine = 2; - } else { - DP_NOTICE(p_hwfn, "PORT MODE: %d not supported\n", - p_hwfn->cdev->num_ports_in_engine); - - /* Default num_ports_in_engine to something */ - p_hwfn->cdev->num_ports_in_engine = 1; - } -} - -static void qed_hw_info_port_num_ah(struct qed_hwfn *p_hwfn, - struct qed_ptt *p_ptt) +static void qed_hw_info_port_num(struct qed_hwfn *p_hwfn, struct qed_ptt *p_ptt) { - u32 port; - int i; - - p_hwfn->cdev->num_ports_in_engine = 0; + u32 addr, global_offsize, global_addr, port_mode; + struct qed_dev *cdev = p_hwfn->cdev; - for (i = 0; i < MAX_NUM_PORTS_K2; i++) { - port = qed_rd(p_hwfn, p_ptt, - CNIG_REG_NIG_PORT0_CONF_K2 + (i * 4)); - if (port & 1) - p_hwfn->cdev->num_ports_in_engine++; + /* In CMT there is always only one port */ + if (cdev->num_hwfns > 1) { + cdev->num_ports_in_engine = 1; + cdev->num_ports = 1; + return; } - if (!p_hwfn->cdev->num_ports_in_engine) { - DP_NOTICE(p_hwfn, "All NIG ports are inactive\n"); - - /* Default num_ports_in_engine to something */ - p_hwfn->cdev->num_ports_in_engine = 1; + /* Determine the number of ports per engine */ + port_mode = qed_rd(p_hwfn, p_ptt, MISC_REG_PORT_MODE); + switch (port_mode) { + case 0x0: + cdev->num_ports_in_engine = 1; + break; + case 0x1: + cdev->num_ports_in_engine = 2; + break; + case 0x2: + cdev->num_ports_in_engine = 4; + break; + default: + DP_NOTICE(p_hwfn, "Unknown port mode 0x%08x\n", port_mode); + cdev->num_ports_in_engine = 1; /* Default to something */ + break; } -} -static void qed_hw_info_port_num(struct qed_hwfn *p_hwfn, struct qed_ptt *p_ptt) -{ - if (QED_IS_BB(p_hwfn->cdev)) - qed_hw_info_port_num_bb(p_hwfn, p_ptt); - else - qed_hw_info_port_num_ah(p_hwfn, p_ptt); + /* Get the total number of ports of the device */ + addr = SECTION_OFFSIZE_ADDR(p_hwfn->mcp_info->public_base, + PUBLIC_GLOBAL); + global_offsize = qed_rd(p_hwfn, p_ptt, addr); + global_addr = SECTION_ADDR(global_offsize, 0); + addr = global_addr + offsetof(struct public_global, max_ports); + cdev->num_ports = (u8)qed_rd(p_hwfn, p_ptt, addr); } static void qed_get_eee_caps(struct qed_hwfn *p_hwfn, struct qed_ptt *p_ptt) @@ -3355,7 +3343,8 @@ static void qed_get_eee_caps(struct qed_hwfn *p_hwfn, struct qed_ptt *p_ptt) return rc; } - qed_hw_info_port_num(p_hwfn, p_ptt); + if (IS_LEAD_HWFN(p_hwfn)) + qed_hw_info_port_num(p_hwfn, p_ptt); qed_mcp_get_capabilities(p_hwfn, p_ptt); @@ -4760,23 +4749,9 @@ void qed_clean_wfq_db(struct qed_hwfn *p_hwfn, struct qed_ptt *p_ptt) sizeof(*p_hwfn->qm_info.wfq_data) * p_hwfn->qm_info.num_vports); } -int qed_device_num_engines(struct qed_dev *cdev) -{ - return QED_IS_BB(cdev) ? 2 : 1; -} - -static int qed_device_num_ports(struct qed_dev *cdev) -{ - /* in CMT always only one port */ - if (cdev->num_hwfns > 1) - return 1; - - return cdev->num_ports_in_engine * qed_device_num_engines(cdev); -} - -int qed_device_get_port_id(struct qed_dev *cdev) +int qed_device_num_ports(struct qed_dev *cdev) { - return (QED_LEADING_HWFN(cdev)->abs_pf_id) % qed_device_num_ports(cdev); + return cdev->num_ports; } void qed_set_fw_mac_addr(__le16 *fw_msb, diff --git a/drivers/net/ethernet/qlogic/qed/qed_l2.c b/drivers/net/ethernet/qlogic/qed/qed_l2.c index 58be1c4..5764172 100644 --- a/drivers/net/ethernet/qlogic/qed/qed_l2.c +++ b/drivers/net/ethernet/qlogic/qed/qed_l2.c @@ -1898,6 +1898,7 @@ static void _qed_get_vport_stats(struct qed_dev *cdev, struct qed_hwfn *p_hwfn = &cdev->hwfns[i]; struct qed_ptt *p_ptt = IS_PF(cdev) ? qed_ptt_acquire(p_hwfn) : NULL; + bool b_get_port_stats; if (IS_PF(cdev)) { /* The main vport index is relative first */ @@ -1912,8 +1913,9 @@ static void _qed_get_vport_stats(struct qed_dev *cdev, continue; } + b_get_port_stats = IS_PF(cdev) && IS_LEAD_HWFN(p_hwfn); __qed_get_vport_stats(p_hwfn, p_ptt, stats, fw_vport, - IS_PF(cdev) ? true : false); + b_get_port_stats); out: if (IS_PF(cdev) && p_ptt) diff --git a/drivers/net/ethernet/qlogic/qed/qed_mcp.h b/drivers/net/ethernet/qlogic/qed/qed_mcp.h index 2799e67..261c1a3 100644 --- a/drivers/net/ethernet/qlogic/qed/qed_mcp.h +++ b/drivers/net/ethernet/qlogic/qed/qed_mcp.h @@ -691,10 +691,6 @@ int qed_mcp_bist_nvm_get_image_att(struct qed_hwfn *p_hwfn, rel_pfid) #define MCP_PF_ID(p_hwfn) MCP_PF_ID_BY_REL(p_hwfn, (p_hwfn)->rel_pf_id) -#define MFW_PORT(_p_hwfn) ((_p_hwfn)->abs_pf_id % \ - ((_p_hwfn)->cdev->num_ports_in_engine * \ - qed_device_num_engines((_p_hwfn)->cdev))) - struct qed_mcp_info { /* List for mailbox commands which were sent and wait for a response */ struct list_head cmd_list; diff --git a/drivers/net/ethernet/qlogic/qed/qed_ptp.c b/drivers/net/ethernet/qlogic/qed/qed_ptp.c index 5a90d69..1302b30 100644 --- a/drivers/net/ethernet/qlogic/qed/qed_ptp.c +++ b/drivers/net/ethernet/qlogic/qed/qed_ptp.c @@ -47,7 +47,7 @@ static enum qed_resc_lock qed_ptcdev_to_resc(struct qed_hwfn *p_hwfn) { - switch (qed_device_get_port_id(p_hwfn->cdev)) { + switch (MFW_PORT(p_hwfn)) { case 0: return QED_RESC_LOCK_PTP_PORT0; case 1: