zynqmp: pm: Add APIs for pin control queries
authorRajan Vaja <rajan.vaja@xilinx.com>
Tue, 30 Jan 2018 12:16:31 +0000 (04:16 -0800)
committerJolly Shah <jollys@xilinx.com>
Thu, 15 Mar 2018 17:23:54 +0000 (10:23 -0700)
Add pin control APIs which driver can use to query
pin information from firmware. Using these APIs,
driver do not need to maintain hard-coded pin database.

Major changes in patch are:
- Add pin database with pins, functions and function groups
  information
- Implement APIs for pin information queries
- Update pin control APIs for get/set functions to use new
  pin control database. Remove pin database which was added
  earlier.

Signed-off-by: Rajan Vaja <rajanv@xilinx.com>
Signed-off-by: Jolly Shah <jollys@xilinx.com>
plat/xilinx/zynqmp/pm_service/pm_api_pinctrl.c
plat/xilinx/zynqmp/pm_service/pm_api_pinctrl.h
plat/xilinx/zynqmp/pm_service/pm_api_sys.c
plat/xilinx/zynqmp/pm_service/pm_api_sys.h

index 373581e568f5eeecaaf70af151ab506ee01c9ccf..97c50c436c47f600038eb376019212dc91a4ca34 100644 (file)
@@ -10,6 +10,7 @@
 
 #include <arch_helpers.h>
 #include <platform.h>
+#include <string.h>
 #include "pm_api_pinctrl.h"
 #include "pm_api_sys.h"
 #include "pm_client.h"
 #define PINCTRL_REGVAL_TO_PIN_CONFIG(pin, value)                       \
        (((value) >> PINCTRL_PIN_OFFSET(pin)) & 0x1)
 
-#define PINMUX_MAP(pin, f0, f1, f2, f3, f4, f5, f6,    \
-                  f7, f8, f9, f10, f11, f12)           \
-       [pin] = {                                       \
-               .funcs =  {                             \
-                       f0,                             \
-                       f1,                             \
-                       f2,                             \
-                       f3,                             \
-                       f4,                             \
-                       f5,                             \
-                       f6,                             \
-                       f7,                             \
-                       f8,                             \
-                       f9,                             \
-                       f10,                            \
-                       f11,                            \
-                       f12,                            \
-               },                                      \
-       }
-
-struct pm_pinctrl_pinmux_map {
-       uint8_t funcs[NFUNCS_PER_PIN];
-};
-
 static uint8_t pm_pinctrl_mux[NFUNCS_PER_PIN] = {
        0x02, 0x04, 0x08, 0x10, 0x18,
        0x00, 0x20, 0x40, 0x60, 0x80,
        0xA0, 0xC0, 0xE0
 };
 
-struct pm_pinctrl_pinmux_map pinmux_maps[] = {
-       PINMUX_MAP(0, NODE_QSPI, NODE_UNKNOWN, NODE_UNKNOWN, NODE_TESTSCAN,
-                  NODE_UNKNOWN, NODE_GPIO, NODE_CAN_1, NODE_I2C_1, NODE_PJTAG,
-                  NODE_SPI_0, NODE_TTC_3, NODE_UART_1, NODE_TRACE),
-       PINMUX_MAP(1, NODE_QSPI, NODE_UNKNOWN, NODE_UNKNOWN, NODE_TESTSCAN,
-                  NODE_UNKNOWN, NODE_GPIO, NODE_CAN_1, NODE_I2C_1, NODE_PJTAG,
-                  NODE_SPI_0, NODE_TTC_3, NODE_UART_1, NODE_TRACE),
-       PINMUX_MAP(2, NODE_QSPI, NODE_UNKNOWN, NODE_UNKNOWN, NODE_TESTSCAN,
-                  NODE_UNKNOWN, NODE_GPIO, NODE_CAN_0, NODE_I2C_0, NODE_PJTAG,
-                  NODE_SPI_0, NODE_TTC_2, NODE_UART_0, NODE_TRACE),
-       PINMUX_MAP(3, NODE_QSPI, NODE_UNKNOWN, NODE_UNKNOWN, NODE_TESTSCAN,
-                  NODE_UNKNOWN, NODE_GPIO, NODE_CAN_0, NODE_I2C_0, NODE_PJTAG,
-                  NODE_SPI_0, NODE_TTC_2, NODE_UART_0, NODE_TRACE),
-       PINMUX_MAP(4, NODE_QSPI, NODE_UNKNOWN, NODE_UNKNOWN, NODE_TESTSCAN,
-                  NODE_UNKNOWN, NODE_GPIO, NODE_CAN_1, NODE_I2C_1, NODE_SWDT_1,
-                  NODE_SPI_0, NODE_TTC_1, NODE_UART_1, NODE_TRACE),
-       PINMUX_MAP(5, NODE_QSPI, NODE_UNKNOWN, NODE_UNKNOWN, NODE_TESTSCAN,
-                  NODE_UNKNOWN, NODE_GPIO, NODE_CAN_1, NODE_I2C_1, NODE_SWDT_1,
-                  NODE_SPI_0, NODE_TTC_1, NODE_UART_1, NODE_TRACE),
-       PINMUX_MAP(6, NODE_QSPI, NODE_UNKNOWN, NODE_UNKNOWN, NODE_TESTSCAN,
-                  NODE_UNKNOWN, NODE_GPIO, NODE_CAN_0, NODE_I2C_0, NODE_SWDT_0,
-                  NODE_SPI_1, NODE_TTC_0, NODE_UART_0, NODE_TRACE),
-       PINMUX_MAP(7, NODE_QSPI, NODE_UNKNOWN, NODE_UNKNOWN, NODE_TESTSCAN,
-                  NODE_UNKNOWN, NODE_GPIO, NODE_CAN_0, NODE_I2C_0, NODE_SWDT_0,
-                  NODE_SPI_1, NODE_TTC_0, NODE_UART_0, NODE_TRACE),
-       PINMUX_MAP(8, NODE_QSPI, NODE_UNKNOWN, NODE_UNKNOWN, NODE_TESTSCAN,
-                  NODE_UNKNOWN, NODE_GPIO, NODE_CAN_1, NODE_I2C_1, NODE_SWDT_1,
-                  NODE_SPI_1, NODE_TTC_3, NODE_UART_1, NODE_TRACE),
-       PINMUX_MAP(9, NODE_QSPI, NODE_NAND, NODE_UNKNOWN, NODE_TESTSCAN,
-                  NODE_UNKNOWN, NODE_GPIO, NODE_CAN_1, NODE_I2C_1, NODE_SWDT_1,
-                  NODE_SPI_1, NODE_TTC_3, NODE_UART_1, NODE_TRACE),
-       PINMUX_MAP(10, NODE_QSPI, NODE_NAND, NODE_UNKNOWN, NODE_TESTSCAN,
-                  NODE_UNKNOWN, NODE_GPIO, NODE_CAN_0, NODE_I2C_0, NODE_SWDT_0,
-                  NODE_SPI_1, NODE_TTC_2, NODE_UART_0, NODE_TRACE),
-       PINMUX_MAP(11, NODE_QSPI, NODE_NAND, NODE_UNKNOWN, NODE_TESTSCAN,
-                  NODE_UNKNOWN, NODE_GPIO, NODE_CAN_0, NODE_I2C_0, NODE_SWDT_0,
-                  NODE_SPI_1, NODE_TTC_2, NODE_UART_0, NODE_TRACE),
-       PINMUX_MAP(12, NODE_QSPI, NODE_NAND, NODE_UNKNOWN, NODE_TESTSCAN,
-                  NODE_UNKNOWN, NODE_GPIO, NODE_CAN_1, NODE_I2C_1, NODE_PJTAG,
-                  NODE_SPI_0, NODE_TTC_1, NODE_UART_1, NODE_TRACE),
-       PINMUX_MAP(13, NODE_UNKNOWN, NODE_NAND, NODE_SD_0, NODE_TESTSCAN,
-                  NODE_UNKNOWN, NODE_GPIO, NODE_CAN_1, NODE_I2C_1, NODE_PJTAG,
-                  NODE_SPI_0, NODE_TTC_1, NODE_UART_1, NODE_TRACE),
-       PINMUX_MAP(14, NODE_UNKNOWN, NODE_NAND, NODE_SD_0, NODE_TESTSCAN,
-                  NODE_UNKNOWN, NODE_GPIO, NODE_CAN_0, NODE_I2C_0, NODE_PJTAG,
-                  NODE_SPI_0, NODE_TTC_0, NODE_UART_0, NODE_TRACE),
-       PINMUX_MAP(15, NODE_UNKNOWN, NODE_NAND, NODE_SD_0, NODE_TESTSCAN,
-                  NODE_UNKNOWN, NODE_GPIO, NODE_CAN_0, NODE_I2C_0, NODE_PJTAG,
-                  NODE_SPI_0, NODE_TTC_0, NODE_UART_0, NODE_TRACE),
-       PINMUX_MAP(16, NODE_UNKNOWN, NODE_NAND, NODE_SD_0, NODE_TESTSCAN,
-                  NODE_UNKNOWN, NODE_GPIO, NODE_CAN_1, NODE_I2C_1, NODE_SWDT_1,
-                  NODE_SPI_0, NODE_TTC_3, NODE_UART_1, NODE_TRACE),
-       PINMUX_MAP(17, NODE_UNKNOWN, NODE_NAND, NODE_SD_0, NODE_TESTSCAN,
-                  NODE_UNKNOWN, NODE_GPIO, NODE_CAN_1, NODE_I2C_1, NODE_SWDT_1,
-                  NODE_SPI_0, NODE_TTC_3, NODE_UART_1, NODE_TRACE),
-       PINMUX_MAP(18, NODE_UNKNOWN, NODE_NAND, NODE_SD_0, NODE_TESTSCAN,
-                  NODE_UNKNOWN, NODE_GPIO, NODE_CAN_0, NODE_I2C_0, NODE_SWDT_0,
-                  NODE_SPI_1, NODE_TTC_2, NODE_UART_0, NODE_UNKNOWN),
-       PINMUX_MAP(19, NODE_UNKNOWN, NODE_NAND, NODE_SD_0, NODE_TESTSCAN,
-                  NODE_CSU, NODE_GPIO, NODE_CAN_0, NODE_I2C_0, NODE_SWDT_0,
-                  NODE_SPI_1, NODE_TTC_2, NODE_UART_0, NODE_UNKNOWN),
-       PINMUX_MAP(20, NODE_UNKNOWN, NODE_NAND, NODE_SD_0, NODE_TESTSCAN,
-                  NODE_CSU, NODE_GPIO, NODE_CAN_1, NODE_I2C_1, NODE_SWDT_1,
-                  NODE_SPI_1, NODE_TTC_1, NODE_UART_1, NODE_UNKNOWN),
-       PINMUX_MAP(21, NODE_UNKNOWN, NODE_NAND, NODE_SD_0, NODE_TESTSCAN,
-                  NODE_CSU, NODE_GPIO, NODE_CAN_1, NODE_I2C_1, NODE_SWDT_1,
-                  NODE_SPI_1, NODE_TTC_1, NODE_UART_1, NODE_UNKNOWN),
-       PINMUX_MAP(22, NODE_UNKNOWN, NODE_NAND, NODE_SD_0, NODE_TESTSCAN,
-                  NODE_CSU, NODE_GPIO, NODE_CAN_0, NODE_I2C_0, NODE_SWDT_0,
-                  NODE_SPI_1, NODE_TTC_0, NODE_UART_0, NODE_UNKNOWN),
-       PINMUX_MAP(23, NODE_UNKNOWN, NODE_NAND, NODE_SD_0, NODE_TESTSCAN,
-                  NODE_CSU, NODE_GPIO, NODE_CAN_0, NODE_I2C_0, NODE_SWDT_0,
-                  NODE_SPI_1, NODE_TTC_0, NODE_UART_0, NODE_UNKNOWN),
-       PINMUX_MAP(24, NODE_UNKNOWN, NODE_NAND, NODE_SD_0, NODE_TESTSCAN,
-                  NODE_CSU, NODE_GPIO, NODE_CAN_1, NODE_I2C_1, NODE_SWDT_1,
-                  NODE_UNKNOWN, NODE_TTC_3, NODE_UART_1, NODE_UNKNOWN),
-       PINMUX_MAP(25, NODE_UNKNOWN, NODE_NAND, NODE_SD_0, NODE_TESTSCAN,
-                  NODE_CSU, NODE_GPIO, NODE_CAN_1, NODE_I2C_1, NODE_SWDT_1,
-                  NODE_UNKNOWN, NODE_TTC_3, NODE_UART_1, NODE_UNKNOWN),
-       PINMUX_MAP(26, NODE_ETH_0, NODE_NAND, NODE_PMU, NODE_TESTSCAN,
-                  NODE_CSU, NODE_GPIO, NODE_CAN_0, NODE_I2C_0, NODE_PJTAG,
-                  NODE_SPI_0, NODE_TTC_2, NODE_UART_0, NODE_TRACE),
-       PINMUX_MAP(27, NODE_ETH_0, NODE_NAND, NODE_PMU, NODE_TESTSCAN,
-                  NODE_DP, NODE_GPIO, NODE_CAN_0, NODE_I2C_0, NODE_PJTAG,
-                  NODE_SPI_0, NODE_TTC_2, NODE_UART_0, NODE_TRACE),
-       PINMUX_MAP(28, NODE_ETH_0, NODE_NAND, NODE_PMU, NODE_TESTSCAN,
-                  NODE_DP, NODE_GPIO, NODE_CAN_1, NODE_I2C_1, NODE_PJTAG,
-                  NODE_SPI_0, NODE_TTC_1, NODE_UART_1, NODE_TRACE),
-       PINMUX_MAP(29, NODE_ETH_0, NODE_PCIE, NODE_PMU, NODE_TESTSCAN,
-                  NODE_DP, NODE_GPIO, NODE_CAN_1, NODE_I2C_1, NODE_PJTAG,
-                  NODE_SPI_0, NODE_TTC_1, NODE_UART_1, NODE_TRACE),
-       PINMUX_MAP(30, NODE_ETH_0, NODE_PCIE, NODE_PMU, NODE_TESTSCAN,
-                  NODE_DP, NODE_GPIO, NODE_CAN_0, NODE_I2C_0, NODE_SWDT_0,
-                  NODE_SPI_0, NODE_TTC_0, NODE_UART_0, NODE_TRACE),
-       PINMUX_MAP(31, NODE_ETH_0, NODE_PCIE, NODE_PMU, NODE_TESTSCAN,
-                  NODE_CSU, NODE_GPIO, NODE_CAN_0, NODE_I2C_0, NODE_SWDT_0,
-                  NODE_SPI_0, NODE_TTC_0, NODE_UART_0, NODE_TRACE),
-       PINMUX_MAP(32, NODE_ETH_0, NODE_NAND, NODE_PMU, NODE_TESTSCAN,
-                  NODE_CSU, NODE_GPIO, NODE_CAN_1, NODE_I2C_1, NODE_SWDT_1,
-                  NODE_SPI_1, NODE_TTC_3, NODE_UART_1, NODE_TRACE),
-       PINMUX_MAP(33, NODE_ETH_0, NODE_PCIE, NODE_PMU, NODE_TESTSCAN,
-                  NODE_CSU, NODE_GPIO, NODE_CAN_1, NODE_I2C_1, NODE_SWDT_1,
-                  NODE_SPI_1, NODE_TTC_3, NODE_UART_1, NODE_TRACE),
-       PINMUX_MAP(34, NODE_ETH_0, NODE_PCIE, NODE_PMU, NODE_TESTSCAN,
-                  NODE_DP, NODE_GPIO, NODE_CAN_0, NODE_I2C_0, NODE_SWDT_0,
-                  NODE_SPI_1, NODE_TTC_2, NODE_UART_0, NODE_TRACE),
-       PINMUX_MAP(35, NODE_ETH_0, NODE_PCIE, NODE_PMU, NODE_TESTSCAN,
-                  NODE_DP, NODE_GPIO, NODE_CAN_0, NODE_I2C_0, NODE_SWDT_0,
-                  NODE_SPI_1, NODE_TTC_2, NODE_UART_0, NODE_TRACE),
-       PINMUX_MAP(36, NODE_ETH_0, NODE_PCIE, NODE_PMU, NODE_TESTSCAN,
-                  NODE_DP, NODE_GPIO, NODE_CAN_1, NODE_I2C_1, NODE_SWDT_1,
-                  NODE_SPI_1, NODE_TTC_1, NODE_UART_1, NODE_TRACE),
-       PINMUX_MAP(37, NODE_ETH_0, NODE_PCIE, NODE_PMU, NODE_TESTSCAN,
-                  NODE_DP, NODE_GPIO, NODE_CAN_1, NODE_I2C_1, NODE_SWDT_1,
-                  NODE_SPI_1, NODE_TTC_1, NODE_UART_1, NODE_TRACE),
-       PINMUX_MAP(38, NODE_ETH_1, NODE_UNKNOWN, NODE_SD_0, NODE_UNKNOWN,
-                  NODE_UNKNOWN, NODE_GPIO, NODE_CAN_0, NODE_I2C_0, NODE_PJTAG,
-                  NODE_SPI_0, NODE_TTC_0, NODE_UART_0, NODE_TRACE),
-       PINMUX_MAP(39, NODE_ETH_1, NODE_UNKNOWN, NODE_SD_0, NODE_SD_1,
-                  NODE_UNKNOWN, NODE_GPIO, NODE_CAN_0, NODE_I2C_0, NODE_PJTAG,
-                  NODE_SPI_0, NODE_TTC_0, NODE_UART_0, NODE_TRACE),
-       PINMUX_MAP(40, NODE_ETH_1, NODE_UNKNOWN, NODE_SD_0, NODE_SD_1,
-                  NODE_UNKNOWN, NODE_GPIO, NODE_CAN_1, NODE_I2C_1, NODE_PJTAG,
-                  NODE_SPI_0, NODE_TTC_3, NODE_UART_1, NODE_TRACE),
-       PINMUX_MAP(41, NODE_ETH_1, NODE_UNKNOWN, NODE_SD_0, NODE_SD_1,
-                  NODE_UNKNOWN, NODE_GPIO, NODE_CAN_1, NODE_I2C_1, NODE_PJTAG,
-                  NODE_SPI_0, NODE_TTC_3, NODE_UART_1, NODE_TRACE),
-       PINMUX_MAP(42, NODE_ETH_1, NODE_UNKNOWN, NODE_SD_0, NODE_SD_1,
-                  NODE_UNKNOWN, NODE_GPIO, NODE_CAN_0, NODE_I2C_0, NODE_SWDT_0,
-                  NODE_SPI_0, NODE_TTC_2, NODE_UART_0, NODE_TRACE),
-       PINMUX_MAP(43, NODE_ETH_1, NODE_UNKNOWN, NODE_SD_0, NODE_SD_1,
-                  NODE_UNKNOWN, NODE_GPIO, NODE_CAN_0, NODE_I2C_0, NODE_SWDT_0,
-                  NODE_SPI_0, NODE_TTC_2, NODE_UART_0, NODE_TRACE),
-       PINMUX_MAP(44, NODE_ETH_1, NODE_UNKNOWN, NODE_SD_0, NODE_SD_1,
-                  NODE_UNKNOWN, NODE_GPIO, NODE_CAN_1, NODE_I2C_1, NODE_SWDT_1,
-                  NODE_SPI_1, NODE_TTC_1, NODE_UART_1, NODE_UNKNOWN),
-       PINMUX_MAP(45, NODE_ETH_1, NODE_UNKNOWN, NODE_SD_0, NODE_SD_1,
-                  NODE_UNKNOWN, NODE_GPIO, NODE_CAN_1, NODE_I2C_1, NODE_SWDT_1,
-                  NODE_SPI_1, NODE_TTC_1, NODE_UART_1, NODE_UNKNOWN),
-       PINMUX_MAP(46, NODE_ETH_1, NODE_UNKNOWN, NODE_SD_0, NODE_SD_1,
-                  NODE_UNKNOWN, NODE_GPIO, NODE_CAN_0, NODE_I2C_0, NODE_SWDT_0,
-                  NODE_SPI_1, NODE_TTC_0, NODE_UART_0, NODE_UNKNOWN),
-       PINMUX_MAP(47, NODE_ETH_1, NODE_UNKNOWN, NODE_SD_0, NODE_SD_1,
-                  NODE_UNKNOWN, NODE_GPIO, NODE_CAN_0, NODE_I2C_0, NODE_SWDT_0,
-                  NODE_SPI_1, NODE_TTC_0, NODE_UART_0, NODE_UNKNOWN),
-       PINMUX_MAP(48, NODE_ETH_1, NODE_UNKNOWN, NODE_SD_0, NODE_SD_1,
-                  NODE_UNKNOWN, NODE_GPIO, NODE_CAN_1, NODE_I2C_1, NODE_SWDT_1,
-                  NODE_SPI_1, NODE_TTC_3, NODE_UART_1, NODE_UNKNOWN),
-       PINMUX_MAP(49, NODE_ETH_1, NODE_UNKNOWN, NODE_SD_0, NODE_SD_1,
-                  NODE_UNKNOWN, NODE_GPIO, NODE_CAN_1, NODE_I2C_1, NODE_SWDT_1,
-                  NODE_SPI_1, NODE_TTC_3, NODE_UART_1, NODE_UNKNOWN),
-       PINMUX_MAP(50, NODE_GEM_TSU, NODE_UNKNOWN, NODE_SD_0, NODE_SD_1,
-                  NODE_UNKNOWN, NODE_GPIO, NODE_CAN_0, NODE_I2C_0, NODE_SWDT_0,
-                  NODE_ETH_1, NODE_TTC_2, NODE_UART_0, NODE_UNKNOWN),
-       PINMUX_MAP(51, NODE_GEM_TSU, NODE_UNKNOWN, NODE_UNKNOWN, NODE_SD_1,
-                  NODE_UNKNOWN, NODE_GPIO, NODE_CAN_0, NODE_I2C_0, NODE_SWDT_0,
-                  NODE_ETH_1, NODE_TTC_2, NODE_UART_0, NODE_UNKNOWN),
-       PINMUX_MAP(52, NODE_ETH_2, NODE_USB_0, NODE_UNKNOWN, NODE_UNKNOWN,
-                  NODE_UNKNOWN, NODE_GPIO, NODE_CAN_1, NODE_I2C_1, NODE_PJTAG,
-                  NODE_SPI_0, NODE_TTC_1, NODE_UART_1, NODE_TRACE),
-       PINMUX_MAP(53, NODE_ETH_2, NODE_USB_0, NODE_UNKNOWN, NODE_UNKNOWN,
-                  NODE_UNKNOWN, NODE_GPIO, NODE_CAN_1, NODE_I2C_1, NODE_PJTAG,
-                  NODE_SPI_0, NODE_TTC_1, NODE_UART_1, NODE_TRACE),
-       PINMUX_MAP(54, NODE_ETH_2, NODE_USB_0, NODE_UNKNOWN, NODE_UNKNOWN,
-                  NODE_UNKNOWN, NODE_GPIO, NODE_CAN_0, NODE_I2C_0, NODE_PJTAG,
-                  NODE_SPI_0, NODE_TTC_0, NODE_UART_0, NODE_TRACE),
-       PINMUX_MAP(55, NODE_ETH_2, NODE_USB_0, NODE_UNKNOWN, NODE_UNKNOWN,
-                  NODE_UNKNOWN, NODE_GPIO, NODE_CAN_0, NODE_I2C_0, NODE_PJTAG,
-                  NODE_SPI_0, NODE_TTC_0, NODE_UART_0, NODE_TRACE),
-       PINMUX_MAP(56, NODE_ETH_2, NODE_USB_0, NODE_UNKNOWN, NODE_UNKNOWN,
-                  NODE_UNKNOWN, NODE_GPIO, NODE_CAN_1, NODE_I2C_1, NODE_SWDT_1,
-                  NODE_SPI_0, NODE_TTC_3, NODE_UART_1, NODE_TRACE),
-       PINMUX_MAP(57, NODE_ETH_2, NODE_USB_0, NODE_UNKNOWN, NODE_UNKNOWN,
-                  NODE_UNKNOWN, NODE_GPIO, NODE_CAN_1, NODE_I2C_1, NODE_SWDT_1,
-                  NODE_SPI_0, NODE_TTC_3, NODE_UART_1, NODE_TRACE),
-       PINMUX_MAP(58, NODE_ETH_2, NODE_USB_0, NODE_UNKNOWN, NODE_UNKNOWN,
-                  NODE_UNKNOWN, NODE_GPIO, NODE_CAN_0, NODE_I2C_0, NODE_PJTAG,
-                  NODE_SPI_1, NODE_TTC_2, NODE_UART_0, NODE_TRACE),
-       PINMUX_MAP(59, NODE_ETH_2, NODE_USB_0, NODE_UNKNOWN, NODE_UNKNOWN,
-                  NODE_UNKNOWN, NODE_GPIO, NODE_CAN_0, NODE_I2C_0, NODE_PJTAG,
-                  NODE_SPI_1, NODE_TTC_2, NODE_UART_0, NODE_TRACE),
-       PINMUX_MAP(60, NODE_ETH_2, NODE_USB_0, NODE_UNKNOWN, NODE_UNKNOWN,
-                  NODE_UNKNOWN, NODE_GPIO, NODE_CAN_1, NODE_I2C_1, NODE_PJTAG,
-                  NODE_SPI_1, NODE_TTC_1, NODE_UART_1, NODE_TRACE),
-       PINMUX_MAP(61, NODE_ETH_2, NODE_USB_0, NODE_UNKNOWN, NODE_UNKNOWN,
-                  NODE_UNKNOWN, NODE_GPIO, NODE_CAN_1, NODE_I2C_1, NODE_PJTAG,
-                  NODE_SPI_1, NODE_TTC_1, NODE_UART_1, NODE_TRACE),
-       PINMUX_MAP(62, NODE_ETH_2, NODE_USB_0, NODE_UNKNOWN, NODE_UNKNOWN,
-                  NODE_UNKNOWN, NODE_GPIO, NODE_CAN_0, NODE_I2C_0, NODE_SWDT_0,
-                  NODE_SPI_1, NODE_TTC_0, NODE_UART_0, NODE_TRACE),
-       PINMUX_MAP(63, NODE_ETH_2, NODE_USB_0, NODE_UNKNOWN, NODE_UNKNOWN,
-                  NODE_UNKNOWN, NODE_GPIO, NODE_CAN_0, NODE_I2C_0, NODE_SWDT_0,
-                  NODE_SPI_1, NODE_TTC_0, NODE_UART_0, NODE_TRACE),
-       PINMUX_MAP(64, NODE_ETH_3, NODE_USB_1, NODE_SD_0, NODE_UNKNOWN,
-                  NODE_UNKNOWN, NODE_GPIO, NODE_CAN_1, NODE_I2C_1, NODE_SWDT_1,
-                  NODE_SPI_0, NODE_TTC_3, NODE_UART_1, NODE_TRACE),
-       PINMUX_MAP(65, NODE_ETH_3, NODE_USB_1, NODE_SD_0, NODE_UNKNOWN,
-                  NODE_UNKNOWN, NODE_GPIO, NODE_CAN_1, NODE_I2C_1, NODE_SWDT_1,
-                  NODE_SPI_0, NODE_TTC_3, NODE_UART_1, NODE_TRACE),
-       PINMUX_MAP(66, NODE_ETH_3, NODE_USB_1, NODE_SD_0, NODE_UNKNOWN,
-                  NODE_UNKNOWN, NODE_GPIO, NODE_CAN_0, NODE_I2C_0, NODE_SWDT_0,
-                  NODE_SPI_0, NODE_TTC_2, NODE_UART_0, NODE_TRACE),
-       PINMUX_MAP(67, NODE_ETH_3, NODE_USB_1, NODE_SD_0, NODE_UNKNOWN,
-                  NODE_UNKNOWN, NODE_GPIO, NODE_CAN_0, NODE_I2C_0, NODE_SWDT_0,
-                  NODE_SPI_0, NODE_TTC_2, NODE_UART_0, NODE_TRACE),
-       PINMUX_MAP(68, NODE_ETH_3, NODE_USB_1, NODE_SD_0, NODE_UNKNOWN,
-                  NODE_UNKNOWN, NODE_GPIO, NODE_CAN_1, NODE_I2C_1, NODE_SWDT_1,
-                  NODE_SPI_0, NODE_TTC_1, NODE_UART_1, NODE_TRACE),
-       PINMUX_MAP(69, NODE_ETH_3, NODE_USB_1, NODE_SD_0, NODE_SD_1,
-                  NODE_UNKNOWN, NODE_GPIO, NODE_CAN_1, NODE_I2C_1, NODE_SWDT_1,
-                  NODE_SPI_0, NODE_TTC_1, NODE_UART_1, NODE_TRACE),
-       PINMUX_MAP(70, NODE_ETH_3, NODE_USB_1, NODE_SD_0, NODE_SD_1,
-                  NODE_UNKNOWN, NODE_GPIO, NODE_CAN_0, NODE_I2C_0, NODE_SWDT_0,
-                  NODE_SPI_1, NODE_TTC_0, NODE_UART_0, NODE_UNKNOWN),
-       PINMUX_MAP(71, NODE_ETH_3, NODE_USB_1, NODE_SD_0, NODE_SD_1,
-                  NODE_UNKNOWN, NODE_GPIO, NODE_CAN_0, NODE_I2C_0, NODE_SWDT_0,
-                  NODE_SPI_1, NODE_TTC_0, NODE_UART_0, NODE_UNKNOWN),
-       PINMUX_MAP(72, NODE_ETH_3, NODE_USB_1, NODE_SD_0, NODE_SD_1,
-                  NODE_UNKNOWN, NODE_GPIO, NODE_CAN_1, NODE_I2C_1, NODE_SWDT_1,
-                  NODE_SPI_1, NODE_UNKNOWN, NODE_UART_1, NODE_UNKNOWN),
-       PINMUX_MAP(73, NODE_ETH_3, NODE_USB_1, NODE_SD_0, NODE_SD_1,
-                  NODE_UNKNOWN, NODE_GPIO, NODE_CAN_1, NODE_I2C_1, NODE_SWDT_1,
-                  NODE_SPI_1, NODE_UNKNOWN, NODE_UART_1, NODE_UNKNOWN),
-       PINMUX_MAP(74, NODE_ETH_3, NODE_USB_1, NODE_SD_0, NODE_SD_1,
-                  NODE_UNKNOWN, NODE_GPIO, NODE_CAN_0, NODE_I2C_0, NODE_SWDT_0,
-                  NODE_SPI_1, NODE_UNKNOWN, NODE_UART_0, NODE_UNKNOWN),
-       PINMUX_MAP(75, NODE_ETH_3, NODE_USB_1, NODE_SD_0, NODE_SD_1,
-                  NODE_UNKNOWN, NODE_GPIO, NODE_CAN_0, NODE_I2C_0, NODE_SWDT_0,
-                  NODE_SPI_1, NODE_UNKNOWN, NODE_UART_0, NODE_UNKNOWN),
-       PINMUX_MAP(76, NODE_UNKNOWN, NODE_UNKNOWN, NODE_SD_0, NODE_SD_1,
-                  NODE_UNKNOWN, NODE_GPIO, NODE_CAN_1, NODE_I2C_1, NODE_ETH_0,
-                  NODE_ETH_1, NODE_ETH_2, NODE_ETH_3, NODE_UNKNOWN),
-       PINMUX_MAP(77, NODE_UNKNOWN, NODE_UNKNOWN, NODE_UNKNOWN, NODE_SD_1,
-                  NODE_UNKNOWN, NODE_GPIO, NODE_CAN_1, NODE_I2C_1, NODE_ETH_0,
-                  NODE_ETH_1, NODE_ETH_2, NODE_ETH_3, NODE_UNKNOWN),
+struct pinctrl_function {
+       char name[FUNCTION_NAME_LEN];
+       uint16_t (*groups)[];
+       uint8_t regval;
+};
+
+/* Max groups for one pin */
+#define MAX_PIN_GROUPS 13
+
+struct zynqmp_pin_group {
+       uint16_t groups[MAX_PIN_GROUPS];
 };
 
+static struct pinctrl_function pinctrl_functions[MAX_FUNCTION] =  {
+       [PINCTRL_FUNC_CAN0] = {
+               .name = "can0",
+               .regval = 0x20,
+               .groups = &((uint16_t []) {
+                       PINCTRL_GRP_CAN0_0,
+                       PINCTRL_GRP_CAN0_1,
+                       PINCTRL_GRP_CAN0_2,
+                       PINCTRL_GRP_CAN0_3,
+                       PINCTRL_GRP_CAN0_4,
+                       PINCTRL_GRP_CAN0_5,
+                       PINCTRL_GRP_CAN0_6,
+                       PINCTRL_GRP_CAN0_7,
+                       PINCTRL_GRP_CAN0_8,
+                       PINCTRL_GRP_CAN0_9,
+                       PINCTRL_GRP_CAN0_10,
+                       PINCTRL_GRP_CAN0_11,
+                       PINCTRL_GRP_CAN0_12,
+                       PINCTRL_GRP_CAN0_13,
+                       PINCTRL_GRP_CAN0_14,
+                       PINCTRL_GRP_CAN0_15,
+                       PINCTRL_GRP_CAN0_16,
+                       PINCTRL_GRP_CAN0_17,
+                       PINCTRL_GRP_CAN0_18,
+                       END_OF_GROUPS,
+               }),
+       },
+       [PINCTRL_FUNC_CAN1] = {
+               .name = "can1",
+               .regval = 0x20,
+               .groups = &((uint16_t []) {
+                       PINCTRL_GRP_CAN1_0,
+                       PINCTRL_GRP_CAN1_1,
+                       PINCTRL_GRP_CAN1_2,
+                       PINCTRL_GRP_CAN1_3,
+                       PINCTRL_GRP_CAN1_4,
+                       PINCTRL_GRP_CAN1_5,
+                       PINCTRL_GRP_CAN1_6,
+                       PINCTRL_GRP_CAN1_7,
+                       PINCTRL_GRP_CAN1_8,
+                       PINCTRL_GRP_CAN1_9,
+                       PINCTRL_GRP_CAN1_10,
+                       PINCTRL_GRP_CAN1_11,
+                       PINCTRL_GRP_CAN1_12,
+                       PINCTRL_GRP_CAN1_13,
+                       PINCTRL_GRP_CAN1_14,
+                       PINCTRL_GRP_CAN1_15,
+                       PINCTRL_GRP_CAN1_16,
+                       PINCTRL_GRP_CAN1_17,
+                       PINCTRL_GRP_CAN1_18,
+                       PINCTRL_GRP_CAN1_19,
+                       END_OF_GROUPS,
+               }),
+       },
+       [PINCTRL_FUNC_ETHERNET0] = {
+               .name = "ethernet0",
+               .regval = 0x02,
+               .groups = &((uint16_t []) {
+                       PINCTRL_GRP_ETHERNET0_0,
+                       END_OF_GROUPS,
+               }),
+       },
+       [PINCTRL_FUNC_ETHERNET1] = {
+               .name = "ethernet1",
+               .regval = 0x02,
+               .groups = &((uint16_t []) {
+                       PINCTRL_GRP_ETHERNET1_0,
+                       END_OF_GROUPS,
+               }),
+       },
+       [PINCTRL_FUNC_ETHERNET2] = {
+               .name = "ethernet2",
+               .regval = 0x02,
+               .groups = &((uint16_t []) {
+                       PINCTRL_GRP_ETHERNET2_0,
+                       END_OF_GROUPS,
+               }),
+       },
+       [PINCTRL_FUNC_ETHERNET3] = {
+               .name = "ethernet3",
+               .regval = 0x02,
+               .groups = &((uint16_t []) {
+                       PINCTRL_GRP_ETHERNET3_0,
+                       END_OF_GROUPS,
+               }),
+       },
+       [PINCTRL_FUNC_GEMTSU0] = {
+               .name = "gemtsu0",
+               .regval = 0x02,
+               .groups = &((uint16_t []) {
+                       PINCTRL_GRP_GEMTSU0_0,
+                       PINCTRL_GRP_GEMTSU0_1,
+                       PINCTRL_GRP_GEMTSU0_2,
+                       END_OF_GROUPS,
+               }),
+       },
+       [PINCTRL_FUNC_GPIO0] = {
+               .name = "gpio0",
+               .regval = 0x00,
+               .groups = &((uint16_t []) {
+                       PINCTRL_GRP_GPIO0_0,
+                       PINCTRL_GRP_GPIO0_1,
+                       PINCTRL_GRP_GPIO0_2,
+                       PINCTRL_GRP_GPIO0_3,
+                       PINCTRL_GRP_GPIO0_4,
+                       PINCTRL_GRP_GPIO0_5,
+                       PINCTRL_GRP_GPIO0_6,
+                       PINCTRL_GRP_GPIO0_7,
+                       PINCTRL_GRP_GPIO0_8,
+                       PINCTRL_GRP_GPIO0_9,
+                       PINCTRL_GRP_GPIO0_10,
+                       PINCTRL_GRP_GPIO0_11,
+                       PINCTRL_GRP_GPIO0_12,
+                       PINCTRL_GRP_GPIO0_13,
+                       PINCTRL_GRP_GPIO0_14,
+                       PINCTRL_GRP_GPIO0_15,
+                       PINCTRL_GRP_GPIO0_16,
+                       PINCTRL_GRP_GPIO0_17,
+                       PINCTRL_GRP_GPIO0_18,
+                       PINCTRL_GRP_GPIO0_19,
+                       PINCTRL_GRP_GPIO0_20,
+                       PINCTRL_GRP_GPIO0_21,
+                       PINCTRL_GRP_GPIO0_22,
+                       PINCTRL_GRP_GPIO0_23,
+                       PINCTRL_GRP_GPIO0_24,
+                       PINCTRL_GRP_GPIO0_25,
+                       PINCTRL_GRP_GPIO0_26,
+                       PINCTRL_GRP_GPIO0_27,
+                       PINCTRL_GRP_GPIO0_28,
+                       PINCTRL_GRP_GPIO0_29,
+                       PINCTRL_GRP_GPIO0_30,
+                       PINCTRL_GRP_GPIO0_31,
+                       PINCTRL_GRP_GPIO0_32,
+                       PINCTRL_GRP_GPIO0_33,
+                       PINCTRL_GRP_GPIO0_34,
+                       PINCTRL_GRP_GPIO0_35,
+                       PINCTRL_GRP_GPIO0_36,
+                       PINCTRL_GRP_GPIO0_37,
+                       PINCTRL_GRP_GPIO0_38,
+                       PINCTRL_GRP_GPIO0_39,
+                       PINCTRL_GRP_GPIO0_40,
+                       PINCTRL_GRP_GPIO0_41,
+                       PINCTRL_GRP_GPIO0_42,
+                       PINCTRL_GRP_GPIO0_43,
+                       PINCTRL_GRP_GPIO0_44,
+                       PINCTRL_GRP_GPIO0_45,
+                       PINCTRL_GRP_GPIO0_46,
+                       PINCTRL_GRP_GPIO0_47,
+                       PINCTRL_GRP_GPIO0_48,
+                       PINCTRL_GRP_GPIO0_49,
+                       PINCTRL_GRP_GPIO0_50,
+                       PINCTRL_GRP_GPIO0_51,
+                       PINCTRL_GRP_GPIO0_52,
+                       PINCTRL_GRP_GPIO0_53,
+                       PINCTRL_GRP_GPIO0_54,
+                       PINCTRL_GRP_GPIO0_55,
+                       PINCTRL_GRP_GPIO0_56,
+                       PINCTRL_GRP_GPIO0_57,
+                       PINCTRL_GRP_GPIO0_58,
+                       PINCTRL_GRP_GPIO0_59,
+                       PINCTRL_GRP_GPIO0_60,
+                       PINCTRL_GRP_GPIO0_61,
+                       PINCTRL_GRP_GPIO0_62,
+                       PINCTRL_GRP_GPIO0_63,
+                       PINCTRL_GRP_GPIO0_64,
+                       PINCTRL_GRP_GPIO0_65,
+                       PINCTRL_GRP_GPIO0_66,
+                       PINCTRL_GRP_GPIO0_67,
+                       PINCTRL_GRP_GPIO0_68,
+                       PINCTRL_GRP_GPIO0_69,
+                       PINCTRL_GRP_GPIO0_70,
+                       PINCTRL_GRP_GPIO0_71,
+                       PINCTRL_GRP_GPIO0_72,
+                       PINCTRL_GRP_GPIO0_73,
+                       PINCTRL_GRP_GPIO0_74,
+                       PINCTRL_GRP_GPIO0_75,
+                       PINCTRL_GRP_GPIO0_76,
+                       PINCTRL_GRP_GPIO0_77,
+                       END_OF_GROUPS,
+               }),
+       },
+       [PINCTRL_FUNC_I2C0] = {
+               .name = "i2c0",
+               .regval = 0x40,
+               .groups = &((uint16_t []) {
+                       PINCTRL_GRP_I2C0_0,
+                       PINCTRL_GRP_I2C0_1,
+                       PINCTRL_GRP_I2C0_2,
+                       PINCTRL_GRP_I2C0_3,
+                       PINCTRL_GRP_I2C0_4,
+                       PINCTRL_GRP_I2C0_5,
+                       PINCTRL_GRP_I2C0_6,
+                       PINCTRL_GRP_I2C0_7,
+                       PINCTRL_GRP_I2C0_8,
+                       PINCTRL_GRP_I2C0_9,
+                       PINCTRL_GRP_I2C0_10,
+                       PINCTRL_GRP_I2C0_11,
+                       PINCTRL_GRP_I2C0_12,
+                       PINCTRL_GRP_I2C0_13,
+                       PINCTRL_GRP_I2C0_14,
+                       PINCTRL_GRP_I2C0_15,
+                       PINCTRL_GRP_I2C0_16,
+                       PINCTRL_GRP_I2C0_17,
+                       PINCTRL_GRP_I2C0_18,
+                       END_OF_GROUPS,
+               }),
+       },
+       [PINCTRL_FUNC_I2C1] = {
+               .name = "i2c1",
+               .regval = 0x40,
+               .groups = &((uint16_t []) {
+                       PINCTRL_GRP_I2C1_0,
+                       PINCTRL_GRP_I2C1_1,
+                       PINCTRL_GRP_I2C1_2,
+                       PINCTRL_GRP_I2C1_3,
+                       PINCTRL_GRP_I2C1_4,
+                       PINCTRL_GRP_I2C1_5,
+                       PINCTRL_GRP_I2C1_6,
+                       PINCTRL_GRP_I2C1_7,
+                       PINCTRL_GRP_I2C1_8,
+                       PINCTRL_GRP_I2C1_9,
+                       PINCTRL_GRP_I2C1_10,
+                       PINCTRL_GRP_I2C1_11,
+                       PINCTRL_GRP_I2C1_12,
+                       PINCTRL_GRP_I2C1_13,
+                       PINCTRL_GRP_I2C1_14,
+                       PINCTRL_GRP_I2C1_15,
+                       PINCTRL_GRP_I2C1_16,
+                       PINCTRL_GRP_I2C1_17,
+                       PINCTRL_GRP_I2C1_18,
+                       PINCTRL_GRP_I2C1_19,
+                       END_OF_GROUPS,
+               }),
+       },
+       [PINCTRL_FUNC_MDIO0] = {
+               .name = "mdio0",
+               .regval = 0x60,
+               .groups = &((uint16_t []) {
+                       PINCTRL_GRP_MDIO0_0,
+                       END_OF_GROUPS,
+               }),
+       },
+       [PINCTRL_FUNC_MDIO1] = {
+               .name = "mdio1",
+               .regval = 0x80,
+               .groups = &((uint16_t []) {
+                       PINCTRL_GRP_MDIO1_0,
+                       PINCTRL_GRP_MDIO1_1,
+                       END_OF_GROUPS,
+               }),
+       },
+       [PINCTRL_FUNC_MDIO2] = {
+               .name = "mdio2",
+               .regval = 0xa0,
+               .groups = &((uint16_t []) {
+                       PINCTRL_GRP_MDIO2_0,
+                       END_OF_GROUPS,
+               }),
+       },
+       [PINCTRL_FUNC_MDIO3] = {
+               .name = "mdio3",
+               .regval = 0xc0,
+               .groups = &((uint16_t []) {
+                       PINCTRL_GRP_MDIO3_0,
+                       END_OF_GROUPS,
+               }),
+       },
+       [PINCTRL_FUNC_QSPI0] = {
+               .name = "qspi0",
+               .regval = 0x02,
+               .groups = &((uint16_t []) {
+                       PINCTRL_GRP_QSPI0_0,
+                       END_OF_GROUPS,
+               }),
+       },
+       [PINCTRL_FUNC_QSPI_FBCLK] = {
+               .name = "qspi_fbclk",
+               .regval = 0x02,
+               .groups = &((uint16_t []) {
+                       PINCTRL_GRP_QSPI_FBCLK,
+                       END_OF_GROUPS,
+               }),
+       },
+       [PINCTRL_FUNC_QSPI_SS] = {
+               .name = "qspi_ss",
+               .regval = 0x02,
+               .groups = &((uint16_t []) {
+                       PINCTRL_GRP_QSPI_SS,
+                       END_OF_GROUPS,
+               }),
+       },
+       [PINCTRL_FUNC_SPI0] = {
+               .name = "spi0",
+               .regval = 0x80,
+               .groups = &((uint16_t []) {
+                       PINCTRL_GRP_SPI0_0,
+                       PINCTRL_GRP_SPI0_1,
+                       PINCTRL_GRP_SPI0_2,
+                       PINCTRL_GRP_SPI0_3,
+                       PINCTRL_GRP_SPI0_4,
+                       PINCTRL_GRP_SPI0_5,
+                       END_OF_GROUPS,
+               }),
+       },
+       [PINCTRL_FUNC_SPI1] = {
+               .name = "spi1",
+               .regval = 0x80,
+               .groups = &((uint16_t []) {
+                       PINCTRL_GRP_SPI1_0,
+                       PINCTRL_GRP_SPI1_1,
+                       PINCTRL_GRP_SPI1_2,
+                       PINCTRL_GRP_SPI1_3,
+                       PINCTRL_GRP_SPI1_4,
+                       PINCTRL_GRP_SPI1_5,
+                       END_OF_GROUPS,
+               }),
+       },
+       [PINCTRL_FUNC_SPI0_SS] = {
+               .name = "spi0_ss",
+               .regval = 0x80,
+               .groups = &((uint16_t []) {
+                       PINCTRL_GRP_SPI0_0_SS0,
+                       PINCTRL_GRP_SPI0_0_SS1,
+                       PINCTRL_GRP_SPI0_0_SS2,
+                       PINCTRL_GRP_SPI0_1_SS0,
+                       PINCTRL_GRP_SPI0_1_SS1,
+                       PINCTRL_GRP_SPI0_1_SS2,
+                       PINCTRL_GRP_SPI0_2_SS0,
+                       PINCTRL_GRP_SPI0_2_SS1,
+                       PINCTRL_GRP_SPI0_2_SS2,
+                       PINCTRL_GRP_SPI0_3_SS0,
+                       PINCTRL_GRP_SPI0_3_SS1,
+                       PINCTRL_GRP_SPI0_3_SS2,
+                       PINCTRL_GRP_SPI0_4_SS0,
+                       PINCTRL_GRP_SPI0_4_SS1,
+                       PINCTRL_GRP_SPI0_4_SS2,
+                       PINCTRL_GRP_SPI0_5_SS0,
+                       PINCTRL_GRP_SPI0_5_SS1,
+                       PINCTRL_GRP_SPI0_5_SS2,
+                       END_OF_GROUPS,
+               }),
+       },
+       [PINCTRL_FUNC_SPI1_SS] = {
+               .name = "spi1_ss",
+               .regval = 0x80,
+               .groups = &((uint16_t []) {
+                       PINCTRL_GRP_SPI1_0_SS0,
+                       PINCTRL_GRP_SPI1_0_SS1,
+                       PINCTRL_GRP_SPI1_0_SS2,
+                       PINCTRL_GRP_SPI1_1_SS0,
+                       PINCTRL_GRP_SPI1_1_SS1,
+                       PINCTRL_GRP_SPI1_1_SS2,
+                       PINCTRL_GRP_SPI1_2_SS0,
+                       PINCTRL_GRP_SPI1_2_SS1,
+                       PINCTRL_GRP_SPI1_2_SS2,
+                       PINCTRL_GRP_SPI1_3_SS0,
+                       PINCTRL_GRP_SPI1_3_SS1,
+                       PINCTRL_GRP_SPI1_3_SS2,
+                       PINCTRL_GRP_SPI1_4_SS0,
+                       PINCTRL_GRP_SPI1_4_SS1,
+                       PINCTRL_GRP_SPI1_4_SS2,
+                       PINCTRL_GRP_SPI1_5_SS0,
+                       PINCTRL_GRP_SPI1_5_SS1,
+                       PINCTRL_GRP_SPI1_5_SS2,
+                       END_OF_GROUPS,
+               }),
+       },
+       [PINCTRL_FUNC_SDIO0] = {
+               .name = "sdio0",
+               .regval = 0x08,
+               .groups = &((uint16_t []) {
+                       PINCTRL_GRP_SDIO0_0,
+                       PINCTRL_GRP_SDIO0_1,
+                       PINCTRL_GRP_SDIO0_2,
+                       PINCTRL_GRP_SDIO0_4BIT_0_0,
+                       PINCTRL_GRP_SDIO0_4BIT_0_1,
+                       PINCTRL_GRP_SDIO0_4BIT_1_0,
+                       PINCTRL_GRP_SDIO0_4BIT_1_1,
+                       PINCTRL_GRP_SDIO0_4BIT_2_0,
+                       PINCTRL_GRP_SDIO0_4BIT_2_1,
+                       PINCTRL_GRP_SDIO0_1BIT_0_0,
+                       PINCTRL_GRP_SDIO0_1BIT_0_1,
+                       PINCTRL_GRP_SDIO0_1BIT_0_2,
+                       PINCTRL_GRP_SDIO0_1BIT_0_3,
+                       PINCTRL_GRP_SDIO0_1BIT_0_4,
+                       PINCTRL_GRP_SDIO0_1BIT_0_5,
+                       PINCTRL_GRP_SDIO0_1BIT_0_6,
+                       PINCTRL_GRP_SDIO0_1BIT_0_7,
+                       PINCTRL_GRP_SDIO0_1BIT_1_0,
+                       PINCTRL_GRP_SDIO0_1BIT_1_1,
+                       PINCTRL_GRP_SDIO0_1BIT_1_2,
+                       PINCTRL_GRP_SDIO0_1BIT_1_3,
+                       PINCTRL_GRP_SDIO0_1BIT_1_4,
+                       PINCTRL_GRP_SDIO0_1BIT_1_5,
+                       PINCTRL_GRP_SDIO0_1BIT_1_6,
+                       PINCTRL_GRP_SDIO0_1BIT_1_7,
+                       PINCTRL_GRP_SDIO0_1BIT_2_0,
+                       PINCTRL_GRP_SDIO0_1BIT_2_1,
+                       PINCTRL_GRP_SDIO0_1BIT_2_2,
+                       PINCTRL_GRP_SDIO0_1BIT_2_3,
+                       PINCTRL_GRP_SDIO0_1BIT_2_4,
+                       PINCTRL_GRP_SDIO0_1BIT_2_5,
+                       PINCTRL_GRP_SDIO0_1BIT_2_6,
+                       PINCTRL_GRP_SDIO0_1BIT_2_7,
+                       END_OF_GROUPS,
+               }),
+       },
+       [PINCTRL_FUNC_SDIO0_PC] = {
+               .name = "sdio0_pc",
+               .regval = 0x08,
+               .groups = &((uint16_t []) {
+                       PINCTRL_GRP_SDIO0_0_PC,
+                       PINCTRL_GRP_SDIO0_1_PC,
+                       PINCTRL_GRP_SDIO0_2_PC,
+                       END_OF_GROUPS,
+               }),
+       },
+       [PINCTRL_FUNC_SDIO0_CD] = {
+               .name = "sdio0_cd",
+               .regval = 0x08,
+               .groups = &((uint16_t []) {
+                       PINCTRL_GRP_SDIO0_0_CD,
+                       PINCTRL_GRP_SDIO0_1_CD,
+                       PINCTRL_GRP_SDIO0_2_CD,
+                       END_OF_GROUPS,
+               }),
+       },
+       [PINCTRL_FUNC_SDIO0_WP] = {
+               .name = "sdio0_wp",
+               .regval = 0x08,
+               .groups = &((uint16_t []) {
+                       PINCTRL_GRP_SDIO0_0_WP,
+                       PINCTRL_GRP_SDIO0_1_WP,
+                       PINCTRL_GRP_SDIO0_2_WP,
+                       END_OF_GROUPS,
+               }),
+       },
+       [PINCTRL_FUNC_SDIO1] = {
+               .name = "sdio1",
+               .regval = 0x10,
+               .groups = &((uint16_t []) {
+                       PINCTRL_GRP_SDIO1_0,
+                       PINCTRL_GRP_SDIO1_4BIT_0_0,
+                       PINCTRL_GRP_SDIO1_4BIT_0_1,
+                       PINCTRL_GRP_SDIO1_4BIT_1_0,
+                       PINCTRL_GRP_SDIO1_1BIT_0_0,
+                       PINCTRL_GRP_SDIO1_1BIT_0_1,
+                       PINCTRL_GRP_SDIO1_1BIT_0_2,
+                       PINCTRL_GRP_SDIO1_1BIT_0_3,
+                       PINCTRL_GRP_SDIO1_1BIT_0_4,
+                       PINCTRL_GRP_SDIO1_1BIT_0_5,
+                       PINCTRL_GRP_SDIO1_1BIT_0_6,
+                       PINCTRL_GRP_SDIO1_1BIT_0_7,
+                       PINCTRL_GRP_SDIO1_1BIT_1_0,
+                       PINCTRL_GRP_SDIO1_1BIT_1_1,
+                       PINCTRL_GRP_SDIO1_1BIT_1_2,
+                       PINCTRL_GRP_SDIO1_1BIT_1_3,
+                       END_OF_GROUPS,
+               }),
+       },
+       [PINCTRL_FUNC_SDIO1_PC] = {
+               .name = "sdio1_pc",
+               .regval = 0x10,
+               .groups = &((uint16_t []) {
+                       PINCTRL_GRP_SDIO1_0_PC,
+                       PINCTRL_GRP_SDIO1_1_PC,
+                       END_OF_GROUPS,
+               }),
+       },
+       [PINCTRL_FUNC_SDIO1_CD] = {
+               .name = "sdio1_cd",
+               .regval = 0x10,
+               .groups = &((uint16_t []) {
+                       PINCTRL_GRP_SDIO1_0_CD,
+                       PINCTRL_GRP_SDIO1_1_CD,
+                       END_OF_GROUPS,
+               }),
+       },
+       [PINCTRL_FUNC_SDIO1_WP] = {
+               .name = "sdio1_wp",
+               .regval = 0x10,
+               .groups = &((uint16_t []) {
+                       PINCTRL_GRP_SDIO1_0_WP,
+                       PINCTRL_GRP_SDIO1_1_WP,
+                       END_OF_GROUPS,
+               }),
+       },
+       [PINCTRL_FUNC_NAND0] = {
+               .name = "nand0",
+               .regval = 0x04,
+               .groups = &((uint16_t []) {
+                       PINCTRL_GRP_NAND0_0,
+                       END_OF_GROUPS,
+               }),
+       },
+       [PINCTRL_FUNC_NAND0_CE] = {
+               .name = "nand0_ce",
+               .regval = 0x04,
+               .groups = &((uint16_t []) {
+                       PINCTRL_GRP_NAND0_0_CE,
+                       PINCTRL_GRP_NAND0_1_CE,
+                       END_OF_GROUPS,
+               }),
+       },
+       [PINCTRL_FUNC_NAND0_RB] = {
+               .name = "nand0_rb",
+               .regval = 0x04,
+               .groups = &((uint16_t []) {
+                       PINCTRL_GRP_NAND0_0_RB,
+                       PINCTRL_GRP_NAND0_1_RB,
+                       END_OF_GROUPS,
+               }),
+       },
+       [PINCTRL_FUNC_NAND0_DQS] = {
+               .name = "nand0_dqs",
+               .regval = 0x04,
+               .groups = &((uint16_t []) {
+                       PINCTRL_GRP_NAND0_0_DQS,
+                       PINCTRL_GRP_NAND0_1_DQS,
+                       END_OF_GROUPS,
+               }),
+       },
+       [PINCTRL_FUNC_TTC0_CLK] = {
+               .name = "ttc0_clk",
+               .regval = 0xa0,
+               .groups = &((uint16_t []) {
+                       PINCTRL_GRP_TTC0_0_CLK,
+                       PINCTRL_GRP_TTC0_1_CLK,
+                       PINCTRL_GRP_TTC0_2_CLK,
+                       PINCTRL_GRP_TTC0_3_CLK,
+                       PINCTRL_GRP_TTC0_4_CLK,
+                       PINCTRL_GRP_TTC0_5_CLK,
+                       PINCTRL_GRP_TTC0_6_CLK,
+                       PINCTRL_GRP_TTC0_7_CLK,
+                       PINCTRL_GRP_TTC0_8_CLK,
+                       END_OF_GROUPS,
+               }),
+       },
+       [PINCTRL_FUNC_TTC0_WAV] = {
+               .name = "ttc0_wav",
+               .regval = 0xa0,
+               .groups = &((uint16_t []) {
+                       PINCTRL_GRP_TTC0_0_WAV,
+                       PINCTRL_GRP_TTC0_1_WAV,
+                       PINCTRL_GRP_TTC0_2_WAV,
+                       PINCTRL_GRP_TTC0_3_WAV,
+                       PINCTRL_GRP_TTC0_4_WAV,
+                       PINCTRL_GRP_TTC0_5_WAV,
+                       PINCTRL_GRP_TTC0_6_WAV,
+                       PINCTRL_GRP_TTC0_7_WAV,
+                       PINCTRL_GRP_TTC0_8_WAV,
+                       END_OF_GROUPS,
+               }),
+       },
+       [PINCTRL_FUNC_TTC1_CLK] = {
+               .name = "ttc1_clk",
+               .regval = 0xa0,
+               .groups = &((uint16_t []) {
+                       PINCTRL_GRP_TTC1_0_CLK,
+                       PINCTRL_GRP_TTC1_1_CLK,
+                       PINCTRL_GRP_TTC1_2_CLK,
+                       PINCTRL_GRP_TTC1_3_CLK,
+                       PINCTRL_GRP_TTC1_4_CLK,
+                       PINCTRL_GRP_TTC1_5_CLK,
+                       PINCTRL_GRP_TTC1_6_CLK,
+                       PINCTRL_GRP_TTC1_7_CLK,
+                       PINCTRL_GRP_TTC1_8_CLK,
+                       END_OF_GROUPS,
+               }),
+       },
+       [PINCTRL_FUNC_TTC1_WAV] = {
+               .name = "ttc1_wav",
+               .regval = 0xa0,
+               .groups = &((uint16_t []) {
+                       PINCTRL_GRP_TTC1_0_WAV,
+                       PINCTRL_GRP_TTC1_1_WAV,
+                       PINCTRL_GRP_TTC1_2_WAV,
+                       PINCTRL_GRP_TTC1_3_WAV,
+                       PINCTRL_GRP_TTC1_4_WAV,
+                       PINCTRL_GRP_TTC1_5_WAV,
+                       PINCTRL_GRP_TTC1_6_WAV,
+                       PINCTRL_GRP_TTC1_7_WAV,
+                       PINCTRL_GRP_TTC1_8_WAV,
+                       END_OF_GROUPS,
+               }),
+       },
+       [PINCTRL_FUNC_TTC2_CLK] = {
+               .name = "ttc2_clk",
+               .regval = 0xa0,
+               .groups = &((uint16_t []) {
+                       PINCTRL_GRP_TTC2_0_CLK,
+                       PINCTRL_GRP_TTC2_1_CLK,
+                       PINCTRL_GRP_TTC2_2_CLK,
+                       PINCTRL_GRP_TTC2_3_CLK,
+                       PINCTRL_GRP_TTC2_4_CLK,
+                       PINCTRL_GRP_TTC2_5_CLK,
+                       PINCTRL_GRP_TTC2_6_CLK,
+                       PINCTRL_GRP_TTC2_7_CLK,
+                       PINCTRL_GRP_TTC2_8_CLK,
+                       END_OF_GROUPS,
+               }),
+       },
+       [PINCTRL_FUNC_TTC2_WAV] = {
+               .name = "ttc2_wav",
+               .regval = 0xa0,
+               .groups = &((uint16_t []) {
+                       PINCTRL_GRP_TTC2_0_WAV,
+                       PINCTRL_GRP_TTC2_1_WAV,
+                       PINCTRL_GRP_TTC2_2_WAV,
+                       PINCTRL_GRP_TTC2_3_WAV,
+                       PINCTRL_GRP_TTC2_4_WAV,
+                       PINCTRL_GRP_TTC2_5_WAV,
+                       PINCTRL_GRP_TTC2_6_WAV,
+                       PINCTRL_GRP_TTC2_7_WAV,
+                       PINCTRL_GRP_TTC2_8_WAV,
+                       END_OF_GROUPS,
+               }),
+       },
+       [PINCTRL_FUNC_TTC3_CLK] = {
+               .name = "ttc3_clk",
+               .regval = 0xa0,
+               .groups = &((uint16_t []) {
+                       PINCTRL_GRP_TTC3_0_CLK,
+                       PINCTRL_GRP_TTC3_1_CLK,
+                       PINCTRL_GRP_TTC3_2_CLK,
+                       PINCTRL_GRP_TTC3_3_CLK,
+                       PINCTRL_GRP_TTC3_4_CLK,
+                       PINCTRL_GRP_TTC3_5_CLK,
+                       PINCTRL_GRP_TTC3_6_CLK,
+                       PINCTRL_GRP_TTC3_7_CLK,
+                       PINCTRL_GRP_TTC3_8_CLK,
+                       END_OF_GROUPS,
+               }),
+       },
+       [PINCTRL_FUNC_TTC3_WAV] = {
+               .name = "ttc3_wav",
+               .regval = 0xa0,
+               .groups = &((uint16_t []) {
+                       PINCTRL_GRP_TTC3_0_WAV,
+                       PINCTRL_GRP_TTC3_1_WAV,
+                       PINCTRL_GRP_TTC3_2_WAV,
+                       PINCTRL_GRP_TTC3_3_WAV,
+                       PINCTRL_GRP_TTC3_4_WAV,
+                       PINCTRL_GRP_TTC3_5_WAV,
+                       PINCTRL_GRP_TTC3_6_WAV,
+                       PINCTRL_GRP_TTC3_7_WAV,
+                       PINCTRL_GRP_TTC3_8_WAV,
+                       END_OF_GROUPS,
+               }),
+       },
+       [PINCTRL_FUNC_UART0] = {
+               .name = "uart0",
+               .regval = 0xc0,
+               .groups = &((uint16_t []) {
+                       PINCTRL_GRP_UART0_0,
+                       PINCTRL_GRP_UART0_1,
+                       PINCTRL_GRP_UART0_2,
+                       PINCTRL_GRP_UART0_3,
+                       PINCTRL_GRP_UART0_4,
+                       PINCTRL_GRP_UART0_5,
+                       PINCTRL_GRP_UART0_6,
+                       PINCTRL_GRP_UART0_7,
+                       PINCTRL_GRP_UART0_8,
+                       PINCTRL_GRP_UART0_9,
+                       PINCTRL_GRP_UART0_10,
+                       PINCTRL_GRP_UART0_11,
+                       PINCTRL_GRP_UART0_12,
+                       PINCTRL_GRP_UART0_13,
+                       PINCTRL_GRP_UART0_14,
+                       PINCTRL_GRP_UART0_15,
+                       PINCTRL_GRP_UART0_16,
+                       PINCTRL_GRP_UART0_17,
+                       PINCTRL_GRP_UART0_18,
+                       END_OF_GROUPS,
+               }),
+       },
+       [PINCTRL_FUNC_UART1] = {
+               .name = "uart1",
+               .regval = 0xc0,
+               .groups = &((uint16_t []) {
+                       PINCTRL_GRP_UART1_0,
+                       PINCTRL_GRP_UART1_1,
+                       PINCTRL_GRP_UART1_2,
+                       PINCTRL_GRP_UART1_3,
+                       PINCTRL_GRP_UART1_4,
+                       PINCTRL_GRP_UART1_5,
+                       PINCTRL_GRP_UART1_6,
+                       PINCTRL_GRP_UART1_7,
+                       PINCTRL_GRP_UART1_8,
+                       PINCTRL_GRP_UART1_9,
+                       PINCTRL_GRP_UART1_10,
+                       PINCTRL_GRP_UART1_11,
+                       PINCTRL_GRP_UART1_12,
+                       PINCTRL_GRP_UART1_13,
+                       PINCTRL_GRP_UART1_14,
+                       PINCTRL_GRP_UART1_15,
+                       PINCTRL_GRP_UART1_16,
+                       PINCTRL_GRP_UART1_17,
+                       PINCTRL_GRP_UART1_18,
+                       END_OF_GROUPS,
+               }),
+       },
+       [PINCTRL_FUNC_USB0] = {
+               .name = "usb0",
+               .regval = 0x04,
+               .groups = &((uint16_t []) {
+                       PINCTRL_GRP_USB0_0,
+                       END_OF_GROUPS,
+               }),
+       },
+       [PINCTRL_FUNC_USB1] = {
+               .name = "usb1",
+               .regval = 0x04,
+               .groups = &((uint16_t []) {
+                       PINCTRL_GRP_USB1_0,
+                       END_OF_GROUPS,
+               }),
+       },
+       [PINCTRL_FUNC_SWDT0_CLK] = {
+               .name = "swdt0_clk",
+               .regval = 0x60,
+               .groups = &((uint16_t []) {
+                       PINCTRL_GRP_SWDT0_0_CLK,
+                       PINCTRL_GRP_SWDT0_1_CLK,
+                       PINCTRL_GRP_SWDT0_2_CLK,
+                       PINCTRL_GRP_SWDT0_3_CLK,
+                       PINCTRL_GRP_SWDT0_4_CLK,
+                       PINCTRL_GRP_SWDT0_5_CLK,
+                       PINCTRL_GRP_SWDT0_6_CLK,
+                       PINCTRL_GRP_SWDT0_7_CLK,
+                       PINCTRL_GRP_SWDT0_8_CLK,
+                       PINCTRL_GRP_SWDT0_9_CLK,
+                       PINCTRL_GRP_SWDT0_10_CLK,
+                       PINCTRL_GRP_SWDT0_11_CLK,
+                       PINCTRL_GRP_SWDT0_12_CLK,
+                       END_OF_GROUPS,
+               }),
+       },
+       [PINCTRL_FUNC_SWDT0_RST] = {
+               .name = "swdt0_rst",
+               .regval = 0x60,
+               .groups = &((uint16_t []) {
+                       PINCTRL_GRP_SWDT0_0_RST,
+                       PINCTRL_GRP_SWDT0_1_RST,
+                       PINCTRL_GRP_SWDT0_2_RST,
+                       PINCTRL_GRP_SWDT0_3_RST,
+                       PINCTRL_GRP_SWDT0_4_RST,
+                       PINCTRL_GRP_SWDT0_5_RST,
+                       PINCTRL_GRP_SWDT0_6_RST,
+                       PINCTRL_GRP_SWDT0_7_RST,
+                       PINCTRL_GRP_SWDT0_8_RST,
+                       PINCTRL_GRP_SWDT0_9_RST,
+                       PINCTRL_GRP_SWDT0_10_RST,
+                       PINCTRL_GRP_SWDT0_11_RST,
+                       PINCTRL_GRP_SWDT0_12_RST,
+                       END_OF_GROUPS,
+               }),
+       },
+       [PINCTRL_FUNC_SWDT1_CLK] = {
+               .name = "swdt1_clk",
+               .regval = 0x60,
+               .groups = &((uint16_t []) {
+                       PINCTRL_GRP_SWDT1_0_CLK,
+                       PINCTRL_GRP_SWDT1_1_CLK,
+                       PINCTRL_GRP_SWDT1_2_CLK,
+                       PINCTRL_GRP_SWDT1_3_CLK,
+                       PINCTRL_GRP_SWDT1_4_CLK,
+                       PINCTRL_GRP_SWDT1_5_CLK,
+                       PINCTRL_GRP_SWDT1_6_CLK,
+                       PINCTRL_GRP_SWDT1_7_CLK,
+                       PINCTRL_GRP_SWDT1_8_CLK,
+                       PINCTRL_GRP_SWDT1_9_CLK,
+                       PINCTRL_GRP_SWDT1_10_CLK,
+                       PINCTRL_GRP_SWDT1_11_CLK,
+                       PINCTRL_GRP_SWDT1_12_CLK,
+                       END_OF_GROUPS,
+               }),
+       },
+       [PINCTRL_FUNC_SWDT1_RST] = {
+               .name = "swdt1_rst",
+               .regval = 0x60,
+               .groups = &((uint16_t []) {
+                       PINCTRL_GRP_SWDT1_0_RST,
+                       PINCTRL_GRP_SWDT1_1_RST,
+                       PINCTRL_GRP_SWDT1_2_RST,
+                       PINCTRL_GRP_SWDT1_3_RST,
+                       PINCTRL_GRP_SWDT1_4_RST,
+                       PINCTRL_GRP_SWDT1_5_RST,
+                       PINCTRL_GRP_SWDT1_6_RST,
+                       PINCTRL_GRP_SWDT1_7_RST,
+                       PINCTRL_GRP_SWDT1_8_RST,
+                       PINCTRL_GRP_SWDT1_9_RST,
+                       PINCTRL_GRP_SWDT1_10_RST,
+                       PINCTRL_GRP_SWDT1_11_RST,
+                       PINCTRL_GRP_SWDT1_12_RST,
+                       END_OF_GROUPS,
+               }),
+       },
+       [PINCTRL_FUNC_PMU0] = {
+               .name = "pmu0",
+               .regval = 0x08,
+               .groups = &((uint16_t []) {
+                       PINCTRL_GRP_PMU0_0,
+                       PINCTRL_GRP_PMU0_1,
+                       PINCTRL_GRP_PMU0_2,
+                       PINCTRL_GRP_PMU0_3,
+                       PINCTRL_GRP_PMU0_4,
+                       PINCTRL_GRP_PMU0_5,
+                       PINCTRL_GRP_PMU0_6,
+                       PINCTRL_GRP_PMU0_7,
+                       PINCTRL_GRP_PMU0_8,
+                       PINCTRL_GRP_PMU0_9,
+                       PINCTRL_GRP_PMU0_10,
+                       PINCTRL_GRP_PMU0_11,
+                       END_OF_GROUPS,
+               }),
+       },
+       [PINCTRL_FUNC_PCIE0] = {
+               .name = "pcie0",
+               .regval = 0x04,
+               .groups = &((uint16_t []) {
+                       PINCTRL_GRP_PCIE0_0,
+                       PINCTRL_GRP_PCIE0_1,
+                       PINCTRL_GRP_PCIE0_2,
+                       PINCTRL_GRP_PCIE0_3,
+                       PINCTRL_GRP_PCIE0_4,
+                       PINCTRL_GRP_PCIE0_5,
+                       PINCTRL_GRP_PCIE0_6,
+                       PINCTRL_GRP_PCIE0_7,
+                       END_OF_GROUPS,
+               }),
+       },
+       [PINCTRL_FUNC_CSU0] = {
+               .name = "csu0",
+               .regval = 0x18,
+               .groups = &((uint16_t []) {
+                       PINCTRL_GRP_CSU0_0,
+                       PINCTRL_GRP_CSU0_1,
+                       PINCTRL_GRP_CSU0_2,
+                       PINCTRL_GRP_CSU0_3,
+                       PINCTRL_GRP_CSU0_4,
+                       PINCTRL_GRP_CSU0_5,
+                       PINCTRL_GRP_CSU0_6,
+                       PINCTRL_GRP_CSU0_7,
+                       PINCTRL_GRP_CSU0_8,
+                       PINCTRL_GRP_CSU0_9,
+                       PINCTRL_GRP_CSU0_10,
+                       PINCTRL_GRP_CSU0_11,
+                       END_OF_GROUPS,
+               }),
+       },
+       [PINCTRL_FUNC_DPAUX0] = {
+               .name = "dpaux0",
+               .regval = 0x18,
+               .groups = &((uint16_t []) {
+                       PINCTRL_GRP_DPAUX0_0,
+                       PINCTRL_GRP_DPAUX0_1,
+                       PINCTRL_GRP_DPAUX0_2,
+                       PINCTRL_GRP_DPAUX0_3,
+                       END_OF_GROUPS,
+               }),
+       },
+       [PINCTRL_FUNC_PJTAG0] = {
+               .name = "pjtag0",
+               .regval = 0x60,
+               .groups = &((uint16_t []) {
+                       PINCTRL_GRP_PJTAG0_0,
+                       PINCTRL_GRP_PJTAG0_1,
+                       PINCTRL_GRP_PJTAG0_2,
+                       PINCTRL_GRP_PJTAG0_3,
+                       PINCTRL_GRP_PJTAG0_4,
+                       PINCTRL_GRP_PJTAG0_5,
+                       END_OF_GROUPS,
+               }),
+       },
+       [PINCTRL_FUNC_TRACE0] = {
+               .name = "trace0",
+               .regval = 0xe0,
+               .groups = &((uint16_t []) {
+                       PINCTRL_GRP_TRACE0_0,
+                       PINCTRL_GRP_TRACE0_1,
+                       PINCTRL_GRP_TRACE0_2,
+                       END_OF_GROUPS,
+               }),
+       },
+       [PINCTRL_FUNC_TRACE0_CLK] = {
+               .name = "trace0_clk",
+               .regval = 0xe0,
+               .groups = &((uint16_t []) {
+                       PINCTRL_GRP_TRACE0_0_CLK,
+                       PINCTRL_GRP_TRACE0_1_CLK,
+                       PINCTRL_GRP_TRACE0_2_CLK,
+                       END_OF_GROUPS,
+               }),
+       },
+       [PINCTRL_FUNC_TESTSCAN0] = {
+               .name = "testscan0",
+               .regval = 0x10,
+               .groups = &((uint16_t []) {
+                       PINCTRL_GRP_TESTSCAN0_0,
+                       END_OF_GROUPS,
+               }),
+       },
+};
+
+static struct zynqmp_pin_group zynqmp_pin_groups[MAX_PIN] = {
+       [PINCTRL_PIN_0] = {
+               .groups = {
+                       PINCTRL_GRP_QSPI0_0,
+                       PINCTRL_GRP_RESERVED,
+                       PINCTRL_GRP_RESERVED,
+                       PINCTRL_GRP_TESTSCAN0_0,
+                       PINCTRL_GRP_RESERVED,
+                       PINCTRL_GRP_GPIO0_0,
+                       PINCTRL_GRP_CAN1_0,
+                       PINCTRL_GRP_I2C1_0,
+                       PINCTRL_GRP_PJTAG0_0,
+                       PINCTRL_GRP_SPI0_0,
+                       PINCTRL_GRP_TTC3_0_CLK,
+                       PINCTRL_GRP_UART1_0,
+                       PINCTRL_GRP_TRACE0_0_CLK,
+               },
+       },
+       [PINCTRL_PIN_1] = {
+               .groups = {
+                       PINCTRL_GRP_QSPI0_0,
+                       PINCTRL_GRP_RESERVED,
+                       PINCTRL_GRP_RESERVED,
+                       PINCTRL_GRP_TESTSCAN0_0,
+                       PINCTRL_GRP_RESERVED,
+                       PINCTRL_GRP_GPIO0_1,
+                       PINCTRL_GRP_CAN1_0,
+                       PINCTRL_GRP_I2C1_0,
+                       PINCTRL_GRP_PJTAG0_0,
+                       PINCTRL_GRP_SPI0_0_SS2,
+                       PINCTRL_GRP_TTC3_0_WAV,
+                       PINCTRL_GRP_UART1_0,
+                       PINCTRL_GRP_TRACE0_0_CLK,
+               },
+       },
+       [PINCTRL_PIN_2] = {
+               .groups = {
+                       PINCTRL_GRP_QSPI0_0,
+                       PINCTRL_GRP_RESERVED,
+                       PINCTRL_GRP_RESERVED,
+                       PINCTRL_GRP_TESTSCAN0_0,
+                       PINCTRL_GRP_RESERVED,
+                       PINCTRL_GRP_GPIO0_2,
+                       PINCTRL_GRP_CAN0_0,
+                       PINCTRL_GRP_I2C0_0,
+                       PINCTRL_GRP_PJTAG0_0,
+                       PINCTRL_GRP_SPI0_0_SS1,
+                       PINCTRL_GRP_TTC2_0_CLK,
+                       PINCTRL_GRP_UART0_0,
+                       PINCTRL_GRP_TRACE0_0,
+               },
+       },
+       [PINCTRL_PIN_3] = {
+               .groups = {
+                       PINCTRL_GRP_QSPI0_0,
+                       PINCTRL_GRP_RESERVED,
+                       PINCTRL_GRP_RESERVED,
+                       PINCTRL_GRP_TESTSCAN0_0,
+                       PINCTRL_GRP_RESERVED,
+                       PINCTRL_GRP_GPIO0_3,
+                       PINCTRL_GRP_CAN0_0,
+                       PINCTRL_GRP_I2C0_0,
+                       PINCTRL_GRP_PJTAG0_0,
+                       PINCTRL_GRP_SPI0_0_SS0,
+                       PINCTRL_GRP_TTC2_0_WAV,
+                       PINCTRL_GRP_UART0_0,
+                       PINCTRL_GRP_TRACE0_0,
+               },
+       },
+       [PINCTRL_PIN_4] = {
+               .groups = {
+                       PINCTRL_GRP_QSPI0_0,
+                       PINCTRL_GRP_RESERVED,
+                       PINCTRL_GRP_RESERVED,
+                       PINCTRL_GRP_TESTSCAN0_0,
+                       PINCTRL_GRP_RESERVED,
+                       PINCTRL_GRP_GPIO0_4,
+                       PINCTRL_GRP_CAN1_1,
+                       PINCTRL_GRP_I2C1_1,
+                       PINCTRL_GRP_SWDT1_0_CLK,
+                       PINCTRL_GRP_SPI0_0,
+                       PINCTRL_GRP_TTC1_0_CLK,
+                       PINCTRL_GRP_UART1_1,
+                       PINCTRL_GRP_TRACE0_0,
+               },
+       },
+       [PINCTRL_PIN_5] = {
+               .groups = {
+                       PINCTRL_GRP_QSPI_SS,
+                       PINCTRL_GRP_RESERVED,
+                       PINCTRL_GRP_RESERVED,
+                       PINCTRL_GRP_TESTSCAN0_0,
+                       PINCTRL_GRP_RESERVED,
+                       PINCTRL_GRP_GPIO0_5,
+                       PINCTRL_GRP_CAN1_1,
+                       PINCTRL_GRP_I2C1_1,
+                       PINCTRL_GRP_SWDT1_0_RST,
+                       PINCTRL_GRP_SPI0_0,
+                       PINCTRL_GRP_TTC1_0_WAV,
+                       PINCTRL_GRP_UART1_1,
+                       PINCTRL_GRP_TRACE0_0,
+               },
+       },
+       [PINCTRL_PIN_6] = {
+               .groups = {
+                       PINCTRL_GRP_QSPI_FBCLK,
+                       PINCTRL_GRP_RESERVED,
+                       PINCTRL_GRP_RESERVED,
+                       PINCTRL_GRP_TESTSCAN0_0,
+                       PINCTRL_GRP_RESERVED,
+                       PINCTRL_GRP_GPIO0_6,
+                       PINCTRL_GRP_CAN0_1,
+                       PINCTRL_GRP_I2C0_1,
+                       PINCTRL_GRP_SWDT0_0_CLK,
+                       PINCTRL_GRP_SPI1_0,
+                       PINCTRL_GRP_TTC0_0_CLK,
+                       PINCTRL_GRP_UART0_1,
+                       PINCTRL_GRP_TRACE0_0,
+               },
+       },
+       [PINCTRL_PIN_7] = {
+               .groups = {
+                       PINCTRL_GRP_QSPI_SS,
+                       PINCTRL_GRP_RESERVED,
+                       PINCTRL_GRP_RESERVED,
+                       PINCTRL_GRP_TESTSCAN0_0,
+                       PINCTRL_GRP_RESERVED,
+                       PINCTRL_GRP_GPIO0_7,
+                       PINCTRL_GRP_CAN0_1,
+                       PINCTRL_GRP_I2C0_1,
+                       PINCTRL_GRP_SWDT0_0_RST,
+                       PINCTRL_GRP_SPI1_0_SS2,
+                       PINCTRL_GRP_TTC0_0_WAV,
+                       PINCTRL_GRP_UART0_1,
+                       PINCTRL_GRP_TRACE0_0,
+               },
+       },
+       [PINCTRL_PIN_8] = {
+               .groups = {
+                       PINCTRL_GRP_QSPI0_0,
+                       PINCTRL_GRP_RESERVED,
+                       PINCTRL_GRP_RESERVED,
+                       PINCTRL_GRP_TESTSCAN0_0,
+                       PINCTRL_GRP_RESERVED,
+                       PINCTRL_GRP_GPIO0_8,
+                       PINCTRL_GRP_CAN1_2,
+                       PINCTRL_GRP_I2C1_2,
+                       PINCTRL_GRP_SWDT1_1_CLK,
+                       PINCTRL_GRP_SPI1_0_SS1,
+                       PINCTRL_GRP_TTC3_1_CLK,
+                       PINCTRL_GRP_UART1_2,
+                       PINCTRL_GRP_TRACE0_0,
+               },
+       },
+       [PINCTRL_PIN_9] = {
+               .groups = {
+                       PINCTRL_GRP_QSPI0_0,
+                       PINCTRL_GRP_NAND0_0_CE,
+                       PINCTRL_GRP_RESERVED,
+                       PINCTRL_GRP_TESTSCAN0_0,
+                       PINCTRL_GRP_RESERVED,
+                       PINCTRL_GRP_GPIO0_9,
+                       PINCTRL_GRP_CAN1_2,
+                       PINCTRL_GRP_I2C1_2,
+                       PINCTRL_GRP_SWDT1_1_RST,
+                       PINCTRL_GRP_SPI1_0_SS0,
+                       PINCTRL_GRP_TTC3_1_WAV,
+                       PINCTRL_GRP_UART1_2,
+                       PINCTRL_GRP_TRACE0_0,
+               },
+       },
+       [PINCTRL_PIN_10] = {
+               .groups = {
+                       PINCTRL_GRP_QSPI0_0,
+                       PINCTRL_GRP_NAND0_0_RB,
+                       PINCTRL_GRP_RESERVED,
+                       PINCTRL_GRP_TESTSCAN0_0,
+                       PINCTRL_GRP_RESERVED,
+                       PINCTRL_GRP_GPIO0_10,
+                       PINCTRL_GRP_CAN0_2,
+                       PINCTRL_GRP_I2C0_2,
+                       PINCTRL_GRP_SWDT0_1_CLK,
+                       PINCTRL_GRP_SPI1_0,
+                       PINCTRL_GRP_TTC2_1_CLK,
+                       PINCTRL_GRP_UART0_2,
+                       PINCTRL_GRP_TRACE0_0,
+               },
+       },
+       [PINCTRL_PIN_11] = {
+               .groups = {
+                       PINCTRL_GRP_QSPI0_0,
+                       PINCTRL_GRP_NAND0_0_RB,
+                       PINCTRL_GRP_RESERVED,
+                       PINCTRL_GRP_TESTSCAN0_0,
+                       PINCTRL_GRP_RESERVED,
+                       PINCTRL_GRP_GPIO0_11,
+                       PINCTRL_GRP_CAN0_2,
+                       PINCTRL_GRP_I2C0_2,
+                       PINCTRL_GRP_SWDT0_1_RST,
+                       PINCTRL_GRP_SPI1_0,
+                       PINCTRL_GRP_TTC2_1_WAV,
+                       PINCTRL_GRP_UART0_2,
+                       PINCTRL_GRP_TRACE0_0,
+               },
+       },
+       [PINCTRL_PIN_12] = {
+               .groups = {
+                       PINCTRL_GRP_QSPI0_0,
+                       PINCTRL_GRP_NAND0_0_DQS,
+                       PINCTRL_GRP_RESERVED,
+                       PINCTRL_GRP_TESTSCAN0_0,
+                       PINCTRL_GRP_RESERVED,
+                       PINCTRL_GRP_GPIO0_12,
+                       PINCTRL_GRP_CAN1_3,
+                       PINCTRL_GRP_I2C1_3,
+                       PINCTRL_GRP_PJTAG0_1,
+                       PINCTRL_GRP_SPI0_1,
+                       PINCTRL_GRP_TTC1_1_CLK,
+                       PINCTRL_GRP_UART1_3,
+                       PINCTRL_GRP_TRACE0_0,
+               },
+       },
+       [PINCTRL_PIN_13] = {
+               .groups = {
+                       PINCTRL_GRP_RESERVED,
+                       PINCTRL_GRP_NAND0_0,
+                       PINCTRL_GRP_SDIO0_1BIT_0_0,
+                       PINCTRL_GRP_TESTSCAN0_0,
+                       PINCTRL_GRP_RESERVED,
+                       PINCTRL_GRP_GPIO0_13,
+                       PINCTRL_GRP_CAN1_3,
+                       PINCTRL_GRP_I2C1_3,
+                       PINCTRL_GRP_PJTAG0_1,
+                       PINCTRL_GRP_SPI0_1_SS2,
+                       PINCTRL_GRP_TTC1_1_WAV,
+                       PINCTRL_GRP_UART1_3,
+                       PINCTRL_GRP_TRACE0_0,
+               },
+       },
+       [PINCTRL_PIN_14] = {
+               .groups = {
+                       PINCTRL_GRP_RESERVED,
+                       PINCTRL_GRP_NAND0_0,
+                       PINCTRL_GRP_SDIO0_1BIT_0_1,
+                       PINCTRL_GRP_TESTSCAN0_0,
+                       PINCTRL_GRP_RESERVED,
+                       PINCTRL_GRP_GPIO0_14,
+                       PINCTRL_GRP_CAN0_3,
+                       PINCTRL_GRP_I2C0_3,
+                       PINCTRL_GRP_PJTAG0_1,
+                       PINCTRL_GRP_SPI0_1_SS1,
+                       PINCTRL_GRP_TTC0_1_CLK,
+                       PINCTRL_GRP_UART0_3,
+                       PINCTRL_GRP_TRACE0_0,
+               },
+       },
+       [PINCTRL_PIN_15] = {
+               .groups = {
+                       PINCTRL_GRP_RESERVED,
+                       PINCTRL_GRP_NAND0_0,
+                       PINCTRL_GRP_SDIO0_1BIT_0_2,
+                       PINCTRL_GRP_TESTSCAN0_0,
+                       PINCTRL_GRP_RESERVED,
+                       PINCTRL_GRP_GPIO0_15,
+                       PINCTRL_GRP_CAN0_3,
+                       PINCTRL_GRP_I2C0_3,
+                       PINCTRL_GRP_PJTAG0_1,
+                       PINCTRL_GRP_SPI0_1_SS0,
+                       PINCTRL_GRP_TTC0_1_WAV,
+                       PINCTRL_GRP_UART0_3,
+                       PINCTRL_GRP_TRACE0_0,
+               },
+       },
+       [PINCTRL_PIN_16] = {
+               .groups = {
+                       PINCTRL_GRP_RESERVED,
+                       PINCTRL_GRP_NAND0_0,
+                       PINCTRL_GRP_SDIO0_1BIT_0_3,
+                       PINCTRL_GRP_TESTSCAN0_0,
+                       PINCTRL_GRP_RESERVED,
+                       PINCTRL_GRP_GPIO0_16,
+                       PINCTRL_GRP_CAN1_4,
+                       PINCTRL_GRP_I2C1_4,
+                       PINCTRL_GRP_SWDT1_2_CLK,
+                       PINCTRL_GRP_SPI0_1,
+                       PINCTRL_GRP_TTC3_2_CLK,
+                       PINCTRL_GRP_UART1_4,
+                       PINCTRL_GRP_TRACE0_0,
+               },
+       },
+       [PINCTRL_PIN_17] = {
+               .groups = {
+                       PINCTRL_GRP_RESERVED,
+                       PINCTRL_GRP_NAND0_0,
+                       PINCTRL_GRP_SDIO0_1BIT_0_4,
+                       PINCTRL_GRP_TESTSCAN0_0,
+                       PINCTRL_GRP_RESERVED,
+                       PINCTRL_GRP_GPIO0_17,
+                       PINCTRL_GRP_CAN1_4,
+                       PINCTRL_GRP_I2C1_4,
+                       PINCTRL_GRP_SWDT1_2_RST,
+                       PINCTRL_GRP_SPI0_1,
+                       PINCTRL_GRP_TTC3_2_WAV,
+                       PINCTRL_GRP_UART1_4,
+                       PINCTRL_GRP_TRACE0_0,
+               },
+       },
+       [PINCTRL_PIN_18] = {
+               .groups = {
+                       PINCTRL_GRP_RESERVED,
+                       PINCTRL_GRP_NAND0_0,
+                       PINCTRL_GRP_SDIO0_1BIT_0_5,
+                       PINCTRL_GRP_TESTSCAN0_0,
+                       PINCTRL_GRP_CSU0_0,
+                       PINCTRL_GRP_GPIO0_18,
+                       PINCTRL_GRP_CAN0_4,
+                       PINCTRL_GRP_I2C0_4,
+                       PINCTRL_GRP_SWDT0_2_CLK,
+                       PINCTRL_GRP_SPI1_1,
+                       PINCTRL_GRP_TTC2_2_CLK,
+                       PINCTRL_GRP_UART0_4,
+                       PINCTRL_GRP_RESERVED,
+               },
+       },
+       [PINCTRL_PIN_19] = {
+               .groups = {
+                       PINCTRL_GRP_RESERVED,
+                       PINCTRL_GRP_NAND0_0,
+                       PINCTRL_GRP_SDIO0_1BIT_0_6,
+                       PINCTRL_GRP_TESTSCAN0_0,
+                       PINCTRL_GRP_CSU0_1,
+                       PINCTRL_GRP_GPIO0_19,
+                       PINCTRL_GRP_CAN0_4,
+                       PINCTRL_GRP_I2C0_4,
+                       PINCTRL_GRP_SWDT0_2_RST,
+                       PINCTRL_GRP_SPI1_1_SS2,
+                       PINCTRL_GRP_TTC2_2_WAV,
+                       PINCTRL_GRP_UART0_4,
+                       PINCTRL_GRP_RESERVED,
+               },
+       },
+       [PINCTRL_PIN_20] = {
+               .groups = {
+                       PINCTRL_GRP_RESERVED,
+                       PINCTRL_GRP_NAND0_0,
+                       PINCTRL_GRP_SDIO0_1BIT_0_7,
+                       PINCTRL_GRP_TESTSCAN0_0,
+                       PINCTRL_GRP_CSU0_2,
+                       PINCTRL_GRP_GPIO0_20,
+                       PINCTRL_GRP_CAN1_5,
+                       PINCTRL_GRP_I2C1_5,
+                       PINCTRL_GRP_SWDT1_3_CLK,
+                       PINCTRL_GRP_SPI1_1_SS1,
+                       PINCTRL_GRP_TTC1_2_CLK,
+                       PINCTRL_GRP_UART1_5,
+                       PINCTRL_GRP_RESERVED,
+               },
+       },
+       [PINCTRL_PIN_21] = {
+               .groups = {
+                       PINCTRL_GRP_RESERVED,
+                       PINCTRL_GRP_NAND0_0,
+                       PINCTRL_GRP_SDIO0_1BIT_0_7,
+                       PINCTRL_GRP_TESTSCAN0_0,
+                       PINCTRL_GRP_CSU0_3,
+                       PINCTRL_GRP_GPIO0_21,
+                       PINCTRL_GRP_CAN1_5,
+                       PINCTRL_GRP_I2C1_5,
+                       PINCTRL_GRP_SWDT1_3_RST,
+                       PINCTRL_GRP_SPI1_1_SS0,
+                       PINCTRL_GRP_TTC1_2_WAV,
+                       PINCTRL_GRP_UART1_5,
+                       PINCTRL_GRP_RESERVED,
+               },
+       },
+       [PINCTRL_PIN_22] = {
+               .groups = {
+                       PINCTRL_GRP_RESERVED,
+                       PINCTRL_GRP_NAND0_0,
+                       PINCTRL_GRP_SDIO0_1BIT_0_7,
+                       PINCTRL_GRP_TESTSCAN0_0,
+                       PINCTRL_GRP_CSU0_4,
+                       PINCTRL_GRP_GPIO0_22,
+                       PINCTRL_GRP_CAN0_5,
+                       PINCTRL_GRP_I2C0_5,
+                       PINCTRL_GRP_SWDT0_3_CLK,
+                       PINCTRL_GRP_SPI1_1,
+                       PINCTRL_GRP_TTC0_2_CLK,
+                       PINCTRL_GRP_UART0_5,
+                       PINCTRL_GRP_RESERVED,
+               },
+       },
+       [PINCTRL_PIN_23] = {
+               .groups = {
+                       PINCTRL_GRP_RESERVED,
+                       PINCTRL_GRP_NAND0_0,
+                       PINCTRL_GRP_SDIO0_0_PC,
+                       PINCTRL_GRP_TESTSCAN0_0,
+                       PINCTRL_GRP_CSU0_5,
+                       PINCTRL_GRP_GPIO0_23,
+                       PINCTRL_GRP_CAN0_5,
+                       PINCTRL_GRP_I2C0_5,
+                       PINCTRL_GRP_SWDT0_3_RST,
+                       PINCTRL_GRP_SPI1_1,
+                       PINCTRL_GRP_TTC0_2_WAV,
+                       PINCTRL_GRP_UART0_5,
+                       PINCTRL_GRP_RESERVED,
+               },
+       },
+       [PINCTRL_PIN_24] = {
+               .groups = {
+                       PINCTRL_GRP_RESERVED,
+                       PINCTRL_GRP_NAND0_0,
+                       PINCTRL_GRP_SDIO0_0_CD,
+                       PINCTRL_GRP_TESTSCAN0_0,
+                       PINCTRL_GRP_CSU0_6,
+                       PINCTRL_GRP_GPIO0_24,
+                       PINCTRL_GRP_CAN1_6,
+                       PINCTRL_GRP_I2C1_6,
+                       PINCTRL_GRP_SWDT1_4_CLK,
+                       PINCTRL_GRP_RESERVED,
+                       PINCTRL_GRP_TTC3_3_CLK,
+                       PINCTRL_GRP_UART1_6,
+                       PINCTRL_GRP_RESERVED,
+               },
+       },
+       [PINCTRL_PIN_25] = {
+               .groups = {
+                       PINCTRL_GRP_RESERVED,
+                       PINCTRL_GRP_NAND0_0,
+                       PINCTRL_GRP_SDIO0_0_WP,
+                       PINCTRL_GRP_TESTSCAN0_0,
+                       PINCTRL_GRP_CSU0_7,
+                       PINCTRL_GRP_GPIO0_25,
+                       PINCTRL_GRP_CAN1_6,
+                       PINCTRL_GRP_I2C1_6,
+                       PINCTRL_GRP_SWDT1_4_RST,
+                       PINCTRL_GRP_RESERVED,
+                       PINCTRL_GRP_TTC3_3_WAV,
+                       PINCTRL_GRP_UART1_6,
+                       PINCTRL_GRP_RESERVED,
+               },
+       },
+       [PINCTRL_PIN_26] = {
+               .groups = {
+                       PINCTRL_GRP_GEMTSU0_0,
+                       PINCTRL_GRP_NAND0_1_CE,
+                       PINCTRL_GRP_PMU0_0,
+                       PINCTRL_GRP_TESTSCAN0_0,
+                       PINCTRL_GRP_CSU0_8,
+                       PINCTRL_GRP_GPIO0_26,
+                       PINCTRL_GRP_CAN0_6,
+                       PINCTRL_GRP_I2C0_6,
+                       PINCTRL_GRP_PJTAG0_2,
+                       PINCTRL_GRP_SPI0_2,
+                       PINCTRL_GRP_TTC2_3_CLK,
+                       PINCTRL_GRP_UART0_6,
+                       PINCTRL_GRP_TRACE0_1,
+               },
+       },
+       [PINCTRL_PIN_27] = {
+               .groups = {
+                       PINCTRL_GRP_ETHERNET0_0,
+                       PINCTRL_GRP_NAND0_1_RB,
+                       PINCTRL_GRP_PMU0_1,
+                       PINCTRL_GRP_TESTSCAN0_0,
+                       PINCTRL_GRP_DPAUX0_0,
+                       PINCTRL_GRP_GPIO0_27,
+                       PINCTRL_GRP_CAN0_6,
+                       PINCTRL_GRP_I2C0_6,
+                       PINCTRL_GRP_PJTAG0_2,
+                       PINCTRL_GRP_SPI0_2_SS2,
+                       PINCTRL_GRP_TTC2_3_WAV,
+                       PINCTRL_GRP_UART0_6,
+                       PINCTRL_GRP_TRACE0_1,
+               },
+       },
+       [PINCTRL_PIN_28] = {
+               .groups = {
+                       PINCTRL_GRP_ETHERNET0_0,
+                       PINCTRL_GRP_NAND0_1_RB,
+                       PINCTRL_GRP_PMU0_2,
+                       PINCTRL_GRP_TESTSCAN0_0,
+                       PINCTRL_GRP_DPAUX0_0,
+                       PINCTRL_GRP_GPIO0_28,
+                       PINCTRL_GRP_CAN1_7,
+                       PINCTRL_GRP_I2C1_7,
+                       PINCTRL_GRP_PJTAG0_2,
+                       PINCTRL_GRP_SPI0_2_SS1,
+                       PINCTRL_GRP_TTC1_3_CLK,
+                       PINCTRL_GRP_UART1_7,
+                       PINCTRL_GRP_TRACE0_1,
+               },
+       },
+       [PINCTRL_PIN_29] = {
+               .groups = {
+                       PINCTRL_GRP_ETHERNET0_0,
+                       PINCTRL_GRP_PCIE0_0,
+                       PINCTRL_GRP_PMU0_3,
+                       PINCTRL_GRP_TESTSCAN0_0,
+                       PINCTRL_GRP_DPAUX0_1,
+                       PINCTRL_GRP_GPIO0_29,
+                       PINCTRL_GRP_CAN1_7,
+                       PINCTRL_GRP_I2C1_7,
+                       PINCTRL_GRP_PJTAG0_2,
+                       PINCTRL_GRP_SPI0_2_SS0,
+                       PINCTRL_GRP_TTC1_3_WAV,
+                       PINCTRL_GRP_UART1_7,
+                       PINCTRL_GRP_TRACE0_1,
+               },
+       },
+       [PINCTRL_PIN_30] = {
+               .groups = {
+                       PINCTRL_GRP_ETHERNET0_0,
+                       PINCTRL_GRP_PCIE0_1,
+                       PINCTRL_GRP_PMU0_4,
+                       PINCTRL_GRP_TESTSCAN0_0,
+                       PINCTRL_GRP_DPAUX0_1,
+                       PINCTRL_GRP_GPIO0_30,
+                       PINCTRL_GRP_CAN0_7,
+                       PINCTRL_GRP_I2C0_7,
+                       PINCTRL_GRP_SWDT0_4_CLK,
+                       PINCTRL_GRP_SPI0_2,
+                       PINCTRL_GRP_TTC0_3_CLK,
+                       PINCTRL_GRP_UART0_7,
+                       PINCTRL_GRP_TRACE0_1,
+               },
+       },
+       [PINCTRL_PIN_31] = {
+               .groups = {
+                       PINCTRL_GRP_ETHERNET0_0,
+                       PINCTRL_GRP_PCIE0_2,
+                       PINCTRL_GRP_PMU0_5,
+                       PINCTRL_GRP_TESTSCAN0_0,
+                       PINCTRL_GRP_CSU0_9,
+                       PINCTRL_GRP_GPIO0_31,
+                       PINCTRL_GRP_CAN0_7,
+                       PINCTRL_GRP_I2C0_7,
+                       PINCTRL_GRP_SWDT0_4_RST,
+                       PINCTRL_GRP_SPI0_2,
+                       PINCTRL_GRP_TTC0_3_WAV,
+                       PINCTRL_GRP_UART0_7,
+                       PINCTRL_GRP_TRACE0_1,
+               },
+       },
+       [PINCTRL_PIN_32] = {
+               .groups = {
+                       PINCTRL_GRP_ETHERNET0_0,
+                       PINCTRL_GRP_NAND0_1_DQS,
+                       PINCTRL_GRP_PMU0_6,
+                       PINCTRL_GRP_TESTSCAN0_0,
+                       PINCTRL_GRP_CSU0_10,
+                       PINCTRL_GRP_GPIO0_32,
+                       PINCTRL_GRP_CAN1_8,
+                       PINCTRL_GRP_I2C1_8,
+                       PINCTRL_GRP_SWDT1_5_CLK,
+                       PINCTRL_GRP_SPI1_2,
+                       PINCTRL_GRP_TTC3_4_CLK,
+                       PINCTRL_GRP_UART1_8,
+                       PINCTRL_GRP_TRACE0_1,
+               },
+       },
+       [PINCTRL_PIN_33] = {
+               .groups = {
+                       PINCTRL_GRP_ETHERNET0_0,
+                       PINCTRL_GRP_PCIE0_3,
+                       PINCTRL_GRP_PMU0_7,
+                       PINCTRL_GRP_TESTSCAN0_0,
+                       PINCTRL_GRP_CSU0_11,
+                       PINCTRL_GRP_GPIO0_33,
+                       PINCTRL_GRP_CAN1_8,
+                       PINCTRL_GRP_I2C1_8,
+                       PINCTRL_GRP_SWDT1_5_RST,
+                       PINCTRL_GRP_SPI1_2_SS2,
+                       PINCTRL_GRP_TTC3_4_WAV,
+                       PINCTRL_GRP_UART1_8,
+                       PINCTRL_GRP_TRACE0_1,
+               },
+       },
+       [PINCTRL_PIN_34] = {
+               .groups = {
+                       PINCTRL_GRP_ETHERNET0_0,
+                       PINCTRL_GRP_PCIE0_4,
+                       PINCTRL_GRP_PMU0_8,
+                       PINCTRL_GRP_TESTSCAN0_0,
+                       PINCTRL_GRP_DPAUX0_2,
+                       PINCTRL_GRP_GPIO0_34,
+                       PINCTRL_GRP_CAN0_8,
+                       PINCTRL_GRP_I2C0_8,
+                       PINCTRL_GRP_SWDT0_5_CLK,
+                       PINCTRL_GRP_SPI1_2_SS1,
+                       PINCTRL_GRP_TTC2_4_CLK,
+                       PINCTRL_GRP_UART0_8,
+                       PINCTRL_GRP_TRACE0_1,
+               },
+       },
+       [PINCTRL_PIN_35] = {
+               .groups = {
+                       PINCTRL_GRP_ETHERNET0_0,
+                       PINCTRL_GRP_PCIE0_5,
+                       PINCTRL_GRP_PMU0_9,
+                       PINCTRL_GRP_TESTSCAN0_0,
+                       PINCTRL_GRP_DPAUX0_2,
+                       PINCTRL_GRP_GPIO0_35,
+                       PINCTRL_GRP_CAN0_8,
+                       PINCTRL_GRP_I2C0_8,
+                       PINCTRL_GRP_SWDT0_5_RST,
+                       PINCTRL_GRP_SPI1_2_SS0,
+                       PINCTRL_GRP_TTC2_4_WAV,
+                       PINCTRL_GRP_UART0_8,
+                       PINCTRL_GRP_TRACE0_1,
+               },
+       },
+       [PINCTRL_PIN_36] = {
+               .groups = {
+                       PINCTRL_GRP_ETHERNET0_0,
+                       PINCTRL_GRP_PCIE0_6,
+                       PINCTRL_GRP_PMU0_10,
+                       PINCTRL_GRP_TESTSCAN0_0,
+                       PINCTRL_GRP_DPAUX0_3,
+                       PINCTRL_GRP_GPIO0_36,
+                       PINCTRL_GRP_CAN1_9,
+                       PINCTRL_GRP_I2C1_9,
+                       PINCTRL_GRP_SWDT1_6_CLK,
+                       PINCTRL_GRP_SPI1_2,
+                       PINCTRL_GRP_TTC1_4_CLK,
+                       PINCTRL_GRP_UART1_9,
+                       PINCTRL_GRP_TRACE0_1,
+               },
+       },
+       [PINCTRL_PIN_37] = {
+               .groups = {
+                       PINCTRL_GRP_ETHERNET0_0,
+                       PINCTRL_GRP_PCIE0_7,
+                       PINCTRL_GRP_PMU0_11,
+                       PINCTRL_GRP_TESTSCAN0_0,
+                       PINCTRL_GRP_DPAUX0_3,
+                       PINCTRL_GRP_GPIO0_37,
+                       PINCTRL_GRP_CAN1_9,
+                       PINCTRL_GRP_I2C1_9,
+                       PINCTRL_GRP_SWDT1_6_RST,
+                       PINCTRL_GRP_SPI1_2,
+                       PINCTRL_GRP_TTC1_4_WAV,
+                       PINCTRL_GRP_UART1_9,
+                       PINCTRL_GRP_TRACE0_1,
+               },
+       },
+       [PINCTRL_PIN_38] = {
+               .groups = {
+                       PINCTRL_GRP_ETHERNET1_0,
+                       PINCTRL_GRP_RESERVED,
+                       PINCTRL_GRP_SDIO0_1BIT_1_7,
+                       PINCTRL_GRP_RESERVED,
+                       PINCTRL_GRP_RESERVED,
+                       PINCTRL_GRP_GPIO0_38,
+                       PINCTRL_GRP_CAN0_9,
+                       PINCTRL_GRP_I2C0_9,
+                       PINCTRL_GRP_PJTAG0_3,
+                       PINCTRL_GRP_SPI0_3,
+                       PINCTRL_GRP_TTC0_4_CLK,
+                       PINCTRL_GRP_UART0_9,
+                       PINCTRL_GRP_TRACE0_1_CLK,
+               },
+       },
+       [PINCTRL_PIN_39] = {
+               .groups = {
+                       PINCTRL_GRP_ETHERNET1_0,
+                       PINCTRL_GRP_RESERVED,
+                       PINCTRL_GRP_SDIO0_1_CD,
+                       PINCTRL_GRP_SDIO1_1BIT_0_0,
+                       PINCTRL_GRP_RESERVED,
+                       PINCTRL_GRP_GPIO0_39,
+                       PINCTRL_GRP_CAN0_9,
+                       PINCTRL_GRP_I2C0_9,
+                       PINCTRL_GRP_PJTAG0_3,
+                       PINCTRL_GRP_SPI0_3_SS2,
+                       PINCTRL_GRP_TTC0_4_WAV,
+                       PINCTRL_GRP_UART0_9,
+                       PINCTRL_GRP_TRACE0_1_CLK,
+               },
+       },
+       [PINCTRL_PIN_40] = {
+               .groups = {
+                       PINCTRL_GRP_ETHERNET1_0,
+                       PINCTRL_GRP_RESERVED,
+                       PINCTRL_GRP_SDIO0_1BIT_1_7,
+                       PINCTRL_GRP_SDIO1_1BIT_0_1,
+                       PINCTRL_GRP_RESERVED,
+                       PINCTRL_GRP_GPIO0_40,
+                       PINCTRL_GRP_CAN1_10,
+                       PINCTRL_GRP_I2C1_10,
+                       PINCTRL_GRP_PJTAG0_3,
+                       PINCTRL_GRP_SPI0_3_SS1,
+                       PINCTRL_GRP_TTC3_5_CLK,
+                       PINCTRL_GRP_UART1_10,
+                       PINCTRL_GRP_TRACE0_1,
+               },
+       },
+       [PINCTRL_PIN_41] = {
+               .groups = {
+                       PINCTRL_GRP_ETHERNET1_0,
+                       PINCTRL_GRP_RESERVED,
+                       PINCTRL_GRP_SDIO0_1BIT_1_0,
+                       PINCTRL_GRP_SDIO1_1BIT_0_2,
+                       PINCTRL_GRP_RESERVED,
+                       PINCTRL_GRP_GPIO0_41,
+                       PINCTRL_GRP_CAN1_10,
+                       PINCTRL_GRP_I2C1_10,
+                       PINCTRL_GRP_PJTAG0_3,
+                       PINCTRL_GRP_SPI0_3_SS0,
+                       PINCTRL_GRP_TTC3_5_WAV,
+                       PINCTRL_GRP_UART1_10,
+                       PINCTRL_GRP_TRACE0_1,
+               },
+       },
+       [PINCTRL_PIN_42] = {
+               .groups = {
+                       PINCTRL_GRP_ETHERNET1_0,
+                       PINCTRL_GRP_RESERVED,
+                       PINCTRL_GRP_SDIO0_1BIT_1_1,
+                       PINCTRL_GRP_SDIO1_1BIT_0_3,
+                       PINCTRL_GRP_RESERVED,
+                       PINCTRL_GRP_GPIO0_42,
+                       PINCTRL_GRP_CAN0_10,
+                       PINCTRL_GRP_I2C0_10,
+                       PINCTRL_GRP_SWDT0_6_CLK,
+                       PINCTRL_GRP_SPI0_3,
+                       PINCTRL_GRP_TTC2_5_CLK,
+                       PINCTRL_GRP_UART0_10,
+                       PINCTRL_GRP_TRACE0_1,
+               },
+       },
+       [PINCTRL_PIN_43] = {
+               .groups = {
+                       PINCTRL_GRP_ETHERNET1_0,
+                       PINCTRL_GRP_RESERVED,
+                       PINCTRL_GRP_SDIO0_1BIT_1_2,
+                       PINCTRL_GRP_SDIO1_0_PC,
+                       PINCTRL_GRP_RESERVED,
+                       PINCTRL_GRP_GPIO0_43,
+                       PINCTRL_GRP_CAN0_10,
+                       PINCTRL_GRP_I2C0_10,
+                       PINCTRL_GRP_SWDT0_6_RST,
+                       PINCTRL_GRP_SPI0_3,
+                       PINCTRL_GRP_TTC2_5_WAV,
+                       PINCTRL_GRP_UART0_10,
+                       PINCTRL_GRP_TRACE0_1,
+               },
+       },
+       [PINCTRL_PIN_44] = {
+               .groups = {
+                       PINCTRL_GRP_ETHERNET1_0,
+                       PINCTRL_GRP_RESERVED,
+                       PINCTRL_GRP_SDIO0_1BIT_1_3,
+                       PINCTRL_GRP_SDIO1_0_WP,
+                       PINCTRL_GRP_RESERVED,
+                       PINCTRL_GRP_GPIO0_44,
+                       PINCTRL_GRP_CAN1_11,
+                       PINCTRL_GRP_I2C1_11,
+                       PINCTRL_GRP_SWDT1_7_CLK,
+                       PINCTRL_GRP_SPI1_3,
+                       PINCTRL_GRP_TTC1_5_CLK,
+                       PINCTRL_GRP_UART1_11,
+                       PINCTRL_GRP_RESERVED,
+               },
+       },
+       [PINCTRL_PIN_45] = {
+               .groups = {
+                       PINCTRL_GRP_ETHERNET1_0,
+                       PINCTRL_GRP_RESERVED,
+                       PINCTRL_GRP_SDIO0_1BIT_1_4,
+                       PINCTRL_GRP_SDIO1_0_CD,
+                       PINCTRL_GRP_RESERVED,
+                       PINCTRL_GRP_GPIO0_45,
+                       PINCTRL_GRP_CAN1_11,
+                       PINCTRL_GRP_I2C1_11,
+                       PINCTRL_GRP_SWDT1_7_RST,
+                       PINCTRL_GRP_SPI1_3_SS2,
+                       PINCTRL_GRP_TTC1_5_WAV,
+                       PINCTRL_GRP_UART1_11,
+                       PINCTRL_GRP_RESERVED,
+               },
+       },
+       [PINCTRL_PIN_46] = {
+               .groups = {
+                       PINCTRL_GRP_ETHERNET1_0,
+                       PINCTRL_GRP_RESERVED,
+                       PINCTRL_GRP_SDIO0_1BIT_1_5,
+                       PINCTRL_GRP_SDIO1_1BIT_0_4,
+                       PINCTRL_GRP_RESERVED,
+                       PINCTRL_GRP_GPIO0_46,
+                       PINCTRL_GRP_CAN0_11,
+                       PINCTRL_GRP_I2C0_11,
+                       PINCTRL_GRP_SWDT0_7_CLK,
+                       PINCTRL_GRP_SPI1_3_SS1,
+                       PINCTRL_GRP_TTC0_5_CLK,
+                       PINCTRL_GRP_UART0_11,
+                       PINCTRL_GRP_RESERVED,
+               },
+       },
+       [PINCTRL_PIN_47] = {
+               .groups = {
+                       PINCTRL_GRP_ETHERNET1_0,
+                       PINCTRL_GRP_RESERVED,
+                       PINCTRL_GRP_SDIO0_1BIT_1_6,
+                       PINCTRL_GRP_SDIO1_1BIT_0_5,
+                       PINCTRL_GRP_RESERVED,
+                       PINCTRL_GRP_GPIO0_47,
+                       PINCTRL_GRP_CAN0_11,
+                       PINCTRL_GRP_I2C0_11,
+                       PINCTRL_GRP_SWDT0_7_RST,
+                       PINCTRL_GRP_SPI1_3_SS0,
+                       PINCTRL_GRP_TTC0_5_WAV,
+                       PINCTRL_GRP_UART0_11,
+                       PINCTRL_GRP_RESERVED,
+               },
+       },
+       [PINCTRL_PIN_48] = {
+               .groups = {
+                       PINCTRL_GRP_ETHERNET1_0,
+                       PINCTRL_GRP_RESERVED,
+                       PINCTRL_GRP_SDIO0_1BIT_1_7,
+                       PINCTRL_GRP_SDIO1_1BIT_0_6,
+                       PINCTRL_GRP_RESERVED,
+                       PINCTRL_GRP_GPIO0_48,
+                       PINCTRL_GRP_CAN1_12,
+                       PINCTRL_GRP_I2C1_12,
+                       PINCTRL_GRP_SWDT1_8_CLK,
+                       PINCTRL_GRP_SPI1_3,
+                       PINCTRL_GRP_TTC3_6_CLK,
+                       PINCTRL_GRP_UART1_12,
+                       PINCTRL_GRP_RESERVED,
+               },
+       },
+       [PINCTRL_PIN_49] = {
+               .groups = {
+                       PINCTRL_GRP_ETHERNET1_0,
+                       PINCTRL_GRP_RESERVED,
+                       PINCTRL_GRP_SDIO0_1_PC,
+                       PINCTRL_GRP_SDIO1_1BIT_0_7,
+                       PINCTRL_GRP_RESERVED,
+                       PINCTRL_GRP_GPIO0_49,
+                       PINCTRL_GRP_CAN1_12,
+                       PINCTRL_GRP_I2C1_12,
+                       PINCTRL_GRP_SWDT1_8_RST,
+                       PINCTRL_GRP_SPI1_3,
+                       PINCTRL_GRP_TTC3_6_WAV,
+                       PINCTRL_GRP_UART1_12,
+                       PINCTRL_GRP_RESERVED,
+               },
+       },
+       [PINCTRL_PIN_50] = {
+               .groups = {
+                       PINCTRL_GRP_GEMTSU0_1,
+                       PINCTRL_GRP_RESERVED,
+                       PINCTRL_GRP_SDIO0_1_WP,
+                       PINCTRL_GRP_SDIO1_1BIT_0_7,
+                       PINCTRL_GRP_RESERVED,
+                       PINCTRL_GRP_GPIO0_50,
+                       PINCTRL_GRP_CAN0_12,
+                       PINCTRL_GRP_I2C0_12,
+                       PINCTRL_GRP_SWDT0_8_CLK,
+                       PINCTRL_GRP_MDIO1_0,
+                       PINCTRL_GRP_TTC2_6_CLK,
+                       PINCTRL_GRP_UART0_12,
+                       PINCTRL_GRP_RESERVED,
+               },
+       },
+       [PINCTRL_PIN_51] = {
+               .groups = {
+                       PINCTRL_GRP_GEMTSU0_2,
+                       PINCTRL_GRP_RESERVED,
+                       PINCTRL_GRP_RESERVED,
+                       PINCTRL_GRP_SDIO1_1BIT_0_7,
+                       PINCTRL_GRP_RESERVED,
+                       PINCTRL_GRP_GPIO0_51,
+                       PINCTRL_GRP_CAN0_12,
+                       PINCTRL_GRP_I2C0_12,
+                       PINCTRL_GRP_SWDT0_8_RST,
+                       PINCTRL_GRP_MDIO1_0,
+                       PINCTRL_GRP_TTC2_6_WAV,
+                       PINCTRL_GRP_UART0_12,
+                       PINCTRL_GRP_RESERVED,
+               },
+       },
+       [PINCTRL_PIN_52] = {
+               .groups = {
+                       PINCTRL_GRP_ETHERNET2_0,
+                       PINCTRL_GRP_USB0_0,
+                       PINCTRL_GRP_RESERVED,
+                       PINCTRL_GRP_RESERVED,
+                       PINCTRL_GRP_RESERVED,
+                       PINCTRL_GRP_GPIO0_52,
+                       PINCTRL_GRP_CAN1_13,
+                       PINCTRL_GRP_I2C1_13,
+                       PINCTRL_GRP_PJTAG0_4,
+                       PINCTRL_GRP_SPI0_4,
+                       PINCTRL_GRP_TTC1_6_CLK,
+                       PINCTRL_GRP_UART1_13,
+                       PINCTRL_GRP_TRACE0_2_CLK,
+               },
+       },
+       [PINCTRL_PIN_53] = {
+               .groups = {
+                       PINCTRL_GRP_ETHERNET2_0,
+                       PINCTRL_GRP_USB0_0,
+                       PINCTRL_GRP_RESERVED,
+                       PINCTRL_GRP_RESERVED,
+                       PINCTRL_GRP_RESERVED,
+                       PINCTRL_GRP_GPIO0_53,
+                       PINCTRL_GRP_CAN1_13,
+                       PINCTRL_GRP_I2C1_13,
+                       PINCTRL_GRP_PJTAG0_4,
+                       PINCTRL_GRP_SPI0_4_SS2,
+                       PINCTRL_GRP_TTC1_6_WAV,
+                       PINCTRL_GRP_UART1_13,
+                       PINCTRL_GRP_TRACE0_2_CLK,
+               },
+       },
+       [PINCTRL_PIN_54] = {
+               .groups = {
+                       PINCTRL_GRP_ETHERNET2_0,
+                       PINCTRL_GRP_USB0_0,
+                       PINCTRL_GRP_RESERVED,
+                       PINCTRL_GRP_RESERVED,
+                       PINCTRL_GRP_RESERVED,
+                       PINCTRL_GRP_GPIO0_54,
+                       PINCTRL_GRP_CAN0_13,
+                       PINCTRL_GRP_I2C0_13,
+                       PINCTRL_GRP_PJTAG0_4,
+                       PINCTRL_GRP_SPI0_4_SS1,
+                       PINCTRL_GRP_TTC0_6_CLK,
+                       PINCTRL_GRP_UART0_13,
+                       PINCTRL_GRP_TRACE0_2,
+               },
+       },
+       [PINCTRL_PIN_55] = {
+               .groups = {
+                       PINCTRL_GRP_ETHERNET2_0,
+                       PINCTRL_GRP_USB0_0,
+                       PINCTRL_GRP_RESERVED,
+                       PINCTRL_GRP_RESERVED,
+                       PINCTRL_GRP_RESERVED,
+                       PINCTRL_GRP_GPIO0_55,
+                       PINCTRL_GRP_CAN0_13,
+                       PINCTRL_GRP_I2C0_13,
+                       PINCTRL_GRP_PJTAG0_4,
+                       PINCTRL_GRP_SPI0_4_SS0,
+                       PINCTRL_GRP_TTC0_6_WAV,
+                       PINCTRL_GRP_UART0_13,
+                       PINCTRL_GRP_TRACE0_2,
+               },
+       },
+       [PINCTRL_PIN_56] = {
+               .groups = {
+                       PINCTRL_GRP_ETHERNET2_0,
+                       PINCTRL_GRP_USB0_0,
+                       PINCTRL_GRP_RESERVED,
+                       PINCTRL_GRP_RESERVED,
+                       PINCTRL_GRP_RESERVED,
+                       PINCTRL_GRP_GPIO0_56,
+                       PINCTRL_GRP_CAN1_14,
+                       PINCTRL_GRP_I2C1_14,
+                       PINCTRL_GRP_SWDT1_9_CLK,
+                       PINCTRL_GRP_SPI0_4,
+                       PINCTRL_GRP_TTC3_7_CLK,
+                       PINCTRL_GRP_UART1_14,
+                       PINCTRL_GRP_TRACE0_2,
+               },
+       },
+       [PINCTRL_PIN_57] = {
+               .groups = {
+                       PINCTRL_GRP_ETHERNET2_0,
+                       PINCTRL_GRP_USB0_0,
+                       PINCTRL_GRP_RESERVED,
+                       PINCTRL_GRP_RESERVED,
+                       PINCTRL_GRP_RESERVED,
+                       PINCTRL_GRP_GPIO0_57,
+                       PINCTRL_GRP_CAN1_14,
+                       PINCTRL_GRP_I2C1_14,
+                       PINCTRL_GRP_SWDT1_9_RST,
+                       PINCTRL_GRP_SPI0_4,
+                       PINCTRL_GRP_TTC3_7_WAV,
+                       PINCTRL_GRP_UART1_14,
+                       PINCTRL_GRP_TRACE0_2,
+               },
+       },
+       [PINCTRL_PIN_58] = {
+               .groups = {
+                       PINCTRL_GRP_ETHERNET2_0,
+                       PINCTRL_GRP_USB0_0,
+                       PINCTRL_GRP_RESERVED,
+                       PINCTRL_GRP_RESERVED,
+                       PINCTRL_GRP_RESERVED,
+                       PINCTRL_GRP_GPIO0_58,
+                       PINCTRL_GRP_CAN0_14,
+                       PINCTRL_GRP_I2C0_14,
+                       PINCTRL_GRP_PJTAG0_5,
+                       PINCTRL_GRP_SPI1_4,
+                       PINCTRL_GRP_TTC2_7_CLK,
+                       PINCTRL_GRP_UART0_14,
+                       PINCTRL_GRP_TRACE0_2,
+               },
+       },
+       [PINCTRL_PIN_59] = {
+               .groups = {
+                       PINCTRL_GRP_ETHERNET2_0,
+                       PINCTRL_GRP_USB0_0,
+                       PINCTRL_GRP_RESERVED,
+                       PINCTRL_GRP_RESERVED,
+                       PINCTRL_GRP_RESERVED,
+                       PINCTRL_GRP_GPIO0_59,
+                       PINCTRL_GRP_CAN0_14,
+                       PINCTRL_GRP_I2C0_14,
+                       PINCTRL_GRP_PJTAG0_5,
+                       PINCTRL_GRP_SPI1_4_SS2,
+                       PINCTRL_GRP_TTC2_7_WAV,
+                       PINCTRL_GRP_UART0_14,
+                       PINCTRL_GRP_TRACE0_2,
+               },
+       },
+       [PINCTRL_PIN_60] = {
+               .groups = {
+                       PINCTRL_GRP_ETHERNET2_0,
+                       PINCTRL_GRP_USB0_0,
+                       PINCTRL_GRP_RESERVED,
+                       PINCTRL_GRP_RESERVED,
+                       PINCTRL_GRP_RESERVED,
+                       PINCTRL_GRP_GPIO0_60,
+                       PINCTRL_GRP_CAN1_15,
+                       PINCTRL_GRP_I2C1_15,
+                       PINCTRL_GRP_PJTAG0_5,
+                       PINCTRL_GRP_SPI1_4_SS1,
+                       PINCTRL_GRP_TTC1_7_CLK,
+                       PINCTRL_GRP_UART1_15,
+                       PINCTRL_GRP_TRACE0_2,
+               },
+       },
+       [PINCTRL_PIN_61] = {
+               .groups = {
+                       PINCTRL_GRP_ETHERNET2_0,
+                       PINCTRL_GRP_USB0_0,
+                       PINCTRL_GRP_RESERVED,
+                       PINCTRL_GRP_RESERVED,
+                       PINCTRL_GRP_RESERVED,
+                       PINCTRL_GRP_GPIO0_61,
+                       PINCTRL_GRP_CAN1_15,
+                       PINCTRL_GRP_I2C1_15,
+                       PINCTRL_GRP_PJTAG0_5,
+                       PINCTRL_GRP_SPI1_4_SS0,
+                       PINCTRL_GRP_TTC1_7_WAV,
+                       PINCTRL_GRP_UART1_15,
+                       PINCTRL_GRP_TRACE0_2,
+               },
+       },
+       [PINCTRL_PIN_62] = {
+               .groups = {
+                       PINCTRL_GRP_ETHERNET2_0,
+                       PINCTRL_GRP_USB0_0,
+                       PINCTRL_GRP_RESERVED,
+                       PINCTRL_GRP_RESERVED,
+                       PINCTRL_GRP_RESERVED,
+                       PINCTRL_GRP_GPIO0_62,
+                       PINCTRL_GRP_CAN0_15,
+                       PINCTRL_GRP_I2C0_15,
+                       PINCTRL_GRP_SWDT0_9_CLK,
+                       PINCTRL_GRP_SPI1_4,
+                       PINCTRL_GRP_TTC0_7_CLK,
+                       PINCTRL_GRP_UART0_15,
+                       PINCTRL_GRP_TRACE0_2,
+               },
+       },
+       [PINCTRL_PIN_63] = {
+               .groups = {
+                       PINCTRL_GRP_ETHERNET2_0,
+                       PINCTRL_GRP_USB0_0,
+                       PINCTRL_GRP_RESERVED,
+                       PINCTRL_GRP_RESERVED,
+                       PINCTRL_GRP_RESERVED,
+                       PINCTRL_GRP_GPIO0_63,
+                       PINCTRL_GRP_CAN0_15,
+                       PINCTRL_GRP_I2C0_15,
+                       PINCTRL_GRP_SWDT0_9_RST,
+                       PINCTRL_GRP_SPI1_4,
+                       PINCTRL_GRP_TTC0_7_WAV,
+                       PINCTRL_GRP_UART0_15,
+                       PINCTRL_GRP_TRACE0_2,
+               },
+       },
+       [PINCTRL_PIN_64] = {
+               .groups = {
+                       PINCTRL_GRP_ETHERNET3_0,
+                       PINCTRL_GRP_USB1_0,
+                       PINCTRL_GRP_SDIO0_1BIT_2_7,
+                       PINCTRL_GRP_RESERVED,
+                       PINCTRL_GRP_RESERVED,
+                       PINCTRL_GRP_GPIO0_64,
+                       PINCTRL_GRP_CAN1_16,
+                       PINCTRL_GRP_I2C1_16,
+                       PINCTRL_GRP_SWDT1_10_CLK,
+                       PINCTRL_GRP_SPI0_5,
+                       PINCTRL_GRP_TTC3_8_CLK,
+                       PINCTRL_GRP_UART1_16,
+                       PINCTRL_GRP_TRACE0_2,
+               },
+       },
+       [PINCTRL_PIN_65] = {
+               .groups = {
+                       PINCTRL_GRP_ETHERNET3_0,
+                       PINCTRL_GRP_USB1_0,
+                       PINCTRL_GRP_SDIO0_2_CD,
+                       PINCTRL_GRP_RESERVED,
+                       PINCTRL_GRP_RESERVED,
+                       PINCTRL_GRP_GPIO0_65,
+                       PINCTRL_GRP_CAN1_16,
+                       PINCTRL_GRP_I2C1_16,
+                       PINCTRL_GRP_SWDT1_10_RST,
+                       PINCTRL_GRP_SPI0_5_SS2,
+                       PINCTRL_GRP_TTC3_8_WAV,
+                       PINCTRL_GRP_UART1_16,
+                       PINCTRL_GRP_TRACE0_2,
+               },
+       },
+       [PINCTRL_PIN_66] = {
+               .groups = {
+                       PINCTRL_GRP_ETHERNET3_0,
+                       PINCTRL_GRP_USB1_0,
+                       PINCTRL_GRP_SDIO0_1BIT_2_7,
+                       PINCTRL_GRP_RESERVED,
+                       PINCTRL_GRP_RESERVED,
+                       PINCTRL_GRP_GPIO0_66,
+                       PINCTRL_GRP_CAN0_16,
+                       PINCTRL_GRP_I2C0_16,
+                       PINCTRL_GRP_SWDT0_10_CLK,
+                       PINCTRL_GRP_SPI0_5_SS1,
+                       PINCTRL_GRP_TTC2_8_CLK,
+                       PINCTRL_GRP_UART0_16,
+                       PINCTRL_GRP_TRACE0_2,
+               },
+       },
+       [PINCTRL_PIN_67] = {
+               .groups = {
+                       PINCTRL_GRP_ETHERNET3_0,
+                       PINCTRL_GRP_USB1_0,
+                       PINCTRL_GRP_SDIO0_1BIT_2_0,
+                       PINCTRL_GRP_RESERVED,
+                       PINCTRL_GRP_RESERVED,
+                       PINCTRL_GRP_GPIO0_67,
+                       PINCTRL_GRP_CAN0_16,
+                       PINCTRL_GRP_I2C0_16,
+                       PINCTRL_GRP_SWDT0_10_RST,
+                       PINCTRL_GRP_SPI0_5_SS0,
+                       PINCTRL_GRP_TTC2_8_WAV,
+                       PINCTRL_GRP_UART0_16,
+                       PINCTRL_GRP_TRACE0_2,
+               },
+       },
+       [PINCTRL_PIN_68] = {
+               .groups = {
+                       PINCTRL_GRP_ETHERNET3_0,
+                       PINCTRL_GRP_USB1_0,
+                       PINCTRL_GRP_SDIO0_1BIT_2_1,
+                       PINCTRL_GRP_RESERVED,
+                       PINCTRL_GRP_RESERVED,
+                       PINCTRL_GRP_GPIO0_68,
+                       PINCTRL_GRP_CAN1_17,
+                       PINCTRL_GRP_I2C1_17,
+                       PINCTRL_GRP_SWDT1_11_CLK,
+                       PINCTRL_GRP_SPI0_5,
+                       PINCTRL_GRP_TTC1_8_CLK,
+                       PINCTRL_GRP_UART1_17,
+                       PINCTRL_GRP_TRACE0_2,
+               },
+       },
+       [PINCTRL_PIN_69] = {
+               .groups = {
+                       PINCTRL_GRP_ETHERNET3_0,
+                       PINCTRL_GRP_USB1_0,
+                       PINCTRL_GRP_SDIO0_1BIT_2_2,
+                       PINCTRL_GRP_SDIO1_1_WP,
+                       PINCTRL_GRP_RESERVED,
+                       PINCTRL_GRP_GPIO0_69,
+                       PINCTRL_GRP_CAN1_17,
+                       PINCTRL_GRP_I2C1_17,
+                       PINCTRL_GRP_SWDT1_11_RST,
+                       PINCTRL_GRP_SPI0_5,
+                       PINCTRL_GRP_TTC1_8_WAV,
+                       PINCTRL_GRP_UART1_17,
+                       PINCTRL_GRP_TRACE0_2,
+               },
+       },
+       [PINCTRL_PIN_70] = {
+               .groups = {
+                       PINCTRL_GRP_ETHERNET3_0,
+                       PINCTRL_GRP_USB1_0,
+                       PINCTRL_GRP_SDIO0_1BIT_2_3,
+                       PINCTRL_GRP_SDIO1_1_PC,
+                       PINCTRL_GRP_RESERVED,
+                       PINCTRL_GRP_GPIO0_70,
+                       PINCTRL_GRP_CAN0_17,
+                       PINCTRL_GRP_I2C0_17,
+                       PINCTRL_GRP_SWDT0_11_CLK,
+                       PINCTRL_GRP_SPI1_5,
+                       PINCTRL_GRP_TTC0_8_CLK,
+                       PINCTRL_GRP_UART0_17,
+                       PINCTRL_GRP_RESERVED,
+               },
+       },
+       [PINCTRL_PIN_71] = {
+               .groups = {
+                       PINCTRL_GRP_ETHERNET3_0,
+                       PINCTRL_GRP_USB1_0,
+                       PINCTRL_GRP_SDIO0_1BIT_2_4,
+                       PINCTRL_GRP_SDIO1_1BIT_1_0,
+                       PINCTRL_GRP_RESERVED,
+                       PINCTRL_GRP_GPIO0_71,
+                       PINCTRL_GRP_CAN0_17,
+                       PINCTRL_GRP_I2C0_17,
+                       PINCTRL_GRP_SWDT0_11_RST,
+                       PINCTRL_GRP_SPI1_5_SS2,
+                       PINCTRL_GRP_TTC0_8_WAV,
+                       PINCTRL_GRP_UART0_17,
+                       PINCTRL_GRP_RESERVED,
+               },
+       },
+       [PINCTRL_PIN_72] = {
+               .groups = {
+                       PINCTRL_GRP_ETHERNET3_0,
+                       PINCTRL_GRP_USB1_0,
+                       PINCTRL_GRP_SDIO0_1BIT_2_5,
+                       PINCTRL_GRP_SDIO1_1BIT_1_1,
+                       PINCTRL_GRP_RESERVED,
+                       PINCTRL_GRP_GPIO0_72,
+                       PINCTRL_GRP_CAN1_18,
+                       PINCTRL_GRP_I2C1_18,
+                       PINCTRL_GRP_SWDT1_12_CLK,
+                       PINCTRL_GRP_SPI1_5_SS1,
+                       PINCTRL_GRP_RESERVED,
+                       PINCTRL_GRP_UART1_18,
+                       PINCTRL_GRP_RESERVED,
+               },
+       },
+       [PINCTRL_PIN_73] = {
+               .groups = {
+                       PINCTRL_GRP_ETHERNET3_0,
+                       PINCTRL_GRP_USB1_0,
+                       PINCTRL_GRP_SDIO0_1BIT_2_6,
+                       PINCTRL_GRP_SDIO1_1BIT_1_2,
+                       PINCTRL_GRP_RESERVED,
+                       PINCTRL_GRP_GPIO0_73,
+                       PINCTRL_GRP_CAN1_18,
+                       PINCTRL_GRP_I2C1_18,
+                       PINCTRL_GRP_SWDT1_12_RST,
+                       PINCTRL_GRP_SPI1_5_SS0,
+                       PINCTRL_GRP_RESERVED,
+                       PINCTRL_GRP_UART1_18,
+                       PINCTRL_GRP_RESERVED,
+               },
+       },
+       [PINCTRL_PIN_74] = {
+               .groups = {
+                       PINCTRL_GRP_ETHERNET3_0,
+                       PINCTRL_GRP_USB1_0,
+                       PINCTRL_GRP_SDIO0_1BIT_2_7,
+                       PINCTRL_GRP_SDIO1_1BIT_1_3,
+                       PINCTRL_GRP_RESERVED,
+                       PINCTRL_GRP_GPIO0_74,
+                       PINCTRL_GRP_CAN0_18,
+                       PINCTRL_GRP_I2C0_18,
+                       PINCTRL_GRP_SWDT0_12_CLK,
+                       PINCTRL_GRP_SPI1_5,
+                       PINCTRL_GRP_RESERVED,
+                       PINCTRL_GRP_UART0_18,
+                       PINCTRL_GRP_RESERVED,
+               },
+       },
+       [PINCTRL_PIN_75] = {
+               .groups = {
+                       PINCTRL_GRP_ETHERNET3_0,
+                       PINCTRL_GRP_USB1_0,
+                       PINCTRL_GRP_SDIO0_2_PC,
+                       PINCTRL_GRP_SDIO1_1BIT_1_3,
+                       PINCTRL_GRP_RESERVED,
+                       PINCTRL_GRP_GPIO0_75,
+                       PINCTRL_GRP_CAN0_18,
+                       PINCTRL_GRP_I2C0_18,
+                       PINCTRL_GRP_SWDT0_12_RST,
+                       PINCTRL_GRP_SPI1_5,
+                       PINCTRL_GRP_RESERVED,
+                       PINCTRL_GRP_UART0_18,
+                       PINCTRL_GRP_RESERVED,
+               },
+       },
+       [PINCTRL_PIN_76] = {
+               .groups = {
+                       PINCTRL_GRP_RESERVED,
+                       PINCTRL_GRP_RESERVED,
+                       PINCTRL_GRP_SDIO0_2_WP,
+                       PINCTRL_GRP_SDIO1_1BIT_1_3,
+                       PINCTRL_GRP_RESERVED,
+                       PINCTRL_GRP_GPIO0_76,
+                       PINCTRL_GRP_CAN1_19,
+                       PINCTRL_GRP_I2C1_19,
+                       PINCTRL_GRP_MDIO0_0,
+                       PINCTRL_GRP_MDIO1_1,
+                       PINCTRL_GRP_MDIO2_0,
+                       PINCTRL_GRP_MDIO3_0,
+                       PINCTRL_GRP_RESERVED,
+               },
+       },
+       [PINCTRL_PIN_77] = {
+               .groups = {
+                       PINCTRL_GRP_RESERVED,
+                       PINCTRL_GRP_RESERVED,
+                       PINCTRL_GRP_RESERVED,
+                       PINCTRL_GRP_SDIO1_1_CD,
+                       PINCTRL_GRP_RESERVED,
+                       PINCTRL_GRP_GPIO0_77,
+                       PINCTRL_GRP_CAN1_19,
+                       PINCTRL_GRP_I2C1_19,
+                       PINCTRL_GRP_MDIO0_0,
+                       PINCTRL_GRP_MDIO1_1,
+                       PINCTRL_GRP_MDIO2_0,
+                       PINCTRL_GRP_MDIO3_0,
+                       PINCTRL_GRP_RESERVED,
+               },
+       },
+};
+
+/**
+ * pm_api_pinctrl_get_num_pins() - PM call to request number of pins
+ * @npins      Number of pins
+ *
+ * This function is used by master to get number of pins
+ *
+ * @return     Returns success.
+ */
+enum pm_ret_status pm_api_pinctrl_get_num_pins(unsigned int *npins)
+{
+       *npins = MAX_PIN;
+
+       return PM_RET_SUCCESS;
+}
+
+/**
+ * pm_api_pinctrl_get_num_functions() - PM call to request number of functions
+ * @nfuncs     Number of functions
+ *
+ * This function is used by master to get number of functions
+ *
+ * @return     Returns success.
+ */
+enum pm_ret_status pm_api_pinctrl_get_num_functions(unsigned int *nfuncs)
+{
+       *nfuncs = MAX_FUNCTION;
+
+       return PM_RET_SUCCESS;
+}
+
+/**
+ * pm_api_pinctrl_get_num_func_groups() - PM call to request number of
+ *                                       function groups
+ * @fid                Function Id
+ * @ngroups    Number of function groups
+ *
+ * This function is used by master to get number of function groups
+ *
+ * @return     Returns success.
+ */
+enum pm_ret_status pm_api_pinctrl_get_num_func_groups(unsigned int fid,
+                                                     unsigned int *ngroups)
+{
+       int i = 0;
+       uint16_t *grps;
+
+       if (fid >= MAX_FUNCTION)
+               return PM_RET_ERROR_ARGS;
+
+       *ngroups = 0;
+
+       grps = *pinctrl_functions[fid].groups;
+       if (!grps)
+               return PM_RET_SUCCESS;
+
+       while (grps[i++] != (uint16_t)END_OF_GROUPS)
+               (*ngroups)++;
+
+       return PM_RET_SUCCESS;
+}
+
+/**
+ * pm_api_pinctrl_get_function_name() - PM call to request a function name
+ * @fid                Function ID
+ * @name       Name of function (max 16 bytes)
+ *
+ * This function is used by master to get name of function specified
+ * by given function ID.
+ *
+ * @return     Returns success. In case of error, name data is 0.
+ */
+enum pm_ret_status pm_api_pinctrl_get_function_name(unsigned int fid,
+                                                   char *name)
+{
+       if (fid >= MAX_FUNCTION)
+               memcpy(name, END_OF_FUNCTION, FUNCTION_NAME_LEN);
+       else
+               memcpy(name, pinctrl_functions[fid].name, FUNCTION_NAME_LEN);
+
+       return PM_RET_SUCCESS;
+}
+
+/**
+ * pm_api_pinctrl_get_function_groups() - PM call to request first 6 function
+ *                                       groups of function Id
+ * @fid                Function ID
+ * @index      Index of next function groups
+ * @groups     Function groups
+ *
+ * This function is used by master to get function groups specified
+ * by given function Id. This API will return 6 function groups with
+ * a single response. To get other function groups, master should call
+ * same API in loop with new function groups index till error is returned.
+ *
+ * E.g First call should have index 0 which will return function groups
+ * 0, 1, 2, 3, 4 and 5. Next call, index should be 6 which will return
+ * function groups 6, 7, 8, 9, 10 and 11 and so on.
+ *
+ * Return: Returns status, either success or error+reason.
+ */
+enum pm_ret_status pm_api_pinctrl_get_function_groups(unsigned int fid,
+                                                     unsigned int index,
+                                                     uint16_t *groups)
+{
+       int i;
+       uint16_t *grps;
+
+       if (fid >= MAX_FUNCTION)
+               return PM_RET_ERROR_ARGS;
+
+       memset(groups, END_OF_GROUPS, GROUPS_PAYLOAD_LEN);
+
+       grps = *pinctrl_functions[fid].groups;
+       if (!grps)
+               return PM_RET_SUCCESS;
+
+       /* Skip groups till index */
+       for (i = 0; i < index; i++)
+               if (grps[i] == (uint16_t)END_OF_GROUPS)
+                       return PM_RET_SUCCESS;
+
+       for (i = 0; i < NUM_GROUPS_PER_RESP; i++) {
+               groups[i] = grps[index + i];
+               if (groups[i] == (uint16_t)END_OF_GROUPS)
+                       break;
+       }
+
+       return PM_RET_SUCCESS;
+}
+
+/**
+ * pm_api_pinctrl_get_pin_groups() - PM call to request first 6 pin
+ *                                  groups of pin
+ * @pin                Pin
+ * @index      Index of next pin groups
+ * @groups     pin groups
+ *
+ * This function is used by master to get pin groups specified
+ * by given pin Id. This API will return 6 pin groups with
+ * a single response. To get other pin groups, master should call
+ * same API in loop with new pin groups index till error is returned.
+ *
+ * E.g First call should have index 0 which will return pin groups
+ * 0, 1, 2, 3, 4 and 5. Next call, index should be 6 which will return
+ * pin groups 6, 7, 8, 9, 10 and 11 and so on.
+ *
+ * Return: Returns status, either success or error+reason.
+ */
+enum pm_ret_status pm_api_pinctrl_get_pin_groups(unsigned int pin,
+                                                unsigned int index,
+                                                uint16_t *groups)
+{
+       int i;
+       uint16_t *grps, zeros[MAX_PIN_GROUPS] = {0};
+
+       if (pin >= MAX_PIN)
+               return PM_RET_ERROR_ARGS;
+
+       grps = zynqmp_pin_groups[pin].groups;
+
+       memset(groups, END_OF_GROUPS, GROUPS_PAYLOAD_LEN);
+
+       if (!memcmp(grps, zeros, MAX_PIN_GROUPS))
+               return PM_RET_SUCCESS;
+
+       for (i = 0; i < NUM_GROUPS_PER_RESP; i++) {
+               if ((index + i) >= MAX_PIN_GROUPS)
+                       break;
+               groups[i] = grps[index + i];
+       }
+
+       return PM_RET_SUCCESS;
+}
+
 /**
  * pm_api_pinctrl_get_function() - Read function id set for the given pin
  * @pin                Pin number
@@ -320,11 +2481,11 @@ struct pm_pinctrl_pinmux_map pinmux_maps[] = {
  * @return     Returns status, either success or error+reason
  */
 enum pm_ret_status pm_api_pinctrl_get_function(unsigned int pin,
-                                              enum pm_node_id *nid)
+                                              unsigned int *id)
 {
-       struct pm_pinctrl_pinmux_map *pinmux_map = &pinmux_maps[pin];
-       int i, ret = PM_RET_SUCCESS;
-       unsigned int reg, val;
+       int i = 0, j = 0, ret = PM_RET_SUCCESS;
+       unsigned int reg, val, gid;
+       uint16_t *grps;
 
        reg = IOU_SLCR_BASEADDR + 4 * pin;
        ret = pm_mmio_read(reg, &val);
@@ -340,8 +2501,25 @@ enum pm_ret_status pm_api_pinctrl_get_function(unsigned int pin,
        if (i == NFUNCS_PER_PIN)
                return PM_RET_ERROR_NOTSUPPORTED;
 
-       *nid = pinmux_map->funcs[i];
+       gid = zynqmp_pin_groups[pin].groups[i];
+
+       for (i = 0; i < MAX_FUNCTION; i++) {
+               grps = *pinctrl_functions[i].groups;
+               if (!grps)
+                       continue;
+               if (val != pinctrl_functions[i].regval)
+                       continue;
 
+               for (j = 0; grps[j] != (uint16_t)END_OF_GROUPS; j++) {
+                       if (gid == grps[j]) {
+                               *id = i;
+                               goto done;
+                       }
+               }
+       }
+       if (i == MAX_FUNCTION)
+               ret = PM_RET_ERROR_ARGS;
+done:
        return ret;
 }
 
@@ -355,21 +2533,33 @@ enum pm_ret_status pm_api_pinctrl_get_function(unsigned int pin,
  * @return     Returns status, either success or error+reason
  */
 enum pm_ret_status pm_api_pinctrl_set_function(unsigned int pin,
-                                              enum pm_node_id nid)
+                                              unsigned int fid)
 {
-       struct pm_pinctrl_pinmux_map *pinmux_map = &pinmux_maps[pin];
-       int i;
-       unsigned int reg, val;
+       int i = 0;
+       unsigned int reg, val, gid;
+       uint16_t *grps;
+
+       reg = IOU_SLCR_BASEADDR + 4 * pin;
+       val = pinctrl_functions[fid].regval;
 
        for (i = 0; i < NFUNCS_PER_PIN; i++)
-               if (nid == pinmux_map->funcs[i])
+               if (val == pm_pinctrl_mux[i])
                        break;
 
        if (i == NFUNCS_PER_PIN)
                return PM_RET_ERROR_NOTSUPPORTED;
 
-       reg = IOU_SLCR_BASEADDR + 4 * pin;
-       val = pm_pinctrl_mux[i];
+       gid = zynqmp_pin_groups[pin].groups[i];
+       grps = *pinctrl_functions[fid].groups;
+       if (!grps)
+               return PM_RET_ERROR_NOTSUPPORTED;
+
+       for (i = 0; grps[i] != (uint16_t)END_OF_GROUPS; i++) {
+               if (gid == grps[i])
+                       break;
+       }
+       if (gid != grps[i])
+               return PM_RET_ERROR_NOTSUPPORTED;
 
        return pm_mmio_write(reg, PINCTRL_FUNCTION_MASK, val);
 }
index 09106f6f80fc24a7ac22e291302d287430f448eb..55a485c46f1d9b3897249aaa080bb4d39a6d3492 100644 (file)
 
 #include "pm_common.h"
 
+#define FUNCTION_NAME_LEN              16
+#define GROUPS_PAYLOAD_LEN             12
+#define NUM_GROUPS_PER_RESP            6
+#define END_OF_FUNCTION                        "END_OF_FUNCTION"
+#define END_OF_GROUPS                  -1
+#define PINCTRL_GRP_RESERVED           -2
+
+enum pinctrl_fids {
+       PINCTRL_FUNC_CAN0,
+       PINCTRL_FUNC_CAN1,
+       PINCTRL_FUNC_ETHERNET0,
+       PINCTRL_FUNC_ETHERNET1,
+       PINCTRL_FUNC_ETHERNET2,
+       PINCTRL_FUNC_ETHERNET3,
+       PINCTRL_FUNC_GEMTSU0,
+       PINCTRL_FUNC_GPIO0,
+       PINCTRL_FUNC_I2C0,
+       PINCTRL_FUNC_I2C1,
+       PINCTRL_FUNC_MDIO0,
+       PINCTRL_FUNC_MDIO1,
+       PINCTRL_FUNC_MDIO2,
+       PINCTRL_FUNC_MDIO3,
+       PINCTRL_FUNC_QSPI0,
+       PINCTRL_FUNC_QSPI_FBCLK,
+       PINCTRL_FUNC_QSPI_SS,
+       PINCTRL_FUNC_SPI0,
+       PINCTRL_FUNC_SPI1,
+       PINCTRL_FUNC_SPI0_SS,
+       PINCTRL_FUNC_SPI1_SS,
+       PINCTRL_FUNC_SDIO0,
+       PINCTRL_FUNC_SDIO0_PC,
+       PINCTRL_FUNC_SDIO0_CD,
+       PINCTRL_FUNC_SDIO0_WP,
+       PINCTRL_FUNC_SDIO1,
+       PINCTRL_FUNC_SDIO1_PC,
+       PINCTRL_FUNC_SDIO1_CD,
+       PINCTRL_FUNC_SDIO1_WP,
+       PINCTRL_FUNC_NAND0,
+       PINCTRL_FUNC_NAND0_CE,
+       PINCTRL_FUNC_NAND0_RB,
+       PINCTRL_FUNC_NAND0_DQS,
+       PINCTRL_FUNC_TTC0_CLK,
+       PINCTRL_FUNC_TTC0_WAV,
+       PINCTRL_FUNC_TTC1_CLK,
+       PINCTRL_FUNC_TTC1_WAV,
+       PINCTRL_FUNC_TTC2_CLK,
+       PINCTRL_FUNC_TTC2_WAV,
+       PINCTRL_FUNC_TTC3_CLK,
+       PINCTRL_FUNC_TTC3_WAV,
+       PINCTRL_FUNC_UART0,
+       PINCTRL_FUNC_UART1,
+       PINCTRL_FUNC_USB0,
+       PINCTRL_FUNC_USB1,
+       PINCTRL_FUNC_SWDT0_CLK,
+       PINCTRL_FUNC_SWDT0_RST,
+       PINCTRL_FUNC_SWDT1_CLK,
+       PINCTRL_FUNC_SWDT1_RST,
+       PINCTRL_FUNC_PMU0,
+       PINCTRL_FUNC_PCIE0,
+       PINCTRL_FUNC_CSU0,
+       PINCTRL_FUNC_DPAUX0,
+       PINCTRL_FUNC_PJTAG0,
+       PINCTRL_FUNC_TRACE0,
+       PINCTRL_FUNC_TRACE0_CLK,
+       PINCTRL_FUNC_TESTSCAN0,
+       MAX_FUNCTION,
+};
+
+enum pinctrl_pin {
+       PINCTRL_PIN_0,
+       PINCTRL_PIN_1,
+       PINCTRL_PIN_2,
+       PINCTRL_PIN_3,
+       PINCTRL_PIN_4,
+       PINCTRL_PIN_5,
+       PINCTRL_PIN_6,
+       PINCTRL_PIN_7,
+       PINCTRL_PIN_8,
+       PINCTRL_PIN_9,
+       PINCTRL_PIN_10,
+       PINCTRL_PIN_11,
+       PINCTRL_PIN_12,
+       PINCTRL_PIN_13,
+       PINCTRL_PIN_14,
+       PINCTRL_PIN_15,
+       PINCTRL_PIN_16,
+       PINCTRL_PIN_17,
+       PINCTRL_PIN_18,
+       PINCTRL_PIN_19,
+       PINCTRL_PIN_20,
+       PINCTRL_PIN_21,
+       PINCTRL_PIN_22,
+       PINCTRL_PIN_23,
+       PINCTRL_PIN_24,
+       PINCTRL_PIN_25,
+       PINCTRL_PIN_26,
+       PINCTRL_PIN_27,
+       PINCTRL_PIN_28,
+       PINCTRL_PIN_29,
+       PINCTRL_PIN_30,
+       PINCTRL_PIN_31,
+       PINCTRL_PIN_32,
+       PINCTRL_PIN_33,
+       PINCTRL_PIN_34,
+       PINCTRL_PIN_35,
+       PINCTRL_PIN_36,
+       PINCTRL_PIN_37,
+       PINCTRL_PIN_38,
+       PINCTRL_PIN_39,
+       PINCTRL_PIN_40,
+       PINCTRL_PIN_41,
+       PINCTRL_PIN_42,
+       PINCTRL_PIN_43,
+       PINCTRL_PIN_44,
+       PINCTRL_PIN_45,
+       PINCTRL_PIN_46,
+       PINCTRL_PIN_47,
+       PINCTRL_PIN_48,
+       PINCTRL_PIN_49,
+       PINCTRL_PIN_50,
+       PINCTRL_PIN_51,
+       PINCTRL_PIN_52,
+       PINCTRL_PIN_53,
+       PINCTRL_PIN_54,
+       PINCTRL_PIN_55,
+       PINCTRL_PIN_56,
+       PINCTRL_PIN_57,
+       PINCTRL_PIN_58,
+       PINCTRL_PIN_59,
+       PINCTRL_PIN_60,
+       PINCTRL_PIN_61,
+       PINCTRL_PIN_62,
+       PINCTRL_PIN_63,
+       PINCTRL_PIN_64,
+       PINCTRL_PIN_65,
+       PINCTRL_PIN_66,
+       PINCTRL_PIN_67,
+       PINCTRL_PIN_68,
+       PINCTRL_PIN_69,
+       PINCTRL_PIN_70,
+       PINCTRL_PIN_71,
+       PINCTRL_PIN_72,
+       PINCTRL_PIN_73,
+       PINCTRL_PIN_74,
+       PINCTRL_PIN_75,
+       PINCTRL_PIN_76,
+       PINCTRL_PIN_77,
+       MAX_PIN,
+};
+
+enum pinctrl_group_ids {
+       PINCTRL_GRP_ETHERNET0_0,
+       PINCTRL_GRP_ETHERNET1_0,
+       PINCTRL_GRP_ETHERNET2_0,
+       PINCTRL_GRP_ETHERNET3_0,
+       PINCTRL_GRP_GEMTSU0_0,
+       PINCTRL_GRP_GEMTSU0_1,
+       PINCTRL_GRP_GEMTSU0_2,
+       PINCTRL_GRP_MDIO0_0,
+       PINCTRL_GRP_MDIO1_0,
+       PINCTRL_GRP_MDIO1_1,
+       PINCTRL_GRP_MDIO2_0,
+       PINCTRL_GRP_MDIO3_0,
+       PINCTRL_GRP_QSPI0_0,
+       PINCTRL_GRP_QSPI_SS,
+       PINCTRL_GRP_QSPI_FBCLK,
+       PINCTRL_GRP_SPI0_0,
+       PINCTRL_GRP_SPI0_0_SS0,
+       PINCTRL_GRP_SPI0_0_SS1,
+       PINCTRL_GRP_SPI0_0_SS2,
+       PINCTRL_GRP_SPI0_1,
+       PINCTRL_GRP_SPI0_1_SS0,
+       PINCTRL_GRP_SPI0_1_SS1,
+       PINCTRL_GRP_SPI0_1_SS2,
+       PINCTRL_GRP_SPI0_2,
+       PINCTRL_GRP_SPI0_2_SS0,
+       PINCTRL_GRP_SPI0_2_SS1,
+       PINCTRL_GRP_SPI0_2_SS2,
+       PINCTRL_GRP_SPI0_3,
+       PINCTRL_GRP_SPI0_3_SS0,
+       PINCTRL_GRP_SPI0_3_SS1,
+       PINCTRL_GRP_SPI0_3_SS2,
+       PINCTRL_GRP_SPI0_4,
+       PINCTRL_GRP_SPI0_4_SS0,
+       PINCTRL_GRP_SPI0_4_SS1,
+       PINCTRL_GRP_SPI0_4_SS2,
+       PINCTRL_GRP_SPI0_5,
+       PINCTRL_GRP_SPI0_5_SS0,
+       PINCTRL_GRP_SPI0_5_SS1,
+       PINCTRL_GRP_SPI0_5_SS2,
+       PINCTRL_GRP_SPI1_0,
+       PINCTRL_GRP_SPI1_0_SS0,
+       PINCTRL_GRP_SPI1_0_SS1,
+       PINCTRL_GRP_SPI1_0_SS2,
+       PINCTRL_GRP_SPI1_1,
+       PINCTRL_GRP_SPI1_1_SS0,
+       PINCTRL_GRP_SPI1_1_SS1,
+       PINCTRL_GRP_SPI1_1_SS2,
+       PINCTRL_GRP_SPI1_2,
+       PINCTRL_GRP_SPI1_2_SS0,
+       PINCTRL_GRP_SPI1_2_SS1,
+       PINCTRL_GRP_SPI1_2_SS2,
+       PINCTRL_GRP_SPI1_3,
+       PINCTRL_GRP_SPI1_3_SS0,
+       PINCTRL_GRP_SPI1_3_SS1,
+       PINCTRL_GRP_SPI1_3_SS2,
+       PINCTRL_GRP_SPI1_4,
+       PINCTRL_GRP_SPI1_4_SS0,
+       PINCTRL_GRP_SPI1_4_SS1,
+       PINCTRL_GRP_SPI1_4_SS2,
+       PINCTRL_GRP_SPI1_5,
+       PINCTRL_GRP_SPI1_5_SS0,
+       PINCTRL_GRP_SPI1_5_SS1,
+       PINCTRL_GRP_SPI1_5_SS2,
+       PINCTRL_GRP_SDIO0_0,
+       PINCTRL_GRP_SDIO0_4BIT_0_0,
+       PINCTRL_GRP_SDIO0_4BIT_0_1,
+       PINCTRL_GRP_SDIO0_1BIT_0_0,
+       PINCTRL_GRP_SDIO0_1BIT_0_1,
+       PINCTRL_GRP_SDIO0_1BIT_0_2,
+       PINCTRL_GRP_SDIO0_1BIT_0_3,
+       PINCTRL_GRP_SDIO0_1BIT_0_4,
+       PINCTRL_GRP_SDIO0_1BIT_0_5,
+       PINCTRL_GRP_SDIO0_1BIT_0_6,
+       PINCTRL_GRP_SDIO0_1BIT_0_7,
+       PINCTRL_GRP_SDIO0_0_PC,
+       PINCTRL_GRP_SDIO0_0_CD,
+       PINCTRL_GRP_SDIO0_0_WP,
+       PINCTRL_GRP_SDIO0_1,
+       PINCTRL_GRP_SDIO0_4BIT_1_0,
+       PINCTRL_GRP_SDIO0_4BIT_1_1,
+       PINCTRL_GRP_SDIO0_1BIT_1_0,
+       PINCTRL_GRP_SDIO0_1BIT_1_1,
+       PINCTRL_GRP_SDIO0_1BIT_1_2,
+       PINCTRL_GRP_SDIO0_1BIT_1_3,
+       PINCTRL_GRP_SDIO0_1BIT_1_4,
+       PINCTRL_GRP_SDIO0_1BIT_1_5,
+       PINCTRL_GRP_SDIO0_1BIT_1_6,
+       PINCTRL_GRP_SDIO0_1BIT_1_7,
+       PINCTRL_GRP_SDIO0_1_PC,
+       PINCTRL_GRP_SDIO0_1_CD,
+       PINCTRL_GRP_SDIO0_1_WP,
+       PINCTRL_GRP_SDIO0_2,
+       PINCTRL_GRP_SDIO0_4BIT_2_0,
+       PINCTRL_GRP_SDIO0_4BIT_2_1,
+       PINCTRL_GRP_SDIO0_1BIT_2_0,
+       PINCTRL_GRP_SDIO0_1BIT_2_1,
+       PINCTRL_GRP_SDIO0_1BIT_2_2,
+       PINCTRL_GRP_SDIO0_1BIT_2_3,
+       PINCTRL_GRP_SDIO0_1BIT_2_4,
+       PINCTRL_GRP_SDIO0_1BIT_2_5,
+       PINCTRL_GRP_SDIO0_1BIT_2_6,
+       PINCTRL_GRP_SDIO0_1BIT_2_7,
+       PINCTRL_GRP_SDIO0_2_PC,
+       PINCTRL_GRP_SDIO0_2_CD,
+       PINCTRL_GRP_SDIO0_2_WP,
+       PINCTRL_GRP_SDIO1_0,
+       PINCTRL_GRP_SDIO1_4BIT_0_0,
+       PINCTRL_GRP_SDIO1_4BIT_0_1,
+       PINCTRL_GRP_SDIO1_1BIT_0_0,
+       PINCTRL_GRP_SDIO1_1BIT_0_1,
+       PINCTRL_GRP_SDIO1_1BIT_0_2,
+       PINCTRL_GRP_SDIO1_1BIT_0_3,
+       PINCTRL_GRP_SDIO1_1BIT_0_4,
+       PINCTRL_GRP_SDIO1_1BIT_0_5,
+       PINCTRL_GRP_SDIO1_1BIT_0_6,
+       PINCTRL_GRP_SDIO1_1BIT_0_7,
+       PINCTRL_GRP_SDIO1_0_PC,
+       PINCTRL_GRP_SDIO1_0_CD,
+       PINCTRL_GRP_SDIO1_0_WP,
+       PINCTRL_GRP_SDIO1_4BIT_1_0,
+       PINCTRL_GRP_SDIO1_1BIT_1_0,
+       PINCTRL_GRP_SDIO1_1BIT_1_1,
+       PINCTRL_GRP_SDIO1_1BIT_1_2,
+       PINCTRL_GRP_SDIO1_1BIT_1_3,
+       PINCTRL_GRP_SDIO1_1_PC,
+       PINCTRL_GRP_SDIO1_1_CD,
+       PINCTRL_GRP_SDIO1_1_WP,
+       PINCTRL_GRP_NAND0_0,
+       PINCTRL_GRP_NAND0_0_CE,
+       PINCTRL_GRP_NAND0_0_RB,
+       PINCTRL_GRP_NAND0_0_DQS,
+       PINCTRL_GRP_NAND0_1_CE,
+       PINCTRL_GRP_NAND0_1_RB,
+       PINCTRL_GRP_NAND0_1_DQS,
+       PINCTRL_GRP_CAN0_0,
+       PINCTRL_GRP_CAN0_1,
+       PINCTRL_GRP_CAN0_2,
+       PINCTRL_GRP_CAN0_3,
+       PINCTRL_GRP_CAN0_4,
+       PINCTRL_GRP_CAN0_5,
+       PINCTRL_GRP_CAN0_6,
+       PINCTRL_GRP_CAN0_7,
+       PINCTRL_GRP_CAN0_8,
+       PINCTRL_GRP_CAN0_9,
+       PINCTRL_GRP_CAN0_10,
+       PINCTRL_GRP_CAN0_11,
+       PINCTRL_GRP_CAN0_12,
+       PINCTRL_GRP_CAN0_13,
+       PINCTRL_GRP_CAN0_14,
+       PINCTRL_GRP_CAN0_15,
+       PINCTRL_GRP_CAN0_16,
+       PINCTRL_GRP_CAN0_17,
+       PINCTRL_GRP_CAN0_18,
+       PINCTRL_GRP_CAN1_0,
+       PINCTRL_GRP_CAN1_1,
+       PINCTRL_GRP_CAN1_2,
+       PINCTRL_GRP_CAN1_3,
+       PINCTRL_GRP_CAN1_4,
+       PINCTRL_GRP_CAN1_5,
+       PINCTRL_GRP_CAN1_6,
+       PINCTRL_GRP_CAN1_7,
+       PINCTRL_GRP_CAN1_8,
+       PINCTRL_GRP_CAN1_9,
+       PINCTRL_GRP_CAN1_10,
+       PINCTRL_GRP_CAN1_11,
+       PINCTRL_GRP_CAN1_12,
+       PINCTRL_GRP_CAN1_13,
+       PINCTRL_GRP_CAN1_14,
+       PINCTRL_GRP_CAN1_15,
+       PINCTRL_GRP_CAN1_16,
+       PINCTRL_GRP_CAN1_17,
+       PINCTRL_GRP_CAN1_18,
+       PINCTRL_GRP_CAN1_19,
+       PINCTRL_GRP_UART0_0,
+       PINCTRL_GRP_UART0_1,
+       PINCTRL_GRP_UART0_2,
+       PINCTRL_GRP_UART0_3,
+       PINCTRL_GRP_UART0_4,
+       PINCTRL_GRP_UART0_5,
+       PINCTRL_GRP_UART0_6,
+       PINCTRL_GRP_UART0_7,
+       PINCTRL_GRP_UART0_8,
+       PINCTRL_GRP_UART0_9,
+       PINCTRL_GRP_UART0_10,
+       PINCTRL_GRP_UART0_11,
+       PINCTRL_GRP_UART0_12,
+       PINCTRL_GRP_UART0_13,
+       PINCTRL_GRP_UART0_14,
+       PINCTRL_GRP_UART0_15,
+       PINCTRL_GRP_UART0_16,
+       PINCTRL_GRP_UART0_17,
+       PINCTRL_GRP_UART0_18,
+       PINCTRL_GRP_UART1_0,
+       PINCTRL_GRP_UART1_1,
+       PINCTRL_GRP_UART1_2,
+       PINCTRL_GRP_UART1_3,
+       PINCTRL_GRP_UART1_4,
+       PINCTRL_GRP_UART1_5,
+       PINCTRL_GRP_UART1_6,
+       PINCTRL_GRP_UART1_7,
+       PINCTRL_GRP_UART1_8,
+       PINCTRL_GRP_UART1_9,
+       PINCTRL_GRP_UART1_10,
+       PINCTRL_GRP_UART1_11,
+       PINCTRL_GRP_UART1_12,
+       PINCTRL_GRP_UART1_13,
+       PINCTRL_GRP_UART1_14,
+       PINCTRL_GRP_UART1_15,
+       PINCTRL_GRP_UART1_16,
+       PINCTRL_GRP_UART1_17,
+       PINCTRL_GRP_UART1_18,
+       PINCTRL_GRP_I2C0_0,
+       PINCTRL_GRP_I2C0_1,
+       PINCTRL_GRP_I2C0_2,
+       PINCTRL_GRP_I2C0_3,
+       PINCTRL_GRP_I2C0_4,
+       PINCTRL_GRP_I2C0_5,
+       PINCTRL_GRP_I2C0_6,
+       PINCTRL_GRP_I2C0_7,
+       PINCTRL_GRP_I2C0_8,
+       PINCTRL_GRP_I2C0_9,
+       PINCTRL_GRP_I2C0_10,
+       PINCTRL_GRP_I2C0_11,
+       PINCTRL_GRP_I2C0_12,
+       PINCTRL_GRP_I2C0_13,
+       PINCTRL_GRP_I2C0_14,
+       PINCTRL_GRP_I2C0_15,
+       PINCTRL_GRP_I2C0_16,
+       PINCTRL_GRP_I2C0_17,
+       PINCTRL_GRP_I2C0_18,
+       PINCTRL_GRP_I2C1_0,
+       PINCTRL_GRP_I2C1_1,
+       PINCTRL_GRP_I2C1_2,
+       PINCTRL_GRP_I2C1_3,
+       PINCTRL_GRP_I2C1_4,
+       PINCTRL_GRP_I2C1_5,
+       PINCTRL_GRP_I2C1_6,
+       PINCTRL_GRP_I2C1_7,
+       PINCTRL_GRP_I2C1_8,
+       PINCTRL_GRP_I2C1_9,
+       PINCTRL_GRP_I2C1_10,
+       PINCTRL_GRP_I2C1_11,
+       PINCTRL_GRP_I2C1_12,
+       PINCTRL_GRP_I2C1_13,
+       PINCTRL_GRP_I2C1_14,
+       PINCTRL_GRP_I2C1_15,
+       PINCTRL_GRP_I2C1_16,
+       PINCTRL_GRP_I2C1_17,
+       PINCTRL_GRP_I2C1_18,
+       PINCTRL_GRP_I2C1_19,
+       PINCTRL_GRP_TTC0_0_CLK,
+       PINCTRL_GRP_TTC0_0_WAV,
+       PINCTRL_GRP_TTC0_1_CLK,
+       PINCTRL_GRP_TTC0_1_WAV,
+       PINCTRL_GRP_TTC0_2_CLK,
+       PINCTRL_GRP_TTC0_2_WAV,
+       PINCTRL_GRP_TTC0_3_CLK,
+       PINCTRL_GRP_TTC0_3_WAV,
+       PINCTRL_GRP_TTC0_4_CLK,
+       PINCTRL_GRP_TTC0_4_WAV,
+       PINCTRL_GRP_TTC0_5_CLK,
+       PINCTRL_GRP_TTC0_5_WAV,
+       PINCTRL_GRP_TTC0_6_CLK,
+       PINCTRL_GRP_TTC0_6_WAV,
+       PINCTRL_GRP_TTC0_7_CLK,
+       PINCTRL_GRP_TTC0_7_WAV,
+       PINCTRL_GRP_TTC0_8_CLK,
+       PINCTRL_GRP_TTC0_8_WAV,
+       PINCTRL_GRP_TTC1_0_CLK,
+       PINCTRL_GRP_TTC1_0_WAV,
+       PINCTRL_GRP_TTC1_1_CLK,
+       PINCTRL_GRP_TTC1_1_WAV,
+       PINCTRL_GRP_TTC1_2_CLK,
+       PINCTRL_GRP_TTC1_2_WAV,
+       PINCTRL_GRP_TTC1_3_CLK,
+       PINCTRL_GRP_TTC1_3_WAV,
+       PINCTRL_GRP_TTC1_4_CLK,
+       PINCTRL_GRP_TTC1_4_WAV,
+       PINCTRL_GRP_TTC1_5_CLK,
+       PINCTRL_GRP_TTC1_5_WAV,
+       PINCTRL_GRP_TTC1_6_CLK,
+       PINCTRL_GRP_TTC1_6_WAV,
+       PINCTRL_GRP_TTC1_7_CLK,
+       PINCTRL_GRP_TTC1_7_WAV,
+       PINCTRL_GRP_TTC1_8_CLK,
+       PINCTRL_GRP_TTC1_8_WAV,
+       PINCTRL_GRP_TTC2_0_CLK,
+       PINCTRL_GRP_TTC2_0_WAV,
+       PINCTRL_GRP_TTC2_1_CLK,
+       PINCTRL_GRP_TTC2_1_WAV,
+       PINCTRL_GRP_TTC2_2_CLK,
+       PINCTRL_GRP_TTC2_2_WAV,
+       PINCTRL_GRP_TTC2_3_CLK,
+       PINCTRL_GRP_TTC2_3_WAV,
+       PINCTRL_GRP_TTC2_4_CLK,
+       PINCTRL_GRP_TTC2_4_WAV,
+       PINCTRL_GRP_TTC2_5_CLK,
+       PINCTRL_GRP_TTC2_5_WAV,
+       PINCTRL_GRP_TTC2_6_CLK,
+       PINCTRL_GRP_TTC2_6_WAV,
+       PINCTRL_GRP_TTC2_7_CLK,
+       PINCTRL_GRP_TTC2_7_WAV,
+       PINCTRL_GRP_TTC2_8_CLK,
+       PINCTRL_GRP_TTC2_8_WAV,
+       PINCTRL_GRP_TTC3_0_CLK,
+       PINCTRL_GRP_TTC3_0_WAV,
+       PINCTRL_GRP_TTC3_1_CLK,
+       PINCTRL_GRP_TTC3_1_WAV,
+       PINCTRL_GRP_TTC3_2_CLK,
+       PINCTRL_GRP_TTC3_2_WAV,
+       PINCTRL_GRP_TTC3_3_CLK,
+       PINCTRL_GRP_TTC3_3_WAV,
+       PINCTRL_GRP_TTC3_4_CLK,
+       PINCTRL_GRP_TTC3_4_WAV,
+       PINCTRL_GRP_TTC3_5_CLK,
+       PINCTRL_GRP_TTC3_5_WAV,
+       PINCTRL_GRP_TTC3_6_CLK,
+       PINCTRL_GRP_TTC3_6_WAV,
+       PINCTRL_GRP_TTC3_7_CLK,
+       PINCTRL_GRP_TTC3_7_WAV,
+       PINCTRL_GRP_TTC3_8_CLK,
+       PINCTRL_GRP_TTC3_8_WAV,
+       PINCTRL_GRP_SWDT0_0_CLK,
+       PINCTRL_GRP_SWDT0_0_RST,
+       PINCTRL_GRP_SWDT0_1_CLK,
+       PINCTRL_GRP_SWDT0_1_RST,
+       PINCTRL_GRP_SWDT0_2_CLK,
+       PINCTRL_GRP_SWDT0_2_RST,
+       PINCTRL_GRP_SWDT0_3_CLK,
+       PINCTRL_GRP_SWDT0_3_RST,
+       PINCTRL_GRP_SWDT0_4_CLK,
+       PINCTRL_GRP_SWDT0_4_RST,
+       PINCTRL_GRP_SWDT0_5_CLK,
+       PINCTRL_GRP_SWDT0_5_RST,
+       PINCTRL_GRP_SWDT0_6_CLK,
+       PINCTRL_GRP_SWDT0_6_RST,
+       PINCTRL_GRP_SWDT0_7_CLK,
+       PINCTRL_GRP_SWDT0_7_RST,
+       PINCTRL_GRP_SWDT0_8_CLK,
+       PINCTRL_GRP_SWDT0_8_RST,
+       PINCTRL_GRP_SWDT0_9_CLK,
+       PINCTRL_GRP_SWDT0_9_RST,
+       PINCTRL_GRP_SWDT0_10_CLK,
+       PINCTRL_GRP_SWDT0_10_RST,
+       PINCTRL_GRP_SWDT0_11_CLK,
+       PINCTRL_GRP_SWDT0_11_RST,
+       PINCTRL_GRP_SWDT0_12_CLK,
+       PINCTRL_GRP_SWDT0_12_RST,
+       PINCTRL_GRP_SWDT1_0_CLK,
+       PINCTRL_GRP_SWDT1_0_RST,
+       PINCTRL_GRP_SWDT1_1_CLK,
+       PINCTRL_GRP_SWDT1_1_RST,
+       PINCTRL_GRP_SWDT1_2_CLK,
+       PINCTRL_GRP_SWDT1_2_RST,
+       PINCTRL_GRP_SWDT1_3_CLK,
+       PINCTRL_GRP_SWDT1_3_RST,
+       PINCTRL_GRP_SWDT1_4_CLK,
+       PINCTRL_GRP_SWDT1_4_RST,
+       PINCTRL_GRP_SWDT1_5_CLK,
+       PINCTRL_GRP_SWDT1_5_RST,
+       PINCTRL_GRP_SWDT1_6_CLK,
+       PINCTRL_GRP_SWDT1_6_RST,
+       PINCTRL_GRP_SWDT1_7_CLK,
+       PINCTRL_GRP_SWDT1_7_RST,
+       PINCTRL_GRP_SWDT1_8_CLK,
+       PINCTRL_GRP_SWDT1_8_RST,
+       PINCTRL_GRP_SWDT1_9_CLK,
+       PINCTRL_GRP_SWDT1_9_RST,
+       PINCTRL_GRP_SWDT1_10_CLK,
+       PINCTRL_GRP_SWDT1_10_RST,
+       PINCTRL_GRP_SWDT1_11_CLK,
+       PINCTRL_GRP_SWDT1_11_RST,
+       PINCTRL_GRP_SWDT1_12_CLK,
+       PINCTRL_GRP_SWDT1_12_RST,
+       PINCTRL_GRP_GPIO0_0,
+       PINCTRL_GRP_GPIO0_1,
+       PINCTRL_GRP_GPIO0_2,
+       PINCTRL_GRP_GPIO0_3,
+       PINCTRL_GRP_GPIO0_4,
+       PINCTRL_GRP_GPIO0_5,
+       PINCTRL_GRP_GPIO0_6,
+       PINCTRL_GRP_GPIO0_7,
+       PINCTRL_GRP_GPIO0_8,
+       PINCTRL_GRP_GPIO0_9,
+       PINCTRL_GRP_GPIO0_10,
+       PINCTRL_GRP_GPIO0_11,
+       PINCTRL_GRP_GPIO0_12,
+       PINCTRL_GRP_GPIO0_13,
+       PINCTRL_GRP_GPIO0_14,
+       PINCTRL_GRP_GPIO0_15,
+       PINCTRL_GRP_GPIO0_16,
+       PINCTRL_GRP_GPIO0_17,
+       PINCTRL_GRP_GPIO0_18,
+       PINCTRL_GRP_GPIO0_19,
+       PINCTRL_GRP_GPIO0_20,
+       PINCTRL_GRP_GPIO0_21,
+       PINCTRL_GRP_GPIO0_22,
+       PINCTRL_GRP_GPIO0_23,
+       PINCTRL_GRP_GPIO0_24,
+       PINCTRL_GRP_GPIO0_25,
+       PINCTRL_GRP_GPIO0_26,
+       PINCTRL_GRP_GPIO0_27,
+       PINCTRL_GRP_GPIO0_28,
+       PINCTRL_GRP_GPIO0_29,
+       PINCTRL_GRP_GPIO0_30,
+       PINCTRL_GRP_GPIO0_31,
+       PINCTRL_GRP_GPIO0_32,
+       PINCTRL_GRP_GPIO0_33,
+       PINCTRL_GRP_GPIO0_34,
+       PINCTRL_GRP_GPIO0_35,
+       PINCTRL_GRP_GPIO0_36,
+       PINCTRL_GRP_GPIO0_37,
+       PINCTRL_GRP_GPIO0_38,
+       PINCTRL_GRP_GPIO0_39,
+       PINCTRL_GRP_GPIO0_40,
+       PINCTRL_GRP_GPIO0_41,
+       PINCTRL_GRP_GPIO0_42,
+       PINCTRL_GRP_GPIO0_43,
+       PINCTRL_GRP_GPIO0_44,
+       PINCTRL_GRP_GPIO0_45,
+       PINCTRL_GRP_GPIO0_46,
+       PINCTRL_GRP_GPIO0_47,
+       PINCTRL_GRP_GPIO0_48,
+       PINCTRL_GRP_GPIO0_49,
+       PINCTRL_GRP_GPIO0_50,
+       PINCTRL_GRP_GPIO0_51,
+       PINCTRL_GRP_GPIO0_52,
+       PINCTRL_GRP_GPIO0_53,
+       PINCTRL_GRP_GPIO0_54,
+       PINCTRL_GRP_GPIO0_55,
+       PINCTRL_GRP_GPIO0_56,
+       PINCTRL_GRP_GPIO0_57,
+       PINCTRL_GRP_GPIO0_58,
+       PINCTRL_GRP_GPIO0_59,
+       PINCTRL_GRP_GPIO0_60,
+       PINCTRL_GRP_GPIO0_61,
+       PINCTRL_GRP_GPIO0_62,
+       PINCTRL_GRP_GPIO0_63,
+       PINCTRL_GRP_GPIO0_64,
+       PINCTRL_GRP_GPIO0_65,
+       PINCTRL_GRP_GPIO0_66,
+       PINCTRL_GRP_GPIO0_67,
+       PINCTRL_GRP_GPIO0_68,
+       PINCTRL_GRP_GPIO0_69,
+       PINCTRL_GRP_GPIO0_70,
+       PINCTRL_GRP_GPIO0_71,
+       PINCTRL_GRP_GPIO0_72,
+       PINCTRL_GRP_GPIO0_73,
+       PINCTRL_GRP_GPIO0_74,
+       PINCTRL_GRP_GPIO0_75,
+       PINCTRL_GRP_GPIO0_76,
+       PINCTRL_GRP_GPIO0_77,
+       PINCTRL_GRP_USB0_0,
+       PINCTRL_GRP_USB1_0,
+       PINCTRL_GRP_PMU0_0,
+       PINCTRL_GRP_PMU0_1,
+       PINCTRL_GRP_PMU0_2,
+       PINCTRL_GRP_PMU0_3,
+       PINCTRL_GRP_PMU0_4,
+       PINCTRL_GRP_PMU0_5,
+       PINCTRL_GRP_PMU0_6,
+       PINCTRL_GRP_PMU0_7,
+       PINCTRL_GRP_PMU0_8,
+       PINCTRL_GRP_PMU0_9,
+       PINCTRL_GRP_PMU0_10,
+       PINCTRL_GRP_PMU0_11,
+       PINCTRL_GRP_PCIE0_0,
+       PINCTRL_GRP_PCIE0_1,
+       PINCTRL_GRP_PCIE0_2,
+       PINCTRL_GRP_PCIE0_3,
+       PINCTRL_GRP_PCIE0_4,
+       PINCTRL_GRP_PCIE0_5,
+       PINCTRL_GRP_PCIE0_6,
+       PINCTRL_GRP_PCIE0_7,
+       PINCTRL_GRP_CSU0_0,
+       PINCTRL_GRP_CSU0_1,
+       PINCTRL_GRP_CSU0_2,
+       PINCTRL_GRP_CSU0_3,
+       PINCTRL_GRP_CSU0_4,
+       PINCTRL_GRP_CSU0_5,
+       PINCTRL_GRP_CSU0_6,
+       PINCTRL_GRP_CSU0_7,
+       PINCTRL_GRP_CSU0_8,
+       PINCTRL_GRP_CSU0_9,
+       PINCTRL_GRP_CSU0_10,
+       PINCTRL_GRP_CSU0_11,
+       PINCTRL_GRP_DPAUX0_0,
+       PINCTRL_GRP_DPAUX0_1,
+       PINCTRL_GRP_DPAUX0_2,
+       PINCTRL_GRP_DPAUX0_3,
+       PINCTRL_GRP_PJTAG0_0,
+       PINCTRL_GRP_PJTAG0_1,
+       PINCTRL_GRP_PJTAG0_2,
+       PINCTRL_GRP_PJTAG0_3,
+       PINCTRL_GRP_PJTAG0_4,
+       PINCTRL_GRP_PJTAG0_5,
+       PINCTRL_GRP_TRACE0_0,
+       PINCTRL_GRP_TRACE0_0_CLK,
+       PINCTRL_GRP_TRACE0_1,
+       PINCTRL_GRP_TRACE0_1_CLK,
+       PINCTRL_GRP_TRACE0_2,
+       PINCTRL_GRP_TRACE0_2_CLK,
+       PINCTRL_GRP_TESTSCAN0_0,
+};
+
 enum pm_pinctrl_config_param {
        PINCTRL_CONFIG_SLEW_RATE,
        PINCTRL_CONFIG_BIAS_STATUS,
@@ -51,14 +707,25 @@ enum pm_pinctrl_drive_strength {
 };
 
 enum pm_ret_status pm_api_pinctrl_set_function(unsigned int pin,
-                                              enum pm_node_id nid);
+                                              unsigned int id);
 enum pm_ret_status pm_api_pinctrl_get_function(unsigned int pin,
-                                              enum pm_node_id *nid);
+                                              unsigned int *id);
 enum pm_ret_status pm_api_pinctrl_set_config(unsigned int pin,
                                             unsigned int param,
                                             unsigned int value);
 enum pm_ret_status pm_api_pinctrl_get_config(unsigned int pin,
                                             unsigned int param,
                                             unsigned int *value);
-
+enum pm_ret_status pm_api_pinctrl_get_function_name(unsigned int fid,
+                                                   char *name);
+enum pm_ret_status pm_api_pinctrl_get_function_groups(unsigned int fid,
+                                                     unsigned int index,
+                                                     uint16_t *groups);
+enum pm_ret_status pm_api_pinctrl_get_pin_groups(unsigned int pin,
+                                                unsigned int index,
+                                                uint16_t *groups);
+enum pm_ret_status pm_api_pinctrl_get_num_pins(unsigned int *npins);
+enum pm_ret_status pm_api_pinctrl_get_num_functions(unsigned int *nfuncs);
+enum pm_ret_status pm_api_pinctrl_get_num_func_groups(unsigned int fid,
+                                                     unsigned int *ngroups);
 #endif /* _PM_API_PINCTRL_H_ */
index fcc0c6e76f0cbd6d374b628c5806ef1519b5899f..3f3e830629961edbcaddb6a4dbfe19eb4e9940a9 100644 (file)
@@ -894,6 +894,113 @@ enum pm_ret_status pm_clock_getparent(unsigned int clock_id,
        return pm_api_clock_getparent(clock_id, parent_id);
 }
 
+/**
+ * pm_pinctrl_get_num_pins - PM call to request number of pins
+ * @npins: Number of pins
+ *
+ * This function is used by master to get number of pins
+ *
+ * Return: Returns status, either success or error+reason.
+ */
+static enum pm_ret_status pm_pinctrl_get_num_pins(uint32_t *npins)
+{
+       return pm_api_pinctrl_get_num_pins(npins);
+}
+
+/**
+ * pm_pinctrl_get_num_functions - PM call to request number of functions
+ * @nfuncs: Number of functions
+ *
+ * This function is used by master to get number of functions
+ *
+ * Return: Returns status, either success or error+reason.
+ */
+static enum pm_ret_status pm_pinctrl_get_num_functions(uint32_t *nfuncs)
+{
+       return pm_api_pinctrl_get_num_functions(nfuncs);
+}
+
+/**
+ * pm_pinctrl_get_num_function_groups - PM call to request number of
+ *                                     function groups
+ * @fid: Id of function
+ * @ngroups: Number of function groups
+ *
+ * This function is used by master to get number of function groups specified
+ * by given function Id
+ *
+ * Return: Returns status, either success or error+reason.
+ */
+static enum pm_ret_status pm_pinctrl_get_num_function_groups(unsigned int fid,
+                                                            uint32_t *ngroups)
+{
+       return pm_api_pinctrl_get_num_func_groups(fid, ngroups);
+}
+
+/**
+ * pm_pinctrl_get_function_name - PM call to request function name
+ * @fid: Id of function
+ * @name: Name of function
+ *
+ * This function is used by master to get name of function specified
+ * by given function Id
+ *
+ * Return: Returns status, either success or error+reason.
+ */
+static enum pm_ret_status pm_pinctrl_get_function_name(unsigned int fid,
+                                                      char *name)
+{
+       return pm_api_pinctrl_get_function_name(fid, name);
+}
+
+/**
+ * pm_pinctrl_get_function_groups - PM call to request function groups
+ * @fid: Id of function
+ * @index: Index of next function groups
+ * @groups: Function groups
+ *
+ * This function is used by master to get function groups specified
+ * by given function Id. This API will return 6 function groups with
+ * a single response. To get other function groups, master should call
+ * same API in loop with new function groups index till error is returned.
+ *
+ * E.g First call should have index 0 which will return function groups
+ * 0, 1, 2, 3, 4 and 5. Next call, index should be 6 which will return
+ * function groups 6, 7, 8, 9, 10 and 11 and so on.
+ *
+ * Return: Returns status, either success or error+reason.
+ */
+static enum pm_ret_status pm_pinctrl_get_function_groups(unsigned int fid,
+                                                        unsigned int index,
+                                                        uint16_t *groups)
+{
+       return pm_api_pinctrl_get_function_groups(fid, index, groups);
+}
+
+/**
+ * pm_pinctrl_get_pin_groups - PM call to request pin groups
+ * @pin_id: Id of pin
+ * @index: Index of next pin groups
+ * @groups: pin groups
+ *
+ * This function is used by master to get pin groups specified
+ * by given pin Id. This API will return 6 pin groups with
+ * a single response. To get other pin groups, master should call
+ * same API in loop with new pin groups index till error is returned.
+ *
+ * E.g First call should have index 0 which will return pin groups
+ * 0, 1, 2, 3, 4 and 5. Next call, index should be 6 which will return
+ * pin groups 6, 7, 8, 9, 10 and 11 and so on.
+ *
+ * Return: Returns status, either success or error+reason.
+ */
+static enum pm_ret_status pm_pinctrl_get_pin_groups(unsigned int pin_id,
+                                                   unsigned int index,
+                                                   uint16_t *groups)
+{
+       return pm_api_pinctrl_get_pin_groups(pin_id, index, groups);
+}
+
 /**
  * pm_query_data() -  PM API for querying firmware data
  * @arg1       Argument 1 to requested IOCTL call
@@ -934,6 +1041,31 @@ enum pm_ret_status pm_query_data(enum pm_query_id qid,
                ret = pm_clock_get_attributes(arg1, &data[1]);
                data[0] = ret;
                break;
+       case PM_QID_PINCTRL_GET_NUM_PINS:
+               ret = pm_pinctrl_get_num_pins(&data[1]);
+               data[0] = ret;
+               break;
+       case PM_QID_PINCTRL_GET_NUM_FUNCTIONS:
+               ret = pm_pinctrl_get_num_functions(&data[1]);
+               data[0] = ret;
+               break;
+       case PM_QID_PINCTRL_GET_NUM_FUNCTION_GROUPS:
+               ret = pm_pinctrl_get_num_function_groups(arg1, &data[1]);
+               data[0] = ret;
+               break;
+       case PM_QID_PINCTRL_GET_FUNCTION_NAME:
+               ret = pm_pinctrl_get_function_name(arg1, (char *)data);
+               break;
+       case PM_QID_PINCTRL_GET_FUNCTION_GROUPS:
+               ret = pm_pinctrl_get_function_groups(arg1, arg2,
+                                                    (uint16_t *)&data[1]);
+               data[0] = ret;
+               break;
+       case PM_QID_PINCTRL_GET_PIN_GROUPS:
+               ret = pm_pinctrl_get_pin_groups(arg1, arg2,
+                                               (uint16_t *)&data[1]);
+               data[0] = ret;
+               break;
        default:
                ret = PM_RET_ERROR_ARGS;
                WARN("Unimplemented query service call: 0x%x\n", qid);
index 20d80c21760e07ce5557e37c31d37160d21350eb..a5e741d36b6677a4404a19a0dc50c3327a54fc7b 100644 (file)
@@ -17,6 +17,12 @@ enum pm_query_id {
        PM_QID_CLOCK_GET_FIXEDFACTOR_PARAMS,
        PM_QID_CLOCK_GET_PARENTS,
        PM_QID_CLOCK_GET_ATTRIBUTES,
+       PM_QID_PINCTRL_GET_NUM_PINS,
+       PM_QID_PINCTRL_GET_NUM_FUNCTIONS,
+       PM_QID_PINCTRL_GET_NUM_FUNCTION_GROUPS,
+       PM_QID_PINCTRL_GET_FUNCTION_NAME,
+       PM_QID_PINCTRL_GET_FUNCTION_GROUPS,
+       PM_QID_PINCTRL_GET_PIN_GROUPS,
 };
 
 /**********************************************************