From patchwork Thu Jan 17 14:33:26 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Horatiu Vultur X-Patchwork-Id: 1026722 X-Patchwork-Delegate: daniel.schwierzeck@googlemail.com 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=none (p=none dis=none) header.from=microchip.com Received: from lists.denx.de (dione.denx.de [81.169.180.215]) by ozlabs.org (Postfix) with ESMTP id 43gS8K22wxz9sCh for ; Fri, 18 Jan 2019 02:06:25 +1100 (AEDT) Received: by lists.denx.de (Postfix, from userid 105) id 0C870C22030; Thu, 17 Jan 2019 15:06: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, SPF_HELO_PASS 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 4ACB1C21D4A; Thu, 17 Jan 2019 15:06:18 +0000 (UTC) Received: by lists.denx.de (Postfix, from userid 105) id 4F8E4C21C4A; Thu, 17 Jan 2019 15:06:16 +0000 (UTC) Received: from NAM02-CY1-obe.outbound.protection.outlook.com (mail-eopbgr760040.outbound.protection.outlook.com [40.107.76.40]) by lists.denx.de (Postfix) with ESMTPS id CC9A9C21C4A for ; Thu, 17 Jan 2019 15:06:14 +0000 (UTC) Received: from BL2PR19CA0006.namprd19.prod.outlook.com (2603:10b6:201:f::16) by BYAPR19MB2983.namprd19.prod.outlook.com (2603:10b6:a03:13d::21) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.1537.26; Thu, 17 Jan 2019 15:06:12 +0000 Received: from BY2FFO11FD022.protection.gbl (2a01:111:f400:7c0c::175) by BL2PR19CA0006.outlook.office365.com (2603:10b6:201:f::16) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384) id 15.20.1537.26 via Frontend Transport; Thu, 17 Jan 2019 15:06:12 +0000 Authentication-Results: spf=softfail (sender IP is 208.19.100.21) smtp.mailfrom=microchip.com; lists.denx.de; dkim=none (message not signed) header.d=none;lists.denx.de; dmarc=none action=none header.from=microchip.com; Received-SPF: SoftFail (protection.outlook.com: domain of transitioning microchip.com discourages use of 208.19.100.21 as permitted sender) Received: from AVMBX1.microsemi.net (208.19.100.21) by BY2FFO11FD022.mail.protection.outlook.com (10.1.15.211) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256) id 15.20.1471.13 via Frontend Transport; Thu, 17 Jan 2019 15:06:10 +0000 Received: from AVMBX3.microsemi.net (10.100.34.33) by AVMBX1.microsemi.net (10.100.34.31) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.1531.3; Thu, 17 Jan 2019 06:36:01 -0800 Received: from xrelay.vitesse.com (10.9.45.188) by avmbx3.microsemi.net (10.100.34.33) with Microsoft SMTP Server (version=TLS1_0, cipher=TLS_RSA_WITH_AES_256_CBC_SHA) id 15.1.1531.3 via Frontend Transport; Thu, 17 Jan 2019 06:36:01 -0800 Received: from soft-dev3.microsemi.net (soft-dev3.microsemi.net [10.205.27.16]) by xrelay.vitesse.com (8.13.8/8.13.8) with ESMTP id x0HEYVXa002983; Thu, 17 Jan 2019 06:35:44 -0800 From: Horatiu Vultur To: Date: Thu, 17 Jan 2019 15:33:26 +0100 Message-ID: <1547735608-6023-2-git-send-email-horatiu.vultur@microchip.com> X-Mailer: git-send-email 2.7.4 In-Reply-To: <1547735608-6023-1-git-send-email-horatiu.vultur@microchip.com> References: <1547735608-6023-1-git-send-email-horatiu.vultur@microchip.com> MIME-Version: 1.0 X-EOPAttributedMessage: 0 X-Matching-Connectors: 131922111701737491; (5a93feec-e11d-4f7b-166a-08d09f1f276b); () X-Forefront-Antispam-Report: CIP:208.19.100.21; IPV:NLI; CTRY:US; EFV:NLI; SFV:NSPM; SFS:(10009020)(376002)(136003)(39850400004)(346002)(396003)(2980300002)(199004)(189003)(8936002)(86362001)(305945005)(6666004)(356004)(107886003)(2906002)(77096007)(26005)(48376002)(50466002)(8676002)(81156014)(50226002)(498600001)(97736004)(68736007)(53936002)(47776003)(4326008)(5660300001)(54906003)(81166006)(6916009)(16586007)(53416004)(106466001)(316002)(105596002)(2351001)(44832011)(486006)(476003)(2616005)(36756003)(126002)(446003)(11346002)(51416003)(76176011)(336012)(69596002); DIR:OUT; SFP:1101; SCL:1; SRVR:BYAPR19MB2983; H:AVMBX1.microsemi.net; FPR:; SPF:SoftFail; LANG:en; PTR:InfoDomainNonexistent; A:1; MX:1; X-Microsoft-Exchange-Diagnostics: 1; BY2FFO11FD022; 1:5GH3b5lWne0Tgdsbb9GQ7FxzBFuypIOqQomlrI1fjdLyICw3hwigIlE/jwaEW8YAuWarnsakNHAsjANGIcCaZ3tuC+9GzTdp/JZJeDky6pQt21/LYzXq2eaQH3S95lGI X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: 4793a1c6-fa2e-48af-7448-08d67c8d506b X-Microsoft-Antispam: BCL:0; PCL:0; RULEID:(2390118)(7020095)(5600109)(711020)(2017052603328); SRVR:BYAPR19MB2983; X-Microsoft-Exchange-Diagnostics: 1; BYAPR19MB2983; 3:ixBZ9zxl9VuMbEzg3pWCghktaas79BV4ofvpDgby67ZbcrIu+g8YEi62CBzWIAjOyABUuCBztiHNMASbcp0K9jhhpnt1/z+r/OQZEt4ofF5dTaZ8RNRp7AZxzcg2CQIn9va1JQLIbit12Fno7+BGL+gyW1OO/DVIiKbgjceNomGIsS/lN9Lk8et+wZGF5RWE16u7hGP7tuSVJ6UTpNvXu+vNZ5UYml79Foo6q2Vk5lsmjg2kfNm9rEclQ16QV/JFxrwcMzOgysvRaEmwz+wCLwDtiDEBA6c/1RmjJjHxV8cOhWjoLd3b/0wVnAHfxdEaRjc1TMAOgZf+GEb/FkjnuGBzdCCo3Jmq+4uSKxkOmGkTg5itpMK5LY1DtNqMbm5P; 25:4Y8qVdmjfelK3+piF4BS8yLqyP+/jKWGLclCuN0rc5hA71ddAz4CDnSsW/Q/qnKUzWFp3LFS4oc8AaNd1lo7SIpy9Azfd/lfaD0gWlNvNUguzcqjRoeHoi0zem7cZnUkd5XCq8xTINUKJYmSmwUfYg72ocHm+Qn519v8YaGNjkvk4R6J+WZ+jByBSH5dJwXrFUm8f+NTomhRq18tQRvX4ixwyvaAxBhIKpwkWkz1pdzahNs2+F/7FDOGr7hjiPv0famiFM5w5gSXJsFgCw3n8HxESqjBirBE9g94K3Fh6ZQC1DC+/v5Tgp5Q6vuvXlOzq7ghE0I2UYKMIk5ji3V2ig== X-MS-TrafficTypeDiagnostic: BYAPR19MB2983: X-Microsoft-Exchange-Diagnostics: 1; BYAPR19MB2983; 31:umU+eLsi0gG8luBlE4GDhoiZOEn/URIyCIzYFpnorpB9UD4ejP+BqS2ZdCdWNT/s6JZfdRZZ2aFpYThwoY4qPzaCIpaRjIOxrCLzVLYyAMkXHJmg3ER/oRfRpPUvbLd9QLHlyfHvG6kNxtd/cRm5PWFlyRXwP7o1puA3A3gqmsyaZpNWOBIzR4F1yCSJgDSD7HhJ8ZB/etNDr7VJUFYp9cuvojeaGA26HRI7aFq7bwE=; 4:dcYVHRDr4DkfyK9/S5VWXvMLti8d9OwyfSr0nfioKqzAxrdpELwTi2KfgOKhohrhhPIdUmKvAOwCBAm/kksHGwR9IYV8wkbZsZadjGm1tp9J2Fkt4+j/MFw/sNSIWlPPTsLXrQFbxw/oEBCsSMHqaWQYwJsmZNXe/Fd4YGPxbwMLVEfxOn5w+O49AYzCJrb2YYQugh6JoCur3HHkbP2Gk4s6+UcqAAbULCLILdkZpxNFP9+iXir8lT5wRWG/BhmDU/FtoRFfemhsC6eFXq6YLW/p5KzPVvynhTKH1ZhKROHyWknUueiqvMJBd8mxMNGL X-Microsoft-Antispam-PRVS: X-Forefront-PRVS: 0920602B08 X-Microsoft-Exchange-Diagnostics: =?us-ascii?Q?1; BYAPR19MB2983; 23:Kkps8bhZ3GWAlCk15jQYac1Ycpb2+Nwr4+ncZyA7L?= Skv2kbvcLv2jsk0ntDVf1j2zXddOZajx55PM6HdmTfizytNujjl334Cb7Mbi0gB/BilMGbuBGuFcP9A5O1in4Z8iponBiegubEMO12MaEI2S+BKAwov1HOjaQdfRx3/4z6avToyQBBCtuaVKXN6ZzunNZsYSQLF2ziUtcPSuGcE8y0HHTEVCcon44iBpiqj7FG1qImVYMCix94CJOSC8pdfAdSqNzxxVv3Ig8q//+K8gulpvSPiD+0qNUid0lY/DFxA0QeB5yVpmF32QfvZLQhznb8srkQf8V6LnO3Q0qREBP6+45v5J4eDyNZQzmyOFDqBj5kocryeW6gDNn0rqnsMIfoguqHg7zzFLzEWkUUTztfQH9dwlsFxp+MoB65IbJeZamlPtqLIz/818TAKzMT9J8ZDrM/qml7vMc3/HNKtsn2nD0+DhPziuN3/ZAPjqXxH/74is4YpF4S7ctL3UKSo6SV+xhbypbwacRKtcq6D4T1VEvJnMG1Yj+hdzFfZZTdc20HI+GG7m4uMtB51BX+LxPm+aAtWLYisy43zIWsrPOOldYj+g+t8+zlfm1YU8Slt5cBIRUoogUQOGZ1D435hbgCQQP/LifzrkpLAvasgNfPm2pf6DMhZZjG06sZ223iSllcjhbBRcI0CmEsoB9DLrBDnzjM37mIYxeqfs1ueZH9vx9W16DBBD9vwUi3e38G8LHwRu4B1dUgNLXXxdQM6SSC1gApeaR9cb4he1beXBWSRNHTsjxsySFWgQCVM0u38/YoHEVCs/RL04jOEYufwvXkGggNYXdN0lPej5krVdkXY8xnyErE4CDPp7SKvkOw4+a2klKWLMGEqiUynouGNKjvQNz6x27w8eYmyh/+cqaNVXkwPx/MctiGGI4SDzKs4N/tI2gsrguQK4+bKo5BOeKxf1aC9rFeOwtnbYrZsb7XxPDVSWgrhtwAdgPYkBcKtcT2eqhpg9zWOhI8pEK7BDC+Rj9+ZE1CGXhPPVR8tZ5mtSNdhPFif8CXszwbsoHv0c7m2SlYTrdmnAcFgiiBVmCF9PefgAMokMFGCCMkvECCEFcxCxUZAUX0QU8fzrOw= X-Microsoft-Antispam-Message-Info: 2Ts3wCFTFuFHl5IidvKW2yB3XVbnZj8Wt8/vBEab4B20WJX2moYqYaSd9P9Wvk0m/pyI4CFC2FvW8JhHbCJvJZaVZYM4QSXJ3VDTX94uU4h04LVn5FTvHBacQXXBnuWDj3/cd+QYmnel+0z5J/9dRjyNEMF/u/D2b37VRqhnCa/JygDEPdTBnIrw8nJuTFCpjEfhmNvuTkxikCH8A0Iv2avh0bVPbetgQxrlqOPK2Z0KqZL32zliAgd1F0pOv1gSXSpi5NerbR0sHF7aZwwPYeq+DXI3luPo0YhdeZMyXn4Awkv3TiVIbUOvOSaRNm99WlMKYcl+9hKw/JPPRWbv/9WKJsvo1SCuKl6bMq+huQ2Hr7NVBHH7Tk6/TIY7XeUtZNivdvQMe20ORTqghhr+r/xnQewislHZ7zt49IE0GK4= X-Microsoft-Exchange-Diagnostics: 1; BYAPR19MB2983; 6:WUKFvZOHUCvr6Go5cWmYzogPaedw/3k8LuODHMgEgFaevI3O+sH9cx5/kv7cuKmGZEcDbEx7DP2gofpQhUpHszEVyS1NhZ6CoPSg51kCl90JaBUJsDC9pVVpt2W34sCOvsN73OBw2iicwIyg+3Ee7q/RElKLb1DMv8cVJnxyqsdXEmVjTNu+HJXBJoNzAy0sWUo/7BBm+QOZJBWbUYBqJHLv3WxLf69PPY3MQ739X42U9PsH+MRmMPJv6mfLvBQEWWbfgpuscPYALRvl3uMqNfNES+9UVk7L39lUDMTCZlAXfYptuwbYzvhRQpcxFTZbLudQOdb5ek1xBY/XgtLvpIp7FKJjs5q183iZ4DUKaSM5N84jg/5wTW9bxOTY9sjKY+Swtavu/65cjMmahuRTIgJQvXWtl0VYjOAs/VzOsZTb215ZQYgooax6JZIGK0ns1FVH87GNyf2LjVEcpJm+xw==; 5:1R4hCIQ0HRvB5MBbamS6TCX3KB+9p7V8hGU5PzoYCtz/K3fhG63RWlSG0EJJSuakrRbQ7aLCzHywzLRRuY10Nm1P1fBIeY2HaiJmOQpm0QfAahbuGVpAonrNRtV3L07Snn3wB0+Kl7Nrxj4RImahMrh7NTRdJfyv/6n+6Sn3vPmVcpbMM/gy8ZcBxGHt5RgYxeMVAcNEiU7iu4IdNVhRWw==; 7:qCM8OfkrHUHpwBNhxaFdPyLUB/rSmphAYOBwrSwbrrSO6qlvqeW8xgLvMeHbRFd/b1sUy3HMYgghqviGoLb6ScblLbdpgrRqnKaQNAGSgIT7JRe1Kfv+tw/srVdM3RnPYlI7xYwYf550+Qjt1yWZLw== SpamDiagnosticOutput: 1:99 SpamDiagnosticMetadata: NSPM X-MS-Exchange-CrossTenant-OriginalArrivalTime: 17 Jan 2019 15:06:10.0643 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: 4793a1c6-fa2e-48af-7448-08d67c8d506b X-MS-Exchange-CrossTenant-Id: 5afe0b00-7697-4969-b663-5eab37d5f47e X-MS-Exchange-CrossTenant-OriginalAttributedTenantConnectingIp: TenantId=5afe0b00-7697-4969-b663-5eab37d5f47e; Ip=[208.19.100.21]; Helo=[AVMBX1.microsemi.net] X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem X-MS-Exchange-Transport-CrossTenantHeadersStamped: BYAPR19MB2983 Subject: [U-Boot] [PATCH v2 1/3] pinctrl: mscc: Add gpio and pinctrl for Servalt SoC family. 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 Servalt SoC family has 36 pins. Currently there is not support for Servalt pinctrl in Linux kernel. Reviewed-by: Daniel Schwierzeck Signed-off-by: Horatiu Vultur --- drivers/pinctrl/mscc/Kconfig | 9 ++ drivers/pinctrl/mscc/Makefile | 1 + drivers/pinctrl/mscc/pinctrl-servalt.c | 269 +++++++++++++++++++++++++++++++++ 3 files changed, 279 insertions(+) create mode 100644 drivers/pinctrl/mscc/pinctrl-servalt.c diff --git a/drivers/pinctrl/mscc/Kconfig b/drivers/pinctrl/mscc/Kconfig index d07ea1b..0269565 100644 --- a/drivers/pinctrl/mscc/Kconfig +++ b/drivers/pinctrl/mscc/Kconfig @@ -29,3 +29,12 @@ config PINCTRL_MSCC_JR2 help Support pin multiplexing and pin configuration control on Microsemi jr2 SoCs. + +config PINCTRL_MSCC_SERVALT + depends on SOC_SERVALT && PINCTRL_FULL && OF_CONTROL + select PINCTRL_MSCC + default y + bool "Microsemi servalt family pin control driver" + help + Support pin multiplexing and pin configuration control on + Microsemi servalt SoCs. diff --git a/drivers/pinctrl/mscc/Makefile b/drivers/pinctrl/mscc/Makefile index 8038d54..c6b0373 100644 --- a/drivers/pinctrl/mscc/Makefile +++ b/drivers/pinctrl/mscc/Makefile @@ -4,3 +4,4 @@ obj-y += mscc-common.o obj-$(CONFIG_PINCTRL_MSCC_OCELOT) += pinctrl-ocelot.o obj-$(CONFIG_PINCTRL_MSCC_LUTON) += pinctrl-luton.o obj-$(CONFIG_PINCTRL_MSCC_JR2) += pinctrl-jr2.o +obj-$(CONFIG_PINCTRL_MSCC_SERVALT) += pinctrl-servalt.o diff --git a/drivers/pinctrl/mscc/pinctrl-servalt.c b/drivers/pinctrl/mscc/pinctrl-servalt.c new file mode 100644 index 0000000..592b7c5 --- /dev/null +++ b/drivers/pinctrl/mscc/pinctrl-servalt.c @@ -0,0 +1,269 @@ +// SPDX-License-Identifier: (GPL-2.0 OR MIT) +/* + * Microsemi SoCs pinctrl driver + * + * Author: + * Copyright (c) 2019 Microsemi Corporation + */ + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include "mscc-common.h" + +enum { + FUNC_NONE, + FUNC_GPIO, + FUNC_IRQ0_IN, + FUNC_IRQ0_OUT, + FUNC_IRQ1_IN, + FUNC_IRQ1_OUT, + FUNC_MIIM1, + FUNC_MIIM2, + FUNC_PCI_WAKE, + FUNC_PTP0, + FUNC_PTP1, + FUNC_PTP2, + FUNC_PTP3, + FUNC_PWM, + FUNC_RCVRD_CLK0, + FUNC_RCVRD_CLK1, + FUNC_RCVRD_CLK2, + FUNC_RCVRD_CLK3, + FUNC_REF_CLK0, + FUNC_REF_CLK1, + FUNC_REF_CLK2, + FUNC_REF_CLK3, + FUNC_SFP0, + FUNC_SFP1, + FUNC_SFP2, + FUNC_SFP3, + FUNC_SFP4, + FUNC_SFP5, + FUNC_SFP6, + FUNC_SFP7, + FUNC_SFP8, + FUNC_SFP9, + FUNC_SFP10, + FUNC_SFP11, + FUNC_SFP12, + FUNC_SFP13, + FUNC_SFP14, + FUNC_SFP15, + FUNC_SIO, + FUNC_SPI, + FUNC_TACHO, + FUNC_TWI, + FUNC_TWI2, + FUNC_TWI_SCL_M, + FUNC_UART, + FUNC_UART2, + FUNC_MAX +}; + +static char * const servalt_function_names[] = { + [FUNC_NONE] = "none", + [FUNC_GPIO] = "gpio", + [FUNC_IRQ0_IN] = "irq0_in", + [FUNC_IRQ0_OUT] = "irq0_out", + [FUNC_IRQ1_IN] = "irq1_in", + [FUNC_IRQ1_OUT] = "irq1_out", + [FUNC_MIIM1] = "miim1", + [FUNC_MIIM2] = "miim2", + [FUNC_PCI_WAKE] = "pci_wake", + [FUNC_PTP0] = "ptp0", + [FUNC_PTP1] = "ptp1", + [FUNC_PTP2] = "ptp2", + [FUNC_PTP3] = "ptp3", + [FUNC_PWM] = "pwm", + [FUNC_RCVRD_CLK0] = "rcvrd_clk0", + [FUNC_RCVRD_CLK1] = "rcvrd_clk1", + [FUNC_RCVRD_CLK2] = "rcvrd_clk2", + [FUNC_RCVRD_CLK3] = "rcvrd_clk3", + [FUNC_REF_CLK0] = "ref_clk0", + [FUNC_REF_CLK1] = "ref_clk1", + [FUNC_REF_CLK2] = "ref_clk2", + [FUNC_REF_CLK3] = "ref_clk3", + [FUNC_SFP0] = "sfp0", + [FUNC_SFP1] = "sfp1", + [FUNC_SFP2] = "sfp2", + [FUNC_SFP3] = "sfp3", + [FUNC_SFP4] = "sfp4", + [FUNC_SFP5] = "sfp5", + [FUNC_SFP6] = "sfp6", + [FUNC_SFP7] = "sfp7", + [FUNC_SFP8] = "sfp8", + [FUNC_SFP9] = "sfp9", + [FUNC_SFP10] = "sfp10", + [FUNC_SFP11] = "sfp11", + [FUNC_SFP12] = "sfp12", + [FUNC_SFP13] = "sfp13", + [FUNC_SFP14] = "sfp14", + [FUNC_SFP15] = "sfp15", + [FUNC_SIO] = "sio", + [FUNC_SPI] = "spi", + [FUNC_TACHO] = "tacho", + [FUNC_TWI] = "twi", + [FUNC_TWI2] = "twi2", + [FUNC_TWI_SCL_M] = "twi_scl_m", + [FUNC_UART] = "uart", + [FUNC_UART2] = "uart2", +}; + +MSCC_P(0, SIO, NONE, NONE); +MSCC_P(1, SIO, NONE, NONE); +MSCC_P(2, SIO, NONE, NONE); +MSCC_P(3, SIO, NONE, NONE); +MSCC_P(4, IRQ0_IN, IRQ0_OUT, TWI_SCL_M); +MSCC_P(5, IRQ1_IN, IRQ1_OUT, TWI_SCL_M); +MSCC_P(6, UART, NONE, NONE); +MSCC_P(7, UART, NONE, NONE); +MSCC_P(8, SPI, SFP0, TWI_SCL_M); +MSCC_P(9, PCI_WAKE, SFP1, SPI); +MSCC_P(10, PTP0, SFP2, TWI_SCL_M); +MSCC_P(11, PTP1, SFP3, TWI_SCL_M); +MSCC_P(12, REF_CLK0, SFP4, TWI_SCL_M); +MSCC_P(13, REF_CLK1, SFP5, TWI_SCL_M); +MSCC_P(14, REF_CLK2, IRQ0_OUT, SPI); +MSCC_P(15, REF_CLK3, IRQ1_OUT, SPI); +MSCC_P(16, TACHO, SFP6, SPI); +MSCC_P(17, PWM, NONE, TWI_SCL_M); +MSCC_P(18, PTP2, SFP7, SPI); +MSCC_P(19, PTP3, SFP8, SPI); +MSCC_P(20, UART2, SFP9, SPI); +MSCC_P(21, UART2, NONE, NONE); +MSCC_P(22, MIIM1, SFP10, TWI2); +MSCC_P(23, MIIM1, SFP11, TWI2); +MSCC_P(24, TWI, NONE, NONE); +MSCC_P(25, TWI, SFP12, TWI_SCL_M); +MSCC_P(26, TWI_SCL_M, SFP13, SPI); +MSCC_P(27, TWI_SCL_M, SFP14, SPI); +MSCC_P(28, TWI_SCL_M, SFP15, SPI); +MSCC_P(29, TWI_SCL_M, NONE, NONE); +MSCC_P(30, TWI_SCL_M, NONE, NONE); +MSCC_P(31, TWI_SCL_M, NONE, NONE); +MSCC_P(32, TWI_SCL_M, NONE, NONE); +MSCC_P(33, RCVRD_CLK0, NONE, NONE); +MSCC_P(34, RCVRD_CLK1, NONE, NONE); +MSCC_P(35, RCVRD_CLK2, NONE, NONE); +MSCC_P(36, RCVRD_CLK3, NONE, NONE); + +#define SERVALT_PIN(n) { \ + .name = "GPIO_"#n, \ + .drv_data = &mscc_pin_##n \ +} + +static const struct mscc_pin_data servalt_pins[] = { + SERVALT_PIN(0), + SERVALT_PIN(1), + SERVALT_PIN(2), + SERVALT_PIN(3), + SERVALT_PIN(4), + SERVALT_PIN(5), + SERVALT_PIN(6), + SERVALT_PIN(7), + SERVALT_PIN(8), + SERVALT_PIN(9), + SERVALT_PIN(10), + SERVALT_PIN(11), + SERVALT_PIN(12), + SERVALT_PIN(13), + SERVALT_PIN(14), + SERVALT_PIN(15), + SERVALT_PIN(16), + SERVALT_PIN(17), + SERVALT_PIN(18), + SERVALT_PIN(19), + SERVALT_PIN(20), + SERVALT_PIN(21), + SERVALT_PIN(22), + SERVALT_PIN(23), + SERVALT_PIN(24), + SERVALT_PIN(25), + SERVALT_PIN(26), + SERVALT_PIN(27), + SERVALT_PIN(28), + SERVALT_PIN(29), + SERVALT_PIN(30), + SERVALT_PIN(31), + SERVALT_PIN(32), + SERVALT_PIN(33), + SERVALT_PIN(34), + SERVALT_PIN(35), + SERVALT_PIN(36), +}; + +static const unsigned long servalt_gpios[] = { + [MSCC_GPIO_OUT_SET] = 0x00, + [MSCC_GPIO_OUT_CLR] = 0x08, + [MSCC_GPIO_OUT] = 0x10, + [MSCC_GPIO_IN] = 0x18, + [MSCC_GPIO_OE] = 0x20, + [MSCC_GPIO_INTR] = 0x28, + [MSCC_GPIO_INTR_ENA] = 0x30, + [MSCC_GPIO_INTR_IDENT] = 0x38, + [MSCC_GPIO_ALT0] = 0x40, + [MSCC_GPIO_ALT1] = 0x48, +}; + +static int servalt_gpio_probe(struct udevice *dev) +{ + struct gpio_dev_priv *uc_priv; + + uc_priv = dev_get_uclass_priv(dev); + uc_priv->bank_name = "servalt-gpio"; + uc_priv->gpio_count = ARRAY_SIZE(servalt_pins); + + return 0; +} + +static struct driver servalt_gpio_driver = { + .name = "servalt-gpio", + .id = UCLASS_GPIO, + .probe = servalt_gpio_probe, + .ops = &mscc_gpio_ops, +}; + +static int servalt_pinctrl_probe(struct udevice *dev) +{ + int ret; + + ret = mscc_pinctrl_probe(dev, FUNC_MAX, servalt_pins, + ARRAY_SIZE(servalt_pins), + servalt_function_names, + servalt_gpios); + + if (ret) + return ret; + + ret = device_bind(dev, &servalt_gpio_driver, "servalt-gpio", NULL, + dev_of_offset(dev), NULL); + + if (ret) + return ret; + + return 0; +} + +static const struct udevice_id servalt_pinctrl_of_match[] = { + { .compatible = "mscc,servalt-pinctrl" }, + {}, +}; + +U_BOOT_DRIVER(servalt_pinctrl) = { + .name = "servalt-pinctrl", + .id = UCLASS_PINCTRL, + .of_match = of_match_ptr(servalt_pinctrl_of_match), + .probe = servalt_pinctrl_probe, + .priv_auto_alloc_size = sizeof(struct mscc_pinctrl), + .ops = &mscc_pinctrl_ops, +};