get:
Show a patch.

patch:
Update a patch.

put:
Update a patch.

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

{
    "id": 139264,
    "url": "https://patches.dpdk.org/api/patches/139264/?format=api",
    "web_url": "https://patches.dpdk.org/project/dpdk/patch/20240412125249.10625-16-VenkatKumar.Ande@amd.com/",
    "project": {
        "id": 1,
        "url": "https://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": "<20240412125249.10625-16-VenkatKumar.Ande@amd.com>",
    "list_archive_url": "https://inbox.dpdk.org/dev/20240412125249.10625-16-VenkatKumar.Ande@amd.com",
    "date": "2024-04-12T12:52:41",
    "name": "[16/24] net/axgbe: add support for 10 Mbps speed",
    "commit_ref": null,
    "pull_url": null,
    "state": "changes-requested",
    "archived": false,
    "hash": "8da44a2f436cfd122bede3922a22b3bf37299bf6",
    "submitter": {
        "id": 3256,
        "url": "https://patches.dpdk.org/api/people/3256/?format=api",
        "name": "Venkat Kumar Ande",
        "email": "venkatkumar.ande@amd.com"
    },
    "delegate": {
        "id": 319,
        "url": "https://patches.dpdk.org/api/users/319/?format=api",
        "username": "fyigit",
        "first_name": "Ferruh",
        "last_name": "Yigit",
        "email": "ferruh.yigit@amd.com"
    },
    "mbox": "https://patches.dpdk.org/project/dpdk/patch/20240412125249.10625-16-VenkatKumar.Ande@amd.com/mbox/",
    "series": [
        {
            "id": 31734,
            "url": "https://patches.dpdk.org/api/series/31734/?format=api",
            "web_url": "https://patches.dpdk.org/project/dpdk/list/?series=31734",
            "date": "2024-04-12T12:52:26",
            "name": "[01/24] net/axgbe: remove use of comm_owned field",
            "version": 1,
            "mbox": "https://patches.dpdk.org/series/31734/mbox/"
        }
    ],
    "comments": "https://patches.dpdk.org/api/patches/139264/comments/",
    "check": "warning",
    "checks": "https://patches.dpdk.org/api/patches/139264/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 mails.dpdk.org (mails.dpdk.org [217.70.189.124])\n\tby inbox.dpdk.org (Postfix) with ESMTP id 8697243E52;\n\tFri, 12 Apr 2024 14:55:11 +0200 (CEST)",
            "from mails.dpdk.org (localhost [127.0.0.1])\n\tby mails.dpdk.org (Postfix) with ESMTP id CB10842D35;\n\tFri, 12 Apr 2024 14:54:23 +0200 (CEST)",
            "from NAM10-DM6-obe.outbound.protection.outlook.com\n (mail-dm6nam10on2057.outbound.protection.outlook.com [40.107.93.57])\n by mails.dpdk.org (Postfix) with ESMTP id C7546410FA\n for <dev@dpdk.org>; Fri, 12 Apr 2024 14:54:21 +0200 (CEST)",
            "from BL0PR05CA0016.namprd05.prod.outlook.com (2603:10b6:208:91::26)\n by SJ2PR12MB9138.namprd12.prod.outlook.com (2603:10b6:a03:565::9)\n with Microsoft SMTP Server (version=TLS1_2,\n cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.7409.46; Fri, 12 Apr\n 2024 12:54:19 +0000",
            "from BL6PEPF00020E5F.namprd04.prod.outlook.com\n (2603:10b6:208:91:cafe::e) by BL0PR05CA0016.outlook.office365.com\n (2603:10b6:208:91::26) with Microsoft SMTP Server (version=TLS1_2,\n cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.7495.12 via Frontend\n Transport; Fri, 12 Apr 2024 12:54:19 +0000",
            "from SATLEXMB04.amd.com (165.204.84.17) by\n BL6PEPF00020E5F.mail.protection.outlook.com (10.167.249.20) with Microsoft\n SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id\n 15.20.7452.22 via Frontend Transport; Fri, 12 Apr 2024 12:54:19 +0000",
            "from cae-Lilac-RMB.amd.com (10.180.168.240) by SATLEXMB04.amd.com\n (10.181.40.145) with Microsoft SMTP Server (version=TLS1_2,\n cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.2507.35; Fri, 12 Apr\n 2024 07:54:10 -0500"
        ],
        "ARC-Seal": "i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none;\n b=edPF0eDWnCEovyWL/zFVXrJOYZvNJac7ln6jv/1E/0Uz0g75iP3wP/4FtKPjfIxGYGxCOU7UsPTfZcly6XyZo7Xs55Nb3w/ISUM/xF1t11uJPEvfv8eN5O7UA+COE6n84pKoserqysBDsX0AkSeO4aCRmudEyVIBXNcC7INSe7HMA3ISuR/IJ9lc26muLgWSPTXFLLo/l3brgVgqCTDy67EkKgNhGEqEVybwCMIYHq0esaVTwBVib97ZIWDF9Bu/rOKR9fiwZmVFHT0kKWnhHqaGQ0cV+b9HcT6pwzHaoqlNU8QuLJjnsmpsPjEO7S29tDeMr5it/5zj9qmpDcxUiQ==",
        "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-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1;\n bh=ZxAVAwmdRvjmUmru8jeNoQYG2OnZDBkXAlXPs/8ZjGQ=;\n b=f/LPO5opM2B/AcWPnZQCjpYbq8fPIgIinyxCmZ5QHAB3sUDPVV/D44grHXdenoP5GHlasu5T8aUlM6XrIHPf0OP7txj853DV4To0syjqNvKA7r4HErhZpM3JoJVtIhb7jcfxmbwBoDS0rIsh0vy7HNtvSjr4r6DBGKwcCA/nVJo0UXBdBFNsSGX5T2Z2XgzLJfukwjvv0SFuCyMMFjEXkq7ImvoNHsIJdLWvHvjnf0aA+i6dtbs4jduGDXLvRWODUBEE6T3CCN0L3vwTwGltD2diLuvcdeg65Kazn3QX7eR9OQ5sB0yz3+UO183Mo/V4RUYWD5FvWqf34poAnphlKQ==",
        "ARC-Authentication-Results": "i=1; mx.microsoft.com 1; spf=pass (sender ip is\n 165.204.84.17) smtp.rcpttodomain=dpdk.org smtp.mailfrom=amd.com; dmarc=pass\n (p=quarantine sp=quarantine pct=100) action=none header.from=amd.com;\n dkim=none (message not signed); arc=none (0)",
        "DKIM-Signature": "v=1; a=rsa-sha256; c=relaxed/relaxed; d=amd.com; s=selector1;\n h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck;\n bh=ZxAVAwmdRvjmUmru8jeNoQYG2OnZDBkXAlXPs/8ZjGQ=;\n b=LjTCxgPU8sgFwzrZ343zREIAO6AbYB1B2g6A+woV0emzqburz38wa4AQF/2+aRB4d7SqaB7TpbaZx0Qg1Zb8nTJQRTr3DV0xezEPqEGy6NQbBTHLSh+yyhxE0WkLG8rLZbwUFJZWXj/IkLDTPqm/y/+LIZETXq/I43q3jguqu+s=",
        "X-MS-Exchange-Authentication-Results": "spf=pass (sender IP is 165.204.84.17)\n smtp.mailfrom=amd.com; dkim=none (message not signed)\n header.d=none;dmarc=pass action=none header.from=amd.com;",
        "Received-SPF": "Pass (protection.outlook.com: domain of amd.com designates\n 165.204.84.17 as permitted sender) receiver=protection.outlook.com;\n client-ip=165.204.84.17; helo=SATLEXMB04.amd.com; pr=C",
        "From": "Venkat Kumar Ande <VenkatKumar.Ande@amd.com>",
        "To": "<dev@dpdk.org>",
        "CC": "<Selwin.Sebastian@amd.com>, Venkat Kumar Ande <VenkatKumar.Ande@amd.com>",
        "Subject": "[PATCH 16/24] net/axgbe: add support for 10 Mbps speed",
        "Date": "Fri, 12 Apr 2024 08:52:41 -0400",
        "Message-ID": "<20240412125249.10625-16-VenkatKumar.Ande@amd.com>",
        "X-Mailer": "git-send-email 2.34.1",
        "In-Reply-To": "<20240412125249.10625-1-VenkatKumar.Ande@amd.com>",
        "References": "<20240412125249.10625-1-VenkatKumar.Ande@amd.com>",
        "MIME-Version": "1.0",
        "Content-Transfer-Encoding": "8bit",
        "Content-Type": "text/plain",
        "X-Originating-IP": "[10.180.168.240]",
        "X-ClientProxiedBy": "SATLEXMB04.amd.com (10.181.40.145) To SATLEXMB04.amd.com\n (10.181.40.145)",
        "X-EOPAttributedMessage": "0",
        "X-MS-PublicTrafficType": "Email",
        "X-MS-TrafficTypeDiagnostic": "BL6PEPF00020E5F:EE_|SJ2PR12MB9138:EE_",
        "X-MS-Office365-Filtering-Correlation-Id": "360c4978-3b98-44d6-2c82-08dc5aefaaf3",
        "X-MS-Exchange-SenderADCheck": "1",
        "X-MS-Exchange-AntiSpam-Relay": "0",
        "X-Microsoft-Antispam": "BCL:0;",
        "X-Microsoft-Antispam-Message-Info": "\n NVDLOB0UUfhTYwfl88t5MgITqiUCyrYTSUASOoEYv22HpPAVoFvM4IPze+agzkLm7KKYgOWGfYfX7gTQNCdnlOwQBldEtWO1TrnWjZrSIksOU0+w0ZKF/nqIprhtPqF/I//qzFdIeeo/Yblm2HBP/H/4heRbCvoIth4pA8NavINlW5uBKaHmhbG1SafDlPogOE9oKLchPD/Vic7vF1dmwQONyE/uBfwOFUCyz7mXln9B5xrIQ3KQ9XwctkUXpIV3/i6m5ganCpdSbszHu6P6i3A8VE5Te4DHNJfvdj/8KKSLgD2CVKOqfsvOoUvPotpsgfbQ60AsZw1tKNwjjcmpH0tCUFwHMlNOKffapN7xo5F1zklj5ROdF+h2zHsEbUbAOKXau7xcrtJC+C+Y2ddcYEG7tXdUYT8oyf0sbc4lHCGEkX+nTwklakqISj7zrtToigC3gMiXMW/BRRyYKblhYgY1qoYwgh2sy+EBW9bFlc/Ug9JFBfzAdUj8aaxJKz0yRuCEPQzxQSjrWxHYMP/0wsEIJqgi41Yr/eu8Rh/yNCOCwYrdCrb8nI7uA83D+BpGtyiAJaYpLCmEmYDhMZnThcct0KZhXvPRheTjr8/gbHXHvvBlrTy0QcTaOncAjfiigJEBhaCZKRNr9qNmfp0Vuz+n2zvtUOD0bDhOJ71G5DygzvevALY4vt8ytJzzxraxIQQBUKfG2k1JmuwgrAYQIs+pxe7XM3n9bQDsyUDiyaxMJmnMsGA45gEGPfhaFo3E",
        "X-Forefront-Antispam-Report": "CIP:165.204.84.17; CTRY:US; LANG:en; SCL:1; SRV:;\n IPV:CAL; SFV:NSPM; H:SATLEXMB04.amd.com; PTR:InfoDomainNonexistent; CAT:NONE;\n SFS:(13230031)(36860700004)(1800799015)(82310400014)(376005); DIR:OUT;\n SFP:1101;",
        "X-OriginatorOrg": "amd.com",
        "X-MS-Exchange-CrossTenant-OriginalArrivalTime": "12 Apr 2024 12:54:19.1202 (UTC)",
        "X-MS-Exchange-CrossTenant-Network-Message-Id": "\n 360c4978-3b98-44d6-2c82-08dc5aefaaf3",
        "X-MS-Exchange-CrossTenant-Id": "3dd8961f-e488-4e60-8e11-a82d994e183d",
        "X-MS-Exchange-CrossTenant-OriginalAttributedTenantConnectingIp": "\n TenantId=3dd8961f-e488-4e60-8e11-a82d994e183d; Ip=[165.204.84.17];\n Helo=[SATLEXMB04.amd.com]",
        "X-MS-Exchange-CrossTenant-AuthSource": "\n BL6PEPF00020E5F.namprd04.prod.outlook.com",
        "X-MS-Exchange-CrossTenant-AuthAs": "Anonymous",
        "X-MS-Exchange-CrossTenant-FromEntityHeader": "HybridOnPrem",
        "X-MS-Exchange-Transport-CrossTenantHeadersStamped": "SJ2PR12MB9138",
        "X-BeenThere": "dev@dpdk.org",
        "X-Mailman-Version": "2.1.29",
        "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"
    },
    "content": "Add the necessary changes to support 10 Mbps speed for BaseT and SFP\nport modes. This is supported in MAC ver >= 30H.\n\nSigned-off-by: Venkat Kumar Ande <VenkatKumar.Ande@amd.com>\n---\n drivers/net/axgbe/axgbe_dev.c      |  3 ++\n drivers/net/axgbe/axgbe_ethdev.h   |  2 +\n drivers/net/axgbe/axgbe_mdio.c     | 22 +++++++++\n drivers/net/axgbe/axgbe_phy.h      |  2 +\n drivers/net/axgbe/axgbe_phy_impl.c | 75 ++++++++++++++++++++++++++++--\n 5 files changed, 100 insertions(+), 4 deletions(-)",
    "diff": "diff --git a/drivers/net/axgbe/axgbe_dev.c b/drivers/net/axgbe/axgbe_dev.c\nindex 9b0073eea6..b4afcf20ab 100644\n--- a/drivers/net/axgbe/axgbe_dev.c\n+++ b/drivers/net/axgbe/axgbe_dev.c\n@@ -250,6 +250,9 @@ static int axgbe_set_speed(struct axgbe_port *pdata, int speed)\n \tunsigned int ss;\n \n \tswitch (speed) {\n+\tcase SPEED_10:\n+\t\tss = 0x07;\n+\t\tbreak;\n \tcase SPEED_1000:\n \t\tss = 0x03;\n \t\tbreak;\ndiff --git a/drivers/net/axgbe/axgbe_ethdev.h b/drivers/net/axgbe/axgbe_ethdev.h\nindex 20b36ced55..127427c736 100644\n--- a/drivers/net/axgbe/axgbe_ethdev.h\n+++ b/drivers/net/axgbe/axgbe_ethdev.h\n@@ -114,6 +114,7 @@\n \n #define AXGBE_SGMII_AN_LINK_STATUS\tBIT(1)\n #define AXGBE_SGMII_AN_LINK_SPEED\t(BIT(2) | BIT(3))\n+#define AXGBE_SGMII_AN_LINK_SPEED_10\t0x00\n #define AXGBE_SGMII_AN_LINK_SPEED_100\t0x04\n #define AXGBE_SGMII_AN_LINK_SPEED_1000\t0x08\n #define AXGBE_SGMII_AN_LINK_DUPLEX\tBIT(4)\n@@ -213,6 +214,7 @@ enum axgbe_mode {\n \tAXGBE_MODE_KX_2500,\n \tAXGBE_MODE_KR,\n \tAXGBE_MODE_X,\n+\tAXGBE_MODE_SGMII_10,\n \tAXGBE_MODE_SGMII_100,\n \tAXGBE_MODE_SGMII_1000,\n \tAXGBE_MODE_SFI,\ndiff --git a/drivers/net/axgbe/axgbe_mdio.c b/drivers/net/axgbe/axgbe_mdio.c\nindex 151b30e2ab..4307a7560a 100644\n--- a/drivers/net/axgbe/axgbe_mdio.c\n+++ b/drivers/net/axgbe/axgbe_mdio.c\n@@ -143,6 +143,15 @@ static void axgbe_sgmii_1000_mode(struct axgbe_port *pdata)\n \tpdata->phy_if.phy_impl.set_mode(pdata, AXGBE_MODE_SGMII_1000);\n }\n \n+static void axgbe_sgmii_10_mode(struct axgbe_port *pdata)\n+{\n+\t/* Set MAC to 10M speed */\n+\tpdata->hw_if.set_speed(pdata, SPEED_10);\n+\n+\t/* Call PHY implementation support to complete rate change */\n+\tpdata->phy_if.phy_impl.set_mode(pdata, AXGBE_MODE_SGMII_10);\n+}\n+\n static void axgbe_sgmii_100_mode(struct axgbe_port *pdata)\n {\n \n@@ -176,6 +185,9 @@ static void axgbe_change_mode(struct axgbe_port *pdata,\n \tcase AXGBE_MODE_KR:\n \t\taxgbe_kr_mode(pdata);\n \t\tbreak;\n+\tcase AXGBE_MODE_SGMII_10:\n+\t\taxgbe_sgmii_10_mode(pdata);\n+\t\tbreak;\n \tcase AXGBE_MODE_SGMII_100:\n \t\taxgbe_sgmii_100_mode(pdata);\n \t\tbreak;\n@@ -862,6 +874,7 @@ static int axgbe_phy_config_fixed(struct axgbe_port *pdata)\n \tcase AXGBE_MODE_KX_1000:\n \tcase AXGBE_MODE_KX_2500:\n \tcase AXGBE_MODE_KR:\n+\tcase AXGBE_MODE_SGMII_10:\n \tcase AXGBE_MODE_SGMII_100:\n \tcase AXGBE_MODE_SGMII_1000:\n \tcase AXGBE_MODE_X:\n@@ -921,6 +934,8 @@ static int __axgbe_phy_config_aneg(struct axgbe_port *pdata, bool set_mode)\n \t\t\taxgbe_set_mode(pdata, AXGBE_MODE_SGMII_1000);\n \t\t} else if (axgbe_use_mode(pdata, AXGBE_MODE_SGMII_100)) {\n \t\t\taxgbe_set_mode(pdata, AXGBE_MODE_SGMII_100);\n+\t\t} else if (axgbe_use_mode(pdata, AXGBE_MODE_SGMII_10)) {\n+\t\t\taxgbe_set_mode(pdata, AXGBE_MODE_SGMII_10);\n \t\t} else {\n \t\t\trte_intr_enable(pdata->pci_dev->intr_handle);\n \t\t\tret = -EINVAL;\n@@ -1000,6 +1015,9 @@ static void axgbe_phy_status_result(struct axgbe_port *pdata)\n \t\tmode = axgbe_phy_status_aneg(pdata);\n \n \tswitch (mode) {\n+\tcase AXGBE_MODE_SGMII_10:\n+\t\tpdata->phy.speed = SPEED_10;\n+\t\tbreak;\n \tcase AXGBE_MODE_SGMII_100:\n \t\tpdata->phy.speed = SPEED_100;\n \t\tbreak;\n@@ -1148,6 +1166,8 @@ static int axgbe_phy_start(struct axgbe_port *pdata)\n \t\taxgbe_sgmii_1000_mode(pdata);\n \t} else if (axgbe_use_mode(pdata, AXGBE_MODE_SGMII_100)) {\n \t\taxgbe_sgmii_100_mode(pdata);\n+\t} else if (axgbe_use_mode(pdata, AXGBE_MODE_SGMII_10)) {\n+\t\taxgbe_sgmii_10_mode(pdata);\n \t} else {\n \t\tret = -EINVAL;\n \t\tgoto err_stop;\n@@ -1195,6 +1215,8 @@ static int axgbe_phy_best_advertised_speed(struct axgbe_port *pdata)\n \t\treturn SPEED_1000;\n \telse if (pdata->phy.advertising & ADVERTISED_100baseT_Full)\n \t\treturn SPEED_100;\n+\telse if (pdata->phy.advertising & ADVERTISED_10baseT_Full)\n+\t\treturn SPEED_10;\n \n \treturn SPEED_UNKNOWN;\n }\ndiff --git a/drivers/net/axgbe/axgbe_phy.h b/drivers/net/axgbe/axgbe_phy.h\nindex 77ee20a31a..5b844e81cd 100644\n--- a/drivers/net/axgbe/axgbe_phy.h\n+++ b/drivers/net/axgbe/axgbe_phy.h\n@@ -168,6 +168,7 @@\n #define ADVERTISED_1000baseKX_Full\t(1 << 17)\n #define ADVERTISED_1000baseT_Full\t(1 << 5)\n #define ADVERTISED_100baseT_Full\t(1 << 3)\n+#define ADVERTISED_10baseT_Full\t\t(1 << 2)\n #define ADVERTISED_TP\t\t\t(1 << 7)\n #define ADVERTISED_FIBRE\t\t(1 << 10)\n #define ADVERTISED_Backplane            (1 << 16)\n@@ -175,6 +176,7 @@\n #define SUPPORTED_1000baseKX_Full       (1 << 17)\n #define SUPPORTED_10000baseKR_Full      (1 << 19)\n #define SUPPORTED_2500baseX_Full\t(1 << 15)\n+#define SUPPORTED_10baseT_Full\t\t(1 << 3)\n #define SUPPORTED_100baseT_Full         (1 << 2)\n #define SUPPORTED_1000baseT_Full        (1 << 5)\n #define SUPPORTED_10000baseT_Full       (1 << 12)\ndiff --git a/drivers/net/axgbe/axgbe_phy_impl.c b/drivers/net/axgbe/axgbe_phy_impl.c\nindex 67a18e7c55..9c2c411b4f 100644\n--- a/drivers/net/axgbe/axgbe_phy_impl.c\n+++ b/drivers/net/axgbe/axgbe_phy_impl.c\n@@ -7,6 +7,7 @@\n #include \"axgbe_common.h\"\n #include \"axgbe_phy.h\"\n \n+#define AXGBE_PHY_PORT_SPEED_10\t\tBIT(0)\n #define AXGBE_PHY_PORT_SPEED_100\tBIT(1)\n #define AXGBE_PHY_PORT_SPEED_1000\tBIT(2)\n #define AXGBE_PHY_PORT_SPEED_2500\tBIT(3)\n@@ -490,6 +491,8 @@ static void axgbe_phy_sfp_phy_settings(struct axgbe_port *pdata)\n \n \tswitch (phy_data->sfp_speed) {\n \tcase AXGBE_SFP_SPEED_100_1000:\n+\t\tif (phy_data->port_speeds & AXGBE_PHY_PORT_SPEED_10)\n+\t\t\tpdata->phy.advertising |= ADVERTISED_10baseT_Full;\n \t\tif (phy_data->port_speeds & AXGBE_PHY_PORT_SPEED_100)\n \t\t\tpdata->phy.advertising |= ADVERTISED_100baseT_Full;\n \t\tif (phy_data->port_speeds & AXGBE_PHY_PORT_SPEED_1000)\n@@ -511,6 +514,8 @@ static void axgbe_phy_sfp_phy_settings(struct axgbe_port *pdata)\n \t\t\tpdata->phy.advertising |= ADVERTISED_1000baseT_Full;\n \t\telse if (phy_data->port_speeds & AXGBE_PHY_PORT_SPEED_100)\n \t\t\tpdata->phy.advertising |= ADVERTISED_100baseT_Full;\n+\t\telse if (phy_data->port_speeds & AXGBE_PHY_PORT_SPEED_10)\n+\t\t\tpdata->phy.advertising |= ADVERTISED_10baseT_Full;\n \t}\n }\n \n@@ -980,6 +985,14 @@ static enum axgbe_mode axgbe_phy_an37_sgmii_outcome(struct axgbe_port *pdata)\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_10:\n+\t\tif (pdata->an_status & AXGBE_SGMII_AN_LINK_DUPLEX) {\n+\t\t\tpdata->phy.lp_advertising |= ADVERTISED_10baseT_Full;\n+\t\t\tmode = AXGBE_MODE_SGMII_10;\n+\t\t} else {\n+\t\t\tmode = AXGBE_MODE_UNKNOWN;\n+\t\t}\n+\t\tbreak;\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@@ -1347,6 +1360,18 @@ static void axgbe_phy_sgmii_1000_mode(struct axgbe_port *pdata)\n \tphy_data->cur_mode = AXGBE_MODE_SGMII_1000;\n }\n \n+static void axgbe_phy_sgmii_10_mode(struct axgbe_port *pdata)\n+{\n+\tstruct axgbe_phy_data *phy_data = pdata->phy_data;\n+\n+\taxgbe_phy_set_redrv_mode(pdata);\n+\n+\t/* 10M/SGMII */\n+\taxgbe_phy_perform_ratechange(pdata, AXGBE_MB_CMD_SET_1G, AXGBE_MB_SUBCMD_10MBITS);\n+\n+\tphy_data->cur_mode = AXGBE_MODE_SGMII_10;\n+}\n+\n static enum axgbe_mode axgbe_phy_cur_mode(struct axgbe_port *pdata)\n {\n \tstruct axgbe_phy_data *phy_data = pdata->phy_data;\n@@ -1363,6 +1388,7 @@ static enum axgbe_mode axgbe_phy_switch_baset_mode(struct axgbe_port *pdata)\n \t\treturn axgbe_phy_cur_mode(pdata);\n \n \tswitch (axgbe_phy_cur_mode(pdata)) {\n+\tcase AXGBE_MODE_SGMII_10:\n \tcase AXGBE_MODE_SGMII_100:\n \tcase AXGBE_MODE_SGMII_1000:\n \t\treturn AXGBE_MODE_KR;\n@@ -1433,6 +1459,8 @@ static enum axgbe_mode axgbe_phy_get_baset_mode(struct axgbe_phy_data *phy_data\n \t\t\t\t\t\tint speed)\n {\n \tswitch (speed) {\n+\tcase SPEED_10:\n+\t\treturn AXGBE_MODE_SGMII_10;\n \tcase SPEED_100:\n \t\treturn AXGBE_MODE_SGMII_100;\n \tcase SPEED_1000:\n@@ -1448,6 +1476,8 @@ static enum axgbe_mode axgbe_phy_get_sfp_mode(struct axgbe_phy_data *phy_data,\n \t\t\t\t\t      int speed)\n {\n \tswitch (speed) {\n+\tcase SPEED_10:\n+\t\treturn AXGBE_MODE_SGMII_10;\n \tcase SPEED_100:\n \t\treturn AXGBE_MODE_SGMII_100;\n \tcase SPEED_1000:\n@@ -1525,6 +1555,9 @@ static void axgbe_phy_set_mode(struct axgbe_port *pdata, enum axgbe_mode mode)\n \tcase AXGBE_MODE_SGMII_1000:\n \t\taxgbe_phy_sgmii_1000_mode(pdata);\n \t\tbreak;\n+\tcase AXGBE_MODE_SGMII_10:\n+\t\taxgbe_phy_sgmii_10_mode(pdata);\n+\t\tbreak;\n \tdefault:\n \t\tbreak;\n \t}\n@@ -1566,6 +1599,9 @@ static bool axgbe_phy_use_baset_mode(struct axgbe_port *pdata,\n \t\t\t\t     enum axgbe_mode mode)\n {\n \tswitch (mode) {\n+\tcase AXGBE_MODE_SGMII_10:\n+\t\treturn axgbe_phy_check_mode(pdata, mode,\n+\t\t\t\t\t    ADVERTISED_10baseT_Full);\n \tcase AXGBE_MODE_SGMII_100:\n \t\treturn axgbe_phy_check_mode(pdata, mode,\n \t\t\t\t\t    ADVERTISED_100baseT_Full);\n@@ -1591,6 +1627,11 @@ static bool axgbe_phy_use_sfp_mode(struct axgbe_port *pdata,\n \t\t\treturn false;\n \t\treturn axgbe_phy_check_mode(pdata, mode,\n \t\t\t\t\t    ADVERTISED_1000baseT_Full);\n+\tcase AXGBE_MODE_SGMII_10:\n+\t\tif (phy_data->sfp_base != AXGBE_SFP_BASE_1000_T)\n+\t\t\treturn false;\n+\t\treturn axgbe_phy_check_mode(pdata, mode,\n+\t\t\t\t\t    ADVERTISED_10baseT_Full);\n \tcase AXGBE_MODE_SGMII_100:\n \t\tif (phy_data->sfp_base != AXGBE_SFP_BASE_1000_T)\n \t\t\treturn false;\n@@ -1803,6 +1844,12 @@ static int axgbe_phy_mdio_reset_setup(struct axgbe_port *pdata)\n static bool axgbe_phy_port_mode_mismatch(struct axgbe_port *pdata)\n {\n \tstruct axgbe_phy_data *phy_data = pdata->phy_data;\n+\tunsigned int ver;\n+\n+\t/* 10 Mbps speed is not supported in ver < 30H */\n+\tver = AXGMAC_GET_BITS(pdata->hw_feat.version, MAC_VR, SNPSVER);\n+\tif (ver < 0x30 && phy_data->port_speeds & AXGBE_PHY_PORT_SPEED_10)\n+\t\treturn true;\n \n \tswitch (phy_data->port_mode) {\n \tcase AXGBE_PORT_MODE_BACKPLANE:\n@@ -1816,7 +1863,8 @@ static bool axgbe_phy_port_mode_mismatch(struct axgbe_port *pdata)\n \t\t\treturn false;\n \t\tbreak;\n \tcase AXGBE_PORT_MODE_1000BASE_T:\n-\t\tif ((phy_data->port_speeds & AXGBE_PHY_PORT_SPEED_100) ||\n+\t\tif ((phy_data->port_speeds & AXGBE_PHY_PORT_SPEED_10)  ||\n+\t\t\t(phy_data->port_speeds & AXGBE_PHY_PORT_SPEED_100) ||\n \t\t    (phy_data->port_speeds & AXGBE_PHY_PORT_SPEED_1000))\n \t\t\treturn false;\n \t\tbreak;\n@@ -1825,13 +1873,15 @@ static bool axgbe_phy_port_mode_mismatch(struct axgbe_port *pdata)\n \t\t\treturn false;\n \t\tbreak;\n \tcase AXGBE_PORT_MODE_NBASE_T:\n-\t\tif ((phy_data->port_speeds & AXGBE_PHY_PORT_SPEED_100) ||\n+\t\tif ((phy_data->port_speeds & AXGBE_PHY_PORT_SPEED_10)  ||\n+\t\t\t(phy_data->port_speeds & AXGBE_PHY_PORT_SPEED_100) ||\n \t\t    (phy_data->port_speeds & AXGBE_PHY_PORT_SPEED_1000) ||\n \t\t    (phy_data->port_speeds & AXGBE_PHY_PORT_SPEED_2500))\n \t\t\treturn false;\n \t\tbreak;\n \tcase AXGBE_PORT_MODE_10GBASE_T:\n-\t\tif ((phy_data->port_speeds & AXGBE_PHY_PORT_SPEED_100) ||\n+\t\tif ((phy_data->port_speeds & AXGBE_PHY_PORT_SPEED_10)  ||\n+\t\t    (phy_data->port_speeds & AXGBE_PHY_PORT_SPEED_100) ||\n \t\t    (phy_data->port_speeds & AXGBE_PHY_PORT_SPEED_1000) ||\n \t\t    (phy_data->port_speeds & AXGBE_PHY_PORT_SPEED_10000))\n \t\t\treturn false;\n@@ -1841,7 +1891,8 @@ static bool axgbe_phy_port_mode_mismatch(struct axgbe_port *pdata)\n \t\t\treturn false;\n \t\tbreak;\n \tcase AXGBE_PORT_MODE_SFP:\n-\t\tif ((phy_data->port_speeds & AXGBE_PHY_PORT_SPEED_100) ||\n+\t\tif ((phy_data->port_speeds & AXGBE_PHY_PORT_SPEED_10)  ||\n+\t\t\t(phy_data->port_speeds & AXGBE_PHY_PORT_SPEED_100) ||\n \t\t    (phy_data->port_speeds & AXGBE_PHY_PORT_SPEED_1000) ||\n \t\t    (phy_data->port_speeds & AXGBE_PHY_PORT_SPEED_10000))\n \t\t\treturn false;\n@@ -2150,6 +2201,10 @@ static int axgbe_phy_init(struct axgbe_port *pdata)\n \t\tpdata->phy.supported |= SUPPORTED_Autoneg;\n \t\tpdata->phy.supported |= SUPPORTED_Pause | SUPPORTED_Asym_Pause;\n \t\tpdata->phy.supported |= SUPPORTED_TP;\n+\t\tif (phy_data->port_speeds & AXGBE_PHY_PORT_SPEED_10) {\n+\t\t\tpdata->phy.supported |= SUPPORTED_10baseT_Full;\n+\t\t\tphy_data->start_mode = AXGBE_MODE_SGMII_10;\n+\t\t}\n \t\tif (phy_data->port_speeds & AXGBE_PHY_PORT_SPEED_100) {\n \t\t\tpdata->phy.supported |= SUPPORTED_100baseT_Full;\n \t\t\tphy_data->start_mode = AXGBE_MODE_SGMII_100;\n@@ -2178,6 +2233,10 @@ static int axgbe_phy_init(struct axgbe_port *pdata)\n \t\tpdata->phy.supported |= SUPPORTED_Autoneg;\n \t\tpdata->phy.supported |= SUPPORTED_Pause | SUPPORTED_Asym_Pause;\n \t\tpdata->phy.supported |= SUPPORTED_TP;\n+\t\tif (phy_data->port_speeds & AXGBE_PHY_PORT_SPEED_10) {\n+\t\t\tpdata->phy.supported |= SUPPORTED_10baseT_Full;\n+\t\t\tphy_data->start_mode = AXGBE_MODE_SGMII_10;\n+\t\t}\n \t\tif (phy_data->port_speeds & AXGBE_PHY_PORT_SPEED_100) {\n \t\t\tpdata->phy.supported |= SUPPORTED_100baseT_Full;\n \t\t\tphy_data->start_mode = AXGBE_MODE_SGMII_100;\n@@ -2199,6 +2258,10 @@ static int axgbe_phy_init(struct axgbe_port *pdata)\n \t\tpdata->phy.supported |= SUPPORTED_Autoneg;\n \t\tpdata->phy.supported |= SUPPORTED_Pause | SUPPORTED_Asym_Pause;\n \t\tpdata->phy.supported |= SUPPORTED_TP;\n+\t\tif (phy_data->port_speeds & AXGBE_PHY_PORT_SPEED_10) {\n+\t\t\tpdata->phy.supported |= SUPPORTED_10baseT_Full;\n+\t\t\tphy_data->start_mode = AXGBE_MODE_SGMII_10;\n+\t\t}\n \t\tif (phy_data->port_speeds & AXGBE_PHY_PORT_SPEED_100) {\n \t\t\tpdata->phy.supported |= SUPPORTED_100baseT_Full;\n \t\t\tphy_data->start_mode = AXGBE_MODE_SGMII_100;\n@@ -2234,6 +2297,10 @@ static int axgbe_phy_init(struct axgbe_port *pdata)\n \t\tpdata->phy.supported |= SUPPORTED_Pause | SUPPORTED_Asym_Pause;\n \t\tpdata->phy.supported |= SUPPORTED_TP;\n \t\tpdata->phy.supported |= SUPPORTED_FIBRE;\n+\t\tif (phy_data->port_speeds & AXGBE_PHY_PORT_SPEED_10) {\n+\t\t\tpdata->phy.supported |= SUPPORTED_10baseT_Full;\n+\t\t\tphy_data->start_mode = AXGBE_MODE_SGMII_10;\n+\t\t}\n \t\tif (phy_data->port_speeds & AXGBE_PHY_PORT_SPEED_100) {\n \t\t\tpdata->phy.supported |= SUPPORTED_100baseT_Full;\n \t\t\tphy_data->start_mode = AXGBE_MODE_SGMII_100;\n",
    "prefixes": [
        "16/24"
    ]
}