From patchwork Mon May 28 12:24:46 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Peng Fan X-Patchwork-Id: 921543 X-Patchwork-Delegate: sbabic@denx.de Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Authentication-Results: ozlabs.org; spf=none (mailfrom) smtp.mailfrom=lists.denx.de (client-ip=81.169.180.215; helo=lists.denx.de; envelope-from=u-boot-bounces@lists.denx.de; receiver=) Authentication-Results: ozlabs.org; dmarc=fail (p=none dis=none) header.from=nxp.com Authentication-Results: ozlabs.org; dkim=fail reason="signature verification failed" (1024-bit key; unprotected) header.d=nxp.com header.i=@nxp.com header.b="ow7GqRPN"; dkim-atps=neutral Received: from lists.denx.de (dione.denx.de [81.169.180.215]) by ozlabs.org (Postfix) with ESMTP id 40vdDg385Mz9s08 for ; Mon, 28 May 2018 23:36:35 +1000 (AEST) Received: by lists.denx.de (Postfix, from userid 105) id AFB94C21EE3; Mon, 28 May 2018 13:35:23 +0000 (UTC) Received: from lists.denx.de (localhost [IPv6:::1]) by lists.denx.de (Postfix) with ESMTP id CF812C21E53; Mon, 28 May 2018 13:34:15 +0000 (UTC) Received: by lists.denx.de (Postfix, from userid 105) id 93015C21DD7; Mon, 28 May 2018 12:22:02 +0000 (UTC) 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_BLOCKED, SPF_HELO_PASS, T_DKIM_INVALID autolearn=unavailable autolearn_force=no version=3.4.0 Received: from EUR01-HE1-obe.outbound.protection.outlook.com (mail-he1eur01on0041.outbound.protection.outlook.com [104.47.0.41]) by lists.denx.de (Postfix) with ESMTPS id 5FABBC21C6A for ; Mon, 28 May 2018 12:21:49 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=nxp.com; s=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=DpxNoHEZ5RFzNiezrYrhHxgpuphT47Ze44B+hay1rTc=; b=ow7GqRPNLoSeVxbwGjTRjxbnn/W4d/SZoZ1srV6QqkEfhlVzpfs5HV98uDfk81nP4BSLDQUfjwG+9cnHxhkXKYI8ecDp0aSW5ymDN8DIA2iOsNtz/woi1v8ZJx3sTaSCgbhHKbx3LN7uUxPWkZ9EJXSbTpz6htYC4vFDh6L8VEk= Authentication-Results: spf=none (sender IP is ) smtp.mailfrom=peng.fan@nxp.com; Received: from linux-u7w5.ap.freescale.net.net (92.121.68.129) by VI1PR04MB3006.eurprd04.prod.outlook.com (2603:10a6:802:9::12) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384_P256) id 15.20.797.11; Mon, 28 May 2018 12:21:38 +0000 From: Peng Fan To: sbabic@denx.de, fabio.estevam@nxp.com Date: Mon, 28 May 2018 20:24:46 +0800 Message-Id: <20180528122526.20597-2-peng.fan@nxp.com> X-Mailer: git-send-email 2.14.1 In-Reply-To: <20180528122526.20597-1-peng.fan@nxp.com> References: <20180528122526.20597-1-peng.fan@nxp.com> MIME-Version: 1.0 X-Originating-IP: [92.121.68.129] X-ClientProxiedBy: HK2PR02CA0175.apcprd02.prod.outlook.com (2603:1096:201:21::11) To VI1PR04MB3006.eurprd04.prod.outlook.com (2603:10a6:802:9::12) X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-HT: Tenant X-Microsoft-Antispam: UriScan:; BCL:0; PCL:0; RULEID:(7020095)(4652020)(5600026)(48565401081)(4534165)(4627221)(201703031133081)(201702281549075)(2017052603328)(7153060)(7193020); SRVR:VI1PR04MB3006; X-Microsoft-Exchange-Diagnostics: 1; VI1PR04MB3006; 3:MTpYmZA/Efm3sNJB2HFeqrkvXw0trUeau3w90M4blBlI7uOfAsoyWZD2Y6JnwgiDT+pqyWmI8H/LrHhRPYeYTPWnrh6rECbyDiDl0RAeNOpKeRL0PB9XW666M42y1eTdR6V6yQXRQ1NMqr+6TADcMW3LYDsirDJzPpHD5lN17yUmSpouAol/njMlZt2ivMtWnS7WKHVTEmR3gg55r7Kq9SOX40lcSY8tWmXvoRLotY5/UpTfMoQf9KcVTvU37Oit; 25:6nhH3BThYb5v/gCp2oO8iitMb8LEkCbY9AbXZ7wgRYKa5svzFQQGNorf37Omv+FrILBNiuOoJTWGfXtF28rqxI7ES+6NecoaU5GiW/nIef5w1B/pcns4uxvV30JDopVpzr72/5n7obfBEDGlJGNgSUAAmfeW9/H5wUXV2D6KGUJxuojF7Kg09FSEGCyBHuisVr/HWGwaXsyu8XylR22J3Ahrymitp0L67/qiKaTLS+eGQjj21+nF6uz/JFP+z+xY9S8TxvuPj8DVq3WEijLle80lVvXXCDFZCd98mI2PbvXCJ8TqqpnG77EgifQp3/9K+bhOAYVzuMQV2xpTqLs2mQ==; 31:qEeq2Fw7KdKO/jphD9QaiPbwekqFLRLb2KHZRPI9/ySZ8dFtadY4G7S4ZVTXDd6eXmBX0OLOuejOPxuuVUPiL3Xfx94YavWLqUs1LsFbfHMW78Wje7SQXxlQHLmjZyVBX0m+/5mBJTECpx1N4XmdgrSjXCCNv6sL764crPtLn8MzPSA5PxIxE49iLIa5C6uY2Afm7k4lJ3ldIhRrtMgULMRpq5w3kl035FlDq7SCZqk= X-MS-TrafficTypeDiagnostic: VI1PR04MB3006: X-Microsoft-Exchange-Diagnostics: 1; VI1PR04MB3006; 20:FTK61SNDmWONzBUqCOGoJqT2b8Ce2ylvXzGfDXoJagwVg3H2KCDjcypM+qAqmUgZ+FHUwj4oOm5e3LBDP1NYMXTqC8pgztoqmjGlTSC4BmpvO4e6T077WGf/jjKVuCcFZIVLfjwezK/h0vuwC/MN3kJHFsvBCoezlNtw/fvJXq881MIAiaDAeflOQpedcKYwztz00GKI6Xw8S22QKfWUj02AMXkcT8KS+eX8IPPuWeF27QLEFl3AMhSRP7F3h0yOijUzXGTnRSCEyAnnWWv4L0dXk9vgVMJLeI/+V3vV32JO1p9o0W+RW9iRxhSZ1YPz8vAO7c39Z6cuUCCcFNQyq2C+Rj4lZubT7d0MRwzwnTc+nnMLSAjB/bGdv2i2maSPNDtmIiFkgT6yMd3GjHGnSrTLJWn9sTnfCpUgWfQOFmSgBToS6fLvi0kWz5v21/uOPF/8cHAYEFFtcEXy5ZkwCyhDVI7kemIy205xYX5ItFUKN9x8Lodh0Aiq0dgtNLaM X-Microsoft-Antispam-PRVS: X-Exchange-Antispam-Report-Test: UriScan:(60795455431006)(20558992708506)(192374486261705)(185117386973197)(21532816269658); X-MS-Exchange-SenderADCheck: 1 X-Exchange-Antispam-Report-CFA-Test: BCL:0; PCL:0; RULEID:(8211001083)(6040522)(2401047)(8121501046)(5005006)(3002001)(93006095)(93001095)(3231254)(944501410)(52105095)(10201501046)(6055026)(149027)(150027)(6041310)(20161123558120)(20161123560045)(201703131423095)(201702281528075)(20161123555045)(201703061421075)(201703061406153)(20161123562045)(20161123564045)(6072148)(201708071742011)(7699016); SRVR:VI1PR04MB3006; BCL:0; PCL:0; RULEID:; SRVR:VI1PR04MB3006; X-Microsoft-Exchange-Diagnostics: 1; VI1PR04MB3006; 4:bM8kR9Adto43mpdNw9vqWAl4a2sCjkEUO9cV6rPjy6Jmt0rrIZ0WNqpjg76fkIEQ6flT6/iBTLiDUAn+mUoZLTQ0aN/dU6hkBh0aIbXXRiiWSoizyjt9QsrRvLPs82JOVpQy9eYDSDk3Fzhah6bT+gtQXzoHhj1Avtqocq2qAIDvG5wQS5bvnMncNya65x9vvO/ILjbvxajJW2LuxOaIWjHwggdWF2Vmb+K5EwvrvCS13oMSyG/Aad+Kb9SBCY4NyYCjVM/RyBam7xqdVHdsNjjjD45JgUaPIzQHplMBnOF98Fuqbt6tI5o4gOQG9djpHgYPHVqQhIX/RrvSNKFusYi+y2NKkSUgN3reM8f+ea1NY5jkWp2v75L8svn63Xwz2N02U9A+lXRBZdrXmCTvRXiH3y8gkDUjnO8EriztUd6J7JBU3MYPpQOnInDKiHiVzhZsN/VHF7Azr0WHIKVLwg== X-Forefront-PRVS: 06860EDC7B X-Forefront-Antispam-Report: SFV:NSPM; SFS:(10009020)(366004)(39380400002)(396003)(39860400002)(376002)(346002)(199004)(189003)(45074003)(36756003)(97736004)(6636002)(6666003)(68736007)(86362001)(8676002)(44832011)(8936002)(575784001)(81166006)(81156014)(47776003)(11346002)(956004)(2616005)(476003)(446003)(25786009)(486006)(48376002)(106356001)(105586002)(186003)(50466002)(16526019)(2906002)(6512007)(53936002)(1076002)(59450400001)(66066001)(26005)(51416003)(478600001)(305945005)(551934003)(50226002)(6486002)(5660300001)(6116002)(76176011)(3846002)(53946003)(16586007)(52116002)(16200700003)(6506007)(4326008)(316002)(7736002)(386003)(569006); DIR:OUT; SFP:1101; SCL:1; SRVR:VI1PR04MB3006; H:linux-u7w5.ap.freescale.net.net; FPR:; SPF:None; LANG:en; PTR:InfoNoRecords; A:1; MX:1; Received-SPF: None (protection.outlook.com: nxp.com does not designate permitted sender hosts) X-Microsoft-Exchange-Diagnostics: =?us-ascii?Q?1; VI1PR04MB3006; 23:/IIhgNYTqTistytMkC3f2S/Sv/AGIHN8bIP4U8Ye2?= ySmSXytEmGP12BTN/EXiJHebAAL8N7ee8jYk1cZWzafjGiVXM4bjS704KylrEZEmrAI80WE5LnsTRQJKBW3yiNh0azPMNA4I6HKfELy5F6dLrcsvRkS5gwd+n1SF/U//Rg4agiDROskfSEFu+ukEPqBuUuykaY+wgossEwETY/Cc29Uw9Dz+JLcjdtA1hBQNcAPlIGtpiHZFHLoek4IeOJ7XYdftPcysCui0eF3Ylbn4p+Kd9H6lxuP3813j2VEe0zifltYv6BqftJTVsr8yyxi7Bm4dM+nsFz0bB61ncn3s848lQCuc6lNY5jAUY4Fw2O/LMzOl50Z3iYLqhoOA9q9Kz3sfcc3tGkMMeYwIN8wdefttEsYWlidxYgNS9t12fDYs3fABXV7UZvclIm5Qe6kLIPeXP41FLFvGPszhvpx/LW7Xbcj7CzKPIk97tT6GRBRFwkGgk6SeGr/wXJ1xNhc4EY/sFu2xVZwE5nyVevoUI+8wufiXCt8kYSHq1YTwY0aXk6CasZnujiMdbMZV6Yydw77HftU29QuqOBeNd1kNboG8bGUFErh6Y4E+ho3bC+b7JrLr3PoQWA+1zm5IQX/6f9IaE4xnec1E3nuh4hX+DTm5+9RjKH3zH8yuwoXm/gheHoeSSVcMyRH6cgr2LkICoTXSkZTzcQYdDcpjEqccp2I/6GotVbsypk00EYvVBXXOd+jGFXDdHVaqK9HGcRf4RmlIHNEh+wr9z58lmTlq6aXryqjNBD93Qr/zJoEKo98kL7+RPyRQoEW7WWkL+utOmFNQXDhNxVVIK35e/zta5J2wcRdWaptSgrHDM410TeUbx1Cy7MG7wDtsWrFQ/eZgw1EsT+M01gtd2eTrT3E0Oi1eJeQVxUmcN9LvYUgmFHL0KRWqijRMwt21EqyrncCrpg8kRQV7KNFqXFNGpcdnd5i+PUsMZBX24zvJ4ewGuP0llQM8bqBGrovGdghkJzq0pvmRLcL8KoQgHQXpe+w//HVTg1173ZWWdyDC5TxZ9wOSsUF8Cv7IuRN0IHjvfCR+q1NnB7nWiBInMuYmWOBQJM+TEJsWRr9ti7ZtLeUXLTzZ68Iv8gswL072pOWjyPXnAVTyjiGLeB5LZfriR2+i3jD54d3+Vha379Xldwppt5zvNBf+vUUkd+QP9NPDEKd/S/KRK1iWFNXKw1ZSSjH4vz3Itzb2/PYPVQxdzYIUD+ccE1CKLvGFF1fd/n+X4okj2UWzIwiSikcVmGGO4HdhoUXC1MQ7Rc/RPiavJXPBz9JLlFXzoUyfr8A5b4f6WOFLTIF6cV1x/5S6d5Lk0UrY+qO8F+7gPCt4LfHyVAcHlo= X-Microsoft-Antispam-Message-Info: qjqbapSIVMh9+7eUEQQE60Bd8C8ytLxhMZEbVQ620l//uvQhmPcE7lc8EJveVPWMIEGP71j2t6e3uI1oovakzoXUMZzfUo/gPO9er17BzSmmXqdgcoM+au0obhum4/wYU1NcvYfIhmtA2JoXn3VKOTwlfksZ7b1VnnORRIxqGqNVMPrnpjd8t3OOWj2dv7zn X-Microsoft-Exchange-Diagnostics: 1; VI1PR04MB3006; 6:QXn9w3bbiWO5vHZeYLuZz+IxutncRpBpHjedA6Fuv3Pbe+cw9EAqKVgppnAGciDjBCnXATfypycAADHW6cWtM3cpBL4CXhv1lYUgZvl7qEgBLiHHJK9aDyvudbOQj0XDoZYffNfGxEjzFz/SkB3C1jYlVv8dVSsPir81M0VjM3qw8kZZR6IGmROeMwt3MKGiqoJXEKvdDXDXs7jy/DcCQ07XY89uFGtNxaL9Ei4lZZKZ9klwFILxgGWfcCe/De4jXq+1KWoEKR2n7xQdEICOY8vRNtrehqeFJFQFMzuI/xDg95JPNa2lX9IPM+vGTpmIbWoGZdJskZTRm88TwXHRHVLkADbtkxQz+ENVRbM9bRU1GrdWS9jkWLACRcoK/gBAXHLpxu9phvPLEvj1gfA0jf2vaELLyxiqsomrKE/3W4X/HhhkE8n/jky/xb8PoGOkXjmk2pw8YS3mvYv+NGOOGw==; 5:/MOqcFGcSa3/k8x46CZu6R7oWOSBfD5dQk8jr1mF3kinvxXQnS/wALc54a0Lbc+7+N5SsOgjv/S62bUq3jjKVfCg02+8vUaNg/CteIQG+OLu2L5uTLvtWt9RStCRIDvyqtg5Nj42EPquoTlLH/MKvGTTAMLdoeyY1Yg84U2AiPg=; 24:QtdbBCEKhgZA0j5TeX24qognvqiRvY02RYxspNZvHG7D8PJEUAhe7/zzAxAjkzIJ26KqOSyVmVSn4q4vcjeaO+PyWpG+t8UWYheTPW+HTf0= SpamDiagnosticOutput: 1:99 SpamDiagnosticMetadata: NSPM X-Microsoft-Exchange-Diagnostics: 1; VI1PR04MB3006; 7:hlvQvP6fzIlnMAAJo2WsADpYfwGPSwjSKr6emsRWoMRyudRHgq7KcxmhpIExM3gzQ9TwNtBO1I7RrbSOSG2Jdm/y+Av8+MVMWJajPrLHtNjsyyNKoZG7NzuN3bUT7sCn+TiqRg4TITzYkDklJYLquQGMQBd405ashGHybn1PAejHQTcH2jAuiRq6VAfO+3CJEYGTNsoLxYFLFOxysy/60z/8EChcoomN3rjgBlA0Eyv1iIgN0exNqU4YqjdUxzW4 X-MS-Office365-Filtering-Correlation-Id: 06763498-051b-42cf-4b4b-08d5c49590f1 X-OriginatorOrg: nxp.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 28 May 2018 12:21:38.4165 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: 06763498-051b-42cf-4b4b-08d5c49590f1 X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 686ea1d3-bc2b-4c6f-a92c-d99c5c301635 X-MS-Exchange-Transport-CrossTenantHeadersStamped: VI1PR04MB3006 X-Mailman-Approved-At: Mon, 28 May 2018 13:34:12 +0000 Cc: u-boot@lists.denx.de Subject: [U-Boot] [PATCH 01/41] imx: import SCFW API X-BeenThere: u-boot@lists.denx.de X-Mailman-Version: 2.1.18 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" The SCFW API files are generated from scfw source code and imported to U-Boot source code withou code changes. The commit in SCFW is commit a5759de95691("SCF-69 Fix the voltage for 1.06GHz setpoint on A72.") Signed-off-by: Peng Fan --- arch/arm/include/asm/arch-imx8/imx8qm_pads.h | 295 +++++++ arch/arm/include/asm/arch-imx8/imx8qxp_pads.h | 200 +++++ arch/arm/include/asm/arch-imx8/sci/ipc.h | 67 ++ arch/arm/include/asm/arch-imx8/sci/rpc.h | 131 +++ arch/arm/include/asm/arch-imx8/sci/svc/irq/api.h | 160 ++++ arch/arm/include/asm/arch-imx8/sci/svc/misc/api.h | 523 +++++++++++ arch/arm/include/asm/arch-imx8/sci/svc/pad/api.h | 568 ++++++++++++ arch/arm/include/asm/arch-imx8/sci/svc/pm/api.h | 686 +++++++++++++++ arch/arm/include/asm/arch-imx8/sci/svc/rm/api.h | 759 ++++++++++++++++ arch/arm/include/asm/arch-imx8/sci/svc/timer/api.h | 306 +++++++ arch/arm/include/asm/arch-imx8/sci/types.h | 862 ++++++++++++++++++ arch/arm/mach-imx/imx8/Makefile | 11 + arch/arm/mach-imx/imx8/sci/svc/irq/rpc.h | 54 ++ arch/arm/mach-imx/imx8/sci/svc/irq/rpc_clnt.c | 76 ++ arch/arm/mach-imx/imx8/sci/svc/misc/rpc.h | 76 ++ arch/arm/mach-imx/imx8/sci/svc/misc/rpc_clnt.c | 515 +++++++++++ arch/arm/mach-imx/imx8/sci/svc/pad/rpc.h | 68 ++ arch/arm/mach-imx/imx8/sci/svc/pad/rpc_clnt.c | 475 ++++++++++ arch/arm/mach-imx/imx8/sci/svc/pm/rpc.h | 73 ++ arch/arm/mach-imx/imx8/sci/svc/pm/rpc_clnt.c | 460 ++++++++++ arch/arm/mach-imx/imx8/sci/svc/rm/rpc.h | 83 ++ arch/arm/mach-imx/imx8/sci/svc/rm/rpc_clnt.c | 645 ++++++++++++++ arch/arm/mach-imx/imx8/sci/svc/timer/rpc.h | 67 ++ arch/arm/mach-imx/imx8/sci/svc/timer/rpc_clnt.c | 365 ++++++++ include/dt-bindings/pinctrl/pads-imx8qm.h | 975 +++++++++++++++++++++ include/dt-bindings/pinctrl/pads-imx8qxp.h | 770 ++++++++++++++++ include/dt-bindings/soc/imx_rsrc.h | 560 ++++++++++++ 27 files changed, 9830 insertions(+) create mode 100644 arch/arm/include/asm/arch-imx8/imx8qm_pads.h create mode 100644 arch/arm/include/asm/arch-imx8/imx8qxp_pads.h create mode 100755 arch/arm/include/asm/arch-imx8/sci/ipc.h create mode 100755 arch/arm/include/asm/arch-imx8/sci/rpc.h create mode 100755 arch/arm/include/asm/arch-imx8/sci/svc/irq/api.h create mode 100755 arch/arm/include/asm/arch-imx8/sci/svc/misc/api.h create mode 100755 arch/arm/include/asm/arch-imx8/sci/svc/pad/api.h create mode 100755 arch/arm/include/asm/arch-imx8/sci/svc/pm/api.h create mode 100755 arch/arm/include/asm/arch-imx8/sci/svc/rm/api.h create mode 100755 arch/arm/include/asm/arch-imx8/sci/svc/timer/api.h create mode 100755 arch/arm/include/asm/arch-imx8/sci/types.h create mode 100644 arch/arm/mach-imx/imx8/Makefile create mode 100644 arch/arm/mach-imx/imx8/sci/svc/irq/rpc.h create mode 100644 arch/arm/mach-imx/imx8/sci/svc/irq/rpc_clnt.c create mode 100644 arch/arm/mach-imx/imx8/sci/svc/misc/rpc.h create mode 100644 arch/arm/mach-imx/imx8/sci/svc/misc/rpc_clnt.c create mode 100644 arch/arm/mach-imx/imx8/sci/svc/pad/rpc.h create mode 100644 arch/arm/mach-imx/imx8/sci/svc/pad/rpc_clnt.c create mode 100644 arch/arm/mach-imx/imx8/sci/svc/pm/rpc.h create mode 100644 arch/arm/mach-imx/imx8/sci/svc/pm/rpc_clnt.c create mode 100644 arch/arm/mach-imx/imx8/sci/svc/rm/rpc.h create mode 100644 arch/arm/mach-imx/imx8/sci/svc/rm/rpc_clnt.c create mode 100644 arch/arm/mach-imx/imx8/sci/svc/timer/rpc.h create mode 100644 arch/arm/mach-imx/imx8/sci/svc/timer/rpc_clnt.c create mode 100644 include/dt-bindings/pinctrl/pads-imx8qm.h create mode 100644 include/dt-bindings/pinctrl/pads-imx8qxp.h create mode 100644 include/dt-bindings/soc/imx_rsrc.h diff --git a/arch/arm/include/asm/arch-imx8/imx8qm_pads.h b/arch/arm/include/asm/arch-imx8/imx8qm_pads.h new file mode 100644 index 0000000000..5cd2b76759 --- /dev/null +++ b/arch/arm/include/asm/arch-imx8/imx8qm_pads.h @@ -0,0 +1,295 @@ +/* + * Copyright (C) 2016 Freescale Semiconductor, Inc. + * Copyright 2017-2018 NXP + * + * SPDX-License-Identifier: GPL-2.0+ + */ + +/*! + * Header file used to configure SoC pad list. + */ + +#ifndef SC_PADS_H +#define SC_PADS_H + +/* Includes */ + +/* Defines */ + +/*! + * @name Pad Definitions + */ +/*@{*/ +#define SC_P_SIM0_CLK 0 /*!< DMA.SIM0.CLK, LSIO.GPIO0.IO00 */ +#define SC_P_SIM0_RST 1 /*!< DMA.SIM0.RST, LSIO.GPIO0.IO01 */ +#define SC_P_SIM0_IO 2 /*!< DMA.SIM0.IO, LSIO.GPIO0.IO02 */ +#define SC_P_SIM0_PD 3 /*!< DMA.SIM0.PD, DMA.I2C3.SCL, LSIO.GPIO0.IO03 */ +#define SC_P_SIM0_POWER_EN 4 /*!< DMA.SIM0.POWER_EN, DMA.I2C3.SDA, LSIO.GPIO0.IO04 */ +#define SC_P_SIM0_GPIO0_00 5 /*!< DMA.SIM0.POWER_EN, LSIO.GPIO0.IO05 */ +#define SC_P_COMP_CTL_GPIO_1V8_3V3_SIM 6 /*!< */ +#define SC_P_M40_I2C0_SCL 7 /*!< M40.I2C0.SCL, M40.UART0.RX, M40.GPIO0.IO02, LSIO.GPIO0.IO06 */ +#define SC_P_M40_I2C0_SDA 8 /*!< M40.I2C0.SDA, M40.UART0.TX, M40.GPIO0.IO03, LSIO.GPIO0.IO07 */ +#define SC_P_M40_GPIO0_00 9 /*!< M40.GPIO0.IO00, M40.TPM0.CH0, DMA.UART4.RX, LSIO.GPIO0.IO08 */ +#define SC_P_M40_GPIO0_01 10 /*!< M40.GPIO0.IO01, M40.TPM0.CH1, DMA.UART4.TX, LSIO.GPIO0.IO09 */ +#define SC_P_M41_I2C0_SCL 11 /*!< M41.I2C0.SCL, M41.UART0.RX, M41.GPIO0.IO02, LSIO.GPIO0.IO10 */ +#define SC_P_M41_I2C0_SDA 12 /*!< M41.I2C0.SDA, M41.UART0.TX, M41.GPIO0.IO03, LSIO.GPIO0.IO11 */ +#define SC_P_M41_GPIO0_00 13 /*!< M41.GPIO0.IO00, M41.TPM0.CH0, DMA.UART3.RX, LSIO.GPIO0.IO12 */ +#define SC_P_M41_GPIO0_01 14 /*!< M41.GPIO0.IO01, M41.TPM0.CH1, DMA.UART3.TX, LSIO.GPIO0.IO13 */ +#define SC_P_GPT0_CLK 15 /*!< LSIO.GPT0.CLK, DMA.I2C1.SCL, LSIO.KPP0.COL4, LSIO.GPIO0.IO14 */ +#define SC_P_GPT0_CAPTURE 16 /*!< LSIO.GPT0.CAPTURE, DMA.I2C1.SDA, LSIO.KPP0.COL5, LSIO.GPIO0.IO15 */ +#define SC_P_GPT0_COMPARE 17 /*!< LSIO.GPT0.COMPARE, LSIO.PWM3.OUT, LSIO.KPP0.COL6, LSIO.GPIO0.IO16 */ +#define SC_P_GPT1_CLK 18 /*!< LSIO.GPT1.CLK, DMA.I2C2.SCL, LSIO.KPP0.COL7, LSIO.GPIO0.IO17 */ +#define SC_P_GPT1_CAPTURE 19 /*!< LSIO.GPT1.CAPTURE, DMA.I2C2.SDA, LSIO.KPP0.ROW4, LSIO.GPIO0.IO18 */ +#define SC_P_GPT1_COMPARE 20 /*!< LSIO.GPT1.COMPARE, LSIO.PWM2.OUT, LSIO.KPP0.ROW5, LSIO.GPIO0.IO19 */ +#define SC_P_UART0_RX 21 /*!< DMA.UART0.RX, SCU.UART0.RX, LSIO.GPIO0.IO20 */ +#define SC_P_UART0_TX 22 /*!< DMA.UART0.TX, SCU.UART0.TX, LSIO.GPIO0.IO21 */ +#define SC_P_UART0_RTS_B 23 /*!< DMA.UART0.RTS_B, LSIO.PWM0.OUT, DMA.UART2.RX, LSIO.GPIO0.IO22 */ +#define SC_P_UART0_CTS_B 24 /*!< DMA.UART0.CTS_B, LSIO.PWM1.OUT, DMA.UART2.TX, LSIO.GPIO0.IO23 */ +#define SC_P_UART1_TX 25 /*!< DMA.UART1.TX, DMA.SPI3.SCK, LSIO.GPIO0.IO24 */ +#define SC_P_UART1_RX 26 /*!< DMA.UART1.RX, DMA.SPI3.SDO, LSIO.GPIO0.IO25 */ +#define SC_P_UART1_RTS_B 27 /*!< DMA.UART1.RTS_B, DMA.SPI3.SDI, DMA.UART1.CTS_B, LSIO.GPIO0.IO26 */ +#define SC_P_UART1_CTS_B 28 /*!< DMA.UART1.CTS_B, DMA.SPI3.CS0, DMA.UART1.RTS_B, LSIO.GPIO0.IO27 */ +#define SC_P_COMP_CTL_GPIO_1V8_3V3_GPIOLH 29 /*!< */ +#define SC_P_SCU_PMIC_MEMC_ON 30 /*!< SCU.GPIO0.IOXX_PMIC_MEMC_ON */ +#define SC_P_SCU_WDOG_OUT 31 /*!< SCU.WDOG0.WDOG_OUT */ +#define SC_P_PMIC_I2C_SDA 32 /*!< SCU.PMIC_I2C.SDA */ +#define SC_P_PMIC_I2C_SCL 33 /*!< SCU.PMIC_I2C.SCL */ +#define SC_P_PMIC_EARLY_WARNING 34 /*!< SCU.PMIC_EARLY_WARNING */ +#define SC_P_PMIC_INT_B 35 /*!< SCU.DSC.PMIC_INT_B */ +#define SC_P_SCU_GPIO0_00 36 /*!< SCU.GPIO0.IO00, SCU.UART0.RX, LSIO.GPIO0.IO28 */ +#define SC_P_SCU_GPIO0_01 37 /*!< SCU.GPIO0.IO01, SCU.UART0.TX, LSIO.GPIO0.IO29 */ +#define SC_P_SCU_GPIO0_02 38 /*!< SCU.GPIO0.IO02, SCU.GPIO0.IOXX_PMIC_GPU0_ON, LSIO.GPIO0.IO30 */ +#define SC_P_SCU_GPIO0_03 39 /*!< SCU.GPIO0.IO03, SCU.GPIO0.IOXX_PMIC_GPU1_ON, LSIO.GPIO0.IO31 */ +#define SC_P_SCU_GPIO0_04 40 /*!< SCU.GPIO0.IO04, SCU.GPIO0.IOXX_PMIC_A72_ON, LSIO.GPIO1.IO00 */ +#define SC_P_SCU_GPIO0_05 41 /*!< SCU.GPIO0.IO05, SCU.GPIO0.IOXX_PMIC_A53_ON, LSIO.GPIO1.IO01 */ +#define SC_P_SCU_GPIO0_06 42 /*!< SCU.GPIO0.IO06, SCU.TPM0.CH0, LSIO.GPIO1.IO02 */ +#define SC_P_SCU_GPIO0_07 43 /*!< SCU.GPIO0.IO07, SCU.TPM0.CH1, SCU.DSC.RTC_CLOCK_OUTPUT_32K, LSIO.GPIO1.IO03 */ +#define SC_P_SCU_BOOT_MODE0 44 /*!< SCU.DSC.BOOT_MODE0 */ +#define SC_P_SCU_BOOT_MODE1 45 /*!< SCU.DSC.BOOT_MODE1 */ +#define SC_P_SCU_BOOT_MODE2 46 /*!< SCU.DSC.BOOT_MODE2 */ +#define SC_P_SCU_BOOT_MODE3 47 /*!< SCU.DSC.BOOT_MODE3 */ +#define SC_P_SCU_BOOT_MODE4 48 /*!< SCU.DSC.BOOT_MODE4, SCU.PMIC_I2C.SCL */ +#define SC_P_SCU_BOOT_MODE5 49 /*!< SCU.DSC.BOOT_MODE5, SCU.PMIC_I2C.SDA */ +#define SC_P_LVDS0_GPIO00 50 /*!< LVDS0.GPIO0.IO00, LVDS0.PWM0.OUT, LSIO.GPIO1.IO04 */ +#define SC_P_LVDS0_GPIO01 51 /*!< LVDS0.GPIO0.IO01, LSIO.GPIO1.IO05 */ +#define SC_P_LVDS0_I2C0_SCL 52 /*!< LVDS0.I2C0.SCL, LVDS0.GPIO0.IO02, LSIO.GPIO1.IO06 */ +#define SC_P_LVDS0_I2C0_SDA 53 /*!< LVDS0.I2C0.SDA, LVDS0.GPIO0.IO03, LSIO.GPIO1.IO07 */ +#define SC_P_LVDS0_I2C1_SCL 54 /*!< LVDS0.I2C1.SCL, DMA.UART2.TX, LSIO.GPIO1.IO08 */ +#define SC_P_LVDS0_I2C1_SDA 55 /*!< LVDS0.I2C1.SDA, DMA.UART2.RX, LSIO.GPIO1.IO09 */ +#define SC_P_LVDS1_GPIO00 56 /*!< LVDS1.GPIO0.IO00, LVDS1.PWM0.OUT, LSIO.GPIO1.IO10 */ +#define SC_P_LVDS1_GPIO01 57 /*!< LVDS1.GPIO0.IO01, LSIO.GPIO1.IO11 */ +#define SC_P_LVDS1_I2C0_SCL 58 /*!< LVDS1.I2C0.SCL, LVDS1.GPIO0.IO02, LSIO.GPIO1.IO12 */ +#define SC_P_LVDS1_I2C0_SDA 59 /*!< LVDS1.I2C0.SDA, LVDS1.GPIO0.IO03, LSIO.GPIO1.IO13 */ +#define SC_P_LVDS1_I2C1_SCL 60 /*!< LVDS1.I2C1.SCL, DMA.UART3.TX, LSIO.GPIO1.IO14 */ +#define SC_P_LVDS1_I2C1_SDA 61 /*!< LVDS1.I2C1.SDA, DMA.UART3.RX, LSIO.GPIO1.IO15 */ +#define SC_P_COMP_CTL_GPIO_1V8_3V3_LVDSGPIO 62 /*!< */ +#define SC_P_MIPI_DSI0_I2C0_SCL 63 /*!< MIPI_DSI0.I2C0.SCL, LSIO.GPIO1.IO16 */ +#define SC_P_MIPI_DSI0_I2C0_SDA 64 /*!< MIPI_DSI0.I2C0.SDA, LSIO.GPIO1.IO17 */ +#define SC_P_MIPI_DSI0_GPIO0_00 65 /*!< MIPI_DSI0.GPIO0.IO00, MIPI_DSI0.PWM0.OUT, LSIO.GPIO1.IO18 */ +#define SC_P_MIPI_DSI0_GPIO0_01 66 /*!< MIPI_DSI0.GPIO0.IO01, LSIO.GPIO1.IO19 */ +#define SC_P_MIPI_DSI1_I2C0_SCL 67 /*!< MIPI_DSI1.I2C0.SCL, LSIO.GPIO1.IO20 */ +#define SC_P_MIPI_DSI1_I2C0_SDA 68 /*!< MIPI_DSI1.I2C0.SDA, LSIO.GPIO1.IO21 */ +#define SC_P_MIPI_DSI1_GPIO0_00 69 /*!< MIPI_DSI1.GPIO0.IO00, MIPI_DSI1.PWM0.OUT, LSIO.GPIO1.IO22 */ +#define SC_P_MIPI_DSI1_GPIO0_01 70 /*!< MIPI_DSI1.GPIO0.IO01, LSIO.GPIO1.IO23 */ +#define SC_P_COMP_CTL_GPIO_1V8_3V3_MIPIDSIGPIO 71 /*!< */ +#define SC_P_MIPI_CSI0_MCLK_OUT 72 /*!< MIPI_CSI0.ACM.MCLK_OUT, LSIO.GPIO1.IO24 */ +#define SC_P_MIPI_CSI0_I2C0_SCL 73 /*!< MIPI_CSI0.I2C0.SCL, LSIO.GPIO1.IO25 */ +#define SC_P_MIPI_CSI0_I2C0_SDA 74 /*!< MIPI_CSI0.I2C0.SDA, LSIO.GPIO1.IO26 */ +#define SC_P_MIPI_CSI0_GPIO0_00 75 /*!< MIPI_CSI0.GPIO0.IO00, DMA.I2C0.SCL, MIPI_CSI1.I2C0.SCL, LSIO.GPIO1.IO27 */ +#define SC_P_MIPI_CSI0_GPIO0_01 76 /*!< MIPI_CSI0.GPIO0.IO01, DMA.I2C0.SDA, MIPI_CSI1.I2C0.SDA, LSIO.GPIO1.IO28 */ +#define SC_P_MIPI_CSI1_MCLK_OUT 77 /*!< MIPI_CSI1.ACM.MCLK_OUT, LSIO.GPIO1.IO29 */ +#define SC_P_MIPI_CSI1_GPIO0_00 78 /*!< MIPI_CSI1.GPIO0.IO00, DMA.UART4.RX, LSIO.GPIO1.IO30 */ +#define SC_P_MIPI_CSI1_GPIO0_01 79 /*!< MIPI_CSI1.GPIO0.IO01, DMA.UART4.TX, LSIO.GPIO1.IO31 */ +#define SC_P_MIPI_CSI1_I2C0_SCL 80 /*!< MIPI_CSI1.I2C0.SCL, LSIO.GPIO2.IO00 */ +#define SC_P_MIPI_CSI1_I2C0_SDA 81 /*!< MIPI_CSI1.I2C0.SDA, LSIO.GPIO2.IO01 */ +#define SC_P_HDMI_TX0_TS_SCL 82 /*!< HDMI_TX0.I2C0.SCL, DMA.I2C0.SCL, LSIO.GPIO2.IO02 */ +#define SC_P_HDMI_TX0_TS_SDA 83 /*!< HDMI_TX0.I2C0.SDA, DMA.I2C0.SDA, LSIO.GPIO2.IO03 */ +#define SC_P_COMP_CTL_GPIO_3V3_HDMIGPIO 84 /*!< */ +#define SC_P_ESAI1_FSR 85 /*!< AUD.ESAI1.FSR, LSIO.GPIO2.IO04 */ +#define SC_P_ESAI1_FST 86 /*!< AUD.ESAI1.FST, AUD.SPDIF0.EXT_CLK, LSIO.GPIO2.IO05 */ +#define SC_P_ESAI1_SCKR 87 /*!< AUD.ESAI1.SCKR, LSIO.GPIO2.IO06 */ +#define SC_P_ESAI1_SCKT 88 /*!< AUD.ESAI1.SCKT, AUD.SAI2.RXC, AUD.SPDIF0.EXT_CLK, LSIO.GPIO2.IO07 */ +#define SC_P_ESAI1_TX0 89 /*!< AUD.ESAI1.TX0, AUD.SAI2.RXD, AUD.SPDIF0.RX, LSIO.GPIO2.IO08 */ +#define SC_P_ESAI1_TX1 90 /*!< AUD.ESAI1.TX1, AUD.SAI2.RXFS, AUD.SPDIF0.TX, LSIO.GPIO2.IO09 */ +#define SC_P_ESAI1_TX2_RX3 91 /*!< AUD.ESAI1.TX2_RX3, AUD.SPDIF0.RX, LSIO.GPIO2.IO10 */ +#define SC_P_ESAI1_TX3_RX2 92 /*!< AUD.ESAI1.TX3_RX2, AUD.SPDIF0.TX, LSIO.GPIO2.IO11 */ +#define SC_P_ESAI1_TX4_RX1 93 /*!< AUD.ESAI1.TX4_RX1, LSIO.GPIO2.IO12 */ +#define SC_P_ESAI1_TX5_RX0 94 /*!< AUD.ESAI1.TX5_RX0, LSIO.GPIO2.IO13 */ +#define SC_P_SPDIF0_RX 95 /*!< AUD.SPDIF0.RX, AUD.MQS.R, AUD.ACM.MCLK_IN1, LSIO.GPIO2.IO14 */ +#define SC_P_SPDIF0_TX 96 /*!< AUD.SPDIF0.TX, AUD.MQS.L, AUD.ACM.MCLK_OUT1, LSIO.GPIO2.IO15 */ +#define SC_P_SPDIF0_EXT_CLK 97 /*!< AUD.SPDIF0.EXT_CLK, DMA.DMA0.REQ_IN0, LSIO.GPIO2.IO16 */ +#define SC_P_SPI3_SCK 98 /*!< DMA.SPI3.SCK, LSIO.GPIO2.IO17 */ +#define SC_P_SPI3_SDO 99 /*!< DMA.SPI3.SDO, DMA.FTM.CH0, LSIO.GPIO2.IO18 */ +#define SC_P_SPI3_SDI 100 /*!< DMA.SPI3.SDI, DMA.FTM.CH1, LSIO.GPIO2.IO19 */ +#define SC_P_SPI3_CS0 101 /*!< DMA.SPI3.CS0, DMA.FTM.CH2, LSIO.GPIO2.IO20 */ +#define SC_P_SPI3_CS1 102 /*!< DMA.SPI3.CS1, LSIO.GPIO2.IO21 */ +#define SC_P_COMP_CTL_GPIO_1V8_3V3_GPIORHB 103 /*!< */ +#define SC_P_ESAI0_FSR 104 /*!< AUD.ESAI0.FSR, LSIO.GPIO2.IO22 */ +#define SC_P_ESAI0_FST 105 /*!< AUD.ESAI0.FST, LSIO.GPIO2.IO23 */ +#define SC_P_ESAI0_SCKR 106 /*!< AUD.ESAI0.SCKR, LSIO.GPIO2.IO24 */ +#define SC_P_ESAI0_SCKT 107 /*!< AUD.ESAI0.SCKT, LSIO.GPIO2.IO25 */ +#define SC_P_ESAI0_TX0 108 /*!< AUD.ESAI0.TX0, LSIO.GPIO2.IO26 */ +#define SC_P_ESAI0_TX1 109 /*!< AUD.ESAI0.TX1, LSIO.GPIO2.IO27 */ +#define SC_P_ESAI0_TX2_RX3 110 /*!< AUD.ESAI0.TX2_RX3, LSIO.GPIO2.IO28 */ +#define SC_P_ESAI0_TX3_RX2 111 /*!< AUD.ESAI0.TX3_RX2, LSIO.GPIO2.IO29 */ +#define SC_P_ESAI0_TX4_RX1 112 /*!< AUD.ESAI0.TX4_RX1, LSIO.GPIO2.IO30 */ +#define SC_P_ESAI0_TX5_RX0 113 /*!< AUD.ESAI0.TX5_RX0, LSIO.GPIO2.IO31 */ +#define SC_P_MCLK_IN0 114 /*!< AUD.ACM.MCLK_IN0, AUD.ESAI0.RX_HF_CLK, AUD.ESAI1.RX_HF_CLK, LSIO.GPIO3.IO00 */ +#define SC_P_MCLK_OUT0 115 /*!< AUD.ACM.MCLK_OUT0, AUD.ESAI0.TX_HF_CLK, AUD.ESAI1.TX_HF_CLK, LSIO.GPIO3.IO01 */ +#define SC_P_COMP_CTL_GPIO_1V8_3V3_GPIORHC 116 /*!< */ +#define SC_P_SPI0_SCK 117 /*!< DMA.SPI0.SCK, AUD.SAI0.RXC, LSIO.GPIO3.IO02 */ +#define SC_P_SPI0_SDO 118 /*!< DMA.SPI0.SDO, AUD.SAI0.TXD, LSIO.GPIO3.IO03 */ +#define SC_P_SPI0_SDI 119 /*!< DMA.SPI0.SDI, AUD.SAI0.RXD, LSIO.GPIO3.IO04 */ +#define SC_P_SPI0_CS0 120 /*!< DMA.SPI0.CS0, AUD.SAI0.RXFS, LSIO.GPIO3.IO05 */ +#define SC_P_SPI0_CS1 121 /*!< DMA.SPI0.CS1, AUD.SAI0.TXC, LSIO.GPIO3.IO06 */ +#define SC_P_SPI2_SCK 122 /*!< DMA.SPI2.SCK, LSIO.GPIO3.IO07 */ +#define SC_P_SPI2_SDO 123 /*!< DMA.SPI2.SDO, LSIO.GPIO3.IO08 */ +#define SC_P_SPI2_SDI 124 /*!< DMA.SPI2.SDI, LSIO.GPIO3.IO09 */ +#define SC_P_SPI2_CS0 125 /*!< DMA.SPI2.CS0, LSIO.GPIO3.IO10 */ +#define SC_P_SPI2_CS1 126 /*!< DMA.SPI2.CS1, AUD.SAI0.TXFS, LSIO.GPIO3.IO11 */ +#define SC_P_SAI1_RXC 127 /*!< AUD.SAI1.RXC, AUD.SAI0.TXD, LSIO.GPIO3.IO12 */ +#define SC_P_SAI1_RXD 128 /*!< AUD.SAI1.RXD, AUD.SAI0.TXFS, LSIO.GPIO3.IO13 */ +#define SC_P_SAI1_RXFS 129 /*!< AUD.SAI1.RXFS, AUD.SAI0.RXD, LSIO.GPIO3.IO14 */ +#define SC_P_SAI1_TXC 130 /*!< AUD.SAI1.TXC, AUD.SAI0.TXC, LSIO.GPIO3.IO15 */ +#define SC_P_SAI1_TXD 131 /*!< AUD.SAI1.TXD, AUD.SAI1.RXC, LSIO.GPIO3.IO16 */ +#define SC_P_SAI1_TXFS 132 /*!< AUD.SAI1.TXFS, AUD.SAI1.RXFS, LSIO.GPIO3.IO17 */ +#define SC_P_COMP_CTL_GPIO_1V8_3V3_GPIORHT 133 /*!< */ +#define SC_P_ADC_IN7 134 /*!< DMA.ADC1.IN3, DMA.SPI1.CS1, LSIO.KPP0.ROW3, LSIO.GPIO3.IO25 */ +#define SC_P_ADC_IN6 135 /*!< DMA.ADC1.IN2, DMA.SPI1.CS0, LSIO.KPP0.ROW2, LSIO.GPIO3.IO24 */ +#define SC_P_ADC_IN5 136 /*!< DMA.ADC1.IN1, DMA.SPI1.SDI, LSIO.KPP0.ROW1, LSIO.GPIO3.IO23 */ +#define SC_P_ADC_IN4 137 /*!< DMA.ADC1.IN0, DMA.SPI1.SDO, LSIO.KPP0.ROW0, LSIO.GPIO3.IO22 */ +#define SC_P_ADC_IN3 138 /*!< DMA.ADC0.IN3, DMA.SPI1.SCK, LSIO.KPP0.COL3, LSIO.GPIO3.IO21 */ +#define SC_P_ADC_IN2 139 /*!< DMA.ADC0.IN2, LSIO.KPP0.COL2, LSIO.GPIO3.IO20 */ +#define SC_P_ADC_IN1 140 /*!< DMA.ADC0.IN1, LSIO.KPP0.COL1, LSIO.GPIO3.IO19 */ +#define SC_P_ADC_IN0 141 /*!< DMA.ADC0.IN0, LSIO.KPP0.COL0, LSIO.GPIO3.IO18 */ +#define SC_P_MLB_SIG 142 /*!< CONN.MLB.SIG, AUD.SAI3.RXC, LSIO.GPIO3.IO26 */ +#define SC_P_MLB_CLK 143 /*!< CONN.MLB.CLK, AUD.SAI3.RXFS, LSIO.GPIO3.IO27 */ +#define SC_P_MLB_DATA 144 /*!< CONN.MLB.DATA, AUD.SAI3.RXD, LSIO.GPIO3.IO28 */ +#define SC_P_COMP_CTL_GPIO_1V8_3V3_GPIOLHT 145 /*!< */ +#define SC_P_FLEXCAN0_RX 146 /*!< DMA.FLEXCAN0.RX, LSIO.GPIO3.IO29 */ +#define SC_P_FLEXCAN0_TX 147 /*!< DMA.FLEXCAN0.TX, LSIO.GPIO3.IO30 */ +#define SC_P_FLEXCAN1_RX 148 /*!< DMA.FLEXCAN1.RX, LSIO.GPIO3.IO31 */ +#define SC_P_FLEXCAN1_TX 149 /*!< DMA.FLEXCAN1.TX, LSIO.GPIO4.IO00 */ +#define SC_P_FLEXCAN2_RX 150 /*!< DMA.FLEXCAN2.RX, LSIO.GPIO4.IO01 */ +#define SC_P_FLEXCAN2_TX 151 /*!< DMA.FLEXCAN2.TX, LSIO.GPIO4.IO02 */ +#define SC_P_COMP_CTL_GPIO_1V8_3V3_GPIOTHR 152 /*!< */ +#define SC_P_USB_SS3_TC0 153 /*!< DMA.I2C1.SCL, CONN.USB_OTG1.PWR, LSIO.GPIO4.IO03 */ +#define SC_P_USB_SS3_TC1 154 /*!< DMA.I2C1.SCL, CONN.USB_OTG2.PWR, LSIO.GPIO4.IO04 */ +#define SC_P_USB_SS3_TC2 155 /*!< DMA.I2C1.SDA, CONN.USB_OTG1.OC, LSIO.GPIO4.IO05 */ +#define SC_P_USB_SS3_TC3 156 /*!< DMA.I2C1.SDA, CONN.USB_OTG2.OC, LSIO.GPIO4.IO06 */ +#define SC_P_COMP_CTL_GPIO_3V3_USB3IO 157 /*!< */ +#define SC_P_USDHC1_RESET_B 158 /*!< CONN.USDHC1.RESET_B, LSIO.GPIO4.IO07 */ +#define SC_P_USDHC1_VSELECT 159 /*!< CONN.USDHC1.VSELECT, LSIO.GPIO4.IO08 */ +#define SC_P_USDHC2_RESET_B 160 /*!< CONN.USDHC2.RESET_B, LSIO.GPIO4.IO09 */ +#define SC_P_USDHC2_VSELECT 161 /*!< CONN.USDHC2.VSELECT, LSIO.GPIO4.IO10 */ +#define SC_P_USDHC2_WP 162 /*!< CONN.USDHC2.WP, LSIO.GPIO4.IO11 */ +#define SC_P_USDHC2_CD_B 163 /*!< CONN.USDHC2.CD_B, LSIO.GPIO4.IO12 */ +#define SC_P_COMP_CTL_GPIO_1V8_3V3_VSELSEP 164 /*!< */ +#define SC_P_ENET0_MDIO 165 /*!< CONN.ENET0.MDIO, DMA.I2C4.SDA, LSIO.GPIO4.IO13 */ +#define SC_P_ENET0_MDC 166 /*!< CONN.ENET0.MDC, DMA.I2C4.SCL, LSIO.GPIO4.IO14 */ +#define SC_P_ENET0_REFCLK_125M_25M 167 /*!< CONN.ENET0.REFCLK_125M_25M, CONN.ENET0.PPS, LSIO.GPIO4.IO15 */ +#define SC_P_ENET1_REFCLK_125M_25M 168 /*!< CONN.ENET1.REFCLK_125M_25M, CONN.ENET1.PPS, LSIO.GPIO4.IO16 */ +#define SC_P_ENET1_MDIO 169 /*!< CONN.ENET1.MDIO, DMA.I2C4.SDA, LSIO.GPIO4.IO17 */ +#define SC_P_ENET1_MDC 170 /*!< CONN.ENET1.MDC, DMA.I2C4.SCL, LSIO.GPIO4.IO18 */ +#define SC_P_COMP_CTL_GPIO_1V8_3V3_GPIOCT 171 /*!< */ +#define SC_P_QSPI1A_SS0_B 172 /*!< LSIO.QSPI1A.SS0_B, LSIO.GPIO4.IO19 */ +#define SC_P_QSPI1A_SS1_B 173 /*!< LSIO.QSPI1A.SS1_B, LSIO.QSPI1A.SCLK2, LSIO.GPIO4.IO20 */ +#define SC_P_QSPI1A_SCLK 174 /*!< LSIO.QSPI1A.SCLK, LSIO.GPIO4.IO21 */ +#define SC_P_QSPI1A_DQS 175 /*!< LSIO.QSPI1A.DQS, LSIO.GPIO4.IO22 */ +#define SC_P_QSPI1A_DATA3 176 /*!< LSIO.QSPI1A.DATA3, DMA.I2C1.SDA, CONN.USB_OTG1.OC, LSIO.GPIO4.IO23 */ +#define SC_P_QSPI1A_DATA2 177 /*!< LSIO.QSPI1A.DATA2, DMA.I2C1.SCL, CONN.USB_OTG2.PWR, LSIO.GPIO4.IO24 */ +#define SC_P_QSPI1A_DATA1 178 /*!< LSIO.QSPI1A.DATA1, DMA.I2C1.SDA, CONN.USB_OTG2.OC, LSIO.GPIO4.IO25 */ +#define SC_P_QSPI1A_DATA0 179 /*!< LSIO.QSPI1A.DATA0, LSIO.GPIO4.IO26 */ +#define SC_P_COMP_CTL_GPIO_1V8_3V3_QSPI1 180 /*!< */ +#define SC_P_QSPI0A_DATA0 181 /*!< LSIO.QSPI0A.DATA0 */ +#define SC_P_QSPI0A_DATA1 182 /*!< LSIO.QSPI0A.DATA1 */ +#define SC_P_QSPI0A_DATA2 183 /*!< LSIO.QSPI0A.DATA2 */ +#define SC_P_QSPI0A_DATA3 184 /*!< LSIO.QSPI0A.DATA3 */ +#define SC_P_QSPI0A_DQS 185 /*!< LSIO.QSPI0A.DQS */ +#define SC_P_QSPI0A_SS0_B 186 /*!< LSIO.QSPI0A.SS0_B */ +#define SC_P_QSPI0A_SS1_B 187 /*!< LSIO.QSPI0A.SS1_B, LSIO.QSPI0A.SCLK2 */ +#define SC_P_QSPI0A_SCLK 188 /*!< LSIO.QSPI0A.SCLK */ +#define SC_P_QSPI0B_SCLK 189 /*!< LSIO.QSPI0B.SCLK */ +#define SC_P_QSPI0B_DATA0 190 /*!< LSIO.QSPI0B.DATA0 */ +#define SC_P_QSPI0B_DATA1 191 /*!< LSIO.QSPI0B.DATA1 */ +#define SC_P_QSPI0B_DATA2 192 /*!< LSIO.QSPI0B.DATA2 */ +#define SC_P_QSPI0B_DATA3 193 /*!< LSIO.QSPI0B.DATA3 */ +#define SC_P_QSPI0B_DQS 194 /*!< LSIO.QSPI0B.DQS */ +#define SC_P_QSPI0B_SS0_B 195 /*!< LSIO.QSPI0B.SS0_B */ +#define SC_P_QSPI0B_SS1_B 196 /*!< LSIO.QSPI0B.SS1_B, LSIO.QSPI0B.SCLK2 */ +#define SC_P_COMP_CTL_GPIO_1V8_3V3_QSPI0 197 /*!< */ +#define SC_P_PCIE_CTRL0_CLKREQ_B 198 /*!< HSIO.PCIE0.CLKREQ_B, LSIO.GPIO4.IO27 */ +#define SC_P_PCIE_CTRL0_WAKE_B 199 /*!< HSIO.PCIE0.WAKE_B, LSIO.GPIO4.IO28 */ +#define SC_P_PCIE_CTRL0_PERST_B 200 /*!< HSIO.PCIE0.PERST_B, LSIO.GPIO4.IO29 */ +#define SC_P_PCIE_CTRL1_CLKREQ_B 201 /*!< HSIO.PCIE1.CLKREQ_B, DMA.I2C1.SDA, CONN.USB_OTG2.OC, LSIO.GPIO4.IO30 */ +#define SC_P_PCIE_CTRL1_WAKE_B 202 /*!< HSIO.PCIE1.WAKE_B, DMA.I2C1.SCL, CONN.USB_OTG2.PWR, LSIO.GPIO4.IO31 */ +#define SC_P_PCIE_CTRL1_PERST_B 203 /*!< HSIO.PCIE1.PERST_B, DMA.I2C1.SCL, CONN.USB_OTG1.PWR, LSIO.GPIO5.IO00 */ +#define SC_P_COMP_CTL_GPIO_1V8_3V3_PCIESEP 204 /*!< */ +#define SC_P_USB_HSIC0_DATA 205 /*!< CONN.USB_HSIC0.DATA, DMA.I2C1.SDA, LSIO.GPIO5.IO01 */ +#define SC_P_USB_HSIC0_STROBE 206 /*!< CONN.USB_HSIC0.STROBE, DMA.I2C1.SCL, LSIO.GPIO5.IO02 */ +#define SC_P_CALIBRATION_0_HSIC 207 /*!< */ +#define SC_P_CALIBRATION_1_HSIC 208 /*!< */ +#define SC_P_EMMC0_CLK 209 /*!< CONN.EMMC0.CLK, CONN.NAND.READY_B */ +#define SC_P_EMMC0_CMD 210 /*!< CONN.EMMC0.CMD, CONN.NAND.DQS, AUD.MQS.R, LSIO.GPIO5.IO03 */ +#define SC_P_EMMC0_DATA0 211 /*!< CONN.EMMC0.DATA0, CONN.NAND.DATA00, LSIO.GPIO5.IO04 */ +#define SC_P_EMMC0_DATA1 212 /*!< CONN.EMMC0.DATA1, CONN.NAND.DATA01, LSIO.GPIO5.IO05 */ +#define SC_P_EMMC0_DATA2 213 /*!< CONN.EMMC0.DATA2, CONN.NAND.DATA02, LSIO.GPIO5.IO06 */ +#define SC_P_EMMC0_DATA3 214 /*!< CONN.EMMC0.DATA3, CONN.NAND.DATA03, LSIO.GPIO5.IO07 */ +#define SC_P_EMMC0_DATA4 215 /*!< CONN.EMMC0.DATA4, CONN.NAND.DATA04, LSIO.GPIO5.IO08 */ +#define SC_P_EMMC0_DATA5 216 /*!< CONN.EMMC0.DATA5, CONN.NAND.DATA05, LSIO.GPIO5.IO09 */ +#define SC_P_EMMC0_DATA6 217 /*!< CONN.EMMC0.DATA6, CONN.NAND.DATA06, LSIO.GPIO5.IO10 */ +#define SC_P_EMMC0_DATA7 218 /*!< CONN.EMMC0.DATA7, CONN.NAND.DATA07, LSIO.GPIO5.IO11 */ +#define SC_P_EMMC0_STROBE 219 /*!< CONN.EMMC0.STROBE, CONN.NAND.CLE, LSIO.GPIO5.IO12 */ +#define SC_P_EMMC0_RESET_B 220 /*!< CONN.EMMC0.RESET_B, CONN.NAND.WP_B, CONN.USDHC1.VSELECT, LSIO.GPIO5.IO13 */ +#define SC_P_COMP_CTL_GPIO_1V8_3V3_SD1FIX 221 /*!< */ +#define SC_P_USDHC1_CLK 222 /*!< CONN.USDHC1.CLK, AUD.MQS.R */ +#define SC_P_USDHC1_CMD 223 /*!< CONN.USDHC1.CMD, AUD.MQS.L, LSIO.GPIO5.IO14 */ +#define SC_P_USDHC1_DATA0 224 /*!< CONN.USDHC1.DATA0, CONN.NAND.RE_N, LSIO.GPIO5.IO15 */ +#define SC_P_USDHC1_DATA1 225 /*!< CONN.USDHC1.DATA1, CONN.NAND.RE_P, LSIO.GPIO5.IO16 */ +#define SC_P_CTL_NAND_RE_P_N 226 /*!< */ +#define SC_P_USDHC1_DATA2 227 /*!< CONN.USDHC1.DATA2, CONN.NAND.DQS_N, LSIO.GPIO5.IO17 */ +#define SC_P_USDHC1_DATA3 228 /*!< CONN.USDHC1.DATA3, CONN.NAND.DQS_P, LSIO.GPIO5.IO18 */ +#define SC_P_CTL_NAND_DQS_P_N 229 /*!< */ +#define SC_P_USDHC1_DATA4 230 /*!< CONN.USDHC1.DATA4, CONN.NAND.CE0_B, AUD.MQS.R, LSIO.GPIO5.IO19 */ +#define SC_P_USDHC1_DATA5 231 /*!< CONN.USDHC1.DATA5, CONN.NAND.RE_B, AUD.MQS.L, LSIO.GPIO5.IO20 */ +#define SC_P_USDHC1_DATA6 232 /*!< CONN.USDHC1.DATA6, CONN.NAND.WE_B, CONN.USDHC1.WP, LSIO.GPIO5.IO21 */ +#define SC_P_USDHC1_DATA7 233 /*!< CONN.USDHC1.DATA7, CONN.NAND.ALE, CONN.USDHC1.CD_B, LSIO.GPIO5.IO22 */ +#define SC_P_USDHC1_STROBE 234 /*!< CONN.USDHC1.STROBE, CONN.NAND.CE1_B, CONN.USDHC1.RESET_B, LSIO.GPIO5.IO23 */ +#define SC_P_COMP_CTL_GPIO_1V8_3V3_VSEL2 235 /*!< */ +#define SC_P_USDHC2_CLK 236 /*!< CONN.USDHC2.CLK, AUD.MQS.R, LSIO.GPIO5.IO24 */ +#define SC_P_USDHC2_CMD 237 /*!< CONN.USDHC2.CMD, AUD.MQS.L, LSIO.GPIO5.IO25 */ +#define SC_P_USDHC2_DATA0 238 /*!< CONN.USDHC2.DATA0, DMA.UART4.RX, LSIO.GPIO5.IO26 */ +#define SC_P_USDHC2_DATA1 239 /*!< CONN.USDHC2.DATA1, DMA.UART4.TX, LSIO.GPIO5.IO27 */ +#define SC_P_USDHC2_DATA2 240 /*!< CONN.USDHC2.DATA2, DMA.UART4.CTS_B, LSIO.GPIO5.IO28 */ +#define SC_P_USDHC2_DATA3 241 /*!< CONN.USDHC2.DATA3, DMA.UART4.RTS_B, LSIO.GPIO5.IO29 */ +#define SC_P_COMP_CTL_GPIO_1V8_3V3_VSEL3 242 /*!< */ +#define SC_P_ENET0_RGMII_TXC 243 /*!< CONN.ENET0.RGMII_TXC, CONN.ENET0.RCLK50M_OUT, CONN.ENET0.RCLK50M_IN, LSIO.GPIO5.IO30 */ +#define SC_P_ENET0_RGMII_TX_CTL 244 /*!< CONN.ENET0.RGMII_TX_CTL, LSIO.GPIO5.IO31 */ +#define SC_P_ENET0_RGMII_TXD0 245 /*!< CONN.ENET0.RGMII_TXD0, LSIO.GPIO6.IO00 */ +#define SC_P_ENET0_RGMII_TXD1 246 /*!< CONN.ENET0.RGMII_TXD1, LSIO.GPIO6.IO01 */ +#define SC_P_ENET0_RGMII_TXD2 247 /*!< CONN.ENET0.RGMII_TXD2, DMA.UART3.TX, VPU.TSI_S1.VID, LSIO.GPIO6.IO02 */ +#define SC_P_ENET0_RGMII_TXD3 248 /*!< CONN.ENET0.RGMII_TXD3, DMA.UART3.RTS_B, VPU.TSI_S1.SYNC, LSIO.GPIO6.IO03 */ +#define SC_P_ENET0_RGMII_RXC 249 /*!< CONN.ENET0.RGMII_RXC, DMA.UART3.CTS_B, VPU.TSI_S1.DATA, LSIO.GPIO6.IO04 */ +#define SC_P_ENET0_RGMII_RX_CTL 250 /*!< CONN.ENET0.RGMII_RX_CTL, VPU.TSI_S0.VID, LSIO.GPIO6.IO05 */ +#define SC_P_ENET0_RGMII_RXD0 251 /*!< CONN.ENET0.RGMII_RXD0, VPU.TSI_S0.SYNC, LSIO.GPIO6.IO06 */ +#define SC_P_ENET0_RGMII_RXD1 252 /*!< CONN.ENET0.RGMII_RXD1, VPU.TSI_S0.DATA, LSIO.GPIO6.IO07 */ +#define SC_P_ENET0_RGMII_RXD2 253 /*!< CONN.ENET0.RGMII_RXD2, CONN.ENET0.RMII_RX_ER, VPU.TSI_S0.CLK, LSIO.GPIO6.IO08 */ +#define SC_P_ENET0_RGMII_RXD3 254 /*!< CONN.ENET0.RGMII_RXD3, DMA.UART3.RX, VPU.TSI_S1.CLK, LSIO.GPIO6.IO09 */ +#define SC_P_COMP_CTL_GPIO_1V8_3V3_ENET_ENETB 255 /*!< */ +#define SC_P_ENET1_RGMII_TXC 256 /*!< CONN.ENET1.RGMII_TXC, CONN.ENET1.RCLK50M_OUT, CONN.ENET1.RCLK50M_IN, LSIO.GPIO6.IO10 */ +#define SC_P_ENET1_RGMII_TX_CTL 257 /*!< CONN.ENET1.RGMII_TX_CTL, LSIO.GPIO6.IO11 */ +#define SC_P_ENET1_RGMII_TXD0 258 /*!< CONN.ENET1.RGMII_TXD0, LSIO.GPIO6.IO12 */ +#define SC_P_ENET1_RGMII_TXD1 259 /*!< CONN.ENET1.RGMII_TXD1, LSIO.GPIO6.IO13 */ +#define SC_P_ENET1_RGMII_TXD2 260 /*!< CONN.ENET1.RGMII_TXD2, DMA.UART3.TX, VPU.TSI_S1.VID, LSIO.GPIO6.IO14 */ +#define SC_P_ENET1_RGMII_TXD3 261 /*!< CONN.ENET1.RGMII_TXD3, DMA.UART3.RTS_B, VPU.TSI_S1.SYNC, LSIO.GPIO6.IO15 */ +#define SC_P_ENET1_RGMII_RXC 262 /*!< CONN.ENET1.RGMII_RXC, DMA.UART3.CTS_B, VPU.TSI_S1.DATA, LSIO.GPIO6.IO16 */ +#define SC_P_ENET1_RGMII_RX_CTL 263 /*!< CONN.ENET1.RGMII_RX_CTL, VPU.TSI_S0.VID, LSIO.GPIO6.IO17 */ +#define SC_P_ENET1_RGMII_RXD0 264 /*!< CONN.ENET1.RGMII_RXD0, VPU.TSI_S0.SYNC, LSIO.GPIO6.IO18 */ +#define SC_P_ENET1_RGMII_RXD1 265 /*!< CONN.ENET1.RGMII_RXD1, VPU.TSI_S0.DATA, LSIO.GPIO6.IO19 */ +#define SC_P_ENET1_RGMII_RXD2 266 /*!< CONN.ENET1.RGMII_RXD2, CONN.ENET1.RMII_RX_ER, VPU.TSI_S0.CLK, LSIO.GPIO6.IO20 */ +#define SC_P_ENET1_RGMII_RXD3 267 /*!< CONN.ENET1.RGMII_RXD3, DMA.UART3.RX, VPU.TSI_S1.CLK, LSIO.GPIO6.IO21 */ +#define SC_P_COMP_CTL_GPIO_1V8_3V3_ENET_ENETA 268 /*!< */ +/*@}*/ + +#endif /* SC_PADS_H */ + diff --git a/arch/arm/include/asm/arch-imx8/imx8qxp_pads.h b/arch/arm/include/asm/arch-imx8/imx8qxp_pads.h new file mode 100644 index 0000000000..8db40c549a --- /dev/null +++ b/arch/arm/include/asm/arch-imx8/imx8qxp_pads.h @@ -0,0 +1,200 @@ +/* + * Copyright (C) 2016 Freescale Semiconductor, Inc. + * Copyright 2017-2018 NXP + * + * SPDX-License-Identifier: GPL-2.0+ + */ + +/*! + * Header file used to configure SoC pad list. + */ + +#ifndef SC_PADS_H +#define SC_PADS_H + +/* Includes */ + +/* Defines */ + +/*! + * @name Pad Definitions + */ +/*@{*/ +#define SC_P_PCIE_CTRL0_PERST_B 0 /*!< HSIO.PCIE0.PERST_B, LSIO.GPIO4.IO00 */ +#define SC_P_PCIE_CTRL0_CLKREQ_B 1 /*!< HSIO.PCIE0.CLKREQ_B, LSIO.GPIO4.IO01 */ +#define SC_P_PCIE_CTRL0_WAKE_B 2 /*!< HSIO.PCIE0.WAKE_B, LSIO.GPIO4.IO02 */ +#define SC_P_COMP_CTL_GPIO_1V8_3V3_PCIESEP 3 /*!< */ +#define SC_P_USB_SS3_TC0 4 /*!< ADMA.I2C1.SCL, CONN.USB_OTG1.PWR, CONN.USB_OTG2.PWR, LSIO.GPIO4.IO03 */ +#define SC_P_USB_SS3_TC1 5 /*!< ADMA.I2C1.SCL, CONN.USB_OTG2.PWR, LSIO.GPIO4.IO04 */ +#define SC_P_USB_SS3_TC2 6 /*!< ADMA.I2C1.SDA, CONN.USB_OTG1.OC, CONN.USB_OTG2.OC, LSIO.GPIO4.IO05 */ +#define SC_P_USB_SS3_TC3 7 /*!< ADMA.I2C1.SDA, CONN.USB_OTG2.OC, LSIO.GPIO4.IO06 */ +#define SC_P_COMP_CTL_GPIO_3V3_USB3IO 8 /*!< */ +#define SC_P_EMMC0_CLK 9 /*!< CONN.EMMC0.CLK, CONN.NAND.READY_B, LSIO.GPIO4.IO07 */ +#define SC_P_EMMC0_CMD 10 /*!< CONN.EMMC0.CMD, CONN.NAND.DQS, LSIO.GPIO4.IO08 */ +#define SC_P_EMMC0_DATA0 11 /*!< CONN.EMMC0.DATA0, CONN.NAND.DATA00, LSIO.GPIO4.IO09 */ +#define SC_P_EMMC0_DATA1 12 /*!< CONN.EMMC0.DATA1, CONN.NAND.DATA01, LSIO.GPIO4.IO10 */ +#define SC_P_EMMC0_DATA2 13 /*!< CONN.EMMC0.DATA2, CONN.NAND.DATA02, LSIO.GPIO4.IO11 */ +#define SC_P_EMMC0_DATA3 14 /*!< CONN.EMMC0.DATA3, CONN.NAND.DATA03, LSIO.GPIO4.IO12 */ +#define SC_P_COMP_CTL_GPIO_1V8_3V3_SD1FIX0 15 /*!< */ +#define SC_P_EMMC0_DATA4 16 /*!< CONN.EMMC0.DATA4, CONN.NAND.DATA04, CONN.EMMC0.WP, LSIO.GPIO4.IO13 */ +#define SC_P_EMMC0_DATA5 17 /*!< CONN.EMMC0.DATA5, CONN.NAND.DATA05, CONN.EMMC0.VSELECT, LSIO.GPIO4.IO14 */ +#define SC_P_EMMC0_DATA6 18 /*!< CONN.EMMC0.DATA6, CONN.NAND.DATA06, CONN.MLB.CLK, LSIO.GPIO4.IO15 */ +#define SC_P_EMMC0_DATA7 19 /*!< CONN.EMMC0.DATA7, CONN.NAND.DATA07, CONN.MLB.SIG, LSIO.GPIO4.IO16 */ +#define SC_P_EMMC0_STROBE 20 /*!< CONN.EMMC0.STROBE, CONN.NAND.CLE, CONN.MLB.DATA, LSIO.GPIO4.IO17 */ +#define SC_P_EMMC0_RESET_B 21 /*!< CONN.EMMC0.RESET_B, CONN.NAND.WP_B, LSIO.GPIO4.IO18 */ +#define SC_P_COMP_CTL_GPIO_1V8_3V3_SD1FIX1 22 /*!< */ +#define SC_P_USDHC1_RESET_B 23 /*!< CONN.USDHC1.RESET_B, CONN.NAND.RE_N, ADMA.SPI2.SCK, LSIO.GPIO4.IO19 */ +#define SC_P_USDHC1_VSELECT 24 /*!< CONN.USDHC1.VSELECT, CONN.NAND.RE_P, ADMA.SPI2.SDO, CONN.NAND.RE_B, LSIO.GPIO4.IO20 */ +#define SC_P_CTL_NAND_RE_P_N 25 /*!< */ +#define SC_P_USDHC1_WP 26 /*!< CONN.USDHC1.WP, CONN.NAND.DQS_N, ADMA.SPI2.SDI, LSIO.GPIO4.IO21 */ +#define SC_P_USDHC1_CD_B 27 /*!< CONN.USDHC1.CD_B, CONN.NAND.DQS_P, ADMA.SPI2.CS0, CONN.NAND.DQS, LSIO.GPIO4.IO22 */ +#define SC_P_CTL_NAND_DQS_P_N 28 /*!< */ +#define SC_P_COMP_CTL_GPIO_1V8_3V3_VSELSEP 29 /*!< */ +#define SC_P_USDHC1_CLK 30 /*!< CONN.USDHC1.CLK, ADMA.UART3.RX, LSIO.GPIO4.IO23 */ +#define SC_P_USDHC1_CMD 31 /*!< CONN.USDHC1.CMD, CONN.NAND.CE0_B, ADMA.MQS.R, LSIO.GPIO4.IO24 */ +#define SC_P_USDHC1_DATA0 32 /*!< CONN.USDHC1.DATA0, CONN.NAND.CE1_B, ADMA.MQS.L, LSIO.GPIO4.IO25 */ +#define SC_P_USDHC1_DATA1 33 /*!< CONN.USDHC1.DATA1, CONN.NAND.RE_B, ADMA.UART3.TX, LSIO.GPIO4.IO26 */ +#define SC_P_USDHC1_DATA2 34 /*!< CONN.USDHC1.DATA2, CONN.NAND.WE_B, ADMA.UART3.CTS_B, LSIO.GPIO4.IO27 */ +#define SC_P_USDHC1_DATA3 35 /*!< CONN.USDHC1.DATA3, CONN.NAND.ALE, ADMA.UART3.RTS_B, LSIO.GPIO4.IO28 */ +#define SC_P_COMP_CTL_GPIO_1V8_3V3_VSEL3 36 /*!< */ +#define SC_P_ENET0_RGMII_TXC 37 /*!< CONN.ENET0.RGMII_TXC, CONN.ENET0.RCLK50M_OUT, CONN.ENET0.RCLK50M_IN, CONN.NAND.CE1_B, LSIO.GPIO4.IO29 */ +#define SC_P_ENET0_RGMII_TX_CTL 38 /*!< CONN.ENET0.RGMII_TX_CTL, CONN.USDHC1.RESET_B, LSIO.GPIO4.IO30 */ +#define SC_P_ENET0_RGMII_TXD0 39 /*!< CONN.ENET0.RGMII_TXD0, CONN.USDHC1.VSELECT, LSIO.GPIO4.IO31 */ +#define SC_P_ENET0_RGMII_TXD1 40 /*!< CONN.ENET0.RGMII_TXD1, CONN.USDHC1.WP, LSIO.GPIO5.IO00 */ +#define SC_P_ENET0_RGMII_TXD2 41 /*!< CONN.ENET0.RGMII_TXD2, CONN.MLB.CLK, CONN.NAND.CE0_B, CONN.USDHC1.CD_B, LSIO.GPIO5.IO01 */ +#define SC_P_ENET0_RGMII_TXD3 42 /*!< CONN.ENET0.RGMII_TXD3, CONN.MLB.SIG, CONN.NAND.RE_B, LSIO.GPIO5.IO02 */ +#define SC_P_COMP_CTL_GPIO_1V8_3V3_ENET_ENETB0 43 /*!< */ +#define SC_P_ENET0_RGMII_RXC 44 /*!< CONN.ENET0.RGMII_RXC, CONN.MLB.DATA, CONN.NAND.WE_B, CONN.USDHC1.CLK, LSIO.GPIO5.IO03 */ +#define SC_P_ENET0_RGMII_RX_CTL 45 /*!< CONN.ENET0.RGMII_RX_CTL, CONN.USDHC1.CMD, LSIO.GPIO5.IO04 */ +#define SC_P_ENET0_RGMII_RXD0 46 /*!< CONN.ENET0.RGMII_RXD0, CONN.USDHC1.DATA0, LSIO.GPIO5.IO05 */ +#define SC_P_ENET0_RGMII_RXD1 47 /*!< CONN.ENET0.RGMII_RXD1, CONN.USDHC1.DATA1, LSIO.GPIO5.IO06 */ +#define SC_P_ENET0_RGMII_RXD2 48 /*!< CONN.ENET0.RGMII_RXD2, CONN.ENET0.RMII_RX_ER, CONN.USDHC1.DATA2, LSIO.GPIO5.IO07 */ +#define SC_P_ENET0_RGMII_RXD3 49 /*!< CONN.ENET0.RGMII_RXD3, CONN.NAND.ALE, CONN.USDHC1.DATA3, LSIO.GPIO5.IO08 */ +#define SC_P_COMP_CTL_GPIO_1V8_3V3_ENET_ENETB1 50 /*!< */ +#define SC_P_ENET0_REFCLK_125M_25M 51 /*!< CONN.ENET0.REFCLK_125M_25M, CONN.ENET0.PPS, CONN.ENET1.PPS, LSIO.GPIO5.IO09 */ +#define SC_P_ENET0_MDIO 52 /*!< CONN.ENET0.MDIO, ADMA.I2C3.SDA, CONN.ENET1.MDIO, LSIO.GPIO5.IO10 */ +#define SC_P_ENET0_MDC 53 /*!< CONN.ENET0.MDC, ADMA.I2C3.SCL, CONN.ENET1.MDC, LSIO.GPIO5.IO11 */ +#define SC_P_COMP_CTL_GPIO_1V8_3V3_GPIOCT 54 /*!< */ +#define SC_P_ESAI0_FSR 55 /*!< ADMA.ESAI0.FSR, CONN.ENET1.RCLK50M_OUT, ADMA.LCDIF.D00, CONN.ENET1.RGMII_TXC, CONN.ENET1.RCLK50M_IN */ +#define SC_P_ESAI0_FST 56 /*!< ADMA.ESAI0.FST, CONN.MLB.CLK, ADMA.LCDIF.D01, CONN.ENET1.RGMII_TXD2, LSIO.GPIO0.IO01 */ +#define SC_P_ESAI0_SCKR 57 /*!< ADMA.ESAI0.SCKR, ADMA.LCDIF.D02, CONN.ENET1.RGMII_TX_CTL, LSIO.GPIO0.IO02 */ +#define SC_P_ESAI0_SCKT 58 /*!< ADMA.ESAI0.SCKT, CONN.MLB.SIG, ADMA.LCDIF.D03, CONN.ENET1.RGMII_TXD3, LSIO.GPIO0.IO03 */ +#define SC_P_ESAI0_TX0 59 /*!< ADMA.ESAI0.TX0, CONN.MLB.DATA, ADMA.LCDIF.D04, CONN.ENET1.RGMII_RXC, LSIO.GPIO0.IO04 */ +#define SC_P_ESAI0_TX1 60 /*!< ADMA.ESAI0.TX1, ADMA.LCDIF.D05, CONN.ENET1.RGMII_RXD3, LSIO.GPIO0.IO05 */ +#define SC_P_ESAI0_TX2_RX3 61 /*!< ADMA.ESAI0.TX2_RX3, CONN.ENET1.RMII_RX_ER, ADMA.LCDIF.D06, CONN.ENET1.RGMII_RXD2, LSIO.GPIO0.IO06 */ +#define SC_P_ESAI0_TX3_RX2 62 /*!< ADMA.ESAI0.TX3_RX2, ADMA.LCDIF.D07, CONN.ENET1.RGMII_RXD1, LSIO.GPIO0.IO07 */ +#define SC_P_ESAI0_TX4_RX1 63 /*!< ADMA.ESAI0.TX4_RX1, ADMA.LCDIF.D08, CONN.ENET1.RGMII_TXD0, LSIO.GPIO0.IO08 */ +#define SC_P_ESAI0_TX5_RX0 64 /*!< ADMA.ESAI0.TX5_RX0, ADMA.LCDIF.D09, CONN.ENET1.RGMII_TXD1, LSIO.GPIO0.IO09 */ +#define SC_P_SPDIF0_RX 65 /*!< ADMA.SPDIF0.RX, ADMA.MQS.R, ADMA.LCDIF.D10, CONN.ENET1.RGMII_RXD0, LSIO.GPIO0.IO10 */ +#define SC_P_SPDIF0_TX 66 /*!< ADMA.SPDIF0.TX, ADMA.MQS.L, ADMA.LCDIF.D11, CONN.ENET1.RGMII_RX_CTL, LSIO.GPIO0.IO11 */ +#define SC_P_SPDIF0_EXT_CLK 67 /*!< ADMA.SPDIF0.EXT_CLK, ADMA.LCDIF.D12, CONN.ENET1.REFCLK_125M_25M, LSIO.GPIO0.IO12 */ +#define SC_P_COMP_CTL_GPIO_1V8_3V3_GPIORHB 68 /*!< */ +#define SC_P_SPI3_SCK 69 /*!< ADMA.SPI3.SCK, ADMA.LCDIF.D13, LSIO.GPIO0.IO13 */ +#define SC_P_SPI3_SDO 70 /*!< ADMA.SPI3.SDO, ADMA.LCDIF.D14, LSIO.GPIO0.IO14 */ +#define SC_P_SPI3_SDI 71 /*!< ADMA.SPI3.SDI, ADMA.LCDIF.D15, LSIO.GPIO0.IO15 */ +#define SC_P_SPI3_CS0 72 /*!< ADMA.SPI3.CS0, ADMA.ACM.MCLK_OUT1, ADMA.LCDIF.HSYNC, LSIO.GPIO0.IO16 */ +#define SC_P_SPI3_CS1 73 /*!< ADMA.SPI3.CS1, ADMA.I2C3.SCL, ADMA.LCDIF.RESET, ADMA.SPI2.CS0, ADMA.LCDIF.D16 */ +#define SC_P_MCLK_IN1 74 /*!< ADMA.ACM.MCLK_IN1, ADMA.I2C3.SDA, ADMA.LCDIF.EN, ADMA.SPI2.SCK, ADMA.LCDIF.D17 */ +#define SC_P_MCLK_IN0 75 /*!< ADMA.ACM.MCLK_IN0, ADMA.ESAI0.RX_HF_CLK, ADMA.LCDIF.VSYNC, ADMA.SPI2.SDI, LSIO.GPIO0.IO19 */ +#define SC_P_MCLK_OUT0 76 /*!< ADMA.ACM.MCLK_OUT0, ADMA.ESAI0.TX_HF_CLK, ADMA.LCDIF.CLK, ADMA.SPI2.SDO, LSIO.GPIO0.IO20 */ +#define SC_P_UART1_TX 77 /*!< ADMA.UART1.TX, LSIO.PWM0.OUT, LSIO.GPT0.CAPTURE, LSIO.GPIO0.IO21 */ +#define SC_P_UART1_RX 78 /*!< ADMA.UART1.RX, LSIO.PWM1.OUT, LSIO.GPT0.COMPARE, LSIO.GPT1.CLK, LSIO.GPIO0.IO22 */ +#define SC_P_UART1_RTS_B 79 /*!< ADMA.UART1.RTS_B, LSIO.PWM2.OUT, ADMA.LCDIF.D16, LSIO.GPT1.CAPTURE, LSIO.GPT0.CLK */ +#define SC_P_UART1_CTS_B 80 /*!< ADMA.UART1.CTS_B, LSIO.PWM3.OUT, ADMA.LCDIF.D17, LSIO.GPT1.COMPARE, LSIO.GPIO0.IO24 */ +#define SC_P_COMP_CTL_GPIO_1V8_3V3_GPIORHK 81 /*!< */ +#define SC_P_SAI0_TXD 82 /*!< ADMA.SAI0.TXD, ADMA.SAI1.RXC, ADMA.SPI1.SDO, ADMA.LCDIF.D18, LSIO.GPIO0.IO25 */ +#define SC_P_SAI0_TXC 83 /*!< ADMA.SAI0.TXC, ADMA.SAI1.TXD, ADMA.SPI1.SDI, ADMA.LCDIF.D19, LSIO.GPIO0.IO26 */ +#define SC_P_SAI0_RXD 84 /*!< ADMA.SAI0.RXD, ADMA.SAI1.RXFS, ADMA.SPI1.CS0, ADMA.LCDIF.D20, LSIO.GPIO0.IO27 */ +#define SC_P_SAI0_TXFS 85 /*!< ADMA.SAI0.TXFS, ADMA.SPI2.CS1, ADMA.SPI1.SCK, LSIO.GPIO0.IO28 */ +#define SC_P_SAI1_RXD 86 /*!< ADMA.SAI1.RXD, ADMA.SAI0.RXFS, ADMA.SPI1.CS1, ADMA.LCDIF.D21, LSIO.GPIO0.IO29 */ +#define SC_P_SAI1_RXC 87 /*!< ADMA.SAI1.RXC, ADMA.SAI1.TXC, ADMA.LCDIF.D22, LSIO.GPIO0.IO30 */ +#define SC_P_SAI1_RXFS 88 /*!< ADMA.SAI1.RXFS, ADMA.SAI1.TXFS, ADMA.LCDIF.D23, LSIO.GPIO0.IO31 */ +#define SC_P_SPI2_CS0 89 /*!< ADMA.SPI2.CS0, LSIO.GPIO1.IO00 */ +#define SC_P_SPI2_SDO 90 /*!< ADMA.SPI2.SDO, LSIO.GPIO1.IO01 */ +#define SC_P_SPI2_SDI 91 /*!< ADMA.SPI2.SDI, LSIO.GPIO1.IO02 */ +#define SC_P_SPI2_SCK 92 /*!< ADMA.SPI2.SCK, LSIO.GPIO1.IO03 */ +#define SC_P_SPI0_SCK 93 /*!< ADMA.SPI0.SCK, ADMA.SAI0.TXC, M40.I2C0.SCL, M40.GPIO0.IO00, LSIO.GPIO1.IO04 */ +#define SC_P_SPI0_SDI 94 /*!< ADMA.SPI0.SDI, ADMA.SAI0.TXD, M40.TPM0.CH0, M40.GPIO0.IO02, LSIO.GPIO1.IO05 */ +#define SC_P_SPI0_SDO 95 /*!< ADMA.SPI0.SDO, ADMA.SAI0.TXFS, M40.I2C0.SDA, M40.GPIO0.IO01, LSIO.GPIO1.IO06 */ +#define SC_P_SPI0_CS1 96 /*!< ADMA.SPI0.CS1, ADMA.SAI0.RXC, ADMA.SAI1.TXD, ADMA.LCD_PWM0.OUT, LSIO.GPIO1.IO07 */ +#define SC_P_SPI0_CS0 97 /*!< ADMA.SPI0.CS0, ADMA.SAI0.RXD, M40.TPM0.CH1, M40.GPIO0.IO03, LSIO.GPIO1.IO08 */ +#define SC_P_COMP_CTL_GPIO_1V8_3V3_GPIORHT 98 /*!< */ +#define SC_P_ADC_IN1 99 /*!< ADMA.ADC.IN1, M40.I2C0.SDA, M40.GPIO0.IO01, LSIO.GPIO1.IO09 */ +#define SC_P_ADC_IN0 100 /*!< ADMA.ADC.IN0, M40.I2C0.SCL, M40.GPIO0.IO00, LSIO.GPIO1.IO10 */ +#define SC_P_ADC_IN3 101 /*!< ADMA.ADC.IN3, M40.UART0.TX, M40.GPIO0.IO03, ADMA.ACM.MCLK_OUT0, LSIO.GPIO1.IO11 */ +#define SC_P_ADC_IN2 102 /*!< ADMA.ADC.IN2, M40.UART0.RX, M40.GPIO0.IO02, ADMA.ACM.MCLK_IN0, LSIO.GPIO1.IO12 */ +#define SC_P_ADC_IN5 103 /*!< ADMA.ADC.IN5, M40.TPM0.CH1, M40.GPIO0.IO05, LSIO.GPIO1.IO13 */ +#define SC_P_ADC_IN4 104 /*!< ADMA.ADC.IN4, M40.TPM0.CH0, M40.GPIO0.IO04, LSIO.GPIO1.IO14 */ +#define SC_P_FLEXCAN0_RX 105 /*!< ADMA.FLEXCAN0.RX, ADMA.SAI2.RXC, ADMA.UART0.RTS_B, ADMA.SAI1.TXC, LSIO.GPIO1.IO15 */ +#define SC_P_FLEXCAN0_TX 106 /*!< ADMA.FLEXCAN0.TX, ADMA.SAI2.RXD, ADMA.UART0.CTS_B, ADMA.SAI1.TXFS, LSIO.GPIO1.IO16 */ +#define SC_P_FLEXCAN1_RX 107 /*!< ADMA.FLEXCAN1.RX, ADMA.SAI2.RXFS, ADMA.FTM.CH2, ADMA.SAI1.TXD, LSIO.GPIO1.IO17 */ +#define SC_P_FLEXCAN1_TX 108 /*!< ADMA.FLEXCAN1.TX, ADMA.SAI3.RXC, ADMA.DMA0.REQ_IN0, ADMA.SAI1.RXD, LSIO.GPIO1.IO18 */ +#define SC_P_FLEXCAN2_RX 109 /*!< ADMA.FLEXCAN2.RX, ADMA.SAI3.RXD, ADMA.UART3.RX, ADMA.SAI1.RXFS, LSIO.GPIO1.IO19 */ +#define SC_P_FLEXCAN2_TX 110 /*!< ADMA.FLEXCAN2.TX, ADMA.SAI3.RXFS, ADMA.UART3.TX, ADMA.SAI1.RXC, LSIO.GPIO1.IO20 */ +#define SC_P_UART0_RX 111 /*!< ADMA.UART0.RX, ADMA.MQS.R, ADMA.FLEXCAN0.RX, SCU.UART0.RX, LSIO.GPIO1.IO21 */ +#define SC_P_UART0_TX 112 /*!< ADMA.UART0.TX, ADMA.MQS.L, ADMA.FLEXCAN0.TX, SCU.UART0.TX, LSIO.GPIO1.IO22 */ +#define SC_P_UART2_TX 113 /*!< ADMA.UART2.TX, ADMA.FTM.CH1, ADMA.FLEXCAN1.TX, LSIO.GPIO1.IO23 */ +#define SC_P_UART2_RX 114 /*!< ADMA.UART2.RX, ADMA.FTM.CH0, ADMA.FLEXCAN1.RX, LSIO.GPIO1.IO24 */ +#define SC_P_COMP_CTL_GPIO_1V8_3V3_GPIOLH 115 /*!< */ +#define SC_P_MIPI_DSI0_I2C0_SCL 116 /*!< MIPI_DSI0.I2C0.SCL, MIPI_DSI1.GPIO0.IO02, LSIO.GPIO1.IO25 */ +#define SC_P_MIPI_DSI0_I2C0_SDA 117 /*!< MIPI_DSI0.I2C0.SDA, MIPI_DSI1.GPIO0.IO03, LSIO.GPIO1.IO26 */ +#define SC_P_MIPI_DSI0_GPIO0_00 118 /*!< MIPI_DSI0.GPIO0.IO00, ADMA.I2C1.SCL, MIPI_DSI0.PWM0.OUT, LSIO.GPIO1.IO27 */ +#define SC_P_MIPI_DSI0_GPIO0_01 119 /*!< MIPI_DSI0.GPIO0.IO01, ADMA.I2C1.SDA, LSIO.GPIO1.IO28 */ +#define SC_P_MIPI_DSI1_I2C0_SCL 120 /*!< MIPI_DSI1.I2C0.SCL, MIPI_DSI0.GPIO0.IO02, LSIO.GPIO1.IO29 */ +#define SC_P_MIPI_DSI1_I2C0_SDA 121 /*!< MIPI_DSI1.I2C0.SDA, MIPI_DSI0.GPIO0.IO03, LSIO.GPIO1.IO30 */ +#define SC_P_MIPI_DSI1_GPIO0_00 122 /*!< MIPI_DSI1.GPIO0.IO00, ADMA.I2C2.SCL, MIPI_DSI1.PWM0.OUT, LSIO.GPIO1.IO31 */ +#define SC_P_MIPI_DSI1_GPIO0_01 123 /*!< MIPI_DSI1.GPIO0.IO01, ADMA.I2C2.SDA, LSIO.GPIO2.IO00 */ +#define SC_P_COMP_CTL_GPIO_1V8_3V3_MIPIDSIGPIO 124 /*!< */ +#define SC_P_JTAG_TRST_B 125 /*!< SCU.JTAG.TRST_B, SCU.WDOG0.WDOG_OUT */ +#define SC_P_PMIC_I2C_SCL 126 /*!< SCU.PMIC_I2C.SCL, SCU.GPIO0.IOXX_PMIC_A35_ON, LSIO.GPIO2.IO01 */ +#define SC_P_PMIC_I2C_SDA 127 /*!< SCU.PMIC_I2C.SDA, SCU.GPIO0.IOXX_PMIC_GPU_ON, LSIO.GPIO2.IO02 */ +#define SC_P_PMIC_INT_B 128 /*!< SCU.DSC.PMIC_INT_B */ +#define SC_P_SCU_GPIO0_00 129 /*!< SCU.GPIO0.IO00, SCU.UART0.RX, M40.UART0.RX, ADMA.UART3.RX, LSIO.GPIO2.IO03 */ +#define SC_P_SCU_GPIO0_01 130 /*!< SCU.GPIO0.IO01, SCU.UART0.TX, M40.UART0.TX, ADMA.UART3.TX, SCU.WDOG0.WDOG_OUT */ +#define SC_P_SCU_PMIC_STANDBY 131 /*!< SCU.DSC.PMIC_STANDBY */ +#define SC_P_SCU_BOOT_MODE0 132 /*!< SCU.DSC.BOOT_MODE0 */ +#define SC_P_SCU_BOOT_MODE1 133 /*!< SCU.DSC.BOOT_MODE1 */ +#define SC_P_SCU_BOOT_MODE2 134 /*!< SCU.DSC.BOOT_MODE2, SCU.PMIC_I2C.SDA */ +#define SC_P_SCU_BOOT_MODE3 135 /*!< SCU.DSC.BOOT_MODE3, SCU.PMIC_I2C.SCL, SCU.DSC.RTC_CLOCK_OUTPUT_32K */ +#define SC_P_CSI_D00 136 /*!< CI_PI.D02, ADMA.SAI0.RXC */ +#define SC_P_CSI_D01 137 /*!< CI_PI.D03, ADMA.SAI0.RXD */ +#define SC_P_CSI_D02 138 /*!< CI_PI.D04, ADMA.SAI0.RXFS */ +#define SC_P_CSI_D03 139 /*!< CI_PI.D05, ADMA.SAI2.RXC */ +#define SC_P_CSI_D04 140 /*!< CI_PI.D06, ADMA.SAI2.RXD */ +#define SC_P_CSI_D05 141 /*!< CI_PI.D07, ADMA.SAI2.RXFS */ +#define SC_P_CSI_D06 142 /*!< CI_PI.D08, ADMA.SAI3.RXC */ +#define SC_P_CSI_D07 143 /*!< CI_PI.D09, ADMA.SAI3.RXD */ +#define SC_P_CSI_HSYNC 144 /*!< CI_PI.HSYNC, CI_PI.D00, ADMA.SAI3.RXFS */ +#define SC_P_CSI_VSYNC 145 /*!< CI_PI.VSYNC, CI_PI.D01 */ +#define SC_P_CSI_PCLK 146 /*!< CI_PI.PCLK, MIPI_CSI0.I2C0.SCL, ADMA.SPI1.SCK, LSIO.GPIO3.IO00 */ +#define SC_P_CSI_MCLK 147 /*!< CI_PI.MCLK, MIPI_CSI0.I2C0.SDA, ADMA.SPI1.SDO, LSIO.GPIO3.IO01 */ +#define SC_P_CSI_EN 148 /*!< CI_PI.EN, CI_PI.I2C.SCL, ADMA.I2C3.SCL, ADMA.SPI1.SDI, LSIO.GPIO3.IO02 */ +#define SC_P_CSI_RESET 149 /*!< CI_PI.RESET, CI_PI.I2C.SDA, ADMA.I2C3.SDA, ADMA.SPI1.CS0, LSIO.GPIO3.IO03 */ +#define SC_P_COMP_CTL_GPIO_1V8_3V3_GPIORHD 150 /*!< */ +#define SC_P_MIPI_CSI0_MCLK_OUT 151 /*!< MIPI_CSI0.ACM.MCLK_OUT, LSIO.GPIO3.IO04 */ +#define SC_P_MIPI_CSI0_I2C0_SCL 152 /*!< MIPI_CSI0.I2C0.SCL, MIPI_CSI0.GPIO0.IO02, LSIO.GPIO3.IO05 */ +#define SC_P_MIPI_CSI0_I2C0_SDA 153 /*!< MIPI_CSI0.I2C0.SDA, MIPI_CSI0.GPIO0.IO03, LSIO.GPIO3.IO06 */ +#define SC_P_MIPI_CSI0_GPIO0_01 154 /*!< MIPI_CSI0.GPIO0.IO01, ADMA.I2C0.SDA, LSIO.GPIO3.IO07 */ +#define SC_P_MIPI_CSI0_GPIO0_00 155 /*!< MIPI_CSI0.GPIO0.IO00, ADMA.I2C0.SCL, LSIO.GPIO3.IO08 */ +#define SC_P_QSPI0A_DATA0 156 /*!< LSIO.QSPI0A.DATA0, LSIO.GPIO3.IO09 */ +#define SC_P_QSPI0A_DATA1 157 /*!< LSIO.QSPI0A.DATA1, LSIO.GPIO3.IO10 */ +#define SC_P_QSPI0A_DATA2 158 /*!< LSIO.QSPI0A.DATA2, LSIO.GPIO3.IO11 */ +#define SC_P_QSPI0A_DATA3 159 /*!< LSIO.QSPI0A.DATA3, LSIO.GPIO3.IO12 */ +#define SC_P_QSPI0A_DQS 160 /*!< LSIO.QSPI0A.DQS, LSIO.GPIO3.IO13 */ +#define SC_P_QSPI0A_SS0_B 161 /*!< LSIO.QSPI0A.SS0_B, LSIO.GPIO3.IO14 */ +#define SC_P_QSPI0A_SS1_B 162 /*!< LSIO.QSPI0A.SS1_B, LSIO.GPIO3.IO15 */ +#define SC_P_QSPI0A_SCLK 163 /*!< LSIO.QSPI0A.SCLK, LSIO.GPIO3.IO16 */ +#define SC_P_COMP_CTL_GPIO_1V8_3V3_QSPI0A 164 /*!< */ +#define SC_P_QSPI0B_SCLK 165 /*!< LSIO.QSPI0B.SCLK, LSIO.QSPI1A.SCLK, LSIO.KPP0.COL0, LSIO.GPIO3.IO17 */ +#define SC_P_QSPI0B_DATA0 166 /*!< LSIO.QSPI0B.DATA0, LSIO.QSPI1A.DATA0, LSIO.KPP0.COL1, LSIO.GPIO3.IO18 */ +#define SC_P_QSPI0B_DATA1 167 /*!< LSIO.QSPI0B.DATA1, LSIO.QSPI1A.DATA1, LSIO.KPP0.COL2, LSIO.GPIO3.IO19 */ +#define SC_P_QSPI0B_DATA2 168 /*!< LSIO.QSPI0B.DATA2, LSIO.QSPI1A.DATA2, LSIO.KPP0.COL3, LSIO.GPIO3.IO20 */ +#define SC_P_QSPI0B_DATA3 169 /*!< LSIO.QSPI0B.DATA3, LSIO.QSPI1A.DATA3, LSIO.KPP0.ROW0, LSIO.GPIO3.IO21 */ +#define SC_P_QSPI0B_DQS 170 /*!< LSIO.QSPI0B.DQS, LSIO.QSPI1A.DQS, LSIO.KPP0.ROW1, LSIO.GPIO3.IO22 */ +#define SC_P_QSPI0B_SS0_B 171 /*!< LSIO.QSPI0B.SS0_B, LSIO.QSPI1A.SS0_B, LSIO.KPP0.ROW2, LSIO.GPIO3.IO23 */ +#define SC_P_QSPI0B_SS1_B 172 /*!< LSIO.QSPI0B.SS1_B, LSIO.QSPI1A.SS1_B, LSIO.KPP0.ROW3, LSIO.GPIO3.IO24 */ +#define SC_P_COMP_CTL_GPIO_1V8_3V3_QSPI0B 173 /*!< */ +/*@}*/ + +#endif /* SC_PADS_H */ + diff --git a/arch/arm/include/asm/arch-imx8/sci/ipc.h b/arch/arm/include/asm/arch-imx8/sci/ipc.h new file mode 100755 index 0000000000..3759ac4c45 --- /dev/null +++ b/arch/arm/include/asm/arch-imx8/sci/ipc.h @@ -0,0 +1,67 @@ +/* + * Copyright (C) 2016 Freescale Semiconductor, Inc. + * Copyright 2017-2018 NXP + * + * SPDX-License-Identifier: GPL-2.0+ + */ + +/*! + * Header file for the IPC implementation. + */ + +#ifndef SC_IPC_H +#define SC_IPC_H + +/* Includes */ + +#include + +/* Defines */ + +/* Types */ + +/* Functions */ + +/*! + * This function opens an IPC channel. + * + * @param[out] ipc return pointer for ipc handle + * @param[in] id id of channel to open + * + * @return Returns an error code (SC_ERR_NONE = success, SC_ERR_IPC + * otherwise). + * + * The \a id parameter is implementation specific. Could be an MU + * address, pointer to a driver path, channel index, etc. + */ +sc_err_t sc_ipc_open(sc_ipc_t *ipc, sc_ipc_id_t id); + +/*! + * This function closes an IPC channel. + * + * @param[in] ipc id of channel to close + */ +void sc_ipc_close(sc_ipc_t ipc); + +/*! + * This function reads a message from an IPC channel. + * + * @param[in] ipc id of channel read from + * @param[out] data pointer to message buffer to read + * + * This function will block if no message is available to be read. + */ +void sc_ipc_read(sc_ipc_t ipc, void *data); + +/*! + * This function writes a message to an IPC channel. + * + * @param[in] ipc id of channel to write to + * @param[in] data pointer to message buffer to write + * + * This function will block if the outgoing buffer is full. + */ +void sc_ipc_write(sc_ipc_t ipc, void *data); + +#endif /* SC_IPC_H */ + diff --git a/arch/arm/include/asm/arch-imx8/sci/rpc.h b/arch/arm/include/asm/arch-imx8/sci/rpc.h new file mode 100755 index 0000000000..afb891e2c5 --- /dev/null +++ b/arch/arm/include/asm/arch-imx8/sci/rpc.h @@ -0,0 +1,131 @@ +/* + * Copyright (C) 2016 Freescale Semiconductor, Inc. + * Copyright 2017-2018 NXP + * + * SPDX-License-Identifier: GPL-2.0+ + */ + +/*! + * Header file for the RPC implementation. + */ + +#ifndef SC_RPC_H +#define SC_RPC_H + +/* Includes */ + +#include +#include + +/* Defines */ + +#define SC_RPC_VERSION 1U + +#define SC_RPC_MAX_MSG 8U + +#define RPC_VER(MSG) ((MSG)->version) +#define RPC_SIZE(MSG) ((MSG)->size) +#define RPC_SVC(MSG) ((MSG)->svc) +#define RPC_FUNC(MSG) ((MSG)->func) +#define RPC_R8(MSG) ((MSG)->func) +#define RPC_I32(MSG, IDX) ((MSG)->DATA.i32[(IDX) / 4U]) +#define RPC_I16(MSG, IDX) ((MSG)->DATA.i16[(IDX) / 2U]) +#define RPC_I8(MSG, IDX) ((MSG)->DATA.i8[(IDX)]) +#define RPC_U32(MSG, IDX) ((MSG)->DATA.u32[(IDX) / 4U]) +#define RPC_U16(MSG, IDX) ((MSG)->DATA.u16[(IDX) / 2U]) +#define RPC_U8(MSG, IDX) ((MSG)->DATA.u8[(IDX)]) + +#define SC_RPC_SVC_UNKNOWN 0U +#define SC_RPC_SVC_RETURN 1U +#define SC_RPC_SVC_PM 2U +#define SC_RPC_SVC_RM 3U +#define SC_RPC_SVC_TIMER 5U +#define SC_RPC_SVC_PAD 6U +#define SC_RPC_SVC_MISC 7U +#define SC_RPC_SVC_IRQ 8U +#define SC_RPC_SVC_ABORT 9U + +#define SC_RPC_ASYNC_STATE_RD_START 0U +#define SC_RPC_ASYNC_STATE_RD_ACTIVE 1U +#define SC_RPC_ASYNC_STATE_RD_DONE 2U +#define SC_RPC_ASYNC_STATE_WR_START 3U +#define SC_RPC_ASYNC_STATE_WR_ACTIVE 4U +#define SC_RPC_ASYNC_STATE_WR_DONE 5U + +#define SC_RPC_MU_GIR_SVC 0x1U +#define SC_RPC_MU_GIR_DBG 0x8U + +/* Types */ + +typedef uint8_t sc_rpc_svc_t; + +typedef struct sc_rpc_msg_s +{ + uint8_t version; + uint8_t size; + uint8_t svc; + uint8_t func; + union + { + int32_t i32[(SC_RPC_MAX_MSG - 1U)]; + int16_t i16[(SC_RPC_MAX_MSG - 1U) * 2U]; + int8_t i8[(SC_RPC_MAX_MSG - 1U) * 4U]; + uint32_t u32[(SC_RPC_MAX_MSG - 1U)]; + uint16_t u16[(SC_RPC_MAX_MSG - 1U) * 2U]; + uint8_t u8[(SC_RPC_MAX_MSG - 1U) * 4U]; + } DATA; +} sc_rpc_msg_t; + +typedef uint8_t sc_rpc_async_state_t; + +typedef struct sc_rpc_async_msg_s +{ + sc_rpc_async_state_t state; + uint8_t wordIdx; + sc_rpc_msg_t msg; + uint32_t timeStamp; +} sc_rpc_async_msg_t; + +/* Functions */ + +/*! + * This is an internal function to send an RPC message over an IPC + * channel. It is called by client-side SCFW API function shims. + * + * @param[in] ipc IPC handle + * @param[in,out] msg handle to a message + * @param[in] no_resp response flag + * + * If \a no_resp is SC_FALSE then this function waits for a response + * and returns the result in \a msg. + */ +void sc_call_rpc(sc_ipc_t ipc, sc_rpc_msg_t *msg, sc_bool_t no_resp); + +/*! + * This is an internal function to dispath an RPC call that has + * arrived via IPC over an MU. It is called by server-side SCFW. + * + * @param[in] mu MU message arrived on + * @param[in,out] msg handle to a message + * + * The function result is returned in \a msg. + */ +void sc_rpc_dispatch(sc_rsrc_t mu, sc_rpc_msg_t *msg); + +/*! + * This function translates an RPC message and forwards on to the + * normal RPC API. It is used only by hypervisors. + * + * @param[in] ipc IPC handle + * @param[in,out] msg handle to a message + * + * This function decodes a message, calls macros to translate the + * resources, pads, addresses, partitions, memory regions, etc. and + * then forwards on to the hypervisors SCFW API.Return results are + * translated back abd placed back into the message to be returned + * to the original API. + */ +void sc_rpc_xlate(sc_ipc_t ipc, sc_rpc_msg_t *msg); + +#endif /* SC_RPC_H */ + diff --git a/arch/arm/include/asm/arch-imx8/sci/svc/irq/api.h b/arch/arm/include/asm/arch-imx8/sci/svc/irq/api.h new file mode 100755 index 0000000000..1e266c39b4 --- /dev/null +++ b/arch/arm/include/asm/arch-imx8/sci/svc/irq/api.h @@ -0,0 +1,160 @@ +/* + * Copyright (C) 2016 Freescale Semiconductor, Inc. + * Copyright 2017-2018 NXP + * + * SPDX-License-Identifier: GPL-2.0+ + */ + +/*! + * Header file containing the public API for the System Controller (SC) + * Interrupt (IRQ) function. + * + * @addtogroup IRQ_SVC (SVC) Interrupt Service + * + * Module for the Interrupt (IRQ) service. + * + * @{ + */ + +#ifndef SC_IRQ_API_H +#define SC_IRQ_API_H + +/* Includes */ + +#include + +/* Defines */ + +#define SC_IRQ_NUM_GROUP 4U /*!< Number of groups */ + +/*! + * @name Defines for sc_irq_group_t + */ +/*@{*/ +#define SC_IRQ_GROUP_TEMP 0U /*!< Temp interrupts */ +#define SC_IRQ_GROUP_WDOG 1U /*!< Watchdog interrupts */ +#define SC_IRQ_GROUP_RTC 2U /*!< RTC interrupts */ +#define SC_IRQ_GROUP_WAKE 3U /*!< Wakeup interrupts */ +/*@}*/ + +/*! + * @name Defines for sc_irq_temp_t + */ +/*@{*/ +#define SC_IRQ_TEMP_HIGH (1U << 0U) /*!< Temp alarm interrupt */ +#define SC_IRQ_TEMP_CPU0_HIGH (1U << 1U) /*!< CPU0 temp alarm interrupt */ +#define SC_IRQ_TEMP_CPU1_HIGH (1U << 2U) /*!< CPU1 temp alarm interrupt */ +#define SC_IRQ_TEMP_GPU0_HIGH (1U << 3U) /*!< GPU0 temp alarm interrupt */ +#define SC_IRQ_TEMP_GPU1_HIGH (1U << 4U) /*!< GPU1 temp alarm interrupt */ +#define SC_IRQ_TEMP_DRC0_HIGH (1U << 5U) /*!< DRC0 temp alarm interrupt */ +#define SC_IRQ_TEMP_DRC1_HIGH (1U << 6U) /*!< DRC1 temp alarm interrupt */ +#define SC_IRQ_TEMP_VPU_HIGH (1U << 7U) /*!< DRC1 temp alarm interrupt */ +#define SC_IRQ_TEMP_PMIC0_HIGH (1U << 8U) /*!< PMIC0 temp alarm interrupt */ +#define SC_IRQ_TEMP_PMIC1_HIGH (1U << 9U) /*!< PMIC1 temp alarm interrupt */ +#define SC_IRQ_TEMP_LOW (1U << 10U) /*!< Temp alarm interrupt */ +#define SC_IRQ_TEMP_CPU0_LOW (1U << 11U) /*!< CPU0 temp alarm interrupt */ +#define SC_IRQ_TEMP_CPU1_LOW (1U << 12U) /*!< CPU1 temp alarm interrupt */ +#define SC_IRQ_TEMP_GPU0_LOW (1U << 13U) /*!< GPU0 temp alarm interrupt */ +#define SC_IRQ_TEMP_GPU1_LOW (1U << 14U) /*!< GPU1 temp alarm interrupt */ +#define SC_IRQ_TEMP_DRC0_LOW (1U << 15U) /*!< DRC0 temp alarm interrupt */ +#define SC_IRQ_TEMP_DRC1_LOW (1U << 16U) /*!< DRC1 temp alarm interrupt */ +#define SC_IRQ_TEMP_VPU_LOW (1U << 17U) /*!< DRC1 temp alarm interrupt */ +#define SC_IRQ_TEMP_PMIC0_LOW (1U << 18U) /*!< PMIC0 temp alarm interrupt */ +#define SC_IRQ_TEMP_PMIC1_LOW (1U << 19U) /*!< PMIC1 temp alarm interrupt */ +#define SC_IRQ_TEMP_PMIC2_HIGH (1U << 20U) /*!< PMIC2 temp alarm interrupt */ +#define SC_IRQ_TEMP_PMIC2_LOW (1U << 21U) /*!< PMIC2 temp alarm interrupt */ +/*@}*/ + +/*! + * @name Defines for sc_irq_wdog_t + */ +/*@{*/ +#define SC_IRQ_WDOG (1U << 0U /*!< Watchdog interrupt */ +/*@}*/ + +/*! + * @name Defines for sc_irq_rtc_t + */ +/*@{*/ +#define SC_IRQ_RTC (1U << 0U) /*!< RTC interrupt */ +/*@}*/ + +/*! + * @name Defines for sc_irq_wake_t + */ +/*@{*/ +#define SC_IRQ_BUTTON (1U << 0U) /*!< Button interrupt */ +#define SC_IRQ_PAD (1U << 1U) /*!< Pad wakeup */ +/*@}*/ + +/* Types */ + +/*! + * This type is used to declare an interrupt group. + */ +typedef uint8_t sc_irq_group_t; + +/*! + * This type is used to declare a bit mask of temp interrupts. + */ +typedef uint8_t sc_irq_temp_t; + +/*! + * This type is used to declare a bit mask of watchdog interrupts. + */ +typedef uint8_t sc_irq_wdog_t; + +/*! + * This type is used to declare a bit mask of RTC interrupts. + */ +typedef uint8_t sc_irq_rtc_t; + +/*! + * This type is used to declare a bit mask of wakeup interrupts. + */ +typedef uint8_t sc_irq_wake_t; + +/* Functions */ + +/*! + * This function enables/disables interrupts. If pending interrupts + * are unmasked, an interrupt will be triggered. + * + * @param[in] ipc IPC handle + * @param[in] resource MU channel + * @param[in] group group the interrupts are in + * @param[in] mask mask of interrupts to affect + * @param[in] enable state to change interrupts to + * + * @return Returns an error code (SC_ERR_NONE = success). + * + * Return errors: + * - SC_PARM if group invalid + */ +sc_err_t sc_irq_enable(sc_ipc_t ipc, sc_rsrc_t resource, + sc_irq_group_t group, uint32_t mask, sc_bool_t enable); + +/*! + * This function returns the current interrupt status (regardless if + * masked). Automatically clears pending interrupts. + * + * @param[in] ipc IPC handle + * @param[in] resource MU channel + * @param[in] group groups the interrupts are in + * @param[in] status status of interrupts + * + * @return Returns an error code (SC_ERR_NONE = success). + * + * Return errors: + * - SC_PARM if group invalid + * + * The returned \a status may show interrupts pending that are + * currently masked. + */ +sc_err_t sc_irq_status(sc_ipc_t ipc, sc_rsrc_t resource, + sc_irq_group_t group, uint32_t *status); + +#endif /* SC_IRQ_API_H */ + +/**@}*/ + diff --git a/arch/arm/include/asm/arch-imx8/sci/svc/misc/api.h b/arch/arm/include/asm/arch-imx8/sci/svc/misc/api.h new file mode 100755 index 0000000000..210dd04c7c --- /dev/null +++ b/arch/arm/include/asm/arch-imx8/sci/svc/misc/api.h @@ -0,0 +1,523 @@ +/* + * Copyright (C) 2016 Freescale Semiconductor, Inc. + * Copyright 2017-2018 NXP + * + * SPDX-License-Identifier: GPL-2.0+ + */ + +/*! + * Header file containing the public API for the System Controller (SC) + * Miscellaneous (MISC) function. + * + * @addtogroup MISC_SVC (SVC) Miscellaneous Service + * + * Module for the Miscellaneous (MISC) service. + * + * @{ + */ + +#ifndef SC_MISC_API_H +#define SC_MISC_API_H + +/* Includes */ + +#include +#include + +/* Defines */ + +/*! + * @name Defines for type widths + */ +/*@{*/ +#define SC_MISC_DMA_GRP_W 5U /*!< Width of sc_misc_dma_group_t */ +/*@}*/ + +/*! Max DMA channel priority group */ +#define SC_MISC_DMA_GRP_MAX 31U + +/*! + * @name Defines for sc_misc_boot_status_t + */ +/*@{*/ +#define SC_MISC_BOOT_STATUS_SUCCESS 0U /*!< Success */ +#define SC_MISC_BOOT_STATUS_SECURITY 1U /*!< Security violation */ +/*@}*/ + +/*! + * @name Defines for sc_misc_seco_auth_cmd_t + */ +/*@{*/ +#define SC_MISC_SECO_AUTH_SECO_FW 0U /*!< SECO Firmware */ +#define SC_MISC_SECO_AUTH_HDMI_TX_FW 1U /*!< HDMI TX Firmware */ +#define SC_MISC_SECO_AUTH_HDMI_RX_FW 2U /*!< HDMI RX Firmware */ +/*@}*/ + +/*! + * @name Defines for sc_misc_temp_t + */ +/*@{*/ +#define SC_MISC_TEMP 0U /*!< Temp sensor */ +#define SC_MISC_TEMP_HIGH 1U /*!< Temp high alarm */ +#define SC_MISC_TEMP_LOW 2U /*!< Temp low alarm */ +/*@}*/ + +/*! + * @name Defines for sc_misc_seco_auth_cmd_t + */ +/*@{*/ +#define SC_MISC_AUTH_CONTAINER 0U /*!< Authenticate container */ +#define SC_MISC_VERIFY_IMAGE 1U /*!< Verify image */ +#define SC_MISC_REL_CONTAINER 2U /*!< Release container */ +/*@}*/ + +/* Types */ + +/*! + * This type is used to store a DMA channel priority group. + */ +typedef uint8_t sc_misc_dma_group_t; + +/*! + * This type is used report boot status. + */ +typedef uint8_t sc_misc_boot_status_t; + +/*! + * This type is used to issue SECO authenticate commands. + */ +typedef uint8_t sc_misc_seco_auth_cmd_t; + +/*! + * This type is used report boot status. + */ +typedef uint8_t sc_misc_temp_t; + +/* Functions */ + +/*! + * @name Control Functions + * @{ + */ + +/*! + * This function sets a miscellaneous control value. + * + * @param[in] ipc IPC handle + * @param[in] resource resource the control is associated with + * @param[in] ctrl control to change + * @param[in] val value to apply to the control + * + * @return Returns an error code (SC_ERR_NONE = success). + * + * Return errors: + * - SC_PARM if arguments out of range or invalid, + * - SC_ERR_NOACCESS if caller's partition is not the resource owner or parent + * of the owner + * + * Refer to the [Control List](@ref CONTROLS) for valid control values. + */ +sc_err_t sc_misc_set_control(sc_ipc_t ipc, sc_rsrc_t resource, + sc_ctrl_t ctrl, uint32_t val); + +/*! + * This function gets a miscellaneous control value. + * + * @param[in] ipc IPC handle + * @param[in] resource resource the control is associated with + * @param[in] ctrl control to get + * @param[out] val pointer to return the control value + * + * @return Returns an error code (SC_ERR_NONE = success). + * + * Return errors: + * - SC_PARM if arguments out of range or invalid, + * - SC_ERR_NOACCESS if caller's partition is not the resource owner or parent + * of the owner + * + * Refer to the [Control List](@ref CONTROLS) for valid control values. + */ +sc_err_t sc_misc_get_control(sc_ipc_t ipc, sc_rsrc_t resource, + sc_ctrl_t ctrl, uint32_t *val); + +/* @} */ + +/*! + * @name DMA Functions + * @{ + */ + +/*! + * This function configures the max DMA channel priority group for a + * partition. + * + * @param[in] ipc IPC handle + * @param[in] pt handle of partition to assign \a max + * @param[in] max max priority group (0-31) + * + * @return Returns an error code (SC_ERR_NONE = success). + * + * Return errors: + * - SC_PARM if arguments out of range or invalid, + * - SC_ERR_NOACCESS if caller's partition is not the parent + * of the affected partition + * + * Valid \a max range is 0-31 with 0 being the lowest and 31 the highest. + * Default is the max priority group for the parent partition of \a pt. + */ +sc_err_t sc_misc_set_max_dma_group(sc_ipc_t ipc, sc_rm_pt_t pt, + sc_misc_dma_group_t max); + +/*! + * This function configures the priority group for a DMA channel. + * + * @param[in] ipc IPC handle + * @param[in] resource DMA channel resource + * @param[in] group priority group (0-31) + * + * @return Returns an error code (SC_ERR_NONE = success). + * + * Return errors: + * - SC_PARM if arguments out of range or invalid, + * - SC_ERR_NOACCESS if caller's partition is not the owner or parent + * of the owner of the DMA channel + * + * Valid \a group range is 0-31 with 0 being the lowest and 31 the highest. + * The max value of \a group is limited by the partition max set using + * sc_misc_set_max_dma_group(). + */ +sc_err_t sc_misc_set_dma_group(sc_ipc_t ipc, sc_rsrc_t resource, + sc_misc_dma_group_t group); + +/* @} */ + +/*! + * @name Security Functions + * @{ + */ + +/*! + * This function loads a SECO image. + * + * @param[in] ipc IPC handle + * @param[in] addr_src address of image source + * @param[in] addr_dst address of image destination + * @param[in] len lenth of image to load + * @param[in] fw SC_TRUE = firmware load + * + * @return Returns an error code (SC_ERR_NONE = success). + * + * Return errors codes: + * - SC_ERR_PARM if word fuse index param out of range or invalid + * - SC_ERR_UNAVAILABLE if SECO not available + * + * This is used to load images via the SECO. Examples include SECO + * Firmware and IVT/CSF data used for authentication. These are usually + * loaded into SECO TCM. \a addr_src is in secure memory. + * + * See the Security Reference Manual (SRM) for more info. + */ +sc_err_t sc_misc_seco_image_load(sc_ipc_t ipc, sc_faddr_t addr_src, + sc_faddr_t addr_dst, uint32_t len, sc_bool_t fw); + +/*! + * This function is used to authenticate a SECO image or command. + * + * @param[in] ipc IPC handle + * @param[in] cmd authenticate command + * @param[in] addr address of/or metadata + * + * @return Returns an error code (SC_ERR_NONE = success). + * + * Return errors codes: + * - SC_ERR_PARM if word fuse index param out of range or invalid + * - SC_ERR_UNAVAILABLE if SECO not available + * + * This is used to authenticate a SECO image or issue a security + * command. \a addr often points to an container. It is also + * just data (or even unused) for some commands. + * + * See the Security Reference Manual (SRM) for more info. + */ +sc_err_t sc_misc_seco_authenticate(sc_ipc_t ipc, + sc_misc_seco_auth_cmd_t cmd, sc_faddr_t addr); + +/*! + * This function securely writes a group of fuse words. + * + * @param[in] ipc IPC handle + * @param[in] addr address of message block + * + * @return Returns and error code (SC_ERR_NONE = success). + * + * Return errors codes: + * - SC_ERR_UNAVAILABLE if SECO not available + * + * Note \a addr must be a pointer into secure RAM. The contents at + * this location are a signed fuse command message block. + * + * See the Security Reference Manual (SRM) for more info. + */ +sc_err_t sc_misc_seco_fuse_write(sc_ipc_t ipc, sc_faddr_t addr); + +/*! + * This function securely enables debug. + * + * @param[in] ipc IPC handle + * @param[in] addr address of message block + * + * @return Returns and error code (SC_ERR_NONE = success). + * + * Return errors codes: + * - SC_ERR_UNAVAILABLE if SECO not available + * + * Note \a addr must be a pointer into secure RAM. The contents at + * this location are a signed fuse command message block. + * + * See the Security Reference Manual (SRM) for more info. + */ +sc_err_t sc_misc_seco_enable_debug(sc_ipc_t ipc, sc_faddr_t addr); + +/*! + * This function updates the lifecycle of the device. + * + * @param[in] ipc IPC handle + * @param[in] lifecycle new lifecycle + * + * @return Returns and error code (SC_ERR_NONE = success). + * + * Return errors codes: + * - SC_ERR_UNAVAILABLE if SECO not available + * + * See the Security Reference Manual (SRM) for more info. + */ +sc_err_t sc_misc_seco_forward_lifecycle(sc_ipc_t ipc, uint32_t lifecycle); + +/*! + * This function securely reverses the lifecycle. + * + * @param[in] ipc IPC handle + * @param[in] addr address of message block + * + * @return Returns and error code (SC_ERR_NONE = success). + * + * Return errors codes: + * - SC_ERR_UNAVAILABLE if SECO not available + * + * Note \a addr must be a pointer into secure RAM. The contents at + * this location are a signed fuse command message block. + * + * See the Security Reference Manual (SRM) for more info. + */ +sc_err_t sc_misc_seco_return_lifecycle(sc_ipc_t ipc, sc_faddr_t addr); + +/*! + * This function is used to return the SECO FW build info. + * + * @param[in] ipc IPC handle + * @param[out] version pointer to return build number + * @param[out] commit pointer to return commit ID (git SHA-1) + */ +void sc_misc_seco_build_info(sc_ipc_t ipc, uint32_t *version, + uint32_t *commit); + +/* @} */ + +/*! + * @name Debug Functions + * @{ + */ + +/*! + * This function is used output a debug character from the SCU UART. + * + * @param[in] ipc IPC handle + * @param[in] ch character to output + */ +void sc_misc_debug_out(sc_ipc_t ipc, uint8_t ch); + +/*! + * This function starts/stops emulation waveform capture. + * + * @param[in] ipc IPC handle + * @param[in] enable flag to enable/disable capture + * + * @return Returns an error code (SC_ERR_NONE = success). + * + * Return errors: + * - SC_ERR_UNAVAILABLE if not running on emulation + */ +sc_err_t sc_misc_waveform_capture(sc_ipc_t ipc, sc_bool_t enable); + +/*! + * This function is used to return the SCFW build info. + * + * @param[in] ipc IPC handle + * @param[out] build pointer to return build number + * @param[out] commit pointer to return commit ID (git SHA-1) + */ +void sc_misc_build_info(sc_ipc_t ipc, uint32_t *build, + uint32_t *commit); + +/*! + * This function is used to return the device's unique ID. + * + * @param[in] ipc IPC handle + * @param[out] id_l pointer to return lower 32-bit of ID [31:0] + * @param[out] id_h pointer to return upper 32-bits of ID [63:32] + */ +void sc_misc_unique_id(sc_ipc_t ipc, uint32_t *id_l, + uint32_t *id_h); + +/* @} */ + +/*! + * @name Other Functions + * @{ + */ + +/*! + * This function configures the ARI match value for PCIe/SATA resources. + * + * @param[in] ipc IPC handle + * @param[in] resource match resource + * @param[in] resource_mst PCIe/SATA master to match + * @param[in] ari ARI to match + * @param[in] enable enable match or not + * + * @return Returns an error code (SC_ERR_NONE = success). + * + * Return errors: + * - SC_PARM if arguments out of range or invalid, + * - SC_ERR_NOACCESS if caller's partition is not the owner or parent + * of the owner of the resource and translation + * + * For PCIe, the ARI is the 16-bit value that includes the bus number, + * device number, and function number. For SATA, this value includes the + * FISType and PM_Port. + */ +sc_err_t sc_misc_set_ari(sc_ipc_t ipc, sc_rsrc_t resource, + sc_rsrc_t resource_mst, uint16_t ari, sc_bool_t enable); + +/*! + * This function reports boot status. + * + * @param[in] ipc IPC handle + * @param[in] status boot status + * + * This is used by SW partitions to report status of boot. This is + * normally used to report a boot failure. + */ +void sc_misc_boot_status(sc_ipc_t ipc, sc_misc_boot_status_t status); + +/*! + * This function tells the SCFW that a CPU is done booting. + * + * @param[in] ipc IPC handle + * @param[in] cpu CPU that is done booting + * + * This is called by early booting CPUs to report they are done with + * initialization. After starting early CPUs, the SCFW halts the + * booting process until they are done. During this time, early + * CPUs can call the SCFW with lower latency as the SCFW is idle. + * + * @return Returns an error code (SC_ERR_NONE = success). + * + * Return errors: + * - SC_PARM if arguments out of range or invalid, + * - SC_ERR_NOACCESS if caller's partition is not the CPU owner + */ +sc_err_t sc_misc_boot_done(sc_ipc_t ipc, sc_rsrc_t cpu); + +/*! + * This function reads a given fuse word index. + * + * @param[in] ipc IPC handle + * @param[in] word fuse word index + * @param[out] val fuse read value + * + * @return Returns and error code (SC_ERR_NONE = success). + * + * Return errors codes: + * - SC_ERR_PARM if word fuse index param out of range or invalid + * - SC_ERR_NOACCESS if read operation failed + * - SC_ERR_LOCKED if read operation is locked + */ +sc_err_t sc_misc_otp_fuse_read(sc_ipc_t ipc, uint32_t word, uint32_t *val); + +/*! + * This function writes a given fuse word index. + * + * @param[in] ipc IPC handle + * @param[in] word fuse word index + * @param[in] val fuse write value + * + * @return Returns and error code (SC_ERR_NONE = success). + * + * Return errors codes: + * - SC_ERR_PARM if word fuse index param out of range or invalid + * - SC_ERR_NOACCESS if write operation failed + * - SC_ERR_LOCKED if write operation is locked + */ +sc_err_t sc_misc_otp_fuse_write(sc_ipc_t ipc, uint32_t word, uint32_t val); + +/*! + * This function sets a temp sensor alarm. + * + * @param[in] ipc IPC handle + * @param[in] resource resource with sensor + * @param[in] temp alarm to set + * @param[in] celsius whole part of temp to set + * @param[in] tenths fractional part of temp to set + * + * @return Returns and error code (SC_ERR_NONE = success). + * + * This function will enable the alarm interrupt if the temp requested is + * not the min/max temp. This enable automatically clears when the alarm + * occurs and this function has to be called again to re-enable. + * + * Return errors codes: + * - SC_ERR_PARM if parameters invalid + */ +sc_err_t sc_misc_set_temp(sc_ipc_t ipc, sc_rsrc_t resource, + sc_misc_temp_t temp, int16_t celsius, int8_t tenths); + +/*! + * This function gets a temp sensor value. + * + * @param[in] ipc IPC handle + * @param[in] resource resource with sensor + * @param[in] temp value to get (sensor or alarm) + * @param[out] celsius whole part of temp to get + * @param[out] tenths fractional part of temp to get + * + * @return Returns and error code (SC_ERR_NONE = success). + * + * Return errors codes: + * - SC_ERR_PARM if parameters invalid + */ +sc_err_t sc_misc_get_temp(sc_ipc_t ipc, sc_rsrc_t resource, + sc_misc_temp_t temp, int16_t *celsius, int8_t *tenths); + +/*! + * This function returns the boot device. + * + * @param[in] ipc IPC handle + * @param[out] dev pointer to return boot device + */ +void sc_misc_get_boot_dev(sc_ipc_t ipc, sc_rsrc_t *dev); + +/*! + * This function returns the current status of the ON/OFF button. + * + * @param[in] ipc IPC handle + * @param[out] status pointer to return button status + */ +void sc_misc_get_button_status(sc_ipc_t ipc, sc_bool_t *status); + +/* @} */ + +#endif /* SC_MISC_API_H */ + +/**@}*/ + diff --git a/arch/arm/include/asm/arch-imx8/sci/svc/pad/api.h b/arch/arm/include/asm/arch-imx8/sci/svc/pad/api.h new file mode 100755 index 0000000000..76cb0dab9a --- /dev/null +++ b/arch/arm/include/asm/arch-imx8/sci/svc/pad/api.h @@ -0,0 +1,568 @@ +/* + * Copyright (C) 2016 Freescale Semiconductor, Inc. + * Copyright 2017-2018 NXP + * + * SPDX-License-Identifier: GPL-2.0+ + */ + +/*! + * Header file containing the public API for the System Controller (SC) + * Pad Control (PAD) function. + * + * @addtogroup PAD_SVC (SVC) Pad Service + * + * Module for the Pad Control (PAD) service. + * + * @details + * + * Pad configuration is managed by SC firmware. The pad configuration + * features supported by the SC firmware include: + * + * - Configuring the mux, input/output connection, and low-power isolation + mode. + * - Configuring the technology-specific pad setting such as drive strength, + * pullup/pulldown, etc. + * - Configuring compensation for pad groups with dual voltage capability. + * + * Pad functions fall into one of three categories. Generic functions are + * common to all SoCs and all process technologies. SoC functions are raw + * low-level functions. Technology-specific functions are specific to the + * process technology. + * + * The list of pads is SoC specific. Refer to the SoC [Pad List](@ref PADS) + * for valid pad values. Note that all pads exist on a die but may or + * may not be brought out by the specific package. Mapping of pads to + * package pins/balls is documented in the associated Data Sheet. Some pads + * may not be brought out because the part (die+package) is defeatured and + * some pads may connect to the substrate in the package. + * + * Some pads (SC_P_COMP_*) that can be specified are not individual pads + * but are in fact pad groups. These groups have additional configuration + * that can be done using the sc_pad_set_gp_28fdsoi_comp() function. More + * info on these can be found in the associated Reference Manual. + * + * Pads are managed as a resource by the Resource Manager (RM). They have + * assigned owners and only the owners can configure the pads. Some of the + * pads are reserved for use by the SCFW itself and this can be overriden + * with the implementation of board_config_sc(). Additionally, pads may + * be assigned to various other partitions via the implementation of + * board_system_config(). + * + * Note muxing two input pads to the same IP functional signal will + * result in undefined behavior. + * @{ + */ + +#ifndef SC_PAD_API_H +#define SC_PAD_API_H + +/* Includes */ + +#include +#include + +/* Defines */ + +/*! + * @name Defines for type widths + */ +/*@{*/ +#define SC_PAD_MUX_W 3U /*!< Width of mux parameter */ +/*@}*/ + +/*! + * @name Defines for sc_pad_config_t + */ +/*@{*/ +#define SC_PAD_CONFIG_NORMAL 0U /*!< Normal */ +#define SC_PAD_CONFIG_OD 1U /*!< Open Drain */ +#define SC_PAD_CONFIG_OD_IN 2U /*!< Open Drain and input */ +#define SC_PAD_CONFIG_OUT_IN 3U /*!< Output and input */ +/*@}*/ + +/*! + * @name Defines for sc_pad_iso_t + */ +/*@{*/ +#define SC_PAD_ISO_OFF 0U /*!< ISO latch is transparent */ +#define SC_PAD_ISO_EARLY 1U /*!< Follow EARLY_ISO */ +#define SC_PAD_ISO_LATE 2U /*!< Follow LATE_ISO */ +#define SC_PAD_ISO_ON 3U /*!< ISO latched data is held */ +/*@}*/ + +/*! + * @name Defines for sc_pad_28fdsoi_dse_t + */ +/*@{*/ +#define SC_PAD_28FDSOI_DSE_18V_1MA 0U /*!< Drive strength of 1mA for 1.8v */ +#define SC_PAD_28FDSOI_DSE_18V_2MA 1U /*!< Drive strength of 2mA for 1.8v */ +#define SC_PAD_28FDSOI_DSE_18V_4MA 2U /*!< Drive strength of 4mA for 1.8v */ +#define SC_PAD_28FDSOI_DSE_18V_6MA 3U /*!< Drive strength of 6mA for 1.8v */ +#define SC_PAD_28FDSOI_DSE_18V_8MA 4U /*!< Drive strength of 8mA for 1.8v */ +#define SC_PAD_28FDSOI_DSE_18V_10MA 5U /*!< Drive strength of 10mA for 1.8v */ +#define SC_PAD_28FDSOI_DSE_18V_12MA 6U /*!< Drive strength of 12mA for 1.8v */ +#define SC_PAD_28FDSOI_DSE_18V_HS 7U /*!< High-speed drive strength for 1.8v */ +#define SC_PAD_28FDSOI_DSE_33V_2MA 0U /*!< Drive strength of 2mA for 3.3v */ +#define SC_PAD_28FDSOI_DSE_33V_4MA 1U /*!< Drive strength of 4mA for 3.3v */ +#define SC_PAD_28FDSOI_DSE_33V_8MA 2U /*!< Drive strength of 8mA for 3.3v */ +#define SC_PAD_28FDSOI_DSE_33V_12MA 3U /*!< Drive strength of 12mA for 3.3v */ +#define SC_PAD_28FDSOI_DSE_DV_HIGH 0U /*!< High drive strength for dual volt */ +#define SC_PAD_28FDSOI_DSE_DV_LOW 1U /*!< Low drive strength for dual volt */ +/*@}*/ + +/*! + * @name Defines for sc_pad_28fdsoi_ps_t + */ +/*@{*/ +#define SC_PAD_28FDSOI_PS_KEEPER 0U /*!< Bus-keeper (only valid for 1.8v) */ +#define SC_PAD_28FDSOI_PS_PU 1U /*!< Pull-up */ +#define SC_PAD_28FDSOI_PS_PD 2U /*!< Pull-down */ +#define SC_PAD_28FDSOI_PS_NONE 3U /*!< No pull (disabled) */ +/*@}*/ + +/*! + * @name Defines for sc_pad_28fdsoi_pus_t + */ +/*@{*/ +#define SC_PAD_28FDSOI_PUS_30K_PD 0U /*!< 30K pull-down */ +#define SC_PAD_28FDSOI_PUS_100K_PU 1U /*!< 100K pull-up */ +#define SC_PAD_28FDSOI_PUS_3K_PU 2U /*!< 3K pull-up */ +#define SC_PAD_28FDSOI_PUS_30K_PU 3U /*!< 30K pull-up */ +/*@}*/ + +/*! + * @name Defines for sc_pad_wakeup_t + */ +/*@{*/ +#define SC_PAD_WAKEUP_OFF 0U /*!< Off */ +#define SC_PAD_WAKEUP_CLEAR 1U /*!< Clears pending flag */ +#define SC_PAD_WAKEUP_LOW_LVL 4U /*!< Low level */ +#define SC_PAD_WAKEUP_FALL_EDGE 5U /*!< Falling edge */ +#define SC_PAD_WAKEUP_RISE_EDGE 6U /*!< Rising edge */ +#define SC_PAD_WAKEUP_HIGH_LVL 7U /*!< High-level */ +/*@}*/ + +/* Types */ + +/*! + * This type is used to declare a pad config. It determines how the + * output data is driven, pull-up is controlled, and input signal is + * connected. Normal and OD are typical and only connect the input + * when the output is not driven. The IN options are less common and + * force an input connection even when driving the output. + */ +typedef uint8_t sc_pad_config_t; + +/*! + * This type is used to declare a pad low-power isolation config. + * ISO_LATE is the most common setting. ISO_EARLY is only used when + * an output pad is directly determined by another input pad. The + * other two are only used when SW wants to directly contol isolation. + */ +typedef uint8_t sc_pad_iso_t; + +/*! + * This type is used to declare a drive strength. Note it is specific + * to 28FDSOI. Also note that valid values depend on the pad type. + */ +typedef uint8_t sc_pad_28fdsoi_dse_t; + +/*! + * This type is used to declare a pull select. Note it is specific + * to 28FDSOI. + */ +typedef uint8_t sc_pad_28fdsoi_ps_t; + +/*! + * This type is used to declare a pull-up select. Note it is specific + * to 28FDSOI HSIC pads. + */ +typedef uint8_t sc_pad_28fdsoi_pus_t; + +/*! + * This type is used to declare a wakeup mode of a pad. + */ +typedef uint8_t sc_pad_wakeup_t; + +/* Functions */ + +/*! + * @name Generic Functions + * @{ + */ + +/*! + * This function configures the mux settings for a pad. This includes + * the signal mux, pad config, and low-power isolation mode. + * + * @param[in] ipc IPC handle + * @param[in] pad pad to configure + * @param[in] mux mux setting + * @param[in] config pad config + * @param[in] iso low-power isolation mode + * + * @return Returns an error code (SC_ERR_NONE = success). + * + * Return errors: + * - SC_PARM if arguments out of range or invalid, + * - SC_ERR_NOACCESS if caller's partition is not the pad owner + * + * Note muxing two input pads to the same IP functional signal will + * result in undefined behavior. + * + * Refer to the SoC [Pad List](@ref PADS) for valid pad values. + */ +sc_err_t sc_pad_set_mux(sc_ipc_t ipc, sc_pad_t pad, + uint8_t mux, sc_pad_config_t config, sc_pad_iso_t iso); + +/*! + * This function gets the mux settings for a pad. This includes + * the signal mux, pad config, and low-power isolation mode. + * + * @param[in] ipc IPC handle + * @param[in] pad pad to query + * @param[out] mux pointer to return mux setting + * @param[out] config pointer to return pad config + * @param[out] iso pointer to return low-power isolation mode + * + * @return Returns an error code (SC_ERR_NONE = success). + * + * Return errors: + * - SC_PARM if arguments out of range or invalid, + * - SC_ERR_NOACCESS if caller's partition is not the pad owner + * + * Refer to the SoC [Pad List](@ref PADS) for valid pad values. + */ +sc_err_t sc_pad_get_mux(sc_ipc_t ipc, sc_pad_t pad, + uint8_t *mux, sc_pad_config_t *config, sc_pad_iso_t *iso); + +/*! + * This function configures the general purpose pad control. This + * is technology dependent and includes things like drive strength, + * slew rate, pull up/down, etc. Refer to the SoC Reference Manual + * for bit field details. + * + * @param[in] ipc IPC handle + * @param[in] pad pad to configure + * @param[in] ctrl control value to set + * + * @return Returns an error code (SC_ERR_NONE = success). + * + * Return errors: + * - SC_PARM if arguments out of range or invalid, + * - SC_ERR_NOACCESS if caller's partition is not the pad owner + * + * Refer to the SoC [Pad List](@ref PADS) for valid pad values. + */ +sc_err_t sc_pad_set_gp(sc_ipc_t ipc, sc_pad_t pad, uint32_t ctrl); + +/*! + * This function gets the general purpose pad control. This + * is technology dependent and includes things like drive strength, + * slew rate, pull up/down, etc. Refer to the SoC Reference Manual + * for bit field details. + * + * @param[in] ipc IPC handle + * @param[in] pad pad to query + * @param[out] ctrl pointer to return control value + * + * @return Returns an error code (SC_ERR_NONE = success). + * + * Return errors: + * - SC_PARM if arguments out of range or invalid, + * - SC_ERR_NOACCESS if caller's partition is not the pad owner + * + * Refer to the SoC [Pad List](@ref PADS) for valid pad values. + */ +sc_err_t sc_pad_get_gp(sc_ipc_t ipc, sc_pad_t pad, uint32_t *ctrl); + +/*! + * This function configures the wakeup mode of the pad. + * + * @param[in] ipc IPC handle + * @param[in] pad pad to configure + * @param[in] wakeup wakeup to set + * + * @return Returns an error code (SC_ERR_NONE = success). + * + * Return errors: + * - SC_PARM if arguments out of range or invalid, + * - SC_ERR_NOACCESS if caller's partition is not the pad owner + * + * Refer to the SoC [Pad List](@ref PADS) for valid pad values. + */ +sc_err_t sc_pad_set_wakeup(sc_ipc_t ipc, sc_pad_t pad, + sc_pad_wakeup_t wakeup); + +/*! + * This function gets the wakeup mode of a pad. + * + * @param[in] ipc IPC handle + * @param[in] pad pad to query + * @param[out] wakeup pointer to return wakeup + * + * @return Returns an error code (SC_ERR_NONE = success). + * + * Return errors: + * - SC_PARM if arguments out of range or invalid, + * - SC_ERR_NOACCESS if caller's partition is not the pad owner + * + * Refer to the SoC [Pad List](@ref PADS) for valid pad values. + */ +sc_err_t sc_pad_get_wakeup(sc_ipc_t ipc, sc_pad_t pad, + sc_pad_wakeup_t *wakeup); + +/*! + * This function configures a pad. + * + * @param[in] ipc IPC handle + * @param[in] pad pad to configure + * @param[in] mux mux setting + * @param[in] config pad config + * @param[in] iso low-power isolation mode + * @param[in] ctrl control value + * @param[in] wakeup wakeup to set + * + * @see sc_pad_set_mux(). + * @see sc_pad_set_gp(). + * + * Return errors: + * - SC_PARM if arguments out of range or invalid, + * - SC_ERR_NOACCESS if caller's partition is not the pad owner + * + * @return Returns an error code (SC_ERR_NONE = success). + * + * Note muxing two input pads to the same IP functional signal will + * result in undefined behavior. + * + * Refer to the SoC [Pad List](@ref PADS) for valid pad values. + */ +sc_err_t sc_pad_set_all(sc_ipc_t ipc, sc_pad_t pad, uint8_t mux, + sc_pad_config_t config, sc_pad_iso_t iso, uint32_t ctrl, + sc_pad_wakeup_t wakeup); + +/*! + * This function gets a pad's config. + * + * @param[in] ipc IPC handle + * @param[in] pad pad to query + * @param[out] mux pointer to return mux setting + * @param[out] config pointer to return pad config + * @param[out] iso pointer to return low-power isolation mode + * @param[out] ctrl pointer to return control value + * @param[out] wakeup pointer to return wakeup to set + * + * @see sc_pad_set_mux(). + * @see sc_pad_set_gp(). + * + * Return errors: + * - SC_PARM if arguments out of range or invalid, + * - SC_ERR_NOACCESS if caller's partition is not the pad owner + * + * @return Returns an error code (SC_ERR_NONE = success). + * + * Refer to the SoC [Pad List](@ref PADS) for valid pad values. + */ +sc_err_t sc_pad_get_all(sc_ipc_t ipc, sc_pad_t pad, uint8_t *mux, + sc_pad_config_t *config, sc_pad_iso_t *iso, uint32_t *ctrl, + sc_pad_wakeup_t *wakeup); + +/* @} */ + +/*! + * @name SoC Specific Functions + * @{ + */ + +/*! + * This function configures the settings for a pad. This setting is SoC + * specific. + * + * @param[in] ipc IPC handle + * @param[in] pad pad to configure + * @param[in] val value to set + * + * @return Returns an error code (SC_ERR_NONE = success). + * + * Return errors: + * - SC_PARM if arguments out of range or invalid, + * - SC_ERR_NOACCESS if caller's partition is not the pad owner + * + * Refer to the SoC [Pad List](@ref PADS) for valid pad values. + */ +sc_err_t sc_pad_set(sc_ipc_t ipc, sc_pad_t pad, uint32_t val); + +/*! + * This function gets the settings for a pad. This setting is SoC + * specific. + * + * @param[in] ipc IPC handle + * @param[in] pad pad to query + * @param[out] val pointer to return setting + * + * @return Returns an error code (SC_ERR_NONE = success). + * + * Return errors: + * - SC_PARM if arguments out of range or invalid, + * - SC_ERR_NOACCESS if caller's partition is not the pad owner + * + * Refer to the SoC [Pad List](@ref PADS) for valid pad values. + */ +sc_err_t sc_pad_get(sc_ipc_t ipc, sc_pad_t pad, uint32_t *val); + +/* @} */ + +/*! + * @name Technology Specific Functions + * @{ + */ + +/*! + * This function configures the pad control specific to 28FDSOI. + * + * @param[in] ipc IPC handle + * @param[in] pad pad to configure + * @param[in] dse drive strength + * @param[in] ps pull select + * + * @return Returns an error code (SC_ERR_NONE = success). + * + * Return errors: + * - SC_PARM if arguments out of range or invalid, + * - SC_ERR_NOACCESS if caller's partition is not the pad owner, + * - SC_ERR_UNAVAILABLE if process not applicable + * + * Refer to the SoC [Pad List](@ref PADS) for valid pad values. + */ +sc_err_t sc_pad_set_gp_28fdsoi(sc_ipc_t ipc, sc_pad_t pad, + sc_pad_28fdsoi_dse_t dse, sc_pad_28fdsoi_ps_t ps); + +/*! + * This function gets the pad control specific to 28FDSOI. + * + * @param[in] ipc IPC handle + * @param[in] pad pad to query + * @param[out] dse pointer to return drive strength + * @param[out] ps pointer to return pull select + * + * @return Returns an error code (SC_ERR_NONE = success). + * + * Return errors: + * - SC_PARM if arguments out of range or invalid, + * - SC_ERR_NOACCESS if caller's partition is not the pad owner, + * - SC_ERR_UNAVAILABLE if process not applicable + * + * Refer to the SoC [Pad List](@ref PADS) for valid pad values. + */ +sc_err_t sc_pad_get_gp_28fdsoi(sc_ipc_t ipc, sc_pad_t pad, + sc_pad_28fdsoi_dse_t *dse, sc_pad_28fdsoi_ps_t *ps); + +/*! + * This function configures the pad control specific to 28FDSOI. + * + * @param[in] ipc IPC handle + * @param[in] pad pad to configure + * @param[in] dse drive strength + * @param[in] hys hysteresis + * @param[in] pus pull-up select + * @param[in] pke pull keeper enable + * @param[in] pue pull-up enable + * + * @return Returns an error code (SC_ERR_NONE = success). + * + * Return errors: + * - SC_PARM if arguments out of range or invalid, + * - SC_ERR_NOACCESS if caller's partition is not the pad owner, + * - SC_ERR_UNAVAILABLE if process not applicable + * + * Refer to the SoC [Pad List](@ref PADS) for valid pad values. + */ +sc_err_t sc_pad_set_gp_28fdsoi_hsic(sc_ipc_t ipc, sc_pad_t pad, + sc_pad_28fdsoi_dse_t dse, sc_bool_t hys, sc_pad_28fdsoi_pus_t pus, + sc_bool_t pke, sc_bool_t pue); + +/*! + * This function gets the pad control specific to 28FDSOI. + * + * @param[in] ipc IPC handle + * @param[in] pad pad to query + * @param[out] dse pointer to return drive strength + * @param[out] hys pointer to return hysteresis + * @param[out] pus pointer to return pull-up select + * @param[out] pke pointer to return pull keeper enable + * @param[out] pue pointer to return pull-up enable + * + * @return Returns an error code (SC_ERR_NONE = success). + * + * Return errors: + * - SC_PARM if arguments out of range or invalid, + * - SC_ERR_NOACCESS if caller's partition is not the pad owner, + * - SC_ERR_UNAVAILABLE if process not applicable + * + * Refer to the SoC [Pad List](@ref PADS) for valid pad values. + */ +sc_err_t sc_pad_get_gp_28fdsoi_hsic(sc_ipc_t ipc, sc_pad_t pad, + sc_pad_28fdsoi_dse_t *dse, sc_bool_t *hys, sc_pad_28fdsoi_pus_t *pus, + sc_bool_t *pke, sc_bool_t *pue); + +/*! + * This function configures the compensation control specific to 28FDSOI. + * + * @param[in] ipc IPC handle + * @param[in] pad pad to configure + * @param[in] compen compensation/freeze mode + * @param[in] fastfrz fast freeze + * @param[in] rasrcp compensation code for PMOS + * @param[in] rasrcn compensation code for NMOS + * @param[in] nasrc_sel NASRC read select + * @param[in] psw_ovr 2.5v override + * + * @return Returns an error code (SC_ERR_NONE = success). + * + * Return errors: + * - SC_PARM if arguments out of range or invalid, + * - SC_ERR_NOACCESS if caller's partition is not the pad owner, + * - SC_ERR_UNAVAILABLE if process not applicable + * + * Refer to the SoC [Pad List](@ref PADS) for valid pad values. + * + * Note \a psw_ovr is only applicable to pads supporting 2.5 volt + * operation (e.g. some Ethernet pads). + */ +sc_err_t sc_pad_set_gp_28fdsoi_comp(sc_ipc_t ipc, sc_pad_t pad, + uint8_t compen, sc_bool_t fastfrz, uint8_t rasrcp, uint8_t rasrcn, + sc_bool_t nasrc_sel, sc_bool_t psw_ovr); + +/*! + * This function gets the compensation control specific to 28FDSOI. + * + * @param[in] ipc IPC handle + * @param[in] pad pad to query + * @param[out] compen pointer to return compensation/freeze mode + * @param[out] fastfrz pointer to return fast freeze + * @param[out] rasrcp pointer to return compensation code for PMOS + * @param[out] rasrcn pointer to return compensation code for NMOS + * @param[out] nasrc_sel pointer to return NASRC read select + * @param[out] compok pointer to return compensation status + * @param[out] nasrc pointer to return NASRCP/NASRCN + * @param[out] psw_ovr pointer to return the 2.5v override + * + * @return Returns an error code (SC_ERR_NONE = success). + * + * Return errors: + * - SC_PARM if arguments out of range or invalid, + * - SC_ERR_NOACCESS if caller's partition is not the pad owner, + * - SC_ERR_UNAVAILABLE if process not applicable + * + * Refer to the SoC [Pad List](@ref PADS) for valid pad values. + */ +sc_err_t sc_pad_get_gp_28fdsoi_comp(sc_ipc_t ipc, sc_pad_t pad, + uint8_t *compen, sc_bool_t *fastfrz, uint8_t *rasrcp, uint8_t *rasrcn, + sc_bool_t *nasrc_sel, sc_bool_t *compok, uint8_t *nasrc, sc_bool_t *psw_ovr); + +/* @} */ + +#endif /* SC_PAD_API_H */ + +/**@}*/ + diff --git a/arch/arm/include/asm/arch-imx8/sci/svc/pm/api.h b/arch/arm/include/asm/arch-imx8/sci/svc/pm/api.h new file mode 100755 index 0000000000..25d8f063e6 --- /dev/null +++ b/arch/arm/include/asm/arch-imx8/sci/svc/pm/api.h @@ -0,0 +1,686 @@ +/* + * Copyright (C) 2016 Freescale Semiconductor, Inc. + * Copyright 2017-2018 NXP + * + * SPDX-License-Identifier: GPL-2.0+ + */ + +/*! + * Header file containing the public API for the System Controller (SC) + * Power Management (PM) function. This includes functions for power state + * control, clock control, reset control, and wake-up event control. + * + * @addtogroup PM_SVC (SVC) Power Management Service + * + * Module for the Power Management (PM) service. + * + * @{ + */ + +#ifndef SC_PM_API_H +#define SC_PM_API_H + +/* Includes */ + +#include +#include + +/* Defines */ + +/*! + * @name Defines for type widths + */ +/*@{*/ +#define SC_PM_POWER_MODE_W 2U /*!< Width of sc_pm_power_mode_t */ +#define SC_PM_CLOCK_MODE_W 3U /*!< Width of sc_pm_clock_mode_t */ +#define SC_PM_RESET_TYPE_W 2U /*!< Width of sc_pm_reset_type_t */ +#define SC_PM_RESET_REASON_W 3U /*!< Width of sc_pm_reset_reason_t */ +/*@}*/ + +/*! + * @name Defines for clock indexes (sc_pm_clk_t) + */ +/*@{*/ +/*@}*/ + +/*! + * @name Defines for ALL parameters + */ +/*@{*/ +#define SC_PM_CLK_ALL UINT8_MAX /*!< All clocks */ +/*@}*/ + +/*! + * @name Defines for sc_pm_power_mode_t + */ +/*@{*/ +#define SC_PM_PW_MODE_OFF 0U /*!< Power off */ +#define SC_PM_PW_MODE_STBY 1U /*!< Power in standby */ +#define SC_PM_PW_MODE_LP 2U /*!< Power in low-power */ +#define SC_PM_PW_MODE_ON 3U /*!< Power on */ +/*@}*/ + +/*! + * @name Defines for sc_pm_clk_t + */ +/*@{*/ +#define SC_PM_CLK_SLV_BUS 0U /*!< Slave bus clock */ +#define SC_PM_CLK_MST_BUS 1U /*!< Master bus clock */ +#define SC_PM_CLK_PER 2U /*!< Peripheral clock */ +#define SC_PM_CLK_PHY 3U /*!< Phy clock */ +#define SC_PM_CLK_MISC 4U /*!< Misc clock */ +#define SC_PM_CLK_MISC0 0U /*!< Misc 0 clock */ +#define SC_PM_CLK_MISC1 1U /*!< Misc 1 clock */ +#define SC_PM_CLK_MISC2 2U /*!< Misc 2 clock */ +#define SC_PM_CLK_MISC3 3U /*!< Misc 3 clock */ +#define SC_PM_CLK_MISC4 4U /*!< Misc 4 clock */ +#define SC_PM_CLK_CPU 2U /*!< CPU clock */ +#define SC_PM_CLK_PLL 4U /*!< PLL */ +#define SC_PM_CLK_BYPASS 4U /*!< Bypass clock */ +/*@}*/ + +/*! + * @name Defines for sc_pm_clk_mode_t + */ +/*@{*/ +#define SC_PM_CLK_MODE_ROM_INIT 0U /*!< Clock is initialized by ROM. */ +#define SC_PM_CLK_MODE_OFF 1U /*!< Clock is disabled */ +#define SC_PM_CLK_MODE_ON 2U /*!< Clock is enabled. */ +#define SC_PM_CLK_MODE_AUTOGATE_SW 3U /*!< Clock is in SW autogate mode */ +#define SC_PM_CLK_MODE_AUTOGATE_HW 4U /*!< Clock is in HW autogate mode */ +#define SC_PM_CLK_MODE_AUTOGATE_SW_HW 5U /*!< Clock is in SW-HW autogate mode */ +/*@}*/ + +/*! + * @name Defines for sc_pm_clk_parent_t + */ +/*@{*/ +#define SC_PM_PARENT_XTAL 0U /*!< Parent is XTAL. */ +#define SC_PM_PARENT_PLL0 1U /*!< Parent is PLL0 */ +#define SC_PM_PARENT_PLL1 2U /*!< Parent is PLL1 or PLL0/2 */ +#define SC_PM_PARENT_PLL2 3U /*!< Parent in PLL2 or PLL0/4 */ +#define SC_PM_PARENT_BYPS 4U /*!< Parent is a bypass clock. */ +/*@}*/ + +/*! + * @name Defines for sc_pm_reset_type_t + */ +/*@{*/ +#define SC_PM_RESET_TYPE_COLD 0U /*!< Cold reset */ +#define SC_PM_RESET_TYPE_WARM 1U /*!< Warm reset */ +#define SC_PM_RESET_TYPE_BOARD 2U /*!< Board reset */ +/*@}*/ + +/*! + * @name Defines for sc_pm_reset_cause_t + */ +/*@{*/ +#define SC_PM_RESET_CAUSE_TEMP 0U /*!< Reset due to temp panic alarm */ +#define SC_PM_RESET_CAUSE_FAULT 1U /*!< Reset due to fault exception */ +#define SC_PM_RESET_CAUSE_IRQ 2U /*!< Reset due to SCU reset IRQ */ +#define SC_PM_RESET_CAUSE_WDOG 3U /*!< Reset due to SW WDOG */ +#define SC_PM_RESET_CAUSE_API 4U /*!< Reset due to pm_reset() or monitor */ +/*@}*/ + +/*! + * @name Defines for sc_pm_reset_reason_t + */ +/*@{*/ +#define SC_PM_RESET_REASON_POR 0U /*!< Power on reset */ +#define SC_PM_RESET_REASON_WARM 1U /*!< Warm reset */ +#define SC_PM_RESET_REASON_SW 2U /*!< Software reset */ +#define SC_PM_RESET_REASON_WDOG 3U /*!< Watchdog reset */ +#define SC_PM_RESET_REASON_LOCKUP 4U /*!< Lockup reset */ +#define SC_PM_RESET_REASON_TAMPER 5U /*!< Tamper reset */ +#define SC_PM_RESET_REASON_TEMP 6U /*!< Temp reset */ +#define SC_PM_RESET_REASON_LOW_VOLT 7U /*!< Low voltage reset */ +/*@}*/ + +/*! + * @name Defines for sc_pm_sys_if_t + */ +/*@{*/ +#define SC_PM_SYS_IF_INTERCONNECT 0U /*!< System interconnect */ +#define SC_PM_SYS_IF_MU 1U /*!< AP -> SCU message units */ +#define SC_PM_SYS_IF_OCMEM 2U /*!< On-chip memory (ROM/OCRAM) */ +#define SC_PM_SYS_IF_DDR 3U /*!< DDR memory */ +/*@}*/ + +/*! + * @name Defines for sc_pm_wake_src_t + */ +/*@{*/ +#define SC_PM_WAKE_SRC_NONE 0U /*!< No wake source, used for self-kill */ +#define SC_PM_WAKE_SRC_SCU 1U /*!< Wakeup from SCU to resume CPU (IRQSTEER & GIC powered down) */ +#define SC_PM_WAKE_SRC_IRQSTEER 2U /*!< Wakeup from IRQSTEER to resume CPU (GIC powered down) */ +#define SC_PM_WAKE_SRC_IRQSTEER_GIC 3U /*!< Wakeup from IRQSTEER+GIC to wake CPU (GIC clock gated) */ +#define SC_PM_WAKE_SRC_GIC 4U /*!< Wakeup from GIC to wake CPU */ +/*@}*/ + +/* Types */ + +/*! + * This type is used to declare a power mode. Note resources only use + * SC_PM_PW_MODE_OFF and SC_PM_PW_MODE_ON. The other modes are used only + * as system power modes. + */ +typedef uint8_t sc_pm_power_mode_t; + +/*! + * This type is used to declare a clock. + */ +typedef uint8_t sc_pm_clk_t; + +/*! + * This type is used to declare a clock mode. + */ +typedef uint8_t sc_pm_clk_mode_t; + +/*! + * This type is used to declare the clock parent. + */ +typedef uint8_t sc_pm_clk_parent_t; + +/*! + * This type is used to declare clock rates. + */ +typedef uint32_t sc_pm_clock_rate_t; + +/*! + * This type is used to declare a desired reset type. + */ +typedef uint8_t sc_pm_reset_type_t; + +/*! + * This type is used to declare a desired reset type. + */ +typedef uint8_t sc_pm_reset_cause; + +/*! + * This type is used to declare a reason for a reset. + */ +typedef uint8_t sc_pm_reset_reason_t; + +/*! + * This type is used to specify a system-level interface to be power managed. + */ +typedef uint8_t sc_pm_sys_if_t; + +/*! + * This type is used to specify a wake source for CPU resources. + */ +typedef uint8_t sc_pm_wake_src_t; + +/* Functions */ + +/*! + * @name Power Functions + * @{ + */ + +/*! + * This function sets the system power mode. Only the owner of the + * SC_R_SYSTEM resource can do this. + * + * @param[in] ipc IPC handle + * @param[in] mode power mode to apply + * + * @return Returns an error code (SC_ERR_NONE = success). + * + * Return errors: + * - SC_ERR_PARM if invalid mode, + * - SC_ERR_NOACCESS if caller not the owner of SC_R_SYSTEM + * + * @see sc_pm_set_sys_power_mode(). + */ +sc_err_t sc_pm_set_sys_power_mode(sc_ipc_t ipc, sc_pm_power_mode_t mode); + +/*! + * This function sets the power mode of a partition. + * + * @param[in] ipc IPC handle + * @param[in] pt handle of partition + * @param[in] mode power mode to apply + * + * @return Returns an error code (SC_ERR_NONE = success). + * + * Return errors: + * - SC_ERR_PARM if invalid partition or mode, + * - SC_ERR_NOACCESS if caller's partition is not the owner or + * parent of \a pt + * + * The power mode of the partitions is a max power any resource will + * be set to. Calling this will result in all resources owned + * by \a pt to have their power changed to the lower of \a mode or the + * individual resource mode set using sc_pm_set_resource_power_mode(). + */ +sc_err_t sc_pm_set_partition_power_mode(sc_ipc_t ipc, sc_rm_pt_t pt, + sc_pm_power_mode_t mode); + +/*! + * This function gets the power mode of a partition. + * + * @param[in] ipc IPC handle + * @param[in] pt handle of partition + * @param[out] mode pointer to return power mode + * + * @return Returns an error code (SC_ERR_NONE = success). + * + * Return errors: + * - SC_ERR_PARM if invalid partition + */ +sc_err_t sc_pm_get_sys_power_mode(sc_ipc_t ipc, sc_rm_pt_t pt, + sc_pm_power_mode_t *mode); + +/*! + * This function sets the power mode of a resource. + * + * @param[in] ipc IPC handle + * @param[in] resource ID of the resource + * @param[in] mode power mode to apply + * + * @return Returns an error code (SC_ERR_NONE = success). + * + * Return errors: + * - SC_ERR_PARM if invalid resource or mode, + * - SC_ERR_NOACCESS if caller's partition is not the resource owner + * or parent of the owner + * + * Resources must be at SC_PM_PW_MODE_LP mode or higher to access them, + * otherwise the master will get a bus error or hang. + * + * This function will record the individual resource power mode + * and change it if the requested mode is lower than or equal to the + * partition power mode set with sc_pm_set_partition_power_mode(). + * In other words, the power mode of the resource will be the minimum + * of the resource power mode and the partition power mode. + * + * Note some resources are still not accessible even when powered up if bus + * transactions go through a fabric not powered up. Examples of this are + * resources in display and capture subsystems which require the display + * controller or the imaging subsytem to be powered up first. + * + * Not that resources are grouped into power domains by the underlying + * hardware. If any resource in the domain is on, the entire power domain + * will be on. Other power domains required to access the resource will + * also be turned on. Clocks required to access the peripheral will be + * turned on. Refer to the SoC RM for more info on power domains and access + * infrastructure (bus fabrics, clock domains, etc.). + */ +sc_err_t sc_pm_set_resource_power_mode(sc_ipc_t ipc, sc_rsrc_t resource, + sc_pm_power_mode_t mode); + +/*! + * This function gets the power mode of a resource. + * + * @param[in] ipc IPC handle + * @param[in] resource ID of the resource + * @param[out] mode pointer to return power mode + * + * @return Returns an error code (SC_ERR_NONE = success). + * + * Note only SC_PM_PW_MODE_OFF and SC_PM_PW_MODE_ON are valid. The value + * returned does not reflect the power mode of the partition.. + */ +sc_err_t sc_pm_get_resource_power_mode(sc_ipc_t ipc, sc_rsrc_t resource, + sc_pm_power_mode_t *mode); + +/*! + * This function requests the low power mode some of the resources + * can enter based on their state. This API is only valid for the + * following resources : SC_R_A53, SC_R_A53_0, SC_R_A53_1, SC_A53_2, + * SC_A53_3, SC_R_A72, SC_R_A72_0, SC_R_A72_1, SC_R_CC1, SC_R_A35, + * SC_R_A35_0, SC_R_A35_1, SC_R_A35_2, SC_R_A35_3. + * For all other resources it will return SC_ERR_PARAM. + * This function will set the low power mode the cores, cluster + * and cluster associated resources will enter when all the cores + * in a given cluster execute WFI + * + * @param[in] ipc IPC handle + * @param[in] resource ID of the resource + * @param[in] mode power mode to apply + * + * @return Returns an error code (SC_ERR_NONE = success). + * + */ +sc_err_t sc_pm_req_low_power_mode(sc_ipc_t ipc, sc_rsrc_t resource, + sc_pm_power_mode_t mode); + +/*! + * This function requests low-power mode entry for CPU/cluster + * resources. This API is only valid for the following resources: + * SC_R_A53, SC_R_A53_x, SC_R_A72, SC_R_A72_x, SC_R_A35, SC_R_A35_x, + * SC_R_CCI. For all other resources it will return SC_ERR_PARAM. + * For individual core resources, the specified power mode + * and wake source will be applied after the core has entered + * WFI. For cluster resources, the specified power mode is + * applied after all cores in the cluster have entered low-power mode. + * For multicluster resources, the specified power mode is applied + * after all clusters have reached low-power mode. + * + * @param[in] ipc IPC handle + * @param[in] resource ID of the resource + * @param[in] mode power mode to apply + * @param[in] wake_src wake source for low-power exit + * + * @return Returns an error code (SC_ERR_NONE = success). + * + */ +sc_err_t sc_pm_req_cpu_low_power_mode(sc_ipc_t ipc, sc_rsrc_t resource, + sc_pm_power_mode_t mode, sc_pm_wake_src_t wake_src); + +/*! + * This function is used to set the resume address of a CPU. + * + * @param[in] ipc IPC handle + * @param[in] resource ID of the CPU resource + * @param[in] address 64-bit resume address + * + * @return Returns an error code (SC_ERR_NONE = success). + * + * Return errors: + * - SC_ERR_PARM if invalid resource or address, + * - SC_ERR_NOACCESS if caller's partition is not the parent of the + * resource (CPU) owner + */ +sc_err_t sc_pm_set_cpu_resume_addr(sc_ipc_t ipc, sc_rsrc_t resource, + sc_faddr_t address); + +/*! + * This function is used to set parameters for CPU resume from + * low-power mode. + * + * @param[in] ipc IPC handle + * @param[in] resource ID of the CPU resource + * @param[in] isPrimary set SC_TRUE if primary wake CPU + * @param[in] address 64-bit resume address + * + * @return Returns an error code (SC_ERR_NONE = success). + * + * Return errors: + * - SC_ERR_PARM if invalid resource or address, + * - SC_ERR_NOACCESS if caller's partition is not the parent of the + * resource (CPU) owner + */ +sc_err_t sc_pm_set_cpu_resume(sc_ipc_t ipc, sc_rsrc_t resource, + sc_bool_t isPrimary, sc_faddr_t address); + +/*! + * This function requests the power mode configuration for system-level + * interfaces including messaging units, interconnect, and memories. This API + * is only valid for the following resources : SC_R_A53, SC_R_A72, and + * SC_R_M4_x_PID_y. For all other resources, it will return SC_ERR_PARAM. + * The requested power mode will be captured and applied to system-level + * resources as system conditions allow. + * + * @param[in] ipc IPC handle + * @param[in] resource ID of the resource + * @param[in] sys_if system-level interface to be configured + * @param[in] hpm high-power mode for the system interface + * @param[in] lpm low-power mode for the system interface + * + * @return Returns an error code (SC_ERR_NONE = success). + * + */ +sc_err_t sc_pm_req_sys_if_power_mode(sc_ipc_t ipc, sc_rsrc_t resource, + sc_pm_sys_if_t sys_if, sc_pm_power_mode_t hpm, sc_pm_power_mode_t lpm); + +/* @} */ + +/*! + * @name Clock/PLL Functions + * @{ + */ + +/*! + * This function sets the rate of a resource's clock/PLL. + * + * @param[in] ipc IPC handle + * @param[in] resource ID of the resource + * @param[in] clk clock/PLL to affect + * @param[in,out] rate pointer to rate to set, + * return actual rate + * @return Returns an error code (SC_ERR_NONE = success). + * + * Return errors: + * - SC_ERR_PARM if invalid resource or clock/PLL, + * - SC_ERR_NOACCESS if caller's partition is not the resource owner + * or parent of the owner, + * - SC_ERR_UNAVAILABLE if clock/PLL not applicable to this resource, + * - SC_ERR_LOCKED if rate locked (usually because shared clock/PLL) + * + * Refer to the [Clock List](@ref CLOCKS) for valid clock/PLL values. + */ +sc_err_t sc_pm_set_clock_rate(sc_ipc_t ipc, sc_rsrc_t resource, + sc_pm_clk_t clk, sc_pm_clock_rate_t *rate); + +/*! + * This function gets the rate of a resource's clock/PLL. + * + * @param[in] ipc IPC handle + * @param[in] resource ID of the resource + * @param[in] clk clock/PLL to affect + * @param[out] rate pointer to return rate + * + * @return Returns an error code (SC_ERR_NONE = success). + * + * Return errors: + * - SC_ERR_PARM if invalid resource or clock/PLL, + * - SC_ERR_NOACCESS if caller's partition is not the resource owner + * or parent of the owner, + * - SC_ERR_UNAVAILABLE if clock/PLL not applicable to this resource + * + * Refer to the [Clock List](@ref CLOCKS) for valid clock/PLL values. + */ +sc_err_t sc_pm_get_clock_rate(sc_ipc_t ipc, sc_rsrc_t resource, + sc_pm_clk_t clk, sc_pm_clock_rate_t *rate); + +/*! + * This function enables/disables a resource's clock. + * + * @param[in] ipc IPC handle + * @param[in] resource ID of the resource + * @param[in] clk clock to affect + * @param[in] enable enable if SC_TRUE; otherwise disabled + * @param[in] autog HW auto clock gating + * + * If \a resource is SC_R_ALL then all resources owned will be affected. + * No error will be returned. + * + * If \a clk is SC_PM_CLK_ALL, then an error will be returned if any + * of the available clocks returns an error. + * + * @return Returns an error code (SC_ERR_NONE = success). + * + * Return errors: + * - SC_ERR_PARM if invalid resource or clock, + * - SC_ERR_NOACCESS if caller's partition is not the resource owner + * or parent of the owner, + * - SC_ERR_UNAVAILABLE if clock not applicable to this resource + * + * Refer to the [Clock List](@ref CLOCKS) for valid clock values. + */ +sc_err_t sc_pm_clock_enable(sc_ipc_t ipc, sc_rsrc_t resource, + sc_pm_clk_t clk, sc_bool_t enable, sc_bool_t autog); + +/*! + * This function sets the parent of a resource's clock. + * This function should only be called when the clock is disabled. + * + * @param[in] ipc IPC handle + * @param[in] resource ID of the resource + * @param[in] clk clock to affect + * @param[in] parent New parent of the clock. + * + * @return Returns an error code (SC_ERR_NONE = success). + * + * Return errors: + * - SC_ERR_PARM if invalid resource or clock, + * - SC_ERR_NOACCESS if caller's partition is not the resource owner + * or parent of the owner, + * - SC_ERR_UNAVAILABLE if clock not applicable to this resource + * - SC_ERR_BUSY if clock is currently enabled. + * - SC_ERR_NOPOWER if resource not powered + * + * Refer to the [Clock List](@ref CLOCKS) for valid clock values. + */ +sc_err_t sc_pm_set_clock_parent(sc_ipc_t ipc, sc_rsrc_t resource, + sc_pm_clk_t clk, sc_pm_clk_parent_t parent); + +/*! + * This function gets the parent of a resource's clock. + * + * @param[in] ipc IPC handle + * @param[in] resource ID of the resource + * @param[in] clk clock to affect + * @param[out] parent pointer to return parent of clock. + * + * @return Returns an error code (SC_ERR_NONE = success). + * + * Return errors: + * - SC_ERR_PARM if invalid resource or clock, + * - SC_ERR_NOACCESS if caller's partition is not the resource owner + * or parent of the owner, + * - SC_ERR_UNAVAILABLE if clock not applicable to this resource + * + * Refer to the [Clock List](@ref CLOCKS) for valid clock values. + */ +sc_err_t sc_pm_get_clock_parent(sc_ipc_t ipc, sc_rsrc_t resource, + sc_pm_clk_t clk, sc_pm_clk_parent_t *parent); + +/* @} */ + +/*! + * @name Reset Functions + * @{ + */ + +/*! + * This function is used to reset the system. Only the owner of the + * SC_R_SYSTEM resource can do this. + * + * @param[in] ipc IPC handle + * @param[in] type reset type + * + * @return Returns an error code (SC_ERR_NONE = success). + * + * Return errors: + * - SC_ERR_PARM if invalid type, + * - SC_ERR_NOACCESS if caller not the owner of SC_R_SYSTEM + * + * If this function returns, then the reset did not occur due to an + * invalid parameter. + */ +sc_err_t sc_pm_reset(sc_ipc_t ipc, sc_pm_reset_type_t type); + +/*! + * This function gets a caller's reset reason. + * + * @param[in] ipc IPC handle + * @param[out] reason pointer to return reset reason + * + * @return Returns an error code (SC_ERR_NONE = success). + */ +sc_err_t sc_pm_reset_reason(sc_ipc_t ipc, sc_pm_reset_reason_t *reason); + +/*! + * This function is used to boot a partition. + * + * @param[in] ipc IPC handle + * @param[in] pt handle of partition to boot + * @param[in] resource_cpu ID of the CPU resource to start + * @param[in] boot_addr 64-bit boot address + * @param[in] resource_mu ID of the MU that must be powered + * @param[in] resource_dev ID of the boot device that must be powered + * + * @return Returns an error code (SC_ERR_NONE = success). + * + * Return errors: + * - SC_ERR_PARM if invalid partition, resource, or addr, + * - SC_ERR_NOACCESS if caller's partition is not the parent of the + * partition to boot + */ +sc_err_t sc_pm_boot(sc_ipc_t ipc, sc_rm_pt_t pt, + sc_rsrc_t resource_cpu, sc_faddr_t boot_addr, + sc_rsrc_t resource_mu, sc_rsrc_t resource_dev); + +/*! + * This function is used to reboot the caller's partition. + * + * @param[in] ipc IPC handle + * @param[in] type reset type + * + * If \a type is SC_PM_RESET_TYPE_COLD, then most peripherals owned by + * the calling partition will be reset if possible. SC state (partitions, + * power, clocks, etc.) is reset. The boot SW of the booting CPU must be + * able to handle peripherals that that are not reset. + * + * If \a type is SC_PM_RESET_TYPE_WARM, then only the boot CPU is reset. + * SC state (partitions, power, clocks, etc.) are NOT reset. The boot SW + * of the booting CPU must be able to handle peripherals and SC state that + * that are not reset. + * + * If \a type is SC_PM_RESET_TYPE_BOARD, then return with no action. + * + * If this function returns, then the reset did not occur due to an + * invalid parameter. + */ +void sc_pm_reboot(sc_ipc_t ipc, sc_pm_reset_type_t type); + +/*! + * This function is used to reboot a partition. + * + * @param[in] ipc IPC handle + * @param[in] pt handle of partition to reboot + * @param[in] type reset type + * + * If \a type is SC_PM_RESET_TYPE_COLD, then most peripherals owned by + * the calling partition will be reset if possible. SC state (partitions, + * power, clocks, etc.) is reset. The boot SW of the booting CPU must be + * able to handle peripherals that that are not reset. + * + * If \a type is SC_PM_RESET_TYPE_WARM, then only the boot CPU is reset. + * SC state (partitions, power, clocks, etc.) are NOT reset. The boot SW + * of the booting CPU must be able to handle peripherals and SC state that + * that are not reset. + * + * If \a type is SC_PM_RESET_TYPE_BOARD, then return with no action. + * + * @return Returns an error code (SC_ERR_NONE = success). + * + * Return errors: + * - SC_ERR_PARM if invalid partition or type + * - SC_ERR_NOACCESS if caller's partition is not the parent of \a pt, + * + * Most peripherals owned by the partition will be reset if + * possible. SC state (partitions, power, clocks, etc.) is reset. The + * boot SW of the booting CPU must be able to handle peripherals that + * that are not reset. + */ +sc_err_t sc_pm_reboot_partition(sc_ipc_t ipc, sc_rm_pt_t pt, + sc_pm_reset_type_t type); + +/*! + * This function is used to start/stop a CPU. + * + * @param[in] ipc IPC handle + * @param[in] resource ID of the CPU resource + * @param[in] enable start if SC_TRUE; otherwise stop + * @param[in] address 64-bit boot address + * + * @return Returns an error code (SC_ERR_NONE = success). + * + * Return errors: + * - SC_ERR_PARM if invalid resource or address, + * - SC_ERR_NOACCESS if caller's partition is not the parent of the + * resource (CPU) owner + */ +sc_err_t sc_pm_cpu_start(sc_ipc_t ipc, sc_rsrc_t resource, sc_bool_t enable, + sc_faddr_t address); + +/* @} */ + +#endif /* SC_PM_API_H */ + +/**@}*/ + diff --git a/arch/arm/include/asm/arch-imx8/sci/svc/rm/api.h b/arch/arm/include/asm/arch-imx8/sci/svc/rm/api.h new file mode 100755 index 0000000000..0de009a00e --- /dev/null +++ b/arch/arm/include/asm/arch-imx8/sci/svc/rm/api.h @@ -0,0 +1,759 @@ +/* + * Copyright (C) 2016 Freescale Semiconductor, Inc. + * Copyright 2017-2018 NXP + * + * SPDX-License-Identifier: GPL-2.0+ + */ + +/*! + * Header file containing the public API for the System Controller (SC) + * Resource Management (RM) function. This includes functions for + * partitioning resources, pads, and memory regions. + * + * @addtogroup RM_SVC (SVC) Resource Management Service + * + * Module for the Resource Management (RM) service. + * + * @includedoc rm/details.dox + * + * @{ + */ + +#ifndef SC_RM_API_H +#define SC_RM_API_H + +/* Includes */ + +#include + +/* Defines */ + +/*! + * @name Defines for type widths + */ +/*@{*/ +#define SC_RM_PARTITION_W 5U /*!< Width of sc_rm_pt_t */ +#define SC_RM_MEMREG_W 6U /*!< Width of sc_rm_mr_t */ +#define SC_RM_DID_W 4U /*!< Width of sc_rm_did_t */ +#define SC_RM_SID_W 6U /*!< Width of sc_rm_sid_t */ +#define SC_RM_SPA_W 2U /*!< Width of sc_rm_spa_t */ +#define SC_RM_PERM_W 3U /*!< Width of sc_rm_perm_t */ +/*@}*/ + +/*! + * @name Defines for ALL parameters + */ +/*@{*/ +#define SC_RM_PT_ALL ((sc_rm_pt_t) UINT8_MAX) /*!< All partitions */ +#define SC_RM_MR_ALL ((sc_rm_mr_t) UINT8_MAX) /*!< All memory regions */ +/*@}*/ + +/*! + * @name Defines for sc_rm_spa_t + */ +/*@{*/ +#define SC_RM_SPA_PASSTHRU 0U /*!< Pass through (attribute driven by master) */ +#define SC_RM_SPA_PASSSID 1U /*!< Pass through and output on SID */ +#define SC_RM_SPA_ASSERT 2U /*!< Assert (force to be secure/privileged) */ +#define SC_RM_SPA_NEGATE 3U /*!< Negate (force to be non-secure/user) */ +/*@}*/ + +/*! + * @name Defines for sc_rm_perm_t + */ +/*@{*/ +#define SC_RM_PERM_NONE 0U /*!< No access */ +#define SC_RM_PERM_SEC_R 1U /*!< Secure RO */ +#define SC_RM_PERM_SECPRIV_RW 2U /*!< Secure privilege R/W */ +#define SC_RM_PERM_SEC_RW 3U /*!< Secure R/W */ +#define SC_RM_PERM_NSPRIV_R 4U /*!< Secure R/W, non-secure privilege RO */ +#define SC_RM_PERM_NS_R 5U /*!< Secure R/W, non-secure RO */ +#define SC_RM_PERM_NSPRIV_RW 6U /*!< Secure R/W, non-secure privilege R/W */ +#define SC_RM_PERM_FULL 7U /*!< Full access */ +/*@}*/ + +/* Types */ + +/*! + * This type is used to declare a resource partition. + */ +typedef uint8_t sc_rm_pt_t; + +/*! + * This type is used to declare a memory region. + */ +typedef uint8_t sc_rm_mr_t; + +/*! + * This type is used to declare a resource domain ID used by the + * isolation HW. + */ +typedef uint8_t sc_rm_did_t; + +/*! + * This type is used to declare an SMMU StreamID. + */ +typedef uint16_t sc_rm_sid_t; + +/*! + * This type is a used to declare master transaction attributes. + */ +typedef uint8_t sc_rm_spa_t; + +/*! + * This type is used to declare a resource/memory region access permission. + * Refer to the XRDC2 Block Guide for more information. + */ +typedef uint8_t sc_rm_perm_t; + +/* Functions */ + +/*! + * @name Partition Functions + * @{ + */ + +/*! + * This function requests that the SC create a new resource partition. + * + * @param[in] ipc IPC handle + * @param[out] pt return handle for partition; used for subsequent function + * calls associated with this partition + * @param[in] secure boolean indicating if this partition should be secure; only + * valid if caller is secure + * @param[in] isolated boolean indicating if this partition should be HW isolated + * via XRDC; set SC_TRUE if new DID is desired + * @param[in] restricted boolean indicating if this partition should be restricted; set + * SC_TRUE if masters in this partition cannot create new partitions + * @param[in] grant boolean indicating if this partition should always grant + * access and control to the parent + * @param[in] coherent boolean indicating if this partition is coherent; + * set SC_TRUE if only this partition will contain both AP clusters + * and they will be coherent via the CCI + * + * @return Returns an error code (SC_ERR_NONE = success). + * + * Return errors: + * - SC_ERR_NOACCESS if caller's partition is restricted, + * - SC_ERR_PARM if caller's partition is not secure but a new secure partition is requested, + * - SC_ERR_LOCKED if caller's partition is locked, + * - SC_ERR_UNAVAILABLE if partition table is full (no more allocation space) + * + * Marking as non-secure prevents subsequent functions from configuring masters in this + * partition to assert the secure signal. If restricted then the new partition is limited + * in what functions it can call, especially those associated with managing partitions. + * + * The grant option is usually used to isolate a bus master's traffic to specific + * memory without isolating the peripheral interface of the master or the API + * controls of that master. + */ +sc_err_t sc_rm_partition_alloc(sc_ipc_t ipc, sc_rm_pt_t *pt, sc_bool_t secure, + sc_bool_t isolated, sc_bool_t restricted, sc_bool_t grant, sc_bool_t coherent); + +/*! + * This function makes a partition confidential. + * + * @param[in] ipc IPC handle + * @param[in] pt handle of partition that is granting + * @param[in] retro retroactive + * + * @return Returns an error code (SC_ERR_NONE = success). + * + * Return errors: + * - SC_PARM if \a pt out of range, + * - SC_ERR_NOACCESS if caller's not allowed to change \a pt + * - SC_ERR_LOCKED if partition \a pt is locked + * + * Call to make a partition confidential. Confidential means only this + * partition should be able to grant access permissions to this partition. + * + * If retroactive, then all resources owned by other partitions will have + * access rights for this partition removed, even if locked. + */ +sc_err_t sc_rm_set_confidential(sc_ipc_t ipc, sc_rm_pt_t pt, sc_bool_t retro); + +/*! + * This function frees a partition and assigns all resources to the caller. + * + * @param[in] ipc IPC handle + * @param[in] pt handle of partition to free + * + * @return Returns an error code (SC_ERR_NONE = success). + * + * Return errors: + * - SC_ERR_NOACCESS if caller's partition is restricted, + * - SC_PARM if \a pt out of range or invalid, + * - SC_ERR_NOACCESS if \a pt is the SC partition, + * - SC_ERR_NOACCESS if caller's partition is not the parent of \a pt, + * - SC_ERR_LOCKED if \a pt or caller's partition is locked + * + * All resources, memory regions, and pads are assigned to the caller/parent. + * The partition watchdog is disabled (even if locked). DID is freed. + */ +sc_err_t sc_rm_partition_free(sc_ipc_t ipc, sc_rm_pt_t pt); + +/*! + * This function returns the DID of a partition. + * + * @param[in] ipc IPC handle + * + * @return Returns the domain ID (DID) of the caller's partition. + * + * The DID is a SoC-specific internal ID used by the HW resource + * protection mechanism. It is only required by clients when using the + * SEMA42 module as the DID is sometimes connected to the master ID. + */ +sc_rm_did_t sc_rm_get_did(sc_ipc_t ipc); + +/*! + * This function forces a partition to use a specific static DID. + * + * @param[in] ipc IPC handle + * @param[in] pt handle of partition to assign \a did + * @param[in] did static DID to assign + * + * @return Returns an error code (SC_ERR_NONE = success). + * + * Return errors: + * - SC_ERR_NOACCESS if caller's partition is restricted, + * - SC_PARM if \a pt or \a did out of range, + * - SC_ERR_NOACCESS if caller's partition is not the parent of \a pt, + * - SC_ERR_LOCKED if \a pt is locked + * + * Assumes no assigned resources or memory regions yet! The number of static + * DID is fixed by the SC at boot. + */ +sc_err_t sc_rm_partition_static(sc_ipc_t ipc, sc_rm_pt_t pt, + sc_rm_did_t did); + +/*! + * This function locks a partition. + * + * @param[in] ipc IPC handle + * @param[in] pt handle of partition to lock + * + * @return Returns an error code (SC_ERR_NONE = success). + * + * Return errors: + * - SC_PARM if \a pt out of range, + * - SC_ERR_NOACCESS if caller's partition is not the parent of \a pt + * + * If a partition is locked it cannot be freed, have resources/pads assigned + * to/from it, memory regions created/assigned, DID changed, or parent changed. + */ +sc_err_t sc_rm_partition_lock(sc_ipc_t ipc, sc_rm_pt_t pt); + +/*! + * This function gets the partition handle of the caller. + * + * @param[in] ipc IPC handle + * @param[out] pt return handle for caller's partition + * + * @return Returns an error code (SC_ERR_NONE = success). + */ +sc_err_t sc_rm_get_partition(sc_ipc_t ipc, sc_rm_pt_t *pt); + +/*! + * This function sets a new parent for a partition. + * + * @param[in] ipc IPC handle + * @param[in] pt handle of partition for which parent is to be + * changed + * @param[in] pt_parent handle of partition to set as parent + * + * @return Returns an error code (SC_ERR_NONE = success). + * + * Return errors: + * - SC_ERR_NOACCESS if caller's partition is restricted, + * - SC_PARM if arguments out of range or invalid, + * - SC_ERR_NOACCESS if caller's partition is not the parent of \a pt, + * - SC_ERR_LOCKED if either partition is locked + */ +sc_err_t sc_rm_set_parent(sc_ipc_t ipc, sc_rm_pt_t pt, + sc_rm_pt_t pt_parent); + +/*! + * This function moves all movable resources/pads owned by a source partition + * to a destination partition. It can be used to more quickly set up a new + * partition if a majority of the caller's resources are to be moved to a + * new partition. + * + * @param[in] ipc IPC handle + * @param[in] pt_src handle of partition from which resources should + * be moved from + * @param[in] pt_dst handle of partition to which resources should be + * moved to + * @param[in] move_rsrc boolean to indicate if resources should be moved + * @param[in] move_pads boolean to indicate if pads should be moved + * + * @return Returns an error code (SC_ERR_NONE = success). + * + * By default, all resources are movable. This can be changed using the + * sc_rm_set_resource_movable() function. Note all masters defaulted to SMMU + * bypass. + * + * Return errors: + * - SC_ERR_NOACCESS if caller's partition is restricted, + * - SC_PARM if arguments out of range or invalid, + * - SC_ERR_NOACCESS if caller's partition is not \a pt_src or the + * parent of \a pt_src, + * - SC_ERR_LOCKED if either partition is locked + */ +sc_err_t sc_rm_move_all(sc_ipc_t ipc, sc_rm_pt_t pt_src, sc_rm_pt_t pt_dst, + sc_bool_t move_rsrc, sc_bool_t move_pads); + +/* @} */ + +/*! + * @name Resource Functions + * @{ + */ + +/*! + * This function assigns ownership of a resource to a partition. + * + * @param[in] ipc IPC handle + * @param[in] pt handle of partition to which resource should be + * assigned + * @param[in] resource resource to assign + * + * @return Returns an error code (SC_ERR_NONE = success). + * + * This action resets the resource's master and peripheral attributes. + * Privilege attribute will be PASSTHRU, security attribute will be + * ASSERT if the partition si secure and NEGATE if it is not, and + * masters will defaulted to SMMU bypass. Access permissions will reset + * to SEC_RW for the owning partition only for secure partitions, FULL for + * non-secure. DEfault is no access by other partitions. + * + * Return errors: + * - SC_ERR_NOACCESS if caller's partition is restricted, + * - SC_PARM if arguments out of range or invalid, + * - SC_ERR_NOACCESS if caller's partition is not the resource owner or parent + * of the owner, + * - SC_ERR_LOCKED if the owning partition or \a pt is locked + */ +sc_err_t sc_rm_assign_resource(sc_ipc_t ipc, sc_rm_pt_t pt, + sc_rsrc_t resource); + +/*! + * This function flags resources as movable or not. + * + * @param[in] ipc IPC handle + * @param[in] resource_fst first resource for which flag should be set + * @param[in] resource_lst last resource for which flag should be set + * @param[in] movable movable flag (SC_TRUE is movable) + * + * @return Returns an error code (SC_ERR_NONE = success). + * + * Return errors: + * - SC_PARM if resources are out of range, + * - SC_ERR_NOACCESS if caller's partition is not a parent of a resource owner, + * - SC_ERR_LOCKED if the owning partition is locked + * + * This function is used to determine the set of resources that will be + * moved using the sc_rm_move_all() function. All resources are movable + * by default so this function is normally used to prevent a set of + * resources from moving. + */ +sc_err_t sc_rm_set_resource_movable(sc_ipc_t ipc, sc_rsrc_t resource_fst, + sc_rsrc_t resource_lst, sc_bool_t movable); + +/*! + * This function flags all of a subsystem's resources as movable + * or not. + * + * @param[in] ipc IPC handle + * @param[in] resource resource to use to identify subsystem + * @param[in] movable movable flag (SC_TRUE is movable) + * + * @return Returns an error code (SC_ERR_NONE = success). + * + * Return errors: + * - SC_ERR_PARM if a function argument is out of range + * + * Note \a resource is used to find the associated subsystem. Only + * resources owned by the caller are set. + */ +sc_err_t sc_rm_set_subsys_rsrc_movable(sc_ipc_t ipc, sc_rsrc_t resource, + sc_bool_t movable); + +/*! + * This function sets attributes for a resource which is a bus master (i.e. + * capable of DMA). + * + * @param[in] ipc IPC handle + * @param[in] resource master resource for which attributes should apply + * @param[in] sa security attribute + * @param[in] pa privilege attribute + * @param[in] smmu_bypass SMMU bypass mode + * + * @return Returns an error code (SC_ERR_NONE = success). + * + * Return errors: + * - SC_ERR_NOACCESS if caller's partition is restricted, + * - SC_PARM if arguments out of range or invalid, + * - SC_ERR_NOACCESS if caller's partition is not a parent of the resource owner, + * - SC_ERR_LOCKED if the owning partition is locked + * + * This function configures how the HW isolation will see bus transactions + * from the specified master. Note the security attribute will only be + * changed if the caller's partition is secure. + */ +sc_err_t sc_rm_set_master_attributes(sc_ipc_t ipc, sc_rsrc_t resource, + sc_rm_spa_t sa, sc_rm_spa_t pa, sc_bool_t smmu_bypass); + +/*! + * This function sets the StreamID for a resource which is a bus master (i.e. + * capable of DMA). + * + * @param[in] ipc IPC handle + * @param[in] resource master resource for which attributes should apply + * @param[in] sid StreamID + * + * @return Returns an error code (SC_ERR_NONE = success). + * + * Return errors: + * - SC_ERR_NOACCESS if caller's partition is restricted, + * - SC_PARM if arguments out of range or invalid, + * - SC_ERR_NOACCESS if caller's partition is not the resource owner or parent + * of the owner, + * - SC_ERR_LOCKED if the owning partition is locked + * + * This function configures the SID attribute associated with all bus transactions + * from this master. Note 0 is not a valid SID as it is reserved to indicate + * bypass. + */ +sc_err_t sc_rm_set_master_sid(sc_ipc_t ipc, sc_rsrc_t resource, + sc_rm_sid_t sid); + +/*! + * This function sets access permissions for a peripheral resource. + * + * @param[in] ipc IPC handle + * @param[in] resource peripheral resource for which permissions should apply + * @param[in] pt handle of partition \a perm should by applied for + * @param[in] perm permissions to apply to \a resource for \a pt + * + * @return Returns an error code (SC_ERR_NONE = success). + * + * Return errors: + * - SC_PARM if arguments out of range or invalid, + * - SC_ERR_NOACCESS if caller's partition is not the resource owner or parent + * of the owner, + * - SC_ERR_LOCKED if the owning partition is locked + * - SC_ERR_LOCKED if the \a pt is confidential and the caller isn't \a pt + * + * This function configures how the HW isolation will restrict access to a + * peripheral based on the attributes of a transaction from bus master. + */ +sc_err_t sc_rm_set_peripheral_permissions(sc_ipc_t ipc, sc_rsrc_t resource, + sc_rm_pt_t pt, sc_rm_perm_t perm); + +/*! + * This function gets ownership status of a resource. + * + * @param[in] ipc IPC handle + * @param[in] resource resource to check + * + * @return Returns a boolean (SC_TRUE if caller's partition owns the resource). + * + * If \a resource is out of range then SC_FALSE is returned. + */ +sc_bool_t sc_rm_is_resource_owned(sc_ipc_t ipc, sc_rsrc_t resource); + +/*! + * This function is used to test if a resource is a bus master. + * + * @param[in] ipc IPC handle + * @param[in] resource resource to check + * + * @return Returns a boolean (SC_TRUE if the resource is a bus master). + * + * If \a resource is out of range then SC_FALSE is returned. + */ +sc_bool_t sc_rm_is_resource_master(sc_ipc_t ipc, sc_rsrc_t resource); + +/*! + * This function is used to test if a resource is a peripheral. + * + * @param[in] ipc IPC handle + * @param[in] resource resource to check + * + * @return Returns a boolean (SC_TRUE if the resource is a peripheral). + * + * If \a resource is out of range then SC_FALSE is returned. + */ +sc_bool_t sc_rm_is_resource_peripheral(sc_ipc_t ipc, sc_rsrc_t resource); + +/*! + * This function is used to obtain info about a resource. + * + * @param[in] ipc IPC handle + * @param[in] resource resource to inquire about + * @param[out] sid pointer to return StreamID + * + * @return Returns an error code (SC_ERR_NONE = success). + * + * Return errors: + * - SC_PARM if \a resource is out of range + */ +sc_err_t sc_rm_get_resource_info(sc_ipc_t ipc, sc_rsrc_t resource, + sc_rm_sid_t *sid); + +/* @} */ + +/*! + * @name Memory Region Functions + * @{ + */ + +/*! + * This function requests that the SC create a new memory region. + * + * @param[in] ipc IPC handle + * @param[out] mr return handle for region; used for + * subsequent function calls + * associated with this region + * @param[in] addr_start start address of region (physical) + * @param[in] addr_end end address of region (physical) + * + * @return Returns an error code (SC_ERR_NONE = success). + * + * Return errors: + * - SC_ERR_PARM if the new memory region is misaligned, + * - SC_ERR_LOCKED if caller's partition is locked, + * - SC_ERR_PARM if the new memory region spans multiple existing regions, + * - SC_ERR_NOACCESS if caller's partition does not own the memory containing + * the new region, + * - SC_ERR_UNAVAILABLE if memory region table is full (no more allocation + * space) + * + * The area covered by the memory region must currently be owned by the caller. + * By default, the new region will have access permission set to allow the + * caller to access. + */ +sc_err_t sc_rm_memreg_alloc(sc_ipc_t ipc, sc_rm_mr_t *mr, + sc_faddr_t addr_start, sc_faddr_t addr_end); + +/*! + * This function requests that the SC split a memory region. + * + * @param[in] ipc IPC handle + * @param[in] mr handle of memory region to split + * @param[out] mr_ret return handle for new region; used for + * subsequent function calls + * associated with this region + * @param[in] addr_start start address of region (physical) + * @param[in] addr_end end address of region (physical) + * + * @return Returns an error code (SC_ERR_NONE = success). + * + * Return errors: + * - SC_ERR_PARM if the new memory region is not start/end part of mr, + * - SC_ERR_LOCKED if caller's partition is locked, + * - SC_ERR_PARM if the new memory region spans multiple existing regions, + * - SC_ERR_NOACCESS if caller's partition does not own the memory containing + * the new region, + * - SC_ERR_UNAVAILABLE if memory region table is full (no more allocation + * space) + * + * Note the new region must start or end on the split region. + */ +sc_err_t sc_rm_memreg_split(sc_ipc_t ipc, sc_rm_mr_t mr, + sc_rm_mr_t *mr_ret, sc_faddr_t addr_start, sc_faddr_t addr_end); + +/*! + * This function frees a memory region. + * + * @param[in] ipc IPC handle + * @param[in] mr handle of memory region to free + * + * @return Returns an error code (SC_ERR_NONE = success). + * + * Return errors: + * - SC_PARM if \a mr out of range or invalid, + * - SC_ERR_NOACCESS if caller's partition is not a parent of \a mr, + * - SC_ERR_LOCKED if the owning partition of \a mr is locked + */ +sc_err_t sc_rm_memreg_free(sc_ipc_t ipc, sc_rm_mr_t mr); + +/*! + * Internal SC function to find a memory region. + * + * @see sc_rm_find_memreg(). + */ +/*! + * This function finds a memory region. + * + * @param[in] ipc IPC handle + * @param[out] mr return handle for region; used for + * subsequent function calls + * associated with this region + * @param[in] addr_start start address of region to search for + * @param[in] addr_end end address of region to search for + * + * @return Returns an error code (SC_ERR_NONE = success). + * + * Return errors: + * - SC_ERR_NOTFOUND if region not found, + * + * Searches only for regions owned by the caller. Finds first + * region containing the range specified. + */ +sc_err_t sc_rm_find_memreg(sc_ipc_t ipc, sc_rm_mr_t *mr, + sc_faddr_t addr_start, sc_faddr_t addr_end); + +/*! + * This function assigns ownership of a memory region. + * + * @param[in] ipc IPC handle + * @param[in] pt handle of partition to which memory region + * should be assigned + * @param[in] mr handle of memory region to assign + * + * @return Returns an error code (SC_ERR_NONE = success). + * + * Return errors: + * - SC_PARM if arguments out of range or invalid, + * - SC_ERR_NOACCESS if caller's partition is not the \a mr owner or parent + * of the owner, + * - SC_ERR_LOCKED if the owning partition or \a pt is locked + */ +sc_err_t sc_rm_assign_memreg(sc_ipc_t ipc, sc_rm_pt_t pt, sc_rm_mr_t mr); + +/*! + * This function sets access permissions for a memory region. + * + * @param[in] ipc IPC handle + * @param[in] mr handle of memory region for which permissions + * should apply + * @param[in] pt handle of partition \a perm should by + * applied for + * @param[in] perm permissions to apply to \a mr for \a pt + * + * @return Returns an error code (SC_ERR_NONE = success). + * + * Return errors: + * - SC_PARM if arguments out of range or invalid, + * - SC_ERR_NOACCESS if caller's partition is not the region owner or parent + * of the owner, + * - SC_ERR_LOCKED if the owning partition is locked + * - SC_ERR_LOCKED if the \a pt is confidential and the caller isn't \a pt + * + * This function configures how the HW isolation will restrict access to a + * memory region based on the attributes of a transaction from bus master. + */ +sc_err_t sc_rm_set_memreg_permissions(sc_ipc_t ipc, sc_rm_mr_t mr, + sc_rm_pt_t pt, sc_rm_perm_t perm); + +/*! + * This function gets ownership status of a memory region. + * + * @param[in] ipc IPC handle + * @param[in] mr handle of memory region to check + * + * @return Returns a boolean (SC_TRUE if caller's partition owns the + * memory region). + * + * If \a mr is out of range then SC_FALSE is returned. + */ +sc_bool_t sc_rm_is_memreg_owned(sc_ipc_t ipc, sc_rm_mr_t mr); + +/*! + * This function is used to obtain info about a memory region. + * + * @param[in] ipc IPC handle + * @param[in] mr handle of memory region to inquire about + * @param[out] addr_start pointer to return start address + * @param[out] addr_end pointer to return end address + * + * @return Returns an error code (SC_ERR_NONE = success). + * + * Return errors: + * - SC_PARM if \a mr is out of range + */ +sc_err_t sc_rm_get_memreg_info(sc_ipc_t ipc, sc_rm_mr_t mr, + sc_faddr_t *addr_start, sc_faddr_t *addr_end); + +/* @} */ + +/*! + * @name Pad Functions + * @{ + */ + +/*! + * This function assigns ownership of a pad to a partition. + * + * @param[in] ipc IPC handle + * @param[in] pt handle of partition to which pad should + * be assigned + * @param[in] pad pad to assign + * + * @return Returns an error code (SC_ERR_NONE = success). + * + * Return errors: + * - SC_ERR_NOACCESS if caller's partition is restricted, + * - SC_PARM if arguments out of range or invalid, + * - SC_ERR_NOACCESS if caller's partition is not the pad owner or parent + * of the owner, + * - SC_ERR_LOCKED if the owning partition or \a pt is locked + */ +sc_err_t sc_rm_assign_pad(sc_ipc_t ipc, sc_rm_pt_t pt, sc_pad_t pad); + +/*! + * This function flags pads as movable or not. + * + * @param[in] ipc IPC handle + * @param[in] pad_fst first pad for which flag should be set + * @param[in] pad_lst last pad for which flag should be set + * @param[in] movable movable flag (SC_TRUE is movable) + * + * @return Returns an error code (SC_ERR_NONE = success). + * + * Return errors: + * - SC_PARM if pads are out of range, + * - SC_ERR_NOACCESS if caller's partition is not a parent of a pad owner, + * - SC_ERR_LOCKED if the owning partition is locked + * + * This function is used to determine the set of pads that will be + * moved using the sc_rm_move_all() function. All pads are movable + * by default so this function is normally used to prevent a set of + * pads from moving. + */ +sc_err_t sc_rm_set_pad_movable(sc_ipc_t ipc, sc_pad_t pad_fst, + sc_pad_t pad_lst, sc_bool_t movable); + +/*! + * This function gets ownership status of a pad. + * + * @param[in] ipc IPC handle + * @param[in] pad pad to check + * + * @return Returns a boolean (SC_TRUE if caller's partition owns the pad). + * + * If \a pad is out of range then SC_FALSE is returned. + */ +sc_bool_t sc_rm_is_pad_owned(sc_ipc_t ipc, sc_pad_t pad); + +/* @} */ + +/*! + * @name Debug Functions + * @{ + */ + +/*! + * This function dumps the RM state for debug. + * + * @param[in] ipc IPC handle + */ +void sc_rm_dump(sc_ipc_t ipc); + +/* @} */ + +#endif /* SC_RM_API_H */ + +/**@}*/ + diff --git a/arch/arm/include/asm/arch-imx8/sci/svc/timer/api.h b/arch/arm/include/asm/arch-imx8/sci/svc/timer/api.h new file mode 100755 index 0000000000..631dab1531 --- /dev/null +++ b/arch/arm/include/asm/arch-imx8/sci/svc/timer/api.h @@ -0,0 +1,306 @@ +/* + * Copyright (C) 2016 Freescale Semiconductor, Inc. + * Copyright 2017-2018 NXP + * + * SPDX-License-Identifier: GPL-2.0+ + */ + +/*! + * Header file containing the public API for the System Controller (SC) + * Timer function. + * + * @addtogroup TIMER_SVC (SVC) Timer Service + * + * Module for the Timer service. This includes support for the watchdog, RTC, + * and system counter. Note every resource partition has a watchdog it can + * use. + * + * @{ + */ + +#ifndef SC_TIMER_API_H +#define SC_TIMER_API_H + +/* Includes */ + +#include +#include + +/* Defines */ + +/*! + * @name Defines for type widths + */ +/*@{*/ +#define SC_TIMER_ACTION_W 3U /*!< Width of sc_timer_wdog_action_t */ +/*@}*/ + +/*! + * @name Defines for sc_timer_wdog_action_t + */ +/*@{*/ +#define SC_TIMER_WDOG_ACTION_PARTITION 0U /*!< Reset partition */ +#define SC_TIMER_WDOG_ACTION_WARM 1U /*!< Warm reset system */ +#define SC_TIMER_WDOG_ACTION_COLD 2U /*!< Cold reset system */ +#define SC_TIMER_WDOG_ACTION_BOARD 3U /*!< Reset board */ +#define SC_TIMER_WDOG_ACTION_IRQ 4U /*!< Only generate IRQs */ +/*@}*/ + +/* Types */ + +/*! + * This type is used to configure the watchdog action. + */ +typedef uint8_t sc_timer_wdog_action_t; + +/*! + * This type is used to declare a watchdog time value in milliseconds. + */ +typedef uint32_t sc_timer_wdog_time_t; + +/* Functions */ + +/*! + * @name Wathdog Functions + * @{ + */ + +/*! + * This function sets the watchdog timeout in milliseconds. If not + * set then the timeout defaults to the max. Once locked this value + * cannot be changed. + * + * @param[in] ipc IPC handle + * @param[in] timeout timeout period for the watchdog + * + * @return Returns an error code (SC_ERR_NONE = success, SC_ERR_LOCKED + * = locked). + */ +sc_err_t sc_timer_set_wdog_timeout(sc_ipc_t ipc, + sc_timer_wdog_time_t timeout); + +/*! + * This function sets the watchdog pre-timeout in milliseconds. If not + * set then the pre-timeout defaults to the max. Once locked this value + * cannot be changed. + * + * @param[in] ipc IPC handle + * @param[in] pre_timeout pre-timeout period for the watchdog + * + * When the pre-timout expires an IRQ will be generated. Note this timeout + * clears when the IRQ is triggered. An IRQ is generated for the failing + * partition and all of its child partitions. + * + * @return Returns an error code (SC_ERR_NONE = success). + */ +sc_err_t sc_timer_set_wdog_pre_timeout(sc_ipc_t ipc, + sc_timer_wdog_time_t pre_timeout); + +/*! + * This function starts the watchdog. + * + * @param[in] ipc IPC handle + * @param[in] lock boolean indicating the lock status + * + * @return Returns an error code (SC_ERR_NONE = success). + * + * If \a lock is set then the watchdog cannot be stopped or the timeout + * period changed. + */ +sc_err_t sc_timer_start_wdog(sc_ipc_t ipc, sc_bool_t lock); + +/*! + * This function stops the watchdog if it is not locked. + * + * @param[in] ipc IPC handle + * + * @return Returns an error code (SC_ERR_NONE = success, SC_ERR_LOCKED + * = locked). + */ +sc_err_t sc_timer_stop_wdog(sc_ipc_t ipc); + +/*! + * This function pings (services, kicks) the watchdog resetting the time + * before expiration back to the timeout. + * + * @param[in] ipc IPC handle + * + * @return Returns an error code (SC_ERR_NONE = success). + */ +sc_err_t sc_timer_ping_wdog(sc_ipc_t ipc); + +/*! + * This function gets the status of the watchdog. All arguments are + * in milliseconds. + * + * @param[in] ipc IPC handle + * @param[out] timeout pointer to return the timeout + * @param[out] max_timeout pointer to return the max timeout + * @param[out] remaining_time pointer to return the time remaining + * until trigger + * + * @return Returns an error code (SC_ERR_NONE = success). + */ +sc_err_t sc_timer_get_wdog_status(sc_ipc_t ipc, + sc_timer_wdog_time_t *timeout, sc_timer_wdog_time_t *max_timeout, + sc_timer_wdog_time_t *remaining_time); + +/*! + * This function gets the status of the watchdog of a partition. All + * arguments are in milliseconds. + * + * @param[in] ipc IPC handle + * @param[in] pt partition to query + * @param[out] enb pointer to return enable status + * @param[out] timeout pointer to return the timeout + * @param[out] remaining_time pointer to return the time remaining + * until trigger + * + * @return Returns an error code (SC_ERR_NONE = success). + */ +sc_err_t sc_timer_pt_get_wdog_status(sc_ipc_t ipc, sc_rm_pt_t pt, sc_bool_t *enb, + sc_timer_wdog_time_t *timeout, sc_timer_wdog_time_t *remaining_time); + +/*! + * This function configures the action to be taken when a watchdog + * expires. + * + * @param[in] ipc IPC handle + * @param[in] pt partition to affect + * @param[in] action action to take + * + * Default action is inherited from the parent. + * + * @return Returns an error code (SC_ERR_NONE = success). + * + * Return errors: + * - SC_ERR_PARM if invalid parameters, + * - SC_ERR_NOACCESS if caller's partition is not the SYSTEM owner, + * - SC_ERR_LOCKED if the watchdog is locked + */ +sc_err_t sc_timer_set_wdog_action(sc_ipc_t ipc, + sc_rm_pt_t pt, sc_timer_wdog_action_t action); + +/* @} */ + +/*! + * @name Real-Time Clock (RTC) Functions + * @{ + */ + +/*! + * This function sets the RTC time. Only the owner of the SC_R_SYSTEM + * resource can set the time. + * + * @param[in] ipc IPC handle + * @param[in] year year (min 1970) + * @param[in] mon month (1-12) + * @param[in] day day of the month (1-31) + * @param[in] hour hour (0-23) + * @param[in] min minute (0-59) + * @param[in] sec second (0-59) + * + * @return Returns an error code (SC_ERR_NONE = success). + * + * Return errors: + * - SC_ERR_PARM if invalid time/date parameters, + * - SC_ERR_NOACCESS if caller's partition is not the SYSTEM owner + */ +sc_err_t sc_timer_set_rtc_time(sc_ipc_t ipc, uint16_t year, uint8_t mon, + uint8_t day, uint8_t hour, uint8_t min, uint8_t sec); + +/*! + * This function gets the RTC time. + * + * @param[in] ipc IPC handle + * @param[out] year pointer to return year (min 1970) + * @param[out] mon pointer to return month (1-12) + * @param[out] day pointer to return day of the month (1-31) + * @param[out] hour pointer to return hour (0-23) + * @param[out] min pointer to return minute (0-59) + * @param[out] sec pointer to return second (0-59) + * + * @return Returns an error code (SC_ERR_NONE = success). + */ +sc_err_t sc_timer_get_rtc_time(sc_ipc_t ipc, uint16_t *year, uint8_t *mon, + uint8_t *day, uint8_t *hour, uint8_t *min, uint8_t *sec); + +/*! + * This function gets the RTC time in seconds since 1/1/1970. + * + * @param[in] ipc IPC handle + * @param[out] sec pointer to return second + * + * @return Returns an error code (SC_ERR_NONE = success). + */ +sc_err_t sc_timer_get_rtc_sec1970(sc_ipc_t ipc, uint32_t *sec); + +/*! + * This function sets the RTC alarm. + * + * @param[in] ipc IPC handle + * @param[in] year year (min 1970) + * @param[in] mon month (1-12) + * @param[in] day day of the month (1-31) + * @param[in] hour hour (0-23) + * @param[in] min minute (0-59) + * @param[in] sec second (0-59) + * + * Note this alarm setting clears when the alarm is triggered. + * + * @return Returns an error code (SC_ERR_NONE = success). + * + * Return errors: + * - SC_ERR_PARM if invalid time/date parameters + */ +sc_err_t sc_timer_set_rtc_alarm(sc_ipc_t ipc, uint16_t year, uint8_t mon, + uint8_t day, uint8_t hour, uint8_t min, uint8_t sec); + +/*! + * This function sets the RTC alarm. + * + * @param[in] ipc IPC handle + * @param[in] sec period in seconds + * + * @return Returns an error code (SC_ERR_NONE = success). + * + * Return errors: + * - SC_ERR_PARM if invalid time/date parameters + */ +sc_err_t sc_timer_set_rtc_periodic_alarm(sc_ipc_t ipc, uint32_t sec); + +/*! + * This function sets the RTC alarm. + * + * @param[in] ipc IPC handle + * + * Note this alarm setting clears when the alarm is triggered. + * + * @return Returns an error code (SC_ERR_NONE = success). + * + * Return errors: + * - SC_ERR_PARM if invalid time/date parameters + */ +sc_err_t sc_timer_cancel_rtc_alarm(sc_ipc_t ipc); + +/*! + * This function sets the RTC calibration value. Only the owner of the SC_R_SYSTEM + * resource can set the calibration. + * + * @param[in] ipc IPC handle + * @param[in] count calbration count (-16 to 15) + * + * The calibration value is a 5-bit value including the sign bit, which is + * implemented in 2's complement. It is added or subtracted from the RTC on + * a perdiodic basis, once per 32768 cycles of the RTC clock. + * + * @return Returns an error code (SC_ERR_NONE = success). + */ +sc_err_t sc_timer_set_rtc_calb(sc_ipc_t ipc, int8_t count); + +/* @} */ + +#endif /* SC_TIMER_API_H */ + +/**@}*/ + diff --git a/arch/arm/include/asm/arch-imx8/sci/types.h b/arch/arm/include/asm/arch-imx8/sci/types.h new file mode 100755 index 0000000000..e4c37a0480 --- /dev/null +++ b/arch/arm/include/asm/arch-imx8/sci/types.h @@ -0,0 +1,862 @@ +/* + * Copyright (C) 2016 Freescale Semiconductor, Inc. + * Copyright 2017-2018 NXP + * + * SPDX-License-Identifier: GPL-2.0+ + */ + +/*! + * Header file containing types used across multiple service APIs. + */ + +#ifndef SC_TYPES_H +#define SC_TYPES_H + +/* Includes */ +#include + +/* Defines */ +/*! + * This type is used to declare a handle for an IPC communication + * channel. Its meaning is specific to the IPC implementation. + */ +typedef uint64_t sc_ipc_t; + +/*! + * This type is used to declare an ID for an IPC communication + * channel. Its meaning is specific to the IPC implementation. + */ +typedef uint64_t sc_ipc_id_t; + +/*! + * @name Defines for common frequencies + */ +/*@{*/ +#define SC_32KHZ 32768U /*!< 32KHz */ +#define SC_10MHZ 10000000U /*!< 10MHz */ +#define SC_20MHZ 20000000U /*!< 20MHz */ +#define SC_25MHZ 25000000U /*!< 25MHz */ +#define SC_27MHZ 27000000U /*!< 27MHz */ +#define SC_40MHZ 40000000U /*!< 40MHz */ +#define SC_45MHZ 45000000U /*!< 45MHz */ +#define SC_50MHZ 50000000U /*!< 50MHz */ +#define SC_60MHZ 60000000U /*!< 60MHz */ +#define SC_66MHZ 66666666U /*!< 66MHz */ +#define SC_74MHZ 74250000U /*!< 74.25MHz */ +#define SC_80MHZ 80000000U /*!< 80MHz */ +#define SC_83MHZ 83333333U /*!< 83MHz */ +#define SC_84MHZ 84375000U /*!< 84.37MHz */ +#define SC_100MHZ 100000000U /*!< 100MHz */ +#define SC_125MHZ 125000000U /*!< 125MHz */ +#define SC_133MHZ 133333333U /*!< 133MHz */ +#define SC_135MHZ 135000000U /*!< 135MHz */ +#define SC_150MHZ 150000000U /*!< 150MHz */ +#define SC_160MHZ 160000000U /*!< 160MHz */ +#define SC_166MHZ 166666666U /*!< 166MHz */ +#define SC_175MHZ 175000000U /*!< 175MHz */ +#define SC_180MHZ 180000000U /*!< 180MHz */ +#define SC_200MHZ 200000000U /*!< 200MHz */ +#define SC_250MHZ 250000000U /*!< 250MHz */ +#define SC_266MHZ 266666666U /*!< 266MHz */ +#define SC_300MHZ 300000000U /*!< 300MHz */ +#define SC_312MHZ 312500000U /*!< 312.5MHZ */ +#define SC_320MHZ 320000000U /*!< 320MHz */ +#define SC_325MHZ 325000000U /*!< 325MHz */ +#define SC_333MHZ 333333333U /*!< 333MHz */ +#define SC_350MHZ 350000000U /*!< 350MHz */ +#define SC_372MHZ 372000000U /*!< 372MHz */ +#define SC_375MHZ 375000000U /*!< 375MHz */ +#define SC_400MHZ 400000000U /*!< 400MHz */ +#define SC_500MHZ 500000000U /*!< 500MHz */ +#define SC_594MHZ 594000000U /*!< 594MHz */ +#define SC_625MHZ 625000000U /*!< 625MHz */ +#define SC_640MHZ 640000000U /*!< 640MHz */ +#define SC_650MHZ 650000000U /*!< 650MHz */ +#define SC_667MHZ 666666667U /*!< 667MHz */ +#define SC_675MHZ 675000000U /*!< 675MHz */ +#define SC_700MHZ 700000000U /*!< 700MHz */ +#define SC_720MHZ 720000000U /*!< 720MHz */ +#define SC_750MHZ 750000000U /*!< 750MHz */ +#define SC_800MHZ 800000000U /*!< 800MHz */ +#define SC_850MHZ 850000000U /*!< 850MHz */ +#define SC_900MHZ 900000000U /*!< 900MHz */ +#define SC_1000MHZ 1000000000U /*!< 1GHz */ +#define SC_1060MHZ 1060000000U /*!< 1.06GHz */ +#define SC_1188MHZ 1188000000U /*!< 1.188GHz */ +#define SC_1260MHZ 1260000000U /*!< 1.26GHz */ +#define SC_1280MHZ 1280000000U /*!< 1.28GHz */ +#define SC_1300MHZ 1300000000U /*!< 1.3GHz */ +#define SC_1400MHZ 1400000000U /*!< 1.4GHz */ +#define SC_1500MHZ 1500000000U /*!< 1.5GHz */ +#define SC_1600MHZ 1600000000U /*!< 1.6GHz */ +#define SC_1800MHZ 1800000000U /*!< 1.8GHz */ +#define SC_2000MHZ 2000000000U /*!< 2.0GHz */ +#define SC_2112MHZ 2112000000U /*!< 2.12GHz */ +/*@}*/ + +/*! + * @name Defines for 24M related frequencies + */ +/*@{*/ +#define SC_8MHZ 8000000U /*!< 8MHz */ +#define SC_12MHZ 12000000U /*!< 12MHz */ +#define SC_19MHZ 19800000U /*!< 19.8MHz */ +#define SC_24MHZ 24000000U /*!< 24MHz */ +#define SC_48MHZ 48000000U /*!< 48MHz */ +#define SC_120MHZ 120000000U /*!< 120MHz */ +#define SC_132MHZ 132000000U /*!< 132MHz */ +#define SC_144MHZ 144000000U /*!< 144MHz */ +#define SC_192MHZ 192000000U /*!< 192MHz */ +#define SC_211MHZ 211200000U /*!< 211.2MHz */ +#define SC_240MHZ 240000000U /*!< 240MHz */ +#define SC_264MHZ 264000000U /*!< 264MHz */ +#define SC_352MHZ 352000000U /*!< 352MHz */ +#define SC_360MHZ 360000000U /*!< 360MHz */ +#define SC_384MHZ 384000000U /*!< 384MHz */ +#define SC_396MHZ 396000000U /*!< 396MHz */ +#define SC_432MHZ 432000000U /*!< 432MHz */ +#define SC_480MHZ 480000000U /*!< 480MHz */ +#define SC_600MHZ 600000000U /*!< 600MHz */ +#define SC_744MHZ 744000000U /*!< 744MHz */ +#define SC_792MHZ 792000000U /*!< 792MHz */ +#define SC_864MHZ 864000000U /*!< 864MHz */ +#define SC_960MHZ 960000000U /*!< 960MHz */ +#define SC_1056MHZ 1056000000U /*!< 1056MHz */ +#define SC_1104MHZ 1104000000U /*!< 1104MHz */ +#define SC_1200MHZ 1200000000U /*!< 1.2GHz */ +#define SC_1464MHZ 1464000000U /*!< 1.464GHz */ +#define SC_2400MHZ 2400000000U /*!< 2.4GHz */ +/*@}*/ + +/*! + * @name Defines for A/V related frequencies + */ +/*@{*/ +#define SC_62MHZ 62937500U /*!< 62.9375MHz */ +#define SC_755MHZ 755250000U /*!< 755.25MHz */ +/*@}*/ + +/*! + * @name Defines for type widths + */ +/*@{*/ +#define SC_FADDR_W 36U /*!< Width of sc_faddr_t */ +#define SC_BOOL_W 1U /*!< Width of sc_bool_t */ +#define SC_ERR_W 4U /*!< Width of sc_err_t */ +#define SC_RSRC_W 10U /*!< Width of sc_rsrc_t */ +#define SC_CTRL_W 6U /*!< Width of sc_ctrl_t */ +/*@}*/ + +/*! + * @name Defines for sc_bool_t + */ +/*@{*/ +#define SC_FALSE ((sc_bool_t) 0U) /*!< True */ +#define SC_TRUE ((sc_bool_t) 1U) /*!< False */ +/*@}*/ + +/*! + * @name Defines for sc_err_t. + */ +/*@{*/ +#define SC_ERR_NONE 0U /*!< Success */ +#define SC_ERR_VERSION 1U /*!< Incompatible API version */ +#define SC_ERR_CONFIG 2U /*!< Configuration error */ +#define SC_ERR_PARM 3U /*!< Bad parameter */ +#define SC_ERR_NOACCESS 4U /*!< Permission error (no access) */ +#define SC_ERR_LOCKED 5U /*!< Permission error (locked) */ +#define SC_ERR_UNAVAILABLE 6U /*!< Unavailable (out of resources) */ +#define SC_ERR_NOTFOUND 7U /*!< Not found */ +#define SC_ERR_NOPOWER 8U /*!< No power */ +#define SC_ERR_IPC 9U /*!< Generic IPC error */ +#define SC_ERR_BUSY 10U /*!< Resource is currently busy/active */ +#define SC_ERR_FAIL 11U /*!< General I/O failure */ +#define SC_ERR_LAST 12U +/*@}*/ + +/*! + * @name Defines for sc_rsrc_t. + */ +/*@{*/ +#define SC_R_A53 0U +#define SC_R_A53_0 1U +#define SC_R_A53_1 2U +#define SC_R_A53_2 3U +#define SC_R_A53_3 4U +#define SC_R_A72 5U +#define SC_R_A72_0 6U +#define SC_R_A72_1 7U +#define SC_R_A72_2 8U +#define SC_R_A72_3 9U +#define SC_R_CCI 10U +#define SC_R_DB 11U +#define SC_R_DRC_0 12U +#define SC_R_DRC_1 13U +#define SC_R_GIC_SMMU 14U +#define SC_R_IRQSTR_M4_0 15U +#define SC_R_IRQSTR_M4_1 16U +#define SC_R_SMMU 17U +#define SC_R_GIC 18U +#define SC_R_DC_0_BLIT0 19U +#define SC_R_DC_0_BLIT1 20U +#define SC_R_DC_0_BLIT2 21U +#define SC_R_DC_0_BLIT_OUT 22U +#define SC_R_DC_0_CAPTURE0 23U +#define SC_R_DC_0_CAPTURE1 24U +#define SC_R_DC_0_WARP 25U +#define SC_R_DC_0_INTEGRAL0 26U +#define SC_R_DC_0_INTEGRAL1 27U +#define SC_R_DC_0_VIDEO0 28U +#define SC_R_DC_0_VIDEO1 29U +#define SC_R_DC_0_FRAC0 30U +#define SC_R_DC_0_FRAC1 31U +#define SC_R_DC_0 32U +#define SC_R_GPU_2_PID0 33U +#define SC_R_DC_0_PLL_0 34U +#define SC_R_DC_0_PLL_1 35U +#define SC_R_DC_1_BLIT0 36U +#define SC_R_DC_1_BLIT1 37U +#define SC_R_DC_1_BLIT2 38U +#define SC_R_DC_1_BLIT_OUT 39U +#define SC_R_DC_1_CAPTURE0 40U +#define SC_R_DC_1_CAPTURE1 41U +#define SC_R_DC_1_WARP 42U +#define SC_R_DC_1_INTEGRAL0 43U +#define SC_R_DC_1_INTEGRAL1 44U +#define SC_R_DC_1_VIDEO0 45U +#define SC_R_DC_1_VIDEO1 46U +#define SC_R_DC_1_FRAC0 47U +#define SC_R_DC_1_FRAC1 48U +#define SC_R_DC_1 49U +#define SC_R_GPU_3_PID0 50U +#define SC_R_DC_1_PLL_0 51U +#define SC_R_DC_1_PLL_1 52U +#define SC_R_SPI_0 53U +#define SC_R_SPI_1 54U +#define SC_R_SPI_2 55U +#define SC_R_SPI_3 56U +#define SC_R_UART_0 57U +#define SC_R_UART_1 58U +#define SC_R_UART_2 59U +#define SC_R_UART_3 60U +#define SC_R_UART_4 61U +#define SC_R_EMVSIM_0 62U +#define SC_R_EMVSIM_1 63U +#define SC_R_DMA_0_CH0 64U +#define SC_R_DMA_0_CH1 65U +#define SC_R_DMA_0_CH2 66U +#define SC_R_DMA_0_CH3 67U +#define SC_R_DMA_0_CH4 68U +#define SC_R_DMA_0_CH5 69U +#define SC_R_DMA_0_CH6 70U +#define SC_R_DMA_0_CH7 71U +#define SC_R_DMA_0_CH8 72U +#define SC_R_DMA_0_CH9 73U +#define SC_R_DMA_0_CH10 74U +#define SC_R_DMA_0_CH11 75U +#define SC_R_DMA_0_CH12 76U +#define SC_R_DMA_0_CH13 77U +#define SC_R_DMA_0_CH14 78U +#define SC_R_DMA_0_CH15 79U +#define SC_R_DMA_0_CH16 80U +#define SC_R_DMA_0_CH17 81U +#define SC_R_DMA_0_CH18 82U +#define SC_R_DMA_0_CH19 83U +#define SC_R_DMA_0_CH20 84U +#define SC_R_DMA_0_CH21 85U +#define SC_R_DMA_0_CH22 86U +#define SC_R_DMA_0_CH23 87U +#define SC_R_DMA_0_CH24 88U +#define SC_R_DMA_0_CH25 89U +#define SC_R_DMA_0_CH26 90U +#define SC_R_DMA_0_CH27 91U +#define SC_R_DMA_0_CH28 92U +#define SC_R_DMA_0_CH29 93U +#define SC_R_DMA_0_CH30 94U +#define SC_R_DMA_0_CH31 95U +#define SC_R_I2C_0 96U +#define SC_R_I2C_1 97U +#define SC_R_I2C_2 98U +#define SC_R_I2C_3 99U +#define SC_R_I2C_4 100U +#define SC_R_ADC_0 101U +#define SC_R_ADC_1 102U +#define SC_R_FTM_0 103U +#define SC_R_FTM_1 104U +#define SC_R_CAN_0 105U +#define SC_R_CAN_1 106U +#define SC_R_CAN_2 107U +#define SC_R_DMA_1_CH0 108U +#define SC_R_DMA_1_CH1 109U +#define SC_R_DMA_1_CH2 110U +#define SC_R_DMA_1_CH3 111U +#define SC_R_DMA_1_CH4 112U +#define SC_R_DMA_1_CH5 113U +#define SC_R_DMA_1_CH6 114U +#define SC_R_DMA_1_CH7 115U +#define SC_R_DMA_1_CH8 116U +#define SC_R_DMA_1_CH9 117U +#define SC_R_DMA_1_CH10 118U +#define SC_R_DMA_1_CH11 119U +#define SC_R_DMA_1_CH12 120U +#define SC_R_DMA_1_CH13 121U +#define SC_R_DMA_1_CH14 122U +#define SC_R_DMA_1_CH15 123U +#define SC_R_DMA_1_CH16 124U +#define SC_R_DMA_1_CH17 125U +#define SC_R_DMA_1_CH18 126U +#define SC_R_DMA_1_CH19 127U +#define SC_R_DMA_1_CH20 128U +#define SC_R_DMA_1_CH21 129U +#define SC_R_DMA_1_CH22 130U +#define SC_R_DMA_1_CH23 131U +#define SC_R_DMA_1_CH24 132U +#define SC_R_DMA_1_CH25 133U +#define SC_R_DMA_1_CH26 134U +#define SC_R_DMA_1_CH27 135U +#define SC_R_DMA_1_CH28 136U +#define SC_R_DMA_1_CH29 137U +#define SC_R_DMA_1_CH30 138U +#define SC_R_DMA_1_CH31 139U +#define SC_R_UNUSED1 140U +#define SC_R_UNUSED2 141U +#define SC_R_UNUSED3 142U +#define SC_R_UNUSED4 143U +#define SC_R_GPU_0_PID0 144U +#define SC_R_GPU_0_PID1 145U +#define SC_R_GPU_0_PID2 146U +#define SC_R_GPU_0_PID3 147U +#define SC_R_GPU_1_PID0 148U +#define SC_R_GPU_1_PID1 149U +#define SC_R_GPU_1_PID2 150U +#define SC_R_GPU_1_PID3 151U +#define SC_R_PCIE_A 152U +#define SC_R_SERDES_0 153U +#define SC_R_MATCH_0 154U +#define SC_R_MATCH_1 155U +#define SC_R_MATCH_2 156U +#define SC_R_MATCH_3 157U +#define SC_R_MATCH_4 158U +#define SC_R_MATCH_5 159U +#define SC_R_MATCH_6 160U +#define SC_R_MATCH_7 161U +#define SC_R_MATCH_8 162U +#define SC_R_MATCH_9 163U +#define SC_R_MATCH_10 164U +#define SC_R_MATCH_11 165U +#define SC_R_MATCH_12 166U +#define SC_R_MATCH_13 167U +#define SC_R_MATCH_14 168U +#define SC_R_PCIE_B 169U +#define SC_R_SATA_0 170U +#define SC_R_SERDES_1 171U +#define SC_R_HSIO_GPIO 172U +#define SC_R_MATCH_15 173U +#define SC_R_MATCH_16 174U +#define SC_R_MATCH_17 175U +#define SC_R_MATCH_18 176U +#define SC_R_MATCH_19 177U +#define SC_R_MATCH_20 178U +#define SC_R_MATCH_21 179U +#define SC_R_MATCH_22 180U +#define SC_R_MATCH_23 181U +#define SC_R_MATCH_24 182U +#define SC_R_MATCH_25 183U +#define SC_R_MATCH_26 184U +#define SC_R_MATCH_27 185U +#define SC_R_MATCH_28 186U +#define SC_R_LCD_0 187U +#define SC_R_LCD_0_PWM_0 188U +#define SC_R_LCD_0_I2C_0 189U +#define SC_R_LCD_0_I2C_1 190U +#define SC_R_PWM_0 191U +#define SC_R_PWM_1 192U +#define SC_R_PWM_2 193U +#define SC_R_PWM_3 194U +#define SC_R_PWM_4 195U +#define SC_R_PWM_5 196U +#define SC_R_PWM_6 197U +#define SC_R_PWM_7 198U +#define SC_R_GPIO_0 199U +#define SC_R_GPIO_1 200U +#define SC_R_GPIO_2 201U +#define SC_R_GPIO_3 202U +#define SC_R_GPIO_4 203U +#define SC_R_GPIO_5 204U +#define SC_R_GPIO_6 205U +#define SC_R_GPIO_7 206U +#define SC_R_GPT_0 207U +#define SC_R_GPT_1 208U +#define SC_R_GPT_2 209U +#define SC_R_GPT_3 210U +#define SC_R_GPT_4 211U +#define SC_R_KPP 212U +#define SC_R_MU_0A 213U +#define SC_R_MU_1A 214U +#define SC_R_MU_2A 215U +#define SC_R_MU_3A 216U +#define SC_R_MU_4A 217U +#define SC_R_MU_5A 218U +#define SC_R_MU_6A 219U +#define SC_R_MU_7A 220U +#define SC_R_MU_8A 221U +#define SC_R_MU_9A 222U +#define SC_R_MU_10A 223U +#define SC_R_MU_11A 224U +#define SC_R_MU_12A 225U +#define SC_R_MU_13A 226U +#define SC_R_MU_5B 227U +#define SC_R_MU_6B 228U +#define SC_R_MU_7B 229U +#define SC_R_MU_8B 230U +#define SC_R_MU_9B 231U +#define SC_R_MU_10B 232U +#define SC_R_MU_11B 233U +#define SC_R_MU_12B 234U +#define SC_R_MU_13B 235U +#define SC_R_ROM_0 236U +#define SC_R_FSPI_0 237U +#define SC_R_FSPI_1 238U +#define SC_R_IEE 239U +#define SC_R_IEE_R0 240U +#define SC_R_IEE_R1 241U +#define SC_R_IEE_R2 242U +#define SC_R_IEE_R3 243U +#define SC_R_IEE_R4 244U +#define SC_R_IEE_R5 245U +#define SC_R_IEE_R6 246U +#define SC_R_IEE_R7 247U +#define SC_R_SDHC_0 248U +#define SC_R_SDHC_1 249U +#define SC_R_SDHC_2 250U +#define SC_R_ENET_0 251U +#define SC_R_ENET_1 252U +#define SC_R_MLB_0 253U +#define SC_R_DMA_2_CH0 254U +#define SC_R_DMA_2_CH1 255U +#define SC_R_DMA_2_CH2 256U +#define SC_R_DMA_2_CH3 257U +#define SC_R_DMA_2_CH4 258U +#define SC_R_USB_0 259U +#define SC_R_USB_1 260U +#define SC_R_USB_0_PHY 261U +#define SC_R_USB_2 262U +#define SC_R_USB_2_PHY 263U +#define SC_R_DTCP 264U +#define SC_R_NAND 265U +#define SC_R_LVDS_0 266U +#define SC_R_LVDS_0_PWM_0 267U +#define SC_R_LVDS_0_I2C_0 268U +#define SC_R_LVDS_0_I2C_1 269U +#define SC_R_LVDS_1 270U +#define SC_R_LVDS_1_PWM_0 271U +#define SC_R_LVDS_1_I2C_0 272U +#define SC_R_LVDS_1_I2C_1 273U +#define SC_R_LVDS_2 274U +#define SC_R_LVDS_2_PWM_0 275U +#define SC_R_LVDS_2_I2C_0 276U +#define SC_R_LVDS_2_I2C_1 277U +#define SC_R_M4_0_PID0 278U +#define SC_R_M4_0_PID1 279U +#define SC_R_M4_0_PID2 280U +#define SC_R_M4_0_PID3 281U +#define SC_R_M4_0_PID4 282U +#define SC_R_M4_0_RGPIO 283U +#define SC_R_M4_0_SEMA42 284U +#define SC_R_M4_0_TPM 285U +#define SC_R_M4_0_PIT 286U +#define SC_R_M4_0_UART 287U +#define SC_R_M4_0_I2C 288U +#define SC_R_M4_0_INTMUX 289U +#define SC_R_M4_0_SIM 290U +#define SC_R_M4_0_WDOG 291U +#define SC_R_M4_0_MU_0B 292U +#define SC_R_M4_0_MU_0A0 293U +#define SC_R_M4_0_MU_0A1 294U +#define SC_R_M4_0_MU_0A2 295U +#define SC_R_M4_0_MU_0A3 296U +#define SC_R_M4_0_MU_1A 297U +#define SC_R_M4_1_PID0 298U +#define SC_R_M4_1_PID1 299U +#define SC_R_M4_1_PID2 300U +#define SC_R_M4_1_PID3 301U +#define SC_R_M4_1_PID4 302U +#define SC_R_M4_1_RGPIO 303U +#define SC_R_M4_1_SEMA42 304U +#define SC_R_M4_1_TPM 305U +#define SC_R_M4_1_PIT 306U +#define SC_R_M4_1_UART 307U +#define SC_R_M4_1_I2C 308U +#define SC_R_M4_1_INTMUX 309U +#define SC_R_M4_1_SIM 310U +#define SC_R_M4_1_WDOG 311U +#define SC_R_M4_1_MU_0B 312U +#define SC_R_M4_1_MU_0A0 313U +#define SC_R_M4_1_MU_0A1 314U +#define SC_R_M4_1_MU_0A2 315U +#define SC_R_M4_1_MU_0A3 316U +#define SC_R_M4_1_MU_1A 317U +#define SC_R_SAI_0 318U +#define SC_R_SAI_1 319U +#define SC_R_SAI_2 320U +#define SC_R_IRQSTR_SCU2 321U +#define SC_R_IRQSTR_DSP 322U +#define SC_R_UNUSED5 323U +#define SC_R_OCRAM 324U +#define SC_R_AUDIO_PLL_0 325U +#define SC_R_PI_0 326U +#define SC_R_PI_0_PWM_0 327U +#define SC_R_PI_0_PWM_1 328U +#define SC_R_PI_0_I2C_0 329U +#define SC_R_PI_0_PLL 330U +#define SC_R_PI_1 331U +#define SC_R_PI_1_PWM_0 332U +#define SC_R_PI_1_PWM_1 333U +#define SC_R_PI_1_I2C_0 334U +#define SC_R_PI_1_PLL 335U +#define SC_R_SC_PID0 336U +#define SC_R_SC_PID1 337U +#define SC_R_SC_PID2 338U +#define SC_R_SC_PID3 339U +#define SC_R_SC_PID4 340U +#define SC_R_SC_SEMA42 341U +#define SC_R_SC_TPM 342U +#define SC_R_SC_PIT 343U +#define SC_R_SC_UART 344U +#define SC_R_SC_I2C 345U +#define SC_R_SC_MU_0B 346U +#define SC_R_SC_MU_0A0 347U +#define SC_R_SC_MU_0A1 348U +#define SC_R_SC_MU_0A2 349U +#define SC_R_SC_MU_0A3 350U +#define SC_R_SC_MU_1A 351U +#define SC_R_SYSCNT_RD 352U +#define SC_R_SYSCNT_CMP 353U +#define SC_R_DEBUG 354U +#define SC_R_SYSTEM 355U +#define SC_R_SNVS 356U +#define SC_R_OTP 357U +#define SC_R_VPU_PID0 358U +#define SC_R_VPU_PID1 359U +#define SC_R_VPU_PID2 360U +#define SC_R_VPU_PID3 361U +#define SC_R_VPU_PID4 362U +#define SC_R_VPU_PID5 363U +#define SC_R_VPU_PID6 364U +#define SC_R_VPU_PID7 365U +#define SC_R_VPU_UART 366U +#define SC_R_VPUCORE 367U +#define SC_R_VPUCORE_0 368U +#define SC_R_VPUCORE_1 369U +#define SC_R_VPUCORE_2 370U +#define SC_R_VPUCORE_3 371U +#define SC_R_DMA_4_CH0 372U +#define SC_R_DMA_4_CH1 373U +#define SC_R_DMA_4_CH2 374U +#define SC_R_DMA_4_CH3 375U +#define SC_R_DMA_4_CH4 376U +#define SC_R_ISI_CH0 377U +#define SC_R_ISI_CH1 378U +#define SC_R_ISI_CH2 379U +#define SC_R_ISI_CH3 380U +#define SC_R_ISI_CH4 381U +#define SC_R_ISI_CH5 382U +#define SC_R_ISI_CH6 383U +#define SC_R_ISI_CH7 384U +#define SC_R_MJPEG_DEC_S0 385U +#define SC_R_MJPEG_DEC_S1 386U +#define SC_R_MJPEG_DEC_S2 387U +#define SC_R_MJPEG_DEC_S3 388U +#define SC_R_MJPEG_ENC_S0 389U +#define SC_R_MJPEG_ENC_S1 390U +#define SC_R_MJPEG_ENC_S2 391U +#define SC_R_MJPEG_ENC_S3 392U +#define SC_R_MIPI_0 393U +#define SC_R_MIPI_0_PWM_0 394U +#define SC_R_MIPI_0_I2C_0 395U +#define SC_R_MIPI_0_I2C_1 396U +#define SC_R_MIPI_1 397U +#define SC_R_MIPI_1_PWM_0 398U +#define SC_R_MIPI_1_I2C_0 399U +#define SC_R_MIPI_1_I2C_1 400U +#define SC_R_CSI_0 401U +#define SC_R_CSI_0_PWM_0 402U +#define SC_R_CSI_0_I2C_0 403U +#define SC_R_CSI_1 404U +#define SC_R_CSI_1_PWM_0 405U +#define SC_R_CSI_1_I2C_0 406U +#define SC_R_HDMI 407U +#define SC_R_HDMI_I2S 408U +#define SC_R_HDMI_I2C_0 409U +#define SC_R_HDMI_PLL_0 410U +#define SC_R_HDMI_RX 411U +#define SC_R_HDMI_RX_BYPASS 412U +#define SC_R_HDMI_RX_I2C_0 413U +#define SC_R_ASRC_0 414U +#define SC_R_ESAI_0 415U +#define SC_R_SPDIF_0 416U +#define SC_R_SPDIF_1 417U +#define SC_R_SAI_3 418U +#define SC_R_SAI_4 419U +#define SC_R_SAI_5 420U +#define SC_R_GPT_5 421U +#define SC_R_GPT_6 422U +#define SC_R_GPT_7 423U +#define SC_R_GPT_8 424U +#define SC_R_GPT_9 425U +#define SC_R_GPT_10 426U +#define SC_R_DMA_2_CH5 427U +#define SC_R_DMA_2_CH6 428U +#define SC_R_DMA_2_CH7 429U +#define SC_R_DMA_2_CH8 430U +#define SC_R_DMA_2_CH9 431U +#define SC_R_DMA_2_CH10 432U +#define SC_R_DMA_2_CH11 433U +#define SC_R_DMA_2_CH12 434U +#define SC_R_DMA_2_CH13 435U +#define SC_R_DMA_2_CH14 436U +#define SC_R_DMA_2_CH15 437U +#define SC_R_DMA_2_CH16 438U +#define SC_R_DMA_2_CH17 439U +#define SC_R_DMA_2_CH18 440U +#define SC_R_DMA_2_CH19 441U +#define SC_R_DMA_2_CH20 442U +#define SC_R_DMA_2_CH21 443U +#define SC_R_DMA_2_CH22 444U +#define SC_R_DMA_2_CH23 445U +#define SC_R_DMA_2_CH24 446U +#define SC_R_DMA_2_CH25 447U +#define SC_R_DMA_2_CH26 448U +#define SC_R_DMA_2_CH27 449U +#define SC_R_DMA_2_CH28 450U +#define SC_R_DMA_2_CH29 451U +#define SC_R_DMA_2_CH30 452U +#define SC_R_DMA_2_CH31 453U +#define SC_R_ASRC_1 454U +#define SC_R_ESAI_1 455U +#define SC_R_SAI_6 456U +#define SC_R_SAI_7 457U +#define SC_R_AMIX 458U +#define SC_R_MQS_0 459U +#define SC_R_DMA_3_CH0 460U +#define SC_R_DMA_3_CH1 461U +#define SC_R_DMA_3_CH2 462U +#define SC_R_DMA_3_CH3 463U +#define SC_R_DMA_3_CH4 464U +#define SC_R_DMA_3_CH5 465U +#define SC_R_DMA_3_CH6 466U +#define SC_R_DMA_3_CH7 467U +#define SC_R_DMA_3_CH8 468U +#define SC_R_DMA_3_CH9 469U +#define SC_R_DMA_3_CH10 470U +#define SC_R_DMA_3_CH11 471U +#define SC_R_DMA_3_CH12 472U +#define SC_R_DMA_3_CH13 473U +#define SC_R_DMA_3_CH14 474U +#define SC_R_DMA_3_CH15 475U +#define SC_R_DMA_3_CH16 476U +#define SC_R_DMA_3_CH17 477U +#define SC_R_DMA_3_CH18 478U +#define SC_R_DMA_3_CH19 479U +#define SC_R_DMA_3_CH20 480U +#define SC_R_DMA_3_CH21 481U +#define SC_R_DMA_3_CH22 482U +#define SC_R_DMA_3_CH23 483U +#define SC_R_DMA_3_CH24 484U +#define SC_R_DMA_3_CH25 485U +#define SC_R_DMA_3_CH26 486U +#define SC_R_DMA_3_CH27 487U +#define SC_R_DMA_3_CH28 488U +#define SC_R_DMA_3_CH29 489U +#define SC_R_DMA_3_CH30 490U +#define SC_R_DMA_3_CH31 491U +#define SC_R_AUDIO_PLL_1 492U +#define SC_R_AUDIO_CLK_0 493U +#define SC_R_AUDIO_CLK_1 494U +#define SC_R_MCLK_OUT_0 495U +#define SC_R_MCLK_OUT_1 496U +#define SC_R_PMIC_0 497U +#define SC_R_PMIC_1 498U +#define SC_R_SECO 499U +#define SC_R_CAAM_JR1 500U +#define SC_R_CAAM_JR2 501U +#define SC_R_CAAM_JR3 502U +#define SC_R_SECO_MU_2 503U +#define SC_R_SECO_MU_3 504U +#define SC_R_SECO_MU_4 505U +#define SC_R_HDMI_RX_PWM_0 506U +#define SC_R_A35 507U +#define SC_R_A35_0 508U +#define SC_R_A35_1 509U +#define SC_R_A35_2 510U +#define SC_R_A35_3 511U +#define SC_R_DSP 512U +#define SC_R_DSP_RAM 513U +#define SC_R_CAAM_JR1_OUT 514U +#define SC_R_CAAM_JR2_OUT 515U +#define SC_R_CAAM_JR3_OUT 516U +#define SC_R_VPU_DEC_0 517U +#define SC_R_VPU_ENC_0 518U +#define SC_R_CAAM_JR0 519U +#define SC_R_CAAM_JR0_OUT 520U +#define SC_R_PMIC_2 521U +#define SC_R_DBLOGIC 522U +#define SC_R_HDMI_PLL_1 523U +#define SC_R_BOARD_R0 524U +#define SC_R_BOARD_R1 525U +#define SC_R_BOARD_R2 526U +#define SC_R_BOARD_R3 527U +#define SC_R_BOARD_R4 528U +#define SC_R_BOARD_R5 529U +#define SC_R_BOARD_R6 530U +#define SC_R_BOARD_R7 531U +#define SC_R_MJPEG_DEC_MP 532U +#define SC_R_MJPEG_ENC_MP 533U +#define SC_R_VPU_TS_0 534U +#define SC_R_VPU_MU_0 535U +#define SC_R_VPU_MU_1 536U +#define SC_R_VPU_MU_2 537U +#define SC_R_VPU_MU_3 538U +#define SC_R_VPU_ENC_1 539U +#define SC_R_VPU 540U +#define SC_R_LAST 541U +#define SC_R_ALL ((sc_rsrc_t) UINT16_MAX) /*!< All resources */ +/*@}*/ + +/* NOTE - please add by replacing some of the UNUSED from above! */ + +/*! + * Defnes for sc_ctrl_t. + */ +#define SC_C_TEMP 0U +#define SC_C_TEMP_HI 1U +#define SC_C_TEMP_LOW 2U +#define SC_C_PXL_LINK_MST1_ADDR 3U +#define SC_C_PXL_LINK_MST2_ADDR 4U +#define SC_C_PXL_LINK_MST_ENB 5U +#define SC_C_PXL_LINK_MST1_ENB 6U +#define SC_C_PXL_LINK_MST2_ENB 7U +#define SC_C_PXL_LINK_SLV1_ADDR 8U +#define SC_C_PXL_LINK_SLV2_ADDR 9U +#define SC_C_PXL_LINK_MST_VLD 10U +#define SC_C_PXL_LINK_MST1_VLD 11U +#define SC_C_PXL_LINK_MST2_VLD 12U +#define SC_C_SINGLE_MODE 13U +#define SC_C_ID 14U +#define SC_C_PXL_CLK_POLARITY 15U +#define SC_C_LINESTATE 16U +#define SC_C_PCIE_G_RST 17U +#define SC_C_PCIE_BUTTON_RST 18U +#define SC_C_PCIE_PERST 19U +#define SC_C_PHY_RESET 20U +#define SC_C_PXL_LINK_RATE_CORRECTION 21U +#define SC_C_PANIC 22U +#define SC_C_PRIORITY_GROUP 23U +#define SC_C_TXCLK 24U +#define SC_C_CLKDIV 25U +#define SC_C_DISABLE_50 26U +#define SC_C_DISABLE_125 27U +#define SC_C_SEL_125 28U +#define SC_C_MODE 29U +#define SC_C_SYNC_CTRL0 30U +#define SC_C_KACHUNK_CNT 31U +#define SC_C_KACHUNK_SEL 32U +#define SC_C_SYNC_CTRL1 33U +#define SC_C_DPI_RESET 34U +#define SC_C_MIPI_RESET 35U +#define SC_C_DUAL_MODE 36U +#define SC_C_VOLTAGE 37U +#define SC_C_PXL_LINK_SEL 38U +#define SC_C_OFS_SEL 39U +#define SC_C_OFS_AUDIO 40U +#define SC_C_OFS_PERIPH 41U +#define SC_C_OFS_IRQ 42U +#define SC_C_RST0 43U +#define SC_C_RST1 44U +#define SC_C_SEL0 45U +#define SC_C_LAST 46U + +#define SC_P_ALL ((sc_pad_t) UINT16_MAX) /*!< All pads */ + +/* Types */ + +/*! + * This type is used to store a boolean + */ +typedef uint8_t sc_bool_t; + +/*! + * This type is used to store a system (full-size) address. + */ +typedef uint64_t sc_faddr_t; + +/*! + * This type is used to indicate error response for most functions. + */ +typedef uint8_t sc_err_t; + +/*! + * This type is used to indicate a resource. Resources include peripherals + * and bus masters (but not memory regions). Note items from list should + * never be changed or removed (only added to at the end of the list). + */ +typedef uint16_t sc_rsrc_t; + +/*! + * This type is used to indicate a control. + */ +typedef uint8_t sc_ctrl_t; + +/*! + * This type is used to indicate a pad. Valid values are SoC specific. + * + * Refer to the SoC [Pad List](@ref PADS) for valid pad values. + */ +typedef uint16_t sc_pad_t; + +/* Extra documentation of standard types */ + +#ifdef DOXYGEN + /*! + * Type used to declare an 8-bit integer. + */ + typedef __INT8_TYPE__ int8_t; + + /*! + * Type used to declare a 16-bit integer. + */ + typedef __INT16_TYPE__ int16_t; + + /*! + * Type used to declare a 32-bit integer. + */ + typedef __INT32_TYPE__ int32_t; + + /*! + * Type used to declare a 64-bit integer. + */ + typedef __INT64_TYPE__ int64_t; + + /*! + * Type used to declare an 8-bit unsigned integer. + */ + typedef __UINT8_TYPE__ uint8_t; + + /*! + * Type used to declare a 16-bit unsigned integer. + */ + typedef __UINT16_TYPE__ uint16_t; + + /*! + * Type used to declare a 32-bit unsigned integer. + */ + typedef __UINT32_TYPE__ uint32_t; + + /*! + * Type used to declare a 64-bit unsigned integer. + */ + typedef __UINT64_TYPE__ uint64_t; +#endif + +#endif /* SC_TYPES_H */ + diff --git a/arch/arm/mach-imx/imx8/Makefile b/arch/arm/mach-imx/imx8/Makefile new file mode 100644 index 0000000000..cfb7e34653 --- /dev/null +++ b/arch/arm/mach-imx/imx8/Makefile @@ -0,0 +1,11 @@ +# +# Copyright 2018 NXP +# +# SPDX-License-Identifier: GPL-2.0+ +# + +obj-y += sci/svc/misc/rpc_clnt.o +obj-y += sci/svc/pad/rpc_clnt.o +obj-y += sci/svc/pm/rpc_clnt.o +obj-y += sci/svc/rm/rpc_clnt.o +obj-y += sci/svc/timer/rpc_clnt.o diff --git a/arch/arm/mach-imx/imx8/sci/svc/irq/rpc.h b/arch/arm/mach-imx/imx8/sci/svc/irq/rpc.h new file mode 100644 index 0000000000..ca0653d4da --- /dev/null +++ b/arch/arm/mach-imx/imx8/sci/svc/irq/rpc.h @@ -0,0 +1,54 @@ +/* + * Copyright (C) 2016 Freescale Semiconductor, Inc. + * Copyright 2017-2018 NXP + * + * SPDX-License-Identifier: GPL-2.0+ + */ + +/*! + * Header file for the IRQ RPC implementation. + * + * @addtogroup IRQ_SVC + * @{ + */ + +#ifndef SC_IRQ_RPC_H +#define SC_IRQ_RPC_H + +/* Includes */ + +/* Defines */ + +/*! + * @name Defines for RPC IRQ function calls + */ +/*@{*/ +#define IRQ_FUNC_UNKNOWN 0 /*!< Unknown function */ +#define IRQ_FUNC_ENABLE 1U /*!< Index for irq_enable() RPC call */ +#define IRQ_FUNC_STATUS 2U /*!< Index for irq_status() RPC call */ +/*@}*/ + +/* Types */ + +/* Functions */ + +/*! + * This function dispatches an incoming IRQ RPC request. + * + * @param[in] caller_pt caller partition + * @param[in] msg pointer to RPC message + */ +void irq_dispatch(sc_rm_pt_t caller_pt, sc_rpc_msg_t *msg); + +/*! + * This function translates and dispatches an IRQ RPC request. + * + * @param[in] ipc IPC handle + * @param[in] msg pointer to RPC message + */ +void irq_xlate(sc_ipc_t ipc, sc_rpc_msg_t *msg); + +#endif /* SC_IRQ_RPC_H */ + +/**@}*/ + diff --git a/arch/arm/mach-imx/imx8/sci/svc/irq/rpc_clnt.c b/arch/arm/mach-imx/imx8/sci/svc/irq/rpc_clnt.c new file mode 100644 index 0000000000..8ecff72e21 --- /dev/null +++ b/arch/arm/mach-imx/imx8/sci/svc/irq/rpc_clnt.c @@ -0,0 +1,76 @@ +/* + * Copyright (C) 2016 Freescale Semiconductor, Inc. + * Copyright 2017-2018 NXP + * + * SPDX-License-Identifier: GPL-2.0+ + */ + +/*! + * File containing client-side RPC functions for the IRQ service. These + * functions are ported to clients that communicate to the SC. + * + * @addtogroup IRQ_SVC + * @{ + */ + +/* Includes */ + +#include +#include +#include +#include +#include "rpc.h" + +/* Local Defines */ + +/* Local Types */ + +/* Local Functions */ + +sc_err_t sc_irq_enable(sc_ipc_t ipc, sc_rsrc_t resource, + sc_irq_group_t group, uint32_t mask, sc_bool_t enable) +{ + sc_rpc_msg_t msg; + uint8_t result; + + RPC_VER(&msg) = SC_RPC_VERSION; + RPC_SVC(&msg) = (uint8_t) SC_RPC_SVC_IRQ; + RPC_FUNC(&msg) = (uint8_t) IRQ_FUNC_ENABLE; + RPC_U32(&msg, 0U) = (uint32_t) mask; + RPC_U16(&msg, 4U) = (uint16_t) resource; + RPC_U8(&msg, 6U) = (uint8_t) group; + RPC_U8(&msg, 7U) = (uint8_t) enable; + RPC_SIZE(&msg) = 3U; + + sc_call_rpc(ipc, &msg, SC_FALSE); + + result = RPC_R8(&msg); + return (sc_err_t) result; +} + +sc_err_t sc_irq_status(sc_ipc_t ipc, sc_rsrc_t resource, + sc_irq_group_t group, uint32_t *status) +{ + sc_rpc_msg_t msg; + uint8_t result; + + RPC_VER(&msg) = SC_RPC_VERSION; + RPC_SVC(&msg) = (uint8_t) SC_RPC_SVC_IRQ; + RPC_FUNC(&msg) = (uint8_t) IRQ_FUNC_STATUS; + RPC_U16(&msg, 0U) = (uint16_t) resource; + RPC_U8(&msg, 2U) = (uint8_t) group; + RPC_SIZE(&msg) = 2U; + + sc_call_rpc(ipc, &msg, SC_FALSE); + + if (status != NULL) + { + *status = RPC_U32(&msg, 0U); + } + + result = RPC_R8(&msg); + return (sc_err_t) result; +} + +/**@}*/ + diff --git a/arch/arm/mach-imx/imx8/sci/svc/misc/rpc.h b/arch/arm/mach-imx/imx8/sci/svc/misc/rpc.h new file mode 100644 index 0000000000..fee681d889 --- /dev/null +++ b/arch/arm/mach-imx/imx8/sci/svc/misc/rpc.h @@ -0,0 +1,76 @@ +/* + * Copyright (C) 2016 Freescale Semiconductor, Inc. + * Copyright 2017-2018 NXP + * + * SPDX-License-Identifier: GPL-2.0+ + */ + +/*! + * Header file for the MISC RPC implementation. + * + * @addtogroup MISC_SVC + * @{ + */ + +#ifndef SC_MISC_RPC_H +#define SC_MISC_RPC_H + +/* Includes */ + +/* Defines */ + +/*! + * @name Defines for RPC MISC function calls + */ +/*@{*/ +#define MISC_FUNC_UNKNOWN 0 /*!< Unknown function */ +#define MISC_FUNC_SET_CONTROL 1U /*!< Index for misc_set_control() RPC call */ +#define MISC_FUNC_GET_CONTROL 2U /*!< Index for misc_get_control() RPC call */ +#define MISC_FUNC_SET_MAX_DMA_GROUP 4U /*!< Index for misc_set_max_dma_group() RPC call */ +#define MISC_FUNC_SET_DMA_GROUP 5U /*!< Index for misc_set_dma_group() RPC call */ +#define MISC_FUNC_SECO_IMAGE_LOAD 8U /*!< Index for misc_seco_image_load() RPC call */ +#define MISC_FUNC_SECO_AUTHENTICATE 9U /*!< Index for misc_seco_authenticate() RPC call */ +#define MISC_FUNC_SECO_FUSE_WRITE 20U /*!< Index for misc_seco_fuse_write() RPC call */ +#define MISC_FUNC_SECO_ENABLE_DEBUG 21U /*!< Index for misc_seco_enable_debug() RPC call */ +#define MISC_FUNC_SECO_FORWARD_LIFECYCLE 22U /*!< Index for misc_seco_forward_lifecycle() RPC call */ +#define MISC_FUNC_SECO_RETURN_LIFECYCLE 23U /*!< Index for misc_seco_return_lifecycle() RPC call */ +#define MISC_FUNC_SECO_BUILD_INFO 24U /*!< Index for misc_seco_build_info() RPC call */ +#define MISC_FUNC_DEBUG_OUT 10U /*!< Index for misc_debug_out() RPC call */ +#define MISC_FUNC_WAVEFORM_CAPTURE 6U /*!< Index for misc_waveform_capture() RPC call */ +#define MISC_FUNC_BUILD_INFO 15U /*!< Index for misc_build_info() RPC call */ +#define MISC_FUNC_UNIQUE_ID 19U /*!< Index for misc_unique_id() RPC call */ +#define MISC_FUNC_SET_ARI 3U /*!< Index for misc_set_ari() RPC call */ +#define MISC_FUNC_BOOT_STATUS 7U /*!< Index for misc_boot_status() RPC call */ +#define MISC_FUNC_BOOT_DONE 14U /*!< Index for misc_boot_done() RPC call */ +#define MISC_FUNC_OTP_FUSE_READ 11U /*!< Index for misc_otp_fuse_read() RPC call */ +#define MISC_FUNC_OTP_FUSE_WRITE 17U /*!< Index for misc_otp_fuse_write() RPC call */ +#define MISC_FUNC_SET_TEMP 12U /*!< Index for misc_set_temp() RPC call */ +#define MISC_FUNC_GET_TEMP 13U /*!< Index for misc_get_temp() RPC call */ +#define MISC_FUNC_GET_BOOT_DEV 16U /*!< Index for misc_get_boot_dev() RPC call */ +#define MISC_FUNC_GET_BUTTON_STATUS 18U /*!< Index for misc_get_button_status() RPC call */ +/*@}*/ + +/* Types */ + +/* Functions */ + +/*! + * This function dispatches an incoming MISC RPC request. + * + * @param[in] caller_pt caller partition + * @param[in] msg pointer to RPC message + */ +void misc_dispatch(sc_rm_pt_t caller_pt, sc_rpc_msg_t *msg); + +/*! + * This function translates and dispatches an MISC RPC request. + * + * @param[in] ipc IPC handle + * @param[in] msg pointer to RPC message + */ +void misc_xlate(sc_ipc_t ipc, sc_rpc_msg_t *msg); + +#endif /* SC_MISC_RPC_H */ + +/**@}*/ + diff --git a/arch/arm/mach-imx/imx8/sci/svc/misc/rpc_clnt.c b/arch/arm/mach-imx/imx8/sci/svc/misc/rpc_clnt.c new file mode 100644 index 0000000000..b4a9741986 --- /dev/null +++ b/arch/arm/mach-imx/imx8/sci/svc/misc/rpc_clnt.c @@ -0,0 +1,515 @@ +/* + * Copyright (C) 2016 Freescale Semiconductor, Inc. + * Copyright 2017-2018 NXP + * + * SPDX-License-Identifier: GPL-2.0+ + */ + +/*! + * File containing client-side RPC functions for the MISC service. These + * functions are ported to clients that communicate to the SC. + * + * @addtogroup MISC_SVC + * @{ + */ + +/* Includes */ + +#include +#include +#include +#include +#include "rpc.h" + +/* Local Defines */ + +/* Local Types */ + +/* Local Functions */ + +sc_err_t sc_misc_set_control(sc_ipc_t ipc, sc_rsrc_t resource, + sc_ctrl_t ctrl, uint32_t val) +{ + sc_rpc_msg_t msg; + uint8_t result; + + RPC_VER(&msg) = SC_RPC_VERSION; + RPC_SVC(&msg) = (uint8_t) SC_RPC_SVC_MISC; + RPC_FUNC(&msg) = (uint8_t) MISC_FUNC_SET_CONTROL; + RPC_U32(&msg, 0U) = (uint32_t) ctrl; + RPC_U32(&msg, 4U) = (uint32_t) val; + RPC_U16(&msg, 8U) = (uint16_t) resource; + RPC_SIZE(&msg) = 4U; + + sc_call_rpc(ipc, &msg, SC_FALSE); + + result = RPC_R8(&msg); + return (sc_err_t) result; +} + +sc_err_t sc_misc_get_control(sc_ipc_t ipc, sc_rsrc_t resource, + sc_ctrl_t ctrl, uint32_t *val) +{ + sc_rpc_msg_t msg; + uint8_t result; + + RPC_VER(&msg) = SC_RPC_VERSION; + RPC_SVC(&msg) = (uint8_t) SC_RPC_SVC_MISC; + RPC_FUNC(&msg) = (uint8_t) MISC_FUNC_GET_CONTROL; + RPC_U32(&msg, 0U) = (uint32_t) ctrl; + RPC_U16(&msg, 4U) = (uint16_t) resource; + RPC_SIZE(&msg) = 3U; + + sc_call_rpc(ipc, &msg, SC_FALSE); + + if (val != NULL) + { + *val = RPC_U32(&msg, 0U); + } + + result = RPC_R8(&msg); + return (sc_err_t) result; +} + +sc_err_t sc_misc_set_max_dma_group(sc_ipc_t ipc, sc_rm_pt_t pt, + sc_misc_dma_group_t max) +{ + sc_rpc_msg_t msg; + uint8_t result; + + RPC_VER(&msg) = SC_RPC_VERSION; + RPC_SVC(&msg) = (uint8_t) SC_RPC_SVC_MISC; + RPC_FUNC(&msg) = (uint8_t) MISC_FUNC_SET_MAX_DMA_GROUP; + RPC_U8(&msg, 0U) = (uint8_t) pt; + RPC_U8(&msg, 1U) = (uint8_t) max; + RPC_SIZE(&msg) = 2U; + + sc_call_rpc(ipc, &msg, SC_FALSE); + + result = RPC_R8(&msg); + return (sc_err_t) result; +} + +sc_err_t sc_misc_set_dma_group(sc_ipc_t ipc, sc_rsrc_t resource, + sc_misc_dma_group_t group) +{ + sc_rpc_msg_t msg; + uint8_t result; + + RPC_VER(&msg) = SC_RPC_VERSION; + RPC_SVC(&msg) = (uint8_t) SC_RPC_SVC_MISC; + RPC_FUNC(&msg) = (uint8_t) MISC_FUNC_SET_DMA_GROUP; + RPC_U16(&msg, 0U) = (uint16_t) resource; + RPC_U8(&msg, 2U) = (uint8_t) group; + RPC_SIZE(&msg) = 2U; + + sc_call_rpc(ipc, &msg, SC_FALSE); + + result = RPC_R8(&msg); + return (sc_err_t) result; +} + +sc_err_t sc_misc_seco_image_load(sc_ipc_t ipc, sc_faddr_t addr_src, + sc_faddr_t addr_dst, uint32_t len, sc_bool_t fw) +{ + sc_rpc_msg_t msg; + uint8_t result; + + RPC_VER(&msg) = SC_RPC_VERSION; + RPC_SVC(&msg) = (uint8_t) SC_RPC_SVC_MISC; + RPC_FUNC(&msg) = (uint8_t) MISC_FUNC_SECO_IMAGE_LOAD; + RPC_U32(&msg, 0U) = (uint32_t) (addr_src >> 32U); + RPC_U32(&msg, 4U) = (uint32_t) addr_src; + RPC_U32(&msg, 8U) = (uint32_t) (addr_dst >> 32U); + RPC_U32(&msg, 12U) = (uint32_t) addr_dst; + RPC_U32(&msg, 16U) = (uint32_t) len; + RPC_U8(&msg, 20U) = (uint8_t) fw; + RPC_SIZE(&msg) = 7U; + + sc_call_rpc(ipc, &msg, SC_FALSE); + + result = RPC_R8(&msg); + return (sc_err_t) result; +} + +sc_err_t sc_misc_seco_authenticate(sc_ipc_t ipc, + sc_misc_seco_auth_cmd_t cmd, sc_faddr_t addr) +{ + sc_rpc_msg_t msg; + uint8_t result; + + RPC_VER(&msg) = SC_RPC_VERSION; + RPC_SVC(&msg) = (uint8_t) SC_RPC_SVC_MISC; + RPC_FUNC(&msg) = (uint8_t) MISC_FUNC_SECO_AUTHENTICATE; + RPC_U32(&msg, 0U) = (uint32_t) (addr >> 32U); + RPC_U32(&msg, 4U) = (uint32_t) addr; + RPC_U8(&msg, 8U) = (uint8_t) cmd; + RPC_SIZE(&msg) = 4U; + + sc_call_rpc(ipc, &msg, SC_FALSE); + + result = RPC_R8(&msg); + return (sc_err_t) result; +} + +sc_err_t sc_misc_seco_fuse_write(sc_ipc_t ipc, sc_faddr_t addr) +{ + sc_rpc_msg_t msg; + uint8_t result; + + RPC_VER(&msg) = SC_RPC_VERSION; + RPC_SVC(&msg) = (uint8_t) SC_RPC_SVC_MISC; + RPC_FUNC(&msg) = (uint8_t) MISC_FUNC_SECO_FUSE_WRITE; + RPC_U32(&msg, 0U) = (uint32_t) (addr >> 32U); + RPC_U32(&msg, 4U) = (uint32_t) addr; + RPC_SIZE(&msg) = 3U; + + sc_call_rpc(ipc, &msg, SC_FALSE); + + result = RPC_R8(&msg); + return (sc_err_t) result; +} + +sc_err_t sc_misc_seco_enable_debug(sc_ipc_t ipc, sc_faddr_t addr) +{ + sc_rpc_msg_t msg; + uint8_t result; + + RPC_VER(&msg) = SC_RPC_VERSION; + RPC_SVC(&msg) = (uint8_t) SC_RPC_SVC_MISC; + RPC_FUNC(&msg) = (uint8_t) MISC_FUNC_SECO_ENABLE_DEBUG; + RPC_U32(&msg, 0U) = (uint32_t) (addr >> 32U); + RPC_U32(&msg, 4U) = (uint32_t) addr; + RPC_SIZE(&msg) = 3U; + + sc_call_rpc(ipc, &msg, SC_FALSE); + + result = RPC_R8(&msg); + return (sc_err_t) result; +} + +sc_err_t sc_misc_seco_forward_lifecycle(sc_ipc_t ipc, uint32_t lifecycle) +{ + sc_rpc_msg_t msg; + uint8_t result; + + RPC_VER(&msg) = SC_RPC_VERSION; + RPC_SVC(&msg) = (uint8_t) SC_RPC_SVC_MISC; + RPC_FUNC(&msg) = (uint8_t) MISC_FUNC_SECO_FORWARD_LIFECYCLE; + RPC_U32(&msg, 0U) = (uint32_t) lifecycle; + RPC_SIZE(&msg) = 2U; + + sc_call_rpc(ipc, &msg, SC_FALSE); + + result = RPC_R8(&msg); + return (sc_err_t) result; +} + +sc_err_t sc_misc_seco_return_lifecycle(sc_ipc_t ipc, sc_faddr_t addr) +{ + sc_rpc_msg_t msg; + uint8_t result; + + RPC_VER(&msg) = SC_RPC_VERSION; + RPC_SVC(&msg) = (uint8_t) SC_RPC_SVC_MISC; + RPC_FUNC(&msg) = (uint8_t) MISC_FUNC_SECO_RETURN_LIFECYCLE; + RPC_U32(&msg, 0U) = (uint32_t) (addr >> 32U); + RPC_U32(&msg, 4U) = (uint32_t) addr; + RPC_SIZE(&msg) = 3U; + + sc_call_rpc(ipc, &msg, SC_FALSE); + + result = RPC_R8(&msg); + return (sc_err_t) result; +} + +void sc_misc_seco_build_info(sc_ipc_t ipc, uint32_t *version, + uint32_t *commit) +{ + sc_rpc_msg_t msg; + + RPC_VER(&msg) = SC_RPC_VERSION; + RPC_SVC(&msg) = (uint8_t) SC_RPC_SVC_MISC; + RPC_FUNC(&msg) = (uint8_t) MISC_FUNC_SECO_BUILD_INFO; + RPC_SIZE(&msg) = 1U; + + sc_call_rpc(ipc, &msg, SC_FALSE); + + if (version != NULL) + { + *version = RPC_U32(&msg, 0U); + } + + if (commit != NULL) + { + *commit = RPC_U32(&msg, 4U); + } + + return; +} + +void sc_misc_debug_out(sc_ipc_t ipc, uint8_t ch) +{ + sc_rpc_msg_t msg; + + RPC_VER(&msg) = SC_RPC_VERSION; + RPC_SVC(&msg) = (uint8_t) SC_RPC_SVC_MISC; + RPC_FUNC(&msg) = (uint8_t) MISC_FUNC_DEBUG_OUT; + RPC_U8(&msg, 0U) = (uint8_t) ch; + RPC_SIZE(&msg) = 2U; + + sc_call_rpc(ipc, &msg, SC_FALSE); + + return; +} + +sc_err_t sc_misc_waveform_capture(sc_ipc_t ipc, sc_bool_t enable) +{ + sc_rpc_msg_t msg; + uint8_t result; + + RPC_VER(&msg) = SC_RPC_VERSION; + RPC_SVC(&msg) = (uint8_t) SC_RPC_SVC_MISC; + RPC_FUNC(&msg) = (uint8_t) MISC_FUNC_WAVEFORM_CAPTURE; + RPC_U8(&msg, 0U) = (uint8_t) enable; + RPC_SIZE(&msg) = 2U; + + sc_call_rpc(ipc, &msg, SC_FALSE); + + result = RPC_R8(&msg); + return (sc_err_t) result; +} + +void sc_misc_build_info(sc_ipc_t ipc, uint32_t *build, + uint32_t *commit) +{ + sc_rpc_msg_t msg; + + RPC_VER(&msg) = SC_RPC_VERSION; + RPC_SVC(&msg) = (uint8_t) SC_RPC_SVC_MISC; + RPC_FUNC(&msg) = (uint8_t) MISC_FUNC_BUILD_INFO; + RPC_SIZE(&msg) = 1U; + + sc_call_rpc(ipc, &msg, SC_FALSE); + + if (build != NULL) + { + *build = RPC_U32(&msg, 0U); + } + + if (commit != NULL) + { + *commit = RPC_U32(&msg, 4U); + } + + return; +} + +void sc_misc_unique_id(sc_ipc_t ipc, uint32_t *id_l, + uint32_t *id_h) +{ + sc_rpc_msg_t msg; + + RPC_VER(&msg) = SC_RPC_VERSION; + RPC_SVC(&msg) = (uint8_t) SC_RPC_SVC_MISC; + RPC_FUNC(&msg) = (uint8_t) MISC_FUNC_UNIQUE_ID; + RPC_SIZE(&msg) = 1U; + + sc_call_rpc(ipc, &msg, SC_FALSE); + + if (id_l != NULL) + { + *id_l = RPC_U32(&msg, 0U); + } + + if (id_h != NULL) + { + *id_h = RPC_U32(&msg, 4U); + } + + return; +} + +sc_err_t sc_misc_set_ari(sc_ipc_t ipc, sc_rsrc_t resource, + sc_rsrc_t resource_mst, uint16_t ari, sc_bool_t enable) +{ + sc_rpc_msg_t msg; + uint8_t result; + + RPC_VER(&msg) = SC_RPC_VERSION; + RPC_SVC(&msg) = (uint8_t) SC_RPC_SVC_MISC; + RPC_FUNC(&msg) = (uint8_t) MISC_FUNC_SET_ARI; + RPC_U16(&msg, 0U) = (uint16_t) resource; + RPC_U16(&msg, 2U) = (uint16_t) resource_mst; + RPC_U16(&msg, 4U) = (uint16_t) ari; + RPC_U8(&msg, 6U) = (uint8_t) enable; + RPC_SIZE(&msg) = 3U; + + sc_call_rpc(ipc, &msg, SC_FALSE); + + result = RPC_R8(&msg); + return (sc_err_t) result; +} + +void sc_misc_boot_status(sc_ipc_t ipc, sc_misc_boot_status_t status) +{ + sc_rpc_msg_t msg; + + RPC_VER(&msg) = SC_RPC_VERSION; + RPC_SVC(&msg) = (uint8_t) SC_RPC_SVC_MISC; + RPC_FUNC(&msg) = (uint8_t) MISC_FUNC_BOOT_STATUS; + RPC_U8(&msg, 0U) = (uint8_t) status; + RPC_SIZE(&msg) = 2U; + + sc_call_rpc(ipc, &msg, SC_TRUE); + + return; +} + +sc_err_t sc_misc_boot_done(sc_ipc_t ipc, sc_rsrc_t cpu) +{ + sc_rpc_msg_t msg; + uint8_t result; + + RPC_VER(&msg) = SC_RPC_VERSION; + RPC_SVC(&msg) = (uint8_t) SC_RPC_SVC_MISC; + RPC_FUNC(&msg) = (uint8_t) MISC_FUNC_BOOT_DONE; + RPC_U16(&msg, 0U) = (uint16_t) cpu; + RPC_SIZE(&msg) = 2U; + + sc_call_rpc(ipc, &msg, SC_FALSE); + + result = RPC_R8(&msg); + return (sc_err_t) result; +} + +sc_err_t sc_misc_otp_fuse_read(sc_ipc_t ipc, uint32_t word, uint32_t *val) +{ + sc_rpc_msg_t msg; + uint8_t result; + + RPC_VER(&msg) = SC_RPC_VERSION; + RPC_SVC(&msg) = (uint8_t) SC_RPC_SVC_MISC; + RPC_FUNC(&msg) = (uint8_t) MISC_FUNC_OTP_FUSE_READ; + RPC_U32(&msg, 0U) = (uint32_t) word; + RPC_SIZE(&msg) = 2U; + + sc_call_rpc(ipc, &msg, SC_FALSE); + + if (val != NULL) + { + *val = RPC_U32(&msg, 0U); + } + + result = RPC_R8(&msg); + return (sc_err_t) result; +} + +sc_err_t sc_misc_otp_fuse_write(sc_ipc_t ipc, uint32_t word, uint32_t val) +{ + sc_rpc_msg_t msg; + uint8_t result; + + RPC_VER(&msg) = SC_RPC_VERSION; + RPC_SVC(&msg) = (uint8_t) SC_RPC_SVC_MISC; + RPC_FUNC(&msg) = (uint8_t) MISC_FUNC_OTP_FUSE_WRITE; + RPC_U32(&msg, 0U) = (uint32_t) word; + RPC_U32(&msg, 4U) = (uint32_t) val; + RPC_SIZE(&msg) = 3U; + + sc_call_rpc(ipc, &msg, SC_FALSE); + + result = RPC_R8(&msg); + return (sc_err_t) result; +} + +sc_err_t sc_misc_set_temp(sc_ipc_t ipc, sc_rsrc_t resource, + sc_misc_temp_t temp, int16_t celsius, int8_t tenths) +{ + sc_rpc_msg_t msg; + uint8_t result; + + RPC_VER(&msg) = SC_RPC_VERSION; + RPC_SVC(&msg) = (uint8_t) SC_RPC_SVC_MISC; + RPC_FUNC(&msg) = (uint8_t) MISC_FUNC_SET_TEMP; + RPC_U16(&msg, 0U) = (uint16_t) resource; + RPC_I16(&msg, 2U) = (int16_t) celsius; + RPC_U8(&msg, 4U) = (uint8_t) temp; + RPC_I8(&msg, 5U) = (int8_t) tenths; + RPC_SIZE(&msg) = 3U; + + sc_call_rpc(ipc, &msg, SC_FALSE); + + result = RPC_R8(&msg); + return (sc_err_t) result; +} + +sc_err_t sc_misc_get_temp(sc_ipc_t ipc, sc_rsrc_t resource, + sc_misc_temp_t temp, int16_t *celsius, int8_t *tenths) +{ + sc_rpc_msg_t msg; + uint8_t result; + + RPC_VER(&msg) = SC_RPC_VERSION; + RPC_SVC(&msg) = (uint8_t) SC_RPC_SVC_MISC; + RPC_FUNC(&msg) = (uint8_t) MISC_FUNC_GET_TEMP; + RPC_U16(&msg, 0U) = (uint16_t) resource; + RPC_U8(&msg, 2U) = (uint8_t) temp; + RPC_SIZE(&msg) = 2U; + + sc_call_rpc(ipc, &msg, SC_FALSE); + + if (celsius != NULL) + { + *celsius = RPC_I16(&msg, 0U); + } + + result = RPC_R8(&msg); + if (tenths != NULL) + { + *tenths = RPC_I8(&msg, 2U); + } + + return (sc_err_t) result; +} + +void sc_misc_get_boot_dev(sc_ipc_t ipc, sc_rsrc_t *dev) +{ + sc_rpc_msg_t msg; + + RPC_VER(&msg) = SC_RPC_VERSION; + RPC_SVC(&msg) = (uint8_t) SC_RPC_SVC_MISC; + RPC_FUNC(&msg) = (uint8_t) MISC_FUNC_GET_BOOT_DEV; + RPC_SIZE(&msg) = 1U; + + sc_call_rpc(ipc, &msg, SC_FALSE); + + if (dev != NULL) + { + *dev = RPC_U16(&msg, 0U); + } + + return; +} + +void sc_misc_get_button_status(sc_ipc_t ipc, sc_bool_t *status) +{ + sc_rpc_msg_t msg; + + RPC_VER(&msg) = SC_RPC_VERSION; + RPC_SVC(&msg) = (uint8_t) SC_RPC_SVC_MISC; + RPC_FUNC(&msg) = (uint8_t) MISC_FUNC_GET_BUTTON_STATUS; + RPC_SIZE(&msg) = 1U; + + sc_call_rpc(ipc, &msg, SC_FALSE); + + if (status != NULL) + { + *status = RPC_U8(&msg, 0U); + } + + return; +} + +/**@}*/ + diff --git a/arch/arm/mach-imx/imx8/sci/svc/pad/rpc.h b/arch/arm/mach-imx/imx8/sci/svc/pad/rpc.h new file mode 100644 index 0000000000..b658dcc23d --- /dev/null +++ b/arch/arm/mach-imx/imx8/sci/svc/pad/rpc.h @@ -0,0 +1,68 @@ +/* + * Copyright (C) 2016 Freescale Semiconductor, Inc. + * Copyright 2017-2018 NXP + * + * SPDX-License-Identifier: GPL-2.0+ + */ + +/*! + * Header file for the PAD RPC implementation. + * + * @addtogroup PAD_SVC + * @{ + */ + +#ifndef SC_PAD_RPC_H +#define SC_PAD_RPC_H + +/* Includes */ + +/* Defines */ + +/*! + * @name Defines for RPC PAD function calls + */ +/*@{*/ +#define PAD_FUNC_UNKNOWN 0 /*!< Unknown function */ +#define PAD_FUNC_SET_MUX 1U /*!< Index for pad_set_mux() RPC call */ +#define PAD_FUNC_GET_MUX 6U /*!< Index for pad_get_mux() RPC call */ +#define PAD_FUNC_SET_GP 2U /*!< Index for pad_set_gp() RPC call */ +#define PAD_FUNC_GET_GP 7U /*!< Index for pad_get_gp() RPC call */ +#define PAD_FUNC_SET_WAKEUP 4U /*!< Index for pad_set_wakeup() RPC call */ +#define PAD_FUNC_GET_WAKEUP 9U /*!< Index for pad_get_wakeup() RPC call */ +#define PAD_FUNC_SET_ALL 5U /*!< Index for pad_set_all() RPC call */ +#define PAD_FUNC_GET_ALL 10U /*!< Index for pad_get_all() RPC call */ +#define PAD_FUNC_SET 15U /*!< Index for pad_set() RPC call */ +#define PAD_FUNC_GET 16U /*!< Index for pad_get() RPC call */ +#define PAD_FUNC_SET_GP_28FDSOI 11U /*!< Index for pad_set_gp_28fdsoi() RPC call */ +#define PAD_FUNC_GET_GP_28FDSOI 12U /*!< Index for pad_get_gp_28fdsoi() RPC call */ +#define PAD_FUNC_SET_GP_28FDSOI_HSIC 3U /*!< Index for pad_set_gp_28fdsoi_hsic() RPC call */ +#define PAD_FUNC_GET_GP_28FDSOI_HSIC 8U /*!< Index for pad_get_gp_28fdsoi_hsic() RPC call */ +#define PAD_FUNC_SET_GP_28FDSOI_COMP 13U /*!< Index for pad_set_gp_28fdsoi_comp() RPC call */ +#define PAD_FUNC_GET_GP_28FDSOI_COMP 14U /*!< Index for pad_get_gp_28fdsoi_comp() RPC call */ +/*@}*/ + +/* Types */ + +/* Functions */ + +/*! + * This function dispatches an incoming PAD RPC request. + * + * @param[in] caller_pt caller partition + * @param[in] msg pointer to RPC message + */ +void pad_dispatch(sc_rm_pt_t caller_pt, sc_rpc_msg_t *msg); + +/*! + * This function translates and dispatches an PAD RPC request. + * + * @param[in] ipc IPC handle + * @param[in] msg pointer to RPC message + */ +void pad_xlate(sc_ipc_t ipc, sc_rpc_msg_t *msg); + +#endif /* SC_PAD_RPC_H */ + +/**@}*/ + diff --git a/arch/arm/mach-imx/imx8/sci/svc/pad/rpc_clnt.c b/arch/arm/mach-imx/imx8/sci/svc/pad/rpc_clnt.c new file mode 100644 index 0000000000..4a93c1a48e --- /dev/null +++ b/arch/arm/mach-imx/imx8/sci/svc/pad/rpc_clnt.c @@ -0,0 +1,475 @@ +/* + * Copyright (C) 2016 Freescale Semiconductor, Inc. + * Copyright 2017-2018 NXP + * + * SPDX-License-Identifier: GPL-2.0+ + */ + +/*! + * File containing client-side RPC functions for the PAD service. These + * functions are ported to clients that communicate to the SC. + * + * @addtogroup PAD_SVC + * @{ + */ + +/* Includes */ + +#include +#include +#include +#include +#include "rpc.h" + +/* Local Defines */ + +/* Local Types */ + +/* Local Functions */ + +sc_err_t sc_pad_set_mux(sc_ipc_t ipc, sc_pad_t pad, + uint8_t mux, sc_pad_config_t config, sc_pad_iso_t iso) +{ + sc_rpc_msg_t msg; + uint8_t result; + + RPC_VER(&msg) = SC_RPC_VERSION; + RPC_SVC(&msg) = (uint8_t) SC_RPC_SVC_PAD; + RPC_FUNC(&msg) = (uint8_t) PAD_FUNC_SET_MUX; + RPC_U16(&msg, 0U) = (uint16_t) pad; + RPC_U8(&msg, 2U) = (uint8_t) mux; + RPC_U8(&msg, 3U) = (uint8_t) config; + RPC_U8(&msg, 4U) = (uint8_t) iso; + RPC_SIZE(&msg) = 3U; + + sc_call_rpc(ipc, &msg, SC_FALSE); + + result = RPC_R8(&msg); + return (sc_err_t) result; +} + +sc_err_t sc_pad_get_mux(sc_ipc_t ipc, sc_pad_t pad, + uint8_t *mux, sc_pad_config_t *config, sc_pad_iso_t *iso) +{ + sc_rpc_msg_t msg; + uint8_t result; + + RPC_VER(&msg) = SC_RPC_VERSION; + RPC_SVC(&msg) = (uint8_t) SC_RPC_SVC_PAD; + RPC_FUNC(&msg) = (uint8_t) PAD_FUNC_GET_MUX; + RPC_U16(&msg, 0U) = (uint16_t) pad; + RPC_SIZE(&msg) = 2U; + + sc_call_rpc(ipc, &msg, SC_FALSE); + + result = RPC_R8(&msg); + if (mux != NULL) + { + *mux = RPC_U8(&msg, 0U); + } + + if (config != NULL) + { + *config = RPC_U8(&msg, 1U); + } + + if (iso != NULL) + { + *iso = RPC_U8(&msg, 2U); + } + + return (sc_err_t) result; +} + +sc_err_t sc_pad_set_gp(sc_ipc_t ipc, sc_pad_t pad, uint32_t ctrl) +{ + sc_rpc_msg_t msg; + uint8_t result; + + RPC_VER(&msg) = SC_RPC_VERSION; + RPC_SVC(&msg) = (uint8_t) SC_RPC_SVC_PAD; + RPC_FUNC(&msg) = (uint8_t) PAD_FUNC_SET_GP; + RPC_U32(&msg, 0U) = (uint32_t) ctrl; + RPC_U16(&msg, 4U) = (uint16_t) pad; + RPC_SIZE(&msg) = 3U; + + sc_call_rpc(ipc, &msg, SC_FALSE); + + result = RPC_R8(&msg); + return (sc_err_t) result; +} + +sc_err_t sc_pad_get_gp(sc_ipc_t ipc, sc_pad_t pad, uint32_t *ctrl) +{ + sc_rpc_msg_t msg; + uint8_t result; + + RPC_VER(&msg) = SC_RPC_VERSION; + RPC_SVC(&msg) = (uint8_t) SC_RPC_SVC_PAD; + RPC_FUNC(&msg) = (uint8_t) PAD_FUNC_GET_GP; + RPC_U16(&msg, 0U) = (uint16_t) pad; + RPC_SIZE(&msg) = 2U; + + sc_call_rpc(ipc, &msg, SC_FALSE); + + if (ctrl != NULL) + { + *ctrl = RPC_U32(&msg, 0U); + } + + result = RPC_R8(&msg); + return (sc_err_t) result; +} + +sc_err_t sc_pad_set_wakeup(sc_ipc_t ipc, sc_pad_t pad, + sc_pad_wakeup_t wakeup) +{ + sc_rpc_msg_t msg; + uint8_t result; + + RPC_VER(&msg) = SC_RPC_VERSION; + RPC_SVC(&msg) = (uint8_t) SC_RPC_SVC_PAD; + RPC_FUNC(&msg) = (uint8_t) PAD_FUNC_SET_WAKEUP; + RPC_U16(&msg, 0U) = (uint16_t) pad; + RPC_U8(&msg, 2U) = (uint8_t) wakeup; + RPC_SIZE(&msg) = 2U; + + sc_call_rpc(ipc, &msg, SC_FALSE); + + result = RPC_R8(&msg); + return (sc_err_t) result; +} + +sc_err_t sc_pad_get_wakeup(sc_ipc_t ipc, sc_pad_t pad, + sc_pad_wakeup_t *wakeup) +{ + sc_rpc_msg_t msg; + uint8_t result; + + RPC_VER(&msg) = SC_RPC_VERSION; + RPC_SVC(&msg) = (uint8_t) SC_RPC_SVC_PAD; + RPC_FUNC(&msg) = (uint8_t) PAD_FUNC_GET_WAKEUP; + RPC_U16(&msg, 0U) = (uint16_t) pad; + RPC_SIZE(&msg) = 2U; + + sc_call_rpc(ipc, &msg, SC_FALSE); + + result = RPC_R8(&msg); + if (wakeup != NULL) + { + *wakeup = RPC_U8(&msg, 0U); + } + + return (sc_err_t) result; +} + +sc_err_t sc_pad_set_all(sc_ipc_t ipc, sc_pad_t pad, uint8_t mux, + sc_pad_config_t config, sc_pad_iso_t iso, uint32_t ctrl, + sc_pad_wakeup_t wakeup) +{ + sc_rpc_msg_t msg; + uint8_t result; + + RPC_VER(&msg) = SC_RPC_VERSION; + RPC_SVC(&msg) = (uint8_t) SC_RPC_SVC_PAD; + RPC_FUNC(&msg) = (uint8_t) PAD_FUNC_SET_ALL; + RPC_U32(&msg, 0U) = (uint32_t) ctrl; + RPC_U16(&msg, 4U) = (uint16_t) pad; + RPC_U8(&msg, 6U) = (uint8_t) mux; + RPC_U8(&msg, 7U) = (uint8_t) config; + RPC_U8(&msg, 8U) = (uint8_t) iso; + RPC_U8(&msg, 9U) = (uint8_t) wakeup; + RPC_SIZE(&msg) = 4U; + + sc_call_rpc(ipc, &msg, SC_FALSE); + + result = RPC_R8(&msg); + return (sc_err_t) result; +} + +sc_err_t sc_pad_get_all(sc_ipc_t ipc, sc_pad_t pad, uint8_t *mux, + sc_pad_config_t *config, sc_pad_iso_t *iso, uint32_t *ctrl, + sc_pad_wakeup_t *wakeup) +{ + sc_rpc_msg_t msg; + uint8_t result; + + RPC_VER(&msg) = SC_RPC_VERSION; + RPC_SVC(&msg) = (uint8_t) SC_RPC_SVC_PAD; + RPC_FUNC(&msg) = (uint8_t) PAD_FUNC_GET_ALL; + RPC_U16(&msg, 0U) = (uint16_t) pad; + RPC_SIZE(&msg) = 2U; + + sc_call_rpc(ipc, &msg, SC_FALSE); + + if (ctrl != NULL) + { + *ctrl = RPC_U32(&msg, 0U); + } + + result = RPC_R8(&msg); + if (mux != NULL) + { + *mux = RPC_U8(&msg, 4U); + } + + if (config != NULL) + { + *config = RPC_U8(&msg, 5U); + } + + if (iso != NULL) + { + *iso = RPC_U8(&msg, 6U); + } + + if (wakeup != NULL) + { + *wakeup = RPC_U8(&msg, 7U); + } + + return (sc_err_t) result; +} + +sc_err_t sc_pad_set(sc_ipc_t ipc, sc_pad_t pad, uint32_t val) +{ + sc_rpc_msg_t msg; + uint8_t result; + + RPC_VER(&msg) = SC_RPC_VERSION; + RPC_SVC(&msg) = (uint8_t) SC_RPC_SVC_PAD; + RPC_FUNC(&msg) = (uint8_t) PAD_FUNC_SET; + RPC_U32(&msg, 0U) = (uint32_t) val; + RPC_U16(&msg, 4U) = (uint16_t) pad; + RPC_SIZE(&msg) = 3U; + + sc_call_rpc(ipc, &msg, SC_FALSE); + + result = RPC_R8(&msg); + return (sc_err_t) result; +} + +sc_err_t sc_pad_get(sc_ipc_t ipc, sc_pad_t pad, uint32_t *val) +{ + sc_rpc_msg_t msg; + uint8_t result; + + RPC_VER(&msg) = SC_RPC_VERSION; + RPC_SVC(&msg) = (uint8_t) SC_RPC_SVC_PAD; + RPC_FUNC(&msg) = (uint8_t) PAD_FUNC_GET; + RPC_U16(&msg, 0U) = (uint16_t) pad; + RPC_SIZE(&msg) = 2U; + + sc_call_rpc(ipc, &msg, SC_FALSE); + + if (val != NULL) + { + *val = RPC_U32(&msg, 0U); + } + + result = RPC_R8(&msg); + return (sc_err_t) result; +} + +sc_err_t sc_pad_set_gp_28fdsoi(sc_ipc_t ipc, sc_pad_t pad, + sc_pad_28fdsoi_dse_t dse, sc_pad_28fdsoi_ps_t ps) +{ + sc_rpc_msg_t msg; + uint8_t result; + + RPC_VER(&msg) = SC_RPC_VERSION; + RPC_SVC(&msg) = (uint8_t) SC_RPC_SVC_PAD; + RPC_FUNC(&msg) = (uint8_t) PAD_FUNC_SET_GP_28FDSOI; + RPC_U16(&msg, 0U) = (uint16_t) pad; + RPC_U8(&msg, 2U) = (uint8_t) dse; + RPC_U8(&msg, 3U) = (uint8_t) ps; + RPC_SIZE(&msg) = 2U; + + sc_call_rpc(ipc, &msg, SC_FALSE); + + result = RPC_R8(&msg); + return (sc_err_t) result; +} + +sc_err_t sc_pad_get_gp_28fdsoi(sc_ipc_t ipc, sc_pad_t pad, + sc_pad_28fdsoi_dse_t *dse, sc_pad_28fdsoi_ps_t *ps) +{ + sc_rpc_msg_t msg; + uint8_t result; + + RPC_VER(&msg) = SC_RPC_VERSION; + RPC_SVC(&msg) = (uint8_t) SC_RPC_SVC_PAD; + RPC_FUNC(&msg) = (uint8_t) PAD_FUNC_GET_GP_28FDSOI; + RPC_U16(&msg, 0U) = (uint16_t) pad; + RPC_SIZE(&msg) = 2U; + + sc_call_rpc(ipc, &msg, SC_FALSE); + + result = RPC_R8(&msg); + if (dse != NULL) + { + *dse = RPC_U8(&msg, 0U); + } + + if (ps != NULL) + { + *ps = RPC_U8(&msg, 1U); + } + + return (sc_err_t) result; +} + +sc_err_t sc_pad_set_gp_28fdsoi_hsic(sc_ipc_t ipc, sc_pad_t pad, + sc_pad_28fdsoi_dse_t dse, sc_bool_t hys, sc_pad_28fdsoi_pus_t pus, + sc_bool_t pke, sc_bool_t pue) +{ + sc_rpc_msg_t msg; + uint8_t result; + + RPC_VER(&msg) = SC_RPC_VERSION; + RPC_SVC(&msg) = (uint8_t) SC_RPC_SVC_PAD; + RPC_FUNC(&msg) = (uint8_t) PAD_FUNC_SET_GP_28FDSOI_HSIC; + RPC_U16(&msg, 0U) = (uint16_t) pad; + RPC_U8(&msg, 2U) = (uint8_t) dse; + RPC_U8(&msg, 3U) = (uint8_t) pus; + RPC_U8(&msg, 4U) = (uint8_t) hys; + RPC_U8(&msg, 5U) = (uint8_t) pke; + RPC_U8(&msg, 6U) = (uint8_t) pue; + RPC_SIZE(&msg) = 3U; + + sc_call_rpc(ipc, &msg, SC_FALSE); + + result = RPC_R8(&msg); + return (sc_err_t) result; +} + +sc_err_t sc_pad_get_gp_28fdsoi_hsic(sc_ipc_t ipc, sc_pad_t pad, + sc_pad_28fdsoi_dse_t *dse, sc_bool_t *hys, sc_pad_28fdsoi_pus_t *pus, + sc_bool_t *pke, sc_bool_t *pue) +{ + sc_rpc_msg_t msg; + uint8_t result; + + RPC_VER(&msg) = SC_RPC_VERSION; + RPC_SVC(&msg) = (uint8_t) SC_RPC_SVC_PAD; + RPC_FUNC(&msg) = (uint8_t) PAD_FUNC_GET_GP_28FDSOI_HSIC; + RPC_U16(&msg, 0U) = (uint16_t) pad; + RPC_SIZE(&msg) = 2U; + + sc_call_rpc(ipc, &msg, SC_FALSE); + + result = RPC_R8(&msg); + if (dse != NULL) + { + *dse = RPC_U8(&msg, 0U); + } + + if (pus != NULL) + { + *pus = RPC_U8(&msg, 1U); + } + + if (hys != NULL) + { + *hys = RPC_U8(&msg, 2U); + } + + if (pke != NULL) + { + *pke = RPC_U8(&msg, 3U); + } + + if (pue != NULL) + { + *pue = RPC_U8(&msg, 4U); + } + + return (sc_err_t) result; +} + +sc_err_t sc_pad_set_gp_28fdsoi_comp(sc_ipc_t ipc, sc_pad_t pad, + uint8_t compen, sc_bool_t fastfrz, uint8_t rasrcp, uint8_t rasrcn, + sc_bool_t nasrc_sel, sc_bool_t psw_ovr) +{ + sc_rpc_msg_t msg; + uint8_t result; + + RPC_VER(&msg) = SC_RPC_VERSION; + RPC_SVC(&msg) = (uint8_t) SC_RPC_SVC_PAD; + RPC_FUNC(&msg) = (uint8_t) PAD_FUNC_SET_GP_28FDSOI_COMP; + RPC_U16(&msg, 0U) = (uint16_t) pad; + RPC_U8(&msg, 2U) = (uint8_t) compen; + RPC_U8(&msg, 3U) = (uint8_t) rasrcp; + RPC_U8(&msg, 4U) = (uint8_t) rasrcn; + RPC_U8(&msg, 5U) = (uint8_t) fastfrz; + RPC_U8(&msg, 6U) = (uint8_t) nasrc_sel; + RPC_U8(&msg, 7U) = (uint8_t) psw_ovr; + RPC_SIZE(&msg) = 3U; + + sc_call_rpc(ipc, &msg, SC_FALSE); + + result = RPC_R8(&msg); + return (sc_err_t) result; +} + +sc_err_t sc_pad_get_gp_28fdsoi_comp(sc_ipc_t ipc, sc_pad_t pad, + uint8_t *compen, sc_bool_t *fastfrz, uint8_t *rasrcp, uint8_t *rasrcn, + sc_bool_t *nasrc_sel, sc_bool_t *compok, uint8_t *nasrc, sc_bool_t *psw_ovr) +{ + sc_rpc_msg_t msg; + uint8_t result; + + RPC_VER(&msg) = SC_RPC_VERSION; + RPC_SVC(&msg) = (uint8_t) SC_RPC_SVC_PAD; + RPC_FUNC(&msg) = (uint8_t) PAD_FUNC_GET_GP_28FDSOI_COMP; + RPC_U16(&msg, 0U) = (uint16_t) pad; + RPC_SIZE(&msg) = 2U; + + sc_call_rpc(ipc, &msg, SC_FALSE); + + result = RPC_R8(&msg); + if (compen != NULL) + { + *compen = RPC_U8(&msg, 0U); + } + + if (rasrcp != NULL) + { + *rasrcp = RPC_U8(&msg, 1U); + } + + if (rasrcn != NULL) + { + *rasrcn = RPC_U8(&msg, 2U); + } + + if (nasrc != NULL) + { + *nasrc = RPC_U8(&msg, 3U); + } + + if (fastfrz != NULL) + { + *fastfrz = RPC_U8(&msg, 4U); + } + + if (nasrc_sel != NULL) + { + *nasrc_sel = RPC_U8(&msg, 5U); + } + + if (compok != NULL) + { + *compok = RPC_U8(&msg, 6U); + } + + if (psw_ovr != NULL) + { + *psw_ovr = RPC_U8(&msg, 7U); + } + + return (sc_err_t) result; +} + +/**@}*/ + diff --git a/arch/arm/mach-imx/imx8/sci/svc/pm/rpc.h b/arch/arm/mach-imx/imx8/sci/svc/pm/rpc.h new file mode 100644 index 0000000000..49046c2ca7 --- /dev/null +++ b/arch/arm/mach-imx/imx8/sci/svc/pm/rpc.h @@ -0,0 +1,73 @@ +/* + * Copyright (C) 2016 Freescale Semiconductor, Inc. + * Copyright 2017-2018 NXP + * + * SPDX-License-Identifier: GPL-2.0+ + */ + +/*! + * Header file for the PM RPC implementation. + * + * @addtogroup PM_SVC + * @{ + */ + +#ifndef SC_PM_RPC_H +#define SC_PM_RPC_H + +/* Includes */ + +/* Defines */ + +/*! + * @name Defines for RPC PM function calls + */ +/*@{*/ +#define PM_FUNC_UNKNOWN 0 /*!< Unknown function */ +#define PM_FUNC_SET_SYS_POWER_MODE 19U /*!< Index for pm_set_sys_power_mode() RPC call */ +#define PM_FUNC_SET_PARTITION_POWER_MODE 1U /*!< Index for pm_set_partition_power_mode() RPC call */ +#define PM_FUNC_GET_SYS_POWER_MODE 2U /*!< Index for pm_get_sys_power_mode() RPC call */ +#define PM_FUNC_SET_RESOURCE_POWER_MODE 3U /*!< Index for pm_set_resource_power_mode() RPC call */ +#define PM_FUNC_GET_RESOURCE_POWER_MODE 4U /*!< Index for pm_get_resource_power_mode() RPC call */ +#define PM_FUNC_REQ_LOW_POWER_MODE 16U /*!< Index for pm_req_low_power_mode() RPC call */ +#define PM_FUNC_REQ_CPU_LOW_POWER_MODE 20U /*!< Index for pm_req_cpu_low_power_mode() RPC call */ +#define PM_FUNC_SET_CPU_RESUME_ADDR 17U /*!< Index for pm_set_cpu_resume_addr() RPC call */ +#define PM_FUNC_SET_CPU_RESUME 21U /*!< Index for pm_set_cpu_resume() RPC call */ +#define PM_FUNC_REQ_SYS_IF_POWER_MODE 18U /*!< Index for pm_req_sys_if_power_mode() RPC call */ +#define PM_FUNC_SET_CLOCK_RATE 5U /*!< Index for pm_set_clock_rate() RPC call */ +#define PM_FUNC_GET_CLOCK_RATE 6U /*!< Index for pm_get_clock_rate() RPC call */ +#define PM_FUNC_CLOCK_ENABLE 7U /*!< Index for pm_clock_enable() RPC call */ +#define PM_FUNC_SET_CLOCK_PARENT 14U /*!< Index for pm_set_clock_parent() RPC call */ +#define PM_FUNC_GET_CLOCK_PARENT 15U /*!< Index for pm_get_clock_parent() RPC call */ +#define PM_FUNC_RESET 13U /*!< Index for pm_reset() RPC call */ +#define PM_FUNC_RESET_REASON 10U /*!< Index for pm_reset_reason() RPC call */ +#define PM_FUNC_BOOT 8U /*!< Index for pm_boot() RPC call */ +#define PM_FUNC_REBOOT 9U /*!< Index for pm_reboot() RPC call */ +#define PM_FUNC_REBOOT_PARTITION 12U /*!< Index for pm_reboot_partition() RPC call */ +#define PM_FUNC_CPU_START 11U /*!< Index for pm_cpu_start() RPC call */ +/*@}*/ + +/* Types */ + +/* Functions */ + +/*! + * This function dispatches an incoming PM RPC request. + * + * @param[in] caller_pt caller partition + * @param[in] msg pointer to RPC message + */ +void pm_dispatch(sc_rm_pt_t caller_pt, sc_rpc_msg_t *msg); + +/*! + * This function translates and dispatches an PM RPC request. + * + * @param[in] ipc IPC handle + * @param[in] msg pointer to RPC message + */ +void pm_xlate(sc_ipc_t ipc, sc_rpc_msg_t *msg); + +#endif /* SC_PM_RPC_H */ + +/**@}*/ + diff --git a/arch/arm/mach-imx/imx8/sci/svc/pm/rpc_clnt.c b/arch/arm/mach-imx/imx8/sci/svc/pm/rpc_clnt.c new file mode 100644 index 0000000000..6cad000354 --- /dev/null +++ b/arch/arm/mach-imx/imx8/sci/svc/pm/rpc_clnt.c @@ -0,0 +1,460 @@ +/* + * Copyright (C) 2016 Freescale Semiconductor, Inc. + * Copyright 2017-2018 NXP + * + * SPDX-License-Identifier: GPL-2.0+ + */ + +/*! + * File containing client-side RPC functions for the PM service. These + * functions are ported to clients that communicate to the SC. + * + * @addtogroup PM_SVC + * @{ + */ + +/* Includes */ + +#include +#include +#include +#include +#include "rpc.h" + +/* Local Defines */ + +/* Local Types */ + +/* Local Functions */ + +sc_err_t sc_pm_set_sys_power_mode(sc_ipc_t ipc, sc_pm_power_mode_t mode) +{ + sc_rpc_msg_t msg; + uint8_t result; + + RPC_VER(&msg) = SC_RPC_VERSION; + RPC_SVC(&msg) = (uint8_t) SC_RPC_SVC_PM; + RPC_FUNC(&msg) = (uint8_t) PM_FUNC_SET_SYS_POWER_MODE; + RPC_U8(&msg, 0U) = (uint8_t) mode; + RPC_SIZE(&msg) = 2U; + + sc_call_rpc(ipc, &msg, SC_FALSE); + + result = RPC_R8(&msg); + return (sc_err_t) result; +} + +sc_err_t sc_pm_set_partition_power_mode(sc_ipc_t ipc, sc_rm_pt_t pt, + sc_pm_power_mode_t mode) +{ + sc_rpc_msg_t msg; + uint8_t result; + + RPC_VER(&msg) = SC_RPC_VERSION; + RPC_SVC(&msg) = (uint8_t) SC_RPC_SVC_PM; + RPC_FUNC(&msg) = (uint8_t) PM_FUNC_SET_PARTITION_POWER_MODE; + RPC_U8(&msg, 0U) = (uint8_t) pt; + RPC_U8(&msg, 1U) = (uint8_t) mode; + RPC_SIZE(&msg) = 2U; + + sc_call_rpc(ipc, &msg, SC_FALSE); + + result = RPC_R8(&msg); + return (sc_err_t) result; +} + +sc_err_t sc_pm_get_sys_power_mode(sc_ipc_t ipc, sc_rm_pt_t pt, + sc_pm_power_mode_t *mode) +{ + sc_rpc_msg_t msg; + uint8_t result; + + RPC_VER(&msg) = SC_RPC_VERSION; + RPC_SVC(&msg) = (uint8_t) SC_RPC_SVC_PM; + RPC_FUNC(&msg) = (uint8_t) PM_FUNC_GET_SYS_POWER_MODE; + RPC_U8(&msg, 0U) = (uint8_t) pt; + RPC_SIZE(&msg) = 2U; + + sc_call_rpc(ipc, &msg, SC_FALSE); + + result = RPC_R8(&msg); + if (mode != NULL) + { + *mode = RPC_U8(&msg, 0U); + } + + return (sc_err_t) result; +} + +sc_err_t sc_pm_set_resource_power_mode(sc_ipc_t ipc, sc_rsrc_t resource, + sc_pm_power_mode_t mode) +{ + sc_rpc_msg_t msg; + uint8_t result; + + RPC_VER(&msg) = SC_RPC_VERSION; + RPC_SVC(&msg) = (uint8_t) SC_RPC_SVC_PM; + RPC_FUNC(&msg) = (uint8_t) PM_FUNC_SET_RESOURCE_POWER_MODE; + RPC_U16(&msg, 0U) = (uint16_t) resource; + RPC_U8(&msg, 2U) = (uint8_t) mode; + RPC_SIZE(&msg) = 2U; + + sc_call_rpc(ipc, &msg, SC_FALSE); + + result = RPC_R8(&msg); + return (sc_err_t) result; +} + +sc_err_t sc_pm_get_resource_power_mode(sc_ipc_t ipc, sc_rsrc_t resource, + sc_pm_power_mode_t *mode) +{ + sc_rpc_msg_t msg; + uint8_t result; + + RPC_VER(&msg) = SC_RPC_VERSION; + RPC_SVC(&msg) = (uint8_t) SC_RPC_SVC_PM; + RPC_FUNC(&msg) = (uint8_t) PM_FUNC_GET_RESOURCE_POWER_MODE; + RPC_U16(&msg, 0U) = (uint16_t) resource; + RPC_SIZE(&msg) = 2U; + + sc_call_rpc(ipc, &msg, SC_FALSE); + + result = RPC_R8(&msg); + if (mode != NULL) + { + *mode = RPC_U8(&msg, 0U); + } + + return (sc_err_t) result; +} + +sc_err_t sc_pm_req_low_power_mode(sc_ipc_t ipc, sc_rsrc_t resource, + sc_pm_power_mode_t mode) +{ + sc_rpc_msg_t msg; + uint8_t result; + + RPC_VER(&msg) = SC_RPC_VERSION; + RPC_SVC(&msg) = (uint8_t) SC_RPC_SVC_PM; + RPC_FUNC(&msg) = (uint8_t) PM_FUNC_REQ_LOW_POWER_MODE; + RPC_U16(&msg, 0U) = (uint16_t) resource; + RPC_U8(&msg, 2U) = (uint8_t) mode; + RPC_SIZE(&msg) = 2U; + + sc_call_rpc(ipc, &msg, SC_FALSE); + + result = RPC_R8(&msg); + return (sc_err_t) result; +} + +sc_err_t sc_pm_req_cpu_low_power_mode(sc_ipc_t ipc, sc_rsrc_t resource, + sc_pm_power_mode_t mode, sc_pm_wake_src_t wake_src) +{ + sc_rpc_msg_t msg; + uint8_t result; + + RPC_VER(&msg) = SC_RPC_VERSION; + RPC_SVC(&msg) = (uint8_t) SC_RPC_SVC_PM; + RPC_FUNC(&msg) = (uint8_t) PM_FUNC_REQ_CPU_LOW_POWER_MODE; + RPC_U16(&msg, 0U) = (uint16_t) resource; + RPC_U8(&msg, 2U) = (uint8_t) mode; + RPC_U8(&msg, 3U) = (uint8_t) wake_src; + RPC_SIZE(&msg) = 2U; + + sc_call_rpc(ipc, &msg, SC_FALSE); + + result = RPC_R8(&msg); + return (sc_err_t) result; +} + +sc_err_t sc_pm_set_cpu_resume_addr(sc_ipc_t ipc, sc_rsrc_t resource, + sc_faddr_t address) +{ + sc_rpc_msg_t msg; + uint8_t result; + + RPC_VER(&msg) = SC_RPC_VERSION; + RPC_SVC(&msg) = (uint8_t) SC_RPC_SVC_PM; + RPC_FUNC(&msg) = (uint8_t) PM_FUNC_SET_CPU_RESUME_ADDR; + RPC_U32(&msg, 0U) = (uint32_t) (address >> 32U); + RPC_U32(&msg, 4U) = (uint32_t) address; + RPC_U16(&msg, 8U) = (uint16_t) resource; + RPC_SIZE(&msg) = 4U; + + sc_call_rpc(ipc, &msg, SC_FALSE); + + result = RPC_R8(&msg); + return (sc_err_t) result; +} + +sc_err_t sc_pm_set_cpu_resume(sc_ipc_t ipc, sc_rsrc_t resource, + sc_bool_t isPrimary, sc_faddr_t address) +{ + sc_rpc_msg_t msg; + uint8_t result; + + RPC_VER(&msg) = SC_RPC_VERSION; + RPC_SVC(&msg) = (uint8_t) SC_RPC_SVC_PM; + RPC_FUNC(&msg) = (uint8_t) PM_FUNC_SET_CPU_RESUME; + RPC_U32(&msg, 0U) = (uint32_t) (address >> 32U); + RPC_U32(&msg, 4U) = (uint32_t) address; + RPC_U16(&msg, 8U) = (uint16_t) resource; + RPC_U8(&msg, 10U) = (uint8_t) isPrimary; + RPC_SIZE(&msg) = 4U; + + sc_call_rpc(ipc, &msg, SC_FALSE); + + result = RPC_R8(&msg); + return (sc_err_t) result; +} + +sc_err_t sc_pm_req_sys_if_power_mode(sc_ipc_t ipc, sc_rsrc_t resource, + sc_pm_sys_if_t sys_if, sc_pm_power_mode_t hpm, sc_pm_power_mode_t lpm) +{ + sc_rpc_msg_t msg; + uint8_t result; + + RPC_VER(&msg) = SC_RPC_VERSION; + RPC_SVC(&msg) = (uint8_t) SC_RPC_SVC_PM; + RPC_FUNC(&msg) = (uint8_t) PM_FUNC_REQ_SYS_IF_POWER_MODE; + RPC_U16(&msg, 0U) = (uint16_t) resource; + RPC_U8(&msg, 2U) = (uint8_t) sys_if; + RPC_U8(&msg, 3U) = (uint8_t) hpm; + RPC_U8(&msg, 4U) = (uint8_t) lpm; + RPC_SIZE(&msg) = 3U; + + sc_call_rpc(ipc, &msg, SC_FALSE); + + result = RPC_R8(&msg); + return (sc_err_t) result; +} + +sc_err_t sc_pm_set_clock_rate(sc_ipc_t ipc, sc_rsrc_t resource, + sc_pm_clk_t clk, sc_pm_clock_rate_t *rate) +{ + sc_rpc_msg_t msg; + uint8_t result; + + RPC_VER(&msg) = SC_RPC_VERSION; + RPC_SVC(&msg) = (uint8_t) SC_RPC_SVC_PM; + RPC_FUNC(&msg) = (uint8_t) PM_FUNC_SET_CLOCK_RATE; + RPC_U32(&msg, 0U) = *(uint32_t*) rate; + RPC_U16(&msg, 4U) = (uint16_t) resource; + RPC_U8(&msg, 6U) = (uint8_t) clk; + RPC_SIZE(&msg) = 3U; + + sc_call_rpc(ipc, &msg, SC_FALSE); + + *rate = RPC_U32(&msg, 0U); + result = RPC_R8(&msg); + return (sc_err_t) result; +} + +sc_err_t sc_pm_get_clock_rate(sc_ipc_t ipc, sc_rsrc_t resource, + sc_pm_clk_t clk, sc_pm_clock_rate_t *rate) +{ + sc_rpc_msg_t msg; + uint8_t result; + + RPC_VER(&msg) = SC_RPC_VERSION; + RPC_SVC(&msg) = (uint8_t) SC_RPC_SVC_PM; + RPC_FUNC(&msg) = (uint8_t) PM_FUNC_GET_CLOCK_RATE; + RPC_U16(&msg, 0U) = (uint16_t) resource; + RPC_U8(&msg, 2U) = (uint8_t) clk; + RPC_SIZE(&msg) = 2U; + + sc_call_rpc(ipc, &msg, SC_FALSE); + + if (rate != NULL) + { + *rate = RPC_U32(&msg, 0U); + } + + result = RPC_R8(&msg); + return (sc_err_t) result; +} + +sc_err_t sc_pm_clock_enable(sc_ipc_t ipc, sc_rsrc_t resource, + sc_pm_clk_t clk, sc_bool_t enable, sc_bool_t autog) +{ + sc_rpc_msg_t msg; + uint8_t result; + + RPC_VER(&msg) = SC_RPC_VERSION; + RPC_SVC(&msg) = (uint8_t) SC_RPC_SVC_PM; + RPC_FUNC(&msg) = (uint8_t) PM_FUNC_CLOCK_ENABLE; + RPC_U16(&msg, 0U) = (uint16_t) resource; + RPC_U8(&msg, 2U) = (uint8_t) clk; + RPC_U8(&msg, 3U) = (uint8_t) enable; + RPC_U8(&msg, 4U) = (uint8_t) autog; + RPC_SIZE(&msg) = 3U; + + sc_call_rpc(ipc, &msg, SC_FALSE); + + result = RPC_R8(&msg); + return (sc_err_t) result; +} + +sc_err_t sc_pm_set_clock_parent(sc_ipc_t ipc, sc_rsrc_t resource, + sc_pm_clk_t clk, sc_pm_clk_parent_t parent) +{ + sc_rpc_msg_t msg; + uint8_t result; + + RPC_VER(&msg) = SC_RPC_VERSION; + RPC_SVC(&msg) = (uint8_t) SC_RPC_SVC_PM; + RPC_FUNC(&msg) = (uint8_t) PM_FUNC_SET_CLOCK_PARENT; + RPC_U16(&msg, 0U) = (uint16_t) resource; + RPC_U8(&msg, 2U) = (uint8_t) clk; + RPC_U8(&msg, 3U) = (uint8_t) parent; + RPC_SIZE(&msg) = 2U; + + sc_call_rpc(ipc, &msg, SC_FALSE); + + result = RPC_R8(&msg); + return (sc_err_t) result; +} + +sc_err_t sc_pm_get_clock_parent(sc_ipc_t ipc, sc_rsrc_t resource, + sc_pm_clk_t clk, sc_pm_clk_parent_t *parent) +{ + sc_rpc_msg_t msg; + uint8_t result; + + RPC_VER(&msg) = SC_RPC_VERSION; + RPC_SVC(&msg) = (uint8_t) SC_RPC_SVC_PM; + RPC_FUNC(&msg) = (uint8_t) PM_FUNC_GET_CLOCK_PARENT; + RPC_U16(&msg, 0U) = (uint16_t) resource; + RPC_U8(&msg, 2U) = (uint8_t) clk; + RPC_SIZE(&msg) = 2U; + + sc_call_rpc(ipc, &msg, SC_FALSE); + + result = RPC_R8(&msg); + if (parent != NULL) + { + *parent = RPC_U8(&msg, 0U); + } + + return (sc_err_t) result; +} + +sc_err_t sc_pm_reset(sc_ipc_t ipc, sc_pm_reset_type_t type) +{ + sc_rpc_msg_t msg; + uint8_t result; + + RPC_VER(&msg) = SC_RPC_VERSION; + RPC_SVC(&msg) = (uint8_t) SC_RPC_SVC_PM; + RPC_FUNC(&msg) = (uint8_t) PM_FUNC_RESET; + RPC_U8(&msg, 0U) = (uint8_t) type; + RPC_SIZE(&msg) = 2U; + + sc_call_rpc(ipc, &msg, SC_FALSE); + + result = RPC_R8(&msg); + return (sc_err_t) result; +} + +sc_err_t sc_pm_reset_reason(sc_ipc_t ipc, sc_pm_reset_reason_t *reason) +{ + sc_rpc_msg_t msg; + uint8_t result; + + RPC_VER(&msg) = SC_RPC_VERSION; + RPC_SVC(&msg) = (uint8_t) SC_RPC_SVC_PM; + RPC_FUNC(&msg) = (uint8_t) PM_FUNC_RESET_REASON; + RPC_SIZE(&msg) = 1U; + + sc_call_rpc(ipc, &msg, SC_FALSE); + + result = RPC_R8(&msg); + if (reason != NULL) + { + *reason = RPC_U8(&msg, 0U); + } + + return (sc_err_t) result; +} + +sc_err_t sc_pm_boot(sc_ipc_t ipc, sc_rm_pt_t pt, + sc_rsrc_t resource_cpu, sc_faddr_t boot_addr, + sc_rsrc_t resource_mu, sc_rsrc_t resource_dev) +{ + sc_rpc_msg_t msg; + uint8_t result; + + RPC_VER(&msg) = SC_RPC_VERSION; + RPC_SVC(&msg) = (uint8_t) SC_RPC_SVC_PM; + RPC_FUNC(&msg) = (uint8_t) PM_FUNC_BOOT; + RPC_U32(&msg, 0U) = (uint32_t) (boot_addr >> 32U); + RPC_U32(&msg, 4U) = (uint32_t) boot_addr; + RPC_U16(&msg, 8U) = (uint16_t) resource_cpu; + RPC_U16(&msg, 10U) = (uint16_t) resource_mu; + RPC_U16(&msg, 12U) = (uint16_t) resource_dev; + RPC_U8(&msg, 14U) = (uint8_t) pt; + RPC_SIZE(&msg) = 5U; + + sc_call_rpc(ipc, &msg, SC_FALSE); + + result = RPC_R8(&msg); + return (sc_err_t) result; +} + +void sc_pm_reboot(sc_ipc_t ipc, sc_pm_reset_type_t type) +{ + sc_rpc_msg_t msg; + + RPC_VER(&msg) = SC_RPC_VERSION; + RPC_SVC(&msg) = (uint8_t) SC_RPC_SVC_PM; + RPC_FUNC(&msg) = (uint8_t) PM_FUNC_REBOOT; + RPC_U8(&msg, 0U) = (uint8_t) type; + RPC_SIZE(&msg) = 2U; + + sc_call_rpc(ipc, &msg, SC_TRUE); + + return; +} + +sc_err_t sc_pm_reboot_partition(sc_ipc_t ipc, sc_rm_pt_t pt, + sc_pm_reset_type_t type) +{ + sc_rpc_msg_t msg; + uint8_t result; + + RPC_VER(&msg) = SC_RPC_VERSION; + RPC_SVC(&msg) = (uint8_t) SC_RPC_SVC_PM; + RPC_FUNC(&msg) = (uint8_t) PM_FUNC_REBOOT_PARTITION; + RPC_U8(&msg, 0U) = (uint8_t) pt; + RPC_U8(&msg, 1U) = (uint8_t) type; + RPC_SIZE(&msg) = 2U; + + sc_call_rpc(ipc, &msg, SC_FALSE); + + result = RPC_R8(&msg); + return (sc_err_t) result; +} + +sc_err_t sc_pm_cpu_start(sc_ipc_t ipc, sc_rsrc_t resource, sc_bool_t enable, + sc_faddr_t address) +{ + sc_rpc_msg_t msg; + uint8_t result; + + RPC_VER(&msg) = SC_RPC_VERSION; + RPC_SVC(&msg) = (uint8_t) SC_RPC_SVC_PM; + RPC_FUNC(&msg) = (uint8_t) PM_FUNC_CPU_START; + RPC_U32(&msg, 0U) = (uint32_t) (address >> 32U); + RPC_U32(&msg, 4U) = (uint32_t) address; + RPC_U16(&msg, 8U) = (uint16_t) resource; + RPC_U8(&msg, 10U) = (uint8_t) enable; + RPC_SIZE(&msg) = 4U; + + sc_call_rpc(ipc, &msg, SC_FALSE); + + result = RPC_R8(&msg); + return (sc_err_t) result; +} + +/**@}*/ + diff --git a/arch/arm/mach-imx/imx8/sci/svc/rm/rpc.h b/arch/arm/mach-imx/imx8/sci/svc/rm/rpc.h new file mode 100644 index 0000000000..196615e937 --- /dev/null +++ b/arch/arm/mach-imx/imx8/sci/svc/rm/rpc.h @@ -0,0 +1,83 @@ +/* + * Copyright (C) 2016 Freescale Semiconductor, Inc. + * Copyright 2017-2018 NXP + * + * SPDX-License-Identifier: GPL-2.0+ + */ + +/*! + * Header file for the RM RPC implementation. + * + * @addtogroup RM_SVC + * @{ + */ + +#ifndef SC_RM_RPC_H +#define SC_RM_RPC_H + +/* Includes */ + +/* Defines */ + +/*! + * @name Defines for RPC RM function calls + */ +/*@{*/ +#define RM_FUNC_UNKNOWN 0 /*!< Unknown function */ +#define RM_FUNC_PARTITION_ALLOC 1U /*!< Index for rm_partition_alloc() RPC call */ +#define RM_FUNC_SET_CONFIDENTIAL 31U /*!< Index for rm_set_confidential() RPC call */ +#define RM_FUNC_PARTITION_FREE 2U /*!< Index for rm_partition_free() RPC call */ +#define RM_FUNC_GET_DID 26U /*!< Index for rm_get_did() RPC call */ +#define RM_FUNC_PARTITION_STATIC 3U /*!< Index for rm_partition_static() RPC call */ +#define RM_FUNC_PARTITION_LOCK 4U /*!< Index for rm_partition_lock() RPC call */ +#define RM_FUNC_GET_PARTITION 5U /*!< Index for rm_get_partition() RPC call */ +#define RM_FUNC_SET_PARENT 6U /*!< Index for rm_set_parent() RPC call */ +#define RM_FUNC_MOVE_ALL 7U /*!< Index for rm_move_all() RPC call */ +#define RM_FUNC_ASSIGN_RESOURCE 8U /*!< Index for rm_assign_resource() RPC call */ +#define RM_FUNC_SET_RESOURCE_MOVABLE 9U /*!< Index for rm_set_resource_movable() RPC call */ +#define RM_FUNC_SET_SUBSYS_RSRC_MOVABLE 28U /*!< Index for rm_set_subsys_rsrc_movable() RPC call */ +#define RM_FUNC_SET_MASTER_ATTRIBUTES 10U /*!< Index for rm_set_master_attributes() RPC call */ +#define RM_FUNC_SET_MASTER_SID 11U /*!< Index for rm_set_master_sid() RPC call */ +#define RM_FUNC_SET_PERIPHERAL_PERMISSIONS 12U /*!< Index for rm_set_peripheral_permissions() RPC call */ +#define RM_FUNC_IS_RESOURCE_OWNED 13U /*!< Index for rm_is_resource_owned() RPC call */ +#define RM_FUNC_IS_RESOURCE_MASTER 14U /*!< Index for rm_is_resource_master() RPC call */ +#define RM_FUNC_IS_RESOURCE_PERIPHERAL 15U /*!< Index for rm_is_resource_peripheral() RPC call */ +#define RM_FUNC_GET_RESOURCE_INFO 16U /*!< Index for rm_get_resource_info() RPC call */ +#define RM_FUNC_MEMREG_ALLOC 17U /*!< Index for rm_memreg_alloc() RPC call */ +#define RM_FUNC_MEMREG_SPLIT 29U /*!< Index for rm_memreg_split() RPC call */ +#define RM_FUNC_MEMREG_FREE 18U /*!< Index for rm_memreg_free() RPC call */ +#define RM_FUNC_FIND_MEMREG 30U /*!< Index for rm_find_memreg() RPC call */ +#define RM_FUNC_ASSIGN_MEMREG 19U /*!< Index for rm_assign_memreg() RPC call */ +#define RM_FUNC_SET_MEMREG_PERMISSIONS 20U /*!< Index for rm_set_memreg_permissions() RPC call */ +#define RM_FUNC_IS_MEMREG_OWNED 21U /*!< Index for rm_is_memreg_owned() RPC call */ +#define RM_FUNC_GET_MEMREG_INFO 22U /*!< Index for rm_get_memreg_info() RPC call */ +#define RM_FUNC_ASSIGN_PAD 23U /*!< Index for rm_assign_pad() RPC call */ +#define RM_FUNC_SET_PAD_MOVABLE 24U /*!< Index for rm_set_pad_movable() RPC call */ +#define RM_FUNC_IS_PAD_OWNED 25U /*!< Index for rm_is_pad_owned() RPC call */ +#define RM_FUNC_DUMP 27U /*!< Index for rm_dump() RPC call */ +/*@}*/ + +/* Types */ + +/* Functions */ + +/*! + * This function dispatches an incoming RM RPC request. + * + * @param[in] caller_pt caller partition + * @param[in] msg pointer to RPC message + */ +void rm_dispatch(sc_rm_pt_t caller_pt, sc_rpc_msg_t *msg); + +/*! + * This function translates and dispatches an RM RPC request. + * + * @param[in] ipc IPC handle + * @param[in] msg pointer to RPC message + */ +void rm_xlate(sc_ipc_t ipc, sc_rpc_msg_t *msg); + +#endif /* SC_RM_RPC_H */ + +/**@}*/ + diff --git a/arch/arm/mach-imx/imx8/sci/svc/rm/rpc_clnt.c b/arch/arm/mach-imx/imx8/sci/svc/rm/rpc_clnt.c new file mode 100644 index 0000000000..d1475cf643 --- /dev/null +++ b/arch/arm/mach-imx/imx8/sci/svc/rm/rpc_clnt.c @@ -0,0 +1,645 @@ +/* + * Copyright (C) 2016 Freescale Semiconductor, Inc. + * Copyright 2017-2018 NXP + * + * SPDX-License-Identifier: GPL-2.0+ + */ + +/*! + * File containing client-side RPC functions for the RM service. These + * functions are ported to clients that communicate to the SC. + * + * @addtogroup RM_SVC + * @{ + */ + +/* Includes */ + +#include +#include +#include +#include "rpc.h" + +/* Local Defines */ + +/* Local Types */ + +/* Local Functions */ + +sc_err_t sc_rm_partition_alloc(sc_ipc_t ipc, sc_rm_pt_t *pt, sc_bool_t secure, + sc_bool_t isolated, sc_bool_t restricted, sc_bool_t grant, sc_bool_t coherent) +{ + sc_rpc_msg_t msg; + uint8_t result; + + RPC_VER(&msg) = SC_RPC_VERSION; + RPC_SVC(&msg) = (uint8_t) SC_RPC_SVC_RM; + RPC_FUNC(&msg) = (uint8_t) RM_FUNC_PARTITION_ALLOC; + RPC_U8(&msg, 0U) = (uint8_t) secure; + RPC_U8(&msg, 1U) = (uint8_t) isolated; + RPC_U8(&msg, 2U) = (uint8_t) restricted; + RPC_U8(&msg, 3U) = (uint8_t) grant; + RPC_U8(&msg, 4U) = (uint8_t) coherent; + RPC_SIZE(&msg) = 3U; + + sc_call_rpc(ipc, &msg, SC_FALSE); + + result = RPC_R8(&msg); + if (pt != NULL) + { + *pt = RPC_U8(&msg, 0U); + } + + return (sc_err_t) result; +} + +sc_err_t sc_rm_set_confidential(sc_ipc_t ipc, sc_rm_pt_t pt, sc_bool_t retro) +{ + sc_rpc_msg_t msg; + uint8_t result; + + RPC_VER(&msg) = SC_RPC_VERSION; + RPC_SVC(&msg) = (uint8_t) SC_RPC_SVC_RM; + RPC_FUNC(&msg) = (uint8_t) RM_FUNC_SET_CONFIDENTIAL; + RPC_U8(&msg, 0U) = (uint8_t) pt; + RPC_U8(&msg, 1U) = (uint8_t) retro; + RPC_SIZE(&msg) = 2U; + + sc_call_rpc(ipc, &msg, SC_FALSE); + + result = RPC_R8(&msg); + return (sc_err_t) result; +} + +sc_err_t sc_rm_partition_free(sc_ipc_t ipc, sc_rm_pt_t pt) +{ + sc_rpc_msg_t msg; + uint8_t result; + + RPC_VER(&msg) = SC_RPC_VERSION; + RPC_SVC(&msg) = (uint8_t) SC_RPC_SVC_RM; + RPC_FUNC(&msg) = (uint8_t) RM_FUNC_PARTITION_FREE; + RPC_U8(&msg, 0U) = (uint8_t) pt; + RPC_SIZE(&msg) = 2U; + + sc_call_rpc(ipc, &msg, SC_FALSE); + + result = RPC_R8(&msg); + return (sc_err_t) result; +} + +sc_rm_did_t sc_rm_get_did(sc_ipc_t ipc) +{ + sc_rpc_msg_t msg; + uint8_t result; + + RPC_VER(&msg) = SC_RPC_VERSION; + RPC_SVC(&msg) = (uint8_t) SC_RPC_SVC_RM; + RPC_FUNC(&msg) = (uint8_t) RM_FUNC_GET_DID; + RPC_SIZE(&msg) = 1U; + + sc_call_rpc(ipc, &msg, SC_FALSE); + + result = RPC_R8(&msg); + return (sc_rm_did_t) result; +} + +sc_err_t sc_rm_partition_static(sc_ipc_t ipc, sc_rm_pt_t pt, + sc_rm_did_t did) +{ + sc_rpc_msg_t msg; + uint8_t result; + + RPC_VER(&msg) = SC_RPC_VERSION; + RPC_SVC(&msg) = (uint8_t) SC_RPC_SVC_RM; + RPC_FUNC(&msg) = (uint8_t) RM_FUNC_PARTITION_STATIC; + RPC_U8(&msg, 0U) = (uint8_t) pt; + RPC_U8(&msg, 1U) = (uint8_t) did; + RPC_SIZE(&msg) = 2U; + + sc_call_rpc(ipc, &msg, SC_FALSE); + + result = RPC_R8(&msg); + return (sc_err_t) result; +} + +sc_err_t sc_rm_partition_lock(sc_ipc_t ipc, sc_rm_pt_t pt) +{ + sc_rpc_msg_t msg; + uint8_t result; + + RPC_VER(&msg) = SC_RPC_VERSION; + RPC_SVC(&msg) = (uint8_t) SC_RPC_SVC_RM; + RPC_FUNC(&msg) = (uint8_t) RM_FUNC_PARTITION_LOCK; + RPC_U8(&msg, 0U) = (uint8_t) pt; + RPC_SIZE(&msg) = 2U; + + sc_call_rpc(ipc, &msg, SC_FALSE); + + result = RPC_R8(&msg); + return (sc_err_t) result; +} + +sc_err_t sc_rm_get_partition(sc_ipc_t ipc, sc_rm_pt_t *pt) +{ + sc_rpc_msg_t msg; + uint8_t result; + + RPC_VER(&msg) = SC_RPC_VERSION; + RPC_SVC(&msg) = (uint8_t) SC_RPC_SVC_RM; + RPC_FUNC(&msg) = (uint8_t) RM_FUNC_GET_PARTITION; + RPC_SIZE(&msg) = 1U; + + sc_call_rpc(ipc, &msg, SC_FALSE); + + result = RPC_R8(&msg); + if (pt != NULL) + { + *pt = RPC_U8(&msg, 0U); + } + + return (sc_err_t) result; +} + +sc_err_t sc_rm_set_parent(sc_ipc_t ipc, sc_rm_pt_t pt, + sc_rm_pt_t pt_parent) +{ + sc_rpc_msg_t msg; + uint8_t result; + + RPC_VER(&msg) = SC_RPC_VERSION; + RPC_SVC(&msg) = (uint8_t) SC_RPC_SVC_RM; + RPC_FUNC(&msg) = (uint8_t) RM_FUNC_SET_PARENT; + RPC_U8(&msg, 0U) = (uint8_t) pt; + RPC_U8(&msg, 1U) = (uint8_t) pt_parent; + RPC_SIZE(&msg) = 2U; + + sc_call_rpc(ipc, &msg, SC_FALSE); + + result = RPC_R8(&msg); + return (sc_err_t) result; +} + +sc_err_t sc_rm_move_all(sc_ipc_t ipc, sc_rm_pt_t pt_src, sc_rm_pt_t pt_dst, + sc_bool_t move_rsrc, sc_bool_t move_pads) +{ + sc_rpc_msg_t msg; + uint8_t result; + + RPC_VER(&msg) = SC_RPC_VERSION; + RPC_SVC(&msg) = (uint8_t) SC_RPC_SVC_RM; + RPC_FUNC(&msg) = (uint8_t) RM_FUNC_MOVE_ALL; + RPC_U8(&msg, 0U) = (uint8_t) pt_src; + RPC_U8(&msg, 1U) = (uint8_t) pt_dst; + RPC_U8(&msg, 2U) = (uint8_t) move_rsrc; + RPC_U8(&msg, 3U) = (uint8_t) move_pads; + RPC_SIZE(&msg) = 2U; + + sc_call_rpc(ipc, &msg, SC_FALSE); + + result = RPC_R8(&msg); + return (sc_err_t) result; +} + +sc_err_t sc_rm_assign_resource(sc_ipc_t ipc, sc_rm_pt_t pt, + sc_rsrc_t resource) +{ + sc_rpc_msg_t msg; + uint8_t result; + + RPC_VER(&msg) = SC_RPC_VERSION; + RPC_SVC(&msg) = (uint8_t) SC_RPC_SVC_RM; + RPC_FUNC(&msg) = (uint8_t) RM_FUNC_ASSIGN_RESOURCE; + RPC_U16(&msg, 0U) = (uint16_t) resource; + RPC_U8(&msg, 2U) = (uint8_t) pt; + RPC_SIZE(&msg) = 2U; + + sc_call_rpc(ipc, &msg, SC_FALSE); + + result = RPC_R8(&msg); + return (sc_err_t) result; +} + +sc_err_t sc_rm_set_resource_movable(sc_ipc_t ipc, sc_rsrc_t resource_fst, + sc_rsrc_t resource_lst, sc_bool_t movable) +{ + sc_rpc_msg_t msg; + uint8_t result; + + RPC_VER(&msg) = SC_RPC_VERSION; + RPC_SVC(&msg) = (uint8_t) SC_RPC_SVC_RM; + RPC_FUNC(&msg) = (uint8_t) RM_FUNC_SET_RESOURCE_MOVABLE; + RPC_U16(&msg, 0U) = (uint16_t) resource_fst; + RPC_U16(&msg, 2U) = (uint16_t) resource_lst; + RPC_U8(&msg, 4U) = (uint8_t) movable; + RPC_SIZE(&msg) = 3U; + + sc_call_rpc(ipc, &msg, SC_FALSE); + + result = RPC_R8(&msg); + return (sc_err_t) result; +} + +sc_err_t sc_rm_set_subsys_rsrc_movable(sc_ipc_t ipc, sc_rsrc_t resource, + sc_bool_t movable) +{ + sc_rpc_msg_t msg; + uint8_t result; + + RPC_VER(&msg) = SC_RPC_VERSION; + RPC_SVC(&msg) = (uint8_t) SC_RPC_SVC_RM; + RPC_FUNC(&msg) = (uint8_t) RM_FUNC_SET_SUBSYS_RSRC_MOVABLE; + RPC_U16(&msg, 0U) = (uint16_t) resource; + RPC_U8(&msg, 2U) = (uint8_t) movable; + RPC_SIZE(&msg) = 2U; + + sc_call_rpc(ipc, &msg, SC_FALSE); + + result = RPC_R8(&msg); + return (sc_err_t) result; +} + +sc_err_t sc_rm_set_master_attributes(sc_ipc_t ipc, sc_rsrc_t resource, + sc_rm_spa_t sa, sc_rm_spa_t pa, sc_bool_t smmu_bypass) +{ + sc_rpc_msg_t msg; + uint8_t result; + + RPC_VER(&msg) = SC_RPC_VERSION; + RPC_SVC(&msg) = (uint8_t) SC_RPC_SVC_RM; + RPC_FUNC(&msg) = (uint8_t) RM_FUNC_SET_MASTER_ATTRIBUTES; + RPC_U16(&msg, 0U) = (uint16_t) resource; + RPC_U8(&msg, 2U) = (uint8_t) sa; + RPC_U8(&msg, 3U) = (uint8_t) pa; + RPC_U8(&msg, 4U) = (uint8_t) smmu_bypass; + RPC_SIZE(&msg) = 3U; + + sc_call_rpc(ipc, &msg, SC_FALSE); + + result = RPC_R8(&msg); + return (sc_err_t) result; +} + +sc_err_t sc_rm_set_master_sid(sc_ipc_t ipc, sc_rsrc_t resource, + sc_rm_sid_t sid) +{ + sc_rpc_msg_t msg; + uint8_t result; + + RPC_VER(&msg) = SC_RPC_VERSION; + RPC_SVC(&msg) = (uint8_t) SC_RPC_SVC_RM; + RPC_FUNC(&msg) = (uint8_t) RM_FUNC_SET_MASTER_SID; + RPC_U16(&msg, 0U) = (uint16_t) resource; + RPC_U16(&msg, 2U) = (uint16_t) sid; + RPC_SIZE(&msg) = 2U; + + sc_call_rpc(ipc, &msg, SC_FALSE); + + result = RPC_R8(&msg); + return (sc_err_t) result; +} + +sc_err_t sc_rm_set_peripheral_permissions(sc_ipc_t ipc, sc_rsrc_t resource, + sc_rm_pt_t pt, sc_rm_perm_t perm) +{ + sc_rpc_msg_t msg; + uint8_t result; + + RPC_VER(&msg) = SC_RPC_VERSION; + RPC_SVC(&msg) = (uint8_t) SC_RPC_SVC_RM; + RPC_FUNC(&msg) = (uint8_t) RM_FUNC_SET_PERIPHERAL_PERMISSIONS; + RPC_U16(&msg, 0U) = (uint16_t) resource; + RPC_U8(&msg, 2U) = (uint8_t) pt; + RPC_U8(&msg, 3U) = (uint8_t) perm; + RPC_SIZE(&msg) = 2U; + + sc_call_rpc(ipc, &msg, SC_FALSE); + + result = RPC_R8(&msg); + return (sc_err_t) result; +} + +sc_bool_t sc_rm_is_resource_owned(sc_ipc_t ipc, sc_rsrc_t resource) +{ + sc_rpc_msg_t msg; + uint8_t result; + + RPC_VER(&msg) = SC_RPC_VERSION; + RPC_SVC(&msg) = (uint8_t) SC_RPC_SVC_RM; + RPC_FUNC(&msg) = (uint8_t) RM_FUNC_IS_RESOURCE_OWNED; + RPC_U16(&msg, 0U) = (uint16_t) resource; + RPC_SIZE(&msg) = 2U; + + sc_call_rpc(ipc, &msg, SC_FALSE); + + result = RPC_R8(&msg); + return (sc_bool_t) result; +} + +sc_bool_t sc_rm_is_resource_master(sc_ipc_t ipc, sc_rsrc_t resource) +{ + sc_rpc_msg_t msg; + uint8_t result; + + RPC_VER(&msg) = SC_RPC_VERSION; + RPC_SVC(&msg) = (uint8_t) SC_RPC_SVC_RM; + RPC_FUNC(&msg) = (uint8_t) RM_FUNC_IS_RESOURCE_MASTER; + RPC_U16(&msg, 0U) = (uint16_t) resource; + RPC_SIZE(&msg) = 2U; + + sc_call_rpc(ipc, &msg, SC_FALSE); + + result = RPC_R8(&msg); + return (sc_bool_t) result; +} + +sc_bool_t sc_rm_is_resource_peripheral(sc_ipc_t ipc, sc_rsrc_t resource) +{ + sc_rpc_msg_t msg; + uint8_t result; + + RPC_VER(&msg) = SC_RPC_VERSION; + RPC_SVC(&msg) = (uint8_t) SC_RPC_SVC_RM; + RPC_FUNC(&msg) = (uint8_t) RM_FUNC_IS_RESOURCE_PERIPHERAL; + RPC_U16(&msg, 0U) = (uint16_t) resource; + RPC_SIZE(&msg) = 2U; + + sc_call_rpc(ipc, &msg, SC_FALSE); + + result = RPC_R8(&msg); + return (sc_bool_t) result; +} + +sc_err_t sc_rm_get_resource_info(sc_ipc_t ipc, sc_rsrc_t resource, + sc_rm_sid_t *sid) +{ + sc_rpc_msg_t msg; + uint8_t result; + + RPC_VER(&msg) = SC_RPC_VERSION; + RPC_SVC(&msg) = (uint8_t) SC_RPC_SVC_RM; + RPC_FUNC(&msg) = (uint8_t) RM_FUNC_GET_RESOURCE_INFO; + RPC_U16(&msg, 0U) = (uint16_t) resource; + RPC_SIZE(&msg) = 2U; + + sc_call_rpc(ipc, &msg, SC_FALSE); + + if (sid != NULL) + { + *sid = RPC_U16(&msg, 0U); + } + + result = RPC_R8(&msg); + return (sc_err_t) result; +} + +sc_err_t sc_rm_memreg_alloc(sc_ipc_t ipc, sc_rm_mr_t *mr, + sc_faddr_t addr_start, sc_faddr_t addr_end) +{ + sc_rpc_msg_t msg; + uint8_t result; + + RPC_VER(&msg) = SC_RPC_VERSION; + RPC_SVC(&msg) = (uint8_t) SC_RPC_SVC_RM; + RPC_FUNC(&msg) = (uint8_t) RM_FUNC_MEMREG_ALLOC; + RPC_U32(&msg, 0U) = (uint32_t) (addr_start >> 32U); + RPC_U32(&msg, 4U) = (uint32_t) addr_start; + RPC_U32(&msg, 8U) = (uint32_t) (addr_end >> 32U); + RPC_U32(&msg, 12U) = (uint32_t) addr_end; + RPC_SIZE(&msg) = 5U; + + sc_call_rpc(ipc, &msg, SC_FALSE); + + result = RPC_R8(&msg); + if (mr != NULL) + { + *mr = RPC_U8(&msg, 0U); + } + + return (sc_err_t) result; +} + +sc_err_t sc_rm_memreg_split(sc_ipc_t ipc, sc_rm_mr_t mr, + sc_rm_mr_t *mr_ret, sc_faddr_t addr_start, sc_faddr_t addr_end) +{ + sc_rpc_msg_t msg; + uint8_t result; + + RPC_VER(&msg) = SC_RPC_VERSION; + RPC_SVC(&msg) = (uint8_t) SC_RPC_SVC_RM; + RPC_FUNC(&msg) = (uint8_t) RM_FUNC_MEMREG_SPLIT; + RPC_U32(&msg, 0U) = (uint32_t) (addr_start >> 32U); + RPC_U32(&msg, 4U) = (uint32_t) addr_start; + RPC_U32(&msg, 8U) = (uint32_t) (addr_end >> 32U); + RPC_U32(&msg, 12U) = (uint32_t) addr_end; + RPC_U8(&msg, 16U) = (uint8_t) mr; + RPC_SIZE(&msg) = 6U; + + sc_call_rpc(ipc, &msg, SC_FALSE); + + result = RPC_R8(&msg); + if (mr_ret != NULL) + { + *mr_ret = RPC_U8(&msg, 0U); + } + + return (sc_err_t) result; +} + +sc_err_t sc_rm_memreg_free(sc_ipc_t ipc, sc_rm_mr_t mr) +{ + sc_rpc_msg_t msg; + uint8_t result; + + RPC_VER(&msg) = SC_RPC_VERSION; + RPC_SVC(&msg) = (uint8_t) SC_RPC_SVC_RM; + RPC_FUNC(&msg) = (uint8_t) RM_FUNC_MEMREG_FREE; + RPC_U8(&msg, 0U) = (uint8_t) mr; + RPC_SIZE(&msg) = 2U; + + sc_call_rpc(ipc, &msg, SC_FALSE); + + result = RPC_R8(&msg); + return (sc_err_t) result; +} + +sc_err_t sc_rm_find_memreg(sc_ipc_t ipc, sc_rm_mr_t *mr, + sc_faddr_t addr_start, sc_faddr_t addr_end) +{ + sc_rpc_msg_t msg; + uint8_t result; + + RPC_VER(&msg) = SC_RPC_VERSION; + RPC_SVC(&msg) = (uint8_t) SC_RPC_SVC_RM; + RPC_FUNC(&msg) = (uint8_t) RM_FUNC_FIND_MEMREG; + RPC_U32(&msg, 0U) = (uint32_t) (addr_start >> 32U); + RPC_U32(&msg, 4U) = (uint32_t) addr_start; + RPC_U32(&msg, 8U) = (uint32_t) (addr_end >> 32U); + RPC_U32(&msg, 12U) = (uint32_t) addr_end; + RPC_SIZE(&msg) = 5U; + + sc_call_rpc(ipc, &msg, SC_FALSE); + + result = RPC_R8(&msg); + if (mr != NULL) + { + *mr = RPC_U8(&msg, 0U); + } + + return (sc_err_t) result; +} + +sc_err_t sc_rm_assign_memreg(sc_ipc_t ipc, sc_rm_pt_t pt, sc_rm_mr_t mr) +{ + sc_rpc_msg_t msg; + uint8_t result; + + RPC_VER(&msg) = SC_RPC_VERSION; + RPC_SVC(&msg) = (uint8_t) SC_RPC_SVC_RM; + RPC_FUNC(&msg) = (uint8_t) RM_FUNC_ASSIGN_MEMREG; + RPC_U8(&msg, 0U) = (uint8_t) pt; + RPC_U8(&msg, 1U) = (uint8_t) mr; + RPC_SIZE(&msg) = 2U; + + sc_call_rpc(ipc, &msg, SC_FALSE); + + result = RPC_R8(&msg); + return (sc_err_t) result; +} + +sc_err_t sc_rm_set_memreg_permissions(sc_ipc_t ipc, sc_rm_mr_t mr, + sc_rm_pt_t pt, sc_rm_perm_t perm) +{ + sc_rpc_msg_t msg; + uint8_t result; + + RPC_VER(&msg) = SC_RPC_VERSION; + RPC_SVC(&msg) = (uint8_t) SC_RPC_SVC_RM; + RPC_FUNC(&msg) = (uint8_t) RM_FUNC_SET_MEMREG_PERMISSIONS; + RPC_U8(&msg, 0U) = (uint8_t) mr; + RPC_U8(&msg, 1U) = (uint8_t) pt; + RPC_U8(&msg, 2U) = (uint8_t) perm; + RPC_SIZE(&msg) = 2U; + + sc_call_rpc(ipc, &msg, SC_FALSE); + + result = RPC_R8(&msg); + return (sc_err_t) result; +} + +sc_bool_t sc_rm_is_memreg_owned(sc_ipc_t ipc, sc_rm_mr_t mr) +{ + sc_rpc_msg_t msg; + uint8_t result; + + RPC_VER(&msg) = SC_RPC_VERSION; + RPC_SVC(&msg) = (uint8_t) SC_RPC_SVC_RM; + RPC_FUNC(&msg) = (uint8_t) RM_FUNC_IS_MEMREG_OWNED; + RPC_U8(&msg, 0U) = (uint8_t) mr; + RPC_SIZE(&msg) = 2U; + + sc_call_rpc(ipc, &msg, SC_FALSE); + + result = RPC_R8(&msg); + return (sc_bool_t) result; +} + +sc_err_t sc_rm_get_memreg_info(sc_ipc_t ipc, sc_rm_mr_t mr, + sc_faddr_t *addr_start, sc_faddr_t *addr_end) +{ + sc_rpc_msg_t msg; + uint8_t result; + + RPC_VER(&msg) = SC_RPC_VERSION; + RPC_SVC(&msg) = (uint8_t) SC_RPC_SVC_RM; + RPC_FUNC(&msg) = (uint8_t) RM_FUNC_GET_MEMREG_INFO; + RPC_U8(&msg, 0U) = (uint8_t) mr; + RPC_SIZE(&msg) = 2U; + + sc_call_rpc(ipc, &msg, SC_FALSE); + + if (addr_start != NULL) + { + *addr_start = ((uint64_t) RPC_U32(&msg, 0U) << 32U) | RPC_U32(&msg, 4U); + } + + if (addr_end != NULL) + { + *addr_end = ((uint64_t) RPC_U32(&msg, 8U) << 32U) | RPC_U32(&msg, 12U); + } + + result = RPC_R8(&msg); + return (sc_err_t) result; +} + +sc_err_t sc_rm_assign_pad(sc_ipc_t ipc, sc_rm_pt_t pt, sc_pad_t pad) +{ + sc_rpc_msg_t msg; + uint8_t result; + + RPC_VER(&msg) = SC_RPC_VERSION; + RPC_SVC(&msg) = (uint8_t) SC_RPC_SVC_RM; + RPC_FUNC(&msg) = (uint8_t) RM_FUNC_ASSIGN_PAD; + RPC_U16(&msg, 0U) = (uint16_t) pad; + RPC_U8(&msg, 2U) = (uint8_t) pt; + RPC_SIZE(&msg) = 2U; + + sc_call_rpc(ipc, &msg, SC_FALSE); + + result = RPC_R8(&msg); + return (sc_err_t) result; +} + +sc_err_t sc_rm_set_pad_movable(sc_ipc_t ipc, sc_pad_t pad_fst, + sc_pad_t pad_lst, sc_bool_t movable) +{ + sc_rpc_msg_t msg; + uint8_t result; + + RPC_VER(&msg) = SC_RPC_VERSION; + RPC_SVC(&msg) = (uint8_t) SC_RPC_SVC_RM; + RPC_FUNC(&msg) = (uint8_t) RM_FUNC_SET_PAD_MOVABLE; + RPC_U16(&msg, 0U) = (uint16_t) pad_fst; + RPC_U16(&msg, 2U) = (uint16_t) pad_lst; + RPC_U8(&msg, 4U) = (uint8_t) movable; + RPC_SIZE(&msg) = 3U; + + sc_call_rpc(ipc, &msg, SC_FALSE); + + result = RPC_R8(&msg); + return (sc_err_t) result; +} + +sc_bool_t sc_rm_is_pad_owned(sc_ipc_t ipc, sc_pad_t pad) +{ + sc_rpc_msg_t msg; + uint8_t result; + + RPC_VER(&msg) = SC_RPC_VERSION; + RPC_SVC(&msg) = (uint8_t) SC_RPC_SVC_RM; + RPC_FUNC(&msg) = (uint8_t) RM_FUNC_IS_PAD_OWNED; + RPC_U8(&msg, 0U) = (uint8_t) pad; + RPC_SIZE(&msg) = 2U; + + sc_call_rpc(ipc, &msg, SC_FALSE); + + result = RPC_R8(&msg); + return (sc_bool_t) result; +} + +void sc_rm_dump(sc_ipc_t ipc) +{ + sc_rpc_msg_t msg; + + RPC_VER(&msg) = SC_RPC_VERSION; + RPC_SVC(&msg) = (uint8_t) SC_RPC_SVC_RM; + RPC_FUNC(&msg) = (uint8_t) RM_FUNC_DUMP; + RPC_SIZE(&msg) = 1U; + + sc_call_rpc(ipc, &msg, SC_FALSE); + + return; +} + +/**@}*/ + diff --git a/arch/arm/mach-imx/imx8/sci/svc/timer/rpc.h b/arch/arm/mach-imx/imx8/sci/svc/timer/rpc.h new file mode 100644 index 0000000000..0c498e97f0 --- /dev/null +++ b/arch/arm/mach-imx/imx8/sci/svc/timer/rpc.h @@ -0,0 +1,67 @@ +/* + * Copyright (C) 2016 Freescale Semiconductor, Inc. + * Copyright 2017-2018 NXP + * + * SPDX-License-Identifier: GPL-2.0+ + */ + +/*! + * Header file for the TIMER RPC implementation. + * + * @addtogroup TIMER_SVC + * @{ + */ + +#ifndef SC_TIMER_RPC_H +#define SC_TIMER_RPC_H + +/* Includes */ + +/* Defines */ + +/*! + * @name Defines for RPC TIMER function calls + */ +/*@{*/ +#define TIMER_FUNC_UNKNOWN 0 /*!< Unknown function */ +#define TIMER_FUNC_SET_WDOG_TIMEOUT 1U /*!< Index for timer_set_wdog_timeout() RPC call */ +#define TIMER_FUNC_SET_WDOG_PRE_TIMEOUT 12U /*!< Index for timer_set_wdog_pre_timeout() RPC call */ +#define TIMER_FUNC_START_WDOG 2U /*!< Index for timer_start_wdog() RPC call */ +#define TIMER_FUNC_STOP_WDOG 3U /*!< Index for timer_stop_wdog() RPC call */ +#define TIMER_FUNC_PING_WDOG 4U /*!< Index for timer_ping_wdog() RPC call */ +#define TIMER_FUNC_GET_WDOG_STATUS 5U /*!< Index for timer_get_wdog_status() RPC call */ +#define TIMER_FUNC_PT_GET_WDOG_STATUS 13U /*!< Index for timer_pt_get_wdog_status() RPC call */ +#define TIMER_FUNC_SET_WDOG_ACTION 10U /*!< Index for timer_set_wdog_action() RPC call */ +#define TIMER_FUNC_SET_RTC_TIME 6U /*!< Index for timer_set_rtc_time() RPC call */ +#define TIMER_FUNC_GET_RTC_TIME 7U /*!< Index for timer_get_rtc_time() RPC call */ +#define TIMER_FUNC_GET_RTC_SEC1970 9U /*!< Index for timer_get_rtc_sec1970() RPC call */ +#define TIMER_FUNC_SET_RTC_ALARM 8U /*!< Index for timer_set_rtc_alarm() RPC call */ +#define TIMER_FUNC_SET_RTC_PERIODIC_ALARM 14U /*!< Index for timer_set_rtc_periodic_alarm() RPC call */ +#define TIMER_FUNC_CANCEL_RTC_ALARM 15U /*!< Index for timer_cancel_rtc_alarm() RPC call */ +#define TIMER_FUNC_SET_RTC_CALB 11U /*!< Index for timer_set_rtc_calb() RPC call */ +/*@}*/ + +/* Types */ + +/* Functions */ + +/*! + * This function dispatches an incoming TIMER RPC request. + * + * @param[in] caller_pt caller partition + * @param[in] msg pointer to RPC message + */ +void timer_dispatch(sc_rm_pt_t caller_pt, sc_rpc_msg_t *msg); + +/*! + * This function translates and dispatches an TIMER RPC request. + * + * @param[in] ipc IPC handle + * @param[in] msg pointer to RPC message + */ +void timer_xlate(sc_ipc_t ipc, sc_rpc_msg_t *msg); + +#endif /* SC_TIMER_RPC_H */ + +/**@}*/ + diff --git a/arch/arm/mach-imx/imx8/sci/svc/timer/rpc_clnt.c b/arch/arm/mach-imx/imx8/sci/svc/timer/rpc_clnt.c new file mode 100644 index 0000000000..abdf433b5c --- /dev/null +++ b/arch/arm/mach-imx/imx8/sci/svc/timer/rpc_clnt.c @@ -0,0 +1,365 @@ +/* + * Copyright (C) 2016 Freescale Semiconductor, Inc. + * Copyright 2017-2018 NXP + * + * SPDX-License-Identifier: GPL-2.0+ + */ + +/*! + * File containing client-side RPC functions for the TIMER service. These + * functions are ported to clients that communicate to the SC. + * + * @addtogroup TIMER_SVC + * @{ + */ + +/* Includes */ + +#include +#include +#include +#include +#include "rpc.h" + +/* Local Defines */ + +/* Local Types */ + +/* Local Functions */ + +sc_err_t sc_timer_set_wdog_timeout(sc_ipc_t ipc, + sc_timer_wdog_time_t timeout) +{ + sc_rpc_msg_t msg; + uint8_t result; + + RPC_VER(&msg) = SC_RPC_VERSION; + RPC_SVC(&msg) = (uint8_t) SC_RPC_SVC_TIMER; + RPC_FUNC(&msg) = (uint8_t) TIMER_FUNC_SET_WDOG_TIMEOUT; + RPC_U32(&msg, 0U) = (uint32_t) timeout; + RPC_SIZE(&msg) = 2U; + + sc_call_rpc(ipc, &msg, SC_FALSE); + + result = RPC_R8(&msg); + return (sc_err_t) result; +} + +sc_err_t sc_timer_set_wdog_pre_timeout(sc_ipc_t ipc, + sc_timer_wdog_time_t pre_timeout) +{ + sc_rpc_msg_t msg; + uint8_t result; + + RPC_VER(&msg) = SC_RPC_VERSION; + RPC_SVC(&msg) = (uint8_t) SC_RPC_SVC_TIMER; + RPC_FUNC(&msg) = (uint8_t) TIMER_FUNC_SET_WDOG_PRE_TIMEOUT; + RPC_U32(&msg, 0U) = (uint32_t) pre_timeout; + RPC_SIZE(&msg) = 2U; + + sc_call_rpc(ipc, &msg, SC_FALSE); + + result = RPC_R8(&msg); + return (sc_err_t) result; +} + +sc_err_t sc_timer_start_wdog(sc_ipc_t ipc, sc_bool_t lock) +{ + sc_rpc_msg_t msg; + uint8_t result; + + RPC_VER(&msg) = SC_RPC_VERSION; + RPC_SVC(&msg) = (uint8_t) SC_RPC_SVC_TIMER; + RPC_FUNC(&msg) = (uint8_t) TIMER_FUNC_START_WDOG; + RPC_U8(&msg, 0U) = (uint8_t) lock; + RPC_SIZE(&msg) = 2U; + + sc_call_rpc(ipc, &msg, SC_FALSE); + + result = RPC_R8(&msg); + return (sc_err_t) result; +} + +sc_err_t sc_timer_stop_wdog(sc_ipc_t ipc) +{ + sc_rpc_msg_t msg; + uint8_t result; + + RPC_VER(&msg) = SC_RPC_VERSION; + RPC_SVC(&msg) = (uint8_t) SC_RPC_SVC_TIMER; + RPC_FUNC(&msg) = (uint8_t) TIMER_FUNC_STOP_WDOG; + RPC_SIZE(&msg) = 1U; + + sc_call_rpc(ipc, &msg, SC_FALSE); + + result = RPC_R8(&msg); + return (sc_err_t) result; +} + +sc_err_t sc_timer_ping_wdog(sc_ipc_t ipc) +{ + sc_rpc_msg_t msg; + uint8_t result; + + RPC_VER(&msg) = SC_RPC_VERSION; + RPC_SVC(&msg) = (uint8_t) SC_RPC_SVC_TIMER; + RPC_FUNC(&msg) = (uint8_t) TIMER_FUNC_PING_WDOG; + RPC_SIZE(&msg) = 1U; + + sc_call_rpc(ipc, &msg, SC_FALSE); + + result = RPC_R8(&msg); + return (sc_err_t) result; +} + +sc_err_t sc_timer_get_wdog_status(sc_ipc_t ipc, + sc_timer_wdog_time_t *timeout, sc_timer_wdog_time_t *max_timeout, + sc_timer_wdog_time_t *remaining_time) +{ + sc_rpc_msg_t msg; + uint8_t result; + + RPC_VER(&msg) = SC_RPC_VERSION; + RPC_SVC(&msg) = (uint8_t) SC_RPC_SVC_TIMER; + RPC_FUNC(&msg) = (uint8_t) TIMER_FUNC_GET_WDOG_STATUS; + RPC_SIZE(&msg) = 1U; + + sc_call_rpc(ipc, &msg, SC_FALSE); + + if (timeout != NULL) + { + *timeout = RPC_U32(&msg, 0U); + } + + if (max_timeout != NULL) + { + *max_timeout = RPC_U32(&msg, 4U); + } + + if (remaining_time != NULL) + { + *remaining_time = RPC_U32(&msg, 8U); + } + + result = RPC_R8(&msg); + return (sc_err_t) result; +} + +sc_err_t sc_timer_pt_get_wdog_status(sc_ipc_t ipc, sc_rm_pt_t pt, sc_bool_t *enb, + sc_timer_wdog_time_t *timeout, sc_timer_wdog_time_t *remaining_time) +{ + sc_rpc_msg_t msg; + uint8_t result; + + RPC_VER(&msg) = SC_RPC_VERSION; + RPC_SVC(&msg) = (uint8_t) SC_RPC_SVC_TIMER; + RPC_FUNC(&msg) = (uint8_t) TIMER_FUNC_PT_GET_WDOG_STATUS; + RPC_U8(&msg, 0U) = (uint8_t) pt; + RPC_SIZE(&msg) = 2U; + + sc_call_rpc(ipc, &msg, SC_FALSE); + + if (timeout != NULL) + { + *timeout = RPC_U32(&msg, 0U); + } + + if (remaining_time != NULL) + { + *remaining_time = RPC_U32(&msg, 4U); + } + + result = RPC_R8(&msg); + if (enb != NULL) + { + *enb = RPC_U8(&msg, 8U); + } + + return (sc_err_t) result; +} + +sc_err_t sc_timer_set_wdog_action(sc_ipc_t ipc, + sc_rm_pt_t pt, sc_timer_wdog_action_t action) +{ + sc_rpc_msg_t msg; + uint8_t result; + + RPC_VER(&msg) = SC_RPC_VERSION; + RPC_SVC(&msg) = (uint8_t) SC_RPC_SVC_TIMER; + RPC_FUNC(&msg) = (uint8_t) TIMER_FUNC_SET_WDOG_ACTION; + RPC_U8(&msg, 0U) = (uint8_t) pt; + RPC_U8(&msg, 1U) = (uint8_t) action; + RPC_SIZE(&msg) = 2U; + + sc_call_rpc(ipc, &msg, SC_FALSE); + + result = RPC_R8(&msg); + return (sc_err_t) result; +} + +sc_err_t sc_timer_set_rtc_time(sc_ipc_t ipc, uint16_t year, uint8_t mon, + uint8_t day, uint8_t hour, uint8_t min, uint8_t sec) +{ + sc_rpc_msg_t msg; + uint8_t result; + + RPC_VER(&msg) = SC_RPC_VERSION; + RPC_SVC(&msg) = (uint8_t) SC_RPC_SVC_TIMER; + RPC_FUNC(&msg) = (uint8_t) TIMER_FUNC_SET_RTC_TIME; + RPC_U16(&msg, 0U) = (uint16_t) year; + RPC_U8(&msg, 2U) = (uint8_t) mon; + RPC_U8(&msg, 3U) = (uint8_t) day; + RPC_U8(&msg, 4U) = (uint8_t) hour; + RPC_U8(&msg, 5U) = (uint8_t) min; + RPC_U8(&msg, 6U) = (uint8_t) sec; + RPC_SIZE(&msg) = 3U; + + sc_call_rpc(ipc, &msg, SC_FALSE); + + result = RPC_R8(&msg); + return (sc_err_t) result; +} + +sc_err_t sc_timer_get_rtc_time(sc_ipc_t ipc, uint16_t *year, uint8_t *mon, + uint8_t *day, uint8_t *hour, uint8_t *min, uint8_t *sec) +{ + sc_rpc_msg_t msg; + uint8_t result; + + RPC_VER(&msg) = SC_RPC_VERSION; + RPC_SVC(&msg) = (uint8_t) SC_RPC_SVC_TIMER; + RPC_FUNC(&msg) = (uint8_t) TIMER_FUNC_GET_RTC_TIME; + RPC_SIZE(&msg) = 1U; + + sc_call_rpc(ipc, &msg, SC_FALSE); + + if (year != NULL) + { + *year = RPC_U16(&msg, 0U); + } + + result = RPC_R8(&msg); + if (mon != NULL) + { + *mon = RPC_U8(&msg, 2U); + } + + if (day != NULL) + { + *day = RPC_U8(&msg, 3U); + } + + if (hour != NULL) + { + *hour = RPC_U8(&msg, 4U); + } + + if (min != NULL) + { + *min = RPC_U8(&msg, 5U); + } + + if (sec != NULL) + { + *sec = RPC_U8(&msg, 6U); + } + + return (sc_err_t) result; +} + +sc_err_t sc_timer_get_rtc_sec1970(sc_ipc_t ipc, uint32_t *sec) +{ + sc_rpc_msg_t msg; + uint8_t result; + + RPC_VER(&msg) = SC_RPC_VERSION; + RPC_SVC(&msg) = (uint8_t) SC_RPC_SVC_TIMER; + RPC_FUNC(&msg) = (uint8_t) TIMER_FUNC_GET_RTC_SEC1970; + RPC_SIZE(&msg) = 1U; + + sc_call_rpc(ipc, &msg, SC_FALSE); + + if (sec != NULL) + { + *sec = RPC_U32(&msg, 0U); + } + + result = RPC_R8(&msg); + return (sc_err_t) result; +} + +sc_err_t sc_timer_set_rtc_alarm(sc_ipc_t ipc, uint16_t year, uint8_t mon, + uint8_t day, uint8_t hour, uint8_t min, uint8_t sec) +{ + sc_rpc_msg_t msg; + uint8_t result; + + RPC_VER(&msg) = SC_RPC_VERSION; + RPC_SVC(&msg) = (uint8_t) SC_RPC_SVC_TIMER; + RPC_FUNC(&msg) = (uint8_t) TIMER_FUNC_SET_RTC_ALARM; + RPC_U16(&msg, 0U) = (uint16_t) year; + RPC_U8(&msg, 2U) = (uint8_t) mon; + RPC_U8(&msg, 3U) = (uint8_t) day; + RPC_U8(&msg, 4U) = (uint8_t) hour; + RPC_U8(&msg, 5U) = (uint8_t) min; + RPC_U8(&msg, 6U) = (uint8_t) sec; + RPC_SIZE(&msg) = 3U; + + sc_call_rpc(ipc, &msg, SC_FALSE); + + result = RPC_R8(&msg); + return (sc_err_t) result; +} + +sc_err_t sc_timer_set_rtc_periodic_alarm(sc_ipc_t ipc, uint32_t sec) +{ + sc_rpc_msg_t msg; + uint8_t result; + + RPC_VER(&msg) = SC_RPC_VERSION; + RPC_SVC(&msg) = (uint8_t) SC_RPC_SVC_TIMER; + RPC_FUNC(&msg) = (uint8_t) TIMER_FUNC_SET_RTC_PERIODIC_ALARM; + RPC_U32(&msg, 0U) = (uint32_t) sec; + RPC_SIZE(&msg) = 2U; + + sc_call_rpc(ipc, &msg, SC_FALSE); + + result = RPC_R8(&msg); + return (sc_err_t) result; +} + +sc_err_t sc_timer_cancel_rtc_alarm(sc_ipc_t ipc) +{ + sc_rpc_msg_t msg; + uint8_t result; + + RPC_VER(&msg) = SC_RPC_VERSION; + RPC_SVC(&msg) = (uint8_t) SC_RPC_SVC_TIMER; + RPC_FUNC(&msg) = (uint8_t) TIMER_FUNC_CANCEL_RTC_ALARM; + RPC_SIZE(&msg) = 1U; + + sc_call_rpc(ipc, &msg, SC_FALSE); + + result = RPC_R8(&msg); + return (sc_err_t) result; +} + +sc_err_t sc_timer_set_rtc_calb(sc_ipc_t ipc, int8_t count) +{ + sc_rpc_msg_t msg; + uint8_t result; + + RPC_VER(&msg) = SC_RPC_VERSION; + RPC_SVC(&msg) = (uint8_t) SC_RPC_SVC_TIMER; + RPC_FUNC(&msg) = (uint8_t) TIMER_FUNC_SET_RTC_CALB; + RPC_I8(&msg, 0U) = (int8_t) count; + RPC_SIZE(&msg) = 2U; + + sc_call_rpc(ipc, &msg, SC_FALSE); + + result = RPC_R8(&msg); + return (sc_err_t) result; +} + +/**@}*/ + diff --git a/include/dt-bindings/pinctrl/pads-imx8qm.h b/include/dt-bindings/pinctrl/pads-imx8qm.h new file mode 100644 index 0000000000..ba75ecb7a5 --- /dev/null +++ b/include/dt-bindings/pinctrl/pads-imx8qm.h @@ -0,0 +1,975 @@ +/* + * Copyright (C) 2016 Freescale Semiconductor, Inc. + * Copyright 2017-2018 NXP + * + * SPDX-License-Identifier: GPL-2.0+ + */ + +/*! + * Header file used to configure SoC pad list. + */ + +#ifndef SC_PADS_H +#define SC_PADS_H + +/* Includes */ + +/* Defines */ + +/*! + * @name Pad Definitions + */ +/*@{*/ +#define SC_P_SIM0_CLK 0 /*!< DMA.SIM0.CLK, LSIO.GPIO0.IO00 */ +#define SC_P_SIM0_RST 1 /*!< DMA.SIM0.RST, LSIO.GPIO0.IO01 */ +#define SC_P_SIM0_IO 2 /*!< DMA.SIM0.IO, LSIO.GPIO0.IO02 */ +#define SC_P_SIM0_PD 3 /*!< DMA.SIM0.PD, DMA.I2C3.SCL, LSIO.GPIO0.IO03 */ +#define SC_P_SIM0_POWER_EN 4 /*!< DMA.SIM0.POWER_EN, DMA.I2C3.SDA, LSIO.GPIO0.IO04 */ +#define SC_P_SIM0_GPIO0_00 5 /*!< DMA.SIM0.POWER_EN, LSIO.GPIO0.IO05 */ +#define SC_P_COMP_CTL_GPIO_1V8_3V3_SIM 6 /*!< */ +#define SC_P_M40_I2C0_SCL 7 /*!< M40.I2C0.SCL, M40.UART0.RX, M40.GPIO0.IO02, LSIO.GPIO0.IO06 */ +#define SC_P_M40_I2C0_SDA 8 /*!< M40.I2C0.SDA, M40.UART0.TX, M40.GPIO0.IO03, LSIO.GPIO0.IO07 */ +#define SC_P_M40_GPIO0_00 9 /*!< M40.GPIO0.IO00, M40.TPM0.CH0, DMA.UART4.RX, LSIO.GPIO0.IO08 */ +#define SC_P_M40_GPIO0_01 10 /*!< M40.GPIO0.IO01, M40.TPM0.CH1, DMA.UART4.TX, LSIO.GPIO0.IO09 */ +#define SC_P_M41_I2C0_SCL 11 /*!< M41.I2C0.SCL, M41.UART0.RX, M41.GPIO0.IO02, LSIO.GPIO0.IO10 */ +#define SC_P_M41_I2C0_SDA 12 /*!< M41.I2C0.SDA, M41.UART0.TX, M41.GPIO0.IO03, LSIO.GPIO0.IO11 */ +#define SC_P_M41_GPIO0_00 13 /*!< M41.GPIO0.IO00, M41.TPM0.CH0, DMA.UART3.RX, LSIO.GPIO0.IO12 */ +#define SC_P_M41_GPIO0_01 14 /*!< M41.GPIO0.IO01, M41.TPM0.CH1, DMA.UART3.TX, LSIO.GPIO0.IO13 */ +#define SC_P_GPT0_CLK 15 /*!< LSIO.GPT0.CLK, DMA.I2C1.SCL, LSIO.KPP0.COL4, LSIO.GPIO0.IO14 */ +#define SC_P_GPT0_CAPTURE 16 /*!< LSIO.GPT0.CAPTURE, DMA.I2C1.SDA, LSIO.KPP0.COL5, LSIO.GPIO0.IO15 */ +#define SC_P_GPT0_COMPARE 17 /*!< LSIO.GPT0.COMPARE, LSIO.PWM3.OUT, LSIO.KPP0.COL6, LSIO.GPIO0.IO16 */ +#define SC_P_GPT1_CLK 18 /*!< LSIO.GPT1.CLK, DMA.I2C2.SCL, LSIO.KPP0.COL7, LSIO.GPIO0.IO17 */ +#define SC_P_GPT1_CAPTURE 19 /*!< LSIO.GPT1.CAPTURE, DMA.I2C2.SDA, LSIO.KPP0.ROW4, LSIO.GPIO0.IO18 */ +#define SC_P_GPT1_COMPARE 20 /*!< LSIO.GPT1.COMPARE, LSIO.PWM2.OUT, LSIO.KPP0.ROW5, LSIO.GPIO0.IO19 */ +#define SC_P_UART0_RX 21 /*!< DMA.UART0.RX, SCU.UART0.RX, LSIO.GPIO0.IO20 */ +#define SC_P_UART0_TX 22 /*!< DMA.UART0.TX, SCU.UART0.TX, LSIO.GPIO0.IO21 */ +#define SC_P_UART0_RTS_B 23 /*!< DMA.UART0.RTS_B, LSIO.PWM0.OUT, DMA.UART2.RX, LSIO.GPIO0.IO22 */ +#define SC_P_UART0_CTS_B 24 /*!< DMA.UART0.CTS_B, LSIO.PWM1.OUT, DMA.UART2.TX, LSIO.GPIO0.IO23 */ +#define SC_P_UART1_TX 25 /*!< DMA.UART1.TX, DMA.SPI3.SCK, LSIO.GPIO0.IO24 */ +#define SC_P_UART1_RX 26 /*!< DMA.UART1.RX, DMA.SPI3.SDO, LSIO.GPIO0.IO25 */ +#define SC_P_UART1_RTS_B 27 /*!< DMA.UART1.RTS_B, DMA.SPI3.SDI, DMA.UART1.CTS_B, LSIO.GPIO0.IO26 */ +#define SC_P_UART1_CTS_B 28 /*!< DMA.UART1.CTS_B, DMA.SPI3.CS0, DMA.UART1.RTS_B, LSIO.GPIO0.IO27 */ +#define SC_P_COMP_CTL_GPIO_1V8_3V3_GPIOLH 29 /*!< */ +#define SC_P_SCU_PMIC_MEMC_ON 30 /*!< SCU.GPIO0.IOXX_PMIC_MEMC_ON */ +#define SC_P_SCU_WDOG_OUT 31 /*!< SCU.WDOG0.WDOG_OUT */ +#define SC_P_PMIC_I2C_SDA 32 /*!< SCU.PMIC_I2C.SDA */ +#define SC_P_PMIC_I2C_SCL 33 /*!< SCU.PMIC_I2C.SCL */ +#define SC_P_PMIC_EARLY_WARNING 34 /*!< SCU.PMIC_EARLY_WARNING */ +#define SC_P_PMIC_INT_B 35 /*!< SCU.DSC.PMIC_INT_B */ +#define SC_P_SCU_GPIO0_00 36 /*!< SCU.GPIO0.IO00, SCU.UART0.RX, LSIO.GPIO0.IO28 */ +#define SC_P_SCU_GPIO0_01 37 /*!< SCU.GPIO0.IO01, SCU.UART0.TX, LSIO.GPIO0.IO29 */ +#define SC_P_SCU_GPIO0_02 38 /*!< SCU.GPIO0.IO02, SCU.GPIO0.IOXX_PMIC_GPU0_ON, LSIO.GPIO0.IO30 */ +#define SC_P_SCU_GPIO0_03 39 /*!< SCU.GPIO0.IO03, SCU.GPIO0.IOXX_PMIC_GPU1_ON, LSIO.GPIO0.IO31 */ +#define SC_P_SCU_GPIO0_04 40 /*!< SCU.GPIO0.IO04, SCU.GPIO0.IOXX_PMIC_A72_ON, LSIO.GPIO1.IO00 */ +#define SC_P_SCU_GPIO0_05 41 /*!< SCU.GPIO0.IO05, SCU.GPIO0.IOXX_PMIC_A53_ON, LSIO.GPIO1.IO01 */ +#define SC_P_SCU_GPIO0_06 42 /*!< SCU.GPIO0.IO06, SCU.TPM0.CH0, LSIO.GPIO1.IO02 */ +#define SC_P_SCU_GPIO0_07 43 /*!< SCU.GPIO0.IO07, SCU.TPM0.CH1, SCU.DSC.RTC_CLOCK_OUTPUT_32K, LSIO.GPIO1.IO03 */ +#define SC_P_SCU_BOOT_MODE0 44 /*!< SCU.DSC.BOOT_MODE0 */ +#define SC_P_SCU_BOOT_MODE1 45 /*!< SCU.DSC.BOOT_MODE1 */ +#define SC_P_SCU_BOOT_MODE2 46 /*!< SCU.DSC.BOOT_MODE2 */ +#define SC_P_SCU_BOOT_MODE3 47 /*!< SCU.DSC.BOOT_MODE3 */ +#define SC_P_SCU_BOOT_MODE4 48 /*!< SCU.DSC.BOOT_MODE4, SCU.PMIC_I2C.SCL */ +#define SC_P_SCU_BOOT_MODE5 49 /*!< SCU.DSC.BOOT_MODE5, SCU.PMIC_I2C.SDA */ +#define SC_P_LVDS0_GPIO00 50 /*!< LVDS0.GPIO0.IO00, LVDS0.PWM0.OUT, LSIO.GPIO1.IO04 */ +#define SC_P_LVDS0_GPIO01 51 /*!< LVDS0.GPIO0.IO01, LSIO.GPIO1.IO05 */ +#define SC_P_LVDS0_I2C0_SCL 52 /*!< LVDS0.I2C0.SCL, LVDS0.GPIO0.IO02, LSIO.GPIO1.IO06 */ +#define SC_P_LVDS0_I2C0_SDA 53 /*!< LVDS0.I2C0.SDA, LVDS0.GPIO0.IO03, LSIO.GPIO1.IO07 */ +#define SC_P_LVDS0_I2C1_SCL 54 /*!< LVDS0.I2C1.SCL, DMA.UART2.TX, LSIO.GPIO1.IO08 */ +#define SC_P_LVDS0_I2C1_SDA 55 /*!< LVDS0.I2C1.SDA, DMA.UART2.RX, LSIO.GPIO1.IO09 */ +#define SC_P_LVDS1_GPIO00 56 /*!< LVDS1.GPIO0.IO00, LVDS1.PWM0.OUT, LSIO.GPIO1.IO10 */ +#define SC_P_LVDS1_GPIO01 57 /*!< LVDS1.GPIO0.IO01, LSIO.GPIO1.IO11 */ +#define SC_P_LVDS1_I2C0_SCL 58 /*!< LVDS1.I2C0.SCL, LVDS1.GPIO0.IO02, LSIO.GPIO1.IO12 */ +#define SC_P_LVDS1_I2C0_SDA 59 /*!< LVDS1.I2C0.SDA, LVDS1.GPIO0.IO03, LSIO.GPIO1.IO13 */ +#define SC_P_LVDS1_I2C1_SCL 60 /*!< LVDS1.I2C1.SCL, DMA.UART3.TX, LSIO.GPIO1.IO14 */ +#define SC_P_LVDS1_I2C1_SDA 61 /*!< LVDS1.I2C1.SDA, DMA.UART3.RX, LSIO.GPIO1.IO15 */ +#define SC_P_COMP_CTL_GPIO_1V8_3V3_LVDSGPIO 62 /*!< */ +#define SC_P_MIPI_DSI0_I2C0_SCL 63 /*!< MIPI_DSI0.I2C0.SCL, LSIO.GPIO1.IO16 */ +#define SC_P_MIPI_DSI0_I2C0_SDA 64 /*!< MIPI_DSI0.I2C0.SDA, LSIO.GPIO1.IO17 */ +#define SC_P_MIPI_DSI0_GPIO0_00 65 /*!< MIPI_DSI0.GPIO0.IO00, MIPI_DSI0.PWM0.OUT, LSIO.GPIO1.IO18 */ +#define SC_P_MIPI_DSI0_GPIO0_01 66 /*!< MIPI_DSI0.GPIO0.IO01, LSIO.GPIO1.IO19 */ +#define SC_P_MIPI_DSI1_I2C0_SCL 67 /*!< MIPI_DSI1.I2C0.SCL, LSIO.GPIO1.IO20 */ +#define SC_P_MIPI_DSI1_I2C0_SDA 68 /*!< MIPI_DSI1.I2C0.SDA, LSIO.GPIO1.IO21 */ +#define SC_P_MIPI_DSI1_GPIO0_00 69 /*!< MIPI_DSI1.GPIO0.IO00, MIPI_DSI1.PWM0.OUT, LSIO.GPIO1.IO22 */ +#define SC_P_MIPI_DSI1_GPIO0_01 70 /*!< MIPI_DSI1.GPIO0.IO01, LSIO.GPIO1.IO23 */ +#define SC_P_COMP_CTL_GPIO_1V8_3V3_MIPIDSIGPIO 71 /*!< */ +#define SC_P_MIPI_CSI0_MCLK_OUT 72 /*!< MIPI_CSI0.ACM.MCLK_OUT, LSIO.GPIO1.IO24 */ +#define SC_P_MIPI_CSI0_I2C0_SCL 73 /*!< MIPI_CSI0.I2C0.SCL, LSIO.GPIO1.IO25 */ +#define SC_P_MIPI_CSI0_I2C0_SDA 74 /*!< MIPI_CSI0.I2C0.SDA, LSIO.GPIO1.IO26 */ +#define SC_P_MIPI_CSI0_GPIO0_00 75 /*!< MIPI_CSI0.GPIO0.IO00, DMA.I2C0.SCL, MIPI_CSI1.I2C0.SCL, LSIO.GPIO1.IO27 */ +#define SC_P_MIPI_CSI0_GPIO0_01 76 /*!< MIPI_CSI0.GPIO0.IO01, DMA.I2C0.SDA, MIPI_CSI1.I2C0.SDA, LSIO.GPIO1.IO28 */ +#define SC_P_MIPI_CSI1_MCLK_OUT 77 /*!< MIPI_CSI1.ACM.MCLK_OUT, LSIO.GPIO1.IO29 */ +#define SC_P_MIPI_CSI1_GPIO0_00 78 /*!< MIPI_CSI1.GPIO0.IO00, DMA.UART4.RX, LSIO.GPIO1.IO30 */ +#define SC_P_MIPI_CSI1_GPIO0_01 79 /*!< MIPI_CSI1.GPIO0.IO01, DMA.UART4.TX, LSIO.GPIO1.IO31 */ +#define SC_P_MIPI_CSI1_I2C0_SCL 80 /*!< MIPI_CSI1.I2C0.SCL, LSIO.GPIO2.IO00 */ +#define SC_P_MIPI_CSI1_I2C0_SDA 81 /*!< MIPI_CSI1.I2C0.SDA, LSIO.GPIO2.IO01 */ +#define SC_P_HDMI_TX0_TS_SCL 82 /*!< HDMI_TX0.I2C0.SCL, DMA.I2C0.SCL, LSIO.GPIO2.IO02 */ +#define SC_P_HDMI_TX0_TS_SDA 83 /*!< HDMI_TX0.I2C0.SDA, DMA.I2C0.SDA, LSIO.GPIO2.IO03 */ +#define SC_P_COMP_CTL_GPIO_3V3_HDMIGPIO 84 /*!< */ +#define SC_P_ESAI1_FSR 85 /*!< AUD.ESAI1.FSR, LSIO.GPIO2.IO04 */ +#define SC_P_ESAI1_FST 86 /*!< AUD.ESAI1.FST, AUD.SPDIF0.EXT_CLK, LSIO.GPIO2.IO05 */ +#define SC_P_ESAI1_SCKR 87 /*!< AUD.ESAI1.SCKR, LSIO.GPIO2.IO06 */ +#define SC_P_ESAI1_SCKT 88 /*!< AUD.ESAI1.SCKT, AUD.SAI2.RXC, AUD.SPDIF0.EXT_CLK, LSIO.GPIO2.IO07 */ +#define SC_P_ESAI1_TX0 89 /*!< AUD.ESAI1.TX0, AUD.SAI2.RXD, AUD.SPDIF0.RX, LSIO.GPIO2.IO08 */ +#define SC_P_ESAI1_TX1 90 /*!< AUD.ESAI1.TX1, AUD.SAI2.RXFS, AUD.SPDIF0.TX, LSIO.GPIO2.IO09 */ +#define SC_P_ESAI1_TX2_RX3 91 /*!< AUD.ESAI1.TX2_RX3, AUD.SPDIF0.RX, LSIO.GPIO2.IO10 */ +#define SC_P_ESAI1_TX3_RX2 92 /*!< AUD.ESAI1.TX3_RX2, AUD.SPDIF0.TX, LSIO.GPIO2.IO11 */ +#define SC_P_ESAI1_TX4_RX1 93 /*!< AUD.ESAI1.TX4_RX1, LSIO.GPIO2.IO12 */ +#define SC_P_ESAI1_TX5_RX0 94 /*!< AUD.ESAI1.TX5_RX0, LSIO.GPIO2.IO13 */ +#define SC_P_SPDIF0_RX 95 /*!< AUD.SPDIF0.RX, AUD.MQS.R, AUD.ACM.MCLK_IN1, LSIO.GPIO2.IO14 */ +#define SC_P_SPDIF0_TX 96 /*!< AUD.SPDIF0.TX, AUD.MQS.L, AUD.ACM.MCLK_OUT1, LSIO.GPIO2.IO15 */ +#define SC_P_SPDIF0_EXT_CLK 97 /*!< AUD.SPDIF0.EXT_CLK, DMA.DMA0.REQ_IN0, LSIO.GPIO2.IO16 */ +#define SC_P_SPI3_SCK 98 /*!< DMA.SPI3.SCK, LSIO.GPIO2.IO17 */ +#define SC_P_SPI3_SDO 99 /*!< DMA.SPI3.SDO, DMA.FTM.CH0, LSIO.GPIO2.IO18 */ +#define SC_P_SPI3_SDI 100 /*!< DMA.SPI3.SDI, DMA.FTM.CH1, LSIO.GPIO2.IO19 */ +#define SC_P_SPI3_CS0 101 /*!< DMA.SPI3.CS0, DMA.FTM.CH2, LSIO.GPIO2.IO20 */ +#define SC_P_SPI3_CS1 102 /*!< DMA.SPI3.CS1, LSIO.GPIO2.IO21 */ +#define SC_P_COMP_CTL_GPIO_1V8_3V3_GPIORHB 103 /*!< */ +#define SC_P_ESAI0_FSR 104 /*!< AUD.ESAI0.FSR, LSIO.GPIO2.IO22 */ +#define SC_P_ESAI0_FST 105 /*!< AUD.ESAI0.FST, LSIO.GPIO2.IO23 */ +#define SC_P_ESAI0_SCKR 106 /*!< AUD.ESAI0.SCKR, LSIO.GPIO2.IO24 */ +#define SC_P_ESAI0_SCKT 107 /*!< AUD.ESAI0.SCKT, LSIO.GPIO2.IO25 */ +#define SC_P_ESAI0_TX0 108 /*!< AUD.ESAI0.TX0, LSIO.GPIO2.IO26 */ +#define SC_P_ESAI0_TX1 109 /*!< AUD.ESAI0.TX1, LSIO.GPIO2.IO27 */ +#define SC_P_ESAI0_TX2_RX3 110 /*!< AUD.ESAI0.TX2_RX3, LSIO.GPIO2.IO28 */ +#define SC_P_ESAI0_TX3_RX2 111 /*!< AUD.ESAI0.TX3_RX2, LSIO.GPIO2.IO29 */ +#define SC_P_ESAI0_TX4_RX1 112 /*!< AUD.ESAI0.TX4_RX1, LSIO.GPIO2.IO30 */ +#define SC_P_ESAI0_TX5_RX0 113 /*!< AUD.ESAI0.TX5_RX0, LSIO.GPIO2.IO31 */ +#define SC_P_MCLK_IN0 114 /*!< AUD.ACM.MCLK_IN0, AUD.ESAI0.RX_HF_CLK, AUD.ESAI1.RX_HF_CLK, LSIO.GPIO3.IO00 */ +#define SC_P_MCLK_OUT0 115 /*!< AUD.ACM.MCLK_OUT0, AUD.ESAI0.TX_HF_CLK, AUD.ESAI1.TX_HF_CLK, LSIO.GPIO3.IO01 */ +#define SC_P_COMP_CTL_GPIO_1V8_3V3_GPIORHC 116 /*!< */ +#define SC_P_SPI0_SCK 117 /*!< DMA.SPI0.SCK, AUD.SAI0.RXC, LSIO.GPIO3.IO02 */ +#define SC_P_SPI0_SDO 118 /*!< DMA.SPI0.SDO, AUD.SAI0.TXD, LSIO.GPIO3.IO03 */ +#define SC_P_SPI0_SDI 119 /*!< DMA.SPI0.SDI, AUD.SAI0.RXD, LSIO.GPIO3.IO04 */ +#define SC_P_SPI0_CS0 120 /*!< DMA.SPI0.CS0, AUD.SAI0.RXFS, LSIO.GPIO3.IO05 */ +#define SC_P_SPI0_CS1 121 /*!< DMA.SPI0.CS1, AUD.SAI0.TXC, LSIO.GPIO3.IO06 */ +#define SC_P_SPI2_SCK 122 /*!< DMA.SPI2.SCK, LSIO.GPIO3.IO07 */ +#define SC_P_SPI2_SDO 123 /*!< DMA.SPI2.SDO, LSIO.GPIO3.IO08 */ +#define SC_P_SPI2_SDI 124 /*!< DMA.SPI2.SDI, LSIO.GPIO3.IO09 */ +#define SC_P_SPI2_CS0 125 /*!< DMA.SPI2.CS0, LSIO.GPIO3.IO10 */ +#define SC_P_SPI2_CS1 126 /*!< DMA.SPI2.CS1, AUD.SAI0.TXFS, LSIO.GPIO3.IO11 */ +#define SC_P_SAI1_RXC 127 /*!< AUD.SAI1.RXC, AUD.SAI0.TXD, LSIO.GPIO3.IO12 */ +#define SC_P_SAI1_RXD 128 /*!< AUD.SAI1.RXD, AUD.SAI0.TXFS, LSIO.GPIO3.IO13 */ +#define SC_P_SAI1_RXFS 129 /*!< AUD.SAI1.RXFS, AUD.SAI0.RXD, LSIO.GPIO3.IO14 */ +#define SC_P_SAI1_TXC 130 /*!< AUD.SAI1.TXC, AUD.SAI0.TXC, LSIO.GPIO3.IO15 */ +#define SC_P_SAI1_TXD 131 /*!< AUD.SAI1.TXD, AUD.SAI1.RXC, LSIO.GPIO3.IO16 */ +#define SC_P_SAI1_TXFS 132 /*!< AUD.SAI1.TXFS, AUD.SAI1.RXFS, LSIO.GPIO3.IO17 */ +#define SC_P_COMP_CTL_GPIO_1V8_3V3_GPIORHT 133 /*!< */ +#define SC_P_ADC_IN7 134 /*!< DMA.ADC1.IN3, DMA.SPI1.CS1, LSIO.KPP0.ROW3, LSIO.GPIO3.IO25 */ +#define SC_P_ADC_IN6 135 /*!< DMA.ADC1.IN2, DMA.SPI1.CS0, LSIO.KPP0.ROW2, LSIO.GPIO3.IO24 */ +#define SC_P_ADC_IN5 136 /*!< DMA.ADC1.IN1, DMA.SPI1.SDI, LSIO.KPP0.ROW1, LSIO.GPIO3.IO23 */ +#define SC_P_ADC_IN4 137 /*!< DMA.ADC1.IN0, DMA.SPI1.SDO, LSIO.KPP0.ROW0, LSIO.GPIO3.IO22 */ +#define SC_P_ADC_IN3 138 /*!< DMA.ADC0.IN3, DMA.SPI1.SCK, LSIO.KPP0.COL3, LSIO.GPIO3.IO21 */ +#define SC_P_ADC_IN2 139 /*!< DMA.ADC0.IN2, LSIO.KPP0.COL2, LSIO.GPIO3.IO20 */ +#define SC_P_ADC_IN1 140 /*!< DMA.ADC0.IN1, LSIO.KPP0.COL1, LSIO.GPIO3.IO19 */ +#define SC_P_ADC_IN0 141 /*!< DMA.ADC0.IN0, LSIO.KPP0.COL0, LSIO.GPIO3.IO18 */ +#define SC_P_MLB_SIG 142 /*!< CONN.MLB.SIG, AUD.SAI3.RXC, LSIO.GPIO3.IO26 */ +#define SC_P_MLB_CLK 143 /*!< CONN.MLB.CLK, AUD.SAI3.RXFS, LSIO.GPIO3.IO27 */ +#define SC_P_MLB_DATA 144 /*!< CONN.MLB.DATA, AUD.SAI3.RXD, LSIO.GPIO3.IO28 */ +#define SC_P_COMP_CTL_GPIO_1V8_3V3_GPIOLHT 145 /*!< */ +#define SC_P_FLEXCAN0_RX 146 /*!< DMA.FLEXCAN0.RX, LSIO.GPIO3.IO29 */ +#define SC_P_FLEXCAN0_TX 147 /*!< DMA.FLEXCAN0.TX, LSIO.GPIO3.IO30 */ +#define SC_P_FLEXCAN1_RX 148 /*!< DMA.FLEXCAN1.RX, LSIO.GPIO3.IO31 */ +#define SC_P_FLEXCAN1_TX 149 /*!< DMA.FLEXCAN1.TX, LSIO.GPIO4.IO00 */ +#define SC_P_FLEXCAN2_RX 150 /*!< DMA.FLEXCAN2.RX, LSIO.GPIO4.IO01 */ +#define SC_P_FLEXCAN2_TX 151 /*!< DMA.FLEXCAN2.TX, LSIO.GPIO4.IO02 */ +#define SC_P_COMP_CTL_GPIO_1V8_3V3_GPIOTHR 152 /*!< */ +#define SC_P_USB_SS3_TC0 153 /*!< DMA.I2C1.SCL, CONN.USB_OTG1.PWR, LSIO.GPIO4.IO03 */ +#define SC_P_USB_SS3_TC1 154 /*!< DMA.I2C1.SCL, CONN.USB_OTG2.PWR, LSIO.GPIO4.IO04 */ +#define SC_P_USB_SS3_TC2 155 /*!< DMA.I2C1.SDA, CONN.USB_OTG1.OC, LSIO.GPIO4.IO05 */ +#define SC_P_USB_SS3_TC3 156 /*!< DMA.I2C1.SDA, CONN.USB_OTG2.OC, LSIO.GPIO4.IO06 */ +#define SC_P_COMP_CTL_GPIO_3V3_USB3IO 157 /*!< */ +#define SC_P_USDHC1_RESET_B 158 /*!< CONN.USDHC1.RESET_B, LSIO.GPIO4.IO07 */ +#define SC_P_USDHC1_VSELECT 159 /*!< CONN.USDHC1.VSELECT, LSIO.GPIO4.IO08 */ +#define SC_P_USDHC2_RESET_B 160 /*!< CONN.USDHC2.RESET_B, LSIO.GPIO4.IO09 */ +#define SC_P_USDHC2_VSELECT 161 /*!< CONN.USDHC2.VSELECT, LSIO.GPIO4.IO10 */ +#define SC_P_USDHC2_WP 162 /*!< CONN.USDHC2.WP, LSIO.GPIO4.IO11 */ +#define SC_P_USDHC2_CD_B 163 /*!< CONN.USDHC2.CD_B, LSIO.GPIO4.IO12 */ +#define SC_P_COMP_CTL_GPIO_1V8_3V3_VSELSEP 164 /*!< */ +#define SC_P_ENET0_MDIO 165 /*!< CONN.ENET0.MDIO, DMA.I2C4.SDA, LSIO.GPIO4.IO13 */ +#define SC_P_ENET0_MDC 166 /*!< CONN.ENET0.MDC, DMA.I2C4.SCL, LSIO.GPIO4.IO14 */ +#define SC_P_ENET0_REFCLK_125M_25M 167 /*!< CONN.ENET0.REFCLK_125M_25M, CONN.ENET0.PPS, LSIO.GPIO4.IO15 */ +#define SC_P_ENET1_REFCLK_125M_25M 168 /*!< CONN.ENET1.REFCLK_125M_25M, CONN.ENET1.PPS, LSIO.GPIO4.IO16 */ +#define SC_P_ENET1_MDIO 169 /*!< CONN.ENET1.MDIO, DMA.I2C4.SDA, LSIO.GPIO4.IO17 */ +#define SC_P_ENET1_MDC 170 /*!< CONN.ENET1.MDC, DMA.I2C4.SCL, LSIO.GPIO4.IO18 */ +#define SC_P_COMP_CTL_GPIO_1V8_3V3_GPIOCT 171 /*!< */ +#define SC_P_QSPI1A_SS0_B 172 /*!< LSIO.QSPI1A.SS0_B, LSIO.GPIO4.IO19 */ +#define SC_P_QSPI1A_SS1_B 173 /*!< LSIO.QSPI1A.SS1_B, LSIO.QSPI1A.SCLK2, LSIO.GPIO4.IO20 */ +#define SC_P_QSPI1A_SCLK 174 /*!< LSIO.QSPI1A.SCLK, LSIO.GPIO4.IO21 */ +#define SC_P_QSPI1A_DQS 175 /*!< LSIO.QSPI1A.DQS, LSIO.GPIO4.IO22 */ +#define SC_P_QSPI1A_DATA3 176 /*!< LSIO.QSPI1A.DATA3, DMA.I2C1.SDA, CONN.USB_OTG1.OC, LSIO.GPIO4.IO23 */ +#define SC_P_QSPI1A_DATA2 177 /*!< LSIO.QSPI1A.DATA2, DMA.I2C1.SCL, CONN.USB_OTG2.PWR, LSIO.GPIO4.IO24 */ +#define SC_P_QSPI1A_DATA1 178 /*!< LSIO.QSPI1A.DATA1, DMA.I2C1.SDA, CONN.USB_OTG2.OC, LSIO.GPIO4.IO25 */ +#define SC_P_QSPI1A_DATA0 179 /*!< LSIO.QSPI1A.DATA0, LSIO.GPIO4.IO26 */ +#define SC_P_COMP_CTL_GPIO_1V8_3V3_QSPI1 180 /*!< */ +#define SC_P_QSPI0A_DATA0 181 /*!< LSIO.QSPI0A.DATA0 */ +#define SC_P_QSPI0A_DATA1 182 /*!< LSIO.QSPI0A.DATA1 */ +#define SC_P_QSPI0A_DATA2 183 /*!< LSIO.QSPI0A.DATA2 */ +#define SC_P_QSPI0A_DATA3 184 /*!< LSIO.QSPI0A.DATA3 */ +#define SC_P_QSPI0A_DQS 185 /*!< LSIO.QSPI0A.DQS */ +#define SC_P_QSPI0A_SS0_B 186 /*!< LSIO.QSPI0A.SS0_B */ +#define SC_P_QSPI0A_SS1_B 187 /*!< LSIO.QSPI0A.SS1_B, LSIO.QSPI0A.SCLK2 */ +#define SC_P_QSPI0A_SCLK 188 /*!< LSIO.QSPI0A.SCLK */ +#define SC_P_QSPI0B_SCLK 189 /*!< LSIO.QSPI0B.SCLK */ +#define SC_P_QSPI0B_DATA0 190 /*!< LSIO.QSPI0B.DATA0 */ +#define SC_P_QSPI0B_DATA1 191 /*!< LSIO.QSPI0B.DATA1 */ +#define SC_P_QSPI0B_DATA2 192 /*!< LSIO.QSPI0B.DATA2 */ +#define SC_P_QSPI0B_DATA3 193 /*!< LSIO.QSPI0B.DATA3 */ +#define SC_P_QSPI0B_DQS 194 /*!< LSIO.QSPI0B.DQS */ +#define SC_P_QSPI0B_SS0_B 195 /*!< LSIO.QSPI0B.SS0_B */ +#define SC_P_QSPI0B_SS1_B 196 /*!< LSIO.QSPI0B.SS1_B, LSIO.QSPI0B.SCLK2 */ +#define SC_P_COMP_CTL_GPIO_1V8_3V3_QSPI0 197 /*!< */ +#define SC_P_PCIE_CTRL0_CLKREQ_B 198 /*!< HSIO.PCIE0.CLKREQ_B, LSIO.GPIO4.IO27 */ +#define SC_P_PCIE_CTRL0_WAKE_B 199 /*!< HSIO.PCIE0.WAKE_B, LSIO.GPIO4.IO28 */ +#define SC_P_PCIE_CTRL0_PERST_B 200 /*!< HSIO.PCIE0.PERST_B, LSIO.GPIO4.IO29 */ +#define SC_P_PCIE_CTRL1_CLKREQ_B 201 /*!< HSIO.PCIE1.CLKREQ_B, DMA.I2C1.SDA, CONN.USB_OTG2.OC, LSIO.GPIO4.IO30 */ +#define SC_P_PCIE_CTRL1_WAKE_B 202 /*!< HSIO.PCIE1.WAKE_B, DMA.I2C1.SCL, CONN.USB_OTG2.PWR, LSIO.GPIO4.IO31 */ +#define SC_P_PCIE_CTRL1_PERST_B 203 /*!< HSIO.PCIE1.PERST_B, DMA.I2C1.SCL, CONN.USB_OTG1.PWR, LSIO.GPIO5.IO00 */ +#define SC_P_COMP_CTL_GPIO_1V8_3V3_PCIESEP 204 /*!< */ +#define SC_P_USB_HSIC0_DATA 205 /*!< CONN.USB_HSIC0.DATA, DMA.I2C1.SDA, LSIO.GPIO5.IO01 */ +#define SC_P_USB_HSIC0_STROBE 206 /*!< CONN.USB_HSIC0.STROBE, DMA.I2C1.SCL, LSIO.GPIO5.IO02 */ +#define SC_P_CALIBRATION_0_HSIC 207 /*!< */ +#define SC_P_CALIBRATION_1_HSIC 208 /*!< */ +#define SC_P_EMMC0_CLK 209 /*!< CONN.EMMC0.CLK, CONN.NAND.READY_B */ +#define SC_P_EMMC0_CMD 210 /*!< CONN.EMMC0.CMD, CONN.NAND.DQS, AUD.MQS.R, LSIO.GPIO5.IO03 */ +#define SC_P_EMMC0_DATA0 211 /*!< CONN.EMMC0.DATA0, CONN.NAND.DATA00, LSIO.GPIO5.IO04 */ +#define SC_P_EMMC0_DATA1 212 /*!< CONN.EMMC0.DATA1, CONN.NAND.DATA01, LSIO.GPIO5.IO05 */ +#define SC_P_EMMC0_DATA2 213 /*!< CONN.EMMC0.DATA2, CONN.NAND.DATA02, LSIO.GPIO5.IO06 */ +#define SC_P_EMMC0_DATA3 214 /*!< CONN.EMMC0.DATA3, CONN.NAND.DATA03, LSIO.GPIO5.IO07 */ +#define SC_P_EMMC0_DATA4 215 /*!< CONN.EMMC0.DATA4, CONN.NAND.DATA04, LSIO.GPIO5.IO08 */ +#define SC_P_EMMC0_DATA5 216 /*!< CONN.EMMC0.DATA5, CONN.NAND.DATA05, LSIO.GPIO5.IO09 */ +#define SC_P_EMMC0_DATA6 217 /*!< CONN.EMMC0.DATA6, CONN.NAND.DATA06, LSIO.GPIO5.IO10 */ +#define SC_P_EMMC0_DATA7 218 /*!< CONN.EMMC0.DATA7, CONN.NAND.DATA07, LSIO.GPIO5.IO11 */ +#define SC_P_EMMC0_STROBE 219 /*!< CONN.EMMC0.STROBE, CONN.NAND.CLE, LSIO.GPIO5.IO12 */ +#define SC_P_EMMC0_RESET_B 220 /*!< CONN.EMMC0.RESET_B, CONN.NAND.WP_B, CONN.USDHC1.VSELECT, LSIO.GPIO5.IO13 */ +#define SC_P_COMP_CTL_GPIO_1V8_3V3_SD1FIX 221 /*!< */ +#define SC_P_USDHC1_CLK 222 /*!< CONN.USDHC1.CLK, AUD.MQS.R */ +#define SC_P_USDHC1_CMD 223 /*!< CONN.USDHC1.CMD, AUD.MQS.L, LSIO.GPIO5.IO14 */ +#define SC_P_USDHC1_DATA0 224 /*!< CONN.USDHC1.DATA0, CONN.NAND.RE_N, LSIO.GPIO5.IO15 */ +#define SC_P_USDHC1_DATA1 225 /*!< CONN.USDHC1.DATA1, CONN.NAND.RE_P, LSIO.GPIO5.IO16 */ +#define SC_P_CTL_NAND_RE_P_N 226 /*!< */ +#define SC_P_USDHC1_DATA2 227 /*!< CONN.USDHC1.DATA2, CONN.NAND.DQS_N, LSIO.GPIO5.IO17 */ +#define SC_P_USDHC1_DATA3 228 /*!< CONN.USDHC1.DATA3, CONN.NAND.DQS_P, LSIO.GPIO5.IO18 */ +#define SC_P_CTL_NAND_DQS_P_N 229 /*!< */ +#define SC_P_USDHC1_DATA4 230 /*!< CONN.USDHC1.DATA4, CONN.NAND.CE0_B, AUD.MQS.R, LSIO.GPIO5.IO19 */ +#define SC_P_USDHC1_DATA5 231 /*!< CONN.USDHC1.DATA5, CONN.NAND.RE_B, AUD.MQS.L, LSIO.GPIO5.IO20 */ +#define SC_P_USDHC1_DATA6 232 /*!< CONN.USDHC1.DATA6, CONN.NAND.WE_B, CONN.USDHC1.WP, LSIO.GPIO5.IO21 */ +#define SC_P_USDHC1_DATA7 233 /*!< CONN.USDHC1.DATA7, CONN.NAND.ALE, CONN.USDHC1.CD_B, LSIO.GPIO5.IO22 */ +#define SC_P_USDHC1_STROBE 234 /*!< CONN.USDHC1.STROBE, CONN.NAND.CE1_B, CONN.USDHC1.RESET_B, LSIO.GPIO5.IO23 */ +#define SC_P_COMP_CTL_GPIO_1V8_3V3_VSEL2 235 /*!< */ +#define SC_P_USDHC2_CLK 236 /*!< CONN.USDHC2.CLK, AUD.MQS.R, LSIO.GPIO5.IO24 */ +#define SC_P_USDHC2_CMD 237 /*!< CONN.USDHC2.CMD, AUD.MQS.L, LSIO.GPIO5.IO25 */ +#define SC_P_USDHC2_DATA0 238 /*!< CONN.USDHC2.DATA0, DMA.UART4.RX, LSIO.GPIO5.IO26 */ +#define SC_P_USDHC2_DATA1 239 /*!< CONN.USDHC2.DATA1, DMA.UART4.TX, LSIO.GPIO5.IO27 */ +#define SC_P_USDHC2_DATA2 240 /*!< CONN.USDHC2.DATA2, DMA.UART4.CTS_B, LSIO.GPIO5.IO28 */ +#define SC_P_USDHC2_DATA3 241 /*!< CONN.USDHC2.DATA3, DMA.UART4.RTS_B, LSIO.GPIO5.IO29 */ +#define SC_P_COMP_CTL_GPIO_1V8_3V3_VSEL3 242 /*!< */ +#define SC_P_ENET0_RGMII_TXC 243 /*!< CONN.ENET0.RGMII_TXC, CONN.ENET0.RCLK50M_OUT, CONN.ENET0.RCLK50M_IN, LSIO.GPIO5.IO30 */ +#define SC_P_ENET0_RGMII_TX_CTL 244 /*!< CONN.ENET0.RGMII_TX_CTL, LSIO.GPIO5.IO31 */ +#define SC_P_ENET0_RGMII_TXD0 245 /*!< CONN.ENET0.RGMII_TXD0, LSIO.GPIO6.IO00 */ +#define SC_P_ENET0_RGMII_TXD1 246 /*!< CONN.ENET0.RGMII_TXD1, LSIO.GPIO6.IO01 */ +#define SC_P_ENET0_RGMII_TXD2 247 /*!< CONN.ENET0.RGMII_TXD2, DMA.UART3.TX, VPU.TSI_S1.VID, LSIO.GPIO6.IO02 */ +#define SC_P_ENET0_RGMII_TXD3 248 /*!< CONN.ENET0.RGMII_TXD3, DMA.UART3.RTS_B, VPU.TSI_S1.SYNC, LSIO.GPIO6.IO03 */ +#define SC_P_ENET0_RGMII_RXC 249 /*!< CONN.ENET0.RGMII_RXC, DMA.UART3.CTS_B, VPU.TSI_S1.DATA, LSIO.GPIO6.IO04 */ +#define SC_P_ENET0_RGMII_RX_CTL 250 /*!< CONN.ENET0.RGMII_RX_CTL, VPU.TSI_S0.VID, LSIO.GPIO6.IO05 */ +#define SC_P_ENET0_RGMII_RXD0 251 /*!< CONN.ENET0.RGMII_RXD0, VPU.TSI_S0.SYNC, LSIO.GPIO6.IO06 */ +#define SC_P_ENET0_RGMII_RXD1 252 /*!< CONN.ENET0.RGMII_RXD1, VPU.TSI_S0.DATA, LSIO.GPIO6.IO07 */ +#define SC_P_ENET0_RGMII_RXD2 253 /*!< CONN.ENET0.RGMII_RXD2, CONN.ENET0.RMII_RX_ER, VPU.TSI_S0.CLK, LSIO.GPIO6.IO08 */ +#define SC_P_ENET0_RGMII_RXD3 254 /*!< CONN.ENET0.RGMII_RXD3, DMA.UART3.RX, VPU.TSI_S1.CLK, LSIO.GPIO6.IO09 */ +#define SC_P_COMP_CTL_GPIO_1V8_3V3_ENET_ENETB 255 /*!< */ +#define SC_P_ENET1_RGMII_TXC 256 /*!< CONN.ENET1.RGMII_TXC, CONN.ENET1.RCLK50M_OUT, CONN.ENET1.RCLK50M_IN, LSIO.GPIO6.IO10 */ +#define SC_P_ENET1_RGMII_TX_CTL 257 /*!< CONN.ENET1.RGMII_TX_CTL, LSIO.GPIO6.IO11 */ +#define SC_P_ENET1_RGMII_TXD0 258 /*!< CONN.ENET1.RGMII_TXD0, LSIO.GPIO6.IO12 */ +#define SC_P_ENET1_RGMII_TXD1 259 /*!< CONN.ENET1.RGMII_TXD1, LSIO.GPIO6.IO13 */ +#define SC_P_ENET1_RGMII_TXD2 260 /*!< CONN.ENET1.RGMII_TXD2, DMA.UART3.TX, VPU.TSI_S1.VID, LSIO.GPIO6.IO14 */ +#define SC_P_ENET1_RGMII_TXD3 261 /*!< CONN.ENET1.RGMII_TXD3, DMA.UART3.RTS_B, VPU.TSI_S1.SYNC, LSIO.GPIO6.IO15 */ +#define SC_P_ENET1_RGMII_RXC 262 /*!< CONN.ENET1.RGMII_RXC, DMA.UART3.CTS_B, VPU.TSI_S1.DATA, LSIO.GPIO6.IO16 */ +#define SC_P_ENET1_RGMII_RX_CTL 263 /*!< CONN.ENET1.RGMII_RX_CTL, VPU.TSI_S0.VID, LSIO.GPIO6.IO17 */ +#define SC_P_ENET1_RGMII_RXD0 264 /*!< CONN.ENET1.RGMII_RXD0, VPU.TSI_S0.SYNC, LSIO.GPIO6.IO18 */ +#define SC_P_ENET1_RGMII_RXD1 265 /*!< CONN.ENET1.RGMII_RXD1, VPU.TSI_S0.DATA, LSIO.GPIO6.IO19 */ +#define SC_P_ENET1_RGMII_RXD2 266 /*!< CONN.ENET1.RGMII_RXD2, CONN.ENET1.RMII_RX_ER, VPU.TSI_S0.CLK, LSIO.GPIO6.IO20 */ +#define SC_P_ENET1_RGMII_RXD3 267 /*!< CONN.ENET1.RGMII_RXD3, DMA.UART3.RX, VPU.TSI_S1.CLK, LSIO.GPIO6.IO21 */ +#define SC_P_COMP_CTL_GPIO_1V8_3V3_ENET_ENETA 268 /*!< */ +/*@}*/ + +/*! + * @name Pad Mux Definitions + * format: name padid padmux + */ +/*@{*/ +#define SC_P_SIM0_CLK_DMA_SIM0_CLK SC_P_SIM0_CLK 0 +#define SC_P_SIM0_CLK_LSIO_GPIO0_IO00 SC_P_SIM0_CLK 3 +#define SC_P_SIM0_RST_DMA_SIM0_RST SC_P_SIM0_RST 0 +#define SC_P_SIM0_RST_LSIO_GPIO0_IO01 SC_P_SIM0_RST 3 +#define SC_P_SIM0_IO_DMA_SIM0_IO SC_P_SIM0_IO 0 +#define SC_P_SIM0_IO_LSIO_GPIO0_IO02 SC_P_SIM0_IO 3 +#define SC_P_SIM0_PD_DMA_SIM0_PD SC_P_SIM0_PD 0 +#define SC_P_SIM0_PD_DMA_I2C3_SCL SC_P_SIM0_PD 1 +#define SC_P_SIM0_PD_LSIO_GPIO0_IO03 SC_P_SIM0_PD 3 +#define SC_P_SIM0_POWER_EN_DMA_SIM0_POWER_EN SC_P_SIM0_POWER_EN 0 +#define SC_P_SIM0_POWER_EN_DMA_I2C3_SDA SC_P_SIM0_POWER_EN 1 +#define SC_P_SIM0_POWER_EN_LSIO_GPIO0_IO04 SC_P_SIM0_POWER_EN 3 +#define SC_P_SIM0_GPIO0_00_DMA_SIM0_POWER_EN SC_P_SIM0_GPIO0_00 0 +#define SC_P_SIM0_GPIO0_00_LSIO_GPIO0_IO05 SC_P_SIM0_GPIO0_00 3 +#define SC_P_M40_I2C0_SCL_M40_I2C0_SCL SC_P_M40_I2C0_SCL 0 +#define SC_P_M40_I2C0_SCL_M40_UART0_RX SC_P_M40_I2C0_SCL 1 +#define SC_P_M40_I2C0_SCL_M40_GPIO0_IO02 SC_P_M40_I2C0_SCL 2 +#define SC_P_M40_I2C0_SCL_LSIO_GPIO0_IO06 SC_P_M40_I2C0_SCL 3 +#define SC_P_M40_I2C0_SDA_M40_I2C0_SDA SC_P_M40_I2C0_SDA 0 +#define SC_P_M40_I2C0_SDA_M40_UART0_TX SC_P_M40_I2C0_SDA 1 +#define SC_P_M40_I2C0_SDA_M40_GPIO0_IO03 SC_P_M40_I2C0_SDA 2 +#define SC_P_M40_I2C0_SDA_LSIO_GPIO0_IO07 SC_P_M40_I2C0_SDA 3 +#define SC_P_M40_GPIO0_00_M40_GPIO0_IO00 SC_P_M40_GPIO0_00 0 +#define SC_P_M40_GPIO0_00_M40_TPM0_CH0 SC_P_M40_GPIO0_00 1 +#define SC_P_M40_GPIO0_00_DMA_UART4_RX SC_P_M40_GPIO0_00 2 +#define SC_P_M40_GPIO0_00_LSIO_GPIO0_IO08 SC_P_M40_GPIO0_00 3 +#define SC_P_M40_GPIO0_01_M40_GPIO0_IO01 SC_P_M40_GPIO0_01 0 +#define SC_P_M40_GPIO0_01_M40_TPM0_CH1 SC_P_M40_GPIO0_01 1 +#define SC_P_M40_GPIO0_01_DMA_UART4_TX SC_P_M40_GPIO0_01 2 +#define SC_P_M40_GPIO0_01_LSIO_GPIO0_IO09 SC_P_M40_GPIO0_01 3 +#define SC_P_M41_I2C0_SCL_M41_I2C0_SCL SC_P_M41_I2C0_SCL 0 +#define SC_P_M41_I2C0_SCL_M41_UART0_RX SC_P_M41_I2C0_SCL 1 +#define SC_P_M41_I2C0_SCL_M41_GPIO0_IO02 SC_P_M41_I2C0_SCL 2 +#define SC_P_M41_I2C0_SCL_LSIO_GPIO0_IO10 SC_P_M41_I2C0_SCL 3 +#define SC_P_M41_I2C0_SDA_M41_I2C0_SDA SC_P_M41_I2C0_SDA 0 +#define SC_P_M41_I2C0_SDA_M41_UART0_TX SC_P_M41_I2C0_SDA 1 +#define SC_P_M41_I2C0_SDA_M41_GPIO0_IO03 SC_P_M41_I2C0_SDA 2 +#define SC_P_M41_I2C0_SDA_LSIO_GPIO0_IO11 SC_P_M41_I2C0_SDA 3 +#define SC_P_M41_GPIO0_00_M41_GPIO0_IO00 SC_P_M41_GPIO0_00 0 +#define SC_P_M41_GPIO0_00_M41_TPM0_CH0 SC_P_M41_GPIO0_00 1 +#define SC_P_M41_GPIO0_00_DMA_UART3_RX SC_P_M41_GPIO0_00 2 +#define SC_P_M41_GPIO0_00_LSIO_GPIO0_IO12 SC_P_M41_GPIO0_00 3 +#define SC_P_M41_GPIO0_01_M41_GPIO0_IO01 SC_P_M41_GPIO0_01 0 +#define SC_P_M41_GPIO0_01_M41_TPM0_CH1 SC_P_M41_GPIO0_01 1 +#define SC_P_M41_GPIO0_01_DMA_UART3_TX SC_P_M41_GPIO0_01 2 +#define SC_P_M41_GPIO0_01_LSIO_GPIO0_IO13 SC_P_M41_GPIO0_01 3 +#define SC_P_GPT0_CLK_LSIO_GPT0_CLK SC_P_GPT0_CLK 0 +#define SC_P_GPT0_CLK_DMA_I2C1_SCL SC_P_GPT0_CLK 1 +#define SC_P_GPT0_CLK_LSIO_KPP0_COL4 SC_P_GPT0_CLK 2 +#define SC_P_GPT0_CLK_LSIO_GPIO0_IO14 SC_P_GPT0_CLK 3 +#define SC_P_GPT0_CAPTURE_LSIO_GPT0_CAPTURE SC_P_GPT0_CAPTURE 0 +#define SC_P_GPT0_CAPTURE_DMA_I2C1_SDA SC_P_GPT0_CAPTURE 1 +#define SC_P_GPT0_CAPTURE_LSIO_KPP0_COL5 SC_P_GPT0_CAPTURE 2 +#define SC_P_GPT0_CAPTURE_LSIO_GPIO0_IO15 SC_P_GPT0_CAPTURE 3 +#define SC_P_GPT0_COMPARE_LSIO_GPT0_COMPARE SC_P_GPT0_COMPARE 0 +#define SC_P_GPT0_COMPARE_LSIO_PWM3_OUT SC_P_GPT0_COMPARE 1 +#define SC_P_GPT0_COMPARE_LSIO_KPP0_COL6 SC_P_GPT0_COMPARE 2 +#define SC_P_GPT0_COMPARE_LSIO_GPIO0_IO16 SC_P_GPT0_COMPARE 3 +#define SC_P_GPT1_CLK_LSIO_GPT1_CLK SC_P_GPT1_CLK 0 +#define SC_P_GPT1_CLK_DMA_I2C2_SCL SC_P_GPT1_CLK 1 +#define SC_P_GPT1_CLK_LSIO_KPP0_COL7 SC_P_GPT1_CLK 2 +#define SC_P_GPT1_CLK_LSIO_GPIO0_IO17 SC_P_GPT1_CLK 3 +#define SC_P_GPT1_CAPTURE_LSIO_GPT1_CAPTURE SC_P_GPT1_CAPTURE 0 +#define SC_P_GPT1_CAPTURE_DMA_I2C2_SDA SC_P_GPT1_CAPTURE 1 +#define SC_P_GPT1_CAPTURE_LSIO_KPP0_ROW4 SC_P_GPT1_CAPTURE 2 +#define SC_P_GPT1_CAPTURE_LSIO_GPIO0_IO18 SC_P_GPT1_CAPTURE 3 +#define SC_P_GPT1_COMPARE_LSIO_GPT1_COMPARE SC_P_GPT1_COMPARE 0 +#define SC_P_GPT1_COMPARE_LSIO_PWM2_OUT SC_P_GPT1_COMPARE 1 +#define SC_P_GPT1_COMPARE_LSIO_KPP0_ROW5 SC_P_GPT1_COMPARE 2 +#define SC_P_GPT1_COMPARE_LSIO_GPIO0_IO19 SC_P_GPT1_COMPARE 3 +#define SC_P_UART0_RX_DMA_UART0_RX SC_P_UART0_RX 0 +#define SC_P_UART0_RX_SCU_UART0_RX SC_P_UART0_RX 1 +#define SC_P_UART0_RX_LSIO_GPIO0_IO20 SC_P_UART0_RX 3 +#define SC_P_UART0_TX_DMA_UART0_TX SC_P_UART0_TX 0 +#define SC_P_UART0_TX_SCU_UART0_TX SC_P_UART0_TX 1 +#define SC_P_UART0_TX_LSIO_GPIO0_IO21 SC_P_UART0_TX 3 +#define SC_P_UART0_RTS_B_DMA_UART0_RTS_B SC_P_UART0_RTS_B 0 +#define SC_P_UART0_RTS_B_LSIO_PWM0_OUT SC_P_UART0_RTS_B 1 +#define SC_P_UART0_RTS_B_DMA_UART2_RX SC_P_UART0_RTS_B 2 +#define SC_P_UART0_RTS_B_LSIO_GPIO0_IO22 SC_P_UART0_RTS_B 3 +#define SC_P_UART0_CTS_B_DMA_UART0_CTS_B SC_P_UART0_CTS_B 0 +#define SC_P_UART0_CTS_B_LSIO_PWM1_OUT SC_P_UART0_CTS_B 1 +#define SC_P_UART0_CTS_B_DMA_UART2_TX SC_P_UART0_CTS_B 2 +#define SC_P_UART0_CTS_B_LSIO_GPIO0_IO23 SC_P_UART0_CTS_B 3 +#define SC_P_UART1_TX_DMA_UART1_TX SC_P_UART1_TX 0 +#define SC_P_UART1_TX_DMA_SPI3_SCK SC_P_UART1_TX 1 +#define SC_P_UART1_TX_LSIO_GPIO0_IO24 SC_P_UART1_TX 3 +#define SC_P_UART1_RX_DMA_UART1_RX SC_P_UART1_RX 0 +#define SC_P_UART1_RX_DMA_SPI3_SDO SC_P_UART1_RX 1 +#define SC_P_UART1_RX_LSIO_GPIO0_IO25 SC_P_UART1_RX 3 +#define SC_P_UART1_RTS_B_DMA_UART1_RTS_B SC_P_UART1_RTS_B 0 +#define SC_P_UART1_RTS_B_DMA_SPI3_SDI SC_P_UART1_RTS_B 1 +#define SC_P_UART1_RTS_B_DMA_UART1_CTS_B SC_P_UART1_RTS_B 2 +#define SC_P_UART1_RTS_B_LSIO_GPIO0_IO26 SC_P_UART1_RTS_B 3 +#define SC_P_UART1_CTS_B_DMA_UART1_CTS_B SC_P_UART1_CTS_B 0 +#define SC_P_UART1_CTS_B_DMA_SPI3_CS0 SC_P_UART1_CTS_B 1 +#define SC_P_UART1_CTS_B_DMA_UART1_RTS_B SC_P_UART1_CTS_B 2 +#define SC_P_UART1_CTS_B_LSIO_GPIO0_IO27 SC_P_UART1_CTS_B 3 +#define SC_P_SCU_PMIC_MEMC_ON_SCU_GPIO0_IOXX_PMIC_MEMC_ON SC_P_SCU_PMIC_MEMC_ON 0 +#define SC_P_SCU_WDOG_OUT_SCU_WDOG0_WDOG_OUT SC_P_SCU_WDOG_OUT 0 +#define SC_P_PMIC_I2C_SDA_SCU_PMIC_I2C_SDA SC_P_PMIC_I2C_SDA 0 +#define SC_P_PMIC_I2C_SCL_SCU_PMIC_I2C_SCL SC_P_PMIC_I2C_SCL 0 +#define SC_P_PMIC_EARLY_WARNING_SCU_PMIC_EARLY_WARNING SC_P_PMIC_EARLY_WARNING 0 +#define SC_P_PMIC_INT_B_SCU_DSC_PMIC_INT_B SC_P_PMIC_INT_B 0 +#define SC_P_SCU_GPIO0_00_SCU_GPIO0_IO00 SC_P_SCU_GPIO0_00 0 +#define SC_P_SCU_GPIO0_00_SCU_UART0_RX SC_P_SCU_GPIO0_00 1 +#define SC_P_SCU_GPIO0_00_LSIO_GPIO0_IO28 SC_P_SCU_GPIO0_00 3 +#define SC_P_SCU_GPIO0_01_SCU_GPIO0_IO01 SC_P_SCU_GPIO0_01 0 +#define SC_P_SCU_GPIO0_01_SCU_UART0_TX SC_P_SCU_GPIO0_01 1 +#define SC_P_SCU_GPIO0_01_LSIO_GPIO0_IO29 SC_P_SCU_GPIO0_01 3 +#define SC_P_SCU_GPIO0_02_SCU_GPIO0_IO02 SC_P_SCU_GPIO0_02 0 +#define SC_P_SCU_GPIO0_02_SCU_GPIO0_IOXX_PMIC_GPU0_ON SC_P_SCU_GPIO0_02 1 +#define SC_P_SCU_GPIO0_02_LSIO_GPIO0_IO30 SC_P_SCU_GPIO0_02 3 +#define SC_P_SCU_GPIO0_03_SCU_GPIO0_IO03 SC_P_SCU_GPIO0_03 0 +#define SC_P_SCU_GPIO0_03_SCU_GPIO0_IOXX_PMIC_GPU1_ON SC_P_SCU_GPIO0_03 1 +#define SC_P_SCU_GPIO0_03_LSIO_GPIO0_IO31 SC_P_SCU_GPIO0_03 3 +#define SC_P_SCU_GPIO0_04_SCU_GPIO0_IO04 SC_P_SCU_GPIO0_04 0 +#define SC_P_SCU_GPIO0_04_SCU_GPIO0_IOXX_PMIC_A72_ON SC_P_SCU_GPIO0_04 1 +#define SC_P_SCU_GPIO0_04_LSIO_GPIO1_IO00 SC_P_SCU_GPIO0_04 3 +#define SC_P_SCU_GPIO0_05_SCU_GPIO0_IO05 SC_P_SCU_GPIO0_05 0 +#define SC_P_SCU_GPIO0_05_SCU_GPIO0_IOXX_PMIC_A53_ON SC_P_SCU_GPIO0_05 1 +#define SC_P_SCU_GPIO0_05_LSIO_GPIO1_IO01 SC_P_SCU_GPIO0_05 3 +#define SC_P_SCU_GPIO0_06_SCU_GPIO0_IO06 SC_P_SCU_GPIO0_06 0 +#define SC_P_SCU_GPIO0_06_SCU_TPM0_CH0 SC_P_SCU_GPIO0_06 1 +#define SC_P_SCU_GPIO0_06_LSIO_GPIO1_IO02 SC_P_SCU_GPIO0_06 3 +#define SC_P_SCU_GPIO0_07_SCU_GPIO0_IO07 SC_P_SCU_GPIO0_07 0 +#define SC_P_SCU_GPIO0_07_SCU_TPM0_CH1 SC_P_SCU_GPIO0_07 1 +#define SC_P_SCU_GPIO0_07_SCU_DSC_RTC_CLOCK_OUTPUT_32K SC_P_SCU_GPIO0_07 2 +#define SC_P_SCU_GPIO0_07_LSIO_GPIO1_IO03 SC_P_SCU_GPIO0_07 3 +#define SC_P_SCU_BOOT_MODE0_SCU_DSC_BOOT_MODE0 SC_P_SCU_BOOT_MODE0 0 +#define SC_P_SCU_BOOT_MODE1_SCU_DSC_BOOT_MODE1 SC_P_SCU_BOOT_MODE1 0 +#define SC_P_SCU_BOOT_MODE2_SCU_DSC_BOOT_MODE2 SC_P_SCU_BOOT_MODE2 0 +#define SC_P_SCU_BOOT_MODE3_SCU_DSC_BOOT_MODE3 SC_P_SCU_BOOT_MODE3 0 +#define SC_P_SCU_BOOT_MODE4_SCU_DSC_BOOT_MODE4 SC_P_SCU_BOOT_MODE4 0 +#define SC_P_SCU_BOOT_MODE4_SCU_PMIC_I2C_SCL SC_P_SCU_BOOT_MODE4 1 +#define SC_P_SCU_BOOT_MODE5_SCU_DSC_BOOT_MODE5 SC_P_SCU_BOOT_MODE5 0 +#define SC_P_SCU_BOOT_MODE5_SCU_PMIC_I2C_SDA SC_P_SCU_BOOT_MODE5 1 +#define SC_P_LVDS0_GPIO00_LVDS0_GPIO0_IO00 SC_P_LVDS0_GPIO00 0 +#define SC_P_LVDS0_GPIO00_LVDS0_PWM0_OUT SC_P_LVDS0_GPIO00 1 +#define SC_P_LVDS0_GPIO00_LSIO_GPIO1_IO04 SC_P_LVDS0_GPIO00 3 +#define SC_P_LVDS0_GPIO01_LVDS0_GPIO0_IO01 SC_P_LVDS0_GPIO01 0 +#define SC_P_LVDS0_GPIO01_LSIO_GPIO1_IO05 SC_P_LVDS0_GPIO01 3 +#define SC_P_LVDS0_I2C0_SCL_LVDS0_I2C0_SCL SC_P_LVDS0_I2C0_SCL 0 +#define SC_P_LVDS0_I2C0_SCL_LVDS0_GPIO0_IO02 SC_P_LVDS0_I2C0_SCL 1 +#define SC_P_LVDS0_I2C0_SCL_LSIO_GPIO1_IO06 SC_P_LVDS0_I2C0_SCL 3 +#define SC_P_LVDS0_I2C0_SDA_LVDS0_I2C0_SDA SC_P_LVDS0_I2C0_SDA 0 +#define SC_P_LVDS0_I2C0_SDA_LVDS0_GPIO0_IO03 SC_P_LVDS0_I2C0_SDA 1 +#define SC_P_LVDS0_I2C0_SDA_LSIO_GPIO1_IO07 SC_P_LVDS0_I2C0_SDA 3 +#define SC_P_LVDS0_I2C1_SCL_LVDS0_I2C1_SCL SC_P_LVDS0_I2C1_SCL 0 +#define SC_P_LVDS0_I2C1_SCL_DMA_UART2_TX SC_P_LVDS0_I2C1_SCL 1 +#define SC_P_LVDS0_I2C1_SCL_LSIO_GPIO1_IO08 SC_P_LVDS0_I2C1_SCL 3 +#define SC_P_LVDS0_I2C1_SDA_LVDS0_I2C1_SDA SC_P_LVDS0_I2C1_SDA 0 +#define SC_P_LVDS0_I2C1_SDA_DMA_UART2_RX SC_P_LVDS0_I2C1_SDA 1 +#define SC_P_LVDS0_I2C1_SDA_LSIO_GPIO1_IO09 SC_P_LVDS0_I2C1_SDA 3 +#define SC_P_LVDS1_GPIO00_LVDS1_GPIO0_IO00 SC_P_LVDS1_GPIO00 0 +#define SC_P_LVDS1_GPIO00_LVDS1_PWM0_OUT SC_P_LVDS1_GPIO00 1 +#define SC_P_LVDS1_GPIO00_LSIO_GPIO1_IO10 SC_P_LVDS1_GPIO00 3 +#define SC_P_LVDS1_GPIO01_LVDS1_GPIO0_IO01 SC_P_LVDS1_GPIO01 0 +#define SC_P_LVDS1_GPIO01_LSIO_GPIO1_IO11 SC_P_LVDS1_GPIO01 3 +#define SC_P_LVDS1_I2C0_SCL_LVDS1_I2C0_SCL SC_P_LVDS1_I2C0_SCL 0 +#define SC_P_LVDS1_I2C0_SCL_LVDS1_GPIO0_IO02 SC_P_LVDS1_I2C0_SCL 1 +#define SC_P_LVDS1_I2C0_SCL_LSIO_GPIO1_IO12 SC_P_LVDS1_I2C0_SCL 3 +#define SC_P_LVDS1_I2C0_SDA_LVDS1_I2C0_SDA SC_P_LVDS1_I2C0_SDA 0 +#define SC_P_LVDS1_I2C0_SDA_LVDS1_GPIO0_IO03 SC_P_LVDS1_I2C0_SDA 1 +#define SC_P_LVDS1_I2C0_SDA_LSIO_GPIO1_IO13 SC_P_LVDS1_I2C0_SDA 3 +#define SC_P_LVDS1_I2C1_SCL_LVDS1_I2C1_SCL SC_P_LVDS1_I2C1_SCL 0 +#define SC_P_LVDS1_I2C1_SCL_DMA_UART3_TX SC_P_LVDS1_I2C1_SCL 1 +#define SC_P_LVDS1_I2C1_SCL_LSIO_GPIO1_IO14 SC_P_LVDS1_I2C1_SCL 3 +#define SC_P_LVDS1_I2C1_SDA_LVDS1_I2C1_SDA SC_P_LVDS1_I2C1_SDA 0 +#define SC_P_LVDS1_I2C1_SDA_DMA_UART3_RX SC_P_LVDS1_I2C1_SDA 1 +#define SC_P_LVDS1_I2C1_SDA_LSIO_GPIO1_IO15 SC_P_LVDS1_I2C1_SDA 3 +#define SC_P_MIPI_DSI0_I2C0_SCL_MIPI_DSI0_I2C0_SCL SC_P_MIPI_DSI0_I2C0_SCL 0 +#define SC_P_MIPI_DSI0_I2C0_SCL_LSIO_GPIO1_IO16 SC_P_MIPI_DSI0_I2C0_SCL 3 +#define SC_P_MIPI_DSI0_I2C0_SDA_MIPI_DSI0_I2C0_SDA SC_P_MIPI_DSI0_I2C0_SDA 0 +#define SC_P_MIPI_DSI0_I2C0_SDA_LSIO_GPIO1_IO17 SC_P_MIPI_DSI0_I2C0_SDA 3 +#define SC_P_MIPI_DSI0_GPIO0_00_MIPI_DSI0_GPIO0_IO00 SC_P_MIPI_DSI0_GPIO0_00 0 +#define SC_P_MIPI_DSI0_GPIO0_00_MIPI_DSI0_PWM0_OUT SC_P_MIPI_DSI0_GPIO0_00 1 +#define SC_P_MIPI_DSI0_GPIO0_00_LSIO_GPIO1_IO18 SC_P_MIPI_DSI0_GPIO0_00 3 +#define SC_P_MIPI_DSI0_GPIO0_01_MIPI_DSI0_GPIO0_IO01 SC_P_MIPI_DSI0_GPIO0_01 0 +#define SC_P_MIPI_DSI0_GPIO0_01_LSIO_GPIO1_IO19 SC_P_MIPI_DSI0_GPIO0_01 3 +#define SC_P_MIPI_DSI1_I2C0_SCL_MIPI_DSI1_I2C0_SCL SC_P_MIPI_DSI1_I2C0_SCL 0 +#define SC_P_MIPI_DSI1_I2C0_SCL_LSIO_GPIO1_IO20 SC_P_MIPI_DSI1_I2C0_SCL 3 +#define SC_P_MIPI_DSI1_I2C0_SDA_MIPI_DSI1_I2C0_SDA SC_P_MIPI_DSI1_I2C0_SDA 0 +#define SC_P_MIPI_DSI1_I2C0_SDA_LSIO_GPIO1_IO21 SC_P_MIPI_DSI1_I2C0_SDA 3 +#define SC_P_MIPI_DSI1_GPIO0_00_MIPI_DSI1_GPIO0_IO00 SC_P_MIPI_DSI1_GPIO0_00 0 +#define SC_P_MIPI_DSI1_GPIO0_00_MIPI_DSI1_PWM0_OUT SC_P_MIPI_DSI1_GPIO0_00 1 +#define SC_P_MIPI_DSI1_GPIO0_00_LSIO_GPIO1_IO22 SC_P_MIPI_DSI1_GPIO0_00 3 +#define SC_P_MIPI_DSI1_GPIO0_01_MIPI_DSI1_GPIO0_IO01 SC_P_MIPI_DSI1_GPIO0_01 0 +#define SC_P_MIPI_DSI1_GPIO0_01_LSIO_GPIO1_IO23 SC_P_MIPI_DSI1_GPIO0_01 3 +#define SC_P_MIPI_CSI0_MCLK_OUT_MIPI_CSI0_ACM_MCLK_OUT SC_P_MIPI_CSI0_MCLK_OUT 0 +#define SC_P_MIPI_CSI0_MCLK_OUT_LSIO_GPIO1_IO24 SC_P_MIPI_CSI0_MCLK_OUT 3 +#define SC_P_MIPI_CSI0_I2C0_SCL_MIPI_CSI0_I2C0_SCL SC_P_MIPI_CSI0_I2C0_SCL 0 +#define SC_P_MIPI_CSI0_I2C0_SCL_LSIO_GPIO1_IO25 SC_P_MIPI_CSI0_I2C0_SCL 3 +#define SC_P_MIPI_CSI0_I2C0_SDA_MIPI_CSI0_I2C0_SDA SC_P_MIPI_CSI0_I2C0_SDA 0 +#define SC_P_MIPI_CSI0_I2C0_SDA_LSIO_GPIO1_IO26 SC_P_MIPI_CSI0_I2C0_SDA 3 +#define SC_P_MIPI_CSI0_GPIO0_00_MIPI_CSI0_GPIO0_IO00 SC_P_MIPI_CSI0_GPIO0_00 0 +#define SC_P_MIPI_CSI0_GPIO0_00_DMA_I2C0_SCL SC_P_MIPI_CSI0_GPIO0_00 1 +#define SC_P_MIPI_CSI0_GPIO0_00_MIPI_CSI1_I2C0_SCL SC_P_MIPI_CSI0_GPIO0_00 2 +#define SC_P_MIPI_CSI0_GPIO0_00_LSIO_GPIO1_IO27 SC_P_MIPI_CSI0_GPIO0_00 3 +#define SC_P_MIPI_CSI0_GPIO0_01_MIPI_CSI0_GPIO0_IO01 SC_P_MIPI_CSI0_GPIO0_01 0 +#define SC_P_MIPI_CSI0_GPIO0_01_DMA_I2C0_SDA SC_P_MIPI_CSI0_GPIO0_01 1 +#define SC_P_MIPI_CSI0_GPIO0_01_MIPI_CSI1_I2C0_SDA SC_P_MIPI_CSI0_GPIO0_01 2 +#define SC_P_MIPI_CSI0_GPIO0_01_LSIO_GPIO1_IO28 SC_P_MIPI_CSI0_GPIO0_01 3 +#define SC_P_MIPI_CSI1_MCLK_OUT_MIPI_CSI1_ACM_MCLK_OUT SC_P_MIPI_CSI1_MCLK_OUT 0 +#define SC_P_MIPI_CSI1_MCLK_OUT_LSIO_GPIO1_IO29 SC_P_MIPI_CSI1_MCLK_OUT 3 +#define SC_P_MIPI_CSI1_GPIO0_00_MIPI_CSI1_GPIO0_IO00 SC_P_MIPI_CSI1_GPIO0_00 0 +#define SC_P_MIPI_CSI1_GPIO0_00_DMA_UART4_RX SC_P_MIPI_CSI1_GPIO0_00 1 +#define SC_P_MIPI_CSI1_GPIO0_00_LSIO_GPIO1_IO30 SC_P_MIPI_CSI1_GPIO0_00 3 +#define SC_P_MIPI_CSI1_GPIO0_01_MIPI_CSI1_GPIO0_IO01 SC_P_MIPI_CSI1_GPIO0_01 0 +#define SC_P_MIPI_CSI1_GPIO0_01_DMA_UART4_TX SC_P_MIPI_CSI1_GPIO0_01 1 +#define SC_P_MIPI_CSI1_GPIO0_01_LSIO_GPIO1_IO31 SC_P_MIPI_CSI1_GPIO0_01 3 +#define SC_P_MIPI_CSI1_I2C0_SCL_MIPI_CSI1_I2C0_SCL SC_P_MIPI_CSI1_I2C0_SCL 0 +#define SC_P_MIPI_CSI1_I2C0_SCL_LSIO_GPIO2_IO00 SC_P_MIPI_CSI1_I2C0_SCL 3 +#define SC_P_MIPI_CSI1_I2C0_SDA_MIPI_CSI1_I2C0_SDA SC_P_MIPI_CSI1_I2C0_SDA 0 +#define SC_P_MIPI_CSI1_I2C0_SDA_LSIO_GPIO2_IO01 SC_P_MIPI_CSI1_I2C0_SDA 3 +#define SC_P_HDMI_TX0_TS_SCL_HDMI_TX0_I2C0_SCL SC_P_HDMI_TX0_TS_SCL 0 +#define SC_P_HDMI_TX0_TS_SCL_DMA_I2C0_SCL SC_P_HDMI_TX0_TS_SCL 1 +#define SC_P_HDMI_TX0_TS_SCL_LSIO_GPIO2_IO02 SC_P_HDMI_TX0_TS_SCL 3 +#define SC_P_HDMI_TX0_TS_SDA_HDMI_TX0_I2C0_SDA SC_P_HDMI_TX0_TS_SDA 0 +#define SC_P_HDMI_TX0_TS_SDA_DMA_I2C0_SDA SC_P_HDMI_TX0_TS_SDA 1 +#define SC_P_HDMI_TX0_TS_SDA_LSIO_GPIO2_IO03 SC_P_HDMI_TX0_TS_SDA 3 +#define SC_P_ESAI1_FSR_AUD_ESAI1_FSR SC_P_ESAI1_FSR 0 +#define SC_P_ESAI1_FSR_LSIO_GPIO2_IO04 SC_P_ESAI1_FSR 3 +#define SC_P_ESAI1_FST_AUD_ESAI1_FST SC_P_ESAI1_FST 0 +#define SC_P_ESAI1_FST_AUD_SPDIF0_EXT_CLK SC_P_ESAI1_FST 1 +#define SC_P_ESAI1_FST_LSIO_GPIO2_IO05 SC_P_ESAI1_FST 3 +#define SC_P_ESAI1_SCKR_AUD_ESAI1_SCKR SC_P_ESAI1_SCKR 0 +#define SC_P_ESAI1_SCKR_LSIO_GPIO2_IO06 SC_P_ESAI1_SCKR 3 +#define SC_P_ESAI1_SCKT_AUD_ESAI1_SCKT SC_P_ESAI1_SCKT 0 +#define SC_P_ESAI1_SCKT_AUD_SAI2_RXC SC_P_ESAI1_SCKT 1 +#define SC_P_ESAI1_SCKT_AUD_SPDIF0_EXT_CLK SC_P_ESAI1_SCKT 2 +#define SC_P_ESAI1_SCKT_LSIO_GPIO2_IO07 SC_P_ESAI1_SCKT 3 +#define SC_P_ESAI1_TX0_AUD_ESAI1_TX0 SC_P_ESAI1_TX0 0 +#define SC_P_ESAI1_TX0_AUD_SAI2_RXD SC_P_ESAI1_TX0 1 +#define SC_P_ESAI1_TX0_AUD_SPDIF0_RX SC_P_ESAI1_TX0 2 +#define SC_P_ESAI1_TX0_LSIO_GPIO2_IO08 SC_P_ESAI1_TX0 3 +#define SC_P_ESAI1_TX1_AUD_ESAI1_TX1 SC_P_ESAI1_TX1 0 +#define SC_P_ESAI1_TX1_AUD_SAI2_RXFS SC_P_ESAI1_TX1 1 +#define SC_P_ESAI1_TX1_AUD_SPDIF0_TX SC_P_ESAI1_TX1 2 +#define SC_P_ESAI1_TX1_LSIO_GPIO2_IO09 SC_P_ESAI1_TX1 3 +#define SC_P_ESAI1_TX2_RX3_AUD_ESAI1_TX2_RX3 SC_P_ESAI1_TX2_RX3 0 +#define SC_P_ESAI1_TX2_RX3_AUD_SPDIF0_RX SC_P_ESAI1_TX2_RX3 1 +#define SC_P_ESAI1_TX2_RX3_LSIO_GPIO2_IO10 SC_P_ESAI1_TX2_RX3 3 +#define SC_P_ESAI1_TX3_RX2_AUD_ESAI1_TX3_RX2 SC_P_ESAI1_TX3_RX2 0 +#define SC_P_ESAI1_TX3_RX2_AUD_SPDIF0_TX SC_P_ESAI1_TX3_RX2 1 +#define SC_P_ESAI1_TX3_RX2_LSIO_GPIO2_IO11 SC_P_ESAI1_TX3_RX2 3 +#define SC_P_ESAI1_TX4_RX1_AUD_ESAI1_TX4_RX1 SC_P_ESAI1_TX4_RX1 0 +#define SC_P_ESAI1_TX4_RX1_LSIO_GPIO2_IO12 SC_P_ESAI1_TX4_RX1 3 +#define SC_P_ESAI1_TX5_RX0_AUD_ESAI1_TX5_RX0 SC_P_ESAI1_TX5_RX0 0 +#define SC_P_ESAI1_TX5_RX0_LSIO_GPIO2_IO13 SC_P_ESAI1_TX5_RX0 3 +#define SC_P_SPDIF0_RX_AUD_SPDIF0_RX SC_P_SPDIF0_RX 0 +#define SC_P_SPDIF0_RX_AUD_MQS_R SC_P_SPDIF0_RX 1 +#define SC_P_SPDIF0_RX_AUD_ACM_MCLK_IN1 SC_P_SPDIF0_RX 2 +#define SC_P_SPDIF0_RX_LSIO_GPIO2_IO14 SC_P_SPDIF0_RX 3 +#define SC_P_SPDIF0_TX_AUD_SPDIF0_TX SC_P_SPDIF0_TX 0 +#define SC_P_SPDIF0_TX_AUD_MQS_L SC_P_SPDIF0_TX 1 +#define SC_P_SPDIF0_TX_AUD_ACM_MCLK_OUT1 SC_P_SPDIF0_TX 2 +#define SC_P_SPDIF0_TX_LSIO_GPIO2_IO15 SC_P_SPDIF0_TX 3 +#define SC_P_SPDIF0_EXT_CLK_AUD_SPDIF0_EXT_CLK SC_P_SPDIF0_EXT_CLK 0 +#define SC_P_SPDIF0_EXT_CLK_DMA_DMA0_REQ_IN0 SC_P_SPDIF0_EXT_CLK 1 +#define SC_P_SPDIF0_EXT_CLK_LSIO_GPIO2_IO16 SC_P_SPDIF0_EXT_CLK 3 +#define SC_P_SPI3_SCK_DMA_SPI3_SCK SC_P_SPI3_SCK 0 +#define SC_P_SPI3_SCK_LSIO_GPIO2_IO17 SC_P_SPI3_SCK 3 +#define SC_P_SPI3_SDO_DMA_SPI3_SDO SC_P_SPI3_SDO 0 +#define SC_P_SPI3_SDO_DMA_FTM_CH0 SC_P_SPI3_SDO 1 +#define SC_P_SPI3_SDO_LSIO_GPIO2_IO18 SC_P_SPI3_SDO 3 +#define SC_P_SPI3_SDI_DMA_SPI3_SDI SC_P_SPI3_SDI 0 +#define SC_P_SPI3_SDI_DMA_FTM_CH1 SC_P_SPI3_SDI 1 +#define SC_P_SPI3_SDI_LSIO_GPIO2_IO19 SC_P_SPI3_SDI 3 +#define SC_P_SPI3_CS0_DMA_SPI3_CS0 SC_P_SPI3_CS0 0 +#define SC_P_SPI3_CS0_DMA_FTM_CH2 SC_P_SPI3_CS0 1 +#define SC_P_SPI3_CS0_LSIO_GPIO2_IO20 SC_P_SPI3_CS0 3 +#define SC_P_SPI3_CS1_DMA_SPI3_CS1 SC_P_SPI3_CS1 0 +#define SC_P_SPI3_CS1_LSIO_GPIO2_IO21 SC_P_SPI3_CS1 3 +#define SC_P_ESAI0_FSR_AUD_ESAI0_FSR SC_P_ESAI0_FSR 0 +#define SC_P_ESAI0_FSR_LSIO_GPIO2_IO22 SC_P_ESAI0_FSR 3 +#define SC_P_ESAI0_FST_AUD_ESAI0_FST SC_P_ESAI0_FST 0 +#define SC_P_ESAI0_FST_LSIO_GPIO2_IO23 SC_P_ESAI0_FST 3 +#define SC_P_ESAI0_SCKR_AUD_ESAI0_SCKR SC_P_ESAI0_SCKR 0 +#define SC_P_ESAI0_SCKR_LSIO_GPIO2_IO24 SC_P_ESAI0_SCKR 3 +#define SC_P_ESAI0_SCKT_AUD_ESAI0_SCKT SC_P_ESAI0_SCKT 0 +#define SC_P_ESAI0_SCKT_LSIO_GPIO2_IO25 SC_P_ESAI0_SCKT 3 +#define SC_P_ESAI0_TX0_AUD_ESAI0_TX0 SC_P_ESAI0_TX0 0 +#define SC_P_ESAI0_TX0_LSIO_GPIO2_IO26 SC_P_ESAI0_TX0 3 +#define SC_P_ESAI0_TX1_AUD_ESAI0_TX1 SC_P_ESAI0_TX1 0 +#define SC_P_ESAI0_TX1_LSIO_GPIO2_IO27 SC_P_ESAI0_TX1 3 +#define SC_P_ESAI0_TX2_RX3_AUD_ESAI0_TX2_RX3 SC_P_ESAI0_TX2_RX3 0 +#define SC_P_ESAI0_TX2_RX3_LSIO_GPIO2_IO28 SC_P_ESAI0_TX2_RX3 3 +#define SC_P_ESAI0_TX3_RX2_AUD_ESAI0_TX3_RX2 SC_P_ESAI0_TX3_RX2 0 +#define SC_P_ESAI0_TX3_RX2_LSIO_GPIO2_IO29 SC_P_ESAI0_TX3_RX2 3 +#define SC_P_ESAI0_TX4_RX1_AUD_ESAI0_TX4_RX1 SC_P_ESAI0_TX4_RX1 0 +#define SC_P_ESAI0_TX4_RX1_LSIO_GPIO2_IO30 SC_P_ESAI0_TX4_RX1 3 +#define SC_P_ESAI0_TX5_RX0_AUD_ESAI0_TX5_RX0 SC_P_ESAI0_TX5_RX0 0 +#define SC_P_ESAI0_TX5_RX0_LSIO_GPIO2_IO31 SC_P_ESAI0_TX5_RX0 3 +#define SC_P_MCLK_IN0_AUD_ACM_MCLK_IN0 SC_P_MCLK_IN0 0 +#define SC_P_MCLK_IN0_AUD_ESAI0_RX_HF_CLK SC_P_MCLK_IN0 1 +#define SC_P_MCLK_IN0_AUD_ESAI1_RX_HF_CLK SC_P_MCLK_IN0 2 +#define SC_P_MCLK_IN0_LSIO_GPIO3_IO00 SC_P_MCLK_IN0 3 +#define SC_P_MCLK_OUT0_AUD_ACM_MCLK_OUT0 SC_P_MCLK_OUT0 0 +#define SC_P_MCLK_OUT0_AUD_ESAI0_TX_HF_CLK SC_P_MCLK_OUT0 1 +#define SC_P_MCLK_OUT0_AUD_ESAI1_TX_HF_CLK SC_P_MCLK_OUT0 2 +#define SC_P_MCLK_OUT0_LSIO_GPIO3_IO01 SC_P_MCLK_OUT0 3 +#define SC_P_SPI0_SCK_DMA_SPI0_SCK SC_P_SPI0_SCK 0 +#define SC_P_SPI0_SCK_AUD_SAI0_RXC SC_P_SPI0_SCK 1 +#define SC_P_SPI0_SCK_LSIO_GPIO3_IO02 SC_P_SPI0_SCK 3 +#define SC_P_SPI0_SDO_DMA_SPI0_SDO SC_P_SPI0_SDO 0 +#define SC_P_SPI0_SDO_AUD_SAI0_TXD SC_P_SPI0_SDO 1 +#define SC_P_SPI0_SDO_LSIO_GPIO3_IO03 SC_P_SPI0_SDO 3 +#define SC_P_SPI0_SDI_DMA_SPI0_SDI SC_P_SPI0_SDI 0 +#define SC_P_SPI0_SDI_AUD_SAI0_RXD SC_P_SPI0_SDI 1 +#define SC_P_SPI0_SDI_LSIO_GPIO3_IO04 SC_P_SPI0_SDI 3 +#define SC_P_SPI0_CS0_DMA_SPI0_CS0 SC_P_SPI0_CS0 0 +#define SC_P_SPI0_CS0_AUD_SAI0_RXFS SC_P_SPI0_CS0 1 +#define SC_P_SPI0_CS0_LSIO_GPIO3_IO05 SC_P_SPI0_CS0 3 +#define SC_P_SPI0_CS1_DMA_SPI0_CS1 SC_P_SPI0_CS1 0 +#define SC_P_SPI0_CS1_AUD_SAI0_TXC SC_P_SPI0_CS1 1 +#define SC_P_SPI0_CS1_LSIO_GPIO3_IO06 SC_P_SPI0_CS1 3 +#define SC_P_SPI2_SCK_DMA_SPI2_SCK SC_P_SPI2_SCK 0 +#define SC_P_SPI2_SCK_LSIO_GPIO3_IO07 SC_P_SPI2_SCK 3 +#define SC_P_SPI2_SDO_DMA_SPI2_SDO SC_P_SPI2_SDO 0 +#define SC_P_SPI2_SDO_LSIO_GPIO3_IO08 SC_P_SPI2_SDO 3 +#define SC_P_SPI2_SDI_DMA_SPI2_SDI SC_P_SPI2_SDI 0 +#define SC_P_SPI2_SDI_LSIO_GPIO3_IO09 SC_P_SPI2_SDI 3 +#define SC_P_SPI2_CS0_DMA_SPI2_CS0 SC_P_SPI2_CS0 0 +#define SC_P_SPI2_CS0_LSIO_GPIO3_IO10 SC_P_SPI2_CS0 3 +#define SC_P_SPI2_CS1_DMA_SPI2_CS1 SC_P_SPI2_CS1 0 +#define SC_P_SPI2_CS1_AUD_SAI0_TXFS SC_P_SPI2_CS1 1 +#define SC_P_SPI2_CS1_LSIO_GPIO3_IO11 SC_P_SPI2_CS1 3 +#define SC_P_SAI1_RXC_AUD_SAI1_RXC SC_P_SAI1_RXC 0 +#define SC_P_SAI1_RXC_AUD_SAI0_TXD SC_P_SAI1_RXC 1 +#define SC_P_SAI1_RXC_LSIO_GPIO3_IO12 SC_P_SAI1_RXC 3 +#define SC_P_SAI1_RXD_AUD_SAI1_RXD SC_P_SAI1_RXD 0 +#define SC_P_SAI1_RXD_AUD_SAI0_TXFS SC_P_SAI1_RXD 1 +#define SC_P_SAI1_RXD_LSIO_GPIO3_IO13 SC_P_SAI1_RXD 3 +#define SC_P_SAI1_RXFS_AUD_SAI1_RXFS SC_P_SAI1_RXFS 0 +#define SC_P_SAI1_RXFS_AUD_SAI0_RXD SC_P_SAI1_RXFS 1 +#define SC_P_SAI1_RXFS_LSIO_GPIO3_IO14 SC_P_SAI1_RXFS 3 +#define SC_P_SAI1_TXC_AUD_SAI1_TXC SC_P_SAI1_TXC 0 +#define SC_P_SAI1_TXC_AUD_SAI0_TXC SC_P_SAI1_TXC 1 +#define SC_P_SAI1_TXC_LSIO_GPIO3_IO15 SC_P_SAI1_TXC 3 +#define SC_P_SAI1_TXD_AUD_SAI1_TXD SC_P_SAI1_TXD 0 +#define SC_P_SAI1_TXD_AUD_SAI1_RXC SC_P_SAI1_TXD 1 +#define SC_P_SAI1_TXD_LSIO_GPIO3_IO16 SC_P_SAI1_TXD 3 +#define SC_P_SAI1_TXFS_AUD_SAI1_TXFS SC_P_SAI1_TXFS 0 +#define SC_P_SAI1_TXFS_AUD_SAI1_RXFS SC_P_SAI1_TXFS 1 +#define SC_P_SAI1_TXFS_LSIO_GPIO3_IO17 SC_P_SAI1_TXFS 3 +#define SC_P_ADC_IN7_DMA_ADC1_IN3 SC_P_ADC_IN7 0 +#define SC_P_ADC_IN7_DMA_SPI1_CS1 SC_P_ADC_IN7 1 +#define SC_P_ADC_IN7_LSIO_KPP0_ROW3 SC_P_ADC_IN7 2 +#define SC_P_ADC_IN7_LSIO_GPIO3_IO25 SC_P_ADC_IN7 3 +#define SC_P_ADC_IN6_DMA_ADC1_IN2 SC_P_ADC_IN6 0 +#define SC_P_ADC_IN6_DMA_SPI1_CS0 SC_P_ADC_IN6 1 +#define SC_P_ADC_IN6_LSIO_KPP0_ROW2 SC_P_ADC_IN6 2 +#define SC_P_ADC_IN6_LSIO_GPIO3_IO24 SC_P_ADC_IN6 3 +#define SC_P_ADC_IN5_DMA_ADC1_IN1 SC_P_ADC_IN5 0 +#define SC_P_ADC_IN5_DMA_SPI1_SDI SC_P_ADC_IN5 1 +#define SC_P_ADC_IN5_LSIO_KPP0_ROW1 SC_P_ADC_IN5 2 +#define SC_P_ADC_IN5_LSIO_GPIO3_IO23 SC_P_ADC_IN5 3 +#define SC_P_ADC_IN4_DMA_ADC1_IN0 SC_P_ADC_IN4 0 +#define SC_P_ADC_IN4_DMA_SPI1_SDO SC_P_ADC_IN4 1 +#define SC_P_ADC_IN4_LSIO_KPP0_ROW0 SC_P_ADC_IN4 2 +#define SC_P_ADC_IN4_LSIO_GPIO3_IO22 SC_P_ADC_IN4 3 +#define SC_P_ADC_IN3_DMA_ADC0_IN3 SC_P_ADC_IN3 0 +#define SC_P_ADC_IN3_DMA_SPI1_SCK SC_P_ADC_IN3 1 +#define SC_P_ADC_IN3_LSIO_KPP0_COL3 SC_P_ADC_IN3 2 +#define SC_P_ADC_IN3_LSIO_GPIO3_IO21 SC_P_ADC_IN3 3 +#define SC_P_ADC_IN2_DMA_ADC0_IN2 SC_P_ADC_IN2 0 +#define SC_P_ADC_IN2_LSIO_KPP0_COL2 SC_P_ADC_IN2 2 +#define SC_P_ADC_IN2_LSIO_GPIO3_IO20 SC_P_ADC_IN2 3 +#define SC_P_ADC_IN1_DMA_ADC0_IN1 SC_P_ADC_IN1 0 +#define SC_P_ADC_IN1_LSIO_KPP0_COL1 SC_P_ADC_IN1 2 +#define SC_P_ADC_IN1_LSIO_GPIO3_IO19 SC_P_ADC_IN1 3 +#define SC_P_ADC_IN0_DMA_ADC0_IN0 SC_P_ADC_IN0 0 +#define SC_P_ADC_IN0_LSIO_KPP0_COL0 SC_P_ADC_IN0 2 +#define SC_P_ADC_IN0_LSIO_GPIO3_IO18 SC_P_ADC_IN0 3 +#define SC_P_MLB_SIG_CONN_MLB_SIG SC_P_MLB_SIG 0 +#define SC_P_MLB_SIG_AUD_SAI3_RXC SC_P_MLB_SIG 1 +#define SC_P_MLB_SIG_LSIO_GPIO3_IO26 SC_P_MLB_SIG 3 +#define SC_P_MLB_CLK_CONN_MLB_CLK SC_P_MLB_CLK 0 +#define SC_P_MLB_CLK_AUD_SAI3_RXFS SC_P_MLB_CLK 1 +#define SC_P_MLB_CLK_LSIO_GPIO3_IO27 SC_P_MLB_CLK 3 +#define SC_P_MLB_DATA_CONN_MLB_DATA SC_P_MLB_DATA 0 +#define SC_P_MLB_DATA_AUD_SAI3_RXD SC_P_MLB_DATA 1 +#define SC_P_MLB_DATA_LSIO_GPIO3_IO28 SC_P_MLB_DATA 3 +#define SC_P_FLEXCAN0_RX_DMA_FLEXCAN0_RX SC_P_FLEXCAN0_RX 0 +#define SC_P_FLEXCAN0_RX_LSIO_GPIO3_IO29 SC_P_FLEXCAN0_RX 3 +#define SC_P_FLEXCAN0_TX_DMA_FLEXCAN0_TX SC_P_FLEXCAN0_TX 0 +#define SC_P_FLEXCAN0_TX_LSIO_GPIO3_IO30 SC_P_FLEXCAN0_TX 3 +#define SC_P_FLEXCAN1_RX_DMA_FLEXCAN1_RX SC_P_FLEXCAN1_RX 0 +#define SC_P_FLEXCAN1_RX_LSIO_GPIO3_IO31 SC_P_FLEXCAN1_RX 3 +#define SC_P_FLEXCAN1_TX_DMA_FLEXCAN1_TX SC_P_FLEXCAN1_TX 0 +#define SC_P_FLEXCAN1_TX_LSIO_GPIO4_IO00 SC_P_FLEXCAN1_TX 3 +#define SC_P_FLEXCAN2_RX_DMA_FLEXCAN2_RX SC_P_FLEXCAN2_RX 0 +#define SC_P_FLEXCAN2_RX_LSIO_GPIO4_IO01 SC_P_FLEXCAN2_RX 3 +#define SC_P_FLEXCAN2_TX_DMA_FLEXCAN2_TX SC_P_FLEXCAN2_TX 0 +#define SC_P_FLEXCAN2_TX_LSIO_GPIO4_IO02 SC_P_FLEXCAN2_TX 3 +#define SC_P_USB_SS3_TC0_DMA_I2C1_SCL SC_P_USB_SS3_TC0 0 +#define SC_P_USB_SS3_TC0_CONN_USB_OTG1_PWR SC_P_USB_SS3_TC0 1 +#define SC_P_USB_SS3_TC0_LSIO_GPIO4_IO03 SC_P_USB_SS3_TC0 3 +#define SC_P_USB_SS3_TC1_DMA_I2C1_SCL SC_P_USB_SS3_TC1 0 +#define SC_P_USB_SS3_TC1_CONN_USB_OTG2_PWR SC_P_USB_SS3_TC1 1 +#define SC_P_USB_SS3_TC1_LSIO_GPIO4_IO04 SC_P_USB_SS3_TC1 3 +#define SC_P_USB_SS3_TC2_DMA_I2C1_SDA SC_P_USB_SS3_TC2 0 +#define SC_P_USB_SS3_TC2_CONN_USB_OTG1_OC SC_P_USB_SS3_TC2 1 +#define SC_P_USB_SS3_TC2_LSIO_GPIO4_IO05 SC_P_USB_SS3_TC2 3 +#define SC_P_USB_SS3_TC3_DMA_I2C1_SDA SC_P_USB_SS3_TC3 0 +#define SC_P_USB_SS3_TC3_CONN_USB_OTG2_OC SC_P_USB_SS3_TC3 1 +#define SC_P_USB_SS3_TC3_LSIO_GPIO4_IO06 SC_P_USB_SS3_TC3 3 +#define SC_P_USDHC1_RESET_B_CONN_USDHC1_RESET_B SC_P_USDHC1_RESET_B 0 +#define SC_P_USDHC1_RESET_B_LSIO_GPIO4_IO07 SC_P_USDHC1_RESET_B 3 +#define SC_P_USDHC1_VSELECT_CONN_USDHC1_VSELECT SC_P_USDHC1_VSELECT 0 +#define SC_P_USDHC1_VSELECT_LSIO_GPIO4_IO08 SC_P_USDHC1_VSELECT 3 +#define SC_P_USDHC2_RESET_B_CONN_USDHC2_RESET_B SC_P_USDHC2_RESET_B 0 +#define SC_P_USDHC2_RESET_B_LSIO_GPIO4_IO09 SC_P_USDHC2_RESET_B 3 +#define SC_P_USDHC2_VSELECT_CONN_USDHC2_VSELECT SC_P_USDHC2_VSELECT 0 +#define SC_P_USDHC2_VSELECT_LSIO_GPIO4_IO10 SC_P_USDHC2_VSELECT 3 +#define SC_P_USDHC2_WP_CONN_USDHC2_WP SC_P_USDHC2_WP 0 +#define SC_P_USDHC2_WP_LSIO_GPIO4_IO11 SC_P_USDHC2_WP 3 +#define SC_P_USDHC2_CD_B_CONN_USDHC2_CD_B SC_P_USDHC2_CD_B 0 +#define SC_P_USDHC2_CD_B_LSIO_GPIO4_IO12 SC_P_USDHC2_CD_B 3 +#define SC_P_ENET0_MDIO_CONN_ENET0_MDIO SC_P_ENET0_MDIO 0 +#define SC_P_ENET0_MDIO_DMA_I2C4_SDA SC_P_ENET0_MDIO 1 +#define SC_P_ENET0_MDIO_LSIO_GPIO4_IO13 SC_P_ENET0_MDIO 3 +#define SC_P_ENET0_MDC_CONN_ENET0_MDC SC_P_ENET0_MDC 0 +#define SC_P_ENET0_MDC_DMA_I2C4_SCL SC_P_ENET0_MDC 1 +#define SC_P_ENET0_MDC_LSIO_GPIO4_IO14 SC_P_ENET0_MDC 3 +#define SC_P_ENET0_REFCLK_125M_25M_CONN_ENET0_REFCLK_125M_25M SC_P_ENET0_REFCLK_125M_25M 0 +#define SC_P_ENET0_REFCLK_125M_25M_CONN_ENET0_PPS SC_P_ENET0_REFCLK_125M_25M 1 +#define SC_P_ENET0_REFCLK_125M_25M_LSIO_GPIO4_IO15 SC_P_ENET0_REFCLK_125M_25M 3 +#define SC_P_ENET1_REFCLK_125M_25M_CONN_ENET1_REFCLK_125M_25M SC_P_ENET1_REFCLK_125M_25M 0 +#define SC_P_ENET1_REFCLK_125M_25M_CONN_ENET1_PPS SC_P_ENET1_REFCLK_125M_25M 1 +#define SC_P_ENET1_REFCLK_125M_25M_LSIO_GPIO4_IO16 SC_P_ENET1_REFCLK_125M_25M 3 +#define SC_P_ENET1_MDIO_CONN_ENET1_MDIO SC_P_ENET1_MDIO 0 +#define SC_P_ENET1_MDIO_DMA_I2C4_SDA SC_P_ENET1_MDIO 1 +#define SC_P_ENET1_MDIO_LSIO_GPIO4_IO17 SC_P_ENET1_MDIO 3 +#define SC_P_ENET1_MDC_CONN_ENET1_MDC SC_P_ENET1_MDC 0 +#define SC_P_ENET1_MDC_DMA_I2C4_SCL SC_P_ENET1_MDC 1 +#define SC_P_ENET1_MDC_LSIO_GPIO4_IO18 SC_P_ENET1_MDC 3 +#define SC_P_QSPI1A_SS0_B_LSIO_QSPI1A_SS0_B SC_P_QSPI1A_SS0_B 0 +#define SC_P_QSPI1A_SS0_B_LSIO_GPIO4_IO19 SC_P_QSPI1A_SS0_B 3 +#define SC_P_QSPI1A_SS1_B_LSIO_QSPI1A_SS1_B SC_P_QSPI1A_SS1_B 0 +#define SC_P_QSPI1A_SS1_B_LSIO_QSPI1A_SCLK2 SC_P_QSPI1A_SS1_B 1 +#define SC_P_QSPI1A_SS1_B_LSIO_GPIO4_IO20 SC_P_QSPI1A_SS1_B 3 +#define SC_P_QSPI1A_SCLK_LSIO_QSPI1A_SCLK SC_P_QSPI1A_SCLK 0 +#define SC_P_QSPI1A_SCLK_LSIO_GPIO4_IO21 SC_P_QSPI1A_SCLK 3 +#define SC_P_QSPI1A_DQS_LSIO_QSPI1A_DQS SC_P_QSPI1A_DQS 0 +#define SC_P_QSPI1A_DQS_LSIO_GPIO4_IO22 SC_P_QSPI1A_DQS 3 +#define SC_P_QSPI1A_DATA3_LSIO_QSPI1A_DATA3 SC_P_QSPI1A_DATA3 0 +#define SC_P_QSPI1A_DATA3_DMA_I2C1_SDA SC_P_QSPI1A_DATA3 1 +#define SC_P_QSPI1A_DATA3_CONN_USB_OTG1_OC SC_P_QSPI1A_DATA3 2 +#define SC_P_QSPI1A_DATA3_LSIO_GPIO4_IO23 SC_P_QSPI1A_DATA3 3 +#define SC_P_QSPI1A_DATA2_LSIO_QSPI1A_DATA2 SC_P_QSPI1A_DATA2 0 +#define SC_P_QSPI1A_DATA2_DMA_I2C1_SCL SC_P_QSPI1A_DATA2 1 +#define SC_P_QSPI1A_DATA2_CONN_USB_OTG2_PWR SC_P_QSPI1A_DATA2 2 +#define SC_P_QSPI1A_DATA2_LSIO_GPIO4_IO24 SC_P_QSPI1A_DATA2 3 +#define SC_P_QSPI1A_DATA1_LSIO_QSPI1A_DATA1 SC_P_QSPI1A_DATA1 0 +#define SC_P_QSPI1A_DATA1_DMA_I2C1_SDA SC_P_QSPI1A_DATA1 1 +#define SC_P_QSPI1A_DATA1_CONN_USB_OTG2_OC SC_P_QSPI1A_DATA1 2 +#define SC_P_QSPI1A_DATA1_LSIO_GPIO4_IO25 SC_P_QSPI1A_DATA1 3 +#define SC_P_QSPI1A_DATA0_LSIO_QSPI1A_DATA0 SC_P_QSPI1A_DATA0 0 +#define SC_P_QSPI1A_DATA0_LSIO_GPIO4_IO26 SC_P_QSPI1A_DATA0 3 +#define SC_P_QSPI0A_DATA0_LSIO_QSPI0A_DATA0 SC_P_QSPI0A_DATA0 0 +#define SC_P_QSPI0A_DATA1_LSIO_QSPI0A_DATA1 SC_P_QSPI0A_DATA1 0 +#define SC_P_QSPI0A_DATA2_LSIO_QSPI0A_DATA2 SC_P_QSPI0A_DATA2 0 +#define SC_P_QSPI0A_DATA3_LSIO_QSPI0A_DATA3 SC_P_QSPI0A_DATA3 0 +#define SC_P_QSPI0A_DQS_LSIO_QSPI0A_DQS SC_P_QSPI0A_DQS 0 +#define SC_P_QSPI0A_SS0_B_LSIO_QSPI0A_SS0_B SC_P_QSPI0A_SS0_B 0 +#define SC_P_QSPI0A_SS1_B_LSIO_QSPI0A_SS1_B SC_P_QSPI0A_SS1_B 0 +#define SC_P_QSPI0A_SS1_B_LSIO_QSPI0A_SCLK2 SC_P_QSPI0A_SS1_B 1 +#define SC_P_QSPI0A_SCLK_LSIO_QSPI0A_SCLK SC_P_QSPI0A_SCLK 0 +#define SC_P_QSPI0B_SCLK_LSIO_QSPI0B_SCLK SC_P_QSPI0B_SCLK 0 +#define SC_P_QSPI0B_DATA0_LSIO_QSPI0B_DATA0 SC_P_QSPI0B_DATA0 0 +#define SC_P_QSPI0B_DATA1_LSIO_QSPI0B_DATA1 SC_P_QSPI0B_DATA1 0 +#define SC_P_QSPI0B_DATA2_LSIO_QSPI0B_DATA2 SC_P_QSPI0B_DATA2 0 +#define SC_P_QSPI0B_DATA3_LSIO_QSPI0B_DATA3 SC_P_QSPI0B_DATA3 0 +#define SC_P_QSPI0B_DQS_LSIO_QSPI0B_DQS SC_P_QSPI0B_DQS 0 +#define SC_P_QSPI0B_SS0_B_LSIO_QSPI0B_SS0_B SC_P_QSPI0B_SS0_B 0 +#define SC_P_QSPI0B_SS1_B_LSIO_QSPI0B_SS1_B SC_P_QSPI0B_SS1_B 0 +#define SC_P_QSPI0B_SS1_B_LSIO_QSPI0B_SCLK2 SC_P_QSPI0B_SS1_B 1 +#define SC_P_PCIE_CTRL0_CLKREQ_B_HSIO_PCIE0_CLKREQ_B SC_P_PCIE_CTRL0_CLKREQ_B 0 +#define SC_P_PCIE_CTRL0_CLKREQ_B_LSIO_GPIO4_IO27 SC_P_PCIE_CTRL0_CLKREQ_B 3 +#define SC_P_PCIE_CTRL0_WAKE_B_HSIO_PCIE0_WAKE_B SC_P_PCIE_CTRL0_WAKE_B 0 +#define SC_P_PCIE_CTRL0_WAKE_B_LSIO_GPIO4_IO28 SC_P_PCIE_CTRL0_WAKE_B 3 +#define SC_P_PCIE_CTRL0_PERST_B_HSIO_PCIE0_PERST_B SC_P_PCIE_CTRL0_PERST_B 0 +#define SC_P_PCIE_CTRL0_PERST_B_LSIO_GPIO4_IO29 SC_P_PCIE_CTRL0_PERST_B 3 +#define SC_P_PCIE_CTRL1_CLKREQ_B_HSIO_PCIE1_CLKREQ_B SC_P_PCIE_CTRL1_CLKREQ_B 0 +#define SC_P_PCIE_CTRL1_CLKREQ_B_DMA_I2C1_SDA SC_P_PCIE_CTRL1_CLKREQ_B 1 +#define SC_P_PCIE_CTRL1_CLKREQ_B_CONN_USB_OTG2_OC SC_P_PCIE_CTRL1_CLKREQ_B 2 +#define SC_P_PCIE_CTRL1_CLKREQ_B_LSIO_GPIO4_IO30 SC_P_PCIE_CTRL1_CLKREQ_B 3 +#define SC_P_PCIE_CTRL1_WAKE_B_HSIO_PCIE1_WAKE_B SC_P_PCIE_CTRL1_WAKE_B 0 +#define SC_P_PCIE_CTRL1_WAKE_B_DMA_I2C1_SCL SC_P_PCIE_CTRL1_WAKE_B 1 +#define SC_P_PCIE_CTRL1_WAKE_B_CONN_USB_OTG2_PWR SC_P_PCIE_CTRL1_WAKE_B 2 +#define SC_P_PCIE_CTRL1_WAKE_B_LSIO_GPIO4_IO31 SC_P_PCIE_CTRL1_WAKE_B 3 +#define SC_P_PCIE_CTRL1_PERST_B_HSIO_PCIE1_PERST_B SC_P_PCIE_CTRL1_PERST_B 0 +#define SC_P_PCIE_CTRL1_PERST_B_DMA_I2C1_SCL SC_P_PCIE_CTRL1_PERST_B 1 +#define SC_P_PCIE_CTRL1_PERST_B_CONN_USB_OTG1_PWR SC_P_PCIE_CTRL1_PERST_B 2 +#define SC_P_PCIE_CTRL1_PERST_B_LSIO_GPIO5_IO00 SC_P_PCIE_CTRL1_PERST_B 3 +#define SC_P_USB_HSIC0_DATA_CONN_USB_HSIC0_DATA SC_P_USB_HSIC0_DATA 0 +#define SC_P_USB_HSIC0_DATA_DMA_I2C1_SDA SC_P_USB_HSIC0_DATA 1 +#define SC_P_USB_HSIC0_DATA_LSIO_GPIO5_IO01 SC_P_USB_HSIC0_DATA 3 +#define SC_P_USB_HSIC0_STROBE_CONN_USB_HSIC0_STROBE SC_P_USB_HSIC0_STROBE 0 +#define SC_P_USB_HSIC0_STROBE_DMA_I2C1_SCL SC_P_USB_HSIC0_STROBE 1 +#define SC_P_USB_HSIC0_STROBE_LSIO_GPIO5_IO02 SC_P_USB_HSIC0_STROBE 3 +#define SC_P_EMMC0_CLK_CONN_EMMC0_CLK SC_P_EMMC0_CLK 0 +#define SC_P_EMMC0_CLK_CONN_NAND_READY_B SC_P_EMMC0_CLK 1 +#define SC_P_EMMC0_CMD_CONN_EMMC0_CMD SC_P_EMMC0_CMD 0 +#define SC_P_EMMC0_CMD_CONN_NAND_DQS SC_P_EMMC0_CMD 1 +#define SC_P_EMMC0_CMD_AUD_MQS_R SC_P_EMMC0_CMD 2 +#define SC_P_EMMC0_CMD_LSIO_GPIO5_IO03 SC_P_EMMC0_CMD 3 +#define SC_P_EMMC0_DATA0_CONN_EMMC0_DATA0 SC_P_EMMC0_DATA0 0 +#define SC_P_EMMC0_DATA0_CONN_NAND_DATA00 SC_P_EMMC0_DATA0 1 +#define SC_P_EMMC0_DATA0_LSIO_GPIO5_IO04 SC_P_EMMC0_DATA0 3 +#define SC_P_EMMC0_DATA1_CONN_EMMC0_DATA1 SC_P_EMMC0_DATA1 0 +#define SC_P_EMMC0_DATA1_CONN_NAND_DATA01 SC_P_EMMC0_DATA1 1 +#define SC_P_EMMC0_DATA1_LSIO_GPIO5_IO05 SC_P_EMMC0_DATA1 3 +#define SC_P_EMMC0_DATA2_CONN_EMMC0_DATA2 SC_P_EMMC0_DATA2 0 +#define SC_P_EMMC0_DATA2_CONN_NAND_DATA02 SC_P_EMMC0_DATA2 1 +#define SC_P_EMMC0_DATA2_LSIO_GPIO5_IO06 SC_P_EMMC0_DATA2 3 +#define SC_P_EMMC0_DATA3_CONN_EMMC0_DATA3 SC_P_EMMC0_DATA3 0 +#define SC_P_EMMC0_DATA3_CONN_NAND_DATA03 SC_P_EMMC0_DATA3 1 +#define SC_P_EMMC0_DATA3_LSIO_GPIO5_IO07 SC_P_EMMC0_DATA3 3 +#define SC_P_EMMC0_DATA4_CONN_EMMC0_DATA4 SC_P_EMMC0_DATA4 0 +#define SC_P_EMMC0_DATA4_CONN_NAND_DATA04 SC_P_EMMC0_DATA4 1 +#define SC_P_EMMC0_DATA4_LSIO_GPIO5_IO08 SC_P_EMMC0_DATA4 3 +#define SC_P_EMMC0_DATA5_CONN_EMMC0_DATA5 SC_P_EMMC0_DATA5 0 +#define SC_P_EMMC0_DATA5_CONN_NAND_DATA05 SC_P_EMMC0_DATA5 1 +#define SC_P_EMMC0_DATA5_LSIO_GPIO5_IO09 SC_P_EMMC0_DATA5 3 +#define SC_P_EMMC0_DATA6_CONN_EMMC0_DATA6 SC_P_EMMC0_DATA6 0 +#define SC_P_EMMC0_DATA6_CONN_NAND_DATA06 SC_P_EMMC0_DATA6 1 +#define SC_P_EMMC0_DATA6_LSIO_GPIO5_IO10 SC_P_EMMC0_DATA6 3 +#define SC_P_EMMC0_DATA7_CONN_EMMC0_DATA7 SC_P_EMMC0_DATA7 0 +#define SC_P_EMMC0_DATA7_CONN_NAND_DATA07 SC_P_EMMC0_DATA7 1 +#define SC_P_EMMC0_DATA7_LSIO_GPIO5_IO11 SC_P_EMMC0_DATA7 3 +#define SC_P_EMMC0_STROBE_CONN_EMMC0_STROBE SC_P_EMMC0_STROBE 0 +#define SC_P_EMMC0_STROBE_CONN_NAND_CLE SC_P_EMMC0_STROBE 1 +#define SC_P_EMMC0_STROBE_LSIO_GPIO5_IO12 SC_P_EMMC0_STROBE 3 +#define SC_P_EMMC0_RESET_B_CONN_EMMC0_RESET_B SC_P_EMMC0_RESET_B 0 +#define SC_P_EMMC0_RESET_B_CONN_NAND_WP_B SC_P_EMMC0_RESET_B 1 +#define SC_P_EMMC0_RESET_B_CONN_USDHC1_VSELECT SC_P_EMMC0_RESET_B 2 +#define SC_P_EMMC0_RESET_B_LSIO_GPIO5_IO13 SC_P_EMMC0_RESET_B 3 +#define SC_P_USDHC1_CLK_CONN_USDHC1_CLK SC_P_USDHC1_CLK 0 +#define SC_P_USDHC1_CLK_AUD_MQS_R SC_P_USDHC1_CLK 1 +#define SC_P_USDHC1_CMD_CONN_USDHC1_CMD SC_P_USDHC1_CMD 0 +#define SC_P_USDHC1_CMD_AUD_MQS_L SC_P_USDHC1_CMD 1 +#define SC_P_USDHC1_CMD_LSIO_GPIO5_IO14 SC_P_USDHC1_CMD 3 +#define SC_P_USDHC1_DATA0_CONN_USDHC1_DATA0 SC_P_USDHC1_DATA0 0 +#define SC_P_USDHC1_DATA0_CONN_NAND_RE_N SC_P_USDHC1_DATA0 1 +#define SC_P_USDHC1_DATA0_LSIO_GPIO5_IO15 SC_P_USDHC1_DATA0 3 +#define SC_P_USDHC1_DATA1_CONN_USDHC1_DATA1 SC_P_USDHC1_DATA1 0 +#define SC_P_USDHC1_DATA1_CONN_NAND_RE_P SC_P_USDHC1_DATA1 1 +#define SC_P_USDHC1_DATA1_LSIO_GPIO5_IO16 SC_P_USDHC1_DATA1 3 +#define SC_P_USDHC1_DATA2_CONN_USDHC1_DATA2 SC_P_USDHC1_DATA2 0 +#define SC_P_USDHC1_DATA2_CONN_NAND_DQS_N SC_P_USDHC1_DATA2 1 +#define SC_P_USDHC1_DATA2_LSIO_GPIO5_IO17 SC_P_USDHC1_DATA2 3 +#define SC_P_USDHC1_DATA3_CONN_USDHC1_DATA3 SC_P_USDHC1_DATA3 0 +#define SC_P_USDHC1_DATA3_CONN_NAND_DQS_P SC_P_USDHC1_DATA3 1 +#define SC_P_USDHC1_DATA3_LSIO_GPIO5_IO18 SC_P_USDHC1_DATA3 3 +#define SC_P_USDHC1_DATA4_CONN_USDHC1_DATA4 SC_P_USDHC1_DATA4 0 +#define SC_P_USDHC1_DATA4_CONN_NAND_CE0_B SC_P_USDHC1_DATA4 1 +#define SC_P_USDHC1_DATA4_AUD_MQS_R SC_P_USDHC1_DATA4 2 +#define SC_P_USDHC1_DATA4_LSIO_GPIO5_IO19 SC_P_USDHC1_DATA4 3 +#define SC_P_USDHC1_DATA5_CONN_USDHC1_DATA5 SC_P_USDHC1_DATA5 0 +#define SC_P_USDHC1_DATA5_CONN_NAND_RE_B SC_P_USDHC1_DATA5 1 +#define SC_P_USDHC1_DATA5_AUD_MQS_L SC_P_USDHC1_DATA5 2 +#define SC_P_USDHC1_DATA5_LSIO_GPIO5_IO20 SC_P_USDHC1_DATA5 3 +#define SC_P_USDHC1_DATA6_CONN_USDHC1_DATA6 SC_P_USDHC1_DATA6 0 +#define SC_P_USDHC1_DATA6_CONN_NAND_WE_B SC_P_USDHC1_DATA6 1 +#define SC_P_USDHC1_DATA6_CONN_USDHC1_WP SC_P_USDHC1_DATA6 2 +#define SC_P_USDHC1_DATA6_LSIO_GPIO5_IO21 SC_P_USDHC1_DATA6 3 +#define SC_P_USDHC1_DATA7_CONN_USDHC1_DATA7 SC_P_USDHC1_DATA7 0 +#define SC_P_USDHC1_DATA7_CONN_NAND_ALE SC_P_USDHC1_DATA7 1 +#define SC_P_USDHC1_DATA7_CONN_USDHC1_CD_B SC_P_USDHC1_DATA7 2 +#define SC_P_USDHC1_DATA7_LSIO_GPIO5_IO22 SC_P_USDHC1_DATA7 3 +#define SC_P_USDHC1_STROBE_CONN_USDHC1_STROBE SC_P_USDHC1_STROBE 0 +#define SC_P_USDHC1_STROBE_CONN_NAND_CE1_B SC_P_USDHC1_STROBE 1 +#define SC_P_USDHC1_STROBE_CONN_USDHC1_RESET_B SC_P_USDHC1_STROBE 2 +#define SC_P_USDHC1_STROBE_LSIO_GPIO5_IO23 SC_P_USDHC1_STROBE 3 +#define SC_P_USDHC2_CLK_CONN_USDHC2_CLK SC_P_USDHC2_CLK 0 +#define SC_P_USDHC2_CLK_AUD_MQS_R SC_P_USDHC2_CLK 1 +#define SC_P_USDHC2_CLK_LSIO_GPIO5_IO24 SC_P_USDHC2_CLK 3 +#define SC_P_USDHC2_CMD_CONN_USDHC2_CMD SC_P_USDHC2_CMD 0 +#define SC_P_USDHC2_CMD_AUD_MQS_L SC_P_USDHC2_CMD 1 +#define SC_P_USDHC2_CMD_LSIO_GPIO5_IO25 SC_P_USDHC2_CMD 3 +#define SC_P_USDHC2_DATA0_CONN_USDHC2_DATA0 SC_P_USDHC2_DATA0 0 +#define SC_P_USDHC2_DATA0_DMA_UART4_RX SC_P_USDHC2_DATA0 1 +#define SC_P_USDHC2_DATA0_LSIO_GPIO5_IO26 SC_P_USDHC2_DATA0 3 +#define SC_P_USDHC2_DATA1_CONN_USDHC2_DATA1 SC_P_USDHC2_DATA1 0 +#define SC_P_USDHC2_DATA1_DMA_UART4_TX SC_P_USDHC2_DATA1 1 +#define SC_P_USDHC2_DATA1_LSIO_GPIO5_IO27 SC_P_USDHC2_DATA1 3 +#define SC_P_USDHC2_DATA2_CONN_USDHC2_DATA2 SC_P_USDHC2_DATA2 0 +#define SC_P_USDHC2_DATA2_DMA_UART4_CTS_B SC_P_USDHC2_DATA2 1 +#define SC_P_USDHC2_DATA2_LSIO_GPIO5_IO28 SC_P_USDHC2_DATA2 3 +#define SC_P_USDHC2_DATA3_CONN_USDHC2_DATA3 SC_P_USDHC2_DATA3 0 +#define SC_P_USDHC2_DATA3_DMA_UART4_RTS_B SC_P_USDHC2_DATA3 1 +#define SC_P_USDHC2_DATA3_LSIO_GPIO5_IO29 SC_P_USDHC2_DATA3 3 +#define SC_P_ENET0_RGMII_TXC_CONN_ENET0_RGMII_TXC SC_P_ENET0_RGMII_TXC 0 +#define SC_P_ENET0_RGMII_TXC_CONN_ENET0_RCLK50M_OUT SC_P_ENET0_RGMII_TXC 1 +#define SC_P_ENET0_RGMII_TXC_CONN_ENET0_RCLK50M_IN SC_P_ENET0_RGMII_TXC 2 +#define SC_P_ENET0_RGMII_TXC_LSIO_GPIO5_IO30 SC_P_ENET0_RGMII_TXC 3 +#define SC_P_ENET0_RGMII_TX_CTL_CONN_ENET0_RGMII_TX_CTL SC_P_ENET0_RGMII_TX_CTL 0 +#define SC_P_ENET0_RGMII_TX_CTL_LSIO_GPIO5_IO31 SC_P_ENET0_RGMII_TX_CTL 3 +#define SC_P_ENET0_RGMII_TXD0_CONN_ENET0_RGMII_TXD0 SC_P_ENET0_RGMII_TXD0 0 +#define SC_P_ENET0_RGMII_TXD0_LSIO_GPIO6_IO00 SC_P_ENET0_RGMII_TXD0 3 +#define SC_P_ENET0_RGMII_TXD1_CONN_ENET0_RGMII_TXD1 SC_P_ENET0_RGMII_TXD1 0 +#define SC_P_ENET0_RGMII_TXD1_LSIO_GPIO6_IO01 SC_P_ENET0_RGMII_TXD1 3 +#define SC_P_ENET0_RGMII_TXD2_CONN_ENET0_RGMII_TXD2 SC_P_ENET0_RGMII_TXD2 0 +#define SC_P_ENET0_RGMII_TXD2_DMA_UART3_TX SC_P_ENET0_RGMII_TXD2 1 +#define SC_P_ENET0_RGMII_TXD2_VPU_TSI_S1_VID SC_P_ENET0_RGMII_TXD2 2 +#define SC_P_ENET0_RGMII_TXD2_LSIO_GPIO6_IO02 SC_P_ENET0_RGMII_TXD2 3 +#define SC_P_ENET0_RGMII_TXD3_CONN_ENET0_RGMII_TXD3 SC_P_ENET0_RGMII_TXD3 0 +#define SC_P_ENET0_RGMII_TXD3_DMA_UART3_RTS_B SC_P_ENET0_RGMII_TXD3 1 +#define SC_P_ENET0_RGMII_TXD3_VPU_TSI_S1_SYNC SC_P_ENET0_RGMII_TXD3 2 +#define SC_P_ENET0_RGMII_TXD3_LSIO_GPIO6_IO03 SC_P_ENET0_RGMII_TXD3 3 +#define SC_P_ENET0_RGMII_RXC_CONN_ENET0_RGMII_RXC SC_P_ENET0_RGMII_RXC 0 +#define SC_P_ENET0_RGMII_RXC_DMA_UART3_CTS_B SC_P_ENET0_RGMII_RXC 1 +#define SC_P_ENET0_RGMII_RXC_VPU_TSI_S1_DATA SC_P_ENET0_RGMII_RXC 2 +#define SC_P_ENET0_RGMII_RXC_LSIO_GPIO6_IO04 SC_P_ENET0_RGMII_RXC 3 +#define SC_P_ENET0_RGMII_RX_CTL_CONN_ENET0_RGMII_RX_CTL SC_P_ENET0_RGMII_RX_CTL 0 +#define SC_P_ENET0_RGMII_RX_CTL_VPU_TSI_S0_VID SC_P_ENET0_RGMII_RX_CTL 2 +#define SC_P_ENET0_RGMII_RX_CTL_LSIO_GPIO6_IO05 SC_P_ENET0_RGMII_RX_CTL 3 +#define SC_P_ENET0_RGMII_RXD0_CONN_ENET0_RGMII_RXD0 SC_P_ENET0_RGMII_RXD0 0 +#define SC_P_ENET0_RGMII_RXD0_VPU_TSI_S0_SYNC SC_P_ENET0_RGMII_RXD0 2 +#define SC_P_ENET0_RGMII_RXD0_LSIO_GPIO6_IO06 SC_P_ENET0_RGMII_RXD0 3 +#define SC_P_ENET0_RGMII_RXD1_CONN_ENET0_RGMII_RXD1 SC_P_ENET0_RGMII_RXD1 0 +#define SC_P_ENET0_RGMII_RXD1_VPU_TSI_S0_DATA SC_P_ENET0_RGMII_RXD1 2 +#define SC_P_ENET0_RGMII_RXD1_LSIO_GPIO6_IO07 SC_P_ENET0_RGMII_RXD1 3 +#define SC_P_ENET0_RGMII_RXD2_CONN_ENET0_RGMII_RXD2 SC_P_ENET0_RGMII_RXD2 0 +#define SC_P_ENET0_RGMII_RXD2_CONN_ENET0_RMII_RX_ER SC_P_ENET0_RGMII_RXD2 1 +#define SC_P_ENET0_RGMII_RXD2_VPU_TSI_S0_CLK SC_P_ENET0_RGMII_RXD2 2 +#define SC_P_ENET0_RGMII_RXD2_LSIO_GPIO6_IO08 SC_P_ENET0_RGMII_RXD2 3 +#define SC_P_ENET0_RGMII_RXD3_CONN_ENET0_RGMII_RXD3 SC_P_ENET0_RGMII_RXD3 0 +#define SC_P_ENET0_RGMII_RXD3_DMA_UART3_RX SC_P_ENET0_RGMII_RXD3 1 +#define SC_P_ENET0_RGMII_RXD3_VPU_TSI_S1_CLK SC_P_ENET0_RGMII_RXD3 2 +#define SC_P_ENET0_RGMII_RXD3_LSIO_GPIO6_IO09 SC_P_ENET0_RGMII_RXD3 3 +#define SC_P_ENET1_RGMII_TXC_CONN_ENET1_RGMII_TXC SC_P_ENET1_RGMII_TXC 0 +#define SC_P_ENET1_RGMII_TXC_CONN_ENET1_RCLK50M_OUT SC_P_ENET1_RGMII_TXC 1 +#define SC_P_ENET1_RGMII_TXC_CONN_ENET1_RCLK50M_IN SC_P_ENET1_RGMII_TXC 2 +#define SC_P_ENET1_RGMII_TXC_LSIO_GPIO6_IO10 SC_P_ENET1_RGMII_TXC 3 +#define SC_P_ENET1_RGMII_TX_CTL_CONN_ENET1_RGMII_TX_CTL SC_P_ENET1_RGMII_TX_CTL 0 +#define SC_P_ENET1_RGMII_TX_CTL_LSIO_GPIO6_IO11 SC_P_ENET1_RGMII_TX_CTL 3 +#define SC_P_ENET1_RGMII_TXD0_CONN_ENET1_RGMII_TXD0 SC_P_ENET1_RGMII_TXD0 0 +#define SC_P_ENET1_RGMII_TXD0_LSIO_GPIO6_IO12 SC_P_ENET1_RGMII_TXD0 3 +#define SC_P_ENET1_RGMII_TXD1_CONN_ENET1_RGMII_TXD1 SC_P_ENET1_RGMII_TXD1 0 +#define SC_P_ENET1_RGMII_TXD1_LSIO_GPIO6_IO13 SC_P_ENET1_RGMII_TXD1 3 +#define SC_P_ENET1_RGMII_TXD2_CONN_ENET1_RGMII_TXD2 SC_P_ENET1_RGMII_TXD2 0 +#define SC_P_ENET1_RGMII_TXD2_DMA_UART3_TX SC_P_ENET1_RGMII_TXD2 1 +#define SC_P_ENET1_RGMII_TXD2_VPU_TSI_S1_VID SC_P_ENET1_RGMII_TXD2 2 +#define SC_P_ENET1_RGMII_TXD2_LSIO_GPIO6_IO14 SC_P_ENET1_RGMII_TXD2 3 +#define SC_P_ENET1_RGMII_TXD3_CONN_ENET1_RGMII_TXD3 SC_P_ENET1_RGMII_TXD3 0 +#define SC_P_ENET1_RGMII_TXD3_DMA_UART3_RTS_B SC_P_ENET1_RGMII_TXD3 1 +#define SC_P_ENET1_RGMII_TXD3_VPU_TSI_S1_SYNC SC_P_ENET1_RGMII_TXD3 2 +#define SC_P_ENET1_RGMII_TXD3_LSIO_GPIO6_IO15 SC_P_ENET1_RGMII_TXD3 3 +#define SC_P_ENET1_RGMII_RXC_CONN_ENET1_RGMII_RXC SC_P_ENET1_RGMII_RXC 0 +#define SC_P_ENET1_RGMII_RXC_DMA_UART3_CTS_B SC_P_ENET1_RGMII_RXC 1 +#define SC_P_ENET1_RGMII_RXC_VPU_TSI_S1_DATA SC_P_ENET1_RGMII_RXC 2 +#define SC_P_ENET1_RGMII_RXC_LSIO_GPIO6_IO16 SC_P_ENET1_RGMII_RXC 3 +#define SC_P_ENET1_RGMII_RX_CTL_CONN_ENET1_RGMII_RX_CTL SC_P_ENET1_RGMII_RX_CTL 0 +#define SC_P_ENET1_RGMII_RX_CTL_VPU_TSI_S0_VID SC_P_ENET1_RGMII_RX_CTL 2 +#define SC_P_ENET1_RGMII_RX_CTL_LSIO_GPIO6_IO17 SC_P_ENET1_RGMII_RX_CTL 3 +#define SC_P_ENET1_RGMII_RXD0_CONN_ENET1_RGMII_RXD0 SC_P_ENET1_RGMII_RXD0 0 +#define SC_P_ENET1_RGMII_RXD0_VPU_TSI_S0_SYNC SC_P_ENET1_RGMII_RXD0 2 +#define SC_P_ENET1_RGMII_RXD0_LSIO_GPIO6_IO18 SC_P_ENET1_RGMII_RXD0 3 +#define SC_P_ENET1_RGMII_RXD1_CONN_ENET1_RGMII_RXD1 SC_P_ENET1_RGMII_RXD1 0 +#define SC_P_ENET1_RGMII_RXD1_VPU_TSI_S0_DATA SC_P_ENET1_RGMII_RXD1 2 +#define SC_P_ENET1_RGMII_RXD1_LSIO_GPIO6_IO19 SC_P_ENET1_RGMII_RXD1 3 +#define SC_P_ENET1_RGMII_RXD2_CONN_ENET1_RGMII_RXD2 SC_P_ENET1_RGMII_RXD2 0 +#define SC_P_ENET1_RGMII_RXD2_CONN_ENET1_RMII_RX_ER SC_P_ENET1_RGMII_RXD2 1 +#define SC_P_ENET1_RGMII_RXD2_VPU_TSI_S0_CLK SC_P_ENET1_RGMII_RXD2 2 +#define SC_P_ENET1_RGMII_RXD2_LSIO_GPIO6_IO20 SC_P_ENET1_RGMII_RXD2 3 +#define SC_P_ENET1_RGMII_RXD3_CONN_ENET1_RGMII_RXD3 SC_P_ENET1_RGMII_RXD3 0 +#define SC_P_ENET1_RGMII_RXD3_DMA_UART3_RX SC_P_ENET1_RGMII_RXD3 1 +#define SC_P_ENET1_RGMII_RXD3_VPU_TSI_S1_CLK SC_P_ENET1_RGMII_RXD3 2 +#define SC_P_ENET1_RGMII_RXD3_LSIO_GPIO6_IO21 SC_P_ENET1_RGMII_RXD3 3 +/*@}*/ + +#endif /* SC_PADS_H */ + diff --git a/include/dt-bindings/pinctrl/pads-imx8qxp.h b/include/dt-bindings/pinctrl/pads-imx8qxp.h new file mode 100644 index 0000000000..8049735841 --- /dev/null +++ b/include/dt-bindings/pinctrl/pads-imx8qxp.h @@ -0,0 +1,770 @@ +/* + * Copyright (C) 2016 Freescale Semiconductor, Inc. + * Copyright 2017-2018 NXP + * + * SPDX-License-Identifier: GPL-2.0+ + */ + +/*! + * Header file used to configure SoC pad list. + */ + +#ifndef SC_PADS_H +#define SC_PADS_H + +/* Includes */ + +/* Defines */ + +/*! + * @name Pad Definitions + */ +/*@{*/ +#define SC_P_PCIE_CTRL0_PERST_B 0 /*!< HSIO.PCIE0.PERST_B, LSIO.GPIO4.IO00 */ +#define SC_P_PCIE_CTRL0_CLKREQ_B 1 /*!< HSIO.PCIE0.CLKREQ_B, LSIO.GPIO4.IO01 */ +#define SC_P_PCIE_CTRL0_WAKE_B 2 /*!< HSIO.PCIE0.WAKE_B, LSIO.GPIO4.IO02 */ +#define SC_P_COMP_CTL_GPIO_1V8_3V3_PCIESEP 3 /*!< */ +#define SC_P_USB_SS3_TC0 4 /*!< ADMA.I2C1.SCL, CONN.USB_OTG1.PWR, CONN.USB_OTG2.PWR, LSIO.GPIO4.IO03 */ +#define SC_P_USB_SS3_TC1 5 /*!< ADMA.I2C1.SCL, CONN.USB_OTG2.PWR, LSIO.GPIO4.IO04 */ +#define SC_P_USB_SS3_TC2 6 /*!< ADMA.I2C1.SDA, CONN.USB_OTG1.OC, CONN.USB_OTG2.OC, LSIO.GPIO4.IO05 */ +#define SC_P_USB_SS3_TC3 7 /*!< ADMA.I2C1.SDA, CONN.USB_OTG2.OC, LSIO.GPIO4.IO06 */ +#define SC_P_COMP_CTL_GPIO_3V3_USB3IO 8 /*!< */ +#define SC_P_EMMC0_CLK 9 /*!< CONN.EMMC0.CLK, CONN.NAND.READY_B, LSIO.GPIO4.IO07 */ +#define SC_P_EMMC0_CMD 10 /*!< CONN.EMMC0.CMD, CONN.NAND.DQS, LSIO.GPIO4.IO08 */ +#define SC_P_EMMC0_DATA0 11 /*!< CONN.EMMC0.DATA0, CONN.NAND.DATA00, LSIO.GPIO4.IO09 */ +#define SC_P_EMMC0_DATA1 12 /*!< CONN.EMMC0.DATA1, CONN.NAND.DATA01, LSIO.GPIO4.IO10 */ +#define SC_P_EMMC0_DATA2 13 /*!< CONN.EMMC0.DATA2, CONN.NAND.DATA02, LSIO.GPIO4.IO11 */ +#define SC_P_EMMC0_DATA3 14 /*!< CONN.EMMC0.DATA3, CONN.NAND.DATA03, LSIO.GPIO4.IO12 */ +#define SC_P_COMP_CTL_GPIO_1V8_3V3_SD1FIX0 15 /*!< */ +#define SC_P_EMMC0_DATA4 16 /*!< CONN.EMMC0.DATA4, CONN.NAND.DATA04, CONN.EMMC0.WP, LSIO.GPIO4.IO13 */ +#define SC_P_EMMC0_DATA5 17 /*!< CONN.EMMC0.DATA5, CONN.NAND.DATA05, CONN.EMMC0.VSELECT, LSIO.GPIO4.IO14 */ +#define SC_P_EMMC0_DATA6 18 /*!< CONN.EMMC0.DATA6, CONN.NAND.DATA06, CONN.MLB.CLK, LSIO.GPIO4.IO15 */ +#define SC_P_EMMC0_DATA7 19 /*!< CONN.EMMC0.DATA7, CONN.NAND.DATA07, CONN.MLB.SIG, LSIO.GPIO4.IO16 */ +#define SC_P_EMMC0_STROBE 20 /*!< CONN.EMMC0.STROBE, CONN.NAND.CLE, CONN.MLB.DATA, LSIO.GPIO4.IO17 */ +#define SC_P_EMMC0_RESET_B 21 /*!< CONN.EMMC0.RESET_B, CONN.NAND.WP_B, LSIO.GPIO4.IO18 */ +#define SC_P_COMP_CTL_GPIO_1V8_3V3_SD1FIX1 22 /*!< */ +#define SC_P_USDHC1_RESET_B 23 /*!< CONN.USDHC1.RESET_B, CONN.NAND.RE_N, ADMA.SPI2.SCK, LSIO.GPIO4.IO19 */ +#define SC_P_USDHC1_VSELECT 24 /*!< CONN.USDHC1.VSELECT, CONN.NAND.RE_P, ADMA.SPI2.SDO, CONN.NAND.RE_B, LSIO.GPIO4.IO20 */ +#define SC_P_CTL_NAND_RE_P_N 25 /*!< */ +#define SC_P_USDHC1_WP 26 /*!< CONN.USDHC1.WP, CONN.NAND.DQS_N, ADMA.SPI2.SDI, LSIO.GPIO4.IO21 */ +#define SC_P_USDHC1_CD_B 27 /*!< CONN.USDHC1.CD_B, CONN.NAND.DQS_P, ADMA.SPI2.CS0, CONN.NAND.DQS, LSIO.GPIO4.IO22 */ +#define SC_P_CTL_NAND_DQS_P_N 28 /*!< */ +#define SC_P_COMP_CTL_GPIO_1V8_3V3_VSELSEP 29 /*!< */ +#define SC_P_USDHC1_CLK 30 /*!< CONN.USDHC1.CLK, ADMA.UART3.RX, LSIO.GPIO4.IO23 */ +#define SC_P_USDHC1_CMD 31 /*!< CONN.USDHC1.CMD, CONN.NAND.CE0_B, ADMA.MQS.R, LSIO.GPIO4.IO24 */ +#define SC_P_USDHC1_DATA0 32 /*!< CONN.USDHC1.DATA0, CONN.NAND.CE1_B, ADMA.MQS.L, LSIO.GPIO4.IO25 */ +#define SC_P_USDHC1_DATA1 33 /*!< CONN.USDHC1.DATA1, CONN.NAND.RE_B, ADMA.UART3.TX, LSIO.GPIO4.IO26 */ +#define SC_P_USDHC1_DATA2 34 /*!< CONN.USDHC1.DATA2, CONN.NAND.WE_B, ADMA.UART3.CTS_B, LSIO.GPIO4.IO27 */ +#define SC_P_USDHC1_DATA3 35 /*!< CONN.USDHC1.DATA3, CONN.NAND.ALE, ADMA.UART3.RTS_B, LSIO.GPIO4.IO28 */ +#define SC_P_COMP_CTL_GPIO_1V8_3V3_VSEL3 36 /*!< */ +#define SC_P_ENET0_RGMII_TXC 37 /*!< CONN.ENET0.RGMII_TXC, CONN.ENET0.RCLK50M_OUT, CONN.ENET0.RCLK50M_IN, CONN.NAND.CE1_B, LSIO.GPIO4.IO29 */ +#define SC_P_ENET0_RGMII_TX_CTL 38 /*!< CONN.ENET0.RGMII_TX_CTL, CONN.USDHC1.RESET_B, LSIO.GPIO4.IO30 */ +#define SC_P_ENET0_RGMII_TXD0 39 /*!< CONN.ENET0.RGMII_TXD0, CONN.USDHC1.VSELECT, LSIO.GPIO4.IO31 */ +#define SC_P_ENET0_RGMII_TXD1 40 /*!< CONN.ENET0.RGMII_TXD1, CONN.USDHC1.WP, LSIO.GPIO5.IO00 */ +#define SC_P_ENET0_RGMII_TXD2 41 /*!< CONN.ENET0.RGMII_TXD2, CONN.MLB.CLK, CONN.NAND.CE0_B, CONN.USDHC1.CD_B, LSIO.GPIO5.IO01 */ +#define SC_P_ENET0_RGMII_TXD3 42 /*!< CONN.ENET0.RGMII_TXD3, CONN.MLB.SIG, CONN.NAND.RE_B, LSIO.GPIO5.IO02 */ +#define SC_P_COMP_CTL_GPIO_1V8_3V3_ENET_ENETB0 43 /*!< */ +#define SC_P_ENET0_RGMII_RXC 44 /*!< CONN.ENET0.RGMII_RXC, CONN.MLB.DATA, CONN.NAND.WE_B, CONN.USDHC1.CLK, LSIO.GPIO5.IO03 */ +#define SC_P_ENET0_RGMII_RX_CTL 45 /*!< CONN.ENET0.RGMII_RX_CTL, CONN.USDHC1.CMD, LSIO.GPIO5.IO04 */ +#define SC_P_ENET0_RGMII_RXD0 46 /*!< CONN.ENET0.RGMII_RXD0, CONN.USDHC1.DATA0, LSIO.GPIO5.IO05 */ +#define SC_P_ENET0_RGMII_RXD1 47 /*!< CONN.ENET0.RGMII_RXD1, CONN.USDHC1.DATA1, LSIO.GPIO5.IO06 */ +#define SC_P_ENET0_RGMII_RXD2 48 /*!< CONN.ENET0.RGMII_RXD2, CONN.ENET0.RMII_RX_ER, CONN.USDHC1.DATA2, LSIO.GPIO5.IO07 */ +#define SC_P_ENET0_RGMII_RXD3 49 /*!< CONN.ENET0.RGMII_RXD3, CONN.NAND.ALE, CONN.USDHC1.DATA3, LSIO.GPIO5.IO08 */ +#define SC_P_COMP_CTL_GPIO_1V8_3V3_ENET_ENETB1 50 /*!< */ +#define SC_P_ENET0_REFCLK_125M_25M 51 /*!< CONN.ENET0.REFCLK_125M_25M, CONN.ENET0.PPS, CONN.ENET1.PPS, LSIO.GPIO5.IO09 */ +#define SC_P_ENET0_MDIO 52 /*!< CONN.ENET0.MDIO, ADMA.I2C3.SDA, CONN.ENET1.MDIO, LSIO.GPIO5.IO10 */ +#define SC_P_ENET0_MDC 53 /*!< CONN.ENET0.MDC, ADMA.I2C3.SCL, CONN.ENET1.MDC, LSIO.GPIO5.IO11 */ +#define SC_P_COMP_CTL_GPIO_1V8_3V3_GPIOCT 54 /*!< */ +#define SC_P_ESAI0_FSR 55 /*!< ADMA.ESAI0.FSR, CONN.ENET1.RCLK50M_OUT, ADMA.LCDIF.D00, CONN.ENET1.RGMII_TXC, CONN.ENET1.RCLK50M_IN */ +#define SC_P_ESAI0_FST 56 /*!< ADMA.ESAI0.FST, CONN.MLB.CLK, ADMA.LCDIF.D01, CONN.ENET1.RGMII_TXD2, LSIO.GPIO0.IO01 */ +#define SC_P_ESAI0_SCKR 57 /*!< ADMA.ESAI0.SCKR, ADMA.LCDIF.D02, CONN.ENET1.RGMII_TX_CTL, LSIO.GPIO0.IO02 */ +#define SC_P_ESAI0_SCKT 58 /*!< ADMA.ESAI0.SCKT, CONN.MLB.SIG, ADMA.LCDIF.D03, CONN.ENET1.RGMII_TXD3, LSIO.GPIO0.IO03 */ +#define SC_P_ESAI0_TX0 59 /*!< ADMA.ESAI0.TX0, CONN.MLB.DATA, ADMA.LCDIF.D04, CONN.ENET1.RGMII_RXC, LSIO.GPIO0.IO04 */ +#define SC_P_ESAI0_TX1 60 /*!< ADMA.ESAI0.TX1, ADMA.LCDIF.D05, CONN.ENET1.RGMII_RXD3, LSIO.GPIO0.IO05 */ +#define SC_P_ESAI0_TX2_RX3 61 /*!< ADMA.ESAI0.TX2_RX3, CONN.ENET1.RMII_RX_ER, ADMA.LCDIF.D06, CONN.ENET1.RGMII_RXD2, LSIO.GPIO0.IO06 */ +#define SC_P_ESAI0_TX3_RX2 62 /*!< ADMA.ESAI0.TX3_RX2, ADMA.LCDIF.D07, CONN.ENET1.RGMII_RXD1, LSIO.GPIO0.IO07 */ +#define SC_P_ESAI0_TX4_RX1 63 /*!< ADMA.ESAI0.TX4_RX1, ADMA.LCDIF.D08, CONN.ENET1.RGMII_TXD0, LSIO.GPIO0.IO08 */ +#define SC_P_ESAI0_TX5_RX0 64 /*!< ADMA.ESAI0.TX5_RX0, ADMA.LCDIF.D09, CONN.ENET1.RGMII_TXD1, LSIO.GPIO0.IO09 */ +#define SC_P_SPDIF0_RX 65 /*!< ADMA.SPDIF0.RX, ADMA.MQS.R, ADMA.LCDIF.D10, CONN.ENET1.RGMII_RXD0, LSIO.GPIO0.IO10 */ +#define SC_P_SPDIF0_TX 66 /*!< ADMA.SPDIF0.TX, ADMA.MQS.L, ADMA.LCDIF.D11, CONN.ENET1.RGMII_RX_CTL, LSIO.GPIO0.IO11 */ +#define SC_P_SPDIF0_EXT_CLK 67 /*!< ADMA.SPDIF0.EXT_CLK, ADMA.LCDIF.D12, CONN.ENET1.REFCLK_125M_25M, LSIO.GPIO0.IO12 */ +#define SC_P_COMP_CTL_GPIO_1V8_3V3_GPIORHB 68 /*!< */ +#define SC_P_SPI3_SCK 69 /*!< ADMA.SPI3.SCK, ADMA.LCDIF.D13, LSIO.GPIO0.IO13 */ +#define SC_P_SPI3_SDO 70 /*!< ADMA.SPI3.SDO, ADMA.LCDIF.D14, LSIO.GPIO0.IO14 */ +#define SC_P_SPI3_SDI 71 /*!< ADMA.SPI3.SDI, ADMA.LCDIF.D15, LSIO.GPIO0.IO15 */ +#define SC_P_SPI3_CS0 72 /*!< ADMA.SPI3.CS0, ADMA.ACM.MCLK_OUT1, ADMA.LCDIF.HSYNC, LSIO.GPIO0.IO16 */ +#define SC_P_SPI3_CS1 73 /*!< ADMA.SPI3.CS1, ADMA.I2C3.SCL, ADMA.LCDIF.RESET, ADMA.SPI2.CS0, ADMA.LCDIF.D16 */ +#define SC_P_MCLK_IN1 74 /*!< ADMA.ACM.MCLK_IN1, ADMA.I2C3.SDA, ADMA.LCDIF.EN, ADMA.SPI2.SCK, ADMA.LCDIF.D17 */ +#define SC_P_MCLK_IN0 75 /*!< ADMA.ACM.MCLK_IN0, ADMA.ESAI0.RX_HF_CLK, ADMA.LCDIF.VSYNC, ADMA.SPI2.SDI, LSIO.GPIO0.IO19 */ +#define SC_P_MCLK_OUT0 76 /*!< ADMA.ACM.MCLK_OUT0, ADMA.ESAI0.TX_HF_CLK, ADMA.LCDIF.CLK, ADMA.SPI2.SDO, LSIO.GPIO0.IO20 */ +#define SC_P_UART1_TX 77 /*!< ADMA.UART1.TX, LSIO.PWM0.OUT, LSIO.GPT0.CAPTURE, LSIO.GPIO0.IO21 */ +#define SC_P_UART1_RX 78 /*!< ADMA.UART1.RX, LSIO.PWM1.OUT, LSIO.GPT0.COMPARE, LSIO.GPT1.CLK, LSIO.GPIO0.IO22 */ +#define SC_P_UART1_RTS_B 79 /*!< ADMA.UART1.RTS_B, LSIO.PWM2.OUT, ADMA.LCDIF.D16, LSIO.GPT1.CAPTURE, LSIO.GPT0.CLK */ +#define SC_P_UART1_CTS_B 80 /*!< ADMA.UART1.CTS_B, LSIO.PWM3.OUT, ADMA.LCDIF.D17, LSIO.GPT1.COMPARE, LSIO.GPIO0.IO24 */ +#define SC_P_COMP_CTL_GPIO_1V8_3V3_GPIORHK 81 /*!< */ +#define SC_P_SAI0_TXD 82 /*!< ADMA.SAI0.TXD, ADMA.SAI1.RXC, ADMA.SPI1.SDO, ADMA.LCDIF.D18, LSIO.GPIO0.IO25 */ +#define SC_P_SAI0_TXC 83 /*!< ADMA.SAI0.TXC, ADMA.SAI1.TXD, ADMA.SPI1.SDI, ADMA.LCDIF.D19, LSIO.GPIO0.IO26 */ +#define SC_P_SAI0_RXD 84 /*!< ADMA.SAI0.RXD, ADMA.SAI1.RXFS, ADMA.SPI1.CS0, ADMA.LCDIF.D20, LSIO.GPIO0.IO27 */ +#define SC_P_SAI0_TXFS 85 /*!< ADMA.SAI0.TXFS, ADMA.SPI2.CS1, ADMA.SPI1.SCK, LSIO.GPIO0.IO28 */ +#define SC_P_SAI1_RXD 86 /*!< ADMA.SAI1.RXD, ADMA.SAI0.RXFS, ADMA.SPI1.CS1, ADMA.LCDIF.D21, LSIO.GPIO0.IO29 */ +#define SC_P_SAI1_RXC 87 /*!< ADMA.SAI1.RXC, ADMA.SAI1.TXC, ADMA.LCDIF.D22, LSIO.GPIO0.IO30 */ +#define SC_P_SAI1_RXFS 88 /*!< ADMA.SAI1.RXFS, ADMA.SAI1.TXFS, ADMA.LCDIF.D23, LSIO.GPIO0.IO31 */ +#define SC_P_SPI2_CS0 89 /*!< ADMA.SPI2.CS0, LSIO.GPIO1.IO00 */ +#define SC_P_SPI2_SDO 90 /*!< ADMA.SPI2.SDO, LSIO.GPIO1.IO01 */ +#define SC_P_SPI2_SDI 91 /*!< ADMA.SPI2.SDI, LSIO.GPIO1.IO02 */ +#define SC_P_SPI2_SCK 92 /*!< ADMA.SPI2.SCK, LSIO.GPIO1.IO03 */ +#define SC_P_SPI0_SCK 93 /*!< ADMA.SPI0.SCK, ADMA.SAI0.TXC, M40.I2C0.SCL, M40.GPIO0.IO00, LSIO.GPIO1.IO04 */ +#define SC_P_SPI0_SDI 94 /*!< ADMA.SPI0.SDI, ADMA.SAI0.TXD, M40.TPM0.CH0, M40.GPIO0.IO02, LSIO.GPIO1.IO05 */ +#define SC_P_SPI0_SDO 95 /*!< ADMA.SPI0.SDO, ADMA.SAI0.TXFS, M40.I2C0.SDA, M40.GPIO0.IO01, LSIO.GPIO1.IO06 */ +#define SC_P_SPI0_CS1 96 /*!< ADMA.SPI0.CS1, ADMA.SAI0.RXC, ADMA.SAI1.TXD, ADMA.LCD_PWM0.OUT, LSIO.GPIO1.IO07 */ +#define SC_P_SPI0_CS0 97 /*!< ADMA.SPI0.CS0, ADMA.SAI0.RXD, M40.TPM0.CH1, M40.GPIO0.IO03, LSIO.GPIO1.IO08 */ +#define SC_P_COMP_CTL_GPIO_1V8_3V3_GPIORHT 98 /*!< */ +#define SC_P_ADC_IN1 99 /*!< ADMA.ADC.IN1, M40.I2C0.SDA, M40.GPIO0.IO01, LSIO.GPIO1.IO09 */ +#define SC_P_ADC_IN0 100 /*!< ADMA.ADC.IN0, M40.I2C0.SCL, M40.GPIO0.IO00, LSIO.GPIO1.IO10 */ +#define SC_P_ADC_IN3 101 /*!< ADMA.ADC.IN3, M40.UART0.TX, M40.GPIO0.IO03, ADMA.ACM.MCLK_OUT0, LSIO.GPIO1.IO11 */ +#define SC_P_ADC_IN2 102 /*!< ADMA.ADC.IN2, M40.UART0.RX, M40.GPIO0.IO02, ADMA.ACM.MCLK_IN0, LSIO.GPIO1.IO12 */ +#define SC_P_ADC_IN5 103 /*!< ADMA.ADC.IN5, M40.TPM0.CH1, M40.GPIO0.IO05, LSIO.GPIO1.IO13 */ +#define SC_P_ADC_IN4 104 /*!< ADMA.ADC.IN4, M40.TPM0.CH0, M40.GPIO0.IO04, LSIO.GPIO1.IO14 */ +#define SC_P_FLEXCAN0_RX 105 /*!< ADMA.FLEXCAN0.RX, ADMA.SAI2.RXC, ADMA.UART0.RTS_B, ADMA.SAI1.TXC, LSIO.GPIO1.IO15 */ +#define SC_P_FLEXCAN0_TX 106 /*!< ADMA.FLEXCAN0.TX, ADMA.SAI2.RXD, ADMA.UART0.CTS_B, ADMA.SAI1.TXFS, LSIO.GPIO1.IO16 */ +#define SC_P_FLEXCAN1_RX 107 /*!< ADMA.FLEXCAN1.RX, ADMA.SAI2.RXFS, ADMA.FTM.CH2, ADMA.SAI1.TXD, LSIO.GPIO1.IO17 */ +#define SC_P_FLEXCAN1_TX 108 /*!< ADMA.FLEXCAN1.TX, ADMA.SAI3.RXC, ADMA.DMA0.REQ_IN0, ADMA.SAI1.RXD, LSIO.GPIO1.IO18 */ +#define SC_P_FLEXCAN2_RX 109 /*!< ADMA.FLEXCAN2.RX, ADMA.SAI3.RXD, ADMA.UART3.RX, ADMA.SAI1.RXFS, LSIO.GPIO1.IO19 */ +#define SC_P_FLEXCAN2_TX 110 /*!< ADMA.FLEXCAN2.TX, ADMA.SAI3.RXFS, ADMA.UART3.TX, ADMA.SAI1.RXC, LSIO.GPIO1.IO20 */ +#define SC_P_UART0_RX 111 /*!< ADMA.UART0.RX, ADMA.MQS.R, ADMA.FLEXCAN0.RX, SCU.UART0.RX, LSIO.GPIO1.IO21 */ +#define SC_P_UART0_TX 112 /*!< ADMA.UART0.TX, ADMA.MQS.L, ADMA.FLEXCAN0.TX, SCU.UART0.TX, LSIO.GPIO1.IO22 */ +#define SC_P_UART2_TX 113 /*!< ADMA.UART2.TX, ADMA.FTM.CH1, ADMA.FLEXCAN1.TX, LSIO.GPIO1.IO23 */ +#define SC_P_UART2_RX 114 /*!< ADMA.UART2.RX, ADMA.FTM.CH0, ADMA.FLEXCAN1.RX, LSIO.GPIO1.IO24 */ +#define SC_P_COMP_CTL_GPIO_1V8_3V3_GPIOLH 115 /*!< */ +#define SC_P_MIPI_DSI0_I2C0_SCL 116 /*!< MIPI_DSI0.I2C0.SCL, MIPI_DSI1.GPIO0.IO02, LSIO.GPIO1.IO25 */ +#define SC_P_MIPI_DSI0_I2C0_SDA 117 /*!< MIPI_DSI0.I2C0.SDA, MIPI_DSI1.GPIO0.IO03, LSIO.GPIO1.IO26 */ +#define SC_P_MIPI_DSI0_GPIO0_00 118 /*!< MIPI_DSI0.GPIO0.IO00, ADMA.I2C1.SCL, MIPI_DSI0.PWM0.OUT, LSIO.GPIO1.IO27 */ +#define SC_P_MIPI_DSI0_GPIO0_01 119 /*!< MIPI_DSI0.GPIO0.IO01, ADMA.I2C1.SDA, LSIO.GPIO1.IO28 */ +#define SC_P_MIPI_DSI1_I2C0_SCL 120 /*!< MIPI_DSI1.I2C0.SCL, MIPI_DSI0.GPIO0.IO02, LSIO.GPIO1.IO29 */ +#define SC_P_MIPI_DSI1_I2C0_SDA 121 /*!< MIPI_DSI1.I2C0.SDA, MIPI_DSI0.GPIO0.IO03, LSIO.GPIO1.IO30 */ +#define SC_P_MIPI_DSI1_GPIO0_00 122 /*!< MIPI_DSI1.GPIO0.IO00, ADMA.I2C2.SCL, MIPI_DSI1.PWM0.OUT, LSIO.GPIO1.IO31 */ +#define SC_P_MIPI_DSI1_GPIO0_01 123 /*!< MIPI_DSI1.GPIO0.IO01, ADMA.I2C2.SDA, LSIO.GPIO2.IO00 */ +#define SC_P_COMP_CTL_GPIO_1V8_3V3_MIPIDSIGPIO 124 /*!< */ +#define SC_P_JTAG_TRST_B 125 /*!< SCU.JTAG.TRST_B, SCU.WDOG0.WDOG_OUT */ +#define SC_P_PMIC_I2C_SCL 126 /*!< SCU.PMIC_I2C.SCL, SCU.GPIO0.IOXX_PMIC_A35_ON, LSIO.GPIO2.IO01 */ +#define SC_P_PMIC_I2C_SDA 127 /*!< SCU.PMIC_I2C.SDA, SCU.GPIO0.IOXX_PMIC_GPU_ON, LSIO.GPIO2.IO02 */ +#define SC_P_PMIC_INT_B 128 /*!< SCU.DSC.PMIC_INT_B */ +#define SC_P_SCU_GPIO0_00 129 /*!< SCU.GPIO0.IO00, SCU.UART0.RX, M40.UART0.RX, ADMA.UART3.RX, LSIO.GPIO2.IO03 */ +#define SC_P_SCU_GPIO0_01 130 /*!< SCU.GPIO0.IO01, SCU.UART0.TX, M40.UART0.TX, ADMA.UART3.TX, SCU.WDOG0.WDOG_OUT */ +#define SC_P_SCU_PMIC_STANDBY 131 /*!< SCU.DSC.PMIC_STANDBY */ +#define SC_P_SCU_BOOT_MODE0 132 /*!< SCU.DSC.BOOT_MODE0 */ +#define SC_P_SCU_BOOT_MODE1 133 /*!< SCU.DSC.BOOT_MODE1 */ +#define SC_P_SCU_BOOT_MODE2 134 /*!< SCU.DSC.BOOT_MODE2, SCU.PMIC_I2C.SDA */ +#define SC_P_SCU_BOOT_MODE3 135 /*!< SCU.DSC.BOOT_MODE3, SCU.PMIC_I2C.SCL, SCU.DSC.RTC_CLOCK_OUTPUT_32K */ +#define SC_P_CSI_D00 136 /*!< CI_PI.D02, ADMA.SAI0.RXC */ +#define SC_P_CSI_D01 137 /*!< CI_PI.D03, ADMA.SAI0.RXD */ +#define SC_P_CSI_D02 138 /*!< CI_PI.D04, ADMA.SAI0.RXFS */ +#define SC_P_CSI_D03 139 /*!< CI_PI.D05, ADMA.SAI2.RXC */ +#define SC_P_CSI_D04 140 /*!< CI_PI.D06, ADMA.SAI2.RXD */ +#define SC_P_CSI_D05 141 /*!< CI_PI.D07, ADMA.SAI2.RXFS */ +#define SC_P_CSI_D06 142 /*!< CI_PI.D08, ADMA.SAI3.RXC */ +#define SC_P_CSI_D07 143 /*!< CI_PI.D09, ADMA.SAI3.RXD */ +#define SC_P_CSI_HSYNC 144 /*!< CI_PI.HSYNC, CI_PI.D00, ADMA.SAI3.RXFS */ +#define SC_P_CSI_VSYNC 145 /*!< CI_PI.VSYNC, CI_PI.D01 */ +#define SC_P_CSI_PCLK 146 /*!< CI_PI.PCLK, MIPI_CSI0.I2C0.SCL, ADMA.SPI1.SCK, LSIO.GPIO3.IO00 */ +#define SC_P_CSI_MCLK 147 /*!< CI_PI.MCLK, MIPI_CSI0.I2C0.SDA, ADMA.SPI1.SDO, LSIO.GPIO3.IO01 */ +#define SC_P_CSI_EN 148 /*!< CI_PI.EN, CI_PI.I2C.SCL, ADMA.I2C3.SCL, ADMA.SPI1.SDI, LSIO.GPIO3.IO02 */ +#define SC_P_CSI_RESET 149 /*!< CI_PI.RESET, CI_PI.I2C.SDA, ADMA.I2C3.SDA, ADMA.SPI1.CS0, LSIO.GPIO3.IO03 */ +#define SC_P_COMP_CTL_GPIO_1V8_3V3_GPIORHD 150 /*!< */ +#define SC_P_MIPI_CSI0_MCLK_OUT 151 /*!< MIPI_CSI0.ACM.MCLK_OUT, LSIO.GPIO3.IO04 */ +#define SC_P_MIPI_CSI0_I2C0_SCL 152 /*!< MIPI_CSI0.I2C0.SCL, MIPI_CSI0.GPIO0.IO02, LSIO.GPIO3.IO05 */ +#define SC_P_MIPI_CSI0_I2C0_SDA 153 /*!< MIPI_CSI0.I2C0.SDA, MIPI_CSI0.GPIO0.IO03, LSIO.GPIO3.IO06 */ +#define SC_P_MIPI_CSI0_GPIO0_01 154 /*!< MIPI_CSI0.GPIO0.IO01, ADMA.I2C0.SDA, LSIO.GPIO3.IO07 */ +#define SC_P_MIPI_CSI0_GPIO0_00 155 /*!< MIPI_CSI0.GPIO0.IO00, ADMA.I2C0.SCL, LSIO.GPIO3.IO08 */ +#define SC_P_QSPI0A_DATA0 156 /*!< LSIO.QSPI0A.DATA0, LSIO.GPIO3.IO09 */ +#define SC_P_QSPI0A_DATA1 157 /*!< LSIO.QSPI0A.DATA1, LSIO.GPIO3.IO10 */ +#define SC_P_QSPI0A_DATA2 158 /*!< LSIO.QSPI0A.DATA2, LSIO.GPIO3.IO11 */ +#define SC_P_QSPI0A_DATA3 159 /*!< LSIO.QSPI0A.DATA3, LSIO.GPIO3.IO12 */ +#define SC_P_QSPI0A_DQS 160 /*!< LSIO.QSPI0A.DQS, LSIO.GPIO3.IO13 */ +#define SC_P_QSPI0A_SS0_B 161 /*!< LSIO.QSPI0A.SS0_B, LSIO.GPIO3.IO14 */ +#define SC_P_QSPI0A_SS1_B 162 /*!< LSIO.QSPI0A.SS1_B, LSIO.GPIO3.IO15 */ +#define SC_P_QSPI0A_SCLK 163 /*!< LSIO.QSPI0A.SCLK, LSIO.GPIO3.IO16 */ +#define SC_P_COMP_CTL_GPIO_1V8_3V3_QSPI0A 164 /*!< */ +#define SC_P_QSPI0B_SCLK 165 /*!< LSIO.QSPI0B.SCLK, LSIO.QSPI1A.SCLK, LSIO.KPP0.COL0, LSIO.GPIO3.IO17 */ +#define SC_P_QSPI0B_DATA0 166 /*!< LSIO.QSPI0B.DATA0, LSIO.QSPI1A.DATA0, LSIO.KPP0.COL1, LSIO.GPIO3.IO18 */ +#define SC_P_QSPI0B_DATA1 167 /*!< LSIO.QSPI0B.DATA1, LSIO.QSPI1A.DATA1, LSIO.KPP0.COL2, LSIO.GPIO3.IO19 */ +#define SC_P_QSPI0B_DATA2 168 /*!< LSIO.QSPI0B.DATA2, LSIO.QSPI1A.DATA2, LSIO.KPP0.COL3, LSIO.GPIO3.IO20 */ +#define SC_P_QSPI0B_DATA3 169 /*!< LSIO.QSPI0B.DATA3, LSIO.QSPI1A.DATA3, LSIO.KPP0.ROW0, LSIO.GPIO3.IO21 */ +#define SC_P_QSPI0B_DQS 170 /*!< LSIO.QSPI0B.DQS, LSIO.QSPI1A.DQS, LSIO.KPP0.ROW1, LSIO.GPIO3.IO22 */ +#define SC_P_QSPI0B_SS0_B 171 /*!< LSIO.QSPI0B.SS0_B, LSIO.QSPI1A.SS0_B, LSIO.KPP0.ROW2, LSIO.GPIO3.IO23 */ +#define SC_P_QSPI0B_SS1_B 172 /*!< LSIO.QSPI0B.SS1_B, LSIO.QSPI1A.SS1_B, LSIO.KPP0.ROW3, LSIO.GPIO3.IO24 */ +#define SC_P_COMP_CTL_GPIO_1V8_3V3_QSPI0B 173 /*!< */ +/*@}*/ + +/*! + * @name Pad Mux Definitions + * format: name padid padmux + */ +/*@{*/ +#define SC_P_PCIE_CTRL0_PERST_B_HSIO_PCIE0_PERST_B SC_P_PCIE_CTRL0_PERST_B 0 +#define SC_P_PCIE_CTRL0_PERST_B_LSIO_GPIO4_IO00 SC_P_PCIE_CTRL0_PERST_B 4 +#define SC_P_PCIE_CTRL0_CLKREQ_B_HSIO_PCIE0_CLKREQ_B SC_P_PCIE_CTRL0_CLKREQ_B 0 +#define SC_P_PCIE_CTRL0_CLKREQ_B_LSIO_GPIO4_IO01 SC_P_PCIE_CTRL0_CLKREQ_B 4 +#define SC_P_PCIE_CTRL0_WAKE_B_HSIO_PCIE0_WAKE_B SC_P_PCIE_CTRL0_WAKE_B 0 +#define SC_P_PCIE_CTRL0_WAKE_B_LSIO_GPIO4_IO02 SC_P_PCIE_CTRL0_WAKE_B 4 +#define SC_P_USB_SS3_TC0_ADMA_I2C1_SCL SC_P_USB_SS3_TC0 0 +#define SC_P_USB_SS3_TC0_CONN_USB_OTG1_PWR SC_P_USB_SS3_TC0 1 +#define SC_P_USB_SS3_TC0_CONN_USB_OTG2_PWR SC_P_USB_SS3_TC0 2 +#define SC_P_USB_SS3_TC0_LSIO_GPIO4_IO03 SC_P_USB_SS3_TC0 4 +#define SC_P_USB_SS3_TC1_ADMA_I2C1_SCL SC_P_USB_SS3_TC1 0 +#define SC_P_USB_SS3_TC1_CONN_USB_OTG2_PWR SC_P_USB_SS3_TC1 1 +#define SC_P_USB_SS3_TC1_LSIO_GPIO4_IO04 SC_P_USB_SS3_TC1 4 +#define SC_P_USB_SS3_TC2_ADMA_I2C1_SDA SC_P_USB_SS3_TC2 0 +#define SC_P_USB_SS3_TC2_CONN_USB_OTG1_OC SC_P_USB_SS3_TC2 1 +#define SC_P_USB_SS3_TC2_CONN_USB_OTG2_OC SC_P_USB_SS3_TC2 2 +#define SC_P_USB_SS3_TC2_LSIO_GPIO4_IO05 SC_P_USB_SS3_TC2 4 +#define SC_P_USB_SS3_TC3_ADMA_I2C1_SDA SC_P_USB_SS3_TC3 0 +#define SC_P_USB_SS3_TC3_CONN_USB_OTG2_OC SC_P_USB_SS3_TC3 1 +#define SC_P_USB_SS3_TC3_LSIO_GPIO4_IO06 SC_P_USB_SS3_TC3 4 +#define SC_P_EMMC0_CLK_CONN_EMMC0_CLK SC_P_EMMC0_CLK 0 +#define SC_P_EMMC0_CLK_CONN_NAND_READY_B SC_P_EMMC0_CLK 1 +#define SC_P_EMMC0_CLK_LSIO_GPIO4_IO07 SC_P_EMMC0_CLK 4 +#define SC_P_EMMC0_CMD_CONN_EMMC0_CMD SC_P_EMMC0_CMD 0 +#define SC_P_EMMC0_CMD_CONN_NAND_DQS SC_P_EMMC0_CMD 1 +#define SC_P_EMMC0_CMD_LSIO_GPIO4_IO08 SC_P_EMMC0_CMD 4 +#define SC_P_EMMC0_DATA0_CONN_EMMC0_DATA0 SC_P_EMMC0_DATA0 0 +#define SC_P_EMMC0_DATA0_CONN_NAND_DATA00 SC_P_EMMC0_DATA0 1 +#define SC_P_EMMC0_DATA0_LSIO_GPIO4_IO09 SC_P_EMMC0_DATA0 4 +#define SC_P_EMMC0_DATA1_CONN_EMMC0_DATA1 SC_P_EMMC0_DATA1 0 +#define SC_P_EMMC0_DATA1_CONN_NAND_DATA01 SC_P_EMMC0_DATA1 1 +#define SC_P_EMMC0_DATA1_LSIO_GPIO4_IO10 SC_P_EMMC0_DATA1 4 +#define SC_P_EMMC0_DATA2_CONN_EMMC0_DATA2 SC_P_EMMC0_DATA2 0 +#define SC_P_EMMC0_DATA2_CONN_NAND_DATA02 SC_P_EMMC0_DATA2 1 +#define SC_P_EMMC0_DATA2_LSIO_GPIO4_IO11 SC_P_EMMC0_DATA2 4 +#define SC_P_EMMC0_DATA3_CONN_EMMC0_DATA3 SC_P_EMMC0_DATA3 0 +#define SC_P_EMMC0_DATA3_CONN_NAND_DATA03 SC_P_EMMC0_DATA3 1 +#define SC_P_EMMC0_DATA3_LSIO_GPIO4_IO12 SC_P_EMMC0_DATA3 4 +#define SC_P_EMMC0_DATA4_CONN_EMMC0_DATA4 SC_P_EMMC0_DATA4 0 +#define SC_P_EMMC0_DATA4_CONN_NAND_DATA04 SC_P_EMMC0_DATA4 1 +#define SC_P_EMMC0_DATA4_CONN_EMMC0_WP SC_P_EMMC0_DATA4 3 +#define SC_P_EMMC0_DATA4_LSIO_GPIO4_IO13 SC_P_EMMC0_DATA4 4 +#define SC_P_EMMC0_DATA5_CONN_EMMC0_DATA5 SC_P_EMMC0_DATA5 0 +#define SC_P_EMMC0_DATA5_CONN_NAND_DATA05 SC_P_EMMC0_DATA5 1 +#define SC_P_EMMC0_DATA5_CONN_EMMC0_VSELECT SC_P_EMMC0_DATA5 3 +#define SC_P_EMMC0_DATA5_LSIO_GPIO4_IO14 SC_P_EMMC0_DATA5 4 +#define SC_P_EMMC0_DATA6_CONN_EMMC0_DATA6 SC_P_EMMC0_DATA6 0 +#define SC_P_EMMC0_DATA6_CONN_NAND_DATA06 SC_P_EMMC0_DATA6 1 +#define SC_P_EMMC0_DATA6_CONN_MLB_CLK SC_P_EMMC0_DATA6 3 +#define SC_P_EMMC0_DATA6_LSIO_GPIO4_IO15 SC_P_EMMC0_DATA6 4 +#define SC_P_EMMC0_DATA7_CONN_EMMC0_DATA7 SC_P_EMMC0_DATA7 0 +#define SC_P_EMMC0_DATA7_CONN_NAND_DATA07 SC_P_EMMC0_DATA7 1 +#define SC_P_EMMC0_DATA7_CONN_MLB_SIG SC_P_EMMC0_DATA7 3 +#define SC_P_EMMC0_DATA7_LSIO_GPIO4_IO16 SC_P_EMMC0_DATA7 4 +#define SC_P_EMMC0_STROBE_CONN_EMMC0_STROBE SC_P_EMMC0_STROBE 0 +#define SC_P_EMMC0_STROBE_CONN_NAND_CLE SC_P_EMMC0_STROBE 1 +#define SC_P_EMMC0_STROBE_CONN_MLB_DATA SC_P_EMMC0_STROBE 3 +#define SC_P_EMMC0_STROBE_LSIO_GPIO4_IO17 SC_P_EMMC0_STROBE 4 +#define SC_P_EMMC0_RESET_B_CONN_EMMC0_RESET_B SC_P_EMMC0_RESET_B 0 +#define SC_P_EMMC0_RESET_B_CONN_NAND_WP_B SC_P_EMMC0_RESET_B 1 +#define SC_P_EMMC0_RESET_B_LSIO_GPIO4_IO18 SC_P_EMMC0_RESET_B 4 +#define SC_P_USDHC1_RESET_B_CONN_USDHC1_RESET_B SC_P_USDHC1_RESET_B 0 +#define SC_P_USDHC1_RESET_B_CONN_NAND_RE_N SC_P_USDHC1_RESET_B 1 +#define SC_P_USDHC1_RESET_B_ADMA_SPI2_SCK SC_P_USDHC1_RESET_B 2 +#define SC_P_USDHC1_RESET_B_LSIO_GPIO4_IO19 SC_P_USDHC1_RESET_B 4 +#define SC_P_USDHC1_VSELECT_CONN_USDHC1_VSELECT SC_P_USDHC1_VSELECT 0 +#define SC_P_USDHC1_VSELECT_CONN_NAND_RE_P SC_P_USDHC1_VSELECT 1 +#define SC_P_USDHC1_VSELECT_ADMA_SPI2_SDO SC_P_USDHC1_VSELECT 2 +#define SC_P_USDHC1_VSELECT_CONN_NAND_RE_B SC_P_USDHC1_VSELECT 3 +#define SC_P_USDHC1_VSELECT_LSIO_GPIO4_IO20 SC_P_USDHC1_VSELECT 4 +#define SC_P_USDHC1_WP_CONN_USDHC1_WP SC_P_USDHC1_WP 0 +#define SC_P_USDHC1_WP_CONN_NAND_DQS_N SC_P_USDHC1_WP 1 +#define SC_P_USDHC1_WP_ADMA_SPI2_SDI SC_P_USDHC1_WP 2 +#define SC_P_USDHC1_WP_LSIO_GPIO4_IO21 SC_P_USDHC1_WP 4 +#define SC_P_USDHC1_CD_B_CONN_USDHC1_CD_B SC_P_USDHC1_CD_B 0 +#define SC_P_USDHC1_CD_B_CONN_NAND_DQS_P SC_P_USDHC1_CD_B 1 +#define SC_P_USDHC1_CD_B_ADMA_SPI2_CS0 SC_P_USDHC1_CD_B 2 +#define SC_P_USDHC1_CD_B_CONN_NAND_DQS SC_P_USDHC1_CD_B 3 +#define SC_P_USDHC1_CD_B_LSIO_GPIO4_IO22 SC_P_USDHC1_CD_B 4 +#define SC_P_USDHC1_CLK_CONN_USDHC1_CLK SC_P_USDHC1_CLK 0 +#define SC_P_USDHC1_CLK_ADMA_UART3_RX SC_P_USDHC1_CLK 2 +#define SC_P_USDHC1_CLK_LSIO_GPIO4_IO23 SC_P_USDHC1_CLK 4 +#define SC_P_USDHC1_CMD_CONN_USDHC1_CMD SC_P_USDHC1_CMD 0 +#define SC_P_USDHC1_CMD_CONN_NAND_CE0_B SC_P_USDHC1_CMD 1 +#define SC_P_USDHC1_CMD_ADMA_MQS_R SC_P_USDHC1_CMD 2 +#define SC_P_USDHC1_CMD_LSIO_GPIO4_IO24 SC_P_USDHC1_CMD 4 +#define SC_P_USDHC1_DATA0_CONN_USDHC1_DATA0 SC_P_USDHC1_DATA0 0 +#define SC_P_USDHC1_DATA0_CONN_NAND_CE1_B SC_P_USDHC1_DATA0 1 +#define SC_P_USDHC1_DATA0_ADMA_MQS_L SC_P_USDHC1_DATA0 2 +#define SC_P_USDHC1_DATA0_LSIO_GPIO4_IO25 SC_P_USDHC1_DATA0 4 +#define SC_P_USDHC1_DATA1_CONN_USDHC1_DATA1 SC_P_USDHC1_DATA1 0 +#define SC_P_USDHC1_DATA1_CONN_NAND_RE_B SC_P_USDHC1_DATA1 1 +#define SC_P_USDHC1_DATA1_ADMA_UART3_TX SC_P_USDHC1_DATA1 2 +#define SC_P_USDHC1_DATA1_LSIO_GPIO4_IO26 SC_P_USDHC1_DATA1 4 +#define SC_P_USDHC1_DATA2_CONN_USDHC1_DATA2 SC_P_USDHC1_DATA2 0 +#define SC_P_USDHC1_DATA2_CONN_NAND_WE_B SC_P_USDHC1_DATA2 1 +#define SC_P_USDHC1_DATA2_ADMA_UART3_CTS_B SC_P_USDHC1_DATA2 2 +#define SC_P_USDHC1_DATA2_LSIO_GPIO4_IO27 SC_P_USDHC1_DATA2 4 +#define SC_P_USDHC1_DATA3_CONN_USDHC1_DATA3 SC_P_USDHC1_DATA3 0 +#define SC_P_USDHC1_DATA3_CONN_NAND_ALE SC_P_USDHC1_DATA3 1 +#define SC_P_USDHC1_DATA3_ADMA_UART3_RTS_B SC_P_USDHC1_DATA3 2 +#define SC_P_USDHC1_DATA3_LSIO_GPIO4_IO28 SC_P_USDHC1_DATA3 4 +#define SC_P_ENET0_RGMII_TXC_CONN_ENET0_RGMII_TXC SC_P_ENET0_RGMII_TXC 0 +#define SC_P_ENET0_RGMII_TXC_CONN_ENET0_RCLK50M_OUT SC_P_ENET0_RGMII_TXC 1 +#define SC_P_ENET0_RGMII_TXC_CONN_ENET0_RCLK50M_IN SC_P_ENET0_RGMII_TXC 2 +#define SC_P_ENET0_RGMII_TXC_CONN_NAND_CE1_B SC_P_ENET0_RGMII_TXC 3 +#define SC_P_ENET0_RGMII_TXC_LSIO_GPIO4_IO29 SC_P_ENET0_RGMII_TXC 4 +#define SC_P_ENET0_RGMII_TX_CTL_CONN_ENET0_RGMII_TX_CTL SC_P_ENET0_RGMII_TX_CTL 0 +#define SC_P_ENET0_RGMII_TX_CTL_CONN_USDHC1_RESET_B SC_P_ENET0_RGMII_TX_CTL 3 +#define SC_P_ENET0_RGMII_TX_CTL_LSIO_GPIO4_IO30 SC_P_ENET0_RGMII_TX_CTL 4 +#define SC_P_ENET0_RGMII_TXD0_CONN_ENET0_RGMII_TXD0 SC_P_ENET0_RGMII_TXD0 0 +#define SC_P_ENET0_RGMII_TXD0_CONN_USDHC1_VSELECT SC_P_ENET0_RGMII_TXD0 3 +#define SC_P_ENET0_RGMII_TXD0_LSIO_GPIO4_IO31 SC_P_ENET0_RGMII_TXD0 4 +#define SC_P_ENET0_RGMII_TXD1_CONN_ENET0_RGMII_TXD1 SC_P_ENET0_RGMII_TXD1 0 +#define SC_P_ENET0_RGMII_TXD1_CONN_USDHC1_WP SC_P_ENET0_RGMII_TXD1 3 +#define SC_P_ENET0_RGMII_TXD1_LSIO_GPIO5_IO00 SC_P_ENET0_RGMII_TXD1 4 +#define SC_P_ENET0_RGMII_TXD2_CONN_ENET0_RGMII_TXD2 SC_P_ENET0_RGMII_TXD2 0 +#define SC_P_ENET0_RGMII_TXD2_CONN_MLB_CLK SC_P_ENET0_RGMII_TXD2 1 +#define SC_P_ENET0_RGMII_TXD2_CONN_NAND_CE0_B SC_P_ENET0_RGMII_TXD2 2 +#define SC_P_ENET0_RGMII_TXD2_CONN_USDHC1_CD_B SC_P_ENET0_RGMII_TXD2 3 +#define SC_P_ENET0_RGMII_TXD2_LSIO_GPIO5_IO01 SC_P_ENET0_RGMII_TXD2 4 +#define SC_P_ENET0_RGMII_TXD3_CONN_ENET0_RGMII_TXD3 SC_P_ENET0_RGMII_TXD3 0 +#define SC_P_ENET0_RGMII_TXD3_CONN_MLB_SIG SC_P_ENET0_RGMII_TXD3 1 +#define SC_P_ENET0_RGMII_TXD3_CONN_NAND_RE_B SC_P_ENET0_RGMII_TXD3 2 +#define SC_P_ENET0_RGMII_TXD3_LSIO_GPIO5_IO02 SC_P_ENET0_RGMII_TXD3 4 +#define SC_P_ENET0_RGMII_RXC_CONN_ENET0_RGMII_RXC SC_P_ENET0_RGMII_RXC 0 +#define SC_P_ENET0_RGMII_RXC_CONN_MLB_DATA SC_P_ENET0_RGMII_RXC 1 +#define SC_P_ENET0_RGMII_RXC_CONN_NAND_WE_B SC_P_ENET0_RGMII_RXC 2 +#define SC_P_ENET0_RGMII_RXC_CONN_USDHC1_CLK SC_P_ENET0_RGMII_RXC 3 +#define SC_P_ENET0_RGMII_RXC_LSIO_GPIO5_IO03 SC_P_ENET0_RGMII_RXC 4 +#define SC_P_ENET0_RGMII_RX_CTL_CONN_ENET0_RGMII_RX_CTL SC_P_ENET0_RGMII_RX_CTL 0 +#define SC_P_ENET0_RGMII_RX_CTL_CONN_USDHC1_CMD SC_P_ENET0_RGMII_RX_CTL 3 +#define SC_P_ENET0_RGMII_RX_CTL_LSIO_GPIO5_IO04 SC_P_ENET0_RGMII_RX_CTL 4 +#define SC_P_ENET0_RGMII_RXD0_CONN_ENET0_RGMII_RXD0 SC_P_ENET0_RGMII_RXD0 0 +#define SC_P_ENET0_RGMII_RXD0_CONN_USDHC1_DATA0 SC_P_ENET0_RGMII_RXD0 3 +#define SC_P_ENET0_RGMII_RXD0_LSIO_GPIO5_IO05 SC_P_ENET0_RGMII_RXD0 4 +#define SC_P_ENET0_RGMII_RXD1_CONN_ENET0_RGMII_RXD1 SC_P_ENET0_RGMII_RXD1 0 +#define SC_P_ENET0_RGMII_RXD1_CONN_USDHC1_DATA1 SC_P_ENET0_RGMII_RXD1 3 +#define SC_P_ENET0_RGMII_RXD1_LSIO_GPIO5_IO06 SC_P_ENET0_RGMII_RXD1 4 +#define SC_P_ENET0_RGMII_RXD2_CONN_ENET0_RGMII_RXD2 SC_P_ENET0_RGMII_RXD2 0 +#define SC_P_ENET0_RGMII_RXD2_CONN_ENET0_RMII_RX_ER SC_P_ENET0_RGMII_RXD2 1 +#define SC_P_ENET0_RGMII_RXD2_CONN_USDHC1_DATA2 SC_P_ENET0_RGMII_RXD2 3 +#define SC_P_ENET0_RGMII_RXD2_LSIO_GPIO5_IO07 SC_P_ENET0_RGMII_RXD2 4 +#define SC_P_ENET0_RGMII_RXD3_CONN_ENET0_RGMII_RXD3 SC_P_ENET0_RGMII_RXD3 0 +#define SC_P_ENET0_RGMII_RXD3_CONN_NAND_ALE SC_P_ENET0_RGMII_RXD3 2 +#define SC_P_ENET0_RGMII_RXD3_CONN_USDHC1_DATA3 SC_P_ENET0_RGMII_RXD3 3 +#define SC_P_ENET0_RGMII_RXD3_LSIO_GPIO5_IO08 SC_P_ENET0_RGMII_RXD3 4 +#define SC_P_ENET0_REFCLK_125M_25M_CONN_ENET0_REFCLK_125M_25M SC_P_ENET0_REFCLK_125M_25M 0 +#define SC_P_ENET0_REFCLK_125M_25M_CONN_ENET0_PPS SC_P_ENET0_REFCLK_125M_25M 1 +#define SC_P_ENET0_REFCLK_125M_25M_CONN_ENET1_PPS SC_P_ENET0_REFCLK_125M_25M 2 +#define SC_P_ENET0_REFCLK_125M_25M_LSIO_GPIO5_IO09 SC_P_ENET0_REFCLK_125M_25M 4 +#define SC_P_ENET0_MDIO_CONN_ENET0_MDIO SC_P_ENET0_MDIO 0 +#define SC_P_ENET0_MDIO_ADMA_I2C3_SDA SC_P_ENET0_MDIO 1 +#define SC_P_ENET0_MDIO_CONN_ENET1_MDIO SC_P_ENET0_MDIO 2 +#define SC_P_ENET0_MDIO_LSIO_GPIO5_IO10 SC_P_ENET0_MDIO 4 +#define SC_P_ENET0_MDC_CONN_ENET0_MDC SC_P_ENET0_MDC 0 +#define SC_P_ENET0_MDC_ADMA_I2C3_SCL SC_P_ENET0_MDC 1 +#define SC_P_ENET0_MDC_CONN_ENET1_MDC SC_P_ENET0_MDC 2 +#define SC_P_ENET0_MDC_LSIO_GPIO5_IO11 SC_P_ENET0_MDC 4 +#define SC_P_ESAI0_FSR_ADMA_ESAI0_FSR SC_P_ESAI0_FSR 0 +#define SC_P_ESAI0_FSR_CONN_ENET1_RCLK50M_OUT SC_P_ESAI0_FSR 1 +#define SC_P_ESAI0_FSR_ADMA_LCDIF_D00 SC_P_ESAI0_FSR 2 +#define SC_P_ESAI0_FSR_CONN_ENET1_RGMII_TXC SC_P_ESAI0_FSR 3 +#define SC_P_ESAI0_FSR_CONN_ENET1_RCLK50M_IN SC_P_ESAI0_FSR 4 +#define SC_P_ESAI0_FST_ADMA_ESAI0_FST SC_P_ESAI0_FST 0 +#define SC_P_ESAI0_FST_CONN_MLB_CLK SC_P_ESAI0_FST 1 +#define SC_P_ESAI0_FST_ADMA_LCDIF_D01 SC_P_ESAI0_FST 2 +#define SC_P_ESAI0_FST_CONN_ENET1_RGMII_TXD2 SC_P_ESAI0_FST 3 +#define SC_P_ESAI0_FST_LSIO_GPIO0_IO01 SC_P_ESAI0_FST 4 +#define SC_P_ESAI0_SCKR_ADMA_ESAI0_SCKR SC_P_ESAI0_SCKR 0 +#define SC_P_ESAI0_SCKR_ADMA_LCDIF_D02 SC_P_ESAI0_SCKR 2 +#define SC_P_ESAI0_SCKR_CONN_ENET1_RGMII_TX_CTL SC_P_ESAI0_SCKR 3 +#define SC_P_ESAI0_SCKR_LSIO_GPIO0_IO02 SC_P_ESAI0_SCKR 4 +#define SC_P_ESAI0_SCKT_ADMA_ESAI0_SCKT SC_P_ESAI0_SCKT 0 +#define SC_P_ESAI0_SCKT_CONN_MLB_SIG SC_P_ESAI0_SCKT 1 +#define SC_P_ESAI0_SCKT_ADMA_LCDIF_D03 SC_P_ESAI0_SCKT 2 +#define SC_P_ESAI0_SCKT_CONN_ENET1_RGMII_TXD3 SC_P_ESAI0_SCKT 3 +#define SC_P_ESAI0_SCKT_LSIO_GPIO0_IO03 SC_P_ESAI0_SCKT 4 +#define SC_P_ESAI0_TX0_ADMA_ESAI0_TX0 SC_P_ESAI0_TX0 0 +#define SC_P_ESAI0_TX0_CONN_MLB_DATA SC_P_ESAI0_TX0 1 +#define SC_P_ESAI0_TX0_ADMA_LCDIF_D04 SC_P_ESAI0_TX0 2 +#define SC_P_ESAI0_TX0_CONN_ENET1_RGMII_RXC SC_P_ESAI0_TX0 3 +#define SC_P_ESAI0_TX0_LSIO_GPIO0_IO04 SC_P_ESAI0_TX0 4 +#define SC_P_ESAI0_TX1_ADMA_ESAI0_TX1 SC_P_ESAI0_TX1 0 +#define SC_P_ESAI0_TX1_ADMA_LCDIF_D05 SC_P_ESAI0_TX1 2 +#define SC_P_ESAI0_TX1_CONN_ENET1_RGMII_RXD3 SC_P_ESAI0_TX1 3 +#define SC_P_ESAI0_TX1_LSIO_GPIO0_IO05 SC_P_ESAI0_TX1 4 +#define SC_P_ESAI0_TX2_RX3_ADMA_ESAI0_TX2_RX3 SC_P_ESAI0_TX2_RX3 0 +#define SC_P_ESAI0_TX2_RX3_CONN_ENET1_RMII_RX_ER SC_P_ESAI0_TX2_RX3 1 +#define SC_P_ESAI0_TX2_RX3_ADMA_LCDIF_D06 SC_P_ESAI0_TX2_RX3 2 +#define SC_P_ESAI0_TX2_RX3_CONN_ENET1_RGMII_RXD2 SC_P_ESAI0_TX2_RX3 3 +#define SC_P_ESAI0_TX2_RX3_LSIO_GPIO0_IO06 SC_P_ESAI0_TX2_RX3 4 +#define SC_P_ESAI0_TX3_RX2_ADMA_ESAI0_TX3_RX2 SC_P_ESAI0_TX3_RX2 0 +#define SC_P_ESAI0_TX3_RX2_ADMA_LCDIF_D07 SC_P_ESAI0_TX3_RX2 2 +#define SC_P_ESAI0_TX3_RX2_CONN_ENET1_RGMII_RXD1 SC_P_ESAI0_TX3_RX2 3 +#define SC_P_ESAI0_TX3_RX2_LSIO_GPIO0_IO07 SC_P_ESAI0_TX3_RX2 4 +#define SC_P_ESAI0_TX4_RX1_ADMA_ESAI0_TX4_RX1 SC_P_ESAI0_TX4_RX1 0 +#define SC_P_ESAI0_TX4_RX1_ADMA_LCDIF_D08 SC_P_ESAI0_TX4_RX1 2 +#define SC_P_ESAI0_TX4_RX1_CONN_ENET1_RGMII_TXD0 SC_P_ESAI0_TX4_RX1 3 +#define SC_P_ESAI0_TX4_RX1_LSIO_GPIO0_IO08 SC_P_ESAI0_TX4_RX1 4 +#define SC_P_ESAI0_TX5_RX0_ADMA_ESAI0_TX5_RX0 SC_P_ESAI0_TX5_RX0 0 +#define SC_P_ESAI0_TX5_RX0_ADMA_LCDIF_D09 SC_P_ESAI0_TX5_RX0 2 +#define SC_P_ESAI0_TX5_RX0_CONN_ENET1_RGMII_TXD1 SC_P_ESAI0_TX5_RX0 3 +#define SC_P_ESAI0_TX5_RX0_LSIO_GPIO0_IO09 SC_P_ESAI0_TX5_RX0 4 +#define SC_P_SPDIF0_RX_ADMA_SPDIF0_RX SC_P_SPDIF0_RX 0 +#define SC_P_SPDIF0_RX_ADMA_MQS_R SC_P_SPDIF0_RX 1 +#define SC_P_SPDIF0_RX_ADMA_LCDIF_D10 SC_P_SPDIF0_RX 2 +#define SC_P_SPDIF0_RX_CONN_ENET1_RGMII_RXD0 SC_P_SPDIF0_RX 3 +#define SC_P_SPDIF0_RX_LSIO_GPIO0_IO10 SC_P_SPDIF0_RX 4 +#define SC_P_SPDIF0_TX_ADMA_SPDIF0_TX SC_P_SPDIF0_TX 0 +#define SC_P_SPDIF0_TX_ADMA_MQS_L SC_P_SPDIF0_TX 1 +#define SC_P_SPDIF0_TX_ADMA_LCDIF_D11 SC_P_SPDIF0_TX 2 +#define SC_P_SPDIF0_TX_CONN_ENET1_RGMII_RX_CTL SC_P_SPDIF0_TX 3 +#define SC_P_SPDIF0_TX_LSIO_GPIO0_IO11 SC_P_SPDIF0_TX 4 +#define SC_P_SPDIF0_EXT_CLK_ADMA_SPDIF0_EXT_CLK SC_P_SPDIF0_EXT_CLK 0 +#define SC_P_SPDIF0_EXT_CLK_ADMA_LCDIF_D12 SC_P_SPDIF0_EXT_CLK 2 +#define SC_P_SPDIF0_EXT_CLK_CONN_ENET1_REFCLK_125M_25M SC_P_SPDIF0_EXT_CLK 3 +#define SC_P_SPDIF0_EXT_CLK_LSIO_GPIO0_IO12 SC_P_SPDIF0_EXT_CLK 4 +#define SC_P_SPI3_SCK_ADMA_SPI3_SCK SC_P_SPI3_SCK 0 +#define SC_P_SPI3_SCK_ADMA_LCDIF_D13 SC_P_SPI3_SCK 2 +#define SC_P_SPI3_SCK_LSIO_GPIO0_IO13 SC_P_SPI3_SCK 4 +#define SC_P_SPI3_SDO_ADMA_SPI3_SDO SC_P_SPI3_SDO 0 +#define SC_P_SPI3_SDO_ADMA_LCDIF_D14 SC_P_SPI3_SDO 2 +#define SC_P_SPI3_SDO_LSIO_GPIO0_IO14 SC_P_SPI3_SDO 4 +#define SC_P_SPI3_SDI_ADMA_SPI3_SDI SC_P_SPI3_SDI 0 +#define SC_P_SPI3_SDI_ADMA_LCDIF_D15 SC_P_SPI3_SDI 2 +#define SC_P_SPI3_SDI_LSIO_GPIO0_IO15 SC_P_SPI3_SDI 4 +#define SC_P_SPI3_CS0_ADMA_SPI3_CS0 SC_P_SPI3_CS0 0 +#define SC_P_SPI3_CS0_ADMA_ACM_MCLK_OUT1 SC_P_SPI3_CS0 1 +#define SC_P_SPI3_CS0_ADMA_LCDIF_HSYNC SC_P_SPI3_CS0 2 +#define SC_P_SPI3_CS0_LSIO_GPIO0_IO16 SC_P_SPI3_CS0 4 +#define SC_P_SPI3_CS1_ADMA_SPI3_CS1 SC_P_SPI3_CS1 0 +#define SC_P_SPI3_CS1_ADMA_I2C3_SCL SC_P_SPI3_CS1 1 +#define SC_P_SPI3_CS1_ADMA_LCDIF_RESET SC_P_SPI3_CS1 2 +#define SC_P_SPI3_CS1_ADMA_SPI2_CS0 SC_P_SPI3_CS1 3 +#define SC_P_SPI3_CS1_ADMA_LCDIF_D16 SC_P_SPI3_CS1 4 +#define SC_P_MCLK_IN1_ADMA_ACM_MCLK_IN1 SC_P_MCLK_IN1 0 +#define SC_P_MCLK_IN1_ADMA_I2C3_SDA SC_P_MCLK_IN1 1 +#define SC_P_MCLK_IN1_ADMA_LCDIF_EN SC_P_MCLK_IN1 2 +#define SC_P_MCLK_IN1_ADMA_SPI2_SCK SC_P_MCLK_IN1 3 +#define SC_P_MCLK_IN1_ADMA_LCDIF_D17 SC_P_MCLK_IN1 4 +#define SC_P_MCLK_IN0_ADMA_ACM_MCLK_IN0 SC_P_MCLK_IN0 0 +#define SC_P_MCLK_IN0_ADMA_ESAI0_RX_HF_CLK SC_P_MCLK_IN0 1 +#define SC_P_MCLK_IN0_ADMA_LCDIF_VSYNC SC_P_MCLK_IN0 2 +#define SC_P_MCLK_IN0_ADMA_SPI2_SDI SC_P_MCLK_IN0 3 +#define SC_P_MCLK_IN0_LSIO_GPIO0_IO19 SC_P_MCLK_IN0 4 +#define SC_P_MCLK_OUT0_ADMA_ACM_MCLK_OUT0 SC_P_MCLK_OUT0 0 +#define SC_P_MCLK_OUT0_ADMA_ESAI0_TX_HF_CLK SC_P_MCLK_OUT0 1 +#define SC_P_MCLK_OUT0_ADMA_LCDIF_CLK SC_P_MCLK_OUT0 2 +#define SC_P_MCLK_OUT0_ADMA_SPI2_SDO SC_P_MCLK_OUT0 3 +#define SC_P_MCLK_OUT0_LSIO_GPIO0_IO20 SC_P_MCLK_OUT0 4 +#define SC_P_UART1_TX_ADMA_UART1_TX SC_P_UART1_TX 0 +#define SC_P_UART1_TX_LSIO_PWM0_OUT SC_P_UART1_TX 1 +#define SC_P_UART1_TX_LSIO_GPT0_CAPTURE SC_P_UART1_TX 2 +#define SC_P_UART1_TX_LSIO_GPIO0_IO21 SC_P_UART1_TX 4 +#define SC_P_UART1_RX_ADMA_UART1_RX SC_P_UART1_RX 0 +#define SC_P_UART1_RX_LSIO_PWM1_OUT SC_P_UART1_RX 1 +#define SC_P_UART1_RX_LSIO_GPT0_COMPARE SC_P_UART1_RX 2 +#define SC_P_UART1_RX_LSIO_GPT1_CLK SC_P_UART1_RX 3 +#define SC_P_UART1_RX_LSIO_GPIO0_IO22 SC_P_UART1_RX 4 +#define SC_P_UART1_RTS_B_ADMA_UART1_RTS_B SC_P_UART1_RTS_B 0 +#define SC_P_UART1_RTS_B_LSIO_PWM2_OUT SC_P_UART1_RTS_B 1 +#define SC_P_UART1_RTS_B_ADMA_LCDIF_D16 SC_P_UART1_RTS_B 2 +#define SC_P_UART1_RTS_B_LSIO_GPT1_CAPTURE SC_P_UART1_RTS_B 3 +#define SC_P_UART1_RTS_B_LSIO_GPT0_CLK SC_P_UART1_RTS_B 4 +#define SC_P_UART1_CTS_B_ADMA_UART1_CTS_B SC_P_UART1_CTS_B 0 +#define SC_P_UART1_CTS_B_LSIO_PWM3_OUT SC_P_UART1_CTS_B 1 +#define SC_P_UART1_CTS_B_ADMA_LCDIF_D17 SC_P_UART1_CTS_B 2 +#define SC_P_UART1_CTS_B_LSIO_GPT1_COMPARE SC_P_UART1_CTS_B 3 +#define SC_P_UART1_CTS_B_LSIO_GPIO0_IO24 SC_P_UART1_CTS_B 4 +#define SC_P_SAI0_TXD_ADMA_SAI0_TXD SC_P_SAI0_TXD 0 +#define SC_P_SAI0_TXD_ADMA_SAI1_RXC SC_P_SAI0_TXD 1 +#define SC_P_SAI0_TXD_ADMA_SPI1_SDO SC_P_SAI0_TXD 2 +#define SC_P_SAI0_TXD_ADMA_LCDIF_D18 SC_P_SAI0_TXD 3 +#define SC_P_SAI0_TXD_LSIO_GPIO0_IO25 SC_P_SAI0_TXD 4 +#define SC_P_SAI0_TXC_ADMA_SAI0_TXC SC_P_SAI0_TXC 0 +#define SC_P_SAI0_TXC_ADMA_SAI1_TXD SC_P_SAI0_TXC 1 +#define SC_P_SAI0_TXC_ADMA_SPI1_SDI SC_P_SAI0_TXC 2 +#define SC_P_SAI0_TXC_ADMA_LCDIF_D19 SC_P_SAI0_TXC 3 +#define SC_P_SAI0_TXC_LSIO_GPIO0_IO26 SC_P_SAI0_TXC 4 +#define SC_P_SAI0_RXD_ADMA_SAI0_RXD SC_P_SAI0_RXD 0 +#define SC_P_SAI0_RXD_ADMA_SAI1_RXFS SC_P_SAI0_RXD 1 +#define SC_P_SAI0_RXD_ADMA_SPI1_CS0 SC_P_SAI0_RXD 2 +#define SC_P_SAI0_RXD_ADMA_LCDIF_D20 SC_P_SAI0_RXD 3 +#define SC_P_SAI0_RXD_LSIO_GPIO0_IO27 SC_P_SAI0_RXD 4 +#define SC_P_SAI0_TXFS_ADMA_SAI0_TXFS SC_P_SAI0_TXFS 0 +#define SC_P_SAI0_TXFS_ADMA_SPI2_CS1 SC_P_SAI0_TXFS 1 +#define SC_P_SAI0_TXFS_ADMA_SPI1_SCK SC_P_SAI0_TXFS 2 +#define SC_P_SAI0_TXFS_LSIO_GPIO0_IO28 SC_P_SAI0_TXFS 4 +#define SC_P_SAI1_RXD_ADMA_SAI1_RXD SC_P_SAI1_RXD 0 +#define SC_P_SAI1_RXD_ADMA_SAI0_RXFS SC_P_SAI1_RXD 1 +#define SC_P_SAI1_RXD_ADMA_SPI1_CS1 SC_P_SAI1_RXD 2 +#define SC_P_SAI1_RXD_ADMA_LCDIF_D21 SC_P_SAI1_RXD 3 +#define SC_P_SAI1_RXD_LSIO_GPIO0_IO29 SC_P_SAI1_RXD 4 +#define SC_P_SAI1_RXC_ADMA_SAI1_RXC SC_P_SAI1_RXC 0 +#define SC_P_SAI1_RXC_ADMA_SAI1_TXC SC_P_SAI1_RXC 1 +#define SC_P_SAI1_RXC_ADMA_LCDIF_D22 SC_P_SAI1_RXC 3 +#define SC_P_SAI1_RXC_LSIO_GPIO0_IO30 SC_P_SAI1_RXC 4 +#define SC_P_SAI1_RXFS_ADMA_SAI1_RXFS SC_P_SAI1_RXFS 0 +#define SC_P_SAI1_RXFS_ADMA_SAI1_TXFS SC_P_SAI1_RXFS 1 +#define SC_P_SAI1_RXFS_ADMA_LCDIF_D23 SC_P_SAI1_RXFS 3 +#define SC_P_SAI1_RXFS_LSIO_GPIO0_IO31 SC_P_SAI1_RXFS 4 +#define SC_P_SPI2_CS0_ADMA_SPI2_CS0 SC_P_SPI2_CS0 0 +#define SC_P_SPI2_CS0_LSIO_GPIO1_IO00 SC_P_SPI2_CS0 4 +#define SC_P_SPI2_SDO_ADMA_SPI2_SDO SC_P_SPI2_SDO 0 +#define SC_P_SPI2_SDO_LSIO_GPIO1_IO01 SC_P_SPI2_SDO 4 +#define SC_P_SPI2_SDI_ADMA_SPI2_SDI SC_P_SPI2_SDI 0 +#define SC_P_SPI2_SDI_LSIO_GPIO1_IO02 SC_P_SPI2_SDI 4 +#define SC_P_SPI2_SCK_ADMA_SPI2_SCK SC_P_SPI2_SCK 0 +#define SC_P_SPI2_SCK_LSIO_GPIO1_IO03 SC_P_SPI2_SCK 4 +#define SC_P_SPI0_SCK_ADMA_SPI0_SCK SC_P_SPI0_SCK 0 +#define SC_P_SPI0_SCK_ADMA_SAI0_TXC SC_P_SPI0_SCK 1 +#define SC_P_SPI0_SCK_M40_I2C0_SCL SC_P_SPI0_SCK 2 +#define SC_P_SPI0_SCK_M40_GPIO0_IO00 SC_P_SPI0_SCK 3 +#define SC_P_SPI0_SCK_LSIO_GPIO1_IO04 SC_P_SPI0_SCK 4 +#define SC_P_SPI0_SDI_ADMA_SPI0_SDI SC_P_SPI0_SDI 0 +#define SC_P_SPI0_SDI_ADMA_SAI0_TXD SC_P_SPI0_SDI 1 +#define SC_P_SPI0_SDI_M40_TPM0_CH0 SC_P_SPI0_SDI 2 +#define SC_P_SPI0_SDI_M40_GPIO0_IO02 SC_P_SPI0_SDI 3 +#define SC_P_SPI0_SDI_LSIO_GPIO1_IO05 SC_P_SPI0_SDI 4 +#define SC_P_SPI0_SDO_ADMA_SPI0_SDO SC_P_SPI0_SDO 0 +#define SC_P_SPI0_SDO_ADMA_SAI0_TXFS SC_P_SPI0_SDO 1 +#define SC_P_SPI0_SDO_M40_I2C0_SDA SC_P_SPI0_SDO 2 +#define SC_P_SPI0_SDO_M40_GPIO0_IO01 SC_P_SPI0_SDO 3 +#define SC_P_SPI0_SDO_LSIO_GPIO1_IO06 SC_P_SPI0_SDO 4 +#define SC_P_SPI0_CS1_ADMA_SPI0_CS1 SC_P_SPI0_CS1 0 +#define SC_P_SPI0_CS1_ADMA_SAI0_RXC SC_P_SPI0_CS1 1 +#define SC_P_SPI0_CS1_ADMA_SAI1_TXD SC_P_SPI0_CS1 2 +#define SC_P_SPI0_CS1_ADMA_LCD_PWM0_OUT SC_P_SPI0_CS1 3 +#define SC_P_SPI0_CS1_LSIO_GPIO1_IO07 SC_P_SPI0_CS1 4 +#define SC_P_SPI0_CS0_ADMA_SPI0_CS0 SC_P_SPI0_CS0 0 +#define SC_P_SPI0_CS0_ADMA_SAI0_RXD SC_P_SPI0_CS0 1 +#define SC_P_SPI0_CS0_M40_TPM0_CH1 SC_P_SPI0_CS0 2 +#define SC_P_SPI0_CS0_M40_GPIO0_IO03 SC_P_SPI0_CS0 3 +#define SC_P_SPI0_CS0_LSIO_GPIO1_IO08 SC_P_SPI0_CS0 4 +#define SC_P_ADC_IN1_ADMA_ADC_IN1 SC_P_ADC_IN1 0 +#define SC_P_ADC_IN1_M40_I2C0_SDA SC_P_ADC_IN1 1 +#define SC_P_ADC_IN1_M40_GPIO0_IO01 SC_P_ADC_IN1 2 +#define SC_P_ADC_IN1_LSIO_GPIO1_IO09 SC_P_ADC_IN1 4 +#define SC_P_ADC_IN0_ADMA_ADC_IN0 SC_P_ADC_IN0 0 +#define SC_P_ADC_IN0_M40_I2C0_SCL SC_P_ADC_IN0 1 +#define SC_P_ADC_IN0_M40_GPIO0_IO00 SC_P_ADC_IN0 2 +#define SC_P_ADC_IN0_LSIO_GPIO1_IO10 SC_P_ADC_IN0 4 +#define SC_P_ADC_IN3_ADMA_ADC_IN3 SC_P_ADC_IN3 0 +#define SC_P_ADC_IN3_M40_UART0_TX SC_P_ADC_IN3 1 +#define SC_P_ADC_IN3_M40_GPIO0_IO03 SC_P_ADC_IN3 2 +#define SC_P_ADC_IN3_ADMA_ACM_MCLK_OUT0 SC_P_ADC_IN3 3 +#define SC_P_ADC_IN3_LSIO_GPIO1_IO11 SC_P_ADC_IN3 4 +#define SC_P_ADC_IN2_ADMA_ADC_IN2 SC_P_ADC_IN2 0 +#define SC_P_ADC_IN2_M40_UART0_RX SC_P_ADC_IN2 1 +#define SC_P_ADC_IN2_M40_GPIO0_IO02 SC_P_ADC_IN2 2 +#define SC_P_ADC_IN2_ADMA_ACM_MCLK_IN0 SC_P_ADC_IN2 3 +#define SC_P_ADC_IN2_LSIO_GPIO1_IO12 SC_P_ADC_IN2 4 +#define SC_P_ADC_IN5_ADMA_ADC_IN5 SC_P_ADC_IN5 0 +#define SC_P_ADC_IN5_M40_TPM0_CH1 SC_P_ADC_IN5 1 +#define SC_P_ADC_IN5_M40_GPIO0_IO05 SC_P_ADC_IN5 2 +#define SC_P_ADC_IN5_LSIO_GPIO1_IO13 SC_P_ADC_IN5 4 +#define SC_P_ADC_IN4_ADMA_ADC_IN4 SC_P_ADC_IN4 0 +#define SC_P_ADC_IN4_M40_TPM0_CH0 SC_P_ADC_IN4 1 +#define SC_P_ADC_IN4_M40_GPIO0_IO04 SC_P_ADC_IN4 2 +#define SC_P_ADC_IN4_LSIO_GPIO1_IO14 SC_P_ADC_IN4 4 +#define SC_P_FLEXCAN0_RX_ADMA_FLEXCAN0_RX SC_P_FLEXCAN0_RX 0 +#define SC_P_FLEXCAN0_RX_ADMA_SAI2_RXC SC_P_FLEXCAN0_RX 1 +#define SC_P_FLEXCAN0_RX_ADMA_UART0_RTS_B SC_P_FLEXCAN0_RX 2 +#define SC_P_FLEXCAN0_RX_ADMA_SAI1_TXC SC_P_FLEXCAN0_RX 3 +#define SC_P_FLEXCAN0_RX_LSIO_GPIO1_IO15 SC_P_FLEXCAN0_RX 4 +#define SC_P_FLEXCAN0_TX_ADMA_FLEXCAN0_TX SC_P_FLEXCAN0_TX 0 +#define SC_P_FLEXCAN0_TX_ADMA_SAI2_RXD SC_P_FLEXCAN0_TX 1 +#define SC_P_FLEXCAN0_TX_ADMA_UART0_CTS_B SC_P_FLEXCAN0_TX 2 +#define SC_P_FLEXCAN0_TX_ADMA_SAI1_TXFS SC_P_FLEXCAN0_TX 3 +#define SC_P_FLEXCAN0_TX_LSIO_GPIO1_IO16 SC_P_FLEXCAN0_TX 4 +#define SC_P_FLEXCAN1_RX_ADMA_FLEXCAN1_RX SC_P_FLEXCAN1_RX 0 +#define SC_P_FLEXCAN1_RX_ADMA_SAI2_RXFS SC_P_FLEXCAN1_RX 1 +#define SC_P_FLEXCAN1_RX_ADMA_FTM_CH2 SC_P_FLEXCAN1_RX 2 +#define SC_P_FLEXCAN1_RX_ADMA_SAI1_TXD SC_P_FLEXCAN1_RX 3 +#define SC_P_FLEXCAN1_RX_LSIO_GPIO1_IO17 SC_P_FLEXCAN1_RX 4 +#define SC_P_FLEXCAN1_TX_ADMA_FLEXCAN1_TX SC_P_FLEXCAN1_TX 0 +#define SC_P_FLEXCAN1_TX_ADMA_SAI3_RXC SC_P_FLEXCAN1_TX 1 +#define SC_P_FLEXCAN1_TX_ADMA_DMA0_REQ_IN0 SC_P_FLEXCAN1_TX 2 +#define SC_P_FLEXCAN1_TX_ADMA_SAI1_RXD SC_P_FLEXCAN1_TX 3 +#define SC_P_FLEXCAN1_TX_LSIO_GPIO1_IO18 SC_P_FLEXCAN1_TX 4 +#define SC_P_FLEXCAN2_RX_ADMA_FLEXCAN2_RX SC_P_FLEXCAN2_RX 0 +#define SC_P_FLEXCAN2_RX_ADMA_SAI3_RXD SC_P_FLEXCAN2_RX 1 +#define SC_P_FLEXCAN2_RX_ADMA_UART3_RX SC_P_FLEXCAN2_RX 2 +#define SC_P_FLEXCAN2_RX_ADMA_SAI1_RXFS SC_P_FLEXCAN2_RX 3 +#define SC_P_FLEXCAN2_RX_LSIO_GPIO1_IO19 SC_P_FLEXCAN2_RX 4 +#define SC_P_FLEXCAN2_TX_ADMA_FLEXCAN2_TX SC_P_FLEXCAN2_TX 0 +#define SC_P_FLEXCAN2_TX_ADMA_SAI3_RXFS SC_P_FLEXCAN2_TX 1 +#define SC_P_FLEXCAN2_TX_ADMA_UART3_TX SC_P_FLEXCAN2_TX 2 +#define SC_P_FLEXCAN2_TX_ADMA_SAI1_RXC SC_P_FLEXCAN2_TX 3 +#define SC_P_FLEXCAN2_TX_LSIO_GPIO1_IO20 SC_P_FLEXCAN2_TX 4 +#define SC_P_UART0_RX_ADMA_UART0_RX SC_P_UART0_RX 0 +#define SC_P_UART0_RX_ADMA_MQS_R SC_P_UART0_RX 1 +#define SC_P_UART0_RX_ADMA_FLEXCAN0_RX SC_P_UART0_RX 2 +#define SC_P_UART0_RX_SCU_UART0_RX SC_P_UART0_RX 3 +#define SC_P_UART0_RX_LSIO_GPIO1_IO21 SC_P_UART0_RX 4 +#define SC_P_UART0_TX_ADMA_UART0_TX SC_P_UART0_TX 0 +#define SC_P_UART0_TX_ADMA_MQS_L SC_P_UART0_TX 1 +#define SC_P_UART0_TX_ADMA_FLEXCAN0_TX SC_P_UART0_TX 2 +#define SC_P_UART0_TX_SCU_UART0_TX SC_P_UART0_TX 3 +#define SC_P_UART0_TX_LSIO_GPIO1_IO22 SC_P_UART0_TX 4 +#define SC_P_UART2_TX_ADMA_UART2_TX SC_P_UART2_TX 0 +#define SC_P_UART2_TX_ADMA_FTM_CH1 SC_P_UART2_TX 1 +#define SC_P_UART2_TX_ADMA_FLEXCAN1_TX SC_P_UART2_TX 2 +#define SC_P_UART2_TX_LSIO_GPIO1_IO23 SC_P_UART2_TX 4 +#define SC_P_UART2_RX_ADMA_UART2_RX SC_P_UART2_RX 0 +#define SC_P_UART2_RX_ADMA_FTM_CH0 SC_P_UART2_RX 1 +#define SC_P_UART2_RX_ADMA_FLEXCAN1_RX SC_P_UART2_RX 2 +#define SC_P_UART2_RX_LSIO_GPIO1_IO24 SC_P_UART2_RX 4 +#define SC_P_MIPI_DSI0_I2C0_SCL_MIPI_DSI0_I2C0_SCL SC_P_MIPI_DSI0_I2C0_SCL 0 +#define SC_P_MIPI_DSI0_I2C0_SCL_MIPI_DSI1_GPIO0_IO02 SC_P_MIPI_DSI0_I2C0_SCL 1 +#define SC_P_MIPI_DSI0_I2C0_SCL_LSIO_GPIO1_IO25 SC_P_MIPI_DSI0_I2C0_SCL 4 +#define SC_P_MIPI_DSI0_I2C0_SDA_MIPI_DSI0_I2C0_SDA SC_P_MIPI_DSI0_I2C0_SDA 0 +#define SC_P_MIPI_DSI0_I2C0_SDA_MIPI_DSI1_GPIO0_IO03 SC_P_MIPI_DSI0_I2C0_SDA 1 +#define SC_P_MIPI_DSI0_I2C0_SDA_LSIO_GPIO1_IO26 SC_P_MIPI_DSI0_I2C0_SDA 4 +#define SC_P_MIPI_DSI0_GPIO0_00_MIPI_DSI0_GPIO0_IO00 SC_P_MIPI_DSI0_GPIO0_00 0 +#define SC_P_MIPI_DSI0_GPIO0_00_ADMA_I2C1_SCL SC_P_MIPI_DSI0_GPIO0_00 1 +#define SC_P_MIPI_DSI0_GPIO0_00_MIPI_DSI0_PWM0_OUT SC_P_MIPI_DSI0_GPIO0_00 2 +#define SC_P_MIPI_DSI0_GPIO0_00_LSIO_GPIO1_IO27 SC_P_MIPI_DSI0_GPIO0_00 4 +#define SC_P_MIPI_DSI0_GPIO0_01_MIPI_DSI0_GPIO0_IO01 SC_P_MIPI_DSI0_GPIO0_01 0 +#define SC_P_MIPI_DSI0_GPIO0_01_ADMA_I2C1_SDA SC_P_MIPI_DSI0_GPIO0_01 1 +#define SC_P_MIPI_DSI0_GPIO0_01_LSIO_GPIO1_IO28 SC_P_MIPI_DSI0_GPIO0_01 4 +#define SC_P_MIPI_DSI1_I2C0_SCL_MIPI_DSI1_I2C0_SCL SC_P_MIPI_DSI1_I2C0_SCL 0 +#define SC_P_MIPI_DSI1_I2C0_SCL_MIPI_DSI0_GPIO0_IO02 SC_P_MIPI_DSI1_I2C0_SCL 1 +#define SC_P_MIPI_DSI1_I2C0_SCL_LSIO_GPIO1_IO29 SC_P_MIPI_DSI1_I2C0_SCL 4 +#define SC_P_MIPI_DSI1_I2C0_SDA_MIPI_DSI1_I2C0_SDA SC_P_MIPI_DSI1_I2C0_SDA 0 +#define SC_P_MIPI_DSI1_I2C0_SDA_MIPI_DSI0_GPIO0_IO03 SC_P_MIPI_DSI1_I2C0_SDA 1 +#define SC_P_MIPI_DSI1_I2C0_SDA_LSIO_GPIO1_IO30 SC_P_MIPI_DSI1_I2C0_SDA 4 +#define SC_P_MIPI_DSI1_GPIO0_00_MIPI_DSI1_GPIO0_IO00 SC_P_MIPI_DSI1_GPIO0_00 0 +#define SC_P_MIPI_DSI1_GPIO0_00_ADMA_I2C2_SCL SC_P_MIPI_DSI1_GPIO0_00 1 +#define SC_P_MIPI_DSI1_GPIO0_00_MIPI_DSI1_PWM0_OUT SC_P_MIPI_DSI1_GPIO0_00 2 +#define SC_P_MIPI_DSI1_GPIO0_00_LSIO_GPIO1_IO31 SC_P_MIPI_DSI1_GPIO0_00 4 +#define SC_P_MIPI_DSI1_GPIO0_01_MIPI_DSI1_GPIO0_IO01 SC_P_MIPI_DSI1_GPIO0_01 0 +#define SC_P_MIPI_DSI1_GPIO0_01_ADMA_I2C2_SDA SC_P_MIPI_DSI1_GPIO0_01 1 +#define SC_P_MIPI_DSI1_GPIO0_01_LSIO_GPIO2_IO00 SC_P_MIPI_DSI1_GPIO0_01 4 +#define SC_P_JTAG_TRST_B_SCU_JTAG_TRST_B SC_P_JTAG_TRST_B 0 +#define SC_P_JTAG_TRST_B_SCU_WDOG0_WDOG_OUT SC_P_JTAG_TRST_B 1 +#define SC_P_PMIC_I2C_SCL_SCU_PMIC_I2C_SCL SC_P_PMIC_I2C_SCL 0 +#define SC_P_PMIC_I2C_SCL_SCU_GPIO0_IOXX_PMIC_A35_ON SC_P_PMIC_I2C_SCL 1 +#define SC_P_PMIC_I2C_SCL_LSIO_GPIO2_IO01 SC_P_PMIC_I2C_SCL 4 +#define SC_P_PMIC_I2C_SDA_SCU_PMIC_I2C_SDA SC_P_PMIC_I2C_SDA 0 +#define SC_P_PMIC_I2C_SDA_SCU_GPIO0_IOXX_PMIC_GPU_ON SC_P_PMIC_I2C_SDA 1 +#define SC_P_PMIC_I2C_SDA_LSIO_GPIO2_IO02 SC_P_PMIC_I2C_SDA 4 +#define SC_P_PMIC_INT_B_SCU_DSC_PMIC_INT_B SC_P_PMIC_INT_B 0 +#define SC_P_SCU_GPIO0_00_SCU_GPIO0_IO00 SC_P_SCU_GPIO0_00 0 +#define SC_P_SCU_GPIO0_00_SCU_UART0_RX SC_P_SCU_GPIO0_00 1 +#define SC_P_SCU_GPIO0_00_M40_UART0_RX SC_P_SCU_GPIO0_00 2 +#define SC_P_SCU_GPIO0_00_ADMA_UART3_RX SC_P_SCU_GPIO0_00 3 +#define SC_P_SCU_GPIO0_00_LSIO_GPIO2_IO03 SC_P_SCU_GPIO0_00 4 +#define SC_P_SCU_GPIO0_01_SCU_GPIO0_IO01 SC_P_SCU_GPIO0_01 0 +#define SC_P_SCU_GPIO0_01_SCU_UART0_TX SC_P_SCU_GPIO0_01 1 +#define SC_P_SCU_GPIO0_01_M40_UART0_TX SC_P_SCU_GPIO0_01 2 +#define SC_P_SCU_GPIO0_01_ADMA_UART3_TX SC_P_SCU_GPIO0_01 3 +#define SC_P_SCU_GPIO0_01_SCU_WDOG0_WDOG_OUT SC_P_SCU_GPIO0_01 4 +#define SC_P_SCU_PMIC_STANDBY_SCU_DSC_PMIC_STANDBY SC_P_SCU_PMIC_STANDBY 0 +#define SC_P_SCU_BOOT_MODE0_SCU_DSC_BOOT_MODE0 SC_P_SCU_BOOT_MODE0 0 +#define SC_P_SCU_BOOT_MODE1_SCU_DSC_BOOT_MODE1 SC_P_SCU_BOOT_MODE1 0 +#define SC_P_SCU_BOOT_MODE2_SCU_DSC_BOOT_MODE2 SC_P_SCU_BOOT_MODE2 0 +#define SC_P_SCU_BOOT_MODE2_SCU_PMIC_I2C_SDA SC_P_SCU_BOOT_MODE2 1 +#define SC_P_SCU_BOOT_MODE3_SCU_DSC_BOOT_MODE3 SC_P_SCU_BOOT_MODE3 0 +#define SC_P_SCU_BOOT_MODE3_SCU_PMIC_I2C_SCL SC_P_SCU_BOOT_MODE3 1 +#define SC_P_SCU_BOOT_MODE3_SCU_DSC_RTC_CLOCK_OUTPUT_32K SC_P_SCU_BOOT_MODE3 3 +#define SC_P_CSI_D00_CI_PI_D02 SC_P_CSI_D00 0 +#define SC_P_CSI_D00_ADMA_SAI0_RXC SC_P_CSI_D00 2 +#define SC_P_CSI_D01_CI_PI_D03 SC_P_CSI_D01 0 +#define SC_P_CSI_D01_ADMA_SAI0_RXD SC_P_CSI_D01 2 +#define SC_P_CSI_D02_CI_PI_D04 SC_P_CSI_D02 0 +#define SC_P_CSI_D02_ADMA_SAI0_RXFS SC_P_CSI_D02 2 +#define SC_P_CSI_D03_CI_PI_D05 SC_P_CSI_D03 0 +#define SC_P_CSI_D03_ADMA_SAI2_RXC SC_P_CSI_D03 2 +#define SC_P_CSI_D04_CI_PI_D06 SC_P_CSI_D04 0 +#define SC_P_CSI_D04_ADMA_SAI2_RXD SC_P_CSI_D04 2 +#define SC_P_CSI_D05_CI_PI_D07 SC_P_CSI_D05 0 +#define SC_P_CSI_D05_ADMA_SAI2_RXFS SC_P_CSI_D05 2 +#define SC_P_CSI_D06_CI_PI_D08 SC_P_CSI_D06 0 +#define SC_P_CSI_D06_ADMA_SAI3_RXC SC_P_CSI_D06 2 +#define SC_P_CSI_D07_CI_PI_D09 SC_P_CSI_D07 0 +#define SC_P_CSI_D07_ADMA_SAI3_RXD SC_P_CSI_D07 2 +#define SC_P_CSI_HSYNC_CI_PI_HSYNC SC_P_CSI_HSYNC 0 +#define SC_P_CSI_HSYNC_CI_PI_D00 SC_P_CSI_HSYNC 1 +#define SC_P_CSI_HSYNC_ADMA_SAI3_RXFS SC_P_CSI_HSYNC 2 +#define SC_P_CSI_VSYNC_CI_PI_VSYNC SC_P_CSI_VSYNC 0 +#define SC_P_CSI_VSYNC_CI_PI_D01 SC_P_CSI_VSYNC 1 +#define SC_P_CSI_PCLK_CI_PI_PCLK SC_P_CSI_PCLK 0 +#define SC_P_CSI_PCLK_MIPI_CSI0_I2C0_SCL SC_P_CSI_PCLK 1 +#define SC_P_CSI_PCLK_ADMA_SPI1_SCK SC_P_CSI_PCLK 3 +#define SC_P_CSI_PCLK_LSIO_GPIO3_IO00 SC_P_CSI_PCLK 4 +#define SC_P_CSI_MCLK_CI_PI_MCLK SC_P_CSI_MCLK 0 +#define SC_P_CSI_MCLK_MIPI_CSI0_I2C0_SDA SC_P_CSI_MCLK 1 +#define SC_P_CSI_MCLK_ADMA_SPI1_SDO SC_P_CSI_MCLK 3 +#define SC_P_CSI_MCLK_LSIO_GPIO3_IO01 SC_P_CSI_MCLK 4 +#define SC_P_CSI_EN_CI_PI_EN SC_P_CSI_EN 0 +#define SC_P_CSI_EN_CI_PI_I2C_SCL SC_P_CSI_EN 1 +#define SC_P_CSI_EN_ADMA_I2C3_SCL SC_P_CSI_EN 2 +#define SC_P_CSI_EN_ADMA_SPI1_SDI SC_P_CSI_EN 3 +#define SC_P_CSI_EN_LSIO_GPIO3_IO02 SC_P_CSI_EN 4 +#define SC_P_CSI_RESET_CI_PI_RESET SC_P_CSI_RESET 0 +#define SC_P_CSI_RESET_CI_PI_I2C_SDA SC_P_CSI_RESET 1 +#define SC_P_CSI_RESET_ADMA_I2C3_SDA SC_P_CSI_RESET 2 +#define SC_P_CSI_RESET_ADMA_SPI1_CS0 SC_P_CSI_RESET 3 +#define SC_P_CSI_RESET_LSIO_GPIO3_IO03 SC_P_CSI_RESET 4 +#define SC_P_MIPI_CSI0_MCLK_OUT_MIPI_CSI0_ACM_MCLK_OUT SC_P_MIPI_CSI0_MCLK_OUT 0 +#define SC_P_MIPI_CSI0_MCLK_OUT_LSIO_GPIO3_IO04 SC_P_MIPI_CSI0_MCLK_OUT 4 +#define SC_P_MIPI_CSI0_I2C0_SCL_MIPI_CSI0_I2C0_SCL SC_P_MIPI_CSI0_I2C0_SCL 0 +#define SC_P_MIPI_CSI0_I2C0_SCL_MIPI_CSI0_GPIO0_IO02 SC_P_MIPI_CSI0_I2C0_SCL 1 +#define SC_P_MIPI_CSI0_I2C0_SCL_LSIO_GPIO3_IO05 SC_P_MIPI_CSI0_I2C0_SCL 4 +#define SC_P_MIPI_CSI0_I2C0_SDA_MIPI_CSI0_I2C0_SDA SC_P_MIPI_CSI0_I2C0_SDA 0 +#define SC_P_MIPI_CSI0_I2C0_SDA_MIPI_CSI0_GPIO0_IO03 SC_P_MIPI_CSI0_I2C0_SDA 1 +#define SC_P_MIPI_CSI0_I2C0_SDA_LSIO_GPIO3_IO06 SC_P_MIPI_CSI0_I2C0_SDA 4 +#define SC_P_MIPI_CSI0_GPIO0_01_MIPI_CSI0_GPIO0_IO01 SC_P_MIPI_CSI0_GPIO0_01 0 +#define SC_P_MIPI_CSI0_GPIO0_01_ADMA_I2C0_SDA SC_P_MIPI_CSI0_GPIO0_01 1 +#define SC_P_MIPI_CSI0_GPIO0_01_LSIO_GPIO3_IO07 SC_P_MIPI_CSI0_GPIO0_01 4 +#define SC_P_MIPI_CSI0_GPIO0_00_MIPI_CSI0_GPIO0_IO00 SC_P_MIPI_CSI0_GPIO0_00 0 +#define SC_P_MIPI_CSI0_GPIO0_00_ADMA_I2C0_SCL SC_P_MIPI_CSI0_GPIO0_00 1 +#define SC_P_MIPI_CSI0_GPIO0_00_LSIO_GPIO3_IO08 SC_P_MIPI_CSI0_GPIO0_00 4 +#define SC_P_QSPI0A_DATA0_LSIO_QSPI0A_DATA0 SC_P_QSPI0A_DATA0 0 +#define SC_P_QSPI0A_DATA0_LSIO_GPIO3_IO09 SC_P_QSPI0A_DATA0 4 +#define SC_P_QSPI0A_DATA1_LSIO_QSPI0A_DATA1 SC_P_QSPI0A_DATA1 0 +#define SC_P_QSPI0A_DATA1_LSIO_GPIO3_IO10 SC_P_QSPI0A_DATA1 4 +#define SC_P_QSPI0A_DATA2_LSIO_QSPI0A_DATA2 SC_P_QSPI0A_DATA2 0 +#define SC_P_QSPI0A_DATA2_LSIO_GPIO3_IO11 SC_P_QSPI0A_DATA2 4 +#define SC_P_QSPI0A_DATA3_LSIO_QSPI0A_DATA3 SC_P_QSPI0A_DATA3 0 +#define SC_P_QSPI0A_DATA3_LSIO_GPIO3_IO12 SC_P_QSPI0A_DATA3 4 +#define SC_P_QSPI0A_DQS_LSIO_QSPI0A_DQS SC_P_QSPI0A_DQS 0 +#define SC_P_QSPI0A_DQS_LSIO_GPIO3_IO13 SC_P_QSPI0A_DQS 4 +#define SC_P_QSPI0A_SS0_B_LSIO_QSPI0A_SS0_B SC_P_QSPI0A_SS0_B 0 +#define SC_P_QSPI0A_SS0_B_LSIO_GPIO3_IO14 SC_P_QSPI0A_SS0_B 4 +#define SC_P_QSPI0A_SS1_B_LSIO_QSPI0A_SS1_B SC_P_QSPI0A_SS1_B 0 +#define SC_P_QSPI0A_SS1_B_LSIO_GPIO3_IO15 SC_P_QSPI0A_SS1_B 4 +#define SC_P_QSPI0A_SCLK_LSIO_QSPI0A_SCLK SC_P_QSPI0A_SCLK 0 +#define SC_P_QSPI0A_SCLK_LSIO_GPIO3_IO16 SC_P_QSPI0A_SCLK 4 +#define SC_P_QSPI0B_SCLK_LSIO_QSPI0B_SCLK SC_P_QSPI0B_SCLK 0 +#define SC_P_QSPI0B_SCLK_LSIO_QSPI1A_SCLK SC_P_QSPI0B_SCLK 1 +#define SC_P_QSPI0B_SCLK_LSIO_KPP0_COL0 SC_P_QSPI0B_SCLK 2 +#define SC_P_QSPI0B_SCLK_LSIO_GPIO3_IO17 SC_P_QSPI0B_SCLK 4 +#define SC_P_QSPI0B_DATA0_LSIO_QSPI0B_DATA0 SC_P_QSPI0B_DATA0 0 +#define SC_P_QSPI0B_DATA0_LSIO_QSPI1A_DATA0 SC_P_QSPI0B_DATA0 1 +#define SC_P_QSPI0B_DATA0_LSIO_KPP0_COL1 SC_P_QSPI0B_DATA0 2 +#define SC_P_QSPI0B_DATA0_LSIO_GPIO3_IO18 SC_P_QSPI0B_DATA0 4 +#define SC_P_QSPI0B_DATA1_LSIO_QSPI0B_DATA1 SC_P_QSPI0B_DATA1 0 +#define SC_P_QSPI0B_DATA1_LSIO_QSPI1A_DATA1 SC_P_QSPI0B_DATA1 1 +#define SC_P_QSPI0B_DATA1_LSIO_KPP0_COL2 SC_P_QSPI0B_DATA1 2 +#define SC_P_QSPI0B_DATA1_LSIO_GPIO3_IO19 SC_P_QSPI0B_DATA1 4 +#define SC_P_QSPI0B_DATA2_LSIO_QSPI0B_DATA2 SC_P_QSPI0B_DATA2 0 +#define SC_P_QSPI0B_DATA2_LSIO_QSPI1A_DATA2 SC_P_QSPI0B_DATA2 1 +#define SC_P_QSPI0B_DATA2_LSIO_KPP0_COL3 SC_P_QSPI0B_DATA2 2 +#define SC_P_QSPI0B_DATA2_LSIO_GPIO3_IO20 SC_P_QSPI0B_DATA2 4 +#define SC_P_QSPI0B_DATA3_LSIO_QSPI0B_DATA3 SC_P_QSPI0B_DATA3 0 +#define SC_P_QSPI0B_DATA3_LSIO_QSPI1A_DATA3 SC_P_QSPI0B_DATA3 1 +#define SC_P_QSPI0B_DATA3_LSIO_KPP0_ROW0 SC_P_QSPI0B_DATA3 2 +#define SC_P_QSPI0B_DATA3_LSIO_GPIO3_IO21 SC_P_QSPI0B_DATA3 4 +#define SC_P_QSPI0B_DQS_LSIO_QSPI0B_DQS SC_P_QSPI0B_DQS 0 +#define SC_P_QSPI0B_DQS_LSIO_QSPI1A_DQS SC_P_QSPI0B_DQS 1 +#define SC_P_QSPI0B_DQS_LSIO_KPP0_ROW1 SC_P_QSPI0B_DQS 2 +#define SC_P_QSPI0B_DQS_LSIO_GPIO3_IO22 SC_P_QSPI0B_DQS 4 +#define SC_P_QSPI0B_SS0_B_LSIO_QSPI0B_SS0_B SC_P_QSPI0B_SS0_B 0 +#define SC_P_QSPI0B_SS0_B_LSIO_QSPI1A_SS0_B SC_P_QSPI0B_SS0_B 1 +#define SC_P_QSPI0B_SS0_B_LSIO_KPP0_ROW2 SC_P_QSPI0B_SS0_B 2 +#define SC_P_QSPI0B_SS0_B_LSIO_GPIO3_IO23 SC_P_QSPI0B_SS0_B 4 +#define SC_P_QSPI0B_SS1_B_LSIO_QSPI0B_SS1_B SC_P_QSPI0B_SS1_B 0 +#define SC_P_QSPI0B_SS1_B_LSIO_QSPI1A_SS1_B SC_P_QSPI0B_SS1_B 1 +#define SC_P_QSPI0B_SS1_B_LSIO_KPP0_ROW3 SC_P_QSPI0B_SS1_B 2 +#define SC_P_QSPI0B_SS1_B_LSIO_GPIO3_IO24 SC_P_QSPI0B_SS1_B 4 +/*@}*/ + +#endif /* SC_PADS_H */ + diff --git a/include/dt-bindings/soc/imx_rsrc.h b/include/dt-bindings/soc/imx_rsrc.h new file mode 100644 index 0000000000..b2154e9a94 --- /dev/null +++ b/include/dt-bindings/soc/imx_rsrc.h @@ -0,0 +1,560 @@ +/* + * Copyright (C) 2016 Freescale Semiconductor, Inc. + * Copyright 2017-2018 NXP + * + * SPDX-License-Identifier: GPL-2.0+ + */ + +#ifndef DT_BINDINGS_RSCRC_IMX_H +#define DT_BINDINGS_RSCRC_IMX_H + +/*! + * These defines are used to indicate a resource. Resources include peripherals + * and bus masters (but not memory regions). Note items from list should + * never be changed or removed (only added to at the end of the list). + */ +#define SC_R_A53 0 +#define SC_R_A53_0 1 +#define SC_R_A53_1 2 +#define SC_R_A53_2 3 +#define SC_R_A53_3 4 +#define SC_R_A72 5 +#define SC_R_A72_0 6 +#define SC_R_A72_1 7 +#define SC_R_A72_2 8 +#define SC_R_A72_3 9 +#define SC_R_CCI 10 +#define SC_R_DB 11 +#define SC_R_DRC_0 12 +#define SC_R_DRC_1 13 +#define SC_R_GIC_SMMU 14 +#define SC_R_IRQSTR_M4_0 15 +#define SC_R_IRQSTR_M4_1 16 +#define SC_R_SMMU 17 +#define SC_R_GIC 18 +#define SC_R_DC_0_BLIT0 19 +#define SC_R_DC_0_BLIT1 20 +#define SC_R_DC_0_BLIT2 21 +#define SC_R_DC_0_BLIT_OUT 22 +#define SC_R_DC_0_CAPTURE0 23 +#define SC_R_DC_0_CAPTURE1 24 +#define SC_R_DC_0_WARP 25 +#define SC_R_DC_0_INTEGRAL0 26 +#define SC_R_DC_0_INTEGRAL1 27 +#define SC_R_DC_0_VIDEO0 28 +#define SC_R_DC_0_VIDEO1 29 +#define SC_R_DC_0_FRAC0 30 +#define SC_R_DC_0_FRAC1 31 +#define SC_R_DC_0 32 +#define SC_R_GPU_2_PID0 33 +#define SC_R_DC_0_PLL_0 34 +#define SC_R_DC_0_PLL_1 35 +#define SC_R_DC_1_BLIT0 36 +#define SC_R_DC_1_BLIT1 37 +#define SC_R_DC_1_BLIT2 38 +#define SC_R_DC_1_BLIT_OUT 39 +#define SC_R_DC_1_CAPTURE0 40 +#define SC_R_DC_1_CAPTURE1 41 +#define SC_R_DC_1_WARP 42 +#define SC_R_DC_1_INTEGRAL0 43 +#define SC_R_DC_1_INTEGRAL1 44 +#define SC_R_DC_1_VIDEO0 45 +#define SC_R_DC_1_VIDEO1 46 +#define SC_R_DC_1_FRAC0 47 +#define SC_R_DC_1_FRAC1 48 +#define SC_R_DC_1 49 +#define SC_R_GPU_3_PID0 50 +#define SC_R_DC_1_PLL_0 51 +#define SC_R_DC_1_PLL_1 52 +#define SC_R_SPI_0 53 +#define SC_R_SPI_1 54 +#define SC_R_SPI_2 55 +#define SC_R_SPI_3 56 +#define SC_R_UART_0 57 +#define SC_R_UART_1 58 +#define SC_R_UART_2 59 +#define SC_R_UART_3 60 +#define SC_R_UART_4 61 +#define SC_R_EMVSIM_0 62 +#define SC_R_EMVSIM_1 63 +#define SC_R_DMA_0_CH0 64 +#define SC_R_DMA_0_CH1 65 +#define SC_R_DMA_0_CH2 66 +#define SC_R_DMA_0_CH3 67 +#define SC_R_DMA_0_CH4 68 +#define SC_R_DMA_0_CH5 69 +#define SC_R_DMA_0_CH6 70 +#define SC_R_DMA_0_CH7 71 +#define SC_R_DMA_0_CH8 72 +#define SC_R_DMA_0_CH9 73 +#define SC_R_DMA_0_CH10 74 +#define SC_R_DMA_0_CH11 75 +#define SC_R_DMA_0_CH12 76 +#define SC_R_DMA_0_CH13 77 +#define SC_R_DMA_0_CH14 78 +#define SC_R_DMA_0_CH15 79 +#define SC_R_DMA_0_CH16 80 +#define SC_R_DMA_0_CH17 81 +#define SC_R_DMA_0_CH18 82 +#define SC_R_DMA_0_CH19 83 +#define SC_R_DMA_0_CH20 84 +#define SC_R_DMA_0_CH21 85 +#define SC_R_DMA_0_CH22 86 +#define SC_R_DMA_0_CH23 87 +#define SC_R_DMA_0_CH24 88 +#define SC_R_DMA_0_CH25 89 +#define SC_R_DMA_0_CH26 90 +#define SC_R_DMA_0_CH27 91 +#define SC_R_DMA_0_CH28 92 +#define SC_R_DMA_0_CH29 93 +#define SC_R_DMA_0_CH30 94 +#define SC_R_DMA_0_CH31 95 +#define SC_R_I2C_0 96 +#define SC_R_I2C_1 97 +#define SC_R_I2C_2 98 +#define SC_R_I2C_3 99 +#define SC_R_I2C_4 100 +#define SC_R_ADC_0 101 +#define SC_R_ADC_1 102 +#define SC_R_FTM_0 103 +#define SC_R_FTM_1 104 +#define SC_R_CAN_0 105 +#define SC_R_CAN_1 106 +#define SC_R_CAN_2 107 +#define SC_R_DMA_1_CH0 108 +#define SC_R_DMA_1_CH1 109 +#define SC_R_DMA_1_CH2 110 +#define SC_R_DMA_1_CH3 111 +#define SC_R_DMA_1_CH4 112 +#define SC_R_DMA_1_CH5 113 +#define SC_R_DMA_1_CH6 114 +#define SC_R_DMA_1_CH7 115 +#define SC_R_DMA_1_CH8 116 +#define SC_R_DMA_1_CH9 117 +#define SC_R_DMA_1_CH10 118 +#define SC_R_DMA_1_CH11 119 +#define SC_R_DMA_1_CH12 120 +#define SC_R_DMA_1_CH13 121 +#define SC_R_DMA_1_CH14 122 +#define SC_R_DMA_1_CH15 123 +#define SC_R_DMA_1_CH16 124 +#define SC_R_DMA_1_CH17 125 +#define SC_R_DMA_1_CH18 126 +#define SC_R_DMA_1_CH19 127 +#define SC_R_DMA_1_CH20 128 +#define SC_R_DMA_1_CH21 129 +#define SC_R_DMA_1_CH22 130 +#define SC_R_DMA_1_CH23 131 +#define SC_R_DMA_1_CH24 132 +#define SC_R_DMA_1_CH25 133 +#define SC_R_DMA_1_CH26 134 +#define SC_R_DMA_1_CH27 135 +#define SC_R_DMA_1_CH28 136 +#define SC_R_DMA_1_CH29 137 +#define SC_R_DMA_1_CH30 138 +#define SC_R_DMA_1_CH31 139 +#define SC_R_UNUSED1 140 +#define SC_R_UNUSED2 141 +#define SC_R_UNUSED3 142 +#define SC_R_UNUSED4 143 +#define SC_R_GPU_0_PID0 144 +#define SC_R_GPU_0_PID1 145 +#define SC_R_GPU_0_PID2 146 +#define SC_R_GPU_0_PID3 147 +#define SC_R_GPU_1_PID0 148 +#define SC_R_GPU_1_PID1 149 +#define SC_R_GPU_1_PID2 150 +#define SC_R_GPU_1_PID3 151 +#define SC_R_PCIE_A 152 +#define SC_R_SERDES_0 153 +#define SC_R_MATCH_0 154 +#define SC_R_MATCH_1 155 +#define SC_R_MATCH_2 156 +#define SC_R_MATCH_3 157 +#define SC_R_MATCH_4 158 +#define SC_R_MATCH_5 159 +#define SC_R_MATCH_6 160 +#define SC_R_MATCH_7 161 +#define SC_R_MATCH_8 162 +#define SC_R_MATCH_9 163 +#define SC_R_MATCH_10 164 +#define SC_R_MATCH_11 165 +#define SC_R_MATCH_12 166 +#define SC_R_MATCH_13 167 +#define SC_R_MATCH_14 168 +#define SC_R_PCIE_B 169 +#define SC_R_SATA_0 170 +#define SC_R_SERDES_1 171 +#define SC_R_HSIO_GPIO 172 +#define SC_R_MATCH_15 173 +#define SC_R_MATCH_16 174 +#define SC_R_MATCH_17 175 +#define SC_R_MATCH_18 176 +#define SC_R_MATCH_19 177 +#define SC_R_MATCH_20 178 +#define SC_R_MATCH_21 179 +#define SC_R_MATCH_22 180 +#define SC_R_MATCH_23 181 +#define SC_R_MATCH_24 182 +#define SC_R_MATCH_25 183 +#define SC_R_MATCH_26 184 +#define SC_R_MATCH_27 185 +#define SC_R_MATCH_28 186 +#define SC_R_LCD_0 187 +#define SC_R_LCD_0_PWM_0 188 +#define SC_R_LCD_0_I2C_0 189 +#define SC_R_LCD_0_I2C_1 190 +#define SC_R_PWM_0 191 +#define SC_R_PWM_1 192 +#define SC_R_PWM_2 193 +#define SC_R_PWM_3 194 +#define SC_R_PWM_4 195 +#define SC_R_PWM_5 196 +#define SC_R_PWM_6 197 +#define SC_R_PWM_7 198 +#define SC_R_GPIO_0 199 +#define SC_R_GPIO_1 200 +#define SC_R_GPIO_2 201 +#define SC_R_GPIO_3 202 +#define SC_R_GPIO_4 203 +#define SC_R_GPIO_5 204 +#define SC_R_GPIO_6 205 +#define SC_R_GPIO_7 206 +#define SC_R_GPT_0 207 +#define SC_R_GPT_1 208 +#define SC_R_GPT_2 209 +#define SC_R_GPT_3 210 +#define SC_R_GPT_4 211 +#define SC_R_KPP 212 +#define SC_R_MU_0A 213 +#define SC_R_MU_1A 214 +#define SC_R_MU_2A 215 +#define SC_R_MU_3A 216 +#define SC_R_MU_4A 217 +#define SC_R_MU_5A 218 +#define SC_R_MU_6A 219 +#define SC_R_MU_7A 220 +#define SC_R_MU_8A 221 +#define SC_R_MU_9A 222 +#define SC_R_MU_10A 223 +#define SC_R_MU_11A 224 +#define SC_R_MU_12A 225 +#define SC_R_MU_13A 226 +#define SC_R_MU_5B 227 +#define SC_R_MU_6B 228 +#define SC_R_MU_7B 229 +#define SC_R_MU_8B 230 +#define SC_R_MU_9B 231 +#define SC_R_MU_10B 232 +#define SC_R_MU_11B 233 +#define SC_R_MU_12B 234 +#define SC_R_MU_13B 235 +#define SC_R_ROM_0 236 +#define SC_R_FSPI_0 237 +#define SC_R_FSPI_1 238 +#define SC_R_IEE 239 +#define SC_R_IEE_R0 240 +#define SC_R_IEE_R1 241 +#define SC_R_IEE_R2 242 +#define SC_R_IEE_R3 243 +#define SC_R_IEE_R4 244 +#define SC_R_IEE_R5 245 +#define SC_R_IEE_R6 246 +#define SC_R_IEE_R7 247 +#define SC_R_SDHC_0 248 +#define SC_R_SDHC_1 249 +#define SC_R_SDHC_2 250 +#define SC_R_ENET_0 251 +#define SC_R_ENET_1 252 +#define SC_R_MLB_0 253 +#define SC_R_DMA_2_CH0 254 +#define SC_R_DMA_2_CH1 255 +#define SC_R_DMA_2_CH2 256 +#define SC_R_DMA_2_CH3 257 +#define SC_R_DMA_2_CH4 258 +#define SC_R_USB_0 259 +#define SC_R_USB_1 260 +#define SC_R_USB_0_PHY 261 +#define SC_R_USB_2 262 +#define SC_R_USB_2_PHY 263 +#define SC_R_DTCP 264 +#define SC_R_NAND 265 +#define SC_R_LVDS_0 266 +#define SC_R_LVDS_0_PWM_0 267 +#define SC_R_LVDS_0_I2C_0 268 +#define SC_R_LVDS_0_I2C_1 269 +#define SC_R_LVDS_1 270 +#define SC_R_LVDS_1_PWM_0 271 +#define SC_R_LVDS_1_I2C_0 272 +#define SC_R_LVDS_1_I2C_1 273 +#define SC_R_LVDS_2 274 +#define SC_R_LVDS_2_PWM_0 275 +#define SC_R_LVDS_2_I2C_0 276 +#define SC_R_LVDS_2_I2C_1 277 +#define SC_R_M4_0_PID0 278 +#define SC_R_M4_0_PID1 279 +#define SC_R_M4_0_PID2 280 +#define SC_R_M4_0_PID3 281 +#define SC_R_M4_0_PID4 282 +#define SC_R_M4_0_RGPIO 283 +#define SC_R_M4_0_SEMA42 284 +#define SC_R_M4_0_TPM 285 +#define SC_R_M4_0_PIT 286 +#define SC_R_M4_0_UART 287 +#define SC_R_M4_0_I2C 288 +#define SC_R_M4_0_INTMUX 289 +#define SC_R_M4_0_SIM 290 +#define SC_R_M4_0_WDOG 291 +#define SC_R_M4_0_MU_0B 292 +#define SC_R_M4_0_MU_0A0 293 +#define SC_R_M4_0_MU_0A1 294 +#define SC_R_M4_0_MU_0A2 295 +#define SC_R_M4_0_MU_0A3 296 +#define SC_R_M4_0_MU_1A 297 +#define SC_R_M4_1_PID0 298 +#define SC_R_M4_1_PID1 299 +#define SC_R_M4_1_PID2 300 +#define SC_R_M4_1_PID3 301 +#define SC_R_M4_1_PID4 302 +#define SC_R_M4_1_RGPIO 303 +#define SC_R_M4_1_SEMA42 304 +#define SC_R_M4_1_TPM 305 +#define SC_R_M4_1_PIT 306 +#define SC_R_M4_1_UART 307 +#define SC_R_M4_1_I2C 308 +#define SC_R_M4_1_INTMUX 309 +#define SC_R_M4_1_SIM 310 +#define SC_R_M4_1_WDOG 311 +#define SC_R_M4_1_MU_0B 312 +#define SC_R_M4_1_MU_0A0 313 +#define SC_R_M4_1_MU_0A1 314 +#define SC_R_M4_1_MU_0A2 315 +#define SC_R_M4_1_MU_0A3 316 +#define SC_R_M4_1_MU_1A 317 +#define SC_R_SAI_0 318 +#define SC_R_SAI_1 319 +#define SC_R_SAI_2 320 +#define SC_R_IRQSTR_SCU2 321 +#define SC_R_IRQSTR_DSP 322 +#define SC_R_UNUSED5 323 +#define SC_R_OCRAM 324 +#define SC_R_AUDIO_PLL_0 325 +#define SC_R_PI_0 326 +#define SC_R_PI_0_PWM_0 327 +#define SC_R_PI_0_PWM_1 328 +#define SC_R_PI_0_I2C_0 329 +#define SC_R_PI_0_PLL 330 +#define SC_R_PI_1 331 +#define SC_R_PI_1_PWM_0 332 +#define SC_R_PI_1_PWM_1 333 +#define SC_R_PI_1_I2C_0 334 +#define SC_R_PI_1_PLL 335 +#define SC_R_SC_PID0 336 +#define SC_R_SC_PID1 337 +#define SC_R_SC_PID2 338 +#define SC_R_SC_PID3 339 +#define SC_R_SC_PID4 340 +#define SC_R_SC_SEMA42 341 +#define SC_R_SC_TPM 342 +#define SC_R_SC_PIT 343 +#define SC_R_SC_UART 344 +#define SC_R_SC_I2C 345 +#define SC_R_SC_MU_0B 346 +#define SC_R_SC_MU_0A0 347 +#define SC_R_SC_MU_0A1 348 +#define SC_R_SC_MU_0A2 349 +#define SC_R_SC_MU_0A3 350 +#define SC_R_SC_MU_1A 351 +#define SC_R_SYSCNT_RD 352 +#define SC_R_SYSCNT_CMP 353 +#define SC_R_DEBUG 354 +#define SC_R_SYSTEM 355 +#define SC_R_SNVS 356 +#define SC_R_OTP 357 +#define SC_R_VPU_PID0 358 +#define SC_R_VPU_PID1 359 +#define SC_R_VPU_PID2 360 +#define SC_R_VPU_PID3 361 +#define SC_R_VPU_PID4 362 +#define SC_R_VPU_PID5 363 +#define SC_R_VPU_PID6 364 +#define SC_R_VPU_PID7 365 +#define SC_R_VPU_UART 366 +#define SC_R_VPUCORE 367 +#define SC_R_VPUCORE_0 368 +#define SC_R_VPUCORE_1 369 +#define SC_R_VPUCORE_2 370 +#define SC_R_VPUCORE_3 371 +#define SC_R_DMA_4_CH0 372 +#define SC_R_DMA_4_CH1 373 +#define SC_R_DMA_4_CH2 374 +#define SC_R_DMA_4_CH3 375 +#define SC_R_DMA_4_CH4 376 +#define SC_R_ISI_CH0 377 +#define SC_R_ISI_CH1 378 +#define SC_R_ISI_CH2 379 +#define SC_R_ISI_CH3 380 +#define SC_R_ISI_CH4 381 +#define SC_R_ISI_CH5 382 +#define SC_R_ISI_CH6 383 +#define SC_R_ISI_CH7 384 +#define SC_R_MJPEG_DEC_S0 385 +#define SC_R_MJPEG_DEC_S1 386 +#define SC_R_MJPEG_DEC_S2 387 +#define SC_R_MJPEG_DEC_S3 388 +#define SC_R_MJPEG_ENC_S0 389 +#define SC_R_MJPEG_ENC_S1 390 +#define SC_R_MJPEG_ENC_S2 391 +#define SC_R_MJPEG_ENC_S3 392 +#define SC_R_MIPI_0 393 +#define SC_R_MIPI_0_PWM_0 394 +#define SC_R_MIPI_0_I2C_0 395 +#define SC_R_MIPI_0_I2C_1 396 +#define SC_R_MIPI_1 397 +#define SC_R_MIPI_1_PWM_0 398 +#define SC_R_MIPI_1_I2C_0 399 +#define SC_R_MIPI_1_I2C_1 400 +#define SC_R_CSI_0 401 +#define SC_R_CSI_0_PWM_0 402 +#define SC_R_CSI_0_I2C_0 403 +#define SC_R_CSI_1 404 +#define SC_R_CSI_1_PWM_0 405 +#define SC_R_CSI_1_I2C_0 406 +#define SC_R_HDMI 407 +#define SC_R_HDMI_I2S 408 +#define SC_R_HDMI_I2C_0 409 +#define SC_R_HDMI_PLL_0 410 +#define SC_R_HDMI_RX 411 +#define SC_R_HDMI_RX_BYPASS 412 +#define SC_R_HDMI_RX_I2C_0 413 +#define SC_R_ASRC_0 414 +#define SC_R_ESAI_0 415 +#define SC_R_SPDIF_0 416 +#define SC_R_SPDIF_1 417 +#define SC_R_SAI_3 418 +#define SC_R_SAI_4 419 +#define SC_R_SAI_5 420 +#define SC_R_GPT_5 421 +#define SC_R_GPT_6 422 +#define SC_R_GPT_7 423 +#define SC_R_GPT_8 424 +#define SC_R_GPT_9 425 +#define SC_R_GPT_10 426 +#define SC_R_DMA_2_CH5 427 +#define SC_R_DMA_2_CH6 428 +#define SC_R_DMA_2_CH7 429 +#define SC_R_DMA_2_CH8 430 +#define SC_R_DMA_2_CH9 431 +#define SC_R_DMA_2_CH10 432 +#define SC_R_DMA_2_CH11 433 +#define SC_R_DMA_2_CH12 434 +#define SC_R_DMA_2_CH13 435 +#define SC_R_DMA_2_CH14 436 +#define SC_R_DMA_2_CH15 437 +#define SC_R_DMA_2_CH16 438 +#define SC_R_DMA_2_CH17 439 +#define SC_R_DMA_2_CH18 440 +#define SC_R_DMA_2_CH19 441 +#define SC_R_DMA_2_CH20 442 +#define SC_R_DMA_2_CH21 443 +#define SC_R_DMA_2_CH22 444 +#define SC_R_DMA_2_CH23 445 +#define SC_R_DMA_2_CH24 446 +#define SC_R_DMA_2_CH25 447 +#define SC_R_DMA_2_CH26 448 +#define SC_R_DMA_2_CH27 449 +#define SC_R_DMA_2_CH28 450 +#define SC_R_DMA_2_CH29 451 +#define SC_R_DMA_2_CH30 452 +#define SC_R_DMA_2_CH31 453 +#define SC_R_ASRC_1 454 +#define SC_R_ESAI_1 455 +#define SC_R_SAI_6 456 +#define SC_R_SAI_7 457 +#define SC_R_AMIX 458 +#define SC_R_MQS_0 459 +#define SC_R_DMA_3_CH0 460 +#define SC_R_DMA_3_CH1 461 +#define SC_R_DMA_3_CH2 462 +#define SC_R_DMA_3_CH3 463 +#define SC_R_DMA_3_CH4 464 +#define SC_R_DMA_3_CH5 465 +#define SC_R_DMA_3_CH6 466 +#define SC_R_DMA_3_CH7 467 +#define SC_R_DMA_3_CH8 468 +#define SC_R_DMA_3_CH9 469 +#define SC_R_DMA_3_CH10 470 +#define SC_R_DMA_3_CH11 471 +#define SC_R_DMA_3_CH12 472 +#define SC_R_DMA_3_CH13 473 +#define SC_R_DMA_3_CH14 474 +#define SC_R_DMA_3_CH15 475 +#define SC_R_DMA_3_CH16 476 +#define SC_R_DMA_3_CH17 477 +#define SC_R_DMA_3_CH18 478 +#define SC_R_DMA_3_CH19 479 +#define SC_R_DMA_3_CH20 480 +#define SC_R_DMA_3_CH21 481 +#define SC_R_DMA_3_CH22 482 +#define SC_R_DMA_3_CH23 483 +#define SC_R_DMA_3_CH24 484 +#define SC_R_DMA_3_CH25 485 +#define SC_R_DMA_3_CH26 486 +#define SC_R_DMA_3_CH27 487 +#define SC_R_DMA_3_CH28 488 +#define SC_R_DMA_3_CH29 489 +#define SC_R_DMA_3_CH30 490 +#define SC_R_DMA_3_CH31 491 +#define SC_R_AUDIO_PLL_1 492 +#define SC_R_AUDIO_CLK_0 493 +#define SC_R_AUDIO_CLK_1 494 +#define SC_R_MCLK_OUT_0 495 +#define SC_R_MCLK_OUT_1 496 +#define SC_R_PMIC_0 497 +#define SC_R_PMIC_1 498 +#define SC_R_SECO 499 +#define SC_R_CAAM_JR1 500 +#define SC_R_CAAM_JR2 501 +#define SC_R_CAAM_JR3 502 +#define SC_R_SECO_MU_2 503 +#define SC_R_SECO_MU_3 504 +#define SC_R_SECO_MU_4 505 +#define SC_R_HDMI_RX_PWM_0 506 +#define SC_R_A35 507 +#define SC_R_A35_0 508 +#define SC_R_A35_1 509 +#define SC_R_A35_2 510 +#define SC_R_A35_3 511 +#define SC_R_DSP 512 +#define SC_R_DSP_RAM 513 +#define SC_R_CAAM_JR1_OUT 514 +#define SC_R_CAAM_JR2_OUT 515 +#define SC_R_CAAM_JR3_OUT 516 +#define SC_R_VPU_DEC_0 517 +#define SC_R_VPU_ENC_0 518 +#define SC_R_CAAM_JR0 519 +#define SC_R_CAAM_JR0_OUT 520 +#define SC_R_PMIC_2 521 +#define SC_R_DBLOGIC 522 +#define SC_R_HDMI_PLL_1 523 +#define SC_R_BOARD_R0 524 +#define SC_R_BOARD_R1 525 +#define SC_R_BOARD_R2 526 +#define SC_R_BOARD_R3 527 +#define SC_R_BOARD_R4 528 +#define SC_R_BOARD_R5 529 +#define SC_R_BOARD_R6 530 +#define SC_R_BOARD_R7 531 +#define SC_R_MJPEG_DEC_MP 532 +#define SC_R_MJPEG_ENC_MP 533 +#define SC_R_VPU_TS_0 534 +#define SC_R_VPU_MU_0 535 +#define SC_R_VPU_MU_1 536 +#define SC_R_VPU_MU_2 537 +#define SC_R_VPU_MU_3 538 +#define SC_R_VPU_ENC_1 539 +#define SC_R_VPU 540 +#define SC_R_LAST 541 + +#endif /* DT_BINDINGS_RSCRC_IMX_H */ + From patchwork Mon May 28 12:24:47 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Peng Fan X-Patchwork-Id: 921472 X-Patchwork-Delegate: sbabic@denx.de Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Authentication-Results: ozlabs.org; spf=none (mailfrom) smtp.mailfrom=lists.denx.de (client-ip=81.169.180.215; helo=lists.denx.de; envelope-from=u-boot-bounces@lists.denx.de; receiver=) Authentication-Results: ozlabs.org; dmarc=fail (p=none dis=none) header.from=nxp.com Authentication-Results: ozlabs.org; dkim=fail reason="signature verification failed" (1024-bit key; unprotected) header.d=nxp.com header.i=@nxp.com header.b="xp4v+Dmc"; dkim-atps=neutral Received: from lists.denx.de (dione.denx.de [81.169.180.215]) by ozlabs.org (Postfix) with ESMTP id 40vbbM0KTvz9s0q for ; Mon, 28 May 2018 22:22:38 +1000 (AEST) Received: by lists.denx.de (Postfix, from userid 105) id 8E101C21C27; Mon, 28 May 2018 12:22:18 +0000 (UTC) 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=BAD_ENC_HEADER, RCVD_IN_DNSWL_BLOCKED, SPF_HELO_PASS, T_DKIM_INVALID autolearn=unavailable autolearn_force=no version=3.4.0 Received: from lists.denx.de (localhost [IPv6:::1]) by lists.denx.de (Postfix) with ESMTP id 56368C21DCA; Mon, 28 May 2018 12:21:54 +0000 (UTC) Received: by lists.denx.de (Postfix, from userid 105) id E8880C21E0B; Mon, 28 May 2018 12:21:51 +0000 (UTC) Received: from EUR01-HE1-obe.outbound.protection.outlook.com (mail-he1eur01on0054.outbound.protection.outlook.com [104.47.0.54]) by lists.denx.de (Postfix) with ESMTPS id 2AEBAC21DF8 for ; Mon, 28 May 2018 12:21:45 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=nxp.com; s=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=2E89V5APqa1+Yw5LdCuGJsKarVFLLUHfOgMFWNB+Txk=; b=xp4v+Dmcc4CrnMR6vchnaWi8PndOqGejwNouZa47AtCxWe97XzjEh7XUJtW7iuKpSf+TJJq3mvtt258nnd5/1iJ1YlqBmBw1nyZUhBCzzZgILpDcc/G1K+Cf9Y8xp7rx0HbyQjgV5zPY+wU2fCEf8Rw+FNTgzUEgZHTIQgZ4iV4= Authentication-Results: spf=none (sender IP is ) smtp.mailfrom=peng.fan@nxp.com; Received: from linux-u7w5.ap.freescale.net.net (92.121.68.129) by VI1PR04MB3006.eurprd04.prod.outlook.com (2603:10a6:802:9::12) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384_P256) id 15.20.797.11; Mon, 28 May 2018 12:21:42 +0000 From: Peng Fan To: sbabic@denx.de, fabio.estevam@nxp.com Date: Mon, 28 May 2018 20:24:47 +0800 Message-Id: <20180528122526.20597-3-peng.fan@nxp.com> X-Mailer: git-send-email 2.14.1 In-Reply-To: <20180528122526.20597-1-peng.fan@nxp.com> References: <20180528122526.20597-1-peng.fan@nxp.com> MIME-Version: 1.0 X-Originating-IP: [92.121.68.129] X-ClientProxiedBy: HK2PR02CA0175.apcprd02.prod.outlook.com (2603:1096:201:21::11) To VI1PR04MB3006.eurprd04.prod.outlook.com (2603:10a6:802:9::12) X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-HT: Tenant X-Microsoft-Antispam: UriScan:; BCL:0; PCL:0; RULEID:(7020095)(4652020)(5600026)(48565401081)(4534165)(4627221)(201703031133081)(201702281549075)(2017052603328)(7153060)(7193020); SRVR:VI1PR04MB3006; X-Microsoft-Exchange-Diagnostics: 1; VI1PR04MB3006; 3:o7lzq1hrzLRsLnY0jXc2STg9ll7fMMX39zhhzcROUcnsTzUDmOgqZopzi33nmgctzfv1IhVx7ybE2j7Y0Ym0UMg5hqDF7RGSE9YNgouAOkiIXTeom/hbQZmmMP49MRjQNAk3gsYszGyuGyMdZEEgui+I5QrHXp+6F1b9SdIU1c/f04hnJxtQPlq0yDCkiviWC3f4Qrc48t2hQLo6mVVry/q6Kkpu4Kh4XVQnOfhUHRbSw/IhX2QTJyggnP3bC9ri; 25:MOwLi5SN7ju2FFOnCkFSdSVLp3HLpU6r2CBgNYVfyCfluGRxmsLKh13fDsXu8Qxi6SY+GRbX4luGHKypi7g7wFhoECyyNltDvcceIEugbw86KQL4BsMn+RlpbnYtSRd/KIfo3Ifcy1HBOy9nYs2YjqzMEapsowjWROK58/qD6qWrEPhhlZhkpxaySbDWKw0oIFV+MX+3C0JCMP5rCBN7csbcC9dImvvXbf1LFIQGyoDEB+922Pg80o8adg8JrM2v6jkPM0tipAVEtWAqyt9zsT6CQBx7V6YhP3NYbXGNbdQ1yOdhZJ5BjOmt2trc1xt83t+eZz7zcerd1ogh4Vt9Vw==; 31:4iSv5mu6f3oBPytkpQqwtXLlbHsj1JoSvuP7N6As3YL7CUclZ2IIEuM793ajDuL/gF6lQpTumAH4qvkLyKk0UzjQqw45lWYokKcGprekjQqgXZisFcZqfe/pXmCjNjc+qlRZ1agaSiMEtCTTuqiouS2YArAgPXzKJrQ2ZQN2MTN3PHVgmYqbjtRrWBMARJ/QGRLybJwSiMfaLxK7R5xf7lROgnMwiDpP2REQ1mYCK5s= X-MS-TrafficTypeDiagnostic: VI1PR04MB3006: X-Microsoft-Exchange-Diagnostics: 1; VI1PR04MB3006; 20:zyIDDfYe/ttBFaaJzBouOwnZnQycpRgAalq1ZBlVI4iKd6TV+tq+IOtTyfqJupd+r3xfk0Ob+OgCfWrjDNnwI8lCi6Q6i/tAp6HBkPcBvFTCTUemTA+BsjM4P/GiXoIiI5z6IF6/mXJRA9txJfeDMrhYF+ztzYyplZiaT2pMfOIq8vhlU4690rHImsTI7utmnwEILF/jc/e2maRPIv/8b4H0XxLZAajEeFlI16NCuIvP7Mu2BqtpQpVgvF3Lmxr4ANHifzUPqdzzbF6oTn3tkaSFACeCjr0uAq8tjTG/6blwKqYFnHZ96JMMfohcC0IK/gBamYNVpZUJn+sF8nKTt+dwHv3P1hYu5iR/E6/QLqzTfJReiJ/bDEpFdfn1Yjvk72n3KAZdXEa6ijRgaq7RyzPCKsn7BPYETFhA1X+TFe2MgI73eifIR8CjC9/T2B32iAKI1cFgJU5E6723BVV7r1jWlWEp9J3OXWivb6/YrFHY1D1aebDK4JkEY60T5iMK; 4:QSDcUnii5sH1NQrOxnRrwE71OXnxQK/i/UbBSedxKNShV09wdg/Ks1tH1c2DMfG3J5kaIjjrfmnbESNU1+r2NfXI+fon/jH+SbggFjI9rlvXm96fSjxhvTZBXo8aRy6ExxUorefghFnuYB2yDaWxN68z0mu6RrpiD9WuzJ/7u6uY3kDDCT0wYUDhYMCll7XPStNUONJs1eHm6Lc6W8Alt6PRz1kLA6tkoypqwZr0wmqjWskpZrf219IGyl8l7npYmXbfSr+wRzX1UF9LZwTPv7lTH/BzuKf94x42S+s05KIboYvV3u/E9B5rDHBX1+fb X-Microsoft-Antispam-PRVS: X-Exchange-Antispam-Report-Test: UriScan:(185117386973197); X-MS-Exchange-SenderADCheck: 1 X-Exchange-Antispam-Report-CFA-Test: BCL:0; PCL:0; RULEID:(8211001083)(6040522)(2401047)(8121501046)(5005006)(3002001)(93006095)(93001095)(3231254)(944501410)(52105095)(10201501046)(6055026)(149027)(150027)(6041310)(20161123558120)(20161123560045)(201703131423095)(201702281528075)(20161123555045)(201703061421075)(201703061406153)(20161123562045)(20161123564045)(6072148)(201708071742011)(7699016); SRVR:VI1PR04MB3006; BCL:0; PCL:0; RULEID:; SRVR:VI1PR04MB3006; X-Forefront-PRVS: 06860EDC7B X-Forefront-Antispam-Report: SFV:NSPM; SFS:(10009020)(366004)(39380400002)(396003)(39860400002)(376002)(346002)(199004)(189003)(36756003)(97736004)(6636002)(68736007)(86362001)(8676002)(44832011)(8936002)(81166006)(81156014)(47776003)(11346002)(956004)(2616005)(476003)(446003)(25786009)(486006)(48376002)(106356001)(105586002)(186003)(50466002)(16526019)(2906002)(6512007)(53936002)(1076002)(66066001)(26005)(51416003)(478600001)(305945005)(50226002)(6486002)(5660300001)(6116002)(76176011)(3846002)(16586007)(52116002)(6506007)(4326008)(316002)(7736002)(386003); DIR:OUT; SFP:1101; SCL:1; SRVR:VI1PR04MB3006; H:linux-u7w5.ap.freescale.net.net; FPR:; SPF:None; LANG:en; PTR:InfoNoRecords; A:1; MX:1; Received-SPF: None (protection.outlook.com: nxp.com does not designate permitted sender hosts) X-Microsoft-Exchange-Diagnostics: =?us-ascii?Q?1; VI1PR04MB3006; 23:9P5EH2CVGtj0ui4AmtHsh4M2SzQix5Vnerr8Ks1a/?= m5Iwqx/2e9tkhRnR2PWC8hCpwXd1N7swMRVhpaAP48POoctZotRNZfeCk6w5gdhAwlv3nTDfuWrDyisPfLTaqASldArI4VfHztmdLPOLGD7j3zDjgovgB3eUPrxblaSIL1QJPf5+dFLjwZ/iivkg/MXvgtN2TnfofROhzvxJUMEG5TqDvAtOlHZ9eZWJk6M7q0bmB0UYmaV7uOWuk5yAD8k0KOxOssrZTDwFHEGg4qfg8lr5dMVMVUocxmvhZZpRanguW2tnKKDzhcCmd6xnW5TXJT9TQyaFX25Jd05VFgnoZTifJKjdTRvOjd8g2gw9O/+QGKfYY2OZJ1cbRCynufD3c+PLTklxAPPO7s3r8/zzQX0/O8jEICht2oRz/83fXHcekFBwZGtqPQonvfvOQ14vVEyS36vwrQzfdpfZxNC8PMlRuW+hrchkAv10B5SsUU7QRIVvZxVbPYsz5Z0hMzymExhoL16SyQrmwbDv+WMfVAbqtBhv097Qur4dXVoeEZb2xKoDe4diynJl/0Dlxr10cJooAlB74UHAoUHyDqnRXGOwYgpcJcCeUmGfFeE1Tgt2AZNpH+pTrcXSucPVlaKOtsg03GMYY+hWptyc1GoM3RA3R//AsGhid7iMRlIPntMGImY+QNL2lUw/IYpD/5K+jIUVrio4/qqRIhq8hJ8ofA9Bpylbirp5x5cxGy1kbjWb4yAzHQxejD0M+sgL1ifKWLuQdzD3bZWmaIG2qqDLqQzVSQdYl+vTYV4BT7TPRiOY52nn7Nul1F9ifhiAK5v2gB6XmNmOvlajS/o+CnelrZBflHMPB0vIqfH9GUKCAx/D1O0kK8rBQ7lDklRXExrjhYDwZ/0BeBRk9S8Kq0g1MhwG3XqMfag2ppXpUbVNS6cTlvVOfVwzs3jpD+KFLEVvBlNRulwc6E5P6IwLIvtCOseO4LCxbQYYjRfOpfAS+jnyLxLVKL94HV2eZOYowizrlnwaB3IVkvURN2AXPmSYNq59Fm3yJymsbmsAjk0VmHuhG0fqvGp2NwKhN8z64+xSDScbUhh/FOnL3J9bAKIkojziHFvkx8Ori7tqOo1mALSf0nsxd1k7OsrXlbKOkeu30X9Jq+YgnPOSY7hoCt2rKtcSZHkVcymrkubx6SoQ9zwz02rJq9vdIzNS+jZ1sDf X-Microsoft-Antispam-Message-Info: wgP7ZYsQCsDsXGeA6B7OaPmRQRnGd4ssGFP5ReUXfVzYCNz7Y4yqTYp7LMNS0GqqcOmYvf7YIIxhDWelZL1Zy34enYDattvvDYvca6a2ZVzaXAtqlhTTf1LMq4wt/chvC/ZVdGnDod6xfognFvR+wIBGpvuOgxAmajMTV/hli592twhk2W8GXky/cCRxbDQ4 X-Microsoft-Exchange-Diagnostics: 1; VI1PR04MB3006; 6:3SBRlE6sAdT8yVQ6mjxJJ8grC0r6i53NFhx4Ud3KZm58S/QTpLJeaGaUDM7RvHNN/EK7Cjleir46lId7he4ySgIO2wjufix6wBY7520yv2UAcNgHNa8sUiOZ/Z8+2sU/af7veIPsCIUuA7OQ5u8Sgopev4Rn76gzaT+IhfR0d4fRo41m6OIaYdStuglwZ6PNev8RSCrnHdwX3kcHIYSBLNul8SVkWzXYkVaWYc40dfEy8vdUER9wJslfQf76js+akatCO2jHxFwrkiHPpxac/lTA+d4TwBrD9zoXrdW3HHem4Yd9VRYnv0Ho2HgfUHbdjiq8H3SJIcjX/PYHqLZVL0p3Izs3145iyXhmvOpqSGYvUYB9ZTQsKn1G3jeMMXRll/qOsrLpqaZ5EqBLjsntvPWsmO5XJr8U59i+TXgLWsH8DZtDf9v94DcFW9sdQw/+kNSijasMr3A6t0Vv37u+LA==; 5:6LSFcdU8Uqe/9o7BmIgpZtqwRPEkNuoTrxpRwQqPRXBdX7wA1VhPOANf26U1N4BSGL6UYAZbW49jRqEI5hw9KXKsMRpugHU68BHnYEsOQBDLkRmBnYikMCj1Gpu5mZzOYv05mPx/n0shSvWXZOLFLNdrQyyK0LYk8Mel0np6U3k=; 24:5/NInHcqEhPPrZbb1JJ2VftRJJZPRdjbWEgq17BE87yd9ElSlnUa87XxUKt7Ygvu5gzSR+GmBsuOq3T8xkv7zRpvG9ftJ/vU4KBOVa03IgE= SpamDiagnosticOutput: 1:99 SpamDiagnosticMetadata: NSPM X-Microsoft-Exchange-Diagnostics: 1; VI1PR04MB3006; 7:667sN6lnv5TyZg8pZuKn+KbckUnP2Yf0lwVa/8MR7JjX592gRwGDwFmRG1HkSHCW8Q1XTMA1pjM1SRH4177BdTrWx/4I7AvyGqCnxSgqK6PyNHJbbUHjQgGX5CMD/4p+MsoSDAI1eYoFTpM4zUikBqtxuGQRdwLVZjvKlNTFoLPuzem+hj1h6Ba8+ivgCiEhbNOkblG9aEbr2AyVxaf1a+TetAR7yqDmX1qLL4ArOP4/ry9DUzzETz8rA2Jyp+kn X-MS-Office365-Filtering-Correlation-Id: 4eca13a0-4cbc-4212-0c62-08d5c4959318 X-OriginatorOrg: nxp.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 28 May 2018 12:21:42.0415 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: 4eca13a0-4cbc-4212-0c62-08d5c4959318 X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 686ea1d3-bc2b-4c6f-a92c-d99c5c301635 X-MS-Exchange-Transport-CrossTenantHeadersStamped: VI1PR04MB3006 Cc: u-boot@lists.denx.de Subject: [U-Boot] [PATCH 02/41] imx: add Kconfig entry for i.MX8 X-BeenThere: u-boot@lists.denx.de X-Mailman-Version: 2.1.18 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" Add Kconfig entry for i.MX8 and i.MX8QXP Select HAVE_SC_FIRMWARE for i.MX8QXP Signed-off-by: Peng Fan --- arch/arm/Kconfig | 8 ++++++++ arch/arm/mach-imx/Makefile | 1 + arch/arm/mach-imx/imx8/Kconfig | 13 +++++++++++++ 3 files changed, 22 insertions(+) create mode 100644 arch/arm/mach-imx/imx8/Kconfig diff --git a/arch/arm/Kconfig b/arch/arm/Kconfig index 3e05f79f63..0406c1dada 100644 --- a/arch/arm/Kconfig +++ b/arch/arm/Kconfig @@ -635,6 +635,12 @@ config ARCH_MESON targeted at media players and tablet computers. We currently support the S905 (GXBaby) 64-bit SoC. +config ARCH_IMX8 + bool "NXP i.MX8 platform" + select ARM64 + select DM + select OF_CONTROL + config ARCH_MX8M bool "NXP i.MX8M platform" select ARM64 @@ -1325,6 +1331,8 @@ source "arch/arm/mach-imx/mx7/Kconfig" source "arch/arm/mach-imx/mx7ulp/Kconfig" +source "arch/arm/mach-imx/imx8/Kconfig" + source "arch/arm/mach-imx/mx8m/Kconfig" source "arch/arm/mach-imx/mxs/Kconfig" diff --git a/arch/arm/mach-imx/Makefile b/arch/arm/mach-imx/Makefile index 733c308670..375789efb2 100644 --- a/arch/arm/mach-imx/Makefile +++ b/arch/arm/mach-imx/Makefile @@ -141,3 +141,4 @@ obj-$(CONFIG_MX6) += mx6/ obj-$(CONFIG_MX7) += mx7/ obj-$(CONFIG_ARCH_MX7ULP) += mx7ulp/ obj-$(CONFIG_MX8M) += mx8m/ +obj-$(CONFIG_ARCH_IMX8) += imx8/ diff --git a/arch/arm/mach-imx/imx8/Kconfig b/arch/arm/mach-imx/imx8/Kconfig new file mode 100644 index 0000000000..58cb19946f --- /dev/null +++ b/arch/arm/mach-imx/imx8/Kconfig @@ -0,0 +1,13 @@ +if ARCH_IMX8 + +config IMX8 + bool + default y + +config IMX8QXP + bool + +config SYS_SOC + default "imx8" + +endif From patchwork Mon May 28 12:24:48 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Peng Fan X-Patchwork-Id: 921473 X-Patchwork-Delegate: sbabic@denx.de Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Authentication-Results: ozlabs.org; spf=none (mailfrom) smtp.mailfrom=lists.denx.de (client-ip=81.169.180.215; helo=lists.denx.de; envelope-from=u-boot-bounces@lists.denx.de; receiver=) Authentication-Results: ozlabs.org; dmarc=fail (p=none dis=none) header.from=nxp.com Authentication-Results: ozlabs.org; dkim=fail reason="signature verification failed" (1024-bit key; unprotected) header.d=nxp.com header.i=@nxp.com header.b="O/uhnSy+"; dkim-atps=neutral Received: from lists.denx.de (dione.denx.de [81.169.180.215]) by ozlabs.org (Postfix) with ESMTP id 40vbcL3zLdz9s1R for ; Mon, 28 May 2018 22:23:30 +1000 (AEST) Received: by lists.denx.de (Postfix, from userid 105) id 13E55C21E35; Mon, 28 May 2018 12:22:37 +0000 (UTC) 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=BAD_ENC_HEADER, RCVD_IN_DNSWL_NONE, SPF_HELO_PASS, T_DKIM_INVALID autolearn=unavailable autolearn_force=no version=3.4.0 Received: from lists.denx.de (localhost [IPv6:::1]) by lists.denx.de (Postfix) with ESMTP id 0F437C21E29; Mon, 28 May 2018 12:21:59 +0000 (UTC) Received: by lists.denx.de (Postfix, from userid 105) id 913C3C21DF8; Mon, 28 May 2018 12:21:54 +0000 (UTC) Received: from EUR01-HE1-obe.outbound.protection.outlook.com (mail-he1eur01on0080.outbound.protection.outlook.com [104.47.0.80]) by lists.denx.de (Postfix) with ESMTPS id 03ECDC21DE8 for ; Mon, 28 May 2018 12:21:48 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=nxp.com; s=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=MLILnz5N9wxc0cphbjdWMKfinjRgi5DtNPjl67Ps70w=; b=O/uhnSy+3jGCxGwOPzOf/j+GsCTFGsTi+QR5Zty/33SGeV/V3KhhC1SQkOXAvUCQpJX1HDvlUhxOiIpn96tD9NlzzHIdRmCw9ka0ZlV/6yac81cOnswqP7uHjiGmsdp0EYNxE2esJ/dU52ieTxIkhpRoTXH0lLW9rn/hccG4E5k= Authentication-Results: spf=none (sender IP is ) smtp.mailfrom=peng.fan@nxp.com; Received: from linux-u7w5.ap.freescale.net.net (92.121.68.129) by VI1PR04MB3006.eurprd04.prod.outlook.com (2603:10a6:802:9::12) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384_P256) id 15.20.797.11; Mon, 28 May 2018 12:21:44 +0000 From: Peng Fan To: sbabic@denx.de, fabio.estevam@nxp.com Date: Mon, 28 May 2018 20:24:48 +0800 Message-Id: <20180528122526.20597-4-peng.fan@nxp.com> X-Mailer: git-send-email 2.14.1 In-Reply-To: <20180528122526.20597-1-peng.fan@nxp.com> References: <20180528122526.20597-1-peng.fan@nxp.com> MIME-Version: 1.0 X-Originating-IP: [92.121.68.129] X-ClientProxiedBy: HK2PR02CA0175.apcprd02.prod.outlook.com (2603:1096:201:21::11) To VI1PR04MB3006.eurprd04.prod.outlook.com (2603:10a6:802:9::12) X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-HT: Tenant X-Microsoft-Antispam: UriScan:; BCL:0; PCL:0; RULEID:(7020095)(4652020)(5600026)(48565401081)(4534165)(4627221)(201703031133081)(201702281549075)(2017052603328)(7153060)(7193020); SRVR:VI1PR04MB3006; X-Microsoft-Exchange-Diagnostics: 1; VI1PR04MB3006; 3:MrvqI7OZIP5Q/PddWulkLKditWDyvGLboNqahiGgXV35nE9ZC0v9nlh7DMPaV82c5k/hlIv5FC3eYc4D27tFzyfte5I2zKS8hcX/V4HFMuOlFV19Yyu47Pi4H2Y7z/AmvBdRliqXRFnl3GCKn2d34nvwWwpB6sJqTvcYfH8z0IpNkG7bp/V/9GIOPMi4a5LX8Ds89YEKPyobaS91QNzaXIVYwQEco7ybjTdA6xDNdpknxOkPMGudQvsyseXzlvcN; 25:jRRMkvgmAa0ARdGnHtgkFJaEXWgNRHEzsvtE2TIBJ/xsLL2BqE6iI+qcH65rNVM8klul9QPptjk0FRI2eoFR/uEdQ61F6oWV+ry2E9W78BiZ75daAqgXMsnwR2zyNo5rJUOIzy70VD20oz4QUSMbq7VmT6Q9TqrnyWxP9MwsXt/POoqczCDQah+1dG/flLFaOQTh1/lAnNBKkbdmLb5YTomMweQYzfPNET6NCWDJKL3phjolMDUWkDfxPy37j8G9qSl+lPYI5lDDVCqX/qDm2Mm5RasRxlEgG61AWvD0PXDBFzhx7wZaYweCXGHtHJaQOTRny8XzjCXGq5dhf5Mfwg==; 31:BKdSVJeLPLVIBE7i2Oe8mmcZNjcXyjG/6e2OpgCE1tcC+yyWM1fgcVGhlcJYIGW4He8L+DehMVjONRUWPjDXRVCepJv9w/d7dQ3k3aRQkBy7sC+d0JFPwnpp/T7hQ2Sluuex23Pbsu11jaRo8/k4hTDVjr76GGplkSxSqSfb7yEFqOfm1r1x2gCpOK8i0fAdXLnqyIh8aHr7skH+u+r8DNyYemkcQmkQoHq4dIWAljQ= X-MS-TrafficTypeDiagnostic: VI1PR04MB3006: X-Microsoft-Exchange-Diagnostics: 1; VI1PR04MB3006; 20:L8EiTfn1bLBtQI07EOiL3ErbqP/LJLDmuGedK1EflMDCOxq1FPaO2yi470iuflHFz/vWI9inFJUzQoXIvy4yM3Vg4GSrPznjCOJs4p8Zw/UYcZmcJZXwFlkzyYSDRey/vaLJ6iQkcMPTv0hyQPrD1FxPxIkbca0bLacyHbm9uHuFA0pRHy8+l631m3IiWi6N0G9HfMykjqSqLlSv6liypfZdT6efQn39qJgvE10iSbK+xP7ktDAnT84KxuqwKRUsxf6aaN2+AwFVgx+AUgVf/QmAhoqH5HUA0/T+OLZWU18BRqQkDW97CkeJDpnadpFQJt7oW0VeKttqV5Wqpiva7jmvq9d0x6X6O5VCZfSMU40wKQFQEqK/DyJA1dKSGpXl0hmhK50qU32qLYgkAdXuKEZIHPxgNcGQjO8mazunumYv2BtSLRf8zZcbpQ7mRMpYvyisdEtVDWMKjhgpLgeGrY84bpl4wK6xCO4mDvgR5Yes9Uuos2ooZuTyJgsyookk; 4:gKr3kJxS0Hf2OGfJVijcslxsRJ66H6Qkqz/XQaiLfIs8C702dFYt3e93nHXTWjCRmangUl+ljCy7DC76BOgy6vW9/VqOKlEScJPig4L3fkd7bEM4MZyhzc8ClnCAPREIpvgMUoEPy4YTz2Eeq5apcpMu6UuQ+oyOWgGW53weX4WX36+OCuwWb+RO1lo+2FN+v402gePKtBCohuXba08q5G/MXxaFzJhZo6OAEuEivg47o80SsuOmrZNsv6MpUnJhsLQiRsMtEePnA64OKkr1kQhrFyCoImA8PTtnRJiViYv24pWi1Oq01owoeuX2NBDh X-Microsoft-Antispam-PRVS: X-Exchange-Antispam-Report-Test: UriScan:(185117386973197); X-MS-Exchange-SenderADCheck: 1 X-Exchange-Antispam-Report-CFA-Test: BCL:0; PCL:0; RULEID:(8211001083)(6040522)(2401047)(8121501046)(5005006)(3002001)(93006095)(93001095)(3231254)(944501410)(52105095)(10201501046)(6055026)(149027)(150027)(6041310)(20161123558120)(20161123560045)(201703131423095)(201702281528075)(20161123555045)(201703061421075)(201703061406153)(20161123562045)(20161123564045)(6072148)(201708071742011)(7699016); SRVR:VI1PR04MB3006; BCL:0; PCL:0; RULEID:; SRVR:VI1PR04MB3006; X-Forefront-PRVS: 06860EDC7B X-Forefront-Antispam-Report: SFV:NSPM; SFS:(10009020)(366004)(39380400002)(396003)(39860400002)(376002)(346002)(199004)(189003)(36756003)(97736004)(6636002)(68736007)(86362001)(8676002)(44832011)(8936002)(81166006)(81156014)(47776003)(11346002)(956004)(2616005)(476003)(446003)(25786009)(486006)(48376002)(106356001)(105586002)(186003)(50466002)(16526019)(2906002)(6512007)(53936002)(1076002)(59450400001)(66066001)(26005)(51416003)(478600001)(305945005)(50226002)(6486002)(5660300001)(6116002)(76176011)(3846002)(16586007)(52116002)(6506007)(4326008)(316002)(7736002)(386003); DIR:OUT; SFP:1101; SCL:1; SRVR:VI1PR04MB3006; H:linux-u7w5.ap.freescale.net.net; FPR:; SPF:None; LANG:en; PTR:InfoNoRecords; A:1; MX:1; Received-SPF: None (protection.outlook.com: nxp.com does not designate permitted sender hosts) X-Microsoft-Exchange-Diagnostics: =?us-ascii?Q?1; VI1PR04MB3006; 23:lc0VUwd0hxR3l6BO/pFM0MgK02XLZjftp0ipBTEg+?= jdsl0yeZIa7fzOinIQB0K0yoy8O+4wDNxgm9avSBsIHzyAlHWS9Mo8eegQilziTg9JOG2iPlhEhnSOtLTSOYOckqAuiOVY2wnciJ19zwyqfIVQtRQE7kyhs8rYGOEaLKuUlHlb8e4SGK/mJ5Dw3MZnKeIfVI2bQzxSEpvCOCs0Mxo2xjLq0pvO4RUOItsOBdQb7v6YBKyYF22oT+V0UKVoNANQmHgaxO+Ty1q6QZiGz9yOJo+KakclKjK61y75jkn5iYffXc6ou5B3fAZL6xPk4B91kMWMeQZ67NeJfr7XVRFxFeoi+cKRGRrhSw9nKiDRI/S+aQyjB9cMcIi2rAZGgwWAgOTor8Iy1e4nYSBSBOToZ07m2DpCRnhfX2Nnhh6dk1N9wYpBlXYfIpl2ixQaYJcAYEl8VvhEOgcJJVDpj5cJg6dFSuXGTx/PcCOmmrzT9kRyd95j3P1Te0btmORIZB2/1K9rG/cL11hMk7edXNQqxC48HuvaeVkMz2lW+5myluIhfmkHbuYrweIFRTcfhK/x3NiI5UjcFSF43dRkD9nvoQXl2dFgfUXBRISnBfsTxNWMf0qys6y0VEeA6Zh6uVhoPEurDtNxsJx4Sr7YLgz/Py8AejmYr47NUU7+0JwUtCLrsAxDvnrxuyDjXJR6g1viejhmaIZnD2Q1w5gdvBwWG9k5jgwSs8VxKdm1mpBnBFELlcoTT1XvSTzWVN1egneiOKUE03paMfKxDO4taka7wZwB037KT0OI8fTeO6bfcb1vfGJz5oH+PStQW1g3aTLrqPc899qD9hR/ghL51ublqhFEVmAKVyfA14D6LVAoC8NAoKkk3ilMOjBmtidNhpet6QfuZc7ktnaQOO1Qyu4TTr1d4M+mFgiTwPEmxqmsSnQcbXVfQNiciliaDbVTK9jwXzVlrjywaL2UAKWF3n6TrbnWugvBmOl/KaXnTyOGSQ3M+uE4ZpLCaLQWXZfys6KNnzNs9+foHHNlcctlQoeOMA08E5Z8wAN+EzBstTUuyHw0ainZXYSZ47UK2z3y3GGoQ7vSDOCTJrmiWY7rTNDVRALeEngVQiZitYKR0R/28gIR/JkbqVcMifOTEncUSuaTXZY6PzG0+P7EixG+NqZcZHvy39jZDCBGFRoZgF5rVXW5+4IPnrRrtU6sxvb9a44V/f5ixB4l8whAzkWf+9w== X-Microsoft-Antispam-Message-Info: 2PBdMcEHUnlIF/m84G66WbZcgZQ+NPMd9+NFyrFSUjGqVM2fuX4yG1zlkiK4bZEOOmh8RUbX0uZ0DV8gAuMryWFz7HtTWR/BG/0wFGeWrr27sR9vIzbKUM4s9M8tEy9j9iDkc1UlyThzNFO41GLLD9bQX3RP8xd0crD/gBydxDo6K+edqx8qc2bZkh/gy0e0 X-Microsoft-Exchange-Diagnostics: 1; VI1PR04MB3006; 6:v4epLdz59yHxMj6U5QFF/eya119I4W8HPayG4UOjhCs7Q9jaKwVT9kL4e8dNnunlcgRk0YGbzgtUhJuyKEame539Y4SmdFV/nINvV2wCE6zf06ySG7olpggtElBNxB9a/TdegJax0aZP1dk+cqbPGBWRmyb25BhODBFsgTfEgfyKFXQBhGJdNFWxVAvCddO+cS2AwYtgLsLqy/18lBv4eXoEQhI9deTuEZj6ZOyo2i1kYaD1h01Q5mcRZ1wEJgqhGpJ37LWe5OQbDh/qd99mBft3NEtA8+HXIFt6hgdOyx0wheNL3Sz4vmkZLNmzVlYRIntBvTBGUXd9qsOZU32wFjwn/mzXR+EBg+EdhCHF+owhrQNBAjNh16T+iFd5ca8TMVh6h8d7TsyS5Y5bL7Du2C3fZ92hVNXAesk+It6wftTeITGeq8xByXC7rkpNV4xU2v5lGABcyjKJpY/GVacebQ==; 5:NapYOLtp1ViFJzgh9TW34FlyRj+7ltJ8y9bGU2qdkkxSeyEgjW5e4Ouf9BGZRbmpDxUSUTCGg0621J7W4FVJcJR+LA6mmSeS7F2ZsFgnMPveMDzovvkaXXPSNDceDrtz4m40sS/gGeGTRiia4ofYX9jpqysOXr1kVF9q6BAC9Js=; 24:jvA/T9xlTJPRslbLbDTVEye/gSN2R+FRIEXrGVt/Wdgux9/n0Em7kWgv4URHcEz3Y9rHmaWWV6LznkUk8ifOoYtb8/nenHKm3ZQePhsyQWA= SpamDiagnosticOutput: 1:99 SpamDiagnosticMetadata: NSPM X-Microsoft-Exchange-Diagnostics: 1; VI1PR04MB3006; 7:0jukaVPps806P//Ry162h0pw476H9ejSgR5JMjl7w3RMl+VLwYrH5bWaE64oYhpK6UIheN34r1VLeABw6e9zFhbEnk25Ru385qzNlB+mxoW77Yd7MDWO/PGiEGgb9xiI2sUf1yi9W9rZR7a8AAc/EWEMr9Wzb8BCVqwYotz5Vw3EP/bq1ie0RPRGUvMDjZQZ1o+icVRHKnDE497l1sBPMcZEXzxcCoVMWuLHkAAtPQANEuRuT8+zEr5lmWJJVK9+ X-MS-Office365-Filtering-Correlation-Id: 284c461e-de7d-456f-fb26-08d5c49594aa X-OriginatorOrg: nxp.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 28 May 2018 12:21:44.6666 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: 284c461e-de7d-456f-fb26-08d5c49594aa X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 686ea1d3-bc2b-4c6f-a92c-d99c5c301635 X-MS-Exchange-Transport-CrossTenantHeadersStamped: VI1PR04MB3006 Cc: u-boot@lists.denx.de Subject: [U-Boot] [PATCH 03/41] arm: build mach-imx for i.MX8 X-BeenThere: u-boot@lists.denx.de X-Mailman-Version: 2.1.18 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" Build mach-imx for i.MX8 Signed-off-by: Peng Fan --- arch/arm/Makefile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/arch/arm/Makefile b/arch/arm/Makefile index 4d6d276137..9aadb7a49a 100644 --- a/arch/arm/Makefile +++ b/arch/arm/Makefile @@ -101,7 +101,7 @@ ifneq (,$(CONFIG_MX23)$(CONFIG_MX28)$(CONFIG_MX35)$(filter $(SOC), mx25 mx5 mx6 libs-y += arch/arm/mach-imx/ endif else -ifneq (,$(filter $(SOC), mx25 mx27 mx5 mx6 mx7 mx7ulp mx31 mx35 mxs mx8m vf610)) +ifneq (,$(filter $(SOC), mx25 mx27 mx5 mx6 mx7 mx7ulp mx31 mx35 mxs mx8m imx8 vf610)) libs-y += arch/arm/mach-imx/ endif endif From patchwork Mon May 28 12:24:49 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Peng Fan X-Patchwork-Id: 921478 X-Patchwork-Delegate: sbabic@denx.de Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Authentication-Results: ozlabs.org; spf=none (mailfrom) smtp.mailfrom=lists.denx.de (client-ip=81.169.180.215; helo=lists.denx.de; envelope-from=u-boot-bounces@lists.denx.de; receiver=) Authentication-Results: ozlabs.org; dmarc=fail (p=none dis=none) header.from=nxp.com Authentication-Results: ozlabs.org; dkim=fail reason="signature verification failed" (1024-bit key; unprotected) header.d=nxp.com header.i=@nxp.com header.b="iuooQHjF"; dkim-atps=neutral Received: from lists.denx.de (dione.denx.de [81.169.180.215]) by ozlabs.org (Postfix) with ESMTP id 40vbhF3yG2z9s0q for ; Mon, 28 May 2018 22:26:53 +1000 (AEST) Received: by lists.denx.de (Postfix, from userid 105) id 1EB98C21E56; Mon, 28 May 2018 12:22:59 +0000 (UTC) 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=BAD_ENC_HEADER, RCVD_IN_DNSWL_BLOCKED, SPF_HELO_PASS, T_DKIM_INVALID autolearn=unavailable autolearn_force=no version=3.4.0 Received: from lists.denx.de (localhost [IPv6:::1]) by lists.denx.de (Postfix) with ESMTP id EFF9CC21DFF; Mon, 28 May 2018 12:22:01 +0000 (UTC) Received: by lists.denx.de (Postfix, from userid 105) id 0A385C21DD9; Mon, 28 May 2018 12:21:57 +0000 (UTC) Received: from EUR01-HE1-obe.outbound.protection.outlook.com (mail-he1eur01on0088.outbound.protection.outlook.com [104.47.0.88]) by lists.denx.de (Postfix) with ESMTPS id 9107FC21DF3 for ; Mon, 28 May 2018 12:21:50 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=nxp.com; s=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=ZlNgmCRbDFSGSd29pP3Qe+sT5o+yZcX6nXzBvQ7hOuk=; b=iuooQHjFbg7SmRDIXgy80QHhJQkymSR9C4krbGkfMDS+sRuzOg0L9zc8t5uEvm/RyvSRUGybQYjw4RzHw3i4xc1CMzg4qa0q+EPNjhsNboU0Lk+wqQkUCcDSYbF3vsr4dIgHUbIEmDP+Pez9Ovo6NoqT+Z5ZIDejkY8ZskS4JI8= Authentication-Results: spf=none (sender IP is ) smtp.mailfrom=peng.fan@nxp.com; Received: from linux-u7w5.ap.freescale.net.net (92.121.68.129) by VI1PR04MB3006.eurprd04.prod.outlook.com (2603:10a6:802:9::12) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384_P256) id 15.20.797.11; Mon, 28 May 2018 12:21:47 +0000 From: Peng Fan To: sbabic@denx.de, fabio.estevam@nxp.com Date: Mon, 28 May 2018 20:24:49 +0800 Message-Id: <20180528122526.20597-5-peng.fan@nxp.com> X-Mailer: git-send-email 2.14.1 In-Reply-To: <20180528122526.20597-1-peng.fan@nxp.com> References: <20180528122526.20597-1-peng.fan@nxp.com> MIME-Version: 1.0 X-Originating-IP: [92.121.68.129] X-ClientProxiedBy: HK2PR02CA0175.apcprd02.prod.outlook.com (2603:1096:201:21::11) To VI1PR04MB3006.eurprd04.prod.outlook.com (2603:10a6:802:9::12) X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-HT: Tenant X-Microsoft-Antispam: UriScan:; BCL:0; PCL:0; RULEID:(7020095)(4652020)(5600026)(48565401081)(4534165)(4627221)(201703031133081)(201702281549075)(2017052603328)(7153060)(7193020); SRVR:VI1PR04MB3006; X-Microsoft-Exchange-Diagnostics: 1; VI1PR04MB3006; 3:7rVPPzIGsox9uOq/Ck4AYI/kZPVwT9b40agr2bxJjaGJBhYrhqQjuQqsn723rtIFjf58z5PpMHgofI3nq9GvNumyNTBI6F28k7Xl6abobZuqMi2KPjztKx4LNScDu/Ga3IP96Rig9yYYRD4xeByCZbWOFHc+8vWeC3RQuq//P1xsKargSNsJ2vvVyFV8TNNddEwApjWMPpkR6J36f7ShDnPkUG6jIT5qDzwGHUc/NOKeEy+X5tVW5qW8m4hjCRDz; 25:axuRRLDSOjHRlQK6k5yM/wDUADm6H7dznbHkIlHySUN3o/30TvVl8+C5OoSLcj4BUK2YsC7j+68Uscdl3XRH7cjXSZqLuw5uEFn1VJbXnixDA9lfmA6UFaeNKXI1R4DhMHWn6XgiuPVljhYIv0NBYiIJHa99N1ultG/+pyIPgc1rMItk7GWAwQgmB/BVXkKb5fgh9+qPu3lvG04CzEgyQAOQFWFMBlS358+wn2EFjZKHCPsbU63tP+u0Z/rhQSglFg+jVXpapbRWjuNLExmRwkIUZThJlePIBuYStyEnRt12RI1gWL55DI/sMbWi3RTb0BE+sKTn9tExQs8bulBYZQ==; 31:phsC7Rc6yTDKWiFm7ji8QsQT80PdoutroWIfUd5xtHZR35Z/+FG2Peh/vLYu//TH4eSSKLx+w2I7pTZEXH0InBSayZyW17XOhwBvycVu4sfhqsYjbu95RBiWgXFvSKmt2tQ8fkalBtnuQE4F29bRGRnOACu1sbwCg/PUBwO+w3jn7qOU990j4uNUBibnKc6N6R5uoKk9hUkZnNgG2nYcAMKqw90ZTf4ahUZCsrTv9hM= X-MS-TrafficTypeDiagnostic: VI1PR04MB3006: X-Microsoft-Exchange-Diagnostics: 1; VI1PR04MB3006; 20:JZBV9b+wINX/+EcFY6cGgEWQT3f4vNymglrIQgInUtbXAqAOwNPIzHdFxfGls0WfGAh5Wcyfwq4rYhSZCVn3SXRBl4EoF6KWAegYmlCgZLP/8G+j68CjItub0aOoSdK72QfIjGdoCITHCW5przDLBI8acsNkEYRskpBPuQDE5TXLtJ0/O5/KT+FHsWEjyE6kMVx5CLX0GNsNQisUKYcZZHCg3qZ8n5kFFC0B5WIugMeItXwd/xRILaNVDTOqNJ6TocDTEX6F3n4i9BbkKouko6HN4mEChWx8oUkztdFLM54jt6xBKEh5NdXUDhOPPR/RpCbLCN97OMax4ucS2rRFyRVUhXJDuyEuGRfteFhj1I0T+6iEfJvzSfBgednq9KGgoEHNzjVC0PRdCx+jZ85v3ZCuJ2Nx0n0fBipjB1Plu/Gr1RgDp/EsNpkDlEEJM0UVN0aiudT+3jozoeJPjcK38DLxwZPQiCBp7M4UrLYXceJohBgz3wrRYvnRY1s1Wbnu; 4:cz43WJAr4RR7W1oljjMyKUiJsAOIz0ZKwCAQZ5Vb3muqVo2zXyc6wGyIe3HvC5d+YOzPleIA6iephi6oAqEctya4+qFLRRwgyfaAgUQWJzrKnTbEv1FGar73jpNzNVEaWdgWp8RtD5PDzSSdCYdnJd/LyGtu9zeNc5IeobZSAQIufcdpJR/ZIaZg1Asf4X2IQM6yzdILcu11zH33+prQJVrcyAmLWh4zMsFJXnNR+sW+e3YoNYMKqjkdn1lE3PJcISx0fwOAYpQyayRcOSq0osA9kaykHJpzOW3homrUXn3e7IhC4xOPjPtGLGfiC0h2 X-Microsoft-Antispam-PRVS: X-Exchange-Antispam-Report-Test: UriScan:(185117386973197); X-MS-Exchange-SenderADCheck: 1 X-Exchange-Antispam-Report-CFA-Test: BCL:0; PCL:0; RULEID:(8211001083)(6040522)(2401047)(8121501046)(5005006)(3002001)(93006095)(93001095)(3231254)(944501410)(52105095)(10201501046)(6055026)(149027)(150027)(6041310)(20161123558120)(20161123560045)(201703131423095)(201702281528075)(20161123555045)(201703061421075)(201703061406153)(20161123562045)(20161123564045)(6072148)(201708071742011)(7699016); SRVR:VI1PR04MB3006; BCL:0; PCL:0; RULEID:; SRVR:VI1PR04MB3006; X-Forefront-PRVS: 06860EDC7B X-Forefront-Antispam-Report: SFV:NSPM; SFS:(10009020)(366004)(39380400002)(396003)(39860400002)(376002)(346002)(199004)(189003)(36756003)(97736004)(6636002)(68736007)(86362001)(8676002)(44832011)(8936002)(575784001)(81166006)(81156014)(47776003)(11346002)(956004)(2616005)(476003)(446003)(25786009)(486006)(48376002)(106356001)(105586002)(186003)(50466002)(16526019)(2906002)(6512007)(53936002)(1076002)(59450400001)(66066001)(26005)(51416003)(478600001)(305945005)(50226002)(6486002)(5660300001)(6116002)(76176011)(3846002)(16586007)(52116002)(6506007)(4326008)(316002)(7736002)(386003); DIR:OUT; SFP:1101; SCL:1; SRVR:VI1PR04MB3006; H:linux-u7w5.ap.freescale.net.net; FPR:; SPF:None; LANG:en; PTR:InfoNoRecords; A:1; MX:1; Received-SPF: None (protection.outlook.com: nxp.com does not designate permitted sender hosts) X-Microsoft-Exchange-Diagnostics: =?us-ascii?Q?1; VI1PR04MB3006; 23:lAR3wdzR/T6bZRgiabwF9I64TIl8qlYeT8Rqhu4fF?= p8KcVJ+7X9/qC4+1KcmPKteQk9/BsiMy77uajffr7b4VmayvwErjUMLOmPDxRuo7QipDHhFiwvPDcIQmjEQXqUnDhiinpqCQ34GTA9XXX0rq+CIdbY86vM98b3LHeYNm3MD3bLH9/e0gkIYNuNNvVWkLKjPaqCOgYwoLil95Djeg2pzkztpBV+PTTIGCJ1V6J7t0roe4SKUhw1L9wQ19rQEFXWDne4Z7TZlmLitAMaRdDMhd39r3WStDTnYyPQrNHkQ6Ykwpwd/RXRB/8P/nCE0mjDhfvVVXR3tmlzBNeGYwpoRUC3cu7Bj2rdak3XtsPYWmS+byQZ6SnL1nBgUSh/Y9382hLc35BjMRNQER5tuLChcMYM1CwbPwA/2qM8gyzLIkADmsxrAHKQFVW0XEmpGw3X8moDb4m4DXW2pjPqNgARykNnu/v7Xm5jx100kQeCJTIAN5HplvHWn7PPihjee03Xo/RcRu0CkL4NUwGDLdpXEp1OE/K2Ph3oak38H/wEzdp9WGpGINMw5F1tFl9zOxg2TWs9MFvtAp+QSu71yRH6DFmucBfz9ovMHlfTiK99dWGosPUBx+/msGWEZJzVSHrz/Xfv4hP0wXILY4luVbPwPIZcI9alsslh9b90HHB9uPYOqQ6g4Z+JGPFhztkFr7Jy3mO+rQ9zYM5DoWyompAIzIA9A3Pn/RwBOh5CoxoECKLKT7yyWQQcUnVBHGmicc7HiCgzufgs3UJdgoJBMYgsCBUnnG+obuyfa8REE1yNgll+NtHTpK0oqBSLgwOGIAkoxHxbhyXJx1r9sWm7rDW0IWuFnYCdlh49LOr5MKUktn6WQeo0pVYU6sh1baPIMq9Hx3B54Ib5NhB+oSmPXoiLFeOS5ksT5kr8lCaR/jVb4cQ7nERh4p+OxGA4XXtBSt4wobU2VdEg5ENlZ4UJ2E35p69n37UJKwFW7ZXlm7MQDC6+78GtKxJfxMlois0/H2zNcZ8+afCbxQxy9n2TRLLJ+73rB+XMZABe/enDc6qYskEBXYzfGw2xBvMP2N/wBKRZ8aG0AWt30nsL68mtUBvCw0RiN2M6nYhkliWg2Dm45cjeSxF3PZnr7tTNu/3ipxjxEJxRo8OXQpKjrxRjqPPnj03oFmMAhJphT/Usr9GkoioMAZCDM+2EOGtcgG6dy89wDtBqH9/+MDXaUSjJYHOqFHob94/MSHRDGaaJs9CI= X-Microsoft-Antispam-Message-Info: 5eq7C1Oey97Uf4c2baA3XyTfCd0GA8JV1zu2jTB5DtAjNTLbgcmZ0odb2X4zkxRF3TFq+d7JAZ6q7DqQJao5zj0BLK/D8XCYOLCEbIPG64hHpsooLtLPK1rT30Ei1JowTZ7IgwaahUbabmgvXP+ploNl13rttd/+UHu4siXV20WcJYfOszDDZ3EIBkKh4oE4 X-Microsoft-Exchange-Diagnostics: 1; VI1PR04MB3006; 6:bb98Q1V/0BxYPYK339zKC+WALaSwt95X9vUQKSyTG3YDAMiTsP/GtHMTttCYZgWISnhXeCXsMl1Gvfo6ieXqQRPkOp8uPV8Fhkc8CdAFDDKTS6cLzbBjqM5IRwLB+vBsERua86LdD4NOmHjXyrLySKCjDP2ifqCr/fGuEEai3kw1NYn7ciXaV9DWKLklkFObNk+SkTK8lC/TV1NwEF0Zq06H5E0fFVHSOCK1s71pjj4F1C5c2PH7ZJ8zSZg0oGxx13Zn6nY0XChex16ij8I/EIIlrBWai4ndmz/1oPUxfKKc6iXa3l0ww+zUb0fsTP7JjDVGFi2lfF0g/U2gWw5xorbwjWwjYyQQqmV7xu0mPOWgfJzjLMbThqkIXwKOtvWAIurpXWzdcXesxKuL3SuB0xRAzTMA1GhwRNuTrBHPQbakwEJv1xgeyID4ovRm0CRjSiF4YbM+5ZjCjV1vgUDpaA==; 5:mIp1ypMpw1GJq0id1bEkiYquIjnrr65n8G8zz6gB/Pdm5o2sxkc4ur2ttPSPhGKL1zlLdEOFpHnPom5pdxZOdmtnZuka1QsXD+aUBVeVeGjrRqpN5WwvelDavB/NyrizI5EUPChYUiN4g2+txwytdljghJ+c0Miq2eZqWjXZYtM=; 24:Z78wfHviPiSjlhwL6nSmmgKbGx1H+iqs3VdJEgB7gVMtLGt6X0Kt97/5Jr83NrSolfYDgif8mT9HZHubg26vbQ6XRCKSr6+vI3TI5yHXvRo= SpamDiagnosticOutput: 1:99 SpamDiagnosticMetadata: NSPM X-Microsoft-Exchange-Diagnostics: 1; VI1PR04MB3006; 7:nXVDcr8Leau36kqJ2volKVHP1xnJnj0IQTqHJ3zozWB1llwJVx0DLdVbWloB3MrCV9vLQmS0O3KBsnjffvw6OBxCdzy4J5aCkOJA8nw2IhdBpgiDV8PGC7IWKFpT3yRZQqK9BHXgnCit6QzecuElUhF158tdGelqTGmVzJqwiOZ/rl4s8jko/NYE3fNIeV3LW2niTDTi0Bew5SKMyUBDz1Hs9J0ex9pJUbCVE/y95Fj586od1cbnjBrq1Gkx6KZI X-MS-Office365-Filtering-Correlation-Id: 167faeda-d87b-45e6-10ff-08d5c4959645 X-OriginatorOrg: nxp.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 28 May 2018 12:21:47.3697 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: 167faeda-d87b-45e6-10ff-08d5c4959645 X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 686ea1d3-bc2b-4c6f-a92c-d99c5c301635 X-MS-Exchange-Transport-CrossTenantHeadersStamped: VI1PR04MB3006 Cc: u-boot@lists.denx.de Subject: [U-Boot] [PATCH 04/41] imx8: add IPC communication support between ACore and SCU X-BeenThere: u-boot@lists.denx.de X-Mailman-Version: 2.1.18 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" The IPC communication is based on Message Unit(MU) between ACore and SCU. Add the lowlevel MU initialization, message send/receive code. Signed-off-by: Peng Fan --- arch/arm/include/asm/arch-imx8/fsl_mu_hal.h | 54 +++++++++++++++ arch/arm/include/asm/arch-imx8/sci/sci.h | 39 +++++++++++ arch/arm/mach-imx/imx8/Makefile | 1 + arch/arm/mach-imx/imx8/fsl_mu_hal.c | 28 ++++++++ arch/arm/mach-imx/imx8/sci/ipc.c | 100 ++++++++++++++++++++++++++++ 5 files changed, 222 insertions(+) create mode 100644 arch/arm/include/asm/arch-imx8/fsl_mu_hal.h create mode 100644 arch/arm/include/asm/arch-imx8/sci/sci.h create mode 100644 arch/arm/mach-imx/imx8/fsl_mu_hal.c create mode 100644 arch/arm/mach-imx/imx8/sci/ipc.c diff --git a/arch/arm/include/asm/arch-imx8/fsl_mu_hal.h b/arch/arm/include/asm/arch-imx8/fsl_mu_hal.h new file mode 100644 index 0000000000..a7b9518604 --- /dev/null +++ b/arch/arm/include/asm/arch-imx8/fsl_mu_hal.h @@ -0,0 +1,54 @@ +/* SPDX-License-Identifier: GPL-2.0+ */ +/* + * Copyright 2018 NXP + */ + +#ifndef __FSL_MU_HAL_H__ +#define __FSL_MU_HAL_H__ + +#include +#include + +struct mu_type { + u32 tr[4]; + u32 rr[4]; + u32 sr; + u32 cr; +}; + +#define MU_SR_GIP0_MASK BIT(31) +#define MU_SR_RF0_MASK BIT(27) +#define MU_SR_TE0_MASK BIT(23) +#define MU_CR_GIE0_MASK BIT(31) +#define MU_CR_RIE0_MASK BIT(27) +#define MU_CR_TIE0_MASK BIT(23) +#define MU_CR_GIR0_MASK BIT(19) + +#define MU_CR_GIEn_MASK 0xF0000000u +#define MU_CR_RIEn_MASK 0x0F000000u +#define MU_CR_TIEn_MASK 0x00F00000u +#define MU_CR_GIRn_MASK 0x000F0000u +#define MU_CR_Fn_MASK 0x7u +#define MU_CR_NMI_MASK 0x8u + +#define MU_CR_GIRn_NMI_MASK (MU_CR_GIRn_MASK | MU_CR_NMI_MASK) + +#define MU_TR_COUNT 4 +#define MU_RR_COUNT 4 + +static inline void mu_hal_init(struct mu_type *base) +{ + /* Clear GIEn, RIEn, TIEn, GIRn and ABFn. */ + clrbits_le32(&base->cr, MU_CR_GIEn_MASK | MU_CR_RIEn_MASK | + MU_CR_TIEn_MASK | MU_CR_GIRn_MASK | MU_CR_Fn_MASK); +} + +static inline void mu_hal_enablerxfullint(struct mu_type *base, u32 index) +{ + clrsetbits_le32(&base->cr, MU_CR_GIRn_NMI_MASK, + MU_CR_RIE0_MASK >> index); +} + +void mu_hal_sendmsg(struct mu_type *base, u32 regindex, u32 msg); +void mu_hal_receivemsg(struct mu_type *base, u32 regindex, u32 *msg); +#endif /* __FSL_MU_HAL_H__ */ diff --git a/arch/arm/include/asm/arch-imx8/sci/sci.h b/arch/arm/include/asm/arch-imx8/sci/sci.h new file mode 100644 index 0000000000..589dba0653 --- /dev/null +++ b/arch/arm/include/asm/arch-imx8/sci/sci.h @@ -0,0 +1,39 @@ +/* SPDX-License-Identifier: GPL-2.0+ */ +/* + * Copyright 2018 NXP + */ + +#ifndef _SC_SCI_H +#define _SC_SCI_H + +/*! + * This type is used to declare a handle for an IPC communication + * channel. Its meaning is specific to the IPC implementation. + */ +typedef u64 sc_ipc_t; + +/*! + * This type is used to declare an ID for an IPC communication + * channel. Its meaning is specific to the IPC implementation. + */ +typedef u64 sc_ipc_id_t; + +#include +#include +#include +#include +#include +#include +#include + +#define MU_BASE_ADDR(id) (0x5D1B0000U + (id * 0x10000)) + +#define SC_IPC_AP_CH0 (MU_BASE_ADDR(0)) +#define SC_IPC_AP_CH1 (MU_BASE_ADDR(1)) +#define SC_IPC_AP_CH2 (MU_BASE_ADDR(2)) +#define SC_IPC_AP_CH3 (MU_BASE_ADDR(3)) +#define SC_IPC_AP_CH4 (MU_BASE_ADDR(4)) + +#define SC_IPC_CH SC_IPC_AP_CH1 + +#endif diff --git a/arch/arm/mach-imx/imx8/Makefile b/arch/arm/mach-imx/imx8/Makefile index cfb7e34653..8ae0518c16 100644 --- a/arch/arm/mach-imx/imx8/Makefile +++ b/arch/arm/mach-imx/imx8/Makefile @@ -4,6 +4,7 @@ # SPDX-License-Identifier: GPL-2.0+ # +obj-y += fsl_mu_hal.o sci/ipc.o obj-y += sci/svc/misc/rpc_clnt.o obj-y += sci/svc/pad/rpc_clnt.o obj-y += sci/svc/pm/rpc_clnt.o diff --git a/arch/arm/mach-imx/imx8/fsl_mu_hal.c b/arch/arm/mach-imx/imx8/fsl_mu_hal.c new file mode 100644 index 0000000000..87b8d5a355 --- /dev/null +++ b/arch/arm/mach-imx/imx8/fsl_mu_hal.c @@ -0,0 +1,28 @@ +// SPDX-License-Identifier: GPL-2.0+ +/* + * Copyright 2018 NXP + */ + +#include +#include + +void mu_hal_sendmsg(struct mu_type *base, u32 regindex, u32 msg) +{ + assert(regindex < MU_TR_COUNT); + u32 mask = MU_SR_TE0_MASK >> regindex; + /* Wait TX register to be empty. */ + while (!(readl(&base->sr) & mask)) + ; + writel(msg, &base->tr[regindex]); +} + +void mu_hal_receivemsg(struct mu_type *base, u32 regindex, u32 *msg) +{ + assert(regindex < MU_TR_COUNT); + u32 mask = MU_SR_RF0_MASK >> regindex; + + /* Wait RX register to be full. */ + while (!(readl(&base->sr) & mask)) + ; + *msg = readl(&base->rr[regindex]); +} diff --git a/arch/arm/mach-imx/imx8/sci/ipc.c b/arch/arm/mach-imx/imx8/sci/ipc.c new file mode 100644 index 0000000000..7af10de027 --- /dev/null +++ b/arch/arm/mach-imx/imx8/sci/ipc.c @@ -0,0 +1,100 @@ +// SPDX-License-Identifier: GPL-2.0+ +/* + * Copyright 2018 NXP + */ + +#include +#include +#include +#include + +void sc_ipc_read(sc_ipc_t ipc, void *data) +{ + struct mu_type *base = (struct mu_type *)ipc; + sc_rpc_msg_t *msg = (sc_rpc_msg_t *)data; + u8 count = 0; + + /* Check parms */ + if (!base || !msg) + return; + + /* Read first word */ + mu_hal_receivemsg(base, 0, (u32 *)msg); + count++; + + /* Check size */ + if (msg->size > SC_RPC_MAX_MSG) { + *((u32 *)msg) = 0; + return; + } + + /* Read remaining words */ + while (count < msg->size) { + mu_hal_receivemsg(base, count % MU_RR_COUNT, + &msg->DATA.u32[count - 1]); + count++; + } +} + +void sc_ipc_write(sc_ipc_t ipc, void *data) +{ + struct mu_type *base = (struct mu_type *)ipc; + sc_rpc_msg_t *msg = (sc_rpc_msg_t *)data; + u8 count = 0; + + /* Check parms */ + if (!base || !msg) + return; + + /* Check size */ + if (msg->size > SC_RPC_MAX_MSG) + return; + + /* Write first word */ + mu_hal_sendmsg(base, 0, *((u32 *)msg)); + count++; + + /* Write remaining words */ + while (count < msg->size) { + mu_hal_sendmsg(base, count % MU_TR_COUNT, + msg->DATA.u32[count - 1]); + count++; + } +} + +void sc_call_rpc(sc_ipc_t ipc, sc_rpc_msg_t *msg, sc_bool_t no_resp) +{ + sc_ipc_write(ipc, msg); + if (!no_resp) + sc_ipc_read(ipc, msg); +} + +sc_err_t sc_ipc_open(sc_ipc_t *ipc, sc_ipc_id_t id) +{ + struct mu_type *base = (struct mu_type *)id; + u32 i; + + /* Get MU base associated with IPC channel */ + if (!ipc || !base) + return SC_ERR_IPC; + + /* Init MU */ + mu_hal_init(base); + + /* Enable all RX interrupts */ + for (i = 0; i < MU_RR_COUNT; i++) + mu_hal_enablerxfullint(base, i); + + /* Return MU address as handle */ + *ipc = (sc_ipc_t)id; + + return SC_ERR_NONE; +} + +void sc_ipc_close(sc_ipc_t ipc) +{ + struct mu_type *base = (struct mu_type *)ipc; + + if (base) + mu_hal_init(base); +} From patchwork Mon May 28 12:24:50 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Peng Fan X-Patchwork-Id: 921474 X-Patchwork-Delegate: sbabic@denx.de Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Authentication-Results: ozlabs.org; spf=none (mailfrom) smtp.mailfrom=lists.denx.de (client-ip=81.169.180.215; helo=lists.denx.de; envelope-from=u-boot-bounces@lists.denx.de; receiver=) Authentication-Results: ozlabs.org; dmarc=fail (p=none dis=none) header.from=nxp.com Authentication-Results: ozlabs.org; dkim=fail reason="signature verification failed" (1024-bit key; unprotected) header.d=nxp.com header.i=@nxp.com header.b="w1DeM3pJ"; dkim-atps=neutral Received: from lists.denx.de (dione.denx.de [81.169.180.215]) by ozlabs.org (Postfix) with ESMTP id 40vbf76DNWz9s0q for ; Mon, 28 May 2018 22:25:03 +1000 (AEST) Received: by lists.denx.de (Postfix, from userid 105) id 93A8AC21E1E; Mon, 28 May 2018 12:23:22 +0000 (UTC) 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=BAD_ENC_HEADER, RCVD_IN_DNSWL_BLOCKED, SPF_HELO_PASS, T_DKIM_INVALID autolearn=unavailable autolearn_force=no version=3.4.0 Received: from lists.denx.de (localhost [IPv6:::1]) by lists.denx.de (Postfix) with ESMTP id C6B44C21DB6; Mon, 28 May 2018 12:22:03 +0000 (UTC) Received: by lists.denx.de (Postfix, from userid 105) id BA502C21DC1; Mon, 28 May 2018 12:22:00 +0000 (UTC) Received: from EUR01-HE1-obe.outbound.protection.outlook.com (mail-he1eur01on0079.outbound.protection.outlook.com [104.47.0.79]) by lists.denx.de (Postfix) with ESMTPS id 32271C21E0B for ; Mon, 28 May 2018 12:21:53 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=nxp.com; s=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=YT1J0oKjncaqZmwQN1zJKRFax4TO6gstEePRycj3kEU=; b=w1DeM3pJgc5YTOKRdxjBeg1SkJqe07ssssRgT4yLld1T1Dlmvm01CMBBnAXElAjOzE4Kyv5knHV2hvooJfFkB2MSN2vgF+i4uYl/cZ0jX7vS3GMAWMNvvMfCyo9lMooRNobLWrI+fJWMlHKJ2kQmsPxcLi9xGHbi6gJ5dVoyFc4= Authentication-Results: spf=none (sender IP is ) smtp.mailfrom=peng.fan@nxp.com; Received: from linux-u7w5.ap.freescale.net.net (92.121.68.129) by VI1PR04MB3006.eurprd04.prod.outlook.com (2603:10a6:802:9::12) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384_P256) id 15.20.797.11; Mon, 28 May 2018 12:21:49 +0000 From: Peng Fan To: sbabic@denx.de, fabio.estevam@nxp.com Date: Mon, 28 May 2018 20:24:50 +0800 Message-Id: <20180528122526.20597-6-peng.fan@nxp.com> X-Mailer: git-send-email 2.14.1 In-Reply-To: <20180528122526.20597-1-peng.fan@nxp.com> References: <20180528122526.20597-1-peng.fan@nxp.com> MIME-Version: 1.0 X-Originating-IP: [92.121.68.129] X-ClientProxiedBy: HK2PR02CA0175.apcprd02.prod.outlook.com (2603:1096:201:21::11) To VI1PR04MB3006.eurprd04.prod.outlook.com (2603:10a6:802:9::12) X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-HT: Tenant X-Microsoft-Antispam: UriScan:; BCL:0; PCL:0; RULEID:(7020095)(4652020)(5600026)(48565401081)(4534165)(4627221)(201703031133081)(201702281549075)(2017052603328)(7153060)(7193020); SRVR:VI1PR04MB3006; X-Microsoft-Exchange-Diagnostics: 1; VI1PR04MB3006; 3:O9cI14NBk13m53CTp/dumX95hVgAPAt0rvz9CZqgzWO5csuavGG7K54Rv+n3ptPUsLObR6jAygY3uBW/khXPGtJFyjktaE3IxIucMoTofGY8KRNbgbEN3RIkS2Zq9H5ZFpEZ1BOQTyOvy4nv/zeYBcoctMKXm3C6jIX/C//je3cPjMtz+8ojU/1m4ZuGc/lu5+VzUFsWViFNyAV+UsbURGDHwpbgfAZPkqs3CQEWWPApsyAP0gX5Rm5s/tuvcCs4; 25:UYqu6A6oqNb1t32y40WzueFBXW/MXJllAUJcJr3GU4AzVCbMbfGii3Z/7rD1I/c8FWtqDz08OIu0ujR6IHCSc4qtfKMZoOb+tO5MhGhcm2/HQzZK4Pq1IeC9Je7f03uaiLHSRzFp5I2FAfqYTVfcTjRwguWLvGUZDAFmUnLQjH0bTFSroE5d2icqnh8sG/qqG/GDTCFcnk2ZYxaAlTbvz+lptv9jTyGvIYGwaVaztkdTzOH8GLB7upcAo5LEjuu2wrV+hXxRBbOgDTztvmG51U+bFewI23UeGMLJm6+sUIkskzvW27xClxDTr5mnMKvqJ7+mgAVVmswkC7znZbV1Nw==; 31:jm9ak5hweXloCHiyUjgUZh+jwo11tT90Gxq1EHhmqPAr8CfzjKnseV1K+7wITUoQXEdRMrxLlrvV/CrbkHRGLD/mijx9u6MgwUo9YfzWxNvXWYydCySaSYiHzTels+hFooi5jXG26YLFrOMfcR01NUJbKQ2TxkHoAa3eDPedl8tjHHHIAYbeviKTCqIKMlSk9UezKwhrnw6O+L01UUAQUIyhsUEVKlhkAZl1srGEZSk= X-MS-TrafficTypeDiagnostic: VI1PR04MB3006: X-Microsoft-Exchange-Diagnostics: 1; VI1PR04MB3006; 20:OBNbCcsGLy+s1ciiDPgbD/dzILLs808oac6yufsKaiMBgYpmi0ZAbPaG+SbZHCEis7DYYxekvwxDVr4DquO4tvHiJR4PyqGRGcueKth3sAwAraKlnh0kFJKJ3FnqfNCbg6hBfM6nOT3YMzi4vdFmxI+NVGicz2OWaWHb4UHWbYTgIv/iFyLcCmuzuw+F01adhk+ppqd8xyMx67YyG3lEN8R1lVqrIHfltIlHPJ9Ukf+GVsDbuqsScCQcyao70PqUdn7wh8wXuNRpi0kUy37HOO8WDYM3bfvAJ59oMhGKrQmIGefkaA6DQdeKG9vaqbtZnAHhcaS2vwPfnKM5wAmxBmBEHUWw3vFhuK/jtw6WscqQMRkORmHaxz8//EiPIsAcyvoAWPZadrgypRkydy0PwbMkY2il4VyCtCNLGAtjYUzoA8lw7qVrFBc9iTxSrwjFVCl+sybjH51aXy/XwLPNovlg/mUoJv8NNOGNqwxSFVc7ViZZ9XQa0QQxAVhoAmbW; 4:rKeQ6v0I5UzvtWIh43LVZqhczoy0TgN134MPC0qI3otUQ+bW0lZ0S7M5sxCxNI2Mvw99/7qldAXIPm+9rsTMP7Ol2sY82xw0MvVKVSwnZfiUbxOpmVtAIxjrIGUIOhcal8oExfUjMKrs23UWXJ7R63e098+JWyXvecxGK5muT+m05gc7ciOIfFUhTtyhvzJuXkK2aQagxv+4V8N9OJsFIeB+LgL/ptRWv65qe56rOaKqy/rUzwFFI/WZbeeWl79GCWHhZJNl+fS+9WHi5/axhDZpEYjnxLaWTcrY8vSmvu5Qx8YDlY/vuKEiT4IHdlJL X-Microsoft-Antispam-PRVS: X-Exchange-Antispam-Report-Test: UriScan:(185117386973197); X-MS-Exchange-SenderADCheck: 1 X-Exchange-Antispam-Report-CFA-Test: BCL:0; PCL:0; RULEID:(8211001083)(6040522)(2401047)(8121501046)(5005006)(3002001)(93006095)(93001095)(3231254)(944501410)(52105095)(10201501046)(6055026)(149027)(150027)(6041310)(20161123558120)(20161123560045)(201703131423095)(201702281528075)(20161123555045)(201703061421075)(201703061406153)(20161123562045)(20161123564045)(6072148)(201708071742011)(7699016); SRVR:VI1PR04MB3006; BCL:0; PCL:0; RULEID:; SRVR:VI1PR04MB3006; X-Forefront-PRVS: 06860EDC7B X-Forefront-Antispam-Report: SFV:NSPM; SFS:(10009020)(366004)(39380400002)(396003)(39860400002)(376002)(346002)(199004)(189003)(36756003)(97736004)(6636002)(6666003)(68736007)(86362001)(8676002)(44832011)(8936002)(81166006)(81156014)(47776003)(11346002)(956004)(2616005)(476003)(446003)(25786009)(486006)(48376002)(106356001)(105586002)(186003)(50466002)(16526019)(2906002)(6512007)(53936002)(1076002)(66066001)(26005)(51416003)(478600001)(305945005)(50226002)(6486002)(5660300001)(6116002)(76176011)(3846002)(16586007)(52116002)(6506007)(4326008)(316002)(7736002)(386003); DIR:OUT; SFP:1101; SCL:1; SRVR:VI1PR04MB3006; H:linux-u7w5.ap.freescale.net.net; FPR:; SPF:None; LANG:en; PTR:InfoNoRecords; A:1; MX:1; Received-SPF: None (protection.outlook.com: nxp.com does not designate permitted sender hosts) X-Microsoft-Exchange-Diagnostics: =?us-ascii?Q?1; VI1PR04MB3006; 23:QHOMrX3RaGDSYBFOwiRTSx9oCy7oyS31ZNL7RLmIi?= hpOlEPwnsp+ujnthZqCNXNZrgFLGF9538gAkuqGA5eu4CtFIfm0qGT5xMGZpgXCSFSGNzB8wY4G8TkMmGxWCZYY+DRb/Q9hTLMZMgw0YF2rd70+2a8hi+rNWySrgh5lict1Gcb3pQbr32EnibjG3GrSxIX2R4mJUZj3ion6W8cIFUpFjFYCJ7x6P64+x5GmNIvwrMI9nP4+BCQHL96v5Tbsmg0xnbSwOaw50T6d05mmboUn99CWdm5VfG2lzCTAFNXpflg9xGVc++QOvOiJA63dQebB5CeIBd3pkjaMHz1wB13fsHMsO+5W8chwcq/fVvLFTGXpGhqcBIQywlCXIS6mAyhGnch6A3Hm18OtYMLM8VoZtm50E+uFA5QiR6jIRzrxlG3ODbFtdyLRS2UzU6z/ZKSTmI0VEXdbMJEBZWk9IwtOdn+syqW24SyM2UBF02qXgdrC1Xit68S/5RfVmpvaCHPm9NbcTlAEbA9kfHlX9/fma3j9t0WsfVAcdfpN5OJkag3aBICGQRFHN7DAV7Tz108kFwl5jbAvikTDooZgAZYtPKeNCxjSB0TjmC3CHwgbkU+tc5+/LVSN4Lx8c+J0L00nrGC011Uhkd4oUejRDSbDnQTMDPCxA2XT5L1a6ApKku3pxyRaQJJqRfifctJV1FpuMCo/LizoAOI3qS0jBq1blO3a3y2hxlwlDKs0vdNM/+gJPCbaxcmp4xt4nqerb2iYDAz8WqiwpNyomI5OB8A0oKLYmUfSdn8ra6jzFkdubS1LnjH4/J0IwwScN1aDjVWKlOma1lZ+O4UW4VVd6a3s32tcwiogQ5RtGXspYnajAGTb+6nWteAGIok5/3k4z6ga9xV2dMD712VkXWeZ/U7p0kzpfFSP+IqfBwpTeQRs/volswKEoC3kWqcRjyTF5H04iikQV4IIH5aFO57ihsbwGbwfZR7o0wWjbHmIVG5ShaIWPok5woN/fEqiZ39cL4QAZhzC2u3BPNz3bx0N9RAjGrFd1eAXLG/o8NXQmdTCPKDJ454KIn2LX0HfirWXvtIeHEAv4d2BGng7JexKbw1Cr/kliQ5cc9GSwSUU4KOsx5qfnc3aEBKhEUwkl6Im0/YncmgjsRbuGNE5DOEubYGtfLENNl9wKTtWzkx//1gQtdC7xXuAh+liljrKiUDxr1I1aowsNw7BdGQRU8tTOg== X-Microsoft-Antispam-Message-Info: bENfDrclFpSRDz6gG4dY+Afw3NEqn6IcIvtloLBivIMJ0QKI4FMk47OhKbh923SizyWjg324dwQqU+U5afMUgo0uV53Xewy6J7B90WZ6jkcCMUHZyDDZoXzyeIFWhXQMZ7dycXKLS4wIZBF5k5dchj+tPXH1mlLqD0n0oAQ/HzrSxAosjpCyTM/TvaRqTxa/ X-Microsoft-Exchange-Diagnostics: 1; VI1PR04MB3006; 6:qIsQ9aTzRjWsCvSJunRRvbGSvzLuRW0/sTi2snkKCwhfD8abO4zdaSJoDPHd/w6mJ9NZvuGqmYY3rLhVcZrOkibGyB1iqpmQLs+I06lhkV1JBb7WpZnVhIDV6cuwsq3sBQ7wPt0udtJo77g7a/GOyq3aar65piCQM2szLaofsClqeHcPpgjT00Rhn07dX/5eB6DlFSOIc/U7nOqCCwiqigKn74xQBNtHPqootpx5uWwgmJ9nyTiJV0o3wZWah4vpxZ3/xkSO7XSlCoqzr2Z5RB43/lpwH4dwu3VyNVH6L1RH4lB3V4yZnpMGNT6yefoAm9x1ozupo/huICbOVwF1LITcG0fzM4CeYfGRpi6WgCt7dMG12H4LxL87qMYrWK4gSZW4M3sz+81srUueVSBcCq63ZkLdIR4DZFGq+IvI/6s0x2quOkifctTXvFSXiomvG7AS1ROLKGJ+rKvKUmdo/A==; 5:6/fxOxQvsFqYsNKaWndynO0jJrK5ABLoJZBOqtH7vagWIA26XBG+2kwipsePapOnz94DXhn8VFaLkdA9DCjgM80kDYnirRSvt8SQml+zWb7rYQhQ5UwIcXNpE/1Fj+pY8tdfx5E+czI6MFd912RQRPaZW4/9HuOQjRBDXJyk5Y4=; 24:auQdwxc+cMHiC7tKUmNLuIEeRVVPyK7Ou21H6R6TgRyRwC61D9RsxxcEzbsyU33ZUT1od2jpNwALl7t+WJmAtvs4otXBMWhWhDQZNtOkWlc= SpamDiagnosticOutput: 1:99 SpamDiagnosticMetadata: NSPM X-Microsoft-Exchange-Diagnostics: 1; VI1PR04MB3006; 7:Zp4a7haE10aD7ml72NDgO6itrN/ytrbWp4UiIFTmxWXmipmkOUiO8MkDsgxUGOPHvg3mtBSG0rMVP/QVOAOkkeF8eN/KrdqNHsAK161HsCyjDD2kc57bKtOGQ0juY4zxbFomYrn8Jl/uJjbGxUp9S/pf0vlFTGeaJmQd4/tUFQxUFifAsIY8l+aStpafcdjLljdNOHcezrPRQKjB9/K0pZpP9N9YZXgh+05f5QqtcYln972gGfe/d2e5Q0inxG/j X-MS-Office365-Filtering-Correlation-Id: ac50a7c2-2f43-476d-7663-08d5c49597ce X-OriginatorOrg: nxp.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 28 May 2018 12:21:49.9323 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: ac50a7c2-2f43-476d-7663-08d5c49597ce X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 686ea1d3-bc2b-4c6f-a92c-d99c5c301635 X-MS-Exchange-Transport-CrossTenantHeadersStamped: VI1PR04MB3006 Cc: u-boot@lists.denx.de Subject: [U-Boot] [PATCH 05/41] arm: global_data: introduce ipc_channel_handle X-BeenThere: u-boot@lists.denx.de X-Mailman-Version: 2.1.18 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" Introduce ipc_channel_handle holding the communication between Acore and SCU. Signed-off-by: Peng Fan --- arch/arm/include/asm/global_data.h | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/arch/arm/include/asm/global_data.h b/arch/arm/include/asm/global_data.h index 287a7bd5b1..4bdf1abaf4 100644 --- a/arch/arm/include/asm/global_data.h +++ b/arch/arm/include/asm/global_data.h @@ -74,6 +74,10 @@ struct arch_global_data { #if defined(CONFIG_FSL_LSCH3) && defined(CONFIG_SYS_FSL_HAS_DP_DDR) unsigned long mem2_clk; #endif + +#ifdef CONFIG_ARCH_IMX8 + u64 ipc_channel_handle; +#endif }; #include From patchwork Mon May 28 12:24:51 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Peng Fan X-Patchwork-Id: 921475 X-Patchwork-Delegate: sbabic@denx.de Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Authentication-Results: ozlabs.org; spf=none (mailfrom) smtp.mailfrom=lists.denx.de (client-ip=81.169.180.215; helo=lists.denx.de; envelope-from=u-boot-bounces@lists.denx.de; receiver=) Authentication-Results: ozlabs.org; dmarc=fail (p=none dis=none) header.from=nxp.com Authentication-Results: ozlabs.org; dkim=fail reason="signature verification failed" (1024-bit key; unprotected) header.d=nxp.com header.i=@nxp.com header.b="aLFMNkzQ"; dkim-atps=neutral Received: from lists.denx.de (dione.denx.de [81.169.180.215]) by ozlabs.org (Postfix) with ESMTP id 40vbfg5C5Kz9s0q for ; Mon, 28 May 2018 22:25:31 +1000 (AEST) Received: by lists.denx.de (Postfix, from userid 105) id 52231C21E30; Mon, 28 May 2018 12:23:40 +0000 (UTC) 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=BAD_ENC_HEADER, RCVD_IN_DNSWL_BLOCKED, SPF_HELO_PASS, T_DKIM_INVALID autolearn=unavailable autolearn_force=no version=3.4.0 Received: from lists.denx.de (localhost [IPv6:::1]) by lists.denx.de (Postfix) with ESMTP id 04B3AC21E2B; Mon, 28 May 2018 12:22:13 +0000 (UTC) Received: by lists.denx.de (Postfix, from userid 105) id 27853C21DFD; Mon, 28 May 2018 12:22:03 +0000 (UTC) Received: from EUR01-HE1-obe.outbound.protection.outlook.com (mail-he1eur01on0073.outbound.protection.outlook.com [104.47.0.73]) by lists.denx.de (Postfix) with ESMTPS id 1EFDFC21E31 for ; Mon, 28 May 2018 12:21:56 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=nxp.com; s=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=/Wko3+Ilc3sYlasImQgwXD4PNNbbHej+uoimiUPxn30=; b=aLFMNkzQLDYcsIZ1T7uixARK0iK/OHuT4Z6KeJfCClfp0IKQ/tN+JryGigYwXa9Dedk6CPW2nJG00tzkDFRa2QbDyfeZeEkG8ECV5QaTiVksMuLs+XfacVEoq0nP9ivvHfhY2D8+NujQqQB5m8whfd3tOUQ+vSnIkUdBXzXIM/k= Authentication-Results: spf=none (sender IP is ) smtp.mailfrom=peng.fan@nxp.com; Received: from linux-u7w5.ap.freescale.net.net (92.121.68.129) by VI1PR04MB3006.eurprd04.prod.outlook.com (2603:10a6:802:9::12) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384_P256) id 15.20.797.11; Mon, 28 May 2018 12:21:52 +0000 From: Peng Fan To: sbabic@denx.de, fabio.estevam@nxp.com Date: Mon, 28 May 2018 20:24:51 +0800 Message-Id: <20180528122526.20597-7-peng.fan@nxp.com> X-Mailer: git-send-email 2.14.1 In-Reply-To: <20180528122526.20597-1-peng.fan@nxp.com> References: <20180528122526.20597-1-peng.fan@nxp.com> MIME-Version: 1.0 X-Originating-IP: [92.121.68.129] X-ClientProxiedBy: HK2PR02CA0175.apcprd02.prod.outlook.com (2603:1096:201:21::11) To VI1PR04MB3006.eurprd04.prod.outlook.com (2603:10a6:802:9::12) X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-HT: Tenant X-Microsoft-Antispam: UriScan:; BCL:0; PCL:0; RULEID:(7020095)(4652020)(5600026)(48565401081)(4534165)(4627221)(201703031133081)(201702281549075)(2017052603328)(7153060)(7193020); SRVR:VI1PR04MB3006; X-Microsoft-Exchange-Diagnostics: 1; VI1PR04MB3006; 3:RHxlbhHlhZ7UBqGCwiXosPB5wzzAM8zFWlRVnisbr5fJ6pu5+jVHXvlKhUdIzypYjzj90vfqb65oGTLFDukJvwGSUhTHvikAZWXTK1S6oFlEqw9paNyyvKtQRdtRkE71VKlOvkJF9H42n+v0foSpO/LcY11gwBR17BJOXLvviB86uA4ycpB8a1SVhCD+0y4ENoPC0YbQw8Dn+T27faweIlWtMyoZV6stHqaxh20m061INMHrTNdrKcVeqkaY5odf; 25:pqGrlDZzklB5uUvXJKYsBcb+DXA3VYhA09N77psHNSdqptTLKKnVpjabrlIBt5opNZ4KLvEOkQJrcjRJ9jsvxc8vmICUEolCbo6pHE3agbgou2oKaPFcU5+da1OjaJWurVnivSL6bGZuVlBXRpELIpNLZXknumsOqeJnYFtkLuhyEJDcmLuX9pIH6YvSRpp91fIXVus2FMIqjx1je5wqr/C5F9nStxrfhr3QvW11Ip6hpO0OLQ9nGsE/159R7hYnEW18tWb6uPHjR9xaZCMrP5gqn7hVM2qayyHlgL67xmpaTtJAUbT04NppGz0ZUfrRvRINj1UgnRyiNCW2yoRW9A==; 31:o2tUZyAJMNE8GfKxDnjEEJZoDeQ2C/1+QmK/HuHrXmmVDfjlKi/WxqMjVyEkx8m6RstCb6q/CYz/b/u9aMpzDyrtOsTFFoiVZYIvE6krTSvLp8oTn6tt1gWpVJSyUH0JO9Fpa90jGarDualqIRLBNYChLX8nriOmoTBj2hA4X89wpe9rrzrh2E883o78cqXdp1hHWIBxsRHqJ8eTCcvWacJgvYB2CUETvJEijPtnO+E= X-MS-TrafficTypeDiagnostic: VI1PR04MB3006: X-Microsoft-Exchange-Diagnostics: 1; VI1PR04MB3006; 20:+tMFAKAPYHFjUPwS/5qN0l+YGG8Gw07Zb00mW84LEJWHYP8I+Q0563qmPwRXaKDns6QDJVbzO5M0yeaZQ6034elllesoPCkq6FoujcujtP1u55pnNNshZnRCYswWfPD8AmaN51MxDH2VqU1tNZuwNB3qU+cRxLCgVJT13WHfQ2GevcZMoyiyuctqbO5LbMK40myqPC6ET3EbWWa4r2qInXX9A/nPHBzu6DomyA5z1mksuuxY9iz8SY8+uoRnagOhqJUtnVsK71TVZ6TnqWu/N9PqzBA7PwAjo5f79US+UKZwzLLJGDrgfWkwK5cUq5c5QbSu/olpMEZXG/Mh584pE/Ok0vSsOiBt+1ZkgRI+KChbI00zITEyRwm5doi9rhte3u7Kxh6q5scxYld0zWkDmqBj9tXXYxwLY4a98+03EddqAS1qbbngNudxzuyuSIuYDbZqYJgQeYFX46UxHz7ulKaYCRsvBJg8WeZ3x/K1w6at7+0KSWz7eoxKMZ0DYWjW; 4:fmJrsghPB7YtqC7GpS6YqOrJtMDW1pgwbq2kjRYAiipaNVj5HjXescHsAM7NE4+2pnLZ8qrjONi/Nw0/nlcTfM8bbF9zIxTxYmWyfiJLoRbCY3zWrkGyGBV2GO+LTUxGKKOgrq8smaYmNJpguC83C1KcIheKYDf6ZIFsTq3y8mVLtalJBxPf5Md+Q2+ze1wYQGm+Obh+wRvGd+Y5L9h2GXTomXIHRSeomEbAIbpW9Mb3uo4YT+rh6wDIdMVTpm1hApNW7JWE26zh0I9lWmAxQlylVI4VkyPDd/Z4r0+KvfPVSHyXvNwrjEZPgOPD2l7d X-Microsoft-Antispam-PRVS: X-Exchange-Antispam-Report-Test: UriScan:(185117386973197); X-MS-Exchange-SenderADCheck: 1 X-Exchange-Antispam-Report-CFA-Test: BCL:0; PCL:0; RULEID:(8211001083)(6040522)(2401047)(8121501046)(5005006)(3002001)(93006095)(93001095)(3231254)(944501410)(52105095)(10201501046)(6055026)(149027)(150027)(6041310)(20161123558120)(20161123560045)(201703131423095)(201702281528075)(20161123555045)(201703061421075)(201703061406153)(20161123562045)(20161123564045)(6072148)(201708071742011)(7699016); SRVR:VI1PR04MB3006; BCL:0; PCL:0; RULEID:; SRVR:VI1PR04MB3006; X-Forefront-PRVS: 06860EDC7B X-Forefront-Antispam-Report: SFV:NSPM; SFS:(10009020)(366004)(39380400002)(396003)(39860400002)(376002)(346002)(199004)(189003)(36756003)(97736004)(6636002)(68736007)(86362001)(8676002)(44832011)(8936002)(81166006)(81156014)(47776003)(11346002)(956004)(2616005)(476003)(446003)(25786009)(486006)(48376002)(106356001)(105586002)(186003)(50466002)(16526019)(2906002)(6512007)(53936002)(1076002)(66066001)(26005)(51416003)(478600001)(305945005)(50226002)(6486002)(5660300001)(6116002)(76176011)(3846002)(16586007)(52116002)(6506007)(4326008)(316002)(7736002)(386003); DIR:OUT; SFP:1101; SCL:1; SRVR:VI1PR04MB3006; H:linux-u7w5.ap.freescale.net.net; FPR:; SPF:None; LANG:en; PTR:InfoNoRecords; A:1; MX:1; Received-SPF: None (protection.outlook.com: nxp.com does not designate permitted sender hosts) X-Microsoft-Exchange-Diagnostics: =?us-ascii?Q?1; VI1PR04MB3006; 23:cjtVTSW1YWGUAXTmdpkC7LEvtD/Iwbf6J+PH/l2up?= A1rkyqaQhwCdvqWhoBxzal8RKTGaGD81gYG9MXBoZPoImMHlRQMF3xGjVaHEacEbbt+Q+VuQGnytNRoHjsTahFt+3beQuvnB1ey7QYpTBWEtNHksZHueMc1KPgFes1yBYQhPRcarPR1JUALRnPIgmthjSqr6itvnHAG26DNtCg9h16dc5lTYqhh3Lr+XzY9pheYXeeWf+i/f79Cwem2VU5jlZeDcNJ3Ab3MD9r7eDRxpzcIgW6bUAMOJ9D4d6fqAtkuj51h2Efo81v909bRmc906MQOjs7ir4QiGrJGDdaCh6h0NgPMs+/8LNdxSy/LahY6ZT2bYRxNXFev+0cHWZitji9LYb4/1r2mfAlvUm3P2iH/7iZcDgX8eh2N/hgAQDhx6Lo6tBtrpLg21yXbmNWASyKzulx9kLvoE+yc8LKsExhsyxMAIDdpZYihaesIgiaSDSTrKbGdmgE2OL95toJNg4+Wv9gMaagU+CEPMO56NBycsTjAJJ55V0Zm0R5N5bKC4Aec0ADzYz48z5a4qTSd5XbP+FNnxg2aLjACy9MZOwal7TGpbUpi+wO7Fwm8KvKaZDRedOiKNd/5Pv6ueafN9IBCSq5FZtM8VaydsfabC77ltowYTuzdp0+Ionob+dbSORvW4pJHan1xkv/ScbNqb17GmakC0iRDfTxLoE+MaA6cT/fZsPo5yoSfS/RipqNQjcSU0qMmxvDgAE/pKaq+ETlfmc3zYWcN5dd8UmFpdmairrBykiLai0rrhLqHAdZqsVoJW99JMVPoMkHFVz2sOBM1IBIGHRgeDmrnTM4v5aoUDf1DLCEeCCbIGdO/ErB2iqx0bW4JcwPwB3MOo2H5PUdEam4+Ml0lfJUU3jVGQK8i3ZqiReHv8X/CHsJVO/vpEA4DuTcnFfvTkuAbJeTYGMKgR72Y3+Nz/oaFPjLFOULIM68Qg7czA5iypgzVmJ+dM203ZA9l9yBQI/oK5dfijEJGT8p9mBjK/14oei+i82V4zSyO8Rs/WlCPW3WLDjk5UFkj8bdHu7612Bu8gcPWfpmfXo5FB6JWQngGgPbSDr3mKytEOclcSQCgAsM6qKIm2UYXPTDUojMC9fYqn1ynrKORtdsTGZ4BV8rlqh/2WzXKTm1rmEqWPw9C6MOXsAyS96WzoltnC5/+h+zB8SGw X-Microsoft-Antispam-Message-Info: FylAHttsVl0dlTBh7BnnYpKjXAHCFVE+6A+Vqym0ridpij30Npl3p7d8WObZE8IWLhtEWxHouVY4B2JNSJOWgUVbTzGjFlZCxlCj81IHM87v4aCcMACbuWwTwG+1t1AHwn3XH1C87DuvvB9lBu9Zbf8mq/Kjok/hOn6ABJl3D6uRISr/+1qRqg2TldL5Bn1D X-Microsoft-Exchange-Diagnostics: 1; VI1PR04MB3006; 6:MzTmmWYOCrmmBKohp+RU7MGeF0wMO6k6kLQYwSvRMDNnBNIktaGJ23KN5z2TKzqwbqPEOoSHkRdpF+Dw/cVtiwQjRcZ5TUFve0LkECLkmCJjCXV1ih/v5hudKIuCR3DT54o7q3uZD9ntAHz/nM3IumPRnG1MMr3Lo0K0MIx4Co77BUCtMF3QCSRd20fdGzHzFVTKTIUix2F70JGhqHjsTDikpMjKLTPw6ga3gofAeX8pobhQc9oIamL7l8SQPUvZibytpi6icqNVlYRY7fcTQbMLMA+d7glfZI6N8vekxQxWluFg8aIEAj6Qn6boBi5xStApqBnxTwZnpYSnyKS4AnXNhK+YFdM3nFneRACW3M7TWN0aw20fC56s5ecnruVtO4mZ3TYYSwobsFar6+SBE2Cdk6jrSwNrhNSSjc9F93LMLUiXbgX95pGMwQIpgWINvIQZTzJdOAfkhgzTCymugw==; 5:Ru8OK7m6Om2n5Mc12D1zKSzSt88X9tWPzsHqs6z42JAYBuZV+rmTGBdgyIhwN5sVtH4awYwWaTrxoHTIzYdvnBBXft0JuspoU7PXcEPYOZKllyzDMBPokbZdUBY03gN7Tc9psurSEqeBVZCtYTnTMJHUPzSWGNpEwl2goKR5ixU=; 24:MKYZ8d/IaQZ3ZspGdDM8QjatRXmO3v9odhXD50CLFH8/h0vC9VFpgm/J/H/JPIRNmNJ1H2vgI6gWPAdmAYdA6o0cXCcDyCTeeCeg5bnrYWU= SpamDiagnosticOutput: 1:99 SpamDiagnosticMetadata: NSPM X-Microsoft-Exchange-Diagnostics: 1; VI1PR04MB3006; 7:YCq9lfRr772/X5YwfkOqOwWWcstRibuHm7XtRNyCXrzgE7KX2iUadEK6QySpapH/rFxB5MTd0q4cMSD/ouoQmD6nochisoAtbKmwnP1Cmgov0zrEg0g7g+yTr5hnANCQpQmsWSsyeb7g5pOvVAsLzAINqOE8ut+h6vRzhwV/V56KIgwHVZUn1fEOUxk5M9DoBZWxebHaKLA7UKvBj2j+wSdySs5oRMt3kHIlA791pzT07uG94wtm76LWVj+5jnP7 X-MS-Office365-Filtering-Correlation-Id: e56e2808-df14-4cd6-15af-08d5c4959972 X-OriginatorOrg: nxp.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 28 May 2018 12:21:52.6979 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: e56e2808-df14-4cd6-15af-08d5c4959972 X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 686ea1d3-bc2b-4c6f-a92c-d99c5c301635 X-MS-Exchange-Transport-CrossTenantHeadersStamped: VI1PR04MB3006 Cc: u-boot@lists.denx.de Subject: [U-Boot] [PATCH 06/41] imx: boot_mode: Add FLEXSPI boot entry X-BeenThere: u-boot@lists.denx.de X-Mailman-Version: 2.1.18 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" i.MX8 support FLEXSPI boot support. So add FLEXSPI boot entry. Signed-off-by: Peng Fan --- arch/arm/include/asm/mach-imx/boot_mode.h | 1 + 1 file changed, 1 insertion(+) diff --git a/arch/arm/include/asm/mach-imx/boot_mode.h b/arch/arm/include/asm/mach-imx/boot_mode.h index 8766e9d180..3a483b6afa 100644 --- a/arch/arm/include/asm/mach-imx/boot_mode.h +++ b/arch/arm/include/asm/mach-imx/boot_mode.h @@ -25,6 +25,7 @@ enum boot_device { MMC4_BOOT, NAND_BOOT, QSPI_BOOT, + FLEXSPI_BOOT, USB_BOOT, UNKNOWN_BOOT, BOOT_DEV_NUM = UNKNOWN_BOOT, From patchwork Mon May 28 12:24:52 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Peng Fan X-Patchwork-Id: 921488 X-Patchwork-Delegate: sbabic@denx.de Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Authentication-Results: ozlabs.org; spf=none (mailfrom) smtp.mailfrom=lists.denx.de (client-ip=81.169.180.215; helo=lists.denx.de; envelope-from=u-boot-bounces@lists.denx.de; receiver=) Authentication-Results: ozlabs.org; dmarc=fail (p=none dis=none) header.from=nxp.com Authentication-Results: ozlabs.org; dkim=fail reason="signature verification failed" (1024-bit key; unprotected) header.d=nxp.com header.i=@nxp.com header.b="buKMX2tJ"; dkim-atps=neutral Received: from lists.denx.de (dione.denx.de [81.169.180.215]) by ozlabs.org (Postfix) with ESMTP id 40vbm23S6Xz9s0y for ; Mon, 28 May 2018 22:30:10 +1000 (AEST) Received: by lists.denx.de (Postfix, from userid 105) id E768CC21E30; Mon, 28 May 2018 12:23:58 +0000 (UTC) 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=BAD_ENC_HEADER, RCVD_IN_DNSWL_BLOCKED, SPF_HELO_PASS, T_DKIM_INVALID autolearn=unavailable autolearn_force=no version=3.4.0 Received: from lists.denx.de (localhost [IPv6:::1]) by lists.denx.de (Postfix) with ESMTP id 1AD31C21E2C; Mon, 28 May 2018 12:22:14 +0000 (UTC) Received: by lists.denx.de (Postfix, from userid 105) id 6FF69C21DD3; Mon, 28 May 2018 12:22:05 +0000 (UTC) Received: from EUR01-HE1-obe.outbound.protection.outlook.com (mail-he1eur01on0051.outbound.protection.outlook.com [104.47.0.51]) by lists.denx.de (Postfix) with ESMTPS id B638AC21E15 for ; Mon, 28 May 2018 12:21:58 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=nxp.com; s=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=8WlQQt1G16WhvkW4TtiwAgqDsxdNecFG4DRw/Vn15pM=; b=buKMX2tJhgOFmSmjOkUhzYpGfJAOVhQ8cvYXeNX62NFbcdu8GyyqR8ZdAIktCOH7NyszKjgTGT+DW2rdepIRkRn8h9Xo7t1CDqRn7eJqqs28e/UvHpVKBnQviRipBfEiG5Pbjzn1PfFpLyvYjHTptdTSYHjDDoa96oeYUqPI50c= Authentication-Results: spf=none (sender IP is ) smtp.mailfrom=peng.fan@nxp.com; Received: from linux-u7w5.ap.freescale.net.net (92.121.68.129) by VI1PR04MB3006.eurprd04.prod.outlook.com (2603:10a6:802:9::12) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384_P256) id 15.20.797.11; Mon, 28 May 2018 12:21:55 +0000 From: Peng Fan To: sbabic@denx.de, fabio.estevam@nxp.com Date: Mon, 28 May 2018 20:24:52 +0800 Message-Id: <20180528122526.20597-8-peng.fan@nxp.com> X-Mailer: git-send-email 2.14.1 In-Reply-To: <20180528122526.20597-1-peng.fan@nxp.com> References: <20180528122526.20597-1-peng.fan@nxp.com> MIME-Version: 1.0 X-Originating-IP: [92.121.68.129] X-ClientProxiedBy: HK2PR02CA0175.apcprd02.prod.outlook.com (2603:1096:201:21::11) To VI1PR04MB3006.eurprd04.prod.outlook.com (2603:10a6:802:9::12) X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-HT: Tenant X-Microsoft-Antispam: UriScan:; BCL:0; PCL:0; RULEID:(7020095)(4652020)(5600026)(48565401081)(4534165)(4627221)(201703031133081)(201702281549075)(2017052603328)(7153060)(7193020); SRVR:VI1PR04MB3006; X-Microsoft-Exchange-Diagnostics: 1; VI1PR04MB3006; 3:eVtUQKazBYAt4oKRrtiFnVoxoJett2a6A8yexI+quvoq46G72BH9Arv36xSHl6SNsHTXtstuGT0AzVrOJiVFRAae9ioXOFFSRVxlyeOYJhhrXai5IKmpFDdkxr7m1anjN6AQ3VCyqkM7CJ3jQREwjSYGYxR+3OB8n9ZgIzmyHRRA8jef82sPZHjnYUHXbyIqA8HsTPNgLfEMRWGW0rCFOoZrt1M9nQH0OWW864r9IbkzYRGiEhfejf5Axk88sscE; 25:w9iL9EkX7Pg315nSVBTM3QXgu0dvihuWjbjlgAuoLkAe8j7mk1glK/EwwL3QII52zVdvKHj5GAzuo57K1UWAYhErIjCSVnWK2NKaxTiENBEwDETVWgFPBIcWvAk4uEi7Mk4gux5wTesNzTBq0ehA3umzgwtKlLGL0+nGDfFxuEIsNIIYAsivyhs/8UE1qdHwyQAeHWIQi5mocdFfTcLAaN+96QfTa/rnl1g8WKHw7BQzi7T8JNKWMwmMErbSifVCeh90Vqvmv5wfbLMise7bJLiDvuOYTv1jv6ECVPVDUHpFTOt0uXS4t7UWHPl8laYFZRftr+9ypxfNgHXL8vZ8/w==; 31:VEpHxCy6Yij/+e6g+gCOa+uLOhdDbM0p624qr5+zCtc1AlFV2KfBZOVcu2CQ54SqNYiUg7MSckEoD7njCwkeOk8o7VDmuwmA0K8SRFKL67TePloo0pkmjtinlYZF3zWyIjWuxkgPsyhEJWBu8Xdx3xoJo1Ae+QLzIPFysCEe9x6t7hhkCvOalxsU+YV7MvROS9X9g55TE+UEKX9ed/lixOJobw5izZNgWUq9RXoYirU= X-MS-TrafficTypeDiagnostic: VI1PR04MB3006: X-Microsoft-Exchange-Diagnostics: 1; VI1PR04MB3006; 20:S9P44OKLXuuibMj39DYqWp4tMVLoLBZZB59rVjhI6EQGKi+mWzZ+9ovNnqQ3mNTfPV+QKrM07EbjqLSFN5UlTRMnK6I/UEVOhXN1Ol7vohRFJQoWYUvx2M2cf+z85VbIiCqAkMRvsDOaftq3ymx6cxkgyVgDvs2O+JINV2JaEUt/05r/RLBt2mWyae131J0WFGRR6az0AMoHFs234+Vwf6pl/C9nxzt70ppq1j2Wsc5A1qo77tIEYDCb+KUzowsQlqUTs4QhRoJYL4FE47y2jNVMGkKjEUTTDJo5sAwhs7oYbS54Vo6WuSv0yvPy2OgQ+T7fWI60wPRRAJ4qTULJIrNIumCuekWY65cloJdIy8YTNcdql3/SeCqsULmhFu+wQN4mTCoiOcw1l+/SYwhdvzMGW8wXcR95ErU7V3PlGBE4+aQoeVCB/9CgAlGX+33TmtZ8SIBp7RMKOQNhBJsfDShiZf6cgQUPqvkUcKytfL7IkJ4VkJdaVj77whsGUsn/; 4:EcG2UBtGUAHJeQB7Cw1midhB5LfCt0VENl9tgefNKb/gu2sRn6d8ds8Dk9TEn2pN9buZp9CzzbOVZ3YvKeOv9+yiWvxqtas0iknMd19C7dRfWaYUlOs8cCB6fj6F2xAQUegyR9/MIQGvNUodGYCOFCW08jkRa7SxhwVyBvKF79YtQXPPWqPWKdCzJmDuPtvd2NKXTU8PqTJe8sMtdHr0fW/ZBwWqzU6z3BZO9YzjBuCtVQ1Yjk0E3Y3UwOM0bcfKdxltgoQSQu5RcmjujPBDLsVcCAkfEcLG9gBVhwOP3gZYC66iUKHUeCQnuQ7VbXEx X-Microsoft-Antispam-PRVS: X-Exchange-Antispam-Report-Test: UriScan:(185117386973197); X-MS-Exchange-SenderADCheck: 1 X-Exchange-Antispam-Report-CFA-Test: BCL:0; PCL:0; RULEID:(8211001083)(6040522)(2401047)(8121501046)(5005006)(3002001)(93006095)(93001095)(3231254)(944501410)(52105095)(10201501046)(6055026)(149027)(150027)(6041310)(20161123558120)(20161123560045)(201703131423095)(201702281528075)(20161123555045)(201703061421075)(201703061406153)(20161123562045)(20161123564045)(6072148)(201708071742011)(7699016); SRVR:VI1PR04MB3006; BCL:0; PCL:0; RULEID:; SRVR:VI1PR04MB3006; X-Forefront-PRVS: 06860EDC7B X-Forefront-Antispam-Report: SFV:NSPM; SFS:(10009020)(366004)(39380400002)(396003)(39860400002)(376002)(346002)(199004)(189003)(36756003)(97736004)(6636002)(6666003)(68736007)(86362001)(8676002)(44832011)(8936002)(575784001)(81166006)(81156014)(47776003)(11346002)(956004)(2616005)(476003)(446003)(25786009)(486006)(48376002)(106356001)(105586002)(186003)(50466002)(16526019)(2906002)(6512007)(53936002)(1076002)(59450400001)(66066001)(26005)(51416003)(478600001)(305945005)(50226002)(6486002)(5660300001)(6116002)(76176011)(3846002)(16586007)(52116002)(6506007)(4326008)(316002)(7736002)(386003); DIR:OUT; SFP:1101; SCL:1; SRVR:VI1PR04MB3006; H:linux-u7w5.ap.freescale.net.net; FPR:; SPF:None; LANG:en; PTR:InfoNoRecords; A:1; MX:1; Received-SPF: None (protection.outlook.com: nxp.com does not designate permitted sender hosts) X-Microsoft-Exchange-Diagnostics: =?us-ascii?Q?1; VI1PR04MB3006; 23:VX0ugGMZCBIEjUPvGXY1CjYa0/xDMMlk4EcXGfZXS?= jF5zEz/dOWugNDsFmJa5zaQBT6z8dbzff3TJlnd6hEdBPzIsU/crmYU5RzTJYvn/p3Z0NtjY8u3gf0RKF41ouxc6VwNuKO0dn2NGCuEPOtQ7d8g+0vPyv907CF5l2FUc8Q1fiR2J+MAIA7HJg2zi8Hp1AsR/uq5UrgUxaGf/qp7mtlVnZGKgdpwgCNi/N6nDvuhM/8wRIrFq1IKr6EAxrD+nIVhQhvtoO8u8Rhir07ks6ogqhOU8BVe3JgnD3+1Ya6sHHdSG5LYBH7g/jxTfVfPZOeilCdFqLaUI12A3SU5pFJE7AdQlGxEZ9xCnC6ie3pWgwfq96wAf92i64OHvQ7MLh+a+2xszWZJzSVAv9BPGPGcA2OCSN1BHpwf7slOp69GoHUa/FGTkkdad3KOeRDrALOoQ2sVfNB914R0VoqRaNM2oROWH4ei+WW5ACXYoIVZQ/tC4yo60NIb1BFaAn7nMJEAHHKSxLY0UiVLs58GVygqo7TfD1OzUpJxII7mCsZmUQ06IjfamgvSA8m8GMMvM4Ec193Hfi9yZbHAOP027dyKpF8NxKikXKVbSarBzCTPDidRWxlE907HTo+j9YkvRlS8I5YDccqdsbqdXiBFZii8JGfeK0HnOufpmBhqZskc2M9a9+r3eJo24tde4SILU73JMOsw2w4V3VLa0XGuuhHAwhzSDEgW9dbADQMKWJOJOAMXRohPCSuQgitb7T41k7GDTbkpjK4f+Y1SLWEdYpWmG08hYFsu6PfJmOgv6tnAkxr38jSSG3GaMGBa8I7wzbzcAj4Ef3mZM7LaZcOpeKtgUXCjWe31YwQKnAdGeANmT9WHotSjHkrncO0mn5Y1NVaR8jVk6Si3Owu+zbeP5hF2Uy+DU5QLUbB1jUYod/CzAMUKj2o5PjWMIorLpC3DlizP7Yn7j0ucftYABJeJdlyslD/8RbEZGuvXiKGFCf+VZpYRUPCiLuWIUDr6050j96IgXuHz3xKnnzW6OC97aQYdK+fyRcb6hDh5b5P0D2F9dfOYBy7axQh8HmM7DJqWVHpleg1ZEQWIlfFKiqGhD4mPysG0NWzDKESLNkmfB7VmbdCXsbU9NxJ+rSWKI5g1iMQx8rTPanRySAKfSvGCZgTwZFeSW5izwUwZL6jOPy4GQ8ndD9caus1tLmthRHwGETbp968tlb0D234DCcUOHzcFDAqIOdYqu5Yz5wtLwQsjJfNSTIbkq3Fpe4+Zx+VX X-Microsoft-Antispam-Message-Info: ViUTehlGugBG8It+i2PpbsPcnXmRQQjq1xQ71KU18PcHK2/WN7rDG/K0E60c5Y3GkmauHUdA7OMHT+33dvNq1T6UvwOAlh+9MGwvCkt4RyNzeqOuNIT9ATW+1QTxrR+YMFTxdT1gDmmOz+YUYgLv4s0Avf87qUCjm9rn9Dz0k9hWsZy7CS6Y2gjmWSXDOSts X-Microsoft-Exchange-Diagnostics: 1; VI1PR04MB3006; 6:s4viVZnfG9Z7xE0IdINFwG53QFlWCYHoDuECeWs+zDz6rauUMJTldsQHma4RLboRrziSi+5NjbLFRl/8ms5fW/z/XaFWOyuhdMye90131AKcaHV6vLnHs/6v8MisBB/prSXNxbbx5fvJLDuvwNmc4ZGQwPJhxYR7GM7TMgb81hn+//HD8gOVOfV43vGEP+rnEV8+tIcZ/t8V2tuh0iduQkFv9mJZCgUmiY9AY9jRb1/EkFZ+BDlnnVgTIwUtZTodgK55O/NuEv6lmjBAOAwHAFM1d7VgdkcH/A3ikhN5u8QbdJui6Gq24vIK9D6J1H/p+jPwcByh+iJ4xFFH8S8VB7Bus+M3E4FFH54ZrGPCHhbOnCQjxilz2ndNjLh00VL8g1S4rnbLYticuYRk/3R/DGson8xEU4Y6cEsg1oKTpTKUfP3x+9tLsIpFkR3MKW5y4wuPBeLoRGooITbWK/jnrA==; 5:d9aWsBhTI0rjn2ydv0U8huCDOHqvcV68Mp+w7uDItC4ERXKQdTSDZ6Bu+0FVMXZ5ElCklhr26BZoXgVNOCr29IMIPPf/emSsj2rJ78qri4bxaRzx9dgihNQwuONhdXlq6J450xrWl0NepJK74A6HlHbkN3wsm4I9pizj2ot/N9Q=; 24:VS9JHUbLGsHqPjpFH68Blxs/m+ndBDf3O/Xtbi8IykRwfoKojI9kX5eiFRWIpfcjG5pvaOI8lpGid3koNEQj5VHcEghbpD0iT6QsJncLI/A= SpamDiagnosticOutput: 1:99 SpamDiagnosticMetadata: NSPM X-Microsoft-Exchange-Diagnostics: 1; VI1PR04MB3006; 7:t+yyUDUrDEhY4+7+7+cdaaq2lZ4JrlxQGqA/A0uKzrMaDRFwBd8qEJsOkK2splkzUPCKYwwMT/QCFgCpfYFI7KW1fZ3cz8SKbI6o47hF4wg3Z0FtGhhBhoUdwrMVmHmyLBFaCPrvY3R3dzW9guBObRjIS2GGrLv9S+UysU7/DSo/Y2DNFxQDPs7GyvFySnUSXy6sUvvX8pzEvhVs8BWdWZQMAFWsFAjcUYqkCFuJQWDe+/+u00OLbes3iYBubFPq X-MS-Office365-Filtering-Correlation-Id: e2a0d69c-3bad-4ae8-79bf-08d5c4959b1a X-OriginatorOrg: nxp.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 28 May 2018 12:21:55.4792 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: e2a0d69c-3bad-4ae8-79bf-08d5c4959b1a X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 686ea1d3-bc2b-4c6f-a92c-d99c5c301635 X-MS-Exchange-Transport-CrossTenantHeadersStamped: VI1PR04MB3006 Cc: u-boot@lists.denx.de Subject: [U-Boot] [PATCH 07/41] imx8: add imx-regs header file X-BeenThere: u-boot@lists.denx.de X-Mailman-Version: 2.1.18 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" Add imx-regs header file to include the register base definition and usbphy_regs structure. Signed-off-by: Peng Fan --- arch/arm/include/asm/arch-imx8/imx-regs.h | 117 ++++++++++++++++++++++++++++++ 1 file changed, 117 insertions(+) create mode 100644 arch/arm/include/asm/arch-imx8/imx-regs.h diff --git a/arch/arm/include/asm/arch-imx8/imx-regs.h b/arch/arm/include/asm/arch-imx8/imx-regs.h new file mode 100644 index 0000000000..bfba2daae2 --- /dev/null +++ b/arch/arm/include/asm/arch-imx8/imx-regs.h @@ -0,0 +1,117 @@ +/* SPDX-License-Identifier: GPL-2.0+ */ +/* + * Copyright 2018 NXP + */ + +#ifndef __ASM_ARCH_IMX_REGS_H__ +#define __ASM_ARCH_IMX_REGS_H__ + +#define LPUART_BASE 0x5A060000 + +#define GPT1_BASE_ADDR 0x5D140000 +#define SCU_LPUART_BASE 0x33220000 +#define GPIO1_BASE_ADDR 0x5D080000 +#define GPIO2_BASE_ADDR 0x5D090000 +#define GPIO3_BASE_ADDR 0x5D0A0000 +#define GPIO4_BASE_ADDR 0x5D0B0000 +#define GPIO5_BASE_ADDR 0x5D0C0000 +#define GPIO6_BASE_ADDR 0x5D0D0000 +#define GPIO7_BASE_ADDR 0x5D0E0000 +#define GPIO8_BASE_ADDR 0x5D0F0000 +#define LPI2C1_BASE_ADDR 0x5A800000 +#define LPI2C2_BASE_ADDR 0x5A810000 +#define LPI2C3_BASE_ADDR 0x5A820000 +#define LPI2C4_BASE_ADDR 0x5A830000 +#define LPI2C5_BASE_ADDR 0x5A840000 + +#ifdef CONFIG_IMX8QXP +#define LVDS0_PHYCTRL_BASE 0x56221000 +#define LVDS1_PHYCTRL_BASE 0x56241000 +#define MIPI0_SS_BASE 0x56220000 +#define MIPI1_SS_BASE 0x56240000 +#endif + +#define APBH_DMA_ARB_BASE_ADDR 0x5B810000 +#define APBH_DMA_ARB_END_ADDR 0x5B81FFFF +#define MXS_APBH_BASE APBH_DMA_ARB_BASE_ADDR + +#define MXS_GPMI_BASE (APBH_DMA_ARB_BASE_ADDR + 0x02000) +#define MXS_BCH_BASE (APBH_DMA_ARB_BASE_ADDR + 0x04000) + +#define USB_BASE_ADDR 0x5b0d0000 +#define USB_PHY0_BASE_ADDR 0x5b100000 + +#if !(defined(__KERNEL_STRICT_NAMES) || defined(__ASSEMBLY__)) +#include +#include + +struct usbphy_regs { + u32 usbphy_pwd; /* 0x000 */ + u32 usbphy_pwd_set; /* 0x004 */ + u32 usbphy_pwd_clr; /* 0x008 */ + u32 usbphy_pwd_tog; /* 0x00c */ + u32 usbphy_tx; /* 0x010 */ + u32 usbphy_tx_set; /* 0x014 */ + u32 usbphy_tx_clr; /* 0x018 */ + u32 usbphy_tx_tog; /* 0x01c */ + u32 usbphy_rx; /* 0x020 */ + u32 usbphy_rx_set; /* 0x024 */ + u32 usbphy_rx_clr; /* 0x028 */ + u32 usbphy_rx_tog; /* 0x02c */ + u32 usbphy_ctrl; /* 0x030 */ + u32 usbphy_ctrl_set; /* 0x034 */ + u32 usbphy_ctrl_clr; /* 0x038 */ + u32 usbphy_ctrl_tog; /* 0x03c */ + u32 usbphy_status; /* 0x040 */ + u32 reserved0[3]; + u32 usbphy_debug0; /* 0x050 */ + u32 usbphy_debug0_set; /* 0x054 */ + u32 usbphy_debug0_clr; /* 0x058 */ + u32 usbphy_debug0_tog; /* 0x05c */ + u32 reserved1[4]; + u32 usbphy_debug1; /* 0x070 */ + u32 usbphy_debug1_set; /* 0x074 */ + u32 usbphy_debug1_clr; /* 0x078 */ + u32 usbphy_debug1_tog; /* 0x07c */ + u32 usbphy_version; /* 0x080 */ + u32 reserved2[7]; + u32 usb1_pll_480_ctrl; /* 0x0a0 */ + u32 usb1_pll_480_ctrl_set; /* 0x0a4 */ + u32 usb1_pll_480_ctrl_clr; /* 0x0a8 */ + u32 usb1_pll_480_ctrl_tog; /* 0x0ac */ + u32 reserved3[4]; + u32 usb1_vbus_detect; /* 0xc0 */ + u32 usb1_vbus_detect_set; /* 0xc4 */ + u32 usb1_vbus_detect_clr; /* 0xc8 */ + u32 usb1_vbus_detect_tog; /* 0xcc */ + u32 usb1_vbus_det_stat; /* 0xd0 */ + u32 reserved4[3]; + u32 usb1_chrg_detect; /* 0xe0 */ + u32 usb1_chrg_detect_set; /* 0xe4 */ + u32 usb1_chrg_detect_clr; /* 0xe8 */ + u32 usb1_chrg_detect_tog; /* 0xec */ + u32 usb1_chrg_det_stat; /* 0xf0 */ + u32 reserved5[3]; + u32 usbphy_anactrl; /* 0x100 */ + u32 usbphy_anactrl_set; /* 0x104 */ + u32 usbphy_anactrl_clr; /* 0x108 */ + u32 usbphy_anactrl_tog; /* 0x10c */ + u32 usb1_loopback; /* 0x110 */ + u32 usb1_loopback_set; /* 0x114 */ + u32 usb1_loopback_clr; /* 0x118 */ + u32 usb1_loopback_tog; /* 0x11c */ + u32 usb1_loopback_hsfscnt; /* 0x120 */ + u32 usb1_loopback_hsfscnt_set; /* 0x124 */ + u32 usb1_loopback_hsfscnt_clr; /* 0x128 */ + u32 usb1_loopback_hsfscnt_tog; /* 0x12c */ + u32 usphy_trim_override_en; /* 0x130 */ + u32 usphy_trim_override_en_set; /* 0x134 */ + u32 usphy_trim_override_en_clr; /* 0x138 */ + u32 usphy_trim_override_en_tog; /* 0x13c */ + u32 usb1_pfda_ctrl1; /* 0x140 */ + u32 usb1_pfda_ctrl1_set; /* 0x144 */ + u32 usb1_pfda_ctrl1_clr; /* 0x148 */ + u32 usb1_pfda_ctrl1_tog; /* 0x14c */ +}; +#endif +#endif /* __ASM_ARCH_IMX_REGS_H__ */ From patchwork Mon May 28 12:24:53 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Peng Fan X-Patchwork-Id: 921479 X-Patchwork-Delegate: sbabic@denx.de Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Authentication-Results: ozlabs.org; spf=none (mailfrom) smtp.mailfrom=lists.denx.de (client-ip=81.169.180.215; helo=lists.denx.de; envelope-from=u-boot-bounces@lists.denx.de; receiver=) Authentication-Results: ozlabs.org; dmarc=fail (p=none dis=none) header.from=nxp.com Authentication-Results: ozlabs.org; dkim=fail reason="signature verification failed" (1024-bit key; unprotected) header.d=nxp.com header.i=@nxp.com header.b="JV9GOFx5"; dkim-atps=neutral Received: from lists.denx.de (dione.denx.de [81.169.180.215]) by ozlabs.org (Postfix) with ESMTP id 40vbhf3rKdz9s0q for ; Mon, 28 May 2018 22:27:13 +1000 (AEST) Received: by lists.denx.de (Postfix, from userid 105) id 85B1DC21C6A; Mon, 28 May 2018 12:24:17 +0000 (UTC) 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=BAD_ENC_HEADER, RCVD_IN_DNSWL_BLOCKED, SPF_HELO_PASS, T_DKIM_INVALID autolearn=unavailable autolearn_force=no version=3.4.0 Received: from lists.denx.de (localhost [IPv6:::1]) by lists.denx.de (Postfix) with ESMTP id B1392C21E0B; Mon, 28 May 2018 12:22:25 +0000 (UTC) Received: by lists.denx.de (Postfix, from userid 105) id 7B84BC21DF8; Mon, 28 May 2018 12:22:07 +0000 (UTC) Received: from EUR01-HE1-obe.outbound.protection.outlook.com (mail-he1eur01on0066.outbound.protection.outlook.com [104.47.0.66]) by lists.denx.de (Postfix) with ESMTPS id 69959C21E0F for ; Mon, 28 May 2018 12:22:01 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=nxp.com; s=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=98wm4H/UAUOkoEdOwgMQCDs2AFlzBVK0hMIcGfP/UVQ=; b=JV9GOFx5LQF7RtQ5+FnZGitSdJXK4GliR0SczCA5wj2kTtN6mkDfB/TLNiCw6uis+4y6/ND/fAxVmtSvggxnoki1prk6DVqpYFz0sNycBC3J82XEW0ox3mBRpLPa6gyqlP7Go+lBCKvup2h8l2u/iKE6ZTdLbYl2SVLTHcWj8r4= Authentication-Results: spf=none (sender IP is ) smtp.mailfrom=peng.fan@nxp.com; Received: from linux-u7w5.ap.freescale.net.net (92.121.68.129) by VI1PR04MB3006.eurprd04.prod.outlook.com (2603:10a6:802:9::12) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384_P256) id 15.20.797.11; Mon, 28 May 2018 12:21:58 +0000 From: Peng Fan To: sbabic@denx.de, fabio.estevam@nxp.com Date: Mon, 28 May 2018 20:24:53 +0800 Message-Id: <20180528122526.20597-9-peng.fan@nxp.com> X-Mailer: git-send-email 2.14.1 In-Reply-To: <20180528122526.20597-1-peng.fan@nxp.com> References: <20180528122526.20597-1-peng.fan@nxp.com> MIME-Version: 1.0 X-Originating-IP: [92.121.68.129] X-ClientProxiedBy: HK2PR02CA0175.apcprd02.prod.outlook.com (2603:1096:201:21::11) To VI1PR04MB3006.eurprd04.prod.outlook.com (2603:10a6:802:9::12) X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-HT: Tenant X-Microsoft-Antispam: UriScan:; BCL:0; PCL:0; RULEID:(7020095)(4652020)(5600026)(48565401081)(4534165)(4627221)(201703031133081)(201702281549075)(2017052603328)(7153060)(7193020); SRVR:VI1PR04MB3006; X-Microsoft-Exchange-Diagnostics: 1; VI1PR04MB3006; 3:ynYDt3INT1elJS66HvtPo/pp86KVVaoLf1PkvzoAQ5FF4ORLL7UCggzHWxze/b/mbHCbaEvuSRqnqPJVqVVoU4l+j2KJF+4EQlFmCTE2+m0x9csYmvvsundGkj33hTuSpFmRYa42wHSmB2wUwdffF3rjTvZyvh/XILVLTbxPExS6umdJ7k5/o0COrDTSA3nLjhj7y1Vk540p+M84aXptQFDyz/UsuRNOTBjEyAbnif7KXSsHDnaf1sEaFLIHKMT7; 25:/LAYDfPFZ5OxomRNKivdph2h/+a0Z9BpWu9tjZOhzY6C2yJ3Q9WXRBIMrB2gZWIwOokq1NjkeuwPC8p0YvbVnwA8IPXB4m7lhGHcyZS4jPpK21npwW6rne8rPoNrcUEivlMHAAu250pjD7aAb/ZcEXby9JKcgHo/S1cravLaL3L9fprTL5I2Ne6jjf+1NnXNQ0zwteNKCguRpSi4AuzOVot4dzb8B1ZuBsb1JBzbqaaQpTDFkdCEOxYvSBqsYDH6DEefNw0+XLyVX5d8fOAXDM/wYHqAar4IzYS9DfmVi9aSnLWeVW7FqHGP3h3nl7ngCGn5HzDVPqjXBIJ9w+yk3A==; 31:7lkyioOt+OWLC0esshmrShQKUb+hDqn8ZCyiJFa4YzLB42hQ8ek0Q7MvMk9+PkQAvzIeTLWNQzcB1j4ziBaQ2+hcTZ2O9bwYQIVrgAjzRjtYk2YVobZOxx5uN52LJKJJ6buqGawd9pCJ+pP/Xbi4PLmQrcX6vt6j3lBOhyUVc0GU3HUf3xhEE39Q2F8/w9Kjjoefux+Q+firFc0WjrYRywWxFW+Art5AZVooH1QC3+0= X-MS-TrafficTypeDiagnostic: VI1PR04MB3006: X-Microsoft-Exchange-Diagnostics: 1; VI1PR04MB3006; 20:Orf0ko0/goifztAbJ35F+jOxpwp3mobtXSCvNHQOAiAjlUgkjgZVabaSXH1VkV8vZXE04q9d8ChC7TX/YpA3tQT5jX7F2e7M59/nCKcx7UsjaLRHTGYz2u5kYYY74Lt/sUKeTB14T5OisoGyDKSmkVsw78Jclm/7lE/h0oElgx1bsodZMxAQBSTAsvK4Pd8bDwY1RPv3+LUuSJlNeCbZtRYuT/U0NOa7hQ4JSoQLJPoVwVA+hFbM7v8FdxUivRWdlajJ4ZRBUhXlpj/4bzAkYP0UzykgYEWS+GR/aVIkStW70D/QruOYkqD+0yj5UMs/OYAhNKPKlfVLlq00Sqi2Lbhqo9/4pcuULkCJ36QodpVIyLEc8kdVSruDtWk+LL743Sgo/ihBuAufhuk7MTzdj07pdvm2FYfdRrx+EuhezIpK7tHWQl+wGBFKcC2+IrJVDGhHWLXlLz0OSQxhJRijtnZq2OhbF164XMXyzHBhhyjfCwzX8/TGvLwTYBx98bjk; 4:Vq1mWBy4CUxz2Da+1HXrFb3BRbkFrTaeXA8TQwUBY6lPMJ/3g5lp8rkt63M/L/nHPiMxVltGRoaUpgdw5lWJbJR+hi9w8t/FSKerEe5RlHDRhAK3QAtI6FwdOgD2Eu+RsEAheo1IppYKNjRu384WPCOsYbKKFdHlMgqHaINujkzEkYVvxrZSTyRSI6wl39rGlAUqLyCc5gDmA089HSfJelu39qa5ekGzFVrEb0AkTJLYovOHBLkpL76QxmpkqG96z2i1UYfDt5X6FpYu850cL0/palX7WAKw0vehfhVYkn4XP9TPFzJuCqBw/zNmhR9P X-Microsoft-Antispam-PRVS: X-Exchange-Antispam-Report-Test: UriScan:(185117386973197); X-MS-Exchange-SenderADCheck: 1 X-Exchange-Antispam-Report-CFA-Test: BCL:0; PCL:0; RULEID:(8211001083)(6040522)(2401047)(8121501046)(5005006)(3002001)(93006095)(93001095)(3231254)(944501410)(52105095)(10201501046)(6055026)(149027)(150027)(6041310)(20161123558120)(20161123560045)(201703131423095)(201702281528075)(20161123555045)(201703061421075)(201703061406153)(20161123562045)(20161123564045)(6072148)(201708071742011)(7699016); SRVR:VI1PR04MB3006; BCL:0; PCL:0; RULEID:; SRVR:VI1PR04MB3006; X-Forefront-PRVS: 06860EDC7B X-Forefront-Antispam-Report: SFV:NSPM; SFS:(10009020)(366004)(39380400002)(396003)(39860400002)(376002)(346002)(199004)(189003)(36756003)(97736004)(6636002)(6666003)(68736007)(86362001)(8676002)(44832011)(8936002)(81166006)(81156014)(47776003)(11346002)(956004)(2616005)(476003)(446003)(25786009)(486006)(48376002)(106356001)(105586002)(186003)(50466002)(16526019)(2906002)(6512007)(53936002)(1076002)(66066001)(26005)(51416003)(478600001)(305945005)(50226002)(6486002)(5660300001)(6116002)(76176011)(3846002)(16586007)(52116002)(6506007)(4326008)(316002)(7736002)(386003); DIR:OUT; SFP:1101; SCL:1; SRVR:VI1PR04MB3006; H:linux-u7w5.ap.freescale.net.net; FPR:; SPF:None; LANG:en; PTR:InfoNoRecords; A:1; MX:1; Received-SPF: None (protection.outlook.com: nxp.com does not designate permitted sender hosts) X-Microsoft-Exchange-Diagnostics: =?us-ascii?Q?1; VI1PR04MB3006; 23:UfNQOLihteHjDubj0irxqFjXVAbUS7NBwcXDzN6R1?= 6+LogCnJ3yKDmR+Qd9tZ4qPFbsjte1F9GdPm7c53JhBv6fYvx5ZDOvXJ25/UARoBIqDNpWVmPzhn+ovitmsJwxgo2FrbB+vIJArCdNo8avrIyjqLC7UPutiGUznUIj3+heH9Tu9/45Qs6fLK8nQ+pSp896FnGcs1Uo3FHfqNjfa339kLwDWYqgdXGxV27rBkf8iWuBZ5n5TuFj+keDwQwEHbTfV9QBAeTrG1f1xo7bTNCed9wjnA80CdXYZo0zZdoYmaOFBz6czRSVMHfUtG1lJL5Njsq1xDbb/VLe4H3OYwT/WeyCMDn7EzoCf8ZedejHLvI1OdQ20ekiOiH5U5ZlJ0ky8RgZOb9mYDUImnAVQ0q5oFGXNo7noGk4mkLMVyg4Q6jBaKLhJTRlQBcazVjYM7f+AXVaSI5Mx4+lGxjvWyQvGet3NN39439A8Jtxxl4z+Lisn8LnLTdmkFuIrKYWyUHNo8+Ga4bV1MrzuL9NvYuKWWqq6qJlSj6Bzhz6I8lW63vdz82wVs1qGoYR55PBbbrS0pnW8AP12nxr4HQiOHZVk4lKta13glBnT9gYN6hn9FxiAt/ubfPB5caD1uXmgCrDYq/5LRyS2Cg0e/bi9Pooe66ZElBNACoeo7TWjOyV+oFcLMNQDwn0I2Jx3E5RRyVFMD/UTXtDfWY40uzW/cVKZw0Lb8flV6CYTh8+adHulTz4rp6MPZAUpg97AfZ7WquRcXYpdsaCCwKh6gfZpApJrDqlYFCMrQHegjjYuAJHEUG3+FUXO32WcAoP+Wiw3lFgAk1226OP3lgtfniXAlLWmP6l9ZWcCjnpSH8Q5F/gmuZmO0ZBhi0/z7HGIZBWyc7CB+mL+rYhvyNKf22ENTTNbTu6dvVh0Sa2Aaertc0TIyB2iGOH145QklC0fzOGPAoiyFYWIWt1n/k7yQeD6/dPPIZ8OBwbZYTF/QS4rtvBoww9cn1p21T6xgAU1DFNwR0oEUSj5mBX5pwv+YSH56hYkgawJqdLS2LUtTcm6y5Ymikw4/yLG0ye1TC4CXtKv9+D6UEHHyJSsDRlwfBoBZSaYBIg/zkVa93uZpCRwINBhBiSBEUEoTBIfF2+pis2ecVBhg37Mz6gJX0L8FY3swTOdD6NcnArOuy4JOWJVwLk6HIhKLdgc3caTcVyI3VEqkBxY7//eIm0e/XmnbwA01A== X-Microsoft-Antispam-Message-Info: hhvcURC/cu3PQhWx2O4djXPlMN4Oa3fSdU3cReMSkZ0SOHwFsC0gsGe8bxZ4P4CTIVIajF6D/mzUrGJ9pr6AKrbJgV0WnC/DhczrIAMqC7zrFlz/OXxsCpIG2l13YKN2tUXdcH+GM/k7pieJ24Q0rFjbq8OtDIR1M0YTl3HGIFGY0fqdRb2QUwYZ4jr0f0aJ X-Microsoft-Exchange-Diagnostics: 1; VI1PR04MB3006; 6:wUoDK4J68XmcYufnHGvkaUV88RZc6Pwswu/r3jbTMd2ELy9m9OMOYUYp+bqxq6Ax1pR+R7smvujcHq8+N2weA5hrbyIXDcnK/aiT8/K+4gc0zzF4P8YoJWMWTzeydUA+TvWJXhPqStEjrTztLg70kcRCcnggPJVt4PE2TSKy/lO1NVsm48YpS609dpG88CnvJ0Hwqy94SbCdlm8p13pRHaZLaBh3m5oyodUNg0qhCV3MxWFmk0q69RXlxhIYJv60HOC1NI40v/fxs7VU3U1AAevUCKPBxYE6bj2a6iT39OLvCLTG3KBR0S/8BCnmQPXcdWvrVAQyIlRjIrxcIlbpWFjoUkaDx+N4nuo+7STGjCM10YPemVnv9nrcJzAY32pKeftbhlNh5Ig9sFTk18Njxe87ywPFY6LwW4WnwMl7PDrVAdKU33rNpCDDQYJ1jekfhk74N2+CMLtoqZMEBkAwKw==; 5:/ZWUGscY7WmoSrz867OxCNbasKo6pwW5pVKyzcEKXe6NThQk5bsJZ/8rn6BQSDFF8266wS6MpLyO1ZlPpWoOeo+KFxGDW0vhINvRobSAKqSYLRuNYq393VdmtDocw8Uy5t+2vSc1Qym6EReBZUmVXgVx+zg0xZrWpXMj3M5LTqI=; 24:ROg8LMJ2BY5VqShewbVFP+OstgUcpVL4b/laWj5PVPdFnpU9a+UQZavsvjoZuIyZuIlBV7jaWN2EzJBter+t05YIRziRgE98zAV0BAc818g= SpamDiagnosticOutput: 1:99 SpamDiagnosticMetadata: NSPM X-Microsoft-Exchange-Diagnostics: 1; VI1PR04MB3006; 7:+HwPAz0Mo+HHImRKOgBbosMUttC5r3GqxOaGhD+fcniQQjGL6y/+qYk4YI2t4OiKXHF/daRM+B3ID8l+9CnChOK+/DHEmLXrbHTwpKpn0E8IRWYzxHT5SWJHQVHxO0VtMj+VJNdJ12NVEEJAwwc2c/a9KQ2PtCK8EEVzQ//p+Z1LFJmNLD0gWRL0cYvedbBZvVhV/YwMi/NYKvAxiZmT6SEa9JV4E93Lq7Ur/r+jT73+sXhZb3wJbrLu8EA4cetq X-MS-Office365-Filtering-Correlation-Id: 43b74852-cb8a-4afe-8f98-08d5c4959cb4 X-OriginatorOrg: nxp.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 28 May 2018 12:21:58.1511 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: 43b74852-cb8a-4afe-8f98-08d5c4959cb4 X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 686ea1d3-bc2b-4c6f-a92c-d99c5c301635 X-MS-Exchange-Transport-CrossTenantHeadersStamped: VI1PR04MB3006 Cc: u-boot@lists.denx.de Subject: [U-Boot] [PATCH 08/41] imx8: pins: include i.MX8QXP pin header when CONFIG_IMX8QXP defined X-BeenThere: u-boot@lists.denx.de X-Mailman-Version: 2.1.18 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" Include i.MX8QXP pin header when CONFIG_IMX8QXP defined, if no SoC macro defined, report error. Signed-off-by: Peng Fan --- arch/arm/include/asm/arch-imx8/imx8-pins.h | 15 +++++++++++++++ 1 file changed, 15 insertions(+) create mode 100644 arch/arm/include/asm/arch-imx8/imx8-pins.h diff --git a/arch/arm/include/asm/arch-imx8/imx8-pins.h b/arch/arm/include/asm/arch-imx8/imx8-pins.h new file mode 100644 index 0000000000..60b5831473 --- /dev/null +++ b/arch/arm/include/asm/arch-imx8/imx8-pins.h @@ -0,0 +1,15 @@ +/* SPDX-License-Identifier: GPL-2.0+ */ +/* + * Copyright 2018 NXP + */ + +#ifndef __ASM_ARCH_IMX8_PINS_H__ +#define __ASM_ARCH_IMX8_PINS_H__ + +#if defined(CONFIG_IMX8QXP) +#include "imx8qxp_pads.h" +#else +#error "No pin header" +#endif + +#endif /* __ASM_ARCH_IMX8_PINS_H__ */ From patchwork Mon May 28 12:24:54 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Peng Fan X-Patchwork-Id: 921486 X-Patchwork-Delegate: sbabic@denx.de Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Authentication-Results: ozlabs.org; spf=none (mailfrom) smtp.mailfrom=lists.denx.de (client-ip=81.169.180.215; helo=lists.denx.de; envelope-from=u-boot-bounces@lists.denx.de; receiver=) Authentication-Results: ozlabs.org; dmarc=fail (p=none dis=none) header.from=nxp.com Authentication-Results: ozlabs.org; dkim=fail reason="signature verification failed" (1024-bit key; unprotected) header.d=nxp.com header.i=@nxp.com header.b="hCR+OCJj"; dkim-atps=neutral Received: from lists.denx.de (dione.denx.de [81.169.180.215]) by ozlabs.org (Postfix) with ESMTP id 40vbkZ23pbz9s15 for ; Mon, 28 May 2018 22:28:54 +1000 (AEST) Received: by lists.denx.de (Postfix, from userid 105) id BCE6BC21E7F; Mon, 28 May 2018 12:24:34 +0000 (UTC) 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=BAD_ENC_HEADER, RCVD_IN_DNSWL_BLOCKED, SPF_HELO_PASS, T_DKIM_INVALID autolearn=unavailable autolearn_force=no version=3.4.0 Received: from lists.denx.de (localhost [IPv6:::1]) by lists.denx.de (Postfix) with ESMTP id C1C77C21E4F; Mon, 28 May 2018 12:22:26 +0000 (UTC) Received: by lists.denx.de (Postfix, from userid 105) id 268F4C21E1B; Mon, 28 May 2018 12:22:10 +0000 (UTC) Received: from EUR01-HE1-obe.outbound.protection.outlook.com (mail-he1eur01on0058.outbound.protection.outlook.com [104.47.0.58]) by lists.denx.de (Postfix) with ESMTPS id 579C1C21E08 for ; Mon, 28 May 2018 12:22:04 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=nxp.com; s=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=f6uwSmOesszkwju2pa/H6WnMwWAqIgjCdhF0rdtLaqM=; b=hCR+OCJjCjtYvr0yc6C9SOkwlp7DM/1CN0gYU/OsES/rXIEp8zJY0RQhBImiQq+Ar83Fb5QxWZ45/SLVQuEAfRi01BYeapDulknOUQRP5HNwk3snIReLK8TcwvVMKYqGN5PuL1QrrS98IAWGWIoLhfoxqbalXmJipCIcmJBbqbo= Authentication-Results: spf=none (sender IP is ) smtp.mailfrom=peng.fan@nxp.com; Received: from linux-u7w5.ap.freescale.net.net (92.121.68.129) by VI1PR04MB3006.eurprd04.prod.outlook.com (2603:10a6:802:9::12) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384_P256) id 15.20.797.11; Mon, 28 May 2018 12:22:00 +0000 From: Peng Fan To: sbabic@denx.de, fabio.estevam@nxp.com Date: Mon, 28 May 2018 20:24:54 +0800 Message-Id: <20180528122526.20597-10-peng.fan@nxp.com> X-Mailer: git-send-email 2.14.1 In-Reply-To: <20180528122526.20597-1-peng.fan@nxp.com> References: <20180528122526.20597-1-peng.fan@nxp.com> MIME-Version: 1.0 X-Originating-IP: [92.121.68.129] X-ClientProxiedBy: HK2PR02CA0175.apcprd02.prod.outlook.com (2603:1096:201:21::11) To VI1PR04MB3006.eurprd04.prod.outlook.com (2603:10a6:802:9::12) X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-HT: Tenant X-Microsoft-Antispam: UriScan:; BCL:0; PCL:0; RULEID:(7020095)(4652020)(5600026)(48565401081)(4534165)(4627221)(201703031133081)(201702281549075)(2017052603328)(7153060)(7193020); SRVR:VI1PR04MB3006; X-Microsoft-Exchange-Diagnostics: 1; VI1PR04MB3006; 3:b9OxH1jHhQPhZNAYHw+7X3q4RXCEQtLEOlw4uuBee9TcbWkeAWm4zNbMTDLbjI4XXMd20BHWG+UsJ2PvPCdVYysipfq4Muu158IvgndPf57YZhs3m8Ix1r97Oqq0zxnbDXb09stS1hChIYr3LqAgvYOw7V7lDptixM0o8tJA1G55FUHvPB/9soJRGJOf5D4T6UPuyezcdScDMXuw8lLakziMuSrkNzGfv1hTQNfPD+D8LKOHv35+fnxd9AgXQQiP; 25:HIsa6m8Jefz4Vi0E0A8mIqmEWl4QPrufxL93cLy4OFITMLMcv0cZM2CrjYH0z5z8mILC6ZBnvVDtMsxnGyEGb3sCMlYScuDe/xtbv57wpnEcVKrZmO0/YjqwkbAOoreT6WzMSI8GsBc2qT8vNcFftnHXgpy3ba6L1n2+jfTw15lVVZojsu6tlAKS3wi75bgdryvsEznM5CYoa6gMa1nN5NsLD8Xviuq4idzXOGsdC1hG5vSqJ/TacxQPmuexkseJaWVtru42y2wjz9eqy1b/ALLMNBrhVI7FnK5Wr4rO/5mP6AiJW24uh/uob9ij8KOyZgD0HfTgul3Mm04Faoxq1g==; 31:5gYjHXWCrDmBGjCHWL1zth1mq40UfW0dQSqIx9gMcijUtCMrOQIudo+NHbI2ieOwhA7bg8BhfSo3JK8WuFwexzhj8mXdiGRqT/wZoezzco91T/puUpIStHqraNGLUdxpeMlI7AI5zWGTsfPH3xst9uC8h9m2m+z5EjTPEtLH6OmnUuQOZFp+8M+9OuOL9w3gcnFq/vTGCuLcJ099TRk0Bo2al7BJ7fVMSdI+7kDEsYE= X-MS-TrafficTypeDiagnostic: VI1PR04MB3006: X-Microsoft-Exchange-Diagnostics: 1; VI1PR04MB3006; 20:M22Zj4VN8eFmpJ/bk7xbGryGxAz7IOPP/ZaoRhFblAM3CRPSoNvIpRmsmzkbnurAl9Bt0K9feDZTXkwsdQ89MMZoOlNfcROMAoEiwMaUVQJ0BsLaXH1zbjYhYXxgQiTRpWv5PU3d4qUHcIE16hWK66q9ne7UGxh2F9/qaZJUwsfQoGefKu8PrQP/1SwTo3utFINyqDG9cuCZjWtp9QqfF8AgLcpdnqRp0plpEiT5RBXEQXER7ar0uo3IH4nOdnNESOaHVJ4uqY9/CunoBoUIXeiUn7NWSaxxB+7AKjjSdxCl/2lrQdPgiFYemK+gvKryV9MYNXS9tmgCSsFu7PqKT3l5932JR5LG7w2CGers7P7WxucgVO7Na3kuMd5ozl2nuzDxy5Kj01r9WMvDn7nFjTMJaicbsM/ugVXXJQ6EcQ+m0NNNZtVf7x3QyXwf6fSKf4XLey9W82bHtYPNPee5YZYjYcP4f67EKMI4hNy+VMKj0bEx1HK7ZdeZjqGAXG+e; 4:ZveycEgSo3c+Lc69bcEqE3/hZjxBawIu2VsIX0nWTmzKzVnMgYh7vBvvTQL+mUBvTo1xYKmGwz0LxHRvkE6QJ0MECWTZPQAPEnpcnIUznkOcE4nx3iL3Te6oCpvTFlJEd07d6VIrLpm8QRuaw7o5AWccHpHchVzhDPBUC3XZp1KYbC4JyRcVgATyJHo9GKo6aVdD3yjmxAe/urM0Jk94omLlbGSGAAOtymgS7eBKkq9H8Kub9kyo83t6pqxPbO+b5XHb14hhP0OPk5WgZkupMBjAHm8ghYvDZWfvsSXGIOWW4INZLId6slhCf9VLhMyM X-Microsoft-Antispam-PRVS: X-Exchange-Antispam-Report-Test: UriScan:(185117386973197); X-MS-Exchange-SenderADCheck: 1 X-Exchange-Antispam-Report-CFA-Test: BCL:0; PCL:0; RULEID:(8211001083)(6040522)(2401047)(8121501046)(5005006)(3002001)(93006095)(93001095)(3231254)(944501410)(52105095)(10201501046)(6055026)(149027)(150027)(6041310)(20161123558120)(20161123560045)(201703131423095)(201702281528075)(20161123555045)(201703061421075)(201703061406153)(20161123562045)(20161123564045)(6072148)(201708071742011)(7699016); SRVR:VI1PR04MB3006; BCL:0; PCL:0; RULEID:; SRVR:VI1PR04MB3006; X-Forefront-PRVS: 06860EDC7B X-Forefront-Antispam-Report: SFV:NSPM; SFS:(10009020)(366004)(39380400002)(396003)(39860400002)(376002)(346002)(199004)(189003)(36756003)(97736004)(6636002)(6666003)(68736007)(86362001)(8676002)(44832011)(8936002)(81166006)(81156014)(47776003)(11346002)(956004)(2616005)(476003)(446003)(25786009)(486006)(48376002)(106356001)(105586002)(186003)(50466002)(16526019)(2906002)(6512007)(53936002)(1076002)(59450400001)(66066001)(26005)(51416003)(478600001)(305945005)(50226002)(6486002)(5660300001)(6116002)(76176011)(3846002)(16586007)(52116002)(6506007)(4326008)(316002)(7736002)(386003); DIR:OUT; SFP:1101; SCL:1; SRVR:VI1PR04MB3006; H:linux-u7w5.ap.freescale.net.net; FPR:; SPF:None; LANG:en; PTR:InfoNoRecords; A:1; MX:1; Received-SPF: None (protection.outlook.com: nxp.com does not designate permitted sender hosts) X-Microsoft-Exchange-Diagnostics: =?us-ascii?Q?1; VI1PR04MB3006; 23:SjZFZgRW5NA8Cb3r1bK28ICqNd6e7VJjB8Zqm+NeU?= X/HiIU5GfPUDxZbtsFwrOS3w8M7Q/eTX/YJoMMFvaGwF6mZXe9E4vy0NAjBPJzQ2nTWHR3WvevnB1NTwKvgD7o4f/D2dNTPDCX9IGqM88f/1s2sK/WHEtBZOYe9aT5uxM6WID8G0sH8Udvt+m2tBZopAVOt96phDjPAaucCn69YuT1Zkdq2dOFSVtm5BgL1ksXOMlZDyacghsSprCTHE0yv+XX+MdCZ2NQrfUxQUz1OUO4fFYuVxYiQqndCkWcfr/yndHHRK/7FWLrdYbDQ7Yk2RT1C9iG37JmGbFMRdhsDxVNRvkeTMdAiv8VHiqWJLLss7V+U6AmKTFPiVYULakCGhuFZI7dO5raRH95DHZ6i2MFkp2FbRcZDSPLi/1JUPww55hYl9DHXCC1j+l+RQPefEPn6lLOrPN8eDU2/4T5PYiCZlr4mxIw7VJUB3YK/Ru5pmhdstLMEsxRFEx1Pdx6JNz6bVkZFMxDBZJJT6HtYUmDnNKMogRrmUFFipJoAWNhAOaOB7VlqkDG/Le0dqHsofBEok7FspMnm8vIqpoHCalIsf0A7sD3HhFawsalUVOLir4rTw8mSLbB12NoJu5wVTNC6DmoeLK2HwZK5nIwobK8OR8nR0admQpBLlDAgBgTbQgPHUEIxgwy72SeA9PXxVgn7YRccBKjRcoGVkgfGwrC/wB4YQ+qhHBCurjI0oX9nrvkWie3GDOHqJ4pqzUzEd6mYAvMtns4/P2mtbCVm+V95kopHVRnxMFCd0h/iRq1nRthKvw9i5+z9eWiv6zaygfeHocHMxNiJ+fk5jl0BDTRO2kf2VgL8H8qk4aEN8gw7cYfD0fvHhgCTHZFXt4jxWbWzJ/ap/GKdsmdWKVpG0qNQ7f/aW7IGs2Q5Io/flnN0mkuS8gcug4deFT6Xe1PeLPRgA+4ktGCQAVWeMnNq+al/9PynkvdI6yyk//iaQ4nhqIccsEfh492Jg/73af5vCj0JMNjDmZxAAxuUtgXHO+imbo8AeeMxNCoB9VDsn3YRMa1fL5yOA38UtpKGNuAeMZTs75Enn+URP53Ka6LeLxzYkH8WUdtJDm98JjQSk82yCdajVZDN1O+OaRbS5RfMF7i0Hb2JjdM+LDnEGp2wjw8w14JYKuU6XPhh7IthLgZt8OCWnbyTExxiPCHu771s+eCyrwl9EkDGb+8eeKfsb5egX4iOE6bq/8beMID1kY0= X-Microsoft-Antispam-Message-Info: r81ZvhB9ICoBIe5atQL7Srzj9E1jmz8RBVNNPfhAYGuoIj+Eq+/i2M5NcJBSKSe0PycpM0kcsVxVBe6SgH72fXfqlxYHsHjxor3BzW0AjVVW7zf4RuFPDvBB0um9JZyByL7jkJ/Id+LNWASdE0b4HITDgUHy4cIZFcnVvntBG0tK/XqbJ//5HIQ2nRRomNcQ X-Microsoft-Exchange-Diagnostics: 1; VI1PR04MB3006; 6:xS7wtMpaJnt2mOzoUHKlGqJ6ISBDremTteJGYLrQakLGGcXaw3Drixq9jSX4rZTutBi649WsWDxyzbrTNSWa9O0n5VI5mQ+qfhOVpk2payBG4kJrDM+jDptqau/ivf6AktaQgD/pPmMee62SeyfhZaL0q/dqsGQuPgitqGX8q/bisB0I0IGwcPqTaP3eR1cLSfCv5ZOoaOkC0k7m39O7u5/1qHap0C9VYFfoZ1xl/5UR55lRWeI1wIKShQQ557l/vebjB6d32iYzpr2g8MO2Lj+B2kBe44Q6JubjV1kdjpg1Qoq2AbCeXYyTrrBMx82JekHT87mB8NqOts+sNGPbGaBNt97E27cRRngZnrGhCabjzXvVtl9TP5rHu2ncaCqILGeb92s75GZ5Ad9fIHr34NEkrONQHubGM9h0t66m3VNA7xZkOHD5mU92mzkAE9ZV76UhFffflLEodyYtdVXN2g==; 5:Bh/vG7+iZbcLoqwCtD4UDtPzkE37I1WgIl50OmxPLGddJ4NFtR8ytXcecwXPSbXpkiGmntBT79d5TixZ/l4KQpd7trDvkFwDz1WDLtv+NVf15Zv6MhX0NleY1hG6m8YU7QPY1QDIXc3Fdmx9FS3M6xoXfoA5L1bpxgzmciYDBiI=; 24:dH3ouf5+bxspOvDd455QA0Bmx+MKybhnZsmOUCte6K8HZjTRpdfHRW4Zc9wS9QEvD45Ecz7PLk09SX51LJ+ag1zxx04uqysQKBhW7R/56j4= SpamDiagnosticOutput: 1:99 SpamDiagnosticMetadata: NSPM X-Microsoft-Exchange-Diagnostics: 1; VI1PR04MB3006; 7:nqxMCmM4L3alH7/w3OQqFVMUfUHwOipG+2NuFrzq4OXIETQ8NCZMbnNSn4YNnD70/DSEz4+i7Ukt81jPvECoslcUi4kBgXwgPXxR0LWNpx7aCOQ4izYiMrOgmuBq4irftNbGRUDsvZJrCktrCXq2utbU8JhpGpyJGxv7ubS8sREBSjKFE/EX6yolObxjvFtGR7tpKC52IiGhY2mCw0KEzG/N4KY860UIXrO7INE69QpSDtf4s+dJUZI8VtDjsWtG X-MS-Office365-Filtering-Correlation-Id: 4ebe2043-664b-489c-6a2d-08d5c4959e53 X-OriginatorOrg: nxp.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 28 May 2018 12:22:00.8855 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: 4ebe2043-664b-489c-6a2d-08d5c4959e53 X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 686ea1d3-bc2b-4c6f-a92c-d99c5c301635 X-MS-Exchange-Transport-CrossTenantHeadersStamped: VI1PR04MB3006 Cc: u-boot@lists.denx.de Subject: [U-Boot] [PATCH 09/41] imx: add i.MX8 cpu type X-BeenThere: u-boot@lists.denx.de X-Mailman-Version: 2.1.18 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" Add i.MX8 cpu type and is_imx8/is_imx8qxp help macros. Signed-off-by: Peng Fan --- arch/arm/include/asm/arch-imx/cpu.h | 5 +++++ arch/arm/include/asm/mach-imx/sys_proto.h | 3 +++ 2 files changed, 8 insertions(+) diff --git a/arch/arm/include/asm/arch-imx/cpu.h b/arch/arm/include/asm/arch-imx/cpu.h index 62df1b9ad2..cf6303c3f5 100644 --- a/arch/arm/include/asm/arch-imx/cpu.h +++ b/arch/arm/include/asm/arch-imx/cpu.h @@ -25,12 +25,14 @@ #define MXC_CPU_MX7S 0x71 /* dummy ID */ #define MXC_CPU_MX7D 0x72 #define MXC_CPU_MX8MQ 0x82 +#define MXC_CPU_IMX8QXP 0x92 /* dummy ID */ #define MXC_CPU_MX7ULP 0xE1 /* Temporally hard code */ #define MXC_CPU_VF610 0xF6 /* dummy ID */ #define MXC_SOC_MX6 0x60 #define MXC_SOC_MX7 0x70 #define MXC_SOC_MX8M 0x80 +#define MXC_SOC_IMX8 0x90 /* dummy */ #define MXC_SOC_MX7ULP 0xE0 /* dummy */ #define CHIP_REV_1_0 0x10 @@ -41,6 +43,9 @@ #define CHIP_REV_2_5 0x25 #define CHIP_REV_3_0 0x30 +#define CHIP_REV_A 0x0 +#define CHIP_REV_B 0x1 + #define BOARD_REV_1_0 0x0 #define BOARD_REV_2_0 0x1 #define BOARD_VER_OFFSET 0x8 diff --git a/arch/arm/include/asm/mach-imx/sys_proto.h b/arch/arm/include/asm/mach-imx/sys_proto.h index d1d6cbc462..f8890b57da 100644 --- a/arch/arm/include/asm/mach-imx/sys_proto.h +++ b/arch/arm/include/asm/mach-imx/sys_proto.h @@ -27,6 +27,7 @@ #define is_mx6() (is_soc_type(MXC_SOC_MX6)) #define is_mx7() (is_soc_type(MXC_SOC_MX7)) #define is_mx8m() (is_soc_type(MXC_SOC_MX8M)) +#define is_imx8() (is_soc_type(MXC_SOC_IMX8)) #define is_mx6dqp() (is_cpu_type(MXC_CPU_MX6QP) || is_cpu_type(MXC_CPU_MX6DP)) #define is_mx6dq() (is_cpu_type(MXC_CPU_MX6Q) || is_cpu_type(MXC_CPU_MX6D)) @@ -41,6 +42,8 @@ #define is_mx7ulp() (is_cpu_type(MXC_CPU_MX7ULP)) +#define is_imx8qxp() (is_cpu_type(MXC_CPU_IMX8QXP)) + #ifdef CONFIG_MX6 #define IMX6_SRC_GPR10_BMODE BIT(28) From patchwork Mon May 28 12:24:55 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Peng Fan X-Patchwork-Id: 921490 X-Patchwork-Delegate: sbabic@denx.de Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Authentication-Results: ozlabs.org; spf=none (mailfrom) smtp.mailfrom=lists.denx.de (client-ip=81.169.180.215; helo=lists.denx.de; envelope-from=u-boot-bounces@lists.denx.de; receiver=) Authentication-Results: ozlabs.org; dmarc=fail (p=none dis=none) header.from=nxp.com Authentication-Results: ozlabs.org; dkim=fail reason="signature verification failed" (1024-bit key; unprotected) header.d=nxp.com header.i=@nxp.com header.b="HDhh6QHD"; dkim-atps=neutral Received: from lists.denx.de (dione.denx.de [81.169.180.215]) by ozlabs.org (Postfix) with ESMTP id 40vbmS1fY7z9s0q for ; Mon, 28 May 2018 22:30:31 +1000 (AEST) Received: by lists.denx.de (Postfix, from userid 105) id 93225C21DD3; Mon, 28 May 2018 12:25:08 +0000 (UTC) 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=BAD_ENC_HEADER, RCVD_IN_DNSWL_BLOCKED, SPF_HELO_PASS, T_DKIM_INVALID autolearn=unavailable autolearn_force=no version=3.4.0 Received: from lists.denx.de (localhost [IPv6:::1]) by lists.denx.de (Postfix) with ESMTP id 622D1C21E77; Mon, 28 May 2018 12:22:33 +0000 (UTC) Received: by lists.denx.de (Postfix, from userid 105) id 73947C21E62; Mon, 28 May 2018 12:22:13 +0000 (UTC) Received: from EUR03-DB5-obe.outbound.protection.outlook.com (mail-eopbgr40041.outbound.protection.outlook.com [40.107.4.41]) by lists.denx.de (Postfix) with ESMTPS id BF922C21C27 for ; Mon, 28 May 2018 12:22:06 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=nxp.com; s=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=KPA/pPfE1XYanyljAZ0emzLDMb2tokXvP5tDC8fR/LU=; b=HDhh6QHDl2x3Z0nTORsXoG6J3TqA5bTy6KCwmHEX1OqDR2fVXdnnBUFhHToXXRXESh1m2YVRkzX9sre7PL62+qE5CyCdvI98wnt4TuFj8JEpEh5LQfGCekeuus0ga+07mK/10hLEf2C/ZkEjBJrcqCu9Vq8SX0yXcg4y1fT2gkE= Authentication-Results: spf=none (sender IP is ) smtp.mailfrom=peng.fan@nxp.com; Received: from linux-u7w5.ap.freescale.net.net (92.121.68.129) by VI1PR04MB3006.eurprd04.prod.outlook.com (2603:10a6:802:9::12) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384_P256) id 15.20.797.11; Mon, 28 May 2018 12:22:03 +0000 From: Peng Fan To: sbabic@denx.de, fabio.estevam@nxp.com Date: Mon, 28 May 2018 20:24:55 +0800 Message-Id: <20180528122526.20597-11-peng.fan@nxp.com> X-Mailer: git-send-email 2.14.1 In-Reply-To: <20180528122526.20597-1-peng.fan@nxp.com> References: <20180528122526.20597-1-peng.fan@nxp.com> MIME-Version: 1.0 X-Originating-IP: [92.121.68.129] X-ClientProxiedBy: HK2PR02CA0175.apcprd02.prod.outlook.com (2603:1096:201:21::11) To VI1PR04MB3006.eurprd04.prod.outlook.com (2603:10a6:802:9::12) X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-HT: Tenant X-Microsoft-Antispam: UriScan:; BCL:0; PCL:0; RULEID:(7020095)(4652020)(5600026)(48565401081)(4534165)(4627221)(201703031133081)(201702281549075)(2017052603328)(7153060)(7193020); SRVR:VI1PR04MB3006; X-Microsoft-Exchange-Diagnostics: 1; VI1PR04MB3006; 3:WNTeRwgTvGOZfFBmT86KVc6gZwN3nxfpSrZoXNbENryqkQ4rn39/zB7ufW/JyappJzMT9CACD//vqqjpUl6UVU4RAtz+JOEBDuFSvRi/8U12XerFLajyVp4J1dNySIlsCs1KImj1igZ1rj62AW40vsegiGpV5KDN6x0LNGIkXDfW+bkYeR6wmRPLHCFsoWGdROyiTEVNnvy5jAbGOeTCy3iRhd/XYxOXMOeBDugMSI+Y6Kkc8gyyQZqAnrmfQuVG; 25:EEvlOvwT81uS0YD5m8HILWDp2nshnthne304iCsAb/lzGeKdUsWdYWYoxnlizqaw6nC3nA9kmFyGoL5aXIkxkMklmGkSIFX6MQSz2bexDAr2AGR68bx+DfaarvKTwZ+DHMGWk0/tgpUslwyqc57VctpF+STfl8T/ok75bmpsgL7zhC1CuRy94ezLQiccReKLGTb2eNZ67a8W2yl1E9vBD+NCIoEK3mNWz5EnQVniw3IaHtXpaLZ93x3JdpYo13dDFLwUlNJYAKvb8lnFOM9LPMGws4OQTkxwj9MOQF27MzbPbW6TuSnsFO7jMHFUXgCHAinGR8qBzp5TenjO+8D9nQ==; 31:k8RzSLdWTChr9X+jN9Aeia8Fggmzd4Y5OnTFrkghQGs1AfAoDUjyUdTZlu33OsM67XAfFtCr7eslmoEX27dpOFwGH0MWTohp8V1rKpdr3RWmT7nn3xUUdF4WzIqPhf54mwZdiOt9AZwIU8D2Ybj93OEF3kNGHpTIZhztPt2OIbRRe/+CJ5hT/Vj6wlSJPAm9D638i0am8plHmwy924TazDDdItjzOxrd18PTo5TetyA= X-MS-TrafficTypeDiagnostic: VI1PR04MB3006: X-Microsoft-Exchange-Diagnostics: 1; VI1PR04MB3006; 20:MxK707D4SEq4CUbnUvUaW+HvR6/ir0akmmWpaRcQymRNDZsdCqY0QTIhYPHtjwHBp4sadUesNtdEzqQXzzY74MguhTAc3RGFMJftlpW1lf6RwmtFDNh4n3/v1sknEVGBEAf8urMBD1WrQm0+6dnNCxtUM58ZAcLi+TGgrA58ZmgqJ2Xcw0XgpQBCVMKALxpKF1MTpOCFZWTGlfd9mKouapKxdbNQ8j1kyZf7HLBn9QM1eEJ91JIitmVnek86MVgsa6/tfkt8CEFkKqgHfXSR788txwHewa5incVH/WUkR0kInhMKiQo3DRfYcbCl8SCcRteP1FNWrCzgGt+9O49XOpW3Ut4wQ9zKjDMEISZMzPy0R5rpWV+h9B1tRMUmlGpgjayttgRonLpbeir5hPHFBf1UcHXhcPb5mQUjrIAg24DhsNULzbP+/LtObixEuv8fiIwf7loRabO9S0R80AUU6mIw0c1jNFm3tx4c33heY1CUqiovAcGNssPYm/hgggJS; 4:rLyybZBVRgZaNQ2gWhXaJR8jdHir8adDokCTS321ymfswXrCwRRbX55Z5g2F3xsr5xznMVoEIbBJWLZx0jF+w/FGwvG43QnSwpuA7ctbCgQIuk66Tzgr/q1VU2tRB5nbW0pXsIvjkVvKlQZ8DWLFtIOpf0ct858aZGI+CrQfV/B0P0P8x/QmgyD6iADpfxjmy10s8hQe6uSnHDYdPJ8mlv6zryXsE95IGwCsbSVUvw8u2fKRahh4IWUZXMzEWjSU5qUSC1NnvDbUN5wYn99ThnKPXVtCmOTE5pqrNquBuGYFbQV984X7xpgCWltQss4n X-Microsoft-Antispam-PRVS: X-Exchange-Antispam-Report-Test: UriScan:(185117386973197); X-MS-Exchange-SenderADCheck: 1 X-Exchange-Antispam-Report-CFA-Test: BCL:0; PCL:0; RULEID:(8211001083)(6040522)(2401047)(8121501046)(5005006)(3002001)(93006095)(93001095)(3231254)(944501410)(52105095)(10201501046)(6055026)(149027)(150027)(6041310)(20161123558120)(20161123560045)(201703131423095)(201702281528075)(20161123555045)(201703061421075)(201703061406153)(20161123562045)(20161123564045)(6072148)(201708071742011)(7699016); SRVR:VI1PR04MB3006; BCL:0; PCL:0; RULEID:; SRVR:VI1PR04MB3006; X-Forefront-PRVS: 06860EDC7B X-Forefront-Antispam-Report: SFV:NSPM; SFS:(10009020)(366004)(39380400002)(396003)(39860400002)(376002)(346002)(199004)(189003)(36756003)(97736004)(6636002)(6666003)(68736007)(86362001)(8676002)(44832011)(8936002)(81166006)(81156014)(47776003)(11346002)(956004)(2616005)(476003)(446003)(25786009)(486006)(48376002)(106356001)(105586002)(186003)(50466002)(16526019)(2906002)(6512007)(53936002)(1076002)(66066001)(26005)(51416003)(478600001)(305945005)(50226002)(6486002)(5660300001)(6116002)(76176011)(3846002)(16586007)(52116002)(6506007)(4326008)(316002)(7736002)(386003); DIR:OUT; SFP:1101; SCL:1; SRVR:VI1PR04MB3006; H:linux-u7w5.ap.freescale.net.net; FPR:; SPF:None; LANG:en; PTR:InfoNoRecords; A:1; MX:1; Received-SPF: None (protection.outlook.com: nxp.com does not designate permitted sender hosts) X-Microsoft-Exchange-Diagnostics: =?us-ascii?Q?1; VI1PR04MB3006; 23:Y/pra4IgL7MzfzU1A/vX1nv4YajfYw+3FjEvJCHbQ?= j2cn5jTcGWVnlXJnq2YEqM/iP8Wrr/5T+iPXFznEEfyAlyRwUNYRMdiTeYF5zYVBOfHastJx0f+j6tsywB10OgcRWii9a+S+NpAuxUzkhddo6Eeb9ZkFvvcZuxVSK6Oy0cb8lIY0w7MMJ0aFLxv2FtgNosUzwnfwgh2OCnKHJ5wxHH5gU97iooIcfQIuIcyuVmbz9F3iITNSPQZUL/dAAheC6nGVPeU4s+rTwWhQ232jxWcQwAcKKNieI/xmHQDvEkuottcCu3HzYSmXnrtlQdOahU4g3ftgdb6/OvLoMrOlK0K+Fgf42tvKBcE7AEgHeduNa6aQoaM0PwdN0UpQK+tPrs3nvSGacv/ZBHCb6X2Nahh4rO6yNfnHsVsPSnJ0TDlJ1Matj+JWRdJNEWsJu72weT2XyUg7uQ2YL2xqDiSsuB7Z3CqcqDd3HQTgLRhHV3q/GeXpl4G43rp9wUwi4S4tO+DckXXJ2nqRQQl2QbyNGGr6lNbJ6H1ScQyJZk4/fRNEYcEv+6Up2tiaZia58b1TW7ZQCK7IwidDm/e2xdfU6e63gvYmqyrE+RbP/OpwvUMeNeHWEZr3X1Vi6UO32sAU7DrYv2WHHVFDMFP9Ni1Z/U9+P6dEwX4dW5JAOSat3bObMKtp6YMJu33/HSQ1PokiGsii/Z+g+zYTP6sFuV+0zbeuyeWEiadJ/3WSP1huQIxdiVWfGf9PaYYOTVyiB/DjgHRmTqC/9SywnxKuXz5j2NvR9fq4ofcRYyYcngg9FfgMNjDXqqhyLIVDlh2KXWx8NYntDnhszHPv0RVKaLdQphLtVaKuYuczME4H0zcwFKPNyW4gpmvYSTkQ1bhXRwCTQzTcsmD4HayZMT/ghwPyhXTSHbQ/BAOghSjgM5ihuy1OUZ+q+EXQgx+67Nme2mdsQCOBcmu25ZO38huxQPhWnzDJayq/fXX82btt9UnHWF0+cKkXvPqfHMnCmPzQZ49PwwpYfuss0/KTB0oEzePGD7f0iA5uKmSsMj424+E5g0ZePWD2JyraRFvBhe81XnPtYe1g5h0TjL8afSWFqLJ/PotD95SY6j90B+RXDiXYz8uE3I+QaxclWLHECZor57U1WolaCatS/OdRSUlHamyPBac+t4wRK28XSuR6DxnpVWAPStQENBIAIoOXmLq3bo50XC8kd6zomNH0H/PqB6ZVw== X-Microsoft-Antispam-Message-Info: EaiDm8/GlCSTFGpYsbv9VZKrJ9ycsIwHmf5xW/HZkLnEQDHQ/hYFnZ7D09oPzoueMhfO2pR2bNJuibn6glBLj6/5fIN+ePOtA8I+wbKGi3UjAEGVe+nnUmAodqDAfMBJHLJisfVKb9k04+trWMttSrZKVBnDdRk+PZ9xumLSl8GZ/QfcJlH4rc7EZLnxmElN X-Microsoft-Exchange-Diagnostics: 1; VI1PR04MB3006; 6:B1N3j/bXtfX56qDi4Ce0H5Pvm9qsqK7WBxtaZC3yDdnCSCyagths2SyTjilbHzx/vQkoqN2RYDsvHOl1C0QetNli7VNzm8n2tThw95z68VueIYvDgpWv9poZHVxB1aBLUgpoq7QF47orwtlHyCErKzTtwdbiHr4nMXzYiAPIXfgO8xkNB6+GP6NNw6d75fmVO/A2oEHmnt7rMwvCyVeXNNNnNupVV/FChKewjwJF82FuPE2nfIHaWk5vsLsoODW2+xSeMxIJK+dt2n9f9kxMGTkMdqrIQFE/fKUSzbmB9UVVi1Qn7JAd841f1jnscP5y/ls22FnBDuaKyCFIBar6wxyVNv8mjlKaQsMZMLJv8mtFkSunQ0c+SMoNkFjskAx8IUKJIR29NEPrmWmAPqf+9+n7FHG/6jhJW7Sk04N6WrRDrvShdUx1LxyxTphOnT8X8O08qlHBnVoDaJneU9l4nQ==; 5:bwYWLWVDXrovuBJbHP/+X6M1PYzcbYnMzqjZM5adTGNyMxUp2OAGc4v2CKpaPXqP2155KA6WlzH4xwWPJ4lBq20Gp6rhRbb0ICSDbWgFW/SP11f7R287kXk4njwhvz2ZJeqTkzJBp94nmHc8m2iUVGo5/EsfvdC2nKUJZYYCNC8=; 24:iHLuiCRYd9FP+307P1XysQIjCC9N9/WJCRKt1nLoXt1mP0cI2Z/BD0inpI2tXz8RVM4PsmJE4sDp0W6ULq1bmjj26xitj4BxBAYAs8h64fU= SpamDiagnosticOutput: 1:99 SpamDiagnosticMetadata: NSPM X-Microsoft-Exchange-Diagnostics: 1; VI1PR04MB3006; 7:mg/i05jXPNjOo4ZRLIY1If/sKj49Q2ps2lBGL8B9YXTQvH+lC0iuhMjszK+5O+RuulOzFDvILYsbd4j9v1MBP+qtn+Ob/HAxtfi1jVB+5eBqEsGZ6ljmSWPTPNYRWGd5TUumjt0sANHO42Bqj+TrXdQcXUHNM53LB8LI2lzeyMtzxq5bZyjPOj315mgpUW2DY4kWI66EbjweAbNdDcnWEuma9YjyEfueCoPgJf+XoSFXTt0/Q8/in20uBvko1Pyh X-MS-Office365-Filtering-Correlation-Id: 2095659d-c995-423c-cf99-08d5c4959fdc X-OriginatorOrg: nxp.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 28 May 2018 12:22:03.4637 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: 2095659d-c995-423c-cf99-08d5c4959fdc X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 686ea1d3-bc2b-4c6f-a92c-d99c5c301635 X-MS-Exchange-Transport-CrossTenantHeadersStamped: VI1PR04MB3006 Cc: u-boot@lists.denx.de Subject: [U-Boot] [PATCH 10/41] imx8: add basic cpu support X-BeenThere: u-boot@lists.denx.de X-Mailman-Version: 2.1.18 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" Add basic cpu support, including cpu revision, cpu type, cpu core detection. Signed-off-by: Peng Fan --- arch/arm/include/asm/arch-imx8/cpu.h | 26 ++++++++++++ arch/arm/mach-imx/imx8/Makefile | 1 + arch/arm/mach-imx/imx8/cpu.c | 79 ++++++++++++++++++++++++++++++++++++ 3 files changed, 106 insertions(+) create mode 100644 arch/arm/include/asm/arch-imx8/cpu.h create mode 100644 arch/arm/mach-imx/imx8/cpu.c diff --git a/arch/arm/include/asm/arch-imx8/cpu.h b/arch/arm/include/asm/arch-imx8/cpu.h new file mode 100644 index 0000000000..9dfffc09bc --- /dev/null +++ b/arch/arm/include/asm/arch-imx8/cpu.h @@ -0,0 +1,26 @@ +/* SPDX-License-Identifier: GPL-2.0+ */ +/* + * Copyright 2018 NXP + */ + +#define MIDR_PARTNUM_CORTEX_A35 0xD04 +#define MIDR_PARTNUM_CORTEX_A53 0xD03 +#define MIDR_PARTNUM_CORTEX_A72 0xD08 +#define MIDR_PARTNUM_SHIFT 0x4 +#define MIDR_PARTNUM_MASK (0xFFF << 0x4) + +static inline unsigned int read_midr(void) +{ + unsigned long val; + + asm volatile("mrs %0, midr_el1" : "=r" (val)); + + return val; +} + +#define is_cortex_a35() (((read_midr() & MIDR_PARTNUM_MASK) >> \ + MIDR_PARTNUM_SHIFT) == MIDR_PARTNUM_CORTEX_A35) +#define is_cortex_a53() (((read_midr() & MIDR_PARTNUM_MASK) >> \ + MIDR_PARTNUM_SHIFT) == MIDR_PARTNUM_CORTEX_A53) +#define is_cortex_a72() (((read_midr() & MIDR_PARTNUM_MASK) >>\ + MIDR_PARTNUM_SHIFT) == MIDR_PARTNUM_CORTEX_A72) diff --git a/arch/arm/mach-imx/imx8/Makefile b/arch/arm/mach-imx/imx8/Makefile index 8ae0518c16..9545fd8d03 100644 --- a/arch/arm/mach-imx/imx8/Makefile +++ b/arch/arm/mach-imx/imx8/Makefile @@ -4,6 +4,7 @@ # SPDX-License-Identifier: GPL-2.0+ # +obj-y += cpu.o obj-y += fsl_mu_hal.o sci/ipc.o obj-y += sci/svc/misc/rpc_clnt.o obj-y += sci/svc/pad/rpc_clnt.o diff --git a/arch/arm/mach-imx/imx8/cpu.c b/arch/arm/mach-imx/imx8/cpu.c new file mode 100644 index 0000000000..eed92d9963 --- /dev/null +++ b/arch/arm/mach-imx/imx8/cpu.c @@ -0,0 +1,79 @@ +// SPDX-License-Identifier: GPL-2.0+ +/* + * Copyright 2018 NXP + */ + +#include +#include +#include +#include +#include +#include +#include + +DECLARE_GLOBAL_DATA_PTR; + +u32 get_cpu_rev(void) +{ + sc_ipc_t ipchndl; + u32 id = 0, rev = 0; + sc_err_t err; + + ipchndl = gd->arch.ipc_channel_handle; + + err = sc_misc_get_control(ipchndl, SC_R_SYSTEM, SC_C_ID, &id); + if (err != SC_ERR_NONE) + return 0; + + rev = (id >> 5) & 0xf; + id = (id & 0x1f) + MXC_SOC_IMX8; /* Dummy ID for chip */ + + return (id << 12) | rev; +} + +#ifdef CONFIG_DISPLAY_CPUINFO +const char *get_imx8_type(u32 imxtype) +{ + switch (imxtype) { + case MXC_CPU_IMX8QXP: + return "8QXP"; + default: + return "??"; + } +} + +const char *get_imx8_rev(u32 rev) +{ + switch (rev) { + case CHIP_REV_A: + return "A"; + case CHIP_REV_B: + return "B"; + default: + return "?"; + } +} + +const char *get_core_name(void) +{ + if (is_cortex_a35()) + return "A35"; + else + return "?"; +} + +int print_cpuinfo(void) +{ + u32 cpurev; + + cpurev = get_cpu_rev(); + + printf("CPU: Freescale i.MX%s rev%s %s at %d MHz\n", + get_imx8_type((cpurev & 0xFF000) >> 12), + get_imx8_rev((cpurev & 0xFFF)), + get_core_name(), + mxc_get_clock(MXC_ARM_CLK) / 1000000); + + return 0; +} +#endif From patchwork Mon May 28 12:24:56 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Peng Fan X-Patchwork-Id: 921502 X-Patchwork-Delegate: sbabic@denx.de Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Authentication-Results: ozlabs.org; spf=none (mailfrom) smtp.mailfrom=lists.denx.de (client-ip=81.169.180.215; helo=lists.denx.de; envelope-from=u-boot-bounces@lists.denx.de; receiver=) Authentication-Results: ozlabs.org; dmarc=fail (p=none dis=none) header.from=nxp.com Authentication-Results: ozlabs.org; dkim=fail reason="signature verification failed" (1024-bit key; unprotected) header.d=nxp.com header.i=@nxp.com header.b="l3/PoA3t"; dkim-atps=neutral Received: from lists.denx.de (dione.denx.de [81.169.180.215]) by ozlabs.org (Postfix) with ESMTP id 40vbtz4PZqz9s0q for ; Mon, 28 May 2018 22:36:11 +1000 (AEST) Received: by lists.denx.de (Postfix, from userid 105) id 38037C21E38; Mon, 28 May 2018 12:26:27 +0000 (UTC) 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=BAD_ENC_HEADER, RCVD_IN_DNSWL_BLOCKED, SPF_HELO_PASS, T_DKIM_INVALID autolearn=unavailable autolearn_force=no version=3.4.0 Received: from lists.denx.de (localhost [IPv6:::1]) by lists.denx.de (Postfix) with ESMTP id F41E9C21E85; Mon, 28 May 2018 12:22:50 +0000 (UTC) Received: by lists.denx.de (Postfix, from userid 105) id 17DF8C21E47; Mon, 28 May 2018 12:22:15 +0000 (UTC) Received: from EUR01-HE1-obe.outbound.protection.outlook.com (mail-he1eur01on0045.outbound.protection.outlook.com [104.47.0.45]) by lists.denx.de (Postfix) with ESMTPS id 50726C21E0F for ; Mon, 28 May 2018 12:22:09 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=nxp.com; s=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=M6SlTffJj+kRaM4EB7GQboMULxnaJ9/cC3a5eNVfg3Q=; b=l3/PoA3tvizBJjSvd9xVlxTK/9CwXMXz5WGha8tqaAlyju/xv57Bl9S/j25B1wcRqX6XgG6Q/V4sSXajkHqw9L3AbRD4kUX1k9Dd6fortHP2X3Y9IFIcRxpGhV7CvdkXyddmUUX1IUDNd1XFq77vtiXxgcRSRdvhPmqy9wtGSrg= Authentication-Results: spf=none (sender IP is ) smtp.mailfrom=peng.fan@nxp.com; Received: from linux-u7w5.ap.freescale.net.net (92.121.68.129) by VI1PR04MB3006.eurprd04.prod.outlook.com (2603:10a6:802:9::12) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384_P256) id 15.20.797.11; Mon, 28 May 2018 12:22:06 +0000 From: Peng Fan To: sbabic@denx.de, fabio.estevam@nxp.com Date: Mon, 28 May 2018 20:24:56 +0800 Message-Id: <20180528122526.20597-12-peng.fan@nxp.com> X-Mailer: git-send-email 2.14.1 In-Reply-To: <20180528122526.20597-1-peng.fan@nxp.com> References: <20180528122526.20597-1-peng.fan@nxp.com> MIME-Version: 1.0 X-Originating-IP: [92.121.68.129] X-ClientProxiedBy: HK2PR02CA0175.apcprd02.prod.outlook.com (2603:1096:201:21::11) To VI1PR04MB3006.eurprd04.prod.outlook.com (2603:10a6:802:9::12) X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-HT: Tenant X-Microsoft-Antispam: UriScan:; BCL:0; PCL:0; RULEID:(7020095)(4652020)(5600026)(48565401081)(4534165)(4627221)(201703031133081)(201702281549075)(2017052603328)(7153060)(7193020); SRVR:VI1PR04MB3006; X-Microsoft-Exchange-Diagnostics: 1; VI1PR04MB3006; 3:3uw8b/frfGNyqJpV3fifBCZwU+9Yc+Fn2JpxGXslBgh5KQoPKbGrRm+6RkF2gr8yVd4o7AGFOIpBEasfEKd6SDE4esS6bq4pw+YObygoQX+CxuPO9nSvRn/ujksT0MU1iJ+6JC+cq1vF9/vm5k3yWNW2t3Me5v3FEvVVXteW3fCFoC1VHsoUv2tBpREI3pLSYSxF5ph/kDKTTYuWoIr1E0cWcFl7MsVuHvPSVjBRvVHMpCNOXFdsSYd7vGgn9McU; 25:CwRrklGeoXNlXkbyVBj/gSbN1p9l3tvA1TCVHqN2R/nMx4lRhNlTj2tpXLIVQmjk+vetAg+WAgR4rfdLaIbks1QCfThcd1dr0mX6a+rbVJJWkdCEqgFbkspyQEdRRjyiirPnftnfZf3MLYzFFIOo+UYEWBijheJ2dG2tNAB/0v9AlIP+3yq4j4Ss93UT29VmnlX8pZ811UMn0hHeNPYS7snu2vaS/DKZB7XcIvKk1yd06GQomMg/wQp/DF0uZvHlxooqlyN9gvUM9473eXRUSYcWTUJCOnLgqnwMRzN08u5Mk45lbxyum6bBdC9hz++c5Onw5zLmHZJdLIsu9ywT0g==; 31:PwFXBLELa9dPyv7n5Rot5X6x6bdoHiXpQKwgeYXeig6fAL8IToSHRY0ElAyuZV82SC7ZvtbOKRff3ocHMI+OhKWVx79LUNqUvvXc6kiGDXL0Ph0lDaZUe0d0AilK3kphA7SLjq6NeUUncglp8ok2FyPLtUUqXsCrdpzyTe12+150y8i411aQvDqaihHC1rlLJOcKwTAzkPJeJ4XtdmAFmCc/Ra8LqGeW+V/bQpld2GU= X-MS-TrafficTypeDiagnostic: VI1PR04MB3006: X-Microsoft-Exchange-Diagnostics: 1; VI1PR04MB3006; 20:VUqoA13szZcUICCKqDWaz8YXXy9O9x3tcWjbV8/p8tag4IY9krE2Me9OMf03NMX9YwNuWJ+pR2+O/NlnCGYVdHwnAxnoOVdnarjwxH3/J3YIVVfwsMbbYp4Aobq/7F/hU1rLwrFhoVodMZLjAZbZC2/x5XHPVX63J63FVDCdikOES1R5Jd5zqhczlqg6LfJYC/J8rYlF11etX92LNVtC1oldw44v4/WKdM073jEFnt3ERX7K3nnHi/0cl/nfqJ67WfAyVfyyZpdXZzSOj558n4wb/VRs2wS2DRBgj/A/cAaoOoyIkrCtzRAcX3tLT6ay+Tmj6jopBz5HOAfslJzGvPoucG2bMu+6m+6sU1NHcQLNbvzMYJUIDgobvHt6OAwce/cwBuOHJ1v9tIifnmD6WN7ovY4lvbqAxcIW5a6sNalDsXAHAmnVB6ttVpzqHb0jL+0hvZbVHTNm5ilEXJIGPd/umA6fVZzLjSb3mk5KyWQeJ93V1IdFe5Hs07U+st3b; 4:vKzrZybXPMY7EWIU0vm5XUPcd4VMSwhADzmKDuFOFEGcxuLIRX+jX+Ny2qA/JXt+taTv2zfcVhuNhoM5Va85pjp46V8LhH/Fwpu5rVXiEOiix7f0fZjKOr4TADgiru/cBlo/xLy4c5Ry/pb6xRPkp2+3uEwoZpCzCKz0zLcX6WjxAVOYgFwVhrUd7N+JUs0Xuhf9jdjgnON5Qz4MkUgcXbyTRgAww00/FVc0B9AQNZhlsdM8AjoDEZ59g37yQQ2VHHZawOpjBsHY0IumTkS1ajgE/VdraiLLjSjVn/dOmA3/vcDaAHWFAX4NfaqIPK3b X-Microsoft-Antispam-PRVS: X-Exchange-Antispam-Report-Test: UriScan:(185117386973197); X-MS-Exchange-SenderADCheck: 1 X-Exchange-Antispam-Report-CFA-Test: BCL:0; PCL:0; RULEID:(8211001083)(6040522)(2401047)(8121501046)(5005006)(3002001)(93006095)(93001095)(3231254)(944501410)(52105095)(10201501046)(6055026)(149027)(150027)(6041310)(20161123558120)(20161123560045)(201703131423095)(201702281528075)(20161123555045)(201703061421075)(201703061406153)(20161123562045)(20161123564045)(6072148)(201708071742011)(7699016); SRVR:VI1PR04MB3006; BCL:0; PCL:0; RULEID:; SRVR:VI1PR04MB3006; X-Forefront-PRVS: 06860EDC7B X-Forefront-Antispam-Report: SFV:NSPM; SFS:(10009020)(366004)(39380400002)(396003)(39860400002)(376002)(346002)(199004)(189003)(36756003)(97736004)(6636002)(6666003)(68736007)(86362001)(8676002)(44832011)(8936002)(81166006)(81156014)(47776003)(11346002)(956004)(2616005)(476003)(446003)(25786009)(486006)(48376002)(106356001)(105586002)(186003)(50466002)(16526019)(2906002)(6512007)(53936002)(1076002)(59450400001)(66066001)(26005)(51416003)(478600001)(305945005)(50226002)(6486002)(5660300001)(6116002)(76176011)(3846002)(16586007)(52116002)(6506007)(4326008)(316002)(7736002)(386003); DIR:OUT; SFP:1101; SCL:1; SRVR:VI1PR04MB3006; H:linux-u7w5.ap.freescale.net.net; FPR:; SPF:None; LANG:en; PTR:InfoNoRecords; A:1; MX:1; Received-SPF: None (protection.outlook.com: nxp.com does not designate permitted sender hosts) X-Microsoft-Exchange-Diagnostics: =?us-ascii?Q?1; VI1PR04MB3006; 23:0r7RXTsNmEuDVsE+/Q8Qd6fmttx4imlV1U7RtXfAg?= 4IT/s//7Y+JjvIC9tp9pD81F9WuglmI8CuxiTHq1eA8TCZ+jxmiMQtugTjnkkQ/PrzW5lgOvGQBJrj/gAFfCNUSWVPw2km1wPrIwd6Uzuw7l6MgXWWEODBIODbx+H4IXyTSxpMYecdzWLduvWv7CT6mDH6M5WIfTR4cI6J9KoW/9K3Uxm9y/hsREdfhqV4GVOq2k9pt6zrF+bxgJUDo+kD9cseuIwsYZRDzYd2liP5IcLPSCpU7J+MZXa/qnUKg86LdGHE5BVvkXPeteBwKr3SO+z1+0kZDiRTktd7U0dum9b9i3CnQMQPRG5hEWl3PYRb1De4R7LzEqdSyp1R/yOt/8javL1illgPm/NzeZwgeTVBdWV8Xme1WY3wMLcLl6NMbF4UU182XHkIxhPuFnctKLawyWbJzW8d3HoX70ySPigMMQIwEfFdC/bzxisVyCngUJygzjgthdI4kWM1D6uI0ZE5ca7EDPbVmi2SUFkzXQ9hcpa4TM1WWXKWMvX+PocU8/JvX7Irqduoc7+PqARoBJBWIqQTe4BflCyExmp7XVy967uLFoKeR3iZdWYNQAiDy7r2bj5tmfyvyquTcxOKuXeV2ERYOpWD1lC8m1V6Ee9tS5h4ze4EKzFITlzIzba8A8PJ0T7oCPmhZZ6csQDGTEL/8MhRI99So+88+8yV7puANN9djpTlvk5C4igM0e8SQWLuKERSunyqrjOUmfq2EDXym6pkdvBayM9dZt9Rl72zqCR28iFQd4D9vlJd0PYNziU8oCcQemTWn+QRuDN2F/IM+66lQKzKavWw5mnf+H/jEyBlsodmJG6NLsqzWROro0KpwGgeiXR2dFHuJTmiSl9DxxuQ/2PgWzduBDjxwQdbbHaorJx1d2imsqHoYGhYCNaCEuB+JveKY9M7XodfysgbM2wNcR2IhYE57nDQBv8fNuazjiakBdL9512Zky0mmLk8Q9OHozqLqzS8Ny2LJU22VQCtO6hoZBOO8V8yHWUug63Pjf85/Sq9uXj8Q68tVy8z2R9UO8BaXdKbmh3rKNp792/CKxWg68s1Z0CbdZBkmnhjwErCi+MUO+6xvhMOHzKu9FD5LkpIisFVWqb1Y5I7cBQ6dzhdf0cl+0IiTFjmBq69HzSkGuU/Eqo7taL+mHIYcQHHMzU+TD6on+CbhDhfntI0RAodO4JzwbZguzPLSzkzLNji1C5enETRRrhg= X-Microsoft-Antispam-Message-Info: dOkPU4/MlZ5U1J4lon78BqBtKqcV60CPuCVUtLma1Cd3aJe0Qtq5ZMlnXQLoECWUCZLfOqwvRCTfjE9BJNU+UM5gLFzLRXCw39OSFMR7Aj9m+MQG9EeTF3oE7TPkiYRQG+UjcSoxeJY8FcbmoqJaLiqw4ZsFKx5V3hDlqxu7j210CDGATwz8nFRHcoNPoB54 X-Microsoft-Exchange-Diagnostics: 1; VI1PR04MB3006; 6:lc7bcrWBmzcDqqesK2dIMWCq7kKDDjViEc2UjjdoC8hZYWJE9E1Bp/yBWjc1CdvNj+sCDMR9K9smxCGdfwDSAyTkoXjQHb8xEB1Uiz1OdqXYFpPqZnohfMdTSwISem1/9iBsv0rMTh1Spu+ykvlaqB0r8naxlI30r19+HqrjPm3t3kEtmywZWWAXIxEaqlfKKSvisR5dGxfvYA2qW0S1r5vpNNKZBcb4K98qInP83jC7xja2kmUiKI4hXsZaCtXCtLxBwwFiFFwqiPX8Ex5YovkUiAOjuQmBgufsu1lPET1Pj08p1ThakQbN5YPNFruZLsoybSgiPRFS36MHKGqJolNTe3SQrMIbmasu71AzMbl3uvGSYYDVIEKQr8FVsS6yfZLya5WCbn/WNDU4hYYa224L8yOkpYjwxp5/OpkxG36OBPtYl1W5ORm3H4S7kXVa5K6vmp+E46Ynk9sFeQnfyQ==; 5:SHtNIZBGLtsGaaHGQvSVe+a/gwJKO4A3NDMULQOLL9SLeUUV81Tv66bhaWInbFFT0+e+VANrRguEx7SS5IduhxpWCEEpp+zlnQKjU9g1YugFcf+XqqQXF0WC15hBG52MgvgUd4Le6hjJq7g8/8peaHESnwY0x/8tu6E8XVzQgSI=; 24:Xfa3YgGlDTPynZGC0aZ8fEuz4bFLdbZVzCJ3kpso1rBsbK18jNmgSOvAPnOkTwSi3ZOzxJrY8wlMD+e6LRkqV9xZWyKGWbT+Tdusm/bvUdE= SpamDiagnosticOutput: 1:99 SpamDiagnosticMetadata: NSPM X-Microsoft-Exchange-Diagnostics: 1; VI1PR04MB3006; 7:+0MXjMq6qwuwPuMuK9cw/Gvhq/vgZ73IVGN6JXZysq9URhyhsXMmMY2zvRRjoNfdfUA9aW8iMADZzarxsYk84r1gpfzt6xI0I1dQBOVKq6EuAdS2RKkRLnF+8Msn+OrESq7/1Z5gQF66D+lPAA/eID529ZAPT70gJK2vldKliqvGU9NHDiPhOoDoBO0n+UvttBjtBteOggsuU43+6utNbkpGBKqL3xkiCOQ8hnfcCyKcl+PMCqyrT8+2aCozc8AK X-MS-Office365-Filtering-Correlation-Id: b2382696-2e5c-4b3e-5bfb-08d5c495a16d X-OriginatorOrg: nxp.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 28 May 2018 12:22:06.0575 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: b2382696-2e5c-4b3e-5bfb-08d5c495a16d X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 686ea1d3-bc2b-4c6f-a92c-d99c5c301635 X-MS-Exchange-Transport-CrossTenantHeadersStamped: VI1PR04MB3006 Cc: u-boot@lists.denx.de Subject: [U-Boot] [PATCH 11/41] imx8: add boot device detection X-BeenThere: u-boot@lists.denx.de X-Mailman-Version: 2.1.18 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" Add get_boot_device to detect boot device. Add print_bootinfo to print the boot device info. Signed-off-by: Peng Fan --- arch/arm/include/asm/arch-imx8/sys_proto.h | 10 ++++ arch/arm/mach-imx/imx8/cpu.c | 88 +++++++++++++++++++++++++++++- 2 files changed, 97 insertions(+), 1 deletion(-) create mode 100644 arch/arm/include/asm/arch-imx8/sys_proto.h diff --git a/arch/arm/include/asm/arch-imx8/sys_proto.h b/arch/arm/include/asm/arch-imx8/sys_proto.h new file mode 100644 index 0000000000..f9a3016132 --- /dev/null +++ b/arch/arm/include/asm/arch-imx8/sys_proto.h @@ -0,0 +1,10 @@ +/* SPDX-License-Identifier: GPL-2.0+ */ +/* + * Copyright 2018 NXP + */ + +#include +#include + +enum boot_device get_boot_device(void); +int print_bootinfo(void); diff --git a/arch/arm/mach-imx/imx8/cpu.c b/arch/arm/mach-imx/imx8/cpu.c index eed92d9963..7aecaac356 100644 --- a/arch/arm/mach-imx/imx8/cpu.c +++ b/arch/arm/mach-imx/imx8/cpu.c @@ -6,10 +6,11 @@ #include #include #include -#include #include +#include #include #include +#include DECLARE_GLOBAL_DATA_PTR; @@ -77,3 +78,88 @@ int print_cpuinfo(void) return 0; } #endif + +int print_bootinfo(void) +{ + enum boot_device bt_dev = get_boot_device(); + + puts("Boot: "); + switch (bt_dev) { + case SD1_BOOT: + puts("SD0\n"); + break; + case SD2_BOOT: + puts("SD1\n"); + break; + case SD3_BOOT: + puts("SD2\n"); + break; + case MMC1_BOOT: + puts("MMC0\n"); + break; + case MMC2_BOOT: + puts("MMC1\n"); + break; + case MMC3_BOOT: + puts("MMC2\n"); + break; + case FLEXSPI_BOOT: + puts("FLEXSPI\n"); + break; + case SATA_BOOT: + puts("SATA\n"); + break; + case NAND_BOOT: + puts("NAND\n"); + break; + case USB_BOOT: + puts("USB\n"); + break; + default: + printf("Unknown device %u\n", bt_dev); + break; + } + + return 0; +} + +enum boot_device get_boot_device(void) +{ + enum boot_device boot_dev = SD1_BOOT; + + sc_ipc_t ipchndl = 0; + sc_rsrc_t dev_rsrc; + + ipchndl = gd->arch.ipc_channel_handle; + sc_misc_get_boot_dev(ipchndl, &dev_rsrc); + + switch (dev_rsrc) { + case SC_R_SDHC_0: + boot_dev = MMC1_BOOT; + break; + case SC_R_SDHC_1: + boot_dev = SD2_BOOT; + break; + case SC_R_SDHC_2: + boot_dev = SD3_BOOT; + break; + case SC_R_NAND: + boot_dev = NAND_BOOT; + break; + case SC_R_FSPI_0: + boot_dev = FLEXSPI_BOOT; + break; + case SC_R_SATA_0: + boot_dev = SATA_BOOT; + break; + case SC_R_USB_0: + case SC_R_USB_1: + case SC_R_USB_2: + boot_dev = USB_BOOT; + break; + default: + break; + } + + return boot_dev; +} From patchwork Mon May 28 12:24:57 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Peng Fan X-Patchwork-Id: 921477 X-Patchwork-Delegate: sbabic@denx.de Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Authentication-Results: ozlabs.org; spf=none (mailfrom) smtp.mailfrom=lists.denx.de (client-ip=81.169.180.215; helo=lists.denx.de; envelope-from=u-boot-bounces@lists.denx.de; receiver=) Authentication-Results: ozlabs.org; dmarc=fail (p=none dis=none) header.from=nxp.com Authentication-Results: ozlabs.org; dkim=fail reason="signature verification failed" (1024-bit key; unprotected) header.d=nxp.com header.i=@nxp.com header.b="TBpAac/h"; dkim-atps=neutral Received: from lists.denx.de (dione.denx.de [81.169.180.215]) by ozlabs.org (Postfix) with ESMTP id 40vbgj53bDz9s0y for ; Mon, 28 May 2018 22:26:25 +1000 (AEST) Received: by lists.denx.de (Postfix, from userid 105) id 4726BC21E74; Mon, 28 May 2018 12:24:51 +0000 (UTC) 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=BAD_ENC_HEADER, RCVD_IN_DNSWL_BLOCKED, SPF_HELO_PASS, T_DKIM_INVALID autolearn=unavailable autolearn_force=no version=3.4.0 Received: from lists.denx.de (localhost [IPv6:::1]) by lists.denx.de (Postfix) with ESMTP id 01660C21E60; Mon, 28 May 2018 12:22:28 +0000 (UTC) Received: by lists.denx.de (Postfix, from userid 105) id EB338C21C8B; Mon, 28 May 2018 12:22:17 +0000 (UTC) Received: from EUR01-HE1-obe.outbound.protection.outlook.com (mail-he1eur01on0059.outbound.protection.outlook.com [104.47.0.59]) by lists.denx.de (Postfix) with ESMTPS id E6DD1C21DED for ; Mon, 28 May 2018 12:22:11 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=nxp.com; s=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=oAyShf6pJ6Z88M5nhPEEziIynNSOgnnmZLith3mTPO8=; b=TBpAac/h/rV8hu5zbwd4jG6b1V81maeJ20rdWn756Cb4z2qQ96nXgGtOWOvP/MvvIgaqoxWAtP9vRzCiTNLZRxQHHJAzaCB+gBC3XzOqYQqki0IHnrSOPwYj/xM8ppFob3kHUgi15Ndfvh5bu3YlkCrhnsFZr/Lxq6H3sO0PPVU= Authentication-Results: spf=none (sender IP is ) smtp.mailfrom=peng.fan@nxp.com; Received: from linux-u7w5.ap.freescale.net.net (92.121.68.129) by VI1PR04MB3006.eurprd04.prod.outlook.com (2603:10a6:802:9::12) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384_P256) id 15.20.797.11; Mon, 28 May 2018 12:22:08 +0000 From: Peng Fan To: sbabic@denx.de, fabio.estevam@nxp.com Date: Mon, 28 May 2018 20:24:57 +0800 Message-Id: <20180528122526.20597-13-peng.fan@nxp.com> X-Mailer: git-send-email 2.14.1 In-Reply-To: <20180528122526.20597-1-peng.fan@nxp.com> References: <20180528122526.20597-1-peng.fan@nxp.com> MIME-Version: 1.0 X-Originating-IP: [92.121.68.129] X-ClientProxiedBy: HK2PR02CA0175.apcprd02.prod.outlook.com (2603:1096:201:21::11) To VI1PR04MB3006.eurprd04.prod.outlook.com (2603:10a6:802:9::12) X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-HT: Tenant X-Microsoft-Antispam: UriScan:; BCL:0; PCL:0; RULEID:(7020095)(4652020)(5600026)(48565401081)(4534165)(4627221)(201703031133081)(201702281549075)(2017052603328)(7153060)(7193020); SRVR:VI1PR04MB3006; X-Microsoft-Exchange-Diagnostics: 1; VI1PR04MB3006; 3:nG/d87UbSHwN9otwM+RkBbW1FMsWwOBgEnE3Hoal6Lh9QN0zVZ8fVrdSf5YFwtoOOlhQWoIhy2FbEBogJrQ6FLLQ1xYGaarEQ6UbhEv8c1J4hy9owUvVEFD0LOrjdaaTwyoX7CZVIWTAqzPCp4vPSejkJ16+C2eH9eTYI+usEmD1Lzx2zHqQlLQJ6zaVfyA++lQga+BnXkxEB1t7hfiwB0Ru4btyHj0y0iMFPq2lQfItaeUeHzLHLMZVt/ztvDkM; 25:slFZN4+PGdGeYPnEdQBiT4IqjpH061MIFcIt5I2gdo/V7k4IrKQLZRbSlj4AWWobOWTIwaHlESjskTupWvSc8q/+bWhPYm6/06ygVYE7H1OWRzR1X8KIUlehbhzt1900NKjBurvIseSzseJ4fr4yVTzkCtqJf1wB8g3O+B10FR/i91FJ2XP41hJpukcHX8vV+teTslpo3wigRyk/+6PK5vCKj5Z9gzYDxYLxYfSe3Ey9gpVpXINqoAqljGRj5b7HWeUe1yLSmBWt0y8dHe+YOLWzo8e/XJ/yYDYVtJSamgF1sL9fEtrhIh9j+1JszBflPzBrIT6CVEKIjYiALnX5Ig==; 31:Q+0s/RcO1UAIPZYh4mB2hxgp06OvHIPycrhc61LIA0AQEMiUi/mWVowX8YDJFiQxmsMnOPdz5eIpRgf3AUqRPIa1VHu/pVn4P2lQgvtWFxRx73d0Ye+n2h9krNkPzH/hFRjEvTb2Lckj3xEyNzFMllU5vQS/VMAYCA4UMhT9AvQ/SiuIIE7X7Bl16kqFhoQjxjuBqRr0vOHY/36wse9Kcuu/UXRZFrFjvsPiJeLZ3TE= X-MS-TrafficTypeDiagnostic: VI1PR04MB3006: X-Microsoft-Exchange-Diagnostics: 1; VI1PR04MB3006; 20:JHP3Ujqu40sVzr5FWtrYquLAHESf5GNWfscip6GBxvAKYf1hfUeqcdegV54CQRs+3DdgAzxsFnmydBob8BrFIlE51MofIVWbKCVhmMqAU7x7a+/jwW/v9ckspfR7xShadd+D5ThnbXrtGkWbr9emj83Src/8FqgEjHFbOdFGDOPCTQnMpIGkO8u/1IJrL9powWfKW74QF6MPjFyAGNmQrzRNoAo+qWbCxpMbIK8FowlwhZ4nejV/uBk1SlsHhJVAZVlD5K6+o9A7o04x81lA+Pr+oGzb0Y68SzctBmm/ONClGP9mz3K0q4/gHG7Cl3g9vTmM5c4T5mk9Z8V6IEW0x3nCIFKTb+W7iHWa1jp2HDrQFJ9I/hfifeRQRyGoROnQptCBAb4WSVd6ySBiTMOu6FI0Tmd8XzXVKAswdRx4o7g9x2h90jInEf3/OWYbtjdl9d3m5MLMK9kAQubGniFBhJvgJwMcmrA3Dd6FQu/RHg/C3REbbooKsGNkjw+ND9AD; 4:GUEfHGrHyHJxaiBx30eH0pHY7vibrN4RG8kvRXGufHRyKiqe9LiA1DK/8KFbt00hl1PGiVDaKwpX3rccLOrE20H6k/RzHin5efkINSTN9PvKsnfR/5n4k1luuLFGC/PhuVgrHp2bFr8z5nbeF4AiuuSSkeh1bTMmvZvxmjimFsapxiowunvHricb6Rh8Nqhj0D60w7WGHFvqWG8IPnRKSp4K6jYy1X2TI6J3iRB2UzPS2xuXSOPDdgfpBgyPW0s4IMruaHgOq1V12rF4z2Gsw9rhabqk2fAkbQgRTb9Ei0l6sSoc17d65OmAygCvJgtG X-Microsoft-Antispam-PRVS: X-Exchange-Antispam-Report-Test: UriScan:(185117386973197); X-MS-Exchange-SenderADCheck: 1 X-Exchange-Antispam-Report-CFA-Test: BCL:0; PCL:0; RULEID:(8211001083)(6040522)(2401047)(8121501046)(5005006)(3002001)(93006095)(93001095)(3231254)(944501410)(52105095)(10201501046)(6055026)(149027)(150027)(6041310)(20161123558120)(20161123560045)(201703131423095)(201702281528075)(20161123555045)(201703061421075)(201703061406153)(20161123562045)(20161123564045)(6072148)(201708071742011)(7699016); SRVR:VI1PR04MB3006; BCL:0; PCL:0; RULEID:; SRVR:VI1PR04MB3006; X-Forefront-PRVS: 06860EDC7B X-Forefront-Antispam-Report: SFV:NSPM; SFS:(10009020)(366004)(39380400002)(396003)(39860400002)(376002)(346002)(199004)(189003)(36756003)(97736004)(6636002)(6666003)(68736007)(86362001)(8676002)(44832011)(8936002)(81166006)(81156014)(47776003)(11346002)(956004)(2616005)(476003)(446003)(25786009)(486006)(48376002)(106356001)(105586002)(186003)(50466002)(16526019)(2906002)(6512007)(53936002)(1076002)(66066001)(26005)(51416003)(478600001)(305945005)(50226002)(6486002)(5660300001)(6116002)(76176011)(3846002)(16586007)(52116002)(6506007)(4326008)(316002)(7736002)(386003); DIR:OUT; SFP:1101; SCL:1; SRVR:VI1PR04MB3006; H:linux-u7w5.ap.freescale.net.net; FPR:; SPF:None; LANG:en; PTR:InfoNoRecords; A:1; MX:1; Received-SPF: None (protection.outlook.com: nxp.com does not designate permitted sender hosts) X-Microsoft-Exchange-Diagnostics: =?us-ascii?Q?1; VI1PR04MB3006; 23:/cfYaouBSZP9gRUXkyhy0a92qglPMgEDU+dgFU9Ru?= cZdHx0kuV3nQ7vnz5N7iMSwcFuD1+WBDAkbKzOBX1+kRnheuS4hqgnqCbqNsna60MckZVh2cf2EfT2Lq3B1YlhRTMQrQNy3o9BbvPotLGvHNEMtG349v9HAEoUPVd6yQPnGKq1CvttnG1K8X//EWkRQ8KvB/c1Zz+OoCEy/ki/WDZthq5R3amKPcehHTyE72W6pX3yCIIhS06rkkwq44ak4+ngdkzc5aceuEu9QnTKv5azY5eII0i/ZvDdTLHrTICFAtaSPWuFX1RsqdZjDXK76iLM+RS3sqslnS7GBzLCKL0Cxl0c28+83oXw5VtLudKzzYvsqmd8mWXP3nMPLdao+LjFYgaxHeghJDhbKYCJ2qmJrW3sqKXd9hqbqOkf3KJC1AAEtQsXaMxPbWITqIIBspM0mf5bpUm5c5Sw4//Wh54fhyyJp57SBOzTmFWdyPzg9e76MxYy/XN8/xFysL++OR4IwmV11gCbHqVvMPKec+SsKHnwa5s6E4O+FkA3ZAnthIoCcxnKB5mq91SWLOWZlBxIRPZ5jSKl7m4u2vo/69G84+9PTuK3DQ8gWsFg1aoSwgmm2BGiXaSQI31+my9U1C3MmRk5UNYyPr0SE+hKhFBXjaPD8VwuuSEYPsdX3iezawFlPne6pmxzOkWaPPxJPw9XcGyY3YNvqE9vw6C5Yw3YfZlBOPgj4SZj+mcsSf3C/LFpeuYRQ6OWu6eXTpKaINwFpJhg6aQ598rlc+nisUjFFpHu/alPkj39dAlr+jS7I+IOo8Bd0zpAFxEfZykEOCt1XZS6Lrs5YWpfCxL7JtIXGm/WUgS3fj7ckxvmb3zv63eMypEzhe/wNOOPLeGP1mSZRi1DsomUMIoqnjm1llietr2rwVf6/ukf2Hl6U/qMZVfwahqKEqdg1VY1DwMnj2mbL6/+NB+UahGu1KIMYV6I/uiwsd5+RsFbvyNFqU2cvFlwbNFv5Xgtx33p3vA1RawbU3NKgOQkt06dxAf5oLTcLI4dGRfDv8Gqk8SO+Oc9/2ZHAa+M1S+NsyFIr6d4GvTO/NIiPBI93jQByOdA3roy2ZBG9eSuSZmurGtTgsstVmWHGUqyyVNdPlLkyXSGRChRUx4r/T5T9h3yB3493gAgjEWS6MZiziGo3FYG6Y350xionWM7F9WHhxJ1SpcHym5Sd8/i3Nk62nYLiUfoJoQ== X-Microsoft-Antispam-Message-Info: RtjucZin9lBpFypPll/0t/fwo7eZhMYsZLyMx8Tm8crTcHnxST2BYDVsmDRzff9OIeFdQj6bF+U19Hsm9lbgVTonI6s8cAai61chGpUQEgqxhu6n0ks1aFP/pI4ClosfzLj4RVHXC5FuUkvDsJe2EIF9rzUrXJLfAxWPga4V7VObBwpf7xJPeWPSb0pIaJd0 X-Microsoft-Exchange-Diagnostics: 1; VI1PR04MB3006; 6:QckWVkQdTc/wCwVzcZU0dOnb/Sl0SD0NRKeIBN4T0mbFPA0eCun8ieYXytU/F7mJeI6g7bcKmYZnj9yqwGEQbHBTVpJmK3/MzrNU3F+g6AjoWYN/HnxXUh8VhIy/qHUb04ACr+HsMMJL6UV1TYeCktr1bgCNBS3sqgBSVt2zgvywRl6ZL2gmdEVCWtCc0G+0Yw83LGsPg8uwzcUSrxBpE6zXSdhuD9wzvXddA5QArgHGqwcdoKF4vRqSvlR1ZU1l5+rv+nT4zfN3NOwYrOnPjDBXkJFw3CTRWHEtZyr7c++zpM2MpPDPZxTYDcajGL31XMhMO+HLZEj+G/D+4sLL/TpzTc6x+LW6i5NWeP1SjEOxlFcyzmFJD3ZJR1pom0kBJzUg5VQefW3Rt6/5dmJcT/CQkdIaHBwTeZzZTKDc0yJe/wvaF7GISxsXzyosZa2wQFcBxxLFH+WgE7DTnZ243w==; 5:EpHfPn2yTqov3BMyZS7SIIxob2f/fAhYtZPm4cF0esIRKzqbMpD5aWUR/vHDTwoAcse/1tEkABXF0KG3yd3M/w8L2aRIcoVU7I3NGYcKAhgX6OousVTPrw8cgthroy9EaTH4EqgHKCMrL//2MDfnZ8hgdwb9yQhNiLolJMqXhuw=; 24:UoEo5ysK8+fqFf34rQL/vUhx821Z9xFPaQ75FIUfLB8kHjEToRj7oPzSrXVTB1hMh/uEXAM9bxuCHxWD63kpHdzaF76P+NFqHGLfJcGmkcY= SpamDiagnosticOutput: 1:99 SpamDiagnosticMetadata: NSPM X-Microsoft-Exchange-Diagnostics: 1; VI1PR04MB3006; 7:wQXHRBHDu06C46aNWHnYyPOXB4qYG78ga7Q0rnZtxV94mpBWH4v5KwIwD5jLLgb8x5BzFqs2sI1+cHkIwM7VvMU2dkiRGDJPU5tHGEl5oXllwwBRGVNzgw5JfDFKxzyvfwG6FiUqXf36Bq0ISRPl8Fq5v/4FLpPWnKgN2ph6J+NUO+o4/CxOPYfZvmFCyMH4Kr0iLEs7qsax63+MdARnsabCDOHB9QSe5LJ+yEN9hQt14Bf0H+28INMeCDbrLtOQ X-MS-Office365-Filtering-Correlation-Id: 2dbbf39f-054d-4c05-ad26-08d5c495a302 X-OriginatorOrg: nxp.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 28 May 2018 12:22:08.7450 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: 2dbbf39f-054d-4c05-ad26-08d5c495a302 X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 686ea1d3-bc2b-4c6f-a92c-d99c5c301635 X-MS-Exchange-Transport-CrossTenantHeadersStamped: VI1PR04MB3006 Cc: u-boot@lists.denx.de Subject: [U-Boot] [PATCH 12/41] imx8: implement mmc_get_env_dev X-BeenThere: u-boot@lists.denx.de X-Mailman-Version: 2.1.18 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" Implement mmc_get_env_dev for i.MX8. Signed-off-by: Peng Fan --- arch/arm/mach-imx/imx8/cpu.c | 34 ++++++++++++++++++++++++++++++++++ 1 file changed, 34 insertions(+) diff --git a/arch/arm/mach-imx/imx8/cpu.c b/arch/arm/mach-imx/imx8/cpu.c index 7aecaac356..fa32a9362c 100644 --- a/arch/arm/mach-imx/imx8/cpu.c +++ b/arch/arm/mach-imx/imx8/cpu.c @@ -163,3 +163,37 @@ enum boot_device get_boot_device(void) return boot_dev; } + +#ifdef CONFIG_ENV_IS_IN_MMC +__weak int board_mmc_get_env_dev(int devno) +{ + return CONFIG_SYS_MMC_ENV_DEV; +} + +int mmc_get_env_dev(void) +{ + sc_ipc_t ipchndl; + sc_rsrc_t dev_rsrc; + int devno; + + ipchndl = gd->arch.ipc_channel_handle; + sc_misc_get_boot_dev(ipchndl, &dev_rsrc); + + switch (dev_rsrc) { + case SC_R_SDHC_0: + devno = 0; + break; + case SC_R_SDHC_1: + devno = 1; + break; + case SC_R_SDHC_2: + devno = 2; + break; + default: + /* If not boot from sd/mmc, use default value */ + return CONFIG_SYS_MMC_ENV_DEV; + } + + return board_mmc_get_env_dev(devno); +} +#endif From patchwork Mon May 28 12:24:58 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Peng Fan X-Patchwork-Id: 921496 X-Patchwork-Delegate: sbabic@denx.de Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Authentication-Results: ozlabs.org; spf=none (mailfrom) smtp.mailfrom=lists.denx.de (client-ip=81.169.180.215; helo=lists.denx.de; envelope-from=u-boot-bounces@lists.denx.de; receiver=) Authentication-Results: ozlabs.org; dmarc=fail (p=none dis=none) header.from=nxp.com Authentication-Results: ozlabs.org; dkim=fail reason="signature verification failed" (1024-bit key; unprotected) header.d=nxp.com header.i=@nxp.com header.b="rplIv8j/"; dkim-atps=neutral Received: from lists.denx.de (dione.denx.de [81.169.180.215]) by ozlabs.org (Postfix) with ESMTP id 40vbrS0Mr7z9s0q for ; Mon, 28 May 2018 22:33:59 +1000 (AEST) Received: by lists.denx.de (Postfix, from userid 105) id AA632C21E2F; Mon, 28 May 2018 12:25:25 +0000 (UTC) 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=BAD_ENC_HEADER, RCVD_IN_DNSWL_BLOCKED, SPF_HELO_PASS, T_DKIM_INVALID autolearn=unavailable autolearn_force=no version=3.4.0 Received: from lists.denx.de (localhost [IPv6:::1]) by lists.denx.de (Postfix) with ESMTP id 48BDCC21C8B; Mon, 28 May 2018 12:22:38 +0000 (UTC) Received: by lists.denx.de (Postfix, from userid 105) id CA735C21E16; Mon, 28 May 2018 12:22:19 +0000 (UTC) Received: from EUR01-HE1-obe.outbound.protection.outlook.com (mail-he1eur01on0062.outbound.protection.outlook.com [104.47.0.62]) by lists.denx.de (Postfix) with ESMTPS id 8C301C21E2F for ; Mon, 28 May 2018 12:22:14 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=nxp.com; s=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=ZjpO2AI8TqSn9Lxw6uJcd0B1YX8t44ecyBHKEgm9Faw=; b=rplIv8j/g+T8oALNiv4GE/K1+5s/TLZ7fEKpj8mxgn4id+sMoLwg4WjpURFQpnskpsuUCNTFWiCPkKx0qGzuglHkYPcHXfFtuZKTRscVYU/6B4Y9Ow6WsNjvcJ/Yb4fStWtET9ZfvCn49krDKKqQlcJ1zubaQHr0EnBo7pyWIkg= Authentication-Results: spf=none (sender IP is ) smtp.mailfrom=peng.fan@nxp.com; Received: from linux-u7w5.ap.freescale.net.net (92.121.68.129) by VI1PR04MB3006.eurprd04.prod.outlook.com (2603:10a6:802:9::12) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384_P256) id 15.20.797.11; Mon, 28 May 2018 12:22:11 +0000 From: Peng Fan To: sbabic@denx.de, fabio.estevam@nxp.com Date: Mon, 28 May 2018 20:24:58 +0800 Message-Id: <20180528122526.20597-14-peng.fan@nxp.com> X-Mailer: git-send-email 2.14.1 In-Reply-To: <20180528122526.20597-1-peng.fan@nxp.com> References: <20180528122526.20597-1-peng.fan@nxp.com> MIME-Version: 1.0 X-Originating-IP: [92.121.68.129] X-ClientProxiedBy: HK2PR02CA0175.apcprd02.prod.outlook.com (2603:1096:201:21::11) To VI1PR04MB3006.eurprd04.prod.outlook.com (2603:10a6:802:9::12) X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-HT: Tenant X-Microsoft-Antispam: UriScan:; BCL:0; PCL:0; RULEID:(7020095)(4652020)(5600026)(48565401081)(4534165)(4627221)(201703031133081)(201702281549075)(2017052603328)(7153060)(7193020); SRVR:VI1PR04MB3006; X-Microsoft-Exchange-Diagnostics: 1; VI1PR04MB3006; 3:S0SllwNQuI1MMghi14h33v+k1Pr+sjzZkBRIgX+sw/ZuFKw3GQoKSEaxkfnhoCzvo3mtnXxREYhYhzuMRBx0KUITDrmAOfKVVWVscfd8RdhcIL+i9ruXmN6QfVOJL6VS3R3SHdEuYhqoGBK9BK14xahIlsF5Kf94BRryPAbF9x+8xHaR02pOKRXVY6U5F657NL2ikxxwAeqmET+mb6dV5vMd7xy9WRljeHze3iJRdxKtHWRhfKQiq5SObQkNPKPb; 25:qouly4+ITUVh8vuakzRITrtHDNscfRNtuOaxrQTQ6gmguPQmss+tVy+GzxNohgC0iELqwgTWUMOcLhCG4HNGi8XWyLQFmhSaPTsE/IbFOx3EsyMpFGfdDbla/AAdnK1rObf9njjlhB/81GwfOwHCUsy49vIYl2wf1fv2R6Ks4Kjd37Hij85qwhnZSmXnwTxSxuGqFEDr/9DyEuJ439FG5cQvv70DmlNn77kZflocfMgzKZHFWNpEcXJ5x08SV02uyQEabdTC7SLY4MKHikpjN97ILjUN0/fEy6+kpoEagtUwIFBW92x3q6NeDixJDy30u5vYYuRCEd0RkCSiLc1Gqw==; 31:KjuPGZYqb/8R0OJf4I0PNJUC5jVR9wieQ87Lun4MbLBiM/nigKjCXq14KlXG3+tpFvpKAnDqnzs2aUCwILuHSGZsbTaCpUuTHTSCia0PremyGDpgbua3XnUQmVT94f6JLCi1lTFnop8xF2+ISWQ2fY2PwKmBAF7gV5Nb+TnoumQlpAnsGLhrbBtHGGoirazW/PYvh+F6EkA/5cHz3UA3rJtJbhJ6j7TkVkO/OfSm9Z4= X-MS-TrafficTypeDiagnostic: VI1PR04MB3006: X-Microsoft-Exchange-Diagnostics: 1; VI1PR04MB3006; 20:l3RTMl4zebyFekxjNXgTT5c11j8oJl/dfXWcU0s2EP1mHXNkW+Hidq9rKnod40TiBFligDfmDi3bCfWvUBSlnrpQwBHutMhnCgHEHloqc6HFxHmvrp6cPoItu7S9BsX5Z5quKfIiqcO3v6EzLP39/VgDx1Vmz/KlidYVW6feFqoiDlTSdyht+hJBYGEyec5DNz7aUI5uXRJBIun2/U2WhNik+WF6WRd9xXgPVgT9bPDQdQKlsHMzGq4PWQrLaVHkGbR3Vhhlp9Rgm+XPzXuTnHAcmJXm91aKHajM6sZRyoQZEQ/Ch3hlpNzr5EJxybgb89lg+UGx8fqovIkODZ82sUBd+u6OT1E6A7IOwsXOIP/btbgq3uHDPrsud+KJlKwdiOU/yI4fMffTYpllXkV9Asu9cV3sBX3K0aHZqdYSY7H0AiYveppYpSQf1wJYGcsSxe3SbK8hHmzPh7I5yxc4Ds8NmimA7u2JLBT+L9mA+cyBW7cpTHGxUpQr7QIPZvwJ; 4:LyfDRJNuGuorfBwBpsqIEN/JifppKL6mQxIs507qJobI1zQ6PwE7fl/77eRLghkfYtxO/qK3Y2WU/UUaWZsJlwldBMyLPGvP3IVSxYOecq80bI9wXNgnoeQu/usw2sftk2ALjrHUavisBctSd6Act1ZCopj+DCEihe/Z1TNZTcr3ONZNXfwxm9z4gpRcosSOCgb0qtYxB/Gk9KDhsZvORP3nFqfajlBFgheWFbGMbx04K0sLcbr6Tfa0ZfZeWRtcZDe1fnoM8LrAciF1XmrtkiIeUwKDrgC7r0VEon6YMswcrMrKd1f9Gpl8VEXgC72a X-Microsoft-Antispam-PRVS: X-Exchange-Antispam-Report-Test: UriScan:(185117386973197); X-MS-Exchange-SenderADCheck: 1 X-Exchange-Antispam-Report-CFA-Test: BCL:0; PCL:0; RULEID:(8211001083)(6040522)(2401047)(8121501046)(5005006)(3002001)(93006095)(93001095)(3231254)(944501410)(52105095)(10201501046)(6055026)(149027)(150027)(6041310)(20161123558120)(20161123560045)(201703131423095)(201702281528075)(20161123555045)(201703061421075)(201703061406153)(20161123562045)(20161123564045)(6072148)(201708071742011)(7699016); SRVR:VI1PR04MB3006; BCL:0; PCL:0; RULEID:; SRVR:VI1PR04MB3006; X-Forefront-PRVS: 06860EDC7B X-Forefront-Antispam-Report: SFV:NSPM; SFS:(10009020)(366004)(39380400002)(396003)(39860400002)(376002)(346002)(199004)(189003)(36756003)(97736004)(6636002)(6666003)(68736007)(86362001)(8676002)(44832011)(8936002)(81166006)(81156014)(47776003)(11346002)(956004)(2616005)(476003)(446003)(25786009)(486006)(48376002)(106356001)(105586002)(186003)(50466002)(16526019)(2906002)(6512007)(53936002)(1076002)(66066001)(26005)(51416003)(478600001)(305945005)(50226002)(6486002)(5660300001)(6116002)(76176011)(3846002)(16586007)(52116002)(6506007)(4326008)(316002)(7736002)(386003); DIR:OUT; SFP:1101; SCL:1; SRVR:VI1PR04MB3006; H:linux-u7w5.ap.freescale.net.net; FPR:; SPF:None; LANG:en; PTR:InfoNoRecords; A:1; MX:1; Received-SPF: None (protection.outlook.com: nxp.com does not designate permitted sender hosts) X-Microsoft-Exchange-Diagnostics: =?us-ascii?Q?1; VI1PR04MB3006; 23:vQBZJ+puVfOj9t/flDOGX9iqhLZ209m2wnhkpI2iV?= 4mQI00WKNy7NFrac0OuU89tGSM8OyFwRwx/edgw9m/mOCmCmvUIjsxvWzSXUeHIzZtW6s48QqvxnBdiEf9beVikwu7yj0BrFY3im8f3mmkM9UdhCD5Xcm1JKVABJnn6SWhA4D26NORVkOyhdGZxF9KqdrCsaA3vz3bIt06IO/gEtz9+nbvECyVqmuPGxT4nWh+X9pr1/AZcCYwpNenQdia7GO6cG5aUj1uLjiycd/RLqdY7018Dd7yiUPQixyviAsunbiwaP5CnAJgl1MrnnMn0c8TDo2QeAooOG5Ypwk9nvDQR2fWwjph8z15nimrJU8iWjBpQhVeT8Rfkd4XeZUVJgJsSHk9hg352FMc913cke6cgWevAGZt1z10/vG7Pkm3QKWXNxbERLYM97bESnlMdINpqKAGA4j5ELEiFpTmuF7HcsajvlMkaXV3So3Oyn0b3Df2YlYepapv63KAaIKDf4N+FCif2bt3TNKW00rVqoHAQc8z4k4TE01s33OK/61idoABTo+huRZleHyYEX4XQuDKR3YjqlZmGY73qhAHVB5OGDl65Y30wkP+ZGGz539xdBEaVa1zNH7qE11GB+TbDJ3gcU36n+SSdHiQPwwggY3z8eNYoger5fD5fXu1jw6/uuIBjokpCu3MX9lLtEED6wsZECyB74jW1x6u38kpSPPUXmt8nyTsrGTxhWq8SfE8qa8KyOaEjO2GwNu77LgfXteN0JRRCNO5e7EPFxo1ukyqDUXQwkLG4hbCtmKwyg5+Ly3OM906l7qqbCg9sW9cnP7LPDr6LqFuUnfvqTGNxWLCHdwd0S9axNdMn3HJIMWjvUWPnH5bc581qJzKuqvRNm54qCSC79acj7/CSGl9cHQM+fZXobpVAGmtjy32YaxI1SF1JzddpZMOVWICWu5uxHp6tyo/7fIA2o62RnnBWxYW7oRbB2riY1Ayc2Ta5TTPtnDo/ESXAWcFhb5sBQpxWFO9MGZVpv5I1++PYb2X6a23oj4VHWLEbeTKkHsj2ppwqqCWuLQQnx3KBvhzuTFhTruZBoiw4hfU/mJ/RpLOdR8c9n00nA1y28jqYPkCf59IPyFyD4CpickOH/XQu5yCjqaU9svViQuICpi+0/drZDqVXRrIpTddy3JNNkbZvyawTARjj7y3APnzn08TvxF9wG4ZyKhAiAra1CfaboSp0RQ== X-Microsoft-Antispam-Message-Info: K3Tj//8oBM42SvOYQ8EoSLgejdxIZC1N4b3215xI+kT4BaWM0GR5PgEDfwKzDrF3Q2It57krmaSvqKb8pDyu9ztsEeT5QvyMgF6ThP9SY2I1w+hlq8G2smJpdhM2Bm2bl6ojz1mmFMD6EukpFXOlRIWZk9K8VXNQGYB4euaa9ZopBlvXjkFhY1Qx8KFg14Xo X-Microsoft-Exchange-Diagnostics: 1; VI1PR04MB3006; 6:1WLZ/Y8LJMe5bK3YWWncEKBnwuXTZXkBhDCNP4exbYWE5i1/C+m2jFlMbY3/HF0vy54ZQo8OngHccqzKzilOKIMcPxku2IH0wynuIGOAK/PvOWa0dKgNx7NhdUI05tTYkdEirNmQ5WiwfOqGFruqaaYmt/yJD+/KuLRjBSMaU/dBcgQeD5JHZKxCCd2zQelnTTmLN8y3OE9hBmhR3HmyrpfGBgIAgEbUf/iF/l6wXSjycN/PVo7ab4umRjiNbVoISr4oOg835QDe+60GvwuWcXOQO/d9rHsslugCdbqwvLTV8a+vZGDYVAly1pK85BKDVqEB8zYc04kLMRKQBi5gwbwLzh4IHCcojtIbe/qql1k3bYh7GNODU1TLFGnEDF3QKpwEqwId0hi+SXt0QgaWhxkvAZUIMq/1vGqlGF3q9sabMN6Y1l9lum5ok9LYHhJgJwYN3iYDnDULk5LhkNGT/Q==; 5:j2OI9040OimkbAUDVHPF9bs48mFb0nHaZbTDSsXlFachQryTHq1F51rlqpaRcg+E+mB9NDBG8RZQwemyr5c/Y4JXfzkWNUwuAyB3Cm+o5jZmm1oEcmhavBSpT213AEd67cpp0Cz1fZgtBBYrPGar+k4uRtXGuPzOLtv4iurphM0=; 24:/hiWWYvikDeTcNfTHQzHSBgQ7vuMzgCncCYQ+x0EKUyliolefiKy2k1oriF68NthhVPgl5VtloG2bbcEybBogQx03GnNsLQoMh3tG75Gfqs= SpamDiagnosticOutput: 1:99 SpamDiagnosticMetadata: NSPM X-Microsoft-Exchange-Diagnostics: 1; VI1PR04MB3006; 7:PzTw59/Ug1v36qnWFKMz0aA/5FoJqDpfaRQiphK3RgSjAlh5HjnAFEN3T0q0NUk3KtGomLDP8qhwYsFIFG9OuVIBHLKniBhx6oLlLhq5fxuM+I/2G+/Wz0yGse9W5n4qJmqq94WLUu+bO2q9NCUsMNOVm7AOaTBv9tDRAmHI41AHXgSUyegolX4/ib+L5BVo4RLtQW7EUK1CufoHhJt72Cdf+kd5YvEdGQXYRixCglaO8vm83qKtO6XV+VqG2HyQ X-MS-Office365-Filtering-Correlation-Id: 6e3bfa58-4cdb-44ac-ea18-08d5c495a4a3 X-OriginatorOrg: nxp.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 28 May 2018 12:22:11.4794 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: 6e3bfa58-4cdb-44ac-ea18-08d5c495a4a3 X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 686ea1d3-bc2b-4c6f-a92c-d99c5c301635 X-MS-Exchange-Transport-CrossTenantHeadersStamped: VI1PR04MB3006 Cc: u-boot@lists.denx.de Subject: [U-Boot] [PATCH 13/41] imx8: implement imx_get_mac_from_fuse X-BeenThere: u-boot@lists.denx.de X-Mailman-Version: 2.1.18 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" Implement imx_get_mac_from_fuse for i.MX8, this will be used by fec_mxc driver to get the mac address. Signed-off-by: Peng Fan --- arch/arm/mach-imx/imx8/cpu.c | 44 ++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 44 insertions(+) diff --git a/arch/arm/mach-imx/imx8/cpu.c b/arch/arm/mach-imx/imx8/cpu.c index fa32a9362c..2b58f510b4 100644 --- a/arch/arm/mach-imx/imx8/cpu.c +++ b/arch/arm/mach-imx/imx8/cpu.c @@ -79,6 +79,50 @@ int print_cpuinfo(void) } #endif +#if defined(CONFIG_IMX8QXP) +#define FUSE_MAC0_WORD0 708 +#define FUSE_MAC0_WORD1 709 +#define FUSE_MAC1_WORD0 710 +#define FUSE_MAC1_WORD1 711 +#endif + +void imx_get_mac_from_fuse(int dev_id, unsigned char *mac) +{ + sc_err_t err; + sc_ipc_t ipc; + u32 val1 = 0, val2 = 0; + u32 word1, word2; + + ipc = gd->arch.ipc_channel_handle; + + if (dev_id == 0) { + word1 = FUSE_MAC0_WORD0; + word2 = FUSE_MAC0_WORD1; + } else { + word1 = FUSE_MAC1_WORD0; + word2 = FUSE_MAC1_WORD1; + } + + err = sc_misc_otp_fuse_read(ipc, word1, &val1); + if (err != SC_ERR_NONE) { + printf("%s fuse %d read error: %d\n", __func__, word1, err); + return; + } + + err = sc_misc_otp_fuse_read(ipc, word2, &val2); + if (err != SC_ERR_NONE) { + printf("%s fuse %d read error: %d\n", __func__, word2, err); + return; + } + + mac[0] = val1; + mac[1] = val1 >> 8; + mac[2] = val1 >> 16; + mac[3] = val1 >> 24; + mac[4] = val2; + mac[5] = val2 >> 8; +} + int print_bootinfo(void) { enum boot_device bt_dev = get_boot_device(); From patchwork Mon May 28 12:24:59 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Peng Fan X-Patchwork-Id: 921509 X-Patchwork-Delegate: sbabic@denx.de Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Authentication-Results: ozlabs.org; spf=none (mailfrom) smtp.mailfrom=lists.denx.de (client-ip=81.169.180.215; helo=lists.denx.de; envelope-from=u-boot-bounces@lists.denx.de; receiver=) Authentication-Results: ozlabs.org; dmarc=fail (p=none dis=none) header.from=nxp.com Authentication-Results: ozlabs.org; dkim=fail reason="signature verification failed" (1024-bit key; unprotected) header.d=nxp.com header.i=@nxp.com header.b="HO1d+JU0"; dkim-atps=neutral Received: from lists.denx.de (dione.denx.de [81.169.180.215]) by ozlabs.org (Postfix) with ESMTP id 40vbym06jSz9s0q for ; Mon, 28 May 2018 22:39:27 +1000 (AEST) Received: by lists.denx.de (Postfix, from userid 105) id 94628C21DB3; Mon, 28 May 2018 12:26:10 +0000 (UTC) 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=BAD_ENC_HEADER, RCVD_IN_DNSWL_NONE, SPF_HELO_PASS, T_DKIM_INVALID autolearn=unavailable autolearn_force=no version=3.4.0 Received: from lists.denx.de (localhost [IPv6:::1]) by lists.denx.de (Postfix) with ESMTP id E992DC21DCA; Mon, 28 May 2018 12:22:47 +0000 (UTC) Received: by lists.denx.de (Postfix, from userid 105) id 315A9C21BE5; Mon, 28 May 2018 12:22:21 +0000 (UTC) Received: from EUR01-HE1-obe.outbound.protection.outlook.com (mail-he1eur01on0086.outbound.protection.outlook.com [104.47.0.86]) by lists.denx.de (Postfix) with ESMTPS id A4BECC21DF8 for ; Mon, 28 May 2018 12:22:17 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=nxp.com; s=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=OSm3sQu+dZCj/5DkX/2mi8Z8j7HVUnKB3DVVr1fCNiY=; b=HO1d+JU002G8jBGSH4ObO85LNvsvS1TDsufxFREqzQ52YKffoyk6x+RyN0TvnYhDAycpOBgPHH8wd7QwDU5KxihZ1Yi0BaAysKvf9eshfD5R2+TCG2+uVaE7+zAEFwqHN4eDujCG8uxC07pr37KzeDbsvtkd/PTBw0dDvcCQUmM= Authentication-Results: spf=none (sender IP is ) smtp.mailfrom=peng.fan@nxp.com; Received: from linux-u7w5.ap.freescale.net.net (92.121.68.129) by VI1PR04MB3006.eurprd04.prod.outlook.com (2603:10a6:802:9::12) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384_P256) id 15.20.797.11; Mon, 28 May 2018 12:22:14 +0000 From: Peng Fan To: sbabic@denx.de, fabio.estevam@nxp.com Date: Mon, 28 May 2018 20:24:59 +0800 Message-Id: <20180528122526.20597-15-peng.fan@nxp.com> X-Mailer: git-send-email 2.14.1 In-Reply-To: <20180528122526.20597-1-peng.fan@nxp.com> References: <20180528122526.20597-1-peng.fan@nxp.com> MIME-Version: 1.0 X-Originating-IP: [92.121.68.129] X-ClientProxiedBy: HK2PR02CA0175.apcprd02.prod.outlook.com (2603:1096:201:21::11) To VI1PR04MB3006.eurprd04.prod.outlook.com (2603:10a6:802:9::12) X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-HT: Tenant X-Microsoft-Antispam: UriScan:; BCL:0; PCL:0; RULEID:(7020095)(4652020)(5600026)(48565401081)(4534165)(4627221)(201703031133081)(201702281549075)(2017052603328)(7153060)(7193020); SRVR:VI1PR04MB3006; X-Microsoft-Exchange-Diagnostics: 1; VI1PR04MB3006; 3:bdYNIvpT381hGeZcr+Stg+bJ/U93+a8yHK4pakmJCTkHaLTGTuZL90F2DcIUkKUTl/GpArn8EJUEXRPiW1L02W61XlZ1cFQFN8zXkVXAqojfZTqH6a1QVES12IGATMDE2M4S6oeGXkgcSeIaonQjOLwEXmmZ7Z8TjEjCxQeqL/tC2KQOyK9EeQSViRX3v95FCeLoFb8crPzka5Qrg8hD8EieRmdFWNsZMRxoj6Yz8/u7CeGn/aabFBdIYhd6s1A0; 25:BwIW+WhJOS0jMZHATyZWi16VwYXUhmIINZFmFUKAJ2GWGpWZr1bgV3Cn4lngT49MSpn42rW8iTuFdw+83YysssLrwuYeO+lWveXjmkddW674ciNNPq33TWVYmPmsCcQLgQ8GQiDhOirsL87JOvycMEBJdLVU+tTxj9facJFA5nqM2xhgGqCzqBzl4WCzF8vb3+zkXdvP4f5G+xo/W+DK4MayCgcQsjvtJuS/GjMXtmIO6AyHHvfk1X12p94GcVIrXs2L9/c6eIncmP0YORChJd4z/a2GhGo5zcAgqkcIR/+RbIkOGWLi0YEJ6LAg8PfvUbZgPNpOPGja91xuME6VoQ==; 31:fW+rOoH9yVMkRi1g2RySCIS9hIsgiqm4VnLdLpv22VIs/Nj38QWKGkUipYEin17QF31KwKnM06glExA+sd3eYmdvCXEnToysKq3YESa4E+d3ZEk7ahl4bXVjhuMeS5ge13PuLpGfqFVPs7+KKsYDfrmz4jmStm0MZbDOwdJIeUX2lEtF9OljhG872YvANbTuKeAA5SUOYwvhK9y/379mHUiYG5zi24Cf+ZuPIP8Xw6Q= X-MS-TrafficTypeDiagnostic: VI1PR04MB3006: X-Microsoft-Exchange-Diagnostics: 1; VI1PR04MB3006; 20:K+ucCVsRbtl34zriZ6+AWltyKvCgbqbqq/Sq5PQbeFgOBMtZk6rGyARzRUVhVGpJ5bSqCW3GIOIPg4CD8X5EEGMR4J7JhGnOYORcxjkELFJNWaUswLYuVsET/vzC1jTB8DBAb8tTYe8i1YCdEwEx8RlAKpMCbtD7ALNPEJBVn3AYhe6w0n2slmTYEyi6T0zhWw00kYuu+Kcm8OSslAaPuLXW/YeiPxLTSssGjDrUHL1LWCKXR0FBSe9ADeg6izxj5m6MqjsGGXB88JJYH4cR6cWqFjOa+4E22AWNYe2p3a5q/j2hLreFbcAKG4L4XJZnYxzFrBx6lywGvG0H/x9UrvS910yVDMG0v7GggWVyN5RCp4tl4XUvNbh4GA+gE8BmO1yAEmqawWkilEcYHFq9kSukTDPsgu2vWqeGLiJ/6NxsLweSpD01UAoIhxunTnfF8ua8WPWGqArJkiQebkCxjv0FReuYBObpOcPECQbE0prgofdJEoOvKz6BGERBsnnw; 4:fDmQlPggFFt4FET4D5Iv5oTF2oYqD2a9rW0BKuKFcOdXXYcHi6vwMIr06fTyI+pKFsQQXrRzjMTSCr3hOmoKoPKWNzrxpCsrMzkGN78lUleEB02kAGgICA2AaKDdTVXaKa7yBwaFQ9ayNuVvt1x9hYqfzqS3N/VOHWaEJTRNd/ZRP0CGjX8eTYfF7eqUimAdKQWsrRykwaPnH02Y+iZb/EVY+qL+Du8yN06mKV9WYgB8oerrkAry0daAZSPFtseoOkw4Xwa5tNPzcgg4bi5ifajNv2RvcI+lbj2r+Uyy8e5J5klPPfBB90Om9Gvdlpsl X-Microsoft-Antispam-PRVS: X-Exchange-Antispam-Report-Test: UriScan:(185117386973197); X-MS-Exchange-SenderADCheck: 1 X-Exchange-Antispam-Report-CFA-Test: BCL:0; PCL:0; RULEID:(8211001083)(6040522)(2401047)(8121501046)(5005006)(3002001)(93006095)(93001095)(3231254)(944501410)(52105095)(10201501046)(6055026)(149027)(150027)(6041310)(20161123558120)(20161123560045)(201703131423095)(201702281528075)(20161123555045)(201703061421075)(201703061406153)(20161123562045)(20161123564045)(6072148)(201708071742011)(7699016); SRVR:VI1PR04MB3006; BCL:0; PCL:0; RULEID:; SRVR:VI1PR04MB3006; X-Forefront-PRVS: 06860EDC7B X-Forefront-Antispam-Report: SFV:NSPM; SFS:(10009020)(366004)(39380400002)(396003)(39860400002)(376002)(346002)(199004)(189003)(36756003)(97736004)(6636002)(6666003)(68736007)(86362001)(8676002)(44832011)(8936002)(81166006)(81156014)(47776003)(11346002)(956004)(2616005)(476003)(446003)(25786009)(486006)(48376002)(106356001)(105586002)(186003)(50466002)(16526019)(2906002)(6512007)(53936002)(1076002)(66066001)(26005)(51416003)(478600001)(305945005)(50226002)(6486002)(5660300001)(6116002)(76176011)(3846002)(16586007)(52116002)(6506007)(4326008)(316002)(7736002)(386003); DIR:OUT; SFP:1101; SCL:1; SRVR:VI1PR04MB3006; H:linux-u7w5.ap.freescale.net.net; FPR:; SPF:None; LANG:en; PTR:InfoNoRecords; A:1; MX:1; Received-SPF: None (protection.outlook.com: nxp.com does not designate permitted sender hosts) X-Microsoft-Exchange-Diagnostics: =?us-ascii?Q?1; VI1PR04MB3006; 23:k9BG/bEk/WIrw4RNMa84OMB+9ZrThmEyuGg0LXmHe?= jE7JU0BZ9LzzS+oxcppkn6xNZnwCflTRoGbnMBTHFLdzHMPR/S2RK1LP7/p8+m6s2pifxZ9DEnWp8cK+ilYC/tYSWe569c305Xm9rFpHbZBc5FqS27HgMmoDXHwHuz/MRC7Hc4DIKAILzmcPX6rosec6/KFm+J9bZeNWzNtzRLmg+HyvSeQzznxqPPiDSqMAFB5W1c1dGMIt97kY5v7qOXvEiJZcRz9DtHEHcpqitePylQnB2+wf2uA4yxquTUVwe4gUEekPyVdh2JMmqSfLKIogmMmmAMQgzeZ5mK9VZw+tgoKiyHoL6a88G70CYaz7dXic8YewWwV8+qpKK0SBZkwiB6CMhzfkK5P8YIVG5YCmwj5OEYalGfmeNE+zayL5xpZ8ofO+8pDQ8SNRB1m08xs/lVxibVLkhEdnju9nwwLcnHWMcU/j208ZB+49BuMw5qN9SOOjM8/uxU89lu5i6o0SWmEDSr2mTRklynTsT4WLAMfrfYdyJeHLOZZAa1deVEnWXX0crjffpgz0A7/RlcrZJDzz9s1LuDn43FuZvheo3iF4LTGlycnlfrGnI11EoY6mjyUcX/Oz+Ehj9uitweYeyKRRSynteqn4IOmTZ5dUPSMhUVxm+6m6gxyzWeAcBE85s9HJfLInr8l4Y6Eb8opegRKSvcvlMPMTsrDlisPJ69vdjIyYQLEfkFfuR5/qULuPC6adjA77+P6mYGAmeHPU+G0NDUo+kDb7qxlN/PxcJqXEIgdKIclSkC91Gy0HpQCCh0UmsHkxv/5patPtfFg6cq/BJo4Xds7VSi65qeWJ0Tlf33jsTdYzpEx4S3nH5vm9BAP5IEi/Ku6cCn69id6OmWrYSq4yiUTDOylm9fjHsoQBvDpWf93iLomLQ7BNUTALKUDnTpnfZi5fvHJEoy4QoqlPGvNHdhNm/tB1ZRrymuP5lhxq8IK/IlFxwiQmcW3pXC71usqKpP+3O0lJwWmMqq/EkpcYyNM/2MPgR5e4es6liTAJOcZdlX1F3tAqHw2t0O7AATyGpA5xpC+mJg60dMkXSph1z5Z2hoRpoft/U76Lu8L0hN3u9q9Jf+eVcu5MMRNtlqmCqZle1buSmP/9JcoNSJF18u35V+Gg6YWVFt2u8hMBxg8ydGrio0xXSCO+PdZlLvFdPIpOvDN/uXmb/vtA8kJIt5sjqCwva9F5Q== X-Microsoft-Antispam-Message-Info: KmvyUCM1Ia4pWkPjqmqIdDBKWxYFd7j5K7nIGrvBYPDtgQEY0rf20p7c3Y0x1anGljD3QEM8AsC2lY2SzZM6vcGQk/o6z+FMuC7Xmm7mGrAXGIPWQq9cGdSBAafXtOh5B6JkakacN4MJ5uwmbYWdI1RBeQReqm3CywlcFZpKhzPMlkwT5evoMBSp57XqOG/k X-Microsoft-Exchange-Diagnostics: 1; VI1PR04MB3006; 6:Rn206GxEOFe2jG0dXyKX0jQ0VVAlJEZrdMm45M+A2hlZ0JQgtpGSYaMBxOR20NZb7/YVmxol/TmsWO7haDoVxmxUZ0YeTLs69/arRE7CHJ2zTDnusz59ROGDQUVP7/q1EiY+xldb2JBCaoa/BksfPdpD2k8UOjkYaX8f3jVkj2+jy4V1FNEn/mDUtZKaQW0LKu+7b728vRF2+tVsj1O8jfVWfpMQpvhwNvZf5Nd1mnroT3FJA3mNjvEOxBAHv5C+01ryGXNPA9h+VFdDnMQ3Z4wm+V1AbB90Lt0ghP03lC4gkl8HTD6aISovgymEha7fRlfYgiASnLfIkIInpqpJnezvagkso8AzapzhOXAwYZiQ5HwHXP7NtJQDvANFM+MD1JITXenFuEOszhLUqJyA6+t7bmfmaX411nqQgOUnEUUaqmm+tbiu5HDiKu99UxXEFkMH27wR2dsU5X2waRkLqA==; 5:usEN2PEdgqi5YjtdpJsxBRd70ZJTAUMlt1mIlOG4s/uyDwV+oWe2CvLp3TlFVDD5RmpLda8YgoDrSJ39TZTWf6948JumlNBqDOfeotpLeZvaGSwG/NzjndwXuy1Vgr1/RH8ow2vV7ZJ4ASxJqK2M/q1Z80sbWAPMjOq5Egp70+0=; 24:PVJ7OnU3inrWOSw/4GuWkeIZHvDPv1/rDS9mtqCJW4NO78uhRICk94C5cQ4TFoZ/chD7WI9NAc80Vwqt4OcfLhiM5OECa7OQCPyVjAd7mH4= SpamDiagnosticOutput: 1:99 SpamDiagnosticMetadata: NSPM X-Microsoft-Exchange-Diagnostics: 1; VI1PR04MB3006; 7:zca9pYUDaqDJBEsNNfTNeSs1o+fidzWhTjKcaJaQ7+8qFWBEB1Wikz7Klt4IwS3GyPC8WlfTwq+xL46AZj7jJ9qHx2x/nYkAXmlBlVJlboJXhNzLk3swZhpuRaeOwKvlturr0aHAYHMh1AnqJatc36+h67HIUyeuBrd9qzKjIMpE9WY01ET73iEskM/wvYLRVZwLeOj0OtP+iHVDOYSy1Eke39msB1ei3NapZniyyCAyn/A2mio0DQia3ly1slmJ X-MS-Office365-Filtering-Correlation-Id: 22e62820-34be-44c0-7683-08d5c495a634 X-OriginatorOrg: nxp.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 28 May 2018 12:22:14.1045 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: 22e62820-34be-44c0-7683-08d5c495a634 X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 686ea1d3-bc2b-4c6f-a92c-d99c5c301635 X-MS-Exchange-Transport-CrossTenantHeadersStamped: VI1PR04MB3006 Cc: u-boot@lists.denx.de Subject: [U-Boot] [PATCH 14/41] imx8: implement get_board_serial X-BeenThere: u-boot@lists.denx.de X-Mailman-Version: 2.1.18 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" Implement get_board_serial Signed-off-by: Peng Fan --- arch/arm/mach-imx/imx8/cpu.c | 32 ++++++++++++++++++++++++++++++++ 1 file changed, 32 insertions(+) diff --git a/arch/arm/mach-imx/imx8/cpu.c b/arch/arm/mach-imx/imx8/cpu.c index 2b58f510b4..f24ae6ecb8 100644 --- a/arch/arm/mach-imx/imx8/cpu.c +++ b/arch/arm/mach-imx/imx8/cpu.c @@ -11,6 +11,7 @@ #include #include #include +#include DECLARE_GLOBAL_DATA_PTR; @@ -208,6 +209,37 @@ enum boot_device get_boot_device(void) return boot_dev; } +#ifdef CONFIG_SERIAL_TAG +#define FUSE_UNIQUE_ID_WORD0 16 +#define FUSE_UNIQUE_ID_WORD1 17 +void get_board_serial(struct tag_serialnr *serialnr) +{ + sc_err_t err; + sc_ipc_t ipc; + u32 val1 = 0, val2 = 0; + u32 word1, word2; + + ipc = gd->arch.ipc_channel_handle; + + word1 = FUSE_UNIQUE_ID_WORD0; + word2 = FUSE_UNIQUE_ID_WORD1; + + err = sc_misc_otp_fuse_read(ipc, word1, &val1); + if (err != SC_ERR_NONE) { + printf("%s fuse %d read error: %d\n", __func__, word1, err); + return; + } + + err = sc_misc_otp_fuse_read(ipc, word2, &val2); + if (err != SC_ERR_NONE) { + printf("%s fuse %d read error: %d\n", __func__, word2, err); + return; + } + serialnr->low = val1; + serialnr->high = val2; +} +#endif /*CONFIG_SERIAL_TAG*/ + #ifdef CONFIG_ENV_IS_IN_MMC __weak int board_mmc_get_env_dev(int devno) { From patchwork Mon May 28 12:25:00 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Peng Fan X-Patchwork-Id: 921487 X-Patchwork-Delegate: sbabic@denx.de Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Authentication-Results: ozlabs.org; spf=none (mailfrom) smtp.mailfrom=lists.denx.de (client-ip=81.169.180.215; helo=lists.denx.de; envelope-from=u-boot-bounces@lists.denx.de; receiver=) Authentication-Results: ozlabs.org; dmarc=fail (p=none dis=none) header.from=nxp.com Authentication-Results: ozlabs.org; dkim=fail reason="signature verification failed" (1024-bit key; unprotected) header.d=nxp.com header.i=@nxp.com header.b="XoyBXodb"; dkim-atps=neutral Received: from lists.denx.de (dione.denx.de [81.169.180.215]) by ozlabs.org (Postfix) with ESMTP id 40vbln1XBqz9s0q for ; Mon, 28 May 2018 22:29:57 +1000 (AEST) Received: by lists.denx.de (Postfix, from userid 105) id D561DC21DD3; Mon, 28 May 2018 12:25:43 +0000 (UTC) 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=BAD_ENC_HEADER, RCVD_IN_DNSWL_BLOCKED, SPF_HELO_PASS, T_DKIM_INVALID autolearn=unavailable autolearn_force=no version=3.4.0 Received: from lists.denx.de (localhost [IPv6:::1]) by lists.denx.de (Postfix) with ESMTP id 14EC9C21E75; Mon, 28 May 2018 12:22:43 +0000 (UTC) Received: by lists.denx.de (Postfix, from userid 105) id 6A4E7C21EA8; Mon, 28 May 2018 12:22:23 +0000 (UTC) Received: from EUR03-DB5-obe.outbound.protection.outlook.com (mail-eopbgr40087.outbound.protection.outlook.com [40.107.4.87]) by lists.denx.de (Postfix) with ESMTPS id E1EEAC21E2F for ; Mon, 28 May 2018 12:22:19 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=nxp.com; s=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=KWEyVTYboi+JbOD+380EJbpENrNuiJq9uMehVFZCVCE=; b=XoyBXodbTtMcsXjxhq2vhvqGMcRzbYIlKAHErWvuSCqccVkEtB9ugX1pXiBBrqMBy9uVFaY19nGG/DOXeTyl+/fn4okyVxAl4/Xb75lb5+PGIgvUE8UIQCXAFE741Tt0e6iR0XrwLh9M9n9TABEZZiI20Rd6zkH4iDpfaFUSSmg= Authentication-Results: spf=none (sender IP is ) smtp.mailfrom=peng.fan@nxp.com; Received: from linux-u7w5.ap.freescale.net.net (92.121.68.129) by VI1PR04MB3006.eurprd04.prod.outlook.com (2603:10a6:802:9::12) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384_P256) id 15.20.797.11; Mon, 28 May 2018 12:22:16 +0000 From: Peng Fan To: sbabic@denx.de, fabio.estevam@nxp.com Date: Mon, 28 May 2018 20:25:00 +0800 Message-Id: <20180528122526.20597-16-peng.fan@nxp.com> X-Mailer: git-send-email 2.14.1 In-Reply-To: <20180528122526.20597-1-peng.fan@nxp.com> References: <20180528122526.20597-1-peng.fan@nxp.com> MIME-Version: 1.0 X-Originating-IP: [92.121.68.129] X-ClientProxiedBy: HK2PR02CA0175.apcprd02.prod.outlook.com (2603:1096:201:21::11) To VI1PR04MB3006.eurprd04.prod.outlook.com (2603:10a6:802:9::12) X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-HT: Tenant X-Microsoft-Antispam: UriScan:; BCL:0; PCL:0; RULEID:(7020095)(4652020)(5600026)(48565401081)(4534165)(4627221)(201703031133081)(201702281549075)(2017052603328)(7153060)(7193020); SRVR:VI1PR04MB3006; X-Microsoft-Exchange-Diagnostics: 1; VI1PR04MB3006; 3:3qNi348vlePt4t8A0rpDB1RcjaPY/MqLrlPXPxX4wFGpGI3LabCQWKyts4tZLql/qc/Vs2fxZD1F2XNPDlGklDSTt3vzLSg3dGlwBcfAybUOyKyDDWjjupEjAqstOwb/hW5lbSlD29n53lac4PnDD+RcvyxLbCS+adVcajRzwntYfzJakUnx939UFjxVrKNFS4at4pibFSfMdu7iw23GPleafsWTJ8DeMhM2r+8KKFtxTlSYWE9u0eaSx9jLobRT; 25:wJzwPynFr31H0WmXLii4d4t6r2Oh9BJP/YVBLsjUe5PoWqfeLtLplZ+SCeJkNPCPZbZ/F5HtZvdXWH+MOVc59zDt4ZinUPCBqPAEjdB7J/Z+ca+QwVnXXCEe/lC0IZEEzfEGNVTSQAeVPu/481htOEpra6YU4rsnMCOxU4RPDuwyyIRGeXVzP4aP/HEqLU6wd0OjuZJ/Ufy6fkoK/QbQGcD7yP/y8x1azP5cTbEbsBdFxwVpcjWVq4R1mBMnKe8fOli6aLT1u4tpX+eYL/V+EzUngYvKNhX5SCPCLnOcznx6QQhIWxuWqi6ykHcZky1+1o7CwpjPSX2TXHBQS2DavQ==; 31:jxOogoIIuIru0JoVPe56LpqwXDjYOCzm4D+IJ2cfD7b8m6MeghoYGWOYKGN8In3jhuZeQ6aQlarqob1FU2o1KEWOrKvNxW156bhGdciyVx1i6HLIANRYkqRAJbM0TRwnwetzAlUqJH7Frhj6gFVrQNVcCW5sCWi8BgixVWNTQi3/+yQrRfAuhZH6xej4uEyRaFlkDi2mBojVhTk0QqhRimjB8E6hPdtkaL+CFkgPMU8= X-MS-TrafficTypeDiagnostic: VI1PR04MB3006: X-Microsoft-Exchange-Diagnostics: 1; VI1PR04MB3006; 20:CbeRlld8L4WjOfb1jjtbHbK9BMUq3ob+dNugjVy9ahWIcjuGouD3NKlgldM7lGazwhZPKOCUTp2kJ0GhdcBNTX8+RviGdcsXrBxZvKsHuiXPF995UNRjgjNIo0Fao6pjDW/Ui2nnvellySc/O5dEa/8jfDTu8BMZe7OVdSkonaj1VSMqAC91r5HqMUtMu2GDw5FiO0uySi3shIaaI3chB/CT5nhdwXHgZ+Dma6A9j5h0u63ivoLgFxcDsotD/fQwHb/IRe1RaiC8LaplrilMED9BtpPRV0Bp46CsC0PwhyPp46es2SoCsW+c3mnuVb0TrhPiGXVdBmlWvf4Das+DI37XJRu4RbpLjxOPo8yY0o5JNhcQqbCLPoEXdaRJucq6TINfQ0BxeYJ5Xkbe3h8+E4vfdsRGYcVkktW8USXR0Ku2ooH7iIXzuadhR7CHTcGJcTXE9BT1CLk0QHGB/Y/HurpcctwaICVBGot4570t/L81E/LKyI5GuYkLk++7oFwF; 4:o6sj5Dtd5jfATXdyJynRj+UVIcJgEmY7bUuR9kswXdcMdkDOqU6Nn1UhICaIKJgspXiwcAZczKj5VZ+k/mkPei9z1IF2lfww3C32gbnDsyXZMrBjytElVouEeUlCwzjfeqxzvwmYkl+FAisL/gjW+aINrdacTBJ7EYcVxCxDMEecM3lDdOYCnTdgfDR9VKSWjh9n+oTcVGM9Cu6po9TZ24y/YwUHjn5VO/wfxEPYVTzlL9JoEvxDRJ+LAcsnHlt8146yHHks6248ImDt4Ei+37aDQIN8ObgUnQvYMdmdeBNX0DKy3rZjMUbQwqAh5fs6 X-Microsoft-Antispam-PRVS: X-Exchange-Antispam-Report-Test: UriScan:(185117386973197); X-MS-Exchange-SenderADCheck: 1 X-Exchange-Antispam-Report-CFA-Test: BCL:0; PCL:0; RULEID:(8211001083)(6040522)(2401047)(8121501046)(5005006)(3002001)(93006095)(93001095)(3231254)(944501410)(52105095)(10201501046)(6055026)(149027)(150027)(6041310)(20161123558120)(20161123560045)(201703131423095)(201702281528075)(20161123555045)(201703061421075)(201703061406153)(20161123562045)(20161123564045)(6072148)(201708071742011)(7699016); SRVR:VI1PR04MB3006; BCL:0; PCL:0; RULEID:; SRVR:VI1PR04MB3006; X-Forefront-PRVS: 06860EDC7B X-Forefront-Antispam-Report: SFV:NSPM; SFS:(10009020)(366004)(39380400002)(396003)(39860400002)(376002)(346002)(199004)(189003)(36756003)(97736004)(6636002)(6666003)(68736007)(86362001)(8676002)(44832011)(8936002)(81166006)(81156014)(47776003)(11346002)(956004)(2616005)(476003)(446003)(25786009)(486006)(48376002)(106356001)(105586002)(186003)(50466002)(16526019)(2906002)(6512007)(53936002)(1076002)(59450400001)(66066001)(26005)(51416003)(478600001)(305945005)(50226002)(6486002)(5660300001)(6116002)(76176011)(3846002)(16586007)(52116002)(6506007)(4326008)(316002)(7736002)(386003); DIR:OUT; SFP:1101; SCL:1; SRVR:VI1PR04MB3006; H:linux-u7w5.ap.freescale.net.net; FPR:; SPF:None; LANG:en; PTR:InfoNoRecords; A:1; MX:1; Received-SPF: None (protection.outlook.com: nxp.com does not designate permitted sender hosts) X-Microsoft-Exchange-Diagnostics: =?us-ascii?Q?1; VI1PR04MB3006; 23:Uh3/YeMWPDNMiON6U0P/FPDTOQGrpqgmLoCjBkt8C?= eKNiTfpEkkJdSwiOG0tpmGVlMNl4HsnW1gu+N42dVlxmAJ0naxmJoRZyNLHyb44oFLCfYDAClwf3fP/6gHWdQb4UvbwJLNxZwC/+gVUwgPYW0oOQIYQO9iY8JhgtsTb5T6rLVBpP064AS3BVl/KzE1P45c/SKgs3jbVIHveBrkcwHuHFRKTd/PBSPCUcidGa0GzWFvpa3tG+EF8bUJ+yKBGug+UleelFqN/Pq7cNTiaWf4OIe3Hmr2IBi/1Y0fj5zEr1/FkuslIdpaai+oQ5sdlYllXpMYto2oLfPsz3h8G384XygcFQkHzDN/iRPB97Q7bOPy12Tcqkq4daN0JawzT6NFRf58OaKF4mOnOhYQWxpsza6LrUT9fyA4iIEfi7/sgkHl7g3TVsYXd9FLB2qNcc1NOj9+Y1AOHQ+EqvLKUmDzBZV+jpzw6AacSmlFsLAKsFfeF1z1mMnAVGNBdprk/nGOPMYnBQVATT90ncVrsATkTS50WTni0wVj5Fp0bq2PZZgugQvNYG9950RvowKQo0N2gF/e+caXpwR1ZsF5Y20gZzZPHS/n9igkrHAp6ObEtnX/hVNqNDuvfrgtS/GEAioZl/7es9n3Ln/Cebbu49//1Rlib+gOXUP4oSHUXWREZWO5Ig7rBlCWgkYEFTPwaIRnB0P0flF7fZj/2ybdmPUPmtfwzh5rPTpcU3d6+5Fpcj4/obGn0Xt8luxj9t3lPl1jfA+K8gBEGmXC40Z2wonvWNWO8sWzLCfpohLA8+/tiG99coT51BKuFufkaEVbdx+wtRe62+V+fgMJeoEzxmPHbjQEDhEZwj34YTew5uKEzXi5/nq0Mk9nPWQQFLJMcjUNr1X2iBTxmpGqJh9+E3tzCfGmk05DpRd3zg//uKStOk/dAGihP0MBT9+2D3SkPHubtmfRQdVq506yYR+T3rwZnsHjdNF1eeM7wooLYw8gmH8DMbSjwv1Tm+QSGlrgc5EFEHoS1z96+GLw10YI0/IBzAtypCt+aYywhkbDdCwd4ladrNv24HJZ0U521a5Q8x9nUOz+xzE+PFQUyQ71bYHydXSHQ+YkHLTT4ppjwf3HD6PAbCmF8c9nRMDbZw5TWmTHpD/XRiNmFa7I9dE8UKohT7pBSLM2lPr00pPQAWpEPMoQbDmfiODLR89DCkT3M0rBuHxbTf69i3Jm8lUu/kDM2FKAhEY5YgXyrymtgR7E= X-Microsoft-Antispam-Message-Info: HrcxoBjdEiO6nUBh0TrsAFtPNcHmW81/HVI3ohO5Ci1I7H0dmKrO5+28KnBKVJ/03KnnmNls97770QAs/RVV+3wX/tB+NRAO/Sm8e5V7rCRhWynz5Yu9ooIBSoeDO2VHXGB3b6yI860xWYOLyUuRzUiKZ1Mjk3pDDQSNJpi9h1GFjE/ywXGLfSqPRNBrwdSo X-Microsoft-Exchange-Diagnostics: 1; VI1PR04MB3006; 6:SHYoCisFdmmbUuU8i9/98A7i0bi0AvA/hjDrXyG47Mr3ZHWBm9J9xeVgzbx9DDX8aMbom+hVPLHcDNrjOfhdtt/9XHr2S3dPoO5N0jhhss1cMZhbPws0bLMli+2AfouXVPac9b7fDtFhELezC1XjKtaC26bnLY3AgodmDOHB3vXoufT4J3EbvjGzuNw1n7PsEip7dSXZQkfbIvElILWjvhm/456wXAAo0COc8XEO2k50x0u1jgt6BllyugWFdLeXG2o7sVpiIuj1m+Q42mWTWo0VO7IJg0rll48AySzs079dRlmBrvjHXSZXuf5mCIVzZdcZni8XnpSRrTFW1bi95FMqw4oNWSwpNnDHOJ8gvLwXEVh/LBPBIEOQs7ddjrJGESpn9j/Jkzc0BRJINmqwaqyAdtXudb1QRnSbvuEpLArR6wBJ1WFumB1TrvFKK8VEalYrgcxH5z2L1wqyhDbWRw==; 5:4s9ET8BFNaMB539ZVkfRR2di1s7yJiFqPiyQZvINpXLF9Lw5SqYFRiFR41e4Ae8kTMuQlec1dXL/4qoeuSF+C9m4eYNtE9kgRt/Sh1RUhldOoniiXD05yCYjkzHxupjajyA48AQnCQH/0hxbnmEMTKi4jw8N+msmHU6CITe56tY=; 24:VG4kp2YJ5mk/f2vO8p6NWPEOAPZo51aH5gXii4Iacme6a1z+7Tq8NpdVRaRb4q+RkrDFamSVK6ISYMMmjsNUvLreVwv88Gkdi0EywE084KI= SpamDiagnosticOutput: 1:99 SpamDiagnosticMetadata: NSPM X-Microsoft-Exchange-Diagnostics: 1; VI1PR04MB3006; 7:i3N7tcI6L4JbjhqZz7ersPK2z4auklwiBKrzztK3H7MraTk9ukcUzXx5gG7PtX4mi+2/J+b+JILvHozQp9vPANfh48nS1anRPrqUXgrDSs84c4ANKdoMraiZ9S9tjqDsgze2m8lmAAUcYr9/bJEHeSqAsFVMU8d0JlWUjdSH1+oXbOQoMJRjX6hlimBHRW2Jr5tAdNfuJ+IkOUwfTsBZ5qNBFolYRm+UsCLo3g02r+hrUSjSlcmE2JfxPmlgM0zz X-MS-Office365-Filtering-Correlation-Id: 8da4d8ec-7f06-4979-a0a7-08d5c495a7c2 X-OriginatorOrg: nxp.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 28 May 2018 12:22:16.7139 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: 8da4d8ec-7f06-4979-a0a7-08d5c495a7c2 X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 686ea1d3-bc2b-4c6f-a92c-d99c5c301635 X-MS-Exchange-Transport-CrossTenantHeadersStamped: VI1PR04MB3006 Cc: u-boot@lists.denx.de Subject: [U-Boot] [PATCH 15/41] imx8: add mmu and dram related functiions X-BeenThere: u-boot@lists.denx.de X-Mailman-Version: 2.1.18 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" Add mmu memmap, some memory regions are reserved by M4, Arm Trusted Firmware, so need to get memreg using SCFW API and setup the memmap. Add dram_init, dram_init_banksize, get_effective_memsize functions, according to the memreg. Signed-off-by: Peng Fan --- arch/arm/mach-imx/imx8/cpu.c | 289 +++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 289 insertions(+) diff --git a/arch/arm/mach-imx/imx8/cpu.c b/arch/arm/mach-imx/imx8/cpu.c index f24ae6ecb8..c2508c2600 100644 --- a/arch/arm/mach-imx/imx8/cpu.c +++ b/arch/arm/mach-imx/imx8/cpu.c @@ -10,6 +10,7 @@ #include #include #include +#include #include #include @@ -273,3 +274,291 @@ int mmc_get_env_dev(void) return board_mmc_get_env_dev(devno); } #endif + +#define MEMSTART_ALIGNMENT SZ_2M /* Align the memory start with 2MB */ + +static int get_owned_memreg(sc_rm_mr_t mr, sc_faddr_t *addr_start, + sc_faddr_t *addr_end) +{ + sc_ipc_t ipchndl; + sc_err_t scierr; + bool owned; + sc_faddr_t start, end; + + ipchndl = gd->arch.ipc_channel_handle; + + if (ipchndl) { + owned = sc_rm_is_memreg_owned(ipchndl, mr); + if (owned) { + scierr = sc_rm_get_memreg_info(ipchndl, mr, &start, + &end); + if (scierr != SC_ERR_NONE) { + printf("Memreg get info failed, %d\n", scierr); + return -EINVAL; + } + debug("0x%llx -- 0x%llx\n", start, end); + *addr_start = start; + *addr_end = end; + + return 0; + } + } + + return -EINVAL; +} + +phys_size_t get_effective_memsize(void) +{ + sc_rm_mr_t mr; + sc_faddr_t start, end, end1; + int err; + + end1 = (sc_faddr_t)PHYS_SDRAM_1 + PHYS_SDRAM_1_SIZE; + + for (mr = 0; mr < 64; mr++) { + err = get_owned_memreg(mr, &start, &end); + if (!err) { + start = roundup(start, MEMSTART_ALIGNMENT); + /* Too small memory region, not use it */ + if (start > end) + continue; + + /* Find the memory region runs the u-boot */ + if (start >= PHYS_SDRAM_1 && start <= end1 && + (start <= CONFIG_SYS_TEXT_BASE && + end >= CONFIG_SYS_TEXT_BASE)) { + if ((end + 1) <= ((sc_faddr_t)PHYS_SDRAM_1 + + PHYS_SDRAM_1_SIZE)) + return (end - PHYS_SDRAM_1 + 1); + else + return PHYS_SDRAM_1_SIZE; + } + } + } + + return PHYS_SDRAM_1_SIZE; +} + +int dram_init(void) +{ + sc_rm_mr_t mr; + sc_faddr_t start, end, end1, end2; + int err; + + end1 = (sc_faddr_t)PHYS_SDRAM_1 + PHYS_SDRAM_1_SIZE; + end2 = (sc_faddr_t)PHYS_SDRAM_2 + PHYS_SDRAM_2_SIZE; + for (mr = 0; mr < 64; mr++) { + err = get_owned_memreg(mr, &start, &end); + if (!err) { + start = roundup(start, MEMSTART_ALIGNMENT); + /* Too small memory region, not use it */ + if (start > end) + continue; + + if (start >= PHYS_SDRAM_1 && start <= end1) { + if ((end + 1) <= end1) + gd->ram_size += end - start + 1; + else + gd->ram_size += end1 - start; + } else if (start >= PHYS_SDRAM_2 && start <= end2) { + if ((end + 1) <= end2) + gd->ram_size += end - start + 1; + else + gd->ram_size += end2 - start; + } + } + } + + /* If error, set to the default value */ + if (!gd->ram_size) { + gd->ram_size = PHYS_SDRAM_1_SIZE; + gd->ram_size += PHYS_SDRAM_2_SIZE; + } + return 0; +} + +static void dram_bank_sort(int current_bank) +{ + phys_addr_t start; + phys_size_t size; + + while (current_bank > 0) { + if (gd->bd->bi_dram[current_bank - 1].start > + gd->bd->bi_dram[current_bank].start) { + start = gd->bd->bi_dram[current_bank - 1].start; + size = gd->bd->bi_dram[current_bank - 1].size; + + gd->bd->bi_dram[current_bank - 1].start = + gd->bd->bi_dram[current_bank].start; + gd->bd->bi_dram[current_bank - 1].size = + gd->bd->bi_dram[current_bank].size; + + gd->bd->bi_dram[current_bank].start = start; + gd->bd->bi_dram[current_bank].size = size; + } + current_bank--; + } +} + +int dram_init_banksize(void) +{ + sc_rm_mr_t mr; + sc_faddr_t start, end, end1, end2; + int i = 0; + int err; + + end1 = (sc_faddr_t)PHYS_SDRAM_1 + PHYS_SDRAM_1_SIZE; + end2 = (sc_faddr_t)PHYS_SDRAM_2 + PHYS_SDRAM_2_SIZE; + + for (mr = 0; mr < 64 && i < CONFIG_NR_DRAM_BANKS; mr++) { + err = get_owned_memreg(mr, &start, &end); + if (!err) { + start = roundup(start, MEMSTART_ALIGNMENT); + if (start > end) /* Small memory region, no use it */ + continue; + + if (start >= PHYS_SDRAM_1 && start <= end1) { + gd->bd->bi_dram[i].start = start; + + if ((end + 1) <= end1) + gd->bd->bi_dram[i].size = + end - start + 1; + else + gd->bd->bi_dram[i].size = end1 - start; + + dram_bank_sort(i); + i++; + } else if (start >= PHYS_SDRAM_2 && start <= end2) { + gd->bd->bi_dram[i].start = start; + + if ((end + 1) <= end2) + gd->bd->bi_dram[i].size = + end - start + 1; + else + gd->bd->bi_dram[i].size = end2 - start; + + dram_bank_sort(i); + i++; + } + } + } + + /* If error, set to the default value */ + if (!i) { + gd->bd->bi_dram[0].start = PHYS_SDRAM_1; + gd->bd->bi_dram[0].size = PHYS_SDRAM_1_SIZE; + gd->bd->bi_dram[1].start = PHYS_SDRAM_2; + gd->bd->bi_dram[1].size = PHYS_SDRAM_2_SIZE; + } + + return 0; +} + +static u64 get_block_attrs(sc_faddr_t addr_start) +{ + u64 attr = PTE_BLOCK_MEMTYPE(MT_DEVICE_NGNRNE) | PTE_BLOCK_NON_SHARE | + PTE_BLOCK_PXN | PTE_BLOCK_UXN; + + if ((addr_start >= PHYS_SDRAM_1 && + addr_start <= ((sc_faddr_t)PHYS_SDRAM_1 + PHYS_SDRAM_1_SIZE)) || + (addr_start >= PHYS_SDRAM_2 && + addr_start <= ((sc_faddr_t)PHYS_SDRAM_2 + PHYS_SDRAM_2_SIZE))) + return (PTE_BLOCK_MEMTYPE(MT_NORMAL) | PTE_BLOCK_OUTER_SHARE); + + return attr; +} + +static u64 get_block_size(sc_faddr_t addr_start, sc_faddr_t addr_end) +{ + sc_faddr_t end1, end2; + + end1 = (sc_faddr_t)PHYS_SDRAM_1 + PHYS_SDRAM_1_SIZE; + end2 = (sc_faddr_t)PHYS_SDRAM_2 + PHYS_SDRAM_2_SIZE; + + if (addr_start >= PHYS_SDRAM_1 && addr_start <= end1) { + if ((addr_end + 1) > end1) + return end1 - addr_start; + } else if (addr_start >= PHYS_SDRAM_2 && addr_start <= end2) { + if ((addr_end + 1) > end2) + return end2 - addr_start; + } + + return (addr_end - addr_start + 1); +} + +#define MAX_PTE_ENTRIES 512 +#define MAX_MEM_MAP_REGIONS 16 + +static struct mm_region imx8_mem_map[MAX_MEM_MAP_REGIONS]; +struct mm_region *mem_map = imx8_mem_map; + +void enable_caches(void) +{ + sc_rm_mr_t mr; + sc_faddr_t start, end; + int err, i; + + /* Create map for registers access from 0x1c000000 to 0x80000000*/ + imx8_mem_map[0].virt = 0x1c000000UL; + imx8_mem_map[0].phys = 0x1c000000UL; + imx8_mem_map[0].size = 0x64000000UL; + imx8_mem_map[0].attrs = PTE_BLOCK_MEMTYPE(MT_DEVICE_NGNRNE) | + PTE_BLOCK_NON_SHARE | PTE_BLOCK_PXN | PTE_BLOCK_UXN; + + i = 1; + for (mr = 0; mr < 64 && i < MAX_MEM_MAP_REGIONS; mr++) { + err = get_owned_memreg(mr, &start, &end); + if (!err) { + imx8_mem_map[i].virt = start; + imx8_mem_map[i].phys = start; + imx8_mem_map[i].size = get_block_size(start, end); + imx8_mem_map[i].attrs = get_block_attrs(start); + i++; + } + } + + if (i < MAX_MEM_MAP_REGIONS) { + imx8_mem_map[i].size = 0; + imx8_mem_map[i].attrs = 0; + } else { + puts("Error, need more MEM MAP REGIONS reserved\n"); + icache_enable(); + return; + } + + for (i = 0; i < MAX_MEM_MAP_REGIONS; i++) { + debug("[%d] vir = 0x%llx phys = 0x%llx size = 0x%llx attrs = 0x%llx\n", i, + imx8_mem_map[i].virt, imx8_mem_map[i].phys, imx8_mem_map[i].size, imx8_mem_map[i].attrs); + } + + icache_enable(); + dcache_enable(); +} + +#ifndef CONFIG_SYS_DCACHE_OFF +u64 get_page_table_size(void) +{ + u64 one_pt = MAX_PTE_ENTRIES * sizeof(u64); + u64 size = 0; + + /* + * For each memory region, the max table size: + * 2 level 3 tables + 2 level 2 tables + 1 level 1 table + */ + size = (2 + 2 + 1) * one_pt * MAX_MEM_MAP_REGIONS + one_pt; + + /* + * We need to duplicate our page table once to have an emergency pt to + * resort to when splitting page tables later on + */ + size *= 2; + + /* + * We may need to split page tables later on if dcache settings change, + * so reserve up to 4 (random pick) page tables for that. + */ + size += one_pt * 4; + + return size; +} +#endif From patchwork Mon May 28 12:25:01 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Peng Fan X-Patchwork-Id: 921510 X-Patchwork-Delegate: sbabic@denx.de Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Authentication-Results: ozlabs.org; spf=none (mailfrom) smtp.mailfrom=lists.denx.de (client-ip=81.169.180.215; helo=lists.denx.de; envelope-from=u-boot-bounces@lists.denx.de; receiver=) Authentication-Results: ozlabs.org; dmarc=fail (p=none dis=none) header.from=nxp.com Authentication-Results: ozlabs.org; dkim=fail reason="signature verification failed" (1024-bit key; unprotected) header.d=nxp.com header.i=@nxp.com header.b="RIM+eBB2"; dkim-atps=neutral Received: from lists.denx.de (dione.denx.de [81.169.180.215]) by ozlabs.org (Postfix) with ESMTP id 40vbyw2BRwz9s0q for ; Mon, 28 May 2018 22:39:36 +1000 (AEST) Received: by lists.denx.de (Postfix, from userid 105) id D6ECCC21E2F; Mon, 28 May 2018 12:28:41 +0000 (UTC) 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=BAD_ENC_HEADER, RCVD_IN_DNSWL_BLOCKED, SPF_HELO_PASS, T_DKIM_INVALID autolearn=unavailable autolearn_force=no version=3.4.0 Received: from lists.denx.de (localhost [IPv6:::1]) by lists.denx.de (Postfix) with ESMTP id E4C7FC21DB3; Mon, 28 May 2018 12:23:54 +0000 (UTC) Received: by lists.denx.de (Postfix, from userid 105) id 856CDC21DDC; Mon, 28 May 2018 12:22:26 +0000 (UTC) Received: from EUR03-DB5-obe.outbound.protection.outlook.com (mail-eopbgr40048.outbound.protection.outlook.com [40.107.4.48]) by lists.denx.de (Postfix) with ESMTPS id 66D42C21DFA for ; Mon, 28 May 2018 12:22:22 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=nxp.com; s=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=KpHF/A+f9PzY+jnjBi8KRG98ula527WR+a3KMlxuvlg=; b=RIM+eBB2JaVRbCEpQGVfjy7HDfB4I0DpTAYX/yg9hjzxHabB2WpTYbZtqmaaETGtFvCuCJe0jCWumXfsSyJmC3YvEH9okGxOc4S+7+9ciPen51fvB8STue/CsNUz+4r/KBvpWWxvEOoPqhxPMYWg1lnYBwNPOB4M3jlfHHTssMI= Authentication-Results: spf=none (sender IP is ) smtp.mailfrom=peng.fan@nxp.com; Received: from linux-u7w5.ap.freescale.net.net (92.121.68.129) by VI1PR04MB3006.eurprd04.prod.outlook.com (2603:10a6:802:9::12) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384_P256) id 15.20.797.11; Mon, 28 May 2018 12:22:19 +0000 From: Peng Fan To: sbabic@denx.de, fabio.estevam@nxp.com Date: Mon, 28 May 2018 20:25:01 +0800 Message-Id: <20180528122526.20597-17-peng.fan@nxp.com> X-Mailer: git-send-email 2.14.1 In-Reply-To: <20180528122526.20597-1-peng.fan@nxp.com> References: <20180528122526.20597-1-peng.fan@nxp.com> MIME-Version: 1.0 X-Originating-IP: [92.121.68.129] X-ClientProxiedBy: HK2PR02CA0175.apcprd02.prod.outlook.com (2603:1096:201:21::11) To VI1PR04MB3006.eurprd04.prod.outlook.com (2603:10a6:802:9::12) X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-HT: Tenant X-Microsoft-Antispam: UriScan:; BCL:0; PCL:0; RULEID:(7020095)(4652020)(5600026)(48565401081)(4534165)(4627221)(201703031133081)(201702281549075)(2017052603328)(7153060)(7193020); SRVR:VI1PR04MB3006; X-Microsoft-Exchange-Diagnostics: 1; VI1PR04MB3006; 3:jbxpyBlurykXbV6FRNQczzbRXgajIUbi5lXpMg8jq+ErY/B68C8U8uPDoCoEersi6jmDSz5PuPK+xzZ1NLjCGlt8SoZepAQvamrkuxDfRI4EiUIf5fFMqTfqmI9xTAVRnB50FeF240BOQ04KBhbdITslTnxHJPh2sY9qssgavM2ag8XRLxu1G276OZxJ/tQhrwS1dEfaMMtTjfmesgsxSZx/+O1jepzZrNQ++ovDTXfdOQ25EE4tfAfKo33hAmnV; 25:6Mn+hb7IqevuQe6nGG3q1TikaXxI8SgNxR3PItO1D2WmpgMYw0zAiDPBsQ0KJECLURT6sYaTQ9bid9/rEXUAJuOSjrt78tiZOiYpFo8bqDgj6l9ePfcDThPxhwTbxPzxAxWx58dO/SDUjY8DoRJVEfVDug/0GKdw3PR6Q0P1xLNVQxmh64S09dewJPksWzPpEemYgvVfJxmUqDyc6wtIAG/6s3CtBUBkuZRgtrtTh5ijCgiEQK5oZcaRdLWym3CwdzvZ14NERMFxnMVEKQ+hInKKXaLldu54cGTOVP0XKHNLSDqW8v1rdtkwLTeTv5Z+jugGyjtqEeHWVufLlB9HpA==; 31:ut44DiPn+5ZbmgUSWYPmnBio4uTNqgHJn48t8Fn0dEppgFNYNk2PiPNIH7zqB8oeVO3YexQdcmKe9ErWlvJ2Z/SREP0Q4tJZtf5+iHkLuYpQY5uiIIozx7a6bsynOpbzhdnQkKNY8lrkFUpU9fzAMaqQl/FBGRjXJA0GaKf+nfAT0Z62nNv6QkVFex1/oCwN0ruEhf7kt1J0nnkX56YYcD1acxm4CGbnXYYr05lLQQc= X-MS-TrafficTypeDiagnostic: VI1PR04MB3006: X-Microsoft-Exchange-Diagnostics: 1; VI1PR04MB3006; 20:hfidTE0x4bcyT4Bn/IX3OoS5+giyVunBf7hxJeN6N7hjqFP576BXUu6UYvmRvUS6/Fd4BfAW7vdNUABi4UbNBLyWGJOlD6F4B0pfsZS+5RlyPgr+O7YSfQkbtIscPKSGTaALgC0fM0ch4qQegwDXMzl1zRvOemL1vhzhmLM6hOzlWMWLTHpNqeGK74Qzj6dTsErWrsVTgpDYcJRh3C0AwDuYoTOF2ubwPc6+3a37RuxRa3gQrcSqyvDxvfhf0rXH5xV7PaHiu1AJdYNY8N76xESZElz61we5rm0HnmHcguwwO9H0uPm4rLpdNxEJsMtzqtkFMHnI7nq9R+tWQ3V3k6OVckzXELLMsvvheRiMt/UdxXy/72AGLlZoxlpdtKnj/DACu2CFTjyCHBmBvZwp+nJR+aPhubWI6ymg5B5oG1ceokx2ldhIe5pLH1hMqr6TTxRn0kByPf45axSvr1RRJ3+HFSn4y8zSg35Hn5Nqj5SS7vkNguf6ALy0zCB9gzOP; 4:pyoRZujuWITWuYMoewfo7h2Z5NqkWbPTyMEq5fEEXqIuufuxOyLZyvhbH3AK+lR7qaK16dd/CqCkssCdJ6kyWl43l3O7CinVtW2mWtVYhljBCWW/zz1hb+SH/RQNgj+NY6IUPs+U1SHaD70YoNe/o+snQ8keZMieovwSRaQoeksXTd82bUwyo+F+PkoFNzbRw2iSH2PVA1dCfXLcnk3iU+B/mnI1ZLHFba1TdmVo6UZIed5BHX7MTCILKPzSqWry3L/P8oXTNe3/GVUnpVkfp35k4m1aBfmKNbcaqlRNwcQE5hA9ySjThR7w466sD/X7 X-Microsoft-Antispam-PRVS: X-Exchange-Antispam-Report-Test: UriScan:(185117386973197); X-MS-Exchange-SenderADCheck: 1 X-Exchange-Antispam-Report-CFA-Test: BCL:0; PCL:0; RULEID:(8211001083)(6040522)(2401047)(8121501046)(5005006)(3002001)(93006095)(93001095)(3231254)(944501410)(52105095)(10201501046)(6055026)(149027)(150027)(6041310)(20161123558120)(20161123560045)(201703131423095)(201702281528075)(20161123555045)(201703061421075)(201703061406153)(20161123562045)(20161123564045)(6072148)(201708071742011)(7699016); SRVR:VI1PR04MB3006; BCL:0; PCL:0; RULEID:; SRVR:VI1PR04MB3006; X-Forefront-PRVS: 06860EDC7B X-Forefront-Antispam-Report: SFV:NSPM; SFS:(10009020)(979002)(366004)(39380400002)(396003)(39860400002)(376002)(346002)(199004)(189003)(36756003)(97736004)(6636002)(6666003)(68736007)(86362001)(8676002)(44832011)(8936002)(81166006)(81156014)(47776003)(11346002)(956004)(2616005)(476003)(446003)(25786009)(486006)(48376002)(106356001)(105586002)(186003)(50466002)(16526019)(2906002)(6512007)(53936002)(1076002)(66066001)(26005)(51416003)(478600001)(305945005)(50226002)(6486002)(5660300001)(6116002)(76176011)(3846002)(16586007)(52116002)(6506007)(4326008)(316002)(7736002)(386003)(969003)(989001)(999001)(1009001)(1019001); DIR:OUT; SFP:1101; SCL:1; SRVR:VI1PR04MB3006; H:linux-u7w5.ap.freescale.net.net; FPR:; SPF:None; LANG:en; PTR:InfoNoRecords; A:1; MX:1; Received-SPF: None (protection.outlook.com: nxp.com does not designate permitted sender hosts) X-Microsoft-Exchange-Diagnostics: =?us-ascii?Q?1; VI1PR04MB3006; 23:fsZiO7+JKpOUCCHDbNX5k+GvOenWP2yxJRK6pvAtK?= Qr/lkJD5jSUiMZwj4/+VO0AwTU7Y12/Xg315Lpmbz292ihTR/UO5/WOW5cePBT99MXgQ04DL7OsER6npLE2co1ueH0Ouyj+7dcyW81B5/Czo3XY5RZxPeSjf1+lVwGYZS1o49dlFFfPHZI8NSrCv8NL5vmpB8HleYjUeVA7VIhlKff4catlnUpbH2nRXzf3P58fKDMo4vDljkdkH+/ph+sNzs0rkzKTtI/fOpgMA1iFsY2CJlBq/ko81juxqS6KUG3xYP5MWdY0T3uf6NdDvuq6gLlDX62tz6Dfz7PgIarGOkN4CnWhG96984fT6eONKH8oiWTa2o9JbDj7yFf6IsAJVde9VFNFceDok33czkLzzVwsk8WsFOzfJhzeSEkwhuKa/pqPO2mTR+cEw/JueVK0dRcS7UUADrFRKGFzXwNgusF0sVwBDdBxHfJxX1B39wORJrCHyovxxzpzoeIJDUNpSG7A253HAnKd4kdvO8hQPhxWLasf2nGMaYEQjznRxoHWw1PJ4X7OGPeHF5smiM5xnJhHwrM5iU5eW1DNnINFsiv74SMI9Vctc4cuFObyDoAcCIPq1zdqniZbAZm0PWoQ3tyzfPp2p2DWdZf+7odrvaINKJoM22DMqwa9A1x0BxpX77j7gVZO8uLpOQCrEXL3JYu4ZpExhzLdgy1XtNEpbjKKiqyYcksE2aofPZSG9CE2kg01YG7hJjhq+61hVZ2QmfsRQjlKbM3x9XzfxMc8qjAGkohXk1WXKnaQq73TJtXlucFwVsaqtV/8u+pcDdHW+71D66dDb42m4sfPdf63I2hSP3C5HQGoeQRpHqENyYTXWxzdG145hSmo//8MiZyC57OAPoDbF7ZTCPEmj7n0KJRsHynaNo9lyjgV7XFuz8GmMJue7QflPng0SVaZXk1fOWoy8eX0CdQaUPkiNKMv/M5Cw2W94/4XuaPonwU5cci357G5hdVTigfi/VzKk1A5nFhZkqjhs5COGc6qXeziGlpLhToOlYLfN8oDVpGTz8NOBVppAqCQffVtye9bTxt85fZZKjAZBOcsTtXo6Q0AKfluY8AAAjESyxHGQhSjYqyWTYGRDTdSV7fI2FrPU2tathsI4O61Yy0v+TFN3CM2wabAGxYCAonO8XeQYT1EFPM6vF97680LVo/FTDyVBcZwXEdZu1WlbWVngMNyxYz4aK2AMlm9AF3CUTuwGMDUAm/aWtlxd3dAyPtzLVz/g9JysLODpDYxC0TvSZbaMeV2CXSV8AJG9bqpa4dQdz6ZIG4= X-Microsoft-Antispam-Message-Info: ggmJVK5RC0xEFFCUdup990ROu4qb5cWMOgVfBWCZozM3SVZC88vNn+/fRVdzC4VtbuFt5MoRaBaMes4A5yK+fe22T67vKI1vzvkqJ72JK2fYQi/qFKtGEnffWEo7WuYv0RkLl/3OwR3541R0Z1dfd9ieW0/w/1KU9mrFxr3RYCxNZEJUdvrYuSUeeI3lUfDg X-Microsoft-Exchange-Diagnostics: 1; VI1PR04MB3006; 6:6cyw+TZnBfNYnfCgcBRC+X+8J1BN8+113gMtd0a7hrFpDydiULTtjMKaBNE371uO7BjrdHbg3mC93r0A0owp12sPICtLvvEixi61UhEc54qfK2jrvQTl6tW0BswiHYqdpyYM+UGY/Gin1tnztayO6fFmzTW5OkZilsSj7dyjf4LEdzNNIe/gCVMu8s/IsNxx8230deT4ZzZwbx25B8LIEEsMNlA390wZlEezVqCSYFKcvOTw673xmb6oSkFMeRjKiYl3Fx1OSW2B3sXCbvKypYwmLEh/fhhLSUwAq0EWvkIW2Z15D3Hj/+EI5gdcH9IRN+FmOAZFjaqzfEiGsCn/mIb8fx5ZtXM5MZo2zcctk0ewljIDNeEGqieD1iYmXCbOptR3qrU5yxjWUcvDT/Zi0rbtFqzezsRrlJ9SfSsLZfnYBPvec8J4O36m8BKsPTshTgAt3YW5VuaKzjSx/DbIqg==; 5:rLjNO5kysHwiuU3yjtawRqf9M8s8VCutzYxSkYczdHSKqNg8mh663k7G6mDI7sLH2plRPNDVooMIBFwW/Vq33a/qSac7S2mdZlkKozrXnG8N6KIYXFdMLNVsZNT2zEXK6+pUDGSTurQObWai0S+TfecV1+jvvXJTe/kPmkhG3Zo=; 24:0p4lFXv6jIpsVEgTDJToRmN2p5BEIesPma/qhLEaplK5XX86VLC0U7NixwDt2rlltMw7LmlH7tdkfm8kLs2geqIf5Rq+0u6yl4J6Todfc9Q= SpamDiagnosticOutput: 1:99 SpamDiagnosticMetadata: NSPM X-Microsoft-Exchange-Diagnostics: 1; VI1PR04MB3006; 7:T+/q7DQJtO4r8lDqrvR/1NmlpduXX1wBV2bQGGvI/U/rvvPwnh3J/xwzLZVxGXI8a5rZee0vLloyvKk2ESxlQc0Yjb9ii/Fi3+QKK1jeJ2sWn1rt3z8mPFcsxr5JBb+3SOWXF9Zygn9vTsEtTVEZyberSIXAXzD436reemyzE74M+H+tFQfONjhnrHjDt8PplAKOAJbMBvjs8CfHv7yrYttsnc1nIMynMmHFqpve+8lSB/u+Ek5J3TyoR2Fh16oE X-MS-Office365-Filtering-Correlation-Id: e8954284-488d-4c5e-cab4-08d5c495a950 X-OriginatorOrg: nxp.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 28 May 2018 12:22:19.3233 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: e8954284-488d-4c5e-cab4-08d5c495a950 X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 686ea1d3-bc2b-4c6f-a92c-d99c5c301635 X-MS-Exchange-Transport-CrossTenantHeadersStamped: VI1PR04MB3006 Cc: u-boot@lists.denx.de Subject: [U-Boot] [PATCH 16/41] imx8: add bootaux support X-BeenThere: u-boot@lists.denx.de X-Mailman-Version: 2.1.18 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" There is a M4 Core for genernal purpose and a DSP core for audio, add bootaux function in U-Boot to startup the core. The DSP image is an ELF image. Signed-off-by: Peng Fan --- arch/arm/mach-imx/imx8/cpu.c | 179 +++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 179 insertions(+) diff --git a/arch/arm/mach-imx/imx8/cpu.c b/arch/arm/mach-imx/imx8/cpu.c index c2508c2600..5223726b59 100644 --- a/arch/arm/mach-imx/imx8/cpu.c +++ b/arch/arm/mach-imx/imx8/cpu.c @@ -13,6 +13,7 @@ #include #include #include +#include DECLARE_GLOBAL_DATA_PTR; @@ -125,6 +126,184 @@ void imx_get_mac_from_fuse(int dev_id, unsigned char *mac) mac[5] = val2 >> 8; } +#ifdef CONFIG_IMX_BOOTAUX +#ifdef CONFIG_IMX8QXP +static unsigned long load_elf_image_shdr(unsigned long addr) +{ + /* Elf header structure pointer */ + Elf32_Ehdr *ehdr; + /* Section header structure pointer */ + Elf32_Shdr *shdr; + /* String table pointer */ + unsigned char *strtab = NULL; + /* Binary image pointer */ + unsigned char *image; + /* Loop counter */ + int i; + + ehdr = (Elf32_Ehdr *)addr; + + /* Find the section header string table for output info */ + shdr = (Elf32_Shdr *)(addr + ehdr->e_shoff + + (ehdr->e_shstrndx * sizeof(Elf32_Shdr))); + + if (shdr->sh_type == SHT_STRTAB) + strtab = (unsigned char *)(addr + shdr->sh_offset); + + /* Load each appropriate section */ + for (i = 0; i < ehdr->e_shnum; ++i) { + shdr = (Elf32_Shdr *)(addr + ehdr->e_shoff + + (i * sizeof(Elf32_Shdr))); + + if (!(shdr->sh_flags & SHF_ALLOC) || + shdr->sh_addr == 0 || shdr->sh_size == 0) { + continue; + } + + if (strtab) { + debug("%sing %s @ 0x%08lx (%ld bytes)\n", + (shdr->sh_type == SHT_NOBITS) ? "Clear" : "Load", + &strtab[shdr->sh_name], + (unsigned long)shdr->sh_addr, + (long)shdr->sh_size); + } + + if (shdr->sh_type == SHT_NOBITS) { + memset((void *)(uintptr_t)shdr->sh_addr, 0, + shdr->sh_size); + } else { + image = (unsigned char *)addr + shdr->sh_offset; + memcpy((void *)(uintptr_t)shdr->sh_addr, + (const void *)image, shdr->sh_size); + } + flush_cache(shdr->sh_addr, shdr->sh_size); + } + + return ehdr->e_entry; +} + +int arch_auxiliary_core_up(u32 core_id, ulong boot_private_data) +{ + sc_ipc_t ipchndl; + sc_rsrc_t core_rsrc, mu_rsrc = -1; + sc_faddr_t aux_core_ram; + u32 size; + ulong addr; + + ipchndl = gd->arch.ipc_channel_handle; + + switch (core_id) { + case 0: + core_rsrc = SC_R_M4_0_PID0; + aux_core_ram = 0x34FE0000; + mu_rsrc = SC_R_M4_0_MU_1A; + size = SZ_128K; + break; + case 1: + core_rsrc = SC_R_DSP; + aux_core_ram = 0x596f8000; + size = SZ_2K; + break; + default: + printf("Not support this core boot up, ID:%u\n", core_id); + return -EINVAL; + } + + addr = (sc_faddr_t)boot_private_data; + + if (addr >= aux_core_ram && addr <= aux_core_ram + size) { + printf("Wrong image address 0x%lx, should not in aux core ram\n", addr); + return -EINVAL; + } + + printf("Power on aux core %d\n", core_id); + + if (sc_pm_set_resource_power_mode(ipchndl, core_rsrc, + SC_PM_PW_MODE_ON) != SC_ERR_NONE) + return -EIO; + + if (mu_rsrc != -1) { + if (sc_pm_set_resource_power_mode(ipchndl, mu_rsrc, + SC_PM_PW_MODE_ON) != + SC_ERR_NONE) + return -EIO; + } + + if (core_id == 1) { + struct power_domain pd; + + if (sc_pm_clock_enable(ipchndl, core_rsrc, SC_PM_CLK_PER, + true, false) != SC_ERR_NONE) { + printf("Error enable clock\n"); + return -EIO; + } + + if (!power_domain_lookup_name("audio_sai0", &pd)) { + if (power_domain_on(&pd)) { + printf("Error power on SAI0\n"); + return -EIO; + } + } + + if (!power_domain_lookup_name("audio_ocram", &pd)) { + if (power_domain_on(&pd)) { + printf("Error power on HIFI RAM\n"); + return -EIO; + } + } + } + + printf("Copy image from 0x%lx to 0x%lx\n", addr, (ulong)aux_core_ram); + if (core_id == 0) { + /* M4 use bin file */ + memcpy((void *)aux_core_ram, (void *)addr, size); + } else { + /* HIFI use elf file */ + if (!valid_elf_image(addr)) + return -1; + addr = load_elf_image_shdr(addr); + } + + printf("Start %s\n", core_id == 0 ? "M4" : "HIFI"); + + if (sc_pm_cpu_start(ipcHndl, core_rsrc, true, aux_core_ram) != + SC_ERR_NONE) + return -EIO; + + puts("bootaux complete\n"); + + return 0; +} +#endif + +int arch_auxiliary_core_check_up(u32 core_id) +{ + sc_rsrc_t core_rsrc; + sc_pm_power_mode_t power_mode; + sc_ipc_t ipchndl; + + ipchndl = gd->arch.ipc_channel_handle; + + switch (core_id) { + case 0: + core_rsrc = SC_R_M4_0_PID0; + break; + default: + printf("Not support this core, ID:%u\n", core_id); + return 0; + } + + if (sc_pm_get_resource_power_mode(ipchndl, core_rsrc, &power_mode) != + SC_ERR_NONE) + return 0; + + if (power_mode != SC_PM_PW_MODE_OFF) + return 1; + + return 0; +} +#endif + int print_bootinfo(void) { enum boot_device bt_dev = get_boot_device(); From patchwork Mon May 28 12:25:02 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Peng Fan X-Patchwork-Id: 921493 X-Patchwork-Delegate: sbabic@denx.de Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Authentication-Results: ozlabs.org; spf=none (mailfrom) smtp.mailfrom=lists.denx.de (client-ip=81.169.180.215; helo=lists.denx.de; envelope-from=u-boot-bounces@lists.denx.de; receiver=) Authentication-Results: ozlabs.org; dmarc=fail (p=none dis=none) header.from=nxp.com Authentication-Results: ozlabs.org; dkim=fail reason="signature verification failed" (1024-bit key; unprotected) header.d=nxp.com header.i=@nxp.com header.b="RvkrkL6n"; dkim-atps=neutral Received: from lists.denx.de (dione.denx.de [81.169.180.215]) by ozlabs.org (Postfix) with ESMTP id 40vbng708xz9s0y for ; Mon, 28 May 2018 22:31:35 +1000 (AEST) Received: by lists.denx.de (Postfix, from userid 105) id 939E1C21DFF; Mon, 28 May 2018 12:27:49 +0000 (UTC) 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=BAD_ENC_HEADER, RCVD_IN_DNSWL_BLOCKED, SPF_HELO_PASS, T_DKIM_INVALID autolearn=unavailable autolearn_force=no version=3.4.0 Received: from lists.denx.de (localhost [IPv6:::1]) by lists.denx.de (Postfix) with ESMTP id EBF10C21EB4; Mon, 28 May 2018 12:23:29 +0000 (UTC) Received: by lists.denx.de (Postfix, from userid 105) id 28260C21E47; Mon, 28 May 2018 12:22:28 +0000 (UTC) Received: from EUR03-DB5-obe.outbound.protection.outlook.com (mail-eopbgr40066.outbound.protection.outlook.com [40.107.4.66]) by lists.denx.de (Postfix) with ESMTPS id 02FC1C21DCA for ; Mon, 28 May 2018 12:22:25 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=nxp.com; s=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=7IOgI/BkPJvHQjPt5HZfOTWfJzWF+8msvVLfNF5p+eA=; b=RvkrkL6n2jlasnCVz6dLGHqp8I528I0maezmxDnZTltJEqlN6ROhRKDV5uDXiDa0ig5t90dQ5UR0dM72QoWLM5Uy2RZAHSBfKgGVN27YedsasbWJXQRGE5GonDpBwJuJfkemzmWAx7uvs6PP2kGMRtapRdcoX/zTuIF9uUm2MFQ= Authentication-Results: spf=none (sender IP is ) smtp.mailfrom=peng.fan@nxp.com; Received: from linux-u7w5.ap.freescale.net.net (92.121.68.129) by VI1PR04MB3006.eurprd04.prod.outlook.com (2603:10a6:802:9::12) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384_P256) id 15.20.797.11; Mon, 28 May 2018 12:22:21 +0000 From: Peng Fan To: sbabic@denx.de, fabio.estevam@nxp.com Date: Mon, 28 May 2018 20:25:02 +0800 Message-Id: <20180528122526.20597-18-peng.fan@nxp.com> X-Mailer: git-send-email 2.14.1 In-Reply-To: <20180528122526.20597-1-peng.fan@nxp.com> References: <20180528122526.20597-1-peng.fan@nxp.com> MIME-Version: 1.0 X-Originating-IP: [92.121.68.129] X-ClientProxiedBy: HK2PR02CA0175.apcprd02.prod.outlook.com (2603:1096:201:21::11) To VI1PR04MB3006.eurprd04.prod.outlook.com (2603:10a6:802:9::12) X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-HT: Tenant X-Microsoft-Antispam: UriScan:; BCL:0; PCL:0; RULEID:(7020095)(4652020)(5600026)(48565401081)(4534165)(4627221)(201703031133081)(201702281549075)(2017052603328)(7153060)(7193020); SRVR:VI1PR04MB3006; X-Microsoft-Exchange-Diagnostics: 1; VI1PR04MB3006; 3:5KehDCqxO7SEodtnzsg8B8sDQLMHQJAcHSqoIm6egiiV/ET9emDEnng9i6NLJla/IOrkir2x/K/F9Fj7RgBAwU6O/NjiwHIhIYfxYMnGZZ2KvA/YcXBuXkVrS6cgFNNgRQANUB/UgcKegexlzPFRBBJcdRaNYHRZ5akAe7DFdqvDZoKjLgs/QJbCmRke8JxrAs0Kp/6rkSYV6A9FORox6ybjW0ckFyBPigdEn0K9KPyXCdRmxHuuIQb4PVZ9+E7q; 25:t1vfGfYJP3yjV0D+jv5UBjtXO+ciOiQ6wXMv5y7UcYFoeQ61dVch2TvfVnCE8VbWhsiFHENdNZaYvgIioHpjPJ40nlVpBBlKi1EDGFDMO8Aifod+hBsiNqTDPqJZd/BLwMAfmmteLf+4rCAgH8gsg8cz7pdHJsEvDvCfrlbvKDcPrAF9j0/3DM0XN192VTTQ9mZUxh8ODO5gcFfBopPhTD183OUB72ZQwRB36sAxUvbVNj6+mE70fXHkzzcyabi3Zgif0kuU+3RWCIdeF3Wq+a+m4KhQVDEHKTs6kn8xBrS4l3Pw9dOBwaMVSLjBcHEhYfOqMUxI8EavJ7qeKZA/Zw==; 31:J27BShkbBYHYLEjs8dDMAF+k1rVA0AMndKdx48L/VDigH2A+WjQteGsyHJ+MkGjNE2hAbc9cp+gwpKUzCNH7ZY2o898Mz8WFLvU1wrIZiWmzLkNiQ9ufk9GiLz8EsO552iCRQWgsGb11i0jsqx00zH3SaIUTL2LQXZpUUarz0nDGJep2N1qMojJZ4fWQDqsregNwHf0DayNmvCa1CQhgAm1YpSaaULvw0TNdMdO7a1k= X-MS-TrafficTypeDiagnostic: VI1PR04MB3006: X-Microsoft-Exchange-Diagnostics: 1; VI1PR04MB3006; 20:+M6jxTyd/jL4cTJIVXgHbjUIK6N2miiucT0oQBJ9XyoJmQmHZg2xu+Jwb/JYY5OCIFfUq8aNig/0FigFtCHEnQL2Z7EXuG7F5TUSmKpSAK1E8ktDTNmdCqLimENjNIx8sBoGH4CNXUkIUIpfJ6HZXzTVXcthWjFCsbwYQLV30qBbixugm87gQJ06qjkXYXK6YbYW7tkdE6CcdNpPAqc1tFbJ6TZZ+tQ+//kIciLUX7Vw5A6hEB7NeB1v7dnHyTry3F13Kw4/5Nf4zYHdMC3xCUSfdcCKOxIf5dVK64aSkl2Cccsz3MP11pdp1dPaJQ7mmS9vgG/XTiZ+kB0H5SQgApqVTQsrr8H8drOBBQNhEq8jx0OWpG1r0b7NIWr83v2uFmWEeksIfFGkBQU/JH/phxSCQZ5zHa8nSvH1JJt/uMf6872YA1gLcYiitHuU+sBGYQ9KdlsyeuCroZF2OzyaK6HNCWEZsn4fqdQR4GQvysvJJyC9kODSd6QpFAyg9MgP; 4:n/beFr4ZcXdJUiRruvzKxj/UNJpxAqGe5gphVsFLDUYnXFx2Cq+jBTl0wzj3vQjFLE6pI9yEUHlukOgHeFUPk9CyJXJsEGIFK8eNSI0FHjxiIgK34W2VmQcSWpE/6cA3f/e45m4fS+ZrgO5a8Hcre8kX6Ou/EejrhNvRPQ4MPRdtxzmtDIs/Qg4OSPTMtWxkvsJix7avrdo+QR3BLw/URCpBk+59yU9ZcvKY2SGeKo0z9tu6H6QtC/vTjOhh+q4SMAI0aHedHEUVNK/mZbmfIGQC8sCA/4Kmn7ndl+ydjLVK8+DWfLfXWpOZZk+x9fdG X-Microsoft-Antispam-PRVS: X-Exchange-Antispam-Report-Test: UriScan:(185117386973197); X-MS-Exchange-SenderADCheck: 1 X-Exchange-Antispam-Report-CFA-Test: BCL:0; PCL:0; RULEID:(8211001083)(6040522)(2401047)(8121501046)(5005006)(3002001)(93006095)(93001095)(3231254)(944501410)(52105095)(10201501046)(6055026)(149027)(150027)(6041310)(20161123558120)(20161123560045)(201703131423095)(201702281528075)(20161123555045)(201703061421075)(201703061406153)(20161123562045)(20161123564045)(6072148)(201708071742011)(7699016); SRVR:VI1PR04MB3006; BCL:0; PCL:0; RULEID:; SRVR:VI1PR04MB3006; X-Forefront-PRVS: 06860EDC7B X-Forefront-Antispam-Report: SFV:NSPM; SFS:(10009020)(366004)(39380400002)(396003)(39860400002)(376002)(346002)(199004)(189003)(36756003)(97736004)(6636002)(6666003)(68736007)(86362001)(8676002)(44832011)(8936002)(575784001)(81166006)(81156014)(47776003)(11346002)(956004)(2616005)(476003)(446003)(25786009)(486006)(48376002)(106356001)(105586002)(186003)(50466002)(16526019)(2906002)(6512007)(53936002)(1076002)(66066001)(26005)(51416003)(478600001)(305945005)(50226002)(6486002)(5660300001)(6116002)(76176011)(3846002)(16586007)(52116002)(6506007)(4326008)(316002)(7736002)(386003); DIR:OUT; SFP:1101; SCL:1; SRVR:VI1PR04MB3006; H:linux-u7w5.ap.freescale.net.net; FPR:; SPF:None; LANG:en; PTR:InfoNoRecords; A:1; MX:1; Received-SPF: None (protection.outlook.com: nxp.com does not designate permitted sender hosts) X-Microsoft-Exchange-Diagnostics: =?us-ascii?Q?1; VI1PR04MB3006; 23:6wiAy8FlTxUjzXWZPR1N1sw9cAKzcSxdynhV+6N1T?= fvdLCFFPSQkUwgmfBK1TJrWE4T8hhcGhQIJPmL/BXwQIHkecM0DctaiMJwv5ne9Y/qLT+z1MINsWZw//wHyx+Sx0qoILBeh8bSIv9h2+NusPkjy/7ApfFnu/6U4pTxa/b6ps6dN/sYX21r71t5TuoGmleocRqS7HrOrGfAu36QDhANVscPq/LKWkCTfT/2pGhvm2iLNJw+Ehd69DS/+ArqLI98cbRY1ZWUHEmFky+ytQBXdKxmKZ1U8ryA5hLHN7dcTq15SwN8OvHg5iwbOBByPEatjXzxwfOmdhRWsnv0A9I/VOphG7Mi+TwVxkcq1ozXyZtyd7qNWnAbSaW7IjpVQhIqSYnKWBd7Si9PSOOHXtnbtaoPAqH4kgqFYCobjr4VaF4OABwkkw82AvJQLQeQHuGcRV+7HumGSDTZNjKpzBhIfCyIGK5X5yMtJDfdI1VIhnJGzqpKT0IjkWtSXHKmo62pQLcH/wwMrt3S4z8y6FfD8G9yLVcdlpR+FuTqBCo7VaAvNn/54HEhNqSaUCxJyKI45yqVQmdENcEOfr/riQf0yUgRDzSMFFKZ0ETaDVO8x5Lt4Q6Vg0nfFxoNobTx24+9EmzFglRAjguAs1RxGCz7g5TI87gvsBpRF/M1jG+fSRFNfFApUmeSht4ypvPpQDEDdXYxKE++4uzHekvbs0woWNtVDONIh03fS5M4Hs/K2IZeJEaycyMmtFSJQO+4Uuyh1J6V+4XY/6s+HddsLao6T2H9YDwNVwyGd63+y11iMa2FI7vI3VIscE7OstiCz2YlOxJD/jwN10xH3PqjNPZ7CWF4POZ4aWqU7PqNZEZeOB0Hv01erZj5KvBdUN820DXErh2WzGCjGOzz22bjnNS1zQb6MUejmtY8ePqye1BIhGGyf69/4YS4a+2U4osyCZIsWitXdkwqNZmDTdEsUoEPQ7u2wTnl5TQNAbI1h3IqilT6v1gWWR0XiWRbJr5Sum1XygKD1ke7zU1OWlG0biD8nTFlHSWoU7OpwMsM/G6FaKpkE/EFoLnSrN4WFlScXsMWd87XuXIVPgD2p3UaW8TZbcpSauY+Bp3NvT+QDIuagwAmaYDWHlJvksChtbrJ5SgRdVF/qOXxTw3PiVLLgQh3aIHbmUPdgREwBknZYWjmLgdl2zREUpOLJT/9XjYz9G8nUyFeT/pcoCV3WR++GdkVcj4eKLFXA+Qla5+xsJ6g= X-Microsoft-Antispam-Message-Info: D/Hrg6GAvsfeds7p6sEJNzDjztwhfowVtaf/Cvdh5SsVutsqqVsE6OI1VL9Tqj+kaq0FhIBNfcH3Kbk6UO/YHllrSbRFf6VtKaF6tC8VeAPbtq0dhWfoqwwsKWjAtw+YSzFBGM8KVBhKvccg3JgcWXe2Tuvt4aGuLfBoPADsWJnyZ1Tk6NzKdh6/jxML8Meu X-Microsoft-Exchange-Diagnostics: 1; VI1PR04MB3006; 6:CsCEe6zr6PNvb2DfUFZwKQ5rKSlN/c/fVDZjSJ3sBYnf4PBWgfwSJZLcvVQpipGdw3Hh2o5mxcK5iBLWTRKhNnSUfjoRnUX5UxEOuGS9Nj/7GxrS5/lw7vUpCHiLAI2nTfj0ophPehYk/Jnc5Vxh5in1X9w3Uka/y2Q6BN57e78TmIB4byy3qHfOnGdzw7Tops4zC40WU5srHxQ312xz36JSGqKqsGbcNuJ6d9ozyspf4JVHMrd8712BnmzBwtt8dh6i0X2r2v5TOhxyZ/b59dOChdVxvFnXagmdUq77MX8jD83LJP5T2FYEAfHV4GjVybzgzMDzALlvfOhgoTr/EOexTcnj6STUndXiR3P17PU18GlZ6Dj8cEYFgZjUwoU61p8UaNGpF1NAYmiDBOVXbODxtuKW1KWrUuPsWl1KduEkJ6RvznWcEOJ4/XmFWTw0Uz05Vd5fms6jceaeTus2uw==; 5:EPAGz2rniDSZbsPbjpS/vfTtCA+ZWVfni97XqguPrhLGfsHEPoLvNH6u33xLYlbWf+sRkgca1Sp28GHlERNt5R5lrnx3I76QEUSddgmtev6GGkLXdBqAApR+e4E76stZpQEy8mspTjFapovRpIt9sXHVj9yub0rAyaxEXJDOY0I=; 24:2zSWfslRjpFnD5wQn8USnAbtrIu1jFnKQ1d6pYip/RH/Fq7yI1EdmXVxLMYE1N8S5h1U0JZjgSxYct+OA0j1ASLNy8LaYEdJKIkTxrIA4f8= SpamDiagnosticOutput: 1:99 SpamDiagnosticMetadata: NSPM X-Microsoft-Exchange-Diagnostics: 1; VI1PR04MB3006; 7:C7gZmc7q3dyp+Duzpb3A4j+2UmulgKjOFzeCOe71cUPLFReIRk1N4upz61mfEoBsbmM9N5f28kJqxxkBgPQcUcgjHd1E6uYbuhxdA2Zbku8ruQ1yqbdyfWDSJed/VL6KTRT9Thg/99BLEQsq1zgwVN1cHQdVupTf6GzU/mihXYzOvhMu9U8KrRZW1kgI2W13DaoMhNbp1DbH7R07yVRNYOcqafuQ0LBcR5T6E6jMrL+NAQk20RvGAf4Qq+X6hYqg X-MS-Office365-Filtering-Correlation-Id: 5238d7c5-f79a-46e4-571f-08d5c495aae1 X-OriginatorOrg: nxp.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 28 May 2018 12:22:21.9483 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: 5238d7c5-f79a-46e4-571f-08d5c495aae1 X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 686ea1d3-bc2b-4c6f-a92c-d99c5c301635 X-MS-Exchange-Transport-CrossTenantHeadersStamped: VI1PR04MB3006 Cc: u-boot@lists.denx.de Subject: [U-Boot] [PATCH 17/41] imx8: add arch_cpu_init X-BeenThere: u-boot@lists.denx.de X-Mailman-Version: 2.1.18 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" Add arch_cpu_init mainly to open the channel between ACore and SCU. Signed-off-by: Peng Fan --- arch/arm/include/asm/arch-imx8/imx-regs.h | 2 ++ arch/arm/include/asm/arch-imx8/sys_proto.h | 9 +++++++ arch/arm/mach-imx/imx8/cpu.c | 40 ++++++++++++++++++++++++++++++ 3 files changed, 51 insertions(+) diff --git a/arch/arm/include/asm/arch-imx8/imx-regs.h b/arch/arm/include/asm/arch-imx8/imx-regs.h index bfba2daae2..8a92275ae7 100644 --- a/arch/arm/include/asm/arch-imx8/imx-regs.h +++ b/arch/arm/include/asm/arch-imx8/imx-regs.h @@ -38,6 +38,8 @@ #define MXS_GPMI_BASE (APBH_DMA_ARB_BASE_ADDR + 0x02000) #define MXS_BCH_BASE (APBH_DMA_ARB_BASE_ADDR + 0x04000) +#define PASS_OVER_INFO_ADDR 0x0010fe00 + #define USB_BASE_ADDR 0x5b0d0000 #define USB_PHY0_BASE_ADDR 0x5b100000 diff --git a/arch/arm/include/asm/arch-imx8/sys_proto.h b/arch/arm/include/asm/arch-imx8/sys_proto.h index f9a3016132..73ffaba7d5 100644 --- a/arch/arm/include/asm/arch-imx8/sys_proto.h +++ b/arch/arm/include/asm/arch-imx8/sys_proto.h @@ -6,5 +6,14 @@ #include #include +struct pass_over_info_t { + u16 barker; + u16 len; + u32 g_bt_cfg_shadow; + u32 card_address_mode; + u32 bad_block_count_met; + u32 g_ap_mu; +}; + enum boot_device get_boot_device(void); int print_bootinfo(void); diff --git a/arch/arm/mach-imx/imx8/cpu.c b/arch/arm/mach-imx/imx8/cpu.c index 5223726b59..9ea90f1215 100644 --- a/arch/arm/mach-imx/imx8/cpu.c +++ b/arch/arm/mach-imx/imx8/cpu.c @@ -82,6 +82,46 @@ int print_cpuinfo(void) } #endif +#define BT_PASSOVER_TAG 0x504F +struct pass_over_info_t *get_pass_over_info(void) +{ + struct pass_over_info_t *p = + (struct pass_over_info_t *)PASS_OVER_INFO_ADDR; + + if (p->barker != BT_PASSOVER_TAG || + p->len != sizeof(struct pass_over_info_t)) + return NULL; + + return p; +} + +int arch_cpu_init(void) +{ + sc_ipc_t ipchndl; + sc_err_t scierr; + struct pass_over_info_t *pass_over; + + gd->arch.ipc_channel_handle = 0; + + /* Open IPC channel */ + scierr = sc_ipc_open(&ipchndl, SC_IPC_CH); + if (scierr != SC_ERR_NONE) + return -EPERM; + + gd->arch.ipc_channel_handle = ipchndl; + + pass_over = get_pass_over_info(); + if (pass_over && pass_over->g_ap_mu == 0) { + /* + * When ap_mu is 0, means the u-boot is boot + * from first container + */ + sc_misc_boot_status(ipchndl, SC_MISC_BOOT_STATUS_SUCCESS); + } + + return 0; +} + #if defined(CONFIG_IMX8QXP) #define FUSE_MAC0_WORD0 708 #define FUSE_MAC0_WORD1 709 From patchwork Mon May 28 12:25:03 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Peng Fan X-Patchwork-Id: 921500 X-Patchwork-Delegate: sbabic@denx.de Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Authentication-Results: ozlabs.org; spf=none (mailfrom) smtp.mailfrom=lists.denx.de (client-ip=81.169.180.215; helo=lists.denx.de; envelope-from=u-boot-bounces@lists.denx.de; receiver=) Authentication-Results: ozlabs.org; dmarc=fail (p=none dis=none) header.from=nxp.com Authentication-Results: ozlabs.org; dkim=fail reason="signature verification failed" (1024-bit key; unprotected) header.d=nxp.com header.i=@nxp.com header.b="Zn0Oe+SC"; dkim-atps=neutral Received: from lists.denx.de (dione.denx.de [81.169.180.215]) by ozlabs.org (Postfix) with ESMTP id 40vbtd43Hrz9s0q for ; Mon, 28 May 2018 22:35:53 +1000 (AEST) Received: by lists.denx.de (Postfix, from userid 105) id 3893BC21DFD; Mon, 28 May 2018 12:26:46 +0000 (UTC) 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=BAD_ENC_HEADER, RCVD_IN_DNSWL_BLOCKED, SPF_HELO_PASS, T_DKIM_INVALID autolearn=unavailable autolearn_force=no version=3.4.0 Received: from lists.denx.de (localhost [IPv6:::1]) by lists.denx.de (Postfix) with ESMTP id DB31CC21E5B; Mon, 28 May 2018 12:23:06 +0000 (UTC) Received: by lists.denx.de (Postfix, from userid 105) id 6A611C21E1A; Mon, 28 May 2018 12:22:35 +0000 (UTC) Received: from EUR03-DB5-obe.outbound.protection.outlook.com (mail-eopbgr40071.outbound.protection.outlook.com [40.107.4.71]) by lists.denx.de (Postfix) with ESMTPS id D6927C21E4E for ; Mon, 28 May 2018 12:22:27 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=nxp.com; s=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=icQJFWKNUKjpoxtLsofkxPt/MSxbz193VLEfvxpxaKA=; b=Zn0Oe+SCCAcdeL9aqDmEcg0fObXopmzOR6ocvlTqJfERlK4Bn0d2NnbrF1d136yri5mVbFXPFReU/RhQ0hJNQBtRzQGxTZIcKfDViLXQN15IlkWhNovNgP/XCi5foDCneiyx8UgsmwqXQn19kZOfn/rlNsd53rPW0fz8f7/szy0= Authentication-Results: spf=none (sender IP is ) smtp.mailfrom=peng.fan@nxp.com; Received: from linux-u7w5.ap.freescale.net.net (92.121.68.129) by VI1PR04MB3006.eurprd04.prod.outlook.com (2603:10a6:802:9::12) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384_P256) id 15.20.797.11; Mon, 28 May 2018 12:22:24 +0000 From: Peng Fan To: sbabic@denx.de, fabio.estevam@nxp.com Date: Mon, 28 May 2018 20:25:03 +0800 Message-Id: <20180528122526.20597-19-peng.fan@nxp.com> X-Mailer: git-send-email 2.14.1 In-Reply-To: <20180528122526.20597-1-peng.fan@nxp.com> References: <20180528122526.20597-1-peng.fan@nxp.com> MIME-Version: 1.0 X-Originating-IP: [92.121.68.129] X-ClientProxiedBy: HK2PR02CA0175.apcprd02.prod.outlook.com (2603:1096:201:21::11) To VI1PR04MB3006.eurprd04.prod.outlook.com (2603:10a6:802:9::12) X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-HT: Tenant X-Microsoft-Antispam: UriScan:; BCL:0; PCL:0; RULEID:(7020095)(4652020)(5600026)(48565401081)(4534165)(4627221)(201703031133081)(201702281549075)(2017052603328)(7153060)(7193020); SRVR:VI1PR04MB3006; X-Microsoft-Exchange-Diagnostics: 1; VI1PR04MB3006; 3:pHW2uCbi7h/TPX6JwV/auMqBDXH+oCd9r+LtyWjkhlaoII9MfuHlQx5TdChD5xffcLUPUMpyi3CfImkLwNbaxd/Sbn4gM4hopdjXbDwycuQP1fS4eSCC/RcFIgn68CXf11HzXmYqY/Iei8txDYYri2D2P3yYO67r+UisiVtM0N7RmqZDUj3DzLpJBAJWDgAwn2iP3SQON8UAojb+UqTEk3lf3FHpt9CbyXVQ6rcJiBfpso+aUqyTlqkqIuLaPM0C; 25:07lL944AgzH/UvJgEHPaL2k1gHHDtTfjAAqs4Exd2HBV4VWiaPEQ+qbhKOjTmQscERw+MoQk4mpve/sf4+oyFgso7qB45magPvjv/MbXNK10Bl7iqK2/U2e+bnIZkboYlswl9fdbNRSQZPhwOFnWxXX0QDeI11d5ggt7jUK5dNcSKD7ejkMKrIcwD91gk8VUxNiIYBl4m37WOkNzxSbhL7bE17aW1hzp8UAGqrF/tdDX2og29rHtPkOcRdpY1AJAdkAU6K7oweAC4vy+wk8DJ0cIPsvbvavu68aPukyhRKOH9PmUJIH7Ke3+1CTgV3eE+cRGdIGv/LwJJUGZIRjVXQ==; 31:v/DgcHczRVcsEFdjOuwi2PEtlZSuN7TUyQeFOs2hzP2MnapC1Su2U/21sREuI6tcXarO6bLNom9XN291IVZ7+44V1sOZUm906TK8ERbk2+Yo0q0mgd8GUnCbVX26Ey/sh0B7sw58kyqSevXPkrTMrxhgTVmuxXedZidj29U3phnoUywESAPEJX47Q7G5Azdyi3v0VZRJZs2Zgi7Fsm3UUXMxziFIqoiNemtCxtbW9rg= X-MS-TrafficTypeDiagnostic: VI1PR04MB3006: X-Microsoft-Exchange-Diagnostics: 1; VI1PR04MB3006; 20:pRuYLlIgYiyaqFJd3gldRAjO6ZzwE6U+Zsvx6Uj/T69sI8u3gyJOFBOFyv5GnFSk7ePIhmzXabZcxWtcOTTJwSVN0kctPleGSWMvrpd3CpfAD1WIiHlri6CBxTIAv5AGJ0tVW2tX3NXJpwum7tfrJYQUhlbIx+RN/F5ghzHWO9O5ZN+AYYOUYTOhiBg/66Nu2/NdxY5bHUXLlGD0JpwjvqdlKlHZ9sdy+6O2Wjm7HriYqmfBxLLkHLYdJ+CwCfLsYSUUsmpDbPms+010RR6xS6Ny5vLHrF448EFxTeZlBZgqGBaR5ZeTlCIJr2LqaOtGJ9w5FTK9ZZwe8QvuRNlcgviHEeYm3RNl3CLIaiG1UEoT3/3s1luBdkxw4w5GYUBHeRQuOSgHuD9EhGhNY9hPhsdOScZIpGjwcBUmHcK8nzwVnMZwT8fgzBYDQIrI/AkzbN6S8sx1IxVkYBZJJaHcLPWHY79RKJ+TklhYKP6FOJscR4pvx0peJ3tMnqYD6VOU; 4:qudaADZLxLfoVuwybjyixNZoMbz8dnx2ZHAIU0zepBg3zAMlsP6iZ6SbUhJc6/K6769dIAIFvF+j0rB1CrscOa9ZbUXlOmmcccaYsAZcqWS4jVKyihYbsGMb4mTlNWvtgEi8d4mPR58Dc1zLOQTe6NH28YZwvc198sO32PoVTn4EXoEywcqXkBM3Z6Q/BwvL1aNdfjcUxruvHzFT/RyIKXH8W76axKJSC4/HTS6efLuczD1B9OcjHOOJKElFi0SXmgQWYBi5XAZPXNCiwJcD5vTKyTitw2ebs3MKYUBhJxAFHgvTmPBMzvxkchwt1Kb/ X-Microsoft-Antispam-PRVS: X-Exchange-Antispam-Report-Test: UriScan:(185117386973197); X-MS-Exchange-SenderADCheck: 1 X-Exchange-Antispam-Report-CFA-Test: BCL:0; PCL:0; RULEID:(8211001083)(6040522)(2401047)(8121501046)(5005006)(3002001)(93006095)(93001095)(3231254)(944501410)(52105095)(10201501046)(6055026)(149027)(150027)(6041310)(20161123558120)(20161123560045)(201703131423095)(201702281528075)(20161123555045)(201703061421075)(201703061406153)(20161123562045)(20161123564045)(6072148)(201708071742011)(7699016); SRVR:VI1PR04MB3006; BCL:0; PCL:0; RULEID:; SRVR:VI1PR04MB3006; X-Forefront-PRVS: 06860EDC7B X-Forefront-Antispam-Report: SFV:NSPM; SFS:(10009020)(366004)(39380400002)(396003)(39860400002)(376002)(346002)(199004)(189003)(36756003)(97736004)(6636002)(6666003)(68736007)(86362001)(8676002)(44832011)(8936002)(81166006)(81156014)(47776003)(11346002)(956004)(2616005)(476003)(446003)(25786009)(486006)(48376002)(106356001)(105586002)(186003)(50466002)(16526019)(2906002)(6512007)(53936002)(1076002)(59450400001)(66066001)(26005)(51416003)(478600001)(305945005)(50226002)(6486002)(5660300001)(6116002)(76176011)(3846002)(16586007)(52116002)(6506007)(4326008)(316002)(7736002)(386003); DIR:OUT; SFP:1101; SCL:1; SRVR:VI1PR04MB3006; H:linux-u7w5.ap.freescale.net.net; FPR:; SPF:None; LANG:en; PTR:InfoNoRecords; A:1; MX:1; Received-SPF: None (protection.outlook.com: nxp.com does not designate permitted sender hosts) X-Microsoft-Exchange-Diagnostics: =?us-ascii?Q?1; VI1PR04MB3006; 23:+UEMB5/hHtv/gBF5Zp67pL/lop5U8yV/X+ykQJph1?= /CzZGl3IXKTl5GdhH8acFQNAra5cR3oZluc1Y0mTWV0WaMffGq0CBfKF3xjMggFM5fSxn1osYbja2WKU4XvPgjhsI4mkev726WMxLWt7kZcHQs9AtCuxesP0boowRS8bi2NT3R7Gp/m6Hkrbv370ubjaFGodfCyPCXffIMA/tpDHUYtJNWkhB2+NUpWuOXy68Ik6attWtotqApxa6jGhDtSlRDaFdowxMQVuKKXsQO79ru11Uk63L9w9URK9/WwAyJ2md11AVUuPydhXxq02NJSNiOqWbLqhmz3sdGJN/aAJ/gvai7CW2vmWrFmPf19lmWTjrUO+CuptDnViewz8ZUDWIHUxeEdOXEvrauRZiYA6ehlobUH/vUA6Gve2UcJvBE0urzneTT4w4QL3PK0kWdvNc13qHtvpr4uWKnk5wvm0RYkwUHRSmzPxzbgWpUkuf8RUNV6f5/6opyPyuEW6KBVDxUrdlMgSGK4i4Gxyvntsk+/hMtLF5rCrbgMAFNP19egfpx6pSoGZUXMtKHxOSCFVGcyQPrHiiY5uRJepHx91DUGsTuIi9UgCSWNKc3Hf+kZKXQ7LloVHB/ALDaEu91X0TM05zrgzok/+KxmzwvE7qqqMiuPpg1myH3i7LcaYlRlfOQ6VGAFsN+R0np0PU2vKuownI4liHGCE3H2Gz5W3mkPfgFJh2XRIue30ph6ghsDaNnyrfJFIBkjIADUKJVEAneb/lrOYTA3POcNgxWjim3ZlSbvM6FuCfFU+p3RWtZ/+KPv6mGxvqvWSIWp6XMV3BRhJSOraDvVEfJiOet8Y8CZrquD6FnOLdh0kVEoIUrDVBf+Ff09eGIIOJw6azX82TiaaF1D94JqInTnJSztC8sDr/G3wwZn4NiPJmhNkY1WMQaOvw213k27/fzYgnQT6DX/cNqA2GgKol4hk9ykuxjyOU1N4sjMff4d8TEO0h+Q4QEVbsggBr3qnCohgdh6vYRZg+sFzMUTpli3dJFd3V+0eeyCbfhkS7Pret7/7blelA2rVHVQpPKteYgtm74SGI/uDOaZgm2QX6kXtDDkkMaPdTpkaGOUMRHJN/gWlWOKhgQkNJvHPEaD6k3QQAkzO0DaWetkOsDoo+ZpyxlXVXCXWWd8ey9IXtl8369iYuFX9vXIiH/dvKPxW+z2qeq/ffSBZsRKaQ6pY/eUejsvcKgsSJXAPxG4cprTGQYe/oc= X-Microsoft-Antispam-Message-Info: CPDgD/GJJ32du+PHMiS0EMtFFn1qlDFhrReEoE3j4Vr8rjdO8tEZU2LXH528O0kDfZkXQOWyn3CXx8NeKedR7nkjiYhWzSbr3J73TJRo2DHZnIaq+a9L70+OpuOznwmNYh9wH8oJeKnT2+L9UuHnA+Otke79O/Mbty4wqPcv4PRse16kHFTBXC7oZNKO+9Az X-Microsoft-Exchange-Diagnostics: 1; VI1PR04MB3006; 6:34htzTmAEn2NOKf8wHvfcyXrI0GBOoTvOBurpIDkAMEWZ1LT4TyPSMQzw1jiM+XI7sdpN6kVv9R0xd+MvYlGFc3PfX1niFqI4/CWQQG4Lnr5Jki7zykXMSl4T9WawmTm6DLb6nnc0tOtXoGkT6ELPQcmiLswR8sqREzsg0jTCjaJeRSZsOdidB5VzfqbAeVWZQPiVjo/Zo+Xsy+CE4SjKaMp4gDKCQLdYj/8Cb/LtUgmFMFUXGRY9+IJf6k+sblSLHM63Ret+XY+p6K6H4eTH9pSmtq8w7DDIiPOX9pPCXBriCuA07dWYY8TP9Wb8euVy0dPqccqhFF4MbPgJLgBrz4KW8LfRt+BzmWP+6GOmH+TBWSpopirw/wK45jqYkiQsxLJ+9wO2fyLADYit7etBAZb1Mv95rzniqdzrHAkKWma0nIkMd6bTZmeGO0lFFkLI38itfno8kuPP98zIP2DHQ==; 5:2hzqIXJ05Iv0d3Pn/B5tRg4sA+qyHxX3ByauC0gTfVPz12U1cEidNJ3wX8rIJdSKrECGafah6Lls2beUyyo9EqCT13Jyy6jXJ9ep3edZBfq1GvCeaLW/t4YoiTPs1zSGxkYuLrREdMpRbhpQaR9AoLuFT+WBlrzEHeKtVsL8YjA=; 24:4IlKW0dTEyFBW3qDBCaLsBrm5OAs+Bf05rQ2l/R4uQQNCXJ4v16pecSeMNU87oaNqvqP97HfFG8vk3Iaqb+i8IqI/xEMJ+tfBE1IQ1TRgks= SpamDiagnosticOutput: 1:99 SpamDiagnosticMetadata: NSPM X-Microsoft-Exchange-Diagnostics: 1; VI1PR04MB3006; 7:x8Arz9hAz051UJkyMwFF5I1EDxcXjEH0CC0aHIPhdKSKcrYAh3aNo+urHo+wUYvGoLQ7ztiPXHZwWUGOBZF9pAUwKkIP2GG67WhlBYviNhEzBUof/t2G3AWHHlRHiaXurnA/xjDTMpsOvkCjozyBFQDq29f34FwcZN7d6nJpartgOc9lTuTEkxX6OgKf6R5hUgIbZVxHxImMqWI2zcONShDYxwlWoS63HGAWgjCDkTseIhfPh8iUYy5GgnId38xN X-MS-Office365-Filtering-Correlation-Id: d0535ae6-2acf-4d56-e385-08d5c495ac71 X-OriginatorOrg: nxp.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 28 May 2018 12:22:24.5734 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: d0535ae6-2acf-4d56-e385-08d5c495ac71 X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 686ea1d3-bc2b-4c6f-a92c-d99c5c301635 X-MS-Exchange-Transport-CrossTenantHeadersStamped: VI1PR04MB3006 Cc: u-boot@lists.denx.de Subject: [U-Boot] [PATCH 18/41] imx8: add clock driver X-BeenThere: u-boot@lists.denx.de X-Mailman-Version: 2.1.18 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" Add clock driver for i.MX8, including get arm core clock, peripheral's clock, configure I2C/flexspi/enet/gpmi-nand/usb clock. Signed-off-by: Peng Fan --- arch/arm/include/asm/arch-imx8/clock.h | 36 ++++ arch/arm/include/asm/arch-imx8/i2c.h | 34 ++++ arch/arm/mach-imx/imx8/Makefile | 2 +- arch/arm/mach-imx/imx8/clock.c | 361 +++++++++++++++++++++++++++++++++ 4 files changed, 432 insertions(+), 1 deletion(-) create mode 100644 arch/arm/include/asm/arch-imx8/clock.h create mode 100644 arch/arm/include/asm/arch-imx8/i2c.h create mode 100644 arch/arm/mach-imx/imx8/clock.c diff --git a/arch/arm/include/asm/arch-imx8/clock.h b/arch/arm/include/asm/arch-imx8/clock.h new file mode 100644 index 0000000000..ff98324b1c --- /dev/null +++ b/arch/arm/include/asm/arch-imx8/clock.h @@ -0,0 +1,36 @@ +/* SPDX-License-Identifier: GPL-2.0+ */ +/* + * Copyright 2018 NXP + */ + +#ifndef __ASM_ARCH_IMX8_CLOCK_H__ +#define __ASM_ARCH_IMX8_CLOCK_H__ + +/* Mainly for compatible to imx common code. */ +enum mxc_clock { + MXC_ARM_CLK = 0, + MXC_AHB_CLK, + MXC_IPG_CLK, + MXC_UART_CLK, + MXC_CSPI_CLK, + MXC_AXI_CLK, + MXC_DDR_CLK, + MXC_ESDHC_CLK, + MXC_ESDHC2_CLK, + MXC_ESDHC3_CLK, + MXC_I2C_CLK, + MXC_FEC_CLK, +}; + +u32 mxc_get_clock(enum mxc_clock clk); +u32 get_lpuart_clk(void); +int enable_i2c_clk(u8 enable, u32 i2c_num); +u32 imx_get_i2cclk(u32 i2c_num); +void enable_usboh3_clk(bool enable); +int set_clk_qspi(void); +u32 imx_get_fecclk(void); +void init_clk_usdhc(u32 index); +void init_clk_gpmi_nand(void); +void init_clk_usb3(int index); + +#endif /* __ASM_ARCH_IMX8_CLOCK_H__ */ diff --git a/arch/arm/include/asm/arch-imx8/i2c.h b/arch/arm/include/asm/arch-imx8/i2c.h new file mode 100644 index 0000000000..b20db5eb1e --- /dev/null +++ b/arch/arm/include/asm/arch-imx8/i2c.h @@ -0,0 +1,34 @@ +/* SPDX-License-Identifier: GPL-2.0+ */ +/* + * Copyright 2017 NXP + */ +#ifndef __ASM_ARCH_IMX8_I2C_H__ +#define __ASM_ARCH_IMX8_I2C_H__ + +#include + +struct imx_i2c_map { + int index; + sc_rsrc_t rsrc; +}; + +static struct imx_i2c_map imx_i2c_desc[] = { + {0, SC_R_I2C_0}, + {1, SC_R_I2C_1}, + {2, SC_R_I2C_2}, + {3, SC_R_I2C_3}, + {4, SC_R_I2C_4}, + {5, SC_R_LVDS_0_I2C_0}, /* lvds0 i2c0 */ + {6, SC_R_LVDS_0_I2C_0}, /* lvds0 i2c1 */ + {7, SC_R_LVDS_1_I2C_0}, /* lvds1 i2c0 */ + {8, SC_R_LVDS_1_I2C_0}, /* lvds1 i2c1 */ + {9, SC_R_CSI_0_I2C_0}, + {10, SC_R_CSI_1_I2C_0}, + {11, SC_R_HDMI_I2C_0}, + {12, SC_R_HDMI_RX_I2C_0}, + {13, SC_R_MIPI_0_I2C_0}, + {14, SC_R_MIPI_0_I2C_1}, + {15, SC_R_MIPI_1_I2C_0}, + {16, SC_R_MIPI_1_I2C_1}, +}; +#endif /* __ASM_ARCH_IMX8_I2C_H__ */ diff --git a/arch/arm/mach-imx/imx8/Makefile b/arch/arm/mach-imx/imx8/Makefile index 9545fd8d03..2921d18f9f 100644 --- a/arch/arm/mach-imx/imx8/Makefile +++ b/arch/arm/mach-imx/imx8/Makefile @@ -4,7 +4,7 @@ # SPDX-License-Identifier: GPL-2.0+ # -obj-y += cpu.o +obj-y += cpu.o clock.o obj-y += fsl_mu_hal.o sci/ipc.o obj-y += sci/svc/misc/rpc_clnt.o obj-y += sci/svc/pad/rpc_clnt.o diff --git a/arch/arm/mach-imx/imx8/clock.c b/arch/arm/mach-imx/imx8/clock.c new file mode 100644 index 0000000000..a12bfea633 --- /dev/null +++ b/arch/arm/mach-imx/imx8/clock.c @@ -0,0 +1,361 @@ +// SPDX-License-Identifier: GPL-2.0+ +/* + * Copyright 2017-2018 NXP + */ + +#include +#include +#include +#include +#include +#include +#include +#include + +DECLARE_GLOBAL_DATA_PTR; + +static u32 get_arm_main_clk(void) +{ + sc_err_t err; + sc_pm_clock_rate_t clkrate; + sc_ipc_t ipchandle = (sc_ipc_t)gd->arch.ipc_channel_handle; + + if (is_cortex_a35()) + err = sc_pm_get_clock_rate(ipchandle, SC_R_A35, SC_PM_CLK_CPU, + &clkrate); + else + err = SC_ERR_UNAVAILABLE; + + if (err != SC_ERR_NONE) { + printf("sc get ARM clk failed! err=%d\n", err); + return 0; + } + + return clkrate; +} + +u32 get_lpuart_clk(void) +{ + return mxc_get_clock(MXC_UART_CLK); +} + +u32 mxc_get_clock(enum mxc_clock clk) +{ + sc_err_t err; + sc_pm_clock_rate_t clkrate; + sc_ipc_t ipchandle = (sc_ipc_t)gd->arch.ipc_channel_handle; + + switch (clk) { + case MXC_UART_CLK: + err = sc_pm_get_clock_rate(ipchandle, SC_R_UART_0, 2, &clkrate); + if (err != SC_ERR_NONE) { + printf("sc get UART clk failed! err=%d\n", err); + return 0; + } + return clkrate; + case MXC_ESDHC_CLK: + err = sc_pm_get_clock_rate(ipchandle, SC_R_SDHC_0, 2, &clkrate); + if (err != SC_ERR_NONE) { + printf("sc get uSDHC1 clk failed! err=%d\n", err); + return 0; + } + return clkrate; + case MXC_ESDHC2_CLK: + err = sc_pm_get_clock_rate(ipchandle, SC_R_SDHC_1, 2, &clkrate); + if (err != SC_ERR_NONE) { + printf("sc get uSDHC2 clk failed! err=%d\n", err); + return 0; + } + return clkrate; + case MXC_ESDHC3_CLK: + err = sc_pm_get_clock_rate(ipchandle, SC_R_SDHC_2, 2, &clkrate); + if (err != SC_ERR_NONE) { + printf("sc get uSDHC3 clk failed! err=%d\n", err); + return 0; + } + return clkrate; + case MXC_FEC_CLK: + err = sc_pm_get_clock_rate(ipchandle, SC_R_ENET_0, 2, &clkrate); + if (err != SC_ERR_NONE) { + printf("sc get ENET clk failed! err=%d\n", err); + return 0; + } + return clkrate; + case MXC_ARM_CLK: + return get_arm_main_clk(); + default: + printf("Unsupported mxc_clock %d\n", clk); + break; + } + + return 0; +} + +u32 imx_get_fecclk(void) +{ + return mxc_get_clock(MXC_FEC_CLK); +} + +int enable_i2c_clk(u8 enable, u32 i2c_num) +{ + sc_ipc_t ipc; + sc_err_t err; + + if (i2c_num >= ARRAY_SIZE(imx_i2c_desc)) + return -EINVAL; + + ipc = gd->arch.ipc_channel_handle; + + if (enable) + err = sc_pm_clock_enable(ipc, imx_i2c_desc[i2c_num].rsrc, 2, + true, false); + else + err = sc_pm_clock_enable(ipc, imx_i2c_desc[i2c_num].rsrc, 2, + false, false); + + if (err != SC_ERR_NONE) { + printf("i2c clock error %d\n", err); + return -EPERM; + } + + return 0; +} + +u32 imx_get_i2cclk(u32 i2c_num) +{ + sc_err_t err; + sc_ipc_t ipc; + u32 clock_rate; + + if (i2c_num >= ARRAY_SIZE(imx_i2c_desc)) + return 0; + + ipc = gd->arch.ipc_channel_handle; + err = sc_pm_get_clock_rate(ipc, imx_i2c_desc[i2c_num].rsrc, 2, + &clock_rate); + if (err != SC_ERR_NONE) + return 0; + + return clock_rate; +} + +void init_clk_fspi(int index) +{ + sc_err_t scierr; + sc_pm_clock_rate_t rate; + sc_ipc_t ipchndl = gd->arch.ipc_channel_handle; + + /* Set FSPI0 clock root to 29 MHz */ + rate = 29000000; + scierr = sc_pm_set_clock_rate(ipchndl, SC_R_FSPI_0, SC_PM_CLK_PER, + &rate); + if (scierr != SC_ERR_NONE) { + puts("FSPI0 setrate failed\n"); + return; + } + + /* Enable FSPI0 clock root */ + scierr = sc_pm_clock_enable(ipchndl, SC_R_FSPI_0, SC_PM_CLK_PER, true, + false); + if (scierr != SC_ERR_NONE) { + puts("FSPI0 enable clock failed\n"); + return; + } +} + +void init_clk_gpmi_nand(void) +{ + sc_err_t scierr = 0; + sc_pm_clock_rate_t rate; + sc_ipc_t ipchndl = gd->arch.ipc_channel_handle; + + /* Set NAND BCH clock root to 50 MHz */ + rate = 50000000; + scierr = sc_pm_set_clock_rate(ipchndl, SC_R_NAND, SC_PM_CLK_PER, &rate); + if (scierr != SC_ERR_NONE) { + puts("NAND BCH set rate failed\n"); + return; + } + + /* Enable NAND BCH clock root */ + scierr = sc_pm_clock_enable(ipchndl, SC_R_NAND, SC_PM_CLK_PER, true, + false); + if (scierr != SC_ERR_NONE) { + puts("NAND BCH enable clock failed\n"); + return; + } + + /* Set NAND GPMI clock root to 50 MHz */ + rate = 50000000; + scierr = sc_pm_set_clock_rate(ipchndl, SC_R_NAND, SC_PM_CLK_MST_BUS, + &rate); + if (scierr != SC_ERR_NONE) { + puts("NAND GPMI set rate failed\n"); + return; + } + + /* Enable NAND GPMI clock root */ + scierr = sc_pm_clock_enable(ipchndl, SC_R_NAND, SC_PM_CLK_MST_BUS, + true, false); + if (scierr != SC_ERR_NONE) { + puts("NAND GPMI enable clock failed\n"); + return; + } +} + +void enable_usboh3_clk(bool enable) +{ + /* Dummy function */ +} + +void init_clk_usb3(int index) +{ + sc_err_t err; + sc_ipc_t ipc; + + ipc = gd->arch.ipc_channel_handle; + + err = sc_pm_clock_enable(ipc, SC_R_USB_2, SC_PM_CLK_MISC, true, false); + if (err != SC_ERR_NONE) + printf("USB3 set clock failed!, line=%d (error = %d)\n", + __LINE__, err); + + err = sc_pm_clock_enable(ipc, SC_R_USB_2, SC_PM_CLK_MST_BUS, true, + false); + if (err != SC_ERR_NONE) + printf("USB3 set clock failed!, line=%d (error = %d)\n", + __LINE__, err); + + err = sc_pm_clock_enable(ipc, SC_R_USB_2, SC_PM_CLK_PER, true, false); + if (err != SC_ERR_NONE) + printf("USB3 set clock failed!, line=%d (error = %d)\n", + __LINE__, err); +} + +int cdns3_enable_clks(int index) +{ + init_clk_usb3(index); + + return 0; +} + +int cdns3_disable_clks(int index) +{ + sc_err_t err; + sc_ipc_t ipc; + + ipc = gd->arch.ipc_channel_handle; + + err = sc_pm_clock_enable(ipc, SC_R_USB_2, SC_PM_CLK_MISC, false, false); + if (err != SC_ERR_NONE) + printf("USB3 disable clock failed!, line=%d (error = %d)\n", + __LINE__, err); + + err = sc_pm_clock_enable(ipc, SC_R_USB_2, SC_PM_CLK_MST_BUS, false, + false); + if (err != SC_ERR_NONE) + printf("USB3 disable clock failed!, line=%d (error = %d)\n", + __LINE__, err); + + err = sc_pm_clock_enable(ipc, SC_R_USB_2, SC_PM_CLK_PER, false, false); + if (err != SC_ERR_NONE) + printf("USB3 disable clock failed!, line=%d (error = %d)\n", + __LINE__, err); + + return 0; +} + +void init_clk_usdhc(u32 index) +{ +#ifdef CONFIG_IMX8QXP + sc_rsrc_t usdhcs[] = {SC_R_SDHC_0, SC_R_SDHC_1}; + u32 instances = 2; +#endif + + sc_err_t err; + sc_ipc_t ipc; + sc_pm_clock_rate_t actual = 400000000; + + ipc = gd->arch.ipc_channel_handle; + + if (index >= instances) + return; + + /* + * IMX8QXP USDHC_CLK_ROOT default source from DPLL, but this DPLL + * do not stable, will cause usdhc data transfer crc error. So here + * is a workaround, let USDHC_CLK_ROOT source from AVPLL. Due to + * AVPLL is fixed to 1000MHz, so here config USDHC1_CLK_ROOT to 333MHz, + * USDHC2_CLK_ROOT to 200MHz, make eMMC HS400ES work at 166MHz, and SD + * SDR104 work at 200MHz. + */ +#ifdef CONFIG_IMX8QXP + err = sc_pm_set_clock_parent(ipc, usdhcs[index], 2, SC_PM_PARENT_PLL1); + if (err != SC_ERR_NONE) + printf("SDHC_%d set clock parent failed!(error = %d)\n", + index, err); + + if (index == 1) + actual = 200000000; +#endif + + err = sc_pm_set_clock_rate(ipc, usdhcs[index], 2, &actual); + if (err != SC_ERR_NONE) { + printf("SDHC_%d set clock failed! (error = %d)\n", index, err); + return; + } + + if (actual != 400000000) + printf("Actual rate for SDHC_%d is %d\n", index, actual); + + err = sc_pm_clock_enable(ipc, usdhcs[index], SC_PM_CLK_PER, true, + false); + if (err != SC_ERR_NONE) { + printf("SDHC_%d per clk enable failed!\n", index); + return; + } +} + +void init_clk_fec(int index) +{ + sc_err_t err; + sc_ipc_t ipc; + sc_pm_clock_rate_t rate = 24000000; + sc_rsrc_t enet[2] = {SC_R_ENET_0, SC_R_ENET_1}; + + if (index > 1) + return; + + if (index == -1) + index = 0; + + ipc = gd->arch.ipc_channel_handle; + + /* Disable SC_R_ENET_0 clock root */ + err = sc_pm_clock_enable(ipc, enet[index], 0, false, false); + err |= sc_pm_clock_enable(ipc, enet[index], 2, false, false); + err |= sc_pm_clock_enable(ipc, enet[index], 4, false, false); + if (err != SC_ERR_NONE) { + printf("SC_R_ENET_0 disable clock failed! (error = %d)\n", err); + return; + } + + /* Set SC_R_ENET_0 clock root to 125 MHz */ + rate = 125000000; + + /* div = 8 clk_source = PLL_1 ss_slice #7 in verfication codes */ + err = sc_pm_set_clock_rate(ipc, enet[index], 2, &rate); + if (err != SC_ERR_NONE) { + printf("SC_R_ENET_0 set ref clock failed! (err = %d)\n", err); + return; + } + + /* Enable SC_R_ENET_0 clock root */ + err = sc_pm_clock_enable(ipc, enet[index], 0, true, true); + err |= sc_pm_clock_enable(ipc, enet[index], 2, true, true); + err |= sc_pm_clock_enable(ipc, enet[index], 4, true, true); + if (err != SC_ERR_NONE) { + printf("SC_R_ENET_0 enable clock failed! (error = %d)\n", err); + return; + } +} From patchwork Mon May 28 12:25:04 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Peng Fan X-Patchwork-Id: 921516 X-Patchwork-Delegate: sbabic@denx.de Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Authentication-Results: ozlabs.org; spf=none (mailfrom) smtp.mailfrom=lists.denx.de (client-ip=81.169.180.215; helo=lists.denx.de; envelope-from=u-boot-bounces@lists.denx.de; receiver=) Authentication-Results: ozlabs.org; dmarc=fail (p=none dis=none) header.from=nxp.com Authentication-Results: ozlabs.org; dkim=fail reason="signature verification failed" (1024-bit key; unprotected) header.d=nxp.com header.i=@nxp.com header.b="GkNbEVjn"; dkim-atps=neutral Received: from lists.denx.de (dione.denx.de [81.169.180.215]) by ozlabs.org (Postfix) with ESMTP id 40vc252KzHz9s0q for ; Mon, 28 May 2018 22:42:21 +1000 (AEST) Received: by lists.denx.de (Postfix, from userid 105) id 09ACAC21D65; Mon, 28 May 2018 12:29:18 +0000 (UTC) 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=BAD_ENC_HEADER, RCVD_IN_DNSWL_BLOCKED, SPF_HELO_PASS, T_DKIM_INVALID autolearn=unavailable autolearn_force=no version=3.4.0 Received: from lists.denx.de (localhost [IPv6:::1]) by lists.denx.de (Postfix) with ESMTP id 83D4CC21DFD; Mon, 28 May 2018 12:24:09 +0000 (UTC) Received: by lists.denx.de (Postfix, from userid 105) id 0D746C21E35; Mon, 28 May 2018 12:22:35 +0000 (UTC) Received: from EUR03-DB5-obe.outbound.protection.outlook.com (mail-eopbgr40069.outbound.protection.outlook.com [40.107.4.69]) by lists.denx.de (Postfix) with ESMTPS id 540FEC21DFD for ; Mon, 28 May 2018 12:22:30 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=nxp.com; s=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=vEc+/2n14TPYj0XfooTXmN/qdRI4zm3UKW1K68TAWEI=; b=GkNbEVjnSL1Lnn9SWcwpiu9azbEQpPMHyBDWUQemNqAhtfvCtzAJnv3RblYgWQh+jWDQNLAdN0K2hPXRRwtnDXy+m0yLN+62OhHrdw8gTb9bW3crAkz06byLhHgSncuIkona01gqZ9aG9phio7bwbhUn5UT8Jd3HnSs0GoC/dXo= Authentication-Results: spf=none (sender IP is ) smtp.mailfrom=peng.fan@nxp.com; Received: from linux-u7w5.ap.freescale.net.net (92.121.68.129) by VI1PR04MB3006.eurprd04.prod.outlook.com (2603:10a6:802:9::12) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384_P256) id 15.20.797.11; Mon, 28 May 2018 12:22:27 +0000 From: Peng Fan To: sbabic@denx.de, fabio.estevam@nxp.com Date: Mon, 28 May 2018 20:25:04 +0800 Message-Id: <20180528122526.20597-20-peng.fan@nxp.com> X-Mailer: git-send-email 2.14.1 In-Reply-To: <20180528122526.20597-1-peng.fan@nxp.com> References: <20180528122526.20597-1-peng.fan@nxp.com> MIME-Version: 1.0 X-Originating-IP: [92.121.68.129] X-ClientProxiedBy: HK2PR02CA0175.apcprd02.prod.outlook.com (2603:1096:201:21::11) To VI1PR04MB3006.eurprd04.prod.outlook.com (2603:10a6:802:9::12) X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-HT: Tenant X-Microsoft-Antispam: UriScan:; BCL:0; PCL:0; RULEID:(7020095)(4652020)(5600026)(48565401081)(4534165)(4627221)(201703031133081)(201702281549075)(2017052603328)(7153060)(7193020); SRVR:VI1PR04MB3006; X-Microsoft-Exchange-Diagnostics: 1; VI1PR04MB3006; 3:cxzgwx1ygReYMt+PpNC2wFU4zMs1QfOMKE7+W6lq4GSSMpO5KwG1Nf5k40Ssxn17Flkhmu9rWMJq79BcRLf+XHZ++BVMswJZJH7WGYrejdN9xS94NwIxvyNeumfk3Mm+pdHbm/CfOft5+rXMZLU3h2qY0xW7AJsTP4592gFyMvKluZh3OOCkjYP+JVX3baT0kQQYgh3kJftyyWWdnTN9jIjQy4T1PH8x34QJi+wrBbrlpAajEvSfJcJVol4E1tSU; 25:Op/PwdesaeCukal3U4jWZ35YNXijbVmc1hMBY2GMYmR0ec6JQ9Ce5lGuEEAEN9/Ijkxahi8x8dgU4P3co0KMJe5QiX1OzWMVVaewJy0isn81eSoqv5M84YeHej6+YX8Mjy3k9HR31cwZ+OQkCIeja2oBK2ndqmUTtxaN/q/6fU2GohQN7R9Pbd3aQQbmPAuOYrLqKemeN/E6tFuq9ZJDE0KfiFemEeOXKyj+JfbA7NFTjrW0rU4gK8apjWcviq72Dwrx7hDC8fshsV47yxJOnLtJPu3aPhynGJgh4zcJgMk7y9qT1Q7vZaU65HrihjTPQpXDs/bR267KvwjYZjhe4w==; 31:ETCw5pOGCJf5rn9ZhGog13K+SVczqdcMaZc8qiNM39G+FAYMIHFljbn9rIA9MVCb18jxnNv9WvCiek9sNI8vTcE8ZdQVrkxToyEPzWybTGW5eDFWBo+pNWylGiYGS9t/39Y7XKfHKM1qcM+zHHPvMa4NaApQ4LW4pNy6PrLPpuJMJA2Tkrr9CJHvTvwtytdz6EqMaX8USQiy9G3RNlDSoTzf/nDfOPxdebts2x+vGFU= X-MS-TrafficTypeDiagnostic: VI1PR04MB3006: X-Microsoft-Exchange-Diagnostics: 1; VI1PR04MB3006; 20:m3UMsJgycZgnDUVQE5sgsDz6ChnVG8Q1cxJOURT1TOMfghzZJ/jI9Uu1qa3sYelRZ2YT+xdvfPqVafHgsVuuWNCSwBa/Rlps8iRfoTD/nZNu/FnWFBZwKe5cUQ0HhvCEZz9e8w8s5IwZEioWI3QZq9lhaUrd9YIw2FZ/bJkFYiWYLTRxrH8kVZlbn8BoA/OHg0Uac9alUuld8kSKIUw0hrRKdDHfG3zW6WCIaD3ASNmvVDUniwCTaO7IOWZwlxqaNi0XnUoUHzDI9hMACj/Tarllhr7ta0mojQ5gWTwRV7Zj01SsOJKog5SV8LZ2h8hetBG/Vs0Pc4udFhZHcFz8rZIFx8BMkHExGLNlEa0UiSJl/Ujs9VdF6Ec6q8FZzu0E66IsgblMhZyK9cDrYSNpPqE+iWEvoGOHcQXF4t5+PowKEoFYFuOzMuq/J7QZwJ1t1r1Uj0L2N6zMPfTWd0LH99i/k7vrKW6aUZEsdu52dOQtccXUd/HrA/Y6hPTfg/Wn; 4:IMa+9KVfdLHsP2qHi2asRbm46dw9TWdKcGq9qGv9jSEJ2zogwrCOttF5y4YcJ6WTD/Kv8uno1kz2qUwb6zv7sdF1tNCHMK39gbb1x/S+zxI43uktPh2IAiIc8ahx5vNRIQtLXNJ1YVRW2bpTBm+pZDcTjh8wLYonbXeFrXrQ7m/v13u+yB4UTHg5CgYvtt7IErmvDZ9Z+vAcqxtkkz5H4wWgc6z2qcwLvjVtg6kGjh2NjAhT7KN3JZdlLmQgVZ/fKP/CHon80myla2d17wOPTBLaBlC7TuTTRYB+Mk6Xa0OsqVWQU01A53ugSE9Ar8R0 X-Microsoft-Antispam-PRVS: X-Exchange-Antispam-Report-Test: UriScan:(185117386973197); X-MS-Exchange-SenderADCheck: 1 X-Exchange-Antispam-Report-CFA-Test: BCL:0; PCL:0; RULEID:(8211001083)(6040522)(2401047)(8121501046)(5005006)(3002001)(93006095)(93001095)(3231254)(944501410)(52105095)(10201501046)(6055026)(149027)(150027)(6041310)(20161123558120)(20161123560045)(201703131423095)(201702281528075)(20161123555045)(201703061421075)(201703061406153)(20161123562045)(20161123564045)(6072148)(201708071742011)(7699016); SRVR:VI1PR04MB3006; BCL:0; PCL:0; RULEID:; SRVR:VI1PR04MB3006; X-Forefront-PRVS: 06860EDC7B X-Forefront-Antispam-Report: SFV:NSPM; SFS:(10009020)(366004)(39380400002)(396003)(39860400002)(376002)(346002)(199004)(189003)(36756003)(97736004)(6636002)(6666003)(68736007)(86362001)(8676002)(44832011)(8936002)(81166006)(81156014)(47776003)(11346002)(956004)(2616005)(476003)(446003)(25786009)(486006)(48376002)(106356001)(105586002)(186003)(50466002)(16526019)(2906002)(6512007)(53936002)(1076002)(59450400001)(66066001)(26005)(51416003)(478600001)(305945005)(50226002)(6486002)(5660300001)(6116002)(76176011)(3846002)(16586007)(52116002)(6506007)(4326008)(316002)(7736002)(386003); DIR:OUT; SFP:1101; SCL:1; SRVR:VI1PR04MB3006; H:linux-u7w5.ap.freescale.net.net; FPR:; SPF:None; LANG:en; PTR:InfoNoRecords; A:1; MX:1; Received-SPF: None (protection.outlook.com: nxp.com does not designate permitted sender hosts) X-Microsoft-Exchange-Diagnostics: =?us-ascii?Q?1; VI1PR04MB3006; 23:zSXmI7TPvcL7aJAPabSLQa+68fYUR88l1H6mH6yjv?= cwdMdUk5+QYD8BOPhQQwgyA+34U7aFl0AL+ok5va6jXjZr6x/k1BT15wUE3eKtTI7JeSimXEkgSoQuIOly78O6VEAVXFk8KR7d/Ff/AvcmfyoTbUJRkUHsyAQSUlfV7eSJz8n5ZVM/Zu/dbri+CR1tlHqsPHVmanIvwAGnyxnF+b29qT5nsCHHrBwoIMoEbogDzWYpcyDeYZoaz1y2sD9t7Agf4bJXVBT2pKiG6WpNYEz7sDUBuyif3X3l29yn6sFWxAUqVsprVqPBfTkF4PCenNWv2k1ToAZTM0RtoPru4T5VlfNI/T5ZoWr8u4MJnVr6VC1nfvpzzPo43KuRomVtCnMvlJZQRbmEUqicWcZXa/huv1L/l5QuXofOwEzvcACsgaAfLsy4wkT1Gxgv1FA8fSmthccS1u+g0LqlFs/TKoZwgHU/B3AmFb6gSfTYZNBH42TgVRdsdr5LGV52VV+LngAHNzZNBgw1M7ZcFxFCTMwz1AX59XkphyDAn8tRPWNPJYfDWe0OCvKdUWG8t4M8rB9NGIe9TjG9QPNSGV+Rj9XwvZXfLZQsitAaOpWh75Zs7i3eK5PgrGdJA77zOp0GQ+jrZxQwQIJ6Q2pDHnRp+koxCT4idtTl7/TI6DtBFFKKVkgoTsKjzPfnc2Z2RRT+taa7/SynQPBKP2fZqwR3ss/V2K2iVrfktHTngFEVcjjcsgtFF+iRLNe1wxfkKJ8gRJqxUFi5EtrYzxMDkTmKhNp5qPDDPOvLJbAT3Ak3hMN/wmrnJ/FtCyJXliUuHC1uo0WTshueCF9VgK8Gd6FUh4tn82we4+KkRmPO41DLhaEcUoq1XHyLnY8DUxoZD3kUwyZxISh8Kg3caOLfI0h6miZBoLj9OPdZIbdPhPX4WzuwtXhQzLpOmhuEaEuhLgQ5r5CTCuM0Fx6kLje2+RjjTVqyNTkqXEaMxzJaGXbIxK8YXppMTEGCXaEufzaGDe9txhOljrGsmkzxV79adUFLjxLii/b1QuEyONFdgmGN9KG8CcEWC47x7CwICtZtv1LOkASFnu0WhC9hvtdHt7mAUZgOu0YMToHU1fgRsffJfwZhNS3ixw+EmUehFawhRG1mCPcBF5Y1q4ZLApD7SKVvBK5r6H1MEu+PWH+fN62VJvwzz9ibXTuTmdG6m/yxFlYH4i534HJDCfOHxTmjS+/6GyF2tVsoxeVyLNp4V/1JZsn0= X-Microsoft-Antispam-Message-Info: czmCGPS4S7Y8p1zD9MtGG36z3LU1VqDbf4K22bjb3Cq1+hg2d5FKZ5WsWZGH12ktgUUeV3fV/d6rPAdr1O0bZFgKHqsxnuTPaGpPpe8p4ZVs9pGG+REYdH+wOqfxWZR3a+PTNDvdrc/M3Qf3HseLV6zHmxJL4us8W5GNalhADCVRJHSA81RiTD9E9FiHx4AV X-Microsoft-Exchange-Diagnostics: 1; VI1PR04MB3006; 6:6pbPwI4vbAO2AI6UDF1KW6M9NBM7O1XKQ/3pD4jVlg/mR8QoQbNLVAL+kP0dfa4dzf0Kco8aL/Da0kunzEmE0U4GAyIVDRFGNfkR0/zZCf2plofZv68aA+dO/dUgIM0kJCcKpkfqz72GxXskcP23TmDZX5PeOJdaD/hDIj7hJY+eldPWQDZYHSQk7KV+ME1DzxcRSzyiii7y4dWQiZla8wSfQaUgnYoMBkVqztBrWBlMgx3td68GXqNYQ/Xntu7iLiR7tr0Qh8SbR4gNyTUuS86T6wS57551mpfqSsicGHxGk/bd0F2bqAqbrirbXHrEcqqOodo7zvAg14bSrHwr4DoB5weqX8KzKK8m57/kV3Bk8MHxroC0h7CRM9ZO2//qzpc07SIk0YX1lHDCrsiyl7uldtFvE11xwUDpsBV2/uzluRdN2JFz6x74nGXORIH+ZNWPtCxr8hhDUEkuvpWiBw==; 5:RsPgr1l0tQjxQ5Ey+ZBi8PP/egitrYnDEurTOdYnFxItyeXVerj8PFZXyLRnbUVUlhUeWXDCwRFoX/LS/oKYetkvHjIhuQFb54gsYrYu8FKog5R5GkgHfk5LC3MsAK7QL6Ry1UiG2BOyHEcSL2yhBx3R/Ju0LjlMlctq+ydVRYM=; 24:YqTywpBlilxqC4PmBFPfYIc0wYbJ3Uq6jPbPsa1hjeNVUzy8l8lzml+6Le/yXwBvsRYoEs1pgL6QVIOTkzwvy3xReZTJdttvqzTPkWDux9w= SpamDiagnosticOutput: 1:99 SpamDiagnosticMetadata: NSPM X-Microsoft-Exchange-Diagnostics: 1; VI1PR04MB3006; 7:/DZ9PaR9yCm8KlWsSdkFYY40GHnhpZBx8VMn200x6I2Z8IoxsL6XDN9rrxpiyEMwyg4AqfVGkqItR9I/rE9etfyMJXfRaFo6VKB27tozb/1sXdOSpxj9GljMhweaWj2Dvbj3itBRkRiEpQuq7B/LN54EpyaxsdjdEVoEHG5OCRf88oijZkHN5vfZkwVz+7ySWzoxyBGOmc2GsXNwpvzHcQYatyn6veyqf+03Nbw31C45jeR31SVzJh0+txdEG+8d X-MS-Office365-Filtering-Correlation-Id: 9371dd59-ee03-4216-5bce-08d5c495ae0e X-OriginatorOrg: nxp.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 28 May 2018 12:22:27.2765 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: 9371dd59-ee03-4216-5bce-08d5c495ae0e X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 686ea1d3-bc2b-4c6f-a92c-d99c5c301635 X-MS-Exchange-Transport-CrossTenantHeadersStamped: VI1PR04MB3006 Cc: u-boot@lists.denx.de Subject: [U-Boot] [PATCH 19/41] imx8: add iomux configuration code X-BeenThere: u-boot@lists.denx.de X-Mailman-Version: 2.1.18 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" The pads are controlled by SCU, so we could not reuse the code as i.MX6/7/8M, so use dedicated iomux code to invoke the SCFW API to configure the pads. Signed-off-by: Peng Fan --- arch/arm/include/asm/arch-imx8/iomux.h | 40 +++++++++++++++++++++++++++++ arch/arm/mach-imx/imx8/Makefile | 2 +- arch/arm/mach-imx/imx8/iomux.c | 47 ++++++++++++++++++++++++++++++++++ 3 files changed, 88 insertions(+), 1 deletion(-) create mode 100644 arch/arm/include/asm/arch-imx8/iomux.h create mode 100644 arch/arm/mach-imx/imx8/iomux.c diff --git a/arch/arm/include/asm/arch-imx8/iomux.h b/arch/arm/include/asm/arch-imx8/iomux.h new file mode 100644 index 0000000000..bedd01bfd8 --- /dev/null +++ b/arch/arm/include/asm/arch-imx8/iomux.h @@ -0,0 +1,40 @@ +/* SPDX-License-Identifier: GPL-2.0+ */ +/* + * Copyright 2018 NXP + */ + +#ifndef __ASM_ARCH_IMX8_IOMUX_H__ +#define __ASM_ARCH_IMX8_IOMUX_H__ + +/* + * We use 64bits value for iomux settings. + * High 32bits are used for padring register value, + * low 16bits are used for pin index. + */ +typedef u64 iomux_cfg_t; + +#define PADRING_IFMUX_EN_SHIFT 31 +#define PADRING_IFMUX_EN_MASK BIT(31) +#define PADRING_GP_EN_SHIFT 30 +#define PADRING_GP_EN_MASK BIT(30) +#define PADRING_IFMUX_SHIFT 27 +#define PADRING_IFMUX_MASK GENMASK(29, 27) +#define PADRING_CONFIG_SHIFT 25 +#define PADRING_LPCONFIG_SHIFT 23 +#define PADRING_PULL_SHIFT 5 +#define PADRING_DSE_SHIFT 0 + +#define MUX_PAD_CTRL_SHIFT 32 +#define MUX_PAD_CTRL_MASK ((iomux_cfg_t)0xFFFFFFFF << MUX_PAD_CTRL_SHIFT) +#define MUX_PAD_CTRL(x) ((iomux_cfg_t)(x) << MUX_PAD_CTRL_SHIFT) +#define MUX_MODE_SHIFT (PADRING_IFMUX_SHIFT + MUX_PAD_CTRL_SHIFT) +#define MUX_MODE_MASK ((iomux_cfg_t)0x7 << MUX_MODE_SHIFT) +#define PIN_ID_MASK ((iomux_cfg_t)0xFFFF) + +/* Valid mux alt0 to alt7 */ +#define MUX_MODE_ALT(x) (((iomux_cfg_t)(x) << MUX_MODE_SHIFT) & \ + MUX_MODE_MASK) + +void imx8_iomux_setup_pad(iomux_cfg_t pad); +void imx8_iomux_setup_multiple_pads(iomux_cfg_t const *pad_list, u32 count); +#endif /* __ASM_ARCH_IMX8_IOMUX_H__ */ diff --git a/arch/arm/mach-imx/imx8/Makefile b/arch/arm/mach-imx/imx8/Makefile index 2921d18f9f..17ecf57ffa 100644 --- a/arch/arm/mach-imx/imx8/Makefile +++ b/arch/arm/mach-imx/imx8/Makefile @@ -4,7 +4,7 @@ # SPDX-License-Identifier: GPL-2.0+ # -obj-y += cpu.o clock.o +obj-y += cpu.o clock.o iomux.o obj-y += fsl_mu_hal.o sci/ipc.o obj-y += sci/svc/misc/rpc_clnt.o obj-y += sci/svc/pad/rpc_clnt.o diff --git a/arch/arm/mach-imx/imx8/iomux.c b/arch/arm/mach-imx/imx8/iomux.c new file mode 100644 index 0000000000..a33a322b4f --- /dev/null +++ b/arch/arm/mach-imx/imx8/iomux.c @@ -0,0 +1,47 @@ +// SPDX-License-Identifier: GPL-2.0+ +/* + * Copyright 2018 NXP + */ + +#include +#include +#include +#include + +DECLARE_GLOBAL_DATA_PTR; + +/* + * configures a single pad in the iomuxer + */ +void imx8_iomux_setup_pad(iomux_cfg_t pad) +{ + sc_err_t err; + sc_ipc_t ipc; + + sc_pad_t pin_id = pad & PIN_ID_MASK; + + u32 val = (u32)((pad & MUX_PAD_CTRL_MASK) >> MUX_PAD_CTRL_SHIFT); + + ipc = gd->arch.ipc_channel_handle; + + val |= PADRING_IFMUX_EN_MASK; + val |= PADRING_GP_EN_MASK; + + err = sc_pad_set(ipc, pin_id, val); + if (err != SC_ERR_NONE) + printf("sc_pad_set failed!, pin: %u, val: 0x%x\n", pin_id, val); + + debug("iomux: pin %d, val = 0x%x\n", pin_id, val); +} + +/* configures a list of pads within declared with IOMUX_PADS macro */ +void imx8_iomux_setup_multiple_pads(iomux_cfg_t const *pad_list, u32 count) +{ + iomux_cfg_t const *p = pad_list; + int i; + + for (i = 0; i < count; i++) { + imx8_iomux_setup_pad(*p); + p++; + } +} From patchwork Mon May 28 12:25:05 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Peng Fan X-Patchwork-Id: 921513 X-Patchwork-Delegate: sbabic@denx.de Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Authentication-Results: ozlabs.org; spf=none (mailfrom) smtp.mailfrom=lists.denx.de (client-ip=81.169.180.215; helo=lists.denx.de; envelope-from=u-boot-bounces@lists.denx.de; receiver=) Authentication-Results: ozlabs.org; dmarc=fail (p=none dis=none) header.from=nxp.com Authentication-Results: ozlabs.org; dkim=fail reason="signature verification failed" (1024-bit key; unprotected) header.d=nxp.com header.i=@nxp.com header.b="f9MlLG+I"; dkim-atps=neutral Received: from lists.denx.de (dione.denx.de [81.169.180.215]) by ozlabs.org (Postfix) with ESMTP id 40vbzt3pBsz9s0q for ; Mon, 28 May 2018 22:40:26 +1000 (AEST) Received: by lists.denx.de (Postfix, from userid 105) id 10A88C21E07; Mon, 28 May 2018 12:27:15 +0000 (UTC) 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=BAD_ENC_HEADER, RCVD_IN_DNSWL_BLOCKED, SPF_HELO_PASS, T_DKIM_INVALID autolearn=unavailable autolearn_force=no version=3.4.0 Received: from lists.denx.de (localhost [IPv6:::1]) by lists.denx.de (Postfix) with ESMTP id 544F4C21E2F; Mon, 28 May 2018 12:23:09 +0000 (UTC) Received: by lists.denx.de (Postfix, from userid 105) id 78171C21E16; Mon, 28 May 2018 12:22:37 +0000 (UTC) Received: from EUR03-DB5-obe.outbound.protection.outlook.com (mail-eopbgr40040.outbound.protection.outlook.com [40.107.4.40]) by lists.denx.de (Postfix) with ESMTPS id E7B4DC21DEC for ; Mon, 28 May 2018 12:22:33 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=nxp.com; s=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=3nD3FBY+QLEGaoR6LSyZGMPrkgXkksf539Y6OD23t08=; b=f9MlLG+IDIeTvR9Q0ny9qdnwpavknJ6JYXwzaWQJDcyREoSeTtZcGS4JFV73Ce4ZjQZ7EolB56zz6MBJG/CEXsox/43wmAjT+6TiMgBsW4e30JfqGrqjfZpsl47YLkf8bXA+G4ZG1SulJGxSfpJxyH5Rv5PDNf7nbV/9VWplb8M= Authentication-Results: spf=none (sender IP is ) smtp.mailfrom=peng.fan@nxp.com; Received: from linux-u7w5.ap.freescale.net.net (92.121.68.129) by VI1PR04MB3006.eurprd04.prod.outlook.com (2603:10a6:802:9::12) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384_P256) id 15.20.797.11; Mon, 28 May 2018 12:22:29 +0000 From: Peng Fan To: sbabic@denx.de, fabio.estevam@nxp.com Date: Mon, 28 May 2018 20:25:05 +0800 Message-Id: <20180528122526.20597-21-peng.fan@nxp.com> X-Mailer: git-send-email 2.14.1 In-Reply-To: <20180528122526.20597-1-peng.fan@nxp.com> References: <20180528122526.20597-1-peng.fan@nxp.com> MIME-Version: 1.0 X-Originating-IP: [92.121.68.129] X-ClientProxiedBy: HK2PR02CA0175.apcprd02.prod.outlook.com (2603:1096:201:21::11) To VI1PR04MB3006.eurprd04.prod.outlook.com (2603:10a6:802:9::12) X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-HT: Tenant X-Microsoft-Antispam: UriScan:; BCL:0; PCL:0; RULEID:(7020095)(4652020)(5600026)(48565401081)(4534165)(4627221)(201703031133081)(201702281549075)(2017052603328)(7153060)(7193020); SRVR:VI1PR04MB3006; X-Microsoft-Exchange-Diagnostics: 1; VI1PR04MB3006; 3:2cYiSs3bb9I3RvRZU/4zcdnWY/LrcHNHns7DH5oXrtT296302Yq00aZYoxMCirm0tA0gXnLAlOckDqNxzffrlolBGsgpk8TGehD3icX/i8Jjlo5RSirEkcJSlxMa1+Lmie3AMfNFd2G1FFMcbTB9bA6E7LaNFVXpZ0xoXuU11x2At1hvV+gL95SEGh7GLBw3a/vg5ytqq+Q8LC4cpcvgJ0NgU/gt6GGdFw6bBB2JA9NeeENrr1b8uLO25h692dRn; 25:tWh6lwulqa6p980YCu2pObngc8EJqmrGUTXzvnG5THfCgQYlBLrgbtABlXxmLaKYYzjXCKXKzUIDW+bGGkT5UzHf/yABd6PZoynlL60KXYZa8tfeoZtcCUNXHvdFIkbFuJEublNyq0Tf3u7n+FzssYe80we/09I9Vli9XPtfagIc0iefTUAJp3LYP7+8paAPCJ51JZD65ByCt67o6vSdH/EalkEMotZ6bNie7YfX588Blvq+NZwdIEqlOpqCdTBJ0bnNTAMkA63Pm9YXtd+PK4R0YuJ2hJxl6Whg/dN4qKzxKPxSW3gwLEekHFH6hYikxIBLv4G7QtQKAjC2ADHEcQ==; 31:IHn/yHW8gqHmqEwqgWgbwLLtRLWrZm5ysmqwaz7M3q1yLcO2ZmT4XCaupGztx4Hq9GXmgr/6xn89kR1XZQkslgR46hsuecOdcEV+MRzSngJQj9QtGmHjfrpF0ug5SRMr2L/kc38IefQTD5MDOZQVhxJgW1HwXosCSJmaVaok2kS7Og2fhyN7ouLX7Bypot7XSglBSC+SRsiToN0h6fE7fAgHevS22XoyJ4Lv73wyHDA= X-MS-TrafficTypeDiagnostic: VI1PR04MB3006: X-Microsoft-Exchange-Diagnostics: 1; VI1PR04MB3006; 20:vRcYo3RcHKhhIRFE33t/T1KOhCsoRhZtT74ZYJNqzpDAG00+QQVFp8VeBAWtikQslG/vBwSkyU6fI1X3Tt6rvD9gtwl9ioaI7EqHlUcf6r7wXOyuvRFtz3UlmkZ8SgovN2pWWEzEbHWLWBbIn2z2sbhdC3bLL1wddw9JXPZ0OrQ03smW+ca9kMVabDxEI/TGHcBCWnr1Bjqc/W/UX1/QeOzF8Ls23z+bngiwcONmaanTXVRkAdQ80J+01YENTy/DfXiiebrJNQcCnJI94MaRYVyejtq+ZSFGxEuL1RDug2oHevRqq/hDGG6RP5WNUoFmeic5uVzeIpIGA3bbYgDlwTXf4uFE16GDipFI1UstDfteiOxaHxuRBTQMKDRl0UyyGVIbOxnG9lqCOYduaAQNnqf6SB2LEdhjQZRxpgRZSQJEfoSq2611aYRvw/cjfq6secb4iWa7T9MT1Y7gzNv43q0GjodVtjjrrmjOsG8lSbvtWKakJc3HzrXwQ/gK9Naa; 4:A5kc/JP4YMTFHeeLzb3kloBvdUkh3VKygWcNtNyS8zeqwBgk3DG5nc/fb+s0HthVS7vwmn2HdcbD3/IxIYtTW97PNm11bmObtlNsDrJX4SQUSwFIAbKQXTgfgZRQdD8eRWc8Hp4JWBtcOupb5CSctiH2/QSAXixBUaiY64g4cZW0KeyqjC77Cd1XiX8pD+MBygGoLrh5Il2v5b8LAp+pHYPZbpwxIa4A/xLT+hDD15DnVVxVGHXUv4FbDEPgeFg+Q9yveuEv/trhE8DQI4Jff19dXyWnJiabWFlyU85Iue8XtlJxg3Gf9WU4/ITGZwTWxb5L5/zP39a+SHHcNhQ83Hgb28yLm9rbDGQzfEk7rsw= X-Microsoft-Antispam-PRVS: X-Exchange-Antispam-Report-Test: UriScan:(185117386973197)(7411616537696); X-MS-Exchange-SenderADCheck: 1 X-Exchange-Antispam-Report-CFA-Test: BCL:0; PCL:0; RULEID:(8211001083)(6040522)(2401047)(8121501046)(5005006)(3002001)(93006095)(93001095)(3231254)(944501410)(52105095)(10201501046)(6055026)(149027)(150027)(6041310)(20161123558120)(20161123560045)(201703131423095)(201702281528075)(20161123555045)(201703061421075)(201703061406153)(20161123562045)(20161123564045)(6072148)(201708071742011)(7699016); SRVR:VI1PR04MB3006; BCL:0; PCL:0; RULEID:; SRVR:VI1PR04MB3006; X-Forefront-PRVS: 06860EDC7B X-Forefront-Antispam-Report: SFV:NSPM; SFS:(10009020)(366004)(39380400002)(396003)(39860400002)(376002)(346002)(199004)(189003)(36756003)(97736004)(6636002)(6666003)(68736007)(86362001)(8676002)(44832011)(8936002)(81166006)(81156014)(47776003)(11346002)(956004)(2616005)(476003)(446003)(25786009)(486006)(48376002)(106356001)(105586002)(186003)(50466002)(16526019)(2906002)(6512007)(53936002)(1076002)(66066001)(26005)(51416003)(478600001)(305945005)(54906003)(50226002)(6486002)(5660300001)(6116002)(76176011)(3846002)(16586007)(52116002)(6506007)(4326008)(316002)(7736002)(386003); DIR:OUT; SFP:1101; SCL:1; SRVR:VI1PR04MB3006; H:linux-u7w5.ap.freescale.net.net; FPR:; SPF:None; LANG:en; PTR:InfoNoRecords; A:1; MX:1; Received-SPF: None (protection.outlook.com: nxp.com does not designate permitted sender hosts) X-Microsoft-Exchange-Diagnostics: =?us-ascii?Q?1; VI1PR04MB3006; 23:tbjqZ3jeJh/O7e69uP2ZUvQRAgytO3nGi3TTavrZY?= yQ8yk5Eqdt1wXcNehCx78tgC49WuK9s4mcL7+ZS7JOCv8Z1GzSzGWGR1l96fOT3KfNGYpg3Ym7/0hcMTGto3KfrubqKYY+q/qLSRU/r7OrircGmKyw9M1QrJmwjGkgXBsrQY425CWf+Av2Cu0KYC8ZypOrLtxjL/7MbJv1MO+h0sIiiaK49ykUK8phYnmSoYcuQyMkcUzO9jBMuprEU2lMY7KS59ghitimYlKlFEpjlUuEvt9VktbGwQ7IrfKtmZYdDMWa9NHM6erJYJEpsq1VBC4L7gU9oTakDLgr/BMbzQowp+i3LY3UBD3rEV1PYUmzK3YYNU22o2vwo5/LrDjMn/YJk7RutzkkSlwiUASBty2rcrcy8tVZkF3SZzU+iLaVOcquXriRCgKyvPhk3Dqcdjp8Vgh/kLs5vd3U1BAfaJq93s7TnjTBA0Atl77NvE4o/iAQo12cI6yb1rXMiynWLn7vSNg4fkJtcvRh8ms4BRjsLF1g0r5KKSprTML/6ZHk9pInMgWOr4XVfUi3odClkbe/GooONk+zIxBrc3/5XBulD52N+z845+69AmXzB0Nk5LQuuc/3DZFvo6mwOj5rmTDstubEE2nJXtMSVqZhVfL1vsgIZU8veE1JL/h0Ofcn2x59ZsCgiG9gfFdiV5jFJ7/HteAlXajIzp4S4sLX0fvvs3bQkxu8H9dsOjFa4rQUWwnDsUC1I3d9m/KJjkZs6f8ZPTKaS110C5kHgYgwRCwbhU5IbeR8dHah+ld/9/TPU9TmGxUV9eRbZ35K+qbXT0IT6EnUZqqS3uz047HuNOl7Rqym841TKGr36+rxJO0TQ9FZzt77TCeOGxNSy+dG1mhbntmfhOc6n2rF/SCoKnlqDXZw5FjxMwLw59+5VvQ5UmDA2v26fCfz3Zu3ZWhwSqV9seoEjvByYSkKnIx1fJ5AIl7daZhOalQJNPtgrJ/dtHQUknmZX6WwcWPWWb1rYODgQbD5P32fatRXeKlzEzq7ylRl2eLmb3SsBBah7DQ5iafxDfF0rWnMbIdVdt/3NNBQNm6VcTR4mcRH9YOsFGfMi0HqYaBp9XJmgXe887iF650AsXfsK3zO8WNEVJYsMqZX2kOKBbgTbAttdjNSnisRh2j25A1ftM5sSk/CeCXFkLP/50jpdnU7aVsitT0XmzAAK/14K7Kx/6R4Fj2gFrUHG6yorY9NRzWGIQXVlbUk= X-Microsoft-Antispam-Message-Info: skXlByAILRlwlNVjkRtHa/YV0pJIWTfnnNVT9A1qV0zxL4bUedH7EFCsXrmHVhIJcz72323asq/kvdbgtfNFtGJZqHw6wX627nVanr4sheo/JgNJq3234lLAwDCZKRdgLJwWrIP3BUjjvdyN+29H1ARiIjl8TJluBQfbwy0Y1v583Zhd6uyXXWOu0fB51NSz X-Microsoft-Exchange-Diagnostics: 1; VI1PR04MB3006; 6:RptKoRw+62Jvr9nnT87AD8AV+ova5TI1eqfeYojaIfoF8bukes6oLBiL13Q7a/qqNfulrONmQGLBxDvx78UkJ7/CbjURW0QuQwtVEiRqWOQ55dQ0ZHXvtoHKxm67pw4QNeUn1gK/xPAQ3Eo/6lIDaK19thM63apvKRWyjYfWRg5PgmazK5Hufv4ryPftc7XCc7UOUMf5MwRSy36WOiE0Q8gPfC4reM25OO+gOGR25jylximoqOPXUe84c2XCYpFACIgrAA7EvG5fevBhIryAfMmxbjuE4W7jGMsNWj5ERegEbkyzGly6CXC1xBcIKquz28y2Oat3CbG7kpp2nZ7g54UKIyVCWBwdOEAZeJZCCtwvJDXU9tg5ln5slCzjGXlUVTUpvFn6Mr3uH61clZBymGI0a2z/IWM1ktLIOSCaKQodEc4q/PG9ho4TOhIigu+DOWA8HUJK4ZnTHpD9ly5ipg==; 5:kWaNfybL+WqugimlFfQi4YPekOimozRhbRjqHtdPyFLKm+q3/Ti+yon+vbCo7wYgup93I9VbF+rYtCe5NL0G99ropS9qLzUqp+Cm9jnETWLDo0KFsSvhFGB9SPBVGDExS0ZI3IEAHfl4oWtnNNKsfuXXt6ISfC9iBXRFmX4WcqU=; 24:M+lT61oyXvr5SQKkiHtd6uh0cgonfSi8CAcNgfNMuGEAOBf7ntRSQPXbTdPPz0KGQMQ5AV0WeX+bQuGgSbJm56/NVfSUmHbI1SrcrsNwEs0= SpamDiagnosticOutput: 1:99 SpamDiagnosticMetadata: NSPM X-Microsoft-Exchange-Diagnostics: 1; VI1PR04MB3006; 7:yHQ2GaOZFUlU55vId/coN1G2L5KBDunQ6sWrZQrZxjy9M9PfjJi2f45zDq5tsqykqf4XKZrEQDdaYo4AIC3V5qeUVvjncPkclVqOKCLyBNhiNDYRWMwL8vgCqdO8wCWKi35fzaaUP02hExeVmhKG7wCPM8UPstVywu4G7sH/6YHWXJ0Z3v80jwjNltDUkdoc/+yA3kE9itXHDW8T+QkQMukflBtsfs3uNUV27djXTdeEojjxnbLH4L5Wv0lONs8O X-MS-Office365-Filtering-Correlation-Id: 657f0092-0577-47c2-1e39-08d5c495b016 X-OriginatorOrg: nxp.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 28 May 2018 12:22:29.8703 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: 657f0092-0577-47c2-1e39-08d5c495b016 X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 686ea1d3-bc2b-4c6f-a92c-d99c5c301635 X-MS-Exchange-Transport-CrossTenantHeadersStamped: VI1PR04MB3006 Cc: u-boot@lists.denx.de Subject: [U-Boot] [PATCH 20/41] fsl_esdhc: Update usdhc driver to support i.MX8 X-BeenThere: u-boot@lists.denx.de X-Mailman-Version: 2.1.18 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" From: Ye Li Add CONFIG_IMX8 to use the 64bits support in usdhc driver. Signed-off-by: Ye Li Signed-off-by: Peng Fan Cc: Jaehoon Chung --- drivers/mmc/fsl_esdhc.c | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/drivers/mmc/fsl_esdhc.c b/drivers/mmc/fsl_esdhc.c index 4528345c67..1b062ff06d 100644 --- a/drivers/mmc/fsl_esdhc.c +++ b/drivers/mmc/fsl_esdhc.c @@ -257,7 +257,7 @@ static int esdhc_setup_data(struct fsl_esdhc_priv *priv, struct mmc *mmc, int timeout; struct fsl_esdhc *regs = priv->esdhc_regs; #if defined(CONFIG_FSL_LAYERSCAPE) || defined(CONFIG_S32V234) || \ - defined(CONFIG_MX8M) + defined(CONFIG_IMX8) || defined(CONFIG_MX8M) dma_addr_t addr; #endif uint wml_value; @@ -271,7 +271,7 @@ static int esdhc_setup_data(struct fsl_esdhc_priv *priv, struct mmc *mmc, esdhc_clrsetbits32(®s->wml, WML_RD_WML_MASK, wml_value); #ifndef CONFIG_SYS_FSL_ESDHC_USE_PIO #if defined(CONFIG_FSL_LAYERSCAPE) || defined(CONFIG_S32V234) || \ - defined(CONFIG_MX8M) + defined(CONFIG_IMX8) || defined(CONFIG_MX8M) addr = virt_to_phys((void *)(data->dest)); if (upper_32_bits(addr)) printf("Error found for upper 32 bits\n"); @@ -301,7 +301,7 @@ static int esdhc_setup_data(struct fsl_esdhc_priv *priv, struct mmc *mmc, wml_value << 16); #ifndef CONFIG_SYS_FSL_ESDHC_USE_PIO #if defined(CONFIG_FSL_LAYERSCAPE) || defined(CONFIG_S32V234) || \ - defined(CONFIG_MX8M) + defined(CONFIG_IMX8) || defined(CONFIG_MX8M) addr = virt_to_phys((void *)(data->src)); if (upper_32_bits(addr)) printf("Error found for upper 32 bits\n"); @@ -367,7 +367,7 @@ static void check_and_invalidate_dcache_range unsigned size = roundup(ARCH_DMA_MINALIGN, data->blocks*data->blocksize); #if defined(CONFIG_FSL_LAYERSCAPE) || defined(CONFIG_S32V234) || \ - defined(CONFIG_MX8M) + defined(CONFIG_IMX8) || defined(CONFIG_MX8M) dma_addr_t addr; addr = virt_to_phys((void *)(data->dest)); From patchwork Mon May 28 12:25:06 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Peng Fan X-Patchwork-Id: 921491 X-Patchwork-Delegate: sbabic@denx.de Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Authentication-Results: ozlabs.org; spf=none (mailfrom) smtp.mailfrom=lists.denx.de (client-ip=81.169.180.215; helo=lists.denx.de; envelope-from=u-boot-bounces@lists.denx.de; receiver=) Authentication-Results: ozlabs.org; dmarc=fail (p=none dis=none) header.from=nxp.com Authentication-Results: ozlabs.org; dkim=fail reason="signature verification failed" (1024-bit key; unprotected) header.d=nxp.com header.i=@nxp.com header.b="Ktmt6IO+"; dkim-atps=neutral Received: from lists.denx.de (dione.denx.de [81.169.180.215]) by ozlabs.org (Postfix) with ESMTP id 40vbmV51h0z9s0q for ; Mon, 28 May 2018 22:30:34 +1000 (AEST) Received: by lists.denx.de (Postfix, from userid 105) id 412BFC21DFA; Mon, 28 May 2018 12:27:33 +0000 (UTC) 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=BAD_ENC_HEADER, RCVD_IN_DNSWL_BLOCKED, SPF_HELO_PASS, T_DKIM_INVALID autolearn=unavailable autolearn_force=no version=3.4.0 Received: from lists.denx.de (localhost [IPv6:::1]) by lists.denx.de (Postfix) with ESMTP id 92EAAC21DD9; Mon, 28 May 2018 12:23:12 +0000 (UTC) Received: by lists.denx.de (Postfix, from userid 105) id A19B2C21EB1; Mon, 28 May 2018 12:22:43 +0000 (UTC) Received: from EUR01-HE1-obe.outbound.protection.outlook.com (mail-he1eur01on0082.outbound.protection.outlook.com [104.47.0.82]) by lists.denx.de (Postfix) with ESMTPS id E076AC21E62 for ; Mon, 28 May 2018 12:22:36 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=nxp.com; s=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=FtBFwUBoJTqROQx8+QtYXJv5wMm/3JG5PVMwjFioczg=; b=Ktmt6IO+CPW6sxxuHgC0t/umr6JCZbK5o5d0Bg09ARMCr7rUF0DmtjNacAOfIe3kXcQFEW52bqldy+6p2EMY698qz3Jmdq2GDw8gG4oPUjuCKBaFFKZoHgHUk7DM+YmW00gF4SmlBvy6D7HWiPGDJaUM2RSPo5PPg1+RE4XbNus= Authentication-Results: spf=none (sender IP is ) smtp.mailfrom=peng.fan@nxp.com; Received: from linux-u7w5.ap.freescale.net.net (92.121.68.129) by VI1PR04MB3006.eurprd04.prod.outlook.com (2603:10a6:802:9::12) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384_P256) id 15.20.797.11; Mon, 28 May 2018 12:22:33 +0000 From: Peng Fan To: sbabic@denx.de, fabio.estevam@nxp.com Date: Mon, 28 May 2018 20:25:06 +0800 Message-Id: <20180528122526.20597-22-peng.fan@nxp.com> X-Mailer: git-send-email 2.14.1 In-Reply-To: <20180528122526.20597-1-peng.fan@nxp.com> References: <20180528122526.20597-1-peng.fan@nxp.com> MIME-Version: 1.0 X-Originating-IP: [92.121.68.129] X-ClientProxiedBy: HK2PR02CA0175.apcprd02.prod.outlook.com (2603:1096:201:21::11) To VI1PR04MB3006.eurprd04.prod.outlook.com (2603:10a6:802:9::12) X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-HT: Tenant X-Microsoft-Antispam: UriScan:; BCL:0; PCL:0; RULEID:(7020095)(4652020)(5600026)(48565401081)(4534165)(4627221)(201703031133081)(201702281549075)(2017052603328)(7153060)(7193020); SRVR:VI1PR04MB3006; X-Microsoft-Exchange-Diagnostics: 1; VI1PR04MB3006; 3:QPHuwEIR5VHGeI3qzsq7B4KXHDP3lBUNbtXcUyQAnBcTG95/1Yup+2zHIUC1wr1TZsPDlewLx89J++ioQ7txk0FZTlvpyWIw5nU+jt+o4x7JJieeuxxsR+4JLYePFkYN7thHYaRJLkAVKdHqqcIbjolpJOslHxyQN1z1wH26TXZ6x3atA96P5A5TDRmtParCF6dOd3efXl5+uVv6U///TriQieV10LJ9ybhXsDiPLAuMcQ3aKPThTF+EN/LUxclW; 25:MOsXPrD8VhCNZTCB+/UGQQVIiPHfsCDNsK6oUbSRRsFbVmQAkqkVAC9wQYTl9BLgXeMU2oePxuGAX+9ss7XtgPLTqxuIt0DC//Wh+cd4Q0hHRrwufxjMXwf29Cidh3C9XJKKqpfkMZ8ZBIiYIA7qGM2I4iihMhb6NZhGov8HfRXFQvNJfKEmIycAgAxFKgxQnr46+2Gl74Dg5r/KNrJxdyw0fNOwBGKjEL0KoG5Lw8Juxko9x8oelOS/eF/9QMl4ozPYLYw/hJnarXsxlMzkHC49t5VifKiLWhAWopd/lTQTQ0P0AwJp+E79txqjMoaiOymPMfvlq5CvparMzCPRbA==; 31:L0/upypqkjnPtsoROp9BhzUZJzHNm9IAebn15pKgmHkScIj0ads+SUM/TrM6BNw3KOVAxLOn9d8qoCRL9UVLFAvTrVvWlWCus1prTN1CVOMw+P/5LRgI2YQD0Ho4jmsqvsHTKDV7XOKPZe5IbPi8q5j/VtIzaicEONEnLvit9YHAR5gCo2FNIC8xeaqoqU9g4ni0RmjDRpBGqTt77yaJiRIKGoq7MAtm0dYcdgl9Kn4= X-MS-TrafficTypeDiagnostic: VI1PR04MB3006: X-Microsoft-Exchange-Diagnostics: 1; VI1PR04MB3006; 20:G/i7LP0uBgEFqzkV88jsUs6TXyGBEnSNhFUHtLFjJDLCla+D+zqKzjRzSXwH/oeTIRSuUx8rPCQIrnNQ+GGj7pDQknfAGvPO78RjUo9Cr1CI8W82FwjOwqVJ6fOUAfk6DtOd83AjACosZGlLkip+rXXeiGU/B5luECJ4qk0iuUUjYej54hHo1s0OJCWRnAZoxXCmJ6cdEqO5oY8RmRkPLKiZgtvUxMETu6XHE0zRtWwUqQkB01PNv93eUnm1+mGFqmJLUMrYTpeRBO54GRujoD9H3RQVDJbA1jDjNxZxbHMecgtROtntKtKGBLuTumTzlAkSdZ+wve7GiaMs9QqPaMw5eIFFWa+iS09HMtLT3R94s4+zQNAL1y60nZAAERfCkyyrjXIYmGTPqQR0iZlaF9fsGE0FXEExWNpdGEyVDyePPGL/4mWtczwqkSy76n2GbWcmUzIgM0gdIq1X3Bj3EQaQEAeM/4ARWKvTqgWAoSxBQcthLv7VL66Kj9a9OuRn; 4:YegnG/M+NZ8nhZ+OFj40qPGuzPxgcrxAG2LkwnoSUhuZNB2T5vQd2bJ2WXt2wKI35lIpshVLdGVwcPTlRQjGCpHTtu+p5Oh5kHmFgKsi5ECP4Q3b1xOQaTZ2E43nSwhQtkeFrx6RN/2cEkrI1W+/mdHX4MmcfyieXN75mVBUu29G8lukhLjWKm15yzJNYiesU4bSUgR3h4DXNbtyJASvUCx5pwjK7zGZIrHp8W2evEW68gETjQkklGaoF4FxrJIQpJLgDz587x3sbxizObjSY4JGsjBmIp0J0I+2CQbla+fU8QQt8U8zYIVmHJX9GkN9 X-Microsoft-Antispam-PRVS: X-Exchange-Antispam-Report-Test: UriScan:(185117386973197); X-MS-Exchange-SenderADCheck: 1 X-Exchange-Antispam-Report-CFA-Test: BCL:0; PCL:0; RULEID:(8211001083)(6040522)(2401047)(8121501046)(5005006)(3002001)(93006095)(93001095)(3231254)(944501410)(52105095)(10201501046)(6055026)(149027)(150027)(6041310)(20161123558120)(20161123560045)(201703131423095)(201702281528075)(20161123555045)(201703061421075)(201703061406153)(20161123562045)(20161123564045)(6072148)(201708071742011)(7699016); SRVR:VI1PR04MB3006; BCL:0; PCL:0; RULEID:; SRVR:VI1PR04MB3006; X-Forefront-PRVS: 06860EDC7B X-Forefront-Antispam-Report: SFV:NSPM; SFS:(10009020)(366004)(39380400002)(396003)(39860400002)(376002)(346002)(199004)(189003)(36756003)(97736004)(6636002)(6666003)(68736007)(86362001)(8676002)(44832011)(8936002)(81166006)(81156014)(47776003)(11346002)(956004)(2616005)(476003)(446003)(25786009)(486006)(48376002)(106356001)(105586002)(186003)(50466002)(16526019)(2906002)(6512007)(53936002)(1076002)(59450400001)(66066001)(26005)(51416003)(478600001)(305945005)(54906003)(50226002)(6486002)(5660300001)(6116002)(76176011)(3846002)(16586007)(52116002)(6506007)(4326008)(316002)(7736002)(386003); DIR:OUT; SFP:1101; SCL:1; SRVR:VI1PR04MB3006; H:linux-u7w5.ap.freescale.net.net; FPR:; SPF:None; LANG:en; PTR:InfoNoRecords; A:1; MX:1; Received-SPF: None (protection.outlook.com: nxp.com does not designate permitted sender hosts) X-Microsoft-Exchange-Diagnostics: =?us-ascii?Q?1; VI1PR04MB3006; 23:a4+eEmAozwIHaeDG3EqeeqoCqfW1ycxj2uL8GuvQ/?= usyxRJVqmqMtCT7VfNrRCuU8AsTOKRFAhpFy5KMkbxttlQBBvOmhdnPKqtkdPHKcocnJlGsKWeGN1oe8FVFhHg9dySCIiMmNELZWDsFa6DgnVhKK9kDHGt8ksykvORbnosSuOeT+UGEWOLXXtsdl81UZwq6mNEMYYihzmCKCPIJI4LIsuRXo2uEUkSzWZ3nnn+6NJcTor2ip8HwzTQoIQWxsDrlOe0AJtgIaz/09j6v4UZYVxcXd0upAlDgOfhnsGmFzLeYLRV/RayNgchxfNj2xJTJUWcrn0oFIwWvAiYgCmbCzLzQ6bzklDPIqIlKE+/+pI0xvCsWh8Iw4Y0Udf11WDlwTTBAjf/3tbG+98EefxrNXquaSGMaZXsRd7yliSKkEmQIDD6tPViot9eA6r7Asf8QdulNTnB+akw3Qi+3oWhTeNJ13LaNwZKKUNiyw1XKtx/uvvAo6XDhHMdgwIf9K1Te1e0IUfx//niVhe7K9NNfzerQZmW0RWHgVY5nvYD8xgPgUsMKyOa9uMeyvWsx0zB4engIHNE0/8Xcpr817xJt6+SynKamVdD46F6rxDfie8CkadbFvnsaFZBK5YEZoconGRTpJaS05aQDiY2PmVzbDa5T6TujcsyIi3ElI6rfsFThbrAHVhBky8mpxIyQfF66TY3G/8szt1tNGVLOvKENFjV7GbzZDQ2YOMovawRwWdL3kiazQxs1Nw2kUzezMtxOU+S3rf18Icpp3G2tIUxyv4/t4ewEA6jnSjDThQUdOd8fRMR3Mb+10HWdlLiOz04UzHA0T5SBxiCCqOynXW3e35XJnFfNyhAL8KcrMvSsYR0H7WhZGDPRNxEsmMZ5RE6TxOaVVjTFKl0gwUYip/m554ORK6JbUAEik0obNXx15PfJjhIUNefAptPE5OGXdamo3GNMlib9E7w/wmvDnSpX7lKCdEw7qgX2dKopoJpqmgfHrNjGQYOJcI24fXb2K3Vp4iKPo3YD518CEPtlEAA865Ev8nYi8aqnaKoIari70EJrYKknCsjW7NJi/gjHcUSA8/JNBv1SQyyjUeswkJyCANQG/Kf+UrlpkKq4DPlKFlWmPR3wTZkvQC26sQkvtHStolq/F7OpAjzjxGxblUXo9lPKg08s/FPHxYUCba4FfFXEB6RfPfXhn2xOa1WDAEVT96ah5cHqr0EjsP17aOJyc4pYhqWcxVd5IuKGCTduQgKm3rslx1qd2LN6sa29 X-Microsoft-Antispam-Message-Info: UICSzOQDki3cCBp/qGmymXmmldmnGCzmgVajL1WobKgkudUHDLP+qlE+LoQ0a0ffCUOnG6hJwXxdN/4T4x/xCzbEPcDc4hk/9KYvJo4SmCaSGimrmzq38Cl+alfBZPsaiXvlaNW8ooJI4uC3U9VCHQkMqjLqLwJZTImEV0RAQdvsvEntxmhfVJHzzPa2GJId X-Microsoft-Exchange-Diagnostics: 1; VI1PR04MB3006; 6:CrVnigdeFPSqJJYBuXwp2B3gecldkbR7wafUpgr5rAkV5oPCK7mD+yIL7h/6l2SDT1rBpY//Eo/zlQojyW/ghqOLI3yhb5M+QbbX6nkjyRH5/EQdLtQPUysONh7LOnIGeHmAsRkeXwa4vZdGHJXYGGXTmgGP5TydnI9/IZ3x7735r3HQwa3gkXFglM738U82+MgOAr2akAXn6TwfMmGRJy7KQeVrlHHOH2rqh0+5KD0kJiuh/2zIjAk6s1BCjG4tplFKcLjriSfNV4V3Y4dHQJM/UaIML0uNMfbC9lB3L+vvGNwPnqrIiEPAzEcoi8ibwMNyH2GdYG5cwQc2JxpHOtb71ks/0WgahZqErP60XTNI2hu1ylMZZWIiOt5RpPXvrU9sXV5iEM4uTNULEQWz1lJ+Cxzreyp93ir3h/U7WGJXgPWe0C586Ti2twZ6qL419ioX1NxRsshY62umev/xpg==; 5:jWGirjo2wLaqySgtYnxy9dkOD0dbug7jkzifXYS5h+/a4Adai9Eix89Co/2WUL/VSp9KS6KKY9wLzcUlQ6TcdRKj5VW1IRnujLbZHXwFHsywHrzrXSzK6DT3rmKbp5D+7I6qiEmBx/99GHuWh6NaItYLa1r99yetDLGss+mA7CM=; 24:rBmqfgocuFd7sCTaNOF1coCJB+jO2lWUmmqivMfvHjmYdxiWNG/weZxb2EC6ZE9Hr5l8FzCgv/W4aTinLs0pCiabhzzIuWokjowLRJpNSkU= SpamDiagnosticOutput: 1:99 SpamDiagnosticMetadata: NSPM X-Microsoft-Exchange-Diagnostics: 1; VI1PR04MB3006; 7:JF2bHJhSWTBMwLq/1azu9fLSUz+7oGAuqHvkVOraRwYsFRcCQzPToJCn4dE8+2jnBY7vL3Vu/KgmAzDHnooF8A5UtcYngI9qgKGaW0M4dKpKYbl/6Zzw49kAiR36v8LGUMo/8VuveMByJEFGl1UFhJ1pdhAWl2r46RelC5VbcolTmGnmf0pZyDw/s0c9Yk6wp7QmwJnD1XSrq20OBthLLXa2zUvBftS646BhDZ/xW4F0tv82KHI+VS2PfSNV8BBy X-MS-Office365-Filtering-Correlation-Id: 9b55830b-541e-438c-93ce-08d5c495b1f0 X-OriginatorOrg: nxp.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 28 May 2018 12:22:33.4485 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: 9b55830b-541e-438c-93ce-08d5c495b1f0 X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 686ea1d3-bc2b-4c6f-a92c-d99c5c301635 X-MS-Exchange-Transport-CrossTenantHeadersStamped: VI1PR04MB3006 Cc: u-boot@lists.denx.de Subject: [U-Boot] [PATCH 21/41] serial_lpuart: Update lpuart driver to support i.MX8 X-BeenThere: u-boot@lists.denx.de X-Mailman-Version: 2.1.18 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" Add i.MX8 compatible string and cpu type support to lpuart driver, to use little endian 32 bits configurations. Also, accroding to RM, the Receive FIFO Enable (RXFE) field in LPUART FIFO register is bit 3, so the definition should change to 0x08 not 0x40 for i.MX8, otherwise the Receive FIFO is not disabled. Signed-off-by: Peng Fan Signed-off-by: Ye Li --- drivers/serial/serial_lpuart.c | 15 ++++++++++++--- include/fsl_lpuart.h | 2 +- 2 files changed, 13 insertions(+), 4 deletions(-) diff --git a/drivers/serial/serial_lpuart.c b/drivers/serial/serial_lpuart.c index 1212b72676..a5a2f65c77 100644 --- a/drivers/serial/serial_lpuart.c +++ b/drivers/serial/serial_lpuart.c @@ -41,7 +41,11 @@ #define CTRL_RE (1 << 18) #define FIFO_TXFE 0x80 +#ifdef CONFIG_IMX8 +#define FIFO_RXFE 0x08 +#else #define FIFO_RXFE 0x40 +#endif #define WATER_TXWATER_OFF 1 #define WATER_RXWATER_OFF 16 @@ -54,7 +58,8 @@ DECLARE_GLOBAL_DATA_PTR; enum lpuart_devtype { DEV_VF610 = 1, DEV_LS1021A, - DEV_MX7ULP + DEV_MX7ULP, + DEV_IMX8 }; struct lpuart_serial_platdata { @@ -325,7 +330,7 @@ static int _lpuart32_serial_init(struct lpuart_serial_platdata *plat) lpuart_write32(plat->flags, &base->match, 0); - if (plat->devtype == DEV_MX7ULP) { + if (plat->devtype == DEV_MX7ULP || plat->devtype == DEV_IMX8) { _lpuart32_serial_setbrg_7ulp(plat, gd->baudrate); } else { /* provide data bits, parity, stop bit, etc */ @@ -342,7 +347,7 @@ static int lpuart_serial_setbrg(struct udevice *dev, int baudrate) struct lpuart_serial_platdata *plat = dev->platdata; if (is_lpuart32(dev)) { - if (plat->devtype == DEV_MX7ULP) + if (plat->devtype == DEV_MX7ULP || plat->devtype == DEV_IMX8) _lpuart32_serial_setbrg_7ulp(plat, baudrate); else _lpuart32_serial_setbrg(plat, baudrate); @@ -427,6 +432,8 @@ static int lpuart_serial_ofdata_to_platdata(struct udevice *dev) plat->devtype = DEV_MX7ULP; else if (!fdt_node_check_compatible(blob, node, "fsl,vf610-lpuart")) plat->devtype = DEV_VF610; + else if (!fdt_node_check_compatible(blob, node, "fsl,imx8qm-lpuart")) + plat->devtype = DEV_IMX8; return 0; } @@ -444,6 +451,8 @@ static const struct udevice_id lpuart_serial_ids[] = { { .compatible = "fsl,imx7ulp-lpuart", .data = LPUART_FLAG_REGMAP_32BIT_REG }, { .compatible = "fsl,vf610-lpuart"}, + { .compatible = "fsl,imx8qm-lpuart", + .data = LPUART_FLAG_REGMAP_32BIT_REG }, { } }; diff --git a/include/fsl_lpuart.h b/include/fsl_lpuart.h index 02ebfefc74..7a8231ec19 100644 --- a/include/fsl_lpuart.h +++ b/include/fsl_lpuart.h @@ -4,7 +4,7 @@ * */ -#ifdef CONFIG_ARCH_MX7ULP +#if defined(CONFIG_ARCH_MX7ULP) || defined(CONFIG_IMX8) struct lpuart_fsl_reg32 { u32 verid; u32 param; From patchwork Mon May 28 12:25:07 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Peng Fan X-Patchwork-Id: 921497 X-Patchwork-Delegate: sbabic@denx.de Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Authentication-Results: ozlabs.org; spf=none (mailfrom) smtp.mailfrom=lists.denx.de (client-ip=81.169.180.215; helo=lists.denx.de; envelope-from=u-boot-bounces@lists.denx.de; receiver=) Authentication-Results: ozlabs.org; dmarc=fail (p=none dis=none) header.from=nxp.com Authentication-Results: ozlabs.org; dkim=fail reason="signature verification failed" (1024-bit key; unprotected) header.d=nxp.com header.i=@nxp.com header.b="BsBtd2Cn"; dkim-atps=neutral Received: from lists.denx.de (dione.denx.de [81.169.180.215]) by ozlabs.org (Postfix) with ESMTP id 40vbrV5yn0z9s0y for ; Mon, 28 May 2018 22:34:02 +1000 (AEST) Received: by lists.denx.de (Postfix, from userid 105) id 7D9B8C21DB6; Mon, 28 May 2018 12:29:01 +0000 (UTC) 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=BAD_ENC_HEADER, RCVD_IN_DNSWL_BLOCKED, SPF_HELO_PASS, T_DKIM_INVALID autolearn=unavailable autolearn_force=no version=3.4.0 Received: from lists.denx.de (localhost [IPv6:::1]) by lists.denx.de (Postfix) with ESMTP id 53D3AC21E2C; Mon, 28 May 2018 12:24:01 +0000 (UTC) Received: by lists.denx.de (Postfix, from userid 105) id 8CB1EC21C6A; Mon, 28 May 2018 12:22:44 +0000 (UTC) Received: from EUR01-HE1-obe.outbound.protection.outlook.com (mail-he1eur01on0073.outbound.protection.outlook.com [104.47.0.73]) by lists.denx.de (Postfix) with ESMTPS id 7D5F8C21E74 for ; Mon, 28 May 2018 12:22:39 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=nxp.com; s=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=GEz1jErjcyrA4wY4SI+LeSc54PTM7c8fYdb+Vn2vTzM=; b=BsBtd2CnR3GTM50StjwXCZc1ozf7npqaTvVvvS24FBeAnS9bkNAngTvAHAZMEqMqMOGr0M9/8yMJzZ1TEk7LhiCPR/e54pNYjgdjFZL33/3DwnLEmKFoT0pCit6r09FCLPbjcRjXTilew8JSjgCqGdFzkN0NXc12hKRaNmxKy9A= Authentication-Results: spf=none (sender IP is ) smtp.mailfrom=peng.fan@nxp.com; Received: from linux-u7w5.ap.freescale.net.net (92.121.68.129) by VI1PR04MB3006.eurprd04.prod.outlook.com (2603:10a6:802:9::12) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384_P256) id 15.20.797.11; Mon, 28 May 2018 12:22:36 +0000 From: Peng Fan To: sbabic@denx.de, fabio.estevam@nxp.com Date: Mon, 28 May 2018 20:25:07 +0800 Message-Id: <20180528122526.20597-23-peng.fan@nxp.com> X-Mailer: git-send-email 2.14.1 In-Reply-To: <20180528122526.20597-1-peng.fan@nxp.com> References: <20180528122526.20597-1-peng.fan@nxp.com> MIME-Version: 1.0 X-Originating-IP: [92.121.68.129] X-ClientProxiedBy: HK2PR02CA0175.apcprd02.prod.outlook.com (2603:1096:201:21::11) To VI1PR04MB3006.eurprd04.prod.outlook.com (2603:10a6:802:9::12) X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-HT: Tenant X-Microsoft-Antispam: UriScan:; BCL:0; PCL:0; RULEID:(7020095)(4652020)(5600026)(48565401081)(4534165)(4627221)(201703031133081)(201702281549075)(2017052603328)(7153060)(7193020); SRVR:VI1PR04MB3006; X-Microsoft-Exchange-Diagnostics: 1; VI1PR04MB3006; 3:5At+UAyoJz2KGL4eC8hPy8sAkcf5kgaSyKpuWyLf8EtIYF9okaOMxuoAfdzNckrKVRJQMGX0dmVP4Us0eLMn34Z+b3AIJX2qZ3FQk7GoyP8Jf/esF0mpco1nDSWdJ7OG5C0xZctRHpucLL6xa9vV1LkZKB7CvB5RLcII3KolbpjwlYAUC2ZkUbGK+ozenmBFh1NYFJNcBfCtr0MbyekrIYKhpCyQxyPNhg7zGsc/sRQzGkqiphRGomJXzDAVdJnj; 25:sSc1kbwvAtxPijDyDrLfWM477XMiYNagryYTHZ3KTyDLwUIcfSxTsLbmc3Tcuq+XhT6s+Y43znktxV1GWbFg7iJ8YriUGkaq9bjDu6dqgFd5gCgNlsL4ClRFJPnc9xNuucoyDo6d11wqhxWgSqKxwJ8YaPo1k+nK2RUCxhzqYSMmx4zUq/zyrqTH+8keQpJ5O66FOfiJm+R1NOvRWNtX4OW3nsOZAmsnA5cQ5clCTCdr24+3dfRaHj+qbAoBBoyCCvKzFKpsI+7mPJYVT6wYcdJypvm9WUMtkBgo8l4okd0rMWvx7VY3D5Ojew+sDI4F3uwIne2iQ0tnMVoYM9ARsA==; 31:HfcPVtr9Pkx2PhLPmPjPnC9OfcDvg3HB5b/h9CA4l42+HvCLGXzibow6mkigYB3iI7tJ8Au7MUz/EVYSQJdIRl+x7S0PAtBaekdz81SxwrjLbKXT9IiYlxcldH/XvrBMQ5yKoIV+OGzD0hRdnF7zjW1oR39Q2M75q0JX+KsJal+u1FqXyjTRD0C9R4gUuPaC6tPrFOeK8ZYV5l4USM96KKZ0QgCg7zB6+E5v5XF4UCo= X-MS-TrafficTypeDiagnostic: VI1PR04MB3006: X-Microsoft-Exchange-Diagnostics: 1; VI1PR04MB3006; 20:tFHbngQq2XITlbTq7omguzJWMcEDctx0LCbS4fR6IYcVGiIZcp/Wax1A5HEVCNN1+eANOWR2sJao1lS1jQHk4bOjGi4mFAoBmQfKVlw82qsdvs5zzM6Vbh1WlMVh6lVFExkhh23w+qi00aaL2sVKKpP7lE7Y3QQ9caUN/I53My2WJ2VbciSAB8Du7emO8JHlpFO7LiO5zko8TWMvNpIqv0k01OyyWdktPsX/NSjbrbN/MVRBgtJiKBM+4iJKS+WsxZN/lpwSJv2ohkf+5r20PRDS0Pe5zQDGzmnh+Gazk8OVmbOeM1xbNV0i3Nb1B1cMh1HHZgPbcX275Ty+qpkwOUssYSvxlqAzdSV9U1G/PCzTOalQQosKTwmuwGv0YqY3KUJ/3Qs2ZS75bHTIrzrPHs49rk1sjQuNeImAgqdcdn2PwXqUN+6ASudqvZnaNrHpYWO//pb/g54L+qIUEmpI88mkHstBFP8DJS1H8NNL3FQvR6gA1bmZtuMDTD4cVrBX; 4:FcL7Z+WRKMg1e+1zQEWDuQDjs6sRQCC2VcvOUYsnE0aLvCFU0X6JvK3S9/hy23l1xcn7xIdyvtPBt3MRnGE3hBGmlLeNe9cugnoVMRcG/TaTyNo5u5UYTOdxylSjXEk4N00LlQHyXyPgA9ABYF1IZlRtfdDcdCs1RfdRglsInNBER1Bd5FNIdf/MhRvqlj6GCU9lfaG740vT6p2h1Utwr4+WdFUHBaoct9NXEAg9cTdSB99x5/CW0SPWWfH35VE3iXABVAVBdJayjZ3EeHCFNry1vVg5HZLmgM3kaXs+Z1QuMlpoxLj7RMhOcyQPViHd X-Microsoft-Antispam-PRVS: X-Exchange-Antispam-Report-Test: UriScan:(185117386973197); X-MS-Exchange-SenderADCheck: 1 X-Exchange-Antispam-Report-CFA-Test: BCL:0; PCL:0; RULEID:(8211001083)(6040522)(2401047)(8121501046)(5005006)(3002001)(93006095)(93001095)(3231254)(944501410)(52105095)(10201501046)(6055026)(149027)(150027)(6041310)(20161123558120)(20161123560045)(201703131423095)(201702281528075)(20161123555045)(201703061421075)(201703061406153)(20161123562045)(20161123564045)(6072148)(201708071742011)(7699016); SRVR:VI1PR04MB3006; BCL:0; PCL:0; RULEID:; SRVR:VI1PR04MB3006; X-Forefront-PRVS: 06860EDC7B X-Forefront-Antispam-Report: SFV:NSPM; SFS:(10009020)(366004)(39380400002)(396003)(39860400002)(376002)(346002)(199004)(189003)(36756003)(97736004)(6636002)(6666003)(68736007)(86362001)(8676002)(44832011)(8936002)(575784001)(81166006)(81156014)(47776003)(11346002)(956004)(2616005)(476003)(446003)(25786009)(486006)(48376002)(106356001)(105586002)(186003)(50466002)(16526019)(2906002)(6512007)(53936002)(1076002)(66066001)(26005)(51416003)(478600001)(305945005)(50226002)(6486002)(5660300001)(6116002)(76176011)(3846002)(16586007)(52116002)(6506007)(4326008)(316002)(7736002)(386003); DIR:OUT; SFP:1101; SCL:1; SRVR:VI1PR04MB3006; H:linux-u7w5.ap.freescale.net.net; FPR:; SPF:None; LANG:en; PTR:InfoNoRecords; A:1; MX:1; Received-SPF: None (protection.outlook.com: nxp.com does not designate permitted sender hosts) X-Microsoft-Exchange-Diagnostics: =?us-ascii?Q?1; VI1PR04MB3006; 23:llH6J+Y86UJMMFcczV9/h4a27uVRumjQtdYKpAbwg?= /T9+0e3Lt/lvMPk/PKv0gmVvbeShIQiaz3GgRNzFraQLn4yivvsO+f2PrQUckCe4C87bFSt/y6dh9OrhWJPbaAxX7W8ZUXHP4nZuZy0uoXaBu3LpPFLyuzlmgW5UuQNT+ZBZADh1XUtWrcg8oz2bnIXb4a8pZKMers9meguiprpLGdvmODfWkmMrCbnVk8V4ErIbJSbo1wx/Pj6toIXluvZ8NNCB1vV/y23jTPlxR5Cu/kC03Dy+P+98OUh1x9Mrt1qHjSE/hyRdVucu/m5rfNKg5pNsmFxNxInTgMRy4A4YBcUAMyZDw16uRP+hxUJfA7xnGw2j4hHMPGF3kyTrPoP9AnmTn/oOX5tVjV46mKBCr5zchhOsnMwM/PCgmltIp8rhTrbYyDyIe7ZJZ/zSdbHZhUTYSKtJF4gqt01q3ePam1R6cIejk8XrYx7OUnb39A6Bl9PwDimSSDt6ObxaSJIg1lZUefdUJ+2i/qmmq4xP/QBMtrvvfSIb+NtKAce4AldYE3SW+Y40OL5xyNN4YKW7WaCTcfBN8QAHfU4zDV6jUqj7Qik08jmRL3uhaJS/cfFotRba2R4GjYkFwIQAuocCi8vs1tB0jiw+IsG2Bo29Fos/kT0FuiwzAcnCCU1O/F2KQWYemqzYq0LGFiSo09J42BZ0PJllvIetMWuT0USUd5RdYGKsXbVqT23PZlNG9siQdySuKxiizmMNgRkCsr5gSZw5HduTiwCXwSO2yXEYGWA4dDlvAalIzTI01FK0ICIVQh8GPD6DARMwnL+8AysjSeDVwP+1bCobJjG4s0XUWOEPBymyQQCodKstxrEQdD3rdGRzfzIV/b1pUYGD65EMbvfKtQjjxVa8m/Ed0Q9+oq8YpYdKSnrj3sPZK6Gazt2Ta1ICMTWwkBQBUNvGu7pbKNnf7RWkv4cCmYwGD752kA6rZQEC+XikZTuruDoM9oZ5p9EYjF1PwiZOJgg4wAoVtiEUTBMsoFNPXpepyrVGopSG4ypQEhSbnDvxhwRWqth2fHuBkoVYAprPiJh1QyVIV006rU208uPrwyun/TuR4/Zmisot6ZDdBgGN2t2YNUutQCBuyUlHKSV1AVj+zGV+b4qmt2txbmRKsGnJC3v3IrYqq7rwNAG8WRertgw71+50KOtfsDpHiT8PkSuiuj1BUESYv69KVb7TyZNGmkCsCDwH2LwcKqyzPP8PVmJDGc= X-Microsoft-Antispam-Message-Info: NNQSMLJYxA0DmqabUTbe6EZ1i71ad9yTAOy/GtQf5E03D+L1+m4fh2WCEJ15aYcB4o3s3EIQlW+gzfdgElvME4Tc9ogRavjCf+jk5NaN1F/EWPzYuDC85dFChe5aMNFDDNcBvUl8h87Gm6zZnhfm8+KYy+/HIQQS47mNncZIdsi1hWMUPtmK+ObOmikvWIdE X-Microsoft-Exchange-Diagnostics: 1; VI1PR04MB3006; 6:zxzM3Q/IRE7QTTWT6w2f9/VcIdUC7qlFWbEmGrigbh4R8BoixPAd1ugGW/JW3eYe390a+1mxxTqqTWlQKhxpl6lXQAMAeIlVHcXOXypV0gh25GxuxjS/fPO3f3FO1LhiX6Tw3qw75gicDBYrI3wEUeSFH0pXmV29E2aqd8dydfA684CN6ljXTbgDhgEf/ormQ59l8WIkT50J8v45Lj3LzliVH59Bsbh7rp0qptKQ0kU4qxA7nk3IzCAHvX+2bkUIkF4f83/lju4jaB1lAnA3PS5iSDFmS1042PlbN5/8goOcF51vkbuONSBz23Sy8gawnT5Du/nurHi5hV5/d8Thu0NRTfBTUbBLq1z6o78x1Rn8hnR16vAIyPHZzu7gtvd72P8FdNWDS91BLCfiIkalytDZO08GmPQKqVKrRuVVYnEj7ru2ooJJrgdVy8wA6ENtE8zIS567n5Na3lmW0mfWBA==; 5:n3UpLSc5J0F20yj75CTwhMvFhSGeX7xyS3geYjdJJYSPk8zdynsZ84F6DnvDIxC7Vk+xxG9pCV1qpeakvlpmwMrUBIy6cB2Oxtrpk93os+JFY4QhiPUhBEkxt0T29KNopNPTICK3MHHGTkj+7/zkDE8qKHkhXOPuV68xSfP/wN4=; 24:HEshuNpWVHfG7eClA2Ipc+HZtJWGXec8SSo05vMsGstVDErkVlQF1NYfWz1TB96kSyWPFYFORwE0dincIFbydJTO9+aNZEZB7TcstNWWJco= SpamDiagnosticOutput: 1:99 SpamDiagnosticMetadata: NSPM X-Microsoft-Exchange-Diagnostics: 1; VI1PR04MB3006; 7:VqYp5FE4CxpTdMh2LryxjLZwBzT2iUwsX9sJ5ITw1zuvA+pUss590cQJ+QiTjRxn1OhF6ftMiLkH5X8M0mqEMtufRpjwcVtT2DhyJBfnM2oUfG72aEdFAaKE6bwOQxa6Wl309sXCN9aEneaF+PSY3j0xV5CoKN+O21bc4sWwvAy3eOoAkpaY1mCjWIP8nXs6ueG28M+npOZBJkRn266fEjln9m3AvdVVvhbeHXp2xl4bTVTEK+KWkpEmu+aVfIQR X-MS-Office365-Filtering-Correlation-Id: e202a43f-6ee8-4093-bddf-08d5c495b37e X-OriginatorOrg: nxp.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 28 May 2018 12:22:36.4016 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: e202a43f-6ee8-4093-bddf-08d5c495b37e X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 686ea1d3-bc2b-4c6f-a92c-d99c5c301635 X-MS-Exchange-Transport-CrossTenantHeadersStamped: VI1PR04MB3006 Cc: u-boot@lists.denx.de Subject: [U-Boot] [PATCH 22/41] serial: lpuart: Enable RX and TX FIFO X-BeenThere: u-boot@lists.denx.de X-Mailman-Version: 2.1.18 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" From: Ye Li Enable the RX and TX FIFO in LPUART driver to avoid the input lost during u-boot boot up. Signed-off-by: Ye Li Acked-by: Peng Fan --- drivers/serial/serial_lpuart.c | 33 ++++++++++++++++++++++++++------- 1 file changed, 26 insertions(+), 7 deletions(-) diff --git a/drivers/serial/serial_lpuart.c b/drivers/serial/serial_lpuart.c index a5a2f65c77..e99a49d0d9 100644 --- a/drivers/serial/serial_lpuart.c +++ b/drivers/serial/serial_lpuart.c @@ -40,6 +40,12 @@ #define CTRL_TE (1 << 19) #define CTRL_RE (1 << 18) +#define FIFO_RXFLUSH (1 << 14) +#define FIFO_TXFLUSH (1 << 15) +#define FIFO_TXSIZE_MASK 0x70 +#define FIFO_TXSIZE_OFF 4 +#define FIFO_RXSIZE_MASK 0x7 +#define FIFO_RXSIZE_OFF 0 #define FIFO_TXFE 0x80 #ifdef CONFIG_IMX8 #define FIFO_RXFE 0x08 @@ -47,7 +53,7 @@ #define FIFO_RXFE 0x40 #endif -#define WATER_TXWATER_OFF 1 +#define WATER_TXWATER_OFF 0 #define WATER_RXWATER_OFF 16 DECLARE_GLOBAL_DATA_PTR; @@ -318,15 +324,28 @@ static int _lpuart32_serial_tstc(struct lpuart_serial_platdata *plat) static int _lpuart32_serial_init(struct lpuart_serial_platdata *plat) { struct lpuart_fsl_reg32 *base = (struct lpuart_fsl_reg32 *)plat->reg; - u32 ctrl; + u32 val, tx_fifo_size; - lpuart_read32(plat->flags, &base->ctrl, &ctrl); - ctrl &= ~CTRL_RE; - ctrl &= ~CTRL_TE; - lpuart_write32(plat->flags, &base->ctrl, ctrl); + lpuart_read32(plat->flags, &base->ctrl, &val); + val &= ~CTRL_RE; + val &= ~CTRL_TE; + lpuart_write32(plat->flags, &base->ctrl, val); lpuart_write32(plat->flags, &base->modir, 0); - lpuart_write32(plat->flags, &base->fifo, ~(FIFO_TXFE | FIFO_RXFE)); + + lpuart_read32(plat->flags, &base->fifo, &val); + tx_fifo_size = (val & FIFO_TXSIZE_MASK) >> FIFO_TXSIZE_OFF; + /* Set the TX water to half of FIFO size */ + if (tx_fifo_size > 1) + tx_fifo_size = tx_fifo_size >> 1; + + /* Set RX water to 0, to be triggered by any receive data */ + lpuart_write32(plat->flags, &base->water, + (tx_fifo_size << WATER_TXWATER_OFF)); + + /* Enable TX and RX FIFO */ + val |= (FIFO_TXFE | FIFO_RXFE | FIFO_TXFLUSH | FIFO_RXFLUSH); + lpuart_write32(plat->flags, &base->fifo, val); lpuart_write32(plat->flags, &base->match, 0); From patchwork Mon May 28 12:25:08 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Peng Fan X-Patchwork-Id: 921503 X-Patchwork-Delegate: sbabic@denx.de Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Authentication-Results: ozlabs.org; spf=none (mailfrom) smtp.mailfrom=lists.denx.de (client-ip=81.169.180.215; helo=lists.denx.de; envelope-from=u-boot-bounces@lists.denx.de; receiver=) Authentication-Results: ozlabs.org; dmarc=fail (p=none dis=none) header.from=nxp.com Authentication-Results: ozlabs.org; dkim=fail reason="signature verification failed" (1024-bit key; unprotected) header.d=nxp.com header.i=@nxp.com header.b="rv4MXrDq"; dkim-atps=neutral Received: from lists.denx.de (dione.denx.de [81.169.180.215]) by ozlabs.org (Postfix) with ESMTP id 40vbv42JPfz9s0q for ; Mon, 28 May 2018 22:36:15 +1000 (AEST) Received: by lists.denx.de (Postfix, from userid 105) id 940AAC21E08; Mon, 28 May 2018 12:28:07 +0000 (UTC) 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=BAD_ENC_HEADER, RCVD_IN_DNSWL_BLOCKED, SPF_HELO_PASS, T_DKIM_INVALID autolearn=unavailable autolearn_force=no version=3.4.0 Received: from lists.denx.de (localhost [IPv6:::1]) by lists.denx.de (Postfix) with ESMTP id BE025C21DB5; Mon, 28 May 2018 12:23:46 +0000 (UTC) Received: by lists.denx.de (Postfix, from userid 105) id CD664C21DB6; Mon, 28 May 2018 12:22:46 +0000 (UTC) Received: from EUR01-HE1-obe.outbound.protection.outlook.com (mail-he1eur01on0047.outbound.protection.outlook.com [104.47.0.47]) by lists.denx.de (Postfix) with ESMTPS id BDA40C21DEC for ; Mon, 28 May 2018 12:22:42 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=nxp.com; s=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=dUrkt5J10TyjHneV3o5/dMLGzxvYWybKQncOtpcn27c=; b=rv4MXrDqEDDXyBXrJF46gfC8ev8mtg0l83HsxmRPek9ZdwNm/pJkd1r7gaq8PlJh4ThdZAgcEVWULRNtjr4zeUg2+EhcSxkblaOTvywYWVGvThnvTnLMnVC8o8g8m1ShXu0oLmm020i1EKL0qZjAsc4vw1+/DcCFX0lExS31xoA= Authentication-Results: spf=none (sender IP is ) smtp.mailfrom=peng.fan@nxp.com; Received: from linux-u7w5.ap.freescale.net.net (92.121.68.129) by VI1PR04MB3006.eurprd04.prod.outlook.com (2603:10a6:802:9::12) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384_P256) id 15.20.797.11; Mon, 28 May 2018 12:22:39 +0000 From: Peng Fan To: sbabic@denx.de, fabio.estevam@nxp.com Date: Mon, 28 May 2018 20:25:08 +0800 Message-Id: <20180528122526.20597-24-peng.fan@nxp.com> X-Mailer: git-send-email 2.14.1 In-Reply-To: <20180528122526.20597-1-peng.fan@nxp.com> References: <20180528122526.20597-1-peng.fan@nxp.com> MIME-Version: 1.0 X-Originating-IP: [92.121.68.129] X-ClientProxiedBy: HK2PR02CA0175.apcprd02.prod.outlook.com (2603:1096:201:21::11) To VI1PR04MB3006.eurprd04.prod.outlook.com (2603:10a6:802:9::12) X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-HT: Tenant X-Microsoft-Antispam: UriScan:; BCL:0; PCL:0; RULEID:(7020095)(4652020)(5600026)(48565401081)(4534165)(4627221)(201703031133081)(201702281549075)(2017052603328)(7153060)(7193020); SRVR:VI1PR04MB3006; X-Microsoft-Exchange-Diagnostics: 1; VI1PR04MB3006; 3:JAeaaRI5aSGqy22p3GbKkcpDKvH0NvAS7eGJ17BO4HhTdadvznNfYLQltUJxvA3XMQJC489w2NbvQyL+P5rwqD+eddylW3DlpWhPrhzjKP96SvXAVfEGhb007q1iD0qwp6UuvYJ23qWhcRvfNnyVA71ia5nU0rG2CuMzMRIGOkOfHda51HBEYTXIwsz6AQXgOAfV2joYrZigDR+8XnIApzQ7D95FsBUKGBSyyvZqj6ItjEWOvJgTZzU0HwAwERBZ; 25:1zBl/jFkRt4kSbf6zUEFMsBQtwdTZQV+84upCOxcsXOoMgctAfiuAprtOrzMVDDvjz2NBDsOypznCDVF0mQ2GJ2u24EMxUaZZB/h1VpyjGrvsHRvoxVUdv7nGB1wbvjkzjJ0WZJ8T+Dh+NASHfNVrKh9necr99bhrcv5775Rr/zGlRIeHWfsWsO9FmptYKwCQoKzzy3tXXHHiFII7LSYpzJPofl34Sw2uwjQS1T3B7FVz5hzaBiXGhGwmCjRLjjFjRnGgs3xjCdop/q/DKpDyoxsbxcsWQdYalvd71e5cRb/Wg7JfDSsxCDhricacDkCZaYZzkWhmtBsZ6O+HbKVJQ==; 31:48y1nKanmPn61y4+C0pJ+1pPEhF69etnqzH0sSIbnX4pf4rQvKaH+bM2tjNgHntECLgaG4YJTZZJVEVQeh2hX0BE1JWKkMCYMt+PYW61e9oFMPv4j4PHb59Idi0qrIZXfSJ8Ytogx+I72vMjbZxrPb4aaQAGZIPHwSnoaGf4mxm0dzxH1f9B0SbA7c1dm0nmc7gNb9chlzzL8feyWCnJZF2IdvTZatGPZaa18BZ1edA= X-MS-TrafficTypeDiagnostic: VI1PR04MB3006: X-Microsoft-Exchange-Diagnostics: 1; VI1PR04MB3006; 20:GvYUpgU0EhEp0NJeCFs4nQFmNnNr+W6GW/KmJaUsIkIhG7f6vn+N3ZBKcqCVnK/apuvIJC5YEdTiGj3GzNmGZK/AfZK8HEPkoCfwSkG6u2AvqjrBbQGIMfr5RLBOvvaxLvjE0DnnYcTkJ/BVHvyVOUfyNWBSSC3+XkCzh1nsMnUDQO+HNsT6apyHe+ExzwbCcKyezZ6HEj99dMik9ChM1Ijgv6itIwHNP2zkJajRuV91K5KnRe1iE6M72E+YODuXW2QojkJx06h8x0bUqL0PSRhqQ5U4jZ458c5EyorNT+VDHpnp0vqb6/3YwRwSIZGJQj1sbhmEy5+Ec1cgZ3Sb1voKwAL9imtj9aoXB//ib5ng5zd/LQzvBpyZxGYjqrfOKxJKsAtK95Zl7NNzcPZK7ZMADaDUWKltOFgWk3YLG3MUZU/YeYBxK84iXo6FtllTrovqfHfa6DCHb/aZJpIljDB0itOyxZhWSyJwRoUYUgNoeyUmHLbS2wK6eT51EHWI; 4:BqWyhzqqLAtANkbosdzDiITL82FjvRQYOc/ogPW//K5ougkEwL2+gaXUwmXtglDggR7QOcSR/9X+KcAMjDeFm8VAqA4Oa5juFjdr3PWQ9N9RvY5a7f2ZLRSY5U2IM4tA/JwNYOB66ug42tdafkMrQmfdiuNpWShgLj9Rup2+EEDeGZh2FXMMtJhPCj2VKIHImUih9i0FY56kg8T0JbLbXoKjLwgteTY2XKiiA6tgrDiVj15csmo1h2nGTeb4Rk5z2QvlVT/u70eRV8o8e49860I3eJhvNTteHdyn6qV5bbLpoMIEZc05jsA3lk6UVXAO X-Microsoft-Antispam-PRVS: X-Exchange-Antispam-Report-Test: UriScan:(185117386973197); X-MS-Exchange-SenderADCheck: 1 X-Exchange-Antispam-Report-CFA-Test: BCL:0; PCL:0; RULEID:(8211001083)(6040522)(2401047)(8121501046)(5005006)(3002001)(93006095)(93001095)(3231254)(944501410)(52105095)(10201501046)(6055026)(149027)(150027)(6041310)(20161123558120)(20161123560045)(201703131423095)(201702281528075)(20161123555045)(201703061421075)(201703061406153)(20161123562045)(20161123564045)(6072148)(201708071742011)(7699016); SRVR:VI1PR04MB3006; BCL:0; PCL:0; RULEID:; SRVR:VI1PR04MB3006; X-Forefront-PRVS: 06860EDC7B X-Forefront-Antispam-Report: SFV:NSPM; SFS:(10009020)(366004)(39380400002)(396003)(39860400002)(376002)(346002)(199004)(189003)(36756003)(97736004)(6636002)(6666003)(68736007)(86362001)(8676002)(44832011)(8936002)(81166006)(81156014)(47776003)(11346002)(956004)(2616005)(476003)(446003)(25786009)(486006)(48376002)(106356001)(105586002)(186003)(50466002)(16526019)(2906002)(6512007)(53936002)(1076002)(59450400001)(66066001)(26005)(51416003)(478600001)(305945005)(54906003)(50226002)(6486002)(5660300001)(6116002)(76176011)(3846002)(16586007)(52116002)(6506007)(4326008)(316002)(7736002)(386003); DIR:OUT; SFP:1101; SCL:1; SRVR:VI1PR04MB3006; H:linux-u7w5.ap.freescale.net.net; FPR:; SPF:None; LANG:en; PTR:InfoNoRecords; A:1; MX:1; Received-SPF: None (protection.outlook.com: nxp.com does not designate permitted sender hosts) X-Microsoft-Exchange-Diagnostics: =?us-ascii?Q?1; VI1PR04MB3006; 23:PU96weLxuhIDgTCOZjzubSFj2e3enbBdRL+OZ6nOi?= EsGAbFKLX1l/0PB4uw4dkxcUgelCaquEJeZHY7oBH17i7SD05apKOdzBeykI6NUXc9ucFAjsWgGDujf6SLtXWUZRybVab5Psrgw4UQ8cjUFxUAIT4sj+SGFPuSIijdg5c1ngxZtDVEMTLL1qCBA8KVjKUMe1mTypYlqXxyLxOSNSM3Fe6DSjCkGGKjVgw41vkoChsU+pp5VmirpdY+depTb7PjfiVEZ7zroolGwBoe+WSG4hiYB8dS7gNISynY4wvwJDjzqibKG7QVw73Fmy3CMTHUIf6oiZHXoBURgwrug+K9pQgyXSK0IK38IcwvmmwoFNAj+xhwAAs8/4EImTZXM6D2O7CBtWyq4fhLy3vX0RbCdlye6DIEECYL2KbJrOFTKNpgeJSg5+2ZRcUUyohl5kTYMu8hIcmfC0/Gr9NIaMnY4hIPUZmRjUUUVl4UddPqPC5K7sKEk2hjFUYFOWzkigwwnq34dNRIHrRcvXKCiRYIUKPbQlYbAqapQX7ABYyiOd6T93OSOkMP3+axxnRZ2cLuHPlNhAcJJls3MzD1sLE24w+QXzdYfPqDoI/s/sHUzb+gIppEGy0ytpxJP48ObvALB13oVX0iwFsc1zIrUtUCjHaPzE4qKDvGZaPBmr/UqK6JThfm4q4Us6Aps9OKLaWOvDQ+xNZhtJYP+hj8CA6Zz/kQtMDasnYuz1bl3FizWrFwXBcQ/YXy1CgPS4tfIeFYMg+u4j5JwwgCMkyRPPy8LspmEioD6cr19Goqg1u2QqtBkn+zDjjz1wBWQZM/3MjJrpzeakKd+sKhlauCfLeCQUhxRfoqKTU2R+WySqyksBmeM0YO/W1nQFfdHykCmEZYq5eO1xYqvZ47bRu6rHADKcnot04tnnJfxCXen+BG05QNqrZIN4bmaPoS9Skr7nEsZrO9gWaFfiRWJes6aBtNU5n3p2JtgKhqmPYuAr2xMq0Z8wdpceihzGI7vzOQ+rna7HZXiaddIZNpQCqy3ZDX6dtbZsck+5VbtH2Nl+m7TwqEEZBfcfXGKhwOWH/aXdMcVSrPhVhS9LwqluaX0EwteY76y6HBePq/N9jkI7X6fgIesNvs0wrXRswsWOoBjgOnrAO6TMsoeAwyP/gjalFtO23cGUFYCQcZlYuBrPP8gQA+bFpdpoY4iigWF4UkoaxEausag+M9krUnh3CNc7VHcOLbgVk95XXtJIhG2ensRM0QOBuDVlMw5qz3jIOI6 X-Microsoft-Antispam-Message-Info: dPy3BzIpbq7W526Y6ajjkg9hFE8k3Q42IWWCnZgwK0tJb5vGJrGgIXEtZTJ2fHBURGR5a/qNFkIV2/y9T/1LtjnDeBM2jq9yzkuNeE87Y4CY1pl2IC5KO1fB8VT2wKy7JJh9v+pzh/QkLzKzA3M66O3DKvF7iuTnke+CPyJUVR2t2jn0hOGjb4Xl3Eyyouvs X-Microsoft-Exchange-Diagnostics: 1; VI1PR04MB3006; 6:O06tLYXcA01d4jzL2Sj6KPM+WeqZzA+LJ9kVSrnymdHjkqKPlBG1kMuTCocL9QOdx8GXFBNY6yud+J0KAKOIzxZg/X3YYbpzx+Qibu4ePDCB1TSAMq1m2mYsQ5SKEuqYA0l/IXFkUNadtq8VPthLavxxoXDd6bxzxybGfAwMrDroHXbunF5xmSMziXrLuyPb5eVbI+7tOXNFxzzVDQY9N/4CsIhKWinpJVVOp+5z0zvL0ydWismX3KPayLQE9b4yLqfomyb9/GotE2qAvaYypwIL4SILTiB2pioRe+O1zg2DYcfKLMbY4QFkRHibw/700CG/jf1HPesgx2y9L+UZ6nM8lP+NJ9tUGC99X3QaNEDTheyoz9WeNVeMeSs8uYYRO7Meb0meKSiN+bkYNxf5/WRn4YbyG12Gb6YjTob7ezBAI93EiT2RuAmCQPk3PLCM12OZjhD4Ismgj082CsTXrw==; 5:4lrUqZzYf0SvyK8J+3ELNGPWo6Nkm6gyGSrsiymPyBAyxX7F3oMeSnEl2MlpN2BjN6h/DCbx8FCKS59j8MucqLCwU5ookxXddPg7YBD0VnA9ZT7c5mfJe7L9kub4GJmXNrJ0SmO/3N0yMuZpWDRJDjg3g23P/UlyGb2zkU5rl84=; 24:bbjySWvE1YIT1OIjOdPTdbPxYVFdzz1Eqjph7jROEF1GALq2SmY2o+ECui596iS0oo0NkiRLkQelKrnVx4VGKBO5NMVnd88RVdL9TyuZhcA= SpamDiagnosticOutput: 1:99 SpamDiagnosticMetadata: NSPM X-Microsoft-Exchange-Diagnostics: 1; VI1PR04MB3006; 7:UrOdIjtXWVTbdVNBqzDwu16hsmDEhIyQeEPOyUgzLQOzmMrCT9iIwVAkiki4FklGm0eoCL7BfcEH7q9fC/OAY+ovbrr5mGr0Utgxya6ydUNKBzdA6W8hZ368YHV71sFRRz0VqLrUlfjG6sVfMPjjQi8cKWPw6k2q8eJ5tN5w2Ua2sr2D+cAFTBZqB+ZUTwYzdOMIUJyob4lrRxtzBGYUZEsZguqGXu0GbsiHgiI9iKUBgUireW3S256AGHY0F0h9 X-MS-Office365-Filtering-Correlation-Id: 1bbd15d6-1d53-49e0-a8b2-08d5c495b56e X-OriginatorOrg: nxp.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 28 May 2018 12:22:39.0111 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: 1bbd15d6-1d53-49e0-a8b2-08d5c495b56e X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 686ea1d3-bc2b-4c6f-a92c-d99c5c301635 X-MS-Exchange-Transport-CrossTenantHeadersStamped: VI1PR04MB3006 Cc: u-boot@lists.denx.de Subject: [U-Boot] [PATCH 23/41] imx_lpi2c: Update lpi2c driver to support imx8 X-BeenThere: u-boot@lists.denx.de X-Mailman-Version: 2.1.18 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" From: Ye Li Add compatible string for i.MX8 and move imx_lpi2c.h from mx7ulp directory to u-boot include directory as a common header file. Signed-off-by: Ye Li Signed-off-by: Peng Fan Cc: Heiko Schocher Reviewed-by: Heiko Schocher --- drivers/i2c/imx_lpi2c.c | 3 ++- {arch/arm/include/asm/arch-mx7ulp => include}/imx_lpi2c.h | 0 2 files changed, 2 insertions(+), 1 deletion(-) rename {arch/arm/include/asm/arch-mx7ulp => include}/imx_lpi2c.h (100%) diff --git a/drivers/i2c/imx_lpi2c.c b/drivers/i2c/imx_lpi2c.c index 8d3e0555a1..a6e41c5c91 100644 --- a/drivers/i2c/imx_lpi2c.c +++ b/drivers/i2c/imx_lpi2c.c @@ -8,7 +8,7 @@ #include #include #include -#include +#include #include #include #include @@ -447,6 +447,7 @@ static const struct dm_i2c_ops imx_lpi2c_ops = { static const struct udevice_id imx_lpi2c_ids[] = { { .compatible = "fsl,imx7ulp-lpi2c", }, + { .compatible = "fsl,imx8qm-lpi2c", }, {} }; diff --git a/arch/arm/include/asm/arch-mx7ulp/imx_lpi2c.h b/include/imx_lpi2c.h similarity index 100% rename from arch/arm/include/asm/arch-mx7ulp/imx_lpi2c.h rename to include/imx_lpi2c.h From patchwork Mon May 28 12:25:09 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Peng Fan X-Patchwork-Id: 921528 X-Patchwork-Delegate: sbabic@denx.de Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Authentication-Results: ozlabs.org; spf=none (mailfrom) smtp.mailfrom=lists.denx.de (client-ip=81.169.180.215; helo=lists.denx.de; envelope-from=u-boot-bounces@lists.denx.de; receiver=) Authentication-Results: ozlabs.org; dmarc=fail (p=none dis=none) header.from=nxp.com Authentication-Results: ozlabs.org; dkim=fail reason="signature verification failed" (1024-bit key; unprotected) header.d=nxp.com header.i=@nxp.com header.b="gsB382gX"; dkim-atps=neutral Received: from lists.denx.de (dione.denx.de [81.169.180.215]) by ozlabs.org (Postfix) with ESMTP id 40vc9C01fZz9s0q for ; Mon, 28 May 2018 22:48:30 +1000 (AEST) Received: by lists.denx.de (Postfix, from userid 105) id AE028C21E0B; Mon, 28 May 2018 12:28:23 +0000 (UTC) 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=BAD_ENC_HEADER, RCVD_IN_DNSWL_BLOCKED, SPF_HELO_PASS, T_DKIM_INVALID autolearn=unavailable autolearn_force=no version=3.4.0 Received: from lists.denx.de (localhost [IPv6:::1]) by lists.denx.de (Postfix) with ESMTP id A47AAC21DFF; Mon, 28 May 2018 12:23:50 +0000 (UTC) Received: by lists.denx.de (Postfix, from userid 105) id 326B4C21E16; Mon, 28 May 2018 12:22:50 +0000 (UTC) Received: from EUR01-HE1-obe.outbound.protection.outlook.com (mail-he1eur01on0053.outbound.protection.outlook.com [104.47.0.53]) by lists.denx.de (Postfix) with ESMTPS id 10FD2C21E73 for ; Mon, 28 May 2018 12:22:46 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=nxp.com; s=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=D+c/RG5d22eDy8+ty1un5q4R1DZBDg7ToX2Ncvv59/8=; b=gsB382gXkumFqkMNj1GaAzquL5EPjzL0FdJ+PXLEcLes0nRW7EEpVXWNLkGCi9DGjNNXmpRNUDzLtTMG5zDvA5M0R+MGAg6M2AOOog8lpNT7lM05QI4joOWrHDadg4mYA6TS/EDIaV4GXAtbsSFoUAaPslaVaL06uSjz1PUeGe8= Authentication-Results: spf=none (sender IP is ) smtp.mailfrom=peng.fan@nxp.com; Received: from linux-u7w5.ap.freescale.net.net (92.121.68.129) by VI1PR04MB3006.eurprd04.prod.outlook.com (2603:10a6:802:9::12) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384_P256) id 15.20.797.11; Mon, 28 May 2018 12:22:42 +0000 From: Peng Fan To: sbabic@denx.de, fabio.estevam@nxp.com Date: Mon, 28 May 2018 20:25:09 +0800 Message-Id: <20180528122526.20597-25-peng.fan@nxp.com> X-Mailer: git-send-email 2.14.1 In-Reply-To: <20180528122526.20597-1-peng.fan@nxp.com> References: <20180528122526.20597-1-peng.fan@nxp.com> MIME-Version: 1.0 X-Originating-IP: [92.121.68.129] X-ClientProxiedBy: HK2PR02CA0175.apcprd02.prod.outlook.com (2603:1096:201:21::11) To VI1PR04MB3006.eurprd04.prod.outlook.com (2603:10a6:802:9::12) X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-HT: Tenant X-Microsoft-Antispam: UriScan:; BCL:0; PCL:0; RULEID:(7020095)(4652020)(5600026)(48565401081)(4534165)(4627221)(201703031133081)(201702281549075)(2017052603328)(7153060)(7193020); SRVR:VI1PR04MB3006; X-Microsoft-Exchange-Diagnostics: 1; VI1PR04MB3006; 3:bYD9Yh2/PX8FNIn4/G8C387svdCl79hE+XCD0ES2iXlHOd3PvYqRCyTjQz0X+oRn11a0gRuRAMGW8HwtHHMETOGeopWw9Npo3y+Jci7IsDgv/VOQeWHZ3Zw68bX2+grJGVxN+Eihkx1MIIhxIQ4xeSQHEboJyzx7s4l8aoiQmXIn+cfV73wOAOH7PnDGBVfQ39uS85b+Y91ZmIO70HX0tdJcMpqJRVdNMppTyNsOV9lcluyBY0QWwquEjjGIQIjy; 25:ZYk5H2h++Kg/gWNXNBmnfW/l0dza67i+vILYa3f1j7QJ0nPc7QFs9u+D+mS1zE/L3mK1M2s5SC0Xhv4bwoDBAVg/L5nzlUePxM1PK4fwYJlu13LM9W9ZxtrBqo0bhN7q2LhY4HZdNFOlH3qhnju5Y3WUItXp0pp0hJoh+39K6vKvn0FUIUEwfCV6o6237wYD99VPmhfZjC+K0w7dGl8R5v9cDeFxSErC4Lk+VW/4Jm8ptMUW4vP3kx8aOs9ebWC26uTJsWcTPJTIn0HkLo6Pvt1eUJ6ulsjoTKG//JsNKc4JD+6mZo5IHeDboRwFRHAVf9pwsKBKSjdusQrTCh88lg==; 31:pzg6YKTk0sP+21VXSvwYCxea+Yfc3bXONELcOVRNg2s45R9kHJx8GPTTo5RYk96JhihgHdh1rCIyplZ2s8A2jpkc1AdXK4hZzJLjheJdnQHLrK+XenMlJgdA88olPOQQHoN7wcjQcK1ErA00gC9WjtTMRVRaZJG23KnhvM4sT4aiLjLNrEfq04MOUbz2N8eMl05wHItJwV2RmvFBz1SzJjJXKTAdEZvgdptFZ7Nv43A= X-MS-TrafficTypeDiagnostic: VI1PR04MB3006: X-Microsoft-Exchange-Diagnostics: 1; VI1PR04MB3006; 20:LeOJQ20xsSZz8JLctjVqGoyXPtGdH+YV6vK9NOiBSsuoklix+bnSIgZOTakX8P9gYWNyhjxsOHo7unpFzysiBySSGil67Hem12OlRiM1k0G+pEPBDPudbr981/XaImHCUMokf5MXSxuMVaCvZLzXxMEbdIengA/DSYWvLE1XqDJfdTNo1ENFMbHPuGCGX95rVgPiZW+y99OdOIQAqx2wAYJ1Qrz79fxWSUHIZASmsdJ7vGyj2wTzZ5txjyW6UFst5aPyLpR9x/MnBui5XjM+gO1AZyZg1cp5/n83Do0QDV0na+kM7WOd6HCBgQ3ocLYOLCj0aYoCkrlIlBEMQOJDJ4Mi0WGTgkEwChPZJiXaL1b/jOES7vWw8s9oHzaMReG3sbkgJ/L7Ncoc6tqDJhHT8mWYgWxePyEpKhbE4u/N7w6uZx4ReNOI0hwVY/PgU4pJYgqMlwkhcluCnXCZOx6/mYYxzQl/SgZKLBr91u894HVemHqmUVbhF460f0gWWeKT; 4:dHM6SfJUoy5ENdVv27hlowpebk5f53qprWrjLSWQw+PLa0AimB+aLZAoAyYD1fOC5YLvruzHEyjD//Ra7TzVeAgm2UlouIevStto9mC37rPMLWkR8EIHUNwRDKP1aOp/b8SpZT41egq/WPty2USisAyOR13xVHKHTMFLHoMDAwuo+Fa0u3ugBYd1Ausmbo0C2YPeWt06ArvECgeE+YvGVX24kic9HKdDq4iABvICSEDQuKI/jlp9gfuqyMvgEYd1uo6ZOKQa8NpbVomP6CJejb/FmLO1CXPzoLTUIEDz7GpSfvV1muV/dpEusYGQ6dYe X-Microsoft-Antispam-PRVS: X-Exchange-Antispam-Report-Test: UriScan:(185117386973197); X-MS-Exchange-SenderADCheck: 1 X-Exchange-Antispam-Report-CFA-Test: BCL:0; PCL:0; RULEID:(8211001083)(6040522)(2401047)(8121501046)(5005006)(3002001)(93006095)(93001095)(3231254)(944501410)(52105095)(10201501046)(6055026)(149027)(150027)(6041310)(20161123558120)(20161123560045)(201703131423095)(201702281528075)(20161123555045)(201703061421075)(201703061406153)(20161123562045)(20161123564045)(6072148)(201708071742011)(7699016); SRVR:VI1PR04MB3006; BCL:0; PCL:0; RULEID:; SRVR:VI1PR04MB3006; X-Forefront-PRVS: 06860EDC7B X-Forefront-Antispam-Report: SFV:NSPM; SFS:(10009020)(366004)(39380400002)(396003)(39860400002)(376002)(346002)(199004)(189003)(36756003)(97736004)(6636002)(6666003)(68736007)(86362001)(8676002)(44832011)(8936002)(81166006)(81156014)(47776003)(11346002)(956004)(2616005)(476003)(446003)(25786009)(486006)(48376002)(106356001)(105586002)(186003)(50466002)(16526019)(2906002)(6512007)(53936002)(1076002)(59450400001)(66066001)(26005)(51416003)(478600001)(305945005)(54906003)(50226002)(6486002)(5660300001)(6116002)(76176011)(3846002)(16586007)(52116002)(6506007)(4326008)(316002)(7736002)(386003); DIR:OUT; SFP:1101; SCL:1; SRVR:VI1PR04MB3006; H:linux-u7w5.ap.freescale.net.net; FPR:; SPF:None; LANG:en; PTR:InfoNoRecords; A:1; MX:1; Received-SPF: None (protection.outlook.com: nxp.com does not designate permitted sender hosts) X-Microsoft-Exchange-Diagnostics: =?us-ascii?Q?1; VI1PR04MB3006; 23:Kzz5lQT/zp5pz7tMlxaMQnzuoKWs8ztg6xNFUOmXp?= g+B5YXCOnRv0x3QPCfAGd94TiyzbPFmdNnOay66LQ62dbfrbTPu8VVNtZ0BYQz876Jckxqx8wdt95IfRCAxK8TSX9kVSk4eRXTpBRXNtwXWLnr8H7cSPzU5auJAWSe+DIvnCll31DaIdbfafEZs1H0me6d8BvrhsBR2H2dVrC2rd6ypliSPoi1+p20hxZTivE0RovgyQ4ZcuBEZ94FDPZAcdbofNGiUlkO7lJy3UT4Y3uZ64bGmp/D1MGtIwoNKX99DGWIgwLWbcWweDvNwFzKYCOn/X/7YEq20K0jOfnFeNtIlMSaCuqsQ9l0b+9JvpjIJKWSw8X1N9QKrcvM9myGE0+6hzWw5zmyS0UDgdJeL/5D7jqSZJqDP8OjPNOe6+QmPnP194WAYSnlC9C6y5eyjuVNKdOSKghBM9tS9zAQCYlk656hTBrg0mNZksfbWuP4XAB3iWLyvIWqXwu2Ie7N7+s/QhViQFtXh9S8x7hp7XaOLuo58gaU6/pnPSgYkKmidDR5XMtHSoYqpx4xokn5XB5OfyXtvjur9A7+Slc+hSQahm/YjZ+xjg8NtipEhxjOWWXjzyDADFSZrKqreBxPd8ChfkQXH2EOJm1sreYB8+b5m/pD8yztr2zzpk1h2TRGrdFwSt7zKyLXB12K241GH3oExolhYcL30tzv0udhO+23WLB3lGf7YK8g9Bd3+byGWi79Lda4vRJ6xefQ2snjFSMuFoV/RpyHIryXLOnvi3f+EuHTxdfREjShCvJ6djnkFfnveENiQlzOLGEP7fprlIS3fNz1dVxut735IOsyzdckCd5emZzFvvUM1DJ/9EcCDySHI6xZ4b4QIAoZLDmfbElDc1DFp89EdtNxTns3AGrjDQdY+70xeTJy72pu6cughd8EwFHvESO1PHSiKL59XlbxlBU7W/7YAEslpA7KmttPBpgRiw/qBE0X6phJRJEh5inkmFBaYgxLbKDUYjo2CrrhOUE3AI1PtSV+ARJnNPC/zf+yGIQHWczR7YrGpVyNHvdip2WBnWagZWK713Tfllgd68o0rjQBMwfYhN7/Ro5jnsXkFQGqSBcrvX4vGzQX/mAElIExmN7jT30KN9D34LG9h9cvGqZGm1PlodZwSiXN2zHbnNRtzUfcJAF7Bx5v1OYVx23gM+dDPkmfb//Jxw6LFM9d9pUBK+sLwgXonGBMg0tsxJ4am4UkqwdAE1cJ5uItx5W1oKl8+mEnfu2Yv X-Microsoft-Antispam-Message-Info: dDu2XJviFXPJ1s0imdmNnckuHnqfz5myFz7M2BUxiNhUm36+Jvo2C/yQgjodM1n8ITGjHNBFPfFma1sUh2VY550fCLC5HD0SLelREViO5wQnRWi2BqhSYvWYR+8B9vwVQoGTpXFoTmi8OCy03JSXSQ5AuyHYx2hAni+jPMjtq6+XUWDE1ERrhQuH7gfQjuFR X-Microsoft-Exchange-Diagnostics: 1; VI1PR04MB3006; 6:zmZ9zLR/uLFfThy1wlGo8A6g2cKsQDv4FOK0NFnfCOZ4tXTkBGrzTTqSX8wGawF3/LmnGh8cTH4YGaBriODF53gmEMO6lX3irHanfY9Y6YmHq77i3swI3VO/c91b9na0EFDsRTnjYbqSApjLU9wPcl8CMtKZ+Q3rfFMRfdsDyrITE2hvDkjsg9SxGLpIB6PHJFWKlA/QtjBT2M3lwtB20JtFFwQ/sN/XAUbxnTKC6AwuT0SSqcJcHdevoWxQNwQslQ41jKpylQYB57raDV34AlpSRP6aObBDPjAe1Mdawy1noMoukpLWddmVXtBXuZaxnWyIYVwm7Xu42hDA5QVd0PeVuwoENA4HHpLEMJ0NF+Xqi3g2nuG3VRbOj3Y6aHYM1Jzlt9qNEHFtJBE8GCeaxFPPeM6alcMmu2ReoAJFFUqHE22lEXCzGdp+JWU+T+B4q0EsuMDwfQ86Y5vo0kkXGw==; 5:daM5eqL0vEemFR3XV5SQ3qgqGV7l5/edQ6+59YCPBatPxKI3L/AqM3q+kL6PD473j8oHtf6hvOUbCm9mmvgmiOeQ6P6ykGfkJjEm/NfMca91i7SnL97Q4A3A2ti/egA6r0mZ6wyVCl4lytjpRV2UMWjiTIioL5Ui93laCbxmWqs=; 24:yS1jeqoQujZJKncW6GfCug2te6bLJf3Yv5HIIsUQjAGC6z3eG6SOBGnqVhOvWoEFdOeRpYH6ONC2ra4Hbp3JVmG7UjSPpMOjNP6gTJ5fqLE= SpamDiagnosticOutput: 1:99 SpamDiagnosticMetadata: NSPM X-Microsoft-Exchange-Diagnostics: 1; VI1PR04MB3006; 7:VHRtUWMENvhJ0KS58JxxRWSvXwYZrZW/mLQ5GeclWeVmKhmc8GDGfoP6pV9FO5mnbtqaSx4YItQq8lreDYVj3L+5qqdFSTOmcI7xE5BYtb5/t4xo6lnlqErNAyJE8rqdOmr/NYvUtWFW1p/Q9sW0nsm7hkD3O2wM7ZHCzNFhyiwcJ17TG/8YTCkjGlYlVegCRYqQbxSBHnfnzHg55fnbpVf5bXh3Zr3R0gJyruPk19PIut6yeUc3oX2OzkukSVC4 X-MS-Office365-Filtering-Correlation-Id: 44977057-4b98-4af9-9381-08d5c495b75e X-OriginatorOrg: nxp.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 28 May 2018 12:22:42.2611 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: 44977057-4b98-4af9-9381-08d5c495b75e X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 686ea1d3-bc2b-4c6f-a92c-d99c5c301635 X-MS-Exchange-Transport-CrossTenantHeadersStamped: VI1PR04MB3006 Cc: u-boot@lists.denx.de, Gao Pan Subject: [U-Boot] [PATCH 24/41] imx: lpi2c: fix clock issue when NACK detected X-BeenThere: u-boot@lists.denx.de X-Mailman-Version: 2.1.18 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" From: Gao Pan For LPI2C IP, NACK is detected by the rising edge of the ninth clock. In current uboot driver, once NACK is detected, it will reset and then disable LPI2C master. As a result, we can never see the falling edge of the ninth clock. Signed-off-by: Gao Pan Signed-off-by: Peng Fan Cc: Heiko Schocher Reviewed-by: Heiko Schocher --- drivers/i2c/imx_lpi2c.c | 14 ++++++++++---- 1 file changed, 10 insertions(+), 4 deletions(-) diff --git a/drivers/i2c/imx_lpi2c.c b/drivers/i2c/imx_lpi2c.c index a6e41c5c91..d2e11b411b 100644 --- a/drivers/i2c/imx_lpi2c.c +++ b/drivers/i2c/imx_lpi2c.c @@ -15,6 +15,7 @@ #include #define LPI2C_FIFO_SIZE 4 +#define LPI2C_NACK_TOUT_MS 1 #define LPI2C_TIMEOUT_MS 100 /* Weak linked function for overridden by some SoC power function */ @@ -184,6 +185,7 @@ static int bus_i2c_stop(struct imx_lpi2c_reg *regs) { lpi2c_status_t result; u32 status; + ulong start_time; result = bus_i2c_wait_for_tx_ready(regs); if (result) { @@ -194,7 +196,8 @@ static int bus_i2c_stop(struct imx_lpi2c_reg *regs) /* send stop command */ writel(LPI2C_MTDR_CMD(0x2), ®s->mtdr); - while (result == LPI2C_SUCESS) { + start_time = get_timer(0); + while (1) { status = readl(®s->msr); result = imx_lpci2c_check_clear_error(regs); /* stop detect flag */ @@ -204,6 +207,11 @@ static int bus_i2c_stop(struct imx_lpi2c_reg *regs) writel(status, ®s->msr); break; } + + if (get_timer(start_time) > LPI2C_NACK_TOUT_MS) { + debug("stop timeout\n"); + return -ETIMEDOUT; + } } return result; @@ -363,10 +371,8 @@ static int imx_lpi2c_probe_chip(struct udevice *bus, u32 chip, } result = bus_i2c_stop(regs); - if (result) { + if (result) bus_i2c_init(bus, 100000); - return -result; - } return result; } From patchwork Mon May 28 12:25:10 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Peng Fan X-Patchwork-Id: 921515 X-Patchwork-Delegate: sbabic@denx.de Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Authentication-Results: ozlabs.org; spf=none (mailfrom) smtp.mailfrom=lists.denx.de (client-ip=81.169.180.215; helo=lists.denx.de; envelope-from=u-boot-bounces@lists.denx.de; receiver=) Authentication-Results: ozlabs.org; dmarc=fail (p=none dis=none) header.from=nxp.com Authentication-Results: ozlabs.org; dkim=fail reason="signature verification failed" (1024-bit key; unprotected) header.d=nxp.com header.i=@nxp.com header.b="XlZnhklT"; dkim-atps=neutral Received: from lists.denx.de (dione.denx.de [81.169.180.215]) by ozlabs.org (Postfix) with ESMTP id 40vc1y67YHz9s0q for ; Mon, 28 May 2018 22:42:14 +1000 (AEST) Received: by lists.denx.de (Postfix, from userid 105) id 77850C21D56; Mon, 28 May 2018 12:32:32 +0000 (UTC) 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=BAD_ENC_HEADER, RCVD_IN_DNSWL_BLOCKED, SPF_HELO_PASS, T_DKIM_INVALID autolearn=unavailable autolearn_force=no version=3.4.0 Received: from lists.denx.de (localhost [IPv6:::1]) by lists.denx.de (Postfix) with ESMTP id 7316DC21EDC; Mon, 28 May 2018 12:26:08 +0000 (UTC) Received: by lists.denx.de (Postfix, from userid 105) id 6483DC21DFA; Mon, 28 May 2018 12:22:55 +0000 (UTC) Received: from EUR01-HE1-obe.outbound.protection.outlook.com (mail-he1eur01on0081.outbound.protection.outlook.com [104.47.0.81]) by lists.denx.de (Postfix) with ESMTPS id 004D4C21E6A for ; Mon, 28 May 2018 12:22:49 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=nxp.com; s=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=gE5a14rj0EefW8YFr7wHe6fwFPKlvHimPm2FsCfkJUg=; b=XlZnhklTHzScNRKDnr/JfmdWlKotDuyXsZ3Ig3smCr6hTC2J62XRvPBsHCOlsDwRSimbISBCjUlPWERXV9WlU/GOLMN6GiGLkgKKvVmUaTDQ0ZnLC5i0cY7xqvYvuslGkmTHmwh6C5x4rswt3zjQb5nd58Q/SXQbm5ku/7mEw7M= Authentication-Results: spf=none (sender IP is ) smtp.mailfrom=peng.fan@nxp.com; Received: from linux-u7w5.ap.freescale.net.net (92.121.68.129) by VI1PR04MB3006.eurprd04.prod.outlook.com (2603:10a6:802:9::12) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384_P256) id 15.20.797.11; Mon, 28 May 2018 12:22:45 +0000 From: Peng Fan To: sbabic@denx.de, fabio.estevam@nxp.com Date: Mon, 28 May 2018 20:25:10 +0800 Message-Id: <20180528122526.20597-26-peng.fan@nxp.com> X-Mailer: git-send-email 2.14.1 In-Reply-To: <20180528122526.20597-1-peng.fan@nxp.com> References: <20180528122526.20597-1-peng.fan@nxp.com> MIME-Version: 1.0 X-Originating-IP: [92.121.68.129] X-ClientProxiedBy: HK2PR02CA0175.apcprd02.prod.outlook.com (2603:1096:201:21::11) To VI1PR04MB3006.eurprd04.prod.outlook.com (2603:10a6:802:9::12) X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-HT: Tenant X-Microsoft-Antispam: UriScan:; BCL:0; PCL:0; RULEID:(7020095)(4652020)(5600026)(48565401081)(4534165)(4627221)(201703031133081)(201702281549075)(2017052603328)(7153060)(7193020); SRVR:VI1PR04MB3006; X-Microsoft-Exchange-Diagnostics: 1; VI1PR04MB3006; 3:ERELv7VHZpPWvapzF85bhvPNtXQ+7wH7DA31pMrQhUghs5pXk0rxaXWU/tT4A3hP1MkpfeywJ0F5tY0gYzixYV7HVzuN0HS83872847ibUQDkCoys79rwxBS6C1CTRw9jb7V6YWfUQUr/ue9BnVr51MNZdyikNbWYklPYgGGNwePEpAyGxohIrWhSQm/WN3uVVCX41vq6/Bkaetm52Hj6LrGJD4OKLPQhf1vW6BWZEOMDacELBmZl9WcnWuy7qx9; 25:IcBl400qiEtbD5w8oVaN1kYEnnbWTo9LgMxMty4qwyaP1v2Umgqus6Dh4TCICk/nqhxS5Ebd8oq1G5D7p/zVEWfZNKXLlRi6U1iar7HHIRtanWvlFBrVC3Ofi8y1x00g1GzctAnn2+Qe6sI3k14WXkoBNWtZs+jiKkQq/3D7Wl7T+j0bzX/ic8vmW0Evyq3uBpWsPY7wv8+FTWJRCIqdpmeRs8zZDL0vaQJ9pp5ovNe5bPjJFI5uDYVheV/Q/0XR/WtiDETzG6astiVZGljnEXXfBcZXnfbDwykDaGO/NMenFUrg5oBMnnarS+DDIpxP05acZx4iMJwavRKYVsHMuA==; 31:9032UgsB7FpfXsAE+dXq0uGw+4qSRWo4A3S4XIDEtq5bO7ggepKESx5Jp4Nx3L0T2yhXB9I9OZmnw5jsD2oq71p23b9PHdvImNjt10wdtiMAAS7+Hxkx7RMEHYgYoVsdavRvdP7FpHBtel898/nOX0zgLry/LM7kJCnlcCaS7CX4zAdPK/qP9pQS85dAxBCjlhBcYb0BLp0vHl13TAxWLhyrmrLX8Z6nlW83JM7tVcM= X-MS-TrafficTypeDiagnostic: VI1PR04MB3006: X-Microsoft-Exchange-Diagnostics: 1; VI1PR04MB3006; 20:6Krp3h+s0sIdGg5ytHVb3uJrxZWeckDaDQqgM1d8iSdftaficBoMp9rUHxgeGl6QYb+SHhHR2CAF8hcHxr3xAzMziD7gbmnzcoeLbm9cveEQWRtyavJfEgtk0tKhyJohhBy8qgzfHI25CbJFOE5fSYEUSIMdb+jj6bJBecSlIBoaSp8XzkM1CYORk8feXXiLOC4YMXXc3t5RTgcPFDRiSHnifteVmwYKF+jePVJXBYDOEO5jl00xGdIuIbVENrp8nceJSqNlNg0snbiK9K/L0sC5COTtWh2ExXFjhBeSEVwQJGecd8TSj/bIyLpsx2N7w6FwrOGyNk+Tfg3ZpqLsmnN5bR62evZ1U7LaJ1OtfLnHm60YP4sFB1w9+HVlg8gIGzqHTXtMBk4Ny+dCmbTNQelNkpv12DCJ7Pp2sCBZDXtD/Ipc/M71c/XeM9l3doD+AXe4seXeoxt4C2+viWMhW+pZA6Ar7Fh3zBx1D2GZXseJP+Upo3sQkHCt9/38hCTA; 4:jKdelHq+b2UdaLLI0KozfRYh3Lfc9oXNfHzhI4EPGtLwkT3BfNH6EphlU/VhlH1cucBdl+VF3ZkfBrv+RJ9attprrQagRLyaa6V5Ysi4IOIdTVgVGlKa0YdM8E5qeaohdB4BABNzSb/hDa3TDS1QmSfS/KPfOCqdw9FefI1auQ2nUwYjEDBelWXIu6wnFSoY0AcWWxIFREEKG3WZEwMYIY0FtIMbz3bixR64X1QMm8yWGFT35y4VmhHkSu2CC1OGIX9LFUi+JligUCvkOfq/rbOGbF5S/8Qv0taJ8nQnoMkNVR8jRpGLEPjGCW4zpVeH X-Microsoft-Antispam-PRVS: X-Exchange-Antispam-Report-Test: UriScan:(185117386973197); X-MS-Exchange-SenderADCheck: 1 X-Exchange-Antispam-Report-CFA-Test: BCL:0; PCL:0; RULEID:(8211001083)(6040522)(2401047)(8121501046)(5005006)(3002001)(93006095)(93001095)(3231254)(944501410)(52105095)(10201501046)(6055026)(149027)(150027)(6041310)(20161123558120)(20161123560045)(201703131423095)(201702281528075)(20161123555045)(201703061421075)(201703061406153)(20161123562045)(20161123564045)(6072148)(201708071742011)(7699016); SRVR:VI1PR04MB3006; BCL:0; PCL:0; RULEID:; SRVR:VI1PR04MB3006; X-Forefront-PRVS: 06860EDC7B X-Forefront-Antispam-Report: SFV:NSPM; SFS:(10009020)(366004)(39380400002)(396003)(39860400002)(376002)(346002)(199004)(189003)(36756003)(97736004)(6636002)(6666003)(68736007)(86362001)(8676002)(44832011)(8936002)(81166006)(81156014)(47776003)(11346002)(956004)(2616005)(476003)(446003)(25786009)(486006)(48376002)(106356001)(105586002)(186003)(50466002)(16526019)(2906002)(6512007)(53936002)(1076002)(66066001)(26005)(51416003)(478600001)(305945005)(54906003)(50226002)(6486002)(5660300001)(6116002)(76176011)(3846002)(16586007)(52116002)(6506007)(4326008)(316002)(7736002)(386003); DIR:OUT; SFP:1101; SCL:1; SRVR:VI1PR04MB3006; H:linux-u7w5.ap.freescale.net.net; FPR:; SPF:None; LANG:en; PTR:InfoNoRecords; A:1; MX:1; Received-SPF: None (protection.outlook.com: nxp.com does not designate permitted sender hosts) X-Microsoft-Exchange-Diagnostics: =?us-ascii?Q?1; VI1PR04MB3006; 23:db2b1HwetlQuQR1qUi6BA5cxdOquVxfmYFFixgO22?= PWYo8DkUxr4bmtZypzkUW6cjljKBn7OxjVP4hvznoxd47zwt/DCdAEsXTEuwTDI9r84+wIDDmuzkejSMxeGY7X0aNFMj9q4Yl89hdr2bKzP4ddv/BkN9LLW0HIzWOptMJRN6ZF9z7qmSItGOFLgMn76hG+Ov6K1nWcBy06+jb97XGbalgst8UqlFAZK05ovVXqf/nIlPzhpbL+MJ4Pemuwxj3wqkUQbFY+HaEOUWOu7MXP+26OX2I97FdGH6fcffSP6OQoFKPVheJsv86TWKUvHyMNlDHSSaUCQEP3ANBFTyXOPgBPSVkmWQQk8yDshEMXM1LLrSo6aAap8/tpa9uvoc9b5mKH7cu6eDcr5eZvLv4HMLm2r2QmH1/x24XE0Ws1hi0cfutfQMdh77JuSEIvMpXywysPwkQx6YlRqfujfxnO1MxHAAA44LX5krYlbbB3z83zlgtZyc7/MCg529nHzQMMRfS/Ku68dUzRhUSi6zIwt/3aseyeSBEpa9Mis7WaqvevsZg12jbQm5uVIeifzlcJU5oHuJeaR4wFa07etOtUDvh5t0K26hVf8bQX7ExE4q2MLflxMD2NX3tV7K1x8K7MTwTKrSq7AJoBcmpsycv7T6VfTVfx5YZjDlswpIQNk2GgzFV2+kM1ATys6UUq1W1/IhqMFoAZIxgadHrvyQr78GkvzIx6T1YWsjpqgZGKuonLRWbn7wnFYgmKIa1VP6vcTQc43L866ffVWGyvBME39ccYmHgm6Umz+GYIgdQ01zEeEaELs8v5WwMNYpkg+BVqLYMElo/8K5avUjrN/xzRKYSxF0i/BWxyidnCrAdBfT4txesY9bAi49Rdq9yd2uP+906W7Of46E9h9pkjRua3atW1SfWBAV61nmrQC4xYQJ3WO9gb47xKdHTFsSnzHmyvq+JMJ23gOQfO6noivFgVprmqnYlBfZZ/vbCpbMF7aGPvpsoNt6Tya61QnrCUQ07vWcHVi57e+1TY9IXbo0SUxDgrGMWOeHAExwYIot5rfLNGY0l/V4VAZileySk8umqHgKyDY5QYvuGh/nl015BZqIuVJjQPqV/KykGB348CZY9+8Q+AWtq4NGKWDUaqtv5TS9mZW6+PyiHt66gkkA4wNeohRBpLM9I34F8NUBrTHRdFCZm1s1iJpR32+QNIHA7+TY7lOcWgLjLNHeUfdizgGuBFwXyjQctx84xy7a2Y= X-Microsoft-Antispam-Message-Info: 5M64m6V0qlaBkJxzHxFazOMVeUX7akwBBKENc+2tr42ih/OwnEefX7ejYvw8muPEr6gXyeITi5HSzaUKbO/Pp3NH4xVfPHuAoyiseHxLfB3+1Y4MrTyVPVmd0fndydB0K8iHpvZjpDy5H8hLB2pzUQur0vn8nbKcEFrh5xvFegdCC/RY15rBVWFlGEeHFejz X-Microsoft-Exchange-Diagnostics: 1; VI1PR04MB3006; 6:nyZDQ5sJF64gkheNfcYLcqy7uMf4zQKNXaQqDaDT5sWkzbjObn+3OZDadUxr3pEM0S83HL93ECrOyXnn3unbyGXCO4yriDy1RbzlR0Tvg6960WegiRgJyzXMKmiaAD7J+3CBWent0RwnF0d2ek0Wbt64omFiSKJyCJlrt8Jg1dWHrorYRGj2EtvIfcHhH8j85suz7W1Xb0sh6SlRFEwHF0INOPPhtx3ON/vYHzWEd5j1yA/zg6uSp+XmjhkwHWc8BeeXOr3KJxqvOygGtSHWKYxL37ujzKh6I411yLjfXmUIW1GbvCAWLZTYNd4+U/ljmSjQhfiQWAgHFPVqQUMkI76PJJwwE1kXbXWM7oT68TH58auTN2+QGIV+USlqJ3kp8cVHEXCRYp+YM6PztT3LryKOEOc7fDFD5YiBWiI9ghuUpKf2aSICJbwLyjQ7C05lzSX0xegi/25cnlGcFbyGxQ==; 5:0Plfunk6BGmOjnkRu5sFzRCnpeFhAa8j0qp4DWat9PJwBjsPSNk5f0rWnzfzA3QtaUs19ACagPnfHr4qfntD9BOn+9EIGJ3CoOzAFGOBzPLdmkhSCte8a0TNk4PVKA/mUBxATYTYIGCwd/lG4QwwsKcnczQ1f9rOvuNnLAJVPyo=; 24:qCfzGit1HCGoNw2C8ostc5dZ4xwStJHxP2en2QpEdXMut/vnBU93yJoEdWKVPVTomogBSY4kILlChfcndsl+dyQYXMPzl6A6oqelGZjwILE= SpamDiagnosticOutput: 1:99 SpamDiagnosticMetadata: NSPM X-Microsoft-Exchange-Diagnostics: 1; VI1PR04MB3006; 7:+pnYdiSiiEvUCK/EH4aN7X174Vz4po+GAZRNAXSw25eoFhps7FgIc2Qz9Rlv5Q9DTd7f330d8cu99msVu5W/JcLm+Ie+6EBfuDajaTMLrSEOSHSSzLgR/+AMAh6hcOV0Mx7xtRKadSiLZ/8RRoRfVrbaKFTPGvjw9q0pBdtnOJJQ3xZ9zKiOlihTIMOXNA2mJKNhCsKlxL/DQVF81xyBprRHIuOAjP0UVSZ8/Yt1NoK0ol/cQkGQNcpGDbx6KgW+ X-MS-Office365-Filtering-Correlation-Id: 87563ac6-fb24-4cd4-6ccb-08d5c495b91c X-OriginatorOrg: nxp.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 28 May 2018 12:22:45.4955 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: 87563ac6-fb24-4cd4-6ccb-08d5c495b91c X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 686ea1d3-bc2b-4c6f-a92c-d99c5c301635 X-MS-Exchange-Transport-CrossTenantHeadersStamped: VI1PR04MB3006 Cc: u-boot@lists.denx.de Subject: [U-Boot] [PATCH 25/41] lpi2c: Fix bus stop problem in xfer X-BeenThere: u-boot@lists.denx.de X-Mailman-Version: 2.1.18 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" From: Ye Li In xfer function, both bus_i2c_read and bus_i2c_write will send a STOP command. This causes a problem when reading register data from i2c device. Generally two operations comprise the register data reading: 1. Write the register address to i2c device. START | chip_addr | W | ACK | register_addr | ACK | 2. Read the Data from i2c device. START | chip_addr | R | ACK | DATA | NACK | STOP The STOP command should happen at the end of the transfer, otherwise we will always get data from register address 0 Signed-off-by: Ye Li Acked-by: Peng Fan Cc: Heiko Schocher Reviewed-by: Heiko Schocher --- drivers/i2c/imx_lpi2c.c | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/drivers/i2c/imx_lpi2c.c b/drivers/i2c/imx_lpi2c.c index d2e11b411b..585787a35c 100644 --- a/drivers/i2c/imx_lpi2c.c +++ b/drivers/i2c/imx_lpi2c.c @@ -225,9 +225,6 @@ static int bus_i2c_read(struct imx_lpi2c_reg *regs, u32 chip, u8 *buf, int len) if (result) return result; result = bus_i2c_receive(regs, buf, len); - if (result) - return result; - result = bus_i2c_stop(regs); if (result) return result; @@ -242,9 +239,6 @@ static int bus_i2c_write(struct imx_lpi2c_reg *regs, u32 chip, u8 *buf, int len) if (result) return result; result = bus_i2c_send(regs, buf, len); - if (result) - return result; - result = bus_i2c_stop(regs); if (result) return result; @@ -380,7 +374,7 @@ static int imx_lpi2c_probe_chip(struct udevice *bus, u32 chip, static int imx_lpi2c_xfer(struct udevice *bus, struct i2c_msg *msg, int nmsgs) { struct imx_lpi2c_reg *regs; - int ret = 0; + int ret = 0, ret_stop; regs = (struct imx_lpi2c_reg *)devfdt_get_addr(bus); for (; nmsgs > 0; nmsgs--, msg++) { @@ -398,6 +392,12 @@ static int imx_lpi2c_xfer(struct udevice *bus, struct i2c_msg *msg, int nmsgs) if (ret) debug("i2c_write: error sending\n"); + ret_stop = bus_i2c_stop(regs); + if (ret_stop) + debug("i2c_xfer: stop bus error\n"); + + ret |= ret_stop; + return ret; } From patchwork Mon May 28 12:25:11 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Peng Fan X-Patchwork-Id: 921508 X-Patchwork-Delegate: sbabic@denx.de Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Authentication-Results: ozlabs.org; spf=none (mailfrom) smtp.mailfrom=lists.denx.de (client-ip=81.169.180.215; helo=lists.denx.de; envelope-from=u-boot-bounces@lists.denx.de; receiver=) Authentication-Results: ozlabs.org; dmarc=fail (p=none dis=none) header.from=nxp.com Authentication-Results: ozlabs.org; dkim=fail reason="signature verification failed" (1024-bit key; unprotected) header.d=nxp.com header.i=@nxp.com header.b="NQimBw6W"; dkim-atps=neutral Received: from lists.denx.de (dione.denx.de [81.169.180.215]) by ozlabs.org (Postfix) with ESMTP id 40vbyh3kgKz9s0q for ; Mon, 28 May 2018 22:39:24 +1000 (AEST) Received: by lists.denx.de (Postfix, from userid 105) id F35D5C21D9A; Mon, 28 May 2018 12:34:25 +0000 (UTC) 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=BAD_ENC_HEADER, RCVD_IN_DNSWL_BLOCKED, SPF_HELO_PASS, T_DKIM_INVALID autolearn=unavailable autolearn_force=no version=3.4.0 Received: from lists.denx.de (localhost [IPv6:::1]) by lists.denx.de (Postfix) with ESMTP id 1C641C21E47; Mon, 28 May 2018 12:29:45 +0000 (UTC) Received: by lists.denx.de (Postfix, from userid 105) id BA028C21DD9; Mon, 28 May 2018 12:22:57 +0000 (UTC) Received: from EUR01-HE1-obe.outbound.protection.outlook.com (mail-he1eur01on0054.outbound.protection.outlook.com [104.47.0.54]) by lists.denx.de (Postfix) with ESMTPS id E5FAAC21E3A for ; Mon, 28 May 2018 12:22:51 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=nxp.com; s=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=pOhIrpErup03srnW0YERFtW4HBpHMZxe8Bjfd/cafoY=; b=NQimBw6WW6WvjaDNqeJAMryI7b0/Pnz/7b63E2sxvxKyYJb944w1d0V0rbkkNK5CYMLsYsB3xhDrPqSwmsnbQxfMhDV+nFmkkDYO0YT+c8naXQtptt36zxNyjzeK5wmvxE4Dvp1w3vbYvX4XwLsHUiTxBCnQNlN36r55vDiooK4= Authentication-Results: spf=none (sender IP is ) smtp.mailfrom=peng.fan@nxp.com; Received: from linux-u7w5.ap.freescale.net.net (92.121.68.129) by VI1PR04MB3006.eurprd04.prod.outlook.com (2603:10a6:802:9::12) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384_P256) id 15.20.797.11; Mon, 28 May 2018 12:22:48 +0000 From: Peng Fan To: sbabic@denx.de, fabio.estevam@nxp.com Date: Mon, 28 May 2018 20:25:11 +0800 Message-Id: <20180528122526.20597-27-peng.fan@nxp.com> X-Mailer: git-send-email 2.14.1 In-Reply-To: <20180528122526.20597-1-peng.fan@nxp.com> References: <20180528122526.20597-1-peng.fan@nxp.com> MIME-Version: 1.0 X-Originating-IP: [92.121.68.129] X-ClientProxiedBy: HK2PR02CA0175.apcprd02.prod.outlook.com (2603:1096:201:21::11) To VI1PR04MB3006.eurprd04.prod.outlook.com (2603:10a6:802:9::12) X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-HT: Tenant X-Microsoft-Antispam: UriScan:; BCL:0; PCL:0; RULEID:(7020095)(4652020)(5600026)(48565401081)(4534165)(4627221)(201703031133081)(201702281549075)(2017052603328)(7153060)(7193020); SRVR:VI1PR04MB3006; X-Microsoft-Exchange-Diagnostics: 1; VI1PR04MB3006; 3:q1UOSI1Lzvbj6e8EbtJm7awW2pOjpOoOxPRmOrhw72ptnZjXrl21uFKnsJjv1sJvPamQZVeLXvcnQvErrcPD1YNOvVEGD2X4PbcG7LQ22U6dbcBNUOgnABnaOROaWOsUBQuD1yj5aC78fbKGfrnhH0i6+AcXQHzwEgRnrM+v6aSgxpFVvCw+w9yWss8ohGc12YyCATrIn/TQcLpu4v1Xo6Go6YiJ6kWpP8wuH6z42atrER6BQVt5dynM7trfIEAR; 25:Ds4hdxV7gFj1v+uxVprjpYQP2kDLMP7Eu+SeKyoMvihfoHOp92N+u3vAq+lBGf0Ll4ItkSZ2jpT2rOTuW81qn/s6R1gLLfWjvZBsqX4IEZcGsl8Q8iETN36RQy+/Bpfv+pTwdi+0PZdveYl9m/QttSLLesarvagH4jmYgvDiXQI0HKtfFaiqGqjRhLraINFjZHNuEosIfdMUvrzJKWLTMcKB1iZoIJuY2GQ8ugpE1N28uFyqkECQz5s6lzTlaQ5ehtiqjfhW4vusY55oRy0pSr91IqvXTkLj2hoZBba3zEmxXmsABIhnqUqifezzcUHhbhNhE/3sSv7emkVUXDWpBg==; 31:qtb7YKIA3miaMwJE0LO4wHIfv18Zq9QNAcZPmnV5iRYp27ma2zI62lcsJrlaXbd+IP5WHIkiLpKlF6DtxskFO4ZNq/a0rnyttkOSsZnSizvz11l6iVALpsL5oijTXrtnEj6xYVMd7Zo+zt+EvPXuco/hk9elmCJTUFRXCggpVGIIymj2lZ5YgjVuCihceNofxGAGnptMn7A7KTBN3Xnq8DI4j9Wrjbett/Iv9rU9468= X-MS-TrafficTypeDiagnostic: VI1PR04MB3006: X-Microsoft-Exchange-Diagnostics: 1; VI1PR04MB3006; 20:cKZtrMRTYnKn6FrLWMH9vev2ZZLzyqTzcgjs4JaqBgmu5OvObNFRYkSeGAb7d3YVHSQ6m2IqBN5dj2r3klMTZDUiVsSdyiZ/VA5BofSzO+MUt0sSV8Q/v8UBSMwAX9XmiORHFwiFvxHK01s0e2qiQaSeBaBaLs/ERGHcz+sFu83cNwDARA78vF0NM2SAwuv9rebzeqPvQmhSPfyvphBMgUsA8bS42wHBOvhLJxtZjD18eD3RFCecrWUqRzMICdmaEsiAzzfPEcM8+pu0fOtLh0IAWaeo4gLH6Bco+cTSjGDCu/lMU1g0GzeLX8PN15mmbXPmDdkesCn5HDsVsh4fBSXqy7p+wplWVzfeGK8m0+0pm/kQn6UtJ8IJS3PE6DzHsmyFLLQlaScQS3jdVDW0TkMrWZz2iYM950obEhOHnl2SDUZX4/32+W346K8/cvjVLU5qAWV8uAiYfalze+640gDV8YnJBNPibMiuqq6iiVrxX3jOU7Hhy5gexlKR+o0Z; 4:RwVhoBSeiXo8pRITYEGRMbGIUyqnR0TBp0LSBfsfWqpOip4fOFNyeZXVtBhbWtiXzim34IsTxt88ZLheCiK7uOtewo5WTgnNypfTGc7RXUCUuxQVJ+KK3jnjCMX9fDj48PVeYRbXxqYAzs1PEZt29MCKCZZuxVHG8hm0iTafjnnJ64BbIQ12s2/P6i2EW/PAJMqWYjytuEk2W8f4xZgAOx3ahDqnu+kAzKyYqCYv6za5CCgEMgDNLXH9Gyw6XAkd2OQALz5HAqXDgcl4NwHSMUu3JVD22OcAmS1aBZLvyZbgSo2neu9aWl9HhojOqsT/ X-Microsoft-Antispam-PRVS: X-Exchange-Antispam-Report-Test: UriScan:(185117386973197); X-MS-Exchange-SenderADCheck: 1 X-Exchange-Antispam-Report-CFA-Test: BCL:0; PCL:0; RULEID:(8211001083)(6040522)(2401047)(8121501046)(5005006)(3002001)(93006095)(93001095)(3231254)(944501410)(52105095)(10201501046)(6055026)(149027)(150027)(6041310)(20161123558120)(20161123560045)(201703131423095)(201702281528075)(20161123555045)(201703061421075)(201703061406153)(20161123562045)(20161123564045)(6072148)(201708071742011)(7699016); SRVR:VI1PR04MB3006; BCL:0; PCL:0; RULEID:; SRVR:VI1PR04MB3006; X-Forefront-PRVS: 06860EDC7B X-Forefront-Antispam-Report: SFV:NSPM; SFS:(10009020)(366004)(39380400002)(396003)(39860400002)(376002)(346002)(199004)(189003)(36756003)(97736004)(6636002)(6666003)(68736007)(86362001)(8676002)(44832011)(8936002)(81166006)(81156014)(47776003)(11346002)(956004)(2616005)(476003)(446003)(25786009)(486006)(48376002)(106356001)(105586002)(186003)(50466002)(16526019)(2906002)(6512007)(53936002)(1076002)(66066001)(26005)(51416003)(478600001)(305945005)(54906003)(50226002)(6486002)(5660300001)(6116002)(76176011)(3846002)(16586007)(52116002)(6506007)(4326008)(316002)(7736002)(386003); DIR:OUT; SFP:1101; SCL:1; SRVR:VI1PR04MB3006; H:linux-u7w5.ap.freescale.net.net; FPR:; SPF:None; LANG:en; PTR:InfoNoRecords; A:1; MX:1; Received-SPF: None (protection.outlook.com: nxp.com does not designate permitted sender hosts) X-Microsoft-Exchange-Diagnostics: =?us-ascii?Q?1; VI1PR04MB3006; 23:dl7p5uB5FY4QB7NusuZuSdFCpGUxew5u6bO0aRrfF?= aSoDVCNdWgvXky4osxcmClrtm/QMcaBb1Kmlhj/dFhrygISbmOzyfnY06M/jUh23KDWsEi7OIpMsdUVri5EAfwPPSgAcox30aiHH3fl0PWuPUVy7XID9k5n2QyhUacOJqfnRkpG2LS1OzXN6r7GgGt/hL3n3PlMfH7ZiXinOYDkqH5WIXkuDqLwpPqoL4MUm7hQmSsnG3gKwdsO/4FBH0QFDQt0arPL5C+gPRszR+f8dKPN9OPTv2vE28+aM+MLCH/C/2QhExNRr0JX6uR17fqUZnsN6ni+cW1UHOu48hXvDMSf2D1u59x7B0Cs0nIBx9kanb+OcB97I+cqQ6vg2mJ5d449o1q6nL0hwf1WpmB9xxeVzsqZKesJs3w4wYMLpCT1LgH7g1tLPFgLHP3bCPLk7743ysNF+x0tWjN/yfhRxa26PP8BO/90LY5yfIWF/3p6eZTLtdS0SeWFMa/7tWDmApVUrPe4JchPWydKKgxfGUJpeimYqyq54qLbXMgNihbHTpi+ptSI2Nb4fjGQLJgGhPI1yZryuG41gXPhUG4Fdr37lTDFvJn18eZbKvW72TKg4GrriVcMx6b6Yq9kgwFqiLG4WeXXJXHI4Au8lMQB6btR2HIstD0oyVWDy1G6Uy7w6J9WTR9Q7CYxhA7N9drtooYnJDw5toPzV4HfIy8XjQ1tWxsdwdDZSPeaaQXMEc4EvbW1LMGaErqpFup5RhlA40fCqEMSJuwKS9m45RVetEsUDGyt65146CMbHpMGXNS1xTeV0+owiQPzaGTlpPQgsxwgDZtYyEnlCaJQLayoy11CJ8A4It6R3z/IliBcZ9fk+dX+9YBSE0h0RhgTKJ9pnAI/MvQjXYRzqo/AnSygU8w40T2+HnBB/J+ziPDDVxfjTD/APcwkBfkHvLKNBWAntlp21s2AgYNwCnY9hfTL7AQLNn661AQoHVUmwcc904r3kTmnTMObqOKvp2HZV6EEzPoU5NkEzhsCowQ7Hw03ICpBz3DkktsBDs0wVqJXxReDR07abcqStt2L4B7+FKavziXkQT+242FfIOIYQHAKva3oyW2v3SKVhI/lmM5VK+2tQQ+fJzehhdafU3oha8zZSygSexdhItGyk7EoIa/0iY0daRIuHCdhlE7xgMfAFd3mz1VUj1TIJzCvVhd/J/J/HP9NJMOHdIgc5TZ0URGTEj/UJdKnJyNNqYP+gfjQ+0U= X-Microsoft-Antispam-Message-Info: xi3apcU1J+r6bzAfgJOh/IBr1cV3KJqE05NwQyvfAhZ05KeGuZkCakmGdXtChhudiNzbytzmhOU2KOWtJYIrAlWRgVuFVkeXueTax80WD7qlD7f7znVvHwFZ/gjPsSkKXj/ArB0ITW5kzAGLFtNxvhnQhjQcjCAKHYtW4KtE59r2cx0+bxNWvsn9TMl2i++o X-Microsoft-Exchange-Diagnostics: 1; VI1PR04MB3006; 6:5pTZbrWDgqdD7wg6h04FdXogErRfA/TL/a8KXvOpyVrcO3TzWQC+cr4KffYWKoei40OGhRtNxgEfiQLWV2GAemzgBMRNCb3NssIb0wDMnbyJYAIgUm7eAYwqBxtVlTcrULhqFaODR7e06XBrMyWNOoOhJ2qgCQQhaMLIrZjq/idKWJMtG/zd3e/EJchdajOj1AhpGnGdGKKALySuwwIxcHdEEz93qeLqAmnan/Y4T1//FXA744UkxtCyIB84iYJQjfVZ3p70kACxktVwX1AP2jsmUcqlSudYbIJIMhtN/Qi9wg15w6L+Tn+1hl1uPAjJmr3pDEUaC3eiuA2PpghRQzeQAcjzxiWylQq6Ul3x/2IqREhiy+emaLJPRWHifrIcn5vPc7a0Z/d5cx8LVMGZItl5tLA8dXyNWkf+r2pSScNcALtsuc+AU0gHTWa7ej2eOst4nnL6ySVZygp7aRlahw==; 5:OP6dfQIrw33xNdTrNhZ7LKb8oRvOr9M7PIltP8BPVgK9SeBljnmk9EojjqoOfZ0VShpKcUC0tKzTv/mKQ+EFkfChr490PWCAd7IU0M2sVs+UILPNxFnZI5NCau87gFzzQB8EmjzLyi07QmP3eEtkF0DwudBoGlZoNIH4nQVe+YY=; 24:kmpAys5P2UlpjHFgDpxue2dGEkXSZ4dsEWkOYqh2ul6ef93AaZZHKGlgSA0qIdhBmPAE8OoFqcj1/UuWF110MRCnvleqoJO7hPD3yBHz8WA= SpamDiagnosticOutput: 1:99 SpamDiagnosticMetadata: NSPM X-Microsoft-Exchange-Diagnostics: 1; VI1PR04MB3006; 7:fxz09629bJPBTZqrzhXNMKlnzdGMud0+XLgzXOBmT1VbqxJDicVYhBU0cipvm4IvZeXTpn0XIbxa9CBJybL2141GrBJbP1WR35gqtvCf2Z85yBa0P9zzTcNyfSe90CttIGl4SeP8FzslMOmmLkrHs6HxUaCt7fcXRygwBbzQsHVL64eXG3aICvHS+DeTHfrFEcLGlPGGrpYWknpCF38Ebge7FuOKofktXoBoGh4yEqSODrKdRC3le93yQ2y8AKIX X-MS-Office365-Filtering-Correlation-Id: 2a17c6bf-34bd-4392-4611-08d5c495bada X-OriginatorOrg: nxp.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 28 May 2018 12:22:48.4018 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: 2a17c6bf-34bd-4392-4611-08d5c495bada X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 686ea1d3-bc2b-4c6f-a92c-d99c5c301635 X-MS-Exchange-Transport-CrossTenantHeadersStamped: VI1PR04MB3006 Cc: u-boot@lists.denx.de Subject: [U-Boot] [PATCH 26/41] lpi2c: Add bus busy error handling X-BeenThere: u-boot@lists.denx.de X-Mailman-Version: 2.1.18 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" From: Ye Li When doing "i2c dev 4; i2c probe" with ENET daughter card connected on iMX8QXP MEK board, we met a i2c bus busy issue, that the BBF of lpi2c always show busy, but the master is idle, and stop is detected (SDF set). This patch addes a handling to re-init the lpi2c master for this case. Then the issue can be worked around. Signed-off-by: Ye Li Acked-by: Peng Fan Cc: Heiko Schocher Reviewed-by: Heiko Schocher --- drivers/i2c/imx_lpi2c.c | 53 +++++++++++++++++++++++++++++-------------------- 1 file changed, 32 insertions(+), 21 deletions(-) diff --git a/drivers/i2c/imx_lpi2c.c b/drivers/i2c/imx_lpi2c.c index 585787a35c..ff07ca34aa 100644 --- a/drivers/i2c/imx_lpi2c.c +++ b/drivers/i2c/imx_lpi2c.c @@ -18,6 +18,8 @@ #define LPI2C_NACK_TOUT_MS 1 #define LPI2C_TIMEOUT_MS 100 +static int bus_i2c_init(struct udevice *bus, int speed); + /* Weak linked function for overridden by some SoC power function */ int __weak init_i2c_power(unsigned i2c_num) { @@ -91,8 +93,9 @@ static int bus_i2c_wait_for_tx_ready(struct imx_lpi2c_reg *regs) return result; } -static int bus_i2c_send(struct imx_lpi2c_reg *regs, u8 *txbuf, int len) +static int bus_i2c_send(struct udevice *bus, u8 *txbuf, int len) { + struct imx_lpi2c_reg *regs = (struct imx_lpi2c_reg *)devfdt_get_addr(bus); lpi2c_status_t result = LPI2C_SUCESS; /* empty tx */ @@ -111,8 +114,9 @@ static int bus_i2c_send(struct imx_lpi2c_reg *regs, u8 *txbuf, int len) return result; } -static int bus_i2c_receive(struct imx_lpi2c_reg *regs, u8 *rxbuf, int len) +static int bus_i2c_receive(struct udevice *bus, u8 *rxbuf, int len) { + struct imx_lpi2c_reg *regs = (struct imx_lpi2c_reg *)devfdt_get_addr(bus); lpi2c_status_t result = LPI2C_SUCESS; u32 val; ulong start_time = get_timer(0); @@ -153,15 +157,24 @@ static int bus_i2c_receive(struct imx_lpi2c_reg *regs, u8 *rxbuf, int len) return result; } -static int bus_i2c_start(struct imx_lpi2c_reg *regs, u8 addr, u8 dir) +static int bus_i2c_start(struct udevice *bus, u8 addr, u8 dir) { lpi2c_status_t result; + struct imx_lpi2c_reg *regs = + (struct imx_lpi2c_reg *)devfdt_get_addr(bus); u32 val; result = imx_lpci2c_check_busy_bus(regs); if (result) { debug("i2c: start check busy bus: 0x%x\n", result); - return result; + + /* Try to init the lpi2c then check the bus busy again */ + bus_i2c_init(bus, 100000); + result = imx_lpci2c_check_busy_bus(regs); + if (result) { + printf("i2c: Error check busy bus: 0x%x\n", result); + return result; + } } /* clear all status flags */ writel(0x7f00, ®s->msr); @@ -181,9 +194,11 @@ static int bus_i2c_start(struct imx_lpi2c_reg *regs, u8 addr, u8 dir) return result; } -static int bus_i2c_stop(struct imx_lpi2c_reg *regs) +static int bus_i2c_stop(struct udevice *bus) { lpi2c_status_t result; + struct imx_lpi2c_reg *regs = + (struct imx_lpi2c_reg *)devfdt_get_addr(bus); u32 status; ulong start_time; @@ -217,28 +232,28 @@ static int bus_i2c_stop(struct imx_lpi2c_reg *regs) return result; } -static int bus_i2c_read(struct imx_lpi2c_reg *regs, u32 chip, u8 *buf, int len) +static int bus_i2c_read(struct udevice *bus, u32 chip, u8 *buf, int len) { lpi2c_status_t result; - result = bus_i2c_start(regs, chip, 1); + result = bus_i2c_start(bus, chip, 1); if (result) return result; - result = bus_i2c_receive(regs, buf, len); + result = bus_i2c_receive(bus, buf, len); if (result) return result; return result; } -static int bus_i2c_write(struct imx_lpi2c_reg *regs, u32 chip, u8 *buf, int len) +static int bus_i2c_write(struct udevice *bus, u32 chip, u8 *buf, int len) { lpi2c_status_t result; - result = bus_i2c_start(regs, chip, 0); + result = bus_i2c_start(bus, chip, 0); if (result) return result; - result = bus_i2c_send(regs, buf, len); + result = bus_i2c_send(bus, buf, len); if (result) return result; @@ -353,18 +368,16 @@ static int bus_i2c_init(struct udevice *bus, int speed) static int imx_lpi2c_probe_chip(struct udevice *bus, u32 chip, u32 chip_flags) { - struct imx_lpi2c_reg *regs; lpi2c_status_t result; - regs = (struct imx_lpi2c_reg *)devfdt_get_addr(bus); - result = bus_i2c_start(regs, chip, 0); + result = bus_i2c_start(bus, chip, 0); if (result) { - bus_i2c_stop(regs); + bus_i2c_stop(bus); bus_i2c_init(bus, 100000); return result; } - result = bus_i2c_stop(regs); + result = bus_i2c_stop(bus); if (result) bus_i2c_init(bus, 100000); @@ -373,16 +386,14 @@ static int imx_lpi2c_probe_chip(struct udevice *bus, u32 chip, static int imx_lpi2c_xfer(struct udevice *bus, struct i2c_msg *msg, int nmsgs) { - struct imx_lpi2c_reg *regs; int ret = 0, ret_stop; - regs = (struct imx_lpi2c_reg *)devfdt_get_addr(bus); for (; nmsgs > 0; nmsgs--, msg++) { debug("i2c_xfer: chip=0x%x, len=0x%x\n", msg->addr, msg->len); if (msg->flags & I2C_M_RD) - ret = bus_i2c_read(regs, msg->addr, msg->buf, msg->len); + ret = bus_i2c_read(bus, msg->addr, msg->buf, msg->len); else { - ret = bus_i2c_write(regs, msg->addr, msg->buf, + ret = bus_i2c_write(bus, msg->addr, msg->buf, msg->len); if (ret) break; @@ -392,7 +403,7 @@ static int imx_lpi2c_xfer(struct udevice *bus, struct i2c_msg *msg, int nmsgs) if (ret) debug("i2c_write: error sending\n"); - ret_stop = bus_i2c_stop(regs); + ret_stop = bus_i2c_stop(bus); if (ret_stop) debug("i2c_xfer: stop bus error\n"); From patchwork Mon May 28 12:25:12 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Peng Fan X-Patchwork-Id: 921506 X-Patchwork-Delegate: sbabic@denx.de Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Authentication-Results: ozlabs.org; spf=none (mailfrom) smtp.mailfrom=lists.denx.de (client-ip=81.169.180.215; helo=lists.denx.de; envelope-from=u-boot-bounces@lists.denx.de; receiver=) Authentication-Results: ozlabs.org; dmarc=fail (p=none dis=none) header.from=nxp.com Authentication-Results: ozlabs.org; dkim=fail reason="signature verification failed" (1024-bit key; unprotected) header.d=nxp.com header.i=@nxp.com header.b="rGtjGsiR"; dkim-atps=neutral Received: from lists.denx.de (dione.denx.de [81.169.180.215]) by ozlabs.org (Postfix) with ESMTP id 40vbxJ44zRz9s0y for ; Mon, 28 May 2018 22:38:12 +1000 (AEST) Received: by lists.denx.de (Postfix, from userid 105) id 0AE79C21DB3; Mon, 28 May 2018 12:29:55 +0000 (UTC) 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=BAD_ENC_HEADER, RCVD_IN_DNSWL_BLOCKED, SPF_HELO_PASS, T_DKIM_INVALID autolearn=unavailable autolearn_force=no version=3.4.0 Received: from lists.denx.de (localhost [IPv6:::1]) by lists.denx.de (Postfix) with ESMTP id C78AEC21E3E; Mon, 28 May 2018 12:24:34 +0000 (UTC) Received: by lists.denx.de (Postfix, from userid 105) id 5E72AC21DFA; Mon, 28 May 2018 12:23:00 +0000 (UTC) Received: from EUR01-HE1-obe.outbound.protection.outlook.com (mail-he1eur01on0087.outbound.protection.outlook.com [104.47.0.87]) by lists.denx.de (Postfix) with ESMTPS id EFBF4C21DF3 for ; Mon, 28 May 2018 12:22:54 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=nxp.com; s=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=ny3bBhi1/lMP1QgGRtNBIoZ/nW1QajZ0+VhRfKcb4+c=; b=rGtjGsiRlCWXC+DF35FpmfdENHifbehcqp/+M0zmniQv67ZFLFqotZkqt61y8ieoKCKNWRdrmfoQXvP/To+emQBILTyG+n+RMWbTowBqhJK/dqArKtKzrsSmTcTLd1ljY1FnzK3m3NaukfAyjjRox4RTomDSLCM37LskWj0G7hI= Authentication-Results: spf=none (sender IP is ) smtp.mailfrom=peng.fan@nxp.com; Received: from linux-u7w5.ap.freescale.net.net (92.121.68.129) by VI1PR04MB3006.eurprd04.prod.outlook.com (2603:10a6:802:9::12) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384_P256) id 15.20.797.11; Mon, 28 May 2018 12:22:51 +0000 From: Peng Fan To: sbabic@denx.de, fabio.estevam@nxp.com Date: Mon, 28 May 2018 20:25:12 +0800 Message-Id: <20180528122526.20597-28-peng.fan@nxp.com> X-Mailer: git-send-email 2.14.1 In-Reply-To: <20180528122526.20597-1-peng.fan@nxp.com> References: <20180528122526.20597-1-peng.fan@nxp.com> MIME-Version: 1.0 X-Originating-IP: [92.121.68.129] X-ClientProxiedBy: HK2PR02CA0175.apcprd02.prod.outlook.com (2603:1096:201:21::11) To VI1PR04MB3006.eurprd04.prod.outlook.com (2603:10a6:802:9::12) X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-HT: Tenant X-Microsoft-Antispam: UriScan:; BCL:0; PCL:0; RULEID:(7020095)(4652020)(5600026)(48565401081)(4534165)(4627221)(201703031133081)(201702281549075)(2017052603328)(7153060)(7193020); SRVR:VI1PR04MB3006; X-Microsoft-Exchange-Diagnostics: 1; VI1PR04MB3006; 3:rKxMWe3QiE1nkx6F/VmbNaISPqbaKIp0rel1WCn/NFcVCa7FUhrDcokgfGla74U2juj+Y3pQbl3Q7bn1N0+DWvElK69bAhs3bQF2v9f2wiHxl2jWNl/MlffV4HKnAj99bk+tr/Qgx3x4p9AmfsuvdC0+8+5cX/kEHK8dAYdz9mVWMe6i0Pc1efDOn6LTk4fHjGLOHI3iRSESelt5YYqOW67dd6XXL20cxJFvYHFViMIpk0cI3sHWM1HVqQ19j+b2; 25:I9qEtyt9iR7XhcO/cVUzyh2tVlW43+u69Z5SP0OGSE7d4k6nLsYJOqqaAHWPgcRIRjeCyT16xgm8ripqF/JPzg/Tp+qwS5YMRsDXhOPEGENDLyqcJOQfsFy8wkj/3jPZtDsedraceIBPCN++NkS/X3O/MNKgZcZcWotjjwfmdkSU4Xrxibm2h67VFaBf/urxCVVruh8kYH/JUvXIcoXP2zWlTyCY2aiuQF99KhUG6iFCgRpNAEnVZexGQcMFXYQFggLO5a7TQNgJ0rth+GYuZvCk2oF3bY4q4oCLgtJE4XjA2xsUXV8AUADqenJAO1mcn9WEJbM+AHLeAw2kNgnMzw==; 31:t8y270eFFL778XTh3SlClQxzmfB7Ab4pb6ebhQQ83LpAiTPGa5tOWUPaCRdhQgcrPtgRHkwWyR7M9hfabbZf3PjI3Qh4LyfugXVTu0yhD+0sgm96MJHp+A0UyGD0olWlqx40XmCtku3Has5oG3Jlene0kxBlO7iW/66f6+gsOAD00wicG/0hg4+D78KU/NBIGdGnuopGuk/jKIHqH5UI4GjTpq9m2fhHY5jfehyyQEc= X-MS-TrafficTypeDiagnostic: VI1PR04MB3006: X-Microsoft-Exchange-Diagnostics: 1; VI1PR04MB3006; 20:WavzyXh9DY4L6J/mHaHz/np2MqR7sxVnIlRc2OzXn7/GjtsDGug4H/aUKxLj2DFj2bts212C4ZgePel90FMwd2QIYITccOCbJyfkVYCHvTIX7vXNePwi8qEaGFLBzb4xuQ/NTMW7bwt26ZTtTWLsL6wlH6bo2XJZTrvUdizqCv5FJThd7KKPKO4mogOIN6woSd2CuWoYmoGwUUa9hgVKBAwkhaWo3l5FKJAFn7WfqBpSfu75uKCfRWvnpmnkQB/HnNIgaTgH72108s+ZHRt0h5zEy/KPth5QSwqPspGvXJFZ1cHKPXVdEytsD7rQApt3Dp2/WYUGKb4corNyNDiICi5prJY6xtJvHjgs/8p2o7FWP34K1JEkBkov4L6OLl8nmx/6zGXspqeUIsBsun+Fm8PODAslRjyxctg1+r8rDvdSncUae8umt4YGTQyvGl+V38sgniIaEykkFs2jJy4jvu/hhXOpxZOLAB9z/Ve4j2qOJ4n5kNiOE5+ay0GQTaxC; 4:pCkC12ZuPayN/j0XV8ZL3om97DK22Vx2ochuerLVxEFpS4sH7Dr7FpfujUfbQS56cAbOu8sk/PKco5CPIF7vFVaxRQzFGJosrWsLeYPTFyzQxM+FuJcoPS1DbjgsnU6Q5FIH/i9s6iC9bw3mzxZHTEjaspmwF0p4Rm9d3sdAKXsJ6jif93gCxyoqpIRrYJsltsuiygS12kLTc87+/1T+Jc5ZhkiR/4keYOpuILzquUMETrYJmseVjTGRLz/K5NdMcMhFyWuvzmg2mShTvZeOQQQME0jWmYPcwFZ85n3P28j8GgXCwy1KeF7It9Xqd98UOG7gdqr77yBuIySHifyjpIs+nP48Q+71XHKLk2n9X1Y= X-Microsoft-Antispam-PRVS: X-Exchange-Antispam-Report-Test: UriScan:(185117386973197)(145744241990776); X-MS-Exchange-SenderADCheck: 1 X-Exchange-Antispam-Report-CFA-Test: BCL:0; PCL:0; RULEID:(8211001083)(6040522)(2401047)(8121501046)(5005006)(3002001)(93006095)(93001095)(3231254)(944501410)(52105095)(10201501046)(6055026)(149027)(150027)(6041310)(20161123558120)(20161123560045)(201703131423095)(201702281528075)(20161123555045)(201703061421075)(201703061406153)(20161123562045)(20161123564045)(6072148)(201708071742011)(7699016); SRVR:VI1PR04MB3006; BCL:0; PCL:0; RULEID:; SRVR:VI1PR04MB3006; X-Forefront-PRVS: 06860EDC7B X-Forefront-Antispam-Report: SFV:NSPM; SFS:(10009020)(366004)(39380400002)(396003)(39860400002)(376002)(346002)(199004)(189003)(36756003)(97736004)(6636002)(6666003)(68736007)(86362001)(8676002)(44832011)(8936002)(575784001)(81166006)(81156014)(47776003)(11346002)(956004)(2616005)(476003)(446003)(25786009)(486006)(48376002)(106356001)(105586002)(186003)(50466002)(16526019)(2906002)(6512007)(53936002)(1076002)(59450400001)(66066001)(26005)(51416003)(478600001)(305945005)(54906003)(50226002)(6486002)(5660300001)(6116002)(76176011)(3846002)(16586007)(52116002)(6506007)(4326008)(316002)(7736002)(386003); DIR:OUT; SFP:1101; SCL:1; SRVR:VI1PR04MB3006; H:linux-u7w5.ap.freescale.net.net; FPR:; SPF:None; LANG:en; PTR:InfoNoRecords; A:1; MX:1; Received-SPF: None (protection.outlook.com: nxp.com does not designate permitted sender hosts) X-Microsoft-Exchange-Diagnostics: =?us-ascii?Q?1; VI1PR04MB3006; 23:fLR7dImr23Ap6fImisz25f8EclJvErCO0UrVQRhYs?= z0pvcjHAY77/I5QUb7P6w8U/5t9CQ2j31vdtlyhw0Qu6Ji+Lml+7L56ln0iSD8jA1T1ZJAB9tDjZynBoUW6jSxLCpnPgpR1bGk6mQvMDm+qcmMprHFoE3iHzVh3KGZk+Vxmh7lKWmb/Dt9T/0guA3V+Odv8+sJWpDCS/lpIFPerGR6enpDjTi/jV3UojB+si0FuwA2ufyFxyc1wUpaIvtN5Vyn16XB4D6ChH6+DzPwngZxU90A8qSf5L1wPZRzWwuMN6cFYSsHiA/SEepGzxC15bRl0C3oPWoP43w2A5znDSxo2ylFhZ4dsDVkWeycz8iyBFrZZ8yi9A9VyU5bazxyQSNihLMazSk1I/jMH/DfD/ZVPiJutob6LMyn70v9oIGntHExtgPACm3D2rOlAgM6wpZ0tZeUKQR1PiFvKuLRH/TBtGJ7X+oGiL2tn4T+LGmU4xFmsyvSfgbUZPC5Pmr5oYd20LX73kfcXh83fVDgU/Xa35dV/Z+Ov4sJPLoXL+mq9UYlg+pnxdGQjLWzjrli+fmN29+EQMIZOGxcral1oRpecvRXhKewa341EF/jCknUoQ06i1ja0FuB6TGkpb506bZJ82M4pDRu+5SCjAEbeLEE1zKMd5369WRn6DDk1QrdTYi6/VDMpujM5isvwrtROguGxLXSm0d+gaXsoSzmYBDlwX+Gpr3+VDJRsB9xfhN1zpPA5tQNA9+W7YPBn0vUXmMubCgU0YcNSrCMO/sbIO0DCHFTtWsfrcouo6ENEba5fnrq+Wxi6QHxuM07DXCuAgZox9egcajgaQTHHXtj9V6/mxSvlqR7E6zZelCh2Xg02uZRUrrs3WLl1EEWnVsKvsY4QI/IthfW94PvBMUsBWC7r1RxExeWwqRV9HsN540yGG2sgalp5GP9okzbqyoJEhERAaQfQkv7uj8f5mWDAetCtT8bfPb9PqEjvBDkA+1llvisLWxGKFbcMeCdRCA4WVc+6V8KWZtvDMfkvVyuGaM9excCu6ZjvYb5fpc/vRsnIrOtsHzpAUC8yMe713iptUFzdqDOYAS29HG2NDuXsc4ZN1DCdNfQvh3MyVcoWLC/zitiT7WS7OYuBLxUMBv/pgFv7WPEzirobLFQfANkh9/pRu7fmKB/JdwsN0U60Joau9FmDxe/5VuEFt9+xI1oPBSLC8OHrRoO/yv6kt/NX1rm12d5TX7c7cUq5lluaNrgq6sIu0BrfgESxcN5mvjQsXymZ9FgIWA3B8YMWqwrZ4Q== X-Microsoft-Antispam-Message-Info: D6uqFIGfeNhx9JqM68pwhWlMz+mA72TXBjAlsPZ1QXptJy112eA5HCnTCQfQE3twCVgeyIcSmmUVX8mUPnRr/iau4dDotuU9lipkWx4RAKmsMYuX9UIrF0X5Q+2B0LaB/m4RcNnDfz0pr46VdiVDtknCCucHylkvcnl0cVOj6MtGKWmE3l6iM9F+LVmF5Wz5 X-Microsoft-Exchange-Diagnostics: 1; VI1PR04MB3006; 6:rrjivxhFXKqcrS7C0bhnME8N7H0/2veduKhuMxax5+kyBLQiQ0z2dowEOPrIzSdLt4v7OsLjGwD5jB1LRltYUOeLbJNR6a56uijuF7Z/5Ns4X7hi8+fvbbmTMzJFNDXb2m/3HY3uzSc+8jxpq8TqPgJ+zeleGM5MvRyfjxtVEcezxJLrpwJ9JDwLQ6hc37QXpputUpo2PmzQbkwnAlS7hCoH3sed66yV3CfBtaWaD+OqKwGAse72yzxj70AdApD3+cU7WxVHacV5GT9yiCz/pjAE4MIpel5EloTeSR70iFnd+SZKtduYw230YXR+zGSci4JJQV1DiOi47jMdEiBVWQa4NCDthKN0SCnaMGVHjTOlSuc1lV68NsOZlUEn+gkKlC6W7twaW4fvromeg2xtGNxbg37jlRjJaPKyHX3BDSVzyfUpjtJoiCFf3SK7l0r/QUwNIA8oP4j4o8g2OOSkuA==; 5:OvD4xhC9AgUemb+mX6ewyHrSA7drWfs4HUwe9KBzJ459zgIW1dioPBk4B0Gjqmkn1OAWl40ES9jSVVzTwax7k6q+mcS4+GUp4x6iR0k4yBI7Jw8HyVe+/pa8TCeKQSsSbuSns1MF1KMj4/wHcn8zBKCyTSUiC2qmNfVVy++hV7Y=; 24:QQxMrKiJdZ39iqdD4QumrPqAZwDtWXvagEARhEt+1nveGt/2TygLu+ApvOJUKeODiQum0jbH8b2Oy8ziblvEzGTSG4ewlpkxAHM8AVnLKmI= SpamDiagnosticOutput: 1:99 SpamDiagnosticMetadata: NSPM X-Microsoft-Exchange-Diagnostics: 1; VI1PR04MB3006; 7:vp7WmS0bvZgFkj4S5+OhWiR8XAos6irLGLbkKRD20V8WYTl/sHgLCu+m2mtcQRKyp4J2zrDs9WIp6eye14RzWgvcQoCVZaulS+JUWo5q5Yuw/BuVFbRKMy15/dGnYDDxR3DoL++zltekwPRRiE3Lycf7XVqC1ElnR1nH9fcAt3J7rSccY3tKfrl6j735zzE8C3TOBzokWKeeXH1eA2597y5MVGRrPpCN7GVP1rqGdpbA2ahDGm6tO4ifGL9G0L3C X-MS-Office365-Filtering-Correlation-Id: 9c9e41f4-b42c-4b5a-e40e-08d5c495bc9c X-OriginatorOrg: nxp.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 28 May 2018 12:22:51.3550 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: 9c9e41f4-b42c-4b5a-e40e-08d5c495bc9c X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 686ea1d3-bc2b-4c6f-a92c-d99c5c301635 X-MS-Exchange-Transport-CrossTenantHeadersStamped: VI1PR04MB3006 Cc: u-boot@lists.denx.de, Joe Hershberger Subject: [U-Boot] [PATCH 27/41] net: fec: do not access reserved register for i.MX8 X-BeenThere: u-boot@lists.denx.de X-Mailman-Version: 2.1.18 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" The MIB RAM and FIFO receive start register does not exist on i.MX8. Accessing these register will cause SERROR. Signed-off-by: Peng Fan Cc: Joe Hershberger Acked-by: Joe Hershberger --- drivers/net/fec_mxc.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/drivers/net/fec_mxc.c b/drivers/net/fec_mxc.c index 694a0b2f7e..b512a71c0c 100644 --- a/drivers/net/fec_mxc.c +++ b/drivers/net/fec_mxc.c @@ -564,7 +564,7 @@ static int fec_init(struct eth_device *dev, bd_t *bd) writel(0x00000000, &fec->eth->gaddr2); /* Do not access reserved register */ - if (!is_mx6ul() && !is_mx6ull() && !is_mx8m()) { + if (!is_mx6ul() && !is_mx6ull() && !is_mx8m() && !is_imx8()) { /* clear MIB RAM */ for (i = mib_ptr; i <= mib_ptr + 0xfc; i += 4) writel(0, i); From patchwork Mon May 28 12:25:13 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Peng Fan X-Patchwork-Id: 921519 X-Patchwork-Delegate: sbabic@denx.de Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Authentication-Results: ozlabs.org; spf=none (mailfrom) smtp.mailfrom=lists.denx.de (client-ip=81.169.180.215; helo=lists.denx.de; envelope-from=u-boot-bounces@lists.denx.de; receiver=) Authentication-Results: ozlabs.org; dmarc=fail (p=none dis=none) header.from=nxp.com Authentication-Results: ozlabs.org; dkim=fail reason="signature verification failed" (1024-bit key; unprotected) header.d=nxp.com header.i=@nxp.com header.b="K6v0Q/AR"; dkim-atps=neutral Received: from lists.denx.de (dione.denx.de [81.169.180.215]) by ozlabs.org (Postfix) with ESMTP id 40vc6v2w9dz9s0y for ; Mon, 28 May 2018 22:46:31 +1000 (AEST) Received: by lists.denx.de (Postfix, from userid 105) id 1D8EAC21DFF; Mon, 28 May 2018 12:31:53 +0000 (UTC) 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=BAD_ENC_HEADER, RCVD_IN_DNSWL_BLOCKED, SPF_HELO_PASS, T_DKIM_INVALID autolearn=unavailable autolearn_force=no version=3.4.0 Received: from lists.denx.de (localhost [IPv6:::1]) by lists.denx.de (Postfix) with ESMTP id 8B1B7C21E16; Mon, 28 May 2018 12:25:48 +0000 (UTC) Received: by lists.denx.de (Postfix, from userid 105) id E2746C21E16; Mon, 28 May 2018 12:23:02 +0000 (UTC) Received: from EUR01-HE1-obe.outbound.protection.outlook.com (mail-he1eur01on0062.outbound.protection.outlook.com [104.47.0.62]) by lists.denx.de (Postfix) with ESMTPS id 3C654C21DD9 for ; Mon, 28 May 2018 12:22:58 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=nxp.com; s=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=pd+VliusLzEKCUqfUO2y1N+nQS0uaja423Wo3W90wtI=; b=K6v0Q/AR/e+5rQ85xsBtDHxQIQWs//ur8S50dZLcjVE8+dGSHljFL7vAeLthSmEzpUtP1YWvkpibUkubZHnX0for6L72pRGchK0FeckirzwnoB+3VIbZxZwppRsTAiKRzl7x69hZiIkgvtgpf1jzs+fB4fd4iXDPSbgcLZq7yFo= Authentication-Results: spf=none (sender IP is ) smtp.mailfrom=peng.fan@nxp.com; Received: from linux-u7w5.ap.freescale.net.net (92.121.68.129) by VI1PR04MB3006.eurprd04.prod.outlook.com (2603:10a6:802:9::12) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384_P256) id 15.20.797.11; Mon, 28 May 2018 12:22:54 +0000 From: Peng Fan To: sbabic@denx.de, fabio.estevam@nxp.com Date: Mon, 28 May 2018 20:25:13 +0800 Message-Id: <20180528122526.20597-29-peng.fan@nxp.com> X-Mailer: git-send-email 2.14.1 In-Reply-To: <20180528122526.20597-1-peng.fan@nxp.com> References: <20180528122526.20597-1-peng.fan@nxp.com> MIME-Version: 1.0 X-Originating-IP: [92.121.68.129] X-ClientProxiedBy: HK2PR02CA0175.apcprd02.prod.outlook.com (2603:1096:201:21::11) To VI1PR04MB3006.eurprd04.prod.outlook.com (2603:10a6:802:9::12) X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-HT: Tenant X-Microsoft-Antispam: UriScan:; BCL:0; PCL:0; RULEID:(7020095)(4652020)(5600026)(48565401081)(4534165)(4627221)(201703031133081)(201702281549075)(2017052603328)(7153060)(7193020); SRVR:VI1PR04MB3006; X-Microsoft-Exchange-Diagnostics: 1; VI1PR04MB3006; 3:c7uvJ4+njh7hoHxbfipxzCZbRUK2XlsswtviCEleZ5y04AtuRHn2V2UmniQvq7IgCGAnAu20hrdkUIk44G7XRq900OINdCoWu3VC4lsFtfl2Df6n0M6kvgGy78HfTeEEgBvXRcLou2+LIh0HluATQyYRhpF3ZmL8ZrF+71ZAc1kJn3QAn3O9wlmnXQu7P/jOd4gBZnJ7zTC6/rgt86N3Wwx0HW7VKcrvHlHNWNos4K3bsSrtnP1pX924F2IpWQoj; 25:QQvZwlRj+FhqTP99qkRb/XukNaswCjypcMjM1Ymc5Ih1lGXpdbq0Q0g/pKLeCzKZldaLmvYbr+l8iNgEU/qW1PMY+w339oC2GUgDyXTEP5kW69J3XnyBsdDDUF7i1nKvKrBsZfAUhyzrO51Pnt/w10IdOA3lTzOsdWm07KyjdRoKL2XnvI2wFvfhKoT/lgRKfA+8gMa8YNdB9MqEB7bfbnW8oih17UELFU7y4GrG/X+NInsQaTmlJTHJ6mj5aLhOkifGEEPJdkmPa5aAG9nEfSU7HgphyMIeDbOjZd7SX72p40sexMMtB4tfqShgmlTc/8qkI0XQ9UVuXYIh5QqK1Q==; 31:ZyCRYmSZok2Q/LQQsv9lAQCi2AKnrzxeBg7QMpl406xuuJx+Wvhklx/Ts0KVXY3eYPwEd2Pvm4bHcQwNPzdJKFkbqv9lFdM8/iJyNdbT/Vfs5s9FmWtV9Hg6iY840zK9dbnUNBo3XpPfZNb4arVaa7jm5YR4nbxOn8XgJBuNNjbjyDD0ZrPyH0K0Sxc51y/r+WC2idoAYkblB75vwFsRc7nN3068uiOxYnXub5AHMmY= X-MS-TrafficTypeDiagnostic: VI1PR04MB3006: X-Microsoft-Exchange-Diagnostics: 1; VI1PR04MB3006; 20:Gxsx5L8e22E5qCMouh48z7osj6xmVx1ZBLqQ6D3CVcGOuNNDXGhCqBEGY5qv0Bl3mwX/DdKWjP9TbBNWm7AXCgBJqdcrzQNYvKBVesjs3dUicavzrlC28SfaODWer9lsVFHxoo8zEUmVUH17A2t7b9ZROPw53R7CYcay7qhgIqkmzEqYxrRd0rx8qVhcnnm0nycwquclbO9PLwG+hn92srjvS4fUDTHJX2iR4GBW/XjeTrjnMYro/Z2TwKCcAg7EyPG785gQBIrkMFnhG0AMshkM8acNuLmAmVpfrKlpGBfo8dqPm9++tJ+P+NQwqLXX94j4sT6xwde1V//Y0rAF7kGtoiRMuLrDRkH2ez0B3QhhHyL/i//prOysdwKCPJcQoLW8106cbGqPs9DQjoy8N7o0TWtfgbSAQKcaF380Fm6rVeXl/NmMvKP/PDLD7DWuaPgsDiU86zx5s9Y15eHxcHan/B5Hc+mIKjA9B9YDnQ3PNemytIjpVPBO6I5K5ct7; 4:B0IES/cBLqE0XV2HjzZqw/0GVxqoUHwlBhfJZjsIAmsvMzq0e5H3erqOuTMcTXzvbpdkSZK/jqlb6QqpM6FQeD8IudOjwMTz2tZ+ZJkefuD/+tn+ZUA5DiA1VRJHhqDUI8Pa+sgkzx7D2fd1X8oeE/BCWuY4jRSBprJqzuAahNGVZo0CY6VhQHAcj7DaEYzmG9uyoRcAebrlgr57etP67GlH8GKrJ9JO1+U+4DCbFET5yoZiOePmJ/WAcAA0fyfflKgiaAumziPZi4Fr8ilDoZ4OClr6rVIo/sO3HW+b+N2A7oTmZtVZd5KXi2KUCF4z70dN2/kCuqzfqcwAeM2+bNJYzG8Rn6fV5L980cMVZkU= X-Microsoft-Antispam-PRVS: X-Exchange-Antispam-Report-Test: UriScan:(185117386973197)(145744241990776); X-MS-Exchange-SenderADCheck: 1 X-Exchange-Antispam-Report-CFA-Test: BCL:0; PCL:0; RULEID:(8211001083)(6040522)(2401047)(8121501046)(5005006)(3002001)(93006095)(93001095)(3231254)(944501410)(52105095)(10201501046)(6055026)(149027)(150027)(6041310)(20161123558120)(20161123560045)(201703131423095)(201702281528075)(20161123555045)(201703061421075)(201703061406153)(20161123562045)(20161123564045)(6072148)(201708071742011)(7699016); SRVR:VI1PR04MB3006; BCL:0; PCL:0; RULEID:; SRVR:VI1PR04MB3006; X-Forefront-PRVS: 06860EDC7B X-Forefront-Antispam-Report: SFV:NSPM; SFS:(10009020)(366004)(39380400002)(396003)(39860400002)(376002)(346002)(199004)(189003)(36756003)(97736004)(6636002)(6666003)(68736007)(86362001)(8676002)(44832011)(8936002)(575784001)(81166006)(81156014)(47776003)(11346002)(956004)(2616005)(476003)(446003)(25786009)(486006)(48376002)(106356001)(105586002)(186003)(50466002)(16526019)(2906002)(6512007)(53936002)(1076002)(66066001)(26005)(51416003)(478600001)(305945005)(54906003)(50226002)(6486002)(5660300001)(6116002)(76176011)(3846002)(16586007)(52116002)(6506007)(4326008)(316002)(7736002)(386003); DIR:OUT; SFP:1101; SCL:1; SRVR:VI1PR04MB3006; H:linux-u7w5.ap.freescale.net.net; FPR:; SPF:None; LANG:en; PTR:InfoNoRecords; A:1; MX:1; Received-SPF: None (protection.outlook.com: nxp.com does not designate permitted sender hosts) X-Microsoft-Exchange-Diagnostics: =?us-ascii?Q?1; VI1PR04MB3006; 23:/vexGOGPRglyEqWZuSWyHZSfYE07/7RPwjp8vQfH+?= AMEplCRL91dH2B7FLHRIx3I71X3RnWrmRsIR7fzE7+l7ir5q3eBK/qqnQAuy5k9WEtNJqLFGmKz8BNcZfYhyLNW7v7ecPxQR5HVgxFEUx6+dKwDC4mf3jGq0wb0Ncu6bWHQLCaoJMNaKyDOGcWkO2Y5WoJ/ZgRYxXdHhIHTanERCG/h/JVjXSkFbG1T+4AeaXQE+wZqJBSzsl+Ga9rgo6DDYxThjIntr64rQJZnoa1WNJ15ke2gYurAWG3W7O35HgvPgff4eg58da2xjHQ7pXT79nOVlJ+ntK00JtURDZ0RNlT+dnToKMir+gjiYHBxtHGuKYyOTwJvOx8dfePZT17RV4t+SmaSNvQehLUKdj54sXazV3fZCl5KngTJThD7r/dcAizDucykQ9r2Va/Q+U9dgMKema978zT/59CMinPfMqt8AJlqYhmo6VsivaieZKirlMvzwJTedhCApQC7TgIVXAKd7Yz4XZQ0aTBffhlU3m2I5+pgydrWDPsqnw2Xjo0SEd07MJwXlG0eNJ+r/hqcz6Mj/Dn70qYfZvxxsEdoI05pQFfkzb4ACWQix2QtJEsufWNrCwz3kzTMqf4aE+rb/12esMG7yOPKJyJsA3T7Lu4XEkMRXrP/ippvFVqqpuadi3V8Qw2R+ermku4iK3BJjPgrmx3S79bPETrbd68sxDJsEEWih31JDdQm31m2PHYvaXJ9569h6s7JGMQ9nT4fqIumNV7RYA0FONpi960TY6cG7a2yjrgdj7fPVQj6ffI7rL9IqR1RfSnBKhg0ZW/NNO/t+i7FmuwwANQMngBwrAz8XCgwicc0frBZ3+4druV0r4ZWP0/N+2e59M+qM2mktoJ8chigDym4uXJjkErQ0e1d1UEW75rt2TtdV9pa2/d/gVTwA+nO588ipSotgk8TWiDhlwTmioVdXdbuGtmymvvO9jd1a0wznyea6aPFHkmvjiyjCwAOUmuP6tvIa0FjSgXrS0pJG22Cnyb5QgI1NfSYThrtjmSLaNPTQEKeYCaJrzk1V4wt1Br0CcSvVU+Q8xFPng/ApdW0GzI3qAaKwvryII4i0LbcPgtXsMHF5cpJ6Ldzdi/pggmlaRgC45wFuoXWgUVowbB2F38aWUKnU/fglNQZFSnHSZxXoF6iZKF/rN05OQdoOuC8tJSrXsjfiGiiF2W4DnQqbrbHPyrXjoqHMecXhV94HYrjvFBS9NtqH4kTcdPBQaMNz0u3LlTf X-Microsoft-Antispam-Message-Info: l1bpA/t5Ojh4/Bk8DCwY9Fwnhq9iaKo/bT/PByozo9TS46WeyJzo0HIQWmmyzn/jnDX/ZsHw4okRqt6jdygRP4Nl9/SggHT7am7zs76/XsB/fbvT0qHlDCodjU3YwAmINYkEP6Ui5KoDKS0vk6tm8sZ2c3Zw1WITa3hA0m3BC/6xGX4K1AGXTkYgtep/5XsY X-Microsoft-Exchange-Diagnostics: 1; VI1PR04MB3006; 6:yp9fqlvaO95/SJPY1tYBPYbAi8ffzHcy6t3wqors0RZ9aaT4BwJWYrS4UVt78TZirAXjN6hnrcIm5rOzrdfhEl7rqUZ5D62wo+zHSEZucvMPcnB2pHlAlg+54iXjGotFpqOAXbD3rLqRLPq05ULgN9zq7EefUz/oePCQnz/rZhUfOe1l/iub4xvFhVIUPHcKcLTw4Qzb0hZ/iqxZqhHGPCaYCvOl+JxODdfSCu4TsWOm0HULm8vW4LrQc7bRC8yEgF504ouojBZPpyn6rjrBc83mhpemz+Eg3dakImP36c78cupOhXOphMrhxFtQYtlJ2SeTljmgSlzLGNyGI3PDjlZZG9tERDH3HLYU2ncI/ef0lrLWUfdSgEhQyLouXsWq6pW/gfKTvnP8jpP/ZZpl9fYFAZNWG6/o+1huqs8RDsMCteRywFLG4TNfcmv0To77q1wBpL+RT7PjD9cdzY/t4g==; 5:F5tk62yVkqQpu2K/SWuUld68KE3UgB8Fip9EbnGfK47yktooczjBrT9Hi6V6YlJVj2fVmf7VO8vqXl7VenBkRDooVNPksn/agNK+ThBmK3f+rlGYKekzhhSxbu2xLOvOF2XZ/dwKJFz+8ZlrvnuxvB8xie86M3ZY7zdEkLZcelI=; 24:xCvBQcjLbKjW9OsVgEmwUbg/8kxpTT9U/C5o/1bCcueDb/eZxRZtcxKVig+mmsFdMe9wZVXSRnqSnBlovTSjB7k6tF2XYjI/bwsgI6xRSKw= SpamDiagnosticOutput: 1:99 SpamDiagnosticMetadata: NSPM X-Microsoft-Exchange-Diagnostics: 1; VI1PR04MB3006; 7:R6lBZ/Zrnt5g217oT0ek53fkuoYDD+1mrnGM9ldfFi/3recVnF2o+2bM9b+mRPk5k8Vz7SEaazu8iCytoAWX6vtsq9b0Yjiahtvh360kjpmOEf7E884/HfXvkn8B4VGLtsyuQXsmYtnFeT1u3NnGpiF8woamgI5dgt2kkwEhrerG7uTLO6Zcq1XcpA82FXfBFXkpNmzoKfkeWvAEkY9DXMqpyZ637c2UFifFZCAyZbjYxhQww03TMJfQ/01Gj4YJ X-MS-Office365-Filtering-Correlation-Id: 136f101d-4a7a-457e-94f0-08d5c495be72 X-OriginatorOrg: nxp.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 28 May 2018 12:22:54.4488 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: 136f101d-4a7a-457e-94f0-08d5c495be72 X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 686ea1d3-bc2b-4c6f-a92c-d99c5c301635 X-MS-Exchange-Transport-CrossTenantHeadersStamped: VI1PR04MB3006 Cc: u-boot@lists.denx.de, Joe Hershberger Subject: [U-Boot] [PATCH 28/41] net: fec_mxc: Add the init_clk_fec function X-BeenThere: u-boot@lists.denx.de X-Mailman-Version: 2.1.18 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" From: Ye Li When the power domain driver is enabled, we need to enable clocks after power domain on. So the clock settings can't set in board_init, needs to set them when the device is probed. Add this weak function in driver, that SoC codes can implement the clock settings. Reviewed-by: Peng Fan Signed-off-by: Ye Li Cc: Joe Hershberger --- drivers/net/fec_mxc.c | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/drivers/net/fec_mxc.c b/drivers/net/fec_mxc.c index b512a71c0c..d4e5a2a776 100644 --- a/drivers/net/fec_mxc.c +++ b/drivers/net/fec_mxc.c @@ -1037,6 +1037,10 @@ struct mii_dev *fec_get_miibus(ulong base_addr, int dev_id) return bus; } +__weak void init_clk_fec(int index) +{ +} + #ifndef CONFIG_DM_ETH #ifdef CONFIG_PHYLIB int fec_probe(bd_t *bd, int dev_id, uint32_t base_addr, @@ -1154,6 +1158,7 @@ int fecmxc_initialize_multi(bd_t *bd, int dev_id, int phy_id, uint32_t addr) #else base_mii = addr; #endif + init_clk_fec(dev_id); debug("eth_init: fec_probe(bd, %i, %i) @ %08x\n", dev_id, phy_id, addr); bus = fec_get_miibus(base_mii, dev_id); if (!bus) @@ -1253,6 +1258,8 @@ static int fecmxc_probe(struct udevice *dev) uint32_t start; int ret; + init_clk_fec(dev->seq); + ret = fec_alloc_descs(priv); if (ret) return ret; From patchwork Mon May 28 12:25:14 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Peng Fan X-Patchwork-Id: 921512 X-Patchwork-Delegate: sbabic@denx.de Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Authentication-Results: ozlabs.org; spf=none (mailfrom) smtp.mailfrom=lists.denx.de (client-ip=81.169.180.215; helo=lists.denx.de; envelope-from=u-boot-bounces@lists.denx.de; receiver=) Authentication-Results: ozlabs.org; dmarc=fail (p=none dis=none) header.from=nxp.com Authentication-Results: ozlabs.org; dkim=fail reason="signature verification failed" (1024-bit key; unprotected) header.d=nxp.com header.i=@nxp.com header.b="MLBU0lZe"; dkim-atps=neutral Received: from lists.denx.de (dione.denx.de [81.169.180.215]) by ozlabs.org (Postfix) with ESMTP id 40vbzP6GfQz9s0q for ; Mon, 28 May 2018 22:40:01 +1000 (AEST) Received: by lists.denx.de (Postfix, from userid 105) id 7B6CAC21E16; Mon, 28 May 2018 12:31:03 +0000 (UTC) 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=BAD_ENC_HEADER, RCVD_IN_DNSWL_NONE, SPF_HELO_PASS, T_DKIM_INVALID autolearn=unavailable autolearn_force=no version=3.4.0 Received: from lists.denx.de (localhost [IPv6:::1]) by lists.denx.de (Postfix) with ESMTP id 32434C21C8B; Mon, 28 May 2018 12:25:26 +0000 (UTC) Received: by lists.denx.de (Postfix, from userid 105) id 0E3E6C21E68; Mon, 28 May 2018 12:23:06 +0000 (UTC) Received: from EUR03-DB5-obe.outbound.protection.outlook.com (mail-eopbgr40050.outbound.protection.outlook.com [40.107.4.50]) by lists.denx.de (Postfix) with ESMTPS id 66F55C21E7E for ; Mon, 28 May 2018 12:23:01 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=nxp.com; s=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=gmdyUEuHrEErLbJ4bN+k2rfkf0qo77HXlI0QYX+TMxk=; b=MLBU0lZez/4ivCdd0cpciaT7UmCSGHqYeJdmKeKFA4wRuo8n6A09ILDU66udqXXqPYS9PSBucFcncNWOPWUpv8N1del/jV4Mf4y+NrVScREnOkY+9BHT3PsMOi2A8tUVdT2/I7KlknYpES50xfwz6paWu1fOiJCScJi81IS2tA8= Authentication-Results: spf=none (sender IP is ) smtp.mailfrom=peng.fan@nxp.com; Received: from linux-u7w5.ap.freescale.net.net (92.121.68.129) by VI1PR04MB3006.eurprd04.prod.outlook.com (2603:10a6:802:9::12) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384_P256) id 15.20.797.11; Mon, 28 May 2018 12:22:57 +0000 From: Peng Fan To: sbabic@denx.de, fabio.estevam@nxp.com Date: Mon, 28 May 2018 20:25:14 +0800 Message-Id: <20180528122526.20597-30-peng.fan@nxp.com> X-Mailer: git-send-email 2.14.1 In-Reply-To: <20180528122526.20597-1-peng.fan@nxp.com> References: <20180528122526.20597-1-peng.fan@nxp.com> MIME-Version: 1.0 X-Originating-IP: [92.121.68.129] X-ClientProxiedBy: HK2PR02CA0175.apcprd02.prod.outlook.com (2603:1096:201:21::11) To VI1PR04MB3006.eurprd04.prod.outlook.com (2603:10a6:802:9::12) X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-HT: Tenant X-Microsoft-Antispam: UriScan:; BCL:0; PCL:0; RULEID:(7020095)(4652020)(5600026)(48565401081)(4534165)(4627221)(201703031133081)(201702281549075)(2017052603328)(7153060)(7193020); SRVR:VI1PR04MB3006; X-Microsoft-Exchange-Diagnostics: 1; VI1PR04MB3006; 3:7y35sdyXhxIlu9ztx0TBIYMfqidgy5+NvyAzYsDwHD3lw+zBp6WRfPLKG+eAe+PSbBAwloNdQ8ZkUUPWI+R7Vbz+WR8tdJof0XodmDNGs7aIg0XS8GtN9x9EXn8hmkC4zldHPO7x6OTWFnK0x6K4Qqs9yFKf11LOxTI+GF4GjSz3OfndKvdWDrC2xNNRs6DqJyTuCwIveKJ0lYbYbEadHO9g+cXV+Z8E2oTr8vOB9KrZajXVqAIFaHNyuAvmBIlr; 25:RkFKF/1jp/R8j2KBrk3v0+tWJfHuHeTGubNJzI12W+shRPic+mP4Thnf7byOZ+FiUGar8dTiXsp3beWHrkRWXaqLQEXw4bPJ8OCP14UtiC3Re7tjwwGxr4xhyLLIAvRAYAi6Q7HL9krdtmxrKYXNgrOnxbrD26/ywIrgCFoc9QuzXslC98HmRHhISdQxMymM2KcG0zWnYv7Fihv3FrujQs6uJFsBMxk82UQH2koIbDOs916UQ0PIIleSDu/jlR8+vUQ2WdyU4xBiUtiEkm0KFFFOXMm5bMeoRVqN28y+4UOc+KFdJXplDJxtYE+nNZxYKNTk5tqf4dk+oD9eqvyeJw==; 31:aQsazQBTupQCVKk4HFDvudgeu2ASh3X35olgMhGhSShEFcWyE9iXwcLqcSegT+8JMM7PlMFx6WEUVBDia09gT8ZoaF4VM0gFVujnXV7tAG4snQp0PmBD6ZDMZ63d5wcLCJUMdxV0EdFaNsEA0tFe9XZ2SJb/qG009e6nfbw3fd0KfjdM9oGQHENMCvfEhMd4bG0fF3UKgDsul3nykhX6yFUV3bucntyZJNxxbx3ZF1g= X-MS-TrafficTypeDiagnostic: VI1PR04MB3006: X-Microsoft-Exchange-Diagnostics: 1; VI1PR04MB3006; 20:zUSblK4h/d5vg79LBJNbTUDnxGrqbLSn54kRPuzXxNENVSJ/l5cuejREPM6jnGWs7Vr4oM7soKpxsucgRhzdbDSAwsaDXylTgFZKw5PczjftW/qcvaTQ9H98YdQwwbougnowyd5WUNV2zyMN6ZyLDFKDZoj549ow4I8HLVVhc5YzqMBtoSC3HhpUbNou1xnblk24/z5IVNxWaf1wbANa1cEaczC2bDLQswFPmc+LJPkSF9RCGrvI0oD+QcwgRTM/BW1+Zhq6TXDYFpowUC9wXO1lBtmFkM8FwMLVtBW5SHK384ZKmHO4PZXmIoWDxR7OrF9vcsVg3UgQ0cM8fanL3SQcxEsqnK5hM6vKpT1kG3hehC4pAKSRjR+/OG4AgDMSr0bks+OTber0zdeg2uY3shBNdHFQzgzMx0Z/whZqUpL+jC5MHZzYR4OXGNZY/KlSEhqZF55zFmudmbyD5yoTODU1YjgmFv4aGb4StjKWzEE3Y62dnYDeRWDj/P9Fb1Qn; 4:zovoF+gsfB1DZJcIMrtvV4LuVgtQPnLg/qrKSIPGwzIOx8wVCGjpq3Ke/C3Ey4gFqBYpbe+gfpsMUtj2jKf0pyCeKC2zcHLP3fKKN6QpsbmanxN6c8Xc3HoaHaDNx8lIU7RwfQXLwFMztBFcZWGhBsOnHfq24XaDvWO2q3/gb9X7GRuJsRaMKGNID9TL6VoA62iAI/y6VqWKKeVColjos0aV9QnmVl50cUbsVgAb4eEHyc2LVdsBUL/EONP3AnS7yVHmUkTOBd3fE+EmEPUJz4zTjV7fSqEiFjkRM3lqnNGrB5doctvw3ZWVeow/S34b X-Microsoft-Antispam-PRVS: X-Exchange-Antispam-Report-Test: UriScan:(185117386973197); X-MS-Exchange-SenderADCheck: 1 X-Exchange-Antispam-Report-CFA-Test: BCL:0; PCL:0; RULEID:(8211001083)(6040522)(2401047)(8121501046)(5005006)(3002001)(93006095)(93001095)(3231254)(944501410)(52105095)(10201501046)(6055026)(149027)(150027)(6041310)(20161123558120)(20161123560045)(201703131423095)(201702281528075)(20161123555045)(201703061421075)(201703061406153)(20161123562045)(20161123564045)(6072148)(201708071742011)(7699016); SRVR:VI1PR04MB3006; BCL:0; PCL:0; RULEID:; SRVR:VI1PR04MB3006; X-Forefront-PRVS: 06860EDC7B X-Forefront-Antispam-Report: SFV:NSPM; SFS:(10009020)(366004)(39380400002)(396003)(39860400002)(376002)(346002)(199004)(189003)(36756003)(97736004)(6636002)(6666003)(68736007)(86362001)(8676002)(44832011)(8936002)(575784001)(81166006)(81156014)(47776003)(11346002)(956004)(2616005)(476003)(446003)(25786009)(486006)(48376002)(106356001)(105586002)(186003)(50466002)(16526019)(2906002)(6512007)(53936002)(1076002)(59450400001)(66066001)(26005)(51416003)(478600001)(305945005)(54906003)(50226002)(6486002)(5660300001)(6116002)(76176011)(3846002)(16586007)(52116002)(6506007)(4326008)(316002)(7736002)(386003); DIR:OUT; SFP:1101; SCL:1; SRVR:VI1PR04MB3006; H:linux-u7w5.ap.freescale.net.net; FPR:; SPF:None; LANG:en; PTR:InfoNoRecords; A:1; MX:1; Received-SPF: None (protection.outlook.com: nxp.com does not designate permitted sender hosts) X-Microsoft-Exchange-Diagnostics: =?us-ascii?Q?1; VI1PR04MB3006; 23:dzxrh+ieCPlYRHK7kycmtcLwLXYsb8xxzGbKHQt9R?= KRcD+i/m9TUOo7vb32Ow8xViwyx3TsY8Zyo1uD3HrbAJjsU7Uc39ECBCrVTlrdDi443UvjpqfzuO+ZUtCyfKrfFZMQEq2SaQ7vQ6XHtjOuYjEs6vwjy51id4Y6wGysXk4NUcBKv2CixUlkkO7otk0lnhjPtUeGAYrb/VQek1EhgRqcU3D1gCi1ZbsGsVRUaiN5aMwiU5mQ0hA7yeD64zNuKOlTLIEsTMMTMFjs9wX7tGfHe4lCSgRLirpsvVO0jUTP/hVQ8UCis3uLXjzGfYAjSip53L6kJRnbNygcocNek+k3+JPS3iT5Cye4BD3IsxtIVOJU1UtBYwbkm4Hf03X7I+qAPEht2/bESEZuB61NEihoccaIx3TnzCmQJPE4k1/rqVTZrnE69VU+XdOL/0A+DAnobRwaFaxHm8xyRomJK//KT5sZXwnDyByMxYqyxgB6kSJ6K8dvumJiCqbYEDzmVp6Tx1RmsqzfGoroWDewChYE9FuC/zjQU82hCZs2cilmp8I6l9DVgYRk90odt80/IIaT/tbO4E3DMJuSNVL6FE6rxDtO20xG37KVsxFsED+vGoA9vOdEBC5lPZXDO8gsly4KK8i4kINq8tcBYfWJmxEqc55k+SSFSMiRURaah/p+Vq1IH/2oq63yjdNZPWxHQoxXaka5iSIoaZbmEEm9RYjo8uBHhSK2HnRq8/qXWe+NKs8OiXeb5SrXMVP+hS3mkCqNc5uwFAe1vpxeOSwvMl9gt/ShJay8L0dWfQI6mlZEqsPBpm1mbIs9i71CAEJgvHNw2v6GVf87lhmxh8jm8XLHI8Bhbl+Rp4dSsX7Awmx0tRoVuxhytBf6u3JGucMK445wfQebjbQ0KwdAP+KD9fP0NOepc3DblXKwZEa7y95n5pBEGTpZ4Xu/EFGomUUpSxfkoRvLW3ktWg4YR49bkr5uFDcfm5U3QE5mrMcAaFrMF0SdeApFEfbuGYxyHYe4GyvZogw8ROzC9DmOBR5O6LOUH4s+Ko1SH2lfnKTs7QSe8scGgkgFsJD2X+RnQRpBokNYMpzV3F/0KY9kCvAOI2Ifq0ipFOG5Q4ik+0hZGkN3Bqyh5kEy6R/Zc1H/9IK/OT16rttNSNXe2hicUQjI2fAS/8wsqKIpGT61ttjvOH4RadQJrEoOUE95Mx9cVJPlfaKvTzHqB8rAdgMVG5rySP+xqGB5syezstlYr5zizT+xhUy+/mXpKH+CVnTzAYbUXTwJvd/DgO/2hDdV38w8gEw== X-Microsoft-Antispam-Message-Info: JQNALSbYby6Ly0Wn7AUBSXKTmYILPZphzRZaTVqQg6OB956iYZ0dTToElFVKyu0IPkvDDSjTid4RpoqMekrylzuwCam/+jbmxaUsYVOLZyfV8sTxdIEPn2x2xlahjtQhAo1L92tQ2OutEYILXCRl9U+1B+8mORMbqAZitAc5iNuN67dRf2Dm8A6KYb10ASZb X-Microsoft-Exchange-Diagnostics: 1; VI1PR04MB3006; 6:NBGXwEovG4fW5gvnwUK1kI8rUNd+msi/yYJ9USDtJyTESodepE/sMOTQuMrf9ON7pHAzXg7+k3Z/4xwnCmltLj8SdzKrTr2BEuEIJukrFLU24vDKBtaBWlcZOe7tGOCEfFMMd+jD2JpzrLwzV7/9m16IspjrSiCZFpFPmTmGEKyrcNvN8Y5pKXJjRyGTOr0TjJwkBRQxgkZC/0I+bPgNxBKfNTkU7zclstSHnSjReG13lrLVmyJm0+LZH2FU0KfsQogucIdlaPpdPoLULw8hoKsGaseiCsWX/tg9H5PdWDFrexg1BquPiQEIvBqtMYj28h52PsNBkJIJfq5uSzViB4ZsRn3LuwVOCNo7DFd3Hi4Wnv0IrxBjEoCXWquLugwKjahZuSWzOer4+S9C+e/JZjeeMuSfFgE8/XoKh9gO1v4UWAJHro+X50koJ+vUjTK0enVhHRdcA5rnV8O4EEsDCQ==; 5:moDzX83idZeAZCbQoWVE/PW0kru1md2j7W5vjkxUKo/k/FU52XCR3No2N3uMmyj0Q5cPUJJxX5jlZiSiBEvWRGLkZj3MOxr+7Y1N7/W0s5f2hwgE2I8PMrGE9xQuYlo7HRDg7eyiqgW23/CM2OO21wZtJ31F0ySitBm1pbLNQF0=; 24:oIItQo+kwOCKvVGWH/NTQ9/VKo0zQ3XzNUn+TNkQbL6KrOlUQ3nj2M6UwRG34o1+9AwR1rc1v4ExfDGuw1ssTfiOH65UC5q0ST9PsemhmUQ= SpamDiagnosticOutput: 1:99 SpamDiagnosticMetadata: NSPM X-Microsoft-Exchange-Diagnostics: 1; VI1PR04MB3006; 7:OJO0vMr7MW7AI4I/D0uL2u/w/pX0M3B1TF+HlBnIa024iShgETI367aRcwPjisAXmg3HA+PpaAgz1Ry6aZ4pAlC8JUkCaM+/rIPQgbOtiu6T5Pgl+VbYp/qJPakpE+2GLeoAovzT+M7FibV2BS08rOuC7VTBjIJL1GX00QDbkqbDkV9TRP+gBxo7jUGNW0oEu4hIN4oH/+UQDuQT9C24L89zLDhqlT4tL2juzWOJNR0vjDFjcb82sN1yv8Bvu9dF X-MS-Office365-Filtering-Correlation-Id: 056c52e3-a613-4310-7fc3-08d5c495c062 X-OriginatorOrg: nxp.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 28 May 2018 12:22:57.3707 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: 056c52e3-a613-4310-7fc3-08d5c495c062 X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 686ea1d3-bc2b-4c6f-a92c-d99c5c301635 X-MS-Exchange-Transport-CrossTenantHeadersStamped: VI1PR04MB3006 Cc: u-boot@lists.denx.de, Richard Zhu Subject: [U-Boot] [PATCH 29/41] sata: Add i.MX8 SATA support X-BeenThere: u-boot@lists.denx.de X-Mailman-Version: 2.1.18 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" From: Ye Li - some delay is required between SATA_CTRL0 RST SET and CLR. Otherwise, sata phy link would be down. - specific the ahci modification by imx8qm platform. Signed-off-by: Richard Zhu Signed-off-by: Ye Li Signed-off-by: Peng Fan --- drivers/ata/Kconfig | 6 +++++ drivers/ata/Makefile | 1 + drivers/ata/ahci.c | 25 ++++++++++++++++++++ drivers/ata/sata_imx.c | 64 ++++++++++++++++++++++++++++++++++++++++++++++++++ 4 files changed, 96 insertions(+) create mode 100644 drivers/ata/sata_imx.c diff --git a/drivers/ata/Kconfig b/drivers/ata/Kconfig index 86ec628104..30fa9a2f02 100644 --- a/drivers/ata/Kconfig +++ b/drivers/ata/Kconfig @@ -79,6 +79,12 @@ config MVSATA_IDE Enable this driver to support the SATA controller found in some Marvell SoCs, running in IDE compatibility mode using PIO. +config SATA_IMX + bool "Enable SATA driver support for i.MX8QM" + select LIBATA + help + Enable this driver to support the SATA controller found in i.MX8QM SoCs. + config SATA_MV bool "Enable Marvell SATA controller driver support" select LIBATA diff --git a/drivers/ata/Makefile b/drivers/ata/Makefile index 02f02c8e8d..da2634c3a4 100644 --- a/drivers/ata/Makefile +++ b/drivers/ata/Makefile @@ -13,6 +13,7 @@ obj-$(CONFIG_LIBATA) += libata.o obj-$(CONFIG_MVSATA_IDE) += mvsata_ide.o obj-$(CONFIG_SATA) += sata.o obj-$(CONFIG_SATA_CEVA) += sata_ceva.o +obj-$(CONFIG_SATA_IMX) += sata_imx.o obj-$(CONFIG_SATA_MV) += sata_mv.o obj-$(CONFIG_SATA_SIL3114) += sata_sil3114.o obj-$(CONFIG_SATA_SIL) += sata_sil.o diff --git a/drivers/ata/ahci.c b/drivers/ata/ahci.c index c35912bd33..39ae494c34 100644 --- a/drivers/ata/ahci.c +++ b/drivers/ata/ahci.c @@ -26,6 +26,16 @@ #include #include +#ifdef CONFIG_SCSI_AHCI_PLAT +#ifdef CONFIG_FSL_HSIO +#define HW_PP2C 0xAC +#define HW_PP3C 0xB0 +#define HW_PP4C 0xB4 +#define HW_PP5C 0xB8 +#define HW_PAXIC 0xC0 +#endif +#endif + static int ata_io_flush(struct ahci_uc_priv *uc_priv, u8 port); #ifndef CONFIG_DM_SCSI @@ -191,6 +201,16 @@ static int ahci_host_init(struct ahci_uc_priv *uc_priv) debug("ahci_host_init: start\n"); +#ifdef CONFIG_SCSI_AHCI_PLAT +#ifdef CONFIG_FSL_HSIO + writel((1 << 28) | (1 << 24) | readl(mmio + HW_PAXIC), mmio + HW_PAXIC); + writel(0x2718461C, mmio + HW_PP2C); + writel(0x0D081907, mmio + HW_PP3C); + writel(0x06000815, mmio + HW_PP4C); + writel(0x800C96A4, mmio + HW_PP5C); +#endif +#endif + cap_save = readl(mmio + HOST_CAP); cap_save &= ((1 << 28) | (1 << 17)); cap_save |= (1 << 27); /* Staggered Spin-up. Not needed. */ @@ -270,6 +290,11 @@ static int ahci_host_init(struct ahci_uc_priv *uc_priv) ret = ahci_link_up(uc_priv, i); if (ret) { printf("SATA link %d timeout.\n", i); +#ifdef CONFIG_SCSI_AHCI_PLAT +#ifdef CONFIG_FSL_HSIO + return -ENODEV; +#endif +#endif continue; } else { debug("SATA link ok.\n"); diff --git a/drivers/ata/sata_imx.c b/drivers/ata/sata_imx.c new file mode 100644 index 0000000000..90293a6e49 --- /dev/null +++ b/drivers/ata/sata_imx.c @@ -0,0 +1,64 @@ +/* + * Copyright 2017 NXP + * + * SPDX-License-Identifier: GPL-2.0+ + */ +#include +#include +#include +#include +#include +#include +#include + +int sata_init(void) +{ + int ret; + u32 val, i = 0; + + printf("start sata init\n"); + writel(0x22222222, GPR_LPCG_PHYX2APB_0_APB); + writel(0x22222222, GPR_LPCG_PHYX1_APB); + + setbits_le32(0x5F130008, BIT(21)); + setbits_le32(0x5F130008, BIT(23)); + + /* PHY_MODE to SATA100Mhz ref clk */ + setbits_le32(HW_PHYX1_CTRL0_ADDR, BIT(19)); + + /* + * bit 0 rx ena, bit 1 tx ena, bit 11 fast_init, + * bit12 PHY_X1_EPCS_SEL 1. + */ + setbits_le32(HW_MISC_CTRL0_ADDR, HW_MISC_CTRL0_IOB_RXENA + | HW_MISC_CTRL0_PHY_X1_EPCS_SEL); + + clrbits_le32(HW_SATA_CTRL0_ADDR, HW_SATA_CTRL0_PHY_RESET); + setbits_le32(HW_SATA_CTRL0_ADDR, HW_SATA_CTRL0_PHY_RESET); + setbits_le32(HW_SATA_CTRL0_ADDR, HW_SATA_CTRL0_RESET); + udelay(1); + clrbits_le32(HW_SATA_CTRL0_ADDR, HW_SATA_CTRL0_RESET); + setbits_le32(HW_SATA_CTRL0_ADDR, HW_SATA_CTRL0_RESET); + + setbits_le32(HW_PHYX1_CTRL0_ADDR, HW_PHYX1_CTRL0_APB_RSTN); + + for (i = 0; i < 100; i++) { + val = readl(HW_PHYX1_STTS0_ADDR); + val &= HW_PHYX1_STTS0_LANE0_TX_PLL_LOCK; + if (val == HW_PHYX1_STTS0_LANE0_TX_PLL_LOCK) + break; + udelay(1); + } + + if (val != HW_PHYX1_STTS0_LANE0_TX_PLL_LOCK) { + printf("TX PLL is not locked.\n"); + return -ENODEV; + } + + ret = ahci_init((void __iomem *)AHCI_BASE_ADDR); + if (ret) + return ret; + scsi_scan(1); + + return 0; +} From patchwork Mon May 28 12:25:15 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Peng Fan X-Patchwork-Id: 921494 X-Patchwork-Delegate: sbabic@denx.de Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Authentication-Results: ozlabs.org; spf=none (mailfrom) smtp.mailfrom=lists.denx.de (client-ip=81.169.180.215; helo=lists.denx.de; envelope-from=u-boot-bounces@lists.denx.de; receiver=) Authentication-Results: ozlabs.org; dmarc=fail (p=none dis=none) header.from=nxp.com Authentication-Results: ozlabs.org; dkim=fail reason="signature verification failed" (1024-bit key; unprotected) header.d=nxp.com header.i=@nxp.com header.b="jtH5395o"; dkim-atps=neutral Received: from lists.denx.de (dione.denx.de [81.169.180.215]) by ozlabs.org (Postfix) with ESMTP id 40vbnp20nXz9s0y for ; Mon, 28 May 2018 22:31:42 +1000 (AEST) Received: by lists.denx.de (Postfix, from userid 105) id D8BD8C21E07; Mon, 28 May 2018 12:29:37 +0000 (UTC) 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=BAD_ENC_HEADER, RCVD_IN_DNSWL_BLOCKED, SPF_HELO_PASS, T_DKIM_INVALID autolearn=unavailable autolearn_force=no version=3.4.0 Received: from lists.denx.de (localhost [IPv6:::1]) by lists.denx.de (Postfix) with ESMTP id 912ACC21EBF; Mon, 28 May 2018 12:24:17 +0000 (UTC) Received: by lists.denx.de (Postfix, from userid 105) id C3C64C21EBE; Mon, 28 May 2018 12:23:08 +0000 (UTC) Received: from EUR03-DB5-obe.outbound.protection.outlook.com (mail-eopbgr40070.outbound.protection.outlook.com [40.107.4.70]) by lists.denx.de (Postfix) with ESMTPS id 9E3C4C21DE8 for ; Mon, 28 May 2018 12:23:03 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=nxp.com; s=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=knEpjRGCd+5D92AvZ5ybmy9D4plqTCpukuIi1FuvpFI=; b=jtH5395oU5uS2fPKE4t1I6hzSqzNsjo8JYznAE1D6uLG7XnJmQIA2RTcSfnRVFA+mOaTYHGPdJol2swqhc82qCZE9cm8/Vc/Ol73C/CpHfG1RLYZErYIv8WC5HErkPDbO1RVwj0rimFrD/fJv9nfSzFLwtZ+cHgEpEoBqzza7Ns= Authentication-Results: spf=none (sender IP is ) smtp.mailfrom=peng.fan@nxp.com; Received: from linux-u7w5.ap.freescale.net.net (92.121.68.129) by VI1PR04MB3006.eurprd04.prod.outlook.com (2603:10a6:802:9::12) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384_P256) id 15.20.797.11; Mon, 28 May 2018 12:23:00 +0000 From: Peng Fan To: sbabic@denx.de, fabio.estevam@nxp.com Date: Mon, 28 May 2018 20:25:15 +0800 Message-Id: <20180528122526.20597-31-peng.fan@nxp.com> X-Mailer: git-send-email 2.14.1 In-Reply-To: <20180528122526.20597-1-peng.fan@nxp.com> References: <20180528122526.20597-1-peng.fan@nxp.com> MIME-Version: 1.0 X-Originating-IP: [92.121.68.129] X-ClientProxiedBy: HK2PR02CA0175.apcprd02.prod.outlook.com (2603:1096:201:21::11) To VI1PR04MB3006.eurprd04.prod.outlook.com (2603:10a6:802:9::12) X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-HT: Tenant X-Microsoft-Antispam: UriScan:; BCL:0; PCL:0; RULEID:(7020095)(4652020)(5600026)(48565401081)(4534165)(4627221)(201703031133081)(201702281549075)(2017052603328)(7153060)(7193020); SRVR:VI1PR04MB3006; X-Microsoft-Exchange-Diagnostics: 1; VI1PR04MB3006; 3:444ayt3SbRbh8rCMw47J0LZJrrXdzUGkklzv0Fq3tUvPajCqQlvX36KZEuWj6CZrDt25Y8vgwSKd+IOAiKf9a9jKwiOAJQRTpy8rfiPA5f9lgwAOzIJS0SmXyO9OtKFurBVSojSf15cCC7/YWziWFNATzgE3x022vsVn0JXk1LgFipRA4lQoMoP1KROUEzSua4Qrr+HSeDNK7HQyI3CSJBqoY4igUmpi7jDhrgZkplFhRw5Rt8Nb8T14RkR5epsb; 25:l135TBt7Wkza2Hlr0zL9XG6FcWaMjhO1ItUy6AVfrJRvLsNFNlS5XCB9glXda1H1H7WOLRn28m4OBFAluCzZYBM2xR4GtxgEtaTssj0W2xeu3vam+KHRNoOEImk+9FsAWoqlFC0/0l3jqBZAfg+kppeItdTnPqCs3UUm3CVyTvMW/pq0rxwSy49p2nKH43KGHtaxeJk79npRjcN5tJftIfEH4Ci3b5HNk6Y0LDYCMsrdi1MoKSAT0ej7T+W1YwPyRILPVMbfYLVpCvWTJNfJgh+j7c6S4OvaTIeNsfjGyWN/4J79DCFeNFaEvFhqZE3V0MmK9d0oGmZaDyrWeAkfYQ==; 31:BH2CGv36GPSCKT9h3gyxNLqU/Da09X+cZXrBgzSjRP9yBzyYsy3SN1+RSj0i1cmYZJjnpyISTmQt8Q8t83PoTwx6N/rg6vMXesmbVFylo3vpQDmTO6P1K9GGHPLjxG9wNdrK54APxFV3PgC79GBF8aWHRg664GLlw6wzGGmaQdeMjLz8l5tw2EFuAK4pXWwT0YcvJoWNa3/NvTIP+ZqDmpMnLDu1C+DaIWqeEkjekUc= X-MS-TrafficTypeDiagnostic: VI1PR04MB3006: X-Microsoft-Exchange-Diagnostics: 1; VI1PR04MB3006; 20:gCinsAuBNLdamFDkpMFuCrAW8hUsY7RCrUA6sq6f+RbWDHADS8/x9QMeaqgclWPJYUJGukL/Cbxq/3eY2FRZDmJNdZBpBRmg8eF/yuuCy7irmlHNIQVeQeWqzxdVkdMhvUNyONzylk2Z/S2CwyS3EPXobmsFvVr+aOaU21D/DkBvGYZQcpzN3BjSd0PtwRujKY97Fm6LBUtwgzym1yoXw9xvxOZg6l6hD9ApbsuTQgJMOoc9CUfvb0jisnnw2rAXKMJbKRuNMdn+cBQMgEgo0zM0DvxlDa/XP2NGJFdv4dxIQM1eL9e+rugt60pBOkRc97337YVDPQtoEuWPoYCgDcqnD7jvHV3AHSsQa9qJSRFU02iBDNsIpGV3w8BOH6EAijPwbdfbNPBi6oDTgZ3IOuWOODS6vWpl9LlVLMTEcTNmrskVHvAetWG9w5ctIj0GFOvjg7Pzi7aaFo410XsVFXOsRwFmmP7rPLmx5zXavNHd4+bs8NkWmRuA33OLAWku; 4:DoEFPaysDye9qvDArTJqfrlsU3qnk146/bvFNPsxmtRiWbY3l/GYJUacFgO3nVw7rLzAaRtq4rOIdKzcV2lNMrdplWj1bXjdUEViSi18RBXfoDSfSlf5KS8sFBKSJ8XCkHOiOUorWmmSNxcV/+vaILcAfEMQD4Zvz/m9Xv/voQsdLyeqavg6+DMcRIFlosDjF/BQO+HunmVrT4CPiBxvHd7vSJRYFhoXd08mzQMK9arwxnk90/gB+hyPJZmvcc3sESMqUDc9vrkBw8RDy04kvd6WJ+mlou9lSnLrZe+5ePH2099ZIgi2oWiBxt2nDz+r X-Microsoft-Antispam-PRVS: X-Exchange-Antispam-Report-Test: UriScan:(185117386973197); X-MS-Exchange-SenderADCheck: 1 X-Exchange-Antispam-Report-CFA-Test: BCL:0; PCL:0; RULEID:(8211001083)(6040522)(2401047)(8121501046)(5005006)(3002001)(93006095)(93001095)(3231254)(944501410)(52105095)(10201501046)(6055026)(149027)(150027)(6041310)(20161123558120)(20161123560045)(201703131423095)(201702281528075)(20161123555045)(201703061421075)(201703061406153)(20161123562045)(20161123564045)(6072148)(201708071742011)(7699016); SRVR:VI1PR04MB3006; BCL:0; PCL:0; RULEID:; SRVR:VI1PR04MB3006; X-Forefront-PRVS: 06860EDC7B X-Forefront-Antispam-Report: SFV:NSPM; SFS:(10009020)(366004)(39380400002)(396003)(39860400002)(376002)(346002)(199004)(189003)(36756003)(97736004)(6636002)(6666003)(68736007)(86362001)(8676002)(44832011)(8936002)(81166006)(81156014)(47776003)(11346002)(956004)(2616005)(476003)(446003)(25786009)(486006)(48376002)(106356001)(105586002)(186003)(50466002)(16526019)(2906002)(6512007)(53936002)(1076002)(66066001)(26005)(51416003)(478600001)(305945005)(50226002)(6486002)(5660300001)(6116002)(76176011)(3846002)(16586007)(52116002)(6506007)(4326008)(316002)(7736002)(386003); DIR:OUT; SFP:1101; SCL:1; SRVR:VI1PR04MB3006; H:linux-u7w5.ap.freescale.net.net; FPR:; SPF:None; LANG:en; PTR:InfoNoRecords; A:1; MX:1; Received-SPF: None (protection.outlook.com: nxp.com does not designate permitted sender hosts) X-Microsoft-Exchange-Diagnostics: =?us-ascii?Q?1; VI1PR04MB3006; 23:8J/ZqHGmYh1gYkXjD5rJ6MlsG0fGTKhWJDVHvW0G3?= WUAmhNm4q20R+gvStiUHU78pZo0QlS3qDM8G1KPMdQ0gbmXkKrRvmDmcDIy/8AbgQkZySAktFHDdERJCoUhT0FKUA3D2pJEJThQpVo/IDiXIDlxiu9Tmyur743OSUAdOIxXK5RznAXjmrHJaTEXBhg8KWfEN5HKBZH25rmQsJIeICIddEL5X9DKUktGO57Jhpea45A5eizmDJBz6aSuEXFLySUZ/8FZ4oBHB1k4fMW3XQFKIirHu8G6VuL5Tj+SR08ybKsCvVMarOxrGE7oAnmc2LywLMCalpUjQwtbIsaAXdlfoNqOMmy8Xj87omQM/7GJ4q670QyrGiAnoU1BVo6wFo7Ju9LOKDpZUaaQPn5eiXfnf04jYd4AeQgnie3tOUnlAtez1ZilgBPdhUEV7WhC6ueBWapw/yqWBYoSTOBFEcqyxB0hteMF70UmQN9bbAtqEXaAeoho3HdwEDRMEEni5YxmwNYipPTqDSV8GYb6UI10RlXeCLZ4D7w2pJzM44DlixYXiljU1aepRRn/7lvjpQ/hO9pZ7xVGuAsr5VGqmTLeHAirMGtHOQI2lYJIj7gEifQF/EZhgcY5NiO00a7tsS8Nw/EtAyUFgIoT1syUNsc+whDguskZTqoZj7K9RCTpCVTL12tjhnwAF6fZWJfuo9WyTrIDuHalmVi4Yt9DktYxDmX2QTxGk6ideAQ2KAPFYTOBvGvoPKmD0La+wsa+JL8d18tGwWxwNWakUuKTDsr9VaiXLYJl0TBgmzxPsSHkM6Cv3EfZY0c1aeX7ExgNwo2McbICYykiw1q1i9NwFhKaGSZks0/VESWNheCOoHnG5HEECTIpooCbB2J8OCgW1fb1J0cgtiPTqu8cu276rV/cyP9dIZxUB3My/GNZMIaWsE/hMyrDb3yQpkXSWqPpEtcwtgW/m5fZbZTJ1NbptNfoH3+ddJAkpw2FzxXNXx7/1JqwWiv6chwbu/tE4dRDq5C+WMh9xFCKBdeBb0fk63Xyh5bsM0Jl0rCexHP47JsTsL6Oxf5BULUlHStJ17wJw+Fjhl7HBOgzPi0d4yl6i0cBKLXOB+WfDNDjgSqSod5rT2rJcCEhb37jTnhcEGNqKk88YdCNntS87CsvyzECmdbbqI7NH3vnyEd7lk11oKlElqDyElXq8yPA5KxHAJGll76LmYwudOcU/cEXgemRPQ== X-Microsoft-Antispam-Message-Info: 7cN/wHuA4JR26NvzjdV176SBcU3KplKUTZvszICV19PT3+KWoqjj73vZ0Y1HlC8KOMLlP/GOGsJDDxBjBST+BaCzMT7CgyM/NoWqgFJ42tBGo5TDTqU3rJh6zhkzZC9zLOaJRcTeuqFFu7fXLdTKrLSdOoXrrEG0mifKb4ZQ8mFQTlnsdAe6FaZbGQ3abmTg X-Microsoft-Exchange-Diagnostics: 1; VI1PR04MB3006; 6:496Er4A/ReQml3+nzFg2Sb9ziNfko2QsVF19Evn54tyYKBGqD9iic71429UsEu9HCCg8RMWxkfCfgcAi8JN4sX1JM0Kd0E2LrVMwO4SGkzzOZBwFg7Jyb5ORYkB4tbZ0Dh+Bk5kyyaKSPQMzvxHwjENVoFih3S9xVfVKPQn1vs72aUJRpwiilr2ozRF6yVVO/hqkNZxqkxBcrRGvNQ4ejfHox7LXrNHlziEKUudU4DtvGFz4jDVpD84F5tlhPRq5ma2lH2WiCjdI423DWQzoXrD4dH1oO/Kq2dzraE4tyL3RY7zCQ7ITu1wDB3iLRfeyPW8BPZ4qzo42EGSJr2SYFijh2t6Fl+4qh9z5uamN6NVO7L0oVBgitLkpTfFcshn4Ae84nZZMgJiP7jGI53n6m/clFR5Mng32KbliAxVOPC7mqaxlHrrogung/1VuW8ayzhQWc5D8xNQES8wj4PtlWw==; 5:QvMs1P32cAZNLUvXrQXrOiFajhC3OzgeCST0Q7dpUn8m/F/+oRf0JCSFehb9Tun0/WS2iYzb/iVMdhPjdggRG2QjCfVr5KrPCBCI8BXmFypFdZjFCi4vJgIS+fiIzuuBXXhk6F+HizBTpaUHYoaWrFigMrF8mPlxkqET2ukd+04=; 24:sdO3r6+ap9Dwhwa16ecRF3LyrINCndHy8TxDckZ7RrrSfCHQqtx8zzwvkxVuYiNgrnT3T+od3ZjgbjOZaaU9KnnwMxDiUeCYwWfH99HVxI4= SpamDiagnosticOutput: 1:99 SpamDiagnosticMetadata: NSPM X-Microsoft-Exchange-Diagnostics: 1; VI1PR04MB3006; 7:jc3frjR5XRh8DulS4m8l5F4p4PJVYdC27s1FwhtUt5KqDxuXLjHvg39ArNEPwii4qirHqc1ehTx63a0bpWO/rjMHbWBUiuvvSAL43rUt4pq/s14AJP8gtbSi8kjHnTu1+tp7JJ9HqpOAXNJTX/dQwnYuu3Fr1mMkLCfrL7IIwY6gdr18K4Hv6n2lWtOp5bCZsv+EXnSav1Oiq3+C5CsFLL6IsiYKSzQhMepbaOFXiqD4r98b5ZqdInBSM0/USSOx X-MS-Office365-Filtering-Correlation-Id: 2abf3e80-0f6c-4443-82c0-08d5c495c1e9 X-OriginatorOrg: nxp.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 28 May 2018 12:23:00.5895 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: 2abf3e80-0f6c-4443-82c0-08d5c495c1e9 X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 686ea1d3-bc2b-4c6f-a92c-d99c5c301635 X-MS-Exchange-Transport-CrossTenantHeadersStamped: VI1PR04MB3006 Cc: u-boot@lists.denx.de Subject: [U-Boot] [PATCH 30/41] gpio: mxc_gpio: add support for i.MX8 X-BeenThere: u-boot@lists.denx.de X-Mailman-Version: 2.1.18 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" Add i.MX8 support, there are 8 GPIO banks. Signed-off-by: Peng Fan --- arch/arm/include/asm/arch-imx8/gpio.h | 22 ++++++++++++++++++++++ drivers/gpio/mxc_gpio.c | 30 +++++++++++++++++++++--------- 2 files changed, 43 insertions(+), 9 deletions(-) create mode 100644 arch/arm/include/asm/arch-imx8/gpio.h diff --git a/arch/arm/include/asm/arch-imx8/gpio.h b/arch/arm/include/asm/arch-imx8/gpio.h new file mode 100644 index 0000000000..a342e6004d --- /dev/null +++ b/arch/arm/include/asm/arch-imx8/gpio.h @@ -0,0 +1,22 @@ +/* + * Copyright 2018 NXP + * + * SPDX-License-Identifier: GPL-2.0+ + */ + +#ifndef __ASM_ARCH_IMX8_GPIO_H +#define __ASM_ARCH_IMX8_GPIO_H + +#if !(defined(__KERNEL_STRICT_NAMES) || defined(__ASSEMBLY__)) +/* GPIO registers */ +struct gpio_regs { + u32 gpio_dr; /* data */ + u32 gpio_dir; /* direction */ + u32 gpio_psr; /* pad satus */ +}; +#endif + +/* IMX8 the GPIO index is from 0 not 1 */ +#define IMX_GPIO_NR(port, index) (((port) * 32)+((index) & 31)) + +#endif /* __ASM_ARCH_IMX8_GPIO_H */ diff --git a/drivers/gpio/mxc_gpio.c b/drivers/gpio/mxc_gpio.c index d8e72ada19..dc1b4fb4a6 100644 --- a/drivers/gpio/mxc_gpio.c +++ b/drivers/gpio/mxc_gpio.c @@ -40,21 +40,27 @@ static unsigned long gpio_ports[] = { [2] = GPIO3_BASE_ADDR, #if defined(CONFIG_MX25) || defined(CONFIG_MX27) || defined(CONFIG_MX51) || \ defined(CONFIG_MX53) || defined(CONFIG_MX6) || \ - defined(CONFIG_MX7) || defined(CONFIG_MX8M) + defined(CONFIG_MX7) || defined(CONFIG_MX8M) || \ + defined(CONFIG_IMX8) [3] = GPIO4_BASE_ADDR, #endif #if defined(CONFIG_MX27) || defined(CONFIG_MX53) || defined(CONFIG_MX6) || \ - defined(CONFIG_MX7) || defined(CONFIG_MX8M) + defined(CONFIG_MX7) || defined(CONFIG_MX8M) || \ + defined(CONFIG_IMX8) [4] = GPIO5_BASE_ADDR, #if !(defined(CONFIG_MX6UL) || defined(CONFIG_MX6ULL) || defined(CONFIG_MX8M)) [5] = GPIO6_BASE_ADDR, #endif #endif -#if defined(CONFIG_MX53) || defined(CONFIG_MX6) || defined(CONFIG_MX7) +#if defined(CONFIG_MX53) || defined(CONFIG_MX6) || defined(CONFIG_MX7) || \ + defined(CONFIG_IMX8) #if !(defined(CONFIG_MX6UL) || defined(CONFIG_MX6ULL)) [6] = GPIO7_BASE_ADDR, #endif #endif +#if defined(CONFIG_IMX8) + [7] = GPIO8_BASE_ADDR, +#endif }; static int mxc_gpio_direction(unsigned int gpio, @@ -347,19 +353,22 @@ static const struct mxc_gpio_plat mxc_plat[] = { { 2, (struct gpio_regs *)GPIO3_BASE_ADDR }, #if defined(CONFIG_MX25) || defined(CONFIG_MX27) || defined(CONFIG_MX51) || \ defined(CONFIG_MX53) || defined(CONFIG_MX6) || \ - defined(CONFIG_MX8M) + defined(CONFIG_MX8M) || defined(CONFIG_IMX8) { 3, (struct gpio_regs *)GPIO4_BASE_ADDR }, #endif #if defined(CONFIG_MX27) || defined(CONFIG_MX53) || defined(CONFIG_MX6) || \ - defined(CONFIG_MX8M) + defined(CONFIG_MX8M) || defined(CONFIG_IMX8) { 4, (struct gpio_regs *)GPIO5_BASE_ADDR }, #ifndef CONFIG_MX8M { 5, (struct gpio_regs *)GPIO6_BASE_ADDR }, #endif #endif -#if defined(CONFIG_MX53) || defined(CONFIG_MX6) +#if defined(CONFIG_MX53) || defined(CONFIG_MX6) || defined(CONFIG_IMX8) { 6, (struct gpio_regs *)GPIO7_BASE_ADDR }, #endif +#if defined(CONFIG_IMX8) + { 7, (struct gpio_regs *)GPIO8_BASE_ADDR }, +#endif }; U_BOOT_DEVICES(mxc_gpios) = { @@ -368,19 +377,22 @@ U_BOOT_DEVICES(mxc_gpios) = { { "gpio_mxc", &mxc_plat[2] }, #if defined(CONFIG_MX25) || defined(CONFIG_MX27) || defined(CONFIG_MX51) || \ defined(CONFIG_MX53) || defined(CONFIG_MX6) || \ - defined(CONFIG_MX8M) + defined(CONFIG_MX8M) || defined(CONFIG_IMX8) { "gpio_mxc", &mxc_plat[3] }, #endif #if defined(CONFIG_MX27) || defined(CONFIG_MX53) || defined(CONFIG_MX6) || \ - defined(CONFIG_MX8M) + defined(CONFIG_MX8M) || defined(CONFIG_IMX8) { "gpio_mxc", &mxc_plat[4] }, #ifndef CONFIG_MX8M { "gpio_mxc", &mxc_plat[5] }, #endif #endif -#if defined(CONFIG_MX53) || defined(CONFIG_MX6) +#if defined(CONFIG_MX53) || defined(CONFIG_MX6) || defined(CONFIG_IMX8) { "gpio_mxc", &mxc_plat[6] }, #endif +#if defined(CONFIG_IMX8) + { "gpio_mxc", &mxc_plat[7] }, +#endif }; #endif #endif From patchwork Mon May 28 12:25:16 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Peng Fan X-Patchwork-Id: 921524 X-Patchwork-Delegate: sbabic@denx.de Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Authentication-Results: ozlabs.org; spf=none (mailfrom) smtp.mailfrom=lists.denx.de (client-ip=81.169.180.215; helo=lists.denx.de; envelope-from=u-boot-bounces@lists.denx.de; receiver=) Authentication-Results: ozlabs.org; dmarc=fail (p=none dis=none) header.from=nxp.com Authentication-Results: ozlabs.org; dkim=fail reason="signature verification failed" (1024-bit key; unprotected) header.d=nxp.com header.i=@nxp.com header.b="ePb00Hl1"; dkim-atps=neutral Received: from lists.denx.de (dione.denx.de [81.169.180.215]) by ozlabs.org (Postfix) with ESMTP id 40vc8q1Y90z9s0q for ; Mon, 28 May 2018 22:48:11 +1000 (AEST) Received: by lists.denx.de (Postfix, from userid 105) id E2612C21E29; Mon, 28 May 2018 12:34:46 +0000 (UTC) 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=BAD_ENC_HEADER, RCVD_IN_DNSWL_BLOCKED, SPF_HELO_PASS, T_DKIM_INVALID autolearn=unavailable autolearn_force=no version=3.4.0 Received: from lists.denx.de (localhost [IPv6:::1]) by lists.denx.de (Postfix) with ESMTP id AA669C21DD3; Mon, 28 May 2018 12:31:51 +0000 (UTC) Received: by lists.denx.de (Postfix, from userid 105) id C1752C21D72; Mon, 28 May 2018 12:23:13 +0000 (UTC) Received: from EUR03-DB5-obe.outbound.protection.outlook.com (mail-eopbgr40062.outbound.protection.outlook.com [40.107.4.62]) by lists.denx.de (Postfix) with ESMTPS id 1563CC21E1A for ; Mon, 28 May 2018 12:23:07 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=nxp.com; s=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=MMKUF07CfhGvPWalXOJjALAz5BU5GSwkq5jfR2QOCL8=; b=ePb00Hl1sjpcgsFbanB+u1aYzkb2gVP1j0y0ibyY4mAaI+vcOdGYy7ZRexRwi/yxiur6kbb32OqDKiF50sEUTIEX69ThU3jeF4MX6eVED37DTRaOBBYdPojhFFghvO3TLy9ys+Bv3XLvzLeRdAXOkwnYd/de9D0Wou2q/nG0CoE= Authentication-Results: spf=none (sender IP is ) smtp.mailfrom=peng.fan@nxp.com; Received: from linux-u7w5.ap.freescale.net.net (92.121.68.129) by VI1PR04MB3006.eurprd04.prod.outlook.com (2603:10a6:802:9::12) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384_P256) id 15.20.797.11; Mon, 28 May 2018 12:23:03 +0000 From: Peng Fan To: sbabic@denx.de, fabio.estevam@nxp.com Date: Mon, 28 May 2018 20:25:16 +0800 Message-Id: <20180528122526.20597-32-peng.fan@nxp.com> X-Mailer: git-send-email 2.14.1 In-Reply-To: <20180528122526.20597-1-peng.fan@nxp.com> References: <20180528122526.20597-1-peng.fan@nxp.com> MIME-Version: 1.0 X-Originating-IP: [92.121.68.129] X-ClientProxiedBy: HK2PR02CA0175.apcprd02.prod.outlook.com (2603:1096:201:21::11) To VI1PR04MB3006.eurprd04.prod.outlook.com (2603:10a6:802:9::12) X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-HT: Tenant X-Microsoft-Antispam: UriScan:; BCL:0; PCL:0; RULEID:(7020095)(4652020)(5600026)(48565401081)(4534165)(4627221)(201703031133081)(201702281549075)(2017052603328)(7153060)(7193020); SRVR:VI1PR04MB3006; X-Microsoft-Exchange-Diagnostics: 1; VI1PR04MB3006; 3:cW+BWCobo/iTAcOqa/6GYED4FY6KXM7kLiDH5DTXCdxj+N9GCKSZbKht8DSA3OvGxpC6VpIxzoQ30Pinb5owz37YEErt4kOSWDbVDkYYNSiy6IRwwEZx5WVRY58TFsLcLpwgW9ASt+Nq+7PB7WvEc2UxsU9G6McjFWKkvfZ5TftoNFmZMR4sZjBSSsduUi++axTnB5b90T2Z7nKHQPo3e3QOLyshmFgVVhUeXLVkiOlK9Bk4RQWQRgr2t/r1VexK; 25:Vio3F7aDrJEREw3wfb5Q1xQrur/ddxwlOxz0I4jTRKdrpx04f/FaM0ieTuH7zynXagRQYVeasvzGOIjmQYejsKvOFYiA5TM9o4D4C3g/YNBumCY1fWD0ARmbyGsWVD9N2H2SofnKd7v9so0C49hNM3mWT86y9ZKcvlUpmSItTkk1STddTkTiFSiYtHl5WYFsYCmTiwEt1IDcgZy3IUWW/j23Zlnmn6yGlwZWuCQ9IP/qFXQkN/6ryIaLqBPIRdZlW8BPjmj+fFWgkk3JJFpkPIh53NBeaVjtW93TuNAng/uysMUjdm98frEPCjftDlgncCzU7FufZj9sbl6G2+fyXg==; 31:1fvcZO73PSZ7Zl5lnhWu9XA940rZeEU1EJmerTYblBYEFb3OcvlugsSUAWudPPD3e3OBVau3ZJ6lA+H+PuRfDTQbflHfq/F/v2MqGKz5Y9CNFPE6LmzAb72HERniNeUZtEQabNNd2QJXLNji8H3aomSy1K+ux6w7O4Jrwfy4zIhDMLaTbh7YFZr9iCZGSS2Gvu8JcykowHUnYy2nYHb7Z0Ut3RWj4Zj0ov+iL9h7iqM= X-MS-TrafficTypeDiagnostic: VI1PR04MB3006: X-Microsoft-Exchange-Diagnostics: 1; VI1PR04MB3006; 20:MUzxUcHuVRLJmIzICiZq7O9YMglP+evZkvzr2U/sdVBE5SCUOjM3o//zClKQfcdLfZeagFjB4w/rnbLb8JrCT42Z4w2P39Balm1+kqhkPZJydsR21BDPXrORGDoHENMRJikKb8J+0RmtxZ6GA2X37PhyqL+p2uWR6o165D+Q9FulDRN3S6ERoLsqxiYo5ngaaoCFHduUNXOXmOylUZp98/4I6xK/1H+KYm9qAgtPxNLr0wooyjtrmY54Uj+ix0erNWA/srYpdUrLZoV89fc3Wrz5iSxRNjatN46m5eePT1dBCVRAOGffohxrh3pXqpY7T8G4TmmC0mDjQ+ad52TqDYPBSJQ+G8I5YLaULk7EFK6KzS76lnhF7aly/fXM+/kC2lBjf+yvNLfyVXy9gShWu/DZfn4Xjobj4r3Y28ujAJ6NRLZGM7fgGaqyk4ntAmTGYOugtBvgkTmQbx+ymaz2w5vGB+aPn4JReCiuSDQy9MwJ6CGHlZi34yvYqUZ6Pc/s; 4:dBYSau5TbxMYXeFWGkDbfNP0Ym5z/+2iTWEodmaBmYCXpthl7/DgUpTRnMyPGdY7K/CBS0XhlV3YAImSAdn3G6CRcBU/Eecm4f6Id144VU6F94mVu+dREYa+/d+iYL/ANw3GwNiKx1BjDOA2FGZ+iNXuTk8wZ3qFcosVf6Qsv2PQDp568QKtrbINou85Avo7xZonm0m+ycYQdkoikeKGYuQGSg45SDVNATnhYNyZL6FUmdodiJNdOHB+JJDjhWlBEB32eol2OZvGQaaOfI7XstzPGLwpnZRYUonJI9TBoIlEONoOD1ViRK7a64Yu6ib7 X-Microsoft-Antispam-PRVS: X-Exchange-Antispam-Report-Test: UriScan:(185117386973197); X-MS-Exchange-SenderADCheck: 1 X-Exchange-Antispam-Report-CFA-Test: BCL:0; PCL:0; RULEID:(8211001083)(6040522)(2401047)(8121501046)(5005006)(3002001)(93006095)(93001095)(3231254)(944501410)(52105095)(10201501046)(6055026)(149027)(150027)(6041310)(20161123558120)(20161123560045)(201703131423095)(201702281528075)(20161123555045)(201703061421075)(201703061406153)(20161123562045)(20161123564045)(6072148)(201708071742011)(7699016); SRVR:VI1PR04MB3006; BCL:0; PCL:0; RULEID:; SRVR:VI1PR04MB3006; X-Forefront-PRVS: 06860EDC7B X-Forefront-Antispam-Report: SFV:NSPM; SFS:(10009020)(366004)(39380400002)(396003)(39860400002)(376002)(346002)(199004)(189003)(36756003)(97736004)(6636002)(6666003)(68736007)(86362001)(8676002)(44832011)(8936002)(575784001)(81166006)(81156014)(47776003)(11346002)(956004)(2616005)(476003)(446003)(25786009)(486006)(48376002)(106356001)(105586002)(186003)(50466002)(16526019)(2906002)(6512007)(53936002)(1076002)(66066001)(26005)(51416003)(478600001)(305945005)(54906003)(50226002)(6486002)(5660300001)(6116002)(76176011)(3846002)(16586007)(52116002)(6506007)(4326008)(316002)(7736002)(386003); DIR:OUT; SFP:1101; SCL:1; SRVR:VI1PR04MB3006; H:linux-u7w5.ap.freescale.net.net; FPR:; SPF:None; LANG:en; PTR:InfoNoRecords; A:1; MX:1; Received-SPF: None (protection.outlook.com: nxp.com does not designate permitted sender hosts) X-Microsoft-Exchange-Diagnostics: =?us-ascii?Q?1; VI1PR04MB3006; 23:ii8RXT2CIDPVAnnxVFGo9PVd6Z4/KxOwXIj88bSdZ?= KFwJmFTss+CTx3FCuv+BAtWu2s0LteacrruVLdvscyr0Uygf3UAVtERDHxeuTokcpcSiTdBTQWcdHaHtSZLPT3MGV+7ayGaoTnFnetaGpBVKTwQv2YPxuawKeSdlmrxEMNQMYwarwixsUwFy0yMZsZSIOEIkvLj/RTdE/mbi1o00bs6SUWLERCrjQZ2Y6czds/6mQeg1enRPtIFPvclT1mGFWBqFrFVyz2eJAdebn/R7u+WXxGvBx7khV7RgKTsEdgtYxfXUC1PTIJuH27UwHg23YpchVRXcWGRijnjUtTCnJ4/YizXnJUA0zWeFPOy6G/w/Gp3FqdgmwQeBherillNRmC/C3bD+slGAMOf/O2A6VH9p/ASQu/R9PUJZ7GepHNXPJFmA/D5AE5iWjRCct0m7OvoAMqySyX5jpsIxUw0KcFU1w6o7VOsdTwmg0XAX6Y34f7Ik0DS6Y7SNq0ly9HoUiMaMwemLQSMu44IZ8RVnnn4zYLHaAooudqVhbcwnRxqWcsWxKAvM/bhUR0sYCe6k/81d8ZJPOiOHp83kQRZIbt5980fPRTKpDTiudOOTOoMb8KoAmvZSd7FpCl8B8K3zAs0+ak5E9qCZd7RnAOr31JJjjhutydqIe6haGQftctkgF2ZInSLkCJ4IDss8ztp0MQEpaVhUW+b1/j8eWvpJA5sDfKtP4hMjdjluJ6ZAIIO8IZ+C2sqg02cgZ1KmqJyzzrpchI4WX+hztSNc8cOSCylu88YiJx59SB8AmmfzP6k1HlavhGxbP8p250dsks8afQ/2yLeDMddP3eBNpqOm51XBmvv1LrccwQhy6lLvWyIWU161+zCxrsH3VdSav3d0L8nKQgIbm+PWJIkXeGcXdWGnMB7d4EtuZ4US1nytE5gKo+iBUwEOPTuEztaniL6F8j1G8txPNtHQSaFUaA+GKmRiMgVASUvl0r3LntlV3p/QbeCtK91bhnfZ3USjtBlZ5IE+hrZiAUHyq6p9HxKHV1AM0KmffhIMx4NgwVUh+hc1M17y/2Lvh5qfzQX+uUDsZHpYaiAyz+3+D/KQ/IEi6zrNoqsEaT3cfUSdTAlypGCJ9JH70R1es8gTI+rUZLmRksAxAvqZ6TTlcf6XvikxLHy30FfG0oOCJJko07z4Zb1O2YCDWHYQaHgcfUfKHXQCmGsFOZiXWjl8RYQS/MaqpsXbkaGh0yqV9Pc+UwrRjtuaoo1dxjO5b3WMxRj12t2 X-Microsoft-Antispam-Message-Info: cP2zumTfYt87eLiWh04/Z0I2MI0eJha/NUbjGNt/rw03a0luWvkD8gmPjifBa04FjxD6eHcTD9ilvb5SozBns+HRPPBV3jXP7fBqS9ksuLOUhSBvDwGv/TSCeZF+00uuu+7T9zson/6Ck6VzcumS5XQiBJMufCyvNyzBd4LsnAvlSgfnXeB6xxxcjOIYCnfQ X-Microsoft-Exchange-Diagnostics: 1; VI1PR04MB3006; 6:elybvmsZCG86lD/L3de0rJbU1VbKyaKcc3lPEXEdLyfdXN5kWdwHf44zZJo58l60V+24vzm9BWMPISg0a0112IFPQhqz/yATEA8MU2rFjRCu2QuwzPpPsK8V4MmMx++KEQ4IhY/bnOPTSWC2+Uij14YDG7WoK4Yfe5FoIBNCoFZf+ktpE7Al3KvuQ39QMpEeKRKrZADXNqN7pUaH4AMNWHXLaKIvv5MegemfmwR3DcXjd2aKnr92Xy3cKpt8ofYQ2eE/D92yfSnQDf3MRT9E5BCKDaeuAjUndjrM/7W2ixQXMcotBA9LiQKnaY1UXheeIowjo2pwbnJERMhQwGNmGSCJPlGV19sPuZlBFE33GfE2JsX4QzC2fMqAgt4zr0aWiUt++LacPxI0SO+olNUpakaxH7ZmikGiwfVEKj9boGOEisVS/TUfSjhvRRw4N/LjukXBHnbCdGPodr3DFgsR1Q==; 5:saiiVvZQtLj/Qkb2RUWzF8MlVTPfnshx9483gl7UsQwAXhISJUEHAh6+JZhULyCrMTSA9PgWTc1PRK1bMfMp31ieIleexfXPvpOnD0P+oAnvSE3xBXqWbrTJErUsCiepeEzotyIM3Ai9ZHQ0TTLddvLc0a3hwcYHTsax+Hdtmtg=; 24:OSeYF6XHu0ELsyi3s7juLU1Y0GYum6+Hiem/sP5PwWi96y8nkdgOtHNtyDoJmRMyHZDEfbu/miJEt57QbESKqUjJNHnj7YBDtZ9hFgA83W4= SpamDiagnosticOutput: 1:99 SpamDiagnosticMetadata: NSPM X-Microsoft-Exchange-Diagnostics: 1; VI1PR04MB3006; 7:6vKFCAXqv6ZzdZasQZth4GczvjWKOIkrsxVQCUdtei75m5y934rLKNJu+Gisevs83TfrCSeIq1lrKB9gfZvgnqmJz2ux6NYFdTsxoKtJNqeq9DY9jyRXjst4K9gEAHY9AAUpcKWgYOfd4vwsr2xPgNpn0vuaUUV+J+2hvrdUKvIgA+AgIH+XQ+GwDAnIjiqnbtSMmf2x5cULBJO0fzLlZd0NApkWTo8l1ZWr0XYdmfNM0akbULEsFkGoynjkNbOE X-MS-Office365-Filtering-Correlation-Id: a5a9cd73-4207-4a66-f9a8-08d5c495c3a4 X-OriginatorOrg: nxp.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 28 May 2018 12:23:03.1676 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: a5a9cd73-4207-4a66-f9a8-08d5c495c3a4 X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 686ea1d3-bc2b-4c6f-a92c-d99c5c301635 X-MS-Exchange-Transport-CrossTenantHeadersStamped: VI1PR04MB3006 Cc: u-boot@lists.denx.de Subject: [U-Boot] [PATCH 31/41] pinctrl: Add pinctrl driver for i.MX8 X-BeenThere: u-boot@lists.denx.de X-Mailman-Version: 2.1.18 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" Add pinctrl driver for i.MX8. The pads configuration is controlled by SCU, so need to ask SCU to configure pads through scfw API. Add pinctrl-scu to invoke sc_pad_set to configue pads. Add a new flag IMX8_USE_SCU to differentiate i.MX8 from other platforms which could directly configure pads from Acore side. Add CONFIG_PINCTRL_IMX8 as the built gate. Signed-off-by: Ye Li Signed-off-by: Peng Fan --- drivers/pinctrl/nxp/Kconfig | 18 ++++ drivers/pinctrl/nxp/Makefile | 2 + drivers/pinctrl/nxp/pinctrl-imx.c | 209 ++++++++++++++++++++----------------- drivers/pinctrl/nxp/pinctrl-imx.h | 16 +++ drivers/pinctrl/nxp/pinctrl-imx8.c | 42 ++++++++ drivers/pinctrl/nxp/pinctrl-scu.c | 72 +++++++++++++ 6 files changed, 266 insertions(+), 93 deletions(-) create mode 100644 drivers/pinctrl/nxp/pinctrl-imx8.c create mode 100644 drivers/pinctrl/nxp/pinctrl-scu.c diff --git a/drivers/pinctrl/nxp/Kconfig b/drivers/pinctrl/nxp/Kconfig index b668359a0b..449ad47ebc 100644 --- a/drivers/pinctrl/nxp/Kconfig +++ b/drivers/pinctrl/nxp/Kconfig @@ -1,6 +1,9 @@ config PINCTRL_IMX bool +config PINCTRL_IMX_SCU + bool + config PINCTRL_IMX5 bool "IMX5 pinctrl driver" depends on ARCH_MX5 && PINCTRL_FULL @@ -56,3 +59,18 @@ config PINCTRL_IMX7ULP is different from the linux one, this is a simple implementation, only parses the 'fsl,pins' property and configure related registers. + +config PINCTRL_IMX8 + bool "IMX8 pinctrl driver" + depends on ARCH_IMX8 && PINCTRL_FULL + select DEVRES + select PINCTRL_IMX + select PINCTRL_IMX_SCU + help + Say Y here to enable the imx8 pinctrl driver + + This provides a simple pinctrl driver for i.MX8 SoC familiy. + This feature depends on device tree configuration. This driver + is different from the linux one, this is a simple implementation, + only parses the 'fsl,pins' property and configure related + registers. diff --git a/drivers/pinctrl/nxp/Makefile b/drivers/pinctrl/nxp/Makefile index c763948376..310b3b3a2e 100644 --- a/drivers/pinctrl/nxp/Makefile +++ b/drivers/pinctrl/nxp/Makefile @@ -3,3 +3,5 @@ obj-$(CONFIG_PINCTRL_IMX5) += pinctrl-imx5.o obj-$(CONFIG_PINCTRL_IMX6) += pinctrl-imx6.o obj-$(CONFIG_PINCTRL_IMX7) += pinctrl-imx7.o obj-$(CONFIG_PINCTRL_IMX7ULP) += pinctrl-imx7ulp.o +obj-$(CONFIG_PINCTRL_IMX_SCU) += pinctrl-scu.o +obj-$(CONFIG_PINCTRL_IMX8) += pinctrl-imx8.o diff --git a/drivers/pinctrl/nxp/pinctrl-imx.c b/drivers/pinctrl/nxp/pinctrl-imx.c index 36e1e8983c..04ea82aba5 100644 --- a/drivers/pinctrl/nxp/pinctrl-imx.c +++ b/drivers/pinctrl/nxp/pinctrl-imx.c @@ -28,7 +28,9 @@ static int imx_pinctrl_set_state(struct udevice *dev, struct udevice *config) dev_dbg(dev, "%s: %s\n", __func__, config->name); - if (info->flags & SHARE_MUX_CONF_REG) + if (info->flags & IMX8_USE_SCU) + pin_size = SHARE_IMX8_PIN_SIZE; + else if (info->flags & SHARE_MUX_CONF_REG) pin_size = SHARE_FSL_PIN_SIZE; else pin_size = FSL_PIN_SIZE; @@ -58,112 +60,127 @@ static int imx_pinctrl_set_state(struct udevice *dev, struct udevice *config) npins = size / pin_size; - /* - * Refer to linux documentation for details: - * Documentation/devicetree/bindings/pinctrl/fsl,imx-pinctrl.txt - */ - for (i = 0; i < npins; i++) { - mux_reg = pin_data[j++]; - - if (!(info->flags & ZERO_OFFSET_VALID) && !mux_reg) - mux_reg = -1; - - if (info->flags & SHARE_MUX_CONF_REG) { - conf_reg = mux_reg; - } else { - conf_reg = pin_data[j++]; - if (!(info->flags & ZERO_OFFSET_VALID) && !conf_reg) - conf_reg = -1; - } + if (info->flags & IMX8_USE_SCU) { + imx_pinctrl_scu_conf_pins(info, pin_data, npins); + } else { + /* + * Refer to linux documentation for details: + * Documentation/devicetree/bindings/pinctrl/fsl,imx-pinctrl.txt + */ + for (i = 0; i < npins; i++) { + mux_reg = pin_data[j++]; - if ((mux_reg == -1) || (conf_reg == -1)) { - dev_err(dev, "Error mux_reg or conf_reg\n"); - devm_kfree(dev, pin_data); - return -EINVAL; - } + if (!(info->flags & ZERO_OFFSET_VALID) && !mux_reg) + mux_reg = -1; - input_reg = pin_data[j++]; - mux_mode = pin_data[j++]; - input_val = pin_data[j++]; - config_val = pin_data[j++]; + if (info->flags & SHARE_MUX_CONF_REG) { + conf_reg = mux_reg; + } else { + conf_reg = pin_data[j++]; + if (!(info->flags & ZERO_OFFSET_VALID) && + !conf_reg) + conf_reg = -1; + } - dev_dbg(dev, "mux_reg 0x%x, conf_reg 0x%x, input_reg 0x%x, " - "mux_mode 0x%x, input_val 0x%x, config_val 0x%x\n", - mux_reg, conf_reg, input_reg, mux_mode, input_val, - config_val); + if ((mux_reg == -1) || (conf_reg == -1)) { + dev_err(dev, "Error mux_reg or conf_reg\n"); + devm_kfree(dev, pin_data); + return -EINVAL; + } - if (config_val & IMX_PAD_SION) - mux_mode |= IOMUXC_CONFIG_SION; + input_reg = pin_data[j++]; + mux_mode = pin_data[j++]; + input_val = pin_data[j++]; + config_val = pin_data[j++]; - config_val &= ~IMX_PAD_SION; + dev_dbg(dev, "mux_reg 0x%x, conf_reg 0x%x, " + "input_reg 0x%x, mux_mode 0x%x, " + "input_val 0x%x, config_val 0x%x\n", + mux_reg, conf_reg, input_reg, mux_mode, + input_val, config_val); - /* Set Mux */ - if (info->flags & SHARE_MUX_CONF_REG) { - clrsetbits_le32(info->base + mux_reg, info->mux_mask, - mux_mode << mux_shift); - } else { - writel(mux_mode, info->base + mux_reg); - } + if (config_val & IMX_PAD_SION) + mux_mode |= IOMUXC_CONFIG_SION; - dev_dbg(dev, "write mux: offset 0x%x val 0x%x\n", mux_reg, - mux_mode); + config_val &= ~IMX_PAD_SION; - /* - * Set select input - * - * If the select input value begins with 0xff, it's a quirky - * select input and the value should be interpreted as below. - * 31 23 15 7 0 - * | 0xff | shift | width | select | - * It's used to work around the problem that the select - * input for some pin is not implemented in the select - * input register but in some general purpose register. - * We encode the select input value, width and shift of - * the bit field into input_val cell of pin function ID - * in device tree, and then decode them here for setting - * up the select input bits in general purpose register. - */ + /* Set Mux */ + if (info->flags & SHARE_MUX_CONF_REG) { + clrsetbits_le32(info->base + mux_reg, + info->mux_mask, + mux_mode << mux_shift); + } else { + writel(mux_mode, info->base + mux_reg); + } + + dev_dbg(dev, "write mux: offset 0x%x val 0x%x\n", + mux_reg, mux_mode); - if (input_val >> 24 == 0xff) { - u32 val = input_val; - u8 select = val & 0xff; - u8 width = (val >> 8) & 0xff; - u8 shift = (val >> 16) & 0xff; - u32 mask = ((1 << width) - 1) << shift; - /* - * The input_reg[i] here is actually some IOMUXC general - * purpose register, not regular select input register. - */ - val = readl(info->base + input_reg); - val &= ~mask; - val |= select << shift; - writel(val, info->base + input_reg); - } else if (input_reg) { /* - * Regular select input register can never be at offset - * 0, and we only print register value for regular case. + * Set select input + * + * If the select input value begins with 0xff, + * it's a quirky select input and the value should + * be interpreted as below. + * 31 23 15 7 0 + * | 0xff | shift | width | select | + * It's used to work around the problem that the + * select input for some pin is not implemented in + * the select input register but in some general + * purpose register. We encode the select input + * value, width and shift of the bit field into + * input_val cell of pin function ID in device tree, + * and then decode them here for setting up the select + * input bits in general purpose register. */ - if (info->input_sel_base) - writel(input_val, info->input_sel_base + - input_reg); - else - writel(input_val, info->base + input_reg); - - dev_dbg(dev, "select_input: offset 0x%x val 0x%x\n", - input_reg, input_val); - } - /* Set config */ - if (!(config_val & IMX_NO_PAD_CTL)) { - if (info->flags & SHARE_MUX_CONF_REG) { - clrsetbits_le32(info->base + conf_reg, - ~info->mux_mask, config_val); - } else { - writel(config_val, info->base + conf_reg); + if (input_val >> 24 == 0xff) { + u32 val = input_val; + u8 select = val & 0xff; + u8 width = (val >> 8) & 0xff; + u8 shift = (val >> 16) & 0xff; + u32 mask = ((1 << width) - 1) << shift; + /* + * The input_reg[i] here is actually some + * IOMUXC general purpose register, not + * regular select input register. + */ + val = readl(info->base + input_reg); + val &= ~mask; + val |= select << shift; + writel(val, info->base + input_reg); + } else if (input_reg) { + /* + * Regular select input register can never be + * at offset 0, and we only print register + * value for regular case. + */ + if (info->input_sel_base) + writel(input_val, + info->input_sel_base + + input_reg); + else + writel(input_val, + info->base + input_reg); + + dev_dbg(dev, "select_input: offset 0x%x val " + "0x%x\n", input_reg, input_val); } - dev_dbg(dev, "write config: offset 0x%x val 0x%x\n", - conf_reg, config_val); + /* Set config */ + if (!(config_val & IMX_NO_PAD_CTL)) { + if (info->flags & SHARE_MUX_CONF_REG) { + clrsetbits_le32(info->base + conf_reg, + ~info->mux_mask, + config_val); + } else { + writel(config_val, + info->base + conf_reg); + } + + dev_dbg(dev, "write config: offset 0x%x val " + "0x%x\n", conf_reg, config_val); + } } } @@ -193,6 +210,9 @@ int imx_pinctrl_probe(struct udevice *dev, priv->dev = dev; priv->info = info; + if (info->flags & IMX8_USE_SCU) + return 0; + addr = fdtdec_get_addr_size(gd->fdt_blob, dev_of_offset(dev), "reg", &size); @@ -238,6 +258,9 @@ int imx_pinctrl_remove(struct udevice *dev) struct imx_pinctrl_priv *priv = dev_get_priv(dev); struct imx_pinctrl_soc_info *info = priv->info; + if (info->flags & IMX8_USE_SCU) + return 0; + if (info->input_sel_base) unmap_sysmem(info->input_sel_base); if (info->base) diff --git a/drivers/pinctrl/nxp/pinctrl-imx.h b/drivers/pinctrl/nxp/pinctrl-imx.h index b0032455b7..947975ee72 100644 --- a/drivers/pinctrl/nxp/pinctrl-imx.h +++ b/drivers/pinctrl/nxp/pinctrl-imx.h @@ -40,13 +40,29 @@ extern const struct pinctrl_ops imx_pinctrl_ops; #define FSL_PIN_SIZE 24 #define SHARE_FSL_PIN_SIZE 20 +/* Each pin on imx8qm/qxp consists of 2 u32 PIN_FUNC_ID and 1 u32 CONFIG */ +#define SHARE_IMX8_PIN_SIZE 12 + #define SHARE_MUX_CONF_REG 0x1 #define ZERO_OFFSET_VALID 0x2 #define CONFIG_IBE_OBE 0x4 +#define IMX8_USE_SCU 0x8 #define IOMUXC_CONFIG_SION (0x1 << 4) int imx_pinctrl_probe(struct udevice *dev, struct imx_pinctrl_soc_info *info); int imx_pinctrl_remove(struct udevice *dev); + +#ifdef CONFIG_PINCTRL_IMX_SCU +int imx_pinctrl_scu_conf_pins(struct imx_pinctrl_soc_info *info, + u32 *pin_data, int npins); +#else +static inline int imx_pinctrl_scu_conf_pins(struct imx_pinctrl_soc_info *info, + u32 *pin_data, int npins) +{ + return 0; +} +#endif + #endif /* __DRIVERS_PINCTRL_IMX_H */ diff --git a/drivers/pinctrl/nxp/pinctrl-imx8.c b/drivers/pinctrl/nxp/pinctrl-imx8.c new file mode 100644 index 0000000000..26bc160318 --- /dev/null +++ b/drivers/pinctrl/nxp/pinctrl-imx8.c @@ -0,0 +1,42 @@ +// SPDX-License-Identifier: GPL-2.0+ +/* + * Copyright 2018 NXP + */ + +#include +#include +#include + +#include "pinctrl-imx.h" + +DECLARE_GLOBAL_DATA_PTR; + +static struct imx_pinctrl_soc_info imx8_pinctrl_soc_info = { + .flags = IMX8_USE_SCU, +}; + +static int imx8_pinctrl_probe(struct udevice *dev) +{ + struct imx_pinctrl_soc_info *info = + (struct imx_pinctrl_soc_info *)dev_get_driver_data(dev); + + info->base = (void *)gd->arch.ipc_channel_handle; + + return imx_pinctrl_probe(dev, info); +} + +static const struct udevice_id imx8_pinctrl_match[] = { + { .compatible = "fsl,imx8qxp-iomuxc", .data = (ulong)&imx8_pinctrl_soc_info }, + { /* sentinel */ } +}; + +U_BOOT_DRIVER(imx8_pinctrl) = { + .name = "imx8_pinctrl", + .id = UCLASS_PINCTRL, + .of_match = of_match_ptr(imx8_pinctrl_match), + .probe = imx8_pinctrl_probe, + .remove = imx_pinctrl_remove, + .priv_auto_alloc_size = sizeof(struct imx_pinctrl_priv), + .ops = &imx_pinctrl_ops, + .flags = DM_FLAG_PRE_RELOC, +}; diff --git a/drivers/pinctrl/nxp/pinctrl-scu.c b/drivers/pinctrl/nxp/pinctrl-scu.c new file mode 100644 index 0000000000..ca9222feeb --- /dev/null +++ b/drivers/pinctrl/nxp/pinctrl-scu.c @@ -0,0 +1,72 @@ +// SPDX-License-Identifier: GPL-2.0+ +/* + * Copyright 2018 NXP + */ + +#include +#include +#include +#include +#include + +#include "pinctrl-imx.h" + +#define PADRING_IFMUX_EN_SHIFT 31 +#define PADRING_IFMUX_EN_MASK BIT(31) +#define PADRING_GP_EN_SHIFT 30 +#define PADRING_GP_EN_MASK BIT(30) +#define PADRING_IFMUX_SHIFT 27 +#define PADRING_IFMUX_MASK GENMASK(29, 27) + +static int imx_pinconf_scu_set(struct imx_pinctrl_soc_info *info, u32 pin_id, + u32 mux, u32 val) +{ + sc_err_t err; + sc_ipc_t ipchndl = (sc_ipc_t)info->base; + + /* + * Mux should be done in pmx set, but we do not have a good api + * to handle that in scfw, so config it in pad conf func + */ + + if (ipchndl == 0) { + puts("IPC handle not initialized!\n"); + return -EIO; + } + + val |= PADRING_IFMUX_EN_MASK; + val |= PADRING_GP_EN_MASK; + val |= (mux << PADRING_IFMUX_SHIFT) & PADRING_IFMUX_MASK; + + err = sc_pad_set(ipchndl, pin_id, val); + + if (err != SC_ERR_NONE) + return -EIO; + + return 0; +} + +int imx_pinctrl_scu_conf_pins(struct imx_pinctrl_soc_info *info, u32 *pin_data, + int npins) +{ + int pin_id, mux, config_val; + int i, j = 0; + int ret; + + /* + * Refer to linux documentation for details: + * Documentation/devicetree/bindings/pinctrl/fsl,imx-pinctrl.txt + */ + for (i = 0; i < npins; i++) { + pin_id = pin_data[j++]; + mux = pin_data[j++]; + config_val = pin_data[j++]; + + ret = imx_pinconf_scu_set(info, pin_id, mux, config_val); + if (ret) + printf("Set pin %d, mux %d, val %d, error\n", pin_id, + mux, config_val); + } + + return 0; +} From patchwork Mon May 28 12:25:17 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Peng Fan X-Patchwork-Id: 921517 X-Patchwork-Delegate: sbabic@denx.de Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Authentication-Results: ozlabs.org; spf=none (mailfrom) smtp.mailfrom=lists.denx.de (client-ip=81.169.180.215; helo=lists.denx.de; envelope-from=u-boot-bounces@lists.denx.de; receiver=) Authentication-Results: ozlabs.org; dmarc=fail (p=none dis=none) header.from=nxp.com Authentication-Results: ozlabs.org; dkim=fail reason="signature verification failed" (1024-bit key; unprotected) header.d=nxp.com header.i=@nxp.com header.b="blyBx3NV"; dkim-atps=neutral Received: from lists.denx.de (dione.denx.de [81.169.180.215]) by ozlabs.org (Postfix) with ESMTP id 40vc502W4rz9s0q for ; Mon, 28 May 2018 22:44:50 +1000 (AEST) Received: by lists.denx.de (Postfix, from userid 105) id A4F1DC21E34; Mon, 28 May 2018 12:30:14 +0000 (UTC) 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=BAD_ENC_HEADER, RCVD_IN_DNSWL_BLOCKED, SPF_HELO_PASS, T_DKIM_INVALID autolearn=unavailable autolearn_force=no version=3.4.0 Received: from lists.denx.de (localhost [IPv6:::1]) by lists.denx.de (Postfix) with ESMTP id DA3AEC21ECC; Mon, 28 May 2018 12:24:35 +0000 (UTC) Received: by lists.denx.de (Postfix, from userid 105) id 87E37C21BE5; Mon, 28 May 2018 12:23:17 +0000 (UTC) Received: from EUR03-DB5-obe.outbound.protection.outlook.com (mail-eopbgr40082.outbound.protection.outlook.com [40.107.4.82]) by lists.denx.de (Postfix) with ESMTPS id 89E72C21EA8 for ; Mon, 28 May 2018 12:23:10 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=nxp.com; s=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=cgqWQDd9+Os92h73K++w0xdDxEikYzdcoINnuarlDvg=; b=blyBx3NVZnUloefXEjc3XCM9kJKAqi5btijZZGwpdaJgNOMrYjzDD+0l5oGKx9vi08pSFnDEHMBmznvplabBEojsNnuwBMzGKFj5ie4H9PMv6YqAwa4p/ucB1zoXD/W1SsSfXKChoYc18xG6pIJzmTuRsdKiiNgKiV9HthTv+Iw= Authentication-Results: spf=none (sender IP is ) smtp.mailfrom=peng.fan@nxp.com; Received: from linux-u7w5.ap.freescale.net.net (92.121.68.129) by VI1PR04MB3006.eurprd04.prod.outlook.com (2603:10a6:802:9::12) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384_P256) id 15.20.797.11; Mon, 28 May 2018 12:23:06 +0000 From: Peng Fan To: sbabic@denx.de, fabio.estevam@nxp.com Date: Mon, 28 May 2018 20:25:17 +0800 Message-Id: <20180528122526.20597-33-peng.fan@nxp.com> X-Mailer: git-send-email 2.14.1 In-Reply-To: <20180528122526.20597-1-peng.fan@nxp.com> References: <20180528122526.20597-1-peng.fan@nxp.com> MIME-Version: 1.0 X-Originating-IP: [92.121.68.129] X-ClientProxiedBy: HK2PR02CA0175.apcprd02.prod.outlook.com (2603:1096:201:21::11) To VI1PR04MB3006.eurprd04.prod.outlook.com (2603:10a6:802:9::12) X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-HT: Tenant X-Microsoft-Antispam: UriScan:; BCL:0; PCL:0; RULEID:(7020095)(4652020)(5600026)(48565401081)(4534165)(4627221)(201703031133081)(201702281549075)(2017052603328)(7153060)(7193020); SRVR:VI1PR04MB3006; X-Microsoft-Exchange-Diagnostics: 1; VI1PR04MB3006; 3:QHk/ZAEsVQQ2O2kZUm1x50Rsj8ayQE8PrPXAfleQy6Mjp+v+ZHq1YxwsrvzKVB1hKTs8wo6aoOy6zplfr3GMj0svkKkmZibEHGwiBcmpGyj3I65+uC3Ev4tU+2nN5BPFhastF921bxflE2cbTa8YuCDu83PB3IUKWUUvkd+lGw+v1qfl24KHRq/GTCf/boztkQP0yCoq2bqvcAe9UMmM4jw+Lm/QW5ZNgh99X34cDNkOPO9Y4DOao+zRYp2BQicP; 25:Aq5hmsSCC1YlgM65FP0AbZKG5qMBJG0pzS0AI8LoEVOLQ97kMNep0Ng4Yv7P6e9xqjMhDN3OSQ1cWO1ypageObrbRwF6iSzDx7tAEClSm4eUbybuiq1OUrd80YCbHmCzwyi/mC0+nf+OP/SqYmRwkcABCIT/Tk/GJ8SPcVRTH6AgzOXJpB9O4EMt78TEoXOgvSJo/eiohoTGA4fCMk8jepgnf2MWYOr1Qx2icU0ZWSYRUMhJjeVO333q0fNm2yRYnpUEodjoVQaWDlyLAsUu8J5JeQyMJWQr9g//EqJx21xBcxk6WJ3V2sf8scysa85pFm03Es7IVICs+81yEmFGqg==; 31:V9yd1KbipJ7mGG5aT10g00Xh116Ik4brJI9zyciO2KZ0hHa5J1jei79dMJwFjxYQLi+pPcafKK6uSO153FTU6+wsZ8JC888kRZkxQVtjwk58A4j4V64W2x4Ah6GUpRf8nUieE76Ng+ZaYqVwiuCHXNfppK1pt0p3Kd9taijU61ahCDRIbN/4bdR/azqgFo7mHlecbNNJeQLiW/E4snujIFLnX4qivtCAk9JUjvr9qH8= X-MS-TrafficTypeDiagnostic: VI1PR04MB3006: X-Microsoft-Exchange-Diagnostics: 1; VI1PR04MB3006; 20:G+xGlGWMs5nZ1WeohwbP2BDXNMH2XCh1mCIw7oTJArv7faISJjw6DGTY40/2owuSb3o8Cy8rvvYCnVgAIfYbINsXZOStPInFUk5Q6OiK1CFtJ66zu53NnbKfah9Zy1p+rR4VZgnYWsqpTQHAv+v5yYWSlYKC2qhS+sTtAPWGCYSKeGyd+y2FFS+zF144h/uqyeEvIBTAdQZ+uz7k8Lj5pSz7BK5tp3Cfiv19zP6HBgU4M6ok97LOW5u3VVh6svV0T/kkjFaVDRND36OD/t2mG3qq1KzwnSd6DBUZ94cUekEZc2qn/9lf6v95TfWKgN1WWPZUwmgT/vuDkcvACin3/2Yv1tYu80TClMYzkfVtem3vyQ6Kg/PFWgy303X0eXfV2nhG1UW4B3GP7LMKNf0vsX12G3dBeVADrMdMn1Ui6PRiYeTeiu8doVPwe+u6+nOZt418TY4wiuSuMRt30am+c8NBoct7bf9l2qJhqSPcdvnPw42tY98EeAoOkfrBGPaa; 4:NxEK3D/eiIXZoVYVxMqAeMpH6IkZp3lu5ggusW7N+Y4WXLOL5tzHrviiwvL+J+rgC9Xz1ooBwcKcgCMb6rDgl3uXWA8YZE0aWhePJOiS9Pe2Q/zEjGFtmSu2OSNv0h67kF99QNDTn+ttWoflbGBvUixQrnhkshO/TG2ngrkCAkWeyYnuSpT8fsKfXzUVZELwzUfLqsgCeEny5+1dl+Za/zmxi7tgTe+Ej5BrmTXiM8NjXhYIfpQL8UEF+1mrakJd041t887IDpIIAjYXgwFLmR4AWpEa0PBEH/EO/WWyQipHoy/6XRcE7aQpLeHoWbuB X-Microsoft-Antispam-PRVS: X-Exchange-Antispam-Report-Test: UriScan:(185117386973197); X-MS-Exchange-SenderADCheck: 1 X-Exchange-Antispam-Report-CFA-Test: BCL:0; PCL:0; RULEID:(8211001083)(6040522)(2401047)(8121501046)(5005006)(3002001)(93006095)(93001095)(3231254)(944501410)(52105095)(10201501046)(6055026)(149027)(150027)(6041310)(20161123558120)(20161123560045)(201703131423095)(201702281528075)(20161123555045)(201703061421075)(201703061406153)(20161123562045)(20161123564045)(6072148)(201708071742011)(7699016); SRVR:VI1PR04MB3006; BCL:0; PCL:0; RULEID:; SRVR:VI1PR04MB3006; X-Forefront-PRVS: 06860EDC7B X-Forefront-Antispam-Report: SFV:NSPM; SFS:(10009020)(366004)(39380400002)(396003)(39860400002)(376002)(346002)(199004)(189003)(36756003)(97736004)(6636002)(6666003)(68736007)(86362001)(8676002)(44832011)(8936002)(81166006)(81156014)(47776003)(11346002)(956004)(2616005)(476003)(446003)(25786009)(486006)(48376002)(106356001)(105586002)(186003)(50466002)(16526019)(2906002)(6512007)(53936002)(1076002)(59450400001)(66066001)(26005)(51416003)(478600001)(305945005)(54906003)(50226002)(6486002)(5660300001)(6116002)(76176011)(3846002)(16586007)(52116002)(6506007)(4326008)(316002)(7736002)(386003); DIR:OUT; SFP:1101; SCL:1; SRVR:VI1PR04MB3006; H:linux-u7w5.ap.freescale.net.net; FPR:; SPF:None; LANG:en; PTR:InfoNoRecords; A:1; MX:1; Received-SPF: None (protection.outlook.com: nxp.com does not designate permitted sender hosts) X-Microsoft-Exchange-Diagnostics: =?us-ascii?Q?1; VI1PR04MB3006; 23:gWgDrlyyCkk/PVl8gRTomuN4E33XsPF8XKKtj+47L?= j5GJW26p0A6f6GuXGGU05f2iqLoAK/vjjYTwaqCCYV/FSjc/2wrmj9LU7coctVN4kicYYOKc9QnhD9FNALwpdoJsND0J4JJsyIQEPM5wg2gjWtutJrOmpcYlDvFbFV+7OFN4zGbM1pwHGF/4JMzRjYKPUzuz5H6FXj+3kVQqd0zBfyBnada/rPCllaCF6Ta4sq5CAj3OWGU2FLDcqTRjkcQtIoo9nvxTYHYcbrL29Lu/gMsgLlrqCsnCtYqILBv98QEdqES19MkDY1FZZfZilCTdKl6QCozEptcgdQzjkOM0ngSQb+19+hZnEES3Ec34ketQvewzXg35Fl2BnwK0kDirhmYzHnNgEgT4yKqJsQRWodfrPYKkZkAlFbrb1pBy2ed2kvFS9/yKXmBwfML+AyLv+LYrAtaHbon0Mz6A5R3i+lS8ztiO7F+v6GvK+cCj8ZT3ioMPvpzMRWIZGbTbifq0zQrjMhMFZt5jA4Zikek6164Uwpu7uhOUda/WjeuZKANu2WAK3A7Y9EHuXhRKZkzlEvXmf25gONpv9YaQB6EGQE73f/tmPQaEsCuCgQhpliLF0b9b8/uD4nXU9RayCeMnCbyN5FtjfjD2BQ4Y2h+LGr+f05ToE/DpCF70K4w7w0tOD84HQkewaWD3dN8fV0gKd4UpOgt2x411UXZR0a9Hkq17DwlLXOZHugAEP5YCWXPuBeYmyMSSRhtj9j2D8TGKIQq0tlLwQl+j2CgEUeiaDUDFcg13gUiwdAgqq3jW4mUfGI+1rZqqi2/bXNrJFfoT+h1u7bVQNtZcvM5gOQsBa2Q8gBITcbA9Y9wgsZZ+au2ljPysnxdWcP4HI0Lt9I0BAAuyneiQtKjR3T1uCc5IF7QVqVXHjbJPKb9T2TRy+dfpTnnSjNbZaUgHrBjItMZQKtdag83XdCKs7NJC4wtPCOs9O0X+35WUXiOBFx86PlfooK2UqApx32vJkwOka0uN2excTKt8uDXqyFx/3xLnZGIS/KwNUCrPSmsyAathSp57bH2eNpRqztaLk4KNipj3G4vXBkAUN+2MysDgIDf3qedyTqZMQ+RERam50ZH/LIOxFgr8G9iDnYzlAgmyNh5s29reKVeyt6/33sCY0RZkLfAgOIaQdldb3OHJUCThv68kCIWbXHStGf7/h2jLVvQeJhCeAEkHtOurwGwHqBDIqQBTcaB4/fzdNk4I0Njy1cNPBjC+E8FSI22kMlRUlrn X-Microsoft-Antispam-Message-Info: Y2479GBKtSWMMklv6CANFV+f3NfUQhX6E0YWfCpYl/2jcKPWX3HfRaflaoiOU4p0Noilo065Mt7d/900WhcMkXOgl2Cx9UJWjCq0P6TJ3XaFMvgW9qSeaKYA3iKU/0axKKB1C8E8L+VUAXef7QrW7sCuwNC04mD/s4S5BC59M3PYT+z3Um9YyyNu7P5ZhPow X-Microsoft-Exchange-Diagnostics: 1; VI1PR04MB3006; 6:YENZLTvinH5xp+LAnjIkVMgtXe7xgkyvxXHXKdbFv4jazYV3U5WG2WWhhoVBTQz2GVXn0tmvpxitA3vyCaYfyRKfHdpaz/oWsGalT3JC08ojN6drELOGuiJyX3RLqXagxY1WaIgPK6rVTKdHXolwIhvVu+EJWJHVbd5RiSmnz17Y3zqauMHzCgJMwgq681zbKI6TDNcUNJbbHRinSYYeQyN2GJW1taNEp/vdvT/1kO204dXmjebBqm4pmwJZsyY4owmR/NiaG3W92ZlTA4wl9es2M+i1McMCCHtzOqPMVs+m72rBASf4hQPwIKB/jR8c+3x2EOqzYP+nqFmDAJ4H8ozTDThdO0tfEZbtXIKkXcsjyb+uFjc7g6mBxoYGNUFMjRow17GE+2rnL4QvrfY0PuUrASedhRMFDU2NiCSmB7hRfjbjOyRDl3+S9gTa5HJxQ0yqO0qtcw51yVam61Dr7A==; 5:G/9YgXFEM5Bf8q79YclULg8HCoG/luZQpPy9qPqyP9+mrqrgevemnbdYNTk2+1d6mpOoDcpSTNp/LdLRkqq99uK9y89QELLazWt743L4HXHYlbApn5WR0w6QoBNJrOcAUEgZaxHunqd2P+NoBS+7tdsniSeHSyQdwNnKvJ6XwAo=; 24:QDNZMuFzojxVItiOcKOMS6toNsD6GmlqhKQIZPsfr4XZ8tjvBkBYTP0mBJwyAaiOllIP0UCteFWEUF8Y0OvPEyz1L2TqeQs0eNpwUpX4O1o= SpamDiagnosticOutput: 1:99 SpamDiagnosticMetadata: NSPM X-Microsoft-Exchange-Diagnostics: 1; VI1PR04MB3006; 7:l+fVz3K3ZWzA1R1ZMhCWPhIouTCM0vWilXyk4tvw0ccc/avOvJ1wae1FLJs87J5+g9o88sNmCCGs3lGFHH9BMzhpjqtgZqt+sUAVydscxWfBHgS3qojxmsMFiSppzqk5fFP3Bz6iW5f41qYzgBUXffCHJO5w3mpQPokolL82v450b+FdQS5LNT89E8my7SuAilRnB5ps1Hs0heXuc4L/qxU2E2MS+iCAx4W2KcpmsZ32EbkshAsD3PcCIgU5iH1P X-MS-Office365-Filtering-Correlation-Id: 8191bd5a-04bf-4e05-6c9a-08d5c495c5bd X-OriginatorOrg: nxp.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 28 May 2018 12:23:06.3552 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: 8191bd5a-04bf-4e05-6c9a-08d5c495c5bd X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 686ea1d3-bc2b-4c6f-a92c-d99c5c301635 X-MS-Exchange-Transport-CrossTenantHeadersStamped: VI1PR04MB3006 Cc: u-boot@lists.denx.de Subject: [U-Boot] [PATCH 32/41] power: Add power domain driver for i.MX8 X-BeenThere: u-boot@lists.denx.de X-Mailman-Version: 2.1.18 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" Add the power domain DM driver for i.MX8, that it depends on the DTB power domain trees to generate the power domain provider devices. Users needs add power domain trees with property "compatible = "nxp,imx8-pd";" When power on one PD device, the driver will power on its ancestor PD devices in power domain tree. When power off on PD device, the driver will check its child PD devices first, only all child PD devices are off, then power off the current PD device. Then the driver checks sibling PD devices. If sibling PD devices are off, then it will power off parent PD device. There is no counter maintained in this driver, but a state to hold current on/off state. So the request and free functions are empty. The power domain implementation in i.MX8 DTB set the "#power-domain-cells" to 0, so there is no ID binding with each PD device. We don't use "id" variable in struct power_domain. At same time, we have to set of_xlate to empty to bypass standard of_xlate in uclass driver. Signed-off-by: Ye Li Signed-off-by: Peng Fan Cc: Simon Glass --- arch/arm/include/asm/arch-imx8/power-domain.h | 15 ++ drivers/power/domain/Kconfig | 6 + drivers/power/domain/Makefile | 1 + drivers/power/domain/imx8-power-domain.c | 315 ++++++++++++++++++++++++++ 4 files changed, 337 insertions(+) create mode 100644 arch/arm/include/asm/arch-imx8/power-domain.h create mode 100644 drivers/power/domain/imx8-power-domain.c diff --git a/arch/arm/include/asm/arch-imx8/power-domain.h b/arch/arm/include/asm/arch-imx8/power-domain.h new file mode 100644 index 0000000000..1396008877 --- /dev/null +++ b/arch/arm/include/asm/arch-imx8/power-domain.h @@ -0,0 +1,15 @@ +/* SPDX-License-Identifier: GPL-2.0 */ +/* + * Copyright 2017 NXP + */ + +#ifndef _ASM_ARCH_IMX8_POWER_DOMAIN_H +#define _ASM_ARCH_IMX8_POWER_DOMAIN_H + +#include + +struct imx8_power_domain_platdata { + sc_rsrc_t resource_id; +}; + +#endif diff --git a/drivers/power/domain/Kconfig b/drivers/power/domain/Kconfig index 7cfa761498..2a72642a26 100644 --- a/drivers/power/domain/Kconfig +++ b/drivers/power/domain/Kconfig @@ -31,4 +31,10 @@ config TEGRA186_POWER_DOMAIN Enable support for manipulating Tegra's on-SoC power domains via IPC requests to the BPMP (Boot and Power Management Processor). +config IMX8_POWER_DOMAIN + bool "Enable i.MX8 power domain driver" + depends on ARCH_IMX8 + help + Enable support for manipulating NXP i.MX8 on-SoC power domains via IPC + requests to the SCU. endmenu diff --git a/drivers/power/domain/Makefile b/drivers/power/domain/Makefile index c7d7644402..c6ad7ff447 100644 --- a/drivers/power/domain/Makefile +++ b/drivers/power/domain/Makefile @@ -7,3 +7,4 @@ obj-$(CONFIG_BCM6328_POWER_DOMAIN) += bcm6328-power-domain.o obj-$(CONFIG_SANDBOX_POWER_DOMAIN) += sandbox-power-domain.o obj-$(CONFIG_SANDBOX_POWER_DOMAIN) += sandbox-power-domain-test.o obj-$(CONFIG_TEGRA186_POWER_DOMAIN) += tegra186-power-domain.o +obj-$(CONFIG_IMX8_POWER_DOMAIN) += imx8-power-domain.o diff --git a/drivers/power/domain/imx8-power-domain.c b/drivers/power/domain/imx8-power-domain.c new file mode 100644 index 0000000000..057119ca70 --- /dev/null +++ b/drivers/power/domain/imx8-power-domain.c @@ -0,0 +1,315 @@ +// SPDX-License-Identifier: GPL-2.0 +/* + * Copyright 2017 NXP + */ + +#include +#include +#include +#include +#include +#include +#include +#include + +DECLARE_GLOBAL_DATA_PTR; + +struct imx8_power_domain_priv { + bool state_on; +}; + +static int imx8_power_domain_request(struct power_domain *power_domain) +{ + debug("%s(power_domain=%p)\n", __func__, power_domain); + + return 0; +} + +static int imx8_power_domain_free(struct power_domain *power_domain) +{ + debug("%s(power_domain=%p)\n", __func__, power_domain); + + return 0; +} + +static int imx8_power_domain_on(struct power_domain *power_domain) +{ + struct udevice *dev = power_domain->dev; + struct imx8_power_domain_platdata *pdata; + struct imx8_power_domain_priv *ppriv; + sc_ipc_t ipchndl = gd->arch.ipc_channel_handle; + sc_err_t ret; + + struct power_domain parent_domain; + struct udevice *parent = dev_get_parent(dev); + + /* Need to power on parent node first */ + if (device_get_uclass_id(parent) == UCLASS_POWER_DOMAIN) { + parent_domain.dev = parent; + imx8_power_domain_on(&parent_domain); + } + + pdata = (struct imx8_power_domain_platdata *)dev_get_platdata(dev); + ppriv = (struct imx8_power_domain_priv *)dev_get_priv(dev); + + debug("%s(power_domain=%s) resource_id %d\n", __func__, dev->name, + pdata->resource_id); + + /* Already powered on */ + if (ppriv->state_on) + return 0; + + if (pdata->resource_id != SC_R_LAST) { + ret = sc_pm_set_resource_power_mode(ipchndl, + pdata->resource_id, + SC_PM_PW_MODE_ON); + if (ret) { + printf("Error: %s Power up failed! (error = %d)\n", + dev->name, ret); + return -EIO; + } + } + + ppriv->state_on = true; + debug("%s is powered on\n", dev->name); + + return 0; +} + +static int imx8_power_domain_off_node(struct power_domain *power_domain) +{ + struct udevice *dev = power_domain->dev; + struct udevice *child; + struct imx8_power_domain_priv *ppriv; + struct imx8_power_domain_priv *child_ppriv; + struct imx8_power_domain_platdata *pdata; + sc_ipc_t ipchndl = gd->arch.ipc_channel_handle; + sc_err_t ret; + + ppriv = (struct imx8_power_domain_priv *)dev_get_priv(dev); + pdata = (struct imx8_power_domain_platdata *)dev_get_platdata(dev); + + debug("%s, %s, state_on %d\n", __func__, dev->name, ppriv->state_on); + + /* Already powered off */ + if (!ppriv->state_on) + return 0; + + /* Check if all subnodes are off */ + for (device_find_first_child(dev, &child); + child; + device_find_next_child(&child)) { + if (device_active(child)) { + child_ppriv = (struct imx8_power_domain_priv *)dev_get_priv(child); + if (child_ppriv->state_on) + return -EPERM; + } + } + + if (pdata->resource_id != SC_R_LAST) { + if (!sc_rm_is_resource_owned(ipchndl, pdata->resource_id)) { + printf("%s not owned by curr partition\n", dev->name); + return 0; + } + ret = sc_pm_set_resource_power_mode(ipchndl, + pdata->resource_id, + SC_PM_PW_MODE_OFF); + if (ret) { + printf("Error: %s Power off failed! (error = %d)\n", + dev->name, ret); + return -EIO; + } + } + + ppriv->state_on = false; + debug("%s is powered off\n", dev->name); + + return 0; +} + +static int imx8_power_domain_off_parentnodes(struct power_domain *power_domain) +{ + struct udevice *dev = power_domain->dev; + struct udevice *parent = dev_get_parent(dev); + struct udevice *child; + struct imx8_power_domain_priv *ppriv; + struct imx8_power_domain_priv *child_ppriv; + struct imx8_power_domain_platdata *pdata; + sc_ipc_t ipchndl = gd->arch.ipc_channel_handle; + sc_err_t ret; + struct power_domain parent_pd; + + if (device_get_uclass_id(parent) == UCLASS_POWER_DOMAIN) { + pdata = + (struct imx8_power_domain_platdata *)dev_get_platdata(parent); + ppriv = (struct imx8_power_domain_priv *)dev_get_priv(parent); + + debug("%s, %s, state_on %d\n", __func__, parent->name, + ppriv->state_on); + + /* Already powered off */ + if (!ppriv->state_on) + return 0; + + /* + * Check if all sibling nodes are off. If yes, + * power off parent + */ + for (device_find_first_child(parent, &child); child; + device_find_next_child(&child)) { + if (device_active(child)) { + child_ppriv = (struct imx8_power_domain_priv *)dev_get_priv(child); + /* Find a power on sibling */ + if (child_ppriv->state_on) { + debug("sibling %s, state_on %d\n", + child->name, + child_ppriv->state_on); + return 0; + } + } + } + + /* power off parent */ + if (pdata->resource_id != SC_R_LAST) { + ret = sc_pm_set_resource_power_mode(ipchndl, + pdata->resource_id, + SC_PM_PW_MODE_OFF); + if (ret) { + printf("%s Power off failed! (error = %d)\n", + parent->name, ret); + return -EIO; + } + } + + ppriv->state_on = false; + debug("%s is powered off\n", parent->name); + + parent_pd.dev = parent; + imx8_power_domain_off_parentnodes(&parent_pd); + } + + return 0; +} + +static int imx8_power_domain_off(struct power_domain *power_domain) +{ + int ret; + + debug("%s(power_domain=%p)\n", __func__, power_domain); + + /* Turn off the node */ + ret = imx8_power_domain_off_node(power_domain); + if (ret) { + debug("Can't power off the node of dev %s, ret = %d\n", + power_domain->dev->name, ret); + return ret; + } + + /* Turn off parent nodes, if sibling nodes are all off */ + ret = imx8_power_domain_off_parentnodes(power_domain); + if (ret) { + printf("Failed to power off parent nodes of dev %s, ret = %d\n", + power_domain->dev->name, ret); + return ret; + } + + return 0; +} + +static int imx8_power_domain_of_xlate(struct power_domain *power_domain, + struct ofnode_phandle_args *args) +{ + debug("%s(power_domain=%p)\n", __func__, power_domain); + + /* Do nothing to the xlate, since we don't have args used */ + + return 0; +} + +static int imx8_power_domain_bind(struct udevice *dev) +{ + int offset; + const char *name; + int ret = 0; + + debug("%s(dev=%p)\n", __func__, dev); + + offset = dev_of_offset(dev); + for (offset = fdt_first_subnode(gd->fdt_blob, offset); offset > 0; + offset = fdt_next_subnode(gd->fdt_blob, offset)) { + /* Bind the subnode to this driver */ + name = fdt_get_name(gd->fdt_blob, offset, NULL); + + ret = device_bind_with_driver_data(dev, dev->driver, name, + dev->driver_data, + offset_to_ofnode(offset), + NULL); + + if (ret == -ENODEV) + printf("Driver '%s' refuses to bind\n", + dev->driver->name); + + if (ret) + printf("Error binding driver '%s': %d\n", + dev->driver->name, ret); + } + + return 0; +} + +static int imx8_power_domain_probe(struct udevice *dev) +{ + struct imx8_power_domain_priv *ppriv; + + debug("%s(dev=%s)\n", __func__, dev->name); + + ppriv = (struct imx8_power_domain_priv *)dev_get_priv(dev); + + /* Set default to power off */ + if (ppriv) + ppriv->state_on = false; + + return 0; +} + +static int imx8_power_domain_ofdata_to_platdata(struct udevice *dev) +{ + int reg; + struct imx8_power_domain_platdata *pdata = dev_get_platdata(dev); + + reg = fdtdec_get_int(gd->fdt_blob, dev_of_offset(dev), "reg", -1); + if (reg == -1) { + debug("%s: Invalid resource id %d\n", __func__, reg); + return -EINVAL; + } + pdata->resource_id = (sc_rsrc_t)reg; + + debug("%s resource_id %d\n", __func__, pdata->resource_id); + + return 0; +} + +static const struct udevice_id imx8_power_domain_ids[] = { + { .compatible = "nxp,imx8-pd" }, + { } +}; + +struct power_domain_ops imx8_power_domain_ops = { + .request = imx8_power_domain_request, + .free = imx8_power_domain_free, + .on = imx8_power_domain_on, + .off = imx8_power_domain_off, + .of_xlate = imx8_power_domain_of_xlate, +}; + +U_BOOT_DRIVER(imx8_power_domain) = { + .name = "imx8_power_domain", + .id = UCLASS_POWER_DOMAIN, + .of_match = imx8_power_domain_ids, + .bind = imx8_power_domain_bind, + .probe = imx8_power_domain_probe, + .ofdata_to_platdata = imx8_power_domain_ofdata_to_platdata, + .platdata_auto_alloc_size = sizeof(struct imx8_power_domain_platdata), + .priv_auto_alloc_size = sizeof(struct imx8_power_domain_priv), + .ops = &imx8_power_domain_ops, +}; From patchwork Mon May 28 12:25:18 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Peng Fan X-Patchwork-Id: 921504 X-Patchwork-Delegate: sbabic@denx.de Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Authentication-Results: ozlabs.org; spf=none (mailfrom) smtp.mailfrom=lists.denx.de (client-ip=81.169.180.215; helo=lists.denx.de; envelope-from=u-boot-bounces@lists.denx.de; receiver=) Authentication-Results: ozlabs.org; dmarc=fail (p=none dis=none) header.from=nxp.com Authentication-Results: ozlabs.org; dkim=fail reason="signature verification failed" (1024-bit key; unprotected) header.d=nxp.com header.i=@nxp.com header.b="tXgCFXVt"; dkim-atps=neutral Received: from lists.denx.de (dione.denx.de [81.169.180.215]) by ozlabs.org (Postfix) with ESMTP id 40vbwL5h7mz9s0q for ; Mon, 28 May 2018 22:37:22 +1000 (AEST) Received: by lists.denx.de (Postfix, from userid 105) id 57137C21DFB; Mon, 28 May 2018 12:30:44 +0000 (UTC) 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=BAD_ENC_HEADER, RCVD_IN_DNSWL_BLOCKED, SPF_HELO_PASS, T_DKIM_INVALID autolearn=unavailable autolearn_force=no version=3.4.0 Received: from lists.denx.de (localhost [IPv6:::1]) by lists.denx.de (Postfix) with ESMTP id 1F646C21E36; Mon, 28 May 2018 12:25:03 +0000 (UTC) Received: by lists.denx.de (Postfix, from userid 105) id 67F62C21E0B; Mon, 28 May 2018 12:23:18 +0000 (UTC) Received: from EUR03-DB5-obe.outbound.protection.outlook.com (mail-eopbgr40046.outbound.protection.outlook.com [40.107.4.46]) by lists.denx.de (Postfix) with ESMTPS id 97C01C21E16 for ; Mon, 28 May 2018 12:23:13 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=nxp.com; s=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=Kdp6jytAt8sO9UA0le68JngzBcmxI6m+FrX/8m/SA80=; b=tXgCFXVtnfU+Orxr9l4UAxECW7pp8/ZWMEJzINDKRazXTt9+OgWJF+dBBk11Fdh1S5mbwnC0Y66P1L78MVALXkgQX113KwLQ7L2sb7yWmZHsVyuM0u+Qpj0ESDoCVaQP5aUriQjEUIz6o4FN14Wht+z+P0xv/HTxS6KKTME+y6M= Authentication-Results: spf=none (sender IP is ) smtp.mailfrom=peng.fan@nxp.com; Received: from linux-u7w5.ap.freescale.net.net (92.121.68.129) by VI1PR04MB3006.eurprd04.prod.outlook.com (2603:10a6:802:9::12) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384_P256) id 15.20.797.11; Mon, 28 May 2018 12:23:09 +0000 From: Peng Fan To: sbabic@denx.de, fabio.estevam@nxp.com Date: Mon, 28 May 2018 20:25:18 +0800 Message-Id: <20180528122526.20597-34-peng.fan@nxp.com> X-Mailer: git-send-email 2.14.1 In-Reply-To: <20180528122526.20597-1-peng.fan@nxp.com> References: <20180528122526.20597-1-peng.fan@nxp.com> MIME-Version: 1.0 X-Originating-IP: [92.121.68.129] X-ClientProxiedBy: HK2PR02CA0175.apcprd02.prod.outlook.com (2603:1096:201:21::11) To VI1PR04MB3006.eurprd04.prod.outlook.com (2603:10a6:802:9::12) X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-HT: Tenant X-Microsoft-Antispam: UriScan:; BCL:0; PCL:0; RULEID:(7020095)(4652020)(5600026)(48565401081)(4534165)(4627221)(201703031133081)(201702281549075)(2017052603328)(7153060)(7193020); SRVR:VI1PR04MB3006; X-Microsoft-Exchange-Diagnostics: 1; VI1PR04MB3006; 3:cVYoUQlTFH/FEmqnnS9FCNIofmbX0Wu3uiZbYPwAoOM6Y/TbD0Ih5Z+DCBHGq7ZEQbkpmGTWqMFJXC3fyoRURYOE1hAXja58uXiAUSdMIpT8Kv1C+Nr7EGPZw5V1Juz6LC4T9A1h3cDF13p2xbRdaovKV2iB2woqqX4o8IjzXj+dApNgB/+x4ey5my+cBS7F14Rf87X0Vg+dF5Q/eoGbcjpkWCv4VDLjcdkgR3v9K/7NU25tmZMBwEynVLs1JLng; 25:Nc8mBfAsv93FJc1yteIPEV58s/rFpBX+wW4/t5SwLhnYmFca31n9UVPpuFgXw8h57YFj7K7I55PrW8c6cbKsh1tFeNuMrISdCjwfMR3v2T6YtnFd+ZDXCVIJmKWsVZ1bTlmMmPHCxnr1ZSdkEOLB38DKI8WG8NUXfurnA8dukmcL1FMt/TG2zQwv/RPjgMraQcBc+XlSMCQ7vX2h0WkUYn6C3ZDnNzoQlsvs1mFiWnQEAXSP4B+7nY9xG/1vyfgJWX8QoOY88VLOF8e8HKE3FVRzcuS1lp4c4P1fOrsaopyxzt9n8VXMpgG6kmUkcelO64OWERrR/FOC3lsmq3l83Q==; 31:eRnsT3Yddaij10HO2uQhc/H/cjjfTfw4eueo23LHqHzW0VeC0yDfr1k81DMFj3zDgOHt+EHHxVZepmo/Tjuh8AICgsoB9ihleVAcmjP+zGzZWSu8WbMJTvCIFqg2YvHscncEyDV8q3Ze6iHrfXYDCcVwl1z6eH6SJG7BYfi+jFfLM5nRFTWOiEPaYeJANyQLBiwNgp/qrzULkXC01YLpBirWBX0u9fTSTRbRhkrm3/A= X-MS-TrafficTypeDiagnostic: VI1PR04MB3006: X-Microsoft-Exchange-Diagnostics: 1; VI1PR04MB3006; 20:jRk2OfLHpSSapjMmvjIeqX3GYMxP8c9UalJZF3bg1dFYCd+SIjk0aINSVkSNne/zmHgQSMh354jyWBN+Sg7eFZE/MWIVBqfJr2RmmRH3X/A14jb/kAoEKgb/ceoJ7cZP7pqQ1/5d/WlP04ReSzrmWNWoRAscaiwwrg5SLqBYVP3I0NCQh2d2uHsB84+NY9bXzB6OClfXgqLLSdmmn8fxwiycJ0MFz/4DvOKfAyeUK/Z631pYEeiFrJMAOSgR4Aaukr8ifRhiy4SYT8pKjYtscc1yc5S0n8OevLAiHJScOf5GJMZmi55Em5zkKjz8z4d3SD6cRq52YOnKPTFqoNbTNaTNapWfdlirwAOx3NRmrJm3Pf+AKURGzQCCIL7RkpfzhNJwwpMLmE2Rku2qY65VDz4xaK6Vi6vjfciiDn1TzgvElnzPEPofJCtF8ntchraud2GlVrOWvP3wSGNywjnZ7icO22RQtmZawe3K24iX5dZTx9RtgYzzH5RLHPk2PyhL; 4:0SlHAMCMfIE8MhSvMUGamlMiUZtslUi2AMSz6MU68sJbiCJZwoJ9GDB7ve3cmMGIN+eNgThn2KUxFDxzywW+Nvvp1rsdSGd4QxfebSTPpb/V7UzcQ7BfttPSH7Cb65UeABArYcSymoYQow2ZJBBbbg8jvQQJFuFjvaPoXWi1xkrfXTfW4D9za6NxTxOy7uakdRtqGZfeioXNPN2opuX4zHVjq+4TDeg3VA5/VqUGKPUK2hvmLpcZ4ZjJRBH06OmVieeMwRAdTQCwOWF9iEOg4OtBb+tXi2s9dOCifeRUo45LNdjuegS0KoUhXSZCDn+B X-Microsoft-Antispam-PRVS: X-Exchange-Antispam-Report-Test: UriScan:(185117386973197); X-MS-Exchange-SenderADCheck: 1 X-Exchange-Antispam-Report-CFA-Test: BCL:0; PCL:0; RULEID:(8211001083)(6040522)(2401047)(8121501046)(5005006)(3002001)(93006095)(93001095)(3231254)(944501410)(52105095)(10201501046)(6055026)(149027)(150027)(6041310)(20161123558120)(20161123560045)(201703131423095)(201702281528075)(20161123555045)(201703061421075)(201703061406153)(20161123562045)(20161123564045)(6072148)(201708071742011)(7699016); SRVR:VI1PR04MB3006; BCL:0; PCL:0; RULEID:; SRVR:VI1PR04MB3006; X-Forefront-PRVS: 06860EDC7B X-Forefront-Antispam-Report: SFV:NSPM; SFS:(10009020)(366004)(39380400002)(396003)(39860400002)(376002)(346002)(199004)(189003)(36756003)(97736004)(6636002)(6666003)(68736007)(86362001)(8676002)(44832011)(8936002)(575784001)(81166006)(81156014)(47776003)(11346002)(956004)(2616005)(476003)(446003)(25786009)(486006)(48376002)(106356001)(105586002)(186003)(50466002)(16526019)(2906002)(6512007)(53936002)(1076002)(59450400001)(66066001)(26005)(51416003)(478600001)(305945005)(54906003)(50226002)(6486002)(5660300001)(6116002)(76176011)(3846002)(16586007)(52116002)(6506007)(4326008)(316002)(7736002)(386003); DIR:OUT; SFP:1101; SCL:1; SRVR:VI1PR04MB3006; H:linux-u7w5.ap.freescale.net.net; FPR:; SPF:None; LANG:en; PTR:InfoNoRecords; A:1; MX:1; Received-SPF: None (protection.outlook.com: nxp.com does not designate permitted sender hosts) X-Microsoft-Exchange-Diagnostics: =?us-ascii?Q?1; VI1PR04MB3006; 23:RY4nquhUF3ljVzrroUc2TgIXHOhUv5kw/SBLhUrtN?= ctJAB0pIgbggj9/MqcskqdzT3eGA36Vh6MMpnoO858/Qh3ppJFP3kOYu6mVX2TvqfyFOsU+vsYFHRTHtbfyAG+I73CgAj9fP2z36FWHQX9BQ6ck4V60C6iRgPomaATQCHejdTJRRL6Yp5o7ny35alvSdYJdomBw1R2AzrgE+rmboM3ZBoTiUXaMWEAVcMXpqzn91jueTemQYdofTbfPljUJV81Z+p5Z9QM7WyM+9dWrlEuFOjwIozok0V/ZOeLAbtXBGmFjTHcVxzE764nbHnf1mlh1MWUCdsGXlPXBXn0f43Hi6sghulkHDl92iB+Uu7TDtBRpwCPK8p0w6kO+Yyv6PjLUmCpQPEf42JfWBJSRd9ia4HRmv5bsgfl9xVrLZrNZKWmRfUxLGZ3DxnaRCDdmQBKTTd/CXGdLKcmYN2T25pAfxKJr6eiVhDoV83OKQRot+0/CFqPbSK+HO1kTw3W66UHBLDAm3o68y4jqtvnf4L2hFMuh+fPtWiqJ4zheG/G/cB4pO5RVXUbCjK4ZcYA997zxbPaxkDSp7Y2CL/CILmOmkNPMmb+QtU4Ud3lOYJ+Kl0bT9/zp5tT0y/q3EQub4f8B845gHfPohPNiXO/sUtL7OMr2zCNRQqIwyOGRqAYYdZEMGeylxOyWCmiAV2jCTjslTHi4ApFvM0+vH57SoocGfNDyvShb4na90FHy/7Uw/VRBe71zUpdX05hj3BQP4UwbWiVl1maMoplvu7JLxCNwwY7/h5Kb82ttB5WMKGBgxa2yytLHfbUvfX3iX/VavqZrhaYmk9TyT6rjkl/irlp/Obt66pSZtu2Mtht9gMBkTcNHMoaJOrzHCJaKBqrSdut79te4ER0x7h1DZHNKyQO1iuYzhitZp6+FrgVMEPY4GM4Dr7f2GhlokC9WogVDUyHwDxMuSwiJ/fF9DLUenh0va1nwec9dXBolB+bKdODusDi3Z2SvgbMzCfwtzoNM9bClbYJcGiFbg4KPqc1y5mb0RKVVu3lbbGXgse9yU0C9gECL1j4S28whaAHabdPti1D1ExESqwT2beVnzwYrQ8TyaKC1OAbY1YjJz2xijtEvqVyQALZOyOO4Zua8P9gw1x1kiiCPPX+7ptzV68VABvpjy+OrPXM5DfwLmM2herSSuvZ2uA7mSR7/fIAtsbznf2AoZnfQEhgCt2URFXYKg10CDIhQ7rU0vJY01G8zs0c4xoFfUYlhUoSy/pYjuyyTCEZBnKfrCsUfRqq2RC4d3A== X-Microsoft-Antispam-Message-Info: bobYQt/gbEYjJKJBOLUcnIax6u4jlnktKHqMkkd8tuqI+H1l+234iyb2rAPKehZGojlXLacGNWorGa0UEuP6FbYsTqmMdkgA8yG3TMxvec50H9JfbMUw4ijMPQB7W1O/4+yO8Ny+0kCcj8UEYb2yMBfeEk1qKeoGc09W0OmNzpgyG82fbRxP6x4qe5O5WKpO X-Microsoft-Exchange-Diagnostics: 1; VI1PR04MB3006; 6:aye6Ur1Gr2MpSKIT7lRCDevT20fd4oyxDOZACahjT/npRIy8nSKAGAHX7ic8UJSLrcMtKWHPN2RtJaZA5BpgtfHqsZK+8V5D1PFweuZZqCNOFBy9qMArjpZ0bLjk2SV6c9ZqV+pmUTT08t7BGVHdJgkABjHfFWQP8pyazmUkE7zl283qH5l/tF9k2+3rUk+KDFzfj8/blBNLRqhdngXE/zjdUspb9WS2FYKclJbaR1PRdwlyG6vs8KiUHGK1MgegSMq5KLrqfgPu0KqLQ/qUUEMf2v6VwPkZHQ/scolXdN8oi7B6pNqrJDKz+zoAf/YzFiN6xOB5+MXPGPiAUf4eSmx57ellrmUtn4JZqx12EfqPC2ZWvSnxzhTJuctdbllfYxFrY6cqFApB2o77zi3686PxMMX/rKZLmYt+h2Fv2ZRA/777O98LOfj6E1RQIpDZjSM501Anss80biKscR9SzA==; 5:NOwyCgcz1xCiCgI2Er/VppsPNB0zUczkYo8cOGQup2kJTqdBAHi3445qdBW01/TdMkydN6TE/rPTlh3BkD+03uEaOYgj/eLqAcbgK7lvJhqzdxFYmjsXNwc+d2avBw88/T9ujIvnM1uFMEUiL02bRG7C7dSmqx8/PnxxOMWeNFI=; 24:OGmIJ52B1gJXXCo0geHqE58iv4HBwm6kzd1j/374qsCmWo+P9K1Sxo+0mLAmK7+wf80eFNKvSHAlcBXx/Aunva1syji599KlHajXnc2rmrA= SpamDiagnosticOutput: 1:99 SpamDiagnosticMetadata: NSPM X-Microsoft-Exchange-Diagnostics: 1; VI1PR04MB3006; 7:wl/OEZLz9YKy4ESU9bUaL4CHtMTSg6pkW07Q52LSqHt6/VdDb07dMI1nhfNg7EMDLmUnd+ISA+jBeAS6P6pc9r8Dgl+xnEB+tQhVcfXX/nLhHQSAIs46eJ90507PJE+5KcT5daJ1n78xkyuVKQLVQR/gfj8YmgFG3He5vOmaKJNmcf6n1rJzx+ApEZn5+Ijc+KeSzUPFJl2vyBEv7Evl1XlsjzwJRNNSrcJMDa7uPijpCkn61qRD85Ra75P5afgz X-MS-Office365-Filtering-Correlation-Id: a8699046-5bb7-4338-df8c-08d5c495c7d5 X-OriginatorOrg: nxp.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 28 May 2018 12:23:09.8865 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: a8699046-5bb7-4338-df8c-08d5c495c7d5 X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 686ea1d3-bc2b-4c6f-a92c-d99c5c301635 X-MS-Exchange-Transport-CrossTenantHeadersStamped: VI1PR04MB3006 Cc: u-boot@lists.denx.de Subject: [U-Boot] [PATCH 33/41] power: Add PD device lookup interface to power domain uclass X-BeenThere: u-boot@lists.denx.de X-Mailman-Version: 2.1.18 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" Add power_domain_lookup_name interface to power domain uclass to find a power domain device by its DTB node name, not using its associated client device. Through this interface, we can operate the power domain devices directly. This is needed for non-DM drivers. Signed-off-by: Ye Li Signed-off-by: Peng Fan Cc: Simon Glass --- drivers/power/domain/power-domain-uclass.c | 42 ++++++++++++++++++++++++++++++ include/power-domain.h | 15 +++++++++++ 2 files changed, 57 insertions(+) diff --git a/drivers/power/domain/power-domain-uclass.c b/drivers/power/domain/power-domain-uclass.c index 9e9ec4f419..4e9bcbdfae 100644 --- a/drivers/power/domain/power-domain-uclass.c +++ b/drivers/power/domain/power-domain-uclass.c @@ -7,6 +7,8 @@ #include #include #include +#include +#include static inline struct power_domain_ops *power_domain_dev_ops(struct udevice *dev) { @@ -28,6 +30,46 @@ static int power_domain_of_xlate_default(struct power_domain *power_domain, return 0; } +int power_domain_lookup_name(const char *name, + struct power_domain *power_domain) +{ + struct udevice *dev; + struct power_domain_ops *ops; + int ret; + + debug("%s(power_domain=%p name=%s)\n", __func__, power_domain, name); + + ret = uclass_find_device_by_name(UCLASS_POWER_DOMAIN, name, &dev); + if (!ret) { + /* Probe the dev */ + device_probe(dev); + ops = power_domain_dev_ops(dev); + + power_domain->dev = dev; + if (ops->of_xlate) + ret = ops->of_xlate(power_domain, NULL); + else + ret = power_domain_of_xlate_default(power_domain, NULL); + if (ret) { + debug("of_xlate() failed: %d\n", ret); + return ret; + } + + ret = ops->request(power_domain); + if (ret) { + debug("ops->request() failed: %d\n", ret); + return ret; + } + + debug("%s ok: %s\n", __func__, dev->name); + + return 0; + } + + printf("%s fail: %s, ret = %d\n", __func__, name, ret); + return -EINVAL; +} + int power_domain_get(struct udevice *dev, struct power_domain *power_domain) { struct ofnode_phandle_args args; diff --git a/include/power-domain.h b/include/power-domain.h index aba8c0f65c..9060b174c0 100644 --- a/include/power-domain.h +++ b/include/power-domain.h @@ -74,6 +74,21 @@ struct power_domain { unsigned long id; }; +/** + * power_domain_lookup_name - Lookup the power domain device by name. + * + * This looks up and requests a provider power domain by using its + * device name. This skip the associated client device, but directly + * get the power domain device. + * + * @name: The power domain device's name. + * @power_domain A pointer to a power domain struct to initialize. + * @return 0 if OK, or a negative error code. + */ + +int power_domain_lookup_name(const char *name, + struct power_domain *power_domain); + /** * power_domain_get - Get/request the power domain for a device. * From patchwork Mon May 28 12:25:19 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Peng Fan X-Patchwork-Id: 921499 X-Patchwork-Delegate: sbabic@denx.de Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Authentication-Results: ozlabs.org; spf=none (mailfrom) smtp.mailfrom=lists.denx.de (client-ip=81.169.180.215; helo=lists.denx.de; envelope-from=u-boot-bounces@lists.denx.de; receiver=) Authentication-Results: ozlabs.org; dmarc=fail (p=none dis=none) header.from=nxp.com Authentication-Results: ozlabs.org; dkim=fail reason="signature verification failed" (1024-bit key; unprotected) header.d=nxp.com header.i=@nxp.com header.b="ByfR6/3h"; dkim-atps=neutral Received: from lists.denx.de (dione.denx.de [81.169.180.215]) by ozlabs.org (Postfix) with ESMTP id 40vbtT6pNwz9s0y for ; Mon, 28 May 2018 22:35:45 +1000 (AEST) Received: by lists.denx.de (Postfix, from userid 105) id A339CC21DDC; Mon, 28 May 2018 12:33:26 +0000 (UTC) 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=BAD_ENC_HEADER, RCVD_IN_DNSWL_BLOCKED, SPF_HELO_PASS, T_DKIM_INVALID autolearn=unavailable autolearn_force=no version=3.4.0 Received: from lists.denx.de (localhost [IPv6:::1]) by lists.denx.de (Postfix) with ESMTP id 73B17C21E42; Mon, 28 May 2018 12:28:01 +0000 (UTC) Received: by lists.denx.de (Postfix, from userid 105) id 64142C21E73; Mon, 28 May 2018 12:23:23 +0000 (UTC) Received: from EUR01-HE1-obe.outbound.protection.outlook.com (mail-he1eur01on0045.outbound.protection.outlook.com [104.47.0.45]) by lists.denx.de (Postfix) with ESMTPS id B05DFC21DED for ; Mon, 28 May 2018 12:23:16 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=nxp.com; s=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=GScfwSP8/XfHkkb7y0tLyr/TAOQoM+s4A+xyzm4w/u8=; b=ByfR6/3hg8vOV8EXtMI1moVd4V1ZG7J3B+vLLd3yAQIaggljy7EGD/YnVSDxZgyaTrHE7exuGAObTD7SAEZv8k5gCwgUukl8UHHT5u4kXF1GRNwH3Rn/xeORWTTOrLiDnmNibzLFtRNrxUfVn1SFVdkhQTLGrV4laViaTkfYHAc= Authentication-Results: spf=none (sender IP is ) smtp.mailfrom=peng.fan@nxp.com; Received: from linux-u7w5.ap.freescale.net.net (92.121.68.129) by VI1PR04MB3006.eurprd04.prod.outlook.com (2603:10a6:802:9::12) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384_P256) id 15.20.797.11; Mon, 28 May 2018 12:23:13 +0000 From: Peng Fan To: sbabic@denx.de, fabio.estevam@nxp.com Date: Mon, 28 May 2018 20:25:19 +0800 Message-Id: <20180528122526.20597-35-peng.fan@nxp.com> X-Mailer: git-send-email 2.14.1 In-Reply-To: <20180528122526.20597-1-peng.fan@nxp.com> References: <20180528122526.20597-1-peng.fan@nxp.com> MIME-Version: 1.0 X-Originating-IP: [92.121.68.129] X-ClientProxiedBy: HK2PR02CA0175.apcprd02.prod.outlook.com (2603:1096:201:21::11) To VI1PR04MB3006.eurprd04.prod.outlook.com (2603:10a6:802:9::12) X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-HT: Tenant X-Microsoft-Antispam: UriScan:; BCL:0; PCL:0; RULEID:(7020095)(4652020)(5600026)(48565401081)(4534165)(4627221)(201703031133081)(201702281549075)(2017052603328)(7153060)(7193020); SRVR:VI1PR04MB3006; X-Microsoft-Exchange-Diagnostics: 1; VI1PR04MB3006; 3:QG5e3GCn7iH07fteTwZVj8KdHQEKSkfLX3OoDzg52TXxQ8P4QHE8+bX2ZM6+HeE3dVzKh27VGIveMR4y+OOJ6VYOLqYIRucbi+wYMiTghwj5sCqRAsXtfhRFOxuPwUcLhFd9CXcHMb+oUc3g3U5sMbjYE0RKyhxxx/hjIHZmdM/kK/PvXCx1NtX6zs0rVf8bJ6go1eijRl5ASyNq7ucSk4AwjUJZ9ARY4bAoQllm99wM0+Ufux2DI+76VOirSDB1; 25:q0OjLxabUBvlsxWH53kZKzrwNnHimUzn3gbJx6q+8w6mbYNWvlm6qw+FSvJefFPse0vCf9pKnebFrUgIkZIorJIYbfmzjfzC/HBbMpXU8iCSQUt81gXUZOTa9FJpdsOpjy4JEeNWCC84x/OCoWkoIS2LX+LrRejMhxvu/jpSWmeGhFIPn26dGb+FI22jUG1wRqKK9XN11gPFMC+UbZ/5rC74VsE6NJHqvtKIqsXTx14kDfFf5pSXcaQZy3fgwJEXIGqhwDojFtVF4cB9wfNI9F6NdNSORVO4uDuUxoLOuhvr3DFILAjz7YIipL7o13aN0lbBtSmEi4B8GahYS1DByg==; 31:3NpAPri3LE6geEkg/bD9GR4MuPWk0G42NnLPHzK3EM+y7gj5NrMunAg23mWXdq6GcKav/UZCDqhwfdjjlwpfom+yyX6BjRUsfC//SK+ZXb4l1ah42/wjDH+zaF6w/yxtyetAbG6ZhVkscZcnyJFeaBge9wEXjyHQq1Yd5ja6uP13NYgEjfhIjnN0VEfR8TG7wC05HarftCKmVADNwoKmQ3o/33sNyc4g/ilKENEBxso= X-MS-TrafficTypeDiagnostic: VI1PR04MB3006: X-Microsoft-Exchange-Diagnostics: 1; VI1PR04MB3006; 20:zUXk9NCsf7AigIy+oDci/sTm2zukifXI8NybYU74smhPAnKxtkE0rfGHQ3OXD9l87yMi3ZajxEa8dZ7Xb06RKQSaW+8gWVkxBm1K4dQ+PS7STM9hjhkRFM+UJWhCI7pc4j/t3McTOzPBEVvR7h/EHmf6/muwBXeW+1uahTkrMBoJUHeGXi0NNllCHg4mPfxVH6RrMZEcrSCN+Jij5v4jS9jwpP9/yTGajg+129yqgOLwInRNsGgfWvRDQGK+HyW3p2IE609Q9EoT9AZoDJOkQAHzxQx4wXdxDYlHggNG9vX07BCUpD10CcaCvdp4CWSJltfJN0dEWOEEI8N+pjEGtYj00ZWFfOnV062BuS5dRB9k0ULQduob7+L/UZFwhJDvxYqIXfaXUXPCJDDUdH2752/Rzx44lBg+kpPKbRl+y1eMvMHx/mExc1brvGABOjFPbgcRwFOVgdNCRNNkIodTdlTlRHP/kw8Q85nRrTX3wL34uvaiROkXbcssD5fT5f32; 4:grts1yDhs1JszxyX0yU9ke3ZWqQGMyXX1LToTVX+EuovFKCp/A6eNd+anF4CqSFZOqoj1ofAfalkG5uVF1VhrZ5fRinWeUdDApmjTRuRXH2w7nx3LXgbMQPIVSvZu++4Xv1J4ToDp4uwdJX2mTnAkIcieGt4kbv7DjP5/gUL575ZSLtnSnFIqE6SgoLxxDlgZGiYebIaZ8VlwMH89qegbU/VHZwqU2SjPzPJmkgiM//qun9ivB0UmPC3ve8PdCIHwiWS2312Yes4VTCE2P5Cip7XcjlU+63pEFM471WOsJysBx4J7LWlY41DZRdbOCe3 X-Microsoft-Antispam-PRVS: X-Exchange-Antispam-Report-Test: UriScan:(185117386973197); X-MS-Exchange-SenderADCheck: 1 X-Exchange-Antispam-Report-CFA-Test: BCL:0; PCL:0; RULEID:(8211001083)(6040522)(2401047)(8121501046)(5005006)(3002001)(93006095)(93001095)(3231254)(944501410)(52105095)(10201501046)(6055026)(149027)(150027)(6041310)(20161123558120)(20161123560045)(201703131423095)(201702281528075)(20161123555045)(201703061421075)(201703061406153)(20161123562045)(20161123564045)(6072148)(201708071742011)(7699016); SRVR:VI1PR04MB3006; BCL:0; PCL:0; RULEID:; SRVR:VI1PR04MB3006; X-Forefront-PRVS: 06860EDC7B X-Forefront-Antispam-Report: SFV:NSPM; SFS:(10009020)(366004)(39380400002)(396003)(39860400002)(376002)(346002)(199004)(189003)(36756003)(97736004)(6636002)(68736007)(86362001)(8676002)(44832011)(8936002)(81166006)(81156014)(47776003)(11346002)(956004)(2616005)(476003)(446003)(25786009)(486006)(48376002)(106356001)(105586002)(186003)(50466002)(16526019)(2906002)(6512007)(53936002)(1076002)(59450400001)(66066001)(26005)(51416003)(478600001)(305945005)(54906003)(50226002)(6486002)(5660300001)(6116002)(76176011)(3846002)(16586007)(52116002)(6506007)(4326008)(316002)(7736002)(386003); DIR:OUT; SFP:1101; SCL:1; SRVR:VI1PR04MB3006; H:linux-u7w5.ap.freescale.net.net; FPR:; SPF:None; LANG:en; PTR:InfoNoRecords; A:1; MX:1; Received-SPF: None (protection.outlook.com: nxp.com does not designate permitted sender hosts) X-Microsoft-Exchange-Diagnostics: =?us-ascii?Q?1; VI1PR04MB3006; 23:39XrpVzRZMF7uPrQcgrkC9d8xQt1E6VryZpuoGNUB?= q5eXcKTYbr5ir1bsl72Tg51dxrE8F4r3fergwxdjM5j1KAg6gPkrK7iL2vq1d7Rb5wFHnIDxU61Ebqpa4wfKbzbYEyNU500CX7VbVR0p+2rO4FugVDo70xmAMr3gN9RycMovoPEpxX+sEqpAMg78ZB+E/2iS9pVxpDrb19ZYVq1ghELQnEw4nekWQy3Yz7fSUKGxfjch9+YdEXJ1JyM1HaXneOk9H+AXGTQOqrRXlVeiSh7QSherOQwe1l8r09iuXN/2pTa8qVw0SvJMpNcXgs7v696JUvvZdb4b6gmZXKvousmQKJMBPs9Tne0m53bNwFmjizWHz0NINs9qnD6UYUvPAEGzICuEs0qh16LV/ZPlv9fX1SzFg/xzLe9CnHn8ttbK8lYg1NKkF8wdaFSiyrt9AuglIVWKGsOWGenTNxzzmnu8qTE+yS29vcNJ88NIwRZK6Ie6YLwbvjfEl3rASAjVnJQwKeSVRx3NB8U6A4xw0AEH5Keg/H2Aankt7rF1SxxgHCmzryVHx+z849CuF8Nry1z/hjS7vM5850QspoSS7/Q9mbb4bJ5Sw6BBnad6RaFSPZgiqlcXKHHzAyMt1F0IyPhpGpAN4tF1FH2158T/RCsqcSsqIPfxuruNvN/oXhjj4RIS1izr+FRc9Vtg7h9AAYxlM6FWCCT9SYnRbhSjbbaV4iBlJAP2VAvjnlmcdIWp9HlHoWBSoFyZsXuO9LiexojJPAvRFHJKozXiB1qXZzc7JwftnZ1wArp1F89DcnUMAQqluGfOqLOATnMgqRTlFJh3pJJCwTx2C+p1Ei6jm5JxvQiAwcOnVgk3IDBTo/orMJvaqroRCJpgjLT7QyXgensCS9A9h2dvOd7Z4IeesfZm7AB+inx1TR3FMCrhaLgdOgHamspEsDPXKprrnYRJvAviAa/sHPl7r1ULn6es71qzfVo2LSIvxPHmTJ1LFAtnvC7cQCoOgvB6LQm0MqSdQ/IZ1NFjQ3WEUa8KjG/nldIrbY6dYp35+UThly9yL+MeE2lSWyzLVHeiw+A3zA3J8EAADs5cmMFhKrJNZiV2hHmyDz5Y2xt1ROoz6/bfERa1gpAYCp6ymnD7hglnDWutMA+RvkPsPZjbL45N9YNrrES5Q/o8FHDCo906kJCdRVgNpl3eFkc6T60N0o4I2P6ovtvvYkg4UQb4Lw8z7yhwFE+94ttHGDuxpgCygDnXQc= X-Microsoft-Antispam-Message-Info: 8sMhq9y6+wcQ9fJtqOjlTXJyVOSqSJdbw+iLXOkSlbLhgzpdABEj7ypEnQ99Anl9NbsyxVIBILqErF8sSb6RKszLH22m/pAKmWKNXkjycKkUhV+7LPmk29y3ckl/H2VFPFzGs5TmwMPiDTdWx2k51eFuJfOvKLPWA+wriAfHmsoV8QMeRy9imIouOgstsphm X-Microsoft-Exchange-Diagnostics: 1; VI1PR04MB3006; 6:Wg18UCCfGXDCKXw1txrtGxi8Im6H6/WUvH0w7LLDcPHTW2OJ0sOwN2bmOp+p+Kn7ZjSrOPFgji/Lxcpz0E7rFMSLAjo9aHApMQMXENhH7MHBzM/e5tnpHVN8+o514QQMNxpw0OHLzw8CwaQC0gHGN2TCGQTGZpCmFOxX1fC5N3vgQfJtQOOKdzli3yHGlcKOSe7pM9kBf7780xgMInYcXqsCi4+uuF9bgUNrTXGczcR6rqMut/HbPIPmIP6JyLZjm/UPikBhEpLuI+N6lgGXAjpgBhik+YyKTfYKpdYgJSSfTKT9Te6/auZMv4VveUaQVGJBCo15kQ6OvXDOfF85I8ROagJhT6gJBXrtRXC/DMo4ioB8xzMDx/X+77lmm45r0YgstfQXmoY8TGM5Fy+NOqmdvv3NAs0NptqZ+eIoKVnf6AYVrHlt7QxzjgPbTHqeI8UFY767Su0hARLekeEe0g==; 5:Ott7QFfmqlH3ml9qrIozo+Bci5IcnYew/TDGElMGW5GQBaCn6jaG0wHzetuKkxz+aw7VCMYSP9gwXGhxtsZr5hH/bA2AKlGK37jlaaJ4xIRo7JkgKL2KzpRMgG2nRUXZ/F8oUOYbcOoOBEQjhUSdUphMEx3SqK0XahCog5MyE2Y=; 24:jLVYNMbMlc3afjj4G7cpPm5a/g86YzfXuAgxandTeLkhttO0OcSdEy0QBG8VYI93Jswi+AKeritNvb7+6qP7WPVTO2BWDEEfN15eT/BYHtw= SpamDiagnosticOutput: 1:99 SpamDiagnosticMetadata: NSPM X-Microsoft-Exchange-Diagnostics: 1; VI1PR04MB3006; 7:WaOmSc/kdno/xcOYCPT5PVvIJqyB/l5jSOuHm8ku7pQBYvlZqA7vv+3PrMV4jFcmVpG7f9g/m11UneDZ6DqaAY6u201plfzH9tayADEp5W/XwroJujJkk58Y8eJqjwTuMBTeVmR8dFLs+evtW97uOeKW2h7/CRGIgdw6EJXKDNRqzRa8A1YhrqJJh4Zj7PSvOGj0FvtH90zuMf31mZh/88J0/Ln7tPUHAJFo5o2O0cJ1SlE6n3VZPwB4E+dbWmxC X-MS-Office365-Filtering-Correlation-Id: 4c6d674d-73d4-4d39-7d89-08d5c495c998 X-OriginatorOrg: nxp.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 28 May 2018 12:23:13.1521 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: 4c6d674d-73d4-4d39-7d89-08d5c495c998 X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 686ea1d3-bc2b-4c6f-a92c-d99c5c301635 X-MS-Exchange-Transport-CrossTenantHeadersStamped: VI1PR04MB3006 Cc: u-boot@lists.denx.de Subject: [U-Boot] [PATCH 34/41] power-domain: add dummy functions when CONFIG_POWER_DOMAIN not defined X-BeenThere: u-boot@lists.denx.de X-Mailman-Version: 2.1.18 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" Add dummy functions when CONFIG_POWER_DOMAIN not defined. Signed-off-by: Peng Fan Cc: Simon Glass Reviewed-by: Simon Glass --- include/power-domain.h | 37 +++++++++++++++++++++++++++++++++++++ 1 file changed, 37 insertions(+) diff --git a/include/power-domain.h b/include/power-domain.h index 9060b174c0..a990479d03 100644 --- a/include/power-domain.h +++ b/include/power-domain.h @@ -86,8 +86,16 @@ struct power_domain { * @return 0 if OK, or a negative error code. */ +#ifdef CONFIG_POWER_DOMAIN int power_domain_lookup_name(const char *name, struct power_domain *power_domain); +#else +static inline int power_domain_lookup_name(const char *name, + struct power_domain *power_domain) +{ + return -EINVAL; +} +#endif /** * power_domain_get - Get/request the power domain for a device. @@ -102,7 +110,15 @@ int power_domain_lookup_name(const char *name, * @power_domain A pointer to a power domain struct to initialize. * @return 0 if OK, or a negative error code. */ +#ifdef CONFIG_POWER_DOMAIN int power_domain_get(struct udevice *dev, struct power_domain *power_domain); +#else +static inline int power_domain_get(struct udevice *dev, + struct power_domain *power_domain) +{ + return -EINVAL; +} +#endif /** * power_domain_free - Free a previously requested power domain. @@ -111,7 +127,14 @@ int power_domain_get(struct udevice *dev, struct power_domain *power_domain); * requested by power_domain_get(). * @return 0 if OK, or a negative error code. */ +#ifdef CONFIG_POWER_DOMAIN int power_domain_free(struct power_domain *power_domain); +#else +static inline int power_domain_free(struct power_domain *power_domain) +{ + return -EINVAL; +} +#endif /** * power_domain_on - Enable power to a power domain. @@ -120,7 +143,14 @@ int power_domain_free(struct power_domain *power_domain); * requested by power_domain_get(). * @return 0 if OK, or a negative error code. */ +#ifdef CONFIG_POWER_DOMAIN int power_domain_on(struct power_domain *power_domain); +#else +static inline int power_domain_on(struct power_domain *power_domain); +{ + return -EINVAL; +} +#endif /** * power_domain_off - Disable power ot a power domain. @@ -129,6 +159,13 @@ int power_domain_on(struct power_domain *power_domain); * requested by power_domain_get(). * @return 0 if OK, or a negative error code. */ +#ifdef CONFIG_POWER_DOMAIN int power_domain_off(struct power_domain *power_domain); +#else +static inline int power_domain_off(struct power_domain *power_domain) +{ + return -EINVAL; +} +#endif #endif From patchwork Mon May 28 12:25:20 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Peng Fan X-Patchwork-Id: 921511 X-Patchwork-Delegate: sbabic@denx.de Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Authentication-Results: ozlabs.org; spf=none (mailfrom) smtp.mailfrom=lists.denx.de (client-ip=81.169.180.215; helo=lists.denx.de; envelope-from=u-boot-bounces@lists.denx.de; receiver=) Authentication-Results: ozlabs.org; dmarc=fail (p=none dis=none) header.from=nxp.com Authentication-Results: ozlabs.org; dkim=fail reason="signature verification failed" (1024-bit key; unprotected) header.d=nxp.com header.i=@nxp.com header.b="NqMwg/+u"; dkim-atps=neutral Received: from lists.denx.de (dione.denx.de [81.169.180.215]) by ozlabs.org (Postfix) with ESMTP id 40vbzB6sF6z9s0y for ; Mon, 28 May 2018 22:39:50 +1000 (AEST) Received: by lists.denx.de (Postfix, from userid 105) id 83944C21D9A; Mon, 28 May 2018 12:33:08 +0000 (UTC) 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=BAD_ENC_HEADER, RCVD_IN_DNSWL_BLOCKED, SPF_HELO_PASS, T_DKIM_INVALID autolearn=unavailable autolearn_force=no version=3.4.0 Received: from lists.denx.de (localhost [IPv6:::1]) by lists.denx.de (Postfix) with ESMTP id 6C3FAC21E18; Mon, 28 May 2018 12:27:54 +0000 (UTC) Received: by lists.denx.de (Postfix, from userid 105) id 007CCC21E1E; Mon, 28 May 2018 12:23:24 +0000 (UTC) Received: from EUR01-HE1-obe.outbound.protection.outlook.com (mail-he1eur01on0067.outbound.protection.outlook.com [104.47.0.67]) by lists.denx.de (Postfix) with ESMTPS id C304FC21E35 for ; Mon, 28 May 2018 12:23:19 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=nxp.com; s=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=qWP3JA5INzlC9jrUMlpqxkypsbG7NfcDWPdkuvWGHw8=; b=NqMwg/+uHCe7XdoXQv1G4WiSR6edqSzsmQSrP/wxyELefih1IZHTOyus6qhia2e6V73YT73Qk0ydjtj+0/niI1UgfT9TDuKoi3+BPrVFWEYZlvVa1sieVvWjcFP8mPlq6FW0IYYEJOv/CSrGweaK8EtW7L6imeQZr1LCgt2gmZs= Authentication-Results: spf=none (sender IP is ) smtp.mailfrom=peng.fan@nxp.com; Received: from linux-u7w5.ap.freescale.net.net (92.121.68.129) by VI1PR04MB3006.eurprd04.prod.outlook.com (2603:10a6:802:9::12) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384_P256) id 15.20.797.11; Mon, 28 May 2018 12:23:16 +0000 From: Peng Fan To: sbabic@denx.de, fabio.estevam@nxp.com Date: Mon, 28 May 2018 20:25:20 +0800 Message-Id: <20180528122526.20597-36-peng.fan@nxp.com> X-Mailer: git-send-email 2.14.1 In-Reply-To: <20180528122526.20597-1-peng.fan@nxp.com> References: <20180528122526.20597-1-peng.fan@nxp.com> MIME-Version: 1.0 X-Originating-IP: [92.121.68.129] X-ClientProxiedBy: HK2PR02CA0175.apcprd02.prod.outlook.com (2603:1096:201:21::11) To VI1PR04MB3006.eurprd04.prod.outlook.com (2603:10a6:802:9::12) X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-HT: Tenant X-Microsoft-Antispam: UriScan:; BCL:0; PCL:0; RULEID:(7020095)(4652020)(5600026)(48565401081)(4534165)(4627221)(201703031133081)(201702281549075)(2017052603328)(7153060)(7193020); SRVR:VI1PR04MB3006; X-Microsoft-Exchange-Diagnostics: 1; VI1PR04MB3006; 3:f3ZOh1xSD4/HxsbBxLQFs5VBV7rkpWRipHRmNNUvukA+O/wnY915QR4Wwk85kFZKbf9bwDLPkeQKrQZeq5a+C9K9ULkPR5v0L+o0mzhhaCKssPr09Sgz9ScKVfVRmokCnLOvkJLJeGUOJkQN5+/n/lyrZoRb7iJdZrKBtHPVURMG3CilNsFqA/ALRA7cQ/wTVKrd2r94lvkeisN9ihONJM77HPS6uLJldzn9gBfsXeYCWQJ+j3W0cfp7ZECE4214; 25:Rv9SYtMpWziw4bYIVT5pAzlibzOVoOU5Qspp+v9I5mBrFPQvCDceughtpSHiyH/RDcoEqMix1tNOsApjhmvC7X05Gfyn9Or+xGnHYoqQRhICGhv8+ODTHQ7LjGa62NqzordOPP3OTovMrJfjweM3sEyXRXytTVmuVLuvWFxhDO3iMxXDrV/5U/6c5HTOZGDMA1882xMioIsn3TS26ZtPel/zsOd630zAG+4E7FPf2U4tbcrMydwVcYrRID5gcoumdPudt7yKx8OcXhagHAZglp70eVfZSM3RZWhVgg39019RLMGKFT3ty8XincTsD4sU2rUTYPzSkEApstrVi+KKbA==; 31:tKI588fE7Y2GR30ZvY62xKZyawBNX/LoctnL0WozlVccGp66HSKfPPQKeyURrbrHxT3FhLTIzO9hCku1ijmhMaE3/lA9mvN7dCsFXjAWEQxoAq3bhg4S9vlPDYompbo+oF+YzHufFpM4o7gm696vca1zl8EQp+OZURs6+sWBtEC4ZtcMlvbgjpAsNWpwYx09WvtJpBz2dcmV68XAt4BK1yz+CCEOD7yM9iVPyWQWr4Q= X-MS-TrafficTypeDiagnostic: VI1PR04MB3006: X-Microsoft-Exchange-Diagnostics: 1; VI1PR04MB3006; 20:ZbRe5XQWttlh/NKDC0J9RrlAZnFDjnpIzq1kVV6aRqyYS6dAQQTbNo4Kix8pHYcWxtutiOUo+rDtw4/ECsgxvvxMsSpkycxivIbTs80N6dD9KIgWwLCFrbwWNkkbFwFZweagcAEqBzFKqTC1OsPofsmG8rk/4oyfxu6e0Yy5Nq9HWXdgtM8r1mRTkWfDC8OUSlsBVJ3kZ1hgsupFL000YXDzFBvsvKgPpQa/26AKa/EyQdrPVaESVoVvwZWrCy3adkoohmeBDF35C2uwbZx667zhOsqxXt0RICUIDrGtDhf6lP1sC8d3BpUnAXQeAAyJQ6QJCu2RBx9byBnu9UYXF/eEqsRJs669/P9tdMtDzW0+omHaq36R+5xrcByCDCZ081tWfsoN7sI+kE7oyxZAxA5hUZrkBJObJ7v05e02236M7KMN2LJFdGQVapNwTO/FRcq7ueyOExN9e0E+D+KG4i/qjmJSDdbx5j8k4llHlM7e2twE9MoUsMtahMZEL50b; 4:1j6MrDrVabwY/mGVVkyaTuHiicB1LdJNTZ1NuwMtUAaS2SNkeQC/Qyk6YQtBxOY+fP//TIOOd4QIyT1ZM2shTpxz4HEW4+oa4ntCMgmkF9cc0ejGR3P9f18QP1mmebmr5UoYqTIR4+9/JLhrq05GEr+vIfJKo+M5RSGZwi3eIsSrBlt1WF9tHDRMI2RUA6pftzDH8VfLhCGqT42bmTdgX/Est8v7itLY7CtEF/TZdCD4mp20rNuYcd3xhG+L1BiN2dRKqWRXO4oBSRXVr4BSxEX/zT7x67cS2GP/MJ+3eccfi2kw449udHPhgfcxY8CW X-Microsoft-Antispam-PRVS: X-Exchange-Antispam-Report-Test: UriScan:(185117386973197); X-MS-Exchange-SenderADCheck: 1 X-Exchange-Antispam-Report-CFA-Test: BCL:0; PCL:0; RULEID:(8211001083)(6040522)(2401047)(8121501046)(5005006)(3002001)(93006095)(93001095)(3231254)(944501410)(52105095)(10201501046)(6055026)(149027)(150027)(6041310)(20161123558120)(20161123560045)(201703131423095)(201702281528075)(20161123555045)(201703061421075)(201703061406153)(20161123562045)(20161123564045)(6072148)(201708071742011)(7699016); SRVR:VI1PR04MB3006; BCL:0; PCL:0; RULEID:; SRVR:VI1PR04MB3006; X-Forefront-PRVS: 06860EDC7B X-Forefront-Antispam-Report: SFV:NSPM; SFS:(10009020)(366004)(39380400002)(396003)(39860400002)(376002)(346002)(199004)(189003)(36756003)(97736004)(6636002)(6666003)(68736007)(86362001)(8676002)(44832011)(8936002)(81166006)(81156014)(47776003)(11346002)(956004)(2616005)(476003)(446003)(25786009)(486006)(48376002)(106356001)(105586002)(186003)(50466002)(16526019)(2906002)(6512007)(53936002)(1076002)(66066001)(26005)(51416003)(478600001)(305945005)(54906003)(50226002)(6486002)(5660300001)(6116002)(76176011)(3846002)(16586007)(52116002)(6506007)(4326008)(316002)(7736002)(386003); DIR:OUT; SFP:1101; SCL:1; SRVR:VI1PR04MB3006; H:linux-u7w5.ap.freescale.net.net; FPR:; SPF:None; LANG:en; PTR:InfoNoRecords; A:1; MX:1; Received-SPF: None (protection.outlook.com: nxp.com does not designate permitted sender hosts) X-Microsoft-Exchange-Diagnostics: =?us-ascii?Q?1; VI1PR04MB3006; 23:G1W9TcXSpx231VWreHX60mHfOibpxRwFH0yNhEzyu?= ah1d4uuDqycIlImB9cem7JXQvh9ub2ZB1HMOjFXcNBd/mq10nICoCxvHS18geVCVFFWWV9heg5cR2osna+DK0YNETgentqCLUsEk5eSzqGq3QlASAXIfPE3bATdBPVp5O3riOWfPC2JstTCsd3vrt1eCjKKF8WaTq6uiEZ6gNp/8ht4yJIS+P9Jwnlhb7rQmYJX3ZUlQKgNYOzhgRkXwg6/emomNWCHYhVbsCMpYjXXg4z2lpaCoHxvi0ylnUU4kWhMLXEkYuDvhuTfCnlHLi6iy/9dSSX1EGRxBxiHxuIG5W6AzhKxj9s/c/RrMXu8gVtq1lTKVUSX79SvuDDthPENfw4pr1556JPsXIdfkzz8Ymfsz7N+u1ePJfEmjFlnELlu4RIQISvTrmFqQIWTTIWMHiUegx7LTeh8zFsdJhcowVeSZ6qvobLlVjoX1ueYZ9ACvuuVLhA1T3Xm8A2YmUG6vDd8ZjksE/fzGKV4MRwrDN7PmxjPPpmLx+IIZSMaZSBjCtrfqsWflUV0XJ4QjmtTuq5O/R7N4hdCFz1wHwcIYMjdo9MaTC24+ejxhpXVqLZQqFx7erkLppkibWt/FrK2VYTjJvnat/XO1L1hQMhk8KizSRjMU30LofcrwTxlIBAbCyTgE7dXingLbjLagpuC+GwbYi5j2LDyuiYKoYWhWr1n0goHo/A+7qhnAkOrDU4kH3DH2gMmGCxsloCKJ25+zVNu8DpsOPe3vvNXLctDKK5RfJymQqF6kxTpOdn28dM2tLGamuM2hbbU9RqO0ol4HVreDVMZAlpeNA8dgCDCwOyc7pK5rGk+PmenaENgvq436qGAAOgculNguFFwUT8k5Tck+d/TTWZSJiyiFLG6RsR8rciued10TxBQEjj3o3nF5GsRWB/edYb6oKadv+8Gs+0eImEFbjF6IYoUu+zgdQ5S+fzb6kMJz+pYTu+RxlbG4VBSD24eDNk8MVGIUC52I7aV+pgNrMVkiCdlUQHYTXMEAgPofWCjyQLgLv+GmPKqdbhWE+fT7EUdF4EB+ULJt8jbl1/bXuqbXomqbtIxdUHf//4A+XV5MDXARxC24Y90tZC2Yi6ZbujNHfv08p8HbkrsPghrNwfo78igwDDcuPFimrZdr2Mx/+tp6M2sjmQMTN1TjpBXnutKLwrQNmk82LI7OX7sABPZuVuiFjSyHfOSBqFxWMNR7QIwRBURZCs= X-Microsoft-Antispam-Message-Info: zLAgGrvtxLP0Rb2lMFe04eQ2F2OpfqYNscZcAq6jE5SBewdbEMOAQVMlB0y3avF28vZXQwpNvn6x87HPmUJ7rW0va6RxC3lLIO6c5mmX6+ZLZlegkqA7EiMmsut1Fjj6Pr+w74UfkA0RejmhFP8fHEpU91Ua8gp5O0NwnmJRIQP6nb/ZEaGF7MqIplyhDs5j X-Microsoft-Exchange-Diagnostics: 1; VI1PR04MB3006; 6:LAMLOIHNNufVO7wPf9nRs5JoyL2z4+OO6svUeh1d4GlJ/FkuOAC03T/pNtn5uZGs8/PLT6B1EkodyWT90nBlcuo/euZI82aYtFz8E0W4XiR3K6f8H1FQg4lIG0D2LwRJZyY1PGQZyqbAE5TOamHcHgBo2cbNr2XeKmXnNUBrKtQW0yRjZLuLizYp1D+ZV0x8Is73gyqW6q28aKhU7w/7uvCCFWh5qG2zOBfKFwQnT3FzKam7zy1odmQnVDzJnZ+Yc0fM8cBckXu3qsyKHzoLJ+htCzEIE3vYjxALZ1wA7MK+zDqhQlIoDuskYFIkFcmbnVUgBGOQ0AGxdKyOWpBj4nlnQc+e1F9rXYOCuof9xkM8Bey9UcfMJAFQv5tl25ygDCzG95wCRcSLLmj6Taoq8gh4QHnm2WJt4nPru91AneGIoY6MOSrq29NDoC8XLfmbYzUJP/S5vsFlJwchZb7nxw==; 5:WruLNVNusoFU4QuGKNFxSA88cit8U/XFC/4LisgU7Vcy5PVIiOoT+CFYgIu1KY0dp+6J2doFQWMpE+Uoh00NhREOBsh/WtOOw6mfs1RetX4ZiZFbB1ahu88bTrjEKNa+jyS+4lWM/r6BxyQyARx2wM1BCTThP8JboTZMkGWf/Dc=; 24:SjNosTiapDbnb3w+HfiFoomxWfy9G33qplbRpgUZpsp8EGl2frLAfb6xVKj745zDwMEH3wueyqVYVgbZgOXIf9axc9yWx+wL84ZeQF8b7X8= SpamDiagnosticOutput: 1:99 SpamDiagnosticMetadata: NSPM X-Microsoft-Exchange-Diagnostics: 1; VI1PR04MB3006; 7:orYfljaIF2czc2g5/rjMCQ8PB/RVb9PnD+PPD43Cem7/SSesyCzbLea0cL/Dd6EoMzkxMl/ss4EVcflc3UhDd+j0m4h8fnYvxnUpR9caUGm8Jp5oAT7eRmBS200kVu/7MXddJh9zEu1zIg/wjwalQGOuBaZ8bFnSguztNzetXCBKJDNrh5hPJaJHOIaMoyguYLBSR7cB8t2BdtqFM9i+Hozd1Wg7C0Cngl4CHy3GfQ11QzOrbfjI9sAXUOaq1Rpb X-MS-Office365-Filtering-Correlation-Id: cb699227-cfe0-4195-69a2-08d5c495cb69 X-OriginatorOrg: nxp.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 28 May 2018 12:23:16.1834 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: cb699227-cfe0-4195-69a2-08d5c495cb69 X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 686ea1d3-bc2b-4c6f-a92c-d99c5c301635 X-MS-Exchange-Transport-CrossTenantHeadersStamped: VI1PR04MB3006 Cc: u-boot@lists.denx.de Subject: [U-Boot] [PATCH 35/41] dm: core: device: enable power domain in probe X-BeenThere: u-boot@lists.denx.de X-Mailman-Version: 2.1.18 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" Enable power domain associated with the device when probe. Signed-off-by: Peng Fan Cc: Simon Glass --- drivers/core/device.c | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/drivers/core/device.c b/drivers/core/device.c index e048e1a659..b6950d9dbb 100644 --- a/drivers/core/device.c +++ b/drivers/core/device.c @@ -26,6 +26,7 @@ #include #include #include +#include DECLARE_GLOBAL_DATA_PTR; @@ -296,6 +297,7 @@ static void *alloc_priv(int size, uint flags) int device_probe(struct udevice *dev) { + struct power_domain pd; const struct driver *drv; int size = 0; int ret; @@ -375,6 +377,11 @@ int device_probe(struct udevice *dev) if (dev->parent && device_get_uclass_id(dev) != UCLASS_PINCTRL) pinctrl_select_state(dev, "default"); + if (dev->parent && device_get_uclass_id(dev) != UCLASS_POWER_DOMAIN) { + if (!power_domain_get(dev, &pd)) + power_domain_on(&pd); + } + ret = uclass_pre_probe_device(dev); if (ret) goto fail; From patchwork Mon May 28 12:25:21 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Peng Fan X-Patchwork-Id: 921507 X-Patchwork-Delegate: sbabic@denx.de Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Authentication-Results: ozlabs.org; spf=none (mailfrom) smtp.mailfrom=lists.denx.de (client-ip=81.169.180.215; helo=lists.denx.de; envelope-from=u-boot-bounces@lists.denx.de; receiver=) Authentication-Results: ozlabs.org; dmarc=fail (p=none dis=none) header.from=nxp.com Authentication-Results: ozlabs.org; dkim=fail reason="signature verification failed" (1024-bit key; unprotected) header.d=nxp.com header.i=@nxp.com header.b="daSNfK0h"; dkim-atps=neutral Received: from lists.denx.de (dione.denx.de [81.169.180.215]) by ozlabs.org (Postfix) with ESMTP id 40vbyY4MS4z9s0y for ; Mon, 28 May 2018 22:39:17 +1000 (AEST) Received: by lists.denx.de (Postfix, from userid 105) id 454A3C21D9A; Mon, 28 May 2018 12:37:18 +0000 (UTC) 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=BAD_ENC_HEADER, RCVD_IN_DNSWL_NONE, SPF_HELO_PASS, T_DKIM_INVALID autolearn=unavailable autolearn_force=no version=3.4.0 Received: from lists.denx.de (localhost [IPv6:::1]) by lists.denx.de (Postfix) with ESMTP id 2A86DC21DF9; Mon, 28 May 2018 12:33:15 +0000 (UTC) Received: by lists.denx.de (Postfix, from userid 105) id 7D799C21DF3; Mon, 28 May 2018 12:23:26 +0000 (UTC) Received: from EUR01-HE1-obe.outbound.protection.outlook.com (mail-he1eur01on0080.outbound.protection.outlook.com [104.47.0.80]) by lists.denx.de (Postfix) with ESMTPS id E354BC21EA2 for ; Mon, 28 May 2018 12:23:22 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=nxp.com; s=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=e3iNzaf9lMIQG0Wq3VSvJ+EctlG0AEmyOtmD6XD6L10=; b=daSNfK0hipqMK0WBiyXsutGqDHQidwrpuyAtWHsZdA662r/WkzepQBN8jNBrmvU4/FnmzwnmDsuAZQUP6mI1kuDF//+7EOpU46iAjZ+FCJ85+XbgX5Q2nHgSB0CmVJLR7V9Wy9upsVIMgSd+N+wi8qu9+YElow5HX6vmh6I7T9Y= Authentication-Results: spf=none (sender IP is ) smtp.mailfrom=peng.fan@nxp.com; Received: from linux-u7w5.ap.freescale.net.net (92.121.68.129) by VI1PR04MB3006.eurprd04.prod.outlook.com (2603:10a6:802:9::12) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384_P256) id 15.20.797.11; Mon, 28 May 2018 12:23:19 +0000 From: Peng Fan To: sbabic@denx.de, fabio.estevam@nxp.com Date: Mon, 28 May 2018 20:25:21 +0800 Message-Id: <20180528122526.20597-37-peng.fan@nxp.com> X-Mailer: git-send-email 2.14.1 In-Reply-To: <20180528122526.20597-1-peng.fan@nxp.com> References: <20180528122526.20597-1-peng.fan@nxp.com> MIME-Version: 1.0 X-Originating-IP: [92.121.68.129] X-ClientProxiedBy: HK2PR02CA0175.apcprd02.prod.outlook.com (2603:1096:201:21::11) To VI1PR04MB3006.eurprd04.prod.outlook.com (2603:10a6:802:9::12) X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-HT: Tenant X-Microsoft-Antispam: UriScan:; BCL:0; PCL:0; RULEID:(7020095)(4652020)(5600026)(48565401081)(4534165)(4627221)(201703031133081)(201702281549075)(2017052603328)(7153060)(7193020); SRVR:VI1PR04MB3006; X-Microsoft-Exchange-Diagnostics: 1; VI1PR04MB3006; 3:YS8tzvLaI+kPmF/OLjeqrt50lZwuOAb6Yd8KK1rUyOMtkKjSCvo7zMi6R72ClFlGIKe5fxTI7A0qZbZDYV10ith8lKJW8TpBGeXYjwcB3yMgQxvhaEHxWa7FX4YDK+XjaoZaPyjlqltjx8bjNyJz+RFNSw0muedd686KiictrvwA/b/GXPqPDCyYutdskChZaULDfWczPtutzM2FR3yRMNUSulaBdi2ltrsiD/zDvqd+oEke5iN1ODf9/oHNO+/c; 25:Aeb6mQKwuL4phOt5zbpZ9vltAN3nLwAKDRNYkn7iqIc+aogsoXC9byT0FDEJjyNBTJITAyXwTDIRPWjRyH+XAy8smXGBN0Qat2K7uuALOdoW8+dgtS9T9N4yF6fm0x1YVXSrAAecjirJ5v5yvTTwKn1LQvPHzy4iHva8rT7VfVtZpcITW0ReOab7iMP6vvkQL4x2bhbm61fxwpR3KkRUU9su7TDhfzS/Rgg+QoiIGtm5DMNmrJrH7rnDMh6SzYG97go2yaihFRR1w+U6Rt4i5JUc/uf8oNIHuxT/L+R2TXNoACrTAYzRcnexnn+UsCrp0WZ76omTrrfCrKoBgUIzXA==; 31:hRG5VV5WOovpgZIKhFvFCshPMqKxIWSxvXfKcjfzIJIZRIJlsuJWtYsYE5wNhey8BA8I2BgTgINvLC4luA+AIo1a6Tnmo4QvKNBtfR2Lv32DL6C6yW4818eO88YtNW/D4erVSW8qhIvdoTMJS1W53Uvw7yKIXQYQhNwyMzF6d5HngbCBA39qXS/YlP7P+6dSTJmZ8o8GuVLQEngnM/puUMHRl4E4UwAUGlm2/IgRwZw= X-MS-TrafficTypeDiagnostic: VI1PR04MB3006: X-Microsoft-Exchange-Diagnostics: 1; VI1PR04MB3006; 20:DJx0bFZcgueJ62SIr6PGblInq/7qbzC1IXwzS4AUntBKSgxkJnoC6rchb2CAwrZ6beEayGPev6slLk17FIKO6u0JXpTTWKLRcnE7JJRft0+4+OhIU48mPRrWn/mHPH/IRwfLWJRqbaYH/gWwxuvy7CTYzRYKEw5YK+noI+aVFFoVbyl3YfduQZEqxnRgr59ANXb3G2yuwadx+TJxk4QXBX98byQChi9xwMk3CNLjAdmDjxdXilFlaomk+d1riUb8EU60AFtFpLrwyxdQLCQ2vz9pYmdkRj/xL57TolWj9Xn8Vm3kGqrcOC1pm12aNNAJ3RQVV0bDp0V3LSEGW2O33FB8veLTBY4LWmn8aDuEFwpUaGCVFgaEXytNu1D87jVYHbdwWqrjong0pbvYcahNmS8arCZrfnc4igZpKrfFJklVjnk6E5ccHcdKd7eYw8ddh4uwaGAwRHZzT6ojKm0Bbca8hWcPC5uOn/90AgZHECXLUPIMgLFC5lf/76xSogoU; 4:YjcFT9L/7ZkimnmhO66EMj9mMUhwB826NJaFQG9cy+yC5v3SzNVpXQJUUBGOQaMV7W/DlEXFVq1gQzErU2MII7Kc6Z5rUKLUaGiec95o+3XCLBN7C2L9oA1SL+dIO6o6UAm6fP1GXA7HQ2aKl8UzxtbjXqsZyrJn2n28Mo5DdTGRuQrrF52sHDXrsVyCzmcsY3dErQSGEn2b4ktlaP0JmZSy6PowlZsPfaHr5tqsA9lUmqwDJrCpc48uEbO9avSvuC+9Ru6LE3GlVw6Xmi7F8CrigntWhGX0iIlRdaj8YnwCR3NVpfTYu2aHQpEHUADI X-Microsoft-Antispam-PRVS: X-Exchange-Antispam-Report-Test: UriScan:(185117386973197); X-MS-Exchange-SenderADCheck: 1 X-Exchange-Antispam-Report-CFA-Test: BCL:0; PCL:0; RULEID:(8211001083)(6040522)(2401047)(8121501046)(5005006)(3002001)(93006095)(93001095)(3231254)(944501410)(52105095)(10201501046)(6055026)(149027)(150027)(6041310)(20161123558120)(20161123560045)(201703131423095)(201702281528075)(20161123555045)(201703061421075)(201703061406153)(20161123562045)(20161123564045)(6072148)(201708071742011)(7699016); SRVR:VI1PR04MB3006; BCL:0; PCL:0; RULEID:; SRVR:VI1PR04MB3006; X-Forefront-PRVS: 06860EDC7B X-Forefront-Antispam-Report: SFV:NSPM; SFS:(10009020)(366004)(39380400002)(396003)(39860400002)(376002)(346002)(199004)(189003)(36756003)(97736004)(6636002)(6666003)(68736007)(86362001)(8676002)(44832011)(8936002)(81166006)(81156014)(47776003)(11346002)(956004)(2616005)(476003)(446003)(25786009)(486006)(48376002)(106356001)(105586002)(186003)(50466002)(16526019)(2906002)(6512007)(53936002)(1076002)(66066001)(26005)(51416003)(478600001)(305945005)(54906003)(50226002)(6486002)(5660300001)(6116002)(76176011)(3846002)(16586007)(52116002)(6506007)(4326008)(316002)(7736002)(386003); DIR:OUT; SFP:1101; SCL:1; SRVR:VI1PR04MB3006; H:linux-u7w5.ap.freescale.net.net; FPR:; SPF:None; LANG:en; PTR:InfoNoRecords; A:1; MX:1; Received-SPF: None (protection.outlook.com: nxp.com does not designate permitted sender hosts) X-Microsoft-Exchange-Diagnostics: =?us-ascii?Q?1; VI1PR04MB3006; 23:jTum/gFrDhX18WMAEV2C2hQFsyVtS6UnneHqLODiq?= glKyQGGdt0jIMRH2KckFwXv6CwQnbp2ES3plKKZqK5IYhSgQSYnGK8NV6hfMvmVDW/Lc3orlA77FUQ5w01sbKYSdNZy4/uk0UhYUupkRtfJfsHEmZiRbFz22hZhwkPrRaTAzEmGMpTceWeekB3tuVvlzG+VPY3PyHXBwoKyQ3ID1/NOjt5ugbBJz+Sau9dJPQOqiMb3BuDFf+gnllksYh/Duhw0rUm7hUHRMvz0Nk/3e9oILbUzrpVpWycKXWFy0sWWxbvL9b+crAIwesZrF56I6p3P9YwvEmB5fI8VTBvTHuRPTrEHR19eq3kHuNE9SzjMviLM0SA0f+zxQsfeJ5u48le2apuK4ToVNG5pKHjkre4a+Y9rS0MmtDeZ42oioftWbQkbffVhT5SlsdXRFJ1dX03V0QXzSHv3WtWfglLSz7pP0DiQgl6GzPAkVK6Q15xuZ9kOAu+plP6RHU589uD7+bcw4Fqta1fnC3MTxrQX6jYknjn7wZExzsVJFkSvJIa4K4NWlmhk2QgAV3zphSzViGcwlO3sbaYf7I8z6AbYdxuoG+qLv8k7JJ2hZ4CN1ZZigYxJOO13qnFJVXd1gzei7zNOkyX7MifVRX5fC/QvRbkcE1ISo/u9OfEuk5d73W7zScrV4j3A3EoU0YZjevMC3SttRmDLmYCBdjuNdy7z5RULJopU+QP0BN2XMK/FgAemnmq1vo/GEcVAz4tPj6lHY+Y2XYhfQ7LJ4FTLUDUQgocfSIrxmcn2DO3t8CgnFSRQk+8ZJeDmYRkIXa6406HlEWTezVKwT6mELB8fI1rHcL+X3NRV7KyQmg6rN5P9e3uZDN6RoCNemA5RF9RhkB1YVAZbmPJd/zBMtXyDRZQnZOuIC77eIWr4+LyOlTFysv9DIPXH3ATxiKbzYB2oJ348aDDvWn4lFZ7cyn9BTI/6HihCKxah8Suuaxk0UUpIrnGT176OLDAKjdQz8+2LI18nrHRhCwQgTfYhtkHWy9weM/+2YQhgXsqBKeNQK8ZPiBOBJwm0QlCRuv8OUY3DVTyrWp34jkMyHMlZmI/m4la5QlhuGuhOR3VNBj/NLfamlieCBNHp2KF3bsea5ItpiWf/sJe7CLPdCO00wMdWbXMuQPShbllGWoKUaw6+Z7+r8AU+RO2jw+pnwkEWqm9rN802ZftMJa8zCGXAlZLw2R4PGEb8y103s79AOXILxKUmpCw= X-Microsoft-Antispam-Message-Info: kLVTsrlxg6aWzEKpNEb5Vsj/8sfv6igOx8NjSfQendz31MosUCwr5HbzxLnwJGzv5vWYXZKza1iTVW0pbvOWPOOFdNetwcjm3C9Z3gndESBK7WeD184fu2ad9vpOpH+Qyde0ch+O6MwKxoxWQF2cPdv6O45jivHJENqgOJzm6EbiAmu0BvbY6ejJtrlZ7iNd X-Microsoft-Exchange-Diagnostics: 1; VI1PR04MB3006; 6:pmE3Q4uf3lpF6kCu1wQeRjK9V5146ZAugE1PTB13K3i3hvNZocf8gCVfjlqbQ1SPDLJnE8AIOo5C+ZsGr/dKqPx4ek6pV3dmuvkNu2RuGbFKCsVFmzdWzrLHQgz1WtgMblaw/BhUveDOEdP0+z03SnsZT0zQE2YW2XvEd4uWpkJpue36Aj50QHh4EEJrCZomCTpyeLQcsAZTD1k4GSBXnqcBmqNNKA1JcuNh4EJ9RqCEsOpMwa1KMyhZ19MFhQIc4+wXnu/fVR98xePiStblkgb+TZhvBKjchCC1AM/2XH+cLQrH/bqs8x3Rm1ZCL6BTuB0PQiQMMIdJ+XGvpc02Cvb8yxIAvYSbdi95asX52N96GfYCkJNQIfRu/FWDDArtVRp8SsZlJPWdWA2l7W4g0S0OA2YZHNkbdT9lg7vatfWha0d+zRWIEkcAMAdf242q0lrdxYydeuGAF6Ilh8VEKg==; 5:6mMzu51JG2W/j0imQyQ38ZXb6mbYyfqJbld1kWQmetfZFe3bmfSBco0LjxUXytNJNbEBTQXFuJBF9dnhI3Sg6sC8hH7xZbC2a1OkqFrKZ+tq+5HWuB8MRrrDc5bl2lMcec2Q48ccqc5nRmQMhuiK8sS++11658iRG7slOUmm2oU=; 24:YM5qg3ybLLvK4UlpJAXvqWAjomCtiCpGsyw5waEprfFUx3Re0PE4Scbs6kBgFgjY9RxkqyJnK3CaSxj7ACYokeQGGnLxRUXhDH2jvEYvSuw= SpamDiagnosticOutput: 1:99 SpamDiagnosticMetadata: NSPM X-Microsoft-Exchange-Diagnostics: 1; VI1PR04MB3006; 7:xEUBOrlVGUrTv5DzjgQ40luKCCF6gfG+jv7WObRyE/zhdrVvEB43ThElVdrqQcZNSXzPoz5vEMmu5bD9MUSEAsZ3DuPhBhFptCR44GlH1DEJsMdM/pxD+oCA4y/oHVugDGXUAgProTSDrk8vsKuqnbBw+4TSVF2zzZ6nfVsTzAQ+SkE1ZFF1gF26wMorEEcci++qFq7SamBYBGl1G4Aa9bmPICqldgbtik45wNpzmzfX3hCt1CSnsYVXvjjrFoXx X-MS-Office365-Filtering-Correlation-Id: 404440d2-eaff-4a6b-df3b-08d5c495cd43 X-OriginatorOrg: nxp.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 28 May 2018 12:23:19.2772 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: 404440d2-eaff-4a6b-df3b-08d5c495cd43 X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 686ea1d3-bc2b-4c6f-a92c-d99c5c301635 X-MS-Exchange-Transport-CrossTenantHeadersStamped: VI1PR04MB3006 Cc: u-boot@lists.denx.de Subject: [U-Boot] [PATCH 36/41] drivers: regulator: fixed: add off-on-delay-us X-BeenThere: u-boot@lists.denx.de X-Mailman-Version: 2.1.18 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" Add off-on-delay-us for fixed regulator. Signed-off-by: Peng Fan Cc: Simon Glass Reviewed-by: Simon Glass --- drivers/power/regulator/fixed.c | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/drivers/power/regulator/fixed.c b/drivers/power/regulator/fixed.c index 0be5b7bd51..b72ad98cb8 100644 --- a/drivers/power/regulator/fixed.c +++ b/drivers/power/regulator/fixed.c @@ -16,6 +16,7 @@ struct fixed_regulator_platdata { struct gpio_desc gpio; /* GPIO for regulator enable control */ unsigned int startup_delay_us; + unsigned int off_on_delay_us; }; static int fixed_regulator_ofdata_to_platdata(struct udevice *dev) @@ -50,6 +51,8 @@ static int fixed_regulator_ofdata_to_platdata(struct udevice *dev) /* Get optional ramp up delay */ dev_pdata->startup_delay_us = dev_read_u32_default(dev, "startup-delay-us", 0); + dev_pdata->off_on_delay_us = dev_read_u32_default(dev, + "off-on-delay-us", 0); return 0; } @@ -123,6 +126,9 @@ static int fixed_regulator_set_enable(struct udevice *dev, bool enable) udelay(dev_pdata->startup_delay_us); debug("%s: done\n", __func__); + if (!enable && dev_pdata->off_on_delay_us) + udelay(dev_pdata->off_on_delay_us); + return 0; } From patchwork Mon May 28 12:25:22 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Peng Fan X-Patchwork-Id: 921505 X-Patchwork-Delegate: sbabic@denx.de Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Authentication-Results: ozlabs.org; spf=none (mailfrom) smtp.mailfrom=lists.denx.de (client-ip=81.169.180.215; helo=lists.denx.de; envelope-from=u-boot-bounces@lists.denx.de; receiver=) Authentication-Results: ozlabs.org; dmarc=fail (p=none dis=none) header.from=nxp.com Authentication-Results: ozlabs.org; dkim=fail reason="signature verification failed" (1024-bit key; unprotected) header.d=nxp.com header.i=@nxp.com header.b="v6qTqbzR"; dkim-atps=neutral Received: from lists.denx.de (dione.denx.de [81.169.180.215]) by ozlabs.org (Postfix) with ESMTP id 40vbwt13h0z9s0q for ; Mon, 28 May 2018 22:37:50 +1000 (AEST) Received: by lists.denx.de (Postfix, from userid 105) id C2242C21DFF; Mon, 28 May 2018 12:32:50 +0000 (UTC) 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=BAD_ENC_HEADER, RCVD_IN_DNSWL_BLOCKED, SPF_HELO_PASS, T_DKIM_INVALID autolearn=unavailable autolearn_force=no version=3.4.0 Received: from lists.denx.de (localhost [IPv6:::1]) by lists.denx.de (Postfix) with ESMTP id 81576C21E2F; Mon, 28 May 2018 12:27:23 +0000 (UTC) Received: by lists.denx.de (Postfix, from userid 105) id 22A10C21E76; Mon, 28 May 2018 12:23:29 +0000 (UTC) Received: from EUR03-DB5-obe.outbound.protection.outlook.com (mail-eopbgr40070.outbound.protection.outlook.com [40.107.4.70]) by lists.denx.de (Postfix) with ESMTPS id C0EFCC21E16 for ; Mon, 28 May 2018 12:23:25 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=nxp.com; s=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=yvubLGGB+dqDIhNNu9q0BB1VgjgQIZqYjAFlGJex4dc=; b=v6qTqbzRFoydDMYd6XFeN0p56RN6IvJS5Dl8DzE8NXYaFrunZ2siqaPGErDcmp58+8YoTAimmX3xjXnjAJqpg5yoy0EyEisG6huUFJ7hs35ikV6zf/fdXX0SIg9mR0RS/gYX3zM4T5Jtz1NuCiagGIaOqyEtNtEDUH+OBProu6E= Authentication-Results: spf=none (sender IP is ) smtp.mailfrom=peng.fan@nxp.com; Received: from linux-u7w5.ap.freescale.net.net (92.121.68.129) by VI1PR04MB3006.eurprd04.prod.outlook.com (2603:10a6:802:9::12) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384_P256) id 15.20.797.11; Mon, 28 May 2018 12:23:22 +0000 From: Peng Fan To: sbabic@denx.de, fabio.estevam@nxp.com Date: Mon, 28 May 2018 20:25:22 +0800 Message-Id: <20180528122526.20597-38-peng.fan@nxp.com> X-Mailer: git-send-email 2.14.1 In-Reply-To: <20180528122526.20597-1-peng.fan@nxp.com> References: <20180528122526.20597-1-peng.fan@nxp.com> MIME-Version: 1.0 X-Originating-IP: [92.121.68.129] X-ClientProxiedBy: HK2PR02CA0175.apcprd02.prod.outlook.com (2603:1096:201:21::11) To VI1PR04MB3006.eurprd04.prod.outlook.com (2603:10a6:802:9::12) X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-HT: Tenant X-Microsoft-Antispam: UriScan:; BCL:0; PCL:0; RULEID:(7020095)(4652020)(5600026)(48565401081)(4534165)(4627221)(201703031133081)(201702281549075)(2017052603328)(7153060)(7193020); SRVR:VI1PR04MB3006; X-Microsoft-Exchange-Diagnostics: 1; VI1PR04MB3006; 3:Zk5oESiYMM3iCddOae9f4TNzamaLK7GRHOF6MBSRG08QTt6UL+mttO/0czlzvO8sL6rMWBYzl4GXl4R2R1pyNnieHUKgZ2Ow/YSnuJ2Ig3RdpkCAYcGtcbGwtV9lNQOhzuBorSeTI89WRqfS8sIOI/pIsDywp2g1BM8wzfwE8F0dnPiHEgfLWf1nRKB4bDNftKysumultXu1VZg7KeoWoNRcew5x8H/QnDpG78M0b/c8Oi4zpT3CwYD0SdQ9yrdf; 25:RiBwq+T4+kUxJBDFYIv4ABx7VKc/iXIi+rAprjw614OSQN4izbuWOorCTDOh2634AcOyDbjOoCGBL6XRixbUyNDTCJin17ziqX8e0lgktkm5RCQDu/saUbLPAFZadlxtWpoAOBecPTBSmpN/9BcWRX7gjCecwxLVL+loN9BmmZOMq/3t2WnIwb2yD2QbmKaVT75rQ3gxc+3LBoofsfB15FDww2dEcWGv3IaHKWzrsRUHlsyLaysGQ8PE07XAQqgqlb9VfTxyOYFGGa1HkFvqmbHDuEauSZdy+Ifghz9ZQnupyGnaOG23wLthtpFTwdPIn+BAC/6aOGJACAs9ptm2Hg==; 31:FBK7PHxnTtuzpTn334KnHFPe0g8apIdkeC29tRMDE2+pguoD3tUJ7vlpV8Xitcj/29eE23+ZY8DZ5mro0tut79fxA6Nf0niJ4ZsNeFdsad6aBX+1lIyYTiJswUN4SEkvXpmHG9+FIYW0Pflwv+0Ko4HwNXEJQDSVT2quCUXyzsODAX5VTfZX/S4ws+TMM9TU8CPPIEtpy4u6nzCPI4VYhD6S453HI1V7eq+3bOqURMc= X-MS-TrafficTypeDiagnostic: VI1PR04MB3006: X-Microsoft-Exchange-Diagnostics: 1; VI1PR04MB3006; 20:VtOGq8aAacjVriI1krHiqeXziKP74aLWeZaINbxeNEEdxI3ILTmgkz6XNKzHRyDan80QpJBJtlsJ10Or0PAW7niWIv1q5mqlmjCeFcZHe2B2jt5DNMiHNht9RNFP73EJc+47vntLFWk89fb5n3ihKy8g6ElgQz788zGFugEQp9dakwzKy0reKfAmsFAPjQVoX7W6YiTNZA9mJQUTbdmhu6r5Cv1iVfueb9gSRjzHvmm1WNF9d9PcT45z1qil4FiUkzfiM78pfcx5QqKPY14PdQKzqprJNx0slbLCwhmsfrwRMJw7mEnknUrSilvk8ajcf+hE82uRWCCnTVALF8DvqUUgJV+35DzuyyYeCXh5+DNcCwYpK1xQ22kdjISB9G9fbC2U/ziaedqbSZzM8k13r+cyns6VTbjbBS2vdEZEyS2Gzfxl/mZQyxh0reeOhV5d33+F129Ne1TB+pRM395GGHIZlfFuvSTJuDX4kFV6kVIpbU0vrI9nnscZEU1YLV3X; 4:TNB+RxEzF/HRAX6RlHJtrYYOr2i83KjGEKFPrdlFdFYzaSAJA/e7RLET1pNHa4Mw0QwaHy2t/0zJaTMm1PFDhvvx7OJou87o7GWpv/ZuqAToy4HgyVdBVLuVmKAaJ071DDvlBBELoECZVEY74JxkJAx+WYUWmFzZv39Fuzd698V4G22Mqs+Ooc/0KxVvb/fb8AwlUlHTgRNdiG9+ej8kERwihI29JQGmtEy0KNNYzRhuXQDWiY5J8BlOdxhRN2z1irS+746JYRQQ7UlUwthtOobcIoaKEGy3xweY2JJpwkVjCkUTnngBBdKaPlhuQ8Ve X-Microsoft-Antispam-PRVS: X-Exchange-Antispam-Report-Test: UriScan:(185117386973197); X-MS-Exchange-SenderADCheck: 1 X-Exchange-Antispam-Report-CFA-Test: BCL:0; PCL:0; RULEID:(8211001083)(6040522)(2401047)(8121501046)(5005006)(3002001)(93006095)(93001095)(3231254)(944501410)(52105095)(10201501046)(6055026)(149027)(150027)(6041310)(20161123558120)(20161123560045)(201703131423095)(201702281528075)(20161123555045)(201703061421075)(201703061406153)(20161123562045)(20161123564045)(6072148)(201708071742011)(7699016); SRVR:VI1PR04MB3006; BCL:0; PCL:0; RULEID:; SRVR:VI1PR04MB3006; X-Forefront-PRVS: 06860EDC7B X-Forefront-Antispam-Report: SFV:NSPM; SFS:(10009020)(366004)(39380400002)(396003)(39860400002)(376002)(346002)(199004)(189003)(36756003)(97736004)(6636002)(68736007)(86362001)(8676002)(44832011)(8936002)(81166006)(81156014)(47776003)(11346002)(956004)(2616005)(476003)(446003)(25786009)(486006)(48376002)(106356001)(105586002)(186003)(50466002)(16526019)(2906002)(6512007)(53936002)(1076002)(66066001)(26005)(51416003)(478600001)(305945005)(54906003)(50226002)(6486002)(5660300001)(6116002)(76176011)(3846002)(16586007)(52116002)(6506007)(4326008)(316002)(7736002)(386003); DIR:OUT; SFP:1101; SCL:1; SRVR:VI1PR04MB3006; H:linux-u7w5.ap.freescale.net.net; FPR:; SPF:None; LANG:en; PTR:InfoNoRecords; A:1; MX:1; Received-SPF: None (protection.outlook.com: nxp.com does not designate permitted sender hosts) X-Microsoft-Exchange-Diagnostics: =?us-ascii?Q?1; VI1PR04MB3006; 23:k899LgXSBWp71l3BEV6MVzVS9vMMMPFyvyZWLax6W?= mvJENsOc42eUUa/qLAv0lFoQarPpqPxkCh6OVpp31KSlRtZ9mOLCN62LcrZ2YjLXchJIxRI6vTiQlHRQ01Jn3MByEK6xB6vTEN4HNNPtZ+2tn6sfzYDsfiwxu0+qamQlUhbHiyDFJ4ABfdWnNwUDNWPVxlSyYz3ND1RSTF1+oXXpZoFaEQMcfG4/u815CbYxszIZS85eNJdyQkcFWT1JvVVIzPsiPqpa6QqtiMvtyQ+cZIG0ZcgKg4xDD3v+bGgip6HUn3z7IT97fUWV1b3PA3E2YBTfOHmxI/gy2B8zim2guD8eazoOp8QrlaAwj+5XClGsr0em7qSVrfBgsTGm30QKG/S1Fu271Csch9hAXokAoWIKt1nTBs+R9A3jCFwqzZlR4rW9LSatBz6zDOtg3B8JW5S4vQ+QNDIOimp7Aj+NgD43Hapz5NDG7DkdeIVdaQbr+DPxa/dVtOMap+CMb93zC6fnDVA9jkCVxM+mSKZgrBMfKg1uUD6kJrPVPxIkomsSunRSf50oIbJxUfnzQBpYQ7hEmM7vqIfXpqSCwFLeN63gfVsz/9WhwH5AkuwR37/eCdoxdXFsQ10h/HR8kddtKztRKQV0SKQOq42wxnNAnoKEQrsIxWeQtNY/YBlGpnZqL9wwKpanYXTp5u1RUduorJxM4O+kNcsvlZNwSbIJqVOvDjewjrGOTdYaYK4FrSv+FUI/7uXbb2nATK0YlMDF58F3W6mxZc6i48sS27NbqJQBWtZdHjb5qEBQeQgYtlSqE+Ka4ONLoGvP5W35PDuSLCRFApv6A23yRvDzHdXoxEMdPExIKBppJoaLOV52QChqzL0EJsf4HvcWXjLj68zu/XRLq/30jbs4baDDY2POxOCjnHlzSZM3hXD40pVq2Az6AMRKnqvdl6dICDxOcpUBsGr/TvMFZt0yMDPeri3UgFaQBmcu3dskd/5+4u2TvDyqSHsnQD0jF0art4+Dc2hOGq4rJLQT3wIWQ+dWuDlBpEfL80wr3KJt0Xw7T6dAClKMJc3avgj7smYg2WmNg9IjKA7B5WXV+PZ6rVwww2OKR5J1FCJr0Q5LGZl01tQtFFQHz81mo4R55U+ikJAG1FsV2D5qFe4jf6OmhsfkThf+sbjJ3m6eaaAIlnca3TMSVc6aSLFV9QTTYfPaqBPsK6kq0eNIvtEJSNdVH0pHTsoHg== X-Microsoft-Antispam-Message-Info: s9rzo9yuw0S3QXU33+fb0dQs1pexJdCv1l5CVQhmzcV3k8qd+QJFBW1Gu/acct7X9qjoF+6O75xqr2cYR5UyvYCp88mMTneNPOlI7+i/Ua2+qV54oILNXMqnQ42rOS0JMyAkQChO6IijaJRmCMzybwgtdgpxLe4PhZBrezrFhbmQwpQBg08YoT53aeJmedq0 X-Microsoft-Exchange-Diagnostics: 1; VI1PR04MB3006; 6:Qzp12hUza02rj1LbZ8BhXnq3UomvH2nB2KcQehjmi6R7ILjSHbbCSXW7Trbe4IptQzCXhf/F1hPQGGUNMKq7KwxaMcuBpAixGCAMHIF2VS4AdeOjIu6BS7S2LcrY78WeYn25SzyDTrXCBfKl8nQ1AcsnHhYGeQ04liH7CFghHW1OugBQfp8h//rCl4hLOaAouVEdme8OQnITcz43R0FWicgUXHw2MhjOLUKnujSw+FuAxXHzJ7QZf++i+oWkpy8EoAxkFVb1xk5Q1k+LDiaGW5lMD4o4lQuTalgX8RPPEE3SSJK7z1pWH5jjz8+AymZ5SXwQ8IqB73Xj+6c06XJ5F/VsGH1nDvJJELxOu6T/f9c+Y36XgBT/dNkeKcoVi9m2QXF2B11MMXEoVPIhYDzc7JoZPPY70d4UCmqdbd/sFGswFhnymZTXWqQvKp9144dLQ+77pa92EJJeSDGE4zsqkA==; 5:VYzoPu+XvXR5eirrQYSXpUc2/gIlnDiMvuwqrWL1l2pZs3AEL2ipq342yZlh/idoJiz3GcGWC/nfKn96c6FinbKbXp2kdkFpBuhzKzcF8DGvwg+dLwDTRgQ/22WCPRAtUsTpYUu/S7Lo4aN4/5yJ4Wai8B/W0vgwcCcRTDELpRA=; 24:4xlGxm9ipmFqL2uvU6p8JNfY79n0oWoIPeMS4cOf/UMQVosBYfw6T0bP/j79hRyxKS3sj9Zr49ndbLBY1HJd62E4Hcf6ZBOJ6NM52WtfZNY= SpamDiagnosticOutput: 1:99 SpamDiagnosticMetadata: NSPM X-Microsoft-Exchange-Diagnostics: 1; VI1PR04MB3006; 7:M0iX1mRFYJl+OB4jJaZq2dXqGeiCFrIIRbatH2Ye3R/+xnN6zZvSYqEA8QmzlQiSFmzGuu1Igp+j1Q54VZpMZ/jbETAkoF/7aczSaiq7JvamhcZX+aJiH6lB9GZRbqjyI6Q56rJ8Cyxr3H0ybFUMhoCPgdRJJkpdszSNtxjEpTvygjDVr+oCpjmwyiqT2KXCZvH4YSZIJw+t42Jb/3NlJ3OmXkKl1jhpwVHWngd5yxGxXVVRkEdQ8uPKve42s3o3 X-MS-Office365-Filtering-Correlation-Id: b93f56b2-5e07-48ee-b736-08d5c495cf20 X-OriginatorOrg: nxp.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 28 May 2018 12:23:22.3554 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: b93f56b2-5e07-48ee-b736-08d5c495cf20 X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 686ea1d3-bc2b-4c6f-a92c-d99c5c301635 X-MS-Exchange-Transport-CrossTenantHeadersStamped: VI1PR04MB3006 Cc: u-boot@lists.denx.de, Haibo Chen Subject: [U-Boot] [PATCH 37/41] mmc: fsl_esdhc: fix sd/mmc ddr mode clock setting issue X-BeenThere: u-boot@lists.denx.de X-Mailman-Version: 2.1.18 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" From: Ye Li When sd/mmc work at DDR mode, like HS400/HS400ES/DDR52/DDR50 mode, the actual clock rate is just half of the expected clock. This patch set the DDR_EN bit first for DDR mode, hardware divide the usdhc clock automatically, then follow the original sdr clock setting method. Signed-off-by: Haibo Chen Signed-off-by: Ye Li --- drivers/mmc/fsl_esdhc.c | 24 +++++++++++++++++++----- 1 file changed, 19 insertions(+), 5 deletions(-) diff --git a/drivers/mmc/fsl_esdhc.c b/drivers/mmc/fsl_esdhc.c index 1b062ff06d..bf4ae74847 100644 --- a/drivers/mmc/fsl_esdhc.c +++ b/drivers/mmc/fsl_esdhc.c @@ -583,18 +583,32 @@ static void set_sysctl(struct fsl_esdhc_priv *priv, struct mmc *mmc, uint clock) #else int pre_div = 2; #endif - int ddr_pre_div = mmc->ddr_mode ? 2 : 1; int sdhc_clk = priv->sdhc_clk; uint clk; + /* + * For ddr mode, usdhc need to enable DDR mode first, after select + * this DDR mode, usdhc will automatically divide the usdhc clock + */ + if (mmc->ddr_mode) { + writel(readl(®s->mixctrl) | MIX_CTRL_DDREN, ®s->mixctrl); + sdhc_clk >>= 1; + } + if (clock < mmc->cfg->f_min) clock = mmc->cfg->f_min; - while (sdhc_clk / (16 * pre_div * ddr_pre_div) > clock && pre_div < 256) - pre_div *= 2; + if ((sdhc_clk / 16) > clock) { + for (; pre_div < 256; pre_div *= 2) + if ((sdhc_clk / pre_div) <= (clock * 16)) + break; + } else { + pre_div = 1; + } - while (sdhc_clk / (div * pre_div * ddr_pre_div) > clock && div < 16) - div++; + for (div = 1; div <= 16; div++) + if ((sdhc_clk / (div * pre_div)) <= clock) + break; pre_div >>= 1; div -= 1; From patchwork Mon May 28 12:25:23 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Peng Fan X-Patchwork-Id: 921498 X-Patchwork-Delegate: sbabic@denx.de Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Authentication-Results: ozlabs.org; spf=none (mailfrom) smtp.mailfrom=lists.denx.de (client-ip=81.169.180.215; helo=lists.denx.de; envelope-from=u-boot-bounces@lists.denx.de; receiver=) Authentication-Results: ozlabs.org; dmarc=fail (p=none dis=none) header.from=nxp.com Authentication-Results: ozlabs.org; dkim=fail reason="signature verification failed" (1024-bit key; unprotected) header.d=nxp.com header.i=@nxp.com header.b="KF0OQ1xQ"; dkim-atps=neutral Received: from lists.denx.de (dione.denx.de [81.169.180.215]) by ozlabs.org (Postfix) with ESMTP id 40vbtC30bTz9s0y for ; Mon, 28 May 2018 22:35:31 +1000 (AEST) Received: by lists.denx.de (Postfix, from userid 105) id 00F84C21DE8; Mon, 28 May 2018 12:34:08 +0000 (UTC) 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=BAD_ENC_HEADER, RCVD_IN_DNSWL_BLOCKED, SPF_HELO_PASS, T_DKIM_INVALID autolearn=unavailable autolearn_force=no version=3.4.0 Received: from lists.denx.de (localhost [IPv6:::1]) by lists.denx.de (Postfix) with ESMTP id 1DB4CC21DE8; Mon, 28 May 2018 12:28:49 +0000 (UTC) Received: by lists.denx.de (Postfix, from userid 105) id B7DF3C21DB3; Mon, 28 May 2018 12:23:36 +0000 (UTC) Received: from EUR03-DB5-obe.outbound.protection.outlook.com (mail-eopbgr40081.outbound.protection.outlook.com [40.107.4.81]) by lists.denx.de (Postfix) with ESMTPS id DD4D1C21EB1 for ; Mon, 28 May 2018 12:23:30 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=nxp.com; s=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=7QdpEgFrvxKXkdFAGyPju47tfbij3TPl7RuMaYpncrc=; b=KF0OQ1xQeOEDZZHyVOGq1XC5yIrxfM6waIw5rkRFwndW9Hs9PJTkWHpk5JFjHPjZ1McAAyWWUPXT4FmP6L4skqg2BB4cg5OVrLp71tHqawnIQ8xXRvkm+06ksV/Ob//85wd5ZESNToadLJ/7FZb7TyIxwD3RZgqUFA2DlGBk0Io= Authentication-Results: spf=none (sender IP is ) smtp.mailfrom=peng.fan@nxp.com; Received: from linux-u7w5.ap.freescale.net.net (92.121.68.129) by VI1PR04MB3006.eurprd04.prod.outlook.com (2603:10a6:802:9::12) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384_P256) id 15.20.797.11; Mon, 28 May 2018 12:23:25 +0000 From: Peng Fan To: sbabic@denx.de, fabio.estevam@nxp.com Date: Mon, 28 May 2018 20:25:23 +0800 Message-Id: <20180528122526.20597-39-peng.fan@nxp.com> X-Mailer: git-send-email 2.14.1 In-Reply-To: <20180528122526.20597-1-peng.fan@nxp.com> References: <20180528122526.20597-1-peng.fan@nxp.com> MIME-Version: 1.0 X-Originating-IP: [92.121.68.129] X-ClientProxiedBy: HK2PR02CA0175.apcprd02.prod.outlook.com (2603:1096:201:21::11) To VI1PR04MB3006.eurprd04.prod.outlook.com (2603:10a6:802:9::12) X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-HT: Tenant X-Microsoft-Antispam: UriScan:; BCL:0; PCL:0; RULEID:(7020095)(4652020)(5600026)(48565401081)(4534165)(4627221)(201703031133081)(201702281549075)(2017052603328)(7153060)(7193020); SRVR:VI1PR04MB3006; X-Microsoft-Exchange-Diagnostics: 1; VI1PR04MB3006; 3:ilooCFkbKa6wHHCsGGF6P3NSlSSMhpEe/BsD70miJ/uiYzVFnPG7Mh1oOXERaA7ib+moyBigxKsUDV8VratxZHw/43dlMsI6PsKmiNk7k1jZujsvDuckWzjysvGtMnXgPH1YB5HONZWzIwX1bFQyKplcGNCZQM++sjS0e8GXmNEFT9t58tV83+OQ1rpxcI9wkoZfmlURQhsEqixzfpUZ9OFpM0ZsP6FrN4SPiSar2+aD8IIHhgROAlb7tKJQJAKJ; 25:gda5n4wte9BiNErU/I3C5PV1VxSWps0PCUHoH4XCD3Q5jHzyGneqlcw2ul+2XDD+3mSqsAvevEJ74k/sk3LvQTbH+onSBUyQL/sfxfpXVYXxn3/otiADzfGqGpXYVnjhgJ5FHkoA27zoFPBWnAygvkxa2oS46wIAD6q3fjYdwGpN37AWmHH7MF3e05eUtBUgGgCfjH92jTvNhY655fxPaKMgdqysNImaI8+KwDkLDCMSeMDHomX7fCuEpNiT7tDzLmgBgFTUIzEEf24mIpwytKa99EWKnzRphKQjrc/ITtknfvIbvsjCNt3wRgfXZEatZVGbQQA0ZaelyoBTNn9Pig==; 31:u3yZSD9jYuD1Tzuz6LRSS0ydTY132+xUShZ6p8w4y7/hl5COMvtC8K0UNvF5LGgwWwjGWnOKaUM38RuErRXkxYRVc9U3Ma5wM7ssSpgGrZ7HgFE5NS/fNB96ePEkZKPNN+aIZx/aFwDU2hF+vu2OLfBp0xhbZ0a4UML8STbR8mCIp567AMsu7AhcI2KI4Gu7WPK7BBkVCsdZHWDk3pPx1J1WhhTXwSnA2VfOuEsR0zM= X-MS-TrafficTypeDiagnostic: VI1PR04MB3006: X-Microsoft-Exchange-Diagnostics: 1; VI1PR04MB3006; 20:jV1nN4CIfGimm45jodZOGGb/kFKd8NjxXCt4QSc2/t/F8iVw8NaM8z2rwDQD48Q89TC868mWUbJL+2w7SuT2Zcp5GP6c6yxTvW93f30mIuhjRRCU1OhHR+GC0OBGkjSt/2ZU6yGatXxei9OquRgfeP9bNe1aBojz1yte7HN8of7IzE0LUKF8wql7KgHxNuaQyi79RUAglPIUhbaByrUxIV5GmtdTeRgn/vqsiJ1/ThMgpscel7Fnt7N2lSmmH2GOgdC9qRie3uJh08+NGRE2bzXu7AkKYYjF1+0r2aFAmbVKLAi7NkWptYpy/FV440irWJ47fO8d45UATJuZsd3IVf85V7t+j8S/r6L9w7cJ8pywjoiYFuHv2EyG2b0gbfhecRNKIWie+tfr+aLxoCVfbLj9ZbMRLspnJqxlE+Z5XztSl2Qel6nQ7o9GeAaoXT+jjNmqB71s/aoFDUiRAJEzvar0yk6l3cYQY1+vRrXYL3T3D7eE15vjoJy44Gx0Eugd; 4:ZbEWKIFcpygqARqNl9EToeD7dguSOVSUfJsasb/g9yUHjuYo7T/dVd114A35CzUQBbjM/aGxl1UWuJwCNZUUZsaJVbmgMVODn8IKEMzHlDQ4KrsxCZCdoiEyxAVLqoUuI/XTgyjhXRMpCIckdUf9wRp+GaalvFPzZBzPGR9GSMfQH+wvi1UAGHMUiKTlbmtWPeOFdARfArTZu7r5rYG9Hm3Z4CPPlIKoF6CBaQq7vLf16E/WnwrgLg7uVjrflf1ZXWoPPjyK4QU0f2vRs3v0to7M/OM8H3qXoTnEk5svK29ZTrOhQKFlvDhcXaeBlPOG X-Microsoft-Antispam-PRVS: X-Exchange-Antispam-Report-Test: UriScan:(185117386973197); X-MS-Exchange-SenderADCheck: 1 X-Exchange-Antispam-Report-CFA-Test: BCL:0; PCL:0; RULEID:(8211001083)(6040522)(2401047)(8121501046)(5005006)(3002001)(93006095)(93001095)(3231254)(944501410)(52105095)(10201501046)(6055026)(149027)(150027)(6041310)(20161123558120)(20161123560045)(201703131423095)(201702281528075)(20161123555045)(201703061421075)(201703061406153)(20161123562045)(20161123564045)(6072148)(201708071742011)(7699016); SRVR:VI1PR04MB3006; BCL:0; PCL:0; RULEID:; SRVR:VI1PR04MB3006; X-Forefront-PRVS: 06860EDC7B X-Forefront-Antispam-Report: SFV:NSPM; SFS:(10009020)(366004)(39380400002)(396003)(39860400002)(376002)(346002)(199004)(189003)(36756003)(97736004)(6636002)(68736007)(86362001)(8676002)(44832011)(8936002)(575784001)(81166006)(81156014)(47776003)(11346002)(956004)(2616005)(476003)(446003)(25786009)(486006)(48376002)(106356001)(105586002)(186003)(50466002)(16526019)(2906002)(6512007)(53936002)(1076002)(66066001)(26005)(51416003)(478600001)(305945005)(54906003)(50226002)(6486002)(5660300001)(6116002)(76176011)(3846002)(16586007)(52116002)(6506007)(4326008)(316002)(7736002)(386003); DIR:OUT; SFP:1101; SCL:1; SRVR:VI1PR04MB3006; H:linux-u7w5.ap.freescale.net.net; FPR:; SPF:None; LANG:en; PTR:InfoNoRecords; A:1; MX:1; Received-SPF: None (protection.outlook.com: nxp.com does not designate permitted sender hosts) X-Microsoft-Exchange-Diagnostics: =?us-ascii?Q?1; VI1PR04MB3006; 23:V/kifu5RRLdRtLIi1oXGckKEjyevhwzcPW8cFMw3X?= NdH/T8kDIfUCGJVXxyuQWl7n8mDAxypaOnTyydXPp3AFcGAZI59xjPhlPdRO0/YRfK6P7PHRiNhgd/WQAUV+9y3YYAWQdm7tABnokEs5exOlP1NA4LEQaq89eV89Jzdf6vExA4i+A9KhFI49FWi++cPqn3Fhz+UUz/xKXBUQCkU7ns3/wyrkLi/WIpGBptwBtTGCSZOgZo31u0KuVcXESandGrK3wfOVgPPd4zvzYh6/RDuH8FvfHEIWa0XeKJhJhkIsIG93MYT9VPXun1HLgYveiOBmbrQ0zY7Xj+KuUXh+udHCR+JaYB/iIdw8GXXmQ9GclqaCgP91bdLCjtO3eJruNdLLnvolEx36y/e+yP2xVuVNLWB8q0D4O+L8I8nfH2pvDRM6FYPYpQk260WzBgn8QSkC9hrnkKUd7p3HXoVGHi3enz5k5cpDlDGzKIvXy7vhSpvXnzHCdjV3ZUuoECbpra7A6meY1TjTccPC+TyP/VvBMGXnaThc53BB36F2pcvfgVZp4E4I8Aj2lhfh1qIcysUv533WzjI6TKfqPDq1c4eUqSLcUiCqhYwdrFmnvOCG6VTJR0U5Ci6906TyM6DEMiz7474P1+BsLhyTKJeR5+LXgXsuOIqQSFKH/V9Vd00v00Y87LW4wL9QxZLl5psc5QiMaaeXSCv/BOR3UBhr9n49oV1h/SoeajkM8Fu6g6dnOqEhv/lJhyyGSMuFuoHe6z6MOtDZ3CLTk7PNDBxfW/135QDZS9q2HZ4XSAexXLdubXgWL6ojFKx+IlH6hhatTwnwyV6zyGVZuT9IIf67kO9B3V/lmmvlY9pdOjDgs556xOTuzuWoHA2ADt9np7wxLg7JxcIu3mnE/ucXzBZ6b5iiiOrPWH0npG0zQncpI9mFZZ3/YMXFRofoMTWRW6pqIcUyLKTyfWanvkKbjozFIEdQXoBbkEVgo2ffS0zvmQI7glu7u4ucQNwD1OHLcvS7YX/OjvHizR2IrrJP+PWAGEs1u30IlHDfhJSGtVYKDgMBd0wlevUsiZHAsZIKOhnHAngpkMBJ0dT4vrD3hcfF1lrw2POjpgkgZQKcgXbh1ljBwHESRkf6tJuSK+w0fftTobLjKtqGVMkSzD3n9iv8f5YC3YS4Q7oIbPoAPBsn4ASsI/Z+22rc0jLyyHNWv+xV3i8bNMyK96mv5AUFTN986N8XB+bLTG1s7k6AhlL9KI= X-Microsoft-Antispam-Message-Info: Xh36nfyEsWgJ1TFwGh+dA45SLWqbWQZCTw0qzIy6QW1I8C5DAxnFBKYtHmKLoG/yXttrXVMqfbM7vxZPipca3yuxYlURUsFGJfzMz+kxFEqQrB+NUBkI/D8AQemACyyj6rRRI7TUhLEOk4q6x7sUavAyHKM+W3giUxfnBXLviNEc810ewUhEKBezieRBrjzg X-Microsoft-Exchange-Diagnostics: 1; VI1PR04MB3006; 6:XIWQprmSHP147ivGD0Hkw1UpYFfn1FyfOO5Hj6Ega54cpdDII3E3FM6jUBSEUo3gSyB0OXtmB0gnDsrbPy2JF2tn/hI1oEhuhlmre6Ken43aokne+0cZsfUxV3cWD2KvZOqJN0eJPCEx7k3sBQT42CTyllhb+awscDB7XAxgUWbHnW6RfFSwnaGOHDg+VgqFYDrlZksupBphHBGIOiboJw99CzRGgGsGpTtGxEzyJZZCrmeJXu60Di5V6i9kZ3TsJPWO9rnib2q+sjBktWpuECcUgF7WMsMszPHfVqYGv1IFzW01+39Hlr7AFieMsZ+BXl1iV8RL588Gtp4QfdD10FkVn9X9uKwQgEqJclnHI0wRqWWgGCrfEFmoZIcLjqFyGq3lUSs6PpdxFxTD+LvLP1EI6gEv49cNuylcr2D1WgfRM/9gmgJqUgRmU3iXzKiokYIBeJaBc84guiFbQXiykg==; 5:OV2sh+SStxhDevz+SSydDLB+bZo6Rswu9ElMjvi9dFZm1S4Drlp+V2vX7QwcSlGeQ/QW68hO0nIxXX1OHipihB1znpAAEEdsav7zDOkenC2GyjOROKx6r98XNXdAVpJu8RN/CYPqI089+I0HWasdvn30VpMZFzmuzOO0JFBHO9A=; 24:22hJF4u2Z4V2Kv7T0wyq1jPKTJjhAXdyU8jBVYdNRoNn7Trf8NC8u3U6Rny/tCWdMGwcgIEMXK8uoJeq/wxoJF2DNo2r9W3tUmunX4PGDmw= SpamDiagnosticOutput: 1:99 SpamDiagnosticMetadata: NSPM X-Microsoft-Exchange-Diagnostics: 1; VI1PR04MB3006; 7:AJ6dFzsvKspwff7WejfL4SqsztJQl+5Oi1QaUyjYFTQJ0iRtQkYR4ns1KD4CrkUXSRhYhh9oKB4beAK428KFSFIxcHNaio8mO1ZaOWmUws64+IvsKSJnasnN2IettuiYV/alK41nqKEQ1nT4W9e5pSHWuPKuomIGYHgzXyghkKtDAw0wMaQZ0CPenUpTNejvmJPw4sIwwnU2Ur0uKrbdJKIbYIi1fW++A6wR3FEbGgrVL9lFgNtEkfScr3a6OLU6 X-MS-Office365-Filtering-Correlation-Id: db3f9683-7f98-408a-40f6-08d5c495d0ef X-OriginatorOrg: nxp.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 28 May 2018 12:23:25.3867 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: db3f9683-7f98-408a-40f6-08d5c495d0ef X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 686ea1d3-bc2b-4c6f-a92c-d99c5c301635 X-MS-Exchange-Transport-CrossTenantHeadersStamped: VI1PR04MB3006 Cc: u-boot@lists.denx.de Subject: [U-Boot] [PATCH 38/41] log: include command header file X-BeenThere: u-boot@lists.denx.de X-Mailman-Version: 2.1.18 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" cmd_tbl_t is defined in command.h, so include it in log.h Signed-off-by: Peng Fan Cc: Simon Glass Reviewed-by: Simon Glass --- include/log.h | 1 + 1 file changed, 1 insertion(+) diff --git a/include/log.h b/include/log.h index a3edd25546..51cfd6fc0b 100644 --- a/include/log.h +++ b/include/log.h @@ -9,6 +9,7 @@ #ifndef __LOG_H #define __LOG_H +#include #include #include From patchwork Mon May 28 12:25:24 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Peng Fan X-Patchwork-Id: 921514 X-Patchwork-Delegate: sbabic@denx.de Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Authentication-Results: ozlabs.org; spf=none (mailfrom) smtp.mailfrom=lists.denx.de (client-ip=81.169.180.215; helo=lists.denx.de; envelope-from=u-boot-bounces@lists.denx.de; receiver=) Authentication-Results: ozlabs.org; dmarc=fail (p=none dis=none) header.from=nxp.com Authentication-Results: ozlabs.org; dkim=fail reason="signature verification failed" (1024-bit key; unprotected) header.d=nxp.com header.i=@nxp.com header.b="OVJpbiyn"; dkim-atps=neutral Received: from lists.denx.de (dione.denx.de [81.169.180.215]) by ozlabs.org (Postfix) with ESMTP id 40vc1N6xYXz9s0y for ; Mon, 28 May 2018 22:41:44 +1000 (AEST) Received: by lists.denx.de (Postfix, from userid 105) id A02F8C21DF8; Mon, 28 May 2018 12:33:46 +0000 (UTC) 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=BAD_ENC_HEADER, RCVD_IN_DNSWL_BLOCKED, SPF_HELO_PASS, T_DKIM_INVALID autolearn=unavailable autolearn_force=no version=3.4.0 Received: from lists.denx.de (localhost [IPv6:::1]) by lists.denx.de (Postfix) with ESMTP id D9468C21DC1; Mon, 28 May 2018 12:28:31 +0000 (UTC) Received: by lists.denx.de (Postfix, from userid 105) id 1304AC21BE5; Mon, 28 May 2018 12:23:36 +0000 (UTC) Received: from EUR03-DB5-obe.outbound.protection.outlook.com (mail-eopbgr40051.outbound.protection.outlook.com [40.107.4.51]) by lists.denx.de (Postfix) with ESMTPS id 5FC65C21E16 for ; Mon, 28 May 2018 12:23:33 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=nxp.com; s=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=Ago4uXnXYvM/q3NBc9nMTddXX+g7h9yG9Si1Y5U60WQ=; b=OVJpbiynnO/1PzkjFxLcuUNFAeBoG0Tx+MZjnzXt4IGlsYHc04ykYxo+fnXjntP1ZsXgpxFOnO30KFTDHSS0CvrPXiq9CjX71rrdS/DjIg3UKZ8kyCjCg2dBrFmjAn0NCNpux2YPdJcgl3B91D5eCX5YJXD+TcuQHav+trCVJYA= Authentication-Results: spf=none (sender IP is ) smtp.mailfrom=peng.fan@nxp.com; Received: from linux-u7w5.ap.freescale.net.net (92.121.68.129) by VI1PR04MB3006.eurprd04.prod.outlook.com (2603:10a6:802:9::12) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384_P256) id 15.20.797.11; Mon, 28 May 2018 12:23:30 +0000 From: Peng Fan To: sbabic@denx.de, fabio.estevam@nxp.com Date: Mon, 28 May 2018 20:25:24 +0800 Message-Id: <20180528122526.20597-40-peng.fan@nxp.com> X-Mailer: git-send-email 2.14.1 In-Reply-To: <20180528122526.20597-1-peng.fan@nxp.com> References: <20180528122526.20597-1-peng.fan@nxp.com> MIME-Version: 1.0 X-Originating-IP: [92.121.68.129] X-ClientProxiedBy: HK2PR02CA0175.apcprd02.prod.outlook.com (2603:1096:201:21::11) To VI1PR04MB3006.eurprd04.prod.outlook.com (2603:10a6:802:9::12) X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-HT: Tenant X-Microsoft-Antispam: UriScan:; BCL:0; PCL:0; RULEID:(7020095)(4652020)(5600026)(48565401081)(4534165)(4627221)(201703031133081)(201702281549075)(2017052603328)(7153060)(7193020); SRVR:VI1PR04MB3006; X-Microsoft-Exchange-Diagnostics: 1; VI1PR04MB3006; 3:LvX4zhnszB4oj7yRonxoSZlix2UgketkbyFk64EO8UamX7RvQR8RrB3xzfUunYgvh51YybtUqA+hvl8pr99uybXW+Zmb9X7DxDShq2IR1MAhjUju/wphCGwBDVw0UpV2bLuaWKzz++bzBKA22hNJZZdbp1pYVeTmcP+kkQUGsuy7WlIxuZbkepa7W4SoPNzF88VsLLIaC5pQqCmlFSuCAKl52ycPEIqsMgoUMUk/SdWZzgKGLLjKP2SARjbcAEfd; 25:XpohtxncEU6osbIcbHuU1GQcJUqL5Kjy/JI+pgpgEOYpfMwdyZIKPj35mSJDuh2riUOmdIbAQrpHC0J6WOvWPqph+BcFFuSU75jkGMsYz+4XWS85C87OH+aVRgjng4kH2TmY728/dilu932YFUQH5jOURCBn56D2TOW+YToraQ8Us1mosaQKBkV0C0xQg5iyzopD1U4ONmIVbjfRp5/S8RpfoKawlxBjgXqnhzgWEi3uuBGGC+FkRBKpHw2ypeFNlIHXOX0qo0TNa0+mrKE7FHZ9y7YxADyPTpBdqUs2+rxZ8dFoe7mIqXiFsdWMS3Hpr0nbc/rZAoYpAJwPv/ZZCQ==; 31:vtg5wMXCbyPGenBACADfCQhrN0wooLkEDBfHj094HZJSheLkvb02ZGZVl0imPF0muLg7Rw219wJZL1iaImKcAFHRlURnuCCcN0UC3aSxh7GiBzjFxktwqroCaXSXlo7YpF9XGVAhDdE45L1FwLn2WOYUtEeeMR4jtpYqewpsOwTuj7T8H4Zx05WrJV2WGn2uhmyjywPyntKYsohGcIES/Xwj+B4sqH/UJGc5zHUnzTw= X-MS-TrafficTypeDiagnostic: VI1PR04MB3006: X-Microsoft-Exchange-Diagnostics: 1; VI1PR04MB3006; 20:/5jLFHyK699HelfY/zfEFzn+M7k+KBnZhy0xMRknyavl/p9QeWZBswiC9yKxFfvacs1dYQwLFs3+G9phiP2Rwm+tv3MECkySgWdq+x2Pkw7Gn4q7rDnyavH2dxro98s1pdX+9RH+JRWWeUz7tqcJhoxv3UHYZPsuY3W8t21gmLV6uJi821v+64uWAmQUSv57Sr872WIlB3oG6pPnw44ypaTXofNdrydo0yNv6MrdqMlTGiU+9kVo6h/ignTCJo79W1GXuMhoE56TXcGG3pEyaQIbGI1DIrYY7dSNjP3qRed0WvjDjyo8bBlkR+5e7SdMnOVGxoNPLtk2oqcX5RTuZiKSSBkE7H2PeaaH5vFvOhr3TlaGGOUU/lnNCYTyaGs7cILFyP+UrRK6rOtLKbrUnA6i3mvU1A3ODFRiUz/k3dMSkq58CRKiELbgqvXt7KqWA1y42LfAqz3yjX3yX56Lq4mvPL4ll9w06uOMNImyRvH4MbGtVUOkonT3fRu26wWV; 4:AdUZOmEocZw2s7TU3Q+21oOf7BM3nKAGs0V032Getyf3bId3IVY65IfIKIo0OhDK6Sovx/IrnDV3Tkfup0xqd1Z4ljzNxdcNAYwzjKGbYE1/Lxn1yrKKRgw8kyHIVZJBRLFFxtOjeyvI7eiheDiPHp+67n6IRR1Os8GIWpfYW4/Wx9oRlGXXOryE2Uf4VtXqfZiDjmVRDKDE2ldk/FKF1ENronKJ2OiUXoZo3+fcIBJoHhnybMqpOajcEs254QcFbNNDmTH16aDQdoRvaIPKWk9sqezCZRQyacIU/JJeChdTS+AaKGTVBIA3rHmKNztE X-Microsoft-Antispam-PRVS: X-Exchange-Antispam-Report-Test: UriScan:(185117386973197); X-MS-Exchange-SenderADCheck: 1 X-Exchange-Antispam-Report-CFA-Test: BCL:0; PCL:0; RULEID:(8211001083)(6040522)(2401047)(8121501046)(5005006)(3002001)(93006095)(93001095)(3231254)(944501410)(52105095)(10201501046)(6055026)(149027)(150027)(6041310)(20161123558120)(20161123560045)(201703131423095)(201702281528075)(20161123555045)(201703061421075)(201703061406153)(20161123562045)(20161123564045)(6072148)(201708071742011)(7699016); SRVR:VI1PR04MB3006; BCL:0; PCL:0; RULEID:; SRVR:VI1PR04MB3006; X-Forefront-PRVS: 06860EDC7B X-Forefront-Antispam-Report: SFV:NSPM; SFS:(10009020)(366004)(39380400002)(396003)(39860400002)(376002)(346002)(199004)(189003)(36756003)(97736004)(6636002)(6666003)(68736007)(86362001)(8676002)(44832011)(8936002)(81166006)(81156014)(47776003)(11346002)(956004)(2616005)(476003)(446003)(25786009)(486006)(48376002)(106356001)(105586002)(186003)(50466002)(16526019)(2906002)(6512007)(53936002)(1076002)(59450400001)(66066001)(26005)(51416003)(478600001)(305945005)(50226002)(6486002)(5660300001)(6116002)(76176011)(3846002)(16586007)(52116002)(6506007)(4326008)(316002)(7736002)(386003); DIR:OUT; SFP:1101; SCL:1; SRVR:VI1PR04MB3006; H:linux-u7w5.ap.freescale.net.net; FPR:; SPF:None; LANG:en; PTR:InfoNoRecords; A:1; MX:1; Received-SPF: None (protection.outlook.com: nxp.com does not designate permitted sender hosts) X-Microsoft-Exchange-Diagnostics: =?us-ascii?Q?1; VI1PR04MB3006; 23:EDw3zWw/Shhg7TlQ6fsuQVzwZO+IRRfLMOuSZvmIe?= vXEFrUzzT4ejJOCCfb+jFWE0tAGXKNKEm1O9Ac/D6Dhq0GPVfemwgyHVrxUdwTs8K5vvpOl49dV8qwCJ1TC4jt8QvM6WKfF+sQFSSslBg+fGks/+9KfHkMkYoCp81DafHgo0Wmw9oHoD3IaUrW45TnYS5lnt2Aw1DXjsTUcz/QrgbYC5yhtcTdtVsF+tq3wngXyCDmwi+CS0SmYat24zOiqjOfTPrgYjaDuEkZ/EFC87ocFa3sCgsDbLNucoSaLujkEnHfeuoCig8+vNHCNmKBi5Kj9t3ZgCNnRCDKA+Wp6MhoQpr8f4sPtetzQekllS4VNwTq+jNO/uD8WL4+AmcWSHL5ZMidwDZAHUeQ6iCi/zcf97ffVab8sdsOIDwqhKCBFIWltGUB9hiEX1DiFtzCQJ+KhbFN9kgUBkWiB5Jop2mF5vNXPgmJdkQEwfjYm61sn3LR1sLDbzJiq8jcJ/6HmN890SeocE6p7oYA+UisOiaBAGImNOySde4QXGSAE7250JGkNWCmHTwv8YXND/K+xtkZ7EBvNfQWW1Hnep4kxnrZpMLQuktxR1RnwSQsCQfJe2M7f16gWPHFHB9R4UnEPu3cMXD9nn1RbWfvZCMIfZjKeUje5HDW2YB+N6/dc1zuMWawgizC3ADKixGdRfXkuFSEVHGOWCHYdnTy5cN5z8FQP6w2nY8mDrw5gio9smTyWOkYKKkBstp3xaqe6i+DHZRINu7A7QywMnuDavqVBYUmFLQpXoQfPnbtzzENfRDAacrtjCV1lh+rvANnXBRG8dEBjR1DZ6aVTD/CfwR7VLat+Eogsb8Up7z9JaPKQF/H9yTbBxBfrHV9yicm04XPJ7CZKzrCOen3cbwyWmkhQuLbQwrfEmAo1XwhfwE1ghFmTnFfzpLv3vIs5qE6hHQZ6yzvz/th57USntuAywDaW0NRQVDTnrfMg9d4Ajq0zV+AelCzNy4dat2mDeWsm9xVGzPBI6oC5M96e57KUaRS6sdBIWJ2dveirIGviNjzWCK0KmzMLRnjDiSo/rogP+FJ+xY7/4HpEzkPsfy51o6EaNOXydm+FCXnTHa1YI46ULETavPmzvK0iyZ8Trc9xodEFXzg0qEvYn+ilxKJAB8z0osn0zVDZShIj+mhvz4yUkgzc03MuXdX2jqykczJM/QRNNvehhv+hwR+W/vQZInNXJdJiiN8NTVNnxHMR9w+Rjbc= X-Microsoft-Antispam-Message-Info: ZQMy2x8MrKwr1gxUGpa2ob03Sd6Y66TceZH41MdpCZWvw7N+tZw3dn8OeTCZyqQRC9llRE1IcytXBXqIqT6ZWnGY328PeQTWc5VYNtjFx7pp/WkI9dB26u4+BtFKx4wgMSJ7eUe1b7V15A443G9S8/6rUsGj32S5lHGPJKx/BDhR3G1F1wPLj6PHTuuU1XeQ X-Microsoft-Exchange-Diagnostics: 1; VI1PR04MB3006; 6:AbmyTYAACNMbDSe2/yItTfw8QTkfinOF8y4FCGCwY/SiHq1fuuoUMJk0rM7HVg9A2iFL0Y+K7jqE/vy/OJn8qULaVKOqKGpQPOa12M6/lK9oqx/4taiVfbBZsoDLcHK0j6gMoi5tQCbzuOAOoaGJTMQK9ytJo21ieLI82byVkC+UTXIijLkczVILQ0H9MnTP0jYMur5AnL0KZEIhKOF399/pwuksTdvfWfw9V4O79YnJqaUQE1ou5Ddp9tp+qHtVlIHzfH/UUhEAeEDeN/X8GyfmmgDYjwN+jcyHvY8Ko1MA0mjiqnp/+m4rNvecfHV+mBVXgDgjcMafoQBZMwq35VUsCXqzF/fwL53iU6wS9pZ48BWHNBjB5w95djqRGYl2NPtkU5q2UlZQsGY7aaQxr1zd5aACbJ+GBEGMR7lLNe4DqOX/nqAqHSG6zUpGCfbb4pSaJ9CcsonOisgStg1WrQ==; 5:E7W1kb5dbyTP8vz6dU0D5bhvF4Yf6EYyqk/BYjqyocvQGRDPxOqVMoAM+zZcgUCkXC4vMQn4Sr1Ev75IqzF4nE7ZRxdFPEidf0gV1rqJunrF4wD716qpgN2/0U7dmwVNqyB9Gzmre4rdMGNfWgM26cywEz/kG3QAOq4nfm2fkLU=; 24:tDhjYzXw9+qMfB/dAfyIpowyEHILd5UcLO+OMf7mK1+0TYGA6YIV8WuYAmdNw/icZ18CZnQ70wPrEgJTzK46bG32VTKQv8nw7GUo7wHF2+0= SpamDiagnosticOutput: 1:99 SpamDiagnosticMetadata: NSPM X-Microsoft-Exchange-Diagnostics: 1; VI1PR04MB3006; 7:KV/LZcb3zYTAn6WSOOVeEq9BWs4t5U9CbKYE+mYLLhU/+igPMOcqcJM649rUk4KkymEmD3Xf2ieQKJriLQaHoLm8W3EBZv8DbZxXRHolFgXm273JCpdT9OPFTskAK2QrFR4Aug74NAzbkIt+zs3ldavFwJ3ODhfoe/ZhAPBWiI2xunPPuVo6g7bT+Rs/lgndWvdhWJE8gmhnLFWMP0+qNwSqafjMS8cBNprMtsHYfSNZpSlRRyVqI6yAPsu9GpAY X-MS-Office365-Filtering-Correlation-Id: 41d029eb-8040-4c5e-3817-08d5c495d38d X-OriginatorOrg: nxp.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 28 May 2018 12:23:30.1680 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: 41d029eb-8040-4c5e-3817-08d5c495d38d X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 686ea1d3-bc2b-4c6f-a92c-d99c5c301635 X-MS-Exchange-Transport-CrossTenantHeadersStamped: VI1PR04MB3006 Cc: u-boot@lists.denx.de Subject: [U-Boot] [PATCH 39/41] i2c-mux: pca954x: support pca9646 i2c switch X-BeenThere: u-boot@lists.denx.de X-Mailman-Version: 2.1.18 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" Add the PCA9646 support, which is 2-wire bus switch and buffered 4-channel. Signed-off-by: Peng Fan --- drivers/i2c/muxes/pca954x.c | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/drivers/i2c/muxes/pca954x.c b/drivers/i2c/muxes/pca954x.c index 4debc03957..ab8b4000af 100644 --- a/drivers/i2c/muxes/pca954x.c +++ b/drivers/i2c/muxes/pca954x.c @@ -17,7 +17,8 @@ DECLARE_GLOBAL_DATA_PTR; enum pca_type { PCA9544, PCA9547, - PCA9548 + PCA9548, + PCA9646 }; struct chip_desc { @@ -51,6 +52,11 @@ static const struct chip_desc chips[] = { .muxtype = pca954x_isswi, .width = 8, }, + [PCA9646] = { + .enable = 0x0, + .muxtype = pca954x_isswi, + .width = 4, + }, }; static int pca954x_deselect(struct udevice *mux, struct udevice *bus, @@ -86,6 +92,7 @@ static const struct udevice_id pca954x_ids[] = { { .compatible = "nxp,pca9544", .data = PCA9544 }, { .compatible = "nxp,pca9547", .data = PCA9547 }, { .compatible = "nxp,pca9548", .data = PCA9548 }, + { .compatible = "nxp,pca9646", .data = PCA9646 }, { } }; From patchwork Mon May 28 12:25:25 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Peng Fan X-Patchwork-Id: 921518 X-Patchwork-Delegate: sbabic@denx.de Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Authentication-Results: ozlabs.org; spf=none (mailfrom) smtp.mailfrom=lists.denx.de (client-ip=81.169.180.215; helo=lists.denx.de; envelope-from=u-boot-bounces@lists.denx.de; receiver=) Authentication-Results: ozlabs.org; dmarc=fail (p=none dis=none) header.from=nxp.com Authentication-Results: ozlabs.org; dkim=fail reason="signature verification failed" (1024-bit key; unprotected) header.d=nxp.com header.i=@nxp.com header.b="Y/I51QC8"; dkim-atps=neutral Received: from lists.denx.de (dione.denx.de [81.169.180.215]) by ozlabs.org (Postfix) with ESMTP id 40vc582C9Mz9s0q for ; Mon, 28 May 2018 22:45:00 +1000 (AEST) Received: by lists.denx.de (Postfix, from userid 105) id C4DCFC21DC1; Mon, 28 May 2018 12:37:51 +0000 (UTC) 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=BAD_ENC_HEADER, RCVD_IN_DNSWL_BLOCKED, SPF_HELO_PASS, T_DKIM_INVALID autolearn=unavailable autolearn_force=no version=3.4.0 Received: from lists.denx.de (localhost [IPv6:::1]) by lists.denx.de (Postfix) with ESMTP id 8D113C21E30; Mon, 28 May 2018 12:33:27 +0000 (UTC) Received: by lists.denx.de (Postfix, from userid 105) id 3D022C21DFD; Mon, 28 May 2018 12:23:42 +0000 (UTC) Received: from EUR01-HE1-obe.outbound.protection.outlook.com (mail-he1eur01on0041.outbound.protection.outlook.com [104.47.0.41]) by lists.denx.de (Postfix) with ESMTPS id D3639C21DE8 for ; Mon, 28 May 2018 12:23:37 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=nxp.com; s=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=LWDJAyJyTOFpWI91u9RmbGY4qDEVUnvqzo26NZzTnYw=; b=Y/I51QC8pC2PpDhMLgtMqUhe7iYuhW2Gdq6mUBNCprV6aO2nu+lkjM2P8piIKUgMqu6u1ivrQOKNa8m8pBam6+JVsuoMIoezMvwhLaWR0VIXV/tyMs5s+FFxrpVZ3Nb+arDCX2eh3aj9jpVfqU1nS+upYYnwRvPig0TL/FuF5kM= Authentication-Results: spf=none (sender IP is ) smtp.mailfrom=peng.fan@nxp.com; Received: from linux-u7w5.ap.freescale.net.net (92.121.68.129) by VI1PR04MB3006.eurprd04.prod.outlook.com (2603:10a6:802:9::12) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384_P256) id 15.20.797.11; Mon, 28 May 2018 12:23:33 +0000 From: Peng Fan To: sbabic@denx.de, fabio.estevam@nxp.com Date: Mon, 28 May 2018 20:25:25 +0800 Message-Id: <20180528122526.20597-41-peng.fan@nxp.com> X-Mailer: git-send-email 2.14.1 In-Reply-To: <20180528122526.20597-1-peng.fan@nxp.com> References: <20180528122526.20597-1-peng.fan@nxp.com> MIME-Version: 1.0 X-Originating-IP: [92.121.68.129] X-ClientProxiedBy: HK2PR02CA0175.apcprd02.prod.outlook.com (2603:1096:201:21::11) To VI1PR04MB3006.eurprd04.prod.outlook.com (2603:10a6:802:9::12) X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-HT: Tenant X-Microsoft-Antispam: UriScan:; BCL:0; PCL:0; RULEID:(7020095)(4652020)(5600026)(48565401081)(4534165)(4627221)(201703031133081)(201702281549075)(2017052603328)(7153060)(7193020); SRVR:VI1PR04MB3006; X-Microsoft-Exchange-Diagnostics: 1; VI1PR04MB3006; 3:Ir0mS7benZIp2LKrcu2VOtL00QJYJfUZ/L8ljeG/qNZntTdkqfSmoZVpGd6J6WvJ/yRPW+X5m1ww4LHQNQ6YKuJKDddiZsxztWP/8C602FxmiqDzt4lxB0BcgFXNkLl/vXEBNvw7/jDXeMqc4+p0/5dIJyUX5dI/rJB/omsr857Td4TeBuABbyC4/Vz93WwdAhV+i0pBvHeJIxO5GgEUZKFB+pnu57fKR+qGXIfbSkxkrM5C78xbUYPNM61Zn+9u; 25:rRje1d0mfkjIMTNb9JZH7rCppcRwGMGKk95dnQv0+b81fOHHHFU/zb/HcOn25m9s9ifwCjtEGGHS3yqYeRjyoag58g6v7ySQoq0oMJtT+9Qn3YVRNHxIrYAlFhpXS8GtgEFIjCsBeqpfC7dli6KLfZqwwPO4F+eXpfyTFiSYbfqWt1f5wC2etXeWdP3lwBzAd5ndWUqlNxa9R+4JRBViuVjJBInqs1NkQ4twi81RT87Po+7t8NLPFw11iIuE+hJDLVtzy9ueM9hamm1xub855oK9of6HSEkGt41Z6+YRKVOoPwk3RA8cGXZyM272AOrepo+08z7+PFlCpcUKd9wfVQ==; 31:fcdKycU+CKHCbLQpktOPgpKiQkqzJItW6JM9UpgyyGg1voE68Q2MAV0t6dcBW801YcU+Ja6rhYqhBvybgNjy/4SkfnkDel/m1tHrskiwQxeXkjRFDDoB3oNde9k2DAbER2TtqrpWMbdTpz2jhsT7Kk3kss57EAvB3TZzlYJh1ScGNqHizw9UQtXA7yCN4NuK/eu1J7F9vLOyNwQtDX+CmaS5+njl+tcB098hNOtVdcY= X-MS-TrafficTypeDiagnostic: VI1PR04MB3006: X-Microsoft-Exchange-Diagnostics: 1; VI1PR04MB3006; 20:gP4TQFU/ECE7iX9yx4EV8IN6Hddhq16lwvsf/7snGppBvLaE27TcoZUDzuvcXURvLwVdUPGZJFEZN6uT0oUBGQGswzXQCuDKYZpfvl7rzZJHiwf2RCSeKh2Y3c+lgfhHpDDYPXuirh0RgDa4k5vZH86nrXhbISopK7RexK4Hn7hdqFboaBJLI93Qz2Ez7FrJ7yuYNu8iYb2/qLHroyiFYqOo7ELmTbLp/YxeDjJSt2rh7uqpMXgwpNty7LIto8wfB+/xbseVIzFLhwgi3qy3jm/Ck1tgPGV/52MFYQEuVb42XW0D6qmO5ZT711ksr3DHvGOIIL3Aa4B/gbWTRDO77ARZz6PkiHMSVvOVvwjI1jlY3OIQqsDcM0d4OkW09uv4DXngwD77bPjbhh5GMaMBDUyVNwhNW2UwxDJ4x6AC4nAg6Cl3A+6lliEdZDOc8X8kbburQf4AmR4wCaaqdgWHH6rXauVVkSZh/p+43eVoDtx+R7Si9eYNQK37WfGZtPax; 4:pKUniOW4mTvQS9xHM8DEru9b811b+TSD6ahSSBMukxIdENPhdPK5xHikL/X83DA1fYmTFboVKQHwn2pbAKgXdD7TemLFUlkyCk+0k9EV8rjVSzaCLvUBbO89fYRpxwV1CJvEFS+/4vw2ZQXNEtSNX7reSc3BKIXwY4p6/W4J6Of9HtSsFYy69baWFe9xwtpT/L2iNHM8Mb4/JzXr+bjDa8v+MDP62StYhn9QnhfFsGxOduyJnOdRTJVN1w3xrZRQitxNL1dPMYvI19FMIoeMSNeZZcnznQ4QaUdzItHupUdiuGWfxqBd6YAYNzJtuLNF X-Microsoft-Antispam-PRVS: X-Exchange-Antispam-Report-Test: UriScan:(185117386973197); X-MS-Exchange-SenderADCheck: 1 X-Exchange-Antispam-Report-CFA-Test: BCL:0; PCL:0; RULEID:(8211001083)(6040522)(2401047)(8121501046)(5005006)(3002001)(93006095)(93001095)(3231254)(944501410)(52105095)(10201501046)(6055026)(149027)(150027)(6041310)(20161123558120)(20161123560045)(201703131423095)(201702281528075)(20161123555045)(201703061421075)(201703061406153)(20161123562045)(20161123564045)(6072148)(201708071742011)(7699016); SRVR:VI1PR04MB3006; BCL:0; PCL:0; RULEID:; SRVR:VI1PR04MB3006; X-Forefront-PRVS: 06860EDC7B X-Forefront-Antispam-Report: SFV:NSPM; SFS:(10009020)(366004)(39380400002)(396003)(39860400002)(376002)(346002)(199004)(189003)(36756003)(97736004)(6636002)(6666003)(68736007)(86362001)(8676002)(44832011)(8936002)(575784001)(81166006)(81156014)(47776003)(11346002)(956004)(2616005)(476003)(446003)(25786009)(486006)(48376002)(106356001)(105586002)(186003)(50466002)(16526019)(2906002)(6512007)(53936002)(1076002)(59450400001)(66066001)(26005)(51416003)(478600001)(305945005)(50226002)(6486002)(5660300001)(6116002)(76176011)(3846002)(53946003)(16586007)(52116002)(16200700003)(6506007)(4326008)(316002)(7736002)(386003)(2004002)(32563001)(569006); DIR:OUT; SFP:1101; SCL:1; SRVR:VI1PR04MB3006; H:linux-u7w5.ap.freescale.net.net; FPR:; SPF:None; LANG:en; PTR:InfoNoRecords; A:1; MX:1; Received-SPF: None (protection.outlook.com: nxp.com does not designate permitted sender hosts) X-Microsoft-Exchange-Diagnostics: =?us-ascii?Q?1; VI1PR04MB3006; 23:Ou0roV8dSBNwHBvw532x9o/7KqrGiBcSV4jkKet2G?= LUhc4A+vlg84i8xTG0t0TEPaFMxClK/0jTbO5nP3mPXR+8FuB4F9KEgcRaa9+IsO/hlwd/bYd3Sv3mZt3+QUTgDCv4y9adrTWBvY0i7f4Qxsa814qS3rnU2uHKHCrBIkEw+jM7/mFUDU1y5DjCy/BzhKhQgvmzIU4LwKy6bHMHiGOw8ec01LW40riIYQtO66hiKUk+UYIJO6xhIz/5ceifeRbtAq2zRc5v6pnMsPY/eQ1pzJHQHYgG3vaxPwL3uI30pFtR3WaVTGDdHRmmFUp/CkdfGHz7M6z/uo2m14+yJyOMA1VYKAm/gw0RSYYbnzXFUR662qQgWVOiQgU48gHyQjHZ1vTEGfkuHuDj3Dif9ciIOEwvedOdGzyjPa/F/EGdSVuG8IIwcvYUSGX+TYen9xbdUkH3esr9a85e/7ncx28wHJSTJDSZexBpJN53jcgUWmzgqgj9IT+im9Slw4crAI0hc6IXJMNtoDO2m+/dkTJJ1L3oFxYZW16hlEM4sSlk4RBl4M4IDjXYOvHSRFr4wSbJlHYJT+rIK7RwWXFNHsVxau6mORTlHLII1slGRAaj+vGjmwAUiqUa8m+VNYuRHGcES0/YfHaAt3RnO8xUKEsLPpn5ruY0CX8MblMH4wlvpsqLXMh7I+/uVnzuySjAKN0pIny1pBzC9wV2h+xz6ysf5p/H1mf+d2Wztdi0DQ57MTGwy5K8ouVbsIJpxYZ+kV1/mOJA6slB/GNyI4Tg72PJp9/d5n/VOsEDgWIi1WP0Kglg/r/uCLcu4vypNeGWefH1g1tbhEy1EiLTxYfx2uT13Lh32hqpPAFcmN2QQJTXV3orbJ7iAafI7S/iEr5K/GfvPLnvVjRg6k/XB6HkKbWytwARLIHSVg80Wg2vZjhKfByQ8GKXZ1UcQH4gLhjBjsAZuN/6E37p2QJcazchdhrCHuKjmgr9+evCSInQ8bSwXTY9XECxgkvGbda5LZcgYjriGmO1jDtL2JRmxsHwcaznOg2GWnob2Hp2prAYRx4uhI8C9oos5zB5JmSgRFeLPaKn5h6tuXwq5aBGtlj6uoSBtb9/mhJGfJsBUDRnmVtoJBCYE3Y6fOx1wozCF/U2M5DlVnlTnweq6lL9D0cQOYeVeNAtVwxMSleUeKOdbu/A7M1lUOo3IAD7gePwU3pz3qeRNzbfNV8BQ8xP9tpBOD8Fltmq1/G4CsxcNoOw82oG9kuRo+qrVO+JFA3OVqrnu/LLGzlkHm7ApLskmEOuQEVOy27PKJISFzpMHAVtRKYf0tz6rnn5eWxerNe4B4fWnd/GUB2XLtN2c1cDlNeFps9k8m2hK8Yp01VXl7ehDcaE= X-Microsoft-Antispam-Message-Info: tK0mv3tRYmAa8gxOCVEw352wH63fT1RsW051ozrlpYFXNef+AczN8GjQl3mefLYDujz6Iq6hL0lNZyEzmfAbULcEQZ1z8m9j0ULS7BzIo0tUw8oChmdAepZ3zcJF0AAtkdL4QrCAxkN6YqiJau949r7riTXJLF2P2Zv9Z2MjIfckpEg6N0fHHS6fE6yD+Oq/ X-Microsoft-Exchange-Diagnostics: 1; VI1PR04MB3006; 6:uhHYuKNeb6l3J3jy43vYaxk7C/CrFNa/YwSf+SsCu25PQC7Yb0JlUGA/AobHn7aUL5c3wbwp35HGTUyJN3IB9IoZ5Y87BcGwiK2HTCVlqJ1j8VL54Jwr7O2gs/l0StVG2snmZNgSsEalJOnwaKcHl8yKny0VJ6WNzQjHPDczZ2QD75+t5aPXmfuJiOqElA1E0CUUGV+7/tF7C6UxllRKkD9ajpAwDSJyvsQGcGZ+SXf4NnN872AcVzP18VFOVoyZVXklFxWDYRww1kcGdx54mov/d/srb8Rckwlx+Fe6bneXgPgUiV9DtjnH7oLrr5kcoUR6IHeOgJ9cHIAqHLmnhRyNthbeayWeP8oPqDetpIdt5UAYpDSrxSdqikJcC6/g7ObImlPV05Iin5k5CS/prTdhjCu92Y7fkqJr5m+Be5deunx1sayI6RdztxC4h01Ba/9LIzeC+WCmGBkRUimKog==; 5:8glkp0a5elr6SNClyLftzdhiGEbDP5omv09wrvRbjzDMbtNdd2+IHzfqMHhTyz9Qycy7CVjlvI0uxPwYs8Ydq4sczTGSAu2/+ghDIZDGdzuuloVtdV+XzzZ4E9JQp+xVLDp+EI3Yjox8wZAaF9nwhT6Qywh2PnRJM0hkiyVwvmo=; 24:mtLjZNAngG2q4ltxQ7NpAoaf2ZnZIUgUS7qdiA8xfz3uenDuGV6qA2lkAvRXZ1ecc5vI/CNUwR8jn95uQ8/pjyWK9ccBjue1qzcNzsnq9vQ= SpamDiagnosticOutput: 1:99 SpamDiagnosticMetadata: NSPM X-Microsoft-Exchange-Diagnostics: 1; VI1PR04MB3006; 7:5agbZ9Y+bxch9ehZQzh9xiD6oTLevvloX74Im2MzGHo9PDUDpo2zyKN/64Abal/c4vL4QfyWk5wr/G7AJcEJ918pOFiFq4ybE/H0e87HOlP4gFRISprLsqzXjWZhdaKakRdjosDx9XDXz54ShodH4jFpujzUBUFWuFU7BqipiRO6fUiW5EDht2LF3FJtPJ6evuE2u/cl3jab2TIZKG0nz4LOm3rl0LvFI4Zl5WptM5pwyp7507nvJXjKUoJWhSqi X-MS-Office365-Filtering-Correlation-Id: d08a63a8-74bb-4df1-87ee-08d5c495d541 X-OriginatorOrg: nxp.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 28 May 2018 12:23:33.0118 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: d08a63a8-74bb-4df1-87ee-08d5c495d541 X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 686ea1d3-bc2b-4c6f-a92c-d99c5c301635 X-MS-Exchange-Transport-CrossTenantHeadersStamped: VI1PR04MB3006 Cc: u-boot@lists.denx.de Subject: [U-Boot] [PATCH 40/41] dts: imx8qxp: Add DTS and binding header files X-BeenThere: u-boot@lists.denx.de X-Mailman-Version: 2.1.18 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" Introduce dtsi file for i.MX8QXP. Signed-off-by: Peng Fan --- arch/arm/dts/Makefile | 2 + arch/arm/dts/fsl-imx8qxp-mek.dts | 416 ++++++++ arch/arm/dts/fsl-imx8qxp.dtsi | 1593 +++++++++++++++++++++++++++++ include/dt-bindings/clock/imx8qxp-clock.h | 533 ++++++++++ include/dt-bindings/soc/imx8_pd.h | 197 ++++ 5 files changed, 2741 insertions(+) create mode 100644 arch/arm/dts/fsl-imx8qxp-mek.dts create mode 100644 arch/arm/dts/fsl-imx8qxp.dtsi create mode 100644 include/dt-bindings/clock/imx8qxp-clock.h create mode 100644 include/dt-bindings/soc/imx8_pd.h diff --git a/arch/arm/dts/Makefile b/arch/arm/dts/Makefile index a0349a8975..da9cdeef1e 100644 --- a/arch/arm/dts/Makefile +++ b/arch/arm/dts/Makefile @@ -432,6 +432,8 @@ dtb-$(CONFIG_MX7) += imx7-colibri.dtb \ dtb-$(CONFIG_ARCH_MX7ULP) += imx7ulp-evk.dtb +dtb-$(CONFIG_ARCH_IMX8) += fsl-imx8qxp-mek.dtb + dtb-$(CONFIG_RCAR_GEN3) += \ r8a7795-h3ulcb.dtb \ r8a7795-salvator-x.dtb \ diff --git a/arch/arm/dts/fsl-imx8qxp-mek.dts b/arch/arm/dts/fsl-imx8qxp-mek.dts new file mode 100644 index 0000000000..55960d0a67 --- /dev/null +++ b/arch/arm/dts/fsl-imx8qxp-mek.dts @@ -0,0 +1,416 @@ +/* + * Copyright 2017 NXP + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License + * as published by the Free Software Foundation; either version 2 + * of the License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + */ + +/dts-v1/; + +/* First 128KB is for PSCI ATF. */ +/* Last 127M is for M4/RPMSG */ +/memreserve/ 0x80000000 0x08000000; + +#include "fsl-imx8qxp.dtsi" + +/ { + model = "Freescale i.MX8QXP MEK"; + compatible = "fsl,imx8qxp-mek", "fsl,imx8qxp"; + + aliases { + i2c4 = &bb_i2c1; + i2c5 = &mfi_i2c1; + i2c6 = &i2cexp1_i2c1; + i2c7 = &i2cexp2_i2c1; + }; + + chosen { + bootargs = "console=ttyLP0,115200 earlycon=lpuart32,0x5a060000,115200"; + stdout-path = &lpuart0; + }; + + regulators { + compatible = "simple-bus"; + #address-cells = <1>; + #size-cells = <0>; + + reg_usdhc2_vmmc: usdhc2_vmmc { + compatible = "regulator-fixed"; + regulator-name = "SD1_SPWR"; + regulator-min-microvolt = <3000000>; + regulator-max-microvolt = <3000000>; + gpio = <&gpio4 19 GPIO_ACTIVE_HIGH>; + enable-active-high; + startup-delay-us = <100>; + off-on-delay-us = <12000>; + }; + + reg_usb_otg1_vbus: regulator@0 { + compatible = "regulator-fixed"; + reg = <0>; + regulator-name = "usb_otg1_vbus"; + regulator-min-microvolt = <5000000>; + regulator-max-microvolt = <5000000>; + gpio = <&pca9557_b 2 GPIO_ACTIVE_HIGH>; + enable-active-high; + }; + + }; +}; + +&iomuxc { + pinctrl-names = "default"; + imx8qxp-mek { + + pinctrl_lpuart0: lpuart0grp { + fsl,pins = < + SC_P_UART0_RX_ADMA_UART0_RX 0x06000020 + SC_P_UART0_TX_ADMA_UART0_TX 0x06000020 + >; + }; + + pinctrl_fec1: fec1grp { + fsl,pins = < + SC_P_ENET0_MDC_CONN_ENET0_MDC 0x06000048 + SC_P_ENET0_MDIO_CONN_ENET0_MDIO 0x06000048 + SC_P_ENET0_RGMII_TX_CTL_CONN_ENET0_RGMII_TX_CTL 0x06000048 + SC_P_ENET0_RGMII_TXC_CONN_ENET0_RGMII_TXC 0x06000048 + SC_P_ENET0_RGMII_TXD0_CONN_ENET0_RGMII_TXD0 0x06000048 + SC_P_ENET0_RGMII_TXD1_CONN_ENET0_RGMII_TXD1 0x06000048 + SC_P_ENET0_RGMII_TXD2_CONN_ENET0_RGMII_TXD2 0x06000048 + SC_P_ENET0_RGMII_TXD3_CONN_ENET0_RGMII_TXD3 0x06000048 + SC_P_ENET0_RGMII_RXC_CONN_ENET0_RGMII_RXC 0x06000048 + SC_P_ENET0_RGMII_RX_CTL_CONN_ENET0_RGMII_RX_CTL 0x06000048 + SC_P_ENET0_RGMII_RXD0_CONN_ENET0_RGMII_RXD0 0x06000048 + SC_P_ENET0_RGMII_RXD1_CONN_ENET0_RGMII_RXD1 0x06000048 + SC_P_ENET0_RGMII_RXD2_CONN_ENET0_RGMII_RXD2 0x06000048 + SC_P_ENET0_RGMII_RXD3_CONN_ENET0_RGMII_RXD3 0x06000048 + >; + }; + + pinctrl_fec2: fec2grp { + fsl,pins = < + SC_P_ESAI0_SCKR_CONN_ENET1_RGMII_TX_CTL 0x06000048 + SC_P_ESAI0_FSR_CONN_ENET1_RGMII_TXC 0x06000048 + SC_P_ESAI0_TX4_RX1_CONN_ENET1_RGMII_TXD0 0x06000048 + SC_P_ESAI0_TX5_RX0_CONN_ENET1_RGMII_TXD1 0x06000048 + SC_P_ESAI0_FST_CONN_ENET1_RGMII_TXD2 0x06000048 + SC_P_ESAI0_SCKT_CONN_ENET1_RGMII_TXD3 0x06000048 + SC_P_ESAI0_TX0_CONN_ENET1_RGMII_RXC 0x06000048 + SC_P_SPDIF0_TX_CONN_ENET1_RGMII_RX_CTL 0x06000048 + SC_P_SPDIF0_RX_CONN_ENET1_RGMII_RXD0 0x06000048 + SC_P_ESAI0_TX3_RX2_CONN_ENET1_RGMII_RXD1 0x06000048 + SC_P_ESAI0_TX2_RX3_CONN_ENET1_RGMII_RXD2 0x06000048 + SC_P_ESAI0_TX1_CONN_ENET1_RGMII_RXD3 0x06000048 + >; + }; + + pinctrl_lpi2c1: lpi1cgrp { + fsl,pins = < + SC_P_USB_SS3_TC1_ADMA_I2C1_SCL 0x06000020 + SC_P_USB_SS3_TC3_ADMA_I2C1_SDA 0x06000020 + >; + }; + + pinctrl_usdhc1: usdhc1grp { + fsl,pins = < + SC_P_EMMC0_CLK_CONN_EMMC0_CLK 0x06000041 + SC_P_EMMC0_CMD_CONN_EMMC0_CMD 0x00000021 + SC_P_EMMC0_DATA0_CONN_EMMC0_DATA0 0x00000021 + SC_P_EMMC0_DATA1_CONN_EMMC0_DATA1 0x00000021 + SC_P_EMMC0_DATA2_CONN_EMMC0_DATA2 0x00000021 + SC_P_EMMC0_DATA3_CONN_EMMC0_DATA3 0x00000021 + SC_P_EMMC0_DATA4_CONN_EMMC0_DATA4 0x00000021 + SC_P_EMMC0_DATA5_CONN_EMMC0_DATA5 0x00000021 + SC_P_EMMC0_DATA6_CONN_EMMC0_DATA6 0x00000021 + SC_P_EMMC0_DATA7_CONN_EMMC0_DATA7 0x00000021 + SC_P_EMMC0_STROBE_CONN_EMMC0_STROBE 0x06000041 + >; + }; + + pinctrl_usdhc1_100mhz: usdhc1grp100mhz { + fsl,pins = < + SC_P_EMMC0_CLK_CONN_EMMC0_CLK 0x06000040 + SC_P_EMMC0_CMD_CONN_EMMC0_CMD 0x00000020 + SC_P_EMMC0_DATA0_CONN_EMMC0_DATA0 0x00000020 + SC_P_EMMC0_DATA1_CONN_EMMC0_DATA1 0x00000020 + SC_P_EMMC0_DATA2_CONN_EMMC0_DATA2 0x00000020 + SC_P_EMMC0_DATA3_CONN_EMMC0_DATA3 0x00000020 + SC_P_EMMC0_DATA4_CONN_EMMC0_DATA4 0x00000020 + SC_P_EMMC0_DATA5_CONN_EMMC0_DATA5 0x00000020 + SC_P_EMMC0_DATA6_CONN_EMMC0_DATA6 0x00000020 + SC_P_EMMC0_DATA7_CONN_EMMC0_DATA7 0x00000020 + SC_P_EMMC0_STROBE_CONN_EMMC0_STROBE 0x06000040 + >; + }; + + pinctrl_usdhc1_200mhz: usdhc1grp200mhz { + fsl,pins = < + SC_P_EMMC0_CLK_CONN_EMMC0_CLK 0x06000040 + SC_P_EMMC0_CMD_CONN_EMMC0_CMD 0x00000020 + SC_P_EMMC0_DATA0_CONN_EMMC0_DATA0 0x00000020 + SC_P_EMMC0_DATA1_CONN_EMMC0_DATA1 0x00000020 + SC_P_EMMC0_DATA2_CONN_EMMC0_DATA2 0x00000020 + SC_P_EMMC0_DATA3_CONN_EMMC0_DATA3 0x00000020 + SC_P_EMMC0_DATA4_CONN_EMMC0_DATA4 0x00000020 + SC_P_EMMC0_DATA5_CONN_EMMC0_DATA5 0x00000020 + SC_P_EMMC0_DATA6_CONN_EMMC0_DATA6 0x00000020 + SC_P_EMMC0_DATA7_CONN_EMMC0_DATA7 0x00000020 + SC_P_EMMC0_STROBE_CONN_EMMC0_STROBE 0x06000040 + >; + }; + + pinctrl_usdhc2_gpio: usdhc2gpiogrp { + fsl,pins = < + SC_P_USDHC1_RESET_B_LSIO_GPIO4_IO19 0x06000021 + SC_P_USDHC1_WP_LSIO_GPIO4_IO21 0x06000021 + SC_P_USDHC1_CD_B_LSIO_GPIO4_IO22 0x06000021 + >; + }; + + pinctrl_usdhc2: usdhc2grp { + fsl,pins = < + SC_P_USDHC1_CLK_CONN_USDHC1_CLK 0x06000041 + SC_P_USDHC1_CMD_CONN_USDHC1_CMD 0x06000021 + SC_P_USDHC1_DATA0_CONN_USDHC1_DATA0 0x06000021 + SC_P_USDHC1_DATA1_CONN_USDHC1_DATA1 0x06000021 + SC_P_USDHC1_DATA2_CONN_USDHC1_DATA2 0x06000021 + SC_P_USDHC1_DATA3_CONN_USDHC1_DATA3 0x06000021 + SC_P_USDHC1_VSELECT_CONN_USDHC1_VSELECT 0x06000021 + >; + }; + + pinctrl_usdhc2_100mhz: usdhc2grp100mhz { + fsl,pins = < + SC_P_USDHC1_CLK_CONN_USDHC1_CLK 0x06000040 + SC_P_USDHC1_CMD_CONN_USDHC1_CMD 0x06000020 + SC_P_USDHC1_DATA0_CONN_USDHC1_DATA0 0x06000020 + SC_P_USDHC1_DATA1_CONN_USDHC1_DATA1 0x06000020 + SC_P_USDHC1_DATA2_CONN_USDHC1_DATA2 0x06000020 + SC_P_USDHC1_DATA3_CONN_USDHC1_DATA3 0x06000020 + SC_P_USDHC1_VSELECT_CONN_USDHC1_VSELECT 0x06000020 + >; + }; + + pinctrl_usdhc2_200mhz: usdhc2grp200mhz { + fsl,pins = < + SC_P_USDHC1_CLK_CONN_USDHC1_CLK 0x06000040 + SC_P_USDHC1_CMD_CONN_USDHC1_CMD 0x06000020 + SC_P_USDHC1_DATA0_CONN_USDHC1_DATA0 0x06000020 + SC_P_USDHC1_DATA1_CONN_USDHC1_DATA1 0x06000020 + SC_P_USDHC1_DATA2_CONN_USDHC1_DATA2 0x06000020 + SC_P_USDHC1_DATA3_CONN_USDHC1_DATA3 0x06000020 + SC_P_USDHC1_VSELECT_CONN_USDHC1_VSELECT 0x06000020 + >; + }; + + pinctrl_flexspi0: flexspi0grp { + fsl,pins = < + SC_P_QSPI0A_DATA0_LSIO_QSPI0A_DATA0 0x0600004c + SC_P_QSPI0A_DATA1_LSIO_QSPI0A_DATA1 0x0600004c + SC_P_QSPI0A_DATA2_LSIO_QSPI0A_DATA2 0x0600004c + SC_P_QSPI0A_DATA3_LSIO_QSPI0A_DATA3 0x0600004c + SC_P_QSPI0A_DQS_LSIO_QSPI0A_DQS 0x0600004c + SC_P_QSPI0A_SS0_B_LSIO_QSPI0A_SS0_B 0x0600004c + SC_P_QSPI0A_SS1_B_LSIO_QSPI0A_SS1_B 0x0600004c + SC_P_QSPI0A_SCLK_LSIO_QSPI0A_SCLK 0x0600004c + SC_P_QSPI0B_SCLK_LSIO_QSPI0B_SCLK 0x0600004c + SC_P_QSPI0B_DATA0_LSIO_QSPI0B_DATA0 0x0600004c + SC_P_QSPI0B_DATA1_LSIO_QSPI0B_DATA1 0x0600004c + SC_P_QSPI0B_DATA2_LSIO_QSPI0B_DATA2 0x0600004c + SC_P_QSPI0B_DATA3_LSIO_QSPI0B_DATA3 0x0600004c + SC_P_QSPI0B_DQS_LSIO_QSPI0B_DQS 0x0600004c + SC_P_QSPI0B_SS0_B_LSIO_QSPI0B_SS0_B 0x0600004c + SC_P_QSPI0B_SS1_B_LSIO_QSPI0B_SS1_B 0x0600004c + >; + }; + + pinctrl_i2c0_mipi_lvds0: mipi_lvds0_i2c0_grp { + fsl,pins = < + SC_P_MIPI_DSI0_I2C0_SCL_MIPI_DSI0_I2C0_SCL 0xc6000020 + SC_P_MIPI_DSI0_I2C0_SDA_MIPI_DSI0_I2C0_SDA 0xc6000020 + >; + }; + + pinctrl_i2c0_mipi_lvds1: mipi_lvds1_i2c0_grp { + fsl,pins = < + SC_P_MIPI_DSI1_I2C0_SCL_MIPI_DSI1_I2C0_SCL 0xc6000020 + SC_P_MIPI_DSI1_I2C0_SDA_MIPI_DSI1_I2C0_SDA 0xc6000020 + >; + }; + }; +}; + +&lpuart0 { + pinctrl-names = "default"; + pinctrl-0 = <&pinctrl_lpuart0>; + status = "okay"; +}; + +&gpio0 { + status = "okay"; +}; + +&gpio1 { + status = "okay"; +}; + +&gpio3 { + status = "okay"; +}; + +&gpio4 { + status = "okay"; +}; + +&fec1 { + pinctrl-names = "default"; + pinctrl-0 = <&pinctrl_fec1>; + phy-mode = "rgmii"; + phy-handle = <ðphy0>; + fsl,ar8031-phy-fixup; + fsl,magic-packet; + status = "okay"; + + mdio { + #address-cells = <1>; + #size-cells = <0>; + + ethphy0: ethernet-phy@0 { + compatible = "ethernet-phy-ieee802.3-c22"; + reg = <0>; + }; + + ethphy1: ethernet-phy@1 { + compatible = "ethernet-phy-ieee802.3-c22"; + reg = <1>; + }; + }; +}; + +&fec2 { + pinctrl-names = "default"; + pinctrl-0 = <&pinctrl_fec2>; + phy-mode = "rgmii"; + phy-handle = <ðphy1>; + fsl,ar8031-phy-fixup; + fsl,magic-packet; + status = "okay"; +}; + +&flexspi0 { + pinctrl-names = "default"; + pinctrl-0 = <&pinctrl_flexspi0>; + status = "okay"; + + flash0: mt35xu512aba@0 { + reg = <0>; + #address-cells = <1>; + #size-cells = <1>; + compatible = "spi-flash"; + spi-max-frequency = <29000000>; + spi-nor,ddr-quad-read-dummy = <8>; + }; +}; + +&i2c1 { + #address-cells = <1>; + #size-cells = <0>; + clock-frequency = <100000>; + pinctrl-names = "default"; + pinctrl-0 = <&pinctrl_lpi2c1>; + status = "okay"; + + pca9646_switch: mux@71 { + compatible = "nxp,pca9646"; + reg = <0x71>; + u-boot,i2c-offset-len = <0>; + #address-cells = <1>; + #size-cells = <0>; + + bb_i2c1: i2c@0 { + #address-cells = <1>; + #size-cells = <0>; + reg = <0x0>; + }; + + mfi_i2c1: i2c@1 { + #address-cells = <1>; + #size-cells = <0>; + reg = <0x1>; + }; + + i2cexp1_i2c1: i2c@2 { + #address-cells = <1>; + #size-cells = <0>; + reg = <0x2>; + }; + + i2cexp2_i2c1: i2c@3 { + #address-cells = <1>; + #size-cells = <0>; + reg = <0x3>; + + pca9557_a: gpio@1a { + compatible = "nxp,pca9557"; + reg = <0x1a>; + gpio-controller; + #gpio-cells = <2>; + }; + + pca9557_b: gpio@1d { + compatible = "nxp,pca9557"; + reg = <0x1d>; + gpio-controller; + #gpio-cells = <2>; + }; + }; + }; +}; + +&i2c0_mipi_lvds0 { + #address-cells = <1>; + #size-cells = <0>; + pinctrl-names = "default"; + pinctrl-0 = <&pinctrl_i2c0_mipi_lvds0>; + clock-frequency = <100000>; + status = "okay"; +}; + +&i2c0_mipi_lvds1 { + #address-cells = <1>; + #size-cells = <0>; + pinctrl-names = "default"; + pinctrl-0 = <&pinctrl_i2c0_mipi_lvds1>; + clock-frequency = <100000>; + status = "okay"; +}; + +&usdhc1 { + pinctrl-names = "default", "state_100mhz", "state_200mhz"; + pinctrl-0 = <&pinctrl_usdhc1>; + pinctrl-1 = <&pinctrl_usdhc1_100mhz>; + pinctrl-2 = <&pinctrl_usdhc1_200mhz>; + bus-width = <8>; + non-removable; + status = "okay"; +}; + +&usdhc2 { + pinctrl-names = "default", "state_100mhz", "state_200mhz"; + pinctrl-0 = <&pinctrl_usdhc2>, <&pinctrl_usdhc2_gpio>; + pinctrl-1 = <&pinctrl_usdhc2_100mhz>, <&pinctrl_usdhc2_gpio>; + pinctrl-2 = <&pinctrl_usdhc2_200mhz>, <&pinctrl_usdhc2_gpio>; + bus-width = <4>; + cd-gpios = <&gpio4 22 GPIO_ACTIVE_LOW>; + wp-gpios = <&gpio4 21 GPIO_ACTIVE_HIGH>; + vmmc-supply = <®_usdhc2_vmmc>; + status = "okay"; +}; diff --git a/arch/arm/dts/fsl-imx8qxp.dtsi b/arch/arm/dts/fsl-imx8qxp.dtsi new file mode 100644 index 0000000000..b2c7168127 --- /dev/null +++ b/arch/arm/dts/fsl-imx8qxp.dtsi @@ -0,0 +1,1593 @@ +/* + * Copyright (C) 2016 Freescale Semiconductor, Inc. + * Copyright 2017 NXP + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License + * as published by the Free Software Foundation; either version 2 + * of the License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + */ + +#include +#include +#include +#include +#include +#include + +/ { + compatible = "fsl,imx8qxp"; + interrupt-parent = <&gic>; + #address-cells = <2>; + #size-cells = <2>; + + aliases { + ethernet0 = &fec1; + ethernet1 = &fec2; + serial0 = &lpuart0; + serial1 = &lpuart1; + serial2 = &lpuart2; + serial3 = &lpuart3; + gpio0 = &gpio0; + gpio1 = &gpio1; + gpio2 = &gpio2; + gpio3 = &gpio3; + gpio4 = &gpio4; + gpio5 = &gpio5; + gpio6 = &gpio6; + gpio7 = &gpio7; + i2c0 = &i2c0; + i2c1 = &i2c1; + i2c2 = &i2c2; + i2c3 = &i2c3; + i2c13 = &i2c0_mipi_lvds0; + i2c15 = &i2c0_mipi_lvds1; + spi0 = &flexspi0; + }; + + memory@80000000 { + device_type = "memory"; + reg = <0x00000000 0x80000000 0 0x40000000>; + /* DRAM space - 1, size : 1 GB DRAM */ + }; + + reserved-memory { + #address-cells = <2>; + #size-cells = <2>; + ranges; + + /* global autoconfigured region for contiguous allocations */ + linux,cma { + compatible = "shared-dma-pool"; + reusable; + size = <0 0x28000000>; + alloc-ranges = <0 0x80000000 0 0x80000000>; + linux,cma-default; + }; + }; + + gic: interrupt-controller@51a00000 { + compatible = "arm,gic-v3"; + reg = <0x0 0x51a00000 0 0x10000>, /* GIC Dist */ + <0x0 0x51b00000 0 0xC0000>; /* GICR (RD_base + SGI_base) */ + #interrupt-cells = <3>; + interrupt-controller; + interrupts = ; + }; + + mu: mu@5d1b0000 { + compatible = "fsl,imx8-mu"; + reg = <0x0 0x5d1b0000 0x0 0x10000>; + interrupts = ; + fsl,scu_ap_mu_id = <0>; + #mbox-cells = <4>; + status = "okay"; + }; + + mu13: mu13@5d280000 { + compatible = "fsl,imx8-mu-hifi"; + reg = <0x0 0x5d280000 0x0 0x10000>; + interrupts = ; + fsl,hifi_ap_mu_id = <13>; + status = "okay"; + }; + + clk: clk { + compatible = "fsl,imx8qxp-clk"; + #clock-cells = <1>; + }; + + iomuxc: iomuxc { + compatible = "fsl,imx8qxp-iomuxc"; + }; + + rtc: rtc { + compatible = "fsl,imx-sc-rtc"; + }; + + timer { + compatible = "arm,armv8-timer"; + interrupts = , /* Physical Secure */ + , /* Physical Non-Secure */ + , /* Virtual */ + ; /* Hypervisor */ + clock-frequency = <8000000>; + }; + + imx8qx-pm { + compatible = "simple-bus"; + #address-cells = <1>; + #size-cells = <0>; + + pd_lsio: PD_LSIO { + compatible = "nxp,imx8-pd"; + reg = ; + #power-domain-cells = <0>; + #address-cells = <1>; + #size-cells = <0>; + + pd_lsio_pwm0: PD_LSIO_PWM_0 { + reg = ; + #power-domain-cells = <0>; + power-domains = <&pd_lsio>; + }; + pd_lsio_pwm1: PD_LSIO_PWM_1 { + reg = ; + #power-domain-cells = <0>; + power-domains = <&pd_lsio>; + }; + pd_lsio_pwm2: PD_LSIO_PWM_2 { + reg = ; + #power-domain-cells = <0>; + power-domains = <&pd_lsio>; + }; + pd_lsio_pwm3: PD_LSIO_PWM_3 { + reg = ; + #power-domain-cells = <0>; + power-domains = <&pd_lsio>; + }; + pd_lsio_pwm4: PD_LSIO_PWM_4 { + reg = ; + #power-domain-cells = <0>; + power-domains = <&pd_lsio>; + }; + pd_lsio_pwm5: PD_LSIO_PWM_5 { + reg = ; + #power-domain-cells = <0>; + power-domains = <&pd_lsio>; + }; + pd_lsio_pwm6: PD_LSIO_PWM_6 { + reg = ; + #power-domain-cells = <0>; + power-domains = <&pd_lsio>; + }; + pd_lsio_pwm7: PD_LSIO_PWM_7 { + reg = ; + #power-domain-cells = <0>; + power-domains = <&pd_lsio>; + }; + pd_lsio_kpp: PD_LSIO_KPP { + reg = ; + #power-domain-cells = <0>; + power-domains = <&pd_lsio>; + }; + pd_lsio_gpio0: PD_LSIO_GPIO_0 { + reg = ; + #power-domain-cells = <0>; + power-domains = <&pd_lsio>; + }; + pd_lsio_gpio1: PD_LSIO_GPIO_1 { + reg = ; + #power-domain-cells = <0>; + power-domains = <&pd_lsio>; + }; + pd_lsio_gpio2: PD_LSIO_GPIO_2 { + reg = ; + #power-domain-cells = <0>; + power-domains = <&pd_lsio>; + }; + pd_lsio_gpio3: PD_LSIO_GPIO_3 { + reg = ; + #power-domain-cells = <0>; + power-domains = <&pd_lsio>; + }; + pd_lsio_gpio4: PD_LSIO_GPIO_4 { + reg = ; + #power-domain-cells = <0>; + power-domains = <&pd_lsio>; + }; + pd_lsio_gpio5: PD_LSIO_GPIO_5{ + reg = ; + #power-domain-cells = <0>; + power-domains = <&pd_lsio>; + }; + pd_lsio_gpio6:PD_LSIO_GPIO_6 { + reg = ; + #power-domain-cells = <0>; + power-domains = <&pd_lsio>; + }; + pd_lsio_gpio7: PD_LSIO_GPIO_7 { + reg = ; + #power-domain-cells = <0>; + power-domains = <&pd_lsio>; + }; + pd_lsio_gpt0: PD_LSIO_GPT_0 { + reg = ; + #power-domain-cells = <0>; + power-domains = <&pd_lsio>; + }; + pd_lsio_gpt1: PD_LSIO_GPT_1 { + reg = ; + #power-domain-cells = <0>; + power-domains = <&pd_lsio>; + }; + pd_lsio_gpt2: PD_LSIO_GPT_2 { + reg = ; + #power-domain-cells = <0>; + power-domains = <&pd_lsio>; + }; + pd_lsio_gpt3: PD_LSIO_GPT_3 { + reg = ; + #power-domain-cells = <0>; + power-domains = <&pd_lsio>; + }; + pd_lsio_gpt4: PD_LSIO_GPT_4 { + reg = ; + #power-domain-cells = <0>; + power-domains = <&pd_lsio>; + }; + pd_lsio_flexspi0: PD_LSIO_FSPI_0 { + reg = ; + #power-domain-cells = <0>; + power-domains = <&pd_lsio>; + }; + pd_lsio_flexspi1: PD_LSIO_FSPI_1{ + reg = ; + #power-domain-cells = <0>; + power-domains = <&pd_lsio>; + }; + }; + + pd_conn: PD_CONN { + compatible = "nxp,imx8-pd"; + reg = ; + #power-domain-cells = <0>; + #address-cells = <1>; + #size-cells = <0>; + + pd_conn_usbotg0: PD_CONN_USB_0 { + reg = ; + #power-domain-cells = <0>; + power-domains = <&pd_conn>; + }; + pd_conn_usbotg0_phy: PD_CONN_USB_0_PHY { + reg = ; + #power-domain-cells = <0>; + power-domains = <&pd_conn>; + }; + pd_conn_usbotg1: PD_CONN_USB_1 { + reg = ; + #power-domain-cells = <0>; + power-domains = <&pd_conn>; + }; + pd_conn_usb2: PD_CONN_USB_2 { + reg = ; + #power-domain-cells = <0>; + power-domains = <&pd_conn>; + }; + pd_conn_usb2_phy: PD_CONN_USB_2_PHY { + reg = ; + #power-domain-cells = <0>; + power-domains = <&pd_conn>; + }; + pd_conn_sdch0: PD_CONN_SDHC_0 { + reg = ; + #power-domain-cells = <0>; + power-domains = <&pd_conn>; + }; + pd_conn_sdch1: PD_CONN_SDHC_1 { + reg = ; + #power-domain-cells = <0>; + power-domains = <&pd_conn>; + }; + pd_conn_sdch2: PD_CONN_SDHC_2 { + reg = ; + #power-domain-cells = <0>; + power-domains = <&pd_conn>; + }; + pd_conn_enet0: PD_CONN_ENET_0 { + reg = ; + #power-domain-cells = <0>; + power-domains = <&pd_conn>; + }; + pd_conn_enet1: PD_CONN_ENET_1 { + reg = ; + #power-domain-cells = <0>; + power-domains = <&pd_conn>; + }; + pd_conn_nand: PD_CONN_NAND { + reg = ; + #power-domain-cells = <0>; + power-domains = <&pd_conn>; + }; + pd_conn_mlb0: PD_CONN_MLB_0 { + reg = ; + #power-domain-cells = <0>; + power-domains = <&pd_conn>; + }; + pd_conn_edma_ch0: PD_CONN_DMA_4_CH0 { + reg = ; + #power-domain-cells = <0>; + power-domains =<&pd_conn>; + }; + pd_conn_edma_ch1: PD_CONN_DMA_4_CH1 { + reg = ; + #power-domain-cells = <0>; + power-domains =<&pd_conn>; + }; + pd_conn_edma_ch2: PD_CONN_DMA_4_CH2 { + reg = ; + #power-domain-cells = <0>; + power-domains =<&pd_conn>; + }; + pd_conn_edma_ch3: PD_CONN_DMA_4_CH3 { + reg = ; + #power-domain-cells = <0>; + power-domains =<&pd_conn>; + }; + pd_conn_edma_ch4: PD_CONN_DMA_4_CH4 { + reg = ; + #power-domain-cells = <0>; + power-domains =<&pd_conn>; + }; + }; + + pd_audio: PD_AUDIO { + compatible = "nxp,imx8-pd"; + reg = ; + #power-domain-cells = <0>; + #address-cells = <1>; + #size-cells = <0>; + + pd_asrc0:PD_AUD_ASRC_0 { + reg = ; + #power-domain-cells = <0>; + power-domains =<&pd_audio>; + }; + pd_asrc1: PD_AUD_ASRC_1 { + reg = ; + #power-domain-cells = <0>; + power-domains =<&pd_audio>; + }; + pd_esai0: PD_AUD_ESAI_0 { + reg = ; + #power-domain-cells = <0>; + power-domains =<&pd_audio>; + }; + pd_spdif0: PD_AUD_SPDIF_0 { + reg = ; + #power-domain-cells = <0>; + power-domains =<&pd_audio>; + }; + pd_sai0:PD_AUD_SAI_0 { + reg = ; + #power-domain-cells = <0>; + power-domains =<&pd_audio>; + }; + pd_sai1: PD_AUD_SAI_1 { + reg = ; + #power-domain-cells = <0>; + power-domains =<&pd_audio>; + }; + pd_sai2: PD_AUD_SAI_2 { + reg = ; + #power-domain-cells = <0>; + power-domains =<&pd_audio>; + }; + pd_sai3: PD_AUD_SAI_3 { + reg = ; + #power-domain-cells = <0>; + power-domains =<&pd_audio>; + }; + pd_sai4: PD_AUD_SAI_4 { + reg = ; + #power-domain-cells = <0>; + power-domains =<&pd_audio>; + }; + pd_sai5: PD_AUD_SAI_5 { + reg = ; + #power-domain-cells = <0>; + power-domains =<&pd_audio>; + }; + pd_gpt5: PD_AUD_GPT_5 { + reg = ; + #power-domain-cells = <0>; + power-domains =<&pd_audio>; + }; + pd_gpt6: PD_AUD_GPT_6 { + reg = ; + #power-domain-cells = <0>; + power-domains =<&pd_audio>; + }; + pd_gpt7: PD_AUD_GPT_7 { + reg = ; + #power-domain-cells = <0>; + power-domains =<&pd_audio>; + }; + pd_gpt8: PD_AUD_GPT_8 { + reg = ; + #power-domain-cells = <0>; + power-domains =<&pd_audio>; + }; + pd_gpt9: PD_AUD_GPT_9 { + reg = ; + #power-domain-cells = <0>; + power-domains =<&pd_audio>; + }; + pd_gpt10: PD_AUD_GPT_10 { + reg = ; + #power-domain-cells = <0>; + power-domains =<&pd_audio>; + }; + pd_amix: PD_AUD_AMIX { + reg = ; + #power-domain-cells = <0>; + power-domains =<&pd_audio>; + }; + pd_mqs0: PD_AUD_MQS_0 { + reg = ; + #power-domain-cells = <0>; + power-domains =<&pd_audio>; + }; + pd_hifi: PD_AUD_HIFI { + reg = ; + #power-domain-cells = <0>; + power-domains =<&pd_audio>; + }; + pd_hifi_ram: PD_AUD_OCRAM { + reg = ; + #power-domain-cells = <0>; + power-domains =<&pd_audio>; + }; + pd_mclk_out0: PD_AUD_MCLK_OUT_0 { + reg = ; + #power-domain-cells = <0>; + power-domains =<&pd_audio>; + }; + pd_mclk_out1: PD_AUD_MCLK_OUT_1 { + reg = ; + #power-domain-cells = <0>; + power-domains =<&pd_audio>; + }; + pd_audio_pll0: PD_AUD_AUDIO_PLL_0 { + reg = ; + #power-domain-cells = <0>; + power-domains =<&pd_audio>; + }; + pd_audio_pll1: PD_AUD_AUDIO_PLL_1 { + reg = ; + #power-domain-cells = <0>; + power-domains =<&pd_audio>; + }; + pd_audio_clk0: PD_AUD_AUDIO_CLK_0 { + reg = ; + #power-domain-cells = <0>; + power-domains =<&pd_audio>; + }; + pd_audio_clk1: PD_AUD_AUDIO_CLK_1 { + reg = ; + #power-domain-cells = <0>; + power-domains =<&pd_audio>; + }; + }; + + pd_dma: PD_DMA { + compatible = "nxp,imx8-pd"; + reg = ; + #power-domain-cells = <0>; + #address-cells = <1>; + #size-cells = <0>; + + pd_dma_flexcan0: PD_DMA_CAN_0 { + reg = ; + #power-domain-cells = <0>; + power-domains = <&pd_dma>; + }; + pd_dma_flexcan1: PD_DMA_CAN_1 { + reg = ; + #power-domain-cells = <0>; + power-domains = <&pd_dma>; + }; + pd_dma_flexcan2: PD_DMA_CAN_2 { + reg = ; + #power-domain-cells = <0>; + power-domains = <&pd_dma>; + }; + pd_dma_ftm0: PD_DMA_FTM_0 { + reg = ; + #power-domain-cells = <0>; + power-domains = <&pd_dma>; + }; + pd_dma_ftm1: PD_DMA_FTM_1 { + reg = ; + #power-domain-cells = <0>; + power-domains = <&pd_dma>; + }; + pd_dma_adc0: PD_DMA_ADC_0 { + reg = ; + #power-domain-cells = <0>; + power-domains = <&pd_dma>; + }; + pd_dma_lpi2c0: PD_DMA_I2C_0 { + reg = ; + #power-domain-cells = <0>; + power-domains = <&pd_dma>; + }; + pd_dma_lpi2c1: PD_DMA_I2C_1 { + reg = ; + #power-domain-cells = <0>; + power-domains = <&pd_dma>; + }; + pd_dma_lpi2c2:PD_DMA_I2C_2 { + reg = ; + #power-domain-cells = <0>; + power-domains = <&pd_dma>; + }; + pd_dma_lpi2c3: PD_DMA_I2C_3 { + reg = ; + #power-domain-cells = <0>; + power-domains = <&pd_dma>; + }; + pd_dma_lpuart0: PD_DMA_UART0 { + reg = ; + #power-domain-cells = <0>; + power-domains = <&pd_dma>; + }; + pd_dma_lpuart1: PD_DMA_UART1 { + reg = ; + #power-domain-cells = <0>; + power-domains = <&pd_dma>; + }; + pd_dma_lpuart2: PD_DMA_UART2 { + reg = ; + #power-domain-cells = <0>; + power-domains = <&pd_dma>; + }; + pd_dma_lpuart3: PD_DMA_UART3 { + reg = ; + #power-domain-cells = <0>; + power-domains = <&pd_dma>; + }; + pd_dma_lpspi0: PD_DMA_SPI_0 { + reg = ; + #power-domain-cells = <0>; + power-domains = <&pd_dma>; + }; + pd_dma_lpspi1: PD_DMA_SPI_1 { + reg = ; + #power-domain-cells = <0>; + power-domains = <&pd_dma>; + }; + pd_dma_lpspi2: PD_DMA_SPI_2 { + reg = ; + #power-domain-cells = <0>; + power-domains = <&pd_dma>; + }; + pd_dma_lpspi3: PD_DMA_SPI_3 { + reg = ; + #power-domain-cells = <0>; + power-domains = <&pd_dma>; + }; + pd_dma_pwm0: PD_DMA_PWM_0 { + reg = ; + #power-domain-cells = <0>; + power-domains = <&pd_dma>; + }; + pd_dma_lcd0: PD_DMA_LCD_0 { + reg = ; + #power-domain-cells = <0>; + power-domains = <&pd_dma>; + }; + }; + + pd_gpu: gpu-power-domain { + compatible = "nxp,imx8-pd"; + reg = ; + #power-domain-cells = <0>; + #address-cells = <1>; + #size-cells = <0>; + + pd_gpu0: gpu0 { + name = "gpu0"; + reg = ; + #power-domain-cells = <0>; + power-domains =<&pd_gpu>; + #address-cells = <1>; + #size-cells = <0>; + }; + }; + + pd_vpu: vpu-power-domain { + compatible = "nxp,imx8-pd"; + reg = ; + #power-domain-cells = <0>; + #address-cells = <1>; + #size-cells = <0>; + + pd_vpu_core: vpu_core { + name = "vpu_core"; + reg = ; + #power-domain-cells = <0>; + power-domains =<&pd_vpu>; + }; + }; + + pd_hsio: hsio-power-domain { + compatible = "nxp,imx8-pd"; + reg = ; + #power-domain-cells = <0>; + #address-cells = <1>; + #size-cells = <0>; + + pd_serdes1: PD_HSIO_SERDES_1 { + reg = ; + #power-domain-cells = <0>; + power-domains =<&pd_hsio>; + #address-cells = <1>; + #size-cells = <0>; + + pd_pcie: PD_HSIO_PCIE_B { + reg = ; + #power-domain-cells = <0>; + power-domains =<&pd_serdes1>; + }; + }; + }; + + pd_cm40: PD_CM40 { + compatible = "nxp,imx8-pd"; + reg = ; + #power-domain-cells = <0>; + #address-cells = <1>; + #size-cells = <0>; + + pd_cm40_i2c: PD_CM40_I2C { + reg = ; + #power-domain-cells = <0>; + power-domains =<&pd_cm40>; + }; + + pd_cm40_intmux: PD_CM40_INTMUX { + reg = ; + #power-domain-cells = <0>; + power-domains =<&pd_cm40>; + }; + }; + + + pd_dc0: PD_DC_0 { + compatible = "nxp,imx8-pd"; + reg = ; + #power-domain-cells = <0>; + #address-cells = <1>; + #size-cells = <0>; + + pd_dc0_pll0: PD_DC_0_PLL_0{ + reg = ; + #power-domain-cells = <0>; + power-domains =<&pd_dc0>; + #address-cells = <1>; + #size-cells = <0>; + + pd_dc0_pll1: PD_DC_0_PLL_1{ + reg = ; + #power-domain-cells = <0>; + power-domains =<&pd_dc0_pll0>; + }; + }; + pd_mipi_dsi0: PD_MIPI_0_DSI { + reg = ; + #power-domain-cells = <0>; + power-domains =<&pd_dc0>; + #address-cells = <1>; + #size-cells = <0>; + + pd_mipi_dsi_0_lvds: PD_LVDS0 { + reg = ; + #power-domain-cells = <0>; + power-domains =<&pd_mipi_dsi0>; + }; + + pd_mipi_dsi_0_i2c0: PD_MIPI_0_DSI_I2C0 { + reg = ; + #power-domain-cells = <0>; + power-domains =<&pd_mipi_dsi0>; + }; + pd_mipi_dsi_0_i2c1: PD_MIPI_0_DSI_I2C1 { + reg = ; + #power-domain-cells = <0>; + power-domains =<&pd_mipi_dsi0>; + }; + pd_mipi_0_pwm0: PD_MIPI_0_DSI_PWM0 { + reg = ; + #power-domain-cells = <0>; + power-domains =<&pd_mipi_dsi0>; + }; + }; + + pd_mipi_dsi1: PD_MIPI_1_DSI { + reg = ; + #power-domain-cells = <0>; + power-domains =<&pd_dc0>; + #address-cells = <1>; + #size-cells = <0>; + + pd_mipi_dsi_1_lvds: PD_LVDS1 { + reg = ; + #power-domain-cells = <0>; + power-domains =<&pd_mipi_dsi1>; + }; + + pd_mipi_dsi_1_i2c0: PD_MIPI_1_DSI_I2C0 { + reg = ; + #power-domain-cells = <0>; + power-domains =<&pd_mipi_dsi1>; + }; + pd_mipi_dsi_1_i2c1: PD_MIPI_1_DSI_I2C1 { + reg = ; + #power-domain-cells = <0>; + power-domains =<&pd_mipi_dsi1>; + }; + pd_mipi_1_pwm0: PD_MIPI_1_DSI_PWM0 { + reg = ; + #power-domain-cells = <0>; + power-domains =<&pd_mipi_dsi1>; + }; + }; + }; + + pd_isi_ch0: PD_IMAGING { + compatible = "nxp,imx8-pd"; + reg = ; + #power-domain-cells = <0>; + #address-cells = <1>; + #size-cells = <0>; + + pd_mipi_csi: PD_MIPI_CSI0 { + reg = ; + #power-domain-cells = <0>; + #address-cells = <1>; + #size-cells = <0>; + power-domains =<&pd_isi_ch0>; + + pd_mipi_csi_i2c0: PD_MIPI_CSI0_I2C { + name = "mipi_csi0_i2c"; + reg = ; + #power-domain-cells = <0>; + power-domains =<&pd_mipi_csi>; + }; + + pd_mipi_csi_pwm0: PD_MIPI_CSI0_PWM { + name = "mipi_csi0_pwm"; + reg = ; + #power-domain-cells = <0>; + power-domains =<&pd_mipi_csi>; + }; + }; + + pd_isi_ch1: PD_IMAGING_PDMA1 { + reg = ; + #power-domain-cells = <0>; + power-domains =<&pd_isi_ch0>; + }; + + pd_isi_ch2: PD_IMAGING_PDMA2 { + reg = ; + #power-domain-cells = <0>; + power-domains =<&pd_isi_ch0>; + }; + + pd_isi_ch3: PD_IMAGING_PDMA3 { + reg = ; + #power-domain-cells = <0>; + power-domains =<&pd_isi_ch0>; + }; + + pd_isi_ch4: PD_IMAGING_PDMA4 { + reg = ; + #power-domain-cells = <0>; + power-domains =<&pd_isi_ch0>; + }; + + pd_isi_ch5: PD_IMAGING_PDMA5 { + reg = ; + #power-domain-cells = <0>; + power-domains =<&pd_isi_ch0>; + }; + + pd_isi_ch6: PD_IMAGING_PDMA6 { + reg = ; + #power-domain-cells = <0>; + power-domains =<&pd_isi_ch0>; + }; + + pd_isi_ch7: PD_IMAGING_PDMA7 { + reg = ; + #power-domain-cells = <0>; + power-domains =<&pd_isi_ch0>; + }; + }; + }; + + tsens: thermal-sensor { + compatible = "nxp,imx8qxp-sc-tsens"; + u-boot,dm-pre-reloc; + /* number of the temp sensor on the chip */ + tsens-num = <1>; + #thermal-sensor-cells = <1>; + }; + + thermal-zones { + /* cpu thermal */ + cpu-thermal0 { + polling-delay-passive = <250>; + polling-delay = <2000>; + /*the slope and offset of the temp sensor */ + thermal-sensors = <&tsens 0>; + trips { + cpu_alert0: trip0 { + temperature = <85000>; + hysteresis = <2000>; + type = "passive"; + }; + cpu_crit0: trip1 { + temperature = <127000>; + hysteresis = <2000>; + type = "critical"; + }; + }; + }; + }; + + gpio0: gpio@5d080000 { + compatible = "fsl,imx8qm-gpio", "fsl,imx35-gpio"; + reg = <0x0 0x5d080000 0x0 0x10000>; + interrupts = ; + gpio-controller; + #gpio-cells = <2>; + interrupt-controller; + #interrupt-cells = <2>; + power-domains = <&pd_lsio_gpio0>; + }; + + gpio1: gpio@5d090000 { + compatible = "fsl,imx8qm-gpio", "fsl,imx35-gpio"; + reg = <0x0 0x5d090000 0x0 0x10000>; + interrupts = ; + gpio-controller; + #gpio-cells = <2>; + interrupt-controller; + #interrupt-cells = <2>; + power-domains = <&pd_lsio_gpio1>; + }; + + gpio2: gpio@5d0a0000 { + compatible = "fsl,imx8qm-gpio", "fsl,imx35-gpio"; + reg = <0x0 0x5d0a0000 0x0 0x10000>; + interrupts = ; + gpio-controller; + #gpio-cells = <2>; + interrupt-controller; + #interrupt-cells = <2>; + power-domains = <&pd_lsio_gpio2>; + }; + + gpio3: gpio@5d0b0000 { + compatible = "fsl,imx8qm-gpio", "fsl,imx35-gpio"; + reg = <0x0 0x5d0b0000 0x0 0x10000>; + interrupts = ; + gpio-controller; + #gpio-cells = <2>; + interrupt-controller; + #interrupt-cells = <2>; + power-domains = <&pd_lsio_gpio3>; + }; + + gpio4: gpio@5d0c0000 { + compatible = "fsl,imx8qm-gpio", "fsl,imx35-gpio"; + reg = <0x0 0x5d0c0000 0x0 0x10000>; + interrupts = ; + gpio-controller; + #gpio-cells = <2>; + interrupt-controller; + #interrupt-cells = <2>; + power-domains = <&pd_lsio_gpio4>; + }; + + gpio5: gpio@5d0d0000 { + compatible = "fsl,imx8qm-gpio", "fsl,imx35-gpio"; + reg = <0x0 0x5d0d0000 0x0 0x10000>; + interrupts = ; + gpio-controller; + #gpio-cells = <2>; + interrupt-controller; + #interrupt-cells = <2>; + power-domains = <&pd_lsio_gpio5>; + }; + + gpio6: gpio@5d0e0000 { + compatible = "fsl,imx8qm-gpio", "fsl,imx35-gpio"; + reg = <0x0 0x5d0e0000 0x0 0x10000>; + interrupts = ; + gpio-controller; + #gpio-cells = <2>; + interrupt-controller; + #interrupt-cells = <2>; + power-domains = <&pd_lsio_gpio6>; + }; + + gpio7: gpio@5d0f0000 { + compatible = "fsl,imx8qm-gpio", "fsl,imx35-gpio"; + reg = <0x0 0x5d0f0000 0x0 0x10000>; + interrupts = ; + gpio-controller; + #gpio-cells = <2>; + interrupt-controller; + #interrupt-cells = <2>; + power-domains = <&pd_lsio_gpio7>; + }; + + irqsteer_csi: irqsteer@58220000 { + compatible = "nxp,imx-irqsteer"; + reg = <0x0 0x58220000 0x0 0x1000>; + interrupts = ; + interrupt-controller; + interrupt-parent = <&gic>; + #interrupt-cells = <2>; + clocks = <&clk IMX8QXP_CSI0_IPG_CLK>; + clock-names = "ipg"; + power-domains = <&pd_mipi_csi>; + }; + + i2c0_csi0: i2c@58226000 { + compatible = "fsl,imx8qm-lpi2c"; + reg = <0x0 0x58226000 0x0 0x1000>; + interrupts = <8 IRQ_TYPE_LEVEL_HIGH>; + interrupt-parent = <&irqsteer_csi>; + clocks = <&clk IMX8QXP_CSI0_I2C0_CLK>, + <&clk IMX8QXP_CSI0_I2C0_IPG_CLK>; + clock-names = "per", "ipg"; + assigned-clocks = <&clk IMX8QXP_CSI0_I2C0_CLK>; + assigned-clock-rates = <24000000>; + power-domains = <&pd_mipi_csi_i2c0>; + status = "disabled"; + }; + + irqsteer_mipi_lvds0: irqsteer@56220000 { + compatible = "nxp,imx-irqsteer"; + reg = <0x0 0x56220000 0x0 0x1000>; + interrupts = ; + interrupt-controller; + interrupt-parent = <&gic>; + #interrupt-cells = <2>; + clocks = <&clk IMX8QXP_MIPI0_LIS_IPG_CLK>; + clock-names = "ipg"; + power-domains = <&pd_mipi_dsi0>; + }; + + i2c0_mipi_lvds0: i2c@56226000 { + compatible = "fsl,imx8qxp-lpi2c", "fsl,imx8qm-lpi2c"; + reg = <0x0 0x56226000 0x0 0x1000>; + interrupts = <8 IRQ_TYPE_LEVEL_HIGH>; + interrupt-parent = <&irqsteer_mipi_lvds0>; + clocks = <&clk IMX8QXP_MIPI0_I2C0_CLK>, + <&clk IMX8QXP_MIPI0_I2C0_IPG_CLK>; + clock-names = "per", "ipg"; + assigned-clocks = <&clk IMX8QXP_MIPI0_I2C0_DIV>; + assigned-clock-rates = <24000000>; + power-domains = <&pd_mipi_dsi_0_i2c0>; + status = "disabled"; + }; + + irqsteer_mipi_lvds1: irqsteer@56240000 { + compatible = "nxp,imx-irqsteer"; + reg = <0x0 0x56240000 0x0 0x1000>; + interrupts = ; + interrupt-controller; + interrupt-parent = <&gic>; + #interrupt-cells = <2>; + clocks = <&clk IMX8QXP_MIPI1_LIS_IPG_CLK>; + clock-names = "ipg"; + power-domains = <&pd_mipi_dsi1>; + }; + + i2c0_mipi_lvds1: i2c@56246000 { + compatible = "fsl,imx8qxp-lpi2c", "fsl,imx8qm-lpi2c"; + reg = <0x0 0x56246000 0x0 0x1000>; + interrupts = <8 IRQ_TYPE_LEVEL_HIGH>; + interrupt-parent = <&irqsteer_mipi_lvds1>; + clocks = <&clk IMX8QXP_MIPI1_I2C0_CLK>, + <&clk IMX8QXP_MIPI1_I2C0_IPG_CLK>; + clock-names = "per", "ipg"; + assigned-clocks = <&clk IMX8QXP_MIPI1_I2C0_DIV>; + assigned-clock-rates = <24000000>; + power-domains = <&pd_mipi_dsi_1_i2c0>; + status = "disabled"; + }; + + i2c0: i2c@5a800000 { + compatible = "fsl,imx8qm-lpi2c", "fsl,imx7ulp-lpi2c"; + reg = <0x0 0x5a800000 0x0 0x4000>; + interrupts = ; + interrupt-parent = <&gic>; + clocks = <&clk IMX8QXP_I2C0_CLK>; + clock-names = "per"; + assigned-clocks = <&clk IMX8QXP_I2C0_CLK>; + assigned-clock-rates = <24000000>; + power-domains = <&pd_dma_lpi2c0>; + status = "disabled"; + }; + + i2c1: i2c@5a810000 { + compatible = "fsl,imx8qm-lpi2c", "fsl,imx7ulp-lpi2c"; + reg = <0x0 0x5a810000 0x0 0x4000>; + interrupts = ; + interrupt-parent = <&gic>; + clocks = <&clk IMX8QXP_I2C1_CLK>, + <&clk IMX8QXP_I2C1_IPG_CLK>; + clock-names = "per", "ipg"; + assigned-clocks = <&clk IMX8QXP_I2C1_CLK>; + assigned-clock-rates = <24000000>; + power-domains = <&pd_dma_lpi2c1>; + status = "disabled"; + }; + + i2c2: i2c@5a820000 { + compatible = "fsl,imx8qm-lpi2c", "fsl,imx7ulp-lpi2c"; + reg = <0x0 0x5a820000 0x0 0x4000>; + interrupts = ; + interrupt-parent = <&gic>; + clocks = <&clk IMX8QXP_I2C2_CLK>; + clock-names = "per"; + assigned-clocks = <&clk IMX8QXP_I2C2_CLK>; + assigned-clock-rates = <24000000>; + power-domains = <&pd_dma_lpi2c2>; + status = "disabled"; + }; + + i2c3: i2c@5a830000 { + compatible = "fsl,imx8qm-lpi2c", "fsl,imx7ulp-lpi2c"; + reg = <0x0 0x5a830000 0x0 0x4000>; + interrupts = ; + interrupt-parent = <&gic>; + clocks = <&clk IMX8QXP_I2C3_CLK>, + <&clk IMX8QXP_I2C3_IPG_CLK>; + clock-names = "per", "ipg"; + assigned-clocks = <&clk IMX8QXP_I2C3_CLK>; + assigned-clock-rates = <24000000>; + power-domains = <&pd_dma_lpi2c3>; + status = "disabled"; + }; + + lpuart0: serial@5a060000 { + compatible = "fsl,imx8qm-lpuart"; + reg = <0x0 0x5a060000 0x0 0x1000>; + interrupts = ; + interrupt-parent = <&gic>; + clocks = <&clk IMX8QXP_UART0_CLK>, + <&clk IMX8QXP_UART0_IPG_CLK>; + clock-names = "per", "ipg"; + assigned-clocks = <&clk IMX8QXP_UART0_CLK>; + assigned-clock-rates = <80000000>; + power-domains = <&pd_dma_lpuart0>; + status = "disabled"; + }; + + lpuart1: serial@5a070000 { + compatible = "fsl,imx8qm-lpuart"; + reg = <0x0 0x5a070000 0x0 0x1000>; + interrupts = ; + interrupt-parent = <&gic>; + clocks = <&clk IMX8QXP_UART1_CLK>, + <&clk IMX8QXP_UART1_IPG_CLK>; + clock-names = "per", "ipg"; + assigned-clocks = <&clk IMX8QXP_UART1_CLK>; + assigned-clock-rates = <80000000>; + power-domains = <&pd_dma_lpuart1>; + dma-names = "tx","rx"; + dmas = <&edma0 11 0 0>, + <&edma0 10 0 1>; + status = "disabled"; + }; + + lpuart2: serial@5a080000 { + compatible = "fsl,imx8qm-lpuart"; + reg = <0x0 0x5a080000 0x0 0x1000>; + interrupts = ; + interrupt-parent = <&gic>; + clocks = <&clk IMX8QXP_UART2_CLK>, + <&clk IMX8QXP_UART2_IPG_CLK>; + clock-names = "per", "ipg"; + assigned-clocks = <&clk IMX8QXP_UART2_CLK>; + assigned-clock-rates = <80000000>; + power-domains = <&pd_dma_lpuart2>; + dma-names = "tx","rx"; + dmas = <&edma0 13 0 0>, + <&edma0 12 0 1>; + status = "disabled"; + }; + + lpuart3: serial@5a090000 { + compatible = "fsl,imx8qm-lpuart"; + reg = <0x0 0x5a090000 0x0 0x1000>; + interrupts = ; + interrupt-parent = <&gic>; + clocks = <&clk IMX8QXP_UART3_CLK>, + <&clk IMX8QXP_UART3_IPG_CLK>; + clock-names = "per", "ipg"; + assigned-clocks = <&clk IMX8QXP_UART3_CLK>; + assigned-clock-rates = <80000000>; + power-domains = <&pd_dma_lpuart3>; + dma-names = "tx","rx"; + dmas = <&edma0 15 0 0>, + <&edma0 14 0 1>; + status = "disabled"; + }; + + edma0: dma-controller@5a1f0000 { + compatible = "fsl,imx8qm-edma"; + reg = <0x0 0x5a280000 0x0 0x10000>, /* channel8 UART0 rx */ + <0x0 0x5a290000 0x0 0x10000>, /* channel9 UART0 tx */ + <0x0 0x5a2a0000 0x0 0x10000>, /* channel10 UART1 rx */ + <0x0 0x5a2b0000 0x0 0x10000>, /* channel11 UART1 tx */ + <0x0 0x5a2c0000 0x0 0x10000>, /* channel12 UART2 rx */ + <0x0 0x5a2d0000 0x0 0x10000>, /* channel13 UART2 tx */ + <0x0 0x5a2e0000 0x0 0x10000>, /* channel14 UART3 rx */ + <0x0 0x5a2f0000 0x0 0x10000>; /* channel15 UART3 tx */ + #dma-cells = <3>; + dma-channels = <8>; + interrupts = , + , + , + , + , + , + , + ; + interrupt-names = "edma-chan8-tx", "edma-chan9-tx", + "edma-chan10-tx", "edma-chan11-tx", + "edma-chan12-tx", "edma-chan13-tx", + "edma-chan14-tx", "edma-chan15-tx"; + status = "okay"; + }; + + edma2: dma-controller@591F0000 { + compatible = "fsl,imx8qm-edma"; + reg = <0x0 0x59200000 0x0 0x10000>, /* asrc0 */ + <0x0 0x59210000 0x0 0x10000>, + <0x0 0x59220000 0x0 0x10000>, + <0x0 0x59230000 0x0 0x10000>, + <0x0 0x59240000 0x0 0x10000>, + <0x0 0x59250000 0x0 0x10000>, + <0x0 0x59260000 0x0 0x10000>, /* esai0 rx */ + <0x0 0x59270000 0x0 0x10000>, /* esai0 tx */ + <0x0 0x59280000 0x0 0x10000>, /* spdif0 rx */ + <0x0 0x59290000 0x0 0x10000>, /* spdif0 tx */ + <0x0 0x592c0000 0x0 0x10000>, /* sai0 rx */ + <0x0 0x592d0000 0x0 0x10000>, /* sai0 tx */ + <0x0 0x592e0000 0x0 0x10000>, /* sai1 rx */ + <0x0 0x592f0000 0x0 0x10000>, /* sai1 tx */ + <0x0 0x59350000 0x0 0x10000>, + <0x0 0x59370000 0x0 0x10000>; + #dma-cells = <3>; + shared-interrupt; + dma-channels = <16>; + interrupts = , /* asrc 0 */ + , + , + , + , + , + , /* esai0 */ + , + , /* spdif0 */ + , + , /* sai0 */ + , + , /* sai1 */ + , + , + ; + interrupt-names = "edma-chan0-tx", "edma-chan1-tx", /* asrc0 */ + "edma-chan2-tx", "edma-chan3-tx", + "edma-chan4-tx", "edma-chan5-tx", + "edma-chan6-tx", "edma-chan7-tx", /* esai0 */ + "edma-chan8-tx", "edma-chan9-tx", /* spdif0 */ + "edma-chan12-tx", "edma-chan13-tx", /* sai0 */ + "edma-chan14-tx", "edma-chan15-tx", /* sai1 */ + "edma-chan21-tx", /* gpt5 */ + "edma-chan23-tx"; /* gpt7 */ + status = "okay"; + }; + + edma3: dma-controller@599F0000 { + compatible = "fsl,imx8qm-edma"; + reg = <0x0 0x59A00000 0x0 0x10000>, /* asrc1 */ + <0x0 0x59A10000 0x0 0x10000>, + <0x0 0x59A20000 0x0 0x10000>, + <0x0 0x59A30000 0x0 0x10000>, + <0x0 0x59A40000 0x0 0x10000>, + <0x0 0x59A50000 0x0 0x10000>, + <0x0 0x59A80000 0x0 0x10000>, /* sai4 rx */ + <0x0 0x59A90000 0x0 0x10000>, /* sai4 tx */ + <0x0 0x59AA0000 0x0 0x10000>; /* sai5 tx */ + #dma-cells = <3>; + shared-interrupt; + dma-channels = <9>; + interrupts = , /* asrc 1 */ + , + , + , + , + , + , /* sai4 */ + , + ; /* sai5 */ + interrupt-names = "edma-chan0-tx", "edma-chan1-tx", /* asrc1 */ + "edma-chan2-tx", "edma-chan3-tx", + "edma-chan4-tx", "edma-chan5-tx", + "edma-chan8-tx", "edma-chan9-tx", /* sai4 */ + "edma-chan10-tx"; /* sai5 */ + status = "okay"; + }; + + acm: acm@59e00000 { + compatible = "nxp,imx8qm-acm"; + reg = <0x0 0x59e00000 0x0 0x1D0000>; + status = "disabled"; + }; + + sai0: sai@59040000 { + compatible = "fsl,imx8qm-sai"; + reg = <0x0 0x59040000 0x0 0x10000>; + interrupts = ; + clocks = <&clk IMX8QXP_AUD_SAI_0_IPG>, + <&clk IMX8QXP_CLK_DUMMY>, + <&clk IMX8QXP_AUD_SAI_0_MCLK>, + <&clk IMX8QXP_CLK_DUMMY>, + <&clk IMX8QXP_CLK_DUMMY>; + clock-names = "bus", "mclk0", "mclk1", "mclk2", "mclk3"; + dma-names = "rx", "tx"; + dmas = <&edma2 12 0 1>, <&edma2 13 0 0>; + status = "disabled"; + power-domains = <&pd_sai0>; + }; + + sai1: sai@59050000 { + compatible = "fsl,imx8qm-sai"; + reg = <0x0 0x59050000 0x0 0x10000>; + interrupts = ; + clocks = <&clk IMX8QXP_AUD_SAI_1_IPG>, + <&clk IMX8QXP_CLK_DUMMY>, + <&clk IMX8QXP_AUD_SAI_1_MCLK>, + <&clk IMX8QXP_CLK_DUMMY>, + <&clk IMX8QXP_CLK_DUMMY>; + clock-names = "bus", "mclk0", "mclk1", "mclk2", "mclk3"; + dma-names = "rx", "tx"; + dmas = <&edma2 14 0 1>, <&edma2 15 0 0>; + status = "disabled"; + power-domains = <&pd_sai1>; + }; + + sai4: sai@59820000 { + compatible = "fsl,imx8qm-sai"; + reg = <0x0 0x59820000 0x0 0x10000>; + interrupts = ; + clocks = <&clk IMX8QXP_AUD_SAI_4_IPG>, + <&clk IMX8QXP_CLK_DUMMY>, + <&clk IMX8QXP_AUD_SAI_4_MCLK>, + <&clk IMX8QXP_CLK_DUMMY>, + <&clk IMX8QXP_CLK_DUMMY>; + dmas = <&edma3 8 0 1>, <&edma3 9 0 0>; + clock-names = "bus", "mclk0", "mclk1", "mclk2", "mclk3"; + dma-names = "rx", "tx"; + status = "disabled"; + power-domains = <&pd_sai4>; + }; + + sai5: sai@59830000 { + compatible = "fsl,imx8qm-sai"; + reg = <0x0 0x59830000 0x0 0x10000>; + interrupts = ; + clocks = <&clk IMX8QXP_AUD_SAI_5_IPG>, + <&clk IMX8QXP_CLK_DUMMY>, + <&clk IMX8QXP_AUD_SAI_5_MCLK>, + <&clk IMX8QXP_CLK_DUMMY>, + <&clk IMX8QXP_CLK_DUMMY>; + clock-names = "bus", "mclk0", "mclk1", "mclk2", "mclk3"; + dma-names = "tx"; + dmas = <&edma3 10 0 0>; + status = "disabled"; + power-domains = <&pd_sai5>; + }; + + amix: amix@59840000 { + compatible = "fsl,imx8qm-amix"; + reg = <0x0 0x59840000 0x0 0x10000>; + clocks = <&clk IMX8QXP_AUD_AMIX_IPG>; + clock-names = "ipg"; + power-domains = <&pd_amix>; + status = "disabled"; + }; + + asrc0: asrc@59000000 { + compatible = "fsl,imx8qm-asrc0"; + reg = <0x0 0x59000000 0x0 0x10000>; + interrupts = , + ; + clocks = <&clk IMX8QXP_AUD_ASRC_0_IPG>, + <&clk IMX8QXP_CLK_DUMMY>, + <&clk IMX8QXP_AUD_ACM_AUD_PLL_CLK0_CLK>, + <&clk IMX8QXP_AUD_ACM_AUD_PLL_CLK1_CLK>, + <&clk IMX8QXP_CLK_DUMMY>, + <&clk IMX8QXP_CLK_DUMMY>, + <&clk IMX8QXP_CLK_DUMMY>, + <&clk IMX8QXP_CLK_DUMMY>, + <&clk IMX8QXP_CLK_DUMMY>, + <&clk IMX8QXP_CLK_DUMMY>, + <&clk IMX8QXP_CLK_DUMMY>, + <&clk IMX8QXP_CLK_DUMMY>, + <&clk IMX8QXP_CLK_DUMMY>, + <&clk IMX8QXP_CLK_DUMMY>, + <&clk IMX8QXP_CLK_DUMMY>, + <&clk IMX8QXP_CLK_DUMMY>, + <&clk IMX8QXP_CLK_DUMMY>, + <&clk IMX8QXP_CLK_DUMMY>, + <&clk IMX8QXP_CLK_DUMMY>; + clock-names = "ipg", "mem", + "asrck_0", "asrck_1", "asrck_2", "asrck_3", + "asrck_4", "asrck_5", "asrck_6", "asrck_7", + "asrck_8", "asrck_9", "asrck_a", "asrck_b", + "asrck_c", "asrck_d", "asrck_e", "asrck_f", + "spba"; + dmas = <&edma2 0 0 0>, <&edma2 1 0 0>, <&edma2 2 0 0>, + <&edma2 3 0 1>, <&edma2 4 0 1>, <&edma2 5 0 1>; + dma-names = "rxa", "rxb", "rxc", + "txa", "txb", "txc"; + fsl,asrc-rate = <8000>; + fsl,asrc-width = <16>; + power-domains = <&pd_asrc0>; + status = "disabled"; + }; + + asrc1: asrc@59800000 { + compatible = "fsl,imx8qm-asrc1"; + reg = <0x0 0x59800000 0x0 0x10000>; + interrupts = , + ; + clocks = <&clk IMX8QXP_AUD_ASRC_1_IPG>, + <&clk IMX8QXP_CLK_DUMMY>, + <&clk IMX8QXP_AUD_ACM_AUD_PLL_CLK0_CLK>, + <&clk IMX8QXP_AUD_ACM_AUD_PLL_CLK1_CLK>, + <&clk IMX8QXP_CLK_DUMMY>, + <&clk IMX8QXP_CLK_DUMMY>, + <&clk IMX8QXP_CLK_DUMMY>, + <&clk IMX8QXP_CLK_DUMMY>, + <&clk IMX8QXP_CLK_DUMMY>, + <&clk IMX8QXP_CLK_DUMMY>, + <&clk IMX8QXP_CLK_DUMMY>, + <&clk IMX8QXP_CLK_DUMMY>, + <&clk IMX8QXP_CLK_DUMMY>, + <&clk IMX8QXP_CLK_DUMMY>, + <&clk IMX8QXP_CLK_DUMMY>, + <&clk IMX8QXP_CLK_DUMMY>, + <&clk IMX8QXP_CLK_DUMMY>, + <&clk IMX8QXP_CLK_DUMMY>, + <&clk IMX8QXP_CLK_DUMMY>; + clock-names = "ipg", "mem", + "asrck_0", "asrck_1", "asrck_2", "asrck_3", + "asrck_4", "asrck_5", "asrck_6", "asrck_7", + "asrck_8", "asrck_9", "asrck_a", "asrck_b", + "asrck_c", "asrck_d", "asrck_e", "asrck_f", + "spba"; + dmas = <&edma3 0 0 0>, <&edma3 1 0 0>, <&edma3 2 0 0>, + <&edma3 3 0 1>, <&edma3 4 0 1>, <&edma3 5 0 1>; + dma-names = "rxa", "rxb", "rxc", + "txa", "txb", "txc"; + fsl,asrc-rate = <8000>; + fsl,asrc-width = <16>; + power-domains = <&pd_asrc1>; + status = "disabled"; + }; + + mqs: mqs@59850000 { + compatible = "fsl,imx8qm-mqs"; + reg = <0x0 0x59850000 0x0 0x10000>; + clocks = <&clk IMX8QXP_AUD_MQS_IPG>, + <&clk IMX8QXP_AUD_MQS_HMCLK>; + clock-names = "core", "mclk"; + power-domains = <&pd_mqs0>; + status = "disabled"; + }; + + usdhc1: usdhc@5b010000 { + compatible = "fsl,imx8qm-usdhc", "fsl,imx6sl-usdhc"; + interrupt-parent = <&gic>; + interrupts = ; + reg = <0x0 0x5b010000 0x0 0x10000>; + clocks = <&clk IMX8QXP_SDHC0_IPG_CLK>, + <&clk IMX8QXP_SDHC0_CLK>, + <&clk IMX8QXP_CLK_DUMMY>; + clock-names = "ipg", "per", "ahb"; + assigned-clocks = <&clk IMX8QXP_SDHC0_DIV>; + assigned-clock-rates = <400000000>; + power-domains = <&pd_conn_sdch0>; + fsl,tuning-start-tap = <20>; + fsl,tuning-step= <2>; + status = "disabled"; + }; + + usdhc2: usdhc@5b020000 { + compatible = "fsl,imx8qm-usdhc", "fsl,imx6sl-usdhc"; + interrupt-parent = <&gic>; + interrupts = ; + reg = <0x0 0x5b020000 0x0 0x10000>; + clocks = <&clk IMX8QXP_SDHC1_IPG_CLK>, + <&clk IMX8QXP_SDHC1_CLK>, + <&clk IMX8QXP_CLK_DUMMY>; + clock-names = "ipg", "per", "ahb"; + assigned-clocks = <&clk IMX8QXP_SDHC1_DIV>; + assigned-clock-rates = <200000000>; + power-domains = <&pd_conn_sdch1>; + fsl,tuning-start-tap = <20>; + fsl,tuning-step= <2>; + status = "disabled"; + }; + + usdhc3: usdhc@5b030000 { + compatible = "fsl,imx8qm-usdhc", "fsl,imx6sl-usdhc"; + interrupt-parent = <&gic>; + interrupts = ; + reg = <0x0 0x5b030000 0x0 0x10000>; + clocks = <&clk IMX8QXP_SDHC2_IPG_CLK>, + <&clk IMX8QXP_SDHC2_CLK>, + <&clk IMX8QXP_CLK_DUMMY>; + clock-names = "ipg", "per", "ahb"; + assigned-clocks = <&clk IMX8QXP_SDHC2_DIV>; + assigned-clock-rates = <200000000>; + power-domains = <&pd_conn_sdch2>; + fsl,tuning-start-tap = <20>; + fsl,tuning-step = <2>; + status = "disabled"; + }; + + fec1: ethernet@5b040000 { + compatible = "fsl,imx7d-fec", "fsl,imx8qm-fec"; + reg = <0x0 0x5b040000 0x0 0x10000>; + interrupts = , + , + , + ; + clocks = <&clk IMX8QXP_ENET0_IPG_CLK>, <&clk IMX8QXP_ENET0_AHB_CLK>, <&clk IMX8QXP_ENET0_RGMII_TX_CLK>, + <&clk IMX8QXP_ENET0_PTP_CLK>, <&clk IMX8QXP_ENET0_TX_CLK>; + clock-names = "ipg", "ahb", "enet_clk_ref", "ptp", "enet_2x_txclk"; + assigned-clocks = <&clk IMX8QXP_ENET0_ROOT_DIV>, + <&clk IMX8QXP_ENET0_REF_DIV>, + <&clk IMX8QXP_ENET0_PTP_CLK>; + assigned-clock-rates = <250000000>, <125000000>, <125000000>; + fsl,num-tx-queues=<3>; + fsl,num-rx-queues=<3>; + power-domains = <&pd_conn_enet0>; + status = "disabled"; + }; + + fec2: ethernet@5b050000 { + compatible = "fsl,imx7d-fec", "fsl,imx8qm-fec"; + reg = <0x0 0x5b050000 0x0 0x10000>; + interrupts = , + , + , + ; + clocks = <&clk IMX8QXP_ENET1_IPG_CLK>, <&clk IMX8QXP_ENET1_AHB_CLK>, <&clk IMX8QXP_ENET1_RGMII_TX_CLK>, + <&clk IMX8QXP_ENET1_PTP_CLK>, <&clk IMX8QXP_ENET1_TX_CLK>; + clock-names = "ipg", "ahb", "enet_clk_ref", "ptp", "enet_2x_txclk"; + assigned-clocks = <&clk IMX8QXP_ENET1_ROOT_DIV>, + <&clk IMX8QXP_ENET1_REF_DIV>, + <&clk IMX8QXP_ENET1_PTP_CLK>; + assigned-clock-rates = <250000000>, <125000000>, <125000000>; + fsl,num-tx-queues=<3>; + fsl,num-rx-queues=<3>; + power-domains = <&pd_conn_enet1>; + status = "disabled"; + }; + + mlb: mlb@5B060000 { + compatible = "fsl,imx6q-mlb150"; + reg = <0x0 0x5B060000 0x0 0x10000>; + interrupt-parent = <&gic>; + interrupts = <0 265 IRQ_TYPE_LEVEL_HIGH>, + <0 266 IRQ_TYPE_LEVEL_HIGH>; + clocks = <&clk IMX8QXP_MLB_CLK>, + <&clk IMX8QXP_MLB_HCLK>, + <&clk IMX8QXP_MLB_IPG_CLK>; + clock-names = "mlb", "hclk", "ipg"; + assigned-clocks = <&clk IMX8QXP_MLB_CLK>, + <&clk IMX8QXP_MLB_HCLK>, + <&clk IMX8QXP_MLB_IPG_CLK>; + assigned-clock-rates = <333333333>, <333333333>, <83333333>; + power-domains = <&pd_conn_mlb0>; + status = "disabled"; + }; + + hifi4: hifi4@586e8000 { + compatible = "fsl,imx8qxp-hifi4"; + reg = <0x0 0x596e8000 0x0 0x88000>; + clocks = <&clk IMX8QXP_AUD_HIFI_IPG>, + <&clk IMX8QXP_AUD_OCRAM_IPG>, + <&clk IMX8QXP_AUD_HIFI_CORE_CLK>; + clock-names = "ipg", "ocram", "core"; + fsl,hifi4-firmware = "imx/hifi/hifi4.bin"; + power-domains = <&pd_hifi>; + }; + + esai0: esai@59010000 { + compatible = "fsl,imx6ull-esai"; + reg = <0x0 0x59010000 0x0 0x10000>; + interrupts = ; + clocks = <&clk IMX8QXP_AUD_ESAI_0_IPG>, + <&clk IMX8QXP_AUD_ESAI_0_EXTAL_IPG>, + <&clk IMX8QXP_AUD_ESAI_0_IPG>; + clock-names = "core", "extal", "fsys"; + dmas = <&edma2 6 0 1>, <&edma2 7 0 0>; + dma-names = "rx", "tx"; + power-domains = <&pd_esai0>; + status = "disabled"; + }; + + spdif0: spdif@59020000 { + compatible = "fsl,imx8qm-spdif"; + reg = <0x0 0x59020000 0x0 0x10000>; + interrupts = , /* rx */ + ; /* tx */ + clocks = <&clk IMX8QXP_AUD_SPDIF_0_GCLKW>, /* core */ + <&clk IMX8QXP_CLK_DUMMY>, /* rxtx0 */ + <&clk IMX8QXP_AUD_SPDIF_0_TX_CLK>, /* rxtx1 */ + <&clk IMX8QXP_CLK_DUMMY>, /* rxtx2 */ + <&clk IMX8QXP_CLK_DUMMY>, /* rxtx3 */ + <&clk IMX8QXP_CLK_DUMMY>, /* rxtx4 */ + <&clk IMX8QXP_IPG_AUD_CLK_ROOT>, /* rxtx5 */ + <&clk IMX8QXP_CLK_DUMMY>, /* rxtx6 */ + <&clk IMX8QXP_CLK_DUMMY>, /* rxtx7 */ + <&clk IMX8QXP_CLK_DUMMY>; /* spba */ + clock-names = "core", "rxtx0", + "rxtx1", "rxtx2", + "rxtx3", "rxtx4", + "rxtx5", "rxtx6", + "rxtx7", "spba"; + dmas = <&edma2 8 0 5>, <&edma2 9 0 4>; + dma-names = "rx", "tx"; + power-domains = <&pd_spdif0>; + status = "disabled"; + }; + + flexspi0: flexspi@05d120000 { + #address-cells = <1>; + #size-cells = <0>; + compatible = "fsl,imx8qm-flexspi"; + reg = <0x0 0x5d120000 0x0 0x10000>, <0x0 0x08000000 0x0 0x19ffffff>; + reg-names = "FlexSPI", "FlexSPI-memory"; + interrupts = ; + clocks = <&clk IMX8QXP_LSIO_FSPI0_CLK>, + <&clk IMX8QXP_LSIO_FSPI0_CLK>; + assigned-clock-rates = <29000000>,<29000000>; + clock-names = "qspi_en", "qspi"; + power-domains = <&pd_lsio_flexspi0>; + status = "disabled"; + }; +}; diff --git a/include/dt-bindings/clock/imx8qxp-clock.h b/include/dt-bindings/clock/imx8qxp-clock.h new file mode 100644 index 0000000000..a31c120dc0 --- /dev/null +++ b/include/dt-bindings/clock/imx8qxp-clock.h @@ -0,0 +1,533 @@ +/* + * Copyright (C) 2016 Freescale Semiconductor, Inc. + * Copyright 2017 NXP + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License + * as published by the Free Software Foundation; either version 2 + * of the License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + */ + +#ifndef __DT_BINDINGS_CLOCK_IMX8QXP_H +#define __DT_BINDINGS_CLOCK_IMX8QXP_H + +#define IMX8QXP_CLK_DUMMY 0 + +#define IMX8QXP_UART0_IPG_CLK 1 +#define IMX8QXP_UART0_DIV 2 +#define IMX8QXP_UART0_CLK 3 + +#define IMX8QXP_IPG_DMA_CLK_ROOT 4 + +/* GPU Clocks. */ +#define IMX8QXP_GPU0_CORE_DIV 5 +#define IMX8QXP_GPU0_CORE_CLK 6 +#define IMX8QXP_GPU0_SHADER_DIV 7 +#define IMX8QXP_GPU0_SHADER_CLK 8 + +#define IMX8QXP_24MHZ 9 +#define IMX8QXP_GPT_3M 10 +#define IMX8QXP_32KHZ 11 + +/* LSIO SS */ +#define IMX8QXP_LSIO_MEM_CLK 12 +#define IMX8QXP_LSIO_BUS_CLK 13 +#define IMX8QXP_LSIO_PWM0_DIV 14 +#define IMX8QXP_LSIO_PWM0_IPG_S_CLK 15 +#define IMX8QXP_LSIO_PWM0_IPG_SLV_CLK 16 +#define IMX8QXP_LSIO_PWM0_IPG_MSTR_CLK 17 +#define IMX8QXP_LSIO_PWM0_HF_CLK 18 +#define IMX8QXP_LSIO_PWM0_CLK 19 +#define IMX8QXP_LSIO_PWM1_DIV 20 +#define IMX8QXP_LSIO_PWM1_IPG_S_CLK 21 +#define IMX8QXP_LSIO_PWM1_IPG_SLV_CLK 22 +#define IMX8QXP_LSIO_PWM1_IPG_MSTR_CLK 23 +#define IMX8QXP_LSIO_PWM1_HF_CLK 24 +#define IMX8QXP_LSIO_PWM1_CLK 25 +#define IMX8QXP_LSIO_PWM2_DIV 26 +#define IMX8QXP_LSIO_PWM2_IPG_S_CLK 27 +#define IMX8QXP_LSIO_PWM2_IPG_SLV_CLK 28 +#define IMX8QXP_LSIO_PWM2_IPG_MSTR_CLK 29 +#define IMX8QXP_LSIO_PWM2_HF_CLK 30 +#define IMX8QXP_LSIO_PWM2_CLK 31 +#define IMX8QXP_LSIO_PWM3_DIV 32 +#define IMX8QXP_LSIO_PWM3_IPG_S_CLK 33 +#define IMX8QXP_LSIO_PWM3_IPG_SLV_CLK 34 +#define IMX8QXP_LSIO_PWM3_IPG_MSTR_CLK 35 +#define IMX8QXP_LSIO_PWM3_HF_CLK 36 +#define IMX8QXP_LSIO_PWM3_CLK 37 +#define IMX8QXP_LSIO_PWM4_DIV 38 +#define IMX8QXP_LSIO_PWM4_IPG_S_CLK 39 +#define IMX8QXP_LSIO_PWM4_IPG_SLV_CLK 40 +#define IMX8QXP_LSIO_PWM4_IPG_MSTR_CLK 42 +#define IMX8QXP_LSIO_PWM4_HF_CLK 43 +#define IMX8QXP_LSIO_PWM4_CLK 44 +#define IMX8QXP_LSIO_PWM5_DIV 45 +#define IMX8QXP_LSIO_PWM5_IPG_S_CLK 46 +#define IMX8QXP_LSIO_PWM5_IPG_SLV_CLK 47 +#define IMX8QXP_LSIO_PWM5_IPG_MSTR_CLK 48 +#define IMX8QXP_LSIO_PWM5_HF_CLK 49 +#define IMX8QXP_LSIO_PWM5_CLK 50 +#define IMX8QXP_LSIO_PWM6_DIV 51 +#define IMX8QXP_LSIO_PWM6_IPG_S_CLK 52 +#define IMX8QXP_LSIO_PWM6_IPG_SLV_CLK 53 +#define IMX8QXP_LSIO_PWM6_IPG_MSTR_CLK 54 +#define IMX8QXP_LSIO_PWM6_HF_CLK 55 +#define IMX8QXP_LSIO_PWM6_CLK 56 +#define IMX8QXP_LSIO_PWM7_DIV 57 +#define IMX8QXP_LSIO_PWM7_IPG_S_CLK 58 +#define IMX8QXP_LSIO_PWM7_IPG_SLV_CLK 59 +#define IMX8QXP_LSIO_PWM7_IPG_MSTR_CLK 60 +#define IMX8QXP_LSIO_PWM7_HF_CLK 61 +#define IMX8QXP_LSIO_PWM7_CLK 62 +#define IMX8QXP_LSIO_GPT0_DIV 63 +#define IMX8QXP_LSIO_GPT0_IPG_S_CLK 64 +#define IMX8QXP_LSIO_GPT0_IPG_SLV_CLK 65 +#define IMX8QXP_LSIO_GPT0_IPG_MSTR_CLK 66 +#define IMX8QXP_LSIO_GPT0_HF_CLK 67 +#define IMX8QXP_LSIO_GPT0_CLK 68 +#define IMX8QXP_LSIO_GPT1_DIV 69 +#define IMX8QXP_LSIO_GPT1_IPG_S_CLK 70 +#define IMX8QXP_LSIO_GPT1_IPG_SLV_CLK 71 +#define IMX8QXP_LSIO_GPT1_IPG_MSTR_CLK 72 +#define IMX8QXP_LSIO_GPT1_HF_CLK 73 +#define IMX8QXP_LSIO_GPT1_CLK 74 +#define IMX8QXP_LSIO_GPT2_DIV 75 +#define IMX8QXP_LSIO_GPT2_IPG_S_CLK 76 +#define IMX8QXP_LSIO_GPT2_IPG_SLV_CLK 77 +#define IMX8QXP_LSIO_GPT2_IPG_MSTR_CLK 78 +#define IMX8QXP_LSIO_GPT2_HF_CLK 79 +#define IMX8QXP_LSIO_GPT2_CLK 80 +#define IMX8QXP_LSIO_GPT3_DIV 81 +#define IMX8QXP_LSIO_GPT3_IPG_S_CLK 82 +#define IMX8QXP_LSIO_GPT3_IPG_SLV_CLK 83 +#define IMX8QXP_LSIO_GPT3_IPG_MSTR_CLK 84 +#define IMX8QXP_LSIO_GPT3_HF_CLK 85 +#define IMX8QXP_LSIO_GPT3_CLK 86 +#define IMX8QXP_LSIO_GPT4_DIV 87 +#define IMX8QXP_LSIO_GPT4_IPG_S_CLK 88 +#define IMX8QXP_LSIO_GPT4_IPG_SLV_CLK 89 +#define IMX8QXP_LSIO_GPT4_IPG_MSTR_CLK 90 +#define IMX8QXP_LSIO_GPT4_HF_CLK 91 +#define IMX8QXP_LSIO_GPT4_CLK 92 +#define IMX8QXP_LSIO_FSPI0_DIV 93 +#define IMX8QXP_LSIO_FSPI0_HCLK 94 +#define IMX8QXP_LSIO_FSPI0_IPG_S_CLK 95 +#define IMX8QXP_LSIO_FSPI0_IPG_CLK 96 +#define IMX8QXP_LSIO_FSPI0_CLK 97 +#define IMX8QXP_LSIO_FSPI1_DIV 98 +#define IMX8QXP_LSIO_FSPI1_HCLK 99 +#define IMX8QXP_LSIO_FSPI1_IPG_S_CLK 100 +#define IMX8QXP_LSIO_FSPI1_IPG_CLK 101 +#define IMX8QXP_LSIO_FSPI1_CLK 102 +#define IMX8QXP_LSIO_GPIO0_IPG_S_CLK 103 +#define IMX8QXP_LSIO_GPIO1_IPG_S_CLK 104 +#define IMX8QXP_LSIO_GPIO2_IPG_S_CLK 105 +#define IMX8QXP_LSIO_GPIO3_IPG_S_CLK 106 +#define IMX8QXP_LSIO_GPIO4_IPG_S_CLK 107 +#define IMX8QXP_LSIO_GPIO5_IPG_S_CLK 108 +#define IMX8QXP_LSIO_GPIO6_IPG_S_CLK 109 +#define IMX8QXP_LSIO_GPIO7_IPG_S_CLK 110 +#define IMX8QXP_LSIO_ROMCP_REG_CLK 111 +#define IMX8QXP_LSIO_ROMCP_CLK 112 +#define IMX8QXP_LSIO_96KROM_CLK 113 +#define IMX8QXP_LSIO_OCRAM_MEM_CLK 114 +#define IMX8QXP_LSIO_OCRAM_CTRL_CLK 115 + +/* ADMA SS */ +#define IMX8QXP_UART1_IPG_CLK 116 +#define IMX8QXP_UART2_IPG_CLK 117 +#define IMX8QXP_UART3_IPG_CLK 118 +#define IMX8QXP_UART1_DIV 119 +#define IMX8QXP_UART2_DIV 120 +#define IMX8QXP_UART3_DIV 121 +#define IMX8QXP_UART1_CLK 122 +#define IMX8QXP_UART2_CLK 123 +#define IMX8QXP_UART3_CLK 124 +#define IMX8QXP_SPI0_IPG_CLK 125 +#define IMX8QXP_SPI1_IPG_CLK 126 +#define IMX8QXP_SPI2_IPG_CLK 127 +#define IMX8QXP_SPI3_IPG_CLK 128 +#define IMX8QXP_SPI0_DIV 129 +#define IMX8QXP_SPI1_DIV 130 +#define IMX8QXP_SPI2_DIV 131 +#define IMX8QXP_SPI3_DIV 132 +#define IMX8QXP_SPI0_CLK 133 +#define IMX8QXP_SPI1_CLK 134 +#define IMX8QXP_SPI2_CLK 135 +#define IMX8QXP_SPI3_CLK 136 +#define IMX8QXP_CAN0_IPG_CHI_CLK 137 +#define IMX8QXP_CAN1_IPG_CHI_CLK 138 +#define IMX8QXP_CAN2_IPG_CHI_CLK 139 +#define IMX8QXP_CAN0_IPG_CLK 140 +#define IMX8QXP_CAN1_IPG_CLK 141 +#define IMX8QXP_CAN2_IPG_CLK 142 +#define IMX8QXP_CAN0_DIV 143 +#define IMX8QXP_CAN1_DIV 144 +#define IMX8QXP_CAN2_DIV 145 +#define IMX8QXP_CAN0_CLK 146 +#define IMX8QXP_CAN1_CLK 147 +#define IMX8QXP_CAN2_CLK 148 +#define IMX8QXP_I2C0_IPG_CLK 149 +#define IMX8QXP_I2C1_IPG_CLK 150 +#define IMX8QXP_I2C2_IPG_CLK 151 +#define IMX8QXP_I2C3_IPG_CLK 152 +#define IMX8QXP_I2C0_DIV 153 +#define IMX8QXP_I2C1_DIV 154 +#define IMX8QXP_I2C2_DIV 155 +#define IMX8QXP_I2C3_DIV 156 +#define IMX8QXP_I2C0_CLK 157 +#define IMX8QXP_I2C1_CLK 158 +#define IMX8QXP_I2C2_CLK 159 +#define IMX8QXP_I2C3_CLK 160 +#define IMX8QXP_FTM0_IPG_CLK 161 +#define IMX8QXP_FTM1_IPG_CLK 162 +#define IMX8QXP_FTM0_DIV 163 +#define IMX8QXP_FTM1_DIV 164 +#define IMX8QXP_FTM0_CLK 165 +#define IMX8QXP_FTM1_CLK 166 +#define IMX8QXP_ADC0_IPG_CLK 167 +#define IMX8QXP_ADC0_DIV 168 +#define IMX8QXP_ADC0_CLK 169 +#define IMX8QXP_PWM_IPG_CLK 170 +#define IMX8QXP_PWM_DIV 171 +#define IMX8QXP_PWM_CLK 172 +#define IMX8QXP_LCD_IPG_CLK 173 +#define IMX8QXP_LCD_DIV 174 +#define IMX8QXP_LCD_CLK 175 + +/* Connectivity SS */ +#define IMX8QXP_AXI_CONN_CLK_ROOT 176 +#define IMX8QXP_AHB_CONN_CLK_ROOT 177 +#define IMX8QXP_IPG_CONN_CLK_ROOT 178 +#define IMX8QXP_SDHC0_IPG_CLK 179 +#define IMX8QXP_SDHC1_IPG_CLK 180 +#define IMX8QXP_SDHC2_IPG_CLK 181 +#define IMX8QXP_SDHC0_DIV 182 +#define IMX8QXP_SDHC1_DIV 183 +#define IMX8QXP_SDHC2_DIV 184 +#define IMX8QXP_SDHC0_CLK 185 +#define IMX8QXP_SDHC1_CLK 186 +#define IMX8QXP_SDHC2_CLK 187 +#define IMX8QXP_ENET0_ROOT_DIV 188 +#define IMX8QXP_ENET0_REF_DIV 189 +#define IMX8QXP_ENET1_REF_DIV 190 +#define IMX8QXP_ENET0_BYPASS_DIV 191 +#define IMX8QXP_ENET0_RGMII_DIV 192 +#define IMX8QXP_ENET1_ROOT_DIV 193 +#define IMX8QXP_ENET1_BYPASS_DIV 194 +#define IMX8QXP_ENET1_RGMII_DIV 195 +#define IMX8QXP_ENET0_AHB_CLK 196 +#define IMX8QXP_ENET0_IPG_S_CLK 197 +#define IMX8QXP_ENET0_IPG_CLK 198 +#define IMX8QXP_ENET1_AHB_CLK 199 +#define IMX8QXP_ENET1_IPG_S_CLK 200 +#define IMX8QXP_ENET1_IPG_CLK 201 +#define IMX8QXP_ENET0_ROOT_CLK 202 +#define IMX8QXP_ENET1_ROOT_CLK 203 +#define IMX8QXP_ENET0_TX_CLK 204 +#define IMX8QXP_ENET1_TX_CLK 205 +#define IMX8QXP_ENET0_PTP_CLK 206 +#define IMX8QXP_ENET1_PTP_CLK 207 +#define IMX8QXP_ENET0_REF_25MHZ_125MHZ_SEL 208 +#define IMX8QXP_ENET1_REF_25MHZ_125MHZ_SEL 209 +#define IMX8QXP_ENET0_RMII_TX_SEL 210 +#define IMX8QXP_ENET1_RMII_TX_SEL 211 +#define IMX8QXP_ENET0_RGMII_TX_CLK 212 +#define IMX8QXP_ENET1_RGMII_TX_CLK 213 +#define IMX8QXP_ENET0_RMII_RX_CLK 214 +#define IMX8QXP_ENET1_RMII_RX_CLK 215 +#define IMX8QXP_ENET0_REF_25MHZ_125MHZ_CLK 216 +#define IMX8QXP_ENET1_REF_25MHZ_125MHZ_CLK 217 +#define IMX8QXP_ENET0_REF_50MHZ_CLK 218 +#define IMX8QXP_ENET1_REF_50MHZ_CLK 219 +#define IMX8QXP_GPMI_BCH_IO_DIV 220 +#define IMX8QXP_GPMI_BCH_DIV 221 +#define IMX8QXP_GPMI_APB_CLK 222 +#define IMX8QXP_GPMI_APB_BCH_CLK 223 +#define IMX8QXP_GPMI_BCH_IO_CLK 224 +#define IMX8QXP_GPMI_BCH_CLK 225 +#define IMX8QXP_APBHDMA_CLK 226 +#define IMX8QXP_USB3_ACLK_DIV 227 +#define IMX8QXP_USB3_BUS_DIV 228 +#define IMX8QXP_USB3_LPM_DIV 229 +#define IMX8QXP_USB3_IPG_CLK 230 +#define IMX8QXP_USB3_CORE_PCLK 231 +#define IMX8QXP_USB3_PHY_CLK 232 +#define IMX8QXP_USB3_ACLK 233 +#define IMX8QXP_USB3_BUS_CLK 234 +#define IMX8QXP_USB3_LPM_CLK 235 +#define IMX8QXP_USB2_OH_AHB_CLK 236 +#define IMX8QXP_USB2_OH_IPG_S_CLK 237 +#define IMX8QXP_USB2_OH_IPG_S_PL301_CLK 238 +#define IMX8QXP_USB2_PHY_IPG_CLK 239 +#define IMX8QXP_EDMA_CLK 240 +#define IMX8QXP_EDMA_IPG_CLK 241 +#define IMX8QXP_MLB_HCLK 242 +#define IMX8QXP_MLB_CLK 243 +#define IMX8QXP_MLB_IPG_CLK 244 + +/* Display controller SS */ +/* DC part1 */ +#define IMX8QXP_DC_AXI_EXT_CLK 245 +#define IMX8QXP_DC_AXI_INT_CLK 246 +#define IMX8QXP_DC_CFG_CLK 247 +#define IMX8QXP_DC0_DISP0_CLK 248 +#define IMX8QXP_DC0_DISP1_CLK 249 +#define IMX8QXP_DC0_PRG0_RTRAM_CLK 250 +#define IMX8QXP_DC0_PRG0_APB_CLK 251 +#define IMX8QXP_DC0_PRG1_RTRAM_CLK 252 +#define IMX8QXP_DC0_PRG1_APB_CLK 253 +#define IMX8QXP_DC0_PRG2_RTRAM_CLK 254 +#define IMX8QXP_DC0_PRG2_APB_CLK 255 +#define IMX8QXP_DC0_PRG3_RTRAM_CLK 256 +#define IMX8QXP_DC0_PRG3_APB_CLK 257 +#define IMX8QXP_DC0_PRG4_RTRAM_CLK 258 +#define IMX8QXP_DC0_PRG4_APB_CLK 259 +#define IMX8QXP_DC0_PRG5_RTRAM_CLK 260 +#define IMX8QXP_DC0_PRG5_APB_CLK 261 +#define IMX8QXP_DC0_PRG6_RTRAM_CLK 262 +#define IMX8QXP_DC0_PRG6_APB_CLK 263 +#define IMX8QXP_DC0_PRG7_RTRAM_CLK 264 +#define IMX8QXP_DC0_PRG7_APB_CLK 265 +#define IMX8QXP_DC0_PRG8_RTRAM_CLK 266 +#define IMX8QXP_DC0_PRG8_APB_CLK 267 +#define IMX8QXP_DC0_DPR0_APB_CLK 268 +#define IMX8QXP_DC0_DPR0_B_CLK 269 +#define IMX8QXP_DC0_RTRAM0_CLK 270 +#define IMX8QXP_DC0_RTRAM1_CLK 271 + +/* MIPI-LVDS part1 */ +#define IMX8QXP_MIPI_IPG_CLK 272 +#define IMX8QXP_MIPI0_I2C0_DIV 273 +#define IMX8QXP_MIPI0_I2C1_DIV 274 +#define IMX8QXP_MIPI0_I2C0_CLK 275 +#define IMX8QXP_MIPI0_I2C1_CLK 276 +#define IMX8QXP_MIPI0_I2C0_IPG_S_CLK 277 +#define IMX8QXP_MIPI0_I2C0_IPG_CLK 278 +#define IMX8QXP_MIPI0_I2C1_IPG_S_CLK 279 +#define IMX8QXP_MIPI0_I2C1_IPG_CLK 280 +#define IMX8QXP_MIPI0_PWM_IPG_S_CLK 281 +#define IMX8QXP_MIPI0_PWM_IPG_CLK 282 +#define IMX8QXP_MIPI0_PWM_32K_CLK 283 +#define IMX8QXP_MIPI0_GPIO_IPG_CLK 284 + +#define IMX8QXP_IMG_JPEG_ENC_IPG_CLK 285 +#define IMX8QXP_IMG_JPEG_ENC_CLK 286 +#define IMX8QXP_IMG_JPEG_DEC_IPG_CLK 287 +#define IMX8QXP_IMG_JPEG_DEC_CLK 288 +#define IMX8QXP_IMG_PXL_LINK_DC0_CLK 289 +#define IMX8QXP_IMG_PXL_LINK_DC1_CLK 290 +#define IMX8QXP_IMG_PXL_LINK_CSI0_CLK 291 +#define IMX8QXP_IMG_PXL_LINK_CSI1_CLK 292 +#define IMX8QXP_IMG_PXL_LINK_HDMI_IN_CLK 293 +#define IMX8QXP_IMG_PDMA_0_CLK 294 +#define IMX8QXP_IMG_PDMA_1_CLK 295 +#define IMX8QXP_IMG_PDMA_2_CLK 296 +#define IMX8QXP_IMG_PDMA_3_CLK 297 +#define IMX8QXP_IMG_PDMA_4_CLK 298 +#define IMX8QXP_IMG_PDMA_5_CLK 299 +#define IMX8QXP_IMG_PDMA_6_CLK 300 +#define IMX8QXP_IMG_PDMA_7_CLK 301 +#define IMX8QXP_IMG_AXI_CLK 302 +#define IMX8QXP_IMG_IPG_CLK 303 +#define IMX8QXP_IMG_PXL_CLK 304 + +#define IMX8QXP_CSI0_I2C0_DIV 305 +#define IMX8QXP_CSI0_PWM0_DIV 306 +#define IMX8QXP_CSI0_CORE_DIV 307 +#define IMX8QXP_CSI0_ESC_DIV 308 +#define IMX8QXP_CSI0_IPG_CLK_S 309 +#define IMX8QXP_CSI0_IPG_CLK 310 +#define IMX8QXP_CSI0_APB_CLK 311 +#define IMX8QXP_CSI0_I2C0_IPG_CLK 312 +#define IMX8QXP_CSI0_I2C0_CLK 313 +#define IMX8QXP_CSI0_PWM0_IPG_CLK 314 +#define IMX8QXP_CSI0_PWM0_CLK 315 +#define IMX8QXP_CSI0_CORE_CLK 316 +#define IMX8QXP_CSI0_ESC_CLK 317 + +#define IMX8QXP_HSIO_AXI_CLK 318 +#define IMX8QXP_HSIO_PER_CLK 319 +#define IMX8QXP_HSIO_PCIE_MSTR_AXI_CLK 320 +#define IMX8QXP_HSIO_PCIE_SLV_AXI_CLK 321 +#define IMX8QXP_HSIO_PCIE_DBI_AXI_CLK 322 +#define IMX8QXP_HSIO_PCIE_X1_PER_CLK 323 +#define IMX8QXP_HSIO_PHY_X1_PER_CLK 324 +#define IMX8QXP_HSIO_MISC_PER_CLK 325 +#define IMX8QXP_HSIO_PHY_X1_APB_CLK 326 +#define IMX8QXP_HSIO_GPIO_CLK 327 +#define IMX8QXP_HSIO_PHY_X1_PCLK 328 + +#define IMX8QXP_A35_DIV 329 + +/* ACM */ +#define IMX8QXP_EXT_AUD_MCLK0 330 +#define IMX8QXP_EXT_AUD_MCLK1 331 +#define IMX8QXP_ESAI0_RX_CLK 332 +#define IMX8QXP_ESAI0_RX_HF_CLK 333 +#define IMX8QXP_ESAI0_TX_CLK 334 +#define IMX8QXP_ESAI0_TX_HF_CLK 335 +#define IMX8QXP_SPDIF0_RX 336 +#define IMX8QXP_SAI0_RX_BCLK 337 +#define IMX8QXP_SAI0_TX_BCLK 338 +#define IMX8QXP_SAI1_RX_BCLK 339 +#define IMX8QXP_SAI1_TX_BCLK 340 +#define IMX8QXP_SAI2_RX_BCLK 341 +#define IMX8QXP_SAI3_RX_BCLK 342 +#define IMX8QXP_SAI4_RX_BCLK 343 + +#define IMX8QXP_ACM_AUD_CLK0_SEL 344 +#define IMX8QXP_ACM_AUD_CLK0_CLK 345 +#define IMX8QXP_ACM_AUD_CLK1_SEL 346 +#define IMX8QXP_ACM_AUD_CLK1_CLK 347 +#define IMX8QXP_ACM_MCLKOUT0_SEL 348 +#define IMX8QXP_ACM_MCLKOUT0_CLK 349 +#define IMX8QXP_ACM_MCLKOUT1_SEL 350 +#define IMX8QXP_ACM_MCLKOUT1_CLK 351 +#define IMX8QXP_ACM_ESAI0_MCLK_SEL 352 +#define IMX8QXP_ACM_ESAI0_MCLK_CLK 353 +#define IMX8QXP_ACM_GPT0_MUX_CLK_SEL 354 +#define IMX8QXP_ACM_GPT0_MUX_CLK_CLK 355 +#define IMX8QXP_ACM_GPT1_MUX_CLK_SEL 356 +#define IMX8QXP_ACM_GPT1_MUX_CLK_CLK 357 +#define IMX8QXP_ACM_GPT2_MUX_CLK_SEL 358 +#define IMX8QXP_ACM_GPT2_MUX_CLK_CLK 359 +#define IMX8QXP_ACM_GPT3_MUX_CLK_SEL 360 +#define IMX8QXP_ACM_GPT3_MUX_CLK_CLK 361 +#define IMX8QXP_ACM_GPT4_MUX_CLK_SEL 362 +#define IMX8QXP_ACM_GPT4_MUX_CLK_CLK 363 +#define IMX8QXP_ACM_GPT5_MUX_CLK_SEL 364 +#define IMX8QXP_ACM_GPT5_MUX_CLK_CLK 365 +#define IMX8QXP_ACM_SAI0_MCLK_SEL 366 +#define IMX8QXP_ACM_SAI0_MCLK_CLK 367 +#define IMX8QXP_ACM_SAI1_MCLK_SEL 368 +#define IMX8QXP_ACM_SAI1_MCLK_CLK 369 +#define IMX8QXP_ACM_SAI2_MCLK_SEL 370 +#define IMX8QXP_ACM_SAI2_MCLK_CLK 371 +#define IMX8QXP_ACM_SAI3_MCLK_SEL 372 +#define IMX8QXP_ACM_SAI3_MCLK_CLK 373 +#define IMX8QXP_ACM_SAI4_MCLK_SEL 374 +#define IMX8QXP_ACM_SAI4_MCLK_CLK 375 +#define IMX8QXP_ACM_SAI5_MCLK_SEL 376 +#define IMX8QXP_ACM_SAI5_MCLK_CLK 377 +#define IMX8QXP_ACM_SPDIF0_TX_CLK_SEL 378 +#define IMX8QXP_ACM_SPDIF0_TX_CLK_CLK 379 +#define IMX8QXP_ACM_MQS_TX_CLK_SEL 380 +#define IMX8QXP_ACM_MQS_TX_CLK_CLK 381 +#define IMX8QXP_ACM_ASRC0_MUX_CLK_SEL 382 +#define IMX8QXP_ACM_ASRC1_MUX_CLK_SEL 383 +#define IMX8QXP_ACM_ASRC0_MUX_CLK_CLK 384 +#define IMX8QXP_ACM_ASRC1_MUX_CLK_CLK 385 + +#define IMX8QXP_IPG_AUD_CLK_ROOT 386 + +/* Audio */ +#define IMX8QXP_AUD_PLL0_DIV 387 +#define IMX8QXP_AUD_PLL0 388 +#define IMX8QXP_AUD_PLL1_DIV 389 +#define IMX8QXP_AUD_PLL1 390 +#define IMX8QXP_AUD_AMIX_IPG 391 +#define IMX8QXP_AUD_ESAI_0_IPG 392 +#define IMX8QXP_AUD_ESAI_0_EXTAL_IPG 393 +#define IMX8QXP_AUD_SAI_0_IPG 394 +#define IMX8QXP_AUD_SAI_0_MCLK 395 +#define IMX8QXP_AUD_SAI_1_IPG 396 +#define IMX8QXP_AUD_SAI_1_MCLK 397 +#define IMX8QXP_AUD_SAI_2_IPG 398 +#define IMX8QXP_AUD_SAI_2_MCLK 399 +#define IMX8QXP_AUD_SAI_3_IPG 400 +#define IMX8QXP_AUD_SAI_3_MCLK 401 +#define IMX8QXP_AUD_SAI_4_IPG 402 +#define IMX8QXP_AUD_SAI_4_MCLK 403 +#define IMX8QXP_AUD_SAI_5_IPG 404 +#define IMX8QXP_AUD_SAI_5_MCLK 405 +#define IMX8QXP_AUD_MQS_IPG 406 +#define IMX8QXP_AUD_MQS_HMCLK 407 +#define IMX8QXP_AUD_GPT5_IPG 408 +#define IMX8QXP_AUD_GPT5_CLKIN 409 +#define IMX8QXP_AUD_GPT6_IPG 410 +#define IMX8QXP_AUD_GPT6_CLKIN 411 +#define IMX8QXP_AUD_GPT7_IPG 412 +#define IMX8QXP_AUD_GPT7_CLKIN 413 +#define IMX8QXP_AUD_GPT8_IPG 414 +#define IMX8QXP_AUD_GPT8_CLKIN 415 +#define IMX8QXP_AUD_GPT9_IPG 416 +#define IMX8QXP_AUD_GPT9_CLKIN 417 +#define IMX8QXP_AUD_GPT10_IPG 418 +#define IMX8QXP_AUD_GPT10_CLKIN 419 +#define IMX8QXP_AUD_ACM_AUD_PLL_CLK0_DIV 420 +#define IMX8QXP_AUD_ACM_AUD_PLL_CLK0_CLK 421 +#define IMX8QXP_AUD_ACM_AUD_PLL_CLK1_DIV 422 +#define IMX8QXP_AUD_ACM_AUD_PLL_CLK1_CLK 423 +#define IMX8QXP_AUD_ACM_AUD_REC_CLK0_DIV 424 +#define IMX8QXP_AUD_ACM_AUD_REC_CLK0_CLK 425 +#define IMX8QXP_AUD_ACM_AUD_REC_CLK1_DIV 426 +#define IMX8QXP_AUD_ACM_AUD_REC_CLK1_CLK 427 +#define IMX8QXP_AUD_MCLKOUT0 428 +#define IMX8QXP_AUD_MCLKOUT1 429 +#define IMX8QXP_AUD_SPDIF_0_TX_CLK 430 +#define IMX8QXP_AUD_SPDIF_0_GCLKW 431 +#define IMX8QXP_AUD_SPDIF_0_IPG 432 +#define IMX8QXP_AUD_ASRC_0_IPG 433 +#define IMX8QXP_AUD_ASRC_1_IPG 434 +#define IMX8QXP_AUD_HIFI_ADB_ACLK 435 +#define IMX8QXP_AUD_HIFI_IPG 436 +#define IMX8QXP_AUD_HIFI_CORE_CLK 437 +#define IMX8QXP_AUD_OCRAM_IPG 438 + +/* DC part2 */ +#define IMX8QXP_DC0_DISP0_DIV 439 +#define IMX8QXP_DC0_DISP1_DIV 440 +#define IMX8QXP_DC0_BYPASS_0_DIV 441 +#define IMX8QXP_DC0_BYPASS_1_DIV 442 +#define IMX8QXP_DC0_PLL0_DIV 443 +#define IMX8QXP_DC0_PLL1_DIV 444 +#define IMX8QXP_DC0_PLL0_CLK 445 +#define IMX8QXP_DC0_PLL1_CLK 446 + +/* MIPI-LVDS part2 */ +#define IMX8QXP_MIPI0_BYPASS_CLK 447 +#define IMX8QXP_MIPI0_PIXEL_DIV 448 +#define IMX8QXP_MIPI0_PIXEL_CLK 449 +#define IMX8QXP_MIPI0_LVDS_PIXEL_DIV 450 +#define IMX8QXP_MIPI0_LVDS_PIXEL_CLK 451 +#define IMX8QXP_MIPI0_LVDS_BYPASS_CLK 452 +#define IMX8QXP_MIPI0_LVDS_PHY_DIV 453 +#define IMX8QXP_MIPI0_LVDS_PHY_CLK 454 +#define IMX8QXP_MIPI0_LIS_IPG_CLK 455 +#define IMX8QXP_MIPI1_I2C0_DIV 456 +#define IMX8QXP_MIPI1_I2C1_DIV 457 +#define IMX8QXP_MIPI1_I2C0_CLK 458 +#define IMX8QXP_MIPI1_I2C1_CLK 459 +#define IMX8QXP_MIPI1_I2C0_IPG_S_CLK 460 +#define IMX8QXP_MIPI1_I2C0_IPG_CLK 461 +#define IMX8QXP_MIPI1_I2C1_IPG_S_CLK 462 +#define IMX8QXP_MIPI1_I2C1_IPG_CLK 463 +#define IMX8QXP_MIPI1_PWM_IPG_S_CLK 464 +#define IMX8QXP_MIPI1_PWM_IPG_CLK 465 +#define IMX8QXP_MIPI1_PWM_32K_CLK 466 +#define IMX8QXP_MIPI1_GPIO_IPG_CLK 467 +#define IMX8QXP_MIPI1_BYPASS_CLK 468 +#define IMX8QXP_MIPI1_PIXEL_DIV 469 +#define IMX8QXP_MIPI1_PIXEL_CLK 470 +#define IMX8QXP_MIPI1_LVDS_PIXEL_DIV 471 +#define IMX8QXP_MIPI1_LVDS_PIXEL_CLK 472 +#define IMX8QXP_MIPI1_LVDS_BYPASS_CLK 473 +#define IMX8QXP_MIPI1_LVDS_PHY_DIV 474 +#define IMX8QXP_MIPI1_LVDS_PHY_CLK 475 +#define IMX8QXP_MIPI1_LIS_IPG_CLK 476 + +/* CM40 */ +#define IMX8QXP_CM40_IPG_CLK 477 +#define IMX8QXP_CM40_I2C_DIV 478 +#define IMX8QXP_CM40_I2C_CLK 479 +#define IMX8QXP_CM40_I2C_IPG_CLK 480 + +#define IMX8QXP_CLK_END 481 +#endif /* __DT_BINDINGS_CLOCK_IMX8QXP_H */ diff --git a/include/dt-bindings/soc/imx8_pd.h b/include/dt-bindings/soc/imx8_pd.h new file mode 100644 index 0000000000..ef685fe73b --- /dev/null +++ b/include/dt-bindings/soc/imx8_pd.h @@ -0,0 +1,197 @@ +/* + * Copyright 2018 NXP + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License + * as published by the Free Software Foundation; either version 2 + * of the License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + */ + +#ifndef __DT_BINDINGS_IMX8_PD_H +#define __DT_BINDINGS_IMX8_PD_H + +/*! + * These defines are used to indicate a resource. Resources include peripherals + * and bus masters (but not memory regions). Note items from list should + * never be changed or removed (only added to at the end of the list). + */ +#define PD_DC_0 dc0_power_domain +#define PD_DC_0_PLL_0 dc0_pll0 +#define PD_DC_0_PLL_1 dc0_pll1 +#define PD_LVDS0 lvds0_power_domain +#define PD_LVDS0_I2C0 lvds0_i2c0 +#define PD_LVDS0_I2C1 lvds0_i2c1 +#define PD_LVDS0_PWM lvds0_pwm +#define PD_LVDS0_PWM lvds0_pwm +#define PD_LVDS0_GPIO lvds0_gpio +#define PD_DC_1 dc1_power_domain +#define PD_DC_1_PLL_0 dc1_pll0 +#define PD_DC_1_PLL_1 dc1_pll1 +#define PD_LVDS1 lvds1_power_domain +#define PD_LVDS1_I2C0 lvds1_i2c0 +#define PD_LVDS1_I2C1 lvds1_i2c1 +#define PD_LVDS1_PWM lvds1_pwm +#define PD_LVDS1_GPIO lvds1_gpio + +#define PD_DMA dma_power_domain +#define PD_DMA_SPI_0 dma_spi0 +#define PD_DMA_SPI_1 dma_spi1 +#define PD_DMA_SPI_2 dma_spi2 +#define PD_DMA_SPI_3 dma_spi3 +#define PD_DMA_UART0 dma_lpuart0 +#define PD_DMA_UART1 dma_lpuart1 +#define PD_DMA_UART2 dma_lpuart2 +#define PD_DMA_UART3 dma_lpuart3 +#define PD_DMA_UART4 dma_lpuart4 +#define PD_DMA_EMVSIM_0 dma_emvsim0 +#define PD_DMA_EMVSIM_1 dma_emvsim1 +#define PD_DMA_I2C_0 dma_lpi2c0 +#define PD_DMA_I2C_1 dma_lpi2c1 +#define PD_DMA_I2C_2 dma_lpi2c2 +#define PD_DMA_I2C_3 dma_lpi2c3 +#define PD_DMA_I2C_4 dma_lpi2c4 +#define PD_DMA_ADC_0 dma_adc0 +#define PD_DMA_ADC_1 dma_adc1 +#define PD_DMA_FTM_0 dma_ftm0 +#define PD_DMA_FTM_1 dma_ftm1 +#define PD_DMA_CAN_0 dma_flexcan0 +#define PD_DMA_CAN_1 dma_flexcan1 +#define PD_DMA_CAN_2 dma_flexcan2 +#define PD_DMA_PWM_0 dma_pwm0 +#define PD_DMA_LCD_0 dma_lcd0 + +#define PD_HSIO hsio_power_domain +#define PD_HSIO_PCIE_A hsio_pcie0 +#define PD_HSIO_PCIE_B hsio_pcie1 +#define PD_HSIO_SATA_0 hsio_sata0 +#define PD_HSIO_GPIO hsio_gpio + +#define PD_LCD_0 lcd0_power_domain +#define PD_LCD_0_I2C_0 lcd0_i2c0 +#define PD_LCD_0_I2C_1 lcd0_i2c1 +#define PD_LCD_PWM_0 lcd0_pwm0 + +#define PD_LSIO lsio_power_domain +#define PD_LSIO_GPIO_0 lsio_gpio0 +#define PD_LSIO_GPIO_1 lsio_gpio1 +#define PD_LSIO_GPIO_2 lsio_gpio2 +#define PD_LSIO_GPIO_3 lsio_gpio3 +#define PD_LSIO_GPIO_4 lsio_gpio4 +#define PD_LSIO_GPIO_5 lsio_gpio5 +#define PD_LSIO_GPIO_6 lsio_gpio6 +#define PD_LSIO_GPIO_7 lsio_gpio7 +#define PD_LSIO_GPT_0 lsio_gpt0 +#define PD_LSIO_GPT_1 lsio_gpt1 +#define PD_LSIO_GPT_2 lsio_gpt2 +#define PD_LSIO_GPT_3 lsio_gpt3 +#define PD_LSIO_GPT_4 lsio_gpt4 +#define PD_LSIO_KPP lsio_kpp +#define PD_LSIO_FSPI_0 lsio_fspi0 +#define PD_LSIO_FSPI_1 lsio_fspi1 +#define PD_LSIO_PWM_0 lsio_pwm0 +#define PD_LSIO_PWM_1 lsio_pwm1 +#define PD_LSIO_PWM_2 lsio_pwm2 +#define PD_LSIO_PWM_3 lsio_pwm3 +#define PD_LSIO_PWM_4 lsio_pwm4 +#define PD_LSIO_PWM_5 lsio_pwm5 +#define PD_LSIO_PWM_6 lsio_pwm6 +#define PD_LSIO_PWM_7 lsio_pwm7 + +#define PD_CONN connectivity_power_domain +#define PD_CONN_SDHC_0 conn_sdhc0 +#define PD_CONN_SDHC_1 conn_sdhc1 +#define PD_CONN_SDHC_2 conn_sdhc2 +#define PD_CONN_ENET_0 conn_enet0 +#define PD_CONN_ENET_1 conn_enet1 +#define PD_CONN_MLB_0 conn_mlb0 +#define PD_CONN_DMA_4_CH0 conn_dma4_ch0 +#define PD_CONN_DMA_4_CH1 conn_dma4_ch1 +#define PD_CONN_DMA_4_CH2 conn_dma4_ch2 +#define PD_CONN_DMA_4_CH3 conn_dma4_ch3 +#define PD_CONN_DMA_4_CH4 conn_dma4_ch4 +#define PD_CONN_USB_0 conn_usb0 +#define PD_CONN_USB_1 conn_usb1 +#define PD_CONN_USB_0_PHY conn_usb0_phy +#define PD_CONN_USB_2 conn_usb2 +#define PD_CONN_USB_2_PHY conn_usb2_phy +#define PD_CONN_NAND conn_nand + +#define PD_AUDIO audio_power_domain +#define PD_AUD_SAI_0 audio_sai0 +#define PD_AUD_SAI_1 audio_sai1 +#define PD_AUD_SAI_2 audio_sai2 +#define PD_AUD_ASRC_0 audio_asrc0 +#define PD_AUD_ASRC_1 audio_asrc1 +#define PD_AUD_ESAI_0 audio_esai0 +#define PD_AUD_ESAI_1 audio_esai1 +#define PD_AUD_SPDIF_0 audio_spdif0 +#define PD_AUD_SPDIF_1 audio_spdif1 +#define PD_AUD_SAI_3 audio_sai3 +#define PD_AUD_SAI_4 audio_sai4 +#define PD_AUD_SAI_5 audio_sai5 +#define PD_AUD_SAI_6 audio_sai6 +#define PD_AUD_SAI_7 audio_sai7 +#define PD_AUD_GPT_5 audio_gpt5 +#define PD_AUD_GPT_6 audio_gpt6 +#define PD_AUD_GPT_7 audio_gpt7 +#define PD_AUD_GPT_8 audio_gpt8 +#define PD_AUD_GPT_9 audio_gpt9 +#define PD_AUD_GPT_10 audio_gpt10 +#define PD_AUD_AMIX audio_amix +#define PD_AUD_MQS_0 audio_mqs0 +#define PD_AUD_HIFI audio_hifi +#define PD_AUD_OCRAM audio_ocram +#define PD_AUD_MCLK_OUT_0 audio_mclkout0 +#define PD_AUD_MCLK_OUT_1 audio_mclkout1 +#define PD_AUD_AUDIO_PLL_0 audio_audiopll0 +#define PD_AUD_AUDIO_PLL_1 audio_audiopll1 +#define PD_AUD_AUDIO_CLK_0 audio_audioclk0 +#define PD_AUD_AUDIO_CLK_1 audio_audioclk1 + +#define PD_IMAGING imaging_power_domain +#define PD_IMAGING_JPEG_DEC imaging_jpeg_dec +#define PD_IMAGING_JPEG_ENC imaging_jpeg_enc +#define PD_IMAGING_PDMA0 PD_IMAGING +#define PD_IMAGING_PDMA1 imaging_pdma1 +#define PD_IMAGING_PDMA2 imaging_pdma2 +#define PD_IMAGING_PDMA3 imaging_pdma3 +#define PD_IMAGING_PDMA4 imaging_pdma4 +#define PD_IMAGING_PDMA5 imaging_pdma5 +#define PD_IMAGING_PDMA6 imaging_pdma6 +#define PD_IMAGING_PDMA7 imaging_pdma7 + +#define PD_MIPI_0_DSI mipi0_dsi_power_domain +#define PD_MIPI_0_DSI_I2C0 mipi0_dsi_i2c0 +#define PD_MIPI_0_DSI_I2C1 mipi0_dsi_i2c1 +#define PD_MIPI_0_DSI_PWM0 mipi0_dsi_pwm0 +#define PD_MIPI_1_DSI mipi1_dsi_power_domain +#define PD_MIPI_1_DSI_I2C0 mipi1_dsi_i2c0 +#define PD_MIPI_1_DSI_I2C1 mipi1_dsi_i2c1 +#define PD_MIPI_1_DSI_PWM0 mipi1_dsi_pwm0 + +#define PD_MIPI_CSI0 mipi_csi0_power_domain +#define PD_MIPI_CSI0_PWM mipi_csi0_pwm +#define PD_MIPI_CSI0_I2C mipi_csi0_i2c +#define PD_MIPI_CSI1 mipi_csi1_power_domain +#define PD_MIPI_CSI1_PWM_0 mipi_csi1_pwm +#define PD_MIPI_CSI1_I2C_0 mipi_csi1_i2c + +#define PD_HDMI hdmi_power_domain +#define PD_HDMI_I2C_0 hdmi_i2c +#define PD_HDMI_PWM_0 hdmi_pwm +#define PD_HDMI_GPIO_0 hdmi_gpio + +#define PD_HDMI_RX hdmi_rx_power_domain +#define PD_HDMI_RX_I2C hdmi_rx_i2c +#define PD_HDMI_RX_PWM hdmi_rx_pwm + +#define PD_CM40 cm40_power_domain +#define PD_CM40_I2C cm40_i2c +#define PD_CM40_INTMUX cm40_intmux + +#endif /* __DT_BINDINGS_IMX8_PD_H */ From patchwork Mon May 28 12:25:26 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Peng Fan X-Patchwork-Id: 921501 X-Patchwork-Delegate: sbabic@denx.de Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Authentication-Results: ozlabs.org; spf=none (mailfrom) smtp.mailfrom=lists.denx.de (client-ip=81.169.180.215; helo=lists.denx.de; envelope-from=u-boot-bounces@lists.denx.de; receiver=) Authentication-Results: ozlabs.org; dmarc=fail (p=none dis=none) header.from=nxp.com Authentication-Results: ozlabs.org; dkim=fail reason="signature verification failed" (1024-bit key; unprotected) header.d=nxp.com header.i=@nxp.com header.b="V3YfgcFZ"; dkim-atps=neutral Received: from lists.denx.de (dione.denx.de [81.169.180.215]) by ozlabs.org (Postfix) with ESMTP id 40vbtv5lBsz9s0q for ; Mon, 28 May 2018 22:36:07 +1000 (AEST) Received: by lists.denx.de (Postfix, from userid 105) id 5F123C21E36; Mon, 28 May 2018 12:31:24 +0000 (UTC) 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=BAD_ENC_HEADER, RCVD_IN_DNSWL_NONE, SPF_HELO_PASS, T_DKIM_INVALID autolearn=unavailable autolearn_force=no version=3.4.0 Received: from lists.denx.de (localhost [IPv6:::1]) by lists.denx.de (Postfix) with ESMTP id 7E6AFC21E0D; Mon, 28 May 2018 12:25:40 +0000 (UTC) Received: by lists.denx.de (Postfix, from userid 105) id C3C9CC21E60; Mon, 28 May 2018 12:23:43 +0000 (UTC) Received: from EUR01-HE1-obe.outbound.protection.outlook.com (mail-he1eur01on0086.outbound.protection.outlook.com [104.47.0.86]) by lists.denx.de (Postfix) with ESMTPS id C4278C21DD3 for ; Mon, 28 May 2018 12:23:39 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=nxp.com; s=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=dkE7W8wYVJm6Xc12EG3XaXSdzPqPjvHLj8i/VOT4hBY=; b=V3YfgcFZKTcGl7JD8UgZAiL23bDMpEKlI2PzHSw5g6Bf4EbWEv7nO65PKOHHVwuGBo5rwMcyreTiQAlFPrInIwn1a0Hh1ieJwvA5tvQncXepqBMSKC9yUNvogFbdXHT2Y3J9L57frio0Ld3NgHoPGT5DheOcuPlNMWQTbC7cUwc= Authentication-Results: spf=none (sender IP is ) smtp.mailfrom=peng.fan@nxp.com; Received: from linux-u7w5.ap.freescale.net.net (92.121.68.129) by VI1PR04MB3006.eurprd04.prod.outlook.com (2603:10a6:802:9::12) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384_P256) id 15.20.797.11; Mon, 28 May 2018 12:23:36 +0000 From: Peng Fan To: sbabic@denx.de, fabio.estevam@nxp.com Date: Mon, 28 May 2018 20:25:26 +0800 Message-Id: <20180528122526.20597-42-peng.fan@nxp.com> X-Mailer: git-send-email 2.14.1 In-Reply-To: <20180528122526.20597-1-peng.fan@nxp.com> References: <20180528122526.20597-1-peng.fan@nxp.com> MIME-Version: 1.0 X-Originating-IP: [92.121.68.129] X-ClientProxiedBy: HK2PR02CA0175.apcprd02.prod.outlook.com (2603:1096:201:21::11) To VI1PR04MB3006.eurprd04.prod.outlook.com (2603:10a6:802:9::12) X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-HT: Tenant X-Microsoft-Antispam: UriScan:; BCL:0; PCL:0; RULEID:(7020095)(4652020)(5600026)(48565401081)(4534165)(4627221)(201703031133081)(201702281549075)(2017052603328)(7153060)(7193020); SRVR:VI1PR04MB3006; X-Microsoft-Exchange-Diagnostics: 1; VI1PR04MB3006; 3:77L3iw3y5UgJe9t9qC5Gu8xB31+vFa/8sf1pwZ5uqMAKJ1mTRgOp0PFKT55JdY5MxFjUE6zor89+SihQaOL/R1+EpOJhVUcTUYICCkyGbhAlR0hYLGM5SiequAiU5TP4N7w9uNooF6n8hiE+IPzrEmn+nETEM4m+De+NdVHHbi6Ak9JlJCgLjwbWCUr2320n3JUBKFcTV8CA2qhvGEJeOhqgi11L9JDHC9XAZGOiWLlps5wu0FiAlIQR3+tLnD0L; 25:b3xVcFlqKgHl0iGmc1FIN5GDasfrGPoTpO8HSSHUco37w03h2PAo1zDTgSjVu/TlFcn9mG0wQjGvpY4eq8kUtRjB2P5awIl19NvgM8/LhHX3mzWTjgHKul3K8knhyW4b1eX0++uVLGlM0VfGMQBzu4RjBZ9vzSiMJQ8Yi6CCK4VEu/vDsMvQu+VYS533DDDWYhAEiVHptjEmSUi+o6bXqG44MJ3W7KI0nhIhd4Wb4RzZaYbbMoPnapi/PH44387UYzSs2KPq7vfVmOJOsEbUG3c2tEfcWTh9X8o6WanYqMisS5OPmez8U+Gzo1U2N6pAD1iwTxRPD2ZrxdmVfS5zWg==; 31:Q+vspR/9UPAmOTXUkuhpMcPxj4xUJffEI5qe2F6VVodpXK1HM6PCEAru8YP9gJiPB55tsFpx4j1krDGqrsJ/v1ZQCf6FzS38ahIDEseJkwFlB5XyPO4I25jPHojhBLJ9Y6khKvlNn/MqLyJtsWyJG6hitiBqR3E9qdri44btHlfLzHrrsWgxI81PWd5YWXR3VBMIqubh+SwLgpV1ErV0CUEVRXqllRBbu/Tp4LFNx2I= X-MS-TrafficTypeDiagnostic: VI1PR04MB3006: X-Microsoft-Exchange-Diagnostics: 1; VI1PR04MB3006; 20:EPNiLyu9isIGHaQTzXZLbOf8ZgPquNgPz5gzYg0O9AyfierXMlj9U0RsK/1Pzbf8uNiGz8x5IPJcyIRlmgLY5qffnPOeaGI2+6pq+SqQRAi2+HEV5NfTt/cP1cqo3fnuqfxPNuNKPdlz/zvTuseD8I4lVB0Qdhi9m3ChVTcrTOCNDsw/QMJnVu3W6bqchsZmNypqclBqkQ/ncypxYDaeF4Ooek9uaMR7gIOzoCISEUsZTx0rKK2F18h8DwfSUSIdAOeH1Y6jvGYM1blE2R1uwvsYPHknpjPrsw3tlVHRb0JLESscW4FFq8BeJYYMrao2yUnxSQYeigTIvRboTsiPXlwiW8FmjYwDXNYJU1HXeJJGixcep/2E6LBzzy2anIFKveOkvTfY0hBEw2nFyOvl0h+hzfbecKNLK4U8IU0Mr5Rm7bezaFBA+hU4wtTFvWXCM3BaWMHPThBk+yB4zMrO/lBbo+eMyhJgVWyQ+iMbaOTdfkd720nuZrgGOU6iD+UD; 4:SvaaBaV0sZbzlvZRFa0H/tjb7Et1axFLHd/9udEH8iW9le3Qu3L7P0T07oxFnJaB0yv90U5HxPut7ax2QN4YZ23tkIk3KsJ0jy+hk0sQnP4EsoITfXGtey0rqIOrYwaftHK7OERXp2g7mj6xQaObt1wb1ROKed0+bDcbLWqlaHlTuhyhLTe/oQtw+w9c3+j2dFZWscmtsi2MuamCfokuqqtRMpyUtMppmgswBTFDHPHnZ36jEBUjOVP6gfBaAC+HtXovGLPRkPee/wKtejiufn3EBDjSPxPPsznDeM3rXzaxEYGMcQeeJFz+uap9FDgA X-Microsoft-Antispam-PRVS: X-Exchange-Antispam-Report-Test: UriScan:(185117386973197); X-MS-Exchange-SenderADCheck: 1 X-Exchange-Antispam-Report-CFA-Test: BCL:0; PCL:0; RULEID:(8211001083)(6040522)(2401047)(8121501046)(5005006)(3002001)(93006095)(93001095)(3231254)(944501410)(52105095)(10201501046)(6055026)(149027)(150027)(6041310)(20161123558120)(20161123560045)(201703131423095)(201702281528075)(20161123555045)(201703061421075)(201703061406153)(20161123562045)(20161123564045)(6072148)(201708071742011)(7699016); SRVR:VI1PR04MB3006; BCL:0; PCL:0; RULEID:; SRVR:VI1PR04MB3006; X-Forefront-PRVS: 06860EDC7B X-Forefront-Antispam-Report: SFV:NSPM; SFS:(10009020)(366004)(39380400002)(396003)(39860400002)(376002)(346002)(199004)(189003)(36756003)(97736004)(6636002)(6666003)(68736007)(86362001)(8676002)(44832011)(8936002)(114624004)(575784001)(81166006)(81156014)(47776003)(11346002)(956004)(2616005)(476003)(446003)(25786009)(486006)(48376002)(106356001)(105586002)(186003)(50466002)(16526019)(2906002)(6512007)(53936002)(1076002)(59450400001)(66066001)(26005)(51416003)(478600001)(305945005)(50226002)(6486002)(5660300001)(6116002)(76176011)(3846002)(16586007)(52116002)(6506007)(4326008)(316002)(7736002)(386003)(139555002); DIR:OUT; SFP:1101; SCL:1; SRVR:VI1PR04MB3006; H:linux-u7w5.ap.freescale.net.net; FPR:; SPF:None; LANG:en; PTR:InfoNoRecords; A:1; MX:1; Received-SPF: None (protection.outlook.com: nxp.com does not designate permitted sender hosts) X-Microsoft-Exchange-Diagnostics: =?us-ascii?Q?1; VI1PR04MB3006; 23:3eVoCDT26I0c7Kyea/fsVPX6h+D3eJWAzq8TJ3aOe?= j6QOHhTtl2ZbAzwHjDOnHYKoY2xEGSw1LxfH6UI2WtnCqQXpKDf3ffWhEF8qNO10uMNDHgydnEpxPQlvAPpJHV2FXH/xIcIomP8dpiyomrTH+4ygE/N2pb7cVbu7p+oFjF+9FAm3qQIHyy8cM7Y6OpNLDpoqjHzW7WZgBP/p6bRWtQ1RpttoCGfkslmZ87jCdMaZ2CmZY4olfzP4xzI2yuchD+zgAHcaPrtYzZVXhjUencsS0b52hpkq4Ae30/DBPUbdlveuQSPanP8CKL+yjySUdChYIuXkuyrmaq506DEREBIwOXr/cZgkCKk8HxGT50IN5jpPfUzwb7oSknNCJe0XIC4HEFAPWdkK+vCenI01cFlcA4hnlRrN+2a1ItAxi7eHWdwuC11/0hF/d5PeRJw2nSoVsPDqda190haNMiM6XO7XW9C+Fdy6NNqnVDfc/sFSNyhDfAiqvg/Jc9K+sp1XP7q7eQSVh5DlvukOaoZlXMbjXQ5OhNq9NFEk0gtcDIMftM9VLMhpAfIzgxrS3CEAcWYaZ9DLIUo5+FVKUl+lsHu9CPNUG9cUn91PRZ/9mg12LO8JgCS4HvIXhQcqX5om+ImZvd7sbooleFqS5Pnto9egi8d41vW9CS9fEQIT+atxmp3BWWa2hZ2iN3oqn4uU4EhQYailXTd85vGwCBFtXcrUL/hLjdsjgAZ5UU82/mqdWiRh8KG8zfoirX32/5oXFSkx1kgqeb0RP+qPd8dcPYwcjkj6yjE93GsZTXpyXOEXfAwCxrY6f4aoPmAyRz7oHP2jYPQv771+/n3ByTlE6ApS0pxNjMFUzR9+d09l95+vbXwgq0Ie6TqT22GjsHcAVzgItolB1YMmWLW8eKFaWyoTIWtXlQNYFr5zVQNZ4e7lD2U/I5aOjXVbL6chW3BpVzkLG3YLvvPDVtz/hxOeZzjYpUgU0uIwRR/BMCP8qIZMITs47i3xJnBOICC3cDXFgbubS0gNRA1swd+l+SCfLWrGBZ2CvsHoJim8pzEx+0G/UV2XaQW1gmvizkOZMb/yKXb306yNtHf7zVDF1XCJL1matJUS1Cpijn1zrA9mtKzl8RtznYWyEFUCUxGZBvHMLsWvMvOx9XhJWpU/gSpq9eCpWiWUHLeTVt8CAlBGQld2KTBnDjQ/UsNxo7ppa3FqXVBbvTJforOOIsRyHxBaIUU4o58x8EFmfKkDettvWcqvNKPpPHLbSHf5sKRMs1/4VEXsK70hgn/kOrE0DGORzPu3o++1G31fZZPdWVTZMM= X-Microsoft-Antispam-Message-Info: 4UzN5MR+MlnZzlJs/Ym71H2YfONHcmnlVhZFyJ/ky8BmjEqYN+ZJq++lDTUrPNwWbpvEP11OI/VlUB1HhRRQ2yxNYkDvqWfpE/IDOEeeD9vj8uPWaX1uohFyEaMcEYbdD/pYYJ2mc9Am5EAwpQRd3wZm5MFfBstNscEFQ6K9XqFMtZRAVCdSXXINjFGlvLsT X-Microsoft-Exchange-Diagnostics: 1; VI1PR04MB3006; 6:bplWIyWKTOBs8H2mqWNLokHi2PQ6WR9aNgbD6Vars7K3zJofLCf31gYfo89qvQkdrGYYyYgvDeIlhhKT8h3pnYCP0no+ZOjeh+dFT9xJmw7pjnWxANPifzyyay6WxI5+wnh3Er0BGufDfBnyP9caRAZXEP+dsbuFQ900lRTI5X0Ji9by213UW1htpRn0wS06H+Hdzsj8P/bHoX9g8NktgoPUYnYt7uh0wF7oue6Nzku+MiphBPmkyYDYqY9fmId2lEQBi3pVxq01wRvRtWVXruM+8B6gm3y+IpnnIkUwlu9CVZZc0Xmd4oql3zV65+NfZzrVKOgzBL/Of6CZ/zZarS4Yx9dmeC5w0XO6dCrB4ISJe7ciHIs8Muflfdo0hJf/pnMdbX1ecF9f787m1jERwideZEOlocZcCNsudkTg8EUz1SsJlIFXg0UhotVBR30igOUGOeVIQQI0WNf4PRjIPQ==; 5:OMz7m9wEVdF1n+RRqBZErlvgLcJ6vpzMMdjE7c6hX2l9RTaEI0ibgegI8N9SPqcsbKMhy0X1cKnN3QskhQrXH8i5YlwmmUgxS0q+RrIWo2tVAOxQAyvy98V4JzwK3dqXr3X2/i4aUx8QnTyf3+uPbaUQYnZZhGf61avJFyIGI6M=; 24:JpQYHrWfvnASUK2BZun0SHJK5qbhvjjt/zEexcm5ylyIqCdpFQDxkbsYgMU33xH87zt/fX91v9cMncVawfOBCffsMOFX1EB90jEBui375kU= SpamDiagnosticOutput: 1:99 SpamDiagnosticMetadata: NSPM X-Microsoft-Exchange-Diagnostics: 1; VI1PR04MB3006; 7:CIAX8P6h2bZT+shZljJOpBnCpwHK0aQiITSzNKS7RGyWAPLvIW2LNPt1JW1MkmvQa3D56wBNYZIx85Oxc95x3wkrKnVeFfIuKIIfuXarDIqMAQ3F3lchfMvUHAtjtLO3Ia47Dyi5h8zVBE4rb5tRLWS8yG/u1GJXgwx2hsGOJqPwQQjwRo56nOpSYZgpCi8BzH6FPelLgigfaaQbaDcSSmU/f5IDgwzEsUZUF1Xn0cM09BR/H1IaqoTayHSDwLvz X-MS-Office365-Filtering-Correlation-Id: fda343a3-68ab-483a-5e8d-08d5c495d73d X-OriginatorOrg: nxp.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 28 May 2018 12:23:36.3399 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: fda343a3-68ab-483a-5e8d-08d5c495d73d X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 686ea1d3-bc2b-4c6f-a92c-d99c5c301635 X-MS-Exchange-Transport-CrossTenantHeadersStamped: VI1PR04MB3006 Cc: u-boot@lists.denx.de Subject: [U-Boot] [PATCH 41/41] imx: 8qxp_mek: Add i.MX8QXP MEK board support X-BeenThere: u-boot@lists.denx.de X-Mailman-Version: 2.1.18 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" Add board level codes and configs for i.MX8QXP MEK board. - Enabled DM driver: FEC, LPUART, LPI2C, GPIO, SD/MMC, PCA953X, pinctrl, Power-domain - Board defconfigs: imx8qxp_mek_defconfig Boot log: " U-Boot 2018.05-00384-g8907416f0e (May 28 2018 - 14:06:27 +0800) CPU: Freescale i.MX8QXP revB A35 at 1200 MHz Model: Freescale i.MX8QXP MEK Board: iMX8QXP MEK Boot: SD1 DRAM: 3 GiB MMC: Actual rate for SDHC_0 is 333333333 Actual rate for SDHC_1 is 200000000 FSL_SDHC: 0, FSL_SDHC: 1 Loading Environment from MMC... OK In: serial@5a060000 Out: serial@5a060000 Err: serial@5a060000 Net: No ethernet found. Hit any key to stop autoboot: 0 " Signed-off-by: Peng Fan --- arch/arm/mach-imx/imx8/Kconfig | 13 +++ board/freescale/imx8qxp_mek/Kconfig | 14 +++ board/freescale/imx8qxp_mek/MAINTAINERS | 6 ++ board/freescale/imx8qxp_mek/Makefile | 7 ++ board/freescale/imx8qxp_mek/imx8qxp_mek.c | 159 ++++++++++++++++++++++++++++++ configs/imx8qxp_mek_defconfig | 47 +++++++++ include/configs/imx8qxp_mek.h | 157 +++++++++++++++++++++++++++++ 7 files changed, 403 insertions(+) create mode 100644 board/freescale/imx8qxp_mek/Kconfig create mode 100644 board/freescale/imx8qxp_mek/MAINTAINERS create mode 100644 board/freescale/imx8qxp_mek/Makefile create mode 100644 board/freescale/imx8qxp_mek/imx8qxp_mek.c create mode 100644 configs/imx8qxp_mek_defconfig create mode 100644 include/configs/imx8qxp_mek.h diff --git a/arch/arm/mach-imx/imx8/Kconfig b/arch/arm/mach-imx/imx8/Kconfig index 58cb19946f..d15dfe3a6e 100644 --- a/arch/arm/mach-imx/imx8/Kconfig +++ b/arch/arm/mach-imx/imx8/Kconfig @@ -10,4 +10,17 @@ config IMX8QXP config SYS_SOC default "imx8" +choice + prompt "i.MX8 board select" + optional + +config TARGET_IMX8QXP_MEK + bool "Support i.MX8QXP MEK board" + select BOARD_LATE_INIT + select IMX8QXP + +endchoice + +source "board/freescale/imx8qxp_mek/Kconfig" + endif diff --git a/board/freescale/imx8qxp_mek/Kconfig b/board/freescale/imx8qxp_mek/Kconfig new file mode 100644 index 0000000000..b67300d816 --- /dev/null +++ b/board/freescale/imx8qxp_mek/Kconfig @@ -0,0 +1,14 @@ +if TARGET_IMX8QXP_MEK + +config SYS_BOARD + default "imx8qxp_mek" + +config SYS_VENDOR + default "freescale" + +config SYS_CONFIG_NAME + default "imx8qxp_mek" + +source "board/freescale/common/Kconfig" + +endif diff --git a/board/freescale/imx8qxp_mek/MAINTAINERS b/board/freescale/imx8qxp_mek/MAINTAINERS new file mode 100644 index 0000000000..e9bf0b35a3 --- /dev/null +++ b/board/freescale/imx8qxp_mek/MAINTAINERS @@ -0,0 +1,6 @@ +i.MX8QXP MEK BOARD +M: Peng Fan +S: Maintained +F: board/freescale/imx8qxp_mek/ +F: include/configs/imx8qxp_mek.h +F: configs/imx8qxp_mek_defconfig diff --git a/board/freescale/imx8qxp_mek/Makefile b/board/freescale/imx8qxp_mek/Makefile new file mode 100644 index 0000000000..f9ee8aeff3 --- /dev/null +++ b/board/freescale/imx8qxp_mek/Makefile @@ -0,0 +1,7 @@ +# +# Copyright 2017 NXP +# +# SPDX-License-Identifier: GPL-2.0+ +# + +obj-y += imx8qxp_mek.o diff --git a/board/freescale/imx8qxp_mek/imx8qxp_mek.c b/board/freescale/imx8qxp_mek/imx8qxp_mek.c new file mode 100644 index 0000000000..e74c3a2547 --- /dev/null +++ b/board/freescale/imx8qxp_mek/imx8qxp_mek.c @@ -0,0 +1,159 @@ +// SPDX-License-Identifier: GPL-2.0+ +/* + * Copyright 2018 NXP + */ + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +DECLARE_GLOBAL_DATA_PTR; + +#define GPIO_PAD_CTRL ((SC_PAD_CONFIG_NORMAL << PADRING_CONFIG_SHIFT) | \ + (SC_PAD_ISO_OFF << PADRING_LPCONFIG_SHIFT) | \ + (SC_PAD_28FDSOI_DSE_DV_HIGH << PADRING_DSE_SHIFT) | \ + (SC_PAD_28FDSOI_PS_PU << PADRING_PULL_SHIFT)) + +#define UART_PAD_CTRL ((SC_PAD_CONFIG_OUT_IN << PADRING_CONFIG_SHIFT) | \ + (SC_PAD_ISO_OFF << PADRING_LPCONFIG_SHIFT) | \ + (SC_PAD_28FDSOI_DSE_DV_HIGH << PADRING_DSE_SHIFT) | \ + (SC_PAD_28FDSOI_PS_PU << PADRING_PULL_SHIFT)) + +static iomux_cfg_t uart0_pads[] = { + SC_P_UART0_RX | MUX_PAD_CTRL(UART_PAD_CTRL), + SC_P_UART0_TX | MUX_PAD_CTRL(UART_PAD_CTRL), +}; + +static void setup_iomux_uart(void) +{ + imx8_iomux_setup_multiple_pads(uart0_pads, ARRAY_SIZE(uart0_pads)); +} + +int board_early_init_f(void) +{ + sc_ipc_t ipchndl; + sc_err_t scierr; + /* Set UART0 clock root to 80 MHz */ + sc_pm_clock_rate_t rate = 80000000; + + ipchndl = gd->arch.ipc_channel_handle; + + /* Power up UART0 */ + scierr = sc_pm_set_resource_power_mode(ipchndl, SC_R_UART_0, + SC_PM_PW_MODE_ON); + if (scierr != SC_ERR_NONE) + return 0; + + scierr = sc_pm_set_clock_rate(ipchndl, SC_R_UART_0, 2, &rate); + if (scierr != SC_ERR_NONE) + return 0; + + /* Enable UART0 clock root */ + scierr = sc_pm_clock_enable(ipchndl, SC_R_UART_0, 2, true, false); + if (scierr != SC_ERR_NONE) + return 0; + + setup_iomux_uart(); + + return 0; +} + +#ifdef CONFIG_MXC_GPIO +#define IOEXP_RESET IMX_GPIO_NR(1, 1) + +static iomux_cfg_t board_gpios[] = { + SC_P_SPI2_SDO | MUX_MODE_ALT(4) | MUX_PAD_CTRL(GPIO_PAD_CTRL), + SC_P_ENET0_REFCLK_125M_25M | MUX_MODE_ALT(4) | + MUX_PAD_CTRL(GPIO_PAD_CTRL), +}; + +static void board_gpio_init(void) +{ + int ret; + struct gpio_desc desc; + + ret = dm_gpio_lookup_name("gpio@1a_3", &desc); + if (ret) + return; + + ret = dm_gpio_request(&desc, "bb_per_rst_b"); + if (ret) + return; + + dm_gpio_set_dir_flags(&desc, GPIOD_IS_OUT); + dm_gpio_set_value(&desc, 0); + udelay(50); + dm_gpio_set_value(&desc, 1); + + imx8_iomux_setup_multiple_pads(board_gpios, ARRAY_SIZE(board_gpios)); + + /* enable i2c port expander assert reset line */ + gpio_request(IOEXP_RESET, "ioexp_rst"); + gpio_direction_output(IOEXP_RESET, 1); +} +#endif + +int checkboard(void) +{ + puts("Board: iMX8QXP MEK\n"); + + print_bootinfo(); + + return 0; +} + +int board_init(void) +{ +#ifdef CONFIG_MXC_GPIO + board_gpio_init(); +#endif + + return 0; +} + +void detail_board_ddr_info(void) +{ + puts("\nDDR "); +} + +/* + * Board specific reset that is system reset. + */ +void reset_cpu(ulong addr) +{ + puts("SCI reboot request"); + sc_pm_reboot(SC_IPC_CH, SC_PM_RESET_TYPE_COLD); + while (1) + putc('.'); +} + +#ifdef CONFIG_OF_BOARD_SETUP +int ft_board_setup(void *blob, bd_t *bd) +{ + return 0; +} +#endif + +int board_mmc_get_env_dev(int devno) +{ + return devno; +} + +int board_late_init(void) +{ +#ifdef CONFIG_ENV_VARS_UBOOT_RUNTIME_CONFIG + env_set("board_name", "MEK"); + env_set("board_rev", "iMX8QXP"); +#endif + + return 0; +} diff --git a/configs/imx8qxp_mek_defconfig b/configs/imx8qxp_mek_defconfig new file mode 100644 index 0000000000..15b63da839 --- /dev/null +++ b/configs/imx8qxp_mek_defconfig @@ -0,0 +1,47 @@ +CONFIG_ARM=y +CONFIG_ARCH_IMX8=y +CONFIG_DEFAULT_DEVICE_TREE="fsl-imx8qxp-mek" +CONFIG_TARGET_IMX8QXP_MEK=y +CONFIG_SYS_TEXT_BASE=0x80020000 +CONFIG_CMD_IMPORTENV=n +CONFIG_SYS_MALLOC_F_LEN=0x2000 +CONFIG_DM=y +CONFIG_CMD_CACHE=y + +CONFIG_DM_SERIAL=y +CONFIG_FSL_LPUART=y +CONFIG_OF_CONTROL=y +CONFIG_DM_I2C=y +# CONFIG_DM_I2C_COMPAT is not set +CONFIG_SYS_I2C_IMX_LPI2C=y +CONFIG_CMD_I2C=y +CONFIG_I2C_MUX=y +CONFIG_I2C_MUX_PCA954x=y + +CONFIG_CMD_GPIO=y +CONFIG_DM_GPIO=y +CONFIG_DM_PCA953X=y +CONFIG_BOOTDELAY=3 +CONFIG_IMX_BOOTAUX=y +CONFIG_FS_FAT=y +CONFIG_CMD_FAT=y +CONFIG_CMD_MMC=y +CONFIG_DM_MMC=y + +CONFIG_CMD_PING=y +CONFIG_CMD_DHCP=y +CONFIG_CMD_MII=y +CONFIG_DM_ETH=y +# CONFIG_EFI_LOADER is not set + +CONFIG_DM_REGULATOR=y +CONFIG_DM_REGULATOR_FIXED=y +CONFIG_DM_REGULATOR_GPIO=y + +CONFIG_PINCTRL=y +CONFIG_PINCTRL_IMX8=y + +CONFIG_POWER_DOMAIN=y +CONFIG_IMX8_POWER_DOMAIN=y + +CONFIG_ENV_IS_IN_MMC=y diff --git a/include/configs/imx8qxp_mek.h b/include/configs/imx8qxp_mek.h new file mode 100644 index 0000000000..f0aa1c7541 --- /dev/null +++ b/include/configs/imx8qxp_mek.h @@ -0,0 +1,157 @@ +/* SPDX-License-Identifier: GPL-2.0+ */ +/* + * Copyright 2018 NXP + */ + +#ifndef __IMX8QXP_MEK_H +#define __IMX8QXP_MEK_H + +#include +#include + +#define CONFIG_REMAKE_ELF + +#define CONFIG_BOARD_EARLY_INIT_F + +/* Flat Device Tree Definitions */ +#define CONFIG_OF_BOARD_SETUP + +#undef CONFIG_CMD_EXPORTENV +#undef CONFIG_CMD_IMPORTENV +#undef CONFIG_CMD_IMLS + +#undef CONFIG_CMD_CRC32 +#undef CONFIG_BOOTM_NETBSD + +#define CONFIG_FSL_ESDHC +#define CONFIG_FSL_USDHC +#define CONFIG_SYS_FSL_ESDHC_ADDR 0 +#define USDHC1_BASE_ADDR 0x5B010000 +#define USDHC2_BASE_ADDR 0x5B020000 +#define CONFIG_SUPPORT_EMMC_BOOT /* eMMC specific */ + +#define CONFIG_ENV_OVERWRITE + +#define CONFIG_ENV_VARS_UBOOT_RUNTIME_CONFIG + +/* GPIO configs */ +#define CONFIG_MXC_GPIO + +/* Initial environment variables */ +#define CONFIG_EXTRA_ENV_SETTINGS \ + "script=boot.scr\0" \ + "image=Image\0" \ + "panel=NULL\0" \ + "console=ttyLP0,${baudrate} earlycon=lpuart32,0x5a060000,${baudrate}\0" \ + "fdt_addr=0x83000000\0" \ + "fdt_high=0xffffffffffffffff\0" \ + "boot_fdt=try\0" \ + "fdt_file=fsl-imx8qxp-mek.dtb\0" \ + "initrd_addr=0x83800000\0" \ + "initrd_high=0xffffffffffffffff\0" \ + "mmcdev="__stringify(CONFIG_SYS_MMC_ENV_DEV)"\0" \ + "mmcpart=" __stringify(CONFIG_SYS_MMC_IMG_LOAD_PART) "\0" \ + "mmcroot=" CONFIG_MMCROOT " rootwait rw\0" \ + "mmcautodetect=yes\0" \ + "mmcargs=setenv bootargs console=${console} root=${mmcroot}\0 " \ + "loadbootscript=fatload mmc ${mmcdev}:${mmcpart} ${loadaddr} ${script};\0" \ + "bootscript=echo Running bootscript from mmc ...; " \ + "source\0" \ + "loadimage=fatload mmc ${mmcdev}:${mmcpart} ${loadaddr} ${image}\0" \ + "loadfdt=fatload mmc ${mmcdev}:${mmcpart} ${fdt_addr} ${fdt_file}\0" \ + "mmcboot=echo Booting from mmc ...; " \ + "run mmcargs; " \ + "if test ${boot_fdt} = yes || test ${boot_fdt} = try; then " \ + "if run loadfdt; then " \ + "booti ${loadaddr} - ${fdt_addr}; " \ + "else " \ + "echo WARN: Cannot load the DT; " \ + "fi; " \ + "else " \ + "echo wait for boot; " \ + "fi;\0" \ + "netargs=setenv bootargs console=${console} " \ + "root=/dev/nfs " \ + "ip=dhcp nfsroot=${serverip}:${nfsroot},v3,tcp\0" \ + "netboot=echo Booting from net ...; " \ + "run netargs; " \ + "if test ${ip_dyn} = yes; then " \ + "setenv get_cmd dhcp; " \ + "else " \ + "setenv get_cmd tftp; " \ + "fi; " \ + "${get_cmd} ${loadaddr} ${image}; " \ + "if test ${boot_fdt} = yes || test ${boot_fdt} = try; then " \ + "if ${get_cmd} ${fdt_addr} ${fdt_file}; then " \ + "booti ${loadaddr} - ${fdt_addr}; " \ + "else " \ + "echo WARN: Cannot load the DT; " \ + "fi; " \ + "else " \ + "booti; " \ + "fi;\0" + +#define CONFIG_BOOTCOMMAND \ + "mmc dev ${mmcdev}; if mmc rescan; then " \ + "if run loadbootscript; then " \ + "run bootscript; " \ + "else " \ + "if run loadimage; then " \ + "run mmcboot; " \ + "else run netboot; " \ + "fi; " \ + "fi; " \ + "else booti ${loadaddr} - ${fdt_addr}; fi" + +/* Link Definitions */ +#define CONFIG_LOADADDR 0x80280000 + +#define CONFIG_SYS_LOAD_ADDR CONFIG_LOADADDR + +#define CONFIG_SYS_INIT_SP_ADDR 0x80200000 + +/* Default environment is in SD */ +#define CONFIG_ENV_SIZE 0x1000 +#define CONFIG_ENV_OFFSET (64 * SZ_64K) +#define CONFIG_SYS_MMC_ENV_PART 0 /* user area */ + +#define CONFIG_SYS_MMC_IMG_LOAD_PART 1 + +/* On LPDDR4 board, USDHC1 is for eMMC, USDHC2 is for SD on CPU board */ +#define CONFIG_SYS_MMC_ENV_DEV 1 /* USDHC2 */ +#define CONFIG_MMCROOT "/dev/mmcblk1p2" /* USDHC2 */ +#define CONFIG_SYS_FSL_USDHC_NUM 2 + +/* Size of malloc() pool */ +#define CONFIG_SYS_MALLOC_LEN ((CONFIG_ENV_SIZE + (32 * 1024)) * 1024) + +#define CONFIG_SYS_SDRAM_BASE 0x80000000 +#define CONFIG_NR_DRAM_BANKS 3 +#define PHYS_SDRAM_1 0x80000000 +#define PHYS_SDRAM_2 0x880000000 +#define PHYS_SDRAM_1_SIZE 0x80000000 /* 2 GB */ +/* LPDDR4 board total DDR is 3GB */ +#define PHYS_SDRAM_2_SIZE 0x40000000 /* 1 GB */ + +/* Serial */ +#define CONFIG_BAUDRATE 115200 + +/* Monitor Command Prompt */ +#define CONFIG_HUSH_PARSER +#define CONFIG_SYS_PROMPT_HUSH_PS2 "> " +#define CONFIG_SYS_CBSIZE 2048 +#define CONFIG_SYS_MAXARGS 64 +#define CONFIG_SYS_BARGSIZE CONFIG_SYS_CBSIZE +#define CONFIG_SYS_PBSIZE (CONFIG_SYS_CBSIZE + \ + sizeof(CONFIG_SYS_PROMPT) + 16) + +/* Generic Timer Definitions */ +#define COUNTER_FREQUENCY 8000000 /* 8MHz */ + +#ifndef CONFIG_DM_PCA953X +#define CONFIG_PCA953X +#define CONFIG_CMD_PCA953X +#define CONFIG_CMD_PCA953X_INFO +#endif + +#endif /* __IMX8QXP_MEK_H */