Patch Detail
get:
Show a patch.
patch:
Update a patch.
put:
Update a patch.
GET /api/patches/64393/?format=api
http://patches.dpdk.org/api/patches/64393/?format=api", "web_url": "http://patches.dpdk.org/project/dpdk/patch/20200110083604.25864-1-ssardar@amd.com/", "project": { "id": 1, "url": "http://patches.dpdk.org/api/projects/1/?format=api", "name": "DPDK", "link_name": "dpdk", "list_id": "dev.dpdk.org", "list_email": "dev@dpdk.org", "web_url": "http://core.dpdk.org", "scm_url": "git://dpdk.org/dpdk", "webscm_url": "http://git.dpdk.org/dpdk", "list_archive_url": "https://inbox.dpdk.org/dev", "list_archive_url_format": "https://inbox.dpdk.org/dev/{}", "commit_url_format": "" }, "msgid": "<20200110083604.25864-1-ssardar@amd.com>", "list_archive_url": "https://inbox.dpdk.org/dev/20200110083604.25864-1-ssardar@amd.com", "date": "2020-01-10T08:36:04", "name": "[v1,2/2] net/axgbe: auto-negotiation support enabled for 1Gbps", "commit_ref": null, "pull_url": null, "state": "superseded", "archived": true, "hash": "f558e65fca49792fcaaa4cf5e725f6b4609d7e08", "submitter": { "id": 1564, "url": "http://patches.dpdk.org/api/people/1564/?format=api", "name": null, "email": "ssardar@amd.com" }, "delegate": { "id": 319, "url": "http://patches.dpdk.org/api/users/319/?format=api", "username": "fyigit", "first_name": "Ferruh", "last_name": "Yigit", "email": "ferruh.yigit@amd.com" }, "mbox": "http://patches.dpdk.org/project/dpdk/patch/20200110083604.25864-1-ssardar@amd.com/mbox/", "series": [ { "id": 8045, "url": "http://patches.dpdk.org/api/series/8045/?format=api", "web_url": "http://patches.dpdk.org/project/dpdk/list/?series=8045", "date": "2020-01-10T08:35:28", "name": "[v1,1/2] net/axgbe: 1/2.5Gbps support enabled for axgbe", "version": 1, "mbox": "http://patches.dpdk.org/series/8045/mbox/" } ], "comments": "http://patches.dpdk.org/api/patches/64393/comments/", "check": "warning", "checks": "http://patches.dpdk.org/api/patches/64393/checks/", "tags": {}, "related": [], "headers": { "Return-Path": "<dev-bounces@dpdk.org>", "X-Original-To": "patchwork@inbox.dpdk.org", "Delivered-To": "patchwork@inbox.dpdk.org", "Received": [ "from dpdk.org (dpdk.org [92.243.14.124])\n\tby inbox.dpdk.org (Postfix) with ESMTP id AB581A04F9;\n\tFri, 10 Jan 2020 09:36:29 +0100 (CET)", "from [92.243.14.124] (localhost [127.0.0.1])\n\tby dpdk.org (Postfix) with ESMTP id 828B51E8E0;\n\tFri, 10 Jan 2020 09:36:29 +0100 (CET)", "from NAM11-DM6-obe.outbound.protection.outlook.com\n (mail-dm6nam11on2088.outbound.protection.outlook.com [40.107.223.88])\n by dpdk.org (Postfix) with ESMTP id B553C1E8D6\n for <dev@dpdk.org>; Fri, 10 Jan 2020 09:36:27 +0100 (CET)", "from DM6PR12MB3193.namprd12.prod.outlook.com (20.179.105.159) by\n DM6PR12MB3052.namprd12.prod.outlook.com (20.178.31.145) with Microsoft SMTP\n Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id\n 15.20.2602.12; Fri, 10 Jan 2020 08:36:25 +0000", "from DM6PR12MB3193.namprd12.prod.outlook.com\n ([fe80::a51f:f98a:4006:43d7]) by DM6PR12MB3193.namprd12.prod.outlook.com\n ([fe80::a51f:f98a:4006:43d7%2]) with mapi id 15.20.2623.010; Fri, 10 Jan 2020\n 08:36:25 +0000", "from amar-Wallaby.amd.com (165.204.156.251) by\n MA1PR0101CA0043.INDPRD01.PROD.OUTLOOK.COM (2603:1096:a00:22::29) with\n Microsoft SMTP Server (version=TLS1_2,\n cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.2623.10 via Frontend\n Transport; Fri, 10 Jan 2020 08:36:24 +0000" ], "ARC-Seal": "i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none;\n b=cMZeRcIKYyQvIPVk+qWNneISk2jy2fYl0O6xkC4C1Yc2RL07n1aGEOL1FCBI4sOqve/ux8QxkWp+Hma6FdwKcktGTPYOCuALWnVucF+D30ZtTS79AsfnlfUppeTGYWd+hx+NzPZhwHUI0erRCBnTRKn+LFftL15t2D/n5lLT8v4UmmaHh0p6XVSGsHfHMRNGFkSSmZQ3D5d4LODpdSx+ZVT+4Hvd43f5YbaP0RvMWJyOp5PcpbNvXBIi72EC2HPH6Bd9vIDCTfAzdkbRnU7jIwg6TLPU5inuILXibXp6tE2UDpc8CDcE+Tr705wrTxPEKIUZOGW4y4M6Xg2xNvxREQ==", "ARC-Message-Signature": "i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com;\n s=arcselector9901;\n h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck;\n bh=3wrlk1rA5Wf53DRk5uSf6L2slgrJYYHd7Pi4vk7OUY8=;\n b=PYU41Tfk9kTekaSSV94eKhIyTuoBV0w2VGmGsFTM6ipiORupr87WlIZluzLHuSJz2rZWD+Fg1J0xxOPccjNrFA0+i3RCiDnuG2JUdhBgz9oBFmoKHwKqglMxofoOrytpoiLwPEpH6SRGpsydDTSOiKceUsQFzn4+gcKekj6Jj5Di57e/x6F2AEa8hsGUeRHspBRs5Lf1HJAvWqshj0+/hNJWHS1QmhRmgkhcGykaK007ndkhTpWaeCjap7YWWKeFeN3Yj07fOnblVCOmHa8nZFf0PYMBawxwzbtJ8uNu/u24ASGA0woUhX0Zt43hfPtkxlCjd7Rt4+b+gOwrWWZVbg==", "ARC-Authentication-Results": "i=1; mx.microsoft.com 1; spf=pass\n smtp.mailfrom=amd.com; dmarc=pass action=none header.from=amd.com; dkim=pass\n header.d=amd.com; arc=none", "DKIM-Signature": "v=1; a=rsa-sha256; c=relaxed/relaxed;\n d=amdcloud.onmicrosoft.com; s=selector2-amdcloud-onmicrosoft-com;\n h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck;\n bh=3wrlk1rA5Wf53DRk5uSf6L2slgrJYYHd7Pi4vk7OUY8=;\n b=J/t9dk8mLQWdiaHBTCRZ9Eie4VM2fnbEzl4ZHdvmg64Xh2K9GhLinbze9abWAtQYX+fsskJ/0XLVKse1nbVkPwg3Ewbis9ILV+8fQJWIugTYE2aUcU9c3Sd94qjv/tC7bBxm2HwqIHWQuCV/KSEF9ZTCFWxQ72h/AZ/xQTIWFW0=", "Authentication-Results": "spf=none (sender IP is )\n smtp.mailfrom=Shamshersingh.Sardar@amd.com;", "From": "ssardar@amd.com", "To": "dev@dpdk.org", "Date": "Fri, 10 Jan 2020 14:06:04 +0530", "Message-Id": "<20200110083604.25864-1-ssardar@amd.com>", "X-Mailer": [ "git-send-email 2.17.1", "git-send-email 2.17.1" ], "Content-Type": "text/plain", "X-ClientProxiedBy": "MA1PR0101CA0043.INDPRD01.PROD.OUTLOOK.COM\n (2603:1096:a00:22::29) To DM6PR12MB3193.namprd12.prod.outlook.com\n (2603:10b6:5:186::31)", "MIME-Version": "1.0", "X-Originating-IP": "[165.204.156.251]", "X-MS-PublicTrafficType": "Email", "X-MS-Office365-Filtering-HT": "Tenant", "X-MS-Office365-Filtering-Correlation-Id": "4597c38d-0d5f-4b49-883b-08d795a82ddf", "X-MS-TrafficTypeDiagnostic": "DM6PR12MB3052:", "X-Microsoft-Antispam-PRVS": "\n <DM6PR12MB305205A8F642FE9544E374C784380@DM6PR12MB3052.namprd12.prod.outlook.com>", "X-MS-Oob-TLC-OOBClassifiers": "OLM:186;", "X-Forefront-PRVS": "02788FF38E", "X-Forefront-Antispam-Report": "SFV:NSPM;\n SFS:(10009020)(4636009)(136003)(39860400002)(396003)(366004)(346002)(376002)(189003)(199004)(16526019)(6666004)(81166006)(186003)(36756003)(6916009)(66946007)(26005)(956004)(316002)(5660300002)(66556008)(66476007)(2616005)(8676002)(52116002)(7696005)(81156014)(30864003)(8936002)(478600001)(6486002)(1076003)(9686003)(2906002);\n DIR:OUT; SFP:1101; SCL:1; SRVR:DM6PR12MB3052;\n H:DM6PR12MB3193.namprd12.prod.outlook.com; FPR:; SPF:None; LANG:en;\n PTR:InfoNoRecords; MX:1; A:1;", "Received-SPF": "None (protection.outlook.com: amd.com does not designate\n permitted sender hosts)", "X-MS-Exchange-SenderADCheck": "1", "X-Microsoft-Antispam": "BCL:0;", "X-Microsoft-Antispam-Message-Info": "\n Fd+AhSEvccHYURc7MaQVOOaiS//JqGfaiiKy8/Bw5OexnMQiiqw1hx8cq3CtLJfvkso5DC7mPshj0cEC0rrOfM86zWL0iYgmsfBxm2IS6v/xY4wINGBP2gC/iuBZeBamUc+sXOSHg0Xi9+FuWELkm7Hpieh+OCJx/Uvxelac1o8+4pFrCD6ucwYU+Xyx2XzxFzLdXlGpR+mmzOaC8kqSO7dnYJVbUJj0L+tTPrRoMJuZoAJA0XxyRJQwJpYFQbr9RmOFOeiYZEI/HdSgR6zfzU1qMordiTbaCCWGxpwD4ze2dRs2CBVLfSJ0QO3Jr08oMef8m6o8OIGz9glfvvs8ExIeQjSFI5tBXvgYkAgLNqDtIIyvpnoq/XJy+dvBiUQhpHIymSrMN0heyaSvJwYoGJq6xYlitAELFpkvLvCRqVznIYjB0Q0Nl3lduTm39v1T", "X-OriginatorOrg": "amd.com", "X-MS-Exchange-CrossTenant-Network-Message-Id": "\n 4597c38d-0d5f-4b49-883b-08d795a82ddf", "X-MS-Exchange-CrossTenant-OriginalArrivalTime": "10 Jan 2020 08:36:25.4721 (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": "\n MapamxS1iLzi7u2H+CNppJ05AN+T8F2g0KLpMGWe8/73MZX0BkDbWZHepV8u3x8K", "X-MS-Exchange-Transport-CrossTenantHeadersStamped": "DM6PR12MB3052", "Subject": "[dpdk-dev] [PATCH v1 2/2] net/axgbe: auto-negotiation support\n\tenabled for 1Gbps", "X-BeenThere": "dev@dpdk.org", "X-Mailman-Version": "2.1.15", "Precedence": "list", "List-Id": "DPDK patches and discussions <dev.dpdk.org>", "List-Unsubscribe": "<https://mails.dpdk.org/options/dev>,\n <mailto:dev-request@dpdk.org?subject=unsubscribe>", "List-Archive": "<http://mails.dpdk.org/archives/dev/>", "List-Post": "<mailto:dev@dpdk.org>", "List-Help": "<mailto:dev-request@dpdk.org?subject=help>", "List-Subscribe": "<https://mails.dpdk.org/listinfo/dev>,\n <mailto:dev-request@dpdk.org?subject=subscribe>", "Errors-To": "dev-bounces@dpdk.org", "Sender": "\"dev\" <dev-bounces@dpdk.org>" }, "content": "From: Sardar Shamsher Singh <Shamshersingh.Sardar@amd.com>\n\nAdded CL37 Auto-neg support for 1Gbps interface\nin axgbe driver\n\nSigned-off-by: Sardar Shamsher Singh <Shamshersingh.Sardar@amd.com>\n---\n drivers/net/axgbe/axgbe_common.h | 1 +\n drivers/net/axgbe/axgbe_mdio.c | 192 +++++++++++++++++++++++++++--\n drivers/net/axgbe/axgbe_phy_impl.c | 37 ++++++\n 3 files changed, 219 insertions(+), 11 deletions(-)", "diff": "diff --git a/drivers/net/axgbe/axgbe_common.h b/drivers/net/axgbe/axgbe_common.h\nindex 34f60f156..99fa92d5c 100644\n--- a/drivers/net/axgbe/axgbe_common.h\n+++ b/drivers/net/axgbe/axgbe_common.h\n@@ -1296,6 +1296,7 @@\n #define AXGBE_AN_CL37_PCS_MODE_BASEX\t0x00\n #define AXGBE_AN_CL37_PCS_MODE_SGMII\t0x04\n #define AXGBE_AN_CL37_TX_CONFIG_MASK\t0x08\n+#define AXGBE_AN_CL37_MII_CTRL_8BIT 0x0100\n \n #define AXGBE_PMA_CDR_TRACK_EN_MASK\t0x01\n #define AXGBE_PMA_CDR_TRACK_EN_OFF\t0x00\ndiff --git a/drivers/net/axgbe/axgbe_mdio.c b/drivers/net/axgbe/axgbe_mdio.c\nindex 2721e5cc9..3902b1ec3 100644\n--- a/drivers/net/axgbe/axgbe_mdio.c\n+++ b/drivers/net/axgbe/axgbe_mdio.c\n@@ -29,6 +29,19 @@ static void axgbe_an37_disable_interrupts(struct axgbe_port *pdata)\n \tXMDIO_WRITE(pdata, MDIO_MMD_PCS, MDIO_PCS_DIG_CTRL, reg);\n }\n \n+static void axgbe_an37_enable_interrupts(struct axgbe_port *pdata)\n+{\n+\tunsigned int reg;\n+\n+\treg = XMDIO_READ(pdata, MDIO_MMD_PCS, MDIO_PCS_DIG_CTRL);\n+\treg |= AXGBE_PCS_CL37_BP;\n+\tXMDIO_WRITE(pdata, MDIO_MMD_PCS, MDIO_PCS_DIG_CTRL, reg);\n+\n+\treg = XMDIO_READ(pdata, MDIO_MMD_VEND2, MDIO_VEND2_AN_CTRL);\n+\treg |= AXGBE_AN_CL37_INT_MASK;\n+\tXMDIO_WRITE(pdata, MDIO_MMD_VEND2, MDIO_VEND2_AN_CTRL, reg);\n+}\n+\n static void axgbe_an73_clear_interrupts(struct axgbe_port *pdata)\n {\n \tXMDIO_WRITE(pdata, MDIO_MMD_AN, MDIO_AN_INT, 0);\n@@ -54,7 +67,7 @@ static void axgbe_an_enable_interrupts(struct axgbe_port *pdata)\n \t\tbreak;\n \tcase AXGBE_AN_MODE_CL37:\n \tcase AXGBE_AN_MODE_CL37_SGMII:\n-\t\tPMD_DRV_LOG(ERR, \"Unsupported AN_MOD_37\\n\");\n+\t\taxgbe_an37_enable_interrupts(pdata);\n \t\tbreak;\n \tdefault:\n \t\tbreak;\n@@ -254,6 +267,12 @@ static void axgbe_an37_set(struct axgbe_port *pdata, bool enable,\n \tXMDIO_WRITE(pdata, MDIO_MMD_VEND2, MDIO_CTRL1, reg);\n }\n \n+static void axgbe_an37_restart(struct axgbe_port *pdata)\n+{\n+\taxgbe_an37_enable_interrupts(pdata);\n+\taxgbe_an37_set(pdata, true, true);\n+}\n+\n static void axgbe_an37_disable(struct axgbe_port *pdata)\n {\n \taxgbe_an37_set(pdata, false, false);\n@@ -302,7 +321,7 @@ static void axgbe_an_restart(struct axgbe_port *pdata)\n \t\tbreak;\n \tcase AXGBE_AN_MODE_CL37:\n \tcase AXGBE_AN_MODE_CL37_SGMII:\n-\t\tPMD_DRV_LOG(ERR, \"Unsupported AN_MODE_CL37\\n\");\n+\t\taxgbe_an37_restart(pdata);\n \t\tbreak;\n \tdefault:\n \t\tbreak;\n@@ -321,7 +340,7 @@ static void axgbe_an_disable(struct axgbe_port *pdata)\n \t\tbreak;\n \tcase AXGBE_AN_MODE_CL37:\n \tcase AXGBE_AN_MODE_CL37_SGMII:\n-\t\tPMD_DRV_LOG(ERR, \"Unsupported AN_MODE_CL37\\n\");\n+\t\taxgbe_an37_disable(pdata);\n \t\tbreak;\n \tdefault:\n \t\tbreak;\n@@ -573,6 +592,53 @@ static void axgbe_an73_state_machine(struct axgbe_port *pdata)\n \taxgbe_an73_enable_interrupts(pdata);\n }\n \n+static void axgbe_an37_state_machine(struct axgbe_port *pdata)\n+{\n+\tenum axgbe_an cur_state = pdata->an_state;\n+\n+\tif (!pdata->an_int)\n+\t\treturn;\n+\tif (pdata->an_int & AXGBE_AN_CL37_INT_CMPLT) {\n+\t\tpdata->an_state = AXGBE_AN_COMPLETE;\n+\t\tpdata->an_int &= ~AXGBE_AN_CL37_INT_CMPLT;\n+\n+\t/* If SGMII is enabled, check the link status */\n+\t\tif (pdata->an_mode == AXGBE_AN_MODE_CL37_SGMII &&\n+\t\t !(pdata->an_status & AXGBE_SGMII_AN_LINK_STATUS))\n+\t\t\tpdata->an_state = AXGBE_AN_NO_LINK;\n+\t}\n+\n+\tcur_state = pdata->an_state;\n+\n+\tswitch (pdata->an_state) {\n+\tcase AXGBE_AN_READY:\n+\t\tbreak;\n+\tcase AXGBE_AN_COMPLETE:\n+\t\tbreak;\n+\tcase AXGBE_AN_NO_LINK:\n+\t\tbreak;\n+\tdefault:\n+\t\tpdata->an_state = AXGBE_AN_ERROR;\n+\t\tbreak;\n+\t}\n+\n+\tif (pdata->an_state == AXGBE_AN_ERROR) {\n+\t\tPMD_DRV_LOG(ERR, \"error during auto-negotiation, state=%u\\n\",\n+\t\t\t cur_state);\n+\t\tpdata->an_int = 0;\n+\t\taxgbe_an37_clear_interrupts(pdata);\n+\t}\n+\n+\tif (pdata->an_state >= AXGBE_AN_COMPLETE) {\n+\t\tpdata->an_result = pdata->an_state;\n+\t\tpdata->an_state = AXGBE_AN_READY;\n+\t\tif (pdata->phy_if.phy_impl.an_post)\n+\t\t\tpdata->phy_if.phy_impl.an_post(pdata);\n+\t}\n+\n+\taxgbe_an37_enable_interrupts(pdata);\n+}\n+\n static void axgbe_an73_isr(struct axgbe_port *pdata)\n {\n \t/* Disable AN interrupts */\n@@ -580,6 +646,7 @@ static void axgbe_an73_isr(struct axgbe_port *pdata)\n \n \t/* Save the interrupt(s) that fired */\n \tpdata->an_int = XMDIO_READ(pdata, MDIO_MMD_AN, MDIO_AN_INT);\n+\taxgbe_an73_clear_interrupts(pdata);\n \n \tif (pdata->an_int) {\n \t\t/* Clear the interrupt(s) that fired and process them */\n@@ -593,6 +660,29 @@ static void axgbe_an73_isr(struct axgbe_port *pdata)\n \t}\n }\n \n+static void axgbe_an37_isr(struct axgbe_port *pdata)\n+{\n+\tunsigned int reg = 0;\n+\t/* Disable AN interrupts */\n+\taxgbe_an37_disable_interrupts(pdata);\n+\n+\t/* Save the interrupt(s) that fired */\n+\treg = XMDIO_READ(pdata, MDIO_MMD_VEND2, MDIO_VEND2_AN_STAT);\n+\tpdata->an_int = reg & AXGBE_AN_CL37_INT_MASK;\n+\tpdata->an_status = reg & ~AXGBE_AN_CL37_INT_MASK;\n+\taxgbe_an37_clear_interrupts(pdata);\n+\n+\tif (pdata->an_int & 0x01) {\n+\t\t/* Clear the interrupt(s) that fired and process them */\n+\t\treg &= ~AXGBE_AN_CL37_INT_MASK;\n+\t\tXMDIO_WRITE(pdata, MDIO_MMD_VEND2, MDIO_VEND2_AN_STAT, reg);\n+\t\taxgbe_an37_state_machine(pdata);\n+\t} else {\n+\t\t/* Enable AN interrupts */\n+\t\taxgbe_an37_enable_interrupts(pdata);\n+\t}\n+}\n+\n static void axgbe_an_isr(struct axgbe_port *pdata)\n {\n \tswitch (pdata->an_mode) {\n@@ -602,7 +692,7 @@ static void axgbe_an_isr(struct axgbe_port *pdata)\n \t\tbreak;\n \tcase AXGBE_AN_MODE_CL37:\n \tcase AXGBE_AN_MODE_CL37_SGMII:\n-\t\tPMD_DRV_LOG(ERR, \"AN_MODE_37 not supported\\n\");\n+\t\taxgbe_an37_isr(pdata);\n \t\tbreak;\n \tdefault:\n \t\tbreak;\n@@ -614,6 +704,48 @@ static void axgbe_an_combined_isr(struct axgbe_port *pdata)\n \taxgbe_an_isr(pdata);\n }\n \n+static void axgbe_an37_init(struct axgbe_port *pdata)\n+{\n+\tunsigned int advertising;\n+\tunsigned int reg = 0;\n+\n+\tadvertising = pdata->phy_if.phy_impl.an_advertising(pdata);\n+\n+\treg = XMDIO_READ(pdata, MDIO_MMD_VEND2, MDIO_VEND2_AN_ADVERTISE);\n+\tif (advertising & ADVERTISED_Pause)\n+\t\treg |= 0x100;\n+\telse\n+\t\treg &= ~0x100;\n+\tif (advertising & ADVERTISED_Asym_Pause)\n+\t\treg |= 0x80;\n+\telse\n+\t\treg &= ~0x80;\n+\n+\t/* Full duplex, but not half */\n+\treg |= AXGBE_AN_CL37_FD_MASK;\n+\treg &= ~AXGBE_AN_CL37_HD_MASK;\n+\n+\tXMDIO_WRITE(pdata, MDIO_MMD_VEND2, MDIO_VEND2_AN_ADVERTISE, reg);\n+\n+\t/* Set up the Control register */\n+\treg = XMDIO_READ(pdata, MDIO_MMD_VEND2, MDIO_VEND2_AN_CTRL);\n+\treg &= ~AXGBE_AN_CL37_TX_CONFIG_MASK;\n+\treg &= ~AXGBE_AN_CL37_PCS_MODE_MASK;\n+\n+\tswitch (pdata->an_mode) {\n+\tcase AXGBE_AN_MODE_CL37:\n+\t\treg |= AXGBE_AN_CL37_PCS_MODE_BASEX;\n+\t\tbreak;\n+\tcase AXGBE_AN_MODE_CL37_SGMII:\n+\t\treg |= AXGBE_AN_CL37_PCS_MODE_SGMII;\n+\t\tbreak;\n+\tdefault:\n+\t\tbreak;\n+\t}\n+\treg |= AXGBE_AN_CL37_MII_CTRL_8BIT;\n+\tXMDIO_WRITE(pdata, MDIO_MMD_VEND2, MDIO_VEND2_AN_CTRL, reg);\n+}\n+\n static void axgbe_an73_init(struct axgbe_port *pdata)\n {\n \tunsigned int advertising, reg;\n@@ -673,7 +805,7 @@ static void axgbe_an_init(struct axgbe_port *pdata)\n \t\tbreak;\n \tcase AXGBE_AN_MODE_CL37:\n \tcase AXGBE_AN_MODE_CL37_SGMII:\n-\t\tPMD_DRV_LOG(ERR, \"Unsupported AN_CL37\\n\");\n+\t\taxgbe_an37_init(pdata);\n \t\tbreak;\n \tdefault:\n \t\tbreak;\n@@ -782,9 +914,6 @@ static int __axgbe_phy_config_aneg(struct axgbe_port *pdata)\n \t/* Disable and stop any in progress auto-negotiation */\n \taxgbe_an_disable_all(pdata);\n \n-\t/* Clear any auto-negotitation interrupts */\n-\taxgbe_an_clear_interrupts_all(pdata);\n-\n \tpdata->an_result = AXGBE_AN_READY;\n \tpdata->an_state = AXGBE_AN_READY;\n \tpdata->kr_state = AXGBE_RX_BPA;\n@@ -792,6 +921,7 @@ static int __axgbe_phy_config_aneg(struct axgbe_port *pdata)\n \n \t/* Re-enable auto-negotiation interrupt */\n \trte_intr_enable(&pdata->pci_dev->intr_handle);\n+\taxgbe_an37_enable_interrupts(pdata);\n \n \taxgbe_an_init(pdata);\n \taxgbe_an_restart(pdata);\n@@ -875,10 +1005,26 @@ static void axgbe_phy_status_result(struct axgbe_port *pdata)\n \taxgbe_set_mode(pdata, mode);\n }\n \n+static int autoneg_time_out(unsigned long autoneg_start_time)\n+{\n+\tunsigned long autoneg_timeout;\n+\tunsigned long ticks;\n+\n+\tautoneg_timeout = autoneg_start_time + (AXGBE_LINK_TIMEOUT *\n+\t\t\t\t\t\t2 * rte_get_timer_hz());\n+\tticks = rte_get_timer_cycles();\n+\tif (time_after(ticks, autoneg_timeout))\n+\t\treturn 1;\n+\telse\n+\t\treturn 0;\n+}\n+\n static void axgbe_phy_status(struct axgbe_port *pdata)\n {\n \tunsigned int link_aneg;\n-\tint an_restart;\n+\tint an_restart, ret;\n+\tunsigned int reg = 0;\n+\tunsigned long autoneg_start_time;\n \n \tif (axgbe_test_bit(AXGBE_LINK_ERR, &pdata->dev_state)) {\n \t\tpdata->phy.link = 0;\n@@ -896,8 +1042,32 @@ static void axgbe_phy_status(struct axgbe_port *pdata)\n \n \tif (pdata->phy.link) {\n \t\tif (link_aneg && !axgbe_phy_aneg_done(pdata)) {\n-\t\t\taxgbe_check_link_timeout(pdata);\n-\t\t\treturn;\n+\t\t\tif (axgbe_cur_mode(pdata) == AXGBE_MODE_SGMII_1000) {\n+\t\t\t\t/*autoneg not complete, so re-intializing*/\n+\t\t\t\t/* and restarting it*/\n+\t\t\t\taxgbe_an_init(pdata);\n+\t\t\t\taxgbe_an_restart(pdata);\n+\t\t\t\treg = XMDIO_READ(pdata, MDIO_MMD_VEND2,\n+\t\t\t\t\t\t MDIO_VEND2_AN_STAT);\n+\t\t\t\tautoneg_start_time = rte_get_timer_cycles();\n+\t\t\t\t/*poll for autoneg to complete*/\n+\t\t\t\twhile (!(reg & AXGBE_AN_CL37_INT_CMPLT)) {\n+\t\t\t\t\tret =\n+\t\t\t\t\tautoneg_time_out(autoneg_start_time);\n+\t\t\t\t\tif (ret)\n+\t\t\t\t\t\tbreak;\n+\t\t\t\t\treg = XMDIO_READ(pdata,\n+\t\t\t\t\t\t\t MDIO_MMD_VEND2,\n+\t\t\t\t\t\t\t MDIO_VEND2_AN_STAT);\n+\t\t\t\t\tif (reg & AXGBE_AN_CL37_INT_CMPLT) {\n+\t\t\t\t\t\taxgbe_an37_isr(pdata);\n+\t\t\t\t\t\tbreak;\n+\t\t\t\t\t}\n+\t\t\t\t}\n+\t\t\t} else {\n+\t\t\t\taxgbe_check_link_timeout(pdata);\n+\t\t\t\treturn;\n+\t\t\t}\n \t\t}\n \t\taxgbe_phy_status_result(pdata);\n \t\tif (axgbe_test_bit(AXGBE_LINK_INIT, &pdata->dev_state))\ndiff --git a/drivers/net/axgbe/axgbe_phy_impl.c b/drivers/net/axgbe/axgbe_phy_impl.c\nindex f0dc11695..a324a2bc9 100644\n--- a/drivers/net/axgbe/axgbe_phy_impl.c\n+++ b/drivers/net/axgbe/axgbe_phy_impl.c\n@@ -957,6 +957,41 @@ static enum axgbe_mode axgbe_phy_an73_outcome(struct axgbe_port *pdata)\n \treturn mode;\n }\n \n+static enum axgbe_mode axgbe_phy_an37_sgmii_outcome(struct axgbe_port *pdata)\n+{\n+\tenum axgbe_mode mode;\n+\n+\tpdata->phy.lp_advertising |= ADVERTISED_Autoneg;\n+\tpdata->phy.lp_advertising |= ADVERTISED_1000baseT_Full;\n+\n+\tif (pdata->phy.pause_autoneg)\n+\t\taxgbe_phy_phydev_flowctrl(pdata);\n+\n+\tswitch (pdata->an_status & AXGBE_SGMII_AN_LINK_SPEED) {\n+\tcase AXGBE_SGMII_AN_LINK_SPEED_100:\n+\t\tif (pdata->an_status & AXGBE_SGMII_AN_LINK_DUPLEX) {\n+\t\t\tpdata->phy.lp_advertising |= ADVERTISED_100baseT_Full;\n+\t\t\tmode = AXGBE_MODE_SGMII_100;\n+\t\t} else {\n+\t\t\tmode = AXGBE_MODE_UNKNOWN;\n+\t\t}\n+\t\tbreak;\n+\tcase AXGBE_SGMII_AN_LINK_SPEED_1000:\n+\t\tif (pdata->an_status & AXGBE_SGMII_AN_LINK_DUPLEX) {\n+\t\t\tpdata->phy.lp_advertising |= ADVERTISED_1000baseT_Full;\n+\t\t\tmode = AXGBE_MODE_SGMII_1000;\n+\t\t} else {\n+\t\t\t/* Half-duplex not supported */\n+\t\t\tmode = AXGBE_MODE_UNKNOWN;\n+\t\t}\n+\t\tbreak;\n+\tdefault:\n+\t\tmode = AXGBE_MODE_UNKNOWN;\n+\t\tbreak;\n+\t}\n+\treturn mode;\n+}\n+\n static enum axgbe_mode axgbe_phy_an_outcome(struct axgbe_port *pdata)\n {\n \tswitch (pdata->an_mode) {\n@@ -966,6 +1001,7 @@ static enum axgbe_mode axgbe_phy_an_outcome(struct axgbe_port *pdata)\n \t\treturn axgbe_phy_an73_redrv_outcome(pdata);\n \tcase AXGBE_AN_MODE_CL37:\n \tcase AXGBE_AN_MODE_CL37_SGMII:\n+\t\treturn axgbe_phy_an37_sgmii_outcome(pdata);\n \tdefault:\n \t\treturn AXGBE_MODE_UNKNOWN;\n \t}\n@@ -1957,6 +1993,7 @@ static int axgbe_phy_start(struct axgbe_port *pdata)\n \tdefault:\n \t\tbreak;\n \t}\n+\tpdata->phy.advertising &= axgbe_phy_an_advertising(pdata);\n \n \treturn ret;\n }\n", "prefixes": [ "v1", "2/2" ] }{ "id": 64393, "url": "