get:
Show a patch.

patch:
Update a patch.

put:
Update a patch.

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

{
    "id": 809532,
    "url": "http://patchwork.ozlabs.org/api/patches/809532/?format=api",
    "web_url": "http://patchwork.ozlabs.org/project/uboot/patch/1504506242-31430-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": "<1504506242-31430-2-git-send-email-rajesh.bhagat@nxp.com>",
    "list_archive_url": null,
    "date": "2017-09-04T06:23:56",
    "name": "[U-Boot,RESEND,v3,1/7] armv8: lsch3: Add serdes and DDR voltage setup",
    "commit_ref": null,
    "pull_url": null,
    "state": "changes-requested",
    "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/1504506242-31430-2-git-send-email-rajesh.bhagat@nxp.com/mbox/",
    "series": [
        {
            "id": 1314,
            "url": "http://patchwork.ozlabs.org/api/series/1314/?format=api",
            "web_url": "http://patchwork.ozlabs.org/project/uboot/list/?series=1314",
            "date": "2017-09-04T06:23:56",
            "name": "Add VID support for QDS and RDB platforms",
            "version": 3,
            "mbox": "http://patchwork.ozlabs.org/series/1314/mbox/"
        }
    ],
    "comments": "http://patchwork.ozlabs.org/api/patches/809532/comments/",
    "check": "pending",
    "checks": "http://patchwork.ozlabs.org/api/patches/809532/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 3xm0Dl5P1wz9s71\n\tfor <incoming@patchwork.ozlabs.org>;\n\tMon,  4 Sep 2017 16:24:23 +1000 (AEST)",
            "by lists.denx.de (Postfix, from userid 105)\n\tid 72CACC21EA8; Mon,  4 Sep 2017 06:24:22 +0000 (UTC)",
            "from lists.denx.de (localhost [IPv6:::1])\n\tby lists.denx.de (Postfix) with ESMTP id 0C9EEC21DDF;\n\tMon,  4 Sep 2017 06:24:17 +0000 (UTC)",
            "by lists.denx.de (Postfix, from userid 105)\n\tid B7ACEC21DD0; Mon,  4 Sep 2017 06:24:15 +0000 (UTC)",
            "from NAM03-DM3-obe.outbound.protection.outlook.com\n\t(mail-dm3nam03on0074.outbound.protection.outlook.com [104.47.41.74])\n\tby lists.denx.de (Postfix) with ESMTPS id 3977FC21DCE\n\tfor <u-boot@lists.denx.de>; Mon,  4 Sep 2017 06:24:14 +0000 (UTC)",
            "from DM5PR03CA0034.namprd03.prod.outlook.com (10.174.189.151) by\n\tCY4PR03MB3320.namprd03.prod.outlook.com (10.171.247.11) with\n\tMicrosoft SMTP Server (version=TLS1_2,\n\tcipher=TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384_P256) id\n\t15.20.13.10; Mon, 4 Sep 2017 06:24:12 +0000",
            "from BL2FFO11OLC004.protection.gbl (2a01:111:f400:7c09::168) by\n\tDM5PR03CA0034.outlook.office365.com (2603:10b6:4:3b::23) with\n\tMicrosoft SMTP Server (version=TLS1_2,\n\tcipher=TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384_P256) id\n\t15.20.13.10 via Frontend Transport; Mon, 4 Sep 2017 06:24:11 +0000",
            "from tx30smr01.am.freescale.net (192.88.168.50) by\n\tBL2FFO11OLC004.mail.protection.outlook.com (10.173.161.188) with\n\tMicrosoft\n\tSMTP Server (version=TLS1_0, cipher=TLS_RSA_WITH_AES_256_CBC_SHA) id\n\t15.1.1385.11 via Frontend Transport; Mon, 4 Sep 2017 06:24:11 +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\tv846O6lY020202; Sun, 3 Sep 2017 23:24:09 -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, 4 Sep 2017 11:53:56 +0530",
        "Message-ID": "<1504506242-31430-2-git-send-email-rajesh.bhagat@nxp.com>",
        "X-Mailer": "git-send-email 2.7.4",
        "In-Reply-To": "<1504506242-31430-1-git-send-email-rajesh.bhagat@nxp.com>",
        "References": "<1504506242-31430-1-git-send-email-rajesh.bhagat@nxp.com>",
        "MIME-Version": "1.0",
        "X-EOPAttributedMessage": "0",
        "X-Matching-Connectors": "131489798519906583;\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)(199003)(189002)(626005)(54906002)(189998001)(53936002)(4326008)(47776003)(110136004)(50986999)(105606002)(76176999)(104016004)(50466002)(2351001)(33646002)(106466001)(23676002)(6666003)(2950100002)(6916009)(36756003)(77096006)(50226002)(5820100001)(8676002)(8936002)(81166006)(81156014)(305945005)(575784001)(86362001)(2906002)(2870700001)(5660300001)(356003)(68736007)(85426001)(498600001)(8656003)(97736004)(217873001);\n\tDIR:OUT; SFP:1101; SCL:1; SRVR:CY4PR03MB3320;\n\tH:tx30smr01.am.freescale.net; \n\tFPR:; SPF:Fail; PTR:InfoDomainNonexistent; A:1; MX:1; LANG:en; ",
        "X-Microsoft-Exchange-Diagnostics": [
            "1; BL2FFO11OLC004;\n\t1:ZqqqJY9e/oyAmKruNB8tAnmPt5BoGCYWqwAyAw0gxpB4hzAtWecLbz1TEAokKJ3jUDifth7NdIi5SWShMWzQsjuQP15lbFvF2dOFPMPN/ab5QOXr2LhvOqSpqdsMbdR5",
            "1; CY4PR03MB3320;\n\t3:Rf3puQeShYeyxROdnDBdY2W+wulrdovRMgmDabUy+0b+RGD4gAliXzi+T1nX6tuGJgSvQPmliWoZd//eO9tOLY3mkK3MuBncWEcMazZIBG7DE4xPIBf8/enTlLtTN44//S4BdhMqHhnRm9qIsSz1xpOMeLD8rtUoBoxHu8gxWgsZ3qlSTdEobTYbEP6cWwtMyowPJ6Fuz+CSC0GS9DFUDtrEmfV7r6wvaakvdorWpj+QarcwzWy2lNJ/j+9MuYsUj51kjTdf9e/9j5PtuEcwBlR/bOcyNhRoBt8+qUaukalyTzDyw8x1Zf8RX6Q3JlJUQxWngHvYsc90+vNmaa+Yt+UP3oxlb7dC1gqITQI0P78=;\n\t25:Z+4HbEnyYnZuaUYPdiuFxrq+xznoK2azWNHBdWqYNm2wKGKqHsIusJpdAtfIcZAIYesj36XfvBLNvGnhg2UiVJSZYcqLb7Jwr104CzSypOvrK02d/tpxZ0Rm/SDIEhAbg6ybLOehjUeA886TrdbTKCv7Nmjw71WKImn/P22JkSe9jxygj+aS/sownC2zdgBN92KUT84hJxcyS3aYpTuxZy+sB+M4mnf/xmgha/mDVomyoCHXLuCZcui6fKIuyN5UklBEFlq4aA7MTDKwtDpIGS7oX0Pi5GGdTr0QLy1on1diZXn+sl+qVG60A/A5i3WRfUdV3wzz4fEL9oO5dS5Zpg==",
            "1; CY4PR03MB3320;\n\t31:erm4osYGtd2hleZA6PAZKEPWwiCzT0MhoiShpOYibkKfKomkXkVhlbT6WMu4JxTqFyDtLi/af5q1CTVsgPHNhLCBHgBYqMnWnkA1eSsKuZojNTkNWbDvtWX7OVPdGa1/0sV1K6PWY0ZJi1zDiTZrp/OUGLSTr3a1kFiG9rUk6pzArt77LeVNvcanjjXys+mO1+Cw79bqtml3PT2Hcqe87BSt5ZlKBfc7n/rVS5lH3RY=;\n\t4:Delrykg1sBSahjlsH/vVBUh15UybURw12xz80rbdvmL12NgsXy46fHQSXcl3LAp8Z6a0LIwnA036GUlF1eggw7rfN6ehmE7m376Dyu5h1Jywi48GhY+HhK5/6gQpo/SvVvG6YlXRaFYAgEcxzQ97jcF1vSZZgiMV2yJl8SdQMu/l1o8gKeyUgivtvK4qhBqL6PrcTn0THD+Cs/hEqovK7MZK/QKdVlbhQHortwbEsuzAU/wBy+xGvgc09i9SRlyk3Gp+fUWJ5o3/0m/yCvL3izoGQAUPPMrW+unJeHQ8HLY=",
            "=?utf-8?q?1=3BCY4PR03MB3320=3B23=3A7VR3?=\n\t=?utf-8?q?vbgm3UfbcygTrXf9tvWMTFmYwoiwIYlJ2uIyNlnxczMDohCCfqb5BOYy?=\n\t=?utf-8?q?OR8LlbPYT6nP9+ZeygcNkfpYPXTe8ozZfuygDOZ1/HY8BfdXDeT6JVkF?=\n\t=?utf-8?q?K1e6T65A/MKntYAL7TdANnHZunBJEqxu7wEQYotnW6SZcZVSUqj+Zjtt?=\n\t=?utf-8?q?fEAUJVHKJWYNdklGP97Np1KcSNVvzGPAcjWcH7vrlsmSqdHb5t3pnAoy?=\n\t=?utf-8?q?tO1TAERnu6wLT14j/mP2izyiHXV0dGV/8qZ+IC+YGox3EZjE140UdEsB?=\n\t=?utf-8?q?TGorF/mMBhhFAx8J7snDewy4QK5p2SLkjPnFyuoplY8QrZ3HffPodh7j?=\n\t=?utf-8?q?0vLePOmrWAulSMD3ISyyH2bz4z+wI7AA3vnFZ4uGKgvbFq8rvxx0K/tZ?=\n\t=?utf-8?q?zi+BS7Nf+a/33Kxrc+s5TegNjP3zEgCFgVZQ5n5My6QsKP06rTkMtIPf?=\n\t=?utf-8?q?Z8ql9SU5e213Q16cj208NpUp7TlYxkR3FzsFehcUTE/8TqMBWm/cATN5?=\n\t=?utf-8?q?sv8EwBZ3BJaug1BDJ3dTUhnml3Im13oER66rX8oZ9L3plPTRbXAB1Qq0?=\n\t=?utf-8?q?uV1alt99HvxH6yGn6PcXZCqj+5gqzmLRdYl7tjcPEcvydT1P8y3bmzwu?=\n\t=?utf-8?q?K32eC9XvFdhAGF+sxVV/n6k5HO6+mDV8eLZSfAxrIM+qIfBHyWM6fntK?=\n\t=?utf-8?q?SDcvsgK2ybK7iK5h0jFaRP8KtW3yKIOhMhstUWq/r2eVwJ3TVrkpBVL4?=\n\t=?utf-8?q?E5uaa459SNeNa4/hD1lK8XF8kignbQQOu/W+AREt1/RheLVjuR5unQLw?=\n\t=?utf-8?q?ab9u4R4fhOUTtqGWU9wJVKCwXkoFcSmjUs6fObBsbnPiiEOsGc2gXcRe?=\n\t=?utf-8?q?LJOpXKjGPh6EWyAG5ZFdT6JzCOVFAKMm5FkJ6LSbyu42fTmsDTJ4X43v?=\n\t=?utf-8?q?q7PtP48hQMAoB+QRh5R3EKwvexOmGrKpy5jP9NhwoyU8LxbM5wjh0yFn?=\n\t=?utf-8?q?HcmWCFGp4Tvr8ttQCcrUKYAKszR1XpEF/NoNEV8P4+RnOwJy3Ay6nJbA?=\n\t=?utf-8?q?0q4xwUA6EV7Csc2Is6rs8xYpzG27z/lLEtBO8pCop5Uesj7zYktktP9b?=\n\t=?utf-8?q?K0WuFjuPxRos6xqHuCWJnP6QBYerJXRULGfuEo8xqdTQX18SjPZDLuUS?=\n\t=?utf-8?q?GFDGfP8UI0KlEFaUThxFTfd3idWfd96uvAiV25jpvUgx7npugDX/KWK4?=\n\t=?utf-8?q?k/Mji0saDndFC9HyrNpCc+rsOqaCqiaFBCSs?=",
            "1; CY4PR03MB3320;\n\t6:UPsxX2gjDxulECaPiQjxYGCfhg3AjBttIZ6Eyy86kxFifYphqyMrs+xOZpBlUHSi3hS38mh6044ha7RyhyhD2MChSjAV5pZUpS6HFWKMbdTdI0EMRI1H96tt2oUQ1YEobjrlUSTCcxbsZ5CquHrp4k5zcYnxgiQs4gPNGC2QiO2g3Bx79ho3vPtAKqyRgdC0VK6MDjGjYRoLdnXpsFinoRrjG5n2wKBM8F6sSByJVB7pv+eOnqTVal198HYUWVLI34pwKlrD+uDaazDgRACBHd/JIJMDlvSzXMvXJaEwg3cNUnBSdW+cJKtdocXwVYArFA5dV55C7hkDRtQA9qwCxg==;\n\t5:YQRJ3W+L/Hog0UuIYXC4bnf6NVpo1kKDSwM42xzjP/+gn1WooF8WKp15zTyy3qyNOaXHK462i14tPn32LyqUEkL/AFDKdhEfr84nUV56CeY8k2PzFT4nM3NyysWgG3CnV+O7tzV7KM/J/sQcsE4fJA==;\n\t24:kQiCv282aBNicUqUSBJAeO7Kk5uL+RbwKXlg9HFTDzzbu3qNHwzV7lMZ3ZCO+yZb6rBeJi4I1zoxNFEvcj6gFaUnzw8YzN9wCPdoNL/7VVk=;\n\t7:PnDjcNkClKJVi2bQH7tutp2OWlv0Tt9jVIWWd0Qwj6UB/qWI8qHCbOBa1Az9vWUA60CZVuZEuV0mQq8AOS0JUZq9+yfqZOm8SUuj/JAyILRWShAPyv3WYPkEj7oRaps3tVRxLWqpJos9QJ8JM5soY1khfisk2BYVC01MF2gF/xbyR5ihbZNDNfrnS191PGzgQ5ODBVDE2WWBGSwahlizLq5a0g1Y3jgIHGUf7g60Xhk="
        ],
        "X-MS-PublicTrafficType": "Email",
        "X-MS-Office365-Filtering-Correlation-Id": "18b40ea0-4257-4ede-7fba-08d4f35d8ed2",
        "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:CY4PR03MB3320; ",
        "X-MS-TrafficTypeDiagnostic": "CY4PR03MB3320:",
        "X-Exchange-Antispam-Report-Test": "UriScan:(185117386973197);",
        "X-Microsoft-Antispam-PRVS": "<CY4PR03MB3320E036182E38D03186B3F5E3910@CY4PR03MB3320.namprd03.prod.outlook.com>",
        "X-Exchange-Antispam-Report-CFA-Test": "BCL:0; PCL:0;\n\tRULEID:(100000700101)(100105000095)(100000701101)(100105300095)(100000702101)(100105100095)(6095135)(2401047)(8121501046)(5005006)(10201501046)(93006095)(93001095)(3002001)(100000703101)(100105400095)(6055026)(6096035)(20161123559100)(201703131430075)(201703131433075)(201703131448075)(201703161259150)(201703151042153)(20161123563025)(20161123565025)(20161123561025)(20161123556025)(201708071742011)(100000704101)(100105200095)(100000705101)(100105500095);\n\tSRVR:CY4PR03MB3320; BCL:0; PCL:0;\n\tRULEID:(100000800101)(100110000095)(100000801101)(100110300095)(100000802101)(100110100095)(100000803101)(100110400095)(400006)(100000804101)(100110200095)(100000805101)(100110500095);\n\tSRVR:CY4PR03MB3320; ",
        "X-Forefront-PRVS": "0420213CCD",
        "SpamDiagnosticOutput": "1:99",
        "SpamDiagnosticMetadata": "NSPM",
        "X-MS-Exchange-CrossTenant-OriginalArrivalTime": "04 Sep 2017 06:24:11.8190\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": "CY4PR03MB3320",
        "Subject": "[U-Boot] [RESEND PATCH v3 1/7] armv8: lsch3: Add serdes and DDR\n\tvoltage setup",
        "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",
        "RESEND",
        "v3",
        "1/7"
    ]
}