get:
Show a patch.

patch:
Update a patch.

put:
Update a patch.

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

{
    "id": 2194432,
    "url": "http://patchwork.ozlabs.org/api/patches/2194432/?format=api",
    "web_url": "http://patchwork.ozlabs.org/project/openbmc/patch/20260206-axiado-ax3000-add-emmc-phy-driver-support-v2-2-a2f59e97a92d@axiado.com/",
    "project": {
        "id": 56,
        "url": "http://patchwork.ozlabs.org/api/projects/56/?format=api",
        "name": "OpenBMC development",
        "link_name": "openbmc",
        "list_id": "openbmc.lists.ozlabs.org",
        "list_email": "openbmc@lists.ozlabs.org",
        "web_url": "http://github.com/openbmc/",
        "scm_url": "",
        "webscm_url": "",
        "list_archive_url": "",
        "list_archive_url_format": "",
        "commit_url_format": ""
    },
    "msgid": "<20260206-axiado-ax3000-add-emmc-phy-driver-support-v2-2-a2f59e97a92d@axiado.com>",
    "list_archive_url": null,
    "date": "2026-02-06T08:22:09",
    "name": "[v2,2/4] phy: axiado: add Axiado eMMC PHY driver",
    "commit_ref": null,
    "pull_url": null,
    "state": "new",
    "archived": false,
    "hash": "57b488bc7d3ab5579fe1bae0003ee5581ba0cb89",
    "submitter": {
        "id": 91696,
        "url": "http://patchwork.ozlabs.org/api/people/91696/?format=api",
        "name": "Tzu-Hao Wei",
        "email": "twei@axiado.com"
    },
    "delegate": null,
    "mbox": "http://patchwork.ozlabs.org/project/openbmc/patch/20260206-axiado-ax3000-add-emmc-phy-driver-support-v2-2-a2f59e97a92d@axiado.com/mbox/",
    "series": [
        {
            "id": 491445,
            "url": "http://patchwork.ozlabs.org/api/series/491445/?format=api",
            "web_url": "http://patchwork.ozlabs.org/project/openbmc/list/?series=491445",
            "date": "2026-02-06T08:22:11",
            "name": "Add eMMC PHY support for Axiado AX3000 SoC",
            "version": 2,
            "mbox": "http://patchwork.ozlabs.org/series/491445/mbox/"
        }
    ],
    "comments": "http://patchwork.ozlabs.org/api/patches/2194432/comments/",
    "check": "pending",
    "checks": "http://patchwork.ozlabs.org/api/patches/2194432/checks/",
    "tags": {},
    "related": [],
    "headers": {
        "Return-Path": "\n <openbmc+bounces-1337-incoming=patchwork.ozlabs.org@lists.ozlabs.org>",
        "X-Original-To": [
            "incoming@patchwork.ozlabs.org",
            "openbmc@lists.ozlabs.org"
        ],
        "Delivered-To": "patchwork-incoming@legolas.ozlabs.org",
        "Authentication-Results": [
            "legolas.ozlabs.org;\n\tdkim=pass (2048-bit key;\n unprotected) header.d=axiado.com header.i=@axiado.com header.a=rsa-sha256\n header.s=selector1 header.b=bz/EGjWm;\n\tdkim-atps=neutral",
            "legolas.ozlabs.org;\n spf=pass (sender SPF authorized) smtp.mailfrom=lists.ozlabs.org\n (client-ip=112.213.38.117; helo=lists.ozlabs.org;\n envelope-from=openbmc+bounces-1337-incoming=patchwork.ozlabs.org@lists.ozlabs.org;\n receiver=patchwork.ozlabs.org)",
            "lists.ozlabs.org;\n arc=pass smtp.remote-ip=\"2a01:111:f403:c111::5\" arc.chain=microsoft.com",
            "lists.ozlabs.org;\n dmarc=none (p=none dis=none) header.from=axiado.com",
            "lists.ozlabs.org;\n\tdkim=pass (2048-bit key;\n unprotected) header.d=axiado.com header.i=@axiado.com header.a=rsa-sha256\n header.s=selector1 header.b=bz/EGjWm;\n\tdkim-atps=neutral",
            "lists.ozlabs.org;\n spf=pass (sender SPF authorized) smtp.mailfrom=axiado.com\n (client-ip=2a01:111:f403:c111::5;\n helo=dm1pr04cu001.outbound.protection.outlook.com;\n envelope-from=twei@axiado.com; receiver=lists.ozlabs.org)",
            "dkim=none (message not signed)\n header.d=none;dmarc=none action=none header.from=axiado.com;"
        ],
        "Received": [
            "from lists.ozlabs.org (lists.ozlabs.org [112.213.38.117])\n\t(using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits)\n\t key-exchange x25519)\n\t(No client certificate requested)\n\tby legolas.ozlabs.org (Postfix) with ESMTPS id 4f8N4l4b8Cz1xtr\n\tfor <incoming@patchwork.ozlabs.org>; Mon, 09 Feb 2026 09:37:43 +1100 (AEDT)",
            "from boromir.ozlabs.org (localhost [127.0.0.1])\n\tby lists.ozlabs.org (Postfix) with ESMTP id 4f8N3p5Jnkz2xqk;\n\tMon, 09 Feb 2026 09:36:54 +1100 (AEDT)",
            "from DM1PR04CU001.outbound.protection.outlook.com\n (mail-centralusazlp170100005.outbound.protection.outlook.com\n [IPv6:2a01:111:f403:c111::5])\n\t(using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits)\n\t key-exchange secp256r1 server-signature RSA-PSS (2048 bits) server-digest\n SHA256)\n\t(No client certificate requested)\n\tby lists.ozlabs.org (Postfix) with ESMTPS id 4f6nCC0DKVz30M0\n\tfor <openbmc@lists.ozlabs.org>; Fri, 06 Feb 2026 19:22:47 +1100 (AEDT)",
            "from PH0PR18MB4558.namprd18.prod.outlook.com (2603:10b6:510:ac::13)\n by DM6PR18MB3667.namprd18.prod.outlook.com (2603:10b6:5:2ae::22) with\n Microsoft SMTP Server (version=TLS1_2,\n cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.9587.15; Fri, 6 Feb\n 2026 08:22:20 +0000",
            "from PH0PR18MB4558.namprd18.prod.outlook.com\n ([fe80::7a75:75a5:694b:2311]) by PH0PR18MB4558.namprd18.prod.outlook.com\n ([fe80::7a75:75a5:694b:2311%7]) with mapi id 15.20.9587.013; Fri, 6 Feb 2026\n 08:22:20 +0000"
        ],
        "ARC-Seal": [
            "i=2; a=rsa-sha256; d=lists.ozlabs.org; s=201707; t=1770366167;\n\tcv=pass;\n b=jDjCSbYjAywcl1ETZon+uA0iqiDMDhqFiJr43hU5ciunQTSbQJMoQPxaF3Js/3rDejD1/V00o1ApbqbNeUfZRvzUvWudv/U61lDVorjZyXZHUawngwLrcOkuWU0fXvj709tpVaOLmt7JciF1B48F/1lgr8187V89jFhERjRPRFqsNzLK8I1Y1UlBTNpejUYsXnjkmhlbwNC3oFS+J3SjBHkLs/iZKID32F+9DyWJYJIVo/1KUm4OmXWCQx02uLpc0mrSt2LEggFK+cHsQOGcF4KXwmCGniwV19mEXelxXxi/cdudICKa8KfkRY+Nmq9P/YKfVxK2IHPiRDxLDntwWQ==",
            "i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none;\n b=Y3FPu4oh+yGr/EfTL7Vrt7QADxT7xOLlApIlnuDGhJE1nDYuRf+mI09kzcBYK+QBat0bc4sQNzYw2JGrKIe2iclghrZjloepi6WuD8IE3XBM6uIp+Ccd4uSXHVhQQYV9frsrJSYUbbVzIGDw1WnN61ALR4h8kklCLk1gv2fo8hVjz7EQrndAHSeDoZuOVvzLJev5pMDPeEXWGxNggPe0IP06KWSuoaTROsWPwFGHl3VgIVp6ved9zFKXI+e0PFr2nDUfrK+oTc+/cMX8AK4EQh6MKRVGRjDumcjpyhLh+j5jJ6NaDnt6rSv6m/heSXmKHiV6HVoSvM//nzxyEEjHhQ=="
        ],
        "ARC-Message-Signature": [
            "i=2; a=rsa-sha256; d=lists.ozlabs.org; s=201707;\n\tt=1770366167; c=relaxed/relaxed;\n\tbh=yQaUVtsV5eZKPc/Ggg63SLB17LC3PhULQJu28QTXL94=;\n\th=From:Date:Subject:Content-Type:Message-Id:References:In-Reply-To:\n\t To:Cc:MIME-Version;\n b=KOey2GPqxHx6mnUCiFUidlqKRDJ3XWEsR12CpuOROn4q/fz2UdoiLbEwgryynIUTVdqButbOovMO0aOVq+CAKVerRN7hXbDcnVmseUIbfZzCninmgI35wMcDeTxUat9EjrGzQ/mQRmByGJ3hbEhOl418qCc5lw3xZMFaGuEf6Z/29tqFQWwXE47huksVLSWl/ivOryYpH+FFd4mTVFiYlX4ch43MajMlA9PiHuBnwB0A6Y4KO9AIn2+6torwTvajuhAlu7TXdvy02JkY+spoZaFlTtCs/IS0vR4JZOvE6AM5EcbI2y9UHb8GlOuHvn10EKduOcdI2z0yW26ZWHzpNA==",
            "i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com;\n s=arcselector10001;\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=yQaUVtsV5eZKPc/Ggg63SLB17LC3PhULQJu28QTXL94=;\n b=yHWq2hcf8F7ope8+OfbXZKysq33ndP83cLDQN6hy0HAw43jvXDgyowL6kMtFGfR/vJnGkbVkpIwsPLrBw8Jl3Mpp1VWMiNZp5K88Q7jLwdcB59XYe9JdsJ8HNkFe0Gzdyn+FsXjtZJUnZD23p27jk/v0DtF8qUiewDkrfX8XKwOFgb1gWvSWJzaXuKwMSoeG4qEATmcXGOVpZYmV4Ed94EU8PNnUVey8InlYTWMIDnNa9iuzSudqzJJUV5ArHOydD8zI4VQq3uRrnEM4xuLnr/YhtIs7rduXD3eaUv+mv57Jej8OwkGLEidjMGpptnSh8HDGFqjQruxPKu2ZQfjFmg=="
        ],
        "ARC-Authentication-Results": [
            "i=2; lists.ozlabs.org;\n dmarc=none (p=none dis=none) header.from=axiado.com; dkim=pass (2048-bit key;\n unprotected) header.d=axiado.com header.i=@axiado.com header.a=rsa-sha256\n header.s=selector1 header.b=bz/EGjWm; dkim-atps=neutral;\n spf=pass (client-ip=2a01:111:f403:c111::5;\n helo=dm1pr04cu001.outbound.protection.outlook.com;\n envelope-from=twei@axiado.com;\n receiver=lists.ozlabs.org) smtp.mailfrom=axiado.com",
            "i=1; mx.microsoft.com 1; spf=pass\n smtp.mailfrom=axiado.com; dmarc=pass action=none header.from=axiado.com;\n dkim=pass header.d=axiado.com; arc=none"
        ],
        "DKIM-Signature": "v=1; a=rsa-sha256; c=relaxed/relaxed; d=axiado.com;\n s=selector1;\n h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck;\n bh=yQaUVtsV5eZKPc/Ggg63SLB17LC3PhULQJu28QTXL94=;\n b=bz/EGjWmeNBN1p2q25rUAWSKOfLTBKPdwkMaylbkNFkpweQh1obnbOr5/iNDiCSgigNS8wQnSehgrAvyG0KNX8ONJ5SVMQyb68+iwT/svj+6W4igiInVlawzli/fhpv+jbOV4bDZNjJlAVbAWyW54JqpDP9vsoowbXlkHrPYJA8SVkhMkJOqH8UJAWwMwVotw5qGRmIH4HDOgmnOad9q1AZz43OCfiZXQdN6aWCMVMdfPXen2PofXZ6olFjMg8sn/Fv+6b3nvJ2MpYrwF3iHwaqyvivh/fbsrT7XjOyWdcZvvZk+xglxNzgThcKAeignop8kdX8hqM3flEZx+S4ckg==",
        "From": "Tzu-Hao Wei <twei@axiado.com>",
        "Date": "Fri, 06 Feb 2026 16:22:09 +0800",
        "Subject": "[PATCH v2 2/4] phy: axiado: add Axiado eMMC PHY driver",
        "Content-Type": "text/plain; charset=\"utf-8\"",
        "Content-Transfer-Encoding": "7bit",
        "Message-Id": "\n <20260206-axiado-ax3000-add-emmc-phy-driver-support-v2-2-a2f59e97a92d@axiado.com>",
        "References": "\n <20260206-axiado-ax3000-add-emmc-phy-driver-support-v2-0-a2f59e97a92d@axiado.com>",
        "In-Reply-To": "\n <20260206-axiado-ax3000-add-emmc-phy-driver-support-v2-0-a2f59e97a92d@axiado.com>",
        "To": "SriNavmani A <srinavmani@axiado.com>,\n Prasad Bolisetty <pbolisetty@axiado.com>, Vinod Koul <vkoul@kernel.org>,\n Neil Armstrong <neil.armstrong@linaro.org>, Rob Herring <robh@kernel.org>,\n Krzysztof Kozlowski <krzk+dt@kernel.org>,\n Conor Dooley <conor+dt@kernel.org>",
        "Cc": "linux-phy@lists.infradead.org, devicetree@vger.kernel.org,\n linux-arm-kernel@lists.infradead.org, linux-kernel@vger.kernel.org,\n openbmc@lists.ozlabs.org, Tzu-Hao Wei <twei@axiado.com>",
        "X-Mailer": "b4 0.14.2",
        "X-Developer-Signature": "v=1; a=openpgp-sha256; l=9234; i=twei@axiado.com;\n h=from:subject:message-id; bh=XTDIF1da24JB5QFFJCOouIbpzH8ph5S2EmF/RAzCbeQ=;\n b=owEB7QES/pANAwAKAXgQMF3EWvHXAcsmYgBphaS5oIwXbgXd6c66r7J12ZIKxpG7oPionERk7\n bzW4XCg6g2JAbMEAAEKAB0WIQSZyWINOowtFmDvdYF4EDBdxFrx1wUCaYWkuQAKCRB4EDBdxFrx\n 1wI+C/9nbebu7Y3iM2AdL1gsMbxDGHt3yAHvEbodabmM637ABzqSfh/3DT+PSPo5aHpid9pXf2F\n flqWGLA8eS94X5LgI3jlCOE9WpSNBjgTV+5+RoJLVHDyu78Myfkvgd7KcsQJD/YK/T3utr3DYML\n nZs3Rcchk+A0mp9g2+hPn4bm15eESC+eEEzCK4TGZNjaUyshs8JlLfl85OVy3BNsBcMCscfpwML\n vjAQyr1TJfBUrwv4UGWP07dU/1FZK+J1TBllQXjO+BzH9Bxamz0BtJgAc+x2+iVry9MSOcvamrc\n S3cwYx/4CT6HjcTofbNoJPFG4issEj1TpWRMtXex76UIMClMILYlJEMERSQK4bwRGWmSy8bLgwS\n ujSuPm1Qgi//x1cyqiFh5SrEMaO2SJZqfRK/wzHbwsSrSeh+nM3RK4hFiFC7TLz6rxVLzwxNplO\n PAdqolvP19au2mvwp4JmtMPdVzoWbVzf78wE1D7Im77HMuc5J+ygWnL5HqEic9Q7a4YyI=",
        "X-Developer-Key": "i=twei@axiado.com; a=openpgp;\n fpr=99C9620D3A8C2D1660EF75817810305DC45AF1D7",
        "X-ClientProxiedBy": "PH7PR17CA0044.namprd17.prod.outlook.com\n (2603:10b6:510:323::15) To PH0PR18MB4558.namprd18.prod.outlook.com\n (2603:10b6:510:ac::13)",
        "X-Mailing-List": "openbmc@lists.ozlabs.org",
        "List-Id": "<openbmc.lists.ozlabs.org>",
        "List-Help": "<mailto:openbmc+help@lists.ozlabs.org>",
        "List-Owner": "<mailto:openbmc+owner@lists.ozlabs.org>",
        "List-Post": "<mailto:openbmc@lists.ozlabs.org>",
        "List-Subscribe": "<mailto:openbmc+subscribe@lists.ozlabs.org>,\n  <mailto:openbmc+subscribe-digest@lists.ozlabs.org>,\n  <mailto:openbmc+subscribe-nomail@lists.ozlabs.org>",
        "List-Unsubscribe": "<mailto:openbmc+unsubscribe@lists.ozlabs.org>",
        "Precedence": "list",
        "MIME-Version": "1.0",
        "X-MS-PublicTrafficType": "Email",
        "X-MS-TrafficTypeDiagnostic": "PH0PR18MB4558:EE_|DM6PR18MB3667:EE_",
        "X-MS-Office365-Filtering-Correlation-Id": "0d3f091a-0e1c-4e33-b8ca-08de6558d866",
        "X-MS-Exchange-SenderADCheck": "1",
        "X-MS-Exchange-AntiSpam-Relay": "0",
        "X-Microsoft-Antispam": "\n\tBCL:0;ARA:13230040|376014|52116014|7416014|1800799024|366016|42112799006|38350700014;",
        "X-Microsoft-Antispam-Message-Info": "=?utf-8?q?2Tm4wAlfxrtS9V8uq3cDO9/k8dUEtPf?=\n\t=?utf-8?q?yS1c1kfATZKujCZj87JRGgUybztGiAV3vtJIbdUcUHgr7lM6w+Xd7TCHpgviQZ5gu?=\n\t=?utf-8?q?qTb6p+fkdsuXvsSXBizXvcoarlwsH5MlMH2buQqYh4nmd8YpG/mXSZxltjsDO9LXA?=\n\t=?utf-8?q?H+P2l8IPtGc2Fuutia5hWM++2FaIWIFrcOIuTdrnOb6IAp5xh0RucBuIPYYhpYFgQ?=\n\t=?utf-8?q?9qvpr0ftHDf8CP4SNXIm+swEgZJPj/6TyAQe9CTdViR4kxGE3cXG8GrNov9xgH1Y/?=\n\t=?utf-8?q?HOdhsh79OIqrPWQ57Ji/qOPodq3HD3maIhAcQhKKhi+cP3Z4OvGEnboIpHTCKtzNq?=\n\t=?utf-8?q?DsbIJ7aaKNHzvfmwpEe4oPvj58uRXvcvKyzSBL8XpH8IleJF2UOjBXAPL4C05efEH?=\n\t=?utf-8?q?Zf+p4ZM6Y5nu8MtLgTngCeMpCY1wV3qmP3bMXxH7Iwr5FJfKWFGXuOlGnPEO25MdT?=\n\t=?utf-8?q?0gyd4e4EgLvpjxM3W8+znSkjIlXGPicl4ILhieRb23j+gtf9f2u7fkEjWZ8fmuPtW?=\n\t=?utf-8?q?ZnpBDu6y3A6G5v2ppnG9Q8gWTwTI9m97fHQBcZ5+tQvxnHOafMGZ1j6CMcyOSPsWz?=\n\t=?utf-8?q?Zz61QCkaBwS9/m/+pqmAocjvjI0/0PZ+T21Lw880bQElSF4aJhMfOy2v143yosHB4?=\n\t=?utf-8?q?uDhmNBcXOe1PJODby34K2ZuHGR5bbdA3b/W//cCN2OPQyLqbzolB9fc3LXe8mAV1x?=\n\t=?utf-8?q?Lw9W/maCg3aEu9faI9g9t6fMSo9E7kmPQJeRuGLXmg22v+8ro85kDuvUK7WPdxkyc?=\n\t=?utf-8?q?FOl1l95XASOn+DMa/S56OdO8Eg+ToR7kZ8XPPQ/llysof5jnk3K/Un1u+6u0j+rUs?=\n\t=?utf-8?q?LOJWyVEzfTpvVWC9HyvuCvPiGfseTQwJj8tJIvt+967wgYlvw30Qv8WT9XiBGHFee?=\n\t=?utf-8?q?WE2Z7zsETgGJmwFuDuvQ3n2kQJ8D5oQwZbt1ZxJ/yUZlnR0oXXMZZTptxFbEonzpJ?=\n\t=?utf-8?q?d9oCeCczdZ0PoorYuVDMvUhCARPJ7vzNphIiqRMVvrTZhiscuGwPXXcF5O5NyUQhC?=\n\t=?utf-8?q?RQC3tKywmv0U9q+ySrNk7y2n5yguTzwczb1QG3VVGq3YITyl/OpxAgnl2g/alrfwI?=\n\t=?utf-8?q?8UpymXCRQNVMz9y43YJQveQ8oBl49rW0xwP7bLLxuaYOtGztn595tQKOnr4y0XhQL?=\n\t=?utf-8?q?sKMjY9Pla/EkwsyMVjzXpzJofX0AlOueKEq3YZ9HPiLYoYAd3kp/P0hdNPRn1i7AY?=\n\t=?utf-8?q?+ezkt1j8s1yZXUGmE0rVVob8lUwg9Ool/lcfINyZBd5AbpUm/w4EQc3U9qKifPVw6?=\n\t=?utf-8?q?TAOcg7aZ9ta/NqT/7TfX+Ot4wARQYXO2FffpRRvfHVe9vr4ija+kpyJ7EtC9CMT5h?=\n\t=?utf-8?q?7nNWhjuivZa+zcubolYI9TKMw25oDYBphb3HxS5W5Sl/AC4oHqAJm6dn37iaHHomH?=\n\t=?utf-8?q?KlbgC07QQjGwF5JsIC/dOj+SS7ksxYxLuAvXugt+EtVqMbdtF7FezQkE/ZnuPBEOJ?=\n\t=?utf-8?q?oWWGPJ8fFoiFzFobAy8RemiMmPBEfj6+oqxb/i9Yv8HeHMKXQtEiKZUpVmnDBFx2n?=\n\t=?utf-8?q?Z/wFSNEGXswcf3SfhWJwkiBKxTi/ruFQFXSczoC9JydAZpOZtyv4=3D?=",
        "X-Forefront-Antispam-Report": "\n\tCIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:PH0PR18MB4558.namprd18.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230040)(376014)(52116014)(7416014)(1800799024)(366016)(42112799006)(38350700014);DIR:OUT;SFP:1102;",
        "X-MS-Exchange-AntiSpam-MessageData-ChunkCount": "1",
        "X-MS-Exchange-AntiSpam-MessageData-0": "=?utf-8?q?dmqxZvjNP4fAsODJG691exVxBicz?=\n\t=?utf-8?q?ygn18TepiceKz5UNTm6v7d9fmATxhzSGZsGiGmvgEEAPolhbrAdMk8GnZzzPVTXXO?=\n\t=?utf-8?q?M7ni999lAWj0yQU2sket2LCF/7W1ChhO4VFz36kXTbt+ZiTXZJKjqCIP7KVaxQFNA?=\n\t=?utf-8?q?8BE8lRrOw24Kl2c+wZeIDmI5KXczMhkNgAPDR+xmAxxOjaPv5co8dAUYlObJ+XlSc?=\n\t=?utf-8?q?3tL/RWoPqUAEHGABpHDyug+h/Yb8/rr5hJdqJw0MH8qvmO0d/UOeX109XbWQI2rr1?=\n\t=?utf-8?q?EizUIpMjRvCYrRGZXOl73bZrY1EQcTTghBf7VOFRiPXw9wNPVcK3AxNstSov6CWCz?=\n\t=?utf-8?q?6C+juv59qu7Q1wKuG0JfIPQ2O+RcHm1xLQ/sV7/P7E/7d1fimMa+BJKCU+KG93ZCQ?=\n\t=?utf-8?q?Lgmw6xodd6DfO6rlwo32kSzmtKalV5hYqoCA8hLuhOWQd9rGsA79mbqXElI/OWLSL?=\n\t=?utf-8?q?s5lV8EmTiKh8QF2m9Qjt4Y5y4Y8SRRa+CovJ3cEfCxQA0MNFx0q24FBDs6hAoCU9w?=\n\t=?utf-8?q?3HHyY7qOAtQOPhMwfEh53YiO9ks/EbGpsfuW7jmPIaqLX/SgvOSOfYGy32d0OCdEx?=\n\t=?utf-8?q?jblY0y3zTmyFBVn53z9j2a//zHDgToT31YAnmErcxXMrzh33ViBS5AYwSFKGVBcbT?=\n\t=?utf-8?q?kox7ngvkYd8SW46e8m66Q1eK3ksel5B36n+SwYApG6+rDZ8Me62DRcCPfF++2Yurw?=\n\t=?utf-8?q?Vgrwjr1kdGhwlFsCRU0xzTtvzyd7RBiJ12SqAmHZLvo5PzGVunZOodltqJhpyVXG+?=\n\t=?utf-8?q?Y3oOIieOjXpiH5TjFaisEiOIs2U/ztTeRn1YCxQ/SSX9SOH9uK+vrBRkL7NzN8QQ9?=\n\t=?utf-8?q?WTLo4Q+I/clulu/w+WbwDlyGZj8wEusQ2sEvWn6dgLNfObLSz9YjTgvEwCYp7Jvs6?=\n\t=?utf-8?q?7+0MJsIfz9S69Ff5mjk410uS8sjF7qzVjRiBgd5L/EJTLqK0DQfIlcCGsefFRMeYV?=\n\t=?utf-8?q?AL2hO9WYCTyIn4y/YzHeIKEdapzajpcIGbsrtrNztl82SpgtlGE6UKQh7gcPNP1Ky?=\n\t=?utf-8?q?oQvUuXC2HiJ3g/nbOrN1k1h/42ZZPBNeOgLYOgU7E+oQ/nUKiCFhPSredQ/pDnEFa?=\n\t=?utf-8?q?ftD1AtTKKTzK4C/RYQ6fGgqiEPFvB636LrpT6ea5lpmgmL6BdPmzLf44J3aFHX9cY?=\n\t=?utf-8?q?KCJKV+u855ri05h/k0dsmh6gBmPaP65EkwEvX9y/fzM8u35Cu2pBZ1owqVXJWOT/F?=\n\t=?utf-8?q?2Xh7A8HL88EzVI8ycsSsy0a67qOLi1jgHkGznTuqTcgRO1Hxr0Zb8j6EPS1r+Ptxd?=\n\t=?utf-8?q?YTx11d1wxvPkU62DcjJWJ1Z91ULGU9QVzv1ROohn2Ope0PR8XKHx6Xfn760kSpfaV?=\n\t=?utf-8?q?RINNWs98bhaHWDZbyxZ6FL80VXefEtVc8Gc00Qh6SWimFiNwtzMTzmS6YoqmF/89i?=\n\t=?utf-8?q?e/f0M5tujLPdrcZ7b9pdFE4WBjT86K4i4xCLvFjFGJUU4pYIaSvc934R/jVSHcy9K?=\n\t=?utf-8?q?Nam5uo74I+47g/Pka/73ehYtaOkkvKKKfZW/uPOivD+M9YceVhOqfzR4ZCxkn4dNd?=\n\t=?utf-8?q?qFgdsuhIbyHUpHfdASHbgYlnXJr+4zIOi6m5zIvs4gXeAQzdGom1yWKzfndZDtFAe?=\n\t=?utf-8?q?9eAbBGtV7kZg3Y42LGZ1CGDMZdIpXBkGqm6+ooG48PLnKbKj0NZYEkIifFflA7Ba/?=\n\t=?utf-8?q?8fDp5IUmbA?=",
        "X-OriginatorOrg": "axiado.com",
        "X-MS-Exchange-CrossTenant-Network-Message-Id": "\n 0d3f091a-0e1c-4e33-b8ca-08de6558d866",
        "X-MS-Exchange-CrossTenant-AuthSource": "PH0PR18MB4558.namprd18.prod.outlook.com",
        "X-MS-Exchange-CrossTenant-AuthAs": "Internal",
        "X-MS-Exchange-CrossTenant-OriginalArrivalTime": "06 Feb 2026 08:22:19.6691\n (UTC)",
        "X-MS-Exchange-CrossTenant-FromEntityHeader": "Hosted",
        "X-MS-Exchange-CrossTenant-Id": "ff2db17c-4338-408e-9036-2dee8e3e17d7",
        "X-MS-Exchange-CrossTenant-MailboxType": "HOSTED",
        "X-MS-Exchange-CrossTenant-UserPrincipalName": "\n 8WPyxyYopPvFDyfPYaSCeiYgQRlvQBnvfCHHLj8MaCgt+8qBd2fj6U1sMqf1Lnc6",
        "X-MS-Exchange-Transport-CrossTenantHeadersStamped": "DM6PR18MB3667",
        "X-Spam-Status": "No, score=-0.2 required=5.0 tests=ARC_SIGNED,ARC_VALID,\n\tDKIM_SIGNED,DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,RCVD_IN_DNSWL_NONE,\n\tSPF_HELO_PASS,SPF_PASS autolearn=disabled version=4.0.1",
        "X-Spam-Checker-Version": "SpamAssassin 4.0.1 (2024-03-25) on lists.ozlabs.org"
    },
    "content": "From: SriNavmani A <srinavmani@axiado.com>\n\nIt provides the required configurations for Axiado eMMC PHY driver for\nHS200 mode.\n\nSigned-off-by: SriNavmani A <srinavmani@axiado.com>\nCo-developed-by: Prasad Bolisetty <pbolisetty@axiado.com>\nSigned-off-by: Prasad Bolisetty <pbolisetty@axiado.com>\nSigned-off-by: Tzu-Hao Wei <twei@axiado.com>\n---\n drivers/phy/Kconfig                  |   1 +\n drivers/phy/Makefile                 |   1 +\n drivers/phy/axiado/Kconfig           |  11 ++\n drivers/phy/axiado/Makefile          |   1 +\n drivers/phy/axiado/phy-axiado-emmc.c | 221 +++++++++++++++++++++++++++++++++++\n 5 files changed, 235 insertions(+)",
    "diff": "diff --git a/drivers/phy/Kconfig b/drivers/phy/Kconfig\nindex 678dd0452f0aa0597773433f04d2a9ba77474d2a..b802274ea45a84bd36d7c0b7fb90e368a5c018b4 100644\n--- a/drivers/phy/Kconfig\n+++ b/drivers/phy/Kconfig\n@@ -103,6 +103,7 @@ config PHY_NXP_PTN3222\n \n source \"drivers/phy/allwinner/Kconfig\"\n source \"drivers/phy/amlogic/Kconfig\"\n+source \"drivers/phy/axiado/Kconfig\"\n source \"drivers/phy/broadcom/Kconfig\"\n source \"drivers/phy/cadence/Kconfig\"\n source \"drivers/phy/freescale/Kconfig\"\ndiff --git a/drivers/phy/Makefile b/drivers/phy/Makefile\nindex bfb27fb5a494283d7fd05dd670ebd1b12df8b1a1..f1b9e4a8673bcde3fdc0fdc06a3deddb5785ced1 100644\n--- a/drivers/phy/Makefile\n+++ b/drivers/phy/Makefile\n@@ -15,6 +15,7 @@ obj-$(CONFIG_PHY_AIROHA_PCIE)\t\t+= phy-airoha-pcie.o\n obj-$(CONFIG_PHY_NXP_PTN3222)\t\t+= phy-nxp-ptn3222.o\n obj-y\t\t\t\t\t+= allwinner/\t\\\n \t\t\t\t\t   amlogic/\t\\\n+\t\t\t\t\t   axiado/\t\\\n \t\t\t\t\t   broadcom/\t\\\n \t\t\t\t\t   cadence/\t\\\n \t\t\t\t\t   freescale/\t\\\ndiff --git a/drivers/phy/axiado/Kconfig b/drivers/phy/axiado/Kconfig\nnew file mode 100644\nindex 0000000000000000000000000000000000000000..d159e0345345987c7f48dcd12d3237997735d2b5\n--- /dev/null\n+++ b/drivers/phy/axiado/Kconfig\n@@ -0,0 +1,11 @@\n+#\n+# PHY drivers for Axiado platforms\n+#\n+\n+config PHY_AX3000_EMMC\n+\ttristate \"Axiado eMMC PHY driver\"\n+\tdepends on OF && (ARCH_AXIADO || COMPILE_TEST)\n+\tselect GENERIC_PHY\n+\thelp\n+\t  Enables this to support for the AX3000 EMMC PHY driver.\n+\t  If unsure, say N.\ndiff --git a/drivers/phy/axiado/Makefile b/drivers/phy/axiado/Makefile\nnew file mode 100644\nindex 0000000000000000000000000000000000000000..1e2b1ba016092eaffdbd7acbd9cdc8577d79b35c\n--- /dev/null\n+++ b/drivers/phy/axiado/Makefile\n@@ -0,0 +1 @@\n+obj-$(CONFIG_PHY_AX3000_EMMC)\t\t+= phy-axiado-emmc.o\ndiff --git a/drivers/phy/axiado/phy-axiado-emmc.c b/drivers/phy/axiado/phy-axiado-emmc.c\nnew file mode 100644\nindex 0000000000000000000000000000000000000000..28d2a30c3b35ee7dba917487959e226941e8ea4b\n--- /dev/null\n+++ b/drivers/phy/axiado/phy-axiado-emmc.c\n@@ -0,0 +1,221 @@\n+// SPDX-License-Identifier: GPL-2.0-or-later\n+/*\n+ * Axiado eMMC PHY driver\n+ *\n+ * Copyright (C) 2017 Arasan Chip Systems Inc.\n+ * Copyright (C) 2022-2025 Axiado Corporation (or its affiliates).\n+ *\n+ * Based on Arasan Driver (sdhci-pci-arasan.c)\n+ * sdhci-pci-arasan.c - Driver for Arasan PCI Controller with integrated phy.\n+ */\n+#include <linux/bitfield.h>\n+#include <linux/delay.h>\n+#include <linux/io.h>\n+#include <linux/iopoll.h>\n+#include <linux/module.h>\n+#include <linux/of.h>\n+#include <linux/phy/phy.h>\n+#include <linux/platform_device.h>\n+\n+/* Arasan eMMC 5.1 - PHY configuration registers */\n+#define CAP_REG_IN_S1_LSB\t\t0x00\n+#define CAP_REG_IN_S1_MSB\t\t0x04\n+#define PHY_CTRL_1\t\t\t0x38\n+#define PHY_CTRL_2\t\t\t0x3C\n+#define PHY_CTRL_3\t\t\t0x40\n+#define STATUS\t\t\t\t0x50\n+\n+#define DLL_ENBL\tBIT(26)\n+#define RTRIM_EN\tBIT(21)\n+#define PDB_ENBL\tBIT(23)\n+#define RETB_ENBL\tBIT(1)\n+\n+#define REN_STRB\tBIT(27)\n+#define REN_CMD\t\tBIT(12)\n+#define REN_DAT0\tBIT(13)\n+#define REN_DAT1\tBIT(14)\n+#define REN_DAT2\tBIT(15)\n+#define REN_DAT3\tBIT(16)\n+#define REN_DAT4\tBIT(17)\n+#define REN_DAT5\tBIT(18)\n+#define REN_DAT6\tBIT(19)\n+#define REN_DAT7\tBIT(20)\n+#define REN_CMD_EN\t(REN_CMD | REN_DAT0 | REN_DAT1 | REN_DAT2 | \\\n+\t\tREN_DAT3 | REN_DAT4 | REN_DAT5 | REN_DAT6 | REN_DAT7)\n+\n+/* Pull-UP Enable on CMD Line */\n+#define PU_CMD\t\tBIT(3)\n+#define PU_DAT0\t\tBIT(4)\n+#define PU_DAT1\t\tBIT(5)\n+#define PU_DAT2\t\tBIT(6)\n+#define PU_DAT3\t\tBIT(7)\n+#define PU_DAT4\t\tBIT(8)\n+#define PU_DAT5\t\tBIT(9)\n+#define PU_DAT6\t\tBIT(10)\n+#define PU_DAT7\t\tBIT(11)\n+#define PU_CMD_EN (PU_CMD | PU_DAT0 | PU_DAT1 | PU_DAT2 | PU_DAT3 | \\\n+\t\tPU_DAT4 | PU_DAT5 | PU_DAT6 | PU_DAT7)\n+\n+/* Selection value for the optimum delay from 1-32 output tap lines */\n+#define OTAP_DLY\t0x02\n+/* DLL charge pump current trim default [1000] */\n+#define DLL_TRM_ICP\t0x08\n+/* Select the frequency range of DLL Operation */\n+#define FRQ_SEL\t0x01\n+\n+#define OTAP_SEL_MASK\t\tGENMASK(10, 7)\n+#define DLL_TRM_MASK\t\tGENMASK(25, 22)\n+#define DLL_FRQSEL_MASK\t\tGENMASK(27, 25)\n+\n+#define OTAP_SEL(x)\t\t(FIELD_PREP(OTAP_SEL_MASK, x) | OTAPDLY_EN)\n+#define DLL_TRM(x)\t\t(FIELD_PREP(DLL_TRM_MASK, x) | DLL_ENBL)\n+#define DLL_FRQSEL(x)\tFIELD_PREP(DLL_FRQSEL_MASK, x)\n+\n+#define OTAPDLY_EN\tBIT(11)\n+\n+#define SEL_DLY_RXCLK\tBIT(18)\n+#define SEL_DLY_TXCLK\tBIT(19)\n+\n+#define CALDONE_MASK\t0x40\n+#define DLL_RDY_MASK\t0x1\n+#define MAX_CLK_BUF0\tBIT(20)\n+#define MAX_CLK_BUF1\tBIT(21)\n+#define MAX_CLK_BUF2\tBIT(22)\n+\n+#define CLK_MULTIPLIER\t0xC008E\n+#define POLL_TIMEOUT_MS\t3000\n+#define POLL_DELAY_US\t100\n+\n+struct axiado_emmc_phy {\n+\tvoid __iomem *reg_base;\n+\tstruct device *dev;\n+};\n+\n+static int axiado_emmc_phy_init(struct phy *phy)\n+{\n+\tstruct axiado_emmc_phy *ax_phy = phy_get_drvdata(phy);\n+\tstruct device *dev = ax_phy->dev;\n+\tu32 val;\n+\tint ret;\n+\n+\tval = readl(ax_phy->reg_base + PHY_CTRL_1);\n+\twritel(val | RETB_ENBL | RTRIM_EN, ax_phy->reg_base + PHY_CTRL_1);\n+\n+\tval = readl(ax_phy->reg_base + PHY_CTRL_3);\n+\twritel(val | PDB_ENBL, ax_phy->reg_base + PHY_CTRL_3);\n+\n+\tret = readl_poll_timeout(ax_phy->reg_base + STATUS, val,\n+\t\t\t\t val & CALDONE_MASK, POLL_DELAY_US,\n+\t\t\t\t POLL_TIMEOUT_MS * 1000);\n+\tif (ret) {\n+\t\tdev_err(dev, \"PHY calibration timeout\\n\");\n+\t\treturn ret;\n+\t}\n+\n+\tval = readl(ax_phy->reg_base + PHY_CTRL_1);\n+\twritel(val | REN_CMD_EN | PU_CMD_EN, ax_phy->reg_base + PHY_CTRL_1);\n+\n+\tval = readl(ax_phy->reg_base + PHY_CTRL_2);\n+\twritel(val | REN_STRB, ax_phy->reg_base + PHY_CTRL_2);\n+\n+\tval = readl(ax_phy->reg_base + PHY_CTRL_3);\n+\twritel(val | MAX_CLK_BUF0 | MAX_CLK_BUF1 | MAX_CLK_BUF2,\n+\t       ax_phy->reg_base + PHY_CTRL_3);\n+\n+\twritel(CLK_MULTIPLIER, ax_phy->reg_base + CAP_REG_IN_S1_MSB);\n+\n+\tval = readl(ax_phy->reg_base + PHY_CTRL_3);\n+\twritel(val | SEL_DLY_RXCLK | SEL_DLY_TXCLK,\n+\t       ax_phy->reg_base + PHY_CTRL_3);\n+\n+\treturn 0;\n+}\n+\n+static int axiado_emmc_phy_power_on(struct phy *phy)\n+{\n+\tstruct axiado_emmc_phy *ax_phy = phy_get_drvdata(phy);\n+\tstruct device *dev = ax_phy->dev;\n+\tu32 val;\n+\tint ret;\n+\n+\tval = readl(ax_phy->reg_base + PHY_CTRL_1);\n+\twritel(val | RETB_ENBL, ax_phy->reg_base + PHY_CTRL_1);\n+\n+\tval = readl(ax_phy->reg_base + PHY_CTRL_3);\n+\twritel(val | PDB_ENBL, ax_phy->reg_base + PHY_CTRL_3);\n+\n+\tval = readl(ax_phy->reg_base + PHY_CTRL_2);\n+\twritel(val | OTAP_SEL(OTAP_DLY), ax_phy->reg_base + PHY_CTRL_2);\n+\n+\tval = readl(ax_phy->reg_base + PHY_CTRL_1);\n+\twritel(val | DLL_TRM(DLL_TRM_ICP), ax_phy->reg_base + PHY_CTRL_1);\n+\n+\tval = readl(ax_phy->reg_base + PHY_CTRL_3);\n+\twritel(val | DLL_FRQSEL(FRQ_SEL), ax_phy->reg_base + PHY_CTRL_3);\n+\n+\tret = read_poll_timeout(readl, val, val & DLL_RDY_MASK, POLL_DELAY_US,\n+\t\t\t\tPOLL_TIMEOUT_MS * 1000, false,\n+\t\t\t\tax_phy->reg_base + STATUS);\n+\tif (ret) {\n+\t\tdev_err(dev, \"DLL ready timeout\\n\");\n+\t\treturn ret;\n+\t}\n+\n+\treturn 0;\n+}\n+\n+static const struct phy_ops axiado_emmc_phy_ops = {\n+\t.init = axiado_emmc_phy_init,\n+\t.power_on = axiado_emmc_phy_power_on,\n+\t.owner = THIS_MODULE,\n+};\n+\n+static const struct of_device_id axiado_emmc_phy_of_match[] = {\n+\t{ .compatible = \"axiado,ax3000-emmc-phy\" },\n+\t{ /* sentinel */ },\n+};\n+MODULE_DEVICE_TABLE(of, axiado_emmc_phy_of_match);\n+\n+static int axiado_emmc_phy_probe(struct platform_device *pdev)\n+{\n+\tstruct axiado_emmc_phy *ax_phy;\n+\tstruct phy_provider *phy_provider;\n+\tstruct device *dev = &pdev->dev;\n+\tstruct phy *generic_phy;\n+\n+\tif (!dev->of_node)\n+\t\treturn -ENODEV;\n+\n+\tax_phy = devm_kzalloc(dev, sizeof(*ax_phy), GFP_KERNEL);\n+\tif (!ax_phy)\n+\t\treturn -ENOMEM;\n+\n+\tax_phy->reg_base = devm_platform_ioremap_resource(pdev, 0);\n+\tif (IS_ERR(ax_phy->reg_base))\n+\t\treturn PTR_ERR(ax_phy->reg_base);\n+\n+\tax_phy->dev = dev;\n+\n+\tgeneric_phy = devm_phy_create(dev, dev->of_node, &axiado_emmc_phy_ops);\n+\tif (IS_ERR(generic_phy))\n+\t\treturn dev_err_probe(dev, PTR_ERR(generic_phy),\n+\t\t\t\t     \"failed to create PHY\\n\");\n+\n+\tphy_set_drvdata(generic_phy, ax_phy);\n+\tphy_provider = devm_of_phy_provider_register(dev, of_phy_simple_xlate);\n+\n+\treturn PTR_ERR_OR_ZERO(phy_provider);\n+}\n+\n+static struct platform_driver axiado_emmc_phy_driver = {\n+\t.probe = axiado_emmc_phy_probe,\n+\t.driver = {\n+\t\t.name = \"axiado-emmc-phy\",\n+\t\t.of_match_table = axiado_emmc_phy_of_match,\n+\t},\n+};\n+module_platform_driver(axiado_emmc_phy_driver);\n+\n+MODULE_DESCRIPTION(\"AX3000 eMMC PHY Driver\");\n+MODULE_AUTHOR(\"Axiado Corporation\");\n+MODULE_LICENSE(\"GPL\");\n",
    "prefixes": [
        "v2",
        "2/4"
    ]
}