get:
Show a patch.

patch:
Update a patch.

put:
Update a patch.

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

{
    "id": 806496,
    "url": "http://patchwork.ozlabs.org/api/patches/806496/?format=api",
    "web_url": "http://patchwork.ozlabs.org/project/uboot/patch/1503915996-11495-2-git-send-email-rajesh.bhagat@nxp.com/",
    "project": {
        "id": 18,
        "url": "http://patchwork.ozlabs.org/api/projects/18/?format=api",
        "name": "U-Boot",
        "link_name": "uboot",
        "list_id": "u-boot.lists.denx.de",
        "list_email": "u-boot@lists.denx.de",
        "web_url": null,
        "scm_url": null,
        "webscm_url": null,
        "list_archive_url": "",
        "list_archive_url_format": "",
        "commit_url_format": ""
    },
    "msgid": "<1503915996-11495-2-git-send-email-rajesh.bhagat@nxp.com>",
    "list_archive_url": null,
    "date": "2017-08-28T10:26:30",
    "name": "[U-Boot,v3,1/7] armv8: lsch3: Add serdes and DDR voltage setup",
    "commit_ref": null,
    "pull_url": null,
    "state": "superseded",
    "archived": false,
    "hash": "9faa8b4f7515745ad3123fc1a64513bd9c5d9585",
    "submitter": {
        "id": 68498,
        "url": "http://patchwork.ozlabs.org/api/people/68498/?format=api",
        "name": "Rajesh Bhagat",
        "email": "rajesh.bhagat@nxp.com"
    },
    "delegate": {
        "id": 2666,
        "url": "http://patchwork.ozlabs.org/api/users/2666/?format=api",
        "username": "yorksun",
        "first_name": "York",
        "last_name": "Sun",
        "email": "yorksun@freescale.com"
    },
    "mbox": "http://patchwork.ozlabs.org/project/uboot/patch/1503915996-11495-2-git-send-email-rajesh.bhagat@nxp.com/mbox/",
    "series": [
        {
            "id": 128,
            "url": "http://patchwork.ozlabs.org/api/series/128/?format=api",
            "web_url": "http://patchwork.ozlabs.org/project/uboot/list/?series=128",
            "date": "2017-08-28T10:26:29",
            "name": "Add VID support for QDS and RDB platforms",
            "version": 3,
            "mbox": "http://patchwork.ozlabs.org/series/128/mbox/"
        }
    ],
    "comments": "http://patchwork.ozlabs.org/api/patches/806496/comments/",
    "check": "pending",
    "checks": "http://patchwork.ozlabs.org/api/patches/806496/checks/",
    "tags": {},
    "related": [],
    "headers": {
        "Return-Path": "<u-boot-bounces@lists.denx.de>",
        "X-Original-To": "incoming@patchwork.ozlabs.org",
        "Delivered-To": "patchwork-incoming@bilbo.ozlabs.org",
        "Authentication-Results": [
            "ozlabs.org;\n\tspf=none (mailfrom) smtp.mailfrom=lists.denx.de\n\t(client-ip=81.169.180.215; helo=lists.denx.de;\n\tenvelope-from=u-boot-bounces@lists.denx.de;\n\treceiver=<UNKNOWN>)",
            "spf=fail (sender IP is 192.88.168.50)\n\tsmtp.mailfrom=nxp.com; nxp.com; dkim=none (message not signed)\n\theader.d=none;nxp.com; dmarc=fail action=none header.from=nxp.com;"
        ],
        "Received": [
            "from lists.denx.de (dione.denx.de [81.169.180.215])\n\tby ozlabs.org (Postfix) with ESMTP id 3xgp505jjrz9s8J\n\tfor <incoming@patchwork.ozlabs.org>;\n\tMon, 28 Aug 2017 20:33:08 +1000 (AEST)",
            "by lists.denx.de (Postfix, from userid 105)\n\tid 3539BC223E8; Mon, 28 Aug 2017 10:32:22 +0000 (UTC)",
            "from lists.denx.de (localhost [IPv6:::1])\n\tby lists.denx.de (Postfix) with ESMTP id 6CDB4C224E9;\n\tMon, 28 Aug 2017 10:27:04 +0000 (UTC)",
            "by lists.denx.de (Postfix, from userid 105)\n\tid F0BC6C224BA; Mon, 28 Aug 2017 10:26:47 +0000 (UTC)",
            "from NAM02-BL2-obe.outbound.protection.outlook.com\n\t(mail-bl2nam02on0054.outbound.protection.outlook.com [104.47.38.54])\n\tby lists.denx.de (Postfix) with ESMTPS id 7C78FC2246D\n\tfor <u-boot@lists.denx.de>; Mon, 28 Aug 2017 10:26:43 +0000 (UTC)",
            "from BN3PR03CA0097.namprd03.prod.outlook.com (10.174.66.15) by\n\tCO2PR03MB2264.namprd03.prod.outlook.com (10.166.92.145) with\n\tMicrosoft SMTP Server (version=TLS1_2,\n\tcipher=TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384_P256) id\n\t15.1.1385.9; Mon, 28 Aug 2017 10:26:41 +0000",
            "from BN1AFFO11FD044.protection.gbl (2a01:111:f400:7c10::124) by\n\tBN3PR03CA0097.outlook.office365.com (2603:10b6:400:4::15) with\n\tMicrosoft SMTP Server (version=TLS1_2,\n\tcipher=TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384_P256) id\n\t15.1.1385.9 via Frontend Transport; Mon, 28 Aug 2017 10:26:40 +0000",
            "from tx30smr01.am.freescale.net (192.88.168.50) by\n\tBN1AFFO11FD044.mail.protection.outlook.com (10.58.52.191) with\n\tMicrosoft SMTP Server (version=TLS1_0,\n\tcipher=TLS_RSA_WITH_AES_256_CBC_SHA) id 15.1.1341.15\n\tvia Frontend Transport; Mon, 28 Aug 2017 10:26:40 +0000",
            "from ubuntu1604.ap.freescale.net (ubuntu1604.ap.freescale.net\n\t[10.232.133.7])\n\tby tx30smr01.am.freescale.net (8.14.3/8.14.0) with ESMTP id\n\tv7SAQZfL021815; Mon, 28 Aug 2017 03:26:38 -0700"
        ],
        "X-Spam-Checker-Version": "SpamAssassin 3.4.0 (2014-02-07) on lists.denx.de",
        "X-Spam-Level": "",
        "X-Spam-Status": "No, score=-0.0 required=5.0 tests=RCVD_IN_DNSWL_NONE,\n\tRCVD_IN_MSPIKE_H4, RCVD_IN_MSPIKE_WL,\n\tSPF_HELO_PASS autolearn=unavailable\n\tautolearn_force=no version=3.4.0",
        "Received-SPF": "Fail (protection.outlook.com: domain of nxp.com does not\n\tdesignate 192.88.168.50 as permitted sender)\n\treceiver=protection.outlook.com; \n\tclient-ip=192.88.168.50; helo=tx30smr01.am.freescale.net;",
        "From": "Rajesh Bhagat <rajesh.bhagat@nxp.com>",
        "To": "<u-boot@lists.denx.de>",
        "Date": "Mon, 28 Aug 2017 15:56:30 +0530",
        "Message-ID": "<1503915996-11495-2-git-send-email-rajesh.bhagat@nxp.com>",
        "X-Mailer": "git-send-email 2.7.4",
        "In-Reply-To": "<1503915996-11495-1-git-send-email-rajesh.bhagat@nxp.com>",
        "References": "<1503915996-11495-1-git-send-email-rajesh.bhagat@nxp.com>",
        "MIME-Version": "1.0",
        "X-EOPAttributedMessage": "0",
        "X-Matching-Connectors": "131483896009394149;\n\t(91ab9b29-cfa4-454e-5278-08d120cd25b8); ()",
        "X-Forefront-Antispam-Report": "CIP:192.88.168.50; IPV:NLI; CTRY:US; EFV:NLI;\n\tSFV:NSPM;\n\tSFS:(10009020)(6009001)(336005)(39380400002)(39860400002)(2980300002)(1110001)(1109001)(339900001)(189002)(199003)(8936002)(81156014)(2351001)(2950100002)(81166006)(305945005)(8676002)(5820100001)(356003)(50466002)(53936002)(105606002)(5660300001)(50226002)(106466001)(54906002)(110136004)(68736007)(498600001)(6916009)(626005)(189998001)(2870700001)(23676002)(104016004)(33646002)(6666003)(4326008)(2906002)(36756003)(97736004)(86362001)(77096006)(575784001)(76176999)(50986999)(8656003)(85426001)(47776003);\n\tDIR:OUT; SFP:1101; SCL:1; SRVR:CO2PR03MB2264;\n\tH:tx30smr01.am.freescale.net; \n\tFPR:; SPF:Fail; PTR:InfoDomainNonexistent; MX:1; A:1; LANG:en; ",
        "X-Microsoft-Exchange-Diagnostics": [
            "1; BN1AFFO11FD044;\n\t1:EBJ+IwfXjxyScJ8jRZB2CBQNSq0DTlW0HD/KQAf2LYIxsZTGNS0nmKPnP0HyZYL75yEClcExwNoPNQBWUKqu9GvaocToyV3v6J6QukpMjfuKx+kqdr/bfT4dzUydopga",
            "1; CO2PR03MB2264;\n\t3:E6vkBi0o39x5F/vhW5p0mh4Vsv839pn7Xz9MgMLiUC1gU4cTnivBJSVLSQENfGd3ecND4tblXfEu0Ob2yLDbE3IrG43UMbzH1Jy1AYfJW8Kk/VybL5lSvVxPuT9PGF3llISGk8Zk4M3cWTzCCRhDKQKPMTA6kMPxGaPyf3sJTRbIhOe5LSnhcK/ujd1mOhmbC0oKMRWC7ih1eAl/u4TmwSij1JV+HzMz/K39sfLLD/Sq7/y5REws7JOvZv9nXH17vdKn8k4Mmx8oX/KuQwlUGemo2GlY3YG5yZUus+E9xOitHPnprExwSZFGkmJDR5t30/+X4+wMitj94sWHuoYGqEK6DOJl7Sb5BceHrO+qzps=;\n\t25:ugnYHZHGu8dx/Qq51gttW83kWf8luz77MgHiWkSm4xE1fqZDS6wNRM5sIeO3bzZhU/JZCCQ8kvwbgO8c0hI8siRf0QRBst/wz5HUJDE6UUCjk5awP9T4k6FDa0xm+9Hk/Av2adfPN1lFGp/BZOhBuSsV/kGL/RW9pRLkEaNpTcJTBqZbj9lQXqQVa28qZHplSXhn8+iWZszPNkJq04LweWQ0hMsMukNkoJtoWDjIrjkrGoPbw4rrb0UWcn20J5Lje5LfeczzwNK0TFhn6SlS+ACSF/fvsHmXkd4b7JvIZFYfiDjc3gRs35mex3cJfmpdKpek2i4gJgEwXQG6hpLWTA==",
            "1; CO2PR03MB2264;\n\t31:lW3LVzhXmWMpVgQQZb8qxHmXgLpTMS3VwG82c0Ur7tVoPkZ6rq9UcfTSOYyecNfe8Qe0HHIU5f3GHlhbPAgXgrBB7OEOYFk+okI7ujy84Q9Ll9OrFa2DwODpQeXgNcRpUvuigP/9+YyMCm3msBHRKf8F2zX7swr72+b/3MmXVYhlHNgySnmATT2AuJgr7WjjXuiV7eys69UfEVvnCggaYTEgU1pdY1uY5sjJw/IpuBI=;\n\t4:nPkHj4aT1QCQsdG71piZRbJAv2FUecZgLRNAc+r+qTB2lUbNZgcepJrbf3WjaA9F3sXN3c+JEkN+nda2jC5lyUziSdB6XjdeGgA19joGWxXr0MLwo0a005yQ7b9PStc1JZMrxTAJpm6HSrzLN6trmUlA0tFcGohktD5ZBEJsuZvaKGyRylbwSvT/qKKBgnEwJ/fzu18hVydYBHeDmRPrmGPHuaT+QKryxw61CDpPKCAno8IdzZchS02qHl0FWtDiYdbWsD3w8uxV1ubwBbuVGK0gYDFEhhoBBIq1c5GO3lA=",
            "=?utf-8?q?1=3BCO2PR03MB2264=3B23=3AnAw5?=\n\t=?utf-8?q?ffCmdtVqU2HVepIx/FARecXFhrKGpWQ7lxX5NtO6h6TRC5/0dsb8Yg80?=\n\t=?utf-8?q?imkhHCp15vygpA5cfU16mLEQXk8IAu7m/48+N76RXPf+T8leoZLv/4j6?=\n\t=?utf-8?q?m+ShJgJ0RpRLLLprp0DUHwrV9snHmCa1YBGRWsdx0Py3ed3qZGpYOOr1?=\n\t=?utf-8?q?4ps7k35r2CwXWT/0ruszPuEfumzoYdttmOVwF4Mj8RKVn/WOa/pfsV8D?=\n\t=?utf-8?q?wJyhI5JAbJ7D0hwsOWQ+kWPuNJiFmpDssCd+IIfRwALL26OudPj+8Na/?=\n\t=?utf-8?q?9gtqagpaWl49mhg/OO5h6sr8jetfxgEKkMeftkgB3jcp06w7AdiQwN4G?=\n\t=?utf-8?q?CSRJUMuvJQLA75U23ig9v6vCkmCv/+4Zk4ouu6C6ce0Fi19O0YBqGDoq?=\n\t=?utf-8?q?53XQNHZNQbVs1pWmNUNlVVUT6j0NaeNo6esWf+snwC9A5kps7pVDscUE?=\n\t=?utf-8?q?+MSabsQwfiz/pH0rNi4BbPYMjth4vRzfIx9BNoPQqboKsGzAAajEbFLY?=\n\t=?utf-8?q?7wBC49kg5xCt+4YdVh2vHFczhM4pLBMVfBylNCY5BAdMhCClJIbdMg1K?=\n\t=?utf-8?q?FpWgbYpHk8hlE95SggzeioMsinOnnR9MUSBU8kYMcxmOjaYy3KwfYGcL?=\n\t=?utf-8?q?hWDsAdhrOXh+7/eYzJFhf8qUot+hYRHIyydabrxCGuXPVwuLjfbcmIhV?=\n\t=?utf-8?q?syKosIVxiXhNWgyClRHu0epOmd2gC7F/jmG2oyWfrPaJWk1bFFkIfG++?=\n\t=?utf-8?q?cQuNRUupCgGrV6OB0KR5SmDHlW7tBc/bPG0pb2L0+szq+4hxJDvFFo8S?=\n\t=?utf-8?q?qTTGPs5QW4X/WGagLdZJBic1o6r/V7lrUHWLU1wOHt23cOak7tEowW7X?=\n\t=?utf-8?q?WolDwfvaUlaz9DRKA0zerhj/vVvcqcquTl6sKl3ygcBbZvq5sav0Sy9a?=\n\t=?utf-8?q?zT+Piw2O6g28BOa9Fvf1z+LBSlMwqRCTiTTiDhmzL0tqyUQGolrwnGyw?=\n\t=?utf-8?q?bDhWLhjbUOHorbRQMhyq0T8x7F4zNhCXtUt/wK5cSBciaNEYTZ7MwhN4?=\n\t=?utf-8?q?OECC+6FN9VflL5gkE2khq/f+2O1QL3OYCc8gDWJRWyc+0IyTFD87Ftua?=\n\t=?utf-8?q?8PMN3eLnN7jgIJHTI+SBy+4WjnKnv/eEs8caSx3kE/fzccwaFYlZed/a?=\n\t=?utf-8?q?vrlIYSvlGtM82yDmgn41eOzkLbCkbKEQVuf1lpOuDPjOidzt5n98AIU9?=\n\t=?utf-8?q?jNj2N6gAnCivtrM=3D?=",
            "1; CO2PR03MB2264;\n\t6:IvqC10muUNcVfrNR4CQe7aBvc0xESCKnqx1R5CGbgU0vEk0q78zfWYXm9nB9nC/5U3X76KL79dTDtwwEQsc3M2xKho/HYTEIuqVP1TEK/aN5sNVU15nJI7vyhRWSxAYcFyuvio6hGT8Q6b5YelLInnpuqHpuQpjP7OJesADNCWKoHRrnqUvMv5sVXbj/3d1CZfA01lkTW+zvEPYFh0bZanvNZ6EaP1/skXBhsU46OyzsTqylSbOn9MqFnVbvS/iLn8WVmR/GrP6anSDpvDp+CxCcXfNErvTfTuGSJFaUzUymZAiBJvWn8/oaNwdNSHDII8/N4TC6w0xmoaTH0AER2w==;\n\t5:FlMGkGb9qOa+eQjbcoOt4fZWSuwYPzwLc4otqAmgAVyxCXJLi5jVPAisNk/joDq3/yCXWB6NxzTWk2AeOhfTdJF/QTzsfaF/GzqCK2yra/IJFs2iKVz4z46+8JCoGFTs1+bZnjsidyPOvAA5aORkLA==;\n\t24:iVrROfhgwKgNcu7vqy/gkg8GEGlniOWbDOEBj7rV9DhL79wHm+ad1kVeh3pg1+4pxuTWvbfpTy2clVeTxUbgtV0Kuizn0BszC0q0Bm7f1S4=;\n\t7:BB391BMSqSFvy+N5JFugMmeIJvqGQ01+zg7THocmYhHy15LFs3YrJQz5tRXnxNyXsUic7KcMLh5s0PMDHd0mxZj78hCSu5KuCUBZXbCuEI0eD/kYiYssh8mW6oaD4YkzXYild6FzaAIfyDBVXVyZ5toPnYgU8KkMU3FBvV+DIxNO1wzSQsj/WSLxsKVjuWdJ/DevLbr1RZNRGcEffDJTPryjaxgOs847ZScXU3eeQlU="
        ],
        "X-MS-PublicTrafficType": "Email",
        "X-MS-Office365-Filtering-Correlation-Id": "9cc8ddc1-e5b6-4f96-07e5-08d4edff45ca",
        "X-Microsoft-Antispam": "UriScan:; BCL:0; PCL:0;\n\tRULEID:(300000500095)(300135000095)(300000501095)(300135300095)(22001)(300000502095)(300135100095)(300000503095)(300135400095)(2017052603199)(201703131430075)(201703131517081)(300000504095)(300135200095)(300000505095)(300135600095)(300000506095)(300135500095);\n\tSRVR:CO2PR03MB2264; ",
        "X-MS-TrafficTypeDiagnostic": "CO2PR03MB2264:",
        "X-Exchange-Antispam-Report-Test": "UriScan:(185117386973197);",
        "X-Microsoft-Antispam-PRVS": "<CO2PR03MB226445EE416B4D9687F312E0E39E0@CO2PR03MB2264.namprd03.prod.outlook.com>",
        "X-Exchange-Antispam-Report-CFA-Test": "BCL:0; PCL:0;\n\tRULEID:(100000700101)(100105000095)(100000701101)(100105300095)(100000702101)(100105100095)(6095135)(601004)(2401047)(5005006)(8121501046)(13016025)(13018025)(93006095)(93001095)(3002001)(10201501046)(100000703101)(100105400095)(6055026)(6096035)(201703131430075)(201703131448075)(201703131433075)(201703161259150)(201703151042153)(20161123561025)(20161123556025)(20161123565025)(20161123563025)(20161123559100)(201708071742011)(100000704101)(100105200095)(100000705101)(100105500095);\n\tSRVR:CO2PR03MB2264; BCL:0; PCL:0;\n\tRULEID:(100000800101)(100110000095)(100000801101)(100110300095)(100000802101)(100110100095)(100000803101)(100110400095)(400006)(100000804101)(100110200095)(100000805101)(100110500095);\n\tSRVR:CO2PR03MB2264; ",
        "X-Forefront-PRVS": "0413C9F1ED",
        "SpamDiagnosticOutput": "1:99",
        "SpamDiagnosticMetadata": "NSPM",
        "X-MS-Exchange-CrossTenant-OriginalArrivalTime": "28 Aug 2017 10:26:40.7678\n\t(UTC)",
        "X-MS-Exchange-CrossTenant-Id": "5afe0b00-7697-4969-b663-5eab37d5f47e",
        "X-MS-Exchange-CrossTenant-OriginalAttributedTenantConnectingIp": "TenantId=5afe0b00-7697-4969-b663-5eab37d5f47e;\n\tIp=[192.88.168.50]; \n\tHelo=[tx30smr01.am.freescale.net]",
        "X-MS-Exchange-CrossTenant-FromEntityHeader": "HybridOnPrem",
        "X-MS-Exchange-Transport-CrossTenantHeadersStamped": "CO2PR03MB2264",
        "Cc": "albert.u.boot@aribaud.net",
        "Subject": "[U-Boot] [PATCH v3 1/7] armv8: lsch3: Add serdes and DDR voltage\n\tsetup",
        "X-BeenThere": "u-boot@lists.denx.de",
        "X-Mailman-Version": "2.1.18",
        "Precedence": "list",
        "List-Id": "U-Boot discussion <u-boot.lists.denx.de>",
        "List-Unsubscribe": "<https://lists.denx.de/options/u-boot>,\n\t<mailto:u-boot-request@lists.denx.de?subject=unsubscribe>",
        "List-Archive": "<http://lists.denx.de/pipermail/u-boot/>",
        "List-Post": "<mailto:u-boot@lists.denx.de>",
        "List-Help": "<mailto:u-boot-request@lists.denx.de?subject=help>",
        "List-Subscribe": "<https://lists.denx.de/listinfo/u-boot>,\n\t<mailto:u-boot-request@lists.denx.de?subject=subscribe>",
        "Content-Type": "text/plain; charset=\"utf-8\"",
        "Content-Transfer-Encoding": "base64",
        "Errors-To": "u-boot-bounces@lists.denx.de",
        "Sender": "\"U-Boot\" <u-boot-bounces@lists.denx.de>"
    },
    "content": "Adds SERDES voltage and reset SERDES lanes API and makes\nenable/disable DDR controller support 0.9V API common.\n\nSigned-off-by: Ashish Kumar <Ashish.Kumar@nxp.com>\nSigned-off-by: Rajesh Bhagat <rajesh.bhagat@nxp.com>\n---\nChanges in v3:\n Restructured LS1088A VID support to use common VID driver\n Cosmetic review comments fixed\n Added __iomem for accessing registers\n\nChanges in v2:\n Checkpatch errors fixed\n\n .../cpu/armv8/fsl-layerscape/fsl_lsch3_serdes.c    | 274 +++++++++++++++++++++\n arch/arm/cpu/armv8/fsl-layerscape/soc.c            |  34 +--\n .../include/asm/arch-fsl-layerscape/fsl_serdes.h   |   2 +-\n .../include/asm/arch-fsl-layerscape/immap_lsch3.h  |  34 +++\n arch/arm/include/asm/arch-fsl-layerscape/soc.h     |   1 +\n 5 files changed, 327 insertions(+), 18 deletions(-)",
    "diff": "diff --git a/arch/arm/cpu/armv8/fsl-layerscape/fsl_lsch3_serdes.c b/arch/arm/cpu/armv8/fsl-layerscape/fsl_lsch3_serdes.c\nindex 179cac6..39f2cdf 100644\n--- a/arch/arm/cpu/armv8/fsl-layerscape/fsl_lsch3_serdes.c\n+++ b/arch/arm/cpu/armv8/fsl-layerscape/fsl_lsch3_serdes.c\n@@ -158,6 +158,280 @@ void serdes_init(u32 sd, u32 sd_addr, u32 rcwsr, u32 sd_prctl_mask,\n \tserdes_prtcl_map[NONE] = 1;\n }\n \n+__weak int get_serdes_volt(void)\n+{\n+\treturn -1;\n+}\n+\n+__weak int set_serdes_volt(int svdd)\n+{\n+\treturn -1;\n+}\n+\n+int setup_serdes_volt(u32 svdd)\n+{\n+\tstruct ccsr_gur __iomem *gur = (void *)(CONFIG_SYS_FSL_GUTS_ADDR);\n+\tstruct ccsr_serdes __iomem *serdes1_base;\n+\tu32 cfg_rcwsrds1 = gur_in32(&gur->rcwsr[FSL_CHASSIS3_SRDS1_REGSR - 1]);\n+#ifdef CONFIG_SYS_FSL_SRDS_2\n+\tstruct ccsr_serdes __iomem *serdes2_base;\n+\tu32 cfg_rcwsrds2 = gur_in32(&gur->rcwsr[FSL_CHASSIS3_SRDS2_REGSR - 1]);\n+#endif\n+\tu32 cfg_tmp, reg = 0;\n+\tint svdd_cur, svdd_tar;\n+\tint ret = 1;\n+\tint i;\n+\n+\t/* Only support switch SVDD to 900mV */\n+\tif (svdd != 900)\n+\t\treturn -1;\n+\n+\t/* Scale up to the LTC resolution is 1/4096V */\n+\tsvdd = (svdd * 4096) / 1000;\n+\n+\tsvdd_tar = svdd;\n+\tsvdd_cur = get_serdes_volt();\n+\tif (svdd_cur < 0)\n+\t\treturn -EINVAL;\n+\n+\tdebug(\"%s: current SVDD: %x; target SVDD: %x\\n\",\n+\t      __func__, svdd_cur, svdd_tar);\n+\tif (svdd_cur == svdd_tar)\n+\t\treturn 0;\n+\n+\tserdes1_base = (void *)CONFIG_SYS_FSL_LSCH3_SERDES_ADDR;\n+#ifdef CONFIG_SYS_FSL_SRDS_2\n+\tserdes2_base =  (void *)(CONFIG_SYS_FSL_LSCH3_SERDES_ADDR + 0x10000);\n+#endif\n+\n+\t/* Put the all enabled lanes in reset */\n+#ifdef CONFIG_SYS_FSL_SRDS_1\n+\tcfg_tmp = cfg_rcwsrds1 & FSL_CHASSIS3_SRDS1_PRTCL_MASK;\n+\tcfg_tmp >>= FSL_CHASSIS3_SRDS1_PRTCL_SHIFT;\n+\n+\tfor (i = 0; i < 4 && cfg_tmp & (0xf << (3 - i)); i++) {\n+\t\treg = in_le32(&serdes1_base->lane[i].gcr0);\n+\t\treg &= 0xFF9FFFFF;\n+\t\tout_le32(&serdes1_base->lane[i].gcr0, reg);\n+\t}\n+#endif\n+\n+#ifdef CONFIG_SYS_FSL_SRDS_2\n+\tcfg_tmp = cfg_rcwsrds2 & FSL_CHASSIS3_SRDS2_PRTCL_MASK;\n+\tcfg_tmp >>= FSL_CHASSIS3_SRDS2_PRTCL_SHIFT;\n+\n+\tfor (i = 0; i < 4 && cfg_tmp & (0xf << (3 - i)); i++) {\n+\t\treg = in_le32(&serdes2_base->lane[i].gcr0);\n+\t\treg &= 0xFF9FFFFF;\n+\t\tout_le32(&serdes2_base->lane[i].gcr0, reg);\n+\t}\n+#endif\n+\n+\t/* Put the all enabled PLL in reset */\n+#ifdef CONFIG_SYS_FSL_SRDS_1\n+\tcfg_tmp = cfg_rcwsrds1 & 0x3;\n+\tfor (i = 0; i < 2 && !(cfg_tmp & (0x1 << (1 - i))); i++) {\n+\t\treg = in_le32(&serdes1_base->bank[i].rstctl);\n+\t\treg &= 0xFFFFFFBF;\n+\t\treg |= 0x10000000;\n+\t\tout_le32(&serdes1_base->bank[i].rstctl, reg);\n+\t}\n+\tudelay(1);\n+\n+\treg = in_le32(&serdes1_base->bank[i].rstctl);\n+\treg &= 0xFFFFFF1F;\n+\tout_le32(&serdes1_base->bank[i].rstctl, reg);\n+#endif\n+\n+#ifdef CONFIG_SYS_FSL_SRDS_2\n+\tcfg_tmp = cfg_rcwsrds1 & 0xC;\n+\tcfg_tmp >>= 2;\n+\tfor (i = 0; i < 2 && !(cfg_tmp & (0x1 << (1 - i))); i++) {\n+\t\treg = in_le32(&serdes2_base->bank[i].rstctl);\n+\t\treg &= 0xFFFFFFBF;\n+\t\treg |= 0x10000000;\n+\t\tout_le32(&serdes2_base->bank[i].rstctl, reg);\n+\t}\n+\tudelay(1);\n+\n+\treg = in_le32(&serdes2_base->bank[i].rstctl);\n+\treg &= 0xFFFFFF1F;\n+\tout_le32(&serdes2_base->bank[i].rstctl, reg);\n+#endif\n+\n+\t/* Put the Rx/Tx calibration into reset */\n+#ifdef CONFIG_SYS_FSL_SRDS_1\n+\treg = in_le32(&serdes1_base->srdstcalcr);\n+\treg &= 0xF7FFFFFF;\n+\tout_le32(&serdes1_base->srdstcalcr, reg);\n+\treg = in_le32(&serdes1_base->srdsrcalcr);\n+\treg &= 0xF7FFFFFF;\n+\tout_le32(&serdes1_base->srdsrcalcr, reg);\n+#endif\n+\n+#ifdef CONFIG_SYS_FSL_SRDS_2\n+\treg = in_le32(&serdes2_base->srdstcalcr);\n+\treg &= 0xF7FFFFFF;\n+\tout_le32(&serdes2_base->srdstcalcr, reg);\n+\treg = in_le32(&serdes2_base->srdsrcalcr);\n+\treg &= 0xF7FFFFFF;\n+\tout_le32(&serdes2_base->srdsrcalcr, reg);\n+#endif\n+\n+\tret = set_serdes_volt(svdd);\n+\tif (ret < 0) {\n+\t\tprintf(\"could not change SVDD\\n\");\n+\t\tret = -1;\n+\t}\n+\n+\t/* For each PLL that’s not disabled via RCW enable the SERDES */\n+#ifdef CONFIG_SYS_FSL_SRDS_1\n+\tcfg_tmp = cfg_rcwsrds1 & 0x3;\n+\tfor (i = 0; i < 2 && !(cfg_tmp & (0x1 << (1 - i))); i++) {\n+\t\treg = in_le32(&serdes1_base->bank[i].rstctl);\n+\t\treg |= 0x00000020;\n+\t\tout_le32(&serdes1_base->bank[i].rstctl, reg);\n+\t\tudelay(1);\n+\n+\t\treg = in_le32(&serdes1_base->bank[i].rstctl);\n+\t\treg |= 0x00000080;\n+\t\tout_le32(&serdes1_base->bank[i].rstctl, reg);\n+\t\tudelay(1);\n+\t\t/* Take the Rx/Tx calibration out of reset */\n+\t\tif (!(cfg_tmp == 0x3 && i == 1)) {\n+\t\t\tudelay(1);\n+\t\t\treg = in_le32(&serdes1_base->srdstcalcr);\n+\t\t\treg |= 0x08000000;\n+\t\t\tout_le32(&serdes1_base->srdstcalcr, reg);\n+\t\t\treg = in_le32(&serdes1_base->srdsrcalcr);\n+\t\t\treg |= 0x08000000;\n+\t\t\tout_le32(&serdes1_base->srdsrcalcr, reg);\n+\t\t}\n+\t\tudelay(1);\n+\t}\n+#endif\n+#ifdef CONFIG_SYS_FSL_SRDS_2\n+\tcfg_tmp = cfg_rcwsrds1 & 0xC;\n+\tcfg_tmp >>= 2;\n+\tfor (i = 0; i < 2 && !(cfg_tmp & (0x1 << (1 - i))); i++) {\n+\t\treg = in_le32(&serdes2_base->bank[i].rstctl);\n+\t\treg |= 0x00000020;\n+\t\tout_le32(&serdes2_base->bank[i].rstctl, reg);\n+\t\tudelay(1);\n+\n+\t\treg = in_le32(&serdes2_base->bank[i].rstctl);\n+\t\treg |= 0x00000080;\n+\t\tout_le32(&serdes2_base->bank[i].rstctl, reg);\n+\t\tudelay(1);\n+\n+\t\t/* Take the Rx/Tx calibration out of reset */\n+\t\tif (!(cfg_tmp == 0x3 && i == 1)) {\n+\t\t\tudelay(1);\n+\t\t\treg = in_le32(&serdes2_base->srdstcalcr);\n+\t\t\treg |= 0x08000000;\n+\t\t\tout_le32(&serdes2_base->srdstcalcr, reg);\n+\t\t\treg = in_le32(&serdes2_base->srdsrcalcr);\n+\t\t\treg |= 0x08000000;\n+\t\t\tout_le32(&serdes2_base->srdsrcalcr, reg);\n+\t\t}\n+\t\tudelay(1);\n+\t}\n+#endif\n+\n+\t/* Wait for at atleast 625us, ensure the PLLs being reset are locked */\n+\tudelay(800);\n+\n+#ifdef CONFIG_SYS_FSL_SRDS_1\n+\tcfg_tmp = cfg_rcwsrds1 & 0x3;\n+\tfor (i = 0; i < 2 && !(cfg_tmp & (0x1 << (1 - i))); i++) {\n+\t\t/* if the PLL is not locked, set RST_ERR */\n+\t\treg = in_le32(&serdes1_base->bank[i].pllcr0);\n+\t\tif (!((reg >> 23) & 0x1)) {\n+\t\t\treg = in_le32(&serdes1_base->bank[i].rstctl);\n+\t\t\treg |= 0x20000000;\n+\t\t\tout_le32(&serdes1_base->bank[i].rstctl, reg);\n+\t\t} else {\n+\t\t\tudelay(1);\n+\t\t\treg = in_le32(&serdes1_base->bank[i].rstctl);\n+\t\t\treg &= 0xFFFFFFEF;\n+\t\t\treg |= 0x00000040;\n+\t\t\tout_le32(&serdes1_base->bank[i].rstctl, reg);\n+\t\t\tudelay(1);\n+\t\t}\n+\t}\n+#endif\n+\n+#ifdef CONFIG_SYS_FSL_SRDS_2\n+\tcfg_tmp = cfg_rcwsrds1 & 0xC;\n+\tcfg_tmp >>= 2;\n+\n+\tfor (i = 0; i < 2 && !(cfg_tmp & (0x1 << (1 - i))); i++) {\n+\t\treg = in_le32(&serdes2_base->bank[i].pllcr0);\n+\t\tif (!((reg >> 23) & 0x1)) {\n+\t\t\treg = in_le32(&serdes2_base->bank[i].rstctl);\n+\t\t\treg |= 0x20000000;\n+\t\t\tout_le32(&serdes2_base->bank[i].rstctl, reg);\n+\t\t} else {\n+\t\t\tudelay(1);\n+\t\t\treg = in_le32(&serdes2_base->bank[i].rstctl);\n+\t\t\treg &= 0xFFFFFFEF;\n+\t\t\treg |= 0x00000040;\n+\t\t\tout_le32(&serdes2_base->bank[i].rstctl, reg);\n+\t\t\tudelay(1);\n+\t\t}\n+\t}\n+#endif\n+\t/* Take the all enabled lanes out of reset */\n+#ifdef CONFIG_SYS_FSL_SRDS_1\n+\tcfg_tmp = cfg_rcwsrds1 & FSL_CHASSIS3_SRDS1_PRTCL_MASK;\n+\tcfg_tmp >>= FSL_CHASSIS3_SRDS1_PRTCL_SHIFT;\n+\n+\tfor (i = 0; i < 4 && cfg_tmp & (0xf << (3 - i)); i++) {\n+\t\treg = in_le32(&serdes1_base->lane[i].gcr0);\n+\t\treg |= 0x00600000;\n+\t\tout_le32(&serdes1_base->lane[i].gcr0, reg);\n+\t}\n+#endif\n+#ifdef CONFIG_SYS_FSL_SRDS_2\n+\tcfg_tmp = cfg_rcwsrds2 & FSL_CHASSIS3_SRDS2_PRTCL_MASK;\n+\tcfg_tmp >>= FSL_CHASSIS3_SRDS2_PRTCL_SHIFT;\n+\n+\tfor (i = 0; i < 4 && cfg_tmp & (0xf << (3 - i)); i++) {\n+\t\treg = in_le32(&serdes2_base->lane[i].gcr0);\n+\t\treg |= 0x00600000;\n+\t\tout_le32(&serdes2_base->lane[i].gcr0, reg);\n+\t}\n+#endif\n+\n+\t/* For each PLL being reset, and achieved PLL lock set RST_DONE */\n+#ifdef CONFIG_SYS_FSL_SRDS_1\n+\tcfg_tmp = cfg_rcwsrds1 & 0x3;\n+\tfor (i = 0; i < 2; i++) {\n+\t\treg = in_le32(&serdes1_base->bank[i].pllcr0);\n+\t\tif (!(cfg_tmp & (0x1 << (1 - i))) && ((reg >> 23) & 0x1)) {\n+\t\t\treg = in_le32(&serdes1_base->bank[i].rstctl);\n+\t\t\treg |= 0x40000000;\n+\t\t\tout_le32(&serdes1_base->bank[i].rstctl, reg);\n+\t\t}\n+\t}\n+#endif\n+#ifdef CONFIG_SYS_FSL_SRDS_2\n+\tcfg_tmp = cfg_rcwsrds1 & 0xC;\n+\tcfg_tmp >>= 2;\n+\n+\tfor (i = 0; i < 2; i++) {\n+\t\treg = in_le32(&serdes2_base->bank[i].pllcr0);\n+\t\tif (!(cfg_tmp & (0x1 << (1 - i))) && ((reg >> 23) & 0x1)) {\n+\t\t\treg = in_le32(&serdes2_base->bank[i].rstctl);\n+\t\t\treg |= 0x40000000;\n+\t\t\tout_le32(&serdes2_base->bank[i].rstctl, reg);\n+\t\t}\n+\t}\n+#endif\n+\n+\treturn ret;\n+}\n+\n void fsl_serdes_init(void)\n {\n #if defined(CONFIG_FSL_MC_ENET) && !defined(CONFIG_SPL_BUILD)\ndiff --git a/arch/arm/cpu/armv8/fsl-layerscape/soc.c b/arch/arm/cpu/armv8/fsl-layerscape/soc.c\nindex 83e2871..4e96c7b 100644\n--- a/arch/arm/cpu/armv8/fsl-layerscape/soc.c\n+++ b/arch/arm/cpu/armv8/fsl-layerscape/soc.c\n@@ -404,23 +404,6 @@ static int setup_core_volt(u32 vdd)\n \treturn board_setup_core_volt(vdd);\n }\n \n-#ifdef CONFIG_SYS_FSL_DDR\n-static void ddr_enable_0v9_volt(bool en)\n-{\n-\tstruct ccsr_ddr __iomem *ddr = (void *)CONFIG_SYS_FSL_DDR_ADDR;\n-\tu32 tmp;\n-\n-\ttmp = ddr_in32(&ddr->ddr_cdr1);\n-\n-\tif (en)\n-\t\ttmp |= DDR_CDR1_V0PT9_EN;\n-\telse\n-\t\ttmp &= ~DDR_CDR1_V0PT9_EN;\n-\n-\tddr_out32(&ddr->ddr_cdr1, tmp);\n-}\n-#endif\n-\n int setup_chip_volt(void)\n {\n \tint vdd;\n@@ -485,6 +468,23 @@ void fsl_lsch2_early_init_f(void)\n }\n #endif\n \n+#ifdef CONFIG_SYS_FSL_DDR\n+void ddr_enable_0v9_volt(bool en)\n+{\n+\tstruct ccsr_ddr __iomem *ddr = (void *)CONFIG_SYS_FSL_DDR_ADDR;\n+\tu32 tmp;\n+\n+\ttmp = ddr_in32(&ddr->ddr_cdr1);\n+\n+\tif (en)\n+\t\ttmp |= DDR_CDR1_V0PT9_EN;\n+\telse\n+\t\ttmp &= ~DDR_CDR1_V0PT9_EN;\n+\n+\tddr_out32(&ddr->ddr_cdr1, tmp);\n+}\n+#endif\n+\n #ifdef CONFIG_QSPI_AHB_INIT\n /* Enable 4bytes address support and fast read */\n int qspi_ahb_init(void)\ndiff --git a/arch/arm/include/asm/arch-fsl-layerscape/fsl_serdes.h b/arch/arm/include/asm/arch-fsl-layerscape/fsl_serdes.h\nindex 12fd6b8..9becdf3 100644\n--- a/arch/arm/include/asm/arch-fsl-layerscape/fsl_serdes.h\n+++ b/arch/arm/include/asm/arch-fsl-layerscape/fsl_serdes.h\n@@ -164,6 +164,7 @@ void fsl_rgmii_init(void);\n #ifdef CONFIG_FSL_LSCH2\n const char *serdes_clock_to_string(u32 clock);\n int get_serdes_protocol(void);\n+#endif\n #ifdef CONFIG_SYS_HAS_SERDES\n /* Get the volt of SVDD in unit mV */\n int get_serdes_volt(void);\n@@ -172,6 +173,5 @@ int set_serdes_volt(int svdd);\n /* The target volt of SVDD in unit mV */\n int setup_serdes_volt(u32 svdd);\n #endif\n-#endif\n \n #endif /* __FSL_SERDES_H__ */\ndiff --git a/arch/arm/include/asm/arch-fsl-layerscape/immap_lsch3.h b/arch/arm/include/asm/arch-fsl-layerscape/immap_lsch3.h\nindex ffc5fa2..2706ea8 100644\n--- a/arch/arm/include/asm/arch-fsl-layerscape/immap_lsch3.h\n+++ b/arch/arm/include/asm/arch-fsl-layerscape/immap_lsch3.h\n@@ -370,5 +370,39 @@ struct ccsr_reset {\n \tu32 ip_rev2;\t\t\t/* 0xbfc */\n };\n \n+struct ccsr_serdes {\n+\tstruct {\n+\t\tu32     rstctl; /* Reset Control Register */\n+\t\tu32     pllcr0; /* PLL Control Register 0 */\n+\t\tu32     pllcr1; /* PLL Control Register 1 */\n+\t\tu32     pllcr2; /* PLL Control Register 2 */\n+\t\tu32     pllcr3; /* PLL Control Register 3 */\n+\t\tu32     pllcr4; /* PLL Control Register 4 */\n+\t\tu32     pllcr5; /* PLL Control Register 5 */\n+\t\tu8      res[0x20 - 0x1c];\n+\t} bank[2];\n+\tu8      res1[0x90 - 0x40];\n+\tu32     srdstcalcr;     /* TX Calibration Control */\n+\tu32     srdstcalcr1;    /* TX Calibration Control1 */\n+\tu8      res2[0xa0 - 0x98];\n+\tu32     srdsrcalcr;     /* RX Calibration Control */\n+\tu32     srdsrcalcr1;    /* RX Calibration Control1 */\n+\tu8      res3[0xb0 - 0xa8];\n+\tu32     srdsgr0;        /* General Register 0 */\n+\tu8      res4[0x800 - 0xb4];\n+\tstruct serdes_lane {\n+\t\tu32     gcr0;   /* General Control Register 0 */\n+\t\tu32     gcr1;   /* General Control Register 1 */\n+\t\tu32     gcr2;   /* General Control Register 2 */\n+\t\tu32     ssc0;   /* Speed Switch Control 0 */\n+\t\tu32     rec0;   /* Receive Equalization Control 0 */\n+\t\tu32     rec1;   /* Receive Equalization Control 1 */\n+\t\tu32     tec0;   /* Transmit Equalization Control 0 */\n+\t\tu32     ssc1;   /* Speed Switch Control 1 */\n+\t\tu8      res1[0x840 - 0x820];\n+\t} lane[8];\n+\tu8 res5[0x19fc - 0xa00];\n+};\n+\n #endif /*__ASSEMBLY__*/\n #endif /* __ARCH_FSL_LSCH3_IMMAP_H_ */\ndiff --git a/arch/arm/include/asm/arch-fsl-layerscape/soc.h b/arch/arm/include/asm/arch-fsl-layerscape/soc.h\nindex ea8aced..697f072 100644\n--- a/arch/arm/include/asm/arch-fsl-layerscape/soc.h\n+++ b/arch/arm/include/asm/arch-fsl-layerscape/soc.h\n@@ -121,6 +121,7 @@ int setup_chip_volt(void);\n /* Setup core vdd in unit mV */\n int board_setup_core_volt(u32 vdd);\n #endif\n+void ddr_enable_0v9_volt(bool en);\n \n void cpu_name(char *name);\n #ifdef CONFIG_SYS_FSL_ERRATUM_A009635\n",
    "prefixes": [
        "U-Boot",
        "v3",
        "1/7"
    ]
}