Quellcodebibliothek Statistik Leitseite products/Sources/formale Sprachen/C/Linux/drivers/pinctrl/renesas/   (Open Source Betriebssystem Version 6.17.9©)  Datei vom 24.10.2025 mit Größe 61 kB image not shown  

Quelle  pfc-r8a779f0.c   Sprache: C

 
// SPDX-License-Identifier: GPL-2.0
/*
 * R8A779F0 processor support - PFC hardware block.
 *
 * Copyright (C) 2021 Renesas Electronics Corp.
 *
 * This file is based on the drivers/pinctrl/renesas/pfc-r8a779a0.c
 */


#include <linux/errno.h>
#include <linux/io.h>
#include <linux/kernel.h>

#include "sh_pfc.h"

#define CFG_FLAGS (SH_PFC_PIN_CFG_DRIVE_STRENGTH | SH_PFC_PIN_CFG_PULL_UP_DOWN)

#define CPU_ALL_GP(fn, sfx) \
 PORT_GP_CFG_21(0, fn, sfx, CFG_FLAGS | SH_PFC_PIN_CFG_IO_VOLTAGE_18_33), \
 PORT_GP_CFG_25(1, fn, sfx, CFG_FLAGS | SH_PFC_PIN_CFG_IO_VOLTAGE_18_33), \
 PORT_GP_CFG_17(2, fn, sfx, CFG_FLAGS), \
 PORT_GP_CFG_19(3, fn, sfx, CFG_FLAGS | SH_PFC_PIN_CFG_IO_VOLTAGE_18_33)

#define CPU_ALL_NOGP(fn)        \
 PIN_NOGP_CFG(PRESETOUT0_N, "PRESETOUT0#", fn, SH_PFC_PIN_CFG_PULL_DOWN), \
 PIN_NOGP_CFG(EXTALR, "EXTALR", fn, SH_PFC_PIN_CFG_PULL_UP_DOWN)

/*
 * F_() : just information
 * FM() : macro for FN_xxx / xxx_MARK
 */


/* GPSR0 */
#define GPSR0_20 F_(IRQ3, IP2SR0_19_16)
#define GPSR0_19 F_(IRQ2, IP2SR0_15_12)
#define GPSR0_18 F_(IRQ1, IP2SR0_11_8)
#define GPSR0_17 F_(IRQ0, IP2SR0_7_4)
#define GPSR0_16 F_(MSIOF0_SS2, IP2SR0_3_0)
#define GPSR0_15 F_(MSIOF0_SS1, IP1SR0_31_28)
#define GPSR0_14 F_(MSIOF0_SCK, IP1SR0_27_24)
#define GPSR0_13 F_(MSIOF0_TXD, IP1SR0_23_20)
#define GPSR0_12 F_(MSIOF0_RXD, IP1SR0_19_16)
#define GPSR0_11 F_(MSIOF0_SYNC, IP1SR0_15_12)
#define GPSR0_10 F_(CTS0_N, IP1SR0_11_8)
#define GPSR0_9  F_(RTS0_N, IP1SR0_7_4)
#define GPSR0_8  F_(SCK0, IP1SR0_3_0)
#define GPSR0_7  F_(TX0,  IP0SR0_31_28)
#define GPSR0_6  F_(RX0,  IP0SR0_27_24)
#define GPSR0_5  F_(HRTS0_N, IP0SR0_23_20)
#define GPSR0_4  F_(HCTS0_N, IP0SR0_19_16)
#define GPSR0_3  F_(HTX0, IP0SR0_15_12)
#define GPSR0_2  F_(HRX0, IP0SR0_11_8)
#define GPSR0_1  F_(HSCK0, IP0SR0_7_4)
#define GPSR0_0  F_(SCIF_CLK, IP0SR0_3_0)

/* GPSR1 */
#define GPSR1_24 FM(SD_WP)
#define GPSR1_23 FM(SD_CD)
#define GPSR1_22 FM(MMC_SD_CMD)
#define GPSR1_21 FM(MMC_D7)
#define GPSR1_20 FM(MMC_DS)
#define GPSR1_19 FM(MMC_D6)
#define GPSR1_18 FM(MMC_D4)
#define GPSR1_17 FM(MMC_D5)
#define GPSR1_16 FM(MMC_SD_D3)
#define GPSR1_15 FM(MMC_SD_D2)
#define GPSR1_14 FM(MMC_SD_D1)
#define GPSR1_13 FM(MMC_SD_D0)
#define GPSR1_12 FM(MMC_SD_CLK)
#define GPSR1_11 FM(GP1_11)
#define GPSR1_10 FM(GP1_10)
#define GPSR1_9  FM(GP1_09)
#define GPSR1_8  FM(GP1_08)
#define GPSR1_7  F_(GP1_07, IP0SR1_31_28)
#define GPSR1_6  F_(GP1_06, IP0SR1_27_24)
#define GPSR1_5  F_(GP1_05, IP0SR1_23_20)
#define GPSR1_4  F_(GP1_04, IP0SR1_19_16)
#define GPSR1_3  F_(GP1_03, IP0SR1_15_12)
#define GPSR1_2  F_(GP1_02, IP0SR1_11_8)
#define GPSR1_1  F_(GP1_01, IP0SR1_7_4)
#define GPSR1_0  F_(GP1_00, IP0SR1_3_0)

/* GPSR2 */
#define GPSR2_16 FM(PCIE1_CLKREQ_N)
#define GPSR2_15 FM(PCIE0_CLKREQ_N)
#define GPSR2_14 FM(QSPI0_IO3)
#define GPSR2_13 FM(QSPI0_SSL)
#define GPSR2_12 FM(QSPI0_MISO_IO1)
#define GPSR2_11 FM(QSPI0_IO2)
#define GPSR2_10 FM(QSPI0_SPCLK)
#define GPSR2_9  FM(QSPI0_MOSI_IO0)
#define GPSR2_8  FM(QSPI1_SPCLK)
#define GPSR2_7  FM(QSPI1_MOSI_IO0)
#define GPSR2_6  FM(QSPI1_IO2)
#define GPSR2_5  FM(QSPI1_MISO_IO1)
#define GPSR2_4  FM(QSPI1_IO3)
#define GPSR2_3  FM(QSPI1_SSL)
#define GPSR2_2  FM(RPC_RESET_N)
#define GPSR2_1  FM(RPC_WP_N)
#define GPSR2_0  FM(RPC_INT_N)

/* GPSR3 */
#define GPSR3_18 FM(TSN0_AVTP_CAPTURE_B)
#define GPSR3_17 FM(TSN0_AVTP_MATCH_B)
#define GPSR3_16 FM(TSN0_AVTP_PPS)
#define GPSR3_15 FM(TSN1_AVTP_CAPTURE_B)
#define GPSR3_14 FM(TSN1_AVTP_MATCH_B)
#define GPSR3_13 FM(TSN1_AVTP_PPS)
#define GPSR3_12 FM(TSN0_MAGIC_B)
#define GPSR3_11 FM(TSN1_PHY_INT_B)
#define GPSR3_10 FM(TSN0_PHY_INT_B)
#define GPSR3_9  FM(TSN2_PHY_INT_B)
#define GPSR3_8  FM(TSN0_LINK_B)
#define GPSR3_7  FM(TSN2_LINK_B)
#define GPSR3_6  FM(TSN1_LINK_B)
#define GPSR3_5  FM(TSN1_MDC_B)
#define GPSR3_4  FM(TSN0_MDC_B)
#define GPSR3_3  FM(TSN2_MDC_B)
#define GPSR3_2  FM(TSN0_MDIO_B)
#define GPSR3_1  FM(TSN2_MDIO_B)
#define GPSR3_0  FM(TSN1_MDIO_B)

/* IP0SR0 */ /* 0 */ /* 1 */ /* 2 */ /* 3 */ /* 4 */ /* 5 */ /* 6 */ /* 7 - F */
#define IP0SR0_3_0 FM(SCIF_CLK)  F_(0, 0)  F_(0, 0)  F_(0, 0)  F_(0, 0) F_(0, 0)  F_(0, 0)  F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0)
#define IP0SR0_7_4 FM(HSCK0)  FM(SCK3)  FM(MSIOF3_SCK)  F_(0, 0)  F_(0, 0) FM(TSN0_AVTP_CAPTURE_A) F_(0, 0)  F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0)
#define IP0SR0_11_8 FM(HRX0)  FM(RX3)   FM(MSIOF3_RXD)  F_(0, 0)  F_(0, 0) FM(TSN0_AVTP_MATCH_A) F_(0, 0)  F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0)
#define IP0SR0_15_12 FM(HTX0)  FM(TX3)   FM(MSIOF3_TXD)  F_(0, 0)  F_(0, 0) F_(0, 0)  F_(0, 0)  F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0)
#define IP0SR0_19_16 FM(HCTS0_N)  FM(CTS3_N)  FM(MSIOF3_SS1)  F_(0, 0)  F_(0, 0) FM(TSN0_MDC_A)  F_(0, 0)  F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0)
#define IP0SR0_23_20 FM(HRTS0_N)  FM(RTS3_N)  FM(MSIOF3_SS2)  F_(0, 0)  F_(0, 0) FM(TSN0_MDIO_A)  F_(0, 0)  F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0)
#define IP0SR0_27_24 FM(RX0)   FM(HRX1)  F_(0, 0)  FM(MSIOF1_RXD)  F_(0, 0) FM(TSN1_AVTP_MATCH_A) F_(0, 0)  F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0)
#define IP0SR0_31_28 FM(TX0)   FM(HTX1)  F_(0, 0)  FM(MSIOF1_TXD)  F_(0, 0) FM(TSN1_AVTP_CAPTURE_A) F_(0, 0)  F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0)
/* IP1SR0 */ /* 0 */ /* 1 */ /* 2 */ /* 3 */ /* 4 */ /* 5 */ /* 6 */ /* 7 - F */
#define IP1SR0_3_0 FM(SCK0)  FM(HSCK1)  F_(0, 0)  FM(MSIOF1_SCK)  F_(0, 0) F_(0, 0)  F_(0, 0)  F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0)
#define IP1SR0_7_4 FM(RTS0_N)  FM(HRTS1_N)  FM(MSIOF3_SYNC)  F_(0, 0)  F_(0, 0) FM(TSN1_MDIO_A)  F_(0, 0)  F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0)
#define IP1SR0_11_8 FM(CTS0_N)  FM(HCTS1_N)  F_(0, 0)  FM(MSIOF1_SYNC)  F_(0, 0) FM(TSN1_MDC_A)  F_(0, 0)  F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0)
#define IP1SR0_15_12 FM(MSIOF0_SYNC)  FM(HCTS3_N)  FM(CTS1_N)  FM(IRQ4)  F_(0, 0) FM(TSN0_LINK_A)  F_(0, 0)  F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0)
#define IP1SR0_19_16 FM(MSIOF0_RXD)  FM(HRX3)  FM(RX1)   F_(0, 0)  F_(0, 0) F_(0, 0)  F_(0, 0)  F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0)
#define IP1SR0_23_20 FM(MSIOF0_TXD)  FM(HTX3)  FM(TX1)   F_(0, 0)  F_(0, 0) F_(0, 0)  F_(0, 0)  F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0)
#define IP1SR0_27_24 FM(MSIOF0_SCK)  FM(HSCK3)  FM(SCK1)  F_(0, 0)  F_(0, 0) F_(0, 0)  F_(0, 0)  F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0)
#define IP1SR0_31_28 FM(MSIOF0_SS1)  FM(HRTS3_N)  FM(RTS1_N)  FM(IRQ5)  F_(0, 0) FM(TSN1_LINK_A)  F_(0, 0)  F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0)
/* IP2SR0 */ /* 0 */ /* 1 */ /* 2 */ /* 3 */ /* 4 */ /* 5 */ /* 6 */ /* 7 - F */
#define IP2SR0_3_0 FM(MSIOF0_SS2)  F_(0, 0)  F_(0, 0)  F_(0, 0)  F_(0, 0) FM(TSN2_LINK_A)  F_(0, 0)  F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0)
#define IP2SR0_7_4 FM(IRQ0)  F_(0, 0)  F_(0, 0)  FM(MSIOF1_SS1)  F_(0, 0) FM(TSN0_MAGIC_A) F_(0, 0)  F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0)
#define IP2SR0_11_8 FM(IRQ1)  F_(0, 0)  F_(0, 0)  FM(MSIOF1_SS2)  F_(0, 0) FM(TSN0_PHY_INT_A) F_(0, 0)  F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0)
#define IP2SR0_15_12 FM(IRQ2)  F_(0, 0)  F_(0, 0)  F_(0, 0)  F_(0, 0) FM(TSN1_PHY_INT_A) F_(0, 0)  F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0)
#define IP2SR0_19_16 FM(IRQ3)  F_(0, 0)  F_(0, 0)  F_(0, 0)  F_(0, 0) FM(TSN2_PHY_INT_A) F_(0, 0)  F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0)

/* IP0SR1 */ /* 0 */ /* 1 */ /* 2 */ /* 3 */ /* 4 */ /* 5 */ /* 6 */ /* 7 - F */
#define IP0SR1_3_0 FM(GP1_00)  FM(TCLK1)  FM(HSCK2)  F_(0, 0)  F_(0, 0) F_(0, 0)  F_(0, 0)  F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0)
#define IP0SR1_7_4 FM(GP1_01)  FM(TCLK4)  FM(HRX2)  F_(0, 0)  F_(0, 0) F_(0, 0)  F_(0, 0)  F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0)
#define IP0SR1_11_8 FM(GP1_02)  F_(0, 0)  FM(HTX2)  FM(MSIOF2_SS1)  F_(0, 0) FM(TSN2_MDC_A)  F_(0, 0)  F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0)
#define IP0SR1_15_12 FM(GP1_03)  FM(TCLK2)  FM(HCTS2_N)  FM(MSIOF2_SS2)  FM(CTS4_N) FM(TSN2_MDIO_A)  F_(0, 0)  F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0)
#define IP0SR1_19_16 FM(GP1_04)  FM(TCLK3)  FM(HRTS2_N)  FM(MSIOF2_SYNC)  FM(RTS4_N) F_(0, 0)  F_(0, 0)  F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0)
#define IP0SR1_23_20 FM(GP1_05)  FM(MSIOF2_SCK)  FM(SCK4)  F_(0, 0)  F_(0, 0) F_(0, 0)  F_(0, 0)  F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0)
#define IP0SR1_27_24 FM(GP1_06)  FM(MSIOF2_RXD)  FM(RX4)   F_(0, 0)  F_(0, 0) F_(0, 0)  F_(0, 0)  F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0)
#define IP0SR1_31_28 FM(GP1_07)  FM(MSIOF2_TXD)  FM(TX4)   F_(0, 0)  F_(0, 0) F_(0, 0)  F_(0, 0)  F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0)

#define PINMUX_GPSR \
  GPSR1_24     \
  GPSR1_23     \
  GPSR1_22     \
  GPSR1_21     \
GPSR0_20 GPSR1_20     \
GPSR0_19 GPSR1_19     \
GPSR0_18 GPSR1_18   GPSR3_18 \
GPSR0_17 GPSR1_17   GPSR3_17 \
GPSR0_16 GPSR1_16 GPSR2_16 GPSR3_16 \
GPSR0_15 GPSR1_15 GPSR2_15 GPSR3_15 \
GPSR0_14 GPSR1_14 GPSR2_14 GPSR3_14 \
GPSR0_13 GPSR1_13 GPSR2_13 GPSR3_13 \
GPSR0_12 GPSR1_12 GPSR2_12 GPSR3_12 \
GPSR0_11 GPSR1_11 GPSR2_11 GPSR3_11 \
GPSR0_10 GPSR1_10 GPSR2_10 GPSR3_10 \
GPSR0_9  GPSR1_9  GPSR2_9  GPSR3_9  \
GPSR0_8  GPSR1_8  GPSR2_8  GPSR3_8  \
GPSR0_7  GPSR1_7  GPSR2_7  GPSR3_7  \
GPSR0_6  GPSR1_6  GPSR2_6  GPSR3_6  \
GPSR0_5  GPSR1_5  GPSR2_5  GPSR3_5  \
GPSR0_4  GPSR1_4  GPSR2_4  GPSR3_4  \
GPSR0_3  GPSR1_3  GPSR2_3  GPSR3_3  \
GPSR0_2  GPSR1_2  GPSR2_2  GPSR3_2  \
GPSR0_1  GPSR1_1  GPSR2_1  GPSR3_1  \
GPSR0_0  GPSR1_0  GPSR2_0  GPSR3_0

#define PINMUX_IPSR \
\
FM(IP0SR0_3_0)  IP0SR0_3_0 FM(IP1SR0_3_0)  IP1SR0_3_0 FM(IP2SR0_3_0)  IP2SR0_3_0 \
FM(IP0SR0_7_4)  IP0SR0_7_4 FM(IP1SR0_7_4)  IP1SR0_7_4 FM(IP2SR0_7_4)  IP2SR0_7_4 \
FM(IP0SR0_11_8)  IP0SR0_11_8 FM(IP1SR0_11_8)  IP1SR0_11_8 FM(IP2SR0_11_8)  IP2SR0_11_8 \
FM(IP0SR0_15_12) IP0SR0_15_12 FM(IP1SR0_15_12) IP1SR0_15_12 FM(IP2SR0_15_12) IP2SR0_15_12 \
FM(IP0SR0_19_16) IP0SR0_19_16 FM(IP1SR0_19_16) IP1SR0_19_16 FM(IP2SR0_19_16) IP2SR0_19_16 \
FM(IP0SR0_23_20) IP0SR0_23_20 FM(IP1SR0_23_20) IP1SR0_23_20 \
FM(IP0SR0_27_24) IP0SR0_27_24 FM(IP1SR0_27_24) IP1SR0_27_24 \
FM(IP0SR0_31_28) IP0SR0_31_28 FM(IP1SR0_31_28) IP1SR0_31_28 \
\
FM(IP0SR1_3_0)  IP0SR1_3_0 \
FM(IP0SR1_7_4)  IP0SR1_7_4 \
FM(IP0SR1_11_8)  IP0SR1_11_8 \
FM(IP0SR1_15_12) IP0SR1_15_12 \
FM(IP0SR1_19_16) IP0SR1_19_16 \
FM(IP0SR1_23_20) IP0SR1_23_20 \
FM(IP0SR1_27_24) IP0SR1_27_24 \
FM(IP0SR1_31_28) IP0SR1_31_28

/* MOD_SEL1 */ /* 0 */ /* 1 */ /* 2 */ /* 3 */
#define MOD_SEL1_11_10  FM(SEL_I2C5_0) F_(0, 0) F_(0, 0) FM(SEL_I2C5_3)
#define MOD_SEL1_9_8  FM(SEL_I2C4_0) F_(0, 0) F_(0, 0) FM(SEL_I2C4_3)
#define MOD_SEL1_7_6  FM(SEL_I2C3_0) F_(0, 0) F_(0, 0) FM(SEL_I2C3_3)
#define MOD_SEL1_5_4  FM(SEL_I2C2_0) F_(0, 0) F_(0, 0) FM(SEL_I2C2_3)
#define MOD_SEL1_3_2  FM(SEL_I2C1_0) F_(0, 0) F_(0, 0) FM(SEL_I2C1_3)
#define MOD_SEL1_1_0  FM(SEL_I2C0_0) F_(0, 0) F_(0, 0) FM(SEL_I2C0_3)

#define PINMUX_MOD_SELS \
\
MOD_SEL1_11_10 \
MOD_SEL1_9_8 \
MOD_SEL1_7_6 \
MOD_SEL1_5_4 \
MOD_SEL1_3_2 \
MOD_SEL1_1_0

#define PINMUX_PHYS \
 FM(SCL0) FM(SDA0) FM(SCL1) FM(SDA1) FM(SCL2) FM(SDA2) FM(SCL3) FM(SDA3) \
 FM(SCL4) FM(SDA4) FM(SCL5) FM(SDA5)

enum {
 PINMUX_RESERVED = 0,

 PINMUX_DATA_BEGIN,
 GP_ALL(DATA),
 PINMUX_DATA_END,

#define F_(x, y)
#define FM(x)   FN_##x,
 PINMUX_FUNCTION_BEGIN,
 GP_ALL(FN),
 PINMUX_GPSR
 PINMUX_IPSR
 PINMUX_MOD_SELS
 PINMUX_FUNCTION_END,
#undef F_
#undef FM

#define F_(x, y)
#define FM(x) x##_MARK,
 PINMUX_MARK_BEGIN,
 PINMUX_GPSR
 PINMUX_IPSR
 PINMUX_MOD_SELS
 PINMUX_PHYS
 PINMUX_MARK_END,
#undef F_
#undef FM
};

static const u16 pinmux_data[] = {
/* Using GP_1_[0-9] requires disabling I2C in MOD_SEL1 */
#define GP_1_0_FN GP_1_0_FN, FN_SEL_I2C0_0
#define GP_1_1_FN GP_1_1_FN, FN_SEL_I2C0_0
#define GP_1_2_FN GP_1_2_FN, FN_SEL_I2C1_0
#define GP_1_3_FN GP_1_3_FN, FN_SEL_I2C1_0
#define GP_1_4_FN GP_1_4_FN, FN_SEL_I2C2_0
#define GP_1_5_FN GP_1_5_FN, FN_SEL_I2C2_0
#define GP_1_6_FN GP_1_6_FN, FN_SEL_I2C3_0
#define GP_1_7_FN GP_1_7_FN, FN_SEL_I2C3_0
#define GP_1_8_FN GP_1_8_FN, FN_SEL_I2C4_0
#define GP_1_9_FN GP_1_9_FN, FN_SEL_I2C4_0
 PINMUX_DATA_GP_ALL(),
#undef GP_1_0_FN
#undef GP_1_1_FN
#undef GP_1_2_FN
#undef GP_1_3_FN
#undef GP_1_4_FN
#undef GP_1_5_FN
#undef GP_1_6_FN
#undef GP_1_7_FN
#undef GP_1_8_FN
#undef GP_1_9_FN

 PINMUX_SINGLE(SD_WP),
 PINMUX_SINGLE(SD_CD),
 PINMUX_SINGLE(MMC_SD_CMD),
 PINMUX_SINGLE(MMC_D7),
 PINMUX_SINGLE(MMC_DS),
 PINMUX_SINGLE(MMC_D6),
 PINMUX_SINGLE(MMC_D4),
 PINMUX_SINGLE(MMC_D5),
 PINMUX_SINGLE(MMC_SD_D3),
 PINMUX_SINGLE(MMC_SD_D2),
 PINMUX_SINGLE(MMC_SD_D1),
 PINMUX_SINGLE(MMC_SD_D0),
 PINMUX_SINGLE(MMC_SD_CLK),
 PINMUX_SINGLE(PCIE1_CLKREQ_N),
 PINMUX_SINGLE(PCIE0_CLKREQ_N),
 PINMUX_SINGLE(QSPI0_IO3),
 PINMUX_SINGLE(QSPI0_SSL),
 PINMUX_SINGLE(QSPI0_MISO_IO1),
 PINMUX_SINGLE(QSPI0_IO2),
 PINMUX_SINGLE(QSPI0_SPCLK),
 PINMUX_SINGLE(QSPI0_MOSI_IO0),
 PINMUX_SINGLE(QSPI1_SPCLK),
 PINMUX_SINGLE(QSPI1_MOSI_IO0),
 PINMUX_SINGLE(QSPI1_IO2),
 PINMUX_SINGLE(QSPI1_MISO_IO1),
 PINMUX_SINGLE(QSPI1_IO3),
 PINMUX_SINGLE(QSPI1_SSL),
 PINMUX_SINGLE(RPC_RESET_N),
 PINMUX_SINGLE(RPC_WP_N),
 PINMUX_SINGLE(RPC_INT_N),

 PINMUX_SINGLE(TSN0_AVTP_CAPTURE_B),
 PINMUX_SINGLE(TSN0_AVTP_MATCH_B),
 PINMUX_SINGLE(TSN0_AVTP_PPS),
 PINMUX_SINGLE(TSN1_AVTP_CAPTURE_B),
 PINMUX_SINGLE(TSN1_AVTP_MATCH_B),
 PINMUX_SINGLE(TSN1_AVTP_PPS),
 PINMUX_SINGLE(TSN0_MAGIC_B),
 PINMUX_SINGLE(TSN1_PHY_INT_B),
 PINMUX_SINGLE(TSN0_PHY_INT_B),
 PINMUX_SINGLE(TSN2_PHY_INT_B),
 PINMUX_SINGLE(TSN0_LINK_B),
 PINMUX_SINGLE(TSN2_LINK_B),
 PINMUX_SINGLE(TSN1_LINK_B),
 PINMUX_SINGLE(TSN1_MDC_B),
 PINMUX_SINGLE(TSN0_MDC_B),
 PINMUX_SINGLE(TSN2_MDC_B),
 PINMUX_SINGLE(TSN0_MDIO_B),
 PINMUX_SINGLE(TSN2_MDIO_B),
 PINMUX_SINGLE(TSN1_MDIO_B),

 /* IP0SR0 */
 PINMUX_IPSR_GPSR(IP0SR0_3_0, SCIF_CLK),

 PINMUX_IPSR_GPSR(IP0SR0_7_4, HSCK0),
 PINMUX_IPSR_GPSR(IP0SR0_7_4, SCK3),
 PINMUX_IPSR_GPSR(IP0SR0_7_4, MSIOF3_SCK),
 PINMUX_IPSR_GPSR(IP0SR0_7_4, TSN0_AVTP_CAPTURE_A),

 PINMUX_IPSR_GPSR(IP0SR0_11_8, HRX0),
 PINMUX_IPSR_GPSR(IP0SR0_11_8, RX3),
 PINMUX_IPSR_GPSR(IP0SR0_11_8, MSIOF3_RXD),
 PINMUX_IPSR_GPSR(IP0SR0_11_8, TSN0_AVTP_MATCH_A),

 PINMUX_IPSR_GPSR(IP0SR0_15_12, HTX0),
 PINMUX_IPSR_GPSR(IP0SR0_15_12, TX3),
 PINMUX_IPSR_GPSR(IP0SR0_15_12, MSIOF3_TXD),

 PINMUX_IPSR_GPSR(IP0SR0_19_16, HCTS0_N),
 PINMUX_IPSR_GPSR(IP0SR0_19_16, CTS3_N),
 PINMUX_IPSR_GPSR(IP0SR0_19_16, MSIOF3_SS1),
 PINMUX_IPSR_GPSR(IP0SR0_19_16, TSN0_MDC_A),

 PINMUX_IPSR_GPSR(IP0SR0_23_20, HRTS0_N),
 PINMUX_IPSR_GPSR(IP0SR0_23_20, RTS3_N),
 PINMUX_IPSR_GPSR(IP0SR0_23_20, MSIOF3_SS2),
 PINMUX_IPSR_GPSR(IP0SR0_23_20, TSN0_MDIO_A),

 PINMUX_IPSR_GPSR(IP0SR0_27_24, RX0),
 PINMUX_IPSR_GPSR(IP0SR0_27_24, HRX1),
 PINMUX_IPSR_GPSR(IP0SR0_27_24, MSIOF1_RXD),
 PINMUX_IPSR_GPSR(IP0SR0_27_24, TSN1_AVTP_MATCH_A),

 PINMUX_IPSR_GPSR(IP0SR0_31_28, TX0),
 PINMUX_IPSR_GPSR(IP0SR0_31_28, HTX1),
 PINMUX_IPSR_GPSR(IP0SR0_31_28, MSIOF1_TXD),
 PINMUX_IPSR_GPSR(IP0SR0_31_28, TSN1_AVTP_CAPTURE_A),

 /* IP1SR0 */
 PINMUX_IPSR_GPSR(IP1SR0_3_0, SCK0),
 PINMUX_IPSR_GPSR(IP1SR0_3_0, HSCK1),
 PINMUX_IPSR_GPSR(IP1SR0_3_0, MSIOF1_SCK),

 PINMUX_IPSR_GPSR(IP1SR0_7_4, RTS0_N),
 PINMUX_IPSR_GPSR(IP1SR0_7_4, HRTS1_N),
 PINMUX_IPSR_GPSR(IP1SR0_7_4, MSIOF3_SYNC),
 PINMUX_IPSR_GPSR(IP1SR0_7_4, TSN1_MDIO_A),

 PINMUX_IPSR_GPSR(IP1SR0_11_8, CTS0_N),
 PINMUX_IPSR_GPSR(IP1SR0_11_8, HCTS1_N),
 PINMUX_IPSR_GPSR(IP1SR0_11_8, MSIOF1_SYNC),
 PINMUX_IPSR_GPSR(IP1SR0_11_8, TSN1_MDC_A),

 PINMUX_IPSR_GPSR(IP1SR0_15_12, MSIOF0_SYNC),
 PINMUX_IPSR_GPSR(IP1SR0_15_12, HCTS3_N),
 PINMUX_IPSR_GPSR(IP1SR0_15_12, CTS1_N),
 PINMUX_IPSR_GPSR(IP1SR0_15_12, IRQ4),
 PINMUX_IPSR_GPSR(IP1SR0_15_12, TSN0_LINK_A),

 PINMUX_IPSR_GPSR(IP1SR0_19_16, MSIOF0_RXD),
 PINMUX_IPSR_GPSR(IP1SR0_19_16, HRX3),
 PINMUX_IPSR_GPSR(IP1SR0_19_16, RX1),

 PINMUX_IPSR_GPSR(IP1SR0_23_20, MSIOF0_TXD),
 PINMUX_IPSR_GPSR(IP1SR0_23_20, HTX3),
 PINMUX_IPSR_GPSR(IP1SR0_23_20, TX1),

 PINMUX_IPSR_GPSR(IP1SR0_27_24, MSIOF0_SCK),
 PINMUX_IPSR_GPSR(IP1SR0_27_24, HSCK3),
 PINMUX_IPSR_GPSR(IP1SR0_27_24, SCK1),

 PINMUX_IPSR_GPSR(IP1SR0_31_28, MSIOF0_SS1),
 PINMUX_IPSR_GPSR(IP1SR0_31_28, HRTS3_N),
 PINMUX_IPSR_GPSR(IP1SR0_31_28, RTS1_N),
 PINMUX_IPSR_GPSR(IP1SR0_31_28, IRQ5),
 PINMUX_IPSR_GPSR(IP1SR0_31_28, TSN1_LINK_A),

 /* IP2SR0 */
 PINMUX_IPSR_GPSR(IP2SR0_3_0, MSIOF0_SS2),
 PINMUX_IPSR_GPSR(IP2SR0_3_0, TSN2_LINK_A),

 PINMUX_IPSR_GPSR(IP2SR0_7_4, IRQ0),
 PINMUX_IPSR_GPSR(IP2SR0_7_4, MSIOF1_SS1),
 PINMUX_IPSR_GPSR(IP2SR0_7_4, TSN0_MAGIC_A),

 PINMUX_IPSR_GPSR(IP2SR0_11_8, IRQ1),
 PINMUX_IPSR_GPSR(IP2SR0_11_8, MSIOF1_SS2),
 PINMUX_IPSR_GPSR(IP2SR0_11_8, TSN0_PHY_INT_A),

 PINMUX_IPSR_GPSR(IP2SR0_15_12, IRQ2),
 PINMUX_IPSR_GPSR(IP2SR0_15_12, TSN1_PHY_INT_A),

 PINMUX_IPSR_GPSR(IP2SR0_19_16, IRQ3),
 PINMUX_IPSR_GPSR(IP2SR0_19_16, TSN2_PHY_INT_A),

 /* IP0SR1 */
 /* GP1_00 = SCL0 */
 PINMUX_IPSR_MSEL(IP0SR1_3_0, GP1_00,  SEL_I2C0_0),
 PINMUX_IPSR_MSEL(IP0SR1_3_0, TCLK1,  SEL_I2C0_0),
 PINMUX_IPSR_MSEL(IP0SR1_3_0, HSCK2,  SEL_I2C0_0),
 PINMUX_IPSR_PHYS(IP0SR1_3_0, SCL0,  SEL_I2C0_3),

 /* GP1_01 = SDA0 */
 PINMUX_IPSR_MSEL(IP0SR1_7_4, GP1_01,  SEL_I2C0_0),
 PINMUX_IPSR_MSEL(IP0SR1_7_4, TCLK4,  SEL_I2C0_0),
 PINMUX_IPSR_MSEL(IP0SR1_7_4, HRX2,  SEL_I2C0_0),
 PINMUX_IPSR_PHYS(IP0SR1_7_4, SDA0,  SEL_I2C0_3),

 /* GP1_02 = SCL1 */
 PINMUX_IPSR_MSEL(IP0SR1_11_8, GP1_02,  SEL_I2C1_0),
 PINMUX_IPSR_MSEL(IP0SR1_11_8, HTX2,  SEL_I2C1_0),
 PINMUX_IPSR_MSEL(IP0SR1_11_8, MSIOF2_SS1, SEL_I2C1_0),
 PINMUX_IPSR_MSEL(IP0SR1_11_8, TSN2_MDC_A, SEL_I2C1_0),
 PINMUX_IPSR_PHYS(IP0SR1_11_8, SCL1,  SEL_I2C1_3),

 /* GP1_03 = SDA1 */
 PINMUX_IPSR_MSEL(IP0SR1_15_12, GP1_03,  SEL_I2C1_0),
 PINMUX_IPSR_MSEL(IP0SR1_15_12, TCLK2,  SEL_I2C1_0),
 PINMUX_IPSR_MSEL(IP0SR1_15_12, HCTS2_N, SEL_I2C1_0),
 PINMUX_IPSR_MSEL(IP0SR1_15_12, MSIOF2_SS2, SEL_I2C1_0),
 PINMUX_IPSR_MSEL(IP0SR1_15_12, CTS4_N,  SEL_I2C1_0),
 PINMUX_IPSR_MSEL(IP0SR1_15_12, TSN2_MDIO_A, SEL_I2C1_0),
 PINMUX_IPSR_PHYS(IP0SR1_15_12, SDA1,  SEL_I2C1_3),

 /* GP1_04 = SCL2 */
 PINMUX_IPSR_MSEL(IP0SR1_19_16, GP1_04,  SEL_I2C2_0),
 PINMUX_IPSR_MSEL(IP0SR1_19_16, TCLK3,  SEL_I2C2_0),
 PINMUX_IPSR_MSEL(IP0SR1_19_16, HRTS2_N, SEL_I2C2_0),
 PINMUX_IPSR_MSEL(IP0SR1_19_16, MSIOF2_SYNC, SEL_I2C2_0),
 PINMUX_IPSR_MSEL(IP0SR1_19_16, RTS4_N,  SEL_I2C2_0),
 PINMUX_IPSR_PHYS(IP0SR1_19_16, SCL2,  SEL_I2C2_3),

 /* GP1_05 = SDA2 */
 PINMUX_IPSR_MSEL(IP0SR1_23_20, GP1_05,  SEL_I2C2_0),
 PINMUX_IPSR_MSEL(IP0SR1_23_20, MSIOF2_SCK, SEL_I2C2_0),
 PINMUX_IPSR_MSEL(IP0SR1_23_20, SCK4,  SEL_I2C2_0),
 PINMUX_IPSR_PHYS(IP0SR1_23_20, SDA2,  SEL_I2C2_3),

 /* GP1_06 = SCL3 */
 PINMUX_IPSR_MSEL(IP0SR1_27_24, GP1_06,  SEL_I2C3_0),
 PINMUX_IPSR_MSEL(IP0SR1_27_24, MSIOF2_RXD, SEL_I2C3_0),
 PINMUX_IPSR_MSEL(IP0SR1_27_24, RX4,  SEL_I2C3_0),
 PINMUX_IPSR_PHYS(IP0SR1_27_24, SCL3,  SEL_I2C3_3),

 /* GP1_07 = SDA3 */
 PINMUX_IPSR_MSEL(IP0SR1_31_28, GP1_07,  SEL_I2C3_0),
 PINMUX_IPSR_MSEL(IP0SR1_31_28, MSIOF2_TXD, SEL_I2C3_0),
 PINMUX_IPSR_MSEL(IP0SR1_31_28, TX4,  SEL_I2C3_0),
 PINMUX_IPSR_PHYS(IP0SR1_31_28, SDA3,  SEL_I2C3_3),

 /* GP1_08 = SCL4 */
 PINMUX_IPSR_NOGM(0,  GP1_08,  SEL_I2C4_0),
 PINMUX_IPSR_NOFN(GP1_08, SCL4,  SEL_I2C4_3),

 /* GP1_09 = SDA4 */
 PINMUX_IPSR_NOGM(0,  GP1_09,  SEL_I2C4_0),
 PINMUX_IPSR_NOFN(GP1_09, SDA4,  SEL_I2C4_3),

 /* GP1_10 = SCL5 */
 PINMUX_IPSR_NOGM(0,  GP1_10,  SEL_I2C5_0),
 PINMUX_IPSR_NOFN(GP1_10, SCL5,  SEL_I2C5_3),

 /* GP1_11 = SDA5 */
 PINMUX_IPSR_NOGM(0,  GP1_11,  SEL_I2C5_0),
 PINMUX_IPSR_NOFN(GP1_11, SDA5,  SEL_I2C5_3),
};

/*
 * Pins not associated with a GPIO port.
 */

enum {
 GP_ASSIGN_LAST(),
 NOGP_ALL(),
};

static const struct sh_pfc_pin pinmux_pins[] = {
 PINMUX_GPIO_GP_ALL(),
};

/* - HSCIF0 ----------------------------------------------------------------- */
static const unsigned int hscif0_data_pins[] = {
 /* HRX0, HTX0 */
 RCAR_GP_PIN(0, 2), RCAR_GP_PIN(0, 3),
};
static const unsigned int hscif0_data_mux[] = {
 HRX0_MARK, HTX0_MARK,
};
static const unsigned int hscif0_clk_pins[] = {
 /* HSCK0 */
 RCAR_GP_PIN(0, 1),
};
static const unsigned int hscif0_clk_mux[] = {
 HSCK0_MARK,
};
static const unsigned int hscif0_ctrl_pins[] = {
 /* HRTS0#, HCTS0# */
 RCAR_GP_PIN(0, 5), RCAR_GP_PIN(0, 4),
};
static const unsigned int hscif0_ctrl_mux[] = {
 HRTS0_N_MARK, HCTS0_N_MARK,
};

/* - HSCIF1 ----------------------------------------------------------------- */
static const unsigned int hscif1_data_pins[] = {
 /* HRX1, HTX1 */
 RCAR_GP_PIN(0, 6), RCAR_GP_PIN(0, 7),
};
static const unsigned int hscif1_data_mux[] = {
 HRX1_MARK, HTX1_MARK,
};
static const unsigned int hscif1_clk_pins[] = {
 /* HSCK1 */
 RCAR_GP_PIN(0, 8),
};
static const unsigned int hscif1_clk_mux[] = {
 HSCK1_MARK,
};
static const unsigned int hscif1_ctrl_pins[] = {
 /* HRTS1#, HCTS1# */
 RCAR_GP_PIN(0, 9), RCAR_GP_PIN(0, 10),
};
static const unsigned int hscif1_ctrl_mux[] = {
 HRTS1_N_MARK, HCTS1_N_MARK,
};

/* - HSCIF2 ----------------------------------------------------------------- */
static const unsigned int hscif2_data_pins[] = {
 /* HRX2, HTX2 */
 RCAR_GP_PIN(1, 1), RCAR_GP_PIN(1, 2),
};
static const unsigned int hscif2_data_mux[] = {
 HRX2_MARK, HTX2_MARK,
};
static const unsigned int hscif2_clk_pins[] = {
 /* HSCK2 */
 RCAR_GP_PIN(1, 0),
};
static const unsigned int hscif2_clk_mux[] = {
 HSCK2_MARK,
};
static const unsigned int hscif2_ctrl_pins[] = {
 /* HRTS2#, HCTS2# */
 RCAR_GP_PIN(1, 4), RCAR_GP_PIN(1, 3),
};
static const unsigned int hscif2_ctrl_mux[] = {
 HRTS2_N_MARK, HCTS2_N_MARK,
};

/* - HSCIF3 ----------------------------------------------------------------- */
static const unsigned int hscif3_data_pins[] = {
 /* HRX3, HTX3 */
 RCAR_GP_PIN(0, 12), RCAR_GP_PIN(0, 13),
};
static const unsigned int hscif3_data_mux[] = {
 HRX3_MARK, HTX3_MARK,
};
static const unsigned int hscif3_clk_pins[] = {
 /* HSCK3 */
 RCAR_GP_PIN(0, 14),
};
static const unsigned int hscif3_clk_mux[] = {
 HSCK3_MARK,
};
static const unsigned int hscif3_ctrl_pins[] = {
 /* HRTS3#, HCTS3# */
 RCAR_GP_PIN(0, 15), RCAR_GP_PIN(0, 11),
};
static const unsigned int hscif3_ctrl_mux[] = {
 HRTS3_N_MARK, HCTS3_N_MARK,
};

/* - I2C0 ------------------------------------------------------------------- */
static const unsigned int i2c0_pins[] = {
 /* SDA0, SCL0 */
 RCAR_GP_PIN(1, 1), RCAR_GP_PIN(1, 0),
};
static const unsigned int i2c0_mux[] = {
 SDA0_MARK, SCL0_MARK,
};

/* - I2C1 ------------------------------------------------------------------- */
static const unsigned int i2c1_pins[] = {
 /* SDA1, SCL1 */
 RCAR_GP_PIN(1, 3), RCAR_GP_PIN(1, 2),
};
static const unsigned int i2c1_mux[] = {
 SDA1_MARK, SCL1_MARK,
};

/* - I2C2 ------------------------------------------------------------------- */
static const unsigned int i2c2_pins[] = {
 /* SDA2, SCL2 */
 RCAR_GP_PIN(1, 5), RCAR_GP_PIN(1, 4),
};
static const unsigned int i2c2_mux[] = {
 SDA2_MARK, SCL2_MARK,
};

/* - I2C3 ------------------------------------------------------------------- */
static const unsigned int i2c3_pins[] = {
 /* SDA3, SCL3 */
 RCAR_GP_PIN(1, 7), RCAR_GP_PIN(1, 6),
};
static const unsigned int i2c3_mux[] = {
 SDA3_MARK, SCL3_MARK,
};

/* - I2C4 ------------------------------------------------------------------- */
static const unsigned int i2c4_pins[] = {
 /* SDA4, SCL4 */
 RCAR_GP_PIN(1, 9), RCAR_GP_PIN(1, 8),
};
static const unsigned int i2c4_mux[] = {
 SDA4_MARK, SCL4_MARK,
};

/* - I2C5 ------------------------------------------------------------------- */
static const unsigned int i2c5_pins[] = {
 /* SDA5, SCL5 */
 RCAR_GP_PIN(1, 11), RCAR_GP_PIN(1, 10),
};
static const unsigned int i2c5_mux[] = {
 SDA5_MARK, SCL5_MARK,
};


/* - INTC-EX ---------------------------------------------------------------- */
static const unsigned int intc_ex_irq0_pins[] = {
 /* IRQ0 */
 RCAR_GP_PIN(0, 17),
};
static const unsigned int intc_ex_irq0_mux[] = {
 IRQ0_MARK,
};
static const unsigned int intc_ex_irq1_pins[] = {
 /* IRQ1 */
 RCAR_GP_PIN(0, 18),
};
static const unsigned int intc_ex_irq1_mux[] = {
 IRQ1_MARK,
};
static const unsigned int intc_ex_irq2_pins[] = {
 /* IRQ2 */
 RCAR_GP_PIN(0, 19),
};
static const unsigned int intc_ex_irq2_mux[] = {
 IRQ2_MARK,
};
static const unsigned int intc_ex_irq3_pins[] = {
 /* IRQ3 */
 RCAR_GP_PIN(0, 20),
};
static const unsigned int intc_ex_irq3_mux[] = {
 IRQ3_MARK,
};
static const unsigned int intc_ex_irq4_pins[] = {
 /* IRQ4 */
 RCAR_GP_PIN(0, 11),
};
static const unsigned int intc_ex_irq4_mux[] = {
 IRQ4_MARK,
};
static const unsigned int intc_ex_irq5_pins[] = {
 /* IRQ5 */
 RCAR_GP_PIN(0, 15),
};
static const unsigned int intc_ex_irq5_mux[] = {
 IRQ5_MARK,
};

/* - MMC -------------------------------------------------------------------- */
static const unsigned int mmc_data_pins[] = {
 /* MMC_SD_D[0:3], MMC_D[4:7] */
 RCAR_GP_PIN(1, 13), RCAR_GP_PIN(1, 14),
 RCAR_GP_PIN(1, 15), RCAR_GP_PIN(1, 16),
 RCAR_GP_PIN(1, 18), RCAR_GP_PIN(1, 17),
 RCAR_GP_PIN(1, 19), RCAR_GP_PIN(1, 21),
};
static const unsigned int mmc_data_mux[] = {
 MMC_SD_D0_MARK, MMC_SD_D1_MARK,
 MMC_SD_D2_MARK, MMC_SD_D3_MARK,
 MMC_D4_MARK, MMC_D5_MARK,
 MMC_D6_MARK, MMC_D7_MARK,
};
static const unsigned int mmc_ctrl_pins[] = {
 /* MMC_SD_CLK, MMC_SD_CMD */
 RCAR_GP_PIN(1, 12), RCAR_GP_PIN(1, 22),
};
static const unsigned int mmc_ctrl_mux[] = {
 MMC_SD_CLK_MARK, MMC_SD_CMD_MARK,
};
static const unsigned int mmc_cd_pins[] = {
 /* SD_CD */
 RCAR_GP_PIN(1, 23),
};
static const unsigned int mmc_cd_mux[] = {
 SD_CD_MARK,
};
static const unsigned int mmc_wp_pins[] = {
 /* SD_WP */
 RCAR_GP_PIN(1, 24),
};
static const unsigned int mmc_wp_mux[] = {
 SD_WP_MARK,
};
static const unsigned int mmc_ds_pins[] = {
 /* MMC_DS */
 RCAR_GP_PIN(1, 20),
};
static const unsigned int mmc_ds_mux[] = {
 MMC_DS_MARK,
};

/* - MSIOF0 ----------------------------------------------------------------- */
static const unsigned int msiof0_clk_pins[] = {
 /* MSIOF0_SCK */
 RCAR_GP_PIN(0, 14),
};
static const unsigned int msiof0_clk_mux[] = {
 MSIOF0_SCK_MARK,
};
static const unsigned int msiof0_sync_pins[] = {
 /* MSIOF0_SYNC */
 RCAR_GP_PIN(0, 11),
};
static const unsigned int msiof0_sync_mux[] = {
 MSIOF0_SYNC_MARK,
};
static const unsigned int msiof0_ss1_pins[] = {
 /* MSIOF0_SS1 */
 RCAR_GP_PIN(0, 15),
};
static const unsigned int msiof0_ss1_mux[] = {
 MSIOF0_SS1_MARK,
};
static const unsigned int msiof0_ss2_pins[] = {
 /* MSIOF0_SS2 */
 RCAR_GP_PIN(0, 16),
};
static const unsigned int msiof0_ss2_mux[] = {
 MSIOF0_SS2_MARK,
};
static const unsigned int msiof0_txd_pins[] = {
 /* MSIOF0_TXD */
 RCAR_GP_PIN(0, 13),
};
static const unsigned int msiof0_txd_mux[] = {
 MSIOF0_TXD_MARK,
};
static const unsigned int msiof0_rxd_pins[] = {
 /* MSIOF0_RXD */
 RCAR_GP_PIN(0, 12),
};
static const unsigned int msiof0_rxd_mux[] = {
 MSIOF0_RXD_MARK,
};

/* - MSIOF1 ----------------------------------------------------------------- */
static const unsigned int msiof1_clk_pins[] = {
 /* MSIOF1_SCK */
 RCAR_GP_PIN(0, 8),
};
static const unsigned int msiof1_clk_mux[] = {
 MSIOF1_SCK_MARK,
};
static const unsigned int msiof1_sync_pins[] = {
 /* MSIOF1_SYNC */
 RCAR_GP_PIN(0, 10),
};
static const unsigned int msiof1_sync_mux[] = {
 MSIOF1_SYNC_MARK,
};
static const unsigned int msiof1_ss1_pins[] = {
 /* MSIOF1_SS1 */
 RCAR_GP_PIN(0, 17),
};
static const unsigned int msiof1_ss1_mux[] = {
 MSIOF1_SS1_MARK,
};
static const unsigned int msiof1_ss2_pins[] = {
 /* MSIOF1_SS2 */
 RCAR_GP_PIN(0, 18),
};
static const unsigned int msiof1_ss2_mux[] = {
 MSIOF1_SS2_MARK,
};
static const unsigned int msiof1_txd_pins[] = {
 /* MSIOF1_TXD */
 RCAR_GP_PIN(0, 7),
};
static const unsigned int msiof1_txd_mux[] = {
 MSIOF1_TXD_MARK,
};
static const unsigned int msiof1_rxd_pins[] = {
 /* MSIOF1_RXD */
 RCAR_GP_PIN(0, 6),
};
static const unsigned int msiof1_rxd_mux[] = {
 MSIOF1_RXD_MARK,
};

/* - MSIOF2 ----------------------------------------------------------------- */
static const unsigned int msiof2_clk_pins[] = {
 /* MSIOF2_SCK */
 RCAR_GP_PIN(1, 5),
};
static const unsigned int msiof2_clk_mux[] = {
 MSIOF2_SCK_MARK,
};
static const unsigned int msiof2_sync_pins[] = {
 /* MSIOF2_SYNC */
 RCAR_GP_PIN(1, 4),
};
static const unsigned int msiof2_sync_mux[] = {
 MSIOF2_SYNC_MARK,
};
static const unsigned int msiof2_ss1_pins[] = {
 /* MSIOF2_SS1 */
 RCAR_GP_PIN(1, 2),
};
static const unsigned int msiof2_ss1_mux[] = {
 MSIOF2_SS1_MARK,
};
static const unsigned int msiof2_ss2_pins[] = {
 /* MSIOF2_SS2 */
 RCAR_GP_PIN(1, 3),
};
static const unsigned int msiof2_ss2_mux[] = {
 MSIOF2_SS2_MARK,
};
static const unsigned int msiof2_txd_pins[] = {
 /* MSIOF2_TXD */
 RCAR_GP_PIN(1, 7),
};
static const unsigned int msiof2_txd_mux[] = {
 MSIOF2_TXD_MARK,
};
static const unsigned int msiof2_rxd_pins[] = {
 /* MSIOF2_RXD */
 RCAR_GP_PIN(1, 6),
};
static const unsigned int msiof2_rxd_mux[] = {
 MSIOF2_RXD_MARK,
};

/* - MSIOF3 ----------------------------------------------------------------- */
static const unsigned int msiof3_clk_pins[] = {
 /* MSIOF3_SCK */
 RCAR_GP_PIN(0, 1),
};
static const unsigned int msiof3_clk_mux[] = {
 MSIOF3_SCK_MARK,
};
static const unsigned int msiof3_sync_pins[] = {
 /* MSIOF3_SYNC */
 RCAR_GP_PIN(0, 9),
};
static const unsigned int msiof3_sync_mux[] = {
 MSIOF3_SYNC_MARK,
};
static const unsigned int msiof3_ss1_pins[] = {
 /* MSIOF3_SS1 */
 RCAR_GP_PIN(0, 4),
};
static const unsigned int msiof3_ss1_mux[] = {
 MSIOF3_SS1_MARK,
};
static const unsigned int msiof3_ss2_pins[] = {
 /* MSIOF3_SS2 */
 RCAR_GP_PIN(0, 5),
};
static const unsigned int msiof3_ss2_mux[] = {
 MSIOF3_SS2_MARK,
};
static const unsigned int msiof3_txd_pins[] = {
 /* MSIOF3_TXD */
 RCAR_GP_PIN(0, 3),
};
static const unsigned int msiof3_txd_mux[] = {
 MSIOF3_TXD_MARK,
};
static const unsigned int msiof3_rxd_pins[] = {
 /* MSIOF3_RXD */
 RCAR_GP_PIN(0, 2),
};
static const unsigned int msiof3_rxd_mux[] = {
 MSIOF3_RXD_MARK,
};

/* - PCIE ------------------------------------------------------------------- */
static const unsigned int pcie0_clkreq_n_pins[] = {
 /* PCIE0_CLKREQ# */
 RCAR_GP_PIN(2, 15),
};

static const unsigned int pcie0_clkreq_n_mux[] = {
 PCIE0_CLKREQ_N_MARK,
};

static const unsigned int pcie1_clkreq_n_pins[] = {
 /* PCIE1_CLKREQ# */
 RCAR_GP_PIN(2, 16),
};

static const unsigned int pcie1_clkreq_n_mux[] = {
 PCIE1_CLKREQ_N_MARK,
};

/* - QSPI0 ------------------------------------------------------------------ */
static const unsigned int qspi0_ctrl_pins[] = {
 /* SPCLK, SSL */
 RCAR_GP_PIN(2, 10), RCAR_GP_PIN(2, 13),
};
static const unsigned int qspi0_ctrl_mux[] = {
 QSPI0_SPCLK_MARK, QSPI0_SSL_MARK,
};
static const unsigned int qspi0_data_pins[] = {
 /* MOSI_IO0, MISO_IO1, IO2, IO3 */
 RCAR_GP_PIN(2, 9), RCAR_GP_PIN(2, 12),
 RCAR_GP_PIN(2, 11), RCAR_GP_PIN(2, 14),
};
static const unsigned int qspi0_data_mux[] = {
 QSPI0_MOSI_IO0_MARK, QSPI0_MISO_IO1_MARK,
 QSPI0_IO2_MARK, QSPI0_IO3_MARK
};

/* - QSPI1 ------------------------------------------------------------------ */
static const unsigned int qspi1_ctrl_pins[] = {
 /* SPCLK, SSL */
 RCAR_GP_PIN(2, 8), RCAR_GP_PIN(2, 3),
};
static const unsigned int qspi1_ctrl_mux[] = {
 QSPI1_SPCLK_MARK, QSPI1_SSL_MARK,
};
static const unsigned int qspi1_data_pins[] = {
 /* MOSI_IO0, MISO_IO1, IO2, IO3 */
 RCAR_GP_PIN(2, 7), RCAR_GP_PIN(2, 5),
 RCAR_GP_PIN(2, 6), RCAR_GP_PIN(2, 4),
};
static const unsigned int qspi1_data_mux[] = {
 QSPI1_MOSI_IO0_MARK, QSPI1_MISO_IO1_MARK,
 QSPI1_IO2_MARK, QSPI1_IO3_MARK
};

/* - SCIF0 ------------------------------------------------------------------ */
static const unsigned int scif0_data_pins[] = {
 /* RX0, TX0 */
 RCAR_GP_PIN(0, 6), RCAR_GP_PIN(0, 7),
};
static const unsigned int scif0_data_mux[] = {
 RX0_MARK, TX0_MARK,
};
static const unsigned int scif0_clk_pins[] = {
 /* SCK0 */
 RCAR_GP_PIN(0, 8),
};
static const unsigned int scif0_clk_mux[] = {
 SCK0_MARK,
};
static const unsigned int scif0_ctrl_pins[] = {
 /* RTS0#, CTS0# */
 RCAR_GP_PIN(0, 9), RCAR_GP_PIN(0, 10),
};
static const unsigned int scif0_ctrl_mux[] = {
 RTS0_N_MARK, CTS0_N_MARK,
};

/* - SCIF1 ------------------------------------------------------------------ */
static const unsigned int scif1_data_pins[] = {
 /* RX1, TX1 */
 RCAR_GP_PIN(0, 12), RCAR_GP_PIN(0, 13),
};
static const unsigned int scif1_data_mux[] = {
 RX1_MARK, TX1_MARK,
};
static const unsigned int scif1_clk_pins[] = {
 /* SCK1 */
 RCAR_GP_PIN(0, 14),
};
static const unsigned int scif1_clk_mux[] = {
 SCK1_MARK,
};
static const unsigned int scif1_ctrl_pins[] = {
 /* RTS1#, CTS1# */
 RCAR_GP_PIN(0, 15), RCAR_GP_PIN(0, 11),
};
static const unsigned int scif1_ctrl_mux[] = {
 RTS1_N_MARK, CTS1_N_MARK,
};

/* - SCIF3 ------------------------------------------------------------------ */
static const unsigned int scif3_data_pins[] = {
 /* RX3, TX3 */
 RCAR_GP_PIN(0, 2), RCAR_GP_PIN(0, 3),
};
static const unsigned int scif3_data_mux[] = {
 RX3_MARK, TX3_MARK,
};
static const unsigned int scif3_clk_pins[] = {
 /* SCK3 */
 RCAR_GP_PIN(0, 1),
};
static const unsigned int scif3_clk_mux[] = {
 SCK3_MARK,
};
static const unsigned int scif3_ctrl_pins[] = {
 /* RTS3#, CTS3# */
 RCAR_GP_PIN(0, 5), RCAR_GP_PIN(0, 4),
};
static const unsigned int scif3_ctrl_mux[] = {
 RTS3_N_MARK, CTS3_N_MARK,
};

/* - SCIF4 ------------------------------------------------------------------ */
static const unsigned int scif4_data_pins[] = {
 /* RX4, TX4 */
 RCAR_GP_PIN(1, 6), RCAR_GP_PIN(1, 7),
};
static const unsigned int scif4_data_mux[] = {
 RX4_MARK, TX4_MARK,
};
static const unsigned int scif4_clk_pins[] = {
 /* SCK4 */
 RCAR_GP_PIN(1, 5),
};
static const unsigned int scif4_clk_mux[] = {
 SCK4_MARK,
};
static const unsigned int scif4_ctrl_pins[] = {
 /* RTS4#, CTS4# */
 RCAR_GP_PIN(1, 4), RCAR_GP_PIN(1, 3),
};
static const unsigned int scif4_ctrl_mux[] = {
 RTS4_N_MARK, CTS4_N_MARK,
};

/* - SCIF Clock ------------------------------------------------------------- */
static const unsigned int scif_clk_pins[] = {
 /* SCIF_CLK */
 RCAR_GP_PIN(0, 0),
};
static const unsigned int scif_clk_mux[] = {
 SCIF_CLK_MARK,
};

/* - TSN0 ------------------------------------------------ */
static const unsigned int tsn0_link_a_pins[] = {
 /* TSN0_LINK_A */
 RCAR_GP_PIN(0, 11),
};
static const unsigned int tsn0_link_a_mux[] = {
 TSN0_LINK_A_MARK,
};
static const unsigned int tsn0_magic_a_pins[] = {
 /* TSN0_MAGIC_A */
 RCAR_GP_PIN(0, 17),
};
static const unsigned int tsn0_magic_a_mux[] = {
 TSN0_MAGIC_A_MARK,
};
static const unsigned int tsn0_phy_int_a_pins[] = {
 /* TSN0_PHY_INT_A */
 RCAR_GP_PIN(0, 18),
};
static const unsigned int tsn0_phy_int_a_mux[] = {
 TSN0_PHY_INT_A_MARK,
};
static const unsigned int tsn0_mdio_a_pins[] = {
 /* TSN0_MDC_A, TSN0_MDIO_A */
 RCAR_GP_PIN(0, 4), RCAR_GP_PIN(0, 5),
};
static const unsigned int tsn0_mdio_a_mux[] = {
 TSN0_MDC_A_MARK, TSN0_MDIO_A_MARK,
};
static const unsigned int tsn0_link_b_pins[] = {
 /* TSN0_LINK_B */
 RCAR_GP_PIN(3, 8),
};
static const unsigned int tsn0_link_b_mux[] = {
 TSN0_LINK_B_MARK,
};
static const unsigned int tsn0_magic_b_pins[] = {
 /* TSN0_MAGIC_B */
 RCAR_GP_PIN(3, 12),
};
static const unsigned int tsn0_magic_b_mux[] = {
 TSN0_MAGIC_B_MARK,
};
static const unsigned int tsn0_phy_int_b_pins[] = {
 /* TSN0_PHY_INT_B */
 RCAR_GP_PIN(3, 10),
};
static const unsigned int tsn0_phy_int_b_mux[] = {
 TSN0_PHY_INT_B_MARK,
};
static const unsigned int tsn0_mdio_b_pins[] = {
 /* TSN0_MDC_B, TSN0_MDIO_B */
 RCAR_GP_PIN(3, 4), RCAR_GP_PIN(3, 2),
};
static const unsigned int tsn0_mdio_b_mux[] = {
 TSN0_MDC_B_MARK, TSN0_MDIO_B_MARK,
};
static const unsigned int tsn0_avtp_pps_pins[] = {
 /* TSN0_AVTP_PPS */
 RCAR_GP_PIN(3, 16),
};
static const unsigned int tsn0_avtp_pps_mux[] = {
 TSN0_AVTP_PPS_MARK,
};
static const unsigned int tsn0_avtp_capture_a_pins[] = {
 /* TSN0_AVTP_CAPTURE_A */
 RCAR_GP_PIN(0, 1),
};
static const unsigned int tsn0_avtp_capture_a_mux[] = {
 TSN0_AVTP_CAPTURE_A_MARK,
};
static const unsigned int tsn0_avtp_match_a_pins[] = {
 /* TSN0_AVTP_MATCH_A */
 RCAR_GP_PIN(0, 2),
};
static const unsigned int tsn0_avtp_match_a_mux[] = {
 TSN0_AVTP_MATCH_A_MARK,
};
static const unsigned int tsn0_avtp_capture_b_pins[] = {
 /* TSN0_AVTP_CAPTURE_B */
 RCAR_GP_PIN(3, 18),
};
static const unsigned int tsn0_avtp_capture_b_mux[] = {
 TSN0_AVTP_CAPTURE_B_MARK,
};
static const unsigned int tsn0_avtp_match_b_pins[] = {
 /* TSN0_AVTP_MATCH_B */
 RCAR_GP_PIN(3, 17),
};
static const unsigned int tsn0_avtp_match_b_mux[] = {
 TSN0_AVTP_MATCH_B_MARK,
};

/* - TSN1 ------------------------------------------------ */
static const unsigned int tsn1_link_a_pins[] = {
 /* TSN1_LINK_A */
 RCAR_GP_PIN(0, 15),
};
static const unsigned int tsn1_link_a_mux[] = {
 TSN1_LINK_A_MARK,
};
static const unsigned int tsn1_phy_int_a_pins[] = {
 /* TSN1_PHY_INT_A */
 RCAR_GP_PIN(0, 19),
};
static const unsigned int tsn1_phy_int_a_mux[] = {
 TSN1_PHY_INT_A_MARK,
};
static const unsigned int tsn1_mdio_a_pins[] = {
 /* TSN1_MDC_A, TSN1_MDIO_A */
 RCAR_GP_PIN(0, 10), RCAR_GP_PIN(0, 9),
};
static const unsigned int tsn1_mdio_a_mux[] = {
 TSN1_MDC_A_MARK, TSN1_MDIO_A_MARK,
};
static const unsigned int tsn1_link_b_pins[] = {
 /* TSN1_LINK_B */
 RCAR_GP_PIN(3, 6),
};
static const unsigned int tsn1_link_b_mux[] = {
 TSN1_LINK_B_MARK,
};
static const unsigned int tsn1_phy_int_b_pins[] = {
 /* TSN1_PHY_INT_B */
 RCAR_GP_PIN(3, 11),
};
static const unsigned int tsn1_phy_int_b_mux[] = {
 TSN1_PHY_INT_B_MARK,
};
static const unsigned int tsn1_mdio_b_pins[] = {
 /* TSN1_MDC_B, TSN1_MDIO_B */
 RCAR_GP_PIN(3, 5), RCAR_GP_PIN(3, 0),
};
static const unsigned int tsn1_mdio_b_mux[] = {
 TSN1_MDC_B_MARK, TSN1_MDIO_B_MARK,
};
static const unsigned int tsn1_avtp_pps_pins[] = {
 /* TSN1_AVTP_PPS */
 RCAR_GP_PIN(3, 13),
};
static const unsigned int tsn1_avtp_pps_mux[] = {
 TSN1_AVTP_PPS_MARK,
};
static const unsigned int tsn1_avtp_capture_a_pins[] = {
 /* TSN1_AVTP_CAPTURE_A */
 RCAR_GP_PIN(0, 7),
};
static const unsigned int tsn1_avtp_capture_a_mux[] = {
 TSN1_AVTP_CAPTURE_A_MARK,
};
static const unsigned int tsn1_avtp_match_a_pins[] = {
 /* TSN1_AVTP_MATCH_A */
 RCAR_GP_PIN(0, 6),
};
static const unsigned int tsn1_avtp_match_a_mux[] = {
 TSN1_AVTP_MATCH_A_MARK,
};
static const unsigned int tsn1_avtp_capture_b_pins[] = {
 /* TSN1_AVTP_CAPTURE_B */
 RCAR_GP_PIN(3, 15),
};
static const unsigned int tsn1_avtp_capture_b_mux[] = {
 TSN1_AVTP_CAPTURE_B_MARK,
};
static const unsigned int tsn1_avtp_match_b_pins[] = {
 /* TSN1_AVTP_MATCH_B */
 RCAR_GP_PIN(3, 14),
};
static const unsigned int tsn1_avtp_match_b_mux[] = {
 TSN1_AVTP_MATCH_B_MARK,
};

/* - TSN2 ------------------------------------------------ */
static const unsigned int tsn2_link_a_pins[] = {
 /* TSN2_LINK_A */
 RCAR_GP_PIN(0, 16),
};
static const unsigned int tsn2_link_a_mux[] = {
 TSN2_LINK_A_MARK,
};
static const unsigned int tsn2_phy_int_a_pins[] = {
 /* TSN2_PHY_INT_A */
 RCAR_GP_PIN(0, 20),
};
static const unsigned int tsn2_phy_int_a_mux[] = {
 TSN2_PHY_INT_A_MARK,
};
static const unsigned int tsn2_mdio_a_pins[] = {
 /* TSN2_MDC_A, TSN2_MDIO_A */
 RCAR_GP_PIN(1, 2), RCAR_GP_PIN(1, 3),
};
static const unsigned int tsn2_mdio_a_mux[] = {
 TSN2_MDC_A_MARK, TSN2_MDIO_A_MARK,
};
static const unsigned int tsn2_link_b_pins[] = {
 /* TSN2_LINK_B */
 RCAR_GP_PIN(3, 7),
};
static const unsigned int tsn2_link_b_mux[] = {
 TSN2_LINK_B_MARK,
};
static const unsigned int tsn2_phy_int_b_pins[] = {
 /* TSN2_PHY_INT_B */
 RCAR_GP_PIN(3, 9),
};
static const unsigned int tsn2_phy_int_b_mux[] = {
 TSN2_PHY_INT_B_MARK,
};
static const unsigned int tsn2_mdio_b_pins[] = {
 /* TSN2_MDC_B, TSN2_MDIO_B */
 RCAR_GP_PIN(3, 3), RCAR_GP_PIN(3, 1),
};
static const unsigned int tsn2_mdio_b_mux[] = {
 TSN2_MDC_B_MARK, TSN2_MDIO_B_MARK,
};

static const struct sh_pfc_pin_group pinmux_groups[] = {
 SH_PFC_PIN_GROUP(hscif0_data),
 SH_PFC_PIN_GROUP(hscif0_clk),
 SH_PFC_PIN_GROUP(hscif0_ctrl),
 SH_PFC_PIN_GROUP(hscif1_data),
 SH_PFC_PIN_GROUP(hscif1_clk),
 SH_PFC_PIN_GROUP(hscif1_ctrl),
 SH_PFC_PIN_GROUP(hscif2_data),
 SH_PFC_PIN_GROUP(hscif2_clk),
 SH_PFC_PIN_GROUP(hscif2_ctrl),
 SH_PFC_PIN_GROUP(hscif3_data),
 SH_PFC_PIN_GROUP(hscif3_clk),
 SH_PFC_PIN_GROUP(hscif3_ctrl),
 SH_PFC_PIN_GROUP(i2c0),
 SH_PFC_PIN_GROUP(i2c1),
 SH_PFC_PIN_GROUP(i2c2),
 SH_PFC_PIN_GROUP(i2c3),
 SH_PFC_PIN_GROUP(i2c4),
 SH_PFC_PIN_GROUP(i2c5),
 SH_PFC_PIN_GROUP(intc_ex_irq0),
 SH_PFC_PIN_GROUP(intc_ex_irq1),
 SH_PFC_PIN_GROUP(intc_ex_irq2),
 SH_PFC_PIN_GROUP(intc_ex_irq3),
 SH_PFC_PIN_GROUP(intc_ex_irq4),
 SH_PFC_PIN_GROUP(intc_ex_irq5),
 BUS_DATA_PIN_GROUP(mmc_data, 1),
 BUS_DATA_PIN_GROUP(mmc_data, 4),
 BUS_DATA_PIN_GROUP(mmc_data, 8),
 SH_PFC_PIN_GROUP(mmc_ctrl),
 SH_PFC_PIN_GROUP(mmc_cd),
 SH_PFC_PIN_GROUP(mmc_wp),
 SH_PFC_PIN_GROUP(mmc_ds),
 SH_PFC_PIN_GROUP(msiof0_clk),
 SH_PFC_PIN_GROUP(msiof0_sync),
 SH_PFC_PIN_GROUP(msiof0_ss1),
 SH_PFC_PIN_GROUP(msiof0_ss2),
 SH_PFC_PIN_GROUP(msiof0_txd),
 SH_PFC_PIN_GROUP(msiof0_rxd),
 SH_PFC_PIN_GROUP(msiof1_clk),
 SH_PFC_PIN_GROUP(msiof1_sync),
 SH_PFC_PIN_GROUP(msiof1_ss1),
 SH_PFC_PIN_GROUP(msiof1_ss2),
 SH_PFC_PIN_GROUP(msiof1_txd),
 SH_PFC_PIN_GROUP(msiof1_rxd),
 SH_PFC_PIN_GROUP(msiof2_clk),
 SH_PFC_PIN_GROUP(msiof2_sync),
 SH_PFC_PIN_GROUP(msiof2_ss1),
 SH_PFC_PIN_GROUP(msiof2_ss2),
 SH_PFC_PIN_GROUP(msiof2_txd),
 SH_PFC_PIN_GROUP(msiof2_rxd),
 SH_PFC_PIN_GROUP(msiof3_clk),
 SH_PFC_PIN_GROUP(msiof3_sync),
 SH_PFC_PIN_GROUP(msiof3_ss1),
 SH_PFC_PIN_GROUP(msiof3_ss2),
 SH_PFC_PIN_GROUP(msiof3_txd),
 SH_PFC_PIN_GROUP(msiof3_rxd),
 SH_PFC_PIN_GROUP(pcie0_clkreq_n),
 SH_PFC_PIN_GROUP(pcie1_clkreq_n),
 SH_PFC_PIN_GROUP(qspi0_ctrl),
 BUS_DATA_PIN_GROUP(qspi0_data, 2),
 BUS_DATA_PIN_GROUP(qspi0_data, 4),
 SH_PFC_PIN_GROUP(qspi1_ctrl),
 BUS_DATA_PIN_GROUP(qspi1_data, 2),
 BUS_DATA_PIN_GROUP(qspi1_data, 4),
 SH_PFC_PIN_GROUP(scif0_data),
 SH_PFC_PIN_GROUP(scif0_clk),
 SH_PFC_PIN_GROUP(scif0_ctrl),
 SH_PFC_PIN_GROUP(scif1_data),
 SH_PFC_PIN_GROUP(scif1_clk),
 SH_PFC_PIN_GROUP(scif1_ctrl),
 SH_PFC_PIN_GROUP(scif3_data),
 SH_PFC_PIN_GROUP(scif3_clk),
 SH_PFC_PIN_GROUP(scif3_ctrl),
 SH_PFC_PIN_GROUP(scif4_data),
 SH_PFC_PIN_GROUP(scif4_clk),
 SH_PFC_PIN_GROUP(scif4_ctrl),
 SH_PFC_PIN_GROUP(scif_clk),
 SH_PFC_PIN_GROUP(tsn0_link_a),
 SH_PFC_PIN_GROUP(tsn0_magic_a),
 SH_PFC_PIN_GROUP(tsn0_phy_int_a),
 SH_PFC_PIN_GROUP(tsn0_mdio_a),
 SH_PFC_PIN_GROUP(tsn0_link_b),
 SH_PFC_PIN_GROUP(tsn0_magic_b),
 SH_PFC_PIN_GROUP(tsn0_phy_int_b),
 SH_PFC_PIN_GROUP(tsn0_mdio_b),
 SH_PFC_PIN_GROUP(tsn0_avtp_pps),
 SH_PFC_PIN_GROUP(tsn0_avtp_capture_a),
 SH_PFC_PIN_GROUP(tsn0_avtp_match_a),
 SH_PFC_PIN_GROUP(tsn0_avtp_capture_b),
 SH_PFC_PIN_GROUP(tsn0_avtp_match_b),
 SH_PFC_PIN_GROUP(tsn1_link_a),
 SH_PFC_PIN_GROUP(tsn1_phy_int_a),
 SH_PFC_PIN_GROUP(tsn1_mdio_a),
 SH_PFC_PIN_GROUP(tsn1_link_b),
 SH_PFC_PIN_GROUP(tsn1_phy_int_b),
 SH_PFC_PIN_GROUP(tsn1_mdio_b),
 SH_PFC_PIN_GROUP(tsn1_avtp_pps),
 SH_PFC_PIN_GROUP(tsn1_avtp_capture_a),
 SH_PFC_PIN_GROUP(tsn1_avtp_match_a),
 SH_PFC_PIN_GROUP(tsn1_avtp_capture_b),
 SH_PFC_PIN_GROUP(tsn1_avtp_match_b),
 SH_PFC_PIN_GROUP(tsn2_link_a),
 SH_PFC_PIN_GROUP(tsn2_phy_int_a),
 SH_PFC_PIN_GROUP(tsn2_mdio_a),
 SH_PFC_PIN_GROUP(tsn2_link_b),
 SH_PFC_PIN_GROUP(tsn2_phy_int_b),
 SH_PFC_PIN_GROUP(tsn2_mdio_b),
};

static const char * const hscif0_groups[] = {
 "hscif0_data",
 "hscif0_clk",
 "hscif0_ctrl",
};

static const char * const hscif1_groups[] = {
 "hscif1_data",
 "hscif1_clk",
 "hscif1_ctrl",
};

static const char * const hscif2_groups[] = {
 "hscif2_data",
 "hscif2_clk",
 "hscif2_ctrl",
};

static const char * const hscif3_groups[] = {
 "hscif3_data",
 "hscif3_clk",
 "hscif3_ctrl",
};

static const char * const i2c0_groups[] = {
 "i2c0",
};

static const char * const i2c1_groups[] = {
 "i2c1",
};

static const char * const i2c2_groups[] = {
 "i2c2",
};

static const char * const i2c3_groups[] = {
 "i2c3",
};

static const char * const i2c4_groups[] = {
 "i2c4",
};

static const char * const i2c5_groups[] = {
 "i2c5",
};

static const char * const intc_ex_groups[] = {
 "intc_ex_irq0",
 "intc_ex_irq1",
 "intc_ex_irq2",
 "intc_ex_irq3",
 "intc_ex_irq4",
 "intc_ex_irq5",
};

static const char * const mmc_groups[] = {
 "mmc_data1",
 "mmc_data4",
 "mmc_data8",
 "mmc_ctrl",
 "mmc_cd",
 "mmc_wp",
 "mmc_ds",
};

static const char * const msiof0_groups[] = {
 "msiof0_clk",
 "msiof0_sync",
 "msiof0_ss1",
 "msiof0_ss2",
 "msiof0_txd",
 "msiof0_rxd",
};

static const char * const msiof1_groups[] = {
 "msiof1_clk",
 "msiof1_sync",
 "msiof1_ss1",
 "msiof1_ss2",
 "msiof1_txd",
 "msiof1_rxd",
};

static const char * const msiof2_groups[] = {
 "msiof2_clk",
 "msiof2_sync",
 "msiof2_ss1",
 "msiof2_ss2",
 "msiof2_txd",
 "msiof2_rxd",
};

static const char * const msiof3_groups[] = {
 "msiof3_clk",
 "msiof3_sync",
 "msiof3_ss1",
 "msiof3_ss2",
 "msiof3_txd",
 "msiof3_rxd",
};

static const char * const pcie_groups[] = {
 "pcie0_clkreq_n",
 "pcie1_clkreq_n",
};

static const char * const qspi0_groups[] = {
 "qspi0_ctrl",
 "qspi0_data2",
 "qspi0_data4",
};

static const char * const qspi1_groups[] = {
 "qspi1_ctrl",
 "qspi1_data2",
 "qspi1_data4",
};

static const char * const scif0_groups[] = {
 "scif0_data",
 "scif0_clk",
 "scif0_ctrl",
};

static const char * const scif1_groups[] = {
 "scif1_data",
 "scif1_clk",
 "scif1_ctrl",
};

static const char * const scif3_groups[] = {
 "scif3_data",
 "scif3_clk",
 "scif3_ctrl",
};

static const char * const scif4_groups[] = {
 "scif4_data",
 "scif4_clk",
 "scif4_ctrl",
};

static const char * const scif_clk_groups[] = {
 "scif_clk",
};

static const char * const tsn0_groups[] = {
 "tsn0_link_a",
 "tsn0_magic_a",
 "tsn0_phy_int_a",
 "tsn0_mdio_a",
 "tsn0_link_b",
 "tsn0_magic_b",
 "tsn0_phy_int_b",
 "tsn0_mdio_b",
 "tsn0_avtp_pps",
 "tsn0_avtp_capture_a",
 "tsn0_avtp_match_a",
 "tsn0_avtp_capture_b",
 "tsn0_avtp_match_b",
};

static const char * const tsn1_groups[] = {
 "tsn1_link_a",
 "tsn1_phy_int_a",
 "tsn1_mdio_a",
 "tsn1_link_b",
 "tsn1_phy_int_b",
 "tsn1_mdio_b",
 "tsn1_avtp_pps",
 "tsn1_avtp_capture_a",
 "tsn1_avtp_match_a",
 "tsn1_avtp_capture_b",
 "tsn1_avtp_match_b",
};

static const char * const tsn2_groups[] = {
 "tsn2_link_a",
 "tsn2_phy_int_a",
 "tsn2_mdio_a",
 "tsn2_link_b",
 "tsn2_phy_int_b",
 "tsn2_mdio_b",
};

static const struct sh_pfc_function pinmux_functions[] = {
 SH_PFC_FUNCTION(hscif0),
 SH_PFC_FUNCTION(hscif1),
 SH_PFC_FUNCTION(hscif2),
 SH_PFC_FUNCTION(hscif3),
 SH_PFC_FUNCTION(i2c0),
 SH_PFC_FUNCTION(i2c1),
 SH_PFC_FUNCTION(i2c2),
 SH_PFC_FUNCTION(i2c3),
 SH_PFC_FUNCTION(i2c4),
 SH_PFC_FUNCTION(i2c5),
 SH_PFC_FUNCTION(intc_ex),
 SH_PFC_FUNCTION(mmc),
 SH_PFC_FUNCTION(msiof0),
 SH_PFC_FUNCTION(msiof1),
 SH_PFC_FUNCTION(msiof2),
 SH_PFC_FUNCTION(msiof3),
 SH_PFC_FUNCTION(pcie),
 SH_PFC_FUNCTION(qspi0),
 SH_PFC_FUNCTION(qspi1),
 SH_PFC_FUNCTION(scif0),
 SH_PFC_FUNCTION(scif1),
 SH_PFC_FUNCTION(scif3),
 SH_PFC_FUNCTION(scif4),
 SH_PFC_FUNCTION(scif_clk),
 SH_PFC_FUNCTION(tsn0),
 SH_PFC_FUNCTION(tsn1),
 SH_PFC_FUNCTION(tsn2),
};

static const struct pinmux_cfg_reg pinmux_config_regs[] = {
#define F_(x, y) FN_##y
#define FM(x)  FN_##x
 { PINMUX_CFG_REG_VAR("GPSR0", 0xe6050040, 32,
        GROUP(-11, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
       1, 1, 1, 1, 1, 1, 1, 1, 1, 1),
        GROUP(
  /* GP0_31_21 RESERVED */
  GP_0_20_FN, GPSR0_20,
  GP_0_19_FN, GPSR0_19,
  GP_0_18_FN, GPSR0_18,
  GP_0_17_FN, GPSR0_17,
  GP_0_16_FN, GPSR0_16,
  GP_0_15_FN, GPSR0_15,
  GP_0_14_FN, GPSR0_14,
  GP_0_13_FN, GPSR0_13,
  GP_0_12_FN, GPSR0_12,
  GP_0_11_FN, GPSR0_11,
  GP_0_10_FN, GPSR0_10,
  GP_0_9_FN, GPSR0_9,
  GP_0_8_FN, GPSR0_8,
  GP_0_7_FN, GPSR0_7,
  GP_0_6_FN, GPSR0_6,
  GP_0_5_FN, GPSR0_5,
  GP_0_4_FN, GPSR0_4,
  GP_0_3_FN, GPSR0_3,
  GP_0_2_FN, GPSR0_2,
  GP_0_1_FN, GPSR0_1,
  GP_0_0_FN, GPSR0_0, ))
 },
 { PINMUX_CFG_REG_VAR("GPSR1", 0xe6050840, 32,
        GROUP(-7, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
       1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1),
        GROUP(
  /* GP1_31_25 RESERVED */
  GP_1_24_FN, GPSR1_24,
  GP_1_23_FN, GPSR1_23,
  GP_1_22_FN, GPSR1_22,
  GP_1_21_FN, GPSR1_21,
  GP_1_20_FN, GPSR1_20,
  GP_1_19_FN, GPSR1_19,
  GP_1_18_FN, GPSR1_18,
  GP_1_17_FN, GPSR1_17,
  GP_1_16_FN, GPSR1_16,
  GP_1_15_FN, GPSR1_15,
  GP_1_14_FN, GPSR1_14,
  GP_1_13_FN, GPSR1_13,
  GP_1_12_FN, GPSR1_12,
  GP_1_11_FN, GPSR1_11,
  GP_1_10_FN, GPSR1_10,
  GP_1_9_FN, GPSR1_9,
  GP_1_8_FN, GPSR1_8,
  GP_1_7_FN, GPSR1_7,
  GP_1_6_FN, GPSR1_6,
  GP_1_5_FN, GPSR1_5,
  GP_1_4_FN, GPSR1_4,
  GP_1_3_FN, GPSR1_3,
  GP_1_2_FN, GPSR1_2,
  GP_1_1_FN, GPSR1_1,
  GP_1_0_FN, GPSR1_0, ))
 },
 { PINMUX_CFG_REG_VAR("GPSR2", 0xe6051040, 32,
        GROUP(-15, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
       1, 1, 1, 1, 1, 1),
        GROUP(
  /* GP2_31_17 RESERVED */
  GP_2_16_FN, GPSR2_16,
  GP_2_15_FN, GPSR2_15,
  GP_2_14_FN, GPSR2_14,
  GP_2_13_FN, GPSR2_13,
  GP_2_12_FN, GPSR2_12,
  GP_2_11_FN, GPSR2_11,
  GP_2_10_FN, GPSR2_10,
  GP_2_9_FN, GPSR2_9,
  GP_2_8_FN, GPSR2_8,
  GP_2_7_FN, GPSR2_7,
  GP_2_6_FN, GPSR2_6,
  GP_2_5_FN, GPSR2_5,
  GP_2_4_FN, GPSR2_4,
  GP_2_3_FN, GPSR2_3,
  GP_2_2_FN, GPSR2_2,
  GP_2_1_FN, GPSR2_1,
  GP_2_0_FN, GPSR2_0, ))
 },
 { PINMUX_CFG_REG_VAR("GPSR3", 0xe6051840, 32,
        GROUP(-13, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
       1, 1, 1, 1, 1, 1, 1, 1),
        GROUP(
  /* GP3_31_19 RESERVED */
  GP_3_18_FN, GPSR3_18,
  GP_3_17_FN, GPSR3_17,
  GP_3_16_FN, GPSR3_16,
  GP_3_15_FN, GPSR3_15,
  GP_3_14_FN, GPSR3_14,
  GP_3_13_FN, GPSR3_13,
  GP_3_12_FN, GPSR3_12,
  GP_3_11_FN, GPSR3_11,
  GP_3_10_FN, GPSR3_10,
  GP_3_9_FN, GPSR3_9,
  GP_3_8_FN, GPSR3_8,
  GP_3_7_FN, GPSR3_7,
  GP_3_6_FN, GPSR3_6,
  GP_3_5_FN, GPSR3_5,
  GP_3_4_FN, GPSR3_4,
  GP_3_3_FN, GPSR3_3,
  GP_3_2_FN, GPSR3_2,
  GP_3_1_FN, GPSR3_1,
  GP_3_0_FN, GPSR3_0, ))
 },
#undef F_
#undef FM

#define F_(x, y) x,
#define FM(x)  FN_##x,
 { PINMUX_CFG_REG("IP0SR0", 0xe6050060, 32, 4, GROUP(
  IP0SR0_31_28
  IP0SR0_27_24
  IP0SR0_23_20
  IP0SR0_19_16
  IP0SR0_15_12
  IP0SR0_11_8
  IP0SR0_7_4
  IP0SR0_3_0))
 },
 { PINMUX_CFG_REG("IP1SR0", 0xe6050064, 32, 4, GROUP(
  IP1SR0_31_28
  IP1SR0_27_24
  IP1SR0_23_20
  IP1SR0_19_16
  IP1SR0_15_12
  IP1SR0_11_8
  IP1SR0_7_4
  IP1SR0_3_0))
 },
 { PINMUX_CFG_REG_VAR("IP2SR0", 0xe6050068, 32,
        GROUP(-12, 4, 4, 4, 4, 4),
        GROUP(
  /* IP2SR0_31_20 RESERVED */
  IP2SR0_19_16
  IP2SR0_15_12
  IP2SR0_11_8
  IP2SR0_7_4
  IP2SR0_3_0))
 },
 { PINMUX_CFG_REG("IP0SR1", 0xe6050860, 32, 4, GROUP(
  IP0SR1_31_28
  IP0SR1_27_24
  IP0SR1_23_20
  IP0SR1_19_16
  IP0SR1_15_12
  IP0SR1_11_8
  IP0SR1_7_4
  IP0SR1_3_0))
 },
#undef F_
#undef FM

#define F_(x, y) x,
#define FM(x)  FN_##x,
 { PINMUX_CFG_REG_VAR("MOD_SEL1", 0xe6050900, 32,
        GROUP(-20, 2, 2, 2, 2, 2, 2),
        GROUP(
  /* RESERVED 31-12 */
  MOD_SEL1_11_10
  MOD_SEL1_9_8
  MOD_SEL1_7_6
  MOD_SEL1_5_4
  MOD_SEL1_3_2
  MOD_SEL1_1_0))
 },
 { /* sentinel */ }
};

static const struct pinmux_drive_reg pinmux_drive_regs[] = {
 { PINMUX_DRIVE_REG("DRV0CTRL0", 0xe6050080) {
  { RCAR_GP_PIN(0,  7), 28, 3 }, /* TX0 */
  { RCAR_GP_PIN(0,  6), 24, 3 }, /* RX0 */
  { RCAR_GP_PIN(0,  5), 20, 3 }, /* HRTS0_N */
  { RCAR_GP_PIN(0,  4), 16, 3 }, /* HCTS0_N */
  { RCAR_GP_PIN(0,  3), 12, 3 }, /* HTX0 */
  { RCAR_GP_PIN(0,  2),  8, 3 }, /* HRX0 */
  { RCAR_GP_PIN(0,  1),  4, 3 }, /* HSCK0 */
  { RCAR_GP_PIN(0,  0),  0, 3 }, /* SCIF_CLK */
 } },
 { PINMUX_DRIVE_REG("DRV1CTRL0", 0xe6050084) {
  { RCAR_GP_PIN(0, 15), 28, 3 }, /* MSIOF0_SS1 */
  { RCAR_GP_PIN(0, 14), 24, 3 }, /* MSIOF0_SCK */
  { RCAR_GP_PIN(0, 13), 20, 3 }, /* MSIOF0_TXD */
  { RCAR_GP_PIN(0, 12), 16, 3 }, /* MSIOF0_RXD */
  { RCAR_GP_PIN(0, 11), 12, 3 }, /* MSIOF0_SYNC */
  { RCAR_GP_PIN(0, 10),  8, 3 }, /* CTS0_N */
  { RCAR_GP_PIN(0,  9),  4, 3 }, /* RTS0_N */
  { RCAR_GP_PIN(0,  8),  0, 3 }, /* SCK0 */
 } },
 { PINMUX_DRIVE_REG("DRV2CTRL0", 0xe6050088) {
  { RCAR_GP_PIN(0, 20), 16, 3 }, /* IRQ3 */
  { RCAR_GP_PIN(0, 19), 12, 3 }, /* IRQ2 */
  { RCAR_GP_PIN(0, 18),  8, 3 }, /* IRQ1 */
  { RCAR_GP_PIN(0, 17),  4, 3 }, /* IRQ0 */
  { RCAR_GP_PIN(0, 16),  0, 3 }, /* MSIOF0_SS2 */
 } },
 { PINMUX_DRIVE_REG("DRV0CTRL1", 0xe6050880) {
  { RCAR_GP_PIN(1,  7), 28, 3 }, /* GP1_07 */
  { RCAR_GP_PIN(1,  6), 24, 3 }, /* GP1_06 */
  { RCAR_GP_PIN(1,  5), 20, 3 }, /* GP1_05 */
  { RCAR_GP_PIN(1,  4), 16, 3 }, /* GP1_04 */
  { RCAR_GP_PIN(1,  3), 12, 3 }, /* GP1_03 */
  { RCAR_GP_PIN(1,  2),  8, 3 }, /* GP1_02 */
  { RCAR_GP_PIN(1,  1),  4, 3 }, /* GP1_01 */
  { RCAR_GP_PIN(1,  0),  0, 3 }, /* GP1_00 */
 } },
 { PINMUX_DRIVE_REG("DRV1CTRL1", 0xe6050884) {
  { RCAR_GP_PIN(1, 15), 28, 3 }, /* MMC_SD_D2 */
  { RCAR_GP_PIN(1, 14), 24, 3 }, /* MMC_SD_D1 */
  { RCAR_GP_PIN(1, 13), 20, 3 }, /* MMC_SD_D0 */
  { RCAR_GP_PIN(1, 12), 16, 3 }, /* MMC_SD_CLK */
  { RCAR_GP_PIN(1, 11), 12, 3 }, /* GP1_11 */
  { RCAR_GP_PIN(1, 10),  8, 3 }, /* GP1_10 */
  { RCAR_GP_PIN(1,  9),  4, 3 }, /* GP1_09 */
  { RCAR_GP_PIN(1,  8),  0, 3 }, /* GP1_08 */
 } },
 { PINMUX_DRIVE_REG("DRV2CTRL1", 0xe6050888) {
  { RCAR_GP_PIN(1, 23), 28, 3 }, /* SD_CD */
  { RCAR_GP_PIN(1, 22), 24, 3 }, /* MMC_SD_CMD */
  { RCAR_GP_PIN(1, 21), 20, 3 }, /* MMC_D7 */
  { RCAR_GP_PIN(1, 20), 16, 3 }, /* MMC_DS */
  { RCAR_GP_PIN(1, 19), 12, 3 }, /* MMC_D6 */
  { RCAR_GP_PIN(1, 18),  8, 3 }, /* MMC_D4 */
  { RCAR_GP_PIN(1, 17),  4, 3 }, /* MMC_D5 */
  { RCAR_GP_PIN(1, 16),  0, 3 }, /* MMC_SD_D3 */
 } },
 { PINMUX_DRIVE_REG("DRV3CTRL1", 0xe605088c) {
  { RCAR_GP_PIN(1, 24),  0, 3 }, /* SD_WP */
 } },
 { PINMUX_DRIVE_REG("DRV0CTRL2", 0xe6051080) {
  { RCAR_GP_PIN(2,  7), 28, 2 }, /* QSPI1_MOSI_IO0 */
  { RCAR_GP_PIN(2,  6), 24, 2 }, /* QSPI1_IO2 */
  { RCAR_GP_PIN(2,  5), 20, 2 }, /* QSPI1_MISO_IO1 */
  { RCAR_GP_PIN(2,  4), 16, 2 }, /* QSPI1_IO3 */
  { RCAR_GP_PIN(2,  3), 12, 2 }, /* QSPI1_SSL */
  { RCAR_GP_PIN(2,  2),  8, 2 }, /* RPC_RESET_N */
  { RCAR_GP_PIN(2,  1),  4, 2 }, /* RPC_WP_N */
  { RCAR_GP_PIN(2,  0),  0, 2 }, /* RPC_INT_N */
 } },
 { PINMUX_DRIVE_REG("DRV1CTRL2", 0xe6051084) {
  { RCAR_GP_PIN(2, 15), 28, 3 }, /* PCIE0_CLKREQ_N */
  { RCAR_GP_PIN(2, 14), 24, 2 }, /* QSPI0_IO3 */
  { RCAR_GP_PIN(2, 13), 20, 2 }, /* QSPI0_SSL */
  { RCAR_GP_PIN(2, 12), 16, 2 }, /* QSPI0_MISO_IO1 */
  { RCAR_GP_PIN(2, 11), 12, 2 }, /* QSPI0_IO2 */
  { RCAR_GP_PIN(2, 10),  8, 2 }, /* QSPI0_SPCLK */
  { RCAR_GP_PIN(2,  9),  4, 2 }, /* QSPI0_MOSI_IO0 */
  { RCAR_GP_PIN(2,  8),  0, 2 }, /* QSPI1_SPCLK */
 } },
 { PINMUX_DRIVE_REG("DRV2CTRL2", 0xe6051088) {
  { RCAR_GP_PIN(2, 16),  0, 3 }, /* PCIE1_CLKREQ_N */
 } },
 { PINMUX_DRIVE_REG("DRV0CTRL3", 0xe6051880) {
  { RCAR_GP_PIN(3,  7), 28, 3 }, /* TSN2_LINK_B */
  { RCAR_GP_PIN(3,  6), 24, 3 }, /* TSN1_LINK_B */
  { RCAR_GP_PIN(3,  5), 20, 3 }, /* TSN1_MDC_B */
  { RCAR_GP_PIN(3,  4), 16, 3 }, /* TSN0_MDC_B */
  { RCAR_GP_PIN(3,  3), 12, 3 }, /* TSN2_MDC_B */
  { RCAR_GP_PIN(3,  2),  8, 3 }, /* TSN0_MDIO_B */
  { RCAR_GP_PIN(3,  1),  4, 3 }, /* TSN2_MDIO_B */
  { RCAR_GP_PIN(3,  0),  0, 3 }, /* TSN1_MDIO_B */
 } },
 { PINMUX_DRIVE_REG("DRV1CTRL3", 0xe6051884) {
  { RCAR_GP_PIN(3, 15), 28, 3 }, /* TSN1_AVTP_CAPTURE_B */
  { RCAR_GP_PIN(3, 14), 24, 3 }, /* TSN1_AVTP_MATCH_B */
  { RCAR_GP_PIN(3, 13), 20, 3 }, /* TSN1_AVTP_PPS */
  { RCAR_GP_PIN(3, 12), 16, 3 }, /* TSN0_MAGIC_B */
  { RCAR_GP_PIN(3, 11), 12, 3 }, /* TSN1_PHY_INT_B */
  { RCAR_GP_PIN(3, 10),  8, 3 }, /* TSN0_PHY_INT_B */
  { RCAR_GP_PIN(3,  9),  4, 3 }, /* TSN2_PHY_INT_B */
  { RCAR_GP_PIN(3,  8),  0, 3 }, /* TSN0_LINK_B */
 } },
 { PINMUX_DRIVE_REG("DRV2CTRL3", 0xe6051888) {
  { RCAR_GP_PIN(3, 18),  8, 3 }, /* TSN0_AVTP_CAPTURE_B */
  { RCAR_GP_PIN(3, 17),  4, 3 }, /* TSN0_AVTP_MATCH_B */
  { RCAR_GP_PIN(3, 16),  0, 3 }, /* TSN0_AVTP_PPS */
 } },
 { /* sentinel */ }
};

enum ioctrl_regs {
 POC0,
 POC1,
 POC3,
 TD0SEL1,
};

static const struct pinmux_ioctrl_reg pinmux_ioctrl_regs[] = {
 [POC0] = { 0xe60500a0, },
 [POC1] = { 0xe60508a0, },
 [POC3] = { 0xe60518a0, },
 [TD0SEL1] = { 0xe6050920, },
 { /* sentinel */ }
};

static int r8a779f0_pin_to_pocctrl(unsigned int pin, u32 *pocctrl)
{
 int bit = pin & 0x1f;

 *pocctrl = pinmux_ioctrl_regs[POC0].reg;
 if (pin >= RCAR_GP_PIN(0, 0) && pin <= RCAR_GP_PIN(0, 20))
  return bit;

 *pocctrl = pinmux_ioctrl_regs[POC1].reg;
 if (pin >= RCAR_GP_PIN(1, 0) && pin <= RCAR_GP_PIN(1, 24))
  return bit;

 *pocctrl = pinmux_ioctrl_regs[POC3].reg;
 if (pin >= RCAR_GP_PIN(3, 0) && pin <= RCAR_GP_PIN(3, 18))
  return bit;

 return -EINVAL;
}

static const struct pinmux_bias_reg pinmux_bias_regs[] = {
 { PINMUX_BIAS_REG("PUEN0", 0xe60500c0, "PUD0", 0xe60500e0) {
  [ 0] = RCAR_GP_PIN(0,  0), /* SCIF_CLK */
  [ 1] = RCAR_GP_PIN(0,  1), /* HSCK0 */
  [ 2] = RCAR_GP_PIN(0,  2), /* HRX0 */
  [ 3] = RCAR_GP_PIN(0,  3), /* HTX0 */
  [ 4] = RCAR_GP_PIN(0,  4), /* HCTS0_N */
  [ 5] = RCAR_GP_PIN(0,  5), /* HRTS0_N */
  [ 6] = RCAR_GP_PIN(0,  6), /* RX0 */
  [ 7] = RCAR_GP_PIN(0,  7), /* TX0 */
  [ 8] = RCAR_GP_PIN(0,  8), /* SCK0 */
  [ 9] = RCAR_GP_PIN(0,  9), /* RTS0_N */
  [10] = RCAR_GP_PIN(0, 10), /* CTS0_N */
  [11] = RCAR_GP_PIN(0, 11), /* MSIOF0_SYNC */
  [12] = RCAR_GP_PIN(0, 12), /* MSIOF0_RXD */
  [13] = RCAR_GP_PIN(0, 13), /* MSIOF0_TXD */
  [14] = RCAR_GP_PIN(0, 14), /* MSIOF0_SCK */
  [15] = RCAR_GP_PIN(0, 15), /* MSIOF0_SS1 */
  [16] = RCAR_GP_PIN(0, 16), /* MSIOF0_SS2 */
  [17] = RCAR_GP_PIN(0, 17), /* IRQ0 */
  [18] = RCAR_GP_PIN(0, 18), /* IRQ1 */
  [19] = RCAR_GP_PIN(0, 19), /* IRQ2 */
  [20] = RCAR_GP_PIN(0, 20), /* IRQ3 */
  [21] = SH_PFC_PIN_NONE,
  [22] = SH_PFC_PIN_NONE,
  [23] = SH_PFC_PIN_NONE,
  [24] = SH_PFC_PIN_NONE,
  [25] = SH_PFC_PIN_NONE,
  [26] = SH_PFC_PIN_NONE,
  [27] = SH_PFC_PIN_NONE,
  [28] = SH_PFC_PIN_NONE,
  [29] = SH_PFC_PIN_NONE,
  [30] = SH_PFC_PIN_NONE,
  [31] = SH_PFC_PIN_NONE,
 } },
 { PINMUX_BIAS_REG("PUEN1", 0xe60508c0, "PUD1", 0xe60508e0) {
  [ 0] = RCAR_GP_PIN(1,  0), /* GP1_00 */
  [ 1] = RCAR_GP_PIN(1,  1), /* GP1_01 */
  [ 2] = RCAR_GP_PIN(1,  2), /* GP1_02 */
  [ 3] = RCAR_GP_PIN(1,  3), /* GP1_03 */
  [ 4] = RCAR_GP_PIN(1,  4), /* GP1_04 */
  [ 5] = RCAR_GP_PIN(1,  5), /* GP1_05 */
  [ 6] = RCAR_GP_PIN(1,  6), /* GP1_06 */
  [ 7] = RCAR_GP_PIN(1,  7), /* GP1_07 */
  [ 8] = RCAR_GP_PIN(1,  8), /* GP1_08 */
  [ 9] = RCAR_GP_PIN(1,  9), /* GP1_09 */
  [10] = RCAR_GP_PIN(1, 10), /* GP1_10 */
  [11] = RCAR_GP_PIN(1, 11), /* GP1_11 */
  [12] = RCAR_GP_PIN(1, 12), /* MMC_SD_CLK */
  [13] = RCAR_GP_PIN(1, 13), /* MMC_SD_D0 */
  [14] = RCAR_GP_PIN(1, 14), /* MMC_SD_D1 */
  [15] = RCAR_GP_PIN(1, 15), /* MMC_SD_D2 */
  [16] = RCAR_GP_PIN(1, 16), /* MMC_SD_D3 */
  [17] = RCAR_GP_PIN(1, 17), /* MMC_D5 */
  [18] = RCAR_GP_PIN(1, 18), /* MMC_D4 */
  [19] = RCAR_GP_PIN(1, 19), /* MMC_D6 */
  [20] = RCAR_GP_PIN(1, 20), /* MMC_DS */
  [21] = RCAR_GP_PIN(1, 21), /* MMC_D7 */
  [22] = RCAR_GP_PIN(1, 22), /* MMC_SD_CMD */
  [23] = RCAR_GP_PIN(1, 23), /* SD_CD */
  [24] = RCAR_GP_PIN(1, 24), /* SD_WP */
  [25] = SH_PFC_PIN_NONE,
  [26] = SH_PFC_PIN_NONE,
  [27] = SH_PFC_PIN_NONE,
  [28] = SH_PFC_PIN_NONE,
  [29] = SH_PFC_PIN_NONE,
  [30] = SH_PFC_PIN_NONE,
  [31] = SH_PFC_PIN_NONE,
 } },
 { PINMUX_BIAS_REG("PUEN2", 0xe60510c0, "PUD2", 0xe60510e0) {
  [ 0] = RCAR_GP_PIN(2,  0), /* RPC_INT_N */
  [ 1] = RCAR_GP_PIN(2,  1), /* RPC_WP_N */
  [ 2] = RCAR_GP_PIN(2,  2), /* RPC_RESET_N */
  [ 3] = RCAR_GP_PIN(2,  3), /* QSPI1_SSL */
  [ 4] = RCAR_GP_PIN(2,  4), /* QSPI1_IO3 */
  [ 5] = RCAR_GP_PIN(2,  5), /* QSPI1_MISO_IO1 */
  [ 6] = RCAR_GP_PIN(2,  6), /* QSPI1_IO2 */
  [ 7] = RCAR_GP_PIN(2,  7), /* QSPI1_MOSI_IO0 */
  [ 8] = RCAR_GP_PIN(2,  8), /* QSPI1_SPCLK */
  [ 9] = RCAR_GP_PIN(2,  9), /* QSPI0_MOSI_IO0 */
  [10] = RCAR_GP_PIN(2, 10), /* QSPI0_SPCLK */
  [11] = RCAR_GP_PIN(2, 11), /* QSPI0_IO2 */
  [12] = RCAR_GP_PIN(2, 12), /* QSPI0_MISO_IO1 */
  [13] = RCAR_GP_PIN(2, 13), /* QSPI0_SSL */
  [14] = RCAR_GP_PIN(2, 14), /* QSPI0_IO3 */
  [15] = RCAR_GP_PIN(2, 15), /* PCIE0_CLKREQ_N */
  [16] = RCAR_GP_PIN(2, 16), /* PCIE1_CLKREQ_N */
  [17] = SH_PFC_PIN_NONE,
  [18] = SH_PFC_PIN_NONE,
  [19] = SH_PFC_PIN_NONE,
  [20] = SH_PFC_PIN_NONE,
  [21] = SH_PFC_PIN_NONE,
  [22] = SH_PFC_PIN_NONE,
  [23] = SH_PFC_PIN_NONE,
  [24] = SH_PFC_PIN_NONE,
  [25] = SH_PFC_PIN_NONE,
  [26] = SH_PFC_PIN_NONE,
  [27] = SH_PFC_PIN_NONE,
  [28] = SH_PFC_PIN_NONE,
  [29] = SH_PFC_PIN_NONE,
  [30] = SH_PFC_PIN_NONE,
  [31] = SH_PFC_PIN_NONE,
 } },
 { PINMUX_BIAS_REG("PUEN3", 0xe60518c0, "PUD3", 0xe60518e0) {
  [ 0] = RCAR_GP_PIN(3,  0), /* TSN1_MDIO_B */
  [ 1] = RCAR_GP_PIN(3,  1), /* TSN2_MDIO_B */
  [ 2] = RCAR_GP_PIN(3,  2), /* TSN0_MDIO_B */
  [ 3] = RCAR_GP_PIN(3,  3), /* TSN2_MDC_B */
  [ 4] = RCAR_GP_PIN(3,  4), /* TSN0_MDC_B */
  [ 5] = RCAR_GP_PIN(3,  5), /* TSN1_MDC_B */
  [ 6] = RCAR_GP_PIN(3,  6), /* TSN1_LINK_B */
  [ 7] = RCAR_GP_PIN(3,  7), /* TSN2_LINK_B */
  [ 8] = RCAR_GP_PIN(3,  8), /* TSN0_LINK_B */
  [ 9] = RCAR_GP_PIN(3,  9), /* TSN2_PHY_INT_B */
  [10] = RCAR_GP_PIN(3, 10), /* TSN0_PHY_INT_B */
  [11] = RCAR_GP_PIN(3, 11), /* TSN1_PHY_INT_B */
  [12] = RCAR_GP_PIN(3, 12), /* TSN0_MAGIC_B */
  [13] = RCAR_GP_PIN(3, 13), /* TSN1_AVTP_PPS */
  [14] = RCAR_GP_PIN(3, 14), /* TSN1_AVTP_MATCH_B */
  [15] = RCAR_GP_PIN(3, 15), /* TSN1_AVTP_CAPTURE_B */
  [16] = RCAR_GP_PIN(3, 16), /* TSN0_AVTP_PPS */
  [17] = RCAR_GP_PIN(3, 17), /* TSN0_AVTP_MATCH_B */
  [18] = RCAR_GP_PIN(3, 18), /* TSN0_AVTP_CAPTURE_B */
  [19] = SH_PFC_PIN_NONE,
  [20] = SH_PFC_PIN_NONE,
  [21] = SH_PFC_PIN_NONE,
  [22] = SH_PFC_PIN_NONE,
  [23] = SH_PFC_PIN_NONE,
  [24] = SH_PFC_PIN_NONE,
  [25] = SH_PFC_PIN_NONE,
  [26] = SH_PFC_PIN_NONE,
  [27] = SH_PFC_PIN_NONE,
  [28] = SH_PFC_PIN_NONE,
  [29] = SH_PFC_PIN_NONE,
  [30] = SH_PFC_PIN_NONE,
  [31] = SH_PFC_PIN_NONE,
 } },
 { /* sentinel */ }
};

static const struct sh_pfc_soc_operations r8a779f0_pfc_ops = {
 .pin_to_pocctrl = r8a779f0_pin_to_pocctrl,
 .get_bias = rcar_pinmux_get_bias,
 .set_bias = rcar_pinmux_set_bias,
};

const struct sh_pfc_soc_info r8a779f0_pinmux_info = {
 .name = "r8a779f0_pfc",
 .ops = &r8a779f0_pfc_ops,
 .unlock_reg = 0x1ff, /* PMMRn mask */

 .function = { PINMUX_FUNCTION_BEGIN, PINMUX_FUNCTION_END },

 .pins = pinmux_pins,
 .nr_pins = ARRAY_SIZE(pinmux_pins),
 .groups = pinmux_groups,
 .nr_groups = ARRAY_SIZE(pinmux_groups),
 .functions = pinmux_functions,
 .nr_functions = ARRAY_SIZE(pinmux_functions),

 .cfg_regs = pinmux_config_regs,
 .drive_regs = pinmux_drive_regs,
 .bias_regs = pinmux_bias_regs,
 .ioctrl_regs = pinmux_ioctrl_regs,

 .pinmux_data = pinmux_data,
 .pinmux_data_size = ARRAY_SIZE(pinmux_data),
};

Messung V0.5
C=93 H=96 G=94

¤ Dauer der Verarbeitung: 0.24 Sekunden  ¤

*© Formatika GbR, Deutschland






Wurzel

Suchen

Beweissystem der NASA

Beweissystem Isabelle

NIST Cobol Testsuite

Cephes Mathematical Library

Wiener Entwicklungsmethode

Haftungshinweis

Die Informationen auf dieser Webseite wurden nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit, noch Qualität der bereit gestellten Informationen zugesichert.

Bemerkung:

Die farbliche Syntaxdarstellung und die Messung sind noch experimentell.