From patchwork Thu Jan 19 05:42:27 2017 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Priyanka Jain X-Patchwork-Id: 716958 X-Patchwork-Delegate: yorksun@freescale.com Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Received: from theia.denx.de (theia.denx.de [85.214.87.163]) by ozlabs.org (Postfix) with ESMTP id 3v3tW93t38z9sxN for ; Thu, 19 Jan 2017 17:01:09 +1100 (AEDT) Received: from localhost (localhost [127.0.0.1]) by theia.denx.de (Postfix) with ESMTP id 3380CB387C; Thu, 19 Jan 2017 07:01:07 +0100 (CET) Received: from theia.denx.de ([127.0.0.1]) by localhost (theia.denx.de [127.0.0.1]) (amavisd-new, port 10024) with ESMTP id u4SQlPLhsofe; Thu, 19 Jan 2017 07:01:06 +0100 (CET) Received: from theia.denx.de (localhost [127.0.0.1]) by theia.denx.de (Postfix) with ESMTP id A54B5B385B; Thu, 19 Jan 2017 07:00:42 +0100 (CET) Received: from localhost (localhost [127.0.0.1]) by theia.denx.de (Postfix) with ESMTP id BE2D8B384A for ; Thu, 19 Jan 2017 06:58:45 +0100 (CET) Received: from theia.denx.de ([127.0.0.1]) by localhost (theia.denx.de [127.0.0.1]) (amavisd-new, port 10024) with ESMTP id wBAe7HxTeZGg for ; Thu, 19 Jan 2017 06:58:42 +0100 (CET) X-Greylist: delayed 933 seconds by postgrey-1.34 at theia; Thu, 19 Jan 2017 06:58:32 CET X-policyd-weight: NOT_IN_SBL_XBL_SPAMHAUS=-1.5 NOT_IN_SPAMCOP=-1.5 NOT_IN_BL_NJABL=-1.5 (only DNSBL check requested) Received: from NAM03-BY2-obe.outbound.protection.outlook.com (mail-by2nam03on0040.outbound.protection.outlook.com [104.47.42.40]) by theia.denx.de (Postfix) with ESMTPS id 07515A75C9 for ; Thu, 19 Jan 2017 06:58:32 +0100 (CET) Received: from BN6PR03CA0030.namprd03.prod.outlook.com (10.175.124.16) by DM2PR0301MB0751.namprd03.prod.outlook.com (10.160.97.147) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384_P384) id 15.1.860.13; Thu, 19 Jan 2017 05:43:03 +0000 Received: from BY2FFO11FD014.protection.gbl (2a01:111:f400:7c0c::145) by BN6PR03CA0030.outlook.office365.com (2603:10b6:404:10c::16) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384_P384) id 15.1.860.13 via Frontend Transport; Thu, 19 Jan 2017 05:43:03 +0000 Authentication-Results: spf=fail (sender IP is 192.88.168.50) smtp.mailfrom=nxp.com; nxp.com; dkim=none (message not signed) header.d=none; nxp.com; dmarc=fail action=none header.from=nxp.com; nxp.com; dkim=none (message not signed) header.d=none; Received-SPF: Fail (protection.outlook.com: domain of nxp.com does not designate 192.88.168.50 as permitted sender) receiver=protection.outlook.com; client-ip=192.88.168.50; helo=tx30smr01.am.freescale.net; Received: from tx30smr01.am.freescale.net (192.88.168.50) by BY2FFO11FD014.mail.protection.outlook.com (10.1.14.76) with Microsoft SMTP Server (version=TLS1_0, cipher=TLS_RSA_WITH_AES_256_CBC_SHA) id 15.1.803.8 via Frontend Transport; Thu, 19 Jan 2017 05:43:02 +0000 Received: from b32167-VirtualBox.am.freescale.net ([10.214.249.108]) by tx30smr01.am.freescale.net (8.14.3/8.14.0) with ESMTP id v0J5gdIx031218; Wed, 18 Jan 2017 22:42:59 -0700 From: Priyanka Jain To: , Date: Thu, 19 Jan 2017 11:12:27 +0530 Message-ID: <1484804548-19405-3-git-send-email-priyanka.jain@nxp.com> X-Mailer: git-send-email 1.7.4.1 In-Reply-To: <1484804548-19405-1-git-send-email-priyanka.jain@nxp.com> References: <1484804548-19405-1-git-send-email-priyanka.jain@nxp.com> X-EOPAttributedMessage: 0 X-Matching-Connectors: 131292781826216317; (91ab9b29-cfa4-454e-5278-08d120cd25b8); () X-Forefront-Antispam-Report: CIP:192.88.168.50; IPV:NLI; CTRY:US; EFV:NLI; SFV:NSPM; SFS:(10009020)(6009001)(7916002)(336005)(39380400002)(39860400002)(39400400002)(39850400002)(39410400002)(39840400002)(39450400003)(2980300002)(1109001)(1110001)(339900001)(199003)(189002)(86362001)(5660300001)(4720700003)(6636002)(305945005)(4326007)(33646002)(6666003)(2950100002)(106466001)(2906002)(626004)(356003)(5003940100001)(92566002)(104016004)(85426001)(50226002)(47776003)(8676002)(81166006)(81156014)(50986999)(76176999)(97736004)(5001770100001)(8936002)(77096006)(36756003)(38730400001)(105606002)(8656002)(54906002)(189998001)(53936002)(68736007)(48376002)(50466002); DIR:OUT; SFP:1101; SCL:1; SRVR:DM2PR0301MB0751; H:tx30smr01.am.freescale.net; FPR:; SPF:Fail; PTR:InfoDomainNonexistent; A:1; MX:1; LANG:en; X-Microsoft-Exchange-Diagnostics: 1; BY2FFO11FD014; 1:+mAkz6VW0mCqY9xeGuhV/AMXPDKr8ao/kUVfB/TFVnHWdYhGhKrZhCGPF2ENI9E9fda2ipJ39lUrxC+gk/PS1AgrlZClr5wtkOMRXYcbYIowM23QkXq6uET7FaICFo/QP3QVb0sWB8/AbaKr7+1uSD9pfhhqg2mnyT0Meqy6UKNrqB4Zry3j8rzSfVv4TLr6nmZeMfd0j1CBKAwn/YnhVdn3bla50M91dG1pypZW1MmUcdPm06wrr+oXbBwb18V2FP95rbERp6lpOqUtGlVKsVDvqy99TlSlEBN7wBvrND7rJYYYtp75C9sBGS05lVqXFhpWZ6TOrXfkcDmign3vgD+C2dSAb/vYC1Og2tMrwV8o6xsyT9Js2kjmZC56XuMqE/g1XXF2ZTRabmIjMtYCHmPInsYWUw+zo9JpfVMCUFw78c4sAw7fHsi5ddbNCT/36dFkFrxwDzN8Fv8EDG3G1g10aThjUrCGxR61E827mUZAGLYtpCyuUWZu2cU1cj86p3W2t+ejGHDLi0o7gfJ+cahQh17zzRzkEciJn8l/KYJhM+VH1sIWoYmke1aUuF2MVHbzr4MSfzCCWpC44Axv5AbG9OXSiDzu1NUa0ofwkIHAcU2V7ce0n4MZEYjkfu4HQuNP+ep39MEsCMWB4hPQUzbtRdUwjPWt84mwWmxEuZPpnyTnn3WFYBJOX5Vw3ebXepuTFz37IHmMx86O/Z7iyQ== MIME-Version: 1.0 X-MS-Office365-Filtering-Correlation-Id: bed6e9e7-f849-486f-068d-08d4402e08b7 X-Microsoft-Antispam: UriScan:; BCL:0; PCL:0; RULEID:(22001); SRVR:DM2PR0301MB0751; X-Microsoft-Exchange-Diagnostics: 1; DM2PR0301MB0751; 3:QEEud5s34ZOLAqwBUCdJoxtnWWDyinq/gLYKqaoqr8aX4Sek/AVLBbgEBNektsB7uP0QCp4FsisddjVvDPkC56FAZNWkpeV8UWm4cB5AmKplx8ubrSNDqyqyhEp4OH3kEZYoj0jd8VJwqNRUkf2mh5EEAbXqEf8hNRa6upAex6bIr616awrfzk1FJfW4+WXBFVxD+Eb1HkaBT47vLLz/geQgwOeD06TSd3o8Yp7DtqposN9e3qJaR/ehUXjnaf1Lc+U6XZ6qbcY8tGLE7ZIUlr+ZF9v90YnMgmLjR/7bGA+loEA7dBnxT3X+6+edWEbXMJDD/dFbRfC7IpXYo1Mj76AuRlk11f93tOk6RV4WRw0zrOEepS9j7W6IJoNQzM6G X-Microsoft-Exchange-Diagnostics: 1; DM2PR0301MB0751; 25:sz+RUuLk22wP4lhRMvyxqbGViBVcyA+V6xHXfDiaueg5Q2qX1DkmsQXIohajU1Pmn/GUb/tfPEM8MXg+Z4+wSXqNPkG2t6lGUmigAmlOnkHGGe/LfdBlCC61bEjF5CTW1/BaTaxzxQdFVlQ0y8YwUmZP/KTaoHlBrIay9946Mhds/pFrMakHD6DqIGqjmx886Uu8dbYQCMn8ysYmiYK9FBJ3Nid7mrL8AJCipBWdATuvXNkdIZcx6g0gnA3tWCAtabM02oGuNJq7vjXf2P6TtGpSVp/AfG6XSkSgyj7bWDYzBmua55ijcHbp7m9l430r/DAZpLJklof+O1gGg91lrPzKoqXtjAlfQU6w8M3c78KxmPJsJhe38yfDWLS/NT23f3p+EM9HkbUHZ3e9+PAZSPF44xCUUyp7VPwGekRPhvyvR3ICP40iDq4uhs51udKO5oi8X54YGlwxENo2av4ECMJznjOqvHSXjTp/flN3S72mrd8Dvq5UOOYCb4y0d7vjwWW/2ebyAjMB1kDUsZACVcTVMFy0HdlE9ImjwgUJt7xSqULhNo7CpQZT99ragaFLsJVvu1a5yKJ1S9TaIQIfdox4nyJv4cXuqBpz3KIP+l+vXdonlYL2wMTRC4ZViE/lGTuk1OaCmpLNMezuYUTsMmYUzcuEi+rBqlPj929QUdZezilK62VD7Hp507R6E747XdM/S9l2WbUgNUW4ObbAj2lRFuEd6Y4U/RrvW7OemELIwpkXsdsVc26StEmnycuj X-Microsoft-Exchange-Diagnostics: 1; DM2PR0301MB0751; 31:764oxQlUxCFiwIx6TtaKULo4QrLB2JpkqLmEwTQ//+fdo9ecFNNzOQv/ZJTqF7Tt6VBr7541+HyxX9qfhMbaEA5cquRWFKbjBl+is74FWmkKXUpKWsNNUVCiTi9Wy0GFNJHKqwE4MEa33u7Zqr9Y3Quo/jerVSRz4vAIhWmeqRIthN5MXKk0wVafK54yGhk+nGkU8uokj4PhwFiY1SP+UbmMabfqXeNGO5ysDImYn7Bx8iF+ZTfaVij4pXflTGt82MWFpuOjdT4n4yCpPYTjBToLwNnO9+Spzg3pIcGJxRM= X-Microsoft-Antispam-PRVS: X-Exchange-Antispam-Report-Test: UriScan:(185117386973197); X-Exchange-Antispam-Report-CFA-Test: BCL:0; PCL:0; RULEID:(6095060)(601004)(2401047)(8121501046)(5005006)(13018025)(13015025)(13017025)(13023025)(13024025)(10201501046)(3002001)(6055026)(6096035)(20161123559025)(20161123561025)(20161123556025)(20161123563025)(20161123565025); SRVR:DM2PR0301MB0751; BCL:0; PCL:0; RULEID:(400006); SRVR:DM2PR0301MB0751; X-Microsoft-Exchange-Diagnostics: 1; DM2PR0301MB0751; 4:WN+8ZmwQrQ1Gz7x8/jdQe+Q1oLDNHDSmxo/lnT/v9eJVIcEN6sK0/bGe8M+xWuirIOtzZmWx8DglJV8RCsCMKL75PFGzg00i9yU+wWAJNmalLL4WQlvU+kKJSiV73mUU+6pVADVR/jwqTlbIFyUqczHNV0w+BUXhA6bBxH5J0lTQ5XVxiCFqbVS74xTFzuykSAA6RXkEDgwLWO0/NInkzZVK2kko+AXJpC5P/aOwk8R96/14oRaINW7Hgl/OiK4/O0zxEA2cdHYJ3aERA+hA7hj/ebPkVLaoV2x5x0mHRmLVfCMgIKfwqwTrMzzVZ37ovqKmFqvYIGngwxDgoek5EzwxdWT3VGZs6JEG2gEl5NwwegyTlWkZY6/ZMGgwZjMiEd/xlVTXLdCXc1B1U+ZzsrmfXy3qwJGwEzo58ItPbs/Z+BoesSwRWoI3YL465dcc0n7emAez+5LxUkSk9PzCK4N5rH4m2mSNS2jWpOgFzvPFyNw8qsOdJRPTuvuag0yv2zh58wbqFLgxE8GiC7H4zo2y/Iml32LuB0YLJpH/dgNBGRbwan5zYht83BbZGjwywJcN/kqnc3U24sRsNMdM+fbS8rh6sQwWYiUVkPDNOoLycx2/pltWKymNsaeyhucOVvw/1mAWlZowIazBro3pZAlCYTeBO5R4kYvOxq5zEKbezW/eVAdBzlFl9aeqm3F707w4+r9yNebGcp5Kz/wy+nTXhaXgiPXu8ouO2wIK/yoZwiHHqVVnz5viINoPIIcj X-Forefront-PRVS: 0192E812EC X-Microsoft-Exchange-Diagnostics: =?us-ascii?Q?1; DM2PR0301MB0751; 23:dJNxAwuuzQSxU1EvywfhfoTJ0J8XiL74DeLq+40?= =?us-ascii?Q?ddMwMo/4VInl1J1Jdu0KUYY08mf9PG2mYUg0tGVOA+h018RzrptyohTJkhvN?= =?us-ascii?Q?+jA6ZqSbIy8ZgsUyvqOx7FiG54OU/YmIAla/W8xpGq73KXKuIMPF5F4DZXhd?= =?us-ascii?Q?jS00ulcEiu6LOF8i5nAYvH6Kp1C8IizG0ujgw9nWQqA9GIVXTU2bbHrlEEqt?= =?us-ascii?Q?PIbgrHCZWKq2cXcDFLeaLXLtl7kqUgjKjU+ud5S9G8uKYtCNrTlVPUJ+pnOd?= =?us-ascii?Q?ZrpxVO2yeALO71pAj63DSFp8Y7/ND7yAaAZl3lj1PK5PTRUPzAWO0s2g/Opn?= =?us-ascii?Q?ssWR8f6EMgG4MN+gKaWxHmGFDor+Tg9LPwQVFxNyOBSZlXGQbQvmwnah/+YX?= =?us-ascii?Q?3U2+1KcB4oZehuVsB9/bmmL0gHwSCkOtQiz9yKQ2mQuNgILyN9Y5/AFaJjX1?= =?us-ascii?Q?f//1sCo90qRC7LHKPeADGCM28NIJWXKoM6aE8ZFWY5Ik9Z5/jk5P0yv3DzLM?= =?us-ascii?Q?hgMaim2hoDhmM930U2KJ4z5IQXZRvPdcveke9cmZZqbSFcyFpdBmKDRDdLqb?= =?us-ascii?Q?V0TVKrotC8cfTwWjY1yYfISM6Z44/zK3ChwnHtn7V7Y66gUpsbt9HIKBJ4RZ?= =?us-ascii?Q?nKS8RwsVXuWxuZ2GA9Ttu8FWq66XyZHbxurSHiWpXuBKt+cK3e/Bhl+Cgt9/?= =?us-ascii?Q?CXNCUM2WvSjuEgo8wFOp+QQDv/1OxQvjWehhWsUjAg7lKE+ymzn7sOXQC2jd?= =?us-ascii?Q?XFahngX1G8rXAmmxZOkD14zxkJvt7wa6XprpX/iUGIj/4jiRYKQwAZdx9UWP?= =?us-ascii?Q?4Qt6c7YBMbZFn4GTjVaxKQLcChD5Ogi+LXd8bw8ovp3B4zO/dMZPuByIEX+O?= =?us-ascii?Q?Q3V4+95QIKktFUfWxhVmeKFJcEfZ57UfA9nicTzEaNEcJbsfUBr33fT97CSO?= =?us-ascii?Q?nJLmT+pkREnMKJLzO/6unRXVE/SQjKZIXKAkD+ZAh8w4HnOxzpRKuPmrEhP3?= =?us-ascii?Q?LPzZ7FpNfWGQ3Zn0+ybhn61ZDxL771/T+II3te5G0Ubn6HMgq7cckf8NgCzZ?= =?us-ascii?Q?YbZsl91nMq4lhm6agUhOVOR89hDTWOuvC+2mAoP4+/jYyCsx/+t5RtMxZv1t?= =?us-ascii?Q?3WVuAkIOguUDJJ8Xz0N6q24jNu7n8wBYuNoK5+BvhYkuzLxzpQ1D7LlKBsDv?= =?us-ascii?Q?93/pe+mWdslJFSy4Gbni+1EJzGW/iMT0BTlUp47zHtOpuge3y+hHLqxKfQuc?= =?us-ascii?Q?EpOCu/vE+JEpIscbjUQjxx0HVyl0hXH5u7ulm/364P1TlE+P/rHqfi/Fo6Xi?= =?us-ascii?Q?P0rcrnJgS0frJvD7TVtc/4vgIFROPZbXoGaUm9zWc5Nmh?= X-Microsoft-Exchange-Diagnostics: 1; DM2PR0301MB0751; 6:hn55rUD5dnrJIQNaqppOmjeCdg+L4gShBCbm5oyWW+08+wmMFVpCRTGdKBG1smFQMWjrtaunydQA8y/4aLJfB/+P5Rv4kh2pYGzis2TORkOEbhU0rBO+FfYDbVHWiv/xAqo2OS4jUVB+1t0Y19+zLoDXNMpl9gVaegq9GJjdQZwzoF6RySL1+3iUVufIiiuIcRoPQJir8z+ICUj/JdomLdo14aobDecJm8hg0jw9ZB+UrMnDtHZvMDtRiKJcjjtaGtL3UW9gXmlXekcJ6fzB+R0W5GK/kr9BPx20j2BVq2363rqbJsKX9hB+6T4JSUs2ZbD+iQaGTJd8KGKq+/7BrjuYKDmsTEeChiWQZoo46SnhFkW4M+9+2xNJZuZdpEDxHS97JqzDKFfVuGhJuRctGGeo+4SOHK81FHIPYuZf+9lhVnkvlk1K6B3CvUgotZ3t; 5:GTSTZgQsceBDgu5EAQbd6YSt3pB5QMtf36/2qK58AqLiRPSAsbEtOwusDPzzgXN+C46z8XO8pg7MgTCbmnk7jP+oKjimcc9RuNdjKlYgz7K7EJAFOSSOkC4774Vt9B8WEBDaaYAz6Swhxd3yCJItSnc/i0i2Pj7J2V9TAGsqIpm/dluM/DlQ0g5kCW9GmBXH; 24:geOgsZRXFTezyiC+Dmp0czDdmmOdJvvA9w+3/O6ekNqkXBegTXbdpMfkA4LgnkStTNz/ue1i/7EU+sRBg4OWuzeS7h5CZnbttbi1/0v0Bn8= SpamDiagnosticOutput: 1:99 SpamDiagnosticMetadata: NSPM X-Microsoft-Exchange-Diagnostics: 1; DM2PR0301MB0751; 7:qAxr1gv8NxqZMkq53fpyI5ROYacq15kTfoVqgE6xFjwh145Lhl30r4a/ePzCRgtspTKVMFJ/Zze1FxPW+cJENzV7XcsIJqr0tbZjXAEfGktSzi02jzyJ0ETLGInyMKN4sh7bvNMw9FA6SE65IGrQoERSpU7GKmwQTQZ1m6JfGc3n3gMtcyDJ2Apb9iHGwdsNyGi+9S5xL496AScWzNWLOZ5qUJzNTuW5lVRQn5qvaukRXgGJwpRAo0WA7PfzHDB9YtgK28ra0HIS1bOzKEQhrU5x7i8xTvF//WhJ0EkcYD0HIYBVvzi/wv+mRJZcbnfrH4FtudQAkb9D4qkPeZVRznEbtQf/7AvX4e17lr0AoG1XVRrcn+grzG9FOc8Gms+iVg2J69QGVVSOeRrT+3KVQdtlLgbDiZDxVwPGkoXFJ1Opw9SNPaWucrWlhKbWkkaR9hl7i95y/rwTXvzhZGd0Qg== X-MS-Exchange-CrossTenant-OriginalArrivalTime: 19 Jan 2017 05:43:02.3096 (UTC) X-MS-Exchange-CrossTenant-Id: 5afe0b00-7697-4969-b663-5eab37d5f47e X-MS-Exchange-CrossTenant-OriginalAttributedTenantConnectingIp: TenantId=5afe0b00-7697-4969-b663-5eab37d5f47e; Ip=[192.88.168.50]; Helo=[tx30smr01.am.freescale.net] X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem X-MS-Exchange-Transport-CrossTenantHeadersStamped: DM2PR0301MB0751 Cc: Priyanka Jain , Arpit Goel Subject: [U-Boot] [PATCH 2/3] armv8: fsl-lsch3: Update VID support X-BeenThere: u-boot@lists.denx.de X-Mailman-Version: 2.1.15 Precedence: list List-Id: U-Boot discussion List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: u-boot-bounces@lists.denx.de Sender: "U-Boot" VID support in NXP layerscape Chassis-3 (lsch3) compilant SoCs like LS2088A, LS2080A differs from existing logic. -VDD voltage array is different -Registers are different -VDD calculation logic is different Add new function adjust_vdd() for LSCH3 compliant SoCs Signed-off-by: Priyanka Jain Signed-off-by: Arpit Goel --- .../include/asm/arch-fsl-layerscape/immap_lsch3.h | 4 +- board/freescale/common/vid.c | 174 ++++++++++++++++++-- 2 files changed, 164 insertions(+), 14 deletions(-) diff --git a/arch/arm/include/asm/arch-fsl-layerscape/immap_lsch3.h b/arch/arm/include/asm/arch-fsl-layerscape/immap_lsch3.h index 38a6d03..fc4d33b 100644 --- a/arch/arm/include/asm/arch-fsl-layerscape/immap_lsch3.h +++ b/arch/arm/include/asm/arch-fsl-layerscape/immap_lsch3.h @@ -187,9 +187,9 @@ struct ccsr_gur { u32 gpporcr3; u32 gpporcr4; u8 res_030[0x60-0x30]; -#define FSL_CHASSIS3_DCFG_FUSESR_VID_SHIFT 25 +#define FSL_CHASSIS3_DCFG_FUSESR_VID_SHIFT 2 #define FSL_CHASSIS3_DCFG_FUSESR_VID_MASK 0x1F -#define FSL_CHASSIS3_DCFG_FUSESR_ALTVID_SHIFT 20 +#define FSL_CHASSIS3_DCFG_FUSESR_ALTVID_SHIFT 7 #define FSL_CHASSIS3_DCFG_FUSESR_ALTVID_MASK 0x1F u32 dcfg_fusesr; /* Fuse status register */ u8 res_064[0x70-0x64]; diff --git a/board/freescale/common/vid.c b/board/freescale/common/vid.c index 1a50304..9b65c13 100644 --- a/board/freescale/common/vid.c +++ b/board/freescale/common/vid.c @@ -284,10 +284,170 @@ static int set_voltage(int i2caddress, int vdd) return vdd_last; } +#ifdef CONFIG_FSL_LSCH3 int adjust_vdd(ulong vdd_override) { int re_enable = disable_interrupts(); -#if defined(CONFIG_FSL_LSCH2) || defined(CONFIG_FSL_LSCH3) + struct ccsr_gur *gur = (void *)(CONFIG_SYS_FSL_GUTS_ADDR); + u32 fusesr; + u8 vid, buf; + int vdd_target, vdd_current, vdd_last; + int ret, i2caddress; + unsigned long vdd_string_override; + char *vdd_string; + static const uint16_t vdd[32] = { + 10500, + 0, /* reserved */ + 9750, + 0, /* reserved */ + 9500, + 0, /* reserved */ + 0, /* reserved */ + 0, /* reserved */ + 0, /* reserved */ + 0, /* reserved */ + 0, /* reserved */ + 0, /* reserved */ + 0, /* reserved */ + 0, /* reserved */ + 0, /* reserved */ + 0, /* reserved */ + 10000, /* 1.0000V */ + 0, /* reserved */ + 10250, + 0, /* reserved */ + 10500, + 0, /* reserved */ + 0, /* reserved */ + 0, /* reserved */ + 0, /* reserved */ + 0, /* reserved */ + 0, /* reserved */ + 0, /* reserved */ + 0, /* reserved */ + 0, /* reserved */ + 0, /* reserved */ + 0, /* reserved */ + }; + struct vdd_drive { + u8 vid; + unsigned voltage; + }; + + ret = i2c_multiplexer_select_vid_channel(I2C_MUX_CH_VOL_MONITOR); + if (ret) { + debug("VID: I2C failed to switch channel\n"); + ret = -1; + goto exit; + } + ret = find_ir_chip_on_i2c(); + if (ret < 0) { + printf("VID: Could not find voltage regulator on I2C.\n"); + ret = -1; + goto exit; + } else { + i2caddress = ret; + debug("VID: IR Chip found on I2C address 0x%02x\n", i2caddress); + } + + /* check IR chip work on Intel mode*/ + ret = i2c_read(i2caddress, + IR36021_INTEL_MODE_OOFSET, + 1, (void *)&buf, 1); + if (ret) { + printf("VID: failed to read IR chip mode.\n"); + ret = -1; + goto exit; + } + if ((buf & IR36021_MODE_MASK) != IR36021_INTEL_MODE) { + printf("VID: IR Chip is not used in Intel mode.\n"); + ret = -1; + goto exit; + } + + /* get the voltage ID from fuse status register */ + fusesr = in_le32(&gur->dcfg_fusesr); + vid = (fusesr >> FSL_CHASSIS3_DCFG_FUSESR_ALTVID_SHIFT) & + FSL_CHASSIS3_DCFG_FUSESR_ALTVID_MASK; + if ((vid == 0) || (vid == FSL_CHASSIS3_DCFG_FUSESR_ALTVID_MASK)) { + vid = (fusesr >> FSL_CHASSIS3_DCFG_FUSESR_VID_SHIFT) & + FSL_CHASSIS3_DCFG_FUSESR_VID_MASK; + } + vdd_target = vdd[vid]; + + /* check override variable for overriding VDD */ + vdd_string = getenv(CONFIG_VID_FLS_ENV); + if (vdd_override == 0 && vdd_string && + !strict_strtoul(vdd_string, 10, &vdd_string_override)) + vdd_override = vdd_string_override; + + if (vdd_override >= VDD_MV_MIN && vdd_override <= VDD_MV_MAX) { + vdd_target = vdd_override * 10; /* convert to 1/10 mV */ + debug("VDD override is %lu\n", vdd_override); + } else if (vdd_override != 0) { + printf("Invalid value.\n"); + } + + /* divide and round up by 10 to get a value in mV */ + vdd_target = DIV_ROUND_UP(vdd_target, 10); + if (vdd_target == 0) { + debug("VID: VID not used\n"); + ret = 0; + goto exit; + } else if (vdd_target < VDD_MV_MIN || vdd_target > VDD_MV_MAX) { + /* Check vdd_target is in valid range */ + printf("VID: Target VID %d mV is not in range.\n", + vdd_target); + ret = -1; + goto exit; + } else { + debug("VID: vid = %d mV\n", vdd_target); + } + + /* + * Read voltage monitor to check real voltage. + */ + vdd_last = read_voltage(i2caddress); + if (vdd_last < 0) { + printf("VID: Couldn't read sensor abort VID adjustment\n"); + ret = -1; + goto exit; + } + vdd_current = vdd_last; + debug("VID: Core voltage is currently at %d mV\n", vdd_last); + /* + * Adjust voltage to at or one step above target. + * As measurements are less precise than setting the values + * we may run through dummy steps that cancel each other + * when stepping up and then down. + */ + while (vdd_last > 0 && + vdd_last < vdd_target) { + vdd_current += IR_VDD_STEP_UP; + vdd_last = set_voltage(i2caddress, vdd_current); + } + while (vdd_last > 0 && + vdd_last > vdd_target + (IR_VDD_STEP_DOWN - 1)) { + vdd_current -= IR_VDD_STEP_DOWN; + vdd_last = set_voltage(i2caddress, vdd_current); + } + + if (vdd_last > 0) + printf("VID: Core voltage after adjustment is at %d mV\n", + vdd_last); + else + ret = -1; +exit: + if (re_enable) + enable_interrupts(); + i2c_multiplexer_select_vid_channel(I2C_MUX_CH_DEFAULT); + return ret; +} +#else /* !CONFIG_FSL_LSCH3 */ +int adjust_vdd(ulong vdd_override) +{ + int re_enable = disable_interrupts(); +#if defined(CONFIG_FSL_LSCH2) struct ccsr_gur *gur = (void *)(CONFIG_SYS_FSL_GUTS_ADDR); #else ccsr_gur_t __iomem *gur = @@ -364,11 +524,7 @@ int adjust_vdd(ulong vdd_override) } /* get the voltage ID from fuse status register */ -#ifdef CONFIG_FSL_LSCH3 - fusesr = in_le32(&gur->dcfg_fusesr); -#else fusesr = in_be32(&gur->dcfg_fusesr); -#endif /* * VID is used according to the table below * --------------------------------------- @@ -393,13 +549,6 @@ int adjust_vdd(ulong vdd_override) vid = (fusesr >> FSL_CHASSIS2_DCFG_FUSESR_VID_SHIFT) & FSL_CHASSIS2_DCFG_FUSESR_VID_MASK; } -#elif defined(CONFIG_FSL_LSCH3) - vid = (fusesr >> FSL_CHASSIS3_DCFG_FUSESR_ALTVID_SHIFT) & - FSL_CHASSIS3_DCFG_FUSESR_ALTVID_MASK; - if ((vid == 0) || (vid == FSL_CHASSIS3_DCFG_FUSESR_ALTVID_MASK)) { - vid = (fusesr >> FSL_CHASSIS3_DCFG_FUSESR_VID_SHIFT) & - FSL_CHASSIS3_DCFG_FUSESR_VID_MASK; - } #else vid = (fusesr >> FSL_CORENET_DCFG_FUSESR_ALTVID_SHIFT) & FSL_CORENET_DCFG_FUSESR_ALTVID_MASK; @@ -472,6 +621,7 @@ exit: return ret; } +#endif static int print_vdd(void) {