From patchwork Wed Feb 13 11:28:44 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Ido Schimmel X-Patchwork-Id: 1041190 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=mellanox.com Authentication-Results: ozlabs.org; dkim=pass (1024-bit key; unprotected) header.d=Mellanox.com header.i=@Mellanox.com header.b="wLwya3XT"; dkim-atps=neutral Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by ozlabs.org (Postfix) with ESMTP id 43zy2r5Rlsz9s7h for ; Wed, 13 Feb 2019 22:28:52 +1100 (AEDT) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S2403910AbfBML2v (ORCPT ); Wed, 13 Feb 2019 06:28:51 -0500 Received: from mail-eopbgr40047.outbound.protection.outlook.com ([40.107.4.47]:46912 "EHLO EUR03-DB5-obe.outbound.protection.outlook.com" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S1732913AbfBML2u (ORCPT ); Wed, 13 Feb 2019 06:28:50 -0500 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=Mellanox.com; s=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=337l5Yi7xnaG3a3vNpNfKHJi1D0jikavjEG25khTm+g=; b=wLwya3XTFk0tcwzMCD6JOLyT6OEGVwa1maC3/V+bTP7ds1pasXyPuKtbuoXHlF6sTp6MbHlZ5j3/5RQtaZzTapFm+/dykGstnE0hLAuPYvh/v9zw3dbSf64B6Kpj3IrRE4xP3ekXmWxrH/7jOANxHv00TcruNPIxN/WmccuqlTo= Received: from AM6PR05MB5240.eurprd05.prod.outlook.com (20.177.196.214) by AM6PR05MB4501.eurprd05.prod.outlook.com (52.135.163.10) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.1601.17; Wed, 13 Feb 2019 11:28:44 +0000 Received: from AM6PR05MB5240.eurprd05.prod.outlook.com ([fe80::3542:889c:3a85:3866]) by AM6PR05MB5240.eurprd05.prod.outlook.com ([fe80::3542:889c:3a85:3866%5]) with mapi id 15.20.1601.023; Wed, 13 Feb 2019 11:28:44 +0000 From: Ido Schimmel To: "netdev@vger.kernel.org" CC: "davem@davemloft.net" , Jiri Pirko , "andrew@lunn.ch" , mlxsw , Vadim Pasternak , Ido Schimmel Subject: [PATCH net-next 01/12] mlxsw: spectrum: Move QSFP EEPROM definitions to common location Thread-Topic: [PATCH net-next 01/12] mlxsw: spectrum: Move QSFP EEPROM definitions to common location Thread-Index: AQHUw49HlK6pmcOFG0iokmAheoPLUw== Date: Wed, 13 Feb 2019 11:28:44 +0000 Message-ID: <20190213112814.32334-2-idosch@mellanox.com> References: <20190213112814.32334-1-idosch@mellanox.com> In-Reply-To: <20190213112814.32334-1-idosch@mellanox.com> Accept-Language: en-US Content-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: x-clientproxiedby: LNXP265CA0090.GBRP265.PROD.OUTLOOK.COM (2603:10a6:600:76::30) To AM6PR05MB5240.eurprd05.prod.outlook.com (2603:10a6:20b:64::22) authentication-results: spf=none (sender IP is ) smtp.mailfrom=idosch@mellanox.com; x-ms-exchange-messagesentrepresentingtype: 1 x-mailer: git-send-email 2.20.1 x-originating-ip: [193.47.165.251] x-ms-publictraffictype: Email x-ms-office365-filtering-correlation-id: f61e3f20-4cbf-441f-1d57-08d691a669a2 x-ms-office365-filtering-ht: Tenant x-microsoft-antispam: BCL:0; PCL:0; RULEID:(2390118)(7020095)(4652040)(8989299)(4534185)(4627221)(201703031133081)(201702281549075)(8990200)(5600110)(711020)(4605077)(4618075)(2017052603328)(7153060)(7193020); SRVR:AM6PR05MB4501; x-ms-traffictypediagnostic: AM6PR05MB4501: x-microsoft-exchange-diagnostics: =?iso-8859-1?q?1=3BAM6PR05MB4501=3B23?= =?iso-8859-1?q?=3AEIrmJp0xEOGZSnJY2gMEbAqh14KL0wRjorOsA6qhiJJIpy2K?= =?iso-8859-1?q?2aEBK8jnmIybJLsduXS511fx4o+olX1+XamIaCJEJ4FaWTv0BN5?= =?iso-8859-1?q?6C6PrB1uP0gmjCJU4yObSpX1Fy+a/7PSqJMOUvrhrVbOEHXKkSc?= =?iso-8859-1?q?RIrk5xIsGCeJnIvSijNWMdDaFtRxGmORPmk6rWsHMk0wRPaE6CL?= =?iso-8859-1?q?POrViAEwFC9kHOZjrbAz51w5XxurNLUMgdxjbDuA5v8VMoH+T/l?= =?iso-8859-1?q?A9S4M3jU+/Y3pFIugrgzXacjKP1yVsAGrqhF2qs6VgpIubiMQ2t?= =?iso-8859-1?q?OWi0aJaVC6BBpC556lqDFjpR222GOFUkH9hB+9VTpdHuGTxylt8?= =?iso-8859-1?q?sYWoJPOPvRL2zqTt8w0vMPajtikhVJhTYX+mtGEoG5xAN8IyLcg?= =?iso-8859-1?q?Zv6FXPh0BLEKDAUZVzlQj4yHmvjbJwmTsmwC39+DzmzQBkPZmce?= =?iso-8859-1?q?pOZpDUbr1pDW8NdhvGZ0V55njdKR50WZaeucUvjvOGtMBDRzOpf?= =?iso-8859-1?q?zwQn8QyC28pNGsWTktG74GT6SI3Z0pnJ9pv7mlw4wL6+jm2A3kD?= =?iso-8859-1?q?hOHOarR4AB3+z9+3VtyPIRltlJsTrdJgF3OHKe1HYgj7YVwTdVf?= =?iso-8859-1?q?Q9g3mQw06KdEFXcRt5iF1P4+et8CDTCHTs8vnb0mrbkxOTKTM5v?= =?iso-8859-1?q?9K+rm9qcuXcarVe3/KmmQLx3n7/Sw26Bd03wVRO4CrhJwDLhfRV?= =?iso-8859-1?q?Idnt3pCnNpTY9nwpQB8yivy0+rQZbzk3f4OO63eGzcnXXXz56uq?= =?iso-8859-1?q?K7XAWG6f5qaTjKE8TWFRQ34H6djGqSwtKZVZRbGCecbCNO/8TeS?= =?iso-8859-1?q?+q340OWqdp0ATJcE/w0TEvP+ap+gGpLmxtqrfVLhqwhr0JFWKk/?= =?iso-8859-1?q?q0a3htY+fXYFUNmrHLFXVxiT8nGRKFfEQVtlpyo7e7GSnVgUGZy?= =?iso-8859-1?q?DXJzAzGlbsz+n+SsI2h2ukQY0/WSd3S2kvBJNl/53UKROFsLcHb?= =?iso-8859-1?q?lliTyn//2LOwRfMmx68b0616X1dVV4OyPtxbyZmFpgEaaYMXMMH?= =?iso-8859-1?q?arxFbDaFqs5c8myuIecl8Ewr9oA0z8vI4DpzduPiUe9KGa4CBGj?= =?iso-8859-1?q?//NLLNC/uf9dVEwNQR6KVI/BRyXPQXKJ6t7u/w05ZeNOo49jlO2?= =?iso-8859-1?q?5m7pn6rGXfush5Xdf8LJjbxMmX3cFJGKw6ce+Ju8+1dhdiGpoU4?= =?iso-8859-1?q?lniulaQBBjFrysIiSp6uxsswn626/EZeL+wog+zqoNGGpmFVWRG?= =?iso-8859-1?q?sx+jjAdCUAO9A0Norau5NPBuMKcHGl/+B1eprqW0wHkItp7wXfg?= =?iso-8859-1?q?k6QfbwEKWXVSO6mz8hRKVPbPEwAHU5x+ioJq1LcqS1ZDycSaWVL?= =?iso-8859-1?q?BlomCYAbXWnCvA15z/ggf?= x-microsoft-antispam-prvs: x-forefront-prvs: 094700CA91 x-forefront-antispam-report: SFV:NSPM; SFS:(10009020)(136003)(366004)(396003)(376002)(346002)(39860400002)(189003)(199004)(6116002)(256004)(3846002)(2501003)(76176011)(2906002)(217873002)(14444005)(99286004)(52116002)(97736004)(26005)(186003)(476003)(2616005)(106356001)(446003)(11346002)(105586002)(2351001)(25786009)(4326008)(86362001)(102836004)(71200400001)(8936002)(486006)(478600001)(1730700003)(66066001)(14454004)(71190400001)(53936002)(36756003)(81156014)(6486002)(107886003)(54906003)(68736007)(7736002)(6436002)(5640700003)(81166006)(305945005)(316002)(6506007)(1076003)(386003)(6916009)(8676002)(6512007)(50226002); DIR:OUT; SFP:1101; SCL:1; SRVR:AM6PR05MB4501; H:AM6PR05MB5240.eurprd05.prod.outlook.com; FPR:; SPF:None; LANG:en; PTR:InfoNoRecords; MX:1; A:1; received-spf: None (protection.outlook.com: mellanox.com does not designate permitted sender hosts) x-ms-exchange-senderadcheck: 1 x-microsoft-antispam-message-info: B6ZDoadpqIno8Kbkyd4zTcw2Ma3T1yiV3ylljFkCvITWPLy+XX0815UrVAghM4sdhN13cYoV00n6RVUu1B7SUzu7ApQB4dEGShyLwFYtcix2drhraztrcVy9zz7LXpnJkIYhXnS4mjxc8oJ9EBV4s1XmFKMSf9cY9U+QGgQGXtOu9RjE7igC4+PoI1SxAT53G5Qar1iSJ9GkorQ4HJpSa9TTo+zg5obCv7kaZ71NTD7vC042P7tbOB2GfUX86QHZS8Mps69hcjyzR40An30AlEOJ/X6iemlwU+h7W55PMrnKzeUEcRldDTyhlooglJKewfCkgeoKA4vtJZ4RbxUi4DtVgATOa8IVS3vIDvMWiuZ9weVnfsbLIkNFXwYtnN5eX6zDgad8LLMdLR9bQajbwe528aMbpygEz6TieORlX1w= MIME-Version: 1.0 X-OriginatorOrg: Mellanox.com X-MS-Exchange-CrossTenant-Network-Message-Id: f61e3f20-4cbf-441f-1d57-08d691a669a2 X-MS-Exchange-CrossTenant-originalarrivaltime: 13 Feb 2019 11:28:43.5950 (UTC) X-MS-Exchange-CrossTenant-fromentityheader: Hosted X-MS-Exchange-CrossTenant-mailboxtype: HOSTED X-MS-Exchange-CrossTenant-id: a652971c-7d2e-4d9b-a6a4-d149256f461b X-MS-Exchange-Transport-CrossTenantHeadersStamped: AM6PR05MB4501 Sender: netdev-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: netdev@vger.kernel.org From: Vadim Pasternak Move QSFP EEPROM definitions to common location from the spectrum driver in order to make them available for other mlxsw modules. They are common for all kind of chips and have relation to SFF specifications 8024, 8436, 8472, 8636, rather than to chip type. Signed-off-by: Vadim Pasternak Reviewed-by: Jiri Pirko Signed-off-by: Ido Schimmel --- drivers/net/ethernet/mellanox/mlxsw/reg.h | 32 +++++++++- .../net/ethernet/mellanox/mlxsw/spectrum.c | 62 +++++++------------ 2 files changed, 52 insertions(+), 42 deletions(-) diff --git a/drivers/net/ethernet/mellanox/mlxsw/reg.h b/drivers/net/ethernet/mellanox/mlxsw/reg.h index 227720ce3982..1190a6a501a5 100644 --- a/drivers/net/ethernet/mellanox/mlxsw/reg.h +++ b/drivers/net/ethernet/mellanox/mlxsw/reg.h @@ -8055,13 +8055,41 @@ MLXSW_ITEM32(reg, mcia, device_address, 0x04, 0, 16); */ MLXSW_ITEM32(reg, mcia, size, 0x08, 0, 16); -#define MLXSW_SP_REG_MCIA_EEPROM_SIZE 48 +#define MLXSW_REG_MCIA_EEPROM_PAGE_LENGTH 256 +#define MLXSW_REG_MCIA_EEPROM_SIZE 48 +#define MLXSW_REG_MCIA_I2C_ADDR_LOW 0x50 +#define MLXSW_REG_MCIA_I2C_ADDR_HIGH 0x51 +#define MLXSW_REG_MCIA_PAGE0_LO_OFF 0xa0 +#define MLXSW_REG_MCIA_TH_ITEM_SIZE 2 +#define MLXSW_REG_MCIA_TH_PAGE_NUM 3 +#define MLXSW_REG_MCIA_PAGE0_LO 0 +#define MLXSW_REG_MCIA_TH_PAGE_OFF 0x80 + +enum mlxsw_reg_mcia_eeprom_module_info_rev_id { + MLXSW_REG_MCIA_EEPROM_MODULE_INFO_REV_ID_UNSPC = 0x00, + MLXSW_REG_MCIA_EEPROM_MODULE_INFO_REV_ID_8436 = 0x01, + MLXSW_REG_MCIA_EEPROM_MODULE_INFO_REV_ID_8636 = 0x03, +}; + +enum mlxsw_reg_mcia_eeprom_module_info_id { + MLXSW_REG_MCIA_EEPROM_MODULE_INFO_ID_SFP = 0x03, + MLXSW_REG_MCIA_EEPROM_MODULE_INFO_ID_QSFP = 0x0C, + MLXSW_REG_MCIA_EEPROM_MODULE_INFO_ID_QSFP_PLUS = 0x0D, + MLXSW_REG_MCIA_EEPROM_MODULE_INFO_ID_QSFP28 = 0x11, + MLXSW_REG_MCIA_EEPROM_MODULE_INFO_ID_QSFP_DD = 0x18, +}; + +enum mlxsw_reg_mcia_eeprom_module_info { + MLXSW_REG_MCIA_EEPROM_MODULE_INFO_ID, + MLXSW_REG_MCIA_EEPROM_MODULE_INFO_REV_ID, + MLXSW_REG_MCIA_EEPROM_MODULE_INFO_SIZE, +}; /* reg_mcia_eeprom * Bytes to read/write. * Access: RW */ -MLXSW_ITEM_BUF(reg, mcia, eeprom, 0x10, MLXSW_SP_REG_MCIA_EEPROM_SIZE); +MLXSW_ITEM_BUF(reg, mcia, eeprom, 0x10, MLXSW_REG_MCIA_EEPROM_SIZE); static inline void mlxsw_reg_mcia_pack(char *payload, u8 module, u8 lock, u8 page_number, u16 device_addr, diff --git a/drivers/net/ethernet/mellanox/mlxsw/spectrum.c b/drivers/net/ethernet/mellanox/mlxsw/spectrum.c index 9686d3822b92..abac923a8d04 100644 --- a/drivers/net/ethernet/mellanox/mlxsw/spectrum.c +++ b/drivers/net/ethernet/mellanox/mlxsw/spectrum.c @@ -2723,23 +2723,23 @@ static int mlxsw_sp_query_module_eeprom(struct mlxsw_sp_port *mlxsw_sp_port, unsigned int *p_read_size) { struct mlxsw_sp *mlxsw_sp = mlxsw_sp_port->mlxsw_sp; - char eeprom_tmp[MLXSW_SP_REG_MCIA_EEPROM_SIZE]; + char eeprom_tmp[MLXSW_REG_MCIA_EEPROM_SIZE]; char mcia_pl[MLXSW_REG_MCIA_LEN]; u16 i2c_addr; int status; int err; - size = min_t(u16, size, MLXSW_SP_REG_MCIA_EEPROM_SIZE); + size = min_t(u16, size, MLXSW_REG_MCIA_EEPROM_SIZE); - if (offset < MLXSW_SP_EEPROM_PAGE_LENGTH && - offset + size > MLXSW_SP_EEPROM_PAGE_LENGTH) + if (offset < MLXSW_REG_MCIA_EEPROM_PAGE_LENGTH && + offset + size > MLXSW_REG_MCIA_EEPROM_PAGE_LENGTH) /* Cross pages read, read until offset 256 in low page */ - size = MLXSW_SP_EEPROM_PAGE_LENGTH - offset; + size = MLXSW_REG_MCIA_EEPROM_PAGE_LENGTH - offset; - i2c_addr = MLXSW_SP_I2C_ADDR_LOW; - if (offset >= MLXSW_SP_EEPROM_PAGE_LENGTH) { - i2c_addr = MLXSW_SP_I2C_ADDR_HIGH; - offset -= MLXSW_SP_EEPROM_PAGE_LENGTH; + i2c_addr = MLXSW_REG_MCIA_I2C_ADDR_LOW; + if (offset >= MLXSW_REG_MCIA_EEPROM_PAGE_LENGTH) { + i2c_addr = MLXSW_REG_MCIA_I2C_ADDR_HIGH; + offset -= MLXSW_REG_MCIA_EEPROM_PAGE_LENGTH; } mlxsw_reg_mcia_pack(mcia_pl, mlxsw_sp_port->mapping.module, @@ -2760,55 +2760,37 @@ static int mlxsw_sp_query_module_eeprom(struct mlxsw_sp_port *mlxsw_sp_port, return 0; } -enum mlxsw_sp_eeprom_module_info_rev_id { - MLXSW_SP_EEPROM_MODULE_INFO_REV_ID_UNSPC = 0x00, - MLXSW_SP_EEPROM_MODULE_INFO_REV_ID_8436 = 0x01, - MLXSW_SP_EEPROM_MODULE_INFO_REV_ID_8636 = 0x03, -}; - -enum mlxsw_sp_eeprom_module_info_id { - MLXSW_SP_EEPROM_MODULE_INFO_ID_SFP = 0x03, - MLXSW_SP_EEPROM_MODULE_INFO_ID_QSFP = 0x0C, - MLXSW_SP_EEPROM_MODULE_INFO_ID_QSFP_PLUS = 0x0D, - MLXSW_SP_EEPROM_MODULE_INFO_ID_QSFP28 = 0x11, -}; - -enum mlxsw_sp_eeprom_module_info { - MLXSW_SP_EEPROM_MODULE_INFO_ID, - MLXSW_SP_EEPROM_MODULE_INFO_REV_ID, - MLXSW_SP_EEPROM_MODULE_INFO_SIZE, -}; - static int mlxsw_sp_get_module_info(struct net_device *netdev, struct ethtool_modinfo *modinfo) { struct mlxsw_sp_port *mlxsw_sp_port = netdev_priv(netdev); - u8 module_info[MLXSW_SP_EEPROM_MODULE_INFO_SIZE]; + u8 module_info[MLXSW_REG_MCIA_EEPROM_MODULE_INFO_SIZE]; + u16 offset = MLXSW_REG_MCIA_EEPROM_MODULE_INFO_SIZE; u8 module_rev_id, module_id; unsigned int read_size; int err; - err = mlxsw_sp_query_module_eeprom(mlxsw_sp_port, 0, - MLXSW_SP_EEPROM_MODULE_INFO_SIZE, + err = mlxsw_sp_query_module_eeprom(mlxsw_sp_port, 0, offset, module_info, &read_size); if (err) return err; - if (read_size < MLXSW_SP_EEPROM_MODULE_INFO_SIZE) + if (read_size < offset) return -EIO; - module_rev_id = module_info[MLXSW_SP_EEPROM_MODULE_INFO_REV_ID]; - module_id = module_info[MLXSW_SP_EEPROM_MODULE_INFO_ID]; + module_rev_id = module_info[MLXSW_REG_MCIA_EEPROM_MODULE_INFO_REV_ID]; + module_id = module_info[MLXSW_REG_MCIA_EEPROM_MODULE_INFO_ID]; switch (module_id) { - case MLXSW_SP_EEPROM_MODULE_INFO_ID_QSFP: + case MLXSW_REG_MCIA_EEPROM_MODULE_INFO_ID_QSFP: modinfo->type = ETH_MODULE_SFF_8436; modinfo->eeprom_len = ETH_MODULE_SFF_8436_LEN; break; - case MLXSW_SP_EEPROM_MODULE_INFO_ID_QSFP_PLUS: - case MLXSW_SP_EEPROM_MODULE_INFO_ID_QSFP28: - if (module_id == MLXSW_SP_EEPROM_MODULE_INFO_ID_QSFP28 || - module_rev_id >= MLXSW_SP_EEPROM_MODULE_INFO_REV_ID_8636) { + case MLXSW_REG_MCIA_EEPROM_MODULE_INFO_ID_QSFP_PLUS: /* fall-through */ + case MLXSW_REG_MCIA_EEPROM_MODULE_INFO_ID_QSFP28: + if (module_id == MLXSW_REG_MCIA_EEPROM_MODULE_INFO_ID_QSFP28 || + module_rev_id >= + MLXSW_REG_MCIA_EEPROM_MODULE_INFO_REV_ID_8636) { modinfo->type = ETH_MODULE_SFF_8636; modinfo->eeprom_len = ETH_MODULE_SFF_8636_LEN; } else { @@ -2816,7 +2798,7 @@ static int mlxsw_sp_get_module_info(struct net_device *netdev, modinfo->eeprom_len = ETH_MODULE_SFF_8436_LEN; } break; - case MLXSW_SP_EEPROM_MODULE_INFO_ID_SFP: + case MLXSW_REG_MCIA_EEPROM_MODULE_INFO_ID_SFP: modinfo->type = ETH_MODULE_SFF_8472; modinfo->eeprom_len = ETH_MODULE_SFF_8472_LEN; break;