get:
Show a patch.

patch:
Update a patch.

put:
Update a patch.

GET /api/patches/77366/?format=api
HTTP 200 OK
Allow: GET, PUT, PATCH, HEAD, OPTIONS
Content-Type: application/json
Vary: Accept

{
    "id": 77366,
    "url": "http://patches.dpdk.org/api/patches/77366/?format=api",
    "web_url": "http://patches.dpdk.org/project/dpdk/patch/20200911083520.24020-7-sachin.saxena@oss.nxp.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": "<20200911083520.24020-7-sachin.saxena@oss.nxp.com>",
    "list_archive_url": "https://inbox.dpdk.org/dev/20200911083520.24020-7-sachin.saxena@oss.nxp.com",
    "date": "2020-09-11T08:35:18",
    "name": "[v2,6/8] bus/dpaa: enhance link status support",
    "commit_ref": null,
    "pull_url": null,
    "state": "superseded",
    "archived": true,
    "hash": "2bff2c77afbd3b242b04321fa78c42bc30a389e5",
    "submitter": {
        "id": 1782,
        "url": "http://patches.dpdk.org/api/people/1782/?format=api",
        "name": "Sachin Saxena (OSS)",
        "email": "sachin.saxena@oss.nxp.com"
    },
    "delegate": null,
    "mbox": "http://patches.dpdk.org/project/dpdk/patch/20200911083520.24020-7-sachin.saxena@oss.nxp.com/mbox/",
    "series": [
        {
            "id": 12138,
            "url": "http://patches.dpdk.org/api/series/12138/?format=api",
            "web_url": "http://patches.dpdk.org/project/dpdk/list/?series=12138",
            "date": "2020-09-11T08:35:12",
            "name": "enhancement and fixes for nxp dpaax platform",
            "version": 2,
            "mbox": "http://patches.dpdk.org/series/12138/mbox/"
        }
    ],
    "comments": "http://patches.dpdk.org/api/patches/77366/comments/",
    "check": "success",
    "checks": "http://patches.dpdk.org/api/patches/77366/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 81D48A04B5;\n\tFri, 11 Sep 2020 10:36:36 +0200 (CEST)",
            "from [92.243.14.124] (localhost [127.0.0.1])\n\tby dpdk.org (Postfix) with ESMTP id 66F991C123;\n\tFri, 11 Sep 2020 10:35:47 +0200 (CEST)",
            "from EUR03-DB5-obe.outbound.protection.outlook.com\n (mail-eopbgr40057.outbound.protection.outlook.com [40.107.4.57])\n by dpdk.org (Postfix) with ESMTP id D798B1C12B\n for <dev@dpdk.org>; Fri, 11 Sep 2020 10:35:45 +0200 (CEST)",
            "from VI1PR04MB5837.eurprd04.prod.outlook.com (2603:10a6:803:ec::28)\n by VI1PR04MB6973.eurprd04.prod.outlook.com (2603:10a6:803:13d::9)\n with Microsoft SMTP Server (version=TLS1_2,\n cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.3370.16; Fri, 11 Sep\n 2020 08:35:45 +0000",
            "from VI1PR04MB5837.eurprd04.prod.outlook.com\n ([fe80::cc01:9fe2:2544:8a4b]) by VI1PR04MB5837.eurprd04.prod.outlook.com\n ([fe80::cc01:9fe2:2544:8a4b%7]) with mapi id 15.20.3348.019; Fri, 11 Sep 2020\n 08:35:45 +0000",
            "from lsv03161.swis.in-blr01.nxp.com (14.142.151.118) by\n SG2PR04CA0178.apcprd04.prod.outlook.com (2603:1096:4:14::16) with Microsoft\n SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256) id\n 15.20.3370.16 via Frontend Transport; Fri, 11 Sep 2020 08:35:43 +0000"
        ],
        "ARC-Seal": "i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none;\n b=eDp23f47YyxlKM4KWu8up+vX/9ON/YQCXNh+6t4xvrFW1RamG5TWIN/xyCYxQkIZVPdteTJ98IKIGsiMRSxoWazUhgkY9s1wjINxUYKun8rt/k3CnhpuIhIyeWjwK3ntTgEOUa8pdjafpuJvUBpPFXhQ8CQhPwMD7KoEWXKyyvQ0Sk1RAaCXsAtEebLjtEn0BE/hWeKjRdBp3OtJ/ipTCkDuUS3reTV8vv2ZYXY1KIkVYr09cTfL34D/KtpY54i5PYnP+hDaK66NQoRlPMG9NPXXjb9LMXRSzu100hPod/eJSu3MRBzMrSOfWG7H8iE5wha12NMNkX0AgA7VGhIxeg==",
        "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=d1yFhLjkKclDELl0WoGehJkqe8y7gKlPUPlGYPhZsqc=;\n b=FId2gv7svlO+EA2k/m6KcIxzVAPm7GGc0SS3Bz/zVTWlO4Cwx1K6/LJn0si0KWYIssSVM0dm/h6FXDaiZIvc4bRE7kWRG5hc3BRzPxTqGRS4SxNMqb6QNQzLzXTqJvyb/HyFFcsMQlGp1c+Vjsa1qJXPqOiqaHHwUvgIIplido4JwBF0CqB/zj3p0Xfu/mCsRG7ymREyLDHgAiDOfvJcPu79JGUnOWg7N5G6ZM9tWIpDxstG0gDX94VybdMo+etmLEu1Dkp9SQhZn7S7cGlnPBxYG2O9OetbmHpLlT6OQwH/fc8yPnLGdMkU2s2iz5zSoaP0kZE5J5S1hkyjAOrORw==",
        "ARC-Authentication-Results": "i=1; mx.microsoft.com 1; spf=pass\n smtp.mailfrom=oss.nxp.com; dmarc=pass action=none header.from=oss.nxp.com;\n dkim=pass header.d=oss.nxp.com; arc=none",
        "DKIM-Signature": "v=1; a=rsa-sha256; c=relaxed/relaxed; d=NXP1.onmicrosoft.com;\n s=selector2-NXP1-onmicrosoft-com;\n h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck;\n bh=d1yFhLjkKclDELl0WoGehJkqe8y7gKlPUPlGYPhZsqc=;\n b=WoYUcQ2Beiwh2wFRPsE2N4wrYhbi5lWcs7Kz7NaR25jj0LuHQKV+l3EI6DkMgfIHNJBfXCJGX6lhne1M9gjZobZ5sjGcihOM9uU/tY6crfcWrzM11dETnnQ7TXDLIcAuHlPxtQTbWAUORRhvTnoM+MbCn85vtRc+P5dYWOuOSIQ=",
        "Authentication-Results": "dpdk.org; dkim=none (message not signed)\n header.d=none;dpdk.org; dmarc=none action=none header.from=oss.nxp.com;",
        "From": "\"Sachin Saxena (OSS)\" <sachin.saxena@oss.nxp.com>",
        "To": "dev@dpdk.org,\n\tferruh.yigit@intel.com",
        "Date": "Fri, 11 Sep 2020 14:05:18 +0530",
        "Message-Id": "<20200911083520.24020-7-sachin.saxena@oss.nxp.com>",
        "X-Mailer": [
            "git-send-email 2.28.0",
            "git-send-email 2.28.0"
        ],
        "In-Reply-To": "<20200911083520.24020-1-sachin.saxena@oss.nxp.com>",
        "References": "<20200911083520.24020-1-sachin.saxena@oss.nxp.com>",
        "Content-Transfer-Encoding": "8bit",
        "Content-Type": "text/plain",
        "X-ClientProxiedBy": "SG2PR04CA0178.apcprd04.prod.outlook.com\n (2603:1096:4:14::16) To VI1PR04MB5837.eurprd04.prod.outlook.com\n (2603:10a6:803:ec::28)",
        "MIME-Version": "1.0",
        "X-MS-Exchange-MessageSentRepresentingType": "1",
        "X-Originating-IP": "[14.142.151.118]",
        "X-MS-PublicTrafficType": "Email",
        "X-MS-Office365-Filtering-HT": "Tenant",
        "X-MS-Office365-Filtering-Correlation-Id": "954679d5-ff42-4153-1dda-08d8562dacaf",
        "X-MS-TrafficTypeDiagnostic": "VI1PR04MB6973:",
        "X-MS-Exchange-SharedMailbox-RoutingAgent-Processed": "True",
        "X-MS-Exchange-Transport-Forked": "True",
        "X-Microsoft-Antispam-PRVS": "\n <VI1PR04MB69734665FCC4E556FA831007A2240@VI1PR04MB6973.eurprd04.prod.outlook.com>",
        "X-MS-Oob-TLC-OOBClassifiers": "OLM:127;",
        "X-MS-Exchange-SenderADCheck": "1",
        "X-Microsoft-Antispam": "BCL:0;",
        "X-Microsoft-Antispam-Message-Info": "\n HGzqxN11COsdhRr3XHX2gWQhAVHMhJt4EmyTsAwbOuErcDvSBRUArlPIjoXs1ClhsBpSPAbhS+PqzTXmWtqAbsK3DqTe5NtepZzcWtKiVN+s5gXvr6Vqa5nILlFskdNT4NGpetL30ke4B0VSdlQxbC/Uj6xNppbzNNGxxsD70cFV+ZFZjc+J+ODRHdg/s83OV+1WaQuVdb24feCUEjE/KwY/C34NghjlAEBm9numtxV28YDxr60jepUTPpiachEI+iZhQlpm0zgc4RaAjzfZgm8sdsZmuKPsEWtMz9lJTE6FqYQpwvGF7kM4ZMFGuZN7htLFgw8wL3AZvL7lJJogwS+RsYj+g1oLkaxRnPNEhRlp0MKnN8x+aoPnh7DHFOAC",
        "X-Forefront-Antispam-Report": "CIP:255.255.255.255; CTRY:; LANG:en; SCL:1; SRV:;\n IPV:NLI; SFV:NSPM; H:VI1PR04MB5837.eurprd04.prod.outlook.com; PTR:; CAT:NONE;\n SFS:(4636009)(346002)(376002)(136003)(396003)(39860400002)(366004)(52116002)(86362001)(1076003)(66556008)(66946007)(2906002)(66476007)(8936002)(5660300002)(83380400001)(316002)(30864003)(8676002)(2616005)(956004)(6512007)(16526019)(186003)(6486002)(1006002)(6666004)(26005)(6506007)(478600001)(55236004)(110426005);\n DIR:OUT; SFP:1101;",
        "X-MS-Exchange-AntiSpam-MessageData": "\n fRmyB/JdRMdPcxb28x78R7drgQm4yo11gevO7RH7lSdT25+wFle8D52DsGFrXreDVFpv9zWw3TlemVbStPT1KXN65xc/ubQWLDB7BT8FQbOoEOlLey3FtViD+XQ0Swls9sUOFkrIryKlLv41reJiqlORvzmRRsCf10ivOTQ0lhOO3bC37dVy7+Ddi417RBFyIKBmC/FKnJkeG+X7zUiVYx5lqRQPKgBEE28hODYtlXCzxgeRFEZhRIpjWzjkwsd3Aa0VOZY7ADuh5iYi7gBqqXgKqMXJcS2HwWiPoDpce527GZje7u3uXRoSkUE2ac1b8m1FrePC+TwuXicw9Ow6s84CbxMLfYiUrEN+LGWOJXJHMUZwTFYFc2Kf19t9AO6P1DSKS+fGJpn2O8VVYt7/4HNoYZgtYQdUs4KgQ7sy72Zz1PmaWfq40B/sWFrWrGFHE+qWJMokWmjhnS4lldDExEDQ9rXYmCSC9ZIT7cxmrTr7pfPp60uA8aYONmMcKW4khagZwa56GXyt7LLik61o0GICjZ+wwJjGnBvaKVhAB02DNS8FLCdBrzyPcXMN/aTasSqf3eBxaGLp0XkELDR9oYBvDqJvRfnCXJ/uKDIn5F7UGuQByBo4K+JuEXxvd76NwgKdK2Z17QFAbp7MUspAaA==",
        "X-OriginatorOrg": "oss.nxp.com",
        "X-MS-Exchange-CrossTenant-Network-Message-Id": "\n 954679d5-ff42-4153-1dda-08d8562dacaf",
        "X-MS-Exchange-CrossTenant-AuthSource": "VI1PR04MB5837.eurprd04.prod.outlook.com",
        "X-MS-Exchange-CrossTenant-AuthAs": "Internal",
        "X-MS-Exchange-CrossTenant-OriginalArrivalTime": "11 Sep 2020 08:35:44.8736 (UTC)",
        "X-MS-Exchange-CrossTenant-FromEntityHeader": "Hosted",
        "X-MS-Exchange-CrossTenant-Id": "686ea1d3-bc2b-4c6f-a92c-d99c5c301635",
        "X-MS-Exchange-CrossTenant-MailboxType": "HOSTED",
        "X-MS-Exchange-CrossTenant-UserPrincipalName": "\n 2rA/V04Jhnmh/RUl3HiHAIBgNoR/GnqvRlrBfKBirsJeuqpZj1QvqBhbc9p1zoIGu2Ln83YUQ/SbSkyLyDxuoQ==",
        "X-MS-Exchange-Transport-CrossTenantHeadersStamped": "VI1PR04MB6973",
        "Subject": "[dpdk-dev] [PATCH v2 6/8] bus/dpaa: enhance link status support",
        "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: Rohit Raj <rohit.raj@nxp.com>\n\nThis patch adds support to get/set link speed, duplex and\nautoneg mode status from/to PHY. Enahnce device capabilities\nto advertise all supported link speeds according to mac type.\n\nAlso enables fallback support for get link status api where\nkernel support is missing.\n\nSigned-off-by: Sachin Saxena <sachin.saxena@oss.nxp.com>\nSigned-off-by: Rohit Raj <rohit.raj@nxp.com>\n---\n drivers/bus/dpaa/base/qbman/process.c     | 123 +++++++++++++++++++---\n drivers/bus/dpaa/include/process.h        |  34 +++++-\n drivers/bus/dpaa/rte_bus_dpaa_version.map |   3 +\n drivers/net/dpaa/dpaa_ethdev.c            | 113 ++++++++++++++++----\n 4 files changed, 241 insertions(+), 32 deletions(-)",
    "diff": "diff --git a/drivers/bus/dpaa/base/qbman/process.c b/drivers/bus/dpaa/base/qbman/process.c\nindex 6f7e37957..9bc92681c 100644\n--- a/drivers/bus/dpaa/base/qbman/process.c\n+++ b/drivers/bus/dpaa/base/qbman/process.c\n@@ -8,6 +8,7 @@\n #include <fcntl.h>\n #include <unistd.h>\n #include <sys/ioctl.h>\n+#include <rte_ethdev.h>\n \n #include \"process.h\"\n \n@@ -341,30 +342,78 @@ int dpaa_intr_disable(char *if_name)\n \treturn 0;\n }\n \n+#define DPAA_IOCTL_GET_IOCTL_VERSION \\\n+\t_IOR(DPAA_IOCTL_MAGIC, 0x14, int)\n+\n+int dpaa_get_ioctl_version_number(void)\n+{\n+\tint version_num, ret = check_fd();\n+\n+\tif (ret)\n+\t\treturn ret;\n+\n+\tret = ioctl(fd, DPAA_IOCTL_GET_IOCTL_VERSION, &version_num);\n+\tif (ret) {\n+\t\tif (errno == EINVAL) {\n+\t\t\tversion_num = 1;\n+\t\t} else {\n+\t\t\tprintf(\"Failed to get ioctl version number\\n\");\n+\t\t\tversion_num = -1;\n+\t\t}\n+\t}\n+\n+\treturn version_num;\n+}\n+\n #define DPAA_IOCTL_GET_LINK_STATUS \\\n \t_IOWR(DPAA_IOCTL_MAGIC, 0x10, struct usdpaa_ioctl_link_status_args)\n \n-int dpaa_get_link_status(char *if_name)\n+#define DPAA_IOCTL_GET_LINK_STATUS_OLD \\\n+\t_IOWR(DPAA_IOCTL_MAGIC, 0x10, struct usdpaa_ioctl_link_status_args_old)\n+\n+\n+int dpaa_get_link_status(char *if_name, struct rte_eth_link *link)\n {\n-\tint ret = check_fd();\n-\tstruct usdpaa_ioctl_link_status_args args;\n+\tint ioctl_version, ret = check_fd();\n \n \tif (ret)\n \t\treturn ret;\n \n-\tstrcpy(args.if_name, if_name);\n-\targs.link_status = 0;\n+\tioctl_version = dpaa_get_ioctl_version_number();\n \n-\tret = ioctl(fd, DPAA_IOCTL_GET_LINK_STATUS, &args);\n-\tif (ret) {\n-\t\tif (errno == EINVAL)\n-\t\t\tprintf(\"Failed to get link status: Not Supported\\n\");\n-\t\telse\n+\tif (ioctl_version == 2) {\n+\t\tstruct usdpaa_ioctl_link_status_args args;\n+\n+\t\tstrcpy(args.if_name, if_name);\n+\n+\t\tret = ioctl(fd, DPAA_IOCTL_GET_LINK_STATUS, &args);\n+\t\tif (ret) {\n \t\t\tprintf(\"Failed to get link status\\n\");\n-\t\treturn ret;\n+\t\t\treturn ret;\n+\t\t}\n+\n+\t\tlink->link_status = args.link_status;\n+\t\tlink->link_speed = args.link_speed;\n+\t\tlink->link_duplex = args.link_duplex;\n+\t\tlink->link_autoneg = args.link_autoneg;\n+\t} else {\n+\t\tstruct usdpaa_ioctl_link_status_args_old args;\n+\n+\t\tstrcpy(args.if_name, if_name);\n+\n+\t\tret = ioctl(fd, DPAA_IOCTL_GET_LINK_STATUS_OLD, &args);\n+\t\tif (ret) {\n+\t\t\tif (errno == EINVAL)\n+\t\t\t\tprintf(\"Get link status: Not Supported\\n\");\n+\t\t\telse\n+\t\t\t\tprintf(\"Failed to get link status\\n\");\n+\t\t\treturn ret;\n+\t\t}\n+\n+\t\tlink->link_status = args.link_status;\n \t}\n \n-\treturn args.link_status;\n+\treturn 0;\n }\n \n #define DPAA_IOCTL_UPDATE_LINK_STATUS \\\n@@ -393,3 +442,53 @@ int dpaa_update_link_status(char *if_name, int link_status)\n \n \treturn 0;\n }\n+\n+#define DPAA_IOCTL_UPDATE_LINK_SPEED \\\n+\t_IOW(DPAA_IOCTL_MAGIC, 0x12, struct usdpaa_ioctl_update_link_speed)\n+\n+int dpaa_update_link_speed(char *if_name, int link_speed, int link_duplex)\n+{\n+\tstruct usdpaa_ioctl_update_link_speed args;\n+\tint ret;\n+\n+\tret = check_fd();\n+\tif (ret)\n+\t\treturn ret;\n+\n+\tstrcpy(args.if_name, if_name);\n+\targs.link_speed = link_speed;\n+\targs.link_duplex = link_duplex;\n+\n+\tret = ioctl(fd, DPAA_IOCTL_UPDATE_LINK_SPEED, &args);\n+\tif (ret) {\n+\t\tif (errno == EINVAL)\n+\t\t\tprintf(\"Failed to set link speed: Not Supported\\n\");\n+\t\telse\n+\t\t\tprintf(\"Failed to set link speed\\n\");\n+\t\treturn ret;\n+\t}\n+\n+\treturn ret;\n+}\n+\n+#define DPAA_IOCTL_RESTART_LINK_AUTONEG \\\n+\t_IOW(DPAA_IOCTL_MAGIC, 0x13, char *)\n+\n+int dpaa_restart_link_autoneg(char *if_name)\n+{\n+\tint ret = check_fd();\n+\n+\tif (ret)\n+\t\treturn ret;\n+\n+\tret = ioctl(fd, DPAA_IOCTL_RESTART_LINK_AUTONEG, &if_name);\n+\tif (ret) {\n+\t\tif (errno == EINVAL)\n+\t\t\tprintf(\"Failed to restart autoneg: Not Supported\\n\");\n+\t\telse\n+\t\t\tprintf(\"Failed to restart autoneg\\n\");\n+\t\treturn ret;\n+\t}\n+\n+\treturn ret;\n+}\ndiff --git a/drivers/bus/dpaa/include/process.h b/drivers/bus/dpaa/include/process.h\nindex f52ea1635..be52e6f72 100644\n--- a/drivers/bus/dpaa/include/process.h\n+++ b/drivers/bus/dpaa/include/process.h\n@@ -10,6 +10,7 @@\n #define\t__PROCESS_H\n \n #include <compat.h>\n+#include <rte_ethdev.h>\n \n /* The process device underlies process-wide user/kernel interactions, such as\n  * mapping dma_mem memory and providing accompanying ioctl()s. (This isn't used\n@@ -86,10 +87,25 @@ int dpaa_intr_enable(char *if_name, int efd);\n __rte_internal\n int dpaa_intr_disable(char *if_name);\n \n+struct usdpaa_ioctl_link_status_args_old {\n+\t/* network device node name */\n+\tchar    if_name[IF_NAME_MAX_LEN];\n+\t/* link status(ETH_LINK_UP/DOWN) */\n+\tint     link_status;\n+};\n+\n struct usdpaa_ioctl_link_status_args {\n \t/* network device node name */\n \tchar    if_name[IF_NAME_MAX_LEN];\n+\t/* link status(ETH_LINK_UP/DOWN) */\n \tint     link_status;\n+\t/* link speed (ETH_SPEED_NUM_)*/\n+\tint     link_speed;\n+\t/* link duplex (ETH_LINK_[HALF/FULL]_DUPLEX)*/\n+\tint     link_duplex;\n+\t/* link autoneg (ETH_LINK_AUTONEG/FIXED)*/\n+\tint     link_autoneg;\n+\n };\n \n struct usdpaa_ioctl_update_link_status_args {\n@@ -99,10 +115,24 @@ struct usdpaa_ioctl_update_link_status_args {\n \tint     link_status;\n };\n \n-__rte_internal\n-int dpaa_get_link_status(char *if_name);\n+struct usdpaa_ioctl_update_link_speed {\n+\t/* network device node name*/\n+\tchar    if_name[IF_NAME_MAX_LEN];\n+\t/* link speed (ETH_SPEED_NUM_)*/\n+\tint     link_speed;\n+\t/* link duplex (ETH_LINK_[HALF/FULL]_DUPLEX)*/\n+\tint     link_duplex;\n+};\n \n+__rte_internal\n+int dpaa_get_link_status(char *if_name, struct rte_eth_link *link);\n __rte_internal\n int dpaa_update_link_status(char *if_name, int link_status);\n+__rte_internal\n+int dpaa_update_link_speed(char *if_name, int speed, int duplex);\n+__rte_internal\n+int dpaa_restart_link_autoneg(char *if_name);\n+__rte_internal\n+int dpaa_get_ioctl_version_number(void);\n \n #endif\t/*  __PROCESS_H */\ndiff --git a/drivers/bus/dpaa/rte_bus_dpaa_version.map b/drivers/bus/dpaa/rte_bus_dpaa_version.map\nindex 5b97b6eb2..26436e9fe 100644\n--- a/drivers/bus/dpaa/rte_bus_dpaa_version.map\n+++ b/drivers/bus/dpaa/rte_bus_dpaa_version.map\n@@ -8,10 +8,13 @@ INTERNAL {\n \tbman_query_free_buffers;\n \tbman_release;\n \tbman_thread_irq;\n+\tdpaa_get_ioctl_version_number;\n \tdpaa_get_eth_port_cfg;\n \tdpaa_get_qm_channel_caam;\n \tdpaa_get_qm_channel_pool;\n \tdpaa_get_link_status;\n+\tdpaa_restart_link_autoneg;\n+\tdpaa_update_link_speed;\n \tdpaa_intr_disable;\n \tdpaa_intr_enable;\n \tdpaa_svr_family;\ndiff --git a/drivers/net/dpaa/dpaa_ethdev.c b/drivers/net/dpaa/dpaa_ethdev.c\nindex d5eeb280a..66bb6eb00 100644\n--- a/drivers/net/dpaa/dpaa_ethdev.c\n+++ b/drivers/net/dpaa/dpaa_ethdev.c\n@@ -205,10 +205,12 @@ dpaa_eth_dev_configure(struct rte_eth_dev *dev)\n \tuint64_t rx_offloads = eth_conf->rxmode.offloads;\n \tuint64_t tx_offloads = eth_conf->txmode.offloads;\n \tstruct rte_device *rdev = dev->device;\n+\tstruct rte_eth_link *link = &dev->data->dev_link;\n \tstruct rte_dpaa_device *dpaa_dev;\n \tstruct fman_if *fif = dev->process_private;\n \tstruct __fman_if *__fif;\n \tstruct rte_intr_handle *intr_handle;\n+\tint speed, duplex;\n \tint ret;\n \n \tPMD_INIT_FUNC_TRACE();\n@@ -292,6 +294,60 @@ dpaa_eth_dev_configure(struct rte_eth_dev *dev)\n \t\t\tdev->data->dev_flags &= ~RTE_ETH_DEV_INTR_LSC;\n \t\t}\n \t}\n+\n+\t/* Wait for link status to get updated */\n+\tif (!link->link_status)\n+\t\tsleep(1);\n+\n+\t/* Configure link only if link is UP*/\n+\tif (link->link_status) {\n+\t\tif (eth_conf->link_speeds == ETH_LINK_SPEED_AUTONEG) {\n+\t\t\t/* Start autoneg only if link is not in autoneg mode */\n+\t\t\tif (!link->link_autoneg)\n+\t\t\t\tdpaa_restart_link_autoneg(__fif->node_name);\n+\t\t} else if (eth_conf->link_speeds & ETH_LINK_SPEED_FIXED) {\n+\t\t\tswitch (eth_conf->link_speeds & ~ETH_LINK_SPEED_FIXED) {\n+\t\t\tcase ETH_LINK_SPEED_10M_HD:\n+\t\t\t\tspeed = ETH_SPEED_NUM_10M;\n+\t\t\t\tduplex = ETH_LINK_HALF_DUPLEX;\n+\t\t\t\tbreak;\n+\t\t\tcase ETH_LINK_SPEED_10M:\n+\t\t\t\tspeed = ETH_SPEED_NUM_10M;\n+\t\t\t\tduplex = ETH_LINK_FULL_DUPLEX;\n+\t\t\t\tbreak;\n+\t\t\tcase ETH_LINK_SPEED_100M_HD:\n+\t\t\t\tspeed = ETH_SPEED_NUM_100M;\n+\t\t\t\tduplex = ETH_LINK_HALF_DUPLEX;\n+\t\t\t\tbreak;\n+\t\t\tcase ETH_LINK_SPEED_100M:\n+\t\t\t\tspeed = ETH_SPEED_NUM_100M;\n+\t\t\t\tduplex = ETH_LINK_FULL_DUPLEX;\n+\t\t\t\tbreak;\n+\t\t\tcase ETH_LINK_SPEED_1G:\n+\t\t\t\tspeed = ETH_SPEED_NUM_1G;\n+\t\t\t\tduplex = ETH_LINK_FULL_DUPLEX;\n+\t\t\t\tbreak;\n+\t\t\tcase ETH_LINK_SPEED_2_5G:\n+\t\t\t\tspeed = ETH_SPEED_NUM_2_5G;\n+\t\t\t\tduplex = ETH_LINK_FULL_DUPLEX;\n+\t\t\t\tbreak;\n+\t\t\tcase ETH_LINK_SPEED_10G:\n+\t\t\t\tspeed = ETH_SPEED_NUM_10G;\n+\t\t\t\tduplex = ETH_LINK_FULL_DUPLEX;\n+\t\t\t\tbreak;\n+\t\t\tdefault:\n+\t\t\t\tspeed = ETH_SPEED_NUM_NONE;\n+\t\t\t\tduplex = ETH_LINK_FULL_DUPLEX;\n+\t\t\t\tbreak;\n+\t\t\t}\n+\t\t\t/* Set link speed */\n+\t\t\tdpaa_update_link_speed(__fif->node_name, speed, duplex);\n+\t\t} else {\n+\t\t\t/* Manual autoneg - custom advertisement speed. */\n+\t\t\tprintf(\"Custom Advertisement speeds not supported\\n\");\n+\t\t}\n+\t}\n+\n \treturn 0;\n }\n \n@@ -377,6 +433,7 @@ static void dpaa_eth_dev_close(struct rte_eth_dev *dev)\n \tstruct rte_device *rdev = dev->device;\n \tstruct rte_dpaa_device *dpaa_dev;\n \tstruct rte_intr_handle *intr_handle;\n+\tstruct rte_eth_link *link = &dev->data->dev_link;\n \n \tPMD_INIT_FUNC_TRACE();\n \n@@ -386,6 +443,10 @@ static void dpaa_eth_dev_close(struct rte_eth_dev *dev)\n \n \tdpaa_eth_dev_stop(dev);\n \n+\t/* Reset link to autoneg */\n+\tif (link->link_status && !link->link_autoneg)\n+\t\tdpaa_restart_link_autoneg(__fif->node_name);\n+\n \tif (intr_handle && intr_handle->fd &&\n \t    dev->data->dev_conf.intr_conf.lsc != 0) {\n \t\tdpaa_intr_disable(__fif->node_name);\n@@ -446,12 +507,24 @@ static int dpaa_eth_dev_info(struct rte_eth_dev *dev,\n \tdev_info->flow_type_rss_offloads = DPAA_RSS_OFFLOAD_ALL;\n \n \tif (fif->mac_type == fman_mac_1g) {\n-\t\tdev_info->speed_capa = ETH_LINK_SPEED_1G;\n+\t\tdev_info->speed_capa = ETH_LINK_SPEED_10M_HD\n+\t\t\t\t\t| ETH_LINK_SPEED_10M\n+\t\t\t\t\t| ETH_LINK_SPEED_100M_HD\n+\t\t\t\t\t| ETH_LINK_SPEED_100M\n+\t\t\t\t\t| ETH_LINK_SPEED_1G;\n \t} else if (fif->mac_type == fman_mac_2_5g) {\n-\t\tdev_info->speed_capa = ETH_LINK_SPEED_1G\n+\t\tdev_info->speed_capa = ETH_LINK_SPEED_10M_HD\n+\t\t\t\t\t| ETH_LINK_SPEED_10M\n+\t\t\t\t\t| ETH_LINK_SPEED_100M_HD\n+\t\t\t\t\t| ETH_LINK_SPEED_100M\n+\t\t\t\t\t| ETH_LINK_SPEED_1G\n \t\t\t\t\t| ETH_LINK_SPEED_2_5G;\n \t} else if (fif->mac_type == fman_mac_10g) {\n-\t\tdev_info->speed_capa = ETH_LINK_SPEED_1G\n+\t\tdev_info->speed_capa = ETH_LINK_SPEED_10M_HD\n+\t\t\t\t\t| ETH_LINK_SPEED_10M\n+\t\t\t\t\t| ETH_LINK_SPEED_100M_HD\n+\t\t\t\t\t| ETH_LINK_SPEED_100M\n+\t\t\t\t\t| ETH_LINK_SPEED_1G\n \t\t\t\t\t| ETH_LINK_SPEED_2_5G\n \t\t\t\t\t| ETH_LINK_SPEED_10G;\n \t} else {\n@@ -548,31 +621,35 @@ static int dpaa_eth_link_update(struct rte_eth_dev *dev,\n \tstruct rte_eth_link *link = &dev->data->dev_link;\n \tstruct fman_if *fif = dev->process_private;\n \tstruct __fman_if *__fif = container_of(fif, struct __fman_if, __if);\n-\tint ret;\n+\tint ret, ioctl_version;\n \n \tPMD_INIT_FUNC_TRACE();\n \n-\tif (fif->mac_type == fman_mac_1g)\n-\t\tlink->link_speed = ETH_SPEED_NUM_1G;\n-\telse if (fif->mac_type == fman_mac_2_5g)\n-\t\tlink->link_speed = ETH_SPEED_NUM_2_5G;\n-\telse if (fif->mac_type == fman_mac_10g)\n-\t\tlink->link_speed = ETH_SPEED_NUM_10G;\n-\telse\n-\t\tDPAA_PMD_ERR(\"invalid link_speed: %s, %d\",\n-\t\t\t     dpaa_intf->name, fif->mac_type);\n+\tioctl_version = dpaa_get_ioctl_version_number();\n+\n \n \tif (dev->data->dev_flags & RTE_ETH_DEV_INTR_LSC) {\n-\t\tret = dpaa_get_link_status(__fif->node_name);\n-\t\tif (ret < 0)\n+\t\tret = dpaa_get_link_status(__fif->node_name, link);\n+\t\tif (ret)\n \t\t\treturn ret;\n-\t\tlink->link_status = ret;\n \t} else {\n \t\tlink->link_status = dpaa_intf->valid;\n \t}\n \n-\tlink->link_duplex = ETH_LINK_FULL_DUPLEX;\n-\tlink->link_autoneg = ETH_LINK_AUTONEG;\n+\tif (ioctl_version < 2) {\n+\t\tlink->link_duplex = ETH_LINK_FULL_DUPLEX;\n+\t\tlink->link_autoneg = ETH_LINK_AUTONEG;\n+\n+\t\tif (fif->mac_type == fman_mac_1g)\n+\t\t\tlink->link_speed = ETH_SPEED_NUM_1G;\n+\t\telse if (fif->mac_type == fman_mac_2_5g)\n+\t\t\tlink->link_speed = ETH_SPEED_NUM_2_5G;\n+\t\telse if (fif->mac_type == fman_mac_10g)\n+\t\t\tlink->link_speed = ETH_SPEED_NUM_10G;\n+\t\telse\n+\t\t\tDPAA_PMD_ERR(\"invalid link_speed: %s, %d\",\n+\t\t\t\t     dpaa_intf->name, fif->mac_type);\n+\t}\n \n \tDPAA_PMD_INFO(\"Port %d Link is %s\\n\", dev->data->port_id,\n \t\t      link->link_status ? \"Up\" : \"Down\");\n",
    "prefixes": [
        "v2",
        "6/8"
    ]
}