get:
Show a patch.

patch:
Update a patch.

put:
Update a patch.

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

{
    "id": 139273,
    "url": "https://patches.dpdk.org/api/patches/139273/?format=api",
    "web_url": "https://patches.dpdk.org/project/dpdk/patch/20240412125249.10625-22-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-22-VenkatKumar.Ande@amd.com>",
    "list_archive_url": "https://inbox.dpdk.org/dev/20240412125249.10625-22-VenkatKumar.Ande@amd.com",
    "date": "2024-04-12T12:52:47",
    "name": "[22/24] net/axgbe: add support for Rx adaptation",
    "commit_ref": null,
    "pull_url": null,
    "state": "changes-requested",
    "archived": false,
    "hash": "728b53bf44c7a0a9a078674bbb2190f2efd6b446",
    "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-22-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/139273/comments/",
    "check": "warning",
    "checks": "https://patches.dpdk.org/api/patches/139273/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 B90FB43E52;\n\tFri, 12 Apr 2024 14:56:09 +0200 (CEST)",
            "from mails.dpdk.org (localhost [127.0.0.1])\n\tby mails.dpdk.org (Postfix) with ESMTP id B21A64113C;\n\tFri, 12 Apr 2024 14:55:07 +0200 (CEST)",
            "from NAM04-MW2-obe.outbound.protection.outlook.com\n (mail-mw2nam04on2086.outbound.protection.outlook.com [40.107.101.86])\n by mails.dpdk.org (Postfix) with ESMTP id 1EE1741141\n for <dev@dpdk.org>; Fri, 12 Apr 2024 14:55:04 +0200 (CEST)",
            "from DM5PR08CA0031.namprd08.prod.outlook.com (2603:10b6:4:60::20) by\n CY5PR12MB6347.namprd12.prod.outlook.com (2603:10b6:930:20::10) with\n Microsoft\n SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id\n 15.20.7409.46; Fri, 12 Apr 2024 12:55:00 +0000",
            "from DS1PEPF00017093.namprd03.prod.outlook.com\n (2603:10b6:4:60:cafe::8b) by DM5PR08CA0031.outlook.office365.com\n (2603:10b6:4:60::20) with Microsoft SMTP Server (version=TLS1_2,\n cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.7472.26 via Frontend\n Transport; Fri, 12 Apr 2024 12:54:59 +0000",
            "from SATLEXMB04.amd.com (165.204.84.17) by\n DS1PEPF00017093.mail.protection.outlook.com (10.167.17.136) 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:58 +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:25 -0500"
        ],
        "ARC-Seal": "i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none;\n b=Wo3UdTk2RpC7laFiMmQX8Nw8cEQvA0QtEm6CekLTgt6ga4QvvbKaB/Tx4F9ZKESfWGo2cNHFjv4gWnxTjHaVRjoX3RuTXy169HuLekzDrqJuQ1N/P+Yn63sNhVLQ1V2wjCp3rHyu99VZfR5pIHf6WY61tr4Z2nAYhTdKvDHw3P9x9EjMd44TAu/HQlOu+DusQKtqDPXZO5xkPn/s+qVkTnuxKBuwAYES4QcQGNV3gcIM9yTYL5Qe5y73JZ9j26foBnfLga4St3QPWcuuIQ+pyEhuELw2zXbgVVqE/bFjUeg7eJYtM5895m+OCG7pIleWullq+zDWfpAJS20csNht5w==",
        "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=Yqe0cyBHSXMNBQu0hpvYn/q2P6JCEbgFIgKfjIJ6Jyk=;\n b=DHTqFUYGirgKQ0zfoCi5uX83lIQlRxH975eRq+btzYWBkRp4oVcfPBm+9wKECq4IzravVvFO6TAZzCm87xmialbRcrouCB3g8+qqXBeYzOVEy0rGdznBMRpxlDuwapmpmgvRQYxE/BqHzgaKbl5sAXemrtn3bz0ePzGqoTcfJl19Z8Lwnkn5aopTyX6vJRwozjrz+JpdzltYQ0SEMXR8gKcKRKb/tIr+1wewGVuQ6ip6yYULFSKL+D+4A6flH3QSeByHSMs7SYdOaJFwfaWG7uC7mgnm3UJ7wLQK2yeCTdPrz/+kDDcaArVjo6O4W+ZPuu7OrslED7UzHMnUcDV0Xg==",
        "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=Yqe0cyBHSXMNBQu0hpvYn/q2P6JCEbgFIgKfjIJ6Jyk=;\n b=SNv1j03rruPf8oBgA7MsxP5xKGclje+yUvaGYn1abzdQCNdotuW7cBDuSqwIpHU6WyjwErRwFEqs/QSlxSv3V5p1G84PuiS4v+dPHBketgXqWIdjWHnK7Sl4NJdSZSAd6y39kUqZerin4mHjdbZOLTuf4pSrDQwFbl1Cvgi4+uc=",
        "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 22/24] net/axgbe: add support for Rx adaptation",
        "Date": "Fri, 12 Apr 2024 08:52:47 -0400",
        "Message-ID": "<20240412125249.10625-22-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": "DS1PEPF00017093:EE_|CY5PR12MB6347:EE_",
        "X-MS-Office365-Filtering-Correlation-Id": "203793ff-dfe8-42a1-09d8-08dc5aefc257",
        "X-MS-Exchange-SenderADCheck": "1",
        "X-MS-Exchange-AntiSpam-Relay": "0",
        "X-Microsoft-Antispam": "BCL:0;",
        "X-Microsoft-Antispam-Message-Info": "\n zXpaEP2hFJYhVjKCOa2jMXgeZTIwe6hKHitRMyN1YkMKxZU22lYvHOJHLYQGAtYV+3m/yndqEor6+gd+cmtZEOMG4u7qy4Yic4TmRVsdRZFnGFE/5OvenA7il6+IDZ8ixoGX6FR3r5izkqHDahXOGAP5HrByZhlz6n825of79rW/T3VlbHe/V+jwAfb5nRhz2pGp7UMf38656Bvn4nB0DTwjZd5c7Hkahd/lPxuclDHM0iuLetuEUMU5vd2TFSB7eI7946feLC/yyXrwQ/TYKFJg3z9VynweIVmxmi4veDgSJPcuctJCcTj2VlPRWk8hrWazN4b/2k3qCq1sFg6GLzbi3mmc3kyyLX1ZraYHSiu8wcDDgEJ7Yj89lxrxduCWupN7SEyWx3g0I/CjaDfatrwCZVw1rDKmVgUPKJMNqnMxEKDvOoSUiAVSZS3J9Uc1GqYcLmuZ85XY2f9q6H5TuLrsMeIxkhtCOs/97Eu0281buXGISmnYlsBxdW9TyLRrdb++GQZdCTz/P7P4lHXoMWar/wx5icVEZanUoWGnJ6L50fXaqxmCWkBn21e1QwRQrghlVPC8YQ3KTJEwD/CgvtgcVWeQrkqVxijnhJcXlB9erNpUqXd92UA9B1bpwzhdkjlPvlt8C2brPIhNSmsfblxaQ7Kj8EVIvHqp9LUhNAwQOO51cqEmtp8IdDt9y1Lg24RSWBAJkU+BokjBsWSczbas5ixvZfC2eR3jVAJrKjJi+mj51HmN/KBdtTwcz6tW",
        "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:ErrorRetry; CAT:NONE;\n SFS:(13230031)(82310400014)(376005)(36860700004)(1800799015); DIR:OUT;\n SFP:1101;",
        "X-OriginatorOrg": "amd.com",
        "X-MS-Exchange-CrossTenant-OriginalArrivalTime": "12 Apr 2024 12:54:58.2685 (UTC)",
        "X-MS-Exchange-CrossTenant-Network-Message-Id": "\n 203793ff-dfe8-42a1-09d8-08dc5aefc257",
        "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 DS1PEPF00017093.namprd03.prod.outlook.com",
        "X-MS-Exchange-CrossTenant-AuthAs": "Anonymous",
        "X-MS-Exchange-CrossTenant-FromEntityHeader": "HybridOnPrem",
        "X-MS-Exchange-Transport-CrossTenantHeadersStamped": "CY5PR12MB6347",
        "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": "The existing implementation for non-Autonegotiation 10G speed modes does\nnot enable RX adaptation in the Driver and FW. The RX Equalization\nsettings (AFE settings alone) are manually configured and the existing\nlink-up sequence in the driver does not perform rx adaptation process as\nmentioned in the Synopsys databook. There's a customer request for 10G\nbackplane mode without Auto-negotiation and for the DAC cables of more\nsignificant length that follow the non-Autonegotiation mode. These modes\nrequire PHY to perform RX Adaptation.\n\nThe proposed logic adds the necessary changes to Yellow Carp devices to\nensure seamless RX Adaptation for 10G-SFI (LONG DAC) and 10G-KR without\nAN (CL72 not present). The RX adaptation core algorithm is executed by\nfirmware, however, to achieve that a new mailbox sub-command is required\nto be sent by the driver.\n\nSigned-off-by: Venkat Kumar Ande <VenkatKumar.Ande@amd.com>\n---\n drivers/net/axgbe/axgbe_common.h   |  38 +++++++\n drivers/net/axgbe/axgbe_ethdev.h   |   5 +\n drivers/net/axgbe/axgbe_phy_impl.c | 170 ++++++++++++++++++++++++++++-\n 3 files changed, 210 insertions(+), 3 deletions(-)",
    "diff": "diff --git a/drivers/net/axgbe/axgbe_common.h b/drivers/net/axgbe/axgbe_common.h\nindex 1a43192630..0e1b2c1500 100644\n--- a/drivers/net/axgbe/axgbe_common.h\n+++ b/drivers/net/axgbe/axgbe_common.h\n@@ -1274,6 +1274,22 @@\n #define MDIO_PMA_RX_CTRL1\t\t0x8051\n #endif\n \n+#ifndef MDIO_PMA_RX_LSTS\n+#define MDIO_PMA_RX_LSTS\t\t0x018020\n+#endif\n+\n+#ifndef MDIO_PMA_RX_EQ_CTRL4\n+#define MDIO_PMA_RX_EQ_CTRL4\t\t0x0001805C\n+#endif\n+\n+#ifndef MDIO_PMA_MP_MISC_STS\n+#define MDIO_PMA_MP_MISC_STS\t\t0x0078\n+#endif\n+\n+#ifndef MDIO_PMA_PHY_RX_EQ_CEU\n+#define MDIO_PMA_PHY_RX_EQ_CEU\t\t0x1800E\n+#endif\n+\n #ifndef MDIO_PCS_DIG_CTRL\n #define MDIO_PCS_DIG_CTRL\t\t0x8000\n #endif\n@@ -1415,6 +1431,28 @@ static inline uint32_t high32_value(uint64_t addr)\n #define XGBE_PMA_RX_RST_0_RESET_ON     0x10\n #define XGBE_PMA_RX_RST_0_RESET_OFF    0x00\n \n+#define XGBE_PMA_RX_SIG_DET_0_MASK\tBIT(4)\n+#define XGBE_PMA_RX_SIG_DET_0_ENABLE\tBIT(4)\n+#define XGBE_PMA_RX_SIG_DET_0_DISABLE\t0x0000\n+\n+#define XGBE_PMA_RX_VALID_0_MASK\tBIT(12)\n+#define XGBE_PMA_RX_VALID_0_ENABLE\tBIT(12)\n+#define XGBE_PMA_RX_VALID_0_DISABLE\t0x0000\n+\n+#define XGBE_PMA_RX_AD_REQ_MASK\t\tBIT(12)\n+#define XGBE_PMA_RX_AD_REQ_ENABLE\tBIT(12)\n+#define XGBE_PMA_RX_AD_REQ_DISABLE\t0x0000\n+\n+#define XGBE_PMA_RX_ADPT_ACK_MASK\tBIT(12)\n+#define XGBE_PMA_RX_ADPT_ACK\t\tBIT(12)\n+\n+#define XGBE_PMA_CFF_UPDTM1_VLD\t\tBIT(8)\n+#define XGBE_PMA_CFF_UPDT0_VLD\t\tBIT(9)\n+#define XGBE_PMA_CFF_UPDT1_VLD\t\tBIT(10)\n+#define XGBE_PMA_CFF_UPDT_MASK\t\t(XGBE_PMA_CFF_UPDTM1_VLD |\\\n+\t\t\t\t\t XGBE_PMA_CFF_UPDT0_VLD | \\\n+\t\t\t\t\t XGBE_PMA_CFF_UPDT1_VLD)\n+\n /*END*/\n \n /* Bit setting and getting macros\ndiff --git a/drivers/net/axgbe/axgbe_ethdev.h b/drivers/net/axgbe/axgbe_ethdev.h\nindex cb3df47a63..dd00ae8af5 100644\n--- a/drivers/net/axgbe/axgbe_ethdev.h\n+++ b/drivers/net/axgbe/axgbe_ethdev.h\n@@ -244,6 +244,7 @@ enum axgbe_mb_cmd {\n \n enum axgbe_mb_subcmd {\n \tAXGBE_MB_SUBCMD_NONE = 0,\n+\tAXGBE_MB_SUBCMD_RX_ADAP,\n \n \t/* 10GbE SFP subcommands */\n \tAXGBE_MB_SUBCMD_ACTIVE = 0,\n@@ -722,6 +723,10 @@ struct axgbe_port {\n \tstruct rte_timecounter tx_tstamp;\n \tunsigned int tstamp_addend;\n \n+\tbool en_rx_adap;\n+\tint rx_adapt_retries;\n+\tbool rx_adapt_done;\n+\tbool mode_set;\n };\n \n void axgbe_init_function_ptrs_dev(struct axgbe_hw_if *hw_if);\ndiff --git a/drivers/net/axgbe/axgbe_phy_impl.c b/drivers/net/axgbe/axgbe_phy_impl.c\nindex 13b37e9b8b..a1c42b7dd4 100644\n--- a/drivers/net/axgbe/axgbe_phy_impl.c\n+++ b/drivers/net/axgbe/axgbe_phy_impl.c\n@@ -247,6 +247,10 @@ struct axgbe_phy_data {\n };\n \n static enum axgbe_an_mode axgbe_phy_an_mode(struct axgbe_port *pdata);\n+static void axgbe_phy_perform_ratechange(struct axgbe_port *pdata,\n+\t\tenum axgbe_mb_cmd cmd, enum axgbe_mb_subcmd sub_cmd);\n+static void axgbe_phy_rrc(struct axgbe_port *pdata);\n+\n \n static int axgbe_phy_i2c_xfer(struct axgbe_port *pdata,\n \t\t\t      struct axgbe_i2c_op *i2c_op)\n@@ -1194,6 +1198,92 @@ static void axgbe_phy_set_redrv_mode(struct axgbe_port *pdata)\n \taxgbe_phy_put_comm_ownership(pdata);\n }\n \n+#define MAX_RX_ADAPT_RETRIES\t\t1\n+#define XGBE_PMA_RX_VAL_SIG_MASK\t(XGBE_PMA_RX_SIG_DET_0_MASK | \\\n+\t\t\t\t\t XGBE_PMA_RX_VALID_0_MASK)\n+\n+static void axgbe_set_rx_adap_mode(struct axgbe_port *pdata,\n+\t\t\t\t  enum axgbe_mode mode)\n+{\n+\tif (pdata->rx_adapt_retries++ >= MAX_RX_ADAPT_RETRIES) {\n+\t\tpdata->rx_adapt_retries = 0;\n+\t\treturn;\n+\t}\n+\n+\taxgbe_phy_perform_ratechange(pdata,\n+\t\t\t\t    mode == AXGBE_MODE_KR ?\n+\t\t\t\t    AXGBE_MB_CMD_SET_10G_KR :\n+\t\t\t\t    AXGBE_MB_CMD_SET_10G_SFI,\n+\t\t\t\t    AXGBE_MB_SUBCMD_RX_ADAP);\n+}\n+\n+static void axgbe_rx_adaptation(struct axgbe_port *pdata)\n+{\n+\tstruct axgbe_phy_data *phy_data = pdata->phy_data;\n+\tunsigned int reg;\n+\n+\t/* step 2: force PCS to send RX_ADAPT Req to PHY */\n+\tXMDIO_WRITE_BITS(pdata, MDIO_MMD_PMAPMD, MDIO_PMA_RX_EQ_CTRL4,\n+\t\t\t XGBE_PMA_RX_AD_REQ_MASK, XGBE_PMA_RX_AD_REQ_ENABLE);\n+\n+\t/* Step 3: Wait for RX_ADAPT ACK from the PHY */\n+\trte_delay_ms(200);\n+\n+\t/* Software polls for coefficient update command (given by local PHY) */\n+\treg = XMDIO_READ(pdata, MDIO_MMD_PMAPMD, MDIO_PMA_PHY_RX_EQ_CEU);\n+\n+\t/* Clear the RX_AD_REQ bit */\n+\tXMDIO_WRITE_BITS(pdata, MDIO_MMD_PMAPMD, MDIO_PMA_RX_EQ_CTRL4,\n+\t\t\t XGBE_PMA_RX_AD_REQ_MASK, XGBE_PMA_RX_AD_REQ_DISABLE);\n+\n+\t/* Check if coefficient update command is set */\n+\tif ((reg & XGBE_PMA_CFF_UPDT_MASK) != XGBE_PMA_CFF_UPDT_MASK)\n+\t\tgoto set_mode;\n+\n+\t/* Step 4: Check for Block lock */\n+\n+\t/* Link status is latched low, so read once to clear\n+\t * and then read again to get current state\n+\t */\n+\treg = XMDIO_READ(pdata, MDIO_MMD_PCS, MDIO_STAT1);\n+\treg = XMDIO_READ(pdata, MDIO_MMD_PCS, MDIO_STAT1);\n+\tif (reg & MDIO_STAT1_LSTATUS) {\n+\t\t/* If the block lock is found, update the helpers\n+\t\t * and declare the link up\n+\t\t */\n+\t\tPMD_DRV_LOG(NOTICE, \"Rx adaptation - Block_lock done\\n\");\n+\t\tpdata->rx_adapt_done = true;\n+\t\tpdata->mode_set = false;\n+\t\treturn;\n+\t}\n+\n+set_mode:\n+\taxgbe_set_rx_adap_mode(pdata, phy_data->cur_mode);\n+}\n+\n+static void axgbe_phy_rx_adaptation(struct axgbe_port *pdata)\n+{\n+\tunsigned int reg;\n+\n+rx_adapt_reinit:\n+\treg = XMDIO_READ_BITS(pdata, MDIO_MMD_PMAPMD, MDIO_PMA_RX_LSTS,\n+\t\t\t      XGBE_PMA_RX_VAL_SIG_MASK);\n+\n+\t/* step 1: Check for RX_VALID && LF_SIGDET */\n+\tif ((reg & XGBE_PMA_RX_VAL_SIG_MASK) != XGBE_PMA_RX_VAL_SIG_MASK) {\n+\t\tPMD_DRV_LOG(NOTICE, \"RX_VALID or LF_SIGDET is unset, issue rrc\\n\");\n+\t\taxgbe_phy_rrc(pdata);\n+\t\tif (pdata->rx_adapt_retries++ >= MAX_RX_ADAPT_RETRIES) {\n+\t\t\tpdata->rx_adapt_retries = 0;\n+\t\t\treturn;\n+\t\t}\n+\t\tgoto rx_adapt_reinit;\n+\t}\n+\n+\t/* perform rx adaptation */\n+\taxgbe_rx_adaptation(pdata);\n+}\n+\n static void axgbe_phy_rx_reset(struct axgbe_port *pdata)\n {\n \tint reg;\n@@ -1258,12 +1348,27 @@ static void axgbe_phy_perform_ratechange(struct axgbe_port *pdata,\n \twait = AXGBE_RATECHANGE_COUNT;\n \twhile (wait--) {\n \t\tif (!XP_IOREAD_BITS(pdata, XP_DRIVER_INT_RO, STATUS))\n-\t\t\tgoto reenable_pll;\n+\t\t\tgoto do_rx_adaptation;\n \t\trte_delay_us(1500);\n \t}\n \tPMD_DRV_LOG(NOTICE, \"firmware mailbox command did not complete\\n\");\n \t/* Reset on error */\n \taxgbe_phy_rx_reset(pdata);\n+\tgoto reenable_pll;\n+\n+\n+do_rx_adaptation:\n+\tif (pdata->en_rx_adap && sub_cmd == AXGBE_MB_SUBCMD_RX_ADAP &&\n+\t    (cmd == AXGBE_MB_CMD_SET_10G_KR || cmd == AXGBE_MB_CMD_SET_10G_SFI)) {\n+\t\tPMD_DRV_LOG(NOTICE, \"Enabling RX adaptation\\n\");\n+\t\tpdata->mode_set = true;\n+\t\taxgbe_phy_rx_adaptation(pdata);\n+\t\t/* return from here to avoid enabling PLL ctrl\n+\t\t * during adaptation phase\n+\t\t */\n+\t\treturn;\n+\t}\n+\n \n reenable_pll:\n \t/* Enable PLL re-initialization, not needed for PHY Power Off and RRC cmds */\n@@ -1296,6 +1401,31 @@ static void axgbe_phy_power_off(struct axgbe_port *pdata)\n \tPMD_DRV_LOG(DEBUG, \"phy powered off\\n\");\n }\n \n+static bool enable_rx_adap(struct axgbe_port *pdata, enum axgbe_mode mode)\n+{\n+\tstruct axgbe_phy_data *phy_data = pdata->phy_data;\n+\tunsigned int ver;\n+\n+\t/* Rx-Adaptation is not supported on older platforms(< 0x30H) */\n+\tver = AXGMAC_GET_BITS(pdata->hw_feat.version, MAC_VR, SNPSVER);\n+\tif (ver < 0x30)\n+\t\treturn false;\n+\n+\t/* Re-driver models 4223 && 4227 do not support Rx-Adaptation */\n+\tif (phy_data->redrv &&\n+\t    (phy_data->redrv_model == AXGBE_PHY_REDRV_MODEL_4223 ||\n+\t     phy_data->redrv_model == AXGBE_PHY_REDRV_MODEL_4227))\n+\t\treturn false;\n+\n+\t/* 10G KR mode with AN does not support Rx-Adaptation */\n+\tif (mode == AXGBE_MODE_KR &&\n+\t    phy_data->port_mode != AXGBE_PORT_MODE_BACKPLANE_NO_AUTONEG)\n+\t\treturn false;\n+\n+\tpdata->en_rx_adap = 1;\n+\treturn true;\n+}\n+\n static void axgbe_phy_sfi_mode(struct axgbe_port *pdata)\n {\n \tstruct axgbe_phy_data *phy_data = pdata->phy_data;\n@@ -1304,8 +1434,13 @@ static void axgbe_phy_sfi_mode(struct axgbe_port *pdata)\n \n \t/* 10G/SFI */\n \tif (phy_data->sfp_cable != AXGBE_SFP_CABLE_PASSIVE) {\n+\t\tpdata->en_rx_adap = 0;\n \t\taxgbe_phy_perform_ratechange(pdata, AXGBE_MB_CMD_SET_10G_SFI,\n \t\t\t\t\t\t\tAXGBE_MB_SUBCMD_ACTIVE);\n+\t} else if ((phy_data->sfp_cable == AXGBE_SFP_CABLE_PASSIVE) &&\n+\t\t\t\t(enable_rx_adap(pdata, AXGBE_MODE_SFI))) {\n+\t\taxgbe_phy_perform_ratechange(pdata, AXGBE_MB_CMD_SET_10G_SFI,\n+\t\t\t\t\t\tAXGBE_MB_SUBCMD_RX_ADAP);\n \t} else {\n \t\tif (phy_data->sfp_cable_len <= 1)\n \t\t\taxgbe_phy_perform_ratechange(pdata, AXGBE_MB_CMD_SET_10G_SFI,\n@@ -1330,6 +1465,10 @@ static void axgbe_phy_kr_mode(struct axgbe_port *pdata)\n \taxgbe_phy_set_redrv_mode(pdata);\n \n \t/* 10G/KR */\n+\tif (enable_rx_adap(pdata, AXGBE_MODE_KR))\n+\t\taxgbe_phy_perform_ratechange(pdata, AXGBE_MB_CMD_SET_10G_KR,\n+\t\t\t\t\t\tAXGBE_MB_SUBCMD_RX_ADAP);\n+\telse\n \t\taxgbe_phy_perform_ratechange(pdata, AXGBE_MB_CMD_SET_10G_KR,\n \t\t\t\t\t\tAXGBE_MB_SUBCMD_NONE);\n \tphy_data->cur_mode = AXGBE_MODE_KR;\n@@ -1719,8 +1858,11 @@ static int axgbe_phy_link_status(struct axgbe_port *pdata, int *an_restart)\n \t\t\treturn 0;\n \t\t}\n \n-\t\tif (phy_data->sfp_mod_absent || phy_data->sfp_rx_los)\n+\t\tif (phy_data->sfp_mod_absent || phy_data->sfp_rx_los) {\n+\t\t\tif (pdata->en_rx_adap)\n+\t\t\t\tpdata->rx_adapt_done = false;\n \t\t\treturn 0;\n+\t\t}\n \t}\n \n \t/* Link status is latched low, so read once to clear\n@@ -1728,7 +1870,29 @@ static int axgbe_phy_link_status(struct axgbe_port *pdata, int *an_restart)\n \t */\n \treg = XMDIO_READ(pdata, MDIO_MMD_PCS, MDIO_STAT1);\n \treg = XMDIO_READ(pdata, MDIO_MMD_PCS, MDIO_STAT1);\n-\tif (reg & MDIO_STAT1_LSTATUS)\n+\n+\tif (pdata->en_rx_adap) {\n+\t\t/* if the link is available and adaptation is done,\n+\t\t * declare link up\n+\t\t */\n+\t\tif ((reg & MDIO_STAT1_LSTATUS) && pdata->rx_adapt_done)\n+\t\t\treturn 1;\n+\t\t/* If either link is not available or adaptation is not done,\n+\t\t * retrigger the adaptation logic. (if the mode is not set,\n+\t\t * then issue mailbox command first)\n+\t\t */\n+\t\tif (pdata->mode_set) {\n+\t\t\taxgbe_phy_rx_adaptation(pdata);\n+\t\t} else {\n+\t\t\tpdata->rx_adapt_done = false;\n+\t\t\taxgbe_phy_set_mode(pdata, phy_data->cur_mode);\n+\t\t}\n+\n+\t\t/* check again for the link and adaptation status */\n+\t\treg = XMDIO_READ(pdata, MDIO_MMD_PCS, MDIO_STAT1);\n+\t\tif ((reg & MDIO_STAT1_LSTATUS) && pdata->rx_adapt_done)\n+\t\t\treturn 1;\n+\t} else if (reg & MDIO_STAT1_LSTATUS)\n \t\treturn 1;\n \n \tif (pdata->phy.autoneg == AUTONEG_ENABLE &&\n",
    "prefixes": [
        "22/24"
    ]
}