From patchwork Tue Jan 14 17:30:19 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: "Sebastian, Selwin" X-Patchwork-Id: 64645 X-Patchwork-Delegate: ferruh.yigit@amd.com Return-Path: X-Original-To: patchwork@inbox.dpdk.org Delivered-To: patchwork@inbox.dpdk.org Received: from dpdk.org (dpdk.org [92.243.14.124]) by inbox.dpdk.org (Postfix) with ESMTP id 628DBA04FD; Tue, 14 Jan 2020 12:58:51 +0100 (CET) Received: from [92.243.14.124] (localhost [127.0.0.1]) by dpdk.org (Postfix) with ESMTP id 35F901C1EE; Tue, 14 Jan 2020 12:58:51 +0100 (CET) Received: from NAM12-MW2-obe.outbound.protection.outlook.com (mail-mw2nam12on2088.outbound.protection.outlook.com [40.107.244.88]) by dpdk.org (Postfix) with ESMTP id DA0FA1C1E9 for ; Tue, 14 Jan 2020 12:58:48 +0100 (CET) ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=SwebtsZ1QgKafurhByees0V2hvNyjpWC51SSV6N98gBqJ+EpSlsPpQ5FgWzcxBLCLL/jTM39H4KRo7XqNSYKvBNvuNfZofPOVt/gfs98PBareCtMU3m6N3rK/tFSPpy6jRM2OY2UlhyNyEQFPxvoECIAaQW67p1gYuNDFsF4nLuoh55G39xWWJ+TuhDnEUOjpWDwr45juhXnFeIgvu39smdkum9e/xblqhhNRaVzttpZSH67zA/ByV58QWNxC8cy3re5QD9w1mCHED1jsT+YMEGNFjGL/cdDy6e1swGmnNfAL0Kp5QCFbXa9yHIhX31XnqBt9jqzphzIGiWeQpwt+Q== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=qrZeMq3L01kmXDWGW9aCGqdmpfwhRcCxyYw0aq5IU8g=; b=Yc6IQBGQuyFJ9ZQOw7rcFdXvI2r1+aqGVDU+cX+XdJGR3MO1xwOeTA6+aASxMOTD7ZLypror4hasig0ot+J15T0U2otwGo6V7faeInMj+PsMmin2/ywvKausJ+DfCAEkmOCrl6cjlyYwkIC+q9dCFUENyRkfr3MvF8gJaOn+e5YfyK6eeQJ98AmZjBllaU4UqPjm5CiT2xFkCdDDIicyuJ7OTEW1vxlNbv7TK/Kl6+5l5qORI3sjiVn0/7zm6LLyDfabHZ73eLp+F9lYXgBz1Pyv2pVGSa37zlpf2Of/gT7Om1uZq2PvTDdZx7URqfYwovQEJPRFmv1ry7HyjLF7Hw== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=amd.com; dmarc=pass action=none header.from=amd.com; dkim=pass header.d=amd.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=amdcloud.onmicrosoft.com; s=selector2-amdcloud-onmicrosoft-com; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=qrZeMq3L01kmXDWGW9aCGqdmpfwhRcCxyYw0aq5IU8g=; b=4i/Q2YGiv2i2fbz9FrShmdkjEoMhk6ToN2D7GYzDjNFdpazLtRSV5WesNWLlg/SLjhJDQshx7idOQd2xaPRIVWEjBRXdcjbSXxii70fWDVtwdH3qAM73l+TViLKQpf8ObxPC1IHtxB3wjoJmSTUgdrgZ2UdxP9WRYN7UGZsmxLM= Authentication-Results: spf=none (sender IP is ) smtp.mailfrom=Selwin.Sebastian@amd.com; Received: from SN6PR12MB2704.namprd12.prod.outlook.com (52.135.104.148) by SN6PR12MB2638.namprd12.prod.outlook.com (52.135.103.15) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.2623.9; Tue, 14 Jan 2020 11:58:46 +0000 Received: from SN6PR12MB2704.namprd12.prod.outlook.com ([fe80::41ba:11c1:62c9:3188]) by SN6PR12MB2704.namprd12.prod.outlook.com ([fe80::41ba:11c1:62c9:3188%7]) with mapi id 15.20.2623.017; Tue, 14 Jan 2020 11:58:45 +0000 From: Selwin Sebastian To: dev@dpdk.org Cc: ferruh.yigit@intel.com, thomas@monjalon.net, david.marchand@redhat.com, Selwin Sebastian Date: Tue, 14 Jan 2020 23:00:19 +0530 Message-Id: <20200114173019.14097-1-Selwin.Sebastian@amd.com> X-Mailer: git-send-email 2.17.1 X-ClientProxiedBy: MAXPR01CA0103.INDPRD01.PROD.OUTLOOK.COM (2603:1096:a00:5d::21) To SN6PR12MB2704.namprd12.prod.outlook.com (2603:10b6:805:72::20) MIME-Version: 1.0 Received: from cae-dibler.amd.com (165.204.157.251) by MAXPR01CA0103.INDPRD01.PROD.OUTLOOK.COM (2603:1096:a00:5d::21) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.2623.10 via Frontend Transport; Tue, 14 Jan 2020 11:58:44 +0000 X-Mailer: git-send-email 2.17.1 X-Originating-IP: [165.204.157.251] X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-HT: Tenant X-MS-Office365-Filtering-Correlation-Id: e7245996-e84f-4c29-5f15-08d798e91bd6 X-MS-TrafficTypeDiagnostic: SN6PR12MB2638:|SN6PR12MB2638: X-MS-Exchange-Transport-Forked: True X-Microsoft-Antispam-PRVS: X-MS-Oob-TLC-OOBClassifiers: OLM:7219; X-Forefront-PRVS: 028256169F X-Forefront-Antispam-Report: SFV:NSPM; SFS:(10009020)(4636009)(376002)(346002)(39860400002)(366004)(136003)(396003)(199004)(189003)(6666004)(8676002)(2616005)(316002)(8936002)(6486002)(5660300002)(956004)(1076003)(81156014)(2906002)(81166006)(7696005)(52116002)(6916009)(186003)(66476007)(66556008)(66946007)(16526019)(4326008)(478600001)(36756003)(86362001)(26005); DIR:OUT; SFP:1101; SCL:1; SRVR:SN6PR12MB2638; H:SN6PR12MB2704.namprd12.prod.outlook.com; FPR:; SPF:None; LANG:en; PTR:InfoNoRecords; A:1; MX:1; Received-SPF: None (protection.outlook.com: amd.com does not designate permitted sender hosts) X-MS-Exchange-SenderADCheck: 1 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: AX5Tdp+goAhznIrdI3azoFvGoHPZ4rpomR1mjTEG/Hc/8OM7lOkSINez7RzQieVBX+Dyoh4u8vdiQISbWqQ285cw9e2tLvEjbDtCgXuVDrnKa9PUozMh1YtdioVoT0oV6wPsgwPwYqbFe94opuNLx4LEGrd3ukTJ0BAnpdAFijWadd0tratuWIPl64UE0kkE22rtWuYuVVOw94o7bwF6F/581aZzrO16Dhc074RWClUA7RCimbMO8CrPM5utFbbVF+j1+OpohEAedhnfV7SC9rNId8lcrxQWabF/30HKTOQQC577Ml3ln3uhvToUZA19+sdFRx5X1pUvunIzBQR0Zp6In+FilgLIOMvPkv9f4I1J2Xm6XVLfkSso3Dyahnn5ZlWCP7VGTywIgpdTfsTZF3w6dJ1ZCdv2jtVaduopw9Esp/LIxWcz9xosCStATCcQ X-OriginatorOrg: amd.com X-MS-Exchange-CrossTenant-Network-Message-Id: e7245996-e84f-4c29-5f15-08d798e91bd6 X-MS-Exchange-CrossTenant-OriginalArrivalTime: 14 Jan 2020 11:58:45.9719 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 3dd8961f-e488-4e60-8e11-a82d994e183d X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: VSKB73PeooCKuFqHZYL8r6V6VLoILuA6IOfs8tYlhGRb+2m69iKk27JdKjVK3uorgFq8AqfsARAXgf+8KM28HQ== X-MS-Exchange-Transport-CrossTenantHeadersStamped: SN6PR12MB2638 Subject: [dpdk-dev] [PATCH v3] drivers: add a HW quirk for register definitions X-BeenThere: dev@dpdk.org X-Mailman-Version: 2.1.15 Precedence: list List-Id: DPDK patches and discussions List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dev-bounces@dpdk.org Sender: "dev" V1000/R1000 processors are using the same PCI ids for the network device as SNOWYOWL processor but has altered register definitions for determining the window settings for the indirect PCS access. Add support to check for this hardware and if found use the new register values. Added a new routine rte_pci_search_device to pci driver to search for a device. Signed-off-by: Selwin Sebastian --- drivers/bus/pci/pci_common.c | 17 +++++++++++++++++ drivers/bus/pci/rte_bus_pci.h | 12 ++++++++++++ drivers/net/axgbe/axgbe_common.h | 2 ++ drivers/net/axgbe/axgbe_ethdev.c | 18 +++++++++++++++--- 4 files changed, 46 insertions(+), 3 deletions(-) diff --git a/drivers/bus/pci/pci_common.c b/drivers/bus/pci/pci_common.c index 3f5542076..e991a2580 100644 --- a/drivers/bus/pci/pci_common.c +++ b/drivers/bus/pci/pci_common.c @@ -393,6 +393,23 @@ rte_pci_add_device(struct rte_pci_device *pci_dev) TAILQ_INSERT_TAIL(&rte_pci_bus.device_list, pci_dev, next); } +/* Search for a specific device in PCI bus */ + +int +rte_pci_search_device(int vendor_id, int device_id) +{ + struct rte_pci_device *pdev; + pdev = TAILQ_FIRST(&rte_pci_bus.device_list); + + while (pdev != NULL) { + if (pdev->id.vendor_id == vendor_id && + pdev->id.device_id == device_id) + return true; + pdev = TAILQ_NEXT(pdev, next); + } + return false; +} + /* Insert a device into a predefined position in PCI bus */ void rte_pci_insert_device(struct rte_pci_device *exist_pci_dev, diff --git a/drivers/bus/pci/rte_bus_pci.h b/drivers/bus/pci/rte_bus_pci.h index 29bea6d70..42b6c7e03 100644 --- a/drivers/bus/pci/rte_bus_pci.h +++ b/drivers/bus/pci/rte_bus_pci.h @@ -354,6 +354,18 @@ void rte_pci_ioport_read(struct rte_pci_ioport *p, void rte_pci_ioport_write(struct rte_pci_ioport *p, const void *data, size_t len, off_t offset); +/* + * Search for a specific device in pci bus + * + * @param vendor_id + * vendor_id of the device to search + * @param device_id + * device_id of the device to search + * @return + * 1 on success, 0 on failure + */ +int rte_pci_search_device(int vendor_id, int device_id); + #ifdef __cplusplus } #endif diff --git a/drivers/net/axgbe/axgbe_common.h b/drivers/net/axgbe/axgbe_common.h index 34f60f156..4a3fbac16 100644 --- a/drivers/net/axgbe/axgbe_common.h +++ b/drivers/net/axgbe/axgbe_common.h @@ -841,6 +841,8 @@ #define PCS_V1_WINDOW_SELECT 0x03fc #define PCS_V2_WINDOW_DEF 0x9060 #define PCS_V2_WINDOW_SELECT 0x9064 +#define PCS_V2_RV_WINDOW_DEF 0x1060 +#define PCS_V2_RV_WINDOW_SELECT 0x1064 /* PCS register entry bit positions and sizes */ #define PCS_V2_WINDOW_DEF_OFFSET_INDEX 6 diff --git a/drivers/net/axgbe/axgbe_ethdev.c b/drivers/net/axgbe/axgbe_ethdev.c index d1f160e79..01975236b 100644 --- a/drivers/net/axgbe/axgbe_ethdev.c +++ b/drivers/net/axgbe/axgbe_ethdev.c @@ -29,6 +29,7 @@ static int axgbe_dev_info_get(struct rte_eth_dev *dev, /* The set of PCI devices this driver supports */ #define AMD_PCI_VENDOR_ID 0x1022 +#define AMD_PCI_RV_ROOT_COMPLEX_ID 0x15d0 #define AMD_PCI_AXGBE_DEVICE_V2A 0x1458 #define AMD_PCI_AXGBE_DEVICE_V2B 0x1459 @@ -605,6 +606,18 @@ eth_axgbe_dev_init(struct rte_eth_dev *eth_dev) pci_dev = RTE_DEV_TO_PCI(eth_dev->device); pdata->pci_dev = pci_dev; + /* + * Use root complex device ID to differentiate RV AXGBE vs SNOWY AXGBE + */ + if (rte_pci_search_device(AMD_PCI_VENDOR_ID, + AMD_PCI_RV_ROOT_COMPLEX_ID)) { + pdata->xpcs_window_def_reg = PCS_V2_RV_WINDOW_DEF; + pdata->xpcs_window_sel_reg = PCS_V2_RV_WINDOW_SELECT; + } else { + pdata->xpcs_window_def_reg = PCS_V2_WINDOW_DEF; + pdata->xpcs_window_sel_reg = PCS_V2_WINDOW_SELECT; + } + pdata->xgmac_regs = (void *)pci_dev->mem_resource[AXGBE_AXGMAC_BAR].addr; pdata->xprop_regs = (void *)((uint8_t *)pdata->xgmac_regs @@ -620,14 +633,13 @@ eth_axgbe_dev_init(struct rte_eth_dev *eth_dev) pdata->vdata = &axgbe_v2b; /* Configure the PCS indirect addressing support */ - reg = XPCS32_IOREAD(pdata, PCS_V2_WINDOW_DEF); + reg = XPCS32_IOREAD(pdata, pdata->xpcs_window_def_reg); pdata->xpcs_window = XPCS_GET_BITS(reg, PCS_V2_WINDOW_DEF, OFFSET); pdata->xpcs_window <<= 6; pdata->xpcs_window_size = XPCS_GET_BITS(reg, PCS_V2_WINDOW_DEF, SIZE); pdata->xpcs_window_size = 1 << (pdata->xpcs_window_size + 7); pdata->xpcs_window_mask = pdata->xpcs_window_size - 1; - pdata->xpcs_window_def_reg = PCS_V2_WINDOW_DEF; - pdata->xpcs_window_sel_reg = PCS_V2_WINDOW_SELECT; + PMD_INIT_LOG(DEBUG, "xpcs window :%x, size :%x, mask :%x ", pdata->xpcs_window, pdata->xpcs_window_size, pdata->xpcs_window_mask);