From 47b1fe0ca134d3e434e498a7b3d10b723e9855e0 Mon Sep 17 00:00:00 2001
From: Valentine Barshak <valentine.barshak@cogentembedded.com>
Date: Wed, 31 Oct 2018 00:46:40 +0300
Subject: [PATCH 4/5] plat: renesas: rcar: Add R-Car V3H support

Add R-Car V3H support. This is based on the original
V3H support patch for Yocto v2.23.1 by Vladimir Barinov.

Signed-off-by: Vladimir Barinov <vladimir.barinov@cogentembedded.com>
Signed-off-by: Valentine Barshak <valentine.barshak@cogentembedded.com>
---
 plat/renesas/rcar/bl2_cpg_init.c             |   68 ++
 plat/renesas/rcar/bl2_rcar_setup.c           |   13 +-
 plat/renesas/rcar/ddr/ddr_b/boot_init_dram.c |    7 +
 plat/renesas/rcar/drivers/rom/rom_api.c      |   17 +-
 plat/renesas/rcar/drivers/scif/scif.S        |    2 +-
 plat/renesas/rcar/include/bl2_dma_register.h |    2 +-
 plat/renesas/rcar/include/platform_def.h     |   10 +-
 plat/renesas/rcar/pfc/V3H/pfc_init_v3h.c     | 1196 ++++++++++++++++++++++++++
 plat/renesas/rcar/pfc/V3H/pfc_init_v3h.h     |   37 +
 plat/renesas/rcar/pfc/pfc.mk                 |    7 +
 plat/renesas/rcar/pfc/pfc_init.c             |   20 +
 plat/renesas/rcar/platform.mk                |   18 +
 plat/renesas/rcar/qos/V3H/qos_init_v3h_v10.c |  651 ++++++++++++++
 plat/renesas/rcar/qos/V3H/qos_init_v3h_v10.h |   37 +
 plat/renesas/rcar/qos/qos.mk                 |    7 +
 plat/renesas/rcar/qos/qos_init.c             |   25 +
 plat/renesas/rcar/rcar_def.h                 |    1 +
 tools/dummy_create/makefile                  |   14 +-
 18 files changed, 2121 insertions(+), 11 deletions(-)
 create mode 100644 plat/renesas/rcar/pfc/V3H/pfc_init_v3h.c
 create mode 100644 plat/renesas/rcar/pfc/V3H/pfc_init_v3h.h
 create mode 100644 plat/renesas/rcar/qos/V3H/qos_init_v3h_v10.c
 create mode 100644 plat/renesas/rcar/qos/V3H/qos_init_v3h_v10.h

diff --git a/plat/renesas/rcar/bl2_cpg_init.c b/plat/renesas/rcar/bl2_cpg_init.c
index 32a6746..1481029 100644
--- a/plat/renesas/rcar/bl2_cpg_init.c
+++ b/plat/renesas/rcar/bl2_cpg_init.c
@@ -32,6 +32,10 @@ static void bl2_system_cpg_init_e3(void);
 static void bl2_realtime_cpg_init_v3m(void);
 static void bl2_system_cpg_init_v3m(void);
 #endif /* (RCAR_LSI == RCAR_AUTO) || (RCAR_LSI == RCAR_V3M) */
+#if (RCAR_LSI == RCAR_AUTO) || (RCAR_LSI == RCAR_V3H)
+static void bl2_realtime_cpg_init_v3h(void);
+static void bl2_system_cpg_init_v3h(void);
+#endif /* (RCAR_LSI == RCAR_AUTO) || (RCAR_LSI == RCAR_V3H) */
 
 typedef struct {
 	uintptr_t	adr;
@@ -423,6 +427,60 @@ static void bl2_system_cpg_init_v3m(void)
 }
 #endif /* (RCAR_LSI == RCAR_AUTO) || (RCAR_LSI == RCAR_V3M) */
 
+#if (RCAR_LSI == RCAR_AUTO) || (RCAR_LSI == RCAR_V3H)
+static void bl2_realtime_cpg_init_v3h(void)
+{
+	/* CPG (REALTIME) registers */
+
+	/* Realtime Module Stop Control Register 0 */
+	cpg_write(RMSTPCR0,	0x00230000U);
+	/* Realtime Module Stop Control Register 1 */
+	cpg_write(RMSTPCR1,	0xFFFFFFFFU);
+	/* Realtime Module Stop Control Register 2 */
+	cpg_write(RMSTPCR2,	0x14062FD8U);
+	/* Realtime Module Stop Control Register 3 */
+	cpg_write(RMSTPCR3,	0xFFFFFFDFU);
+	/* Realtime Module Stop Control Register 4 */
+	cpg_write(RMSTPCR4,	0x80000184U);
+	/* Realtime Module Stop Control Register 5 */
+	cpg_write(RMSTPCR5,	0x83FFFFFFU);
+	/* Realtime Module Stop Control Register 6 */
+	cpg_write(RMSTPCR6,	0xFFFFFFFFU);
+	/* Realtime Module Stop Control Register 7 */
+	cpg_write(RMSTPCR7,	0xFFFFFFFFU);
+	/* Realtime Module Stop Control Register 8 */
+	cpg_write(RMSTPCR8,	0x7FF3FFF4U);
+	/* Realtime Module Stop Control Register 9 */
+	cpg_write(RMSTPCR9,	0xFFFFFFFEU);
+}
+
+static void bl2_system_cpg_init_v3h(void)
+{
+	/* CPG (SYSTEM) registers */
+
+	/* System Module Stop Control Register 0 */
+	cpg_write(SMSTPCR0,	0x00210000U);
+	/* System Module Stop Control Register 1 */
+	cpg_write(SMSTPCR1,	0xFFFFFFFFU);
+	/* System Module Stop Control Register 2 */
+	cpg_write(SMSTPCR2,	0x340E2FDCU);
+	/* System Module Stop Control Register 3 */
+	cpg_write(SMSTPCR3,	0xFFFFFBDFU);
+	/* System Module Stop Control Register 4 */
+	cpg_write(SMSTPCR4,	0x80000004U);
+	/* System Module Stop Control Register 5 */
+	cpg_write(SMSTPCR5,	0xC3FFFFFFU);
+	/* System Module Stop Control Register 6 */
+	cpg_write(SMSTPCR6,	0xFFFFFFFFU);
+	/* System Module Stop Control Register 7 */
+	cpg_write(SMSTPCR7,	0xFFFFFFFFU);
+	/* System Module Stop Control Register 8 */
+	cpg_write(SMSTPCR8,	0x01F1FFF5U);
+	/* System Module Stop Control Register 9 */
+	cpg_write(SMSTPCR9,	0xFFFFFFFEU);
+}
+#endif /* (RCAR_LSI == RCAR_AUTO) || (RCAR_LSI == RCAR_V3H) */
+
 void bl2_cpg_init(void)
 {
 	uint32_t	modemr;
@@ -454,6 +512,9 @@ void bl2_cpg_init(void)
 		case RCAR_PRODUCT_v3m:
 			bl2_realtime_cpg_init_v3m();
 			break;
+		case RCAR_PRODUCT_v3h:
+			bl2_realtime_cpg_init_v3h();
+			break;
 		default:
 			panic();
 			break;
@@ -468,6 +529,8 @@ void bl2_cpg_init(void)
 		bl2_realtime_cpg_init_e3();
 #elif RCAR_LSI == RCAR_V3M
 		bl2_realtime_cpg_init_v3m();
+#elif RCAR_LSI == RCAR_V3H
+		bl2_realtime_cpg_init_v3h();
 #else /* RCAR_LSI == RCAR_XX */
 #error "Don't have CPG initialize routine(unknown)."
 #endif /* RCAR_LSI == RCAR_XX */
@@ -493,6 +556,9 @@ void bl2_system_cpg_init(void)
 	case RCAR_PRODUCT_V3M:
 		bl2_system_cpg_init_v3m();
 		break;
+	case RCAR_PRODUCT_V3H:
+		bl2_system_cpg_init_v3h();
+		break;
 	default:
 		panic();
 		break;
@@ -507,6 +573,8 @@ void bl2_system_cpg_init(void)
 	bl2_system_cpg_init_e3();
 #elif RCAR_LSI == RCAR_V3M
 	bl2_system_cpg_init_v3m();
+#elif RCAR_LSI == RCAR_V3H
+	bl2_system_cpg_init_v3h();
 #else /* RCAR_LSI == RCAR_XX */
 #error "Don't have CPG initialize routine(unknown)."
 #endif /* RCAR_LSI == RCAR_XX */
diff --git a/plat/renesas/rcar/bl2_rcar_setup.c b/plat/renesas/rcar/bl2_rcar_setup.c
index 02a15c2..375f5c0 100755
--- a/plat/renesas/rcar/bl2_rcar_setup.c
+++ b/plat/renesas/rcar/bl2_rcar_setup.c
@@ -132,8 +132,11 @@
 #elif RCAR_LSI == RCAR_V3M
 #define TARGET_PRODUCT		RCAR_PRODUCT_V3M
 #define TARGET_NAME		"R-Car V3M"
+#elif RCAR_LSI == RCAR_V3H
+#define TARGET_PRODUCT		RCAR_PRODUCT_V3H
+#define TARGET_NAME		"R-Car V3H"
 #elif RCAR_LSI == RCAR_AUTO
-#define TARGET_NAME		"R-Car H3/M3/M3N/V3M"
+#define TARGET_NAME		"R-Car H3/M3/M3N/V3M/V3H"
 #endif
 
 /* for SuspendToRAM */
@@ -390,6 +393,7 @@ static void rcar_bl2_early_platform_setup(const meminfo_t *mem_layout)
 	const char *product_m3n     = "M3N";
 	const char *product_e3      = "E3";
 	const char *product_v3m     = "V3M";
+	const char *product_v3h     = "V3H";
 	const char *lcs_cm          = "CM";
 	const char *lcs_dm          = "DM";
 	const char *lcs_sd          = "SD";
@@ -477,6 +481,9 @@ static void rcar_bl2_early_platform_setup(const meminfo_t *mem_layout)
 	case RCAR_PRODUCT_V3M:
 		str = product_v3m;
 		break;
+	case RCAR_PRODUCT_V3H:
+		str = product_v3h;
+		break;
 	default:
 		str = unknown;
 		break;
@@ -551,7 +558,7 @@ static void rcar_bl2_early_platform_setup(const meminfo_t *mem_layout)
 	}
 #endif /* RCAR_LSI != RCAR_AUTO */
 
-#if RCAR_LSI != RCAR_V3M
+#if (RCAR_LSI != RCAR_V3M) && (RCAR_LSI != RCAR_V3H)
 	/* Initialize AVS Settings */
 	bl2_avs_init();
 
@@ -585,7 +592,7 @@ static void rcar_bl2_early_platform_setup(const meminfo_t *mem_layout)
 	(void)sprintf(msg, "BL2: Boot device is %s\n", str);
 	NOTICE("%s", msg);
 
-#if RCAR_LSI != RCAR_V3M
+#if (RCAR_LSI != RCAR_V3M) && (RCAR_LSI != RCAR_V3H)
 	/* Proceed with separated AVS processing */
 	bl2_avs_setting();
 #endif
diff --git a/plat/renesas/rcar/ddr/ddr_b/boot_init_dram.c b/plat/renesas/rcar/ddr/ddr_b/boot_init_dram.c
index 09f2f04..e4d2916 100644
--- a/plat/renesas/rcar/ddr/ddr_b/boot_init_dram.c
+++ b/plat/renesas/rcar/ddr/ddr_b/boot_init_dram.c
@@ -3852,6 +3852,13 @@ int32_t InitDram(void)
 	Prr_Cut = mmio_read_32(PRR) & PRR_CUT_MASK;
 #endif /* RCAR_DDR_FIXED_LSI_TYPE */
 
+#if RCAR_LSI == RCAR_V3H
+	if (Prr_Product == PRR_PRODUCT_V3H) {
+		/* dram initialized by CR7 */
+		return INITDRAM_OK;
+	}
+#endif
+
 	if (Prr_Product == PRR_PRODUCT_H3) {
 		if (Prr_Cut <= PRR_PRODUCT_11)
 			pDDR_REGDEF_TBL = (const uint32_t *)&DDR_REGDEF_TBL[0][0];
diff --git a/plat/renesas/rcar/drivers/rom/rom_api.c b/plat/renesas/rcar/drivers/rom/rom_api.c
index c683fc8..a555fd3 100644
--- a/plat/renesas/rcar/drivers/rom/rom_api.c
+++ b/plat/renesas/rcar/drivers/rom/rom_api.c
@@ -24,7 +24,8 @@ static uint32_t get_table_index(void);
 #define NEW_API_TABLE	(3U)	/* H3 Ver.3.0, M3 Ver.1.1 or later, M3N, E3, */
 				/* V3M WS2.0 */
 #define NEW_API_TABLE2	(4U)	/* V3M WS1.0 */
-#define API_TABLE_MAX	(5U)	/* table max */
+#define NEW_API_TABLE3	(5U)	/* V3H WS1.0 */
+#define API_TABLE_MAX	(6U)	/* table max */
 
 
 
@@ -40,6 +41,7 @@ uint32_t ROM_SecureBootAPI( uint32_t *pKeyCert,
 		0xEB100180U,	/* H3 Ver.3.0, M3 Ver.1.1 or later, M3N, E3, */
 				/* V3M WS2.0 */
 		0xEB110128U,	/* V3M WS1.0 */
+		0xEB101960U,	/* V3H WS1.0 */
 	};
 
 	ROM_SECURE_BOOT_API func;
@@ -54,6 +56,10 @@ uint32_t ROM_SecureBootAPI( uint32_t *pKeyCert,
 
 uint32_t ROM_GetLcs(uint32_t *pLcs)
 {
+#if RCAR_LSI == RCAR_V3H
+	*pLcs = 0xff;
+	return 0;
+#else
 	/* Get LCS stete API address table */
 	static const uintptr_t ROM_GetLcs_table[API_TABLE_MAX] = {
 		0xEB10DFE0U,	/* H3 Ver.1.0/Ver.1.1 */
@@ -62,6 +68,7 @@ uint32_t ROM_GetLcs(uint32_t *pLcs)
 		0xEB10018CU,	/* H3 Ver.3.0, M3 Ver.1.1 or later, M3N, E3, */
 				/* V3M WS2.0 */
 		0xEB1103A4U,	/* V3M WS1.0 */
+		0xEB101940U,	/* V3H WS1.0 */
 	};
 
 	ROM_GETLCS_API func;
@@ -71,6 +78,7 @@ uint32_t ROM_GetLcs(uint32_t *pLcs)
 	func = (ROM_GETLCS_API)ROM_GetLcs_table[index];
 
 	return func(pLcs);
+#endif
 }
 
 
@@ -109,6 +117,13 @@ static uint32_t get_table_index(void)
 			index = NEW_API_TABLE;	/* V3M WS2.0 or later */
 		}
 		break;
+	case RCAR_PRODUCT_V3H:
+		if (cut_ver == RCAR_CUT_VER10) {
+			index = NEW_API_TABLE3;	/* V3H WS1.0 */
+		} else {
+			index = NEW_API_TABLE3;	/* V3H WS2.0 or later */
+		}
+		break;
 	default:
 		index = NEW_API_TABLE;		/* M3N and E3 */
 		break;
diff --git a/plat/renesas/rcar/drivers/scif/scif.S b/plat/renesas/rcar/drivers/scif/scif.S
index 2b0bae5..5b660d4 100644
--- a/plat/renesas/rcar/drivers/scif/scif.S
+++ b/plat/renesas/rcar/drivers/scif/scif.S
@@ -29,7 +29,7 @@
 #define	SCIF0_BASE		(0xE6E60000)	/* SCIF-0 base address */
 #define	SCIF2_BASE		(0xE6E88000)	/* SCIF-2 base address */
 
-#if RCAR_LSI == RCAR_V3M	/* V3M */
+#if (RCAR_LSI == RCAR_V3M) || (RCAR_LSI == RCAR_V3H)	/* V3M or V3H */
 #define SCIF_BASE		SCIF0_BASE
 #define CPG_SMSTPCR		CPG_SMSTPCR2
 #define CPG_MSTPSR		CPG_MSTPSR2
diff --git a/plat/renesas/rcar/include/bl2_dma_register.h b/plat/renesas/rcar/include/bl2_dma_register.h
index f359156..cd083f6 100644
--- a/plat/renesas/rcar/include/bl2_dma_register.h
+++ b/plat/renesas/rcar/include/bl2_dma_register.h
@@ -7,7 +7,7 @@
 #ifndef BL2_DMA_REGISTER_H__
 #define BL2_DMA_REGISTER_H__
 
-#if RCAR_LSI == RCAR_V3M	/* V3M */
+#if (RCAR_LSI == RCAR_V3M) || (RCAR_LSI == RCAR_V3H)	/* V3M/V3H */
 #define	DMACH	16	/* DMA CH setting (0/16/32) */
 #else
 #define	DMACH	0	/* DMA CH setting (0/16/32) */
diff --git a/plat/renesas/rcar/include/platform_def.h b/plat/renesas/rcar/include/platform_def.h
index e9da655..c461b95 100644
--- a/plat/renesas/rcar/include/platform_def.h
+++ b/plat/renesas/rcar/include/platform_def.h
@@ -103,9 +103,17 @@
  * Put BL2 just below BL3-1. BL2_BASE is calculated using the current BL2 debug
  * size plus a little space for growth.
  */
+#if RCAR_LSI == RCAR_V3H
+#define RCAR_SYSRAM_BASE		U(0xEB200000)
+#else
 #define RCAR_SYSRAM_BASE		U(0xE6300000)
+#endif
 
-#if RCAR_LSI == RCAR_V3M
+#if RCAR_LSI == RCAR_V3H
+#define BL2_BASE			U(0xEB244000)
+#define BL2_LIMIT			U(0xEB264000)
+#define BL2_IMAGE_LIMIT			U(0xEB26E800)
+#elif RCAR_LSI == RCAR_V3M
 #define BL2_BASE			U(0xE6344000)
 #define BL2_LIMIT			U(0xE6360000)
 #define BL2_IMAGE_LIMIT			U(0xE636E800)
diff --git a/plat/renesas/rcar/pfc/V3H/pfc_init_v3h.c b/plat/renesas/rcar/pfc/V3H/pfc_init_v3h.c
new file mode 100644
index 0000000..351747a
--- /dev/null
+++ b/plat/renesas/rcar/pfc/V3H/pfc_init_v3h.c
@@ -0,0 +1,1196 @@
+/*
+ * Copyright (c) 2015-2017, Renesas Electronics Corporation
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are met:
+ *
+ *   - Redistributions of source code must retain the above copyright notice,
+ *     this list of conditions and the following disclaimer.
+ *
+ *   - Redistributions in binary form must reproduce the above copyright
+ *     notice, this list of conditions and the following disclaimer in the
+ *     documentation and/or other materials provided with the distribution.
+ *
+ *   - Neither the name of Renesas nor the names of its contributors may be
+ *     used to endorse or promote products derived from this software without
+ *     specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
+ * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#include <stdint.h>		/* for uint32_t */
+#include <mmio.h>
+#include "pfc_init_v3h.h"
+
+
+/* GPIO base address */
+#define	GPIO_BASE		(0xE6050000U)
+
+/* GPIO registers */
+#define	GPIO_IOINTSEL0		(GPIO_BASE + 0x0000U)
+#define	GPIO_INOUTSEL0		(GPIO_BASE + 0x0004U)
+#define	GPIO_OUTDT0		(GPIO_BASE + 0x0008U)
+#define	GPIO_INDT0		(GPIO_BASE + 0x000CU)
+#define	GPIO_INTDT0		(GPIO_BASE + 0x0010U)
+#define	GPIO_INTCLR0		(GPIO_BASE + 0x0014U)
+#define	GPIO_INTMSK0		(GPIO_BASE + 0x0018U)
+#define	GPIO_MSKCLR0		(GPIO_BASE + 0x001CU)
+#define	GPIO_POSNEG0		(GPIO_BASE + 0x0020U)
+#define	GPIO_EDGLEVEL0		(GPIO_BASE + 0x0024U)
+#define	GPIO_FILONOFF0		(GPIO_BASE + 0x0028U)
+#define	GPIO_INTMSKS0		(GPIO_BASE + 0x0038U)
+#define	GPIO_MSKCLRS0		(GPIO_BASE + 0x003CU)
+#define	GPIO_OUTDTSEL0		(GPIO_BASE + 0x0040U)
+#define	GPIO_OUTDTH0		(GPIO_BASE + 0x0044U)
+#define	GPIO_OUTDTL0		(GPIO_BASE + 0x0048U)
+#define	GPIO_BOTHEDGE0		(GPIO_BASE + 0x004CU)
+#define	GPIO_IOINTSEL1		(GPIO_BASE + 0x1000U)
+#define	GPIO_INOUTSEL1		(GPIO_BASE + 0x1004U)
+#define	GPIO_OUTDT1		(GPIO_BASE + 0x1008U)
+#define	GPIO_INDT1		(GPIO_BASE + 0x100CU)
+#define	GPIO_INTDT1		(GPIO_BASE + 0x1010U)
+#define	GPIO_INTCLR1		(GPIO_BASE + 0x1014U)
+#define	GPIO_INTMSK1		(GPIO_BASE + 0x1018U)
+#define	GPIO_MSKCLR1		(GPIO_BASE + 0x101CU)
+#define	GPIO_POSNEG1		(GPIO_BASE + 0x1020U)
+#define	GPIO_EDGLEVEL1		(GPIO_BASE + 0x1024U)
+#define	GPIO_FILONOFF1		(GPIO_BASE + 0x1028U)
+#define	GPIO_INTMSKS1		(GPIO_BASE + 0x1038U)
+#define	GPIO_MSKCLRS1		(GPIO_BASE + 0x103CU)
+#define	GPIO_OUTDTSEL1		(GPIO_BASE + 0x1040U)
+#define	GPIO_OUTDTH1		(GPIO_BASE + 0x1044U)
+#define	GPIO_OUTDTL1		(GPIO_BASE + 0x1048U)
+#define	GPIO_BOTHEDGE1		(GPIO_BASE + 0x104CU)
+#define	GPIO_IOINTSEL2		(GPIO_BASE + 0x2000U)
+#define	GPIO_INOUTSEL2		(GPIO_BASE + 0x2004U)
+#define	GPIO_OUTDT2		(GPIO_BASE + 0x2008U)
+#define	GPIO_INDT2		(GPIO_BASE + 0x200CU)
+#define	GPIO_INTDT2		(GPIO_BASE + 0x2010U)
+#define	GPIO_INTCLR2		(GPIO_BASE + 0x2014U)
+#define	GPIO_INTMSK2		(GPIO_BASE + 0x2018U)
+#define	GPIO_MSKCLR2		(GPIO_BASE + 0x201CU)
+#define	GPIO_POSNEG2		(GPIO_BASE + 0x2020U)
+#define	GPIO_EDGLEVEL2		(GPIO_BASE + 0x2024U)
+#define	GPIO_FILONOFF2		(GPIO_BASE + 0x2028U)
+#define	GPIO_INTMSKS2		(GPIO_BASE + 0x2038U)
+#define	GPIO_MSKCLRS2		(GPIO_BASE + 0x203CU)
+#define	GPIO_OUTDTSEL2		(GPIO_BASE + 0x2040U)
+#define	GPIO_OUTDTH2		(GPIO_BASE + 0x2044U)
+#define	GPIO_OUTDTL2		(GPIO_BASE + 0x2048U)
+#define	GPIO_BOTHEDGE2		(GPIO_BASE + 0x204CU)
+#define	GPIO_IOINTSEL3		(GPIO_BASE + 0x3000U)
+#define	GPIO_INOUTSEL3		(GPIO_BASE + 0x3004U)
+#define	GPIO_OUTDT3		(GPIO_BASE + 0x3008U)
+#define	GPIO_INDT3		(GPIO_BASE + 0x300CU)
+#define	GPIO_INTDT3		(GPIO_BASE + 0x3010U)
+#define	GPIO_INTCLR3		(GPIO_BASE + 0x3014U)
+#define	GPIO_INTMSK3		(GPIO_BASE + 0x3018U)
+#define	GPIO_MSKCLR3		(GPIO_BASE + 0x301CU)
+#define	GPIO_POSNEG3		(GPIO_BASE + 0x3020U)
+#define	GPIO_EDGLEVEL3		(GPIO_BASE + 0x3024U)
+#define	GPIO_FILONOFF3		(GPIO_BASE + 0x3028U)
+#define	GPIO_INTMSKS3		(GPIO_BASE + 0x3038U)
+#define	GPIO_MSKCLRS3		(GPIO_BASE + 0x303CU)
+#define	GPIO_OUTDTSEL3		(GPIO_BASE + 0x3040U)
+#define	GPIO_OUTDTH3		(GPIO_BASE + 0x3044U)
+#define	GPIO_OUTDTL3		(GPIO_BASE + 0x3048U)
+#define	GPIO_BOTHEDGE3		(GPIO_BASE + 0x304CU)
+#define	GPIO_IOINTSEL4		(GPIO_BASE + 0x4000U)
+#define	GPIO_INOUTSEL4		(GPIO_BASE + 0x4004U)
+#define	GPIO_OUTDT4		(GPIO_BASE + 0x4008U)
+#define	GPIO_INDT4		(GPIO_BASE + 0x400CU)
+#define	GPIO_INTDT4		(GPIO_BASE + 0x4010U)
+#define	GPIO_INTCLR4		(GPIO_BASE + 0x4014U)
+#define	GPIO_INTMSK4		(GPIO_BASE + 0x4018U)
+#define	GPIO_MSKCLR4		(GPIO_BASE + 0x401CU)
+#define	GPIO_POSNEG4		(GPIO_BASE + 0x4020U)
+#define	GPIO_EDGLEVEL4		(GPIO_BASE + 0x4024U)
+#define	GPIO_FILONOFF4		(GPIO_BASE + 0x4028U)
+#define	GPIO_INTMSKS4		(GPIO_BASE + 0x4038U)
+#define	GPIO_MSKCLRS4		(GPIO_BASE + 0x403CU)
+#define	GPIO_OUTDTSEL4		(GPIO_BASE + 0x4040U)
+#define	GPIO_OUTDTH4		(GPIO_BASE + 0x4044U)
+#define	GPIO_OUTDTL4		(GPIO_BASE + 0x4048U)
+#define	GPIO_BOTHEDGE4		(GPIO_BASE + 0x404CU)
+#define	GPIO_IOINTSEL5		(GPIO_BASE + 0x5000U)
+#define	GPIO_INOUTSEL5		(GPIO_BASE + 0x5004U)
+#define	GPIO_OUTDT5		(GPIO_BASE + 0x5008U)
+#define	GPIO_INDT5		(GPIO_BASE + 0x500CU)
+#define	GPIO_INTDT5		(GPIO_BASE + 0x5010U)
+#define	GPIO_INTCLR5		(GPIO_BASE + 0x5014U)
+#define	GPIO_INTMSK5		(GPIO_BASE + 0x5018U)
+#define	GPIO_MSKCLR5		(GPIO_BASE + 0x501CU)
+#define	GPIO_POSNEG5		(GPIO_BASE + 0x5020U)
+#define	GPIO_EDGLEVEL5		(GPIO_BASE + 0x5024U)
+#define	GPIO_FILONOFF5		(GPIO_BASE + 0x5028U)
+#define	GPIO_INTMSKS5		(GPIO_BASE + 0x5038U)
+#define	GPIO_MSKCLRS5		(GPIO_BASE + 0x503CU)
+#define	GPIO_OUTDTSEL5		(GPIO_BASE + 0x5040U)
+#define	GPIO_OUTDTH5		(GPIO_BASE + 0x5044U)
+#define	GPIO_OUTDTL5		(GPIO_BASE + 0x5048U)
+#define	GPIO_BOTHEDGE5		(GPIO_BASE + 0x504CU)
+
+/* Pin functon base address */
+#define	PFC_BASE		(0xE6060000U)
+
+/* Pin functon registers */
+#define	PFC_PMMR		(PFC_BASE + 0x0000U)
+#define PFC_GPSR0		(PFC_BASE + 0x0100U)
+#define PFC_GPSR1		(PFC_BASE + 0x0104U)
+#define PFC_GPSR2		(PFC_BASE + 0x0108U)
+#define PFC_GPSR3		(PFC_BASE + 0x010CU)
+#define PFC_GPSR4		(PFC_BASE + 0x0110U)
+#define	PFC_GPSR5		(PFC_BASE + 0x0114U)
+#define	PFC_IPSR0		(PFC_BASE + 0x0200U)
+#define	PFC_IPSR1		(PFC_BASE + 0x0204U)
+#define	PFC_IPSR2		(PFC_BASE + 0x0208U)
+#define	PFC_IPSR3		(PFC_BASE + 0x020CU)
+#define	PFC_IPSR4		(PFC_BASE + 0x0210U)
+#define	PFC_IPSR5		(PFC_BASE + 0x0214U)
+#define	PFC_IPSR6		(PFC_BASE + 0x0218U)
+#define	PFC_IPSR7		(PFC_BASE + 0x021CU)
+#define	PFC_IPSR8		(PFC_BASE + 0x0220U)
+#define	PFC_IPSR9		(PFC_BASE + 0x0224U)
+#define	PFC_IPSR10		(PFC_BASE + 0x0228U)
+#define PFC_IOCTRL0		(PFC_BASE + 0x0300U)
+#define PFC_IOCTRL1		(PFC_BASE + 0x0304U)
+#define PFC_IOCTRL2		(PFC_BASE + 0x0308U)
+#define PFC_IOCTRL3		(PFC_BASE + 0x030CU)
+#define PFC_IOCTRL4		(PFC_BASE + 0x0310U)
+#define PFC_IOCTRL5		(PFC_BASE + 0x0314U)
+#define PFC_IOCTRL6		(PFC_BASE + 0x0318U)
+#define PFC_IOCTRL7		(PFC_BASE + 0x031CU)
+#define PFC_IOCTRL8		(PFC_BASE + 0x0320U)
+#define PFC_IOCTRL9		(PFC_BASE + 0x0324U)
+#define PFC_IOCTRL10		(PFC_BASE + 0x0328U)
+#define PFC_IOCTRL11		(PFC_BASE + 0x032CU)
+#define PFC_IOCTRL12		(PFC_BASE + 0x0330U)
+#define PFC_IOCTRL13		(PFC_BASE + 0x0334U)
+#define PFC_IOCTRL14		(PFC_BASE + 0x0338U)
+#define PFC_IOCTRL15		(PFC_BASE + 0x033CU)
+#define PFC_IOCTRL16		(PFC_BASE + 0x0340U)
+#define PFC_IOCTRL17		(PFC_BASE + 0x0344U)
+#define PFC_IOCTRL18		(PFC_BASE + 0x0348U)
+#define PFC_IOCTRL19		(PFC_BASE + 0x034CU)
+#define PFC_IOCTRL30		(PFC_BASE + 0x0380U)
+#define PFC_IOCTRL31		(PFC_BASE + 0x0384U)
+#define PFC_IOCTRL32		(PFC_BASE + 0x0388U)
+#define PFC_IOCTRL33		(PFC_BASE + 0x038CU)
+#define PFC_IOCTRL40		(PFC_BASE + 0x03C0U)
+#define	PFC_TSREG		(PFC_BASE + 0x03E4U)
+#define	PFC_PUEN0		(PFC_BASE + 0x0400U)
+#define	PFC_PUEN1		(PFC_BASE + 0x0404U)
+#define	PFC_PUEN2		(PFC_BASE + 0x0408U)
+#define	PFC_PUEN3		(PFC_BASE + 0x040CU)
+#define	PFC_PUEN4		(PFC_BASE + 0x0410U)
+#define	PFC_PUD0		(PFC_BASE + 0x0440U)
+#define	PFC_PUD1		(PFC_BASE + 0x0444U)
+#define	PFC_PUD2		(PFC_BASE + 0x0448U)
+#define	PFC_PUD3		(PFC_BASE + 0x044CU)
+#define	PFC_PUD4		(PFC_BASE + 0x0450U)
+#define	PFC_MOD_SEL0		(PFC_BASE + 0x0500U)
+
+#define	GPSR0_DU_EXODDF_DU_ODDF_DISP_CDE	((uint32_t)1U << 21U)
+#define	GPSR0_DU_EXVSYNC_DU_VSYNC		((uint32_t)1U << 20U)
+#define	GPSR0_DU_EXHSYNC_DU_HSYNC		((uint32_t)1U << 19U)
+#define	GPSR0_DU_EXHSYNC_DU_HSYNC_A		((uint32_t)0U << 19U)
+#define	GPSR0_DU_DOTCLKOUT	((uint32_t)1U << 18U)
+#define	GPSR0_DU_DB7		((uint32_t)1U << 17U)
+#define	GPSR0_DU_DB6		((uint32_t)1U << 16U)
+#define	GPSR0_DU_DB5		((uint32_t)1U << 15U)
+#define	GPSR0_DU_DB4		((uint32_t)1U << 14U)
+#define	GPSR0_DU_DB3		((uint32_t)1U << 13U)
+#define	GPSR0_DU_DB2		((uint32_t)1U << 12U)
+#define	GPSR0_DU_DG7		((uint32_t)1U << 11U)
+#define	GPSR0_DU_DG6		((uint32_t)1U << 10U)
+#define	GPSR0_DU_DG5		((uint32_t)1U << 9U)
+#define	GPSR0_DU_DG4		((uint32_t)1U << 8U)
+#define	GPSR0_DU_DG3		((uint32_t)1U << 7U)
+#define	GPSR0_DU_DG2		((uint32_t)1U << 6U)
+#define	GPSR0_DU_DR7		((uint32_t)1U << 5U)
+#define	GPSR0_DU_DR6		((uint32_t)1U << 4U)
+#define	GPSR0_DU_DR5		((uint32_t)1U << 3U)
+#define	GPSR0_DU_DR4		((uint32_t)1U << 2U)
+#define	GPSR0_DU_DR3		((uint32_t)1U << 1U)
+#define	GPSR0_DU_DR2		((uint32_t)1U << 0U)
+#define	GPSR1_DIGRF_CLKOUT	((uint32_t)1U << 27U)
+#define	GPSR1_DIGRF_CLKIN	((uint32_t)1U << 26U)
+#define	GPSR1_CANFD_CLK_A	((uint32_t)1U << 25U)
+#define	GPSR1_CANFD1_RX		((uint32_t)1U << 24U)
+#define	GPSR1_CANFD1_TX		((uint32_t)1U << 23U)
+#define	GPSR1_CANFD0_RX_A	((uint32_t)1U << 22U)
+#define	GPSR1_CANFD0_TX_A	((uint32_t)1U << 21U)
+#define	GPSR1_AVB_AVTP_CAPTURE		((uint32_t)1U << 20U)
+#define	GPSR1_AVB_AVTP_MATCH		((uint32_t)1U << 19U)
+#define	GPSR1_AVB_LINK		((uint32_t)1U << 18U)
+#define	GPSR1_AVB_PHY_INT	((uint32_t)1U << 17U)
+#define	GPSR1_AVB_MAGIC		((uint32_t)1U << 16U)
+#define	GPSR1_AVB_MDC		((uint32_t)1U << 15U)
+#define	GPSR1_AVB_MDIO		((uint32_t)1U << 14U)
+#define	GPSR1_AVB_TXCREFCLK	((uint32_t)1U << 13U)
+#define	GPSR1_AVB_TD3		((uint32_t)1U << 12U)
+#define	GPSR1_AVB_TD2		((uint32_t)1U << 11U)
+#define	GPSR1_AVB_TD1		((uint32_t)1U << 10U)
+#define	GPSR1_AVB_TD0		((uint32_t)1U << 9U)
+#define	GPSR1_AVB_TXC		((uint32_t)1U << 8U)
+#define	GPSR1_AVB_TX_CTL	((uint32_t)1U << 7U)
+#define	GPSR1_AVB_RD3		((uint32_t)1U << 6U)
+#define	GPSR1_AVB_RD2		((uint32_t)1U << 5U)
+#define	GPSR1_AVB_RD1		((uint32_t)1U << 4U)
+#define	GPSR1_AVB_RD0		((uint32_t)1U << 3U)
+#define	GPSR1_AVB_RXC		((uint32_t)1U << 2U)
+#define	GPSR1_AVB_RX_CTL	((uint32_t)1U << 1U)
+#define	GPSR1_IRQ0		((uint32_t)1U << 0U)
+#define	GPSR2_FSO_TOE		((uint32_t)1U << 29U)
+#define	GPSR2_FSO_CFE_1		((uint32_t)1U << 28U)
+#define	GPSR2_FSO_CFE_0		((uint32_t)1U << 27U)
+#define	GPSR2_SDA3			((uint32_t)1U << 26U)
+#define	GPSR2_SCL3			((uint32_t)1U << 25U)
+#define	GPSR2_MSIOF0_SS2	((uint32_t)1U << 24U)
+#define	GPSR2_MSIOF0_SS1	((uint32_t)1U << 23U)
+#define	GPSR2_MSIOF0_SYNC	((uint32_t)1U << 22U)
+#define	GPSR2_MSIOF0_SCK	((uint32_t)1U << 21U)
+#define	GPSR2_MSIOF0_TXD	((uint32_t)1U << 20U)
+#define	GPSR2_MSIOF0_RXD	((uint32_t)1U << 19U)
+#define	GPSR2_IRQ5			((uint32_t)1U << 18U)
+#define	GPSR2_IRQ4			((uint32_t)1U << 17U)
+#define	GPSR2_VI0_FIELD		((uint32_t)1U << 16U)
+#define	GPSR2_VI0_DATA11	((uint32_t)1U << 15U)
+#define	GPSR2_VI0_DATA10	((uint32_t)1U << 14U)
+#define	GPSR2_VI0_DATA9		((uint32_t)1U << 13U)
+#define	GPSR2_VI0_DATA8		((uint32_t)1U << 12U)
+#define	GPSR2_VI0_DATA7		((uint32_t)1U << 11U)
+#define	GPSR2_VI0_DATA6		((uint32_t)1U << 10U)
+#define	GPSR2_VI0_DATA5		((uint32_t)1U << 9U)
+#define	GPSR2_VI0_DATA4		((uint32_t)1U << 8U)
+#define	GPSR2_VI0_DATA3		((uint32_t)1U << 7U)
+#define	GPSR2_VI0_DATA2		((uint32_t)1U << 6U)
+#define	GPSR2_VI0_DATA1		((uint32_t)1U << 5U)
+#define	GPSR2_VI0_DATA0		((uint32_t)1U << 4U)
+#define	GPSR2_VI0_VSYNC		((uint32_t)1U << 3U)
+#define	GPSR2_VI0_HSYNC		((uint32_t)1U << 2U)
+#define	GPSR2_VI0_CLKENB	((uint32_t)1U << 1U)
+#define	GPSR2_VI0_CLK		((uint32_t)1U << 0U)
+#define	GPSR3_VI1_FIELD		((uint32_t)1U << 16U)
+#define	GPSR3_VI1_DATA11	((uint32_t)1U << 15U)
+#define	GPSR3_VI1_DATA10	((uint32_t)1U << 14U)
+#define	GPSR3_VI1_DATA9		((uint32_t)1U << 13U)
+#define	GPSR3_VI1_DATA8		((uint32_t)1U << 12U)
+#define	GPSR3_VI1_DATA7		((uint32_t)1U << 11U)
+#define	GPSR3_VI1_DATA6		((uint32_t)1U << 10U)
+#define	GPSR3_VI1_DATA5		((uint32_t)1U << 9U)
+#define	GPSR3_VI1_DATA4		((uint32_t)1U << 8U)
+#define	GPSR3_VI1_DATA3		((uint32_t)1U << 7U)
+#define	GPSR3_VI1_DATA2		((uint32_t)1U << 6U)
+#define	GPSR3_VI1_DATA1		((uint32_t)1U << 5U)
+#define	GPSR3_VI1_DATA0		((uint32_t)1U << 4U)
+#define	GPSR3_VI1_VSYNC		((uint32_t)1U << 3U)
+#define	GPSR3_VI1_HSYNC		((uint32_t)1U << 2U)
+#define	GPSR3_VI1_CLKENB	((uint32_t)1U << 1U)
+#define	GPSR3_VI1_CLK		((uint32_t)1U << 0U)
+#define	GPSR4_GETHER_LINK_A	((uint32_t)1U << 24U)
+#define	GPSR4_GETHER_PHY_INT_A		((uint32_t)1U << 23U)
+#define	GPSR4_GETHER_MAGIC	((uint32_t)1U << 22U)
+#define	GPSR4_GETHER_MDC_A	((uint32_t)1U << 21U)
+#define	GPSR4_GETHER_MDIO_A	((uint32_t)1U << 20U)
+#define	GPSR4_GETHER_TXCREFCLK_MEGA		((uint32_t)1U << 19U)
+#define	GPSR4_GETHER_TXCREFCLK		((uint32_t)1U << 18U)
+#define	GPSR4_GETHER_TD3	((uint32_t)1U << 17U)
+#define	GPSR4_GETHER_TD2	((uint32_t)1U << 16U)
+#define	GPSR4_GETHER_TD1	((uint32_t)1U << 15U)
+#define	GPSR4_GETHER_TD0	((uint32_t)1U << 14U)
+#define	GPSR4_GETHER_TXC	((uint32_t)1U << 13U)
+#define	GPSR4_GETHER_TX_CTL	((uint32_t)1U << 12U)
+#define	GPSR4_GETHER_RD3	((uint32_t)1U << 11U)
+#define	GPSR4_GETHER_RD2	((uint32_t)1U << 10U)
+#define	GPSR4_GETHER_RD1	((uint32_t)1U << 9U)
+#define	GPSR4_GETHER_RD0	((uint32_t)1U << 8U)
+#define	GPSR4_GETHER_RXC	((uint32_t)1U << 7U)
+#define	GPSR4_GETHER_RX_CTL	((uint32_t)1U << 6U)
+#define	GPSR4_SDA2			((uint32_t)1U << 5U)
+#define	GPSR4_SCL2			((uint32_t)1U << 4U)
+#define	GPSR4_SDA1			((uint32_t)1U << 3U)
+#define	GPSR4_SCL1			((uint32_t)1U << 2U)
+#define	GPSR4_SDA0			((uint32_t)1U << 1U)
+#define	GPSR4_SCL0			((uint32_t)1U << 0U)
+#define	GPSR5_RPC_INT		((uint32_t)1U << 14U)
+#define	GPSR5_RPC_WP		((uint32_t)1U << 13U)
+#define	GPSR5_RPC_RESET		((uint32_t)1U << 12U)
+#define	GPSR5_QSPI1_SSL		((uint32_t)1U << 11U)
+#define	GPSR5_QSPI1_IO3		((uint32_t)1U << 10U)
+#define	GPSR5_QSPI1_IO2		((uint32_t)1U << 9U)
+#define	GPSR5_QSPI1_MISO_IO1		((uint32_t)1U << 8U)
+#define	GPSR5_QSPI1_MOSI_IO0		((uint32_t)1U << 7U)
+#define	GPSR5_QSPI1_SPCLK	((uint32_t)1U << 6U)
+#define	GPSR5_QSPI0_SSL		((uint32_t)1U << 5U)
+#define	GPSR5_QSPI0_IO3		((uint32_t)1U << 4U)
+#define	GPSR5_QSPI0_IO2		((uint32_t)1U << 3U)
+#define	GPSR5_QSPI0_MISO_IO1		((uint32_t)1U << 2U)
+#define	GPSR5_QSPI0_MOSI_IO0		((uint32_t)1U << 1U)
+#define	GPSR5_QSPI0_SPCLK	((uint32_t)1U << 0U)
+
+#define	IPSR_28_FUNC(x)		((uint32_t)(x) << 28U)
+#define	IPSR_24_FUNC(x)		((uint32_t)(x) << 24U)
+#define	IPSR_20_FUNC(x)		((uint32_t)(x) << 20U)
+#define	IPSR_16_FUNC(x)		((uint32_t)(x) << 16U)
+#define	IPSR_12_FUNC(x)		((uint32_t)(x) << 12U)
+#define	IPSR_8_FUNC(x)		((uint32_t)(x) << 8U)
+#define	IPSR_4_FUNC(x)		((uint32_t)(x) << 4U)
+#define	IPSR_0_FUNC(x)		((uint32_t)(x) << 0U)
+
+#define IOCTRL0_MASK								(0x00000000U)
+#define IOCTRL1_MASK								(0x00000000U)
+#define IOCTRL2_MASK								(0x00000000U)
+#define IOCTRL3_MASK								(0x00000000U)
+#define IOCTRL4_MASK								(0x00000000U)
+#define IOCTRL5_MASK								(0x00000000U)
+#define IOCTRL6_MASK								(0x00000000U)
+#define IOCTRL7_MASK								(0x00000000U)
+#define IOCTRL8_MASK								(0x00000000U)
+#define IOCTRL9_MASK								(0x00000000U)
+#define IOCTRL10_MASK								(0x00000000U)
+#define IOCTRL11_MASK								(0x00000000U)
+#define IOCTRL12_MASK								(0x00000000U)
+#define IOCTRL13_MASK								(0x00000000U)
+#define IOCTRL14_MASK								(0x00000000U)
+#define IOCTRL15_MASK								(0x00000000U)
+#define IOCTRL16_MASK								(0x00000000U)
+#define IOCTRL17_MASK								(0x00000000U)
+#define IOCTRL18_MASK								(0x00000000U)
+#define IOCTRL19_MASK								(0x00000000U)
+
+#define IOCTRL0_DRV3_GETHER_DR2						((uint32_t)1U << 30U)
+#define IOCTRL0_DRV2_GETHER_DR2						((uint32_t)1U << 29U)
+#define IOCTRL0_DRV1_GETHER_DR2						((uint32_t)1U << 28U)
+#define IOCTRL0_DRV3_GETHER_DR3						((uint32_t)1U << 26U)
+#define IOCTRL0_DRV2_GETHER_DR3						((uint32_t)1U << 25U)
+#define IOCTRL0_DRV1_GETHER_DR3						((uint32_t)1U << 24U)
+#define IOCTRL0_DRV3_GETHER_DR4						((uint32_t)1U << 22U)
+#define IOCTRL0_DRV2_GETHER_DR4						((uint32_t)1U << 21U)
+#define IOCTRL0_DRV1_GETHER_DR4						((uint32_t)1U << 20U)
+#define IOCTRL0_DRV3_GETHER_DR5						((uint32_t)1U << 18U)
+#define IOCTRL0_DRV2_GETHER_DR5						((uint32_t)1U << 17U)
+#define IOCTRL0_DRV1_GETHER_DR5						((uint32_t)1U << 16U)
+#define IOCTRL0_DRV3_GETHER_DR6						((uint32_t)1U << 14U)
+#define IOCTRL0_DRV2_GETHER_DR6						((uint32_t)1U << 13U)
+#define IOCTRL0_DRV1_GETHER_DR6						((uint32_t)1U << 12U)
+#define IOCTRL0_DRV3_GETHER_DR7						((uint32_t)1U << 10U)
+#define IOCTRL0_DRV2_GETHER_DR7						((uint32_t)1U << 9U)
+#define IOCTRL0_DRV1_GETHER_DR7						((uint32_t)1U << 8U)
+#define IOCTRL0_DRV3_GETHER_DG2						((uint32_t)1U << 6U)
+#define IOCTRL0_DRV2_GETHER_DG2						((uint32_t)1U << 5U)
+#define IOCTRL0_DRV1_GETHER_DG2						((uint32_t)1U << 4U)
+#define IOCTRL0_DRV3_GETHER_DG3						((uint32_t)1U << 2U)
+#define IOCTRL0_DRV2_GETHER_DG3						((uint32_t)1U << 1U)
+#define IOCTRL0_DRV1_GETHER_DG3						((uint32_t)1U << 0U)
+#define IOCTRL1_DRV3_GETHER_DG4						((uint32_t)1U << 30U)
+#define IOCTRL1_DRV2_GETHER_DG4						((uint32_t)1U << 29U)
+#define IOCTRL1_DRV1_GETHER_DG4						((uint32_t)1U << 28U)
+#define IOCTRL1_DRV3_GETHER_DG5						((uint32_t)1U << 26U)
+#define IOCTRL1_DRV2_GETHER_DG5						((uint32_t)1U << 25U)
+#define IOCTRL1_DRV1_GETHER_DG5						((uint32_t)1U << 24U)
+#define IOCTRL1_DRV3_GETHER_DG6						((uint32_t)1U << 22U)
+#define IOCTRL1_DRV2_GETHER_DG6						((uint32_t)1U << 21U)
+#define IOCTRL1_DRV1_GETHER_DG6						((uint32_t)1U << 20U)
+#define IOCTRL1_DRV3_GETHER_DG7						((uint32_t)1U << 18U)
+#define IOCTRL1_DRV2_GETHER_DG7						((uint32_t)1U << 17U)
+#define IOCTRL1_DRV1_GETHER_DG7						((uint32_t)1U << 16U)
+#define IOCTRL1_DRV3_GETHER_DB2						((uint32_t)1U << 14U)
+#define IOCTRL1_DRV2_GETHER_DB2						((uint32_t)1U << 13U)
+#define IOCTRL1_DRV1_GETHER_DB2						((uint32_t)1U << 12U)
+#define IOCTRL1_DRV3_GETHER_DB3						((uint32_t)1U << 10U)
+#define IOCTRL1_DRV2_GETHER_DB3						((uint32_t)1U << 9U)
+#define IOCTRL1_DRV1_GETHER_DB3						((uint32_t)1U << 8U)
+#define IOCTRL1_DRV3_GETHER_DB4						((uint32_t)1U << 6U)
+#define IOCTRL1_DRV2_GETHER_DB4						((uint32_t)1U << 5U)
+#define IOCTRL1_DRV1_GETHER_DB4						((uint32_t)1U << 4U)
+#define IOCTRL1_DRV3_GETHER_DB5						((uint32_t)1U << 2U)
+#define IOCTRL1_DRV2_GETHER_DB5						((uint32_t)1U << 1U)
+#define IOCTRL1_DRV1_GETHER_DB5						((uint32_t)1U << 0U)
+#define IOCTRL2_DRV3_GETHER_DB6						((uint32_t)1U << 30U)
+#define IOCTRL2_DRV2_GETHER_DB6						((uint32_t)1U << 29U)
+#define IOCTRL2_DRV1_GETHER_DB6						((uint32_t)1U << 28U)
+#define IOCTRL2_DRV3_GETHER_DB7						((uint32_t)1U << 26U)
+#define IOCTRL2_DRV2_GETHER_DB7						((uint32_t)1U << 25U)
+#define IOCTRL2_DRV1_GETHER_DB7						((uint32_t)1U << 24U)
+#define IOCTRL2_DRV3_DU_DOTCLKOUT					((uint32_t)1U << 22U)
+#define IOCTRL2_DRV2_DU_DOTCLKOUT					((uint32_t)1U << 21U)
+#define IOCTRL2_DRV1_DU_DOTCLKOUT					((uint32_t)1U << 20U)
+#define IOCTRL2_DRV3_DU_EXHSYNC_DU_HSYNC				((uint32_t)1U << 18U)
+#define IOCTRL2_DRV2_DU_EXHSYNC_DU_HSYNC				((uint32_t)1U << 17U)
+#define IOCTRL2_DRV1_DU_EXHSYNC_DU_HSYNC				((uint32_t)1U << 16U)
+#define IOCTRL2_DRV3_DU_EXHSYNC_DU_VSYNC				((uint32_t)1U << 14U)
+#define IOCTRL2_DRV2_DU_EXHSYNC_DU_VSYNC				((uint32_t)1U << 13U)
+#define IOCTRL2_DRV1_DU_EXHSYNC_DU_VSYNC				((uint32_t)1U << 12U)
+#define IOCTRL2_DRV3_DU_EXODDF_DU_ODDF_DISP_CDE				((uint32_t)1U << 10U)
+#define IOCTRL2_DRV2_DU_EXODDF_DU_ODDF_DISP_CDE				((uint32_t)1U << 9U)
+#define IOCTRL2_DRV1_DU_EXODDF_DU_ODDF_DISP_CDE				((uint32_t)1U << 8U)
+#define IOCTRL3_DRV2_DU_DOTCLKIN					((uint32_t)1U << 29U)
+#define IOCTRL3_DRV1_DU_DOTCLKIN					((uint32_t)1U << 28U)
+#define IOCTRL3_DRV3_PRESETOUT						((uint32_t)1U << 22U)
+#define IOCTRL3_DRV2_PRESETOUT						((uint32_t)1U << 21U)
+#define IOCTRL3_DRV1_PRESETOUT						((uint32_t)1U << 20U)
+#define IOCTRL3_DRV2_FSCLKST						((uint32_t)1U << 1U)
+#define IOCTRL3_DRV1_FSCLKST						((uint32_t)1U << 0U)
+#define IOCTRL4_DRV2_FSCLKST2						((uint32_t)1U << 29U)
+#define IOCTRL4_DRV1_FSCLKST2						((uint32_t)1U << 28U)
+#define IOCTRL4_DRV3_IRQ0						((uint32_t)1U << 22U)
+#define IOCTRL4_DRV2_IRQ0						((uint32_t)1U << 21U)
+#define IOCTRL4_DRV1_IRQ0						((uint32_t)1U << 20U)
+#define IOCTRL4_DRV2_DCUTMS						((uint32_t)1U << 9U)
+#define IOCTRL4_DRV1_DCUTMS						((uint32_t)1U << 8U)
+#define IOCTRL4_DRV2_DCUTDO_LPDO					((uint32_t)1U << 1U)
+#define IOCTRL4_DRV1_DCUTDO_LPDO					((uint32_t)1U << 0U)
+#define IOCTRL5_DRV2_DCURDY_LPDCLKOUT					((uint32_t)1U << 29U)
+#define IOCTRL5_DRV1_DCURDY_LPDCLKOUT					((uint32_t)1U << 28U)
+#define IOCTRL5_DRV3_VI0_CLK						((uint32_t)1U << 26U)
+#define IOCTRL5_DRV2_VI0_CLK						((uint32_t)1U << 25U)
+#define IOCTRL5_DRV1_VI0_CLK						((uint32_t)1U << 24U)
+#define IOCTRL5_DRV3_VI0_CLKENB						((uint32_t)1U << 22U)
+#define IOCTRL5_DRV2_VI0_CLKENB						((uint32_t)1U << 21U)
+#define IOCTRL5_DRV1_VI0_CLKENB						((uint32_t)1U << 20U)
+#define IOCTRL5_DRV3_VI0_HSYNC						((uint32_t)1U << 18U)
+#define IOCTRL5_DRV2_VI0_HSYNC						((uint32_t)1U << 17U)
+#define IOCTRL5_DRV1_VI0_HSYNC						((uint32_t)1U << 16U)
+#define IOCTRL5_DRV3_VI0_VSYNC						((uint32_t)1U << 14U)
+#define IOCTRL5_DRV2_VI0_VSYNC						((uint32_t)1U << 13U)
+#define IOCTRL5_DRV1_VI0_VSYNC						((uint32_t)1U << 12U)
+#define IOCTRL5_DRV3_VI0_DATA0						((uint32_t)1U << 10U)
+#define IOCTRL5_DRV2_VI0_DATA0						((uint32_t)1U << 9U)
+#define IOCTRL5_DRV1_VI0_DATA0						((uint32_t)1U << 8U)
+#define IOCTRL5_DRV3_VI0_DATA1						((uint32_t)1U << 6U)
+#define IOCTRL5_DRV2_VI0_DATA1						((uint32_t)1U << 5U)
+#define IOCTRL5_DRV1_VI0_DATA1						((uint32_t)1U << 4U)
+#define IOCTRL5_DRV3_VI0_DATA2						((uint32_t)1U << 2U)
+#define IOCTRL5_DRV2_VI0_DATA2						((uint32_t)1U << 1U)
+#define IOCTRL5_DRV1_VI0_DATA2						((uint32_t)1U << 0U)
+#define IOCTRL6_DRV3_VI0_DATA3						((uint32_t)1U << 30U)
+#define IOCTRL6_DRV2_VI0_DATA3						((uint32_t)1U << 29U)
+#define IOCTRL6_DRV1_VI0_DATA3						((uint32_t)1U << 28U)
+#define IOCTRL6_DRV3_VI0_DATA4						((uint32_t)1U << 26U)
+#define IOCTRL6_DRV2_VI0_DATA4						((uint32_t)1U << 25U)
+#define IOCTRL6_DRV1_VI0_DATA4						((uint32_t)1U << 24U)
+#define IOCTRL6_DRV3_VI0_DATA5						((uint32_t)1U << 22U)
+#define IOCTRL6_DRV2_VI0_DATA5						((uint32_t)1U << 21U)
+#define IOCTRL6_DRV1_VI0_DATA5						((uint32_t)1U << 20U)
+#define IOCTRL6_DRV3_VI0_DATA6						((uint32_t)1U << 18U)
+#define IOCTRL6_DRV2_VI0_DATA6						((uint32_t)1U << 17U)
+#define IOCTRL6_DRV1_VI0_DATA6						((uint32_t)1U << 16U)
+#define IOCTRL6_DRV3_VI0_DATA7						((uint32_t)1U << 14U)
+#define IOCTRL6_DRV2_VI0_DATA7						((uint32_t)1U << 13U)
+#define IOCTRL6_DRV1_VI0_DATA7						((uint32_t)1U << 12U)
+#define IOCTRL6_DRV3_VI0_DATA8						((uint32_t)1U << 10U)
+#define IOCTRL6_DRV2_VI0_DATA8						((uint32_t)1U << 9U)
+#define IOCTRL6_DRV1_VI0_DATA8						((uint32_t)1U << 8U)
+#define IOCTRL6_DRV3_VI0_DATA9						((uint32_t)1U << 6U)
+#define IOCTRL6_DRV2_VI0_DATA9						((uint32_t)1U << 5U)
+#define IOCTRL6_DRV1_VI0_DATA9						((uint32_t)1U << 4U)
+#define IOCTRL6_DRV3_VI0_DATA10						((uint32_t)1U << 2U)
+#define IOCTRL6_DRV2_VI0_DATA10						((uint32_t)1U << 1U)
+#define IOCTRL6_DRV1_VI0_DATA10						((uint32_t)1U << 0U)
+#define IOCTRL7_DRV3_VI0_DATA11						((uint32_t)1U << 30U)
+#define IOCTRL7_DRV2_VI0_DATA11						((uint32_t)1U << 29U)
+#define IOCTRL7_DRV1_VI0_DATA11						((uint32_t)1U << 28U)
+#define IOCTRL7_DRV3_VI0_FIELD						((uint32_t)1U << 26U)
+#define IOCTRL7_DRV2_VI0_FIELD						((uint32_t)1U << 25U)
+#define IOCTRL7_DRV1_VI0_FIELD						((uint32_t)1U << 24U)
+#define IOCTRL7_DRV3_VI1_CLK						((uint32_t)1U << 22U)
+#define IOCTRL7_DRV2_VI1_CLK						((uint32_t)1U << 21U)
+#define IOCTRL7_DRV1_VI1_CLK						((uint32_t)1U << 20U)
+#define IOCTRL7_DRV3_VI1_CLKENB						((uint32_t)1U << 18U)
+#define IOCTRL7_DRV2_VI1_CLKENB						((uint32_t)1U << 17U)
+#define IOCTRL7_DRV1_VI1_CLKENB						((uint32_t)1U << 16U)
+#define IOCTRL7_DRV3_VI1_HSYNC						((uint32_t)1U << 14U)
+#define IOCTRL7_DRV2_VI1_HSYNC						((uint32_t)1U << 13U)
+#define IOCTRL7_DRV1_VI1_HSYNC						((uint32_t)1U << 12U)
+#define IOCTRL7_DRV3_VI1_VSYNC						((uint32_t)1U << 10U)
+#define IOCTRL7_DRV2_VI1_VSYNC						((uint32_t)1U << 9U)
+#define IOCTRL7_DRV1_VI1_VSYNC						((uint32_t)1U << 8U)
+#define IOCTRL7_DRV3_VI1_DATA0						((uint32_t)1U << 6U)
+#define IOCTRL7_DRV2_VI1_DATA0						((uint32_t)1U << 5U)
+#define IOCTRL7_DRV1_VI1_DATA0						((uint32_t)1U << 4U)
+#define IOCTRL7_DRV3_VI1_DATA1						((uint32_t)1U << 2U)
+#define IOCTRL7_DRV2_VI1_DATA1						((uint32_t)1U << 1U)
+#define IOCTRL7_DRV1_VI1_DATA1						((uint32_t)1U << 0U)
+#define IOCTRL8_DRV3_VI1_DATA2						((uint32_t)1U << 30U)
+#define IOCTRL8_DRV2_VI1_DATA2						((uint32_t)1U << 29U)
+#define IOCTRL8_DRV1_VI1_DATA2						((uint32_t)1U << 28U)
+#define IOCTRL8_DRV3_VI1_DATA3						((uint32_t)1U << 26U)
+#define IOCTRL8_DRV2_VI1_DATA3						((uint32_t)1U << 25U)
+#define IOCTRL8_DRV1_VI1_DATA3						((uint32_t)1U << 24U)
+#define IOCTRL8_DRV3_VI1_DATA4						((uint32_t)1U << 22U)
+#define IOCTRL8_DRV2_VI1_DATA4						((uint32_t)1U << 21U)
+#define IOCTRL8_DRV1_VI1_DATA4						((uint32_t)1U << 20U)
+#define IOCTRL8_DRV3_VI1_DATA5						((uint32_t)1U << 18U)
+#define IOCTRL8_DRV2_VI1_DATA5						((uint32_t)1U << 17U)
+#define IOCTRL8_DRV1_VI1_DATA5						((uint32_t)1U << 16U)
+#define IOCTRL8_DRV3_VI1_DATA6						((uint32_t)1U << 14U)
+#define IOCTRL8_DRV2_VI1_DATA6						((uint32_t)1U << 13U)
+#define IOCTRL8_DRV1_VI1_DATA6						((uint32_t)1U << 12U)
+#define IOCTRL8_DRV3_VI1_DATA7						((uint32_t)1U << 10U)
+#define IOCTRL8_DRV2_VI1_DATA7						((uint32_t)1U << 9U)
+#define IOCTRL8_DRV1_VI1_DATA7						((uint32_t)1U << 8U)
+#define IOCTRL8_DRV3_VI1_DATA8						((uint32_t)1U << 6U)
+#define IOCTRL8_DRV2_VI1_DATA8						((uint32_t)1U << 5U)
+#define IOCTRL8_DRV1_VI1_DATA8						((uint32_t)1U << 4U)
+#define IOCTRL8_DRV3_VI1_DATA9						((uint32_t)1U << 2U)
+#define IOCTRL8_DRV2_VI1_DATA9						((uint32_t)1U << 1U)
+#define IOCTRL8_DRV1_VI1_DATA9						((uint32_t)1U << 0U)
+#define IOCTRL9_DRV3_VI1_DATA10						((uint32_t)1U << 30U)
+#define IOCTRL9_DRV2_VI1_DATA10						((uint32_t)1U << 29U)
+#define IOCTRL9_DRV1_VI1_DATA10						((uint32_t)1U << 28U)
+#define IOCTRL9_DRV3_VI1_DATA11						((uint32_t)1U << 26U)
+#define IOCTRL9_DRV2_VI1_DATA11						((uint32_t)1U << 25U)
+#define IOCTRL9_DRV1_VI1_DATA11						((uint32_t)1U << 24U)
+#define IOCTRL9_DRV3_VI1_FIELD						((uint32_t)1U << 22U)
+#define IOCTRL9_DRV2_VI1_FIELD						((uint32_t)1U << 21U)
+#define IOCTRL9_DRV1_VI1_FIELD						((uint32_t)1U << 20U)
+#define IOCTRL9_DRV3_VI1_SCL0						((uint32_t)1U << 18U)
+#define IOCTRL9_DRV2_VI1_SCL0						((uint32_t)1U << 17U)
+#define IOCTRL9_DRV1_VI1_SCL0						((uint32_t)1U << 16U)
+#define IOCTRL9_DRV3_VI1_SDA0						((uint32_t)1U << 14U)
+#define IOCTRL9_DRV2_VI1_SDA0						((uint32_t)1U << 13U)
+#define IOCTRL9_DRV1_VI1_SDA0						((uint32_t)1U << 12U)
+#define IOCTRL9_DRV3_VI1_SCL1						((uint32_t)1U << 10U)
+#define IOCTRL9_DRV2_VI1_SCL1						((uint32_t)1U << 9U)
+#define IOCTRL9_DRV1_VI1_SCL1						((uint32_t)1U << 8U)
+#define IOCTRL9_DRV3_VI1_SDA1						((uint32_t)1U << 6U)
+#define IOCTRL9_DRV2_VI1_SDA1						((uint32_t)1U << 5U)
+#define IOCTRL9_DRV1_VI1_SDA1						((uint32_t)1U << 4U)
+#define IOCTRL9_DRV3_VI1_SCL2						((uint32_t)1U << 2U)
+#define IOCTRL9_DRV2_VI1_SCL2						((uint32_t)1U << 1U)
+#define IOCTRL9_DRV1_VI1_SCL2						((uint32_t)1U << 0U)
+#define IOCTRL10_DRV3_VI1_SDA2						((uint32_t)1U << 30U)
+#define IOCTRL10_DRV2_VI1_SDA2						((uint32_t)1U << 29U)
+#define IOCTRL10_DRV1_VI1_SDA2						((uint32_t)1U << 28U)
+#define IOCTRL10_DRV3_AVB_RX_CTL					((uint32_t)1U << 26U)
+#define IOCTRL10_DRV2_AVB_RX_CTL					((uint32_t)1U << 25U)
+#define IOCTRL10_DRV1_AVB_RX_CTL					((uint32_t)1U << 24U)
+#define IOCTRL10_DRV3_AVB_RX_RXC					((uint32_t)1U << 22U)
+#define IOCTRL10_DRV2_AVB_RX_RXC					((uint32_t)1U << 21U)
+#define IOCTRL10_DRV1_AVB_RX_RXC					((uint32_t)1U << 20U)
+#define IOCTRL10_DRV3_AVB_RX_RD0					((uint32_t)1U << 18U)
+#define IOCTRL10_DRV2_AVB_RX_RD0					((uint32_t)1U << 17U)
+#define IOCTRL10_DRV1_AVB_RX_RD0					((uint32_t)1U << 16U)
+#define IOCTRL10_DRV3_AVB_RX_RD1					((uint32_t)1U << 14U)
+#define IOCTRL10_DRV2_AVB_RX_RD1					((uint32_t)1U << 13U)
+#define IOCTRL10_DRV1_AVB_RX_RD1					((uint32_t)1U << 12U)
+#define IOCTRL10_DRV3_AVB_RX_RD2					((uint32_t)1U << 10U)
+#define IOCTRL10_DRV2_AVB_RX_RD2					((uint32_t)1U << 9U)
+#define IOCTRL10_DRV1_AVB_RX_RD2					((uint32_t)1U << 8U)
+#define IOCTRL10_DRV3_AVB_RX_RD3					((uint32_t)1U << 6U)
+#define IOCTRL10_DRV2_AVB_RX_RD3					((uint32_t)1U << 5U)
+#define IOCTRL10_DRV1_AVB_RX_RD3					((uint32_t)1U << 4U)
+#define IOCTRL10_DRV3_AVB_TX_CTL					((uint32_t)1U << 2U)
+#define IOCTRL10_DRV2_AVB_TX_CTL					((uint32_t)1U << 1U)
+#define IOCTRL10_DRV1_AVB_TX_CTL					((uint32_t)1U << 0U)
+#define IOCTRL11_DRV3_AVB_TXC						((uint32_t)1U << 30U)
+#define IOCTRL11_DRV2_AVB_TXC						((uint32_t)1U << 29U)
+#define IOCTRL11_DRV1_AVB_TXC						((uint32_t)1U << 28U)
+#define IOCTRL11_DRV3_AVB_TD0						((uint32_t)1U << 26U)
+#define IOCTRL11_DRV2_AVB_TD0						((uint32_t)1U << 25U)
+#define IOCTRL11_DRV1_AVB_TD0						((uint32_t)1U << 24U)
+#define IOCTRL11_DRV3_AVB_TD1						((uint32_t)1U << 22U)
+#define IOCTRL11_DRV2_AVB_TD1						((uint32_t)1U << 21U)
+#define IOCTRL11_DRV1_AVB_TD1						((uint32_t)1U << 20U)
+#define IOCTRL11_DRV3_AVB_TD2						((uint32_t)1U << 18U)
+#define IOCTRL11_DRV2_AVB_TD2						((uint32_t)1U << 17U)
+#define IOCTRL11_DRV1_AVB_TD2						((uint32_t)1U << 16U)
+#define IOCTRL11_DRV3_AVB_TD3						((uint32_t)1U << 14U)
+#define IOCTRL11_DRV2_AVB_TD3						((uint32_t)1U << 13U)
+#define IOCTRL11_DRV1_AVB_TD3						((uint32_t)1U << 12U)
+#define IOCTRL11_DRV3_AVB_TXCREFCLK					((uint32_t)1U << 10U)
+#define IOCTRL11_DRV2_AVB_TXCREFCLK					((uint32_t)1U << 9U)
+#define IOCTRL11_DRV1_AVB_TXCREFCLK					((uint32_t)1U << 8U)
+#define IOCTRL11_DRV3_AVB_MDIO						((uint32_t)1U << 6U)
+#define IOCTRL11_DRV2_AVB_MDIO						((uint32_t)1U << 5U)
+#define IOCTRL11_DRV1_AVB_MDIO						((uint32_t)1U << 4U)
+#define IOCTRL11_DRV3_AVB_MDC						((uint32_t)1U << 2U)
+#define IOCTRL11_DRV2_AVB_MDC						((uint32_t)1U << 1U)
+#define IOCTRL11_DRV1_AVB_MDC						((uint32_t)1U << 0U)
+#define IOCTRL12_DRV3_AVB_MAGIC						((uint32_t)1U << 30U)
+#define IOCTRL12_DRV2_AVB_MAGIC						((uint32_t)1U << 29U)
+#define IOCTRL12_DRV1_AVB_MAGIC						((uint32_t)1U << 28U)
+#define IOCTRL12_DRV3_AVB_PHY_INT					((uint32_t)1U << 26U)
+#define IOCTRL12_DRV2_AVB_PHY_INT					((uint32_t)1U << 25U)
+#define IOCTRL12_DRV1_AVB_PHY_INT					((uint32_t)1U << 24U)
+#define IOCTRL12_DRV3_AVB_LINK						((uint32_t)1U << 22U)
+#define IOCTRL12_DRV2_AVB_LINK						((uint32_t)1U << 21U)
+#define IOCTRL12_DRV1_AVB_LINK						((uint32_t)1U << 20U)
+#define IOCTRL12_DRV3_AVB_AVTP_MATCH					((uint32_t)1U << 18U)
+#define IOCTRL12_DRV2_AVB_AVTP_MATCH					((uint32_t)1U << 17U)
+#define IOCTRL12_DRV1_AVB_AVTP_MATCH					((uint32_t)1U << 16U)
+#define IOCTRL12_DRV3_AVB_AVTP_CAPTURE					((uint32_t)1U << 14U)
+#define IOCTRL12_DRV2_AVB_AVTP_CAPTURE					((uint32_t)1U << 13U)
+#define IOCTRL12_DRV1_AVB_AVTP_CAPTURE					((uint32_t)1U << 12U)
+#define IOCTRL12_DRV3_GETHER_RX_CTL					((uint32_t)1U << 10U)
+#define IOCTRL12_DRV2_GETHER_RX_CTL					((uint32_t)1U << 9U)
+#define IOCTRL12_DRV1_GETHER_RX_CTL					((uint32_t)1U << 8U)
+#define IOCTRL12_DRV3_GETHER_RXC					((uint32_t)1U << 6U)
+#define IOCTRL12_DRV2_GETHER_RXC					((uint32_t)1U << 5U)
+#define IOCTRL12_DRV1_GETHER_RXC					((uint32_t)1U << 4U)
+#define IOCTRL12_DRV3_GETHER_RD0					((uint32_t)1U << 2U)
+#define IOCTRL12_DRV2_GETHER_RD0					((uint32_t)1U << 1U)
+#define IOCTRL12_DRV1_GETHER_RD0					((uint32_t)1U << 0U)
+#define IOCTRL13_DRV3_GETHER_RD1					((uint32_t)1U << 30U)
+#define IOCTRL13_DRV2_GETHER_RD1					((uint32_t)1U << 29U)
+#define IOCTRL13_DRV1_GETHER_RD1					((uint32_t)1U << 28U)
+#define IOCTRL13_DRV3_GETHER_RD2					((uint32_t)1U << 26U)
+#define IOCTRL13_DRV2_GETHER_RD2					((uint32_t)1U << 25U)
+#define IOCTRL13_DRV1_GETHER_RD2					((uint32_t)1U << 24U)
+#define IOCTRL13_DRV3_GETHER_RD3					((uint32_t)1U << 22U)
+#define IOCTRL13_DRV2_GETHER_RD3					((uint32_t)1U << 21U)
+#define IOCTRL13_DRV1_GETHER_RD3					((uint32_t)1U << 20U)
+#define IOCTRL13_DRV3_GETHER_TX_CTL					((uint32_t)1U << 18U)
+#define IOCTRL13_DRV2_GETHER_TX_CTL					((uint32_t)1U << 17U)
+#define IOCTRL13_DRV1_GETHER_TX_CTL					((uint32_t)1U << 16U)
+#define IOCTRL13_DRV3_GETHER_TXC					((uint32_t)1U << 14U)
+#define IOCTRL13_DRV2_GETHER_TXC					((uint32_t)1U << 13U)
+#define IOCTRL13_DRV1_GETHER_TXC					((uint32_t)1U << 12U)
+#define IOCTRL13_DRV3_GETHER_TD0					((uint32_t)1U << 10U)
+#define IOCTRL13_DRV2_GETHER_TD0					((uint32_t)1U << 9U)
+#define IOCTRL13_DRV1_GETHER_TD0					((uint32_t)1U << 8U)
+#define IOCTRL13_DRV3_GETHER_TD1					((uint32_t)1U << 6U)
+#define IOCTRL13_DRV2_GETHER_TD1					((uint32_t)1U << 5U)
+#define IOCTRL13_DRV1_GETHER_TD1					((uint32_t)1U << 4U)
+#define IOCTRL13_DRV3_GETHER_TD2					((uint32_t)1U << 2U)
+#define IOCTRL13_DRV2_GETHER_TD2					((uint32_t)1U << 1U)
+#define IOCTRL13_DRV1_GETHER_TD2					((uint32_t)1U << 0U)
+#define IOCTRL13_DRV3_GETHER_TD3					((uint32_t)1U << 30U)
+#define IOCTRL13_DRV2_GETHER_TD3					((uint32_t)1U << 29U)
+#define IOCTRL13_DRV1_GETHER_TD3					((uint32_t)1U << 28U)
+#define IOCTRL14_DRV3_GETHER_TXCREFCLK					((uint32_t)1U << 26U)
+#define IOCTRL14_DRV2_GETHER_TXCREFCLK					((uint32_t)1U << 25U)
+#define IOCTRL14_DRV1_GETHER_TXCREFCLK					((uint32_t)1U << 24U)
+#define IOCTRL14_DRV3_GETHER_TXCREFCLK_MEGA				((uint32_t)1U << 22U)
+#define IOCTRL14_DRV2_GETHER_TXCREFCLK_MEGA				((uint32_t)1U << 21U)
+#define IOCTRL14_DRV1_GETHER_TXCREFCLK_MEGA				((uint32_t)1U << 20U)
+#define IOCTRL14_DRV3_GETHER_MDIO					((uint32_t)1U << 18U)
+#define IOCTRL14_DRV2_GETHER_MDIO					((uint32_t)1U << 17U)
+#define IOCTRL14_DRV1_GETHER_MDIO					((uint32_t)1U << 16U)
+#define IOCTRL14_DRV3_GETHER_MDC					((uint32_t)1U << 14U)
+#define IOCTRL14_DRV2_GETHER_MDC					((uint32_t)1U << 13U)
+#define IOCTRL14_DRV1_GETHER_MDC					((uint32_t)1U << 12U)
+#define IOCTRL14_DRV3_GETHER_MAGIC					((uint32_t)1U << 10U)
+#define IOCTRL14_DRV2_GETHER_MAGIC					((uint32_t)1U << 9U)
+#define IOCTRL14_DRV1_GETHER_MAGIC					((uint32_t)1U << 8U)
+#define IOCTRL14_DRV3_GETHER_PHY_INT					((uint32_t)1U << 6U)
+#define IOCTRL14_DRV2_GETHER_PHY_INT					((uint32_t)1U << 5U)
+#define IOCTRL14_DRV1_GETHER_PHY_INT					((uint32_t)1U << 4U)
+#define IOCTRL14_DRV3_GETHER_LINK					((uint32_t)1U << 2U)
+#define IOCTRL14_DRV2_GETHER_LINK					((uint32_t)1U << 1U)
+#define IOCTRL14_DRV1_GETHER_LINK					((uint32_t)1U << 0U)
+#define IOCTRL15_DRV3_CANFD0_TX						((uint32_t)1U << 30U)
+#define IOCTRL15_DRV2_CANFD0_TX						((uint32_t)1U << 29U)
+#define IOCTRL15_DRV1_CANFD0_TX						((uint32_t)1U << 28U)
+#define IOCTRL15_DRV3_CANFD0_RX						((uint32_t)1U << 26U)
+#define IOCTRL15_DRV2_CANFD0_RX						((uint32_t)1U << 25U)
+#define IOCTRL15_DRV1_CANFD0_RX						((uint32_t)1U << 24U)
+#define IOCTRL15_DRV3_CANFD1_TX						((uint32_t)1U << 22U)
+#define IOCTRL15_DRV2_CANFD1_TX						((uint32_t)1U << 21U)
+#define IOCTRL15_DRV1_CANFD1_TX						((uint32_t)1U << 20U)
+#define IOCTRL15_DRV3_CANFD1_RX						((uint32_t)1U << 18U)
+#define IOCTRL15_DRV2_CANFD1_RX						((uint32_t)1U << 17U)
+#define IOCTRL15_DRV1_CANFD1_RX						((uint32_t)1U << 16U)
+#define IOCTRL15_DRV3_CAN_CLK						((uint32_t)1U << 14U)
+#define IOCTRL15_DRV2_CAN_CLK						((uint32_t)1U << 13U)
+#define IOCTRL15_DRV1_CAN_CLK						((uint32_t)1U << 12U)
+#define IOCTRL15_DRV2_QSPI0_SPCLK					((uint32_t)1U << 9U)
+#define IOCTRL15_DRV1_QSPI0_SPCLK					((uint32_t)1U << 8U)
+#define IOCTRL15_DRV2_QSPI0_MOSI_IO0					((uint32_t)1U << 5U)
+#define IOCTRL15_DRV1_QSPI0_MOSI_IO0					((uint32_t)1U << 4U)
+#define IOCTRL15_DRV2_QSPI0_MOSI_IO1					((uint32_t)1U << 1U)
+#define IOCTRL15_DRV1_QSPI0_MOSI_IO1					((uint32_t)1U << 0U)
+#define IOCTRL16_DRV2_QSPI0_MOSI_IO2					((uint32_t)1U << 29U)
+#define IOCTRL16_DRV1_QSPI0_MOSI_IO2					((uint32_t)1U << 28U)
+#define IOCTRL16_DRV2_QSPI0_MOSI_IO3					((uint32_t)1U << 25U)
+#define IOCTRL16_DRV1_QSPI0_MOSI_IO3					((uint32_t)1U << 24U)
+#define IOCTRL16_DRV2_QSPI0_SSL						((uint32_t)1U << 21U)
+#define IOCTRL16_DRV1_QSPI0_SSL						((uint32_t)1U << 20U)
+#define IOCTRL16_DRV2_QSPI1_SPCLK					((uint32_t)1U << 17U)
+#define IOCTRL16_DRV1_QSPI1_SPCLK					((uint32_t)1U << 16U)
+#define IOCTRL16_DRV2_QSPI1_MOSI_IO0					((uint32_t)1U << 13U)
+#define IOCTRL16_DRV1_QSPI1_MOSI_IO0					((uint32_t)1U << 12U)
+#define IOCTRL16_DRV2_QSPI1_MOSI_IO1					((uint32_t)1U << 9U)
+#define IOCTRL16_DRV1_QSPI1_MOSI_IO1					((uint32_t)1U << 8U)
+#define IOCTRL16_DRV2_QSPI1_IO2						((uint32_t)1U << 5U)
+#define IOCTRL16_DRV1_QSPI1_IO2						((uint32_t)1U << 4U)
+#define IOCTRL16_DRV2_QSPI1_IO3						((uint32_t)1U << 1U)
+#define IOCTRL16_DRV1_QSPI1_IO3						((uint32_t)1U << 0U)
+#define IOCTRL17_DRV2_QSPI1_SSL						((uint32_t)1U << 29U)
+#define IOCTRL17_DRV1_QSPI1_SSL						((uint32_t)1U << 28U)
+#define IOCTRL17_DRV2_QSPI1_RPC_RESET					((uint32_t)1U << 25U)
+#define IOCTRL17_DRV1_QSPI1_RPC_RESET					((uint32_t)1U << 24U)
+#define IOCTRL17_DRV2_RPC_WP						((uint32_t)1U << 21U)
+#define IOCTRL17_DRV1_RPC_WP						((uint32_t)1U << 20U)
+#define IOCTRL17_DRV2_RPC_INT						((uint32_t)1U << 17U)
+#define IOCTRL17_DRV1_RPC_INT						((uint32_t)1U << 16U)
+#define IOCTRL17_DRV2_DIGRF_CLKIN					((uint32_t)1U << 13U)
+#define IOCTRL17_DRV1_DIGRF_CLKIN					((uint32_t)1U << 12U)
+#define IOCTRL17_DRV2_DIGRF_CLKOUT					((uint32_t)1U << 9U)
+#define IOCTRL17_DRV1_DIGRF_CLKOUT					((uint32_t)1U << 8U)
+#define IOCTRL17_DRV2_RPC_IRQ4						((uint32_t)1U << 5U)
+#define IOCTRL17_DRV1_RPC_IRQ4						((uint32_t)1U << 4U)
+#define IOCTRL17_DRV2_RPC_IRQ5						((uint32_t)1U << 1U)
+#define IOCTRL17_DRV1_RPC_IRQ5						((uint32_t)1U << 0U)
+#define IOCTRL18_DRV3_SCL3						((uint32_t)1U << 30U)
+#define IOCTRL18_DRV2_SCL3						((uint32_t)1U << 29U)
+#define IOCTRL18_DRV1_SCL3						((uint32_t)1U << 28U)
+#define IOCTRL18_DRV3_SDA3						((uint32_t)1U << 26U)
+#define IOCTRL18_DRV2_SDA3						((uint32_t)1U << 25U)
+#define IOCTRL18_DRV1_SDA3						((uint32_t)1U << 24U)
+#define IOCTRL18_DRV3_MSIOF0_RXD					((uint32_t)1U << 22U)
+#define IOCTRL18_DRV2_MSIOF0_RXD					((uint32_t)1U << 21U)
+#define IOCTRL18_DRV1_MSIOF0_RXD					((uint32_t)1U << 20U)
+#define IOCTRL18_DRV3_MSIOF0_TXD					((uint32_t)1U << 18U)
+#define IOCTRL18_DRV2_MSIOF0_TXD					((uint32_t)1U << 17U)
+#define IOCTRL18_DRV1_MSIOF0_TXD					((uint32_t)1U << 16U)
+#define IOCTRL18_DRV3_MSIOF0_SCK					((uint32_t)1U << 14U)
+#define IOCTRL18_DRV2_MSIOF0_SCK					((uint32_t)1U << 13U)
+#define IOCTRL18_DRV1_MSIOF0_SCK					((uint32_t)1U << 12U)
+#define IOCTRL18_DRV3_MSIOF0_SYNC					((uint32_t)1U << 10U)
+#define IOCTRL18_DRV2_MSIOF0_SYNC					((uint32_t)1U << 9U)
+#define IOCTRL18_DRV1_MSIOF0_SYNC					((uint32_t)1U << 8U)
+#define IOCTRL18_DRV3_MSIOF0_SS1					((uint32_t)1U << 6U)
+#define IOCTRL18_DRV2_MSIOF0_SS1					((uint32_t)1U << 5U)
+#define IOCTRL18_DRV1_MSIOF0_SS1					((uint32_t)1U << 4U)
+#define IOCTRL18_DRV3_MSIOF0_SS2					((uint32_t)1U << 2U)
+#define IOCTRL18_DRV2_MSIOF0_SS2					((uint32_t)1U << 1U)
+#define IOCTRL18_DRV1_MSIOF0_SS2					((uint32_t)1U << 0U)
+#define IOCTRL19_DRV3_FSO_CFE_0						((uint32_t)1U << 30U)
+#define IOCTRL19_DRV2_FSO_CFE_0						((uint32_t)1U << 29U)
+#define IOCTRL19_DRV1_FSO_CFE_0						((uint32_t)1U << 28U)
+#define IOCTRL19_DRV3_FSO_CFE_1						((uint32_t)1U << 26U)
+#define IOCTRL19_DRV2_FSO_CFE_1						((uint32_t)1U << 25U)
+#define IOCTRL19_DRV1_FSO_CFE_1						((uint32_t)1U << 24U)
+#define IOCTRL19_DRV3_FSO_TOE						((uint32_t)1U << 22U)
+#define IOCTRL19_DRV2_FSO_TOE						((uint32_t)1U << 21U)
+#define IOCTRL19_DRV1_FSO_TOE						((uint32_t)1U << 20U)
+
+#define IOCTRL30_POC_VI0_DATA5						((uint32_t)1U << 31U)
+#define IOCTRL30_POC_VI0_DATA4						((uint32_t)1U << 30U)
+#define IOCTRL30_POC_VI0_DATA3						((uint32_t)1U << 29U)
+#define IOCTRL30_POC_VI0_DATA2						((uint32_t)1U << 28U)
+#define IOCTRL30_POC_VI0_DATA1						((uint32_t)1U << 27U)
+#define IOCTRL30_POC_VI0_DATA0						((uint32_t)1U << 26U)
+#define IOCTRL30_POC_VI0_VSYNC_N					((uint32_t)1U << 25U)
+#define IOCTRL30_POC_VI0_HSYNC_N					((uint32_t)1U << 24U)
+#define IOCTRL30_POC_VI0_CLKENB						((uint32_t)1U << 23U)
+#define IOCTRL30_POC_VI0_CLK						((uint32_t)1U << 22U)
+#define IOCTRL30_POC_DU_EXODDF_DU_ODDF_DISP_CDE				((uint32_t)1U << 21U)
+#define IOCTRL30_POC_DU_EXVSYNC_DU_VSYNC				((uint32_t)1U << 20U)
+#define IOCTRL30_POC_DU_EXHSYNC_DU_HSYNC				((uint32_t)1U << 19U)
+#define IOCTRL30_POC_DU_DOTCLKOUT					((uint32_t)1U << 18U)
+#define IOCTRL30_POC_DU_DB7						((uint32_t)1U << 17U)
+#define IOCTRL30_POC_DU_DB6						((uint32_t)1U << 16U)
+#define IOCTRL30_POC_DU_DB5						((uint32_t)1U << 15U)
+#define IOCTRL30_POC_DU_DB4						((uint32_t)1U << 14U)
+#define IOCTRL30_POC_DU_DB3						((uint32_t)1U << 13U)
+#define IOCTRL30_POC_DU_DB2						((uint32_t)1U << 12U)
+#define IOCTRL30_POC_DU_DG7						((uint32_t)1U << 11U)
+#define IOCTRL30_POC_DU_DG6						((uint32_t)1U << 10U)
+#define IOCTRL30_POC_DU_DG5						((uint32_t)1U << 9U)
+#define IOCTRL30_POC_DU_DG4						((uint32_t)1U << 8U)
+#define IOCTRL30_POC_DU_DG3						((uint32_t)1U << 7U)
+#define IOCTRL30_POC_DU_DG2						((uint32_t)1U << 6U)
+#define IOCTRL30_POC_DU_DR7						((uint32_t)1U << 5U)
+#define IOCTRL30_POC_DU_DR6						((uint32_t)1U << 4U)
+#define IOCTRL30_POC_DU_DR5						((uint32_t)1U << 3U)
+#define IOCTRL30_POC_DU_DR4						((uint32_t)1U << 2U)
+#define IOCTRL30_POC_DU_DR3						((uint32_t)1U << 1U)
+#define IOCTRL30_POC_DU_DR2						((uint32_t)1U << 0U)
+
+#define IOCTRL31_POC_MSIOF0_SS2						((uint32_t)1U << 31U)
+#define IOCTRL31_POC_MSIOF0_SS1						((uint32_t)1U << 30U)
+#define IOCTRL31_POC_MSIOF0_SYNC					((uint32_t)1U << 29U)
+#define IOCTRL31_POC_MSIOF0_SCK						((uint32_t)1U << 28U)
+#define IOCTRL31_POC_MSIOF0_TXD						((uint32_t)1U << 27U)
+#define IOCTRL31_POC_MSIOF0_RXD						((uint32_t)1U << 26U)
+#define IOCTRL31_POC_MSIOF0_IRQ5					((uint32_t)1U << 25U)
+#define IOCTRL31_POC_MSIOF0_IRQ4					((uint32_t)1U << 24U)
+#define IOCTRL31_POC_VI1_FIELD						((uint32_t)1U << 23U)
+#define IOCTRL31_POC_VI1_DATA11						((uint32_t)1U << 22U)
+#define IOCTRL31_POC_VI1_DATA10						((uint32_t)1U << 21U)
+#define IOCTRL31_POC_VI1_DATA9						((uint32_t)1U << 20U)
+#define IOCTRL31_POC_VI1_DATA8						((uint32_t)1U << 19U)
+#define IOCTRL31_POC_VI1_DATA7						((uint32_t)1U << 18U)
+#define IOCTRL31_POC_VI1_DATA6						((uint32_t)1U << 17U)
+#define IOCTRL31_POC_VI1_DATA5						((uint32_t)1U << 16U)
+#define IOCTRL31_POC_VI1_DATA4						((uint32_t)1U << 15U)
+#define IOCTRL31_POC_VI1_DATA3						((uint32_t)1U << 14U)
+#define IOCTRL31_POC_VI1_DATA2						((uint32_t)1U << 13U)
+#define IOCTRL31_POC_VI1_DATA1						((uint32_t)1U << 12U)
+#define IOCTRL31_POC_VI1_DATA0						((uint32_t)1U << 11U)
+#define IOCTRL31_POC_VI1_VSYNC						((uint32_t)1U << 10U)
+#define IOCTRL31_POC_VI1_HSYNC						((uint32_t)1U << 9U)
+#define IOCTRL31_POC_VI1_CLKENB						((uint32_t)1U << 8U)
+#define IOCTRL31_POC_VI1_CLK						((uint32_t)1U << 7U)
+#define IOCTRL31_POC_VI0_FIELD						((uint32_t)1U << 6U)
+#define IOCTRL31_POC_VI0_DATA11						((uint32_t)1U << 5U)
+#define IOCTRL31_POC_VI0_DATA10						((uint32_t)1U << 4U)
+#define IOCTRL31_POC_VI0_DATA9						((uint32_t)1U << 3U)
+#define IOCTRL31_POC_VI0_DATA8						((uint32_t)1U << 2U)
+#define IOCTRL31_POC_VI0_DATA7						((uint32_t)1U << 1U)
+#define IOCTRL31_POC_VI0_DATA6						((uint32_t)1U << 0U)
+#define IOCTRL32_POC_FSO_TOE						((uint32_t)1U << 4U)
+#define IOCTRL32_POC_FSO_CFE_1						((uint32_t)1U << 3U)
+#define IOCTRL32_POC_FSO_CFE_0						((uint32_t)1U << 2U)
+#define IOCTRL32_POC_SDA3						((uint32_t)1U << 1U)
+#define IOCTRL32_POC_SCL3						((uint32_t)1U << 0U)
+#define IOCTRL40_SD0TDSEL1						((uint32_t)1U << 1U)
+#define IOCTRL40_SD0TDSEL0						((uint32_t)1U << 0U)
+
+#define	MOD_sel_canfd0_A		((uint32_t)0U << 11U)
+#define	MOD_sel_canfd0_B		((uint32_t)1U << 11U)
+#define	MOD_sel_gether_A		((uint32_t)0U << 10U)
+#define	MOD_sel_gether_B		((uint32_t)1U << 10U)
+#define	MOD_sel_hscif0_A		((uint32_t)0U << 9U)
+#define	MOD_sel_hscif0_B		((uint32_t)1U << 9U)
+#define	MOD_sel_pwm0_A			((uint32_t)0U << 8U)
+#define	MOD_sel_pwm0_B			((uint32_t)1U << 8U)
+#define	MOD_sel_pwm1_A			((uint32_t)0U << 7U)
+#define	MOD_sel_pwm1_B			((uint32_t)1U << 7U)
+#define	MOD_sel_pwm2_A			((uint32_t)0U << 6U)
+#define	MOD_sel_pwm2_B			((uint32_t)1U << 6U)
+#define	MOD_sel_pwm3_A			((uint32_t)0U << 5U)
+#define	MOD_sel_pwm3_B			((uint32_t)1U << 5U)
+#define	MOD_sel_pwm4_A			((uint32_t)0U << 4U)
+#define	MOD_sel_pwm4_B			((uint32_t)1U << 4U)
+#define	MOD_sel_rsp_A			((uint32_t)0U << 2U)
+#define	MOD_sel_rsp_B			((uint32_t)1U << 2U)
+#define	MOD_sel_scif1_A			((uint32_t)0U << 1U)
+#define	MOD_sel_scif1_B			((uint32_t)1U << 1U)
+#define	MOD_sel_tmu_A			((uint32_t)0U << 0U)
+#define	MOD_sel_tmu_B			((uint32_t)1U << 0U)
+
+
+static void pfc_reg_write(uint32_t addr, uint32_t data);
+
+static void pfc_reg_write(uint32_t addr, uint32_t data)
+{
+	mmio_write_32(PFC_PMMR, ~data);
+	mmio_write_32((uintptr_t)addr, data);
+}
+
+
+void pfc_init_v3h(void)
+{
+
+	/* initialize module select */
+	pfc_reg_write(PFC_MOD_SEL0, MOD_sel_canfd0_A
+				  | MOD_sel_gether_A
+				  | MOD_sel_hscif0_B
+				  | MOD_sel_pwm0_A
+				  | MOD_sel_pwm1_A
+				  | MOD_sel_pwm2_A
+				  | MOD_sel_pwm3_A
+				  | MOD_sel_pwm4_A
+				  | MOD_sel_rsp_A
+				  | MOD_sel_scif1_A
+				  | MOD_sel_tmu_A);
+
+	/* initialize peripheral function select */
+	pfc_reg_write(PFC_IPSR0, IPSR_28_FUNC(0)
+			       | IPSR_24_FUNC(0)
+			       | IPSR_20_FUNC(0)
+			       | IPSR_16_FUNC(0)
+			       | IPSR_12_FUNC(0)
+			       | IPSR_8_FUNC(0)
+			       | IPSR_4_FUNC(0)
+			       | IPSR_0_FUNC(0));
+	pfc_reg_write(PFC_IPSR1, IPSR_28_FUNC(0)
+			       | IPSR_24_FUNC(0)
+			       | IPSR_20_FUNC(0)
+			       | IPSR_16_FUNC(0)
+			       | IPSR_12_FUNC(0)
+			       | IPSR_8_FUNC(0)
+			       | IPSR_4_FUNC(0)
+			       | IPSR_0_FUNC(0));
+	pfc_reg_write(PFC_IPSR2, IPSR_28_FUNC(0)
+			       | IPSR_24_FUNC(0)
+			       | IPSR_20_FUNC(0)
+			       | IPSR_16_FUNC(0)
+			       | IPSR_12_FUNC(0)
+			       | IPSR_8_FUNC(0)
+			       | IPSR_4_FUNC(0)
+			       | IPSR_0_FUNC(0));
+	pfc_reg_write(PFC_IPSR3, IPSR_28_FUNC(0)
+			       | IPSR_24_FUNC(0)
+			       | IPSR_20_FUNC(0)
+			       | IPSR_16_FUNC(0)
+			       | IPSR_12_FUNC(0)
+			       | IPSR_8_FUNC(0)
+			       | IPSR_4_FUNC(0)
+			       | IPSR_0_FUNC(0));
+	pfc_reg_write(PFC_IPSR4, IPSR_28_FUNC(0)
+			       | IPSR_24_FUNC(0)
+			       | IPSR_20_FUNC(0)
+			       | IPSR_16_FUNC(0)
+			       | IPSR_12_FUNC(0)
+			       | IPSR_8_FUNC(0)
+			       | IPSR_4_FUNC(0)
+			       | IPSR_0_FUNC(0));
+	pfc_reg_write(PFC_IPSR5, IPSR_28_FUNC(4)
+			       | IPSR_24_FUNC(4)
+			       | IPSR_20_FUNC(0)
+			       | IPSR_16_FUNC(0)
+			       | IPSR_12_FUNC(0)
+			       | IPSR_8_FUNC(0)
+			       | IPSR_4_FUNC(0)
+			       | IPSR_0_FUNC(0));
+	pfc_reg_write(PFC_IPSR6, IPSR_28_FUNC(4)
+			       | IPSR_24_FUNC(4)
+			       | IPSR_20_FUNC(4)
+			       | IPSR_16_FUNC(4)
+			       | IPSR_12_FUNC(4)
+			       | IPSR_8_FUNC(4)
+			       | IPSR_4_FUNC(4)
+			       | IPSR_0_FUNC(4));
+	pfc_reg_write(PFC_IPSR7, IPSR_28_FUNC(0)
+			       | IPSR_24_FUNC(4)
+			       | IPSR_20_FUNC(4)
+			       | IPSR_16_FUNC(0)
+			       | IPSR_12_FUNC(0)
+			       | IPSR_8_FUNC(0)
+			       | IPSR_4_FUNC(0)
+			       | IPSR_0_FUNC(4));
+	pfc_reg_write(PFC_IPSR8, IPSR_28_FUNC(0)
+			       | IPSR_24_FUNC(0)
+			       | IPSR_20_FUNC(4)
+			       | IPSR_16_FUNC(0)
+			       | IPSR_12_FUNC(0)
+			       | IPSR_8_FUNC(0)
+			       | IPSR_4_FUNC(0)
+			       | IPSR_0_FUNC(0));
+	pfc_reg_write(PFC_IPSR9, IPSR_28_FUNC(0)
+			       | IPSR_24_FUNC(0)
+			       | IPSR_20_FUNC(0)
+			       | IPSR_16_FUNC(0)
+			       | IPSR_12_FUNC(0)
+			       | IPSR_8_FUNC(0)
+			       | IPSR_4_FUNC(0)
+			       | IPSR_0_FUNC(0));
+	pfc_reg_write(PFC_IPSR10, IPSR_28_FUNC(0)
+				| IPSR_24_FUNC(0)
+				| IPSR_20_FUNC(0)
+				| IPSR_16_FUNC(0)
+				| IPSR_12_FUNC(0)
+				| IPSR_8_FUNC(0)
+				| IPSR_4_FUNC(0)
+				| IPSR_0_FUNC(0));
+
+	/* initialize GPIO/perihperal function select */
+	pfc_reg_write(PFC_GPSR0, 0x00000000);
+
+	pfc_reg_write(PFC_GPSR1, GPSR1_DIGRF_CLKOUT
+			       | GPSR1_DIGRF_CLKIN
+			       | GPSR1_CANFD_CLK_A
+			       | GPSR1_CANFD0_RX_A
+			       | GPSR1_CANFD0_TX_A
+			       | GPSR1_AVB_LINK
+			       | GPSR1_AVB_PHY_INT
+			       | GPSR1_AVB_MDC
+			       | GPSR1_AVB_MDIO
+			       | GPSR1_AVB_TXCREFCLK
+			       | GPSR1_AVB_TD3
+			       | GPSR1_AVB_TD2
+			       | GPSR1_AVB_TD1
+			       | GPSR1_AVB_TD0
+			       | GPSR1_AVB_TXC
+			       | GPSR1_AVB_TX_CTL
+			       | GPSR1_AVB_RD3
+			       | GPSR1_AVB_RD2
+			       | GPSR1_AVB_RD1
+			       | GPSR1_AVB_RD0
+			       | GPSR1_AVB_RXC
+			       | GPSR1_AVB_RX_CTL
+			       | GPSR1_IRQ0);
+
+	pfc_reg_write(PFC_GPSR2, 0x00000000);
+
+	pfc_reg_write(PFC_GPSR3, GPSR3_VI1_FIELD
+			       | GPSR3_VI1_DATA11
+			       | GPSR3_VI1_DATA10
+			       | GPSR3_VI1_DATA9
+			       | GPSR3_VI1_DATA8
+			       | GPSR3_VI1_DATA7
+			       | GPSR3_VI1_DATA6
+			       | GPSR3_VI1_DATA5
+			       | GPSR3_VI1_DATA4
+			       | GPSR3_VI1_DATA3
+			       | GPSR3_VI1_DATA2);
+
+	pfc_reg_write(PFC_GPSR4, GPSR4_GETHER_LINK_A
+			       | GPSR4_GETHER_PHY_INT_A
+			       | GPSR4_GETHER_MDC_A
+			       | GPSR4_GETHER_MDIO_A
+			       | GPSR4_GETHER_TXCREFCLK_MEGA
+			       | GPSR4_GETHER_TXCREFCLK
+			       | GPSR4_GETHER_TD3
+			       | GPSR4_GETHER_TD2
+			       | GPSR4_GETHER_TD1
+			       | GPSR4_GETHER_TD0
+			       | GPSR4_GETHER_TXC
+			       | GPSR4_GETHER_TX_CTL
+			       | GPSR4_GETHER_RD3
+			       | GPSR4_GETHER_RD2
+			       | GPSR4_GETHER_RD1
+			       | GPSR4_GETHER_RD0
+			       | GPSR4_GETHER_RXC
+			       | GPSR4_GETHER_RX_CTL
+			       | GPSR4_SDA2
+			       | GPSR4_SCL2
+			       | GPSR4_SDA1
+			       | GPSR4_SCL1
+			       | GPSR4_SDA0
+			       | GPSR4_SCL0);
+
+	pfc_reg_write(PFC_GPSR5, GPSR5_QSPI1_SSL
+			       | GPSR5_QSPI1_IO3
+			       | GPSR5_QSPI1_IO2
+			       | GPSR5_QSPI1_MISO_IO1
+			       | GPSR5_QSPI1_MOSI_IO0
+			       | GPSR5_QSPI1_SPCLK
+			       | GPSR5_QSPI0_SSL
+			       | GPSR5_QSPI0_IO3
+			       | GPSR5_QSPI0_IO2
+			       | GPSR5_QSPI0_MISO_IO1
+			       | GPSR5_QSPI0_MOSI_IO0
+			       | GPSR5_QSPI0_SPCLK);
+
+	
+	
+	/* initialize POC Control */
+
+	pfc_reg_write(PFC_IOCTRL30, IOCTRL30_POC_VI0_DATA5
+			       | IOCTRL30_POC_VI0_DATA4
+			       | IOCTRL30_POC_VI0_DATA3
+			       | IOCTRL30_POC_VI0_DATA2
+			       | IOCTRL30_POC_VI0_DATA1
+			       | IOCTRL30_POC_VI0_DATA0
+			       | IOCTRL30_POC_VI0_VSYNC_N
+			       | IOCTRL30_POC_VI0_HSYNC_N
+			       | IOCTRL30_POC_VI0_CLKENB
+			       | IOCTRL30_POC_VI0_CLK
+			       | IOCTRL30_POC_DU_EXODDF_DU_ODDF_DISP_CDE
+			       | IOCTRL30_POC_DU_EXVSYNC_DU_VSYNC
+			       | IOCTRL30_POC_DU_EXHSYNC_DU_HSYNC
+			       | IOCTRL30_POC_DU_DOTCLKOUT
+			       | IOCTRL30_POC_DU_DB7
+			       | IOCTRL30_POC_DU_DB6
+			       | IOCTRL30_POC_DU_DB5
+			       | IOCTRL30_POC_DU_DB4
+			       | IOCTRL30_POC_DU_DB3
+			       | IOCTRL30_POC_DU_DB2
+			       | IOCTRL30_POC_DU_DG7
+			       | IOCTRL30_POC_DU_DG6
+			       | IOCTRL30_POC_DU_DG5
+			       | IOCTRL30_POC_DU_DG4
+			       | IOCTRL30_POC_DU_DG3
+			       | IOCTRL30_POC_DU_DG2
+			       | IOCTRL30_POC_DU_DR7
+			       | IOCTRL30_POC_DU_DR6
+			       | IOCTRL30_POC_DU_DR5
+			       | IOCTRL30_POC_DU_DR4
+			       | IOCTRL30_POC_DU_DR3
+			       | IOCTRL30_POC_DU_DR2);
+
+	pfc_reg_write(PFC_IOCTRL31, IOCTRL31_POC_MSIOF0_SS2
+			       | IOCTRL31_POC_MSIOF0_SS1
+			       | IOCTRL31_POC_MSIOF0_SYNC
+			       | IOCTRL31_POC_MSIOF0_SCK
+			       | IOCTRL31_POC_MSIOF0_TXD
+			       | IOCTRL31_POC_MSIOF0_RXD
+			       | IOCTRL31_POC_MSIOF0_IRQ5
+			       | IOCTRL31_POC_MSIOF0_IRQ4
+			       | IOCTRL31_POC_VI1_FIELD
+			       | IOCTRL31_POC_VI1_DATA11
+			       | IOCTRL31_POC_VI1_DATA10
+			       | IOCTRL31_POC_VI1_DATA9
+			       | IOCTRL31_POC_VI1_DATA8
+			       | IOCTRL31_POC_VI1_DATA7
+			       | IOCTRL31_POC_VI1_DATA6
+			       | IOCTRL31_POC_VI1_DATA5
+			       | IOCTRL31_POC_VI1_DATA4
+			       | IOCTRL31_POC_VI1_DATA3
+			       | IOCTRL31_POC_VI1_DATA2
+			       | IOCTRL31_POC_VI1_DATA1
+			       | IOCTRL31_POC_VI1_DATA0
+			       | IOCTRL31_POC_VI1_VSYNC
+			       | IOCTRL31_POC_VI1_HSYNC
+			       | IOCTRL31_POC_VI1_CLKENB
+			       | IOCTRL31_POC_VI1_CLK
+			       | IOCTRL31_POC_VI0_FIELD
+			       | IOCTRL31_POC_VI0_DATA11
+			       | IOCTRL31_POC_VI0_DATA10
+			       | IOCTRL31_POC_VI0_DATA9
+			       | IOCTRL31_POC_VI0_DATA8
+			       | IOCTRL31_POC_VI0_DATA7
+			       | IOCTRL31_POC_VI0_DATA6
+			       | IOCTRL31_POC_VI0_DATA6);
+
+	pfc_reg_write(PFC_IOCTRL32, IOCTRL32_POC_FSO_TOE
+			       | IOCTRL32_POC_FSO_CFE_1
+			       | IOCTRL32_POC_FSO_CFE_0
+			       | IOCTRL32_POC_SDA3
+			       | IOCTRL32_POC_SCL3);
+
+	pfc_reg_write(PFC_IOCTRL33,0x00000000);
+
+	pfc_reg_write(PFC_IOCTRL40,0x00000000);
+	
+
+	/* initialize LSI pin pull-up/down control */
+	pfc_reg_write(PFC_PUD0,0x80000000U);
+	pfc_reg_write(PFC_PUD1,0x1B01C77CU);
+	pfc_reg_write(PFC_PUD2,0x00000000U);
+	pfc_reg_write(PFC_PUD3,0x0F800008U);
+	pfc_reg_write(PFC_PUD4,0x03807C00U);
+
+	/* initialize LSI pin pull-enable register */
+	pfc_reg_write(PFC_PUEN0,0x0035F721U);
+	pfc_reg_write(PFC_PUEN1,0x7E01C700U);
+	pfc_reg_write(PFC_PUEN2,0x003F0000U);
+	pfc_reg_write(PFC_PUEN3,0x07000000U);
+	pfc_reg_write(PFC_PUEN4,0x0381E800U);
+	
+	/* initialize positive/negative logic select */
+	mmio_write_32(GPIO_POSNEG0, 0x00000000U);
+	mmio_write_32(GPIO_POSNEG1, 0x00000000U);
+	mmio_write_32(GPIO_POSNEG2, 0x00000000U);
+	mmio_write_32(GPIO_POSNEG3, 0x00000000U);
+	mmio_write_32(GPIO_POSNEG4, 0x00000000U);
+	mmio_write_32(GPIO_POSNEG5, 0x00000000U);
+
+	/* initialize general IO/interrupt switching */
+	mmio_write_32(GPIO_IOINTSEL0, 0x00000000U);
+	mmio_write_32(GPIO_IOINTSEL1, 0x00000000U);
+	mmio_write_32(GPIO_IOINTSEL2, 0x00000000U);
+	mmio_write_32(GPIO_IOINTSEL3, 0x00000000U);
+	mmio_write_32(GPIO_IOINTSEL4, 0x00000000U);
+	mmio_write_32(GPIO_IOINTSEL5, 0x00000000U);
+
+	/* initialize general output register */
+	mmio_write_32(GPIO_OUTDT1, 0x00010000U);
+	mmio_write_32(GPIO_OUTDT4, 0x00400000U);
+	mmio_write_32(GPIO_OUTDT5, 0x00007000U);
+
+	/* initialize general input/output switching */
+	mmio_write_32(GPIO_INOUTSEL0, 0x00000000U);
+	mmio_write_32(GPIO_INOUTSEL1, 0x00010000U);
+	mmio_write_32(GPIO_INOUTSEL2, 0x00000000U);
+	mmio_write_32(GPIO_INOUTSEL3, 0x00000000U);
+	mmio_write_32(GPIO_INOUTSEL4, 0x00400000U);
+	mmio_write_32(GPIO_INOUTSEL5, 0x00007000U);
+}
diff --git a/plat/renesas/rcar/pfc/V3H/pfc_init_v3h.h b/plat/renesas/rcar/pfc/V3H/pfc_init_v3h.h
new file mode 100644
index 0000000..6ecedb5
--- /dev/null
+++ b/plat/renesas/rcar/pfc/V3H/pfc_init_v3h.h
@@ -0,0 +1,37 @@
+/*
+ * Copyright (c) 2015-2017, Renesas Electronics Corporation
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are met:
+ *
+ *   - Redistributions of source code must retain the above copyright notice,
+ *     this list of conditions and the following disclaimer.
+ *
+ *   - Redistributions in binary form must reproduce the above copyright
+ *     notice, this list of conditions and the following disclaimer in the
+ *     documentation and/or other materials provided with the distribution.
+ *
+ *   - Neither the name of Renesas nor the names of its contributors may be
+ *     used to endorse or promote products derived from this software without
+ *     specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
+ * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#ifndef PFC_INIT_V3H_H__
+#define PFC_INIT_V3H_H__
+
+void pfc_init_v3h(void);
+
+#endif	/* PFC_INIT_V3H_H__ */
diff --git a/plat/renesas/rcar/pfc/pfc.mk b/plat/renesas/rcar/pfc/pfc.mk
index d539dd2..b74f33b 100644
--- a/plat/renesas/rcar/pfc/pfc.mk
+++ b/plat/renesas/rcar/pfc/pfc.mk
@@ -10,6 +10,7 @@ ifeq (${RCAR_LSI},${RCAR_AUTO})
     BL2_SOURCES += plat/renesas/rcar/pfc/M3/pfc_init_m3.c
     BL2_SOURCES += plat/renesas/rcar/pfc/M3N/pfc_init_m3n.c
     BL2_SOURCES += plat/renesas/rcar/pfc/V3M/pfc_init_v3m.c
+    BL2_SOURCES += plat/renesas/rcar/pfc/V3H/pfc_init_v3h.c
 
 else ifdef RCAR_LSI_CUT_COMPAT
   ifeq (${RCAR_LSI},${RCAR_H3})
@@ -32,6 +33,9 @@ else ifdef RCAR_LSI_CUT_COMPAT
   ifeq (${RCAR_LSI},${RCAR_V3M})
     BL2_SOURCES += plat/renesas/rcar/pfc/V3M/pfc_init_v3m.c
   endif
+  ifeq (${RCAR_LSI},${RCAR_V3H})
+    BL2_SOURCES += plat/renesas/rcar/pfc/V3H/pfc_init_v3h.c
+  endif
 else
   ifeq (${RCAR_LSI},${RCAR_H3})
     ifeq (${LSI_CUT},10)
@@ -58,6 +62,9 @@ else
   ifeq (${RCAR_LSI},${RCAR_V3M})
     BL2_SOURCES += plat/renesas/rcar/pfc/V3M/pfc_init_v3m.c
   endif
+  ifeq (${RCAR_LSI},${RCAR_V3H})
+    BL2_SOURCES += plat/renesas/rcar/pfc/V3H/pfc_init_v3h.c
+  endif
 endif
 
 BL2_SOURCES += plat/renesas/rcar/pfc/pfc_init.c
diff --git a/plat/renesas/rcar/pfc/pfc_init.c b/plat/renesas/rcar/pfc/pfc_init.c
index 75fecd6..12f46e3 100644
--- a/plat/renesas/rcar/pfc/pfc_init.c
+++ b/plat/renesas/rcar/pfc/pfc_init.c
@@ -15,6 +15,7 @@
   #include "M3/pfc_init_m3.h"
   #include "M3N/pfc_init_m3n.h"
   #include "V3M/pfc_init_v3m.h"
+  #include "V3H/pfc_init_v3h.h"
 #endif
 #if (RCAR_LSI == RCAR_H3) || (RCAR_LSI == RCAR_H3N)	/* H3 */
   #include "H3/pfc_init_h3_v1.h"
@@ -32,6 +33,9 @@
 #if RCAR_LSI == RCAR_V3M	/* V3M */
   #include "V3M/pfc_init_v3m.h"
 #endif
+#if RCAR_LSI == RCAR_V3H	/* V3H */
+  #include "V3H/pfc_init_v3h.h"
+#endif
 
  /* Product Register */
 #define PRR			(0xFFF00044U)
@@ -41,6 +45,7 @@
 #define PRR_PRODUCT_M3		(0x00005200U)           /* R-Car M3 */
 #define PRR_PRODUCT_V3M		(0x00005400U)           /* R-Car V3M */
 #define PRR_PRODUCT_M3N		(0x00005500U)           /* R-Car M3N */
+#define PRR_PRODUCT_V3H		(0x00005600U)           /* R-Car V3H */
 #define PRR_PRODUCT_E3		(0x00005700U)		/* R-Car E3 */
 #define PRR_PRODUCT_10		(0x00U)
 #define PRR_PRODUCT_11		(0x01U)
@@ -86,6 +91,9 @@ void pfc_init(void)
 	case RCAR_PRODUCT_V3M:
 		pfc_init_v3m();
 		break;
+	case RCAR_PRODUCT_V3H:
+		pfc_init_v3h();
+		break;
 	default:
 		PRR_PRODUCT_ERR(reg);
 		break;
@@ -138,6 +146,13 @@ void pfc_init(void)
 		pfc_init_v3m();
 #endif
 		break;
+	case PRR_PRODUCT_V3H:
+#if RCAR_LSI != RCAR_V3H
+		PRR_PRODUCT_ERR(reg);
+#else
+		pfc_init_v3h();
+#endif
+		break;
 	default:
 		PRR_PRODUCT_ERR(reg);
 		break;
@@ -186,6 +201,11 @@ void pfc_init(void)
 		PRR_PRODUCT_ERR(reg);
 
 	pfc_init_v3m();
+ #elif RCAR_LSI == RCAR_V3H	/* V3H */
+	if ((PRR_PRODUCT_V3H) != (reg & PRR_PRODUCT_MASK))
+		PRR_PRODUCT_ERR(reg);
+
+	pfc_init_v3h();
  #else
   #error "Don't have PFC initialize routine(unknown)."
  #endif
diff --git a/plat/renesas/rcar/platform.mk b/plat/renesas/rcar/platform.mk
index e6eb04b..d0ec7cd 100644
--- a/plat/renesas/rcar/platform.mk
+++ b/plat/renesas/rcar/platform.mk
@@ -98,6 +98,7 @@ RCAR_M3N:=2
 RCAR_E3:=3
 RCAR_H3N:=4
 RCAR_V3M:=5
+RCAR_V3H:=6
 RCAR_AUTO:=99
 $(eval $(call add_define,RCAR_H3))
 $(eval $(call add_define,RCAR_M3))
@@ -105,6 +106,7 @@ $(eval $(call add_define,RCAR_M3N))
 $(eval $(call add_define,RCAR_E3))
 $(eval $(call add_define,RCAR_H3N))
 $(eval $(call add_define,RCAR_V3M))
+$(eval $(call add_define,RCAR_V3H))
 $(eval $(call add_define,RCAR_AUTO))
 RCAR_CUT_10:=0
 RCAR_CUT_11:=1
@@ -229,6 +231,22 @@ else
       endif
       $(eval $(call add_define,RCAR_LSI_CUT))
     endif
+  else ifeq (${LSI},V3H)
+    RCAR_LSI:=${RCAR_V3H}
+    ifndef LSI_CUT
+      # enable compatible function.
+      RCAR_LSI_CUT_COMPAT := 1
+      $(eval $(call add_define,RCAR_LSI_CUT_COMPAT))
+    else
+      # disable compatible function.
+      ifeq (${LSI_CUT},10)
+        RCAR_LSI_CUT:=0
+      endif
+      ifeq (${LSI_CUT},20)
+        RCAR_LSI_CUT:=10
+      endif
+      $(eval $(call add_define,RCAR_LSI_CUT))
+    endif
   else
     $(error "Error: ${LSI} is not supported.")
   endif
diff --git a/plat/renesas/rcar/qos/V3H/qos_init_v3h_v10.c b/plat/renesas/rcar/qos/V3H/qos_init_v3h_v10.c
new file mode 100644
index 0000000..af56e33
--- /dev/null
+++ b/plat/renesas/rcar/qos/V3H/qos_init_v3h_v10.c
@@ -0,0 +1,651 @@
+/*
+ * Copyright (c) 2015-2017, Renesas Electronics Corporation
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are met:
+ *
+ *   - Redistributions of source code must retain the above copyright notice,
+ *     this list of conditions and the following disclaimer.
+ *
+ *   - Redistributions in binary form must reproduce the above copyright
+ *     notice, this list of conditions and the following disclaimer in the
+ *     documentation and/or other materials provided with the distribution.
+ *
+ *   - Neither the name of Renesas nor the names of its contributors may be
+ *     used to endorse or promote products derived from this software without
+ *     specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
+ * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#include <stdint.h>
+#include <debug.h>
+#include "qos_init_v3h_v10.h"
+
+
+#define	RCAR_QOS_VERSION		"rev.0.14"
+
+#define	RCAR_QOS_NONE			(3U)
+#define	RCAR_QOS_TYPE_DEFAULT		(0U)
+
+#define	RCAR_DRAM_SPLIT_LINEAR		(0U)
+#define	RCAR_DRAM_SPLIT_4CH		(1U)
+#define	RCAR_DRAM_SPLIT_2CH		(2U)
+#define	RCAR_DRAM_SPLIT_AUTO		(3U)
+
+#define	RST_BASE			(0xE6160000U)
+#define	RST_MODEMR			(RST_BASE + 0x0060U)
+
+#define	DBSC_BASE			(0xE6790000U)
+#define	DBSC_DBDFIPMSTRCNF		(DBSC_BASE + 0x0520U)
+#define	DBSC_AXARB			(DBSC_BASE + 0x0800U)
+#define DBSC_DBCAM0CNF0			(DBSC_BASE + 0x0900U)
+#define DBSC_DBCAM0CNF1			(DBSC_BASE + 0x0904U)
+#define DBSC_DBCAM0CNF2			(DBSC_BASE + 0x0908U)
+#define DBSC_DBCAM0CNF3			(DBSC_BASE + 0x090CU)
+#define DBSC_DBCAMDIS			(DBSC_BASE + 0x09fCU)
+#define DBSC_DBSCHCNT0			(DBSC_BASE + 0x1000U)
+#define DBSC_DBSCHCNT1			(DBSC_BASE + 0x1004U)
+#define DBSC_DBSCHSZ0			(DBSC_BASE + 0x1010U)
+#define DBSC_DBSCHRW0			(DBSC_BASE + 0x1020U)
+#define DBSC_DBSCHRW1			(DBSC_BASE + 0x1024U)
+#define DBSC_DBSCHQOS_0_0		(DBSC_BASE + 0x1030U)
+#define DBSC_DBSCHQOS_0_1		(DBSC_BASE + 0x1034U)
+#define DBSC_DBSCHQOS_0_2		(DBSC_BASE + 0x1038U)
+#define DBSC_DBSCHQOS_0_3		(DBSC_BASE + 0x103CU)
+#define DBSC_DBSCHQOS_1_0		(DBSC_BASE + 0x1040U)
+#define DBSC_DBSCHQOS_1_1		(DBSC_BASE + 0x1044U)
+#define DBSC_DBSCHQOS_1_2		(DBSC_BASE + 0x1048U)
+#define DBSC_DBSCHQOS_1_3		(DBSC_BASE + 0x104CU)
+#define DBSC_DBSCHQOS_2_0		(DBSC_BASE + 0x1050U)
+#define DBSC_DBSCHQOS_2_1		(DBSC_BASE + 0x1054U)
+#define DBSC_DBSCHQOS_2_2		(DBSC_BASE + 0x1058U)
+#define DBSC_DBSCHQOS_2_3		(DBSC_BASE + 0x105CU)
+#define DBSC_DBSCHQOS_3_0		(DBSC_BASE + 0x1060U)
+#define DBSC_DBSCHQOS_3_1		(DBSC_BASE + 0x1064U)
+#define DBSC_DBSCHQOS_3_2		(DBSC_BASE + 0x1068U)
+#define DBSC_DBSCHQOS_3_3		(DBSC_BASE + 0x106CU)
+#define DBSC_DBSCHQOS_4_0		(DBSC_BASE + 0x1070U)
+#define DBSC_DBSCHQOS_4_1		(DBSC_BASE + 0x1074U)
+#define DBSC_DBSCHQOS_4_2		(DBSC_BASE + 0x1078U)
+#define DBSC_DBSCHQOS_4_3		(DBSC_BASE + 0x107CU)
+#define DBSC_DBSCHQOS_5_0		(DBSC_BASE + 0x1080U)
+#define DBSC_DBSCHQOS_5_1		(DBSC_BASE + 0x1084U)
+#define DBSC_DBSCHQOS_5_2		(DBSC_BASE + 0x1088U)
+#define DBSC_DBSCHQOS_5_3		(DBSC_BASE + 0x108CU)
+#define DBSC_DBSCHQOS_6_0		(DBSC_BASE + 0x1090U)
+#define DBSC_DBSCHQOS_6_1		(DBSC_BASE + 0x1094U)
+#define DBSC_DBSCHQOS_6_2		(DBSC_BASE + 0x1098U)
+#define DBSC_DBSCHQOS_6_3		(DBSC_BASE + 0x109CU)
+#define DBSC_DBSCHQOS_7_0		(DBSC_BASE + 0x10A0U)
+#define DBSC_DBSCHQOS_7_1		(DBSC_BASE + 0x10A4U)
+#define DBSC_DBSCHQOS_7_2		(DBSC_BASE + 0x10A8U)
+#define DBSC_DBSCHQOS_7_3		(DBSC_BASE + 0x10ACU)
+#define DBSC_DBSCHQOS_8_0		(DBSC_BASE + 0x10B0U)
+#define DBSC_DBSCHQOS_8_1		(DBSC_BASE + 0x10B4U)
+#define DBSC_DBSCHQOS_8_2		(DBSC_BASE + 0x10B8U)
+#define DBSC_DBSCHQOS_8_3		(DBSC_BASE + 0x10BCU)
+#define DBSC_DBSCHQOS_9_0		(DBSC_BASE + 0x10C0U)
+#define DBSC_DBSCHQOS_9_1		(DBSC_BASE + 0x10C4U)
+#define DBSC_DBSCHQOS_9_2		(DBSC_BASE + 0x10C8U)
+#define DBSC_DBSCHQOS_9_3		(DBSC_BASE + 0x10CCU)
+#define DBSC_DBSCHQOS_10_0		(DBSC_BASE + 0x10D0U)
+#define DBSC_DBSCHQOS_10_1		(DBSC_BASE + 0x10D4U)
+#define DBSC_DBSCHQOS_10_2		(DBSC_BASE + 0x10D8U)
+#define DBSC_DBSCHQOS_10_3		(DBSC_BASE + 0x10DCU)
+#define DBSC_DBSCHQOS_11_0		(DBSC_BASE + 0x10E0U)
+#define DBSC_DBSCHQOS_11_1		(DBSC_BASE + 0x10E4U)
+#define DBSC_DBSCHQOS_11_2		(DBSC_BASE + 0x10E8U)
+#define DBSC_DBSCHQOS_11_3		(DBSC_BASE + 0x10ECU)
+#define DBSC_DBSCHQOS_12_0		(DBSC_BASE + 0x10F0U)
+#define DBSC_DBSCHQOS_12_1		(DBSC_BASE + 0x10F4U)
+#define DBSC_DBSCHQOS_12_2		(DBSC_BASE + 0x10F8U)
+#define DBSC_DBSCHQOS_12_3		(DBSC_BASE + 0x10FCU)
+#define DBSC_DBSCHQOS_13_0		(DBSC_BASE + 0x1100U)
+#define DBSC_DBSCHQOS_13_1		(DBSC_BASE + 0x1104U)
+#define DBSC_DBSCHQOS_13_2		(DBSC_BASE + 0x1108U)
+#define DBSC_DBSCHQOS_13_3		(DBSC_BASE + 0x110CU)
+#define DBSC_DBSCHQOS_14_0		(DBSC_BASE + 0x1110U)
+#define DBSC_DBSCHQOS_14_1		(DBSC_BASE + 0x1114U)
+#define DBSC_DBSCHQOS_14_2		(DBSC_BASE + 0x1118U)
+#define DBSC_DBSCHQOS_14_3		(DBSC_BASE + 0x111CU)
+#define DBSC_DBSCHQOS_15_0		(DBSC_BASE + 0x1120U)
+#define DBSC_DBSCHQOS_15_1		(DBSC_BASE + 0x1124U)
+#define DBSC_DBSCHQOS_15_2		(DBSC_BASE + 0x1128U)
+#define DBSC_DBSCHQOS_15_3		(DBSC_BASE + 0x112CU)
+#define DBSC_SCFCTST2			(DBSC_BASE + 0x170CU)
+
+#define	AXI_BASE			(0xE6784000U)
+#define	AXI_ADSPLCR0			(AXI_BASE + 0x0008U)
+#define	AXI_ADSPLCR1			(AXI_BASE + 0x000CU)
+#define	AXI_ADSPLCR2			(AXI_BASE + 0x0010U)
+#define	AXI_ADSPLCR3			(AXI_BASE + 0x0014U)
+#define	ADSPLCR0_ADRMODE_DEFAULT	((uint32_t)0U << 31U)
+#define	ADSPLCR0_ADRMODE_GEN2		((uint32_t)1U << 31U)
+#define	ADSPLCR0_SPLITSEL(x)		((uint32_t)(x) << 16U)
+#define	ADSPLCR0_AREA(x)		((uint32_t)(x) <<  8U)
+#define	ADSPLCR0_SWP			(0x0CU)
+
+#define	MSTAT_BASE			(0xE67E0000U)
+#define	MSTAT_FIX_QOS_BANK0		(MSTAT_BASE + 0x0000U)
+#define	MSTAT_FIX_QOS_BANK1		(MSTAT_BASE + 0x1000U)
+#define	MSTAT_BE_QOS_BANK0		(MSTAT_BASE + 0x2000U)
+#define	MSTAT_BE_QOS_BANK1		(MSTAT_BASE + 0x3000U)
+#define	MSTAT_SL_INIT			(MSTAT_BASE + 0x8000U)
+#define	MSTAT_REF_ARS			(MSTAT_BASE + 0x8004U)
+#define	MSTAT_STATQC			(MSTAT_BASE + 0x8008U)
+
+#define	RALLOC_BASE			(0xE67F0000U)
+#define	RALLOC_RAS			(RALLOC_BASE + 0x0000U)
+#define	RALLOC_FIXTH			(RALLOC_BASE + 0x0004U)
+#define	RALLOC_RAEN			(RALLOC_BASE + 0x0018U)
+#define	RALLOC_REGGD			(RALLOC_BASE + 0x0020U)
+#define	RALLOC_DANN			(RALLOC_BASE + 0x0030U)
+#define	RALLOC_DANT			(RALLOC_BASE + 0x0038U)
+#define	RALLOC_EC			(RALLOC_BASE + 0x003CU)
+#define	RALLOC_EMS			(RALLOC_BASE + 0x0040U)
+#define	RALLOC_FSS			(RALLOC_BASE + 0x0048U)
+#define	RALLOC_INSFC			(RALLOC_BASE + 0x0050U)
+#define	RALLOC_BERR			(RALLOC_BASE + 0x0054U)
+#define	RALLOC_EARLYR			(RALLOC_BASE + 0x0060U)
+#define	RALLOC_RACNT0			(RALLOC_BASE + 0x0080U)
+#define	RALLOC_STATGEN0			(RALLOC_BASE + 0x0088U)
+
+#define ACTIVE_OR			(0xFD812030U)
+
+#define ARRAY_SIZE(a)	(sizeof(a) / sizeof((a)[0]))
+
+static inline void io_write_32(uintptr_t addr, uint32_t value)
+{
+	*(volatile uint32_t*)addr = value;
+}
+
+static inline void io_write_64(uintptr_t addr, uint64_t value)
+{
+	*(volatile uint64_t*)addr = value;
+}
+
+typedef struct {
+	uintptr_t addr;
+	uint64_t value;
+} mstat_slot_t;
+
+
+#if RCAR_QOS_TYPE  == RCAR_QOS_TYPE_DEFAULT
+static const mstat_slot_t mstat_fix[] = {
+	{0x0000U, 0x0000000000000000U},
+	{0x0008U, 0x0000000000000000U},
+	{0x0010U, 0x0000000000000000U},
+	{0x0018U, 0x0000000000000000U},
+	{0x0020U, 0x0000000000000000U},
+	{0x0028U, 0x0000000000000000U},
+	{0x0030U, 0x001004030000FFFFU},
+	{0x0038U, 0x001008060000FFFFU},
+	{0x0040U, 0x001424120000FFFFU},
+	{0x0048U, 0x0000000000000000U},
+	{0x0050U, 0x001404010000FFFFU},
+	{0x0058U, 0x0014100F0000FFFFU},
+	{0x0060U, 0x00140C0C0000FFFFU},
+	{0x0068U, 0x0000000000000000U},
+	{0x0070U, 0x001404010000FFFFU},
+	{0x0078U, 0x001008060000FFFFU},
+	{0x0080U, 0x0000000000000000U},
+	{0x0088U, 0x001424120000FFFFU},
+	{0x0090U, 0x00140C0C0000FFFFU},
+	{0x0098U, 0x0000000000000000U},
+	{0x00A0U, 0x000C04020000FFFFU},
+	{0x00A8U, 0x000C04010000FFFFU},
+	{0x00B0U, 0x000C04010000FFFFU},
+	{0x00B8U, 0x0000000000000000U},
+	{0x00C0U, 0x000C04020000FFFFU},
+	{0x00C8U, 0x000C04010000FFFFU},
+	{0x00D0U, 0x000C04010000FFFFU},
+	{0x00D8U, 0x001020080000FFFFU},
+	{0x00E0U, 0x001008080000FFFFU},
+	{0x00E8U, 0x0000000000000000U},
+	{0x00F0U, 0x001020080000FFFFU},
+	{0x00F8U, 0x000C08060000FFFFU},
+	{0x0100U, 0x0000000000000000U},
+	{0x0108U, 0x0000000000000000U},
+	{0x0110U, 0x001008080000FFFFU},
+	{0x0118U, 0x000C100F0000FFFFU},
+	{0x0120U, 0x000C100F0000FFFFU},
+	{0x0128U, 0x0000000000000000U},
+	{0x0130U, 0x0000000000000000U},
+	{0x0138U, 0x00100C0A0000FFFFU},
+	{0x0140U, 0x00100C0A0000FFFFU},
+	{0x0148U, 0x0000000000000000U},
+	{0x0150U, 0x00100C0C0000FFFFU},
+	{0x0158U, 0x00100C0C0000FFFFU},
+	{0x0160U, 0x00100C0A0000FFFFU},
+	{0x0168U, 0x00100C0A0000FFFFU},
+	{0x0170U, 0x0000000000000000U},
+	{0x0178U, 0x001008050000FFFFU},
+	{0x0180U, 0x001008050000FFFFU},
+	{0x0188U, 0x0000000000000000U},
+	{0x0190U, 0x00102C2A0000FFFFU},
+	{0x0198U, 0x00102C2A0000FFFFU},
+	{0x01A0U, 0x00100C0A0000FFFFU},
+	{0x01A8U, 0x00100C0A0000FFFFU},
+	{0x01B0U, 0x0000000000000000U},
+	{0x01B8U, 0x0000000000000000U},
+	{0x01C0U, 0x0000000000000000U},
+	{0x01C8U, 0x0000000000000000U},
+	{0x01D0U, 0x0000000000000000U},
+	{0x01D8U, 0x0000000000000000U},
+	{0x01E0U, 0x0000000000000000U},
+	{0x01E8U, 0x0000000000000000U},
+	{0x01F0U, 0x0000000000000000U},
+	{0x01F8U, 0x0000000000000000U},
+	{0x0200U, 0x0000000000000000U},
+	{0x0208U, 0x0000000000000000U},
+	{0x0210U, 0x0000000000000000U},
+	{0x0218U, 0x0000000000000000U},
+	{0x0220U, 0x0000000000000000U},
+	{0x0228U, 0x0000000000000000U},
+	{0x0230U, 0x0000000000000000U},
+	{0x0238U, 0x0000000000000000U},
+	{0x0240U, 0x0000000000000000U},
+	{0x0248U, 0x0000000000000000U},
+	{0x0250U, 0x0000000000000000U},
+	{0x0258U, 0x0000000000000000U},
+	{0x0260U, 0x0000000000000000U},
+	{0x0268U, 0x001408010000FFFFU},
+	{0x0270U, 0x001404010000FFFFU},
+	{0x0278U, 0x0000000000000000U},
+	{0x0280U, 0x0000000000000000U},
+	{0x0288U, 0x0000000000000000U},
+	{0x0290U, 0x001408010000FFFFU},
+	{0x0298U, 0x001404010000FFFFU},
+	{0x02A0U, 0x000C04010000FFFFU},
+	{0x02A8U, 0x000C04010000FFFFU},
+	{0x02B0U, 0x001404010000FFFFU},
+	{0x02B8U, 0x0000000000000000U},
+	{0x02C0U, 0x0000000000000000U},
+	{0x02C8U, 0x0000000000000000U},
+	{0x02D0U, 0x000C04010000FFFFU},
+	{0x02D8U, 0x000C04010000FFFFU},
+	{0x02E0U, 0x001404010000FFFFU},
+	{0x02E8U, 0x0000000000000000U},
+	{0x02F0U, 0x0000000000000000U},
+	{0x02F8U, 0x0000000000000000U},
+	{0x0300U, 0x0000000000000000U},
+	{0x0308U, 0x0000000000000000U},
+	{0x0310U, 0x0000000000000000U},
+	{0x0318U, 0x0000000000000000U},
+	{0x0320U, 0x0000000000000000U},
+	{0x0328U, 0x0000000000000000U},
+	{0x0330U, 0x0000000000000000U},
+	{0x0338U, 0x0000000000000000U},
+	{0x0340U, 0x0000000000000000U},
+	{0x0348U, 0x0000000000000000U},
+	{0x0350U, 0x0000000000000000U},
+	{0x0358U, 0x0000000000000000U},
+	{0x0360U, 0x0000000000000000U},
+	{0x0368U, 0x0000000000000000U},
+};
+
+static const mstat_slot_t mstat_be[] = {
+	{0x0000U, 0x001200100C89C401U},
+	{0x0008U, 0x001200100C89C401U},
+	{0x0010U, 0x001200100C89C401U},
+	{0x0018U, 0x001200100C89C401U},
+	{0x0020U, 0x0000000000000000U},
+	{0x0028U, 0x001200100C80FC01U},
+	{0x0030U, 0x0000000000000000U},
+	{0x0038U, 0x0000000000000000U},
+	{0x0040U, 0x0000000000000000U},
+	{0x0048U, 0x0000000000000000U},
+	{0x0050U, 0x0000000000000000U},
+	{0x0058U, 0x0000000000000000U},
+	{0x0060U, 0x0000000000000000U},
+	{0x0068U, 0x0000000000000000U},
+	{0x0070U, 0x0000000000000000U},
+	{0x0078U, 0x0000000000000000U},
+	{0x0080U, 0x0000000000000000U},
+	{0x0088U, 0x0000000000000000U},
+	{0x0090U, 0x0000000000000000U},
+	{0x0098U, 0x0000000000000000U},
+	{0x00A0U, 0x0000000000000000U},
+	{0x00A8U, 0x0000000000000000U},
+	{0x00B0U, 0x0000000000000000U},
+	{0x00B8U, 0x0000000000000000U},
+	{0x00C0U, 0x0000000000000000U},
+	{0x00C8U, 0x0000000000000000U},
+	{0x00D0U, 0x0000000000000000U},
+	{0x00D8U, 0x0000000000000000U},
+	{0x00E0U, 0x0000000000000000U},
+	{0x00E8U, 0x0000000000000000U},
+	{0x00F0U, 0x0000000000000000U},
+	{0x00F8U, 0x0000000000000000U},
+	{0x0100U, 0x0000000000000000U},
+	{0x0108U, 0x0000000000000000U},
+	{0x0110U, 0x0000000000000000U},
+	{0x0118U, 0x0000000000000000U},
+	{0x0120U, 0x0000000000000000U},
+	{0x0128U, 0x0000000000000000U},
+	{0x0130U, 0x0000000000000000U},
+	{0x0138U, 0x0000000000000000U},
+	{0x0140U, 0x0000000000000000U},
+	{0x0148U, 0x0000000000000000U},
+	{0x0150U, 0x0000000000000000U},
+	{0x0158U, 0x0000000000000000U},
+	{0x0160U, 0x0000000000000000U},
+	{0x0168U, 0x0000000000000000U},
+	{0x0170U, 0x0000000000000000U},
+	{0x0178U, 0x0000000000000000U},
+	{0x0180U, 0x0000000000000000U},
+	{0x0188U, 0x0000000000000000U},
+	{0x0190U, 0x0000000000000000U},
+	{0x0198U, 0x0000000000000000U},
+	{0x01A0U, 0x0000000000000000U},
+	{0x01A8U, 0x0000000000000000U},
+	{0x01B0U, 0x0000000000000000U},
+	{0x01B8U, 0x0000000000000000U},
+	{0x01C0U, 0x001100800C8FFC01U},
+	{0x01C8U, 0x001100800C8FFC01U},
+	{0x01D0U, 0x001100800C8FFC01U},
+	{0x01D8U, 0x001100800C8FFC01U},
+	{0x01E0U, 0x0000000000000000U},
+	{0x01E8U, 0x001200100C80FC01U},
+	{0x01F0U, 0x001100100C80FC01U},
+	{0x01F8U, 0x0000000000000000U},
+	{0x0200U, 0x0000000000000000U},
+	{0x0208U, 0x001200100C80FC01U},
+	{0x0210U, 0x001100100C80FC01U},
+	{0x0218U, 0x001100100C825801U},
+	{0x0220U, 0x001100100C825801U},
+	{0x0228U, 0x0000000000000000U},
+	{0x0230U, 0x001100100C825801U},
+	{0x0238U, 0x001100100C825801U},
+	{0x0240U, 0x001200100C8BB801U},
+	{0x0248U, 0x001100200C8FFC01U},
+	{0x0250U, 0x001200100C8BB801U},
+	{0x0258U, 0x001100200C8FFC01U},
+	{0x0260U, 0x001100100C84E401U},
+	{0x0268U, 0x0000000000000000U},
+	{0x0270U, 0x0000000000000000U},
+	{0x0278U, 0x001100100C81F401U},
+	{0x0280U, 0x0000000000000000U},
+	{0x0288U, 0x0000000000000000U},
+	{0x0290U, 0x0000000000000000U},
+	{0x0298U, 0x0000000000000000U},
+	{0x02A0U, 0x0000000000000000U},
+	{0x02A8U, 0x0000000000000000U},
+	{0x02B0U, 0x0000000000000000U},
+	{0x02B8U, 0x001100100C803401U},
+	{0x02C0U, 0x0000000000000000U},
+	{0x02C8U, 0x0000000000000000U},
+	{0x02D0U, 0x0000000000000000U},
+	{0x02D8U, 0x0000000000000000U},
+	{0x02E0U, 0x0000000000000000U},
+	{0x02E8U, 0x001100100C803401U},
+	{0x02F0U, 0x001100300C8FFC01U},
+	{0x02F8U, 0x001100500C8FFC01U},
+	{0x0300U, 0x0000000000000000U},
+	{0x0308U, 0x001100300C8FFC01U},
+	{0x0310U, 0x001100500C8FFC01U},
+	{0x0318U, 0x001200100C803401U},
+	{0x0320U, 0x001100300C8FFC01U},
+	{0x0328U, 0x001100500C8FFC01U},
+	{0x0330U, 0x001100300C8FFC01U},
+	{0x0338U, 0x001100500C8FFC01U},
+	{0x0340U, 0x0000000000000000U},
+	{0x0348U, 0x0000000000000000U},
+	{0x0350U, 0x0000000000000000U},
+	{0x0358U, 0x0000000000000000U},
+	{0x0360U, 0x0000000000000000U},
+	{0x0368U, 0x0000000000000000U},
+};
+#endif
+
+static void dbsc_setting(void)
+{
+	uint32_t md=0;
+
+	/* BUFCAM settings */
+	//DBSC_DBCAM0CNF0 not set
+	io_write_32(DBSC_DBCAM0CNF1, 0x00043218U);	//dbcam0cnf1
+	io_write_32(DBSC_DBCAM0CNF2, 0x000000F4U);	//dbcam0cnf2
+	io_write_32(DBSC_DBCAM0CNF3, 0x00000000U);	//dbcam0cnf3
+	io_write_32(DBSC_DBSCHCNT0,  0x000F0037U);	//dbschcnt0
+	//DBSC_DBSCHCNT1 not set
+	io_write_32(DBSC_DBSCHSZ0,   0x00000001U);	//dbschsz0
+	io_write_32(DBSC_DBSCHRW0,   0x22421111U);	//dbschrw0
+	io_write_32(DBSC_DBSCHRW1,   0x00000034U);	//dbschrw1
+
+	md = (*((volatile uint32_t*)RST_MODEMR) & 0x000A0000) >> 17;
+
+	switch (md) {
+	case 0x0:
+		/* DDR3200 */
+		io_write_32(DBSC_SCFCTST2, 0x012F1123U);
+		break;
+	case 0x1:	//MD19=0,MD17=1 : LPDDR4-3000, 4GByte(1GByte x4)
+		/* DDR2800 */
+		io_write_32(DBSC_SCFCTST2, 0x012F1123U);
+		break;
+	case 0x4:	//MD19=1,MD17=0 : LPDDR4-2400, 4GByte(1GByte x4)
+		/* DDR2400 */
+		io_write_32(DBSC_SCFCTST2, 0x012F1123U);
+		break;
+	default:	//MD19=1,MD17=1 : LPDDR4-1600, 4GByte(1GByte x4)
+		/* DDR1600 */
+		io_write_32(DBSC_SCFCTST2, 0x012F1123U);
+		break;
+	}
+
+	/* QoS Settings */
+	io_write_32(DBSC_DBSCHQOS_0_0,  0x00000F00U);
+	io_write_32(DBSC_DBSCHQOS_0_1,  0x00000B00U);
+	io_write_32(DBSC_DBSCHQOS_0_2,  0x00000000U);
+	io_write_32(DBSC_DBSCHQOS_0_3,  0x00000000U);
+	//DBSC_DBSCHQOS_1_0 not set
+	//DBSC_DBSCHQOS_1_1 not set
+	//DBSC_DBSCHQOS_1_2 not set
+	//DBSC_DBSCHQOS_1_3 not set
+	//DBSC_DBSCHQOS_2_0 not set
+	//DBSC_DBSCHQOS_2_1 not set
+	//DBSC_DBSCHQOS_2_2 not set
+	//DBSC_DBSCHQOS_2_3 not set
+	//DBSC_DBSCHQOS_3_0 not set
+	//DBSC_DBSCHQOS_3_1 not set
+	//DBSC_DBSCHQOS_3_2 not set
+	//DBSC_DBSCHQOS_3_3 not set
+	io_write_32(DBSC_DBSCHQOS_4_0,  0x00000300U);
+	io_write_32(DBSC_DBSCHQOS_4_1,  0x000002F0U);
+	io_write_32(DBSC_DBSCHQOS_4_2,  0x00000200U);
+	io_write_32(DBSC_DBSCHQOS_4_3,  0x00000100U);
+	//DBSC_DBSCHQOS_5_0 not set
+	//DBSC_DBSCHQOS_5_1 not set
+	//DBSC_DBSCHQOS_5_2 not set
+	//DBSC_DBSCHQOS_5_3 not set
+	//DBSC_DBSCHQOS_6_0 not set
+	//DBSC_DBSCHQOS_6_1 not set
+	//DBSC_DBSCHQOS_6_2 not set
+	//DBSC_DBSCHQOS_6_3 not set
+	//DBSC_DBSCHQOS_7_0 not set
+	//DBSC_DBSCHQOS_7_1 not set
+	//DBSC_DBSCHQOS_7_2 not set
+	//DBSC_DBSCHQOS_7_3 not set
+	//DBSC_DBSCHQOS_8_0 not set
+	//DBSC_DBSCHQOS_8_1 not set
+	//DBSC_DBSCHQOS_8_2 not set
+	//DBSC_DBSCHQOS_8_3 not set
+	io_write_32(DBSC_DBSCHQOS_9_0,  0x00000300U);
+	io_write_32(DBSC_DBSCHQOS_9_1,  0x000002F0U);
+	io_write_32(DBSC_DBSCHQOS_9_2,  0x00000200U);
+	io_write_32(DBSC_DBSCHQOS_9_3,  0x00000100U);
+	//DBSC_DBSCHQOS_10_0 not set
+	//DBSC_DBSCHQOS_10_1 not set
+	//DBSC_DBSCHQOS_10_2 not set
+	//DBSC_DBSCHQOS_10_3 not set
+	//DBSC_DBSCHQOS_11_0 not set
+	//DBSC_DBSCHQOS_11_1 not set
+	//DBSC_DBSCHQOS_11_2 not set
+	//DBSC_DBSCHQOS_11_3 not set
+	io_write_32(DBSC_DBSCHQOS_12_0, 0x00000040U);
+	io_write_32(DBSC_DBSCHQOS_12_1, 0x00000030U);
+	io_write_32(DBSC_DBSCHQOS_12_2, 0x00000020U);
+	io_write_32(DBSC_DBSCHQOS_12_3, 0x00000010U);
+	io_write_32(DBSC_DBSCHQOS_13_0, 0x00000100U);
+	io_write_32(DBSC_DBSCHQOS_13_1, 0x000000F0U);
+	io_write_32(DBSC_DBSCHQOS_13_2, 0x000000A0U);
+	io_write_32(DBSC_DBSCHQOS_13_3, 0x00000040U);
+	io_write_32(DBSC_DBSCHQOS_14_0, 0x000000C0U);
+	io_write_32(DBSC_DBSCHQOS_14_1, 0x000000B0U);
+	io_write_32(DBSC_DBSCHQOS_14_2, 0x00000080U);
+	io_write_32(DBSC_DBSCHQOS_14_3, 0x00000040U);
+	io_write_32(DBSC_DBSCHQOS_15_0, 0x00000040U);
+	io_write_32(DBSC_DBSCHQOS_15_1, 0x00000030U);
+	io_write_32(DBSC_DBSCHQOS_15_2, 0x00000020U);
+	io_write_32(DBSC_DBSCHQOS_15_3, 0x00000010U);
+}
+
+void qos_init_v3h_v10(void)
+{
+	/* this setting value is H3 *
+	 * Respond by updating in the future */
+	dbsc_setting();
+
+	/* DRAM Split Address mapping */
+#if (RCAR_DRAM_SPLIT == RCAR_DRAM_SPLIT_4CH) || \
+    (RCAR_DRAM_SPLIT == RCAR_DRAM_SPLIT_AUTO)
+	NOTICE("BL2: DRAM Split is 4ch\n");
+	io_write_32(AXI_ADSPLCR0, ADSPLCR0_ADRMODE_DEFAULT
+				  | ADSPLCR0_SPLITSEL(0xFFU)
+				  | ADSPLCR0_AREA(0x1BU)
+				  | ADSPLCR0_SWP);
+	io_write_32(AXI_ADSPLCR1, 0x00000000U);
+	io_write_32(AXI_ADSPLCR2, 0xA8A90000U);
+	io_write_32(AXI_ADSPLCR3, 0x00000000U);
+#elif RCAR_DRAM_SPLIT == RCAR_DRAM_SPLIT_2CH
+	NOTICE("BL2: DRAM Split is 2ch\n");
+	io_write_32(AXI_ADSPLCR0, 0x00000000U);
+	io_write_32(AXI_ADSPLCR1, ADSPLCR0_ADRMODE_DEFAULT
+				  | ADSPLCR0_SPLITSEL(0xFFU)
+				  | ADSPLCR0_AREA(0x1BU)
+				  | ADSPLCR0_SWP);
+	io_write_32(AXI_ADSPLCR2, 0x00000000U);
+	io_write_32(AXI_ADSPLCR3, 0x00000000U);
+#else
+	NOTICE("BL2: DRAM Split is OFF\n");
+#endif
+
+#if !(RCAR_QOS_TYPE == RCAR_QOS_NONE)
+#if RCAR_QOS_TYPE  == RCAR_QOS_TYPE_DEFAULT
+	NOTICE("BL2: QoS is default setting(%s)\n", RCAR_QOS_VERSION);
+#endif
+
+	/* Resource Alloc setting */
+	io_write_32(RALLOC_RAS,   0x00000044U);
+	io_write_32(RALLOC_FIXTH, 0x000F0005U);
+	io_write_32(RALLOC_REGGD, 0x00000000U);
+	io_write_64(RALLOC_DANN,  0x0404010002020201U);
+	io_write_32(RALLOC_DANT,  0x0020100AU);
+	io_write_32(RALLOC_EC,    0x00000000U);
+	io_write_64(RALLOC_EMS,   0x0000000000000000U);
+	io_write_32(RALLOC_FSS,   0x000003e8U);
+	io_write_32(RALLOC_INSFC, 0xC7840001U);
+	io_write_32(RALLOC_BERR,  0x00000000U);
+	io_write_32(RALLOC_EARLYR, 0x00000000U);
+	io_write_32(RALLOC_RACNT0, 0x00010003U);
+
+	/* GPU Boost Mode */
+	io_write_32(RALLOC_STATGEN0, 0x00000001U);
+	io_write_32(ACTIVE_OR,       0x00000000U); /* 0:enable, 1:disable */
+
+	/* MSTAT setting */
+	io_write_32(MSTAT_SL_INIT, 0x0305007DU);
+	io_write_32(MSTAT_REF_ARS, 0x00330000U);
+
+	/* MSTAT SRAM setting */
+	{
+	uint32_t i;
+
+	for (i = 0U; i < ARRAY_SIZE(mstat_fix); i++) {
+		io_write_64(MSTAT_FIX_QOS_BANK0 + mstat_fix[i].addr,
+				mstat_fix[i].value);
+		io_write_64(MSTAT_FIX_QOS_BANK1 + mstat_fix[i].addr,
+				mstat_fix[i].value);
+	}
+	for (i = 0U; i < ARRAY_SIZE(mstat_be); i++) {
+		io_write_64(MSTAT_BE_QOS_BANK0 + mstat_be[i].addr,
+				mstat_be[i].value);
+		io_write_64(MSTAT_BE_QOS_BANK1 + mstat_be[i].addr,
+				mstat_be[i].value);
+	}
+	}
+
+	/* AXI-IF arbitration setting */
+	io_write_32(DBSC_AXARB, 0x00000000U);
+
+	/* 3DG bus Leaf setting */
+	io_write_32(0xFD820800U, 0x00000000U);
+	io_write_32(0xFD821800U, 0x00000000U);
+	io_write_32(0xFD822800U, 0x00000000U);
+	io_write_32(0xFD823800U, 0x00000000U);
+	io_write_32(0xFD824800U, 0x00000000U);
+	io_write_32(0xFD825800U, 0x00000000U);
+	io_write_32(0xFD826800U, 0x00000000U);
+	io_write_32(0xFD827800U, 0x00000000U);
+
+	/* VIO bus Leaf setting */
+	io_write_32(0xFEB89800, 0x00000000U);
+	io_write_32(0xFEB8A800, 0x00000000U);
+	io_write_32(0xFEB8B800, 0x00000000U);
+	io_write_32(0xFEB8C800, 0x00000000U);
+
+	/* HSC bus Leaf setting */
+	io_write_32(0xE6430800, 0x00000000U);
+	io_write_32(0xE6431800, 0x00000000U);
+	io_write_32(0xE6432800, 0x00000000U);
+	io_write_32(0xE6433800, 0x00000000U);
+
+	/* MP bus Leaf setting */
+	io_write_32(0xEC620800, 0x00000000U);
+	io_write_32(0xEC621800, 0x00000000U);
+
+	/* PERIE bus Leaf setting */
+	io_write_32(0xE7760800, 0x00000000U);
+	io_write_32(0xE7768800, 0x00000000U);
+
+	/* PERIW bus Leaf setting */
+	io_write_32(0xE6760800, 0x00000000U);
+	io_write_32(0xE6768800, 0x00000000U);
+
+	/* RT bus Leaf setting */
+	io_write_32(0xFFC50800U, 0x00000000U);
+	io_write_32(0xFFC51800U, 0x00000000U);
+
+	/* CCI bus Leaf setting */
+	io_write_32(0xF1300800, 0x00000003U);
+	io_write_32(0xF1340800, 0x00000003U);
+	io_write_32(0xF1380800, 0x00000003U);
+	io_write_32(0xF13C0800, 0x00000003U);
+
+	/* Resource Alloc start */
+	io_write_32(RALLOC_RAEN,  0x00000001U);
+
+	/* MSTAT start */
+	io_write_32(MSTAT_STATQC, 0x00000001U);
+#else
+	NOTICE("BL2: QoS is None\n");
+
+	/* Resource Alloc setting */
+	io_write_32(RALLOC_EC,    0x00000000U);
+	/* Resource Alloc start */
+	io_write_32(RALLOC_RAEN,  0x00000001U);
+#endif /* !(RCAR_QOS_TYPE == RCAR_QOS_NONE) */
+}
diff --git a/plat/renesas/rcar/qos/V3H/qos_init_v3h_v10.h b/plat/renesas/rcar/qos/V3H/qos_init_v3h_v10.h
new file mode 100644
index 0000000..893d46f
--- /dev/null
+++ b/plat/renesas/rcar/qos/V3H/qos_init_v3h_v10.h
@@ -0,0 +1,37 @@
+/*
+ * Copyright (c) 2015-2017, Renesas Electronics Corporation
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are met:
+ *
+ *   - Redistributions of source code must retain the above copyright notice,
+ *     this list of conditions and the following disclaimer.
+ *
+ *   - Redistributions in binary form must reproduce the above copyright
+ *     notice, this list of conditions and the following disclaimer in the
+ *     documentation and/or other materials provided with the distribution.
+ *
+ *   - Neither the name of Renesas nor the names of its contributors may be
+ *     used to endorse or promote products derived from this software without
+ *     specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
+ * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#ifndef QOS_INIT_H_H3_V20__
+#define QOS_INIT_H_H3_V20__
+
+void qos_init_v3h_v10(void);
+
+#endif	/* QOS_INIT_H_H3_V20__ */
diff --git a/plat/renesas/rcar/qos/qos.mk b/plat/renesas/rcar/qos/qos.mk
index 2512373..b833c25 100644
--- a/plat/renesas/rcar/qos/qos.mk
+++ b/plat/renesas/rcar/qos/qos.mk
@@ -15,6 +15,7 @@ ifeq (${RCAR_LSI},${RCAR_AUTO})
     BL2_SOURCES += plat/renesas/rcar/qos/M3/qos_init_m3_v30.c
     BL2_SOURCES += plat/renesas/rcar/qos/M3N/qos_init_m3n_v10.c
     BL2_SOURCES += plat/renesas/rcar/qos/V3M/qos_init_v3m.c
+    BL2_SOURCES += plat/renesas/rcar/qos/V3H/qos_init_v3h_v10.c
 else ifdef RCAR_LSI_CUT_COMPAT
   ifeq (${RCAR_LSI},${RCAR_H3})
     BL2_SOURCES += plat/renesas/rcar/qos/H3/qos_init_h3_v10.c
@@ -39,6 +40,9 @@ else ifdef RCAR_LSI_CUT_COMPAT
   ifeq (${RCAR_LSI},${RCAR_V3M})
     BL2_SOURCES += plat/renesas/rcar/qos/V3M/qos_init_v3m.c
   endif
+  ifeq (${RCAR_LSI},${RCAR_V3H})
+    BL2_SOURCES += plat/renesas/rcar/qos/V3H/qos_init_v3h_v10.c
+  endif
 else
   ifeq (${RCAR_LSI},${RCAR_H3})
     ifeq (${LSI_CUT},10)
@@ -95,6 +99,9 @@ else
   ifeq (${RCAR_LSI},${RCAR_V3M})
     BL2_SOURCES += plat/renesas/rcar/qos/V3M/qos_init_v3m.c
   endif
+  ifeq (${RCAR_LSI},${RCAR_V3H})
+    BL2_SOURCES += plat/renesas/rcar/qos/V3M/qos_init_v3h_v10.c
+  endif
 endif
 
 BL2_SOURCES += plat/renesas/rcar/qos/qos_init.c
diff --git a/plat/renesas/rcar/qos/qos_init.c b/plat/renesas/rcar/qos/qos_init.c
index cab2c28..07b6d8d 100644
--- a/plat/renesas/rcar/qos/qos_init.c
+++ b/plat/renesas/rcar/qos/qos_init.c
@@ -19,6 +19,7 @@
   #include "M3/qos_init_m3_v30.h"
   #include "M3N/qos_init_m3n_v10.h"
   #include "V3M/qos_init_v3m.h"
+  #include "V3H/qos_init_v3h_v10.h"
 #endif
 #if RCAR_LSI == RCAR_H3	/* H3 */
   #include "H3/qos_init_h3_v10.h"
@@ -43,6 +44,9 @@
 #if RCAR_LSI == RCAR_V3M	/* V3M */
   #include "V3M/qos_init_v3m.h"
 #endif
+#if RCAR_LSI == RCAR_V3H	/* V3H */
+  #include "V3H/qos_init_v3h_v10.h"
+#endif
 
  /* Product Register */
 #define PRR			(0xFFF00044U)
@@ -52,6 +56,7 @@
 #define PRR_PRODUCT_M3		(0x00005200U)           /* R-Car M3 */
 #define PRR_PRODUCT_V3M		(0x00005400U)           /* R-Car V3M */
 #define PRR_PRODUCT_M3N		(0x00005500U)           /* R-Car M3N */
+#define PRR_PRODUCT_V3H		(0x00005600U)           /* R-Car V3H */
 #define PRR_PRODUCT_E3		(0x00005700U)           /* R-Car E3 */
 #define PRR_PRODUCT_10		(0x00U)
 #define PRR_PRODUCT_11		(0x01U)
@@ -179,6 +184,19 @@ void qos_init(void)
 		PRR_PRODUCT_ERR(reg);
  #endif
 		break;
+	case PRR_PRODUCT_V3H:
+ #if (RCAR_LSI == RCAR_AUTO) || (RCAR_LSI == RCAR_V3H)
+		switch (reg & PRR_CUT_MASK) {
+		case PRR_PRODUCT_10:
+		case PRR_PRODUCT_20:
+		default:
+			qos_init_v3h_v10();
+			break;
+		}
+ #else
+		PRR_PRODUCT_ERR(reg);
+ #endif
+		break;
 	default:
 		PRR_PRODUCT_ERR(reg);
 		break;
@@ -272,6 +290,13 @@ void qos_init(void)
 		PRR_PRODUCT_ERR(reg);
 	}
 	qos_init_v3m();
+ #elif RCAR_LSI == RCAR_V3H	/* V3H */
+	/* V3H Cut 10 or later */
+	if ((PRR_PRODUCT_V3H)
+			!= (reg & (PRR_PRODUCT_MASK))) {
+		PRR_PRODUCT_ERR(reg);
+	}
+	qos_init_v3h_v10();
  #else
   #error "Don't have QoS initialize routine(Unknown chip)."
  #endif
diff --git a/plat/renesas/rcar/rcar_def.h b/plat/renesas/rcar/rcar_def.h
index 50c868b..7caead2 100644
--- a/plat/renesas/rcar/rcar_def.h
+++ b/plat/renesas/rcar/rcar_def.h
@@ -207,6 +207,7 @@
 #define RCAR_PRODUCT_M3			U(0x00005200)
 #define RCAR_PRODUCT_V3M		U(0x00005400)
 #define RCAR_PRODUCT_M3N		U(0x00005500)
+#define RCAR_PRODUCT_V3H		U(0x00005600)
 #define RCAR_PRODUCT_E3			U(0x00005700)
 #define RCAR_CUT_VER10			U(0x00000000)
 #define RCAR_CUT_VER11			U(0x00000001)	/* H3/M3N/E3 Ver.1.1 */
diff --git a/tools/dummy_create/makefile b/tools/dummy_create/makefile
index 9093111..b7c48b5 100644
--- a/tools/dummy_create/makefile
+++ b/tools/dummy_create/makefile
@@ -77,6 +77,12 @@ CL = rm -f
 ###################################################
 # command
 
+ifeq (${LSI},V3H)
+VMA := 0xEB220000
+else
+VMA := 0xE6320000
+endif
+
 .PHONY: all
 all: $(OUTPUT_FILE_SA0) $(OUTPUT_FILE_SA6)
 ###################################################
@@ -88,8 +94,8 @@ $(OUTPUT_FILE_SA0) : $(MEMORY_DEF_SA0) $(OBJ_FILE_SA0)
 	-o $(OUTPUT_FILE_SA0)			\
 	-Map $(FILE_NAME_SA0).map 		\
 
-	$(objcopy) -O srec --adjust-vma=0xE6320000 --srec-forceS3  $(OUTPUT_FILE_SA0) $(FILE_NAME_SA0).srec
-	$(objcopy) -O binary --adjust-vma=0xE6320000 --srec-forceS3  $(OUTPUT_FILE_SA0) $(FILE_NAME_SA0).bin
+	$(objcopy) -O srec --adjust-vma=$(VMA) --srec-forceS3  $(OUTPUT_FILE_SA0) $(FILE_NAME_SA0).srec
+	$(objcopy) -O binary --adjust-vma=$(VMA) --srec-forceS3  $(OUTPUT_FILE_SA0) $(FILE_NAME_SA0).bin
 
 $(OUTPUT_FILE_SA6) : $(MEMORY_DEF_SA6) $(OBJ_FILE_SA6)
 	$(LD) $(OBJ_FILE_SA6)		 	\
@@ -97,8 +103,8 @@ $(OUTPUT_FILE_SA6) : $(MEMORY_DEF_SA6) $(OBJ_FILE_SA6)
 	-o $(OUTPUT_FILE_SA6)			\
 	-Map $(FILE_NAME_SA6).map 		\
 
-	$(objcopy) -O srec --adjust-vma=0xE6320000 --srec-forceS3  $(OUTPUT_FILE_SA6) $(FILE_NAME_SA6).srec
-	$(objcopy) -O binary --adjust-vma=0xE6320000 --srec-forceS3  $(OUTPUT_FILE_SA6) $(FILE_NAME_SA6).bin
+	$(objcopy) -O srec --adjust-vma=$(VMA) --srec-forceS3  $(OUTPUT_FILE_SA6) $(FILE_NAME_SA6).srec
+	$(objcopy) -O binary --adjust-vma=$(VMA) --srec-forceS3  $(OUTPUT_FILE_SA6) $(FILE_NAME_SA6).bin
 
 ###################################################
 # Compile
-- 
2.7.4

