From patchwork Tue Dec 27 10:04:09 2016 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Peng Fan X-Patchwork-Id: 708894 X-Patchwork-Delegate: sbabic@denx.de Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Received: from theia.denx.de (theia.denx.de [85.214.87.163]) by ozlabs.org (Postfix) with ESMTP id 3tns2N4ZLfz9syB for ; Tue, 27 Dec 2016 21:06:04 +1100 (AEDT) Authentication-Results: ozlabs.org; dkim=fail reason="signature verification failed" (1024-bit key; unprotected) header.d=nxp.com header.i=@nxp.com header.b="sUNtprns"; dkim-atps=neutral Received: from localhost (localhost [127.0.0.1]) by theia.denx.de (Postfix) with ESMTP id 34B60B38D0; Tue, 27 Dec 2016 11:05:56 +0100 (CET) Received: from theia.denx.de ([127.0.0.1]) by localhost (theia.denx.de [127.0.0.1]) (amavisd-new, port 10024) with ESMTP id q0WGeRf39S27; Tue, 27 Dec 2016 11:05:56 +0100 (CET) Received: from theia.denx.de (localhost [127.0.0.1]) by theia.denx.de (Postfix) with ESMTP id 76A55B38C2; Tue, 27 Dec 2016 11:05:51 +0100 (CET) Received: from localhost (localhost [127.0.0.1]) by theia.denx.de (Postfix) with ESMTP id 47645A7657 for ; Tue, 27 Dec 2016 11:05:43 +0100 (CET) Received: from theia.denx.de ([127.0.0.1]) by localhost (theia.denx.de [127.0.0.1]) (amavisd-new, port 10024) with ESMTP id unuH_12kSU2D for ; Tue, 27 Dec 2016 11:05:43 +0100 (CET) X-policyd-weight: NOT_IN_SBL_XBL_SPAMHAUS=-1.5 NOT_IN_SPAMCOP=-1.5 NOT_IN_BL_NJABL=-1.5 (only DNSBL check requested) Received: from EUR02-AM5-obe.outbound.protection.outlook.com (mail-eopbgr00085.outbound.protection.outlook.com [40.107.0.85]) by theia.denx.de (Postfix) with ESMTPS id 0CDB4A75CC for ; Tue, 27 Dec 2016 11:05:41 +0100 (CET) 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; bh=hDyw2pEDbZfhaRYwYfpRCWBVL1UpawJEwj50DfeyfPw=; b=sUNtprnsmuu5yw6PSbWxsqTJqNsSbQhLHbwCQEdTQg5M2bL2i3J3cjqfLBUGE875hHX6JAqEHTJ2/pnFqNpuohJd3Iuw6/9VmdQ6nfIkZ25tLhc+ecXvlqOLUHNgtHmIX6guVFjz3r0G62FJUmaCQMjZvo4kIFowTIE8W8CILSU= Authentication-Results: spf=none (sender IP is ) smtp.mailfrom=peng.fan@nxp.com; Received: from linux-7smt.suse (192.158.241.86) by AM4PR0401MB1793.eurprd04.prod.outlook.com (10.165.244.151) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384_P384) id 15.1.803.11; Tue, 27 Dec 2016 10:05:36 +0000 From: Peng Fan To: Date: Tue, 27 Dec 2016 18:04:09 +0800 Message-ID: <1482833066-29291-4-git-send-email-peng.fan@nxp.com> X-Mailer: git-send-email 2.6.2 In-Reply-To: <1482833066-29291-1-git-send-email-peng.fan@nxp.com> References: <1482833066-29291-1-git-send-email-peng.fan@nxp.com> MIME-Version: 1.0 X-Originating-IP: [192.158.241.86] X-ClientProxiedBy: KL1PR03CA0003.apcprd03.prod.outlook.com (10.165.63.13) To AM4PR0401MB1793.eurprd04.prod.outlook.com (10.165.244.151) X-MS-Office365-Filtering-Correlation-Id: 65d6d217-1492-41c7-4a1d-08d42e3fe888 X-Microsoft-Antispam: UriScan:; BCL:0; PCL:0; RULEID:(22001); SRVR:AM4PR0401MB1793; X-Microsoft-Exchange-Diagnostics: 1; AM4PR0401MB1793; 3:TzxklTAihukX0+Ip3VX5g5FoHkJxUOHBWsONwxIg3EgNhwVvQPgaRzuXH/rbIO0utJaiQBr8A5yq3W0WAosjPbcosqWO9Co1BbZ1ixt04JuvH+yu7zjhWnSQ9mzL0wV3YsUxzeHS1s4DoIVSYT+Oq5cLZCJTwDBcdCrx63sUHIqqRBGCG4V9vanAoCzcP7pF6g5ah7WLyHBd3dSPOUe/Dp1CWJa5dXsDRtQb66zjgyyDx79gnZhWeq1c5Z7o1hb9YS/EtklMl4HZ7xJlTUAHrQ==; 25:aeFQRdQKp4EyNgRWA4v1IUUmb9M+8S/ZhuJ61lAUsbSKEpneVZ2vy4eMBSsM+/jBat9aNerOhnUBL0aMscbvVSdgs7/GsmGo9JL+8ML91Ppo8MUWaTjwHw+oFO8oSSADEiKpm59GC5H6CZXQYZRx/oF8yHpSUqg6lFSpUlUreAdrUVsYb9aCDth+EkmKh0W+Zdd2Hb6WEAj3x5o8K2mW7fOSKPJW0o+6Kypoe+Bc6W/b7jEffAni1hq6ap9OrNxJax2SxXVh8oVyemy+nmSEPYjfHVSvZmccZcog3ji/711kXbJKG9m2Wo4qsPTWAoK4Zg1oAiKjk7EHjCpQYCHPztCspdeRSonft1xdlo8JxmxpFJrMwPwpv+RE7huknDPuKdAGO8zhE4rgFoyIo+eE9TMAPZdrx7x8lOW2DclYSOsoGVFpXFaElaAEnCTpzProHg5w0m6BwUGtsHpVa0W6Dg== X-Microsoft-Exchange-Diagnostics: 1; AM4PR0401MB1793; 31:9mO/Cbr3+mc8e1MlloILSpw5eBiyoaDvTceD2r/gFT9Pa55xwNyXB+ngfBjgqa6FFk92gD8f8AiZTZThCyaU7LEJeipxE0N8e2lvmKv8stC/CqKCeGqLyOnnhzrdgA3/DqZATzrVK+vfDDsC+bqUWHPh4PMjvlGs6JDzhcmEu5ymmBW4kSU//AocmCNXoKGMXRW1pHxWa8ewIcGzeUEjNp88PxhFY+YiSDOpKRiesXw0MK5Dg3a/Z61ES7yyM8pv; 20:+cBOJSZ+MJ5wG9L5zuYhUUlANDuSDpbEIfGlFnR9+04PVsV9p57RyCh9waF6ETrDo7twK3xKfuto1wgkIIJjqjoUjjZhNjIgHusvpBFTs0Vm9epsy431Ynb3RqSsFmu94I4BWx3g8KPidwL524OKIljtGTn534247crGIfb/mhbvvLtQTb/xZgainYccCzUdYmkDL5eHgy6lNTVVaRZVRSzWVqhl+YPeWFdWN6zXARHXcxajDC99+S0HeiBwZD3pW87CXrYkKxNBJ9/a3BR8sj577Bnj/TMk5EhrKCe6N6quww84cqu2K6HvNqb6Q0ZlNBIEywJvh4d5r7b5D/JlFLm3ndy7AOPS6ZCK6mw0Q5YCmdR9CfVkHzgREltUrc04ZYp+/tXavVBvi7SqreSFVb3CRATmpeSv8p7e2IfyYMIza4Tk3SspN8T1BViZWwk30c0xQlc6jyLZ7VW0tbG58aMtZmm1Dbybs+WF7jb4X2hjBiC8w4U8+X8MMR9TFCOI X-Microsoft-Antispam-PRVS: X-Exchange-Antispam-Report-Test: UriScan:(185117386973197); X-Exchange-Antispam-Report-CFA-Test: BCL:0; PCL:0; RULEID:(6040375)(601004)(2401047)(8121501046)(5005006)(3002001)(10201501046)(6055026)(6041248)(20161123564025)(20161123562025)(20161123555025)(20161123560025)(6072148)(6047074); SRVR:AM4PR0401MB1793; BCL:0; PCL:0; RULEID:; SRVR:AM4PR0401MB1793; X-Microsoft-Exchange-Diagnostics: 1; AM4PR0401MB1793; 4:xjm41YjGFRmpBKgvGRJoJlVNHGgJUjXgOZOgsi4I7ueYSC75ppJeRLSmuN7dnmDUCjQSN4xa5JoJbWy30qkIX0EE/oLnxtmJVAgvp3/JUsQjpDey4s246yXzsEtnXP5qtNY3uW5ft1eBF1JQrKuXrwyvnVhpMyxI76KMNJJ6/Y/NTpg1B/MaT0pkEUOz0bpLUGqx97g5T2Fg4FSZtkf8zL61UwaqNOGnDqkOMz0fc7teZ9hZdRczWuqZtWiW4Paly4QAjWRFI9HqVBPppGwAX64K88r/jg+XAZIerN5KbxwtPq3YfaMbtT6GOIeXLLu1MZmoSMIgR+QI8e69uY2tbd1vHOQHVsL3EmEegcgtr3qg9hHYqSv4dCAfAqhbSAlBIkWbR5JJyQS4xRtH5jwFMv8K0INPOqg30zjvCcc2a1/+KxI/d1dF7nRK8qzq1u2utM+G69zf4Br8Yxw+e9OWQt8/TZ27iQLCerp1NTy3xsmpgRYLS+/1fpxHV7h1toqyp5sITPt5FHqUPElsssF55vIqiGLR+rC4KOWi9yYc7xDjHa5r3Vn86QF4kJL9XdA6+CeE1Nfz09+rCyy8KrqjleuOdLU8pL81ZfW0sM1r3NS5snMn5o+eUXNrgMb1pAYgPfFuymXA5xQ6weU0W9M9tA== X-Forefront-PRVS: 0169092318 X-Forefront-Antispam-Report: SFV:NSPM; SFS:(10009020)(4630300001)(6009001)(7916002)(39860400002)(39850400002)(39840400002)(39450400003)(39410400002)(199003)(189002)(33646002)(50226002)(47776003)(7736002)(8676002)(81156014)(81166006)(25786008)(110136003)(5003940100001)(6486002)(69596002)(86362001)(68736007)(5660300001)(6512006)(305945005)(6506006)(50986999)(76176999)(21086003)(92566002)(38730400001)(189998001)(105586002)(2351001)(66066001)(4326007)(6666003)(101416001)(2906002)(3846002)(6116002)(97736004)(42186005)(50466002)(6916009)(2950100002)(36756003)(48376002)(106356001)(7099028); DIR:OUT; SFP:1101; SCL:1; SRVR:AM4PR0401MB1793; H:linux-7smt.suse; FPR:; SPF:None; PTR:InfoNoRecords; A:1; MX:1; LANG:en; Received-SPF: None (protection.outlook.com: nxp.com does not designate permitted sender hosts) X-Microsoft-Exchange-Diagnostics: =?us-ascii?Q?1; AM4PR0401MB1793; 23:4tZpQDtYNCIK5+M27wQVPYrAFvfup8Z63xDnGwS?= =?us-ascii?Q?dtvKd/yCXeSAKozuedY1tvMZanc/waLzWYteYi7xIpf9kpZJTykiWoRcGi2a?= =?us-ascii?Q?HVup4BR+Nm7kU64yGoQlnL2LYN05/myYFTbElfCrzh+KC69E0wik1g+Man/F?= =?us-ascii?Q?LIFBrkvxRVRZ+8XhfGj6kwEuUa/SQiQBqdotlUiqdTFVKqknkeih96eOHqR2?= =?us-ascii?Q?w+7b3BhCnoKj/XIGSaeomtTNjH2PNMF/1d2wjd7eRlumCdf10NSI5pqUZosI?= =?us-ascii?Q?DvsY4YbPHzKZemPJw5z+OTn3Upgw9Ev83YYX4vvXjNBTwLGWuYhvgG7kO1KG?= =?us-ascii?Q?bjUPnhneoRTbGzDcIpeIgLVArfZn8LwD8qmJsTw0sJkKD5TCgOOhWaQ0jS8a?= =?us-ascii?Q?LcIhuDxIy8gXji+94RWvOQOLwYumJHid+dsdzzN8AfZmBtQEVIK9xHOZyrAh?= =?us-ascii?Q?YhzY7GV9fYvXfnx7JzqTlpvLI6kkB8DyMTUHK0qycTq5Iy8ghd0/Ev3FuadM?= =?us-ascii?Q?BZB1U7IAyw50DHOcuBcqgtobrAEnx1RZUQ/lBthJ+NT0s79KT9v3XfN/EP1F?= =?us-ascii?Q?nTeqYGPl0NyFnIlE3UXKGtmSw+ngAQ7RrVk0A9aix7DcuSUXcxsJDp1fLMaC?= =?us-ascii?Q?WEM2RoPwgwh7lvsdnhgFfug1aqOww9dMflOlmAQkFJJVpdrPhKHeij1s8+uw?= =?us-ascii?Q?4+tn90WpOnvTubQh8I96wdbcgEC4ktS9GtLLonCLUP/2mFgYmMPsRQAaUOoS?= =?us-ascii?Q?fv/jxb99/g55Qo/zFxLmsPhEYzC9XwLn49tAMCssi6nVPC2ycVD2smMFGqTT?= =?us-ascii?Q?XeCSDDV8JvGeH8Ne/m2LQ3Japn/Ctwtd7jqVgA5iSNlyn9SVu4tY4YR8yYDv?= =?us-ascii?Q?czDYyOftMpA+9RGnLFILQ2nAeUIkHbmI0n2WDsIRytxe7SpY+V1/9RlA0sfo?= =?us-ascii?Q?tJmVfVAZJKzci35t91njtnjo1YxRLMpzrZ5DK83ptp7GlCzbhiY/AuwAFOrY?= =?us-ascii?Q?JwJ2cZNF4c4/L1NpYsXd5S+SWnZZS7+Xe5wNWUcAgDqaE9pAjH6Ege0qUx02?= =?us-ascii?Q?4cv96renUC0NliiRxPNHwHzfjbkZ1NNj+e3WoJIHuTyRL8J5mw5eMTSCgBMX?= =?us-ascii?Q?XYcNqraColRZTqb5NfWcYdJB6DNmingxWkIL512CQueyOWdP1hVxwz8LmgTb?= =?us-ascii?Q?PUeV+/srFFf3l3l/Rt4jJct0W68TVSSET/jonxbqFYm1DPmcwjTFIwEHafGA?= =?us-ascii?Q?6GrOgBypQMCv+npb7PXQdwPyYdk29TgS1McLrRRqa?= X-Microsoft-Exchange-Diagnostics: 1; AM4PR0401MB1793; 6:9b4MEYcqPa0ckyn3KoxqjxBrr9iK4yQVP1o69GOZ8FivxhPSr9NtpYazTO5vi5d5hjtFVuYxU3c0OALl6Bo0d0ab2YX40jRX/gTZzgC8hUkW/dcbzWqsXqmiqsLJserMc2XBJtlfok79dJSf/D3Kc/hd4zxEeaqVrTNA5IzLi4gstfyAq8nfwmYFody2GfKGSujHpvI6pYt9WwjWwls3IwyX2CPB/eTWuFNq23vFWlPIqzdLibbhzKTAMi9Ig6Nr06J7qJiWWcDnMMH3M+S5v7iOWwpiLQ0VasJk0zjXAYVdGzdQLNdcPSohVVIbzatXw/HiKKD+YoKyYPURDYXndY10IHdYnFaygC72WOpEKXUkxzUCdvqk2E5+82gcJL88Dngw8k1JcpgllgATPhACCCVxZQTZNamQcTAd5bU1hF8vQVIIsBr7hJOzO3gACSIy78BIs43qlhRJjreQrwkCIw==; 5:VwCj8k2mwpuUiD7Hajs8+9gqQwjv3qz8slREf6rEy1XeKUBMpWs8aIl+qFqLwrLrkZCKobcE+JwD4XTKToOVj1ZoXAREy3uwFDrMyx1o9X/PVAqTsk1LGciPmZqF77iPpeMiVXjlo+rEHpA6MalVUA==; 24:BuXAiDdTgdlvR7PrNYf7ZQZkz45vT/WeGTw3wnWO+EbOpt7jHsPqY77iE2qRPSfv2mOZbux8FG8DYu8UpJs0MCxQhQFMxfevmhAsT3ZSSfo= SpamDiagnosticOutput: 1:99 SpamDiagnosticMetadata: NSPM X-Microsoft-Exchange-Diagnostics: 1; AM4PR0401MB1793; 7:BHP9FrXB1lLd2uCVOHxJLlZWc0+wz2Kr2r+ztl4xKK2FTdUQK+xtmF9xX/IMrKkSmpZWxBrlI36ki/9MgcaFM0iIYr7E70OiwwLwYE9xujAnfVPKFCM1Et98gzOH6PM7YYITD8Bi9A97Eg2Hsv66BKb2mhzqyHtG/iz7cOzAJLLm2oj5toq1wV6hVN4YDTENZHbmKvSnMNA0tdfVCLf0K9/7LkBXVUvccCr6gFyV4X3kWVcHxvL7HPRUA8WSGbOtSsMwxpGpp614w1xrPTAjuChN5srVFFuzbB0Ce7A7SXTVDHrR0WE4EI92Dm8monM89p9zjHtoiejv+Up0xbmo5QzPwItzGEvDfrkpy85ixzomUyhtzvrdGhsevpbYpi8vhweoy6ZrLGC1GZ1cX/IkcCspWxXWNoRA0Pe5dtKiwf0dHNLSdP7SOJ60lBPHia9IRNGLec9ZiehrD53x6zWbnw== X-OriginatorOrg: nxp.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 27 Dec 2016 10:05:36.5209 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-Transport-CrossTenantHeadersStamped: AM4PR0401MB1793 Cc: u-boot@lists.denx.de Subject: [U-Boot] [PATCH V2 03/20] imx: mx7ulp: add iomux driver to support IOMUXC0 and IOMUXC1 X-BeenThere: u-boot@lists.denx.de X-Mailman-Version: 2.1.15 Precedence: list List-Id: U-Boot discussion List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: u-boot-bounces@lists.denx.de Sender: "U-Boot" Add a new driver under ULP directory to support its IOMUXC controllers. The ULP has two IOMUXC, the IOMUXC0 is used for M4 domain, while IOMUXC1 is for A7. We set IOMUXC1 as the default IOMUX in this driver. Any pins in IOMUXC0 needs to configure with IOMUX_CONFIG_MPORTS in its mux_mode field. Signed-off-by: Ye Li Signed-off-by: Peng Fan Cc: Stefano Babic --- V2: none arch/arm/cpu/armv7/mx7ulp/Makefile | 8 +++ arch/arm/cpu/armv7/mx7ulp/iomux.c | 70 +++++++++++++++++++++++ arch/arm/include/asm/arch-mx7ulp/iomux.h | 95 ++++++++++++++++++++++++++++++++ 3 files changed, 173 insertions(+) create mode 100644 arch/arm/cpu/armv7/mx7ulp/Makefile create mode 100644 arch/arm/cpu/armv7/mx7ulp/iomux.c create mode 100644 arch/arm/include/asm/arch-mx7ulp/iomux.h diff --git a/arch/arm/cpu/armv7/mx7ulp/Makefile b/arch/arm/cpu/armv7/mx7ulp/Makefile new file mode 100644 index 0000000..be038e7 --- /dev/null +++ b/arch/arm/cpu/armv7/mx7ulp/Makefile @@ -0,0 +1,8 @@ +# +# (C) Copyright 2016 Freescale Semiconductor, Inc. +# +# SPDX-License-Identifier: GPL-2.0+ +# +# + +obj-y := iomux.o diff --git a/arch/arm/cpu/armv7/mx7ulp/iomux.c b/arch/arm/cpu/armv7/mx7ulp/iomux.c new file mode 100644 index 0000000..1eba24e --- /dev/null +++ b/arch/arm/cpu/armv7/mx7ulp/iomux.c @@ -0,0 +1,70 @@ +/* + * Copyright (C) 2016 Freescale Semiconductor, Inc. + * + * SPDX-License-Identifier: GPL-2.0+ + */ +#include +#include +#include +#include + +static void *base = (void *)IOMUXC_BASE_ADDR; + +/* + * iomuxc0 base address. In imx7ulp-pins.h, + * the offsets of pins in iomuxc0 are from 0xD000, + * so we set the base address to (0x4103D000 - 0xD000 = 0x41030000) + */ +static void *base_mports = (void *)(AIPS0_BASE + 0x30000); + +/* + * configures a single pad in the iomuxer + */ +void mx7ulp_iomux_setup_pad(iomux_cfg_t pad) +{ + u32 mux_ctrl_ofs = (pad & MUX_CTRL_OFS_MASK) >> MUX_CTRL_OFS_SHIFT; + u32 mux_mode = (pad & MUX_MODE_MASK) >> MUX_MODE_SHIFT; + u32 sel_input_ofs = + (pad & MUX_SEL_INPUT_OFS_MASK) >> MUX_SEL_INPUT_OFS_SHIFT; + u32 sel_input = + (pad & MUX_SEL_INPUT_MASK) >> MUX_SEL_INPUT_SHIFT; + u32 pad_ctrl_ofs = mux_ctrl_ofs; + u32 pad_ctrl = (pad & MUX_PAD_CTRL_MASK) >> MUX_PAD_CTRL_SHIFT; + + debug("[PAD CFG] = 0x%16llX \r\n\tmux_ctl = 0x%X(0x%X) sel_input = 0x%X(0x%X) pad_ctrl = 0x%X(0x%X)\r\n", + pad, mux_ctrl_ofs, mux_mode, sel_input_ofs, sel_input, + pad_ctrl_ofs, pad_ctrl); + + if (mux_mode & IOMUX_CONFIG_MPORTS) { + mux_mode &= ~IOMUX_CONFIG_MPORTS; + base = base_mports; + } else { + base = (void *)IOMUXC_BASE_ADDR; + } + + __raw_writel(((mux_mode << IOMUXC_PCR_MUX_ALT_SHIFT) & + IOMUXC_PCR_MUX_ALT_MASK), base + mux_ctrl_ofs); + + if (sel_input_ofs) + __raw_writel((sel_input << IOMUXC_PSMI_IMUX_ALT_SHIFT), + base + sel_input_ofs); + + if (!(pad_ctrl & NO_PAD_CTRL)) + __raw_writel(((mux_mode << IOMUXC_PCR_MUX_ALT_SHIFT) & + IOMUXC_PCR_MUX_ALT_MASK) | + (pad_ctrl & (~IOMUXC_PCR_MUX_ALT_MASK)), + base + pad_ctrl_ofs); +} + +/* configures a list of pads within declared with IOMUX_PADS macro */ +void mx7ulp_iomux_setup_multiple_pads(iomux_cfg_t const *pad_list, + unsigned count) +{ + iomux_cfg_t const *p = pad_list; + int i; + + for (i = 0; i < count; i++) { + mx7ulp_iomux_setup_pad(*p); + p++; + } +} diff --git a/arch/arm/include/asm/arch-mx7ulp/iomux.h b/arch/arm/include/asm/arch-mx7ulp/iomux.h new file mode 100644 index 0000000..a2307db --- /dev/null +++ b/arch/arm/include/asm/arch-mx7ulp/iomux.h @@ -0,0 +1,95 @@ +/* + * Based on Linux i.MX iomux-v3.h file: + * Copyright (C) 2009 by Jan Weitzel Phytec Messtechnik GmbH, + * + * + * Copyright (C) 2016 Freescale Semiconductor, Inc. + * + * SPDX-License-Identifier: GPL-2.0+ + */ + +#ifndef __MACH_IOMUX_H__ +#define __MACH_IOMUX_H__ + +/* + * build IOMUX_PAD structure + * + * This iomux scheme is based around pads, which are the physical balls + * on the processor. + * + * - Each pad has a pad control register (IOMUXC_SW_PAD_CTRL_x) which controls + * things like driving strength and pullup/pulldown. + * - Each pad can have but not necessarily does have an output routing register + * (IOMUXC_SW_MUX_CTL_PAD_x). + * - Each pad can have but not necessarily does have an input routing register + * (IOMUXC_x_SELECT_INPUT) + * + * The three register sets do not have a fixed offset to each other, + * hence we order this table by pad control registers (which all pads + * have) and put the optional i/o routing registers into additional + * fields. + * + * The naming convention for the pad modes is SOC_PAD___ + * If or refers to a GPIO, it is named GPIO__ + * + * IOMUX/PAD Bit field definitions + * + * MUX_CTRL_OFS: 0..15 (16) + * SEL_INPUT_OFS: 16..31 (16) + * MUX_MODE: 32..37 (6) + * SEL_INP: 38..41 (4) + * PAD_CTRL + NO_PAD_CTRL: 42..60 (19) + * reserved: 61-63 (3) +*/ + +typedef u64 iomux_cfg_t; + +#define MUX_CTRL_OFS_SHIFT 0 +#define MUX_CTRL_OFS_MASK ((iomux_cfg_t)0xffff << MUX_CTRL_OFS_SHIFT) +#define MUX_SEL_INPUT_OFS_SHIFT 16 +#define MUX_SEL_INPUT_OFS_MASK ((iomux_cfg_t)0xffff << \ + MUX_SEL_INPUT_OFS_SHIFT) + +#define MUX_MODE_SHIFT 32 +#define MUX_MODE_MASK ((iomux_cfg_t)0x3f << MUX_MODE_SHIFT) +#define MUX_SEL_INPUT_SHIFT 38 +#define MUX_SEL_INPUT_MASK ((iomux_cfg_t)0xf << MUX_SEL_INPUT_SHIFT) +#define MUX_PAD_CTRL_SHIFT 42 +#define MUX_PAD_CTRL_MASK ((iomux_cfg_t)0x7ffff << MUX_PAD_CTRL_SHIFT) + +#define MUX_PAD_CTRL(x) ((iomux_cfg_t)(x) << MUX_PAD_CTRL_SHIFT) + +#define IOMUX_PAD(pad_ctrl_ofs, mux_ctrl_ofs, mux_mode, sel_input_ofs, \ + sel_input, pad_ctrl) \ + (((iomux_cfg_t)(mux_ctrl_ofs) << MUX_CTRL_OFS_SHIFT) | \ + ((iomux_cfg_t)(mux_mode) << MUX_MODE_SHIFT) | \ + ((iomux_cfg_t)(pad_ctrl) << MUX_PAD_CTRL_SHIFT) | \ + ((iomux_cfg_t)(sel_input_ofs) << MUX_SEL_INPUT_OFS_SHIFT)| \ + ((iomux_cfg_t)(sel_input) << MUX_SEL_INPUT_SHIFT)) + +#define NEW_PAD_CTRL(cfg, pad) (((cfg) & ~MUX_PAD_CTRL_MASK) | \ + MUX_PAD_CTRL(pad)) + + +#define IOMUX_CONFIG_MPORTS 0x20 +#define MUX_MODE_MPORTS ((iomux_v3_cfg_t)IOMUX_CONFIG_MPORTS << \ + MUX_MODE_SHIFT) + +/* Bit definition below needs to be fixed acccording to ulp rm */ + +#define NO_PAD_CTRL (1 << 18) +#define PAD_CTL_OBE_ENABLE (1 << 17) +#define PAD_CTL_IBE_ENABLE (1 << 16) +#define PAD_CTL_DSE (1 << 6) +#define PAD_CTL_ODE (1 << 5) +#define PAD_CTL_SRE_FAST (0 << 2) +#define PAD_CTL_SRE_SLOW (1 << 2) +#define PAD_CTL_PUE (1 << 1) +#define PAD_CTL_PUS_UP ((1 << 0) | PAD_CTL_PUE) +#define PAD_CTL_PUS_DOWN ((0 << 0) | PAD_CTL_PUE) + + +void mx7ulp_iomux_setup_pad(iomux_cfg_t pad); +void mx7ulp_iomux_setup_multiple_pads(iomux_cfg_t const *pad_list, + unsigned count); +#endif /* __MACH_IOMUX_H__*/