From cc245241593c097c03d73caad7e7900392603b5b Mon Sep 17 00:00:00 2001
From: Vyacheslav Bocharov <adeep@lexina.in>
Date: Wed, 29 Jun 2022 09:26:35 +0300
Subject: [PATCH 3/8] Copy and update amlogic-2019 aml partition/keyman code to
 mainline

---
 cmd/aml_mmc.c                                 |  3542 ++
 cmd/storage.c                                 |  1503 +
 common/aml_dt.c                               |   600 +
 common/partitions.c                           |   206 +
 disk/part_aml.c                               |   110 +
 drivers/amlogic/Kconfig                       |    14 +
 drivers/amlogic/Makefile                      |     5 +
 drivers/amlogic/keymanage/Kconfig             |    21 +
 drivers/amlogic/keymanage/Makefile            |    32 +
 drivers/amlogic/keymanage/key_manage.c        |   689 +
 drivers/amlogic/keymanage/key_manage.h        |    61 +
 drivers/amlogic/keymanage/key_manage_i.h      |    65 +
 drivers/amlogic/keymanage/key_unify.c         |   610 +
 drivers/amlogic/keymanage/km_dts.c            |   392 +
 drivers/amlogic/keymanage/km_efuse_key.c      |   156 +
 drivers/amlogic/keymanage/km_provision_key.c  |   102 +
 drivers/amlogic/keymanage/km_secure_key.c     |   263 +
 .../amlogic/keymanage/km_secure_key_2015.c    |   118 +
 drivers/amlogic/storagekey/Kconfig            |     2 +
 drivers/amlogic/storagekey/Makefile           |     3 +
 drivers/amlogic/storagekey/normal_key.c       |   672 +
 drivers/amlogic/storagekey/normal_key.h       |    49 +
 drivers/amlogic/storagekey/securestorage.c    |   389 +
 drivers/amlogic/storagekey/storagekey.c       |   587 +
 drivers/efuse/Kconfig                         |     4 +
 drivers/efuse/Makefile                        |     9 +
 drivers/efuse/aml_efuse.c                     |   123 +
 drivers/efuse/bl31_apis.c                     |   474 +
 drivers/efuse/efuse.c                         |   141 +
 drivers/efuse/efuse_usr_space_api.c           |   379 +
 drivers/mmc/aml_emmc_partition.c              |  1715 +
 drivers/mmc/mmc_aml copy.c                    |  3299 ++
 drivers/mmc/mmc_aml.c                         |   416 +
 drivers/mmc/storage_emmc.c                    |   946 +
 include/amlogic/aml_cec.h                     |    86 +
 include/amlogic/aml_efuse.h                   |    79 +
 include/amlogic/aml_gpio.h                    |    54 +
 include/amlogic/aml_hdmirx.h                  |    19 +
 include/amlogic/aml_irblaster.h               |    29 +
 include/amlogic/aml_is31fl32xx.h              |     9 +
 include/amlogic/aml_led.h                     |    68 +
 include/amlogic/aml_mmc.h                     |   105 +
 include/amlogic/aml_mtd.h                     |    31 +
 include/amlogic/aml_nand.h                    |    24 +
 include/amlogic/aml_rsv.h                     |   106 +
 include/amlogic/aml_tlv.h                     |   157 +
 include/amlogic/aml_v2_burning.h              |    31 +
 include/amlogic/aml_v3_burning.h              |    14 +
 include/amlogic/amlkey_if.h                   |    85 +
 include/amlogic/anti-rollback.h               |    40 +
 include/amlogic/asm/bl31_apis.h               |   166 +
 include/amlogic/asm/clock.h                   |    41 +
 include/amlogic/asm/cpu_config.h              |   101 +
 include/amlogic/asm/cpu_sdio.h                |   264 +
 include/amlogic/asm/efuse.h                   |    62 +
 include/amlogic/asm/io.h                      |   118 +
 include/amlogic/asm/register.h                |    98 +
 include/amlogic/asm/regs.h                    | 32964 ++++++++++++++++
 include/amlogic/asm/romboot.h                 |    53 +
 include/amlogic/asm/sd_emmc.h                 |   136 +
 include/amlogic/asm/secure_apb.h              |  4235 ++
 include/amlogic/auge_sound.h                  |    24 +
 include/amlogic/blxx2bl33_param.h             |    27 +
 include/amlogic/canvas.h                      |    68 +
 include/amlogic/color.h                       |    51 +
 include/amlogic/cpu_id.h                      |    90 +
 include/amlogic/enc_clk_config.h              |     1 +
 include/amlogic/fb.h                          |   399 +
 include/amlogic/instaboot.h                   |    24 +
 include/amlogic/jtag.h                        |    61 +
 include/amlogic/keyunify.h                    |    56 +
 include/amlogic/media/vout/aml_cvbs.h         |    13 +
 include/amlogic/media/vout/aml_vinfo.h        |   148 +
 include/amlogic/media/vout/aml_vmode.h        |    98 +
 include/amlogic/media/vout/aml_vout.h         |    25 +
 .../amlogic/media/vout/hdmitx/hdmi_common.h   |   655 +
 include/amlogic/media/vout/hdmitx/hdmitx.h    |    11 +
 .../amlogic/media/vout/hdmitx/hdmitx_ext.h    |     6 +
 .../amlogic/media/vout/hdmitx/hdmitx_module.h |   106 +
 .../amlogic/media/vout/hdmitx/hdmitx_reg.h    |  1041 +
 include/amlogic/media/vout/hdmitx/mach_reg.h  |   625 +
 include/amlogic/media/vout/lcd/aml_lcd.h      |   168 +
 include/amlogic/media/vout/lcd/bl_extern.h    |    88 +
 include/amlogic/media/vout/lcd/bl_ldim.h      |   118 +
 include/amlogic/media/vout/lcd/lcd_extern.h   |   116 +
 include/amlogic/media/vout/lcd/lcd_vout.h     |   520 +
 include/amlogic/media/vpp/vpp.h               |    24 +
 include/amlogic/media/vpu/vpu.h               |    11 +
 include/amlogic/saradc.h                      |   103 +
 include/amlogic/secure_storage.h              |    46 +
 include/amlogic/sound.h                       |   180 +
 include/amlogic/spicc.h                       |    44 +
 include/amlogic/spifc.h                       |    44 +
 include/amlogic/storage.h                     |   501 +
 include/amlogic/storagekey.h                  |    57 +
 include/amlogic/store_wrapper.h               |    56 +
 include/amlstorage/emmc_partitions.h          |   271 +
 include/amlstorage/emmc_storage.h             |    76 +
 include/amlstorage/partition_table.h          |    72 +
 99 files changed, 62896 insertions(+)
 create mode 100644 cmd/aml_mmc.c
 create mode 100644 cmd/storage.c
 create mode 100644 common/aml_dt.c
 create mode 100644 common/partitions.c
 create mode 100644 disk/part_aml.c
 create mode 100644 drivers/amlogic/Kconfig
 create mode 100644 drivers/amlogic/Makefile
 create mode 100644 drivers/amlogic/keymanage/Kconfig
 create mode 100644 drivers/amlogic/keymanage/Makefile
 create mode 100644 drivers/amlogic/keymanage/key_manage.c
 create mode 100644 drivers/amlogic/keymanage/key_manage.h
 create mode 100644 drivers/amlogic/keymanage/key_manage_i.h
 create mode 100644 drivers/amlogic/keymanage/key_unify.c
 create mode 100644 drivers/amlogic/keymanage/km_dts.c
 create mode 100644 drivers/amlogic/keymanage/km_efuse_key.c
 create mode 100644 drivers/amlogic/keymanage/km_provision_key.c
 create mode 100644 drivers/amlogic/keymanage/km_secure_key.c
 create mode 100644 drivers/amlogic/keymanage/km_secure_key_2015.c
 create mode 100644 drivers/amlogic/storagekey/Kconfig
 create mode 100644 drivers/amlogic/storagekey/Makefile
 create mode 100644 drivers/amlogic/storagekey/normal_key.c
 create mode 100644 drivers/amlogic/storagekey/normal_key.h
 create mode 100644 drivers/amlogic/storagekey/securestorage.c
 create mode 100644 drivers/amlogic/storagekey/storagekey.c
 create mode 100644 drivers/efuse/Kconfig
 create mode 100644 drivers/efuse/Makefile
 create mode 100644 drivers/efuse/aml_efuse.c
 create mode 100644 drivers/efuse/bl31_apis.c
 create mode 100644 drivers/efuse/efuse.c
 create mode 100644 drivers/efuse/efuse_usr_space_api.c
 create mode 100644 drivers/mmc/aml_emmc_partition.c
 create mode 100644 drivers/mmc/mmc_aml copy.c
 create mode 100644 drivers/mmc/mmc_aml.c
 create mode 100644 drivers/mmc/storage_emmc.c
 create mode 100644 include/amlogic/aml_cec.h
 create mode 100644 include/amlogic/aml_efuse.h
 create mode 100644 include/amlogic/aml_gpio.h
 create mode 100644 include/amlogic/aml_hdmirx.h
 create mode 100644 include/amlogic/aml_irblaster.h
 create mode 100644 include/amlogic/aml_is31fl32xx.h
 create mode 100644 include/amlogic/aml_led.h
 create mode 100644 include/amlogic/aml_mmc.h
 create mode 100644 include/amlogic/aml_mtd.h
 create mode 100644 include/amlogic/aml_nand.h
 create mode 100644 include/amlogic/aml_rsv.h
 create mode 100644 include/amlogic/aml_tlv.h
 create mode 100644 include/amlogic/aml_v2_burning.h
 create mode 100644 include/amlogic/aml_v3_burning.h
 create mode 100644 include/amlogic/amlkey_if.h
 create mode 100644 include/amlogic/anti-rollback.h
 create mode 100644 include/amlogic/asm/bl31_apis.h
 create mode 100644 include/amlogic/asm/clock.h
 create mode 100644 include/amlogic/asm/cpu_config.h
 create mode 100644 include/amlogic/asm/cpu_sdio.h
 create mode 100644 include/amlogic/asm/efuse.h
 create mode 100644 include/amlogic/asm/io.h
 create mode 100644 include/amlogic/asm/register.h
 create mode 100644 include/amlogic/asm/regs.h
 create mode 100644 include/amlogic/asm/romboot.h
 create mode 100644 include/amlogic/asm/sd_emmc.h
 create mode 100644 include/amlogic/asm/secure_apb.h
 create mode 100644 include/amlogic/auge_sound.h
 create mode 100644 include/amlogic/blxx2bl33_param.h
 create mode 100644 include/amlogic/canvas.h
 create mode 100644 include/amlogic/color.h
 create mode 100644 include/amlogic/cpu_id.h
 create mode 100644 include/amlogic/enc_clk_config.h
 create mode 100644 include/amlogic/fb.h
 create mode 100644 include/amlogic/instaboot.h
 create mode 100644 include/amlogic/jtag.h
 create mode 100644 include/amlogic/keyunify.h
 create mode 100644 include/amlogic/media/vout/aml_cvbs.h
 create mode 100644 include/amlogic/media/vout/aml_vinfo.h
 create mode 100644 include/amlogic/media/vout/aml_vmode.h
 create mode 100644 include/amlogic/media/vout/aml_vout.h
 create mode 100644 include/amlogic/media/vout/hdmitx/hdmi_common.h
 create mode 100644 include/amlogic/media/vout/hdmitx/hdmitx.h
 create mode 100644 include/amlogic/media/vout/hdmitx/hdmitx_ext.h
 create mode 100644 include/amlogic/media/vout/hdmitx/hdmitx_module.h
 create mode 100644 include/amlogic/media/vout/hdmitx/hdmitx_reg.h
 create mode 100644 include/amlogic/media/vout/hdmitx/mach_reg.h
 create mode 100644 include/amlogic/media/vout/lcd/aml_lcd.h
 create mode 100644 include/amlogic/media/vout/lcd/bl_extern.h
 create mode 100644 include/amlogic/media/vout/lcd/bl_ldim.h
 create mode 100644 include/amlogic/media/vout/lcd/lcd_extern.h
 create mode 100644 include/amlogic/media/vout/lcd/lcd_vout.h
 create mode 100644 include/amlogic/media/vpp/vpp.h
 create mode 100644 include/amlogic/media/vpu/vpu.h
 create mode 100644 include/amlogic/saradc.h
 create mode 100644 include/amlogic/secure_storage.h
 create mode 100644 include/amlogic/sound.h
 create mode 100644 include/amlogic/spicc.h
 create mode 100644 include/amlogic/spifc.h
 create mode 100644 include/amlogic/storage.h
 create mode 100644 include/amlogic/storagekey.h
 create mode 100644 include/amlogic/store_wrapper.h
 create mode 100644 include/amlstorage/emmc_partitions.h
 create mode 100644 include/amlstorage/emmc_storage.h
 create mode 100644 include/amlstorage/partition_table.h

diff --git a/cmd/aml_mmc.c b/cmd/aml_mmc.c
new file mode 100644
index 00000000000..db9927e9120
--- /dev/null
+++ b/cmd/aml_mmc.c
@@ -0,0 +1,3542 @@
+/*
+ * (C) Copyright 2003
+ * Kyle Harris, kharris@nexus-tech.net
+ *
+ * See file CREDITS for list of people who contributed to this
+ * project.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License as
+ * published by the Free Software Foundation; either version 2 of
+ * the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston,
+ * MA 02111-1307 USA
+ */
+
+#include <common.h>
+#include <malloc.h>
+#include <command.h>
+#include <linux/ctype.h>
+#include <linux/crc32.h>
+#include <linux/bug.h>
+#include <mmc.h>
+#include "../drivers/mmc/mmc_private.h"
+#include <amlstorage/partition_table.h>
+#include <amlstorage/emmc_partitions.h>
+#include <amlogic/asm/cpu_sdio.h>
+#include <amlogic/asm/sd_emmc.h>
+#include <linux/sizes.h>
+//#include <amlogic/cpu_id.h>
+#include <amlogic/aml_mmc.h>
+#include <linux/delay.h>
+
+/* info system. */
+#define dtb_err(fmt, ...) printf( "%s()-%d: " fmt , \
+				  __func__, __LINE__, ##__VA_ARGS__)
+
+#define dtb_wrn(fmt, ...) printf( "%s()-%d: " fmt , \
+				  __func__, __LINE__, ##__VA_ARGS__)
+
+/* for detail debug info */
+#define dtb_info(fmt, ...) printf( "%s()-%d: " fmt , \
+				  __func__, __LINE__, ##__VA_ARGS__)
+
+#define fb_err(fmt, ...)   printf("%s()-%d: " fmt , \
+				__func__, __LINE__, ##__VA_ARGS__)
+#define CONFIG_SYS_MMC_ENV_DEV		1
+struct aml_dtb_rsv {
+	u8 data[DTB_BLK_SIZE*DTB_BLK_CNT - 4*sizeof(u32)];
+	u32 magic;
+	u32 version;
+	u32 timestamp;
+	u32 checksum;
+};
+
+struct aml_dtb_info {
+	u32 stamp[2];
+	u8 valid[2];
+};
+
+#define stamp_after(a,b)   ((int)(b) - (int)(a)  < 0)
+/* glb dtb infos */
+static struct aml_dtb_info dtb_infos = {{0, 0}, {0, 0}};
+
+#define CONFIG_SECURITYKEY
+
+#if !defined(CONFIG_SYS_MMC_BOOT_DEV)
+	#define CONFIG_SYS_MMC_BOOT_DEV (CONFIG_SYS_MMC_ENV_DEV)
+#endif
+
+#define GXB_START_BLK   0
+#define GXL_START_BLK   1
+
+/* max 2MB for emmc in blks */
+#define UBOOT_SIZE  (0x1000)
+
+
+extern int mmc_key_write(unsigned char *buf, unsigned int size, uint32_t *actual_lenth);
+extern int mmc_key_read(unsigned char *buf, unsigned int size, uint32_t *actual_lenth);
+
+/* move this out to storage */
+//int info_disprotect = 0;
+
+
+int mmc_read_status(struct mmc *mmc, int timeout)
+{
+	struct mmc_cmd cmd;
+	int err, retries = 5;
+	int status;
+
+	cmd.cmdidx = MMC_CMD_SEND_STATUS;
+	cmd.resp_type = MMC_RSP_R1;
+	if (!mmc_host_is_spi(mmc))
+		cmd.cmdarg = mmc->rca << 16;
+	do {
+		err = mmc_send_cmd(mmc, &cmd, NULL);
+		if (!err) {
+			if ((cmd.response[0] & MMC_STATUS_RDY_FOR_DATA) &&
+				(cmd.response[0] & MMC_STATUS_CURR_STATE) !=
+				 MMC_STATE_PRG)
+				break;
+			else if (cmd.response[0] & MMC_STATUS_MASK) {
+				printf("Status Error: 0x%08X\n",
+					cmd.response[0]);
+				return -18;
+			}
+		} else if (--retries < 0)
+			return err;
+
+		udelay(1000);
+
+	} while (timeout--);
+
+	status = (cmd.response[0] & MMC_STATUS_CURR_STATE) >> 9;
+	printf("CURR STATE:%d, status = 0x%x\n", status, cmd.response[0]);
+
+	if (timeout <= 0) {
+		printf("read status Timeout waiting card ready\n");
+		return -19;
+	}
+	if (cmd.response[0] & MMC_STATUS_SWITCH_ERROR) {
+		printf("mmc status swwitch error status =0x%x\n", status);
+		return -21;
+	}
+	return 0;
+}
+
+bool emmckey_is_protected (struct mmc *mmc)
+{
+#ifdef CONFIG_STORE_COMPATIBLE
+#ifdef CONFIG_SECURITYKEY
+	if (info_disprotect & DISPROTECT_KEY) {
+		printf("%s(): disprotect\n", __func__);
+		return 0;
+	}else{
+		printf("%s(): protect\n", __func__);
+		return 1;
+	}
+#else
+		return 0;
+#endif
+#else
+#ifdef CONFIG_SECURITYKEY
+		//return mmc->key_protect;
+		return 0; /* fixme, */
+#else
+		return 0;
+#endif
+#endif
+}
+
+unsigned emmc_cur_partition = 0;
+
+
+static int get_off_size(struct mmc * mmc, char * name, uint64_t offset, uint64_t  size, u64 * blk, u64 * cnt, u64 * sz_byte)
+{
+		struct partitions *part_info = NULL;
+		uint64_t off = 0;
+		int blk_shift = 0;
+
+		blk_shift =  ffs(mmc->read_bl_len) - 1;
+		// printf("blk_shift:%d , off:0x%llx , size:0x%llx.\n ",blk_shift,off,size );
+		part_info = find_mmc_partition_by_name(name);
+		if (part_info == NULL) {
+				printf("get partition info failed !!\n");
+				return -1;
+		}
+		off = part_info->offset + offset;
+
+		// printf("part_info->offset:0x%llx , off:0x%llx , size:0x%llx.\n",part_info->offset ,off,size);
+
+		*blk = off >>  blk_shift ;
+		*cnt = size >>  blk_shift ;
+		*sz_byte = size - ((*cnt) << blk_shift) ;
+
+		// printf("get_partition_off_size : blk:0x%llx , cnt:0x%llx.\n",*blk,*cnt);
+		return 0;
+}
+
+static int get_partition_size(unsigned char* name, uint64_t* addr)
+{
+		struct partitions *part_info = NULL;
+		part_info = find_mmc_partition_by_name((char *)name);
+		if (part_info == NULL) {
+				printf("get partition info failed !!\n");
+				return -1;
+		}
+
+		*addr = part_info->size >> 9; // unit: 512 bytes
+		return 0;
+}
+
+static inline int isstring(char *p)
+{
+	char *endptr = p;
+	while (*endptr != '\0') {
+		if (!(((*endptr >= '0') && (*endptr <= '9'))
+				|| ((*endptr >= 'a') && (*endptr <= 'f'))
+				|| ((*endptr >= 'A') && (*endptr <= 'F'))
+				|| (*endptr == 'x') || (*endptr == 'X')))
+			return 1;
+		endptr++;
+	}
+
+	return 0;
+}
+
+/*
+	erase bootloader on user/boot0/boot1 which indicate by map.
+	bit 0: user
+	bit 1: boot0
+	bit 2: boot1
+*/
+int amlmmc_erase_bootloader(int dev, int map)
+{
+	int ret = 0, i, count = 3;
+	int blk_shift;
+	unsigned long n;
+	char *partname[3] = {"user", "boot0", "boot1"};
+	// cpu_id_t cpu_id = get_cpu_id();
+	struct mmc *mmc = find_mmc_device(dev);
+
+	/* do nothing */
+	if (0 == map)
+		goto _out;
+
+	if (!mmc) {
+		printf("%s() %d: not valid emmc %d\n", __func__, __LINE__, dev);
+		ret = -1;
+		goto _out;
+	}
+	/* make sure mmc is initilized! */
+	ret = mmc_init(mmc);
+	if (ret) {
+		printf("%s() %d: emmc %d init %d\n", __func__, __LINE__, dev, ret);
+		ret = -2;
+		goto _out;
+	}
+
+	blk_shift = ffs(mmc->read_bl_len) -1;
+	/* erase bootloader in user/boot0/boot1 */
+	for (i = 0; i < count; i++) {
+		if (map & (0x1 << i)) {
+			if (!blk_select_hwpart_devnum(UCLASS_MMC, 1, i)) {
+				lbaint_t start = 0, blkcnt;
+
+				blkcnt = mmc->capacity >> blk_shift;
+				if (0 == i) {
+					struct partitions *part_info;
+					/* get info by partition */
+					part_info = find_mmc_partition_by_name(MMC_BOOT_NAME);
+					if (part_info == NULL) {
+						printf("%s() %d: error!!\n", __func__, __LINE__);
+						/* fixme, do somthing! */
+						continue;
+					} else {
+						start = part_info->offset>> blk_shift;
+						blkcnt = part_info->size>> blk_shift;
+						if (1) { //cpu_id.family_id >= MESON_CPU_MAJOR_ID_GXL) {
+							start = GXL_START_BLK;
+							blkcnt -= GXL_START_BLK;
+						}
+					}
+				}
+/* some customer may use boot1 higher 2M as private data. */
+#ifdef CONFIG_EMMC_BOOT1_TOUCH_REGION
+				if (2 == i && CONFIG_EMMC_BOOT1_TOUCH_REGION <= mmc->capacity) {
+					blkcnt = CONFIG_EMMC_BOOT1_TOUCH_REGION >> blk_shift;
+				}
+#endif/* CONFIG_EMMC_BOOT1_TOUCH_REGION */
+#ifdef CONFIG_AML_GPT
+			if (i == 0)
+				continue;
+#endif
+				printf("Erasing blocks " LBAFU " to " LBAFU " @ %s\n",
+				   start, blkcnt, partname[i]);
+				n = blk_derase(mmc_get_blk_desc(mmc), start, blkcnt);
+				if (n != 0) {
+					printf("mmc erase %s failed\n", partname[i]);
+					ret = -3;
+					break;
+				}
+			} else
+				printf("%s() %d: switch dev %d to %s fail\n",
+						__func__, __LINE__, dev, partname[i]);
+		}
+	}
+	/* try to switch back to user. */
+	blk_select_hwpart(mmc->dev, 0);
+
+_out:
+	return ret;
+}
+
+/*
+	write bootloader on user/boot0/boot1 which indicate by map.
+	bit 0: user
+	bit 1: boot0
+	bit 2: boot1
+*/
+int amlmmc_write_bootloader(int dev, int map, unsigned int size, const void *src)
+{
+	int ret = 0, i, count = 3;
+	unsigned long n;
+	char *partname[3] = {"user", "boot0", "boot1"};
+	struct mmc *mmc = find_mmc_device(dev);
+	lbaint_t start = GXB_START_BLK, blkcnt;
+	//cpu_id_t cpu_id = get_cpu_id();
+
+	/* do nothing */
+	if (0 == map)
+		goto _out;
+
+	if (!mmc) {
+		printf("%s() %d: not valid emmc %d\n", __func__, __LINE__, dev);
+		ret = -1;
+		goto _out;
+	}
+	/* make sure mmc is initilized! */
+	ret = mmc_init(mmc);
+	if (ret) {
+		printf("%s() %d: emmc %d init %d\n", __func__, __LINE__, dev, ret);
+		ret = -2;
+		goto _out;
+	}
+
+	if(1) //(cpu_id.family_id >= MESON_CPU_MAJOR_ID_GXL)
+		start = GXL_START_BLK;
+	blkcnt = (size + mmc->read_bl_len - 1) / mmc->read_bl_len;
+
+	/* erase bootloader in user/boot0/boot1 */
+	for (i = 0; i < count; i++) {
+		if (map & (0x1 << i)) {
+			if (!blk_select_hwpart_devnum(UCLASS_MMC, 1, i)) {
+/* some customer may use boot1 higher 2M as private data. */
+#ifdef CONFIG_EMMC_BOOT1_TOUCH_REGION
+				if (2 == i && CONFIG_EMMC_BOOT1_TOUCH_REGION <= size) {
+					printf("%s(), size %d exceeds TOUCH_REGION %d, skip\n",
+						__func__, size, CONFIG_EMMC_BOOT1_TOUCH_REGION);
+					break;
+				}
+#endif /* CONFIG_EMMC_BOOT1_TOUCH_REGION */
+#ifdef CONFIG_AML_GPT
+			if (i == 0)
+				continue;
+#endif
+				printf("Wrting blocks " LBAFU " to " LBAFU " @ %s\n",
+				   start, blkcnt, partname[i]);
+				n = blk_dwrite(mmc_get_blk_desc(mmc), start, blkcnt, src);
+				if (n != blkcnt) {
+					printf("mmc write %s failed\n", partname[i]);
+					ret = -3;
+					break;
+				}
+			} else
+				printf("%s() %d: switch dev %d to %s fail\n",
+						__func__, __LINE__, dev, partname[i]);
+		}
+	}
+	/* try to switch back to user. */
+	blk_select_hwpart(mmc->dev, 0);
+
+_out:
+	return ret;
+}
+
+static int amlmmc_erase_in_dev(int argc, char *const argv[])
+{
+	int dev = 0;
+	u64 cnt = 0, blk = 0, n = 0;
+	struct mmc *mmc;
+
+	dev = simple_strtoul(argv[2], NULL, 10);
+	blk = simple_strtoull(argv[3], NULL, 16);
+	cnt = simple_strtoull(argv[4], NULL, 16);
+
+	if (dev < 0) {
+		printf("Cannot find dev.\n");
+		return 1;
+	}
+
+	mmc = find_mmc_device(dev);
+
+	if (!mmc)
+		return 1;
+
+	printf("MMC erase: dev # %d, start_erase_address(in block) # %#llx,\
+			several blocks  # %lld will be erased ...\n ",
+			dev, blk, cnt);
+
+	mmc_init(mmc);
+
+	if (cnt != 0)
+		n = blk_derase(mmc_get_blk_desc(mmc), blk, cnt);
+
+	printf("dev # %d, %s, several blocks erased %s\n",
+				dev, " ", (n == 0) ? "OK" : "ERROR");
+
+	return (n == 0) ? 0 : 1;
+}
+
+static int amlmmc_erase_in_card(int argc, char *const argv[])
+{
+	int dev = 0;
+	u64 cnt = 0, blk = 0, n = 0;
+	/*sz_byte =0;*/
+	char *name = NULL;
+	u64 offset_addr = 0, size = 0;
+	struct mmc *mmc;
+	int tmp_shift;
+
+	name = argv[2];
+	dev = find_dev_num_by_partition_name (name);
+	offset_addr = simple_strtoull(argv[3], NULL, 16);
+	size = simple_strtoull(argv[4], NULL, 16);
+	mmc = find_mmc_device(dev);
+
+	tmp_shift = ffs(mmc->read_bl_len) -1;
+	cnt = size >> tmp_shift;
+	blk = offset_addr >> tmp_shift;
+	/* sz_byte = size - (cnt<<tmp_shift); */
+
+	if (dev < 0) {
+		printf("Cannot find dev.\n");
+		return 1;
+	}
+
+	mmc = find_mmc_device(dev);
+
+	if (!mmc)
+		return 1;
+
+	printf("MMC erase: dev # %d, start_erase_address(in block) # %#llx,\
+			several blocks  # %lld will be erased ...\n ",
+			dev, blk, cnt);
+
+	mmc_init(mmc);
+
+	if (cnt != 0)
+		n = blk_derase(mmc_get_blk_desc(mmc), blk, cnt);
+
+	printf("dev # %d, %s, several blocks erased %s\n",
+				dev, argv[2], (n == 0) ? "OK" : "ERROR");
+
+	return (n == 0) ? 0 : 1;
+}
+
+static int amlmmc_erase_in_part(int argc, char *const argv[])
+{
+	int dev = 0;
+	u64 cnt = 0, blk = 0, n = 0, sz_byte =0;
+	char *name = NULL;
+	u64 offset_addr = 0, size = 0;
+	struct mmc *mmc;
+	struct partitions *part_info;
+
+	name = argv[2];
+	dev = find_dev_num_by_partition_name (name);
+	offset_addr = simple_strtoull(argv[3], NULL, 16);
+	size = simple_strtoull(argv[4], NULL, 16);
+	part_info = find_mmc_partition_by_name(name);
+	mmc = find_mmc_device(dev);
+
+	if (offset_addr >= part_info->size) {
+		printf("Start address out #%s# partition'address region,(addr_byte < 0x%llx)\n",
+						name, part_info->size);
+		return 1;
+	}
+	if ((offset_addr+size) > part_info->size) {
+		printf("End address exceeds #%s# partition,(offset = 0x%llx,size = 0x%llx)\n",
+						name, part_info->offset,part_info->size);
+		return 1;
+	}
+	get_off_size(mmc, name, offset_addr, size, &blk, &cnt, &sz_byte);
+
+	if (dev < 0) {
+		printf("Cannot find dev.\n");
+		return 1;
+	}
+
+
+	if (!mmc)
+		return 1;
+
+	printf("MMC erase: dev # %d, start_erase_address(in block) # %#llx,\
+			several blocks  # %lld will be erased ...\n ",
+			dev, blk, cnt);
+
+	mmc_init(mmc);
+
+	if (cnt != 0)
+		n = blk_derase(mmc_get_blk_desc(mmc), blk, cnt);
+
+	printf("dev # %d, %s, several blocks erased %s\n",
+				dev, argv[2], (n == 0) ? "OK" : "ERROR");
+	return (n == 0) ? 0 : 1;
+}
+
+static int amlmmc_erase_by_add(int argc, char *const argv[])
+{
+	int ret = 0;
+
+	if (argc != 5)
+		return CMD_RET_USAGE;
+
+	if (isdigit(argv[2][0]))
+		ret = amlmmc_erase_in_dev(argc, argv);
+	else if (strcmp(argv[2], "card") == 0)
+		ret = amlmmc_erase_in_card(argc, argv);
+	else if (isstring(argv[2]))
+		ret = amlmmc_erase_in_part(argc, argv);
+
+	return ret;
+}
+
+static int amlmmc_erase_non_loader(int argc, char *const argv[])
+{
+	int dev;
+	u32 n = 0;
+	int blk_shift;
+	u64 blk = 0, start_blk = 0;
+	struct partitions *part_info;
+	struct mmc *mmc;
+
+	dev = 1;
+	if (dev < 0) {
+		printf("Cannot find dev.\n");
+		return 1;
+	}
+	mmc = find_mmc_device(dev);
+
+	if (!mmc)
+		return 1;
+
+	mmc_init(mmc);
+
+	blk_shift = ffs(mmc->read_bl_len) -1;
+	part_info = find_mmc_partition_by_name(MMC_BOOT_NAME);
+
+	if (part_info == NULL) {
+		start_blk = 0;
+		printf("no uboot partition for eMMC boot, just erase from 0\n");
+	}
+	else
+		start_blk = (part_info->offset + part_info->size) >> blk_shift;
+
+	if (emmckey_is_protected(mmc)) {
+		part_info = find_mmc_partition_by_name(MMC_RESERVED_NAME);
+		if (part_info == NULL) {
+			return 1;
+		}
+		blk = part_info->offset;
+		// it means: there should be other partitions before reserve-partition.
+		if (blk > 0)
+			blk -= PARTITION_RESERVED;
+		blk >>= blk_shift;
+		blk -= start_blk;
+		// (1) erase all the area before reserve-partition
+		if (blk > 0)
+			n = blk_derase(mmc_get_blk_desc(mmc), start_blk, blk);
+		if (n == 0) { // not error
+			// (2) erase all the area after reserve-partition
+			start_blk = (part_info->offset + part_info->size + PARTITION_RESERVED)
+						 >> blk_shift;
+			u64 erase_cnt = (mmc->capacity >> blk_shift) - start_blk;
+			n = blk_derase(mmc_get_blk_desc(mmc), start_blk, erase_cnt);
+		}
+	} else {
+		n = blk_derase(mmc_get_blk_desc(mmc), start_blk, 0); // erase the whole card
+	}
+	return (n == 0) ? 0 : 1;
+}
+
+static int amlmmc_erase_single_part(int argc, char *const argv[])
+{
+	char *name = NULL;
+	int dev;
+	u32 n = 0;
+	int blk_shift;
+	u64 cnt = 0, blk = 0;
+	struct partitions *part_info;
+	struct mmc *mmc;
+	name = argv[2];
+	dev = find_dev_num_by_partition_name(name);
+	if (dev < 0) {
+		printf("Cannot find dev.\n");
+		return 1;
+	}
+	mmc = find_mmc_device(dev);
+
+	if (!mmc)
+		return 1;
+
+	mmc_init(mmc);
+
+	blk_shift = ffs(mmc->read_bl_len) -1;
+	if (emmckey_is_protected(mmc)
+		&& (strncmp(name, MMC_RESERVED_NAME, sizeof(MMC_RESERVED_NAME)) == 0x00)) {
+		printf("\"%s-partition\" is been protecting and should no be erased!\n",
+				MMC_RESERVED_NAME);
+		return 1;
+	}
+
+	part_info = find_mmc_partition_by_name(name);
+	if (part_info == NULL) {
+		return 1;
+	}
+
+	blk = part_info->offset >> blk_shift;
+	if (emmc_cur_partition && !strncmp(name, "bootloader", strlen("bootloader")))
+		cnt = 0;
+	else
+	cnt = part_info->size >> blk_shift;
+	n = blk_derase(mmc_get_blk_desc(mmc), blk, cnt);
+
+	return (n == 0) ? 0 : 1;
+}
+
+static int amlmmc_erase_whole(int argc, char *const argv[])
+{
+	char *name = NULL;
+	int dev;
+	u32 n = 0;
+	int blk_shift;
+	//u64 cnt = 0,
+	u64 blk = 0, start_blk = 0;
+	struct partitions *part_info;
+	struct mmc *mmc;
+	int map;
+
+	name = "logo";
+	dev = find_dev_num_by_partition_name(name);
+	if (dev < 0) {
+		printf("Cannot find dev.\n");
+		return 1;
+	}
+	mmc = find_mmc_device(dev);
+	if (!mmc)
+		return 1;
+	mmc_init(mmc);
+	blk_shift = ffs(mmc->read_bl_len) -1;
+	start_blk = 0;
+
+	if (emmckey_is_protected(mmc)) {
+		part_info = find_mmc_partition_by_name(MMC_RESERVED_NAME);
+		if (part_info == NULL) {
+			return 1;
+		}
+		blk = part_info->offset;
+		// it means: there should be other partitions before reserve-partition.
+		if (blk > 0)
+			blk -= PARTITION_RESERVED;
+		blk >>= blk_shift;
+		blk -= start_blk;
+		// (1) erase all the area before reserve-partition
+		if (blk > 0)
+			n = blk_derase(mmc_get_blk_desc(mmc), start_blk, blk);
+		if (n == 0) { // not error
+			// (2) erase all the area after reserve-partition
+			start_blk = (part_info->offset + part_info->size + PARTITION_RESERVED)
+						 >> blk_shift;
+			u64 erase_cnt = (mmc->capacity >> blk_shift) - start_blk;
+			n = blk_derase(mmc_get_blk_desc(mmc), start_blk, erase_cnt);
+		}
+	} else {
+		n = blk_derase(mmc_get_blk_desc(mmc), start_blk, 0); // erase the whole card
+	}
+	map = AML_BL_BOOT;
+	if (n == 0)
+		n = amlmmc_erase_bootloader(dev, map);
+	if (n)
+		printf("erase bootloader in boot partition failed\n");
+	return (n == 0) ? 0 : 1;
+}
+
+static int amlmmc_erase_non_cache(int arc, char *const argv[])
+{
+	char *name = NULL;
+	int dev;
+	u32 n = 0;
+	int blk_shift;
+	u64 blk = 0, start_blk = 0;
+	struct partitions *part_info;
+	struct mmc *mmc;
+	int map;
+
+	name = "logo";
+	dev = find_dev_num_by_partition_name(name);
+	if (dev < 0) {
+		 printf("Cannot find dev.\n");
+		 return 1;
+	 }
+	 mmc = find_mmc_device(dev);
+	 if (!mmc)
+		 return 1;
+	 mmc_init(mmc);
+	 blk_shift = ffs(mmc->read_bl_len) -1;
+	 if (emmckey_is_protected(mmc)) {
+		 part_info = find_mmc_partition_by_name(MMC_RESERVED_NAME);
+		 if (part_info == NULL) {
+			 return 1;
+		 }
+
+		 blk = part_info->offset;
+		 // it means: there should be other partitions before reserve-partition.
+		if (blk > 0) {
+			blk -= PARTITION_RESERVED;
+		 }
+		 blk >>= blk_shift;
+		 blk -= start_blk;
+		 // (1) erase all the area before reserve-partition
+		 if (blk > 0) {
+			 n = blk_derase(mmc_get_blk_desc(mmc), start_blk, blk);
+			 // printf("(1) erase blk: 0 --> %llx %s\n", blk, (n == 0) ? "OK" : "ERROR");
+		 }
+		 if (n == 0) { // not error
+			 // (2) erase all the area after reserve-partition
+			 part_info = find_mmc_partition_by_name(MMC_CACHE_NAME);
+			 if (part_info == NULL) {
+				 return 1;
+			 }
+			 start_blk = (part_info->offset + part_info->size + PARTITION_RESERVED)
+						  >> blk_shift;
+			 u64 erase_cnt = (mmc->capacity >> blk_shift) - start_blk;
+			 n = blk_derase(mmc_get_blk_desc(mmc), start_blk, erase_cnt);
+		 }
+	 } else {
+		 n = blk_derase(mmc_get_blk_desc(mmc), start_blk, 0); // erase the whole card
+	 }
+	 map = AML_BL_BOOT;
+	 if (n == 0) {
+		 n = amlmmc_erase_bootloader(dev, map);
+		 if (n)
+			 printf("erase bootloader in boot partition failed\n");
+	 }
+	 return (n == 0) ? 0 : 1;
+}
+
+static int amlmmc_erase_dev(int argc, char *const argv[])
+{
+	return amlmmc_erase_whole(argc, argv);
+}
+
+static int amlmmc_erase_allbootloader(int argc, char*const argv[])
+{
+	int map;
+	int rc;
+	char *name = NULL;
+	int dev;
+	map = AML_BL_ALL;
+
+	name = "bootloader";
+	dev = find_dev_num_by_partition_name(name);
+
+	if (dev < 0) {
+		printf("Cannot find dev.\n");
+		return 1;
+	}
+
+	rc = amlmmc_erase_bootloader(dev, map);
+	return rc;
+}
+
+static int amlmmc_erase_by_part(int argc, char *const argv[])
+{
+	int ret = CMD_RET_USAGE;
+
+	if (argc != 3)
+		return ret;
+
+	if (isdigit(argv[2][0]))
+		ret = amlmmc_erase_dev(argc, argv);
+	else if (strcmp(argv[2], "whole") == 0)
+		ret = amlmmc_erase_whole(argc, argv);
+	else if (strcmp(argv[2], "non_cache") == 0)
+		ret = amlmmc_erase_non_cache(argc, argv);
+	else if (strcmp(argv[2], "non_loader") == 0)
+		ret = amlmmc_erase_non_loader(argc, argv);
+	else if (strcmp(argv[2], "allbootloader") == 0)
+		ret = amlmmc_erase_allbootloader(argc, argv);
+	else
+		ret = amlmmc_erase_single_part(argc, argv);
+	return ret;
+}
+
+static int do_amlmmc_erase(struct cmd_tbl *cmdtp, int flag, int argc, char *const argv[])
+{
+	int ret = CMD_RET_USAGE;
+
+	if (argc == 3)
+		ret = amlmmc_erase_by_part(argc, argv);
+	else if (argc == 5)
+		ret = amlmmc_erase_by_add(argc, argv);
+
+	return ret;
+}
+
+static int amlmmc_write_in_part(int argc, char *const argv[])
+{
+	int dev;
+	void *addr = NULL;
+	u64 cnt = 0, n = 0, blk = 0, sz_byte = 0;
+	char *name = NULL;
+	u64 offset = 0, size = 0;
+	//cpu_id_t cpu_id = get_cpu_id();
+	struct mmc *mmc;
+
+	name = argv[2];
+	if (strcmp(name, "bootloader") == 0)
+		dev = CONFIG_SYS_MMC_BOOT_DEV;
+	else
+		dev = find_dev_num_by_partition_name (name);
+	addr = (void *)simple_strtoul(argv[3], NULL, 16);
+	offset  = simple_strtoull(argv[4], NULL, 16);
+	size = simple_strtoull(argv[5], NULL, 16);
+	if (dev < 0) {
+		printf("Cannot find dev.\n");
+		return 1;
+	}
+	mmc = find_mmc_device(dev);
+	if (!mmc)
+		return 1;
+
+	if (strcmp(name, "bootloader") == 0) {
+		cnt = UBOOT_SIZE;
+		if (1) { //(cpu_id.family_id >= MESON_CPU_MAJOR_ID_GXL) {
+			blk = GXL_START_BLK;
+			cnt -= GXL_START_BLK;
+		}
+		else
+			blk = GXB_START_BLK;
+	} else
+		get_off_size(mmc, name, offset, size, &blk, &cnt, &sz_byte);
+
+	mmc_init(mmc);
+	n = blk_dwrite(mmc_get_blk_desc(mmc), blk, cnt, addr);
+	//write sz_byte bytes
+	if ((n == cnt) && (sz_byte != 0)) {
+		// printf("sz_byte=%#llx bytes\n",sz_byte);
+		void *addr_tmp = malloc(mmc->write_bl_len);
+		void *addr_byte = (void*)(addr+cnt*(mmc->write_bl_len));
+		ulong start_blk = blk+cnt;
+
+		if (addr_tmp == NULL) {
+			printf("mmc write: malloc fail\n");
+			return 1;
+		}
+
+		if (blk_dread(mmc_get_blk_desc(mmc), start_blk, 1, addr_tmp) != 1) { // read 1 block
+			free(addr_tmp);
+			printf("mmc read 1 block fail\n");
+			return 1;
+		}
+
+		memcpy(addr_tmp, addr_byte, sz_byte);
+		if (blk_dwrite(mmc_get_blk_desc(mmc), start_blk, 1, addr_tmp) != 1) { // write 1 block
+			free(addr_tmp);
+			printf("mmc write 1 block fail\n");
+			return 1;
+		}
+		free(addr_tmp);
+	}
+	//printf("%#llx blocks , %#llx bytes written: %s\n", n, sz_byte, (n==cnt) ? "OK" : "ERROR");
+	return (n == cnt) ? 0 : 1;
+}
+
+static int amlmmc_write_in_card(int argc, char *const argv[])
+{
+	int dev;
+	void *addr = NULL;
+	u64 cnt = 0, n = 0, blk = 0, sz_byte = 0;
+	char *name = NULL;
+	u64 offset = 0, size = 0;
+	struct mmc *mmc;
+
+	name = argv[2];
+	dev = find_dev_num_by_partition_name (name);
+	addr = (void *)simple_strtoul(argv[3], NULL, 16);
+	offset  = simple_strtoull(argv[4], NULL, 16);
+	size = simple_strtoull(argv[5], NULL, 16);
+	if (dev < 0) {
+		printf("Cannot find dev.\n");
+		return 1;
+	}
+	mmc = find_mmc_device(dev);
+	if (!mmc)
+		return 1;
+
+	int blk_shift = ffs( mmc->read_bl_len) -1;
+	cnt = size >> blk_shift;
+	blk = offset >> blk_shift;
+	sz_byte = size - (cnt<<blk_shift);
+	 mmc_init(mmc);
+
+	n = blk_dwrite(mmc_get_blk_desc(mmc), blk, cnt, addr);
+
+	//write sz_byte bytes
+	if ((n == cnt) && (sz_byte != 0)) {
+		// printf("sz_byte=%#llx bytes\n",sz_byte);
+		void *addr_tmp = malloc(mmc->write_bl_len);
+		void *addr_byte = (void*)(addr+cnt*(mmc->write_bl_len));
+		ulong start_blk = blk+cnt;
+
+		if (addr_tmp == NULL) {
+			printf("mmc write: malloc fail\n");
+			return 1;
+		}
+
+		if (blk_dread(mmc_get_blk_desc(mmc), start_blk, 1, addr_tmp) != 1) { // read 1 block
+			free(addr_tmp);
+			printf("mmc read 1 block fail\n");
+			return 1;
+		}
+
+		memcpy(addr_tmp, addr_byte, sz_byte);
+		if (blk_dwrite(mmc_get_blk_desc(mmc), start_blk, 1, addr_tmp) != 1) { // write 1 block
+			free(addr_tmp);
+			printf("mmc write 1 block fail\n");
+			return 1;
+		}
+		free(addr_tmp);
+	}
+	//printf("%#llx blocks , %#llx bytes written: %s\n", n, sz_byte, (n==cnt) ? "OK" : "ERROR");
+	return (n == cnt) ? 0 : 1;
+}
+
+static int amlmmc_write_in_dev(int argc, char *const argv[])
+{
+	int dev;
+	void *addr = NULL;
+	u64 cnt = 0, n = 0, blk = 0;
+	struct mmc *mmc;
+	dev = simple_strtoul(argv[2], NULL, 10);
+	addr = (void *)simple_strtoul(argv[3], NULL, 16);
+	blk = simple_strtoull(argv[4], NULL, 16);
+	cnt = simple_strtoull(argv[5], NULL, 16);
+	if (dev < 0) {
+		printf("Cannot find dev.\n");
+		return 1;
+	}
+	mmc = find_mmc_device(dev);
+	if (!mmc)
+		return 1;
+
+	 //printf("MMC write: dev # %d, block # %#llx, count # %#llx ... ",
+	 //dev, blk, cnt);
+
+	mmc_init(mmc);
+
+	n = blk_dwrite(mmc_get_blk_desc(mmc), blk, cnt, addr);
+	return (n == cnt) ? 0 : 1;
+}
+
+static int do_amlmmc_write(struct cmd_tbl *cmdtp, int flag, int argc, char *const argv[])
+{
+	int ret = 0;
+	if (argc != 6)
+		return CMD_RET_USAGE;
+
+	if (isdigit(argv[2][0]))
+		ret = amlmmc_write_in_dev(argc, argv);
+	else if (strcmp(argv[2], "card") == 0)
+		ret = amlmmc_write_in_card(argc, argv);
+	else if (isstring(argv[2]))
+		ret = amlmmc_write_in_part(argc, argv);
+
+	return ret;
+}
+
+static int amlmmc_read_in_dev(int argc, char *const argv[])
+{
+	int dev;
+	void *addr = NULL;
+	u64 cnt =0, n = 0, blk = 0;
+	struct mmc *mmc;
+
+	dev = simple_strtoul(argv[2], NULL, 10);
+	addr = (void *)simple_strtoul(argv[3], NULL, 16);
+	blk = simple_strtoull(argv[4], NULL, 16);
+	cnt = simple_strtoull(argv[5], NULL, 16);
+
+	if (dev < 0) {
+		printf("Cannot find dev.\n");
+		return 1;
+	}
+
+	mmc = find_mmc_device(dev);
+	if (!mmc)
+		return 1;
+	n = blk_dread(mmc_get_blk_desc(mmc), blk, cnt, addr);
+	return (n == cnt) ? 0 : 1;
+}
+
+static int amlmmc_read_in_card(int argc, char *const argv[])
+{
+	int dev;
+	void *addr = NULL;
+	//u32 flag =0;
+	u64 cnt =0, n = 0, blk = 0, sz_byte = 0;
+	char *name = NULL;
+	u64 offset = 0, size = 0;
+	int blk_shift;
+	struct mmc *mmc;
+	void *addr_tmp;
+	void *addr_byte;
+	ulong start_blk;
+
+	name = argv[2];
+	dev = find_dev_num_by_partition_name (name);
+	addr = (void *)simple_strtoul(argv[3], NULL, 16);
+	size = simple_strtoull(argv[5], NULL, 16);
+	offset = simple_strtoull(argv[4], NULL, 16);
+
+	if (dev < 0) {
+		printf("Cannot find dev.\n");
+		return 1;
+	}
+
+	mmc = find_mmc_device(dev);
+	if (!mmc)
+		return 1;
+
+	blk_shift = ffs( mmc->read_bl_len) - 1;
+	cnt = size >> blk_shift;
+	blk = offset >> blk_shift;
+	sz_byte = size - (cnt<<blk_shift);
+
+	mmc_init(mmc);
+	n = blk_dread(mmc_get_blk_desc(mmc), blk, cnt, addr);
+
+	//read sz_byte bytes
+	if ((n == cnt) && (sz_byte != 0)) {
+	   addr_tmp = malloc(mmc->read_bl_len);
+	   addr_byte = (void *)(addr+cnt*(mmc->read_bl_len));
+	   start_blk = blk+cnt;
+	   if (addr_tmp == NULL) {
+		   printf("mmc read: malloc fail\n");
+		   return 1;
+	   }
+	   if (blk_dread(mmc_get_blk_desc(mmc), start_blk, 1, addr_tmp) != 1) { // read 1 block
+		   free(addr_tmp);
+		   printf("mmc read 1 block fail\n");
+		   return 1;
+	   }
+	   memcpy(addr_byte, addr_tmp, sz_byte);
+	   free(addr_tmp);
+	}
+	return (n == cnt) ? 0 : 1;
+}
+
+static int amlmmc_read_in_part(int argc, char *const argv[])
+{
+	int dev;
+	void *addr = NULL;
+	u64 cnt = 0, n = 0, blk = 0, sz_byte = 0;
+	char *name = NULL;
+	u64 offset = 0, size = 0;
+	struct mmc *mmc;
+	void *addr_tmp;
+	void *addr_byte;
+	ulong start_blk;
+
+	name = argv[2];
+	dev = find_dev_num_by_partition_name (name);
+	addr = (void *)simple_strtoul(argv[3], NULL, 16);
+	offset = simple_strtoull(argv[4], NULL, 16);
+	size = simple_strtoull(argv[5], NULL, 16);
+
+	if (dev < 0) {
+		printf("Cannot find dev.\n");
+		return 1;
+	}
+
+	mmc = find_mmc_device(dev);
+	if (!mmc)
+		return 1;
+
+	get_off_size(mmc, name, offset, size, &blk, &cnt, &sz_byte);
+	mmc_init(mmc);
+	n = blk_dread(mmc_get_blk_desc(mmc), blk, cnt, addr);
+
+	//read sz_byte bytes
+	if ((n == cnt) && (sz_byte != 0)) {
+	   /*printf("sz_byte=%#llx bytes\n",sz_byte);*/
+	   addr_tmp = malloc(mmc->read_bl_len);
+	   addr_byte = (void *)(addr+cnt*(mmc->read_bl_len));
+	   start_blk = blk+cnt;
+
+	   if (addr_tmp == NULL) {
+		   printf("mmc read: malloc fail\n");
+		   return 1;
+	   }
+
+	   if (blk_dread(mmc_get_blk_desc(mmc), start_blk, 1, addr_tmp) != 1) { // read 1 block
+		   free(addr_tmp);
+		   printf("mmc read 1 block fail\n");
+		   return 1;
+	   }
+
+	   memcpy(addr_byte, addr_tmp, sz_byte);
+	   free(addr_tmp);
+	}
+	return (n == cnt) ? 0 : 1;
+}
+
+static int do_amlmmc_read(struct cmd_tbl *cmdtp, int flag, int argc, char *const argv[])
+{
+	int ret = 0;
+	if (argc != 6)
+		return CMD_RET_USAGE;
+
+	if (isdigit(argv[2][0]))
+		ret = amlmmc_read_in_dev(argc, argv);
+	else if (strcmp(argv[2], "card") == 0)
+		ret = amlmmc_read_in_card(argc, argv);
+	else if (isstring(argv[2]))
+		ret = amlmmc_read_in_part(argc, argv);
+
+	return ret;
+}
+
+static int do_amlmmc_env(struct cmd_tbl *cmdtp, int flag, int argc, char *const argv[])
+{
+	printf("herh\n");
+	env_relocate();
+	return 0;
+}
+
+static int do_amlmmc_list(struct cmd_tbl *cmdtp, int flag, int argc, char *const argv[])
+{
+	print_mmc_devices('\n');
+	return 0;
+}
+
+static int do_amlmmc_size(struct cmd_tbl *cmdtp, int flag, int argc, char *const argv[])
+{
+	char *name;
+	uint64_t* addr = NULL;
+	int dev;
+	struct mmc *mmc = NULL;
+
+	if (argc != 4)
+		return CMD_RET_USAGE;
+
+	name = argv[2];
+	addr = (uint64_t *)simple_strtoul(argv[3], NULL, 16);
+	if (!strcmp(name, "wholeDev")) {
+		dev = CONFIG_SYS_MMC_BOOT_DEV;
+		mmc = find_mmc_device(dev);
+		if (!mmc) {
+			puts("no mmc devices available\n");
+			return 1;
+		}
+		mmc_init(mmc);
+
+		*addr = mmc->capacity >> 9; // unit: 512 bytes
+		return 0;
+	}
+	return get_partition_size((unsigned char *)name, addr);
+}
+
+static int amlmmc_get_ext_csd(int argc, char *const argv[])
+{
+	int ret= 0;
+	u8 ext_csd[512] = {0};
+	int dev, byte;
+	struct mmc *mmc;
+
+	if (argc != 4)
+		return CMD_RET_USAGE;
+
+	dev = simple_strtoul(argv[2], NULL, 10);
+	byte = simple_strtoul(argv[3], NULL, 10);
+	mmc = find_mmc_device(dev);
+
+	if (!mmc) {
+		puts("no mmc devices available\n");
+		return 1;
+	}
+	mmc_init(mmc);
+	ret = mmc_get_ext_csd(mmc, ext_csd);
+	printf("read EXT_CSD byte[%d] val[0x%x] %s\n",
+			byte, ext_csd[byte], (ret == 0) ? "ok" : "fail");
+	ret = ret || ret;
+	return ret;
+}
+
+static int amlmmc_set_ext_csd(int argc, char *const argv[])
+{
+	int ret = 0;
+	int dev, byte;
+	struct mmc *mmc;
+	int val;
+
+	if (argc != 5)
+		return CMD_RET_USAGE;
+
+	dev = simple_strtoul(argv[2], NULL, 10);
+	byte = simple_strtoul(argv[3], NULL, 10);
+	val = simple_strtoul(argv[4], NULL, 16);
+	if ((byte > 191) || (byte < 0)) {
+		printf("byte is not able to write!\n");
+		return 1;
+	}
+
+	mmc = find_mmc_device(dev);
+
+	if (!mmc) {
+		puts("no mmc devices available\n");
+		return 1;
+	}
+
+	mmc_init(mmc);
+
+	ret = mmc_set_ext_csd(mmc, byte, val);
+	printf("write EXT_CSD byte[%d] val[0x%x] %s\n",
+			byte, val, (ret == 0) ? "ok" : "fail");
+	ret =ret || ret;
+	return ret;
+}
+
+static int do_amlmmc_ext_csd(struct cmd_tbl *cmdtp, int flag, int argc, char *const argv[])
+{
+	int ret = CMD_RET_USAGE;
+
+	if (argc == 4)
+		ret = amlmmc_get_ext_csd(argc,argv);
+	else if (argc == 5)
+		ret = amlmmc_set_ext_csd(argc,argv);
+
+	return ret;
+}
+
+static int do_amlmmc_switch(struct cmd_tbl *cmdtp, int flag, int argc, char *const argv[])
+{
+	int rc = 0;
+	int dev;
+	struct mmc *mmc;
+
+	if (argc != 4)
+		return CMD_RET_USAGE;
+
+	dev = simple_strtoul(argv[2], NULL, 10);
+	mmc = find_mmc_device(dev);
+
+	if (!mmc) {
+		puts("no mmc devices available\n");
+		return 1;
+	}
+
+	mmc_init(mmc);
+	printf("mmc switch to ");
+
+	if (strcmp(argv[3], "boot0") == 0) {
+		rc = mmc_switch_part(mmc, 1);
+		if (rc == 0) {
+			emmc_cur_partition = 1;
+			printf("boot0 success\n");
+		} else {
+			printf("boot0 failed\n");
+		}
+	}
+	else if(strcmp(argv[3], "boot1") == 0) {
+		rc = mmc_switch_part(mmc, 2);
+		if (rc == 0) {
+			emmc_cur_partition = 2;
+			printf("boot1 success\n");
+		} else {
+			printf("boot1 failed\n");
+		}
+	}
+	else if(strcmp(argv[3], "user") == 0) {
+		rc = mmc_switch_part(mmc, 0);
+		if (rc == 0) {
+			emmc_cur_partition = 0;
+			printf("user success\n");
+		} else {
+			printf("user failed\n");
+	   }
+	}
+#ifdef CONFIG_SUPPORT_EMMC_RPMB
+	else if(strcmp(argv[3], "rpmb") == 0) {
+		rc = mmc_switch_part(mmc, 3);
+		if (rc == 0) {
+			emmc_cur_partition = 3;
+			printf("rpmb success\n");
+		} else {
+			printf("rpmb failed\n");
+		}
+	}
+#endif
+	else
+		printf("%s failed\n", argv[3]);
+	return rc;
+}
+
+static int do_amlmmc_controller(struct cmd_tbl *cmdtp, int flag, int argc, char *const argv[])
+{
+	/*int dev;
+	struct mmc *mmc;
+	struct aml_card_sd_info *aml_priv;
+	struct sd_emmc_global_regs *sd_emmc_reg;
+
+	if (argc != 3)
+		return CMD_RET_USAGE;
+
+	dev = simple_strtoul(argv[2], NULL, 10);
+
+	if (dev < 0) {
+		printf("Cannot find dev.\n");
+		return 1;
+	}
+
+	mmc = find_mmc_device(dev);
+
+	if (!mmc)
+		return 1;
+
+	aml_priv = mmc->priv;
+	sd_emmc_reg = aml_priv->sd_emmc_reg;
+
+	printf("sd_emmc_reg->gclock = 0x%x\n", sd_emmc_reg->gclock);
+	printf("sd_emmc_reg->gdelay = 0x%x\n", sd_emmc_reg->gdelay);
+	printf("sd_emmc_reg->gadjust = 0x%x\n", sd_emmc_reg->gadjust);
+	printf("sd_emmc_reg->gcalout = 0x%x\n", sd_emmc_reg->gcalout);
+	if (!mmc->has_init) {
+		printf("mmc dev %d has not been initialed\n", dev);
+		return 1;
+	}
+	printf("sd_emmc_reg->gstart = 0x%x\n", sd_emmc_reg->gstart);
+	printf("sd_emmc_reg->gcfg = 0x%x\n", sd_emmc_reg->gcfg);
+	printf("sd_emmc_reg->gstatus = 0x%x\n", sd_emmc_reg->gstatus);
+	printf("sd_emmc_reg->girq_en = 0x%x\n", sd_emmc_reg->girq_en);
+	printf("sd_emmc_reg->gcmd_cfg = 0x%x\n", sd_emmc_reg->gcmd_cfg);
+	printf("sd_emmc_reg->gcmd_arg = 0x%x\n", sd_emmc_reg->gcmd_arg);
+	printf("sd_emmc_reg->gcmd_dat = 0x%x\n", sd_emmc_reg->gcmd_dat);
+	printf("sd_emmc_reg->gcmd_rsp0 = 0x%x\n", sd_emmc_reg->gcmd_rsp0);
+	printf("sd_emmc_reg->gcmd_rsp1 = 0x%x\n", sd_emmc_reg->gcmd_rsp1);
+	printf("sd_emmc_reg->gcmd_rsp2 = 0x%x\n", sd_emmc_reg->gcmd_rsp2);
+	printf("sd_emmc_reg->gcmd_rsp3 = 0x%x\n", sd_emmc_reg->gcmd_rsp3);*/
+	return 0;
+}
+
+static int do_amlmmc_response(struct cmd_tbl *cmdtp, int flag, int argc, char *const argv[])
+{
+	/*int dev;
+	struct mmc *mmc;
+	struct aml_card_sd_info *aml_priv;
+	struct sd_emmc_global_regs *sd_emmc_reg;
+
+	if (argc != 3)
+		return CMD_RET_USAGE;
+
+	dev = simple_strtoul(argv[2], NULL, 10);
+
+	if (dev < 0) {
+		printf("Cannot find dev.\n");
+		return 1;
+	}
+
+	mmc = find_mmc_device(dev);
+
+	if (!mmc)
+		return 1;
+	if (!mmc->has_init) {
+		printf("mmc dev %d has not been initialed\n", dev);
+		return 1;
+	}
+
+	aml_priv = mmc->priv;
+	sd_emmc_reg = aml_priv->sd_emmc_reg;
+
+	printf("last cmd = %d, response0 = 0x%x\n",
+		(sd_emmc_reg->gcmd_cfg & 0x3f), sd_emmc_reg->gcmd_rsp0);*/
+	return 0;
+}
+
+static int do_amlmmc_status(struct cmd_tbl *cmdtp, int flag, int argc, char *const argv[])
+{
+	int rc = 0;
+	int dev;
+	struct mmc *mmc;
+
+	if (argc != 3)
+		return CMD_RET_USAGE;
+
+	dev = simple_strtoul(argv[2], NULL, 10);
+
+	if (dev < 0) {
+		printf("Cannot find dev.\n");
+		return 1;
+	}
+	mmc = find_mmc_device(dev);
+
+	if (!mmc)
+		return 1;
+	if (!mmc->has_init) {
+		printf("mmc dev %d has not been initialed\n", dev);
+		return 1;
+	}
+	rc = mmc_read_status(mmc, 1000);
+	if (rc)
+		return 1;
+	else
+		return 0;
+}
+
+static int do_amlmmc_part(struct cmd_tbl *cmdtp, int flag, int argc, char * const argv[])
+{
+	int dev;
+	struct blk_desc *mmc_dev;
+	struct mmc *mmc;
+
+	if (argc != 3)
+		return CMD_RET_USAGE;
+
+	dev = simple_strtoul(argv[2], NULL, 10);
+	mmc = find_mmc_device(dev);
+
+	if (!mmc) {
+		puts("no mmc devices available\n");
+		return 1;
+	}
+	mmc_init(mmc);
+	mmc_dev = mmc_get_blk_desc(mmc);
+	if (mmc_dev != NULL &&
+		mmc_dev->type != DEV_TYPE_UNKNOWN) {
+		part_print(mmc_dev);
+		return 0;
+	}
+	puts("get mmc type error!\n");
+	return 1;
+}
+
+static int do_amlmmc_rescan(struct cmd_tbl *cmdtp, int flag, int argc, char * const argv[])
+{
+	int dev;
+	struct mmc *mmc;
+
+	if (argc != 3)
+		return CMD_RET_USAGE;
+
+	dev = simple_strtoul(argv[2], NULL, 10);
+
+	if (dev < 0) {
+		printf("Cannot find dev.\n");
+		return 1;
+	}
+
+	mmc = find_mmc_device(dev);
+
+	if (!mmc)
+			return 1;
+	mmc->has_init =0;
+	return mmc_init(mmc);
+}
+
+#ifdef CONFIG_SECURITYKEY
+static int do_amlmmc_key(struct cmd_tbl *cmdtp, int flag, int argc, char *const argv[])
+{
+	struct mmc *mmc;
+	int dev;
+
+	//char *name = "logo";
+	dev = CONFIG_SYS_MMC_BOOT_DEV;
+	mmc = find_mmc_device(dev);
+	if (!mmc) {
+		printf("device %d is invalid\n",dev);
+		return 1;
+	}
+	//mmc->key_protect = 0;
+#ifdef CONFIG_STORE_COMPATIBLE
+	info_disprotect |= DISPROTECT_KEY;  //disprotect
+	printf("emmc disprotect key\n");
+#endif
+	return 0;
+}
+#endif
+
+static int set_write_prot(struct mmc *mmc, u64 start)
+{
+	struct mmc_cmd cmd;
+	int err;
+
+	cmd.cmdidx = MMC_CMD_SET_WRITE_PROTECT;
+	cmd.cmdarg = start;
+	cmd.resp_type = MMC_RSP_R1b;
+
+	err = mmc_send_cmd(mmc, &cmd, NULL);
+	if (err)
+		goto err_out;
+
+	return 0;
+
+err_out:
+	puts("Failed: mmc write protect failed\n");
+	return err;
+}
+
+static int set_us_wp_en(struct mmc *mmc, u8 *ext_csd, u8 wp_enable_type)
+{
+	u8 index = EXT_CSD_USER_WP;
+	u8 user_wp = ext_csd[index];
+	user_wp = user_wp & (~WP_ENABLE_MASK);
+	user_wp = user_wp | wp_enable_type;
+	int err = 0;
+	err = mmc_set_ext_csd(mmc, index, user_wp);
+	if (err)
+		printf("Failed: set write protect enable failed\n");
+	return err;
+}
+
+static int mmc_set_us_perm_wp_dis(struct mmc *mmc, u8 *ext_csd)
+{
+	u8 usr_wp = ext_csd[EXT_CSD_USER_WP];
+	u8 perm_disable_bit = US_PERM_WP_DIS_BIT;
+
+	int err;
+	if (usr_wp & perm_disable_bit)
+		return 0;
+
+	usr_wp = usr_wp | perm_disable_bit;
+	err = mmc_set_ext_csd(mmc, EXT_CSD_USER_WP, usr_wp);
+	if (err) {
+		printf("Failed: set permanent write protect disable failed\n");
+		return 1;
+	}
+	return 0;
+}
+
+static int mmc_is_us_pwr_wp_dis(u8 user_wp)
+{
+   return user_wp & US_PWR_WP_DIS_BIT;
+}
+
+static int mmc_is_us_perm_wp_dis(u8 user_wp)
+{
+   return user_wp & US_PERM_WP_DIS_BIT;
+}
+
+static int check_wp_type(u8 *addr, u8 wp_type, u64 set_protect_cnt)
+{
+	u8 type_mask = WP_TYPE_MASK;
+	u64 cnt = set_protect_cnt;
+	u8 times = 0;
+	u8 index = 7;
+	u8 cur_group_wp_type = addr[index];
+
+	while (cnt != 0) {
+		if (wp_type != ((type_mask)&(cur_group_wp_type))) {
+			return 1;
+		}
+		if (times == 3) {
+			times = 0;
+			index--;
+			cur_group_wp_type = addr[index];
+		}
+		else {
+			cur_group_wp_type = cur_group_wp_type >> 2;
+			times++;
+		}
+		cnt--;
+	}
+	return 0;
+}
+
+static int set_register_to_temporary(struct mmc *mmc, u8 *ext_csd)
+{
+	int err;
+	u8 wp_enable_type = WP_TEMPORARY_EN_BIT;
+	err = set_us_wp_en(mmc, ext_csd, wp_enable_type);
+	if (err)
+		printf("Failed: set temporary write protect failed\n");
+	return err;
+}
+
+static int set_register_to_pwr(struct mmc *mmc, u8 *ext_csd)
+{
+	int err;
+	u8 user_wp = ext_csd[EXT_CSD_USER_WP];
+	u8 wp_enable_type = WP_POWER_ON_EN_BIT;
+	if (mmc_is_us_pwr_wp_dis(user_wp)) {
+		printf("Failed: power on protection had been disabled\n");
+		return 1;
+	}
+
+	err = mmc_set_us_perm_wp_dis(mmc, ext_csd);
+	if (err) {
+		printf("Failed: set permanent protection diable failed\n");
+		return 1;
+	}
+
+	err = set_us_wp_en(mmc, ext_csd, wp_enable_type);
+	if (err) {
+		printf("Failed: set power on write protect enable failed\n");
+		return 1;
+	}
+	return 0;
+}
+
+static int set_register_to_perm(struct mmc *mmc, u8 *ext_csd)
+{
+	int err;
+	u8 wp_enable_type = WP_PERM_EN_BIT;
+	u8 user_wp = ext_csd[EXT_CSD_USER_WP];
+
+	if (mmc_is_us_perm_wp_dis(user_wp)) {
+		printf("Failed: Permanent protection had been disabled\n");
+		return 1;
+	}
+
+	err = set_us_wp_en(mmc, ext_csd, wp_enable_type);
+	if (err) {
+		printf("Failed: set permanent write protect enable failed\n");
+		return 1;
+	}
+	return 0;
+}
+
+static int set_wp_register(struct mmc *mmc, u8 *ext_csd, u8 wp_type)
+{
+	int ret = 1;
+	if (wp_type == WP_POWER_ON_TYPE)
+		ret = set_register_to_pwr(mmc, ext_csd);
+	else if (wp_type == WP_PERMANENT_TYPE)
+		ret = set_register_to_perm(mmc, ext_csd);
+	else if (wp_type == WP_TEMPORARY_TYPE)
+		ret = set_register_to_temporary(mmc, ext_csd);
+	return ret;
+}
+
+static u64 write_protect_group_size(struct mmc *mmc, u8 *ext_csd)
+{
+	int erase_group_def = ext_csd[EXT_CSD_ERASE_GROUP_DEF];
+	u64 write_protect_group_size;
+	int wp_grp_size = mmc->csd[2] & WP_GRP_SIZE_MASK;
+	int hc_wp_grp_size = ext_csd[EXT_CSD_HC_WP_GRP_SIZE];
+
+	if (erase_group_def == 0)
+		write_protect_group_size = (wp_grp_size + 1) * mmc->erase_grp_size;
+	else
+		write_protect_group_size =  hc_wp_grp_size * mmc->erase_grp_size;
+
+	return write_protect_group_size;
+}
+
+int is_write_protect_valid(u8 *ext_csd)
+{
+	u8 class_6_ctrl = ext_csd[EXT_CSD_CLASS_6_CTRL];
+	if (class_6_ctrl == 0)
+		return 1;
+	return 0;
+}
+
+static int compute_write_protect_range(struct mmc *mmc, char *name,
+		u8 *ext_csd, u64 *wp_grp_size_addr, u64 *start_addr, u64 *end)
+{
+	int blk_shift;
+	struct partitions *part_info;
+	u64 cnt;
+	u64 start = *start_addr;
+	u64 align_start = *start_addr;
+	u64 wp_grp_size = *wp_grp_size_addr;
+	u64 group_num ;
+	u64 partition_end;
+
+	wp_grp_size = write_protect_group_size(mmc, ext_csd);
+
+	blk_shift = ffs(mmc->read_bl_len) -1;
+
+	part_info = find_mmc_partition_by_name(name);
+	if (part_info == NULL)
+		return 1;
+
+	start = part_info->offset >> blk_shift;
+	printf("start:%d   wp_grp_size:%d",(int)start,(int)wp_grp_size);
+	if ((start % wp_grp_size)) {
+		align_start = (start + wp_grp_size - 1) / wp_grp_size * wp_grp_size;
+		printf("Caution! The partition start address isn't' aligned"
+				"to group size\n"
+			   "the start address is change from 0x%llx to 0x%llx\n",
+			   start, align_start);
+	} else {
+		align_start = start;
+	}
+	if (emmc_cur_partition && !strncmp(name, "bootloader", strlen("bootloader")))
+		cnt =0;
+	else
+	cnt = part_info->size >> blk_shift;
+	if (cnt < wp_grp_size) {
+		printf("Caution: The partition size is 0x%llx sector smaller than "
+				"the group size 0x%llx sector, \n"
+				"so the partition can't be protect\n", cnt, wp_grp_size);
+		return 1;
+	}
+
+	*start_addr = align_start;
+	*wp_grp_size_addr = wp_grp_size;
+	partition_end = start + cnt - 1;
+	group_num = (cnt - (align_start - start)) / wp_grp_size;
+	*end = align_start + group_num * wp_grp_size - 1;
+
+	if (partition_end != *end) {
+		printf("Caution! The boundary of partition isn't aligned with write "
+				"protected group,\n"
+				"so the write protected boundry of the "
+				"partition is 0x%llx, rather than 0x%llx\n",
+				*end, partition_end);
+	}
+
+	printf("write_protect group size is 0x%llx sector\n", wp_grp_size);
+	printf("The %s partition write protect group number is %lld\n", name, group_num);
+#ifdef WP_DEBUG
+	printf("the start address is 0x%llx, group size is 0x%llx, end is 0x%llx\n",
+		   *start_addr, *wp_grp_size_addr, *end);
+#endif
+	return 0;
+}
+
+static int send_wp_prot_type(struct mmc *mmc, void *dst, u64 blk)
+{
+	struct mmc_cmd cmd;
+	int err;
+	struct mmc_data data;
+
+	cmd.cmdidx = MMC_CMD_SEND_WRITE_PROT_TYPE;
+	cmd.cmdarg = blk;
+	cmd.resp_type = MMC_RSP_R1;
+
+	data.dest = dst;
+	data.blocks = 1;
+	data.blocksize = 8;
+	data.flags = MMC_DATA_READ;
+
+	err = mmc_send_cmd(mmc, &cmd, &data);
+	if (err)
+		goto err_out;
+
+	return 0;
+
+err_out:
+	puts("Failed: mmc send write protect type failed\n");
+	return err;
+}
+
+static int is_wp_set_failed(struct mmc *mmc, u8 wp_type, u64 start, u64 group_cnt)
+{
+	u8 *addr = NULL;
+	u8 err = 0;
+
+	addr = malloc(sizeof(u64));
+	if (addr == NULL) {
+		printf("Failed: malloc failed\n");
+		return 1;
+	}
+
+	err = send_wp_prot_type(mmc, addr, start);
+	if (err)
+		goto err_out;
+
+#ifdef WP_DEBUG
+	int  i;
+	for (i = 0; i < 8; i++)
+		printf("write_protect status is %x\n", ((u8 *)addr)[i]);
+#endif
+	if (check_wp_type(addr, wp_type, group_cnt)) {
+		printf("Failed: Write Protection set failed\n");
+		goto err_out;
+	}
+	return 0;
+
+err_out:
+	free(addr);
+	return 1;
+}
+
+static int send_part_wp_type(struct mmc *mmc, char *name)
+{
+	int err = 0;
+	u8 ext_csd[512] = {0};
+	u64 wp_grp_size, start, part_end;
+	u64 group_start;
+	void *addr = NULL;
+	int i;
+	int ret;
+
+	ret = mmc_get_ext_csd(mmc, ext_csd);
+	if (ret) {
+		printf("Failed: get ext_csd failed\n");
+		return 1;
+	}
+
+	if (!is_write_protect_valid(ext_csd)) {
+		printf("Failed: CLASS_6_CTRL isn't '0' "
+				"write protect process is invalid\n");
+		return 1;
+	}
+
+	addr = malloc(sizeof(u64));
+	if (addr == NULL) {
+		printf("Failed: malloc failed\n");
+		return 1;
+	}
+
+	err = compute_write_protect_range(mmc, name, ext_csd,
+			&wp_grp_size, &start, &part_end);
+	if (err)
+		return 1;
+
+	group_start = start;
+
+	while ((group_start + wp_grp_size - 1) <= part_end) {
+		err = send_wp_prot_type(mmc, addr, group_start);
+		if (err)
+			return 1;
+		printf("The write protect type for the 32 groups after 0x%llx is: \n0x",
+				group_start);
+		for (i = 0; i < 8; i++)
+			printf("%02x", ((u8*)addr)[i]);
+		printf("\n");
+		group_start += 32 * wp_grp_size;
+	}
+	return 0;
+}
+
+static int send_add_wp_type(struct mmc *mmc, u64 start, u64 cnt)
+{
+	u8 ext_csd[512] = {0};
+	u64 wp_grp_size = 0;
+	u64 part_end = 0;
+	u64 group_start;
+	u64 mmc_boundary;
+	int blk_shift;
+	void *addr = NULL;
+	int i;
+	int ret;
+
+	ret = mmc_get_ext_csd(mmc, ext_csd);
+	if (ret) {
+		printf("Failed: get ext_csd failed\n");
+		return 1;
+	}
+
+	if (!is_write_protect_valid(ext_csd)) {
+		printf("Failed: CLASS_6_CTRL isn't '0' "
+				"write protect process is invalid\n");
+		return 1;
+	}
+
+	addr = malloc(sizeof(u64));
+	if (addr == NULL) {
+		printf("Failed: malloc failed\n");
+		return 1;
+	}
+
+	wp_grp_size = write_protect_group_size(mmc, ext_csd);
+
+   if ((start % wp_grp_size)) {
+		group_start = (start + wp_grp_size - 1) / wp_grp_size * wp_grp_size;
+		printf("Caution! The partition start address isn't' aligned"
+				"to group size\n"
+			   "the start address is change from 0x%llx to 0x%llx\n",
+			   start, group_start);
+		part_end = group_start + (cnt - 1) * wp_grp_size - 1;
+		printf("The write protect group number is 0x%llx, rather than 0x%lld\n",
+				cnt - 1, cnt);
+	} else {
+		group_start = start;
+		part_end = group_start + cnt * wp_grp_size - 1;
+	}
+
+	blk_shift = ffs(mmc->read_bl_len) - 1;
+	mmc_boundary = mmc->capacity>>blk_shift;
+
+	if ((part_end + 1) > mmc_boundary) {
+		printf("Error: the operation cross the boundary of mmc\n");
+		return 1;
+	}
+
+	while ((group_start + wp_grp_size - 1) <= part_end) {
+		ret = send_wp_prot_type(mmc, addr, group_start);
+		if (ret)
+			return 1;
+		printf("The write protect type for the 32 groups after 0x%llx is: \n0x",
+				group_start);
+		for (i = 0; i < 8; i++)
+			printf("%02x", ((u8*)addr)[i]);
+		printf("\n");
+		group_start += 32 * wp_grp_size;
+	}
+	return 0;
+}
+
+static int set_part_write_protect(struct mmc *mmc, u8 wp_type, char *name)
+{
+	int err = 0;
+	u8 ext_csd[512] = {0};
+	u8 group_num  = 32;
+	u64 wp_grp_size, start, part_end;
+	u64 group_start;
+	u64 check_group_start;
+	u64 set_protect_cnt = 0;
+
+	err = mmc_get_ext_csd(mmc, ext_csd);
+	if (err) {
+		printf("Failed: get ext_csd failed\n");
+		return 1;
+	}
+
+	if (!is_write_protect_valid(ext_csd)) {
+		printf("Failed: CLASS_6_CTRL isn't '0' "
+				"write protect process is invalid\n");
+		return 1;
+	}
+
+	err = compute_write_protect_range(mmc, name, ext_csd,
+			&wp_grp_size, &start, &part_end);
+	if (err)
+		return 1;
+
+	group_start = start;
+	err = set_wp_register(mmc, ext_csd, wp_type);
+	if (err)
+		return 1;
+	while ((group_start + wp_grp_size - 1) <= part_end) {
+		err = set_write_prot(mmc, group_start);
+		if (err)
+			return 1;
+		group_start += wp_grp_size;
+		set_protect_cnt++;
+//check write protect type every 32 group
+		if (set_protect_cnt % 32 == 0) {
+			check_group_start = group_start -  group_num * wp_grp_size;
+			err = is_wp_set_failed(mmc, wp_type, check_group_start, group_num);
+			if (err)
+				return 1;
+		}
+	}
+
+	group_num = set_protect_cnt % 32;
+	check_group_start = group_start - group_num * wp_grp_size;
+
+	if (group_num) {
+		err = is_wp_set_failed(mmc, wp_type, check_group_start, group_num);
+		if (err)
+			return 1;
+	}
+
+	return 0;
+}
+
+static int set_add_write_protect(struct mmc *mmc, u8 wp_type, u64 start, u64 cnt)
+{
+	int err = 0;
+	u8 ext_csd[512] = {0};
+	int group_num = 32;
+	u64 wp_grp_size, part_end;
+	u64 group_start;
+	u64 check_group_start;
+	u64 set_protect_cnt = 0;
+	u64 mmc_boundary = 0;
+	int blk_shift;
+	err = mmc_get_ext_csd(mmc, ext_csd);
+
+	if (err) {
+		printf("Failed: get ext_csd failed\n");
+		return 1;
+	}
+
+	if (!is_write_protect_valid(ext_csd)) {
+		printf("Failed: CLASS_6_CTRL isn't '0' "
+				"write protect process is invalid\n");
+		return 1;
+	}
+
+	if (err)
+		return 1;
+
+	wp_grp_size = write_protect_group_size(mmc, ext_csd);
+
+	if ((start % wp_grp_size)) {
+	  group_start = (start + wp_grp_size - 1) / wp_grp_size * wp_grp_size;
+	  printf("Caution! The partition start address isn't' aligned"
+			  "to group size\n"
+			 "the start address is change from 0x%llx to 0x%llx\n",
+			 start, group_start);
+	  part_end = group_start + (cnt - 1) * wp_grp_size - 1;
+	  printf("The write protect group number is 0x%llx, rather than 0x%lld\n",
+			  cnt - 1, cnt);
+	} else {
+	  group_start = start;
+	  part_end = group_start + cnt * wp_grp_size - 1;
+	}
+
+	blk_shift = ffs(mmc->read_bl_len) - 1;
+	mmc_boundary = mmc->capacity>>blk_shift;
+
+	if ((part_end + 1) > mmc_boundary) {
+		printf("Error: the operation cross the boundary of mmc\n");
+		return 1;
+	}
+
+	err = set_wp_register(mmc, ext_csd, wp_type);
+	if (err)
+		return 1;
+
+	while ((group_start + wp_grp_size - 1) <= part_end) {
+		err = set_write_prot(mmc, group_start);
+		if (err)
+			return 1;
+		group_start += wp_grp_size;
+		set_protect_cnt++;
+//check write protect type every 32 group
+		if (set_protect_cnt % 32 == 0) {
+			check_group_start = group_start -  group_num * wp_grp_size;
+			err = is_wp_set_failed(mmc, wp_type, check_group_start, group_num);
+			if (err)
+				return 1;
+		}
+	}
+
+	group_num = set_protect_cnt % 32;
+	check_group_start = group_start - group_num * wp_grp_size;
+
+	if (group_num) {
+		err = is_wp_set_failed(mmc, wp_type, check_group_start, group_num);
+		if (err)
+			return 1;
+	}
+
+	return 0;
+}
+
+static int do_amlmmc_write_protect(struct cmd_tbl *cmdtp, int flag, int argc, char *const argv[])
+{
+	int ret = CMD_RET_USAGE;
+	struct mmc *mmc;
+	int dev = 1;
+	char *name = NULL;
+	char *wp_type_str = NULL;
+	u8 write_protect_type;
+	u64 start, cnt;
+
+	if (argc > 5 || argc < 4)
+		return ret;
+	if (argc == 4) {
+		name = argv[2];
+		wp_type_str = argv[3];
+		dev = find_dev_num_by_partition_name(name);
+		if (dev < 0) {
+			printf("Error: Cannot find dev.\n");
+			return CMD_RET_USAGE;
+		}
+	} else {
+		start = simple_strtoull(argv[2], NULL, 16);
+		cnt = simple_strtoull(argv[3], NULL, 0);
+		wp_type_str = argv[4];
+	}
+
+	mmc = find_mmc_device(dev);
+
+	if (IS_SD(mmc)) {
+		mmc = find_mmc_device(~dev);
+		if (IS_SD(mmc)) {
+			printf("SD card can not be write protect\n");
+			return 1;
+		}
+	}
+
+	if (!mmc)
+		return 1;
+
+	mmc_init(mmc);
+	if (!mmc)
+		return 1;
+
+	if (strcmp(wp_type_str, "temporary") == 0)
+		write_protect_type = WP_TEMPORARY_TYPE;
+	else if (strcmp(wp_type_str, "power_on") == 0 )
+		write_protect_type = WP_POWER_ON_TYPE;
+	else if (strcmp(wp_type_str, "permanent") == 0)
+		write_protect_type = WP_PERMANENT_TYPE;
+	else
+		return ret;
+
+	if (argc == 4)
+		ret = set_part_write_protect(mmc, write_protect_type, name);
+	else
+		ret = set_add_write_protect(mmc, write_protect_type, start, cnt);
+
+	return ret;
+}
+
+static int clear_write_prot_per_group(struct mmc *mmc, u64 blk)
+{
+	struct mmc_cmd cmd;
+	int err;
+
+	cmd.cmdidx = MMC_CMD_CLR_WRITE_PROT;
+	cmd.cmdarg = blk;
+	cmd.resp_type = MMC_RSP_R1b;
+
+	err = mmc_send_cmd(mmc, &cmd, NULL);
+
+	return err;
+}
+
+static int set_part_clear_wp(struct mmc *mmc, char *name)
+{
+	int err = 0;
+	u8 ext_csd[512] = {0};
+	u8 group_num  = 32;
+	u64 wp_grp_size, start, part_end;
+	u64 group_start;
+	u64 check_group_start;
+	u64 set_protect_cnt = 0;
+	u8 wp_type = WP_CLEAR_TYPE;
+
+	err = mmc_get_ext_csd(mmc, ext_csd);
+	if (err) {
+		printf("get ext_csd failed\n");
+		return 1;
+	}
+
+	if (!is_write_protect_valid(ext_csd)) {
+		printf("CLASS_6_CTRL isn't '0' write protect process is invalid\n");
+		return 1;
+	}
+
+	err = compute_write_protect_range(mmc, name, ext_csd,
+			&wp_grp_size, &start, &part_end);
+	if (err)
+		return 1;
+
+	group_start = start;
+/*
+	if (!is_wp_type_temporary(ext_csd)) {
+		printf("The write protect can't be clear\n");
+		return 1;
+	}
+*/
+	while ((group_start + wp_grp_size - 1) <= part_end) {
+		err = clear_write_prot_per_group(mmc, group_start);
+		if (err) {
+			printf("Error: The write protect can't be clear\n");
+			return 1;
+		}
+		group_start += wp_grp_size;
+		set_protect_cnt++;
+//check write protect type every 32 group
+		if (set_protect_cnt % 32 == 0) {
+			check_group_start = group_start -  group_num * wp_grp_size;
+			err = is_wp_set_failed(mmc, wp_type, check_group_start, group_num);
+			if (err)
+				return 1;
+		}
+	}
+
+	group_num = set_protect_cnt % 32;
+	check_group_start = group_start - group_num * wp_grp_size;
+
+	if (group_num) {
+		err = is_wp_set_failed(mmc, wp_type, check_group_start, group_num);
+		if (err)
+			return 1;
+	}
+
+	return 0;
+}
+
+static int set_add_clear_wp(struct mmc *mmc, u64 start, u64 cnt)
+{
+	int err = 0;
+	u8 ext_csd[512] = {0};
+	u8 group_num  = 32;
+	u64 wp_grp_size, part_end;
+	u64 group_start;
+	u64 check_group_start;
+	u64 set_protect_cnt = 0;
+	u8 wp_type = WP_CLEAR_TYPE;
+	int blk_shift;
+	u64 mmc_boundary;
+
+	err = mmc_get_ext_csd(mmc, ext_csd);
+	if (err) {
+		printf("get ext_csd failed\n");
+		return 1;
+	}
+
+	if (!is_write_protect_valid(ext_csd)) {
+		printf("CLASS_6_CTRL isn't '0' write protect process is invalid\n");
+		return 1;
+	}
+
+	wp_grp_size = write_protect_group_size(mmc, ext_csd);
+
+	if ((start % wp_grp_size)) {
+		 group_start = (start + wp_grp_size - 1) / wp_grp_size * wp_grp_size;
+		 printf("Caution! The partition start address isn't' aligned"
+				 "to group size\n"
+				"the start address is change from 0x%llx to 0x%llx\n",
+				start, group_start);
+		 part_end = group_start + (cnt - 1) * wp_grp_size - 1;
+		 printf("The write protect group number is 0x%llx, rather than 0x%lld\n",
+				 cnt - 1, cnt);
+	 } else {
+		 group_start = start;
+		 part_end = group_start + cnt * wp_grp_size - 1;
+	 }
+
+	 blk_shift = ffs(mmc->read_bl_len) - 1;
+	 mmc_boundary = mmc->capacity>>blk_shift;
+
+	 if ((part_end + 1) > mmc_boundary) {
+		 printf("Error: the operation cross the boundary of mmc\n");
+		 return 1;
+	 }
+
+	while ((group_start + wp_grp_size - 1) <= part_end) {
+		err = clear_write_prot_per_group(mmc, group_start);
+		if (err) {
+			printf("Error: The write protect can't be clear\n");
+			return 1;
+		}
+		group_start += wp_grp_size;
+		set_protect_cnt++;
+//check write protect type every 32 group
+		if (set_protect_cnt % 32 == 0) {
+			check_group_start = group_start -  group_num * wp_grp_size;
+			err = is_wp_set_failed(mmc, wp_type, check_group_start, group_num);
+			if (err)
+				return 1;
+		}
+	}
+
+	group_num = set_protect_cnt % 32;
+	check_group_start = group_start - group_num * wp_grp_size;
+
+	if (group_num) {
+		err = is_wp_set_failed(mmc, wp_type, check_group_start, group_num);
+		if (err)
+			return 1;
+	}
+
+	return 0;
+}
+
+static int do_amlmmc_clear_wp(struct cmd_tbl *cmdtp, int flag, int argc, char *const argv[])
+{
+	int ret = CMD_RET_USAGE;
+	struct mmc *mmc;
+	int dev = 1;
+	char *name = NULL;
+	u64 start, cnt;
+
+	if (argc < 3 || argc > 4)
+		return ret;
+
+	if (argc == 3) {
+		 name = argv[2];
+		 dev = find_dev_num_by_partition_name(name);
+		 if (dev < 0) {
+			 printf("Error: Cannot find dev.\n");
+			 return CMD_RET_USAGE;
+		 }
+	 } else {
+		 start = simple_strtoull(argv[2], NULL, 16);
+		 cnt = simple_strtoull(argv[3], NULL, 10);
+	 }
+
+	mmc = find_mmc_device(dev);
+	if (!mmc)
+		return 1;
+
+	if (IS_SD(mmc)) {
+		mmc = find_mmc_device(~dev);
+		if (IS_SD(mmc)) {
+			printf("SD card can not be write protect\n");
+			return 1;
+		}
+	}
+
+	mmc_init(mmc);
+	if (!mmc)
+		return 1;
+
+	if (argc == 3)
+		ret = set_part_clear_wp(mmc, name);
+	else
+		ret = set_add_clear_wp(mmc, start, cnt);
+
+	return ret;
+}
+
+static int send_write_prot_status_group(struct mmc *mmc, u64 blk)
+{
+	struct mmc_cmd cmd;
+	struct mmc_data data;
+	int err;
+	void *addr = NULL;
+	int i = 0;
+	addr = malloc(4*sizeof(u8));
+
+	if (addr == NULL) {
+		printf("Failed: malloc failed\n");
+		return 1;
+	}
+
+	cmd.cmdidx = MMC_CMD_SEND_WRITE_PROT;
+	cmd.cmdarg = blk;
+	cmd.resp_type = MMC_RSP_R1;
+
+	data.dest = addr;
+	data.blocks = 1;
+	data.blocksize = 4;
+	data.flags = MMC_DATA_READ;
+
+	err = mmc_send_cmd(mmc, &cmd, &data);
+	if (err)
+		goto err_out;
+
+	printf("The write protect type for the 32 groups after 0x%llx is:\n0x",
+			blk);
+	for (i = 0 ; i < 4; i++)
+		printf("%02x", ((u8 *)addr)[i]);
+	printf("\n");
+
+	free(addr);
+	return 0;
+err_out:
+	free(addr);
+	return 1;
+}
+
+static int send_part_wp_status(struct mmc *mmc, char *name)
+{
+	int err = 0;
+	u8 ext_csd[512] = {0};
+	u64 wp_grp_size, start, part_end;
+	u64 group_start;
+
+	err = mmc_get_ext_csd(mmc, ext_csd);
+	if (err) {
+		printf("Failed: get ext_csd failed\n");
+		return 1;
+	}
+
+	if (!is_write_protect_valid(ext_csd)) {
+		printf("Failed: CLASS_6_CTRL isn't '0' "
+				"write protect process is invalid\n");
+		return 1;
+	}
+
+	err = compute_write_protect_range(mmc, name, ext_csd,
+			&wp_grp_size, &start, &part_end);
+	if (err)
+		return 1;
+
+	group_start = start;
+
+	while ((group_start + wp_grp_size - 1) <= part_end) {
+		err = send_write_prot_status_group(mmc, group_start);
+		if (err)
+			return 1;
+		group_start += 32 * wp_grp_size;
+	}
+
+	return 0;
+}
+
+static int send_add_wp_status(struct mmc *mmc, u64 start, u64 cnt)
+{
+	int err = 0;
+	u8 ext_csd[512] = {0};
+	u64 wp_grp_size, part_end;
+	u64 group_start;
+	int blk_shift;
+	u64 mmc_boundary;
+	err = mmc_get_ext_csd(mmc, ext_csd);
+	if (err) {
+		printf("Failed: get ext_csd failed\n");
+		return 1;
+	}
+
+	if (!is_write_protect_valid(ext_csd)) {
+		printf("Failed: CLASS_6_CTRL isn't '0' "
+				"write protect process is invalid\n");
+		return 1;
+	}
+
+	wp_grp_size = write_protect_group_size(mmc, ext_csd);
+
+	if ((start % wp_grp_size)) {
+		 group_start = (start + wp_grp_size - 1) / wp_grp_size * wp_grp_size;
+		 printf("Caution! The partition start address isn't' aligned"
+				 "to group size\n"
+				"the start address is change from 0x%llx to 0x%llx\n",
+				start, group_start);
+		 part_end = group_start + (cnt - 1) * wp_grp_size - 1;
+		 printf("The write protect group number is 0x%llx, rather than 0x%lld\n",
+				 cnt - 1, cnt);
+	 } else {
+		 group_start = start;
+		 part_end = group_start + cnt * wp_grp_size - 1;
+	 }
+
+	blk_shift = ffs(mmc->read_bl_len) - 1;
+	mmc_boundary = mmc->capacity>>blk_shift;
+
+	if ((part_end + 1) > mmc_boundary) {
+		printf("Error: the operation cross the boundary of mmc\n");
+		return 1;
+	}
+
+	while ((group_start + wp_grp_size - 1) <= part_end) {
+		err = send_write_prot_status_group(mmc, group_start);
+		if (err)
+			return 1;
+		group_start += 32 * wp_grp_size;
+	}
+
+	return 0;
+}
+
+static int do_amlmmc_send_wp_status(struct cmd_tbl *cmdtp,
+		int flag, int argc, char *const argv[])
+{
+	int ret = CMD_RET_USAGE;
+	struct mmc *mmc;
+	int dev = 1;
+	char *name = NULL;
+	u64 start, cnt;
+
+	if (argc < 3 || argc > 4)
+		return ret;
+
+	if (argc == 3) {
+		name = argv[2];
+		dev = find_dev_num_by_partition_name(name);
+		if (dev < 0) {
+			printf("Error: Cannot find dev.\n");
+			return 1;
+		}
+	} else {
+		start = simple_strtoull(argv[2], NULL, 16);
+		cnt = simple_strtoull(argv[3], NULL, 0);
+	}
+
+	mmc = find_mmc_device(dev);
+
+	if (IS_SD(mmc)) {
+		mmc = find_mmc_device(~dev);
+		if (IS_SD(mmc)) {
+			printf("SD card can not be write protect\n");
+			return 1;
+		}
+	}
+
+	if (!mmc)
+		return 1;
+
+	mmc_init(mmc);
+	if (!mmc)
+		return 1;
+
+	if (argc == 3)
+		ret = send_part_wp_status(mmc, name);
+	else
+		ret = send_add_wp_status(mmc, start, cnt);
+
+	if (ret) {
+		printf("Failed: send partition write protect status failed\n");
+	}
+
+	return ret;
+}
+
+static int do_amlmmc_send_wp_type(struct cmd_tbl *cmdtp,
+		int flag, int argc, char *const argv[])
+{
+	int ret = CMD_RET_USAGE;
+	struct mmc *mmc;
+	int dev = 1;
+	char *name = NULL;
+	u64 start, cnt;
+
+	if (argc < 3 || argc > 4)
+		return ret;
+
+	if (argc == 3) {
+		name = argv[2];
+		dev = find_dev_num_by_partition_name(name);
+		if (dev < 0) {
+			printf("Error: Cannot find dev.\n");
+			return 1;
+		}
+	} else {
+		start = simple_strtoull(argv[2], NULL, 16);
+		cnt = simple_strtoull(argv[3], NULL, 0);
+	}
+
+	mmc = find_mmc_device(dev);
+
+	if (!mmc)
+		return 1;
+
+	if (IS_SD(mmc)) {
+		mmc = find_mmc_device(~dev);
+		if (IS_SD(mmc)) {
+			printf("SD card can not be write protect\n");
+			return 1;
+		}
+	}
+
+	mmc_init(mmc);
+	if (!mmc)
+		return 1;
+	if (argc == 3)
+		ret = send_part_wp_type(mmc, name);
+	else
+		ret = send_add_wp_type(mmc, start, cnt);
+
+	if (ret) {
+		printf("Failed: send parittion write protect type failed\n");
+	}
+
+	return ret;
+}
+
+static int set_driver_strength(struct mmc *mmc, int strength)
+{
+	int ret = 0;
+	u8 ext_csd[512] = {0};
+	u8 strength_type = 0;
+	u8 driver_strength;
+	u8 hs_timing = 0;
+	ret = mmc_get_ext_csd(mmc, ext_csd);
+	if (ret) {
+		printf("get ext_csd failed\n");
+		return ret;
+	}
+	strength_type = 1 << strength;
+	driver_strength = ext_csd[EXT_CSD_DRIVER_STRENGTH];
+	if (0 == (strength_type & driver_strength)) {
+		printf("Failed: This device didn't support strength type %d\n", strength);
+		return 1;
+	}
+
+	hs_timing = ext_csd[EXT_CSD_HS_TIMING];
+	if ((hs_timing >> 4) > 0) {
+		printf("Failed: The driver strength has been set already, \
+			  please reset the device\n");
+		return 1;
+	}
+
+	hs_timing = hs_timing | (strength << 4);
+
+	ret = mmc_set_ext_csd(mmc, EXT_CSD_HS_TIMING, hs_timing);
+	if (ret) {
+		printf("set ext_csd hs_timing field failed\n");
+		return ret;
+	}
+	ret = mmc_get_ext_csd(mmc, ext_csd);
+	if (ret) {
+		printf("get ext_csd failed\n");
+		return ret;
+	}
+	printf("The ext_csd[HS_TIMING] has been set to 0x%x\n",
+		  ext_csd[EXT_CSD_HS_TIMING]);
+	return ret;
+}
+
+static int get_driver_strength(struct mmc *mmc)
+{
+	int ret = 0;
+	u8 ext_csd[512] = {0};
+	u8 support_ds_type = 0;
+	u8 cur_driver_strength;
+	u8 hs_timing = 0;
+	ret = mmc_get_ext_csd(mmc, ext_csd);
+	if (ret) {
+		printf("get ext_csd failed\n");
+		return ret;
+	}
+
+	support_ds_type = ext_csd[EXT_CSD_DRIVER_STRENGTH];
+
+	hs_timing = ext_csd[EXT_CSD_HS_TIMING];
+	cur_driver_strength = hs_timing >> 4;
+
+	printf("current strength type is: ");
+	int strength_type = 0;
+	while (support_ds_type) {
+		if (support_ds_type & 1) {
+			if (cur_driver_strength == strength_type)
+				printf("[%d] ", strength_type);
+			else
+				printf("%d ", strength_type);
+		}
+		strength_type++;
+		support_ds_type = support_ds_type >> 1;
+	}
+	printf("\n");
+	return ret;
+}
+
+static int amlmmc_set_driver_strength(int argc, char *const argv[])
+{
+	int ret = CMD_RET_USAGE;
+	int dev, strength;
+	struct mmc *mmc;
+
+	if (argc != 4)
+		return CMD_RET_USAGE;
+
+	dev = simple_strtoul(argv[2], NULL, 10);
+	strength = simple_strtoul(argv[3], NULL, 10);
+	mmc = find_mmc_device(dev);
+	if (!mmc) {
+		puts("no mmc devices available\n");
+		return 1;
+	}
+	mmc_init(mmc);
+	if (!mmc)
+		return 1;
+
+	ret = set_driver_strength(mmc, strength);
+
+	return ret;
+}
+
+static int amlmmc_get_driver_strength(int argc, char *const argv[])
+{
+	int ret = CMD_RET_USAGE;
+	int dev;
+	struct mmc *mmc;
+
+	if (argc != 3)
+		return CMD_RET_USAGE;
+
+	dev = simple_strtoul(argv[2], NULL, 10);
+	mmc = find_mmc_device(dev);
+	if (!mmc) {
+		puts("no mmc devices available\n");
+		return 1;
+	}
+	mmc_init(mmc);
+	if (!mmc)
+		return 1;
+
+	ret = get_driver_strength(mmc);
+
+	return ret;
+}
+
+static int do_amlmmc_driver_strength(struct cmd_tbl *cmdtp,
+		int flag, int argc, char *const argv[])
+{
+	int ret = CMD_RET_USAGE;
+
+	if (argc == 3)
+		ret = amlmmc_get_driver_strength(argc,argv);
+	else if (argc == 4)
+		ret = amlmmc_set_driver_strength(argc,argv);
+
+	return ret;
+}
+
+static struct cmd_tbl cmd_amlmmc[] = {
+	U_BOOT_CMD_MKENT(read,          6, 0, do_amlmmc_read,          "", ""),
+	U_BOOT_CMD_MKENT(write,         6, 0, do_amlmmc_write,         "", ""),
+	U_BOOT_CMD_MKENT(erase,         5, 0, do_amlmmc_erase,         "", ""),
+	U_BOOT_CMD_MKENT(rescan,        3, 0, do_amlmmc_rescan,        "", ""),
+	U_BOOT_CMD_MKENT(part,          3, 0, do_amlmmc_part,          "", ""),
+	U_BOOT_CMD_MKENT(list,          2, 0, do_amlmmc_list,          "", ""),
+	U_BOOT_CMD_MKENT(switch,        4, 0, do_amlmmc_switch,        "", ""),
+	U_BOOT_CMD_MKENT(status,        3, 0, do_amlmmc_status,        "", ""),
+	U_BOOT_CMD_MKENT(ext_csd,       5, 0, do_amlmmc_ext_csd,       "", ""),
+	U_BOOT_CMD_MKENT(response,      3, 0, do_amlmmc_response,      "", ""),
+	U_BOOT_CMD_MKENT(controller,    3, 0, do_amlmmc_controller,    "", ""),
+	U_BOOT_CMD_MKENT(size,          4, 0, do_amlmmc_size,          "", ""),
+	U_BOOT_CMD_MKENT(env,           2, 0, do_amlmmc_env,           "", ""),
+	U_BOOT_CMD_MKENT(write_protect, 5, 0, do_amlmmc_write_protect,  "", ""),
+	U_BOOT_CMD_MKENT(send_wp_status, 4, 0, do_amlmmc_send_wp_status, "", ""),
+	U_BOOT_CMD_MKENT(send_wp_type,   4, 0, do_amlmmc_send_wp_type, "", ""),
+	U_BOOT_CMD_MKENT(clear_wp,      4, 0, do_amlmmc_clear_wp,      "", ""),
+	U_BOOT_CMD_MKENT(ds,            4, 0, do_amlmmc_driver_strength, "", ""),
+#ifdef CONFIG_SECURITYKEY
+	U_BOOT_CMD_MKENT(key,           2, 0, do_amlmmc_key,           "", ""),
+#endif
+};
+
+static int do_amlmmcops(struct cmd_tbl *cmdtp, int flag, int argc, char * const argv[])
+{
+	struct cmd_tbl *cp;
+
+	cp = find_cmd_tbl(argv[1], cmd_amlmmc, ARRAY_SIZE(cmd_amlmmc));
+
+	if (cp == NULL || argc > cp->maxargs)
+		return CMD_RET_USAGE;
+
+	if (flag == CMD_FLAG_REPEAT && !cmd_is_repeatable(cp))
+		return CMD_RET_SUCCESS;
+
+	return cp->cmd(cmdtp, flag, argc, argv);
+}
+
+U_BOOT_CMD(
+	amlmmc, 6, 1, do_amlmmcops,
+	"AMLMMC sub system",
+	"read  <partition_name> ram_addr addr_byte# cnt_byte\n"
+	"amlmmc write <partition_name> ram_addr addr_byte# cnt_byte\n"
+	"amlmmc erase <partition_name> addr_byte# cnt_byte\n"
+	"amlmmc erase <partition_name>/<device num>\n"
+	"amlmmc rescan <device_num>\n"
+	"amlmmc part <device_num> - show partition infomation of mmc\n"
+	"amlmmc list - lists available devices\n"
+	"amlmmc env -  display env partition offset\n"
+	"amlmmc switch <device_num> <part name> - part name : boot0, boot1, user\n"
+	"amlmmc status <device_num> - read sd/emmc device status\n"
+	"amlmmc ext_csd <device_num> <byte> - read sd/emmc device EXT_CSD [byte]\n"
+	"amlmmc ext_csd <device_num> <byte> <value> - write sd/emmc device EXT_CSD [byte] value\n"
+	"amlmmc response <device_num> - read sd/emmc last command response\n"
+	"amlmmc controller <device_num> - read sd/emmc controller register\n"
+	"amlmmc write_protect <partition_name> <write_protect_type>\n"
+	"        - set write protect on partition through power_on or temporary\n"
+	"amlmmc write_protect <addr_base16> <cnt_base10> <write_protect_type>\n"
+	"        - set write protect on specified address through power_on or temporary\n"
+	"amlmmc send_wp_status <partition_name> send protect status of partition\n"
+	"amlmmc send_wp_status <addr_base16> <cnt_base10> send protect status on specified address\n"
+	"amlmmc send_wp_type <partition_name> send protect type of partition\n"
+	"amlmmc send_wp_type <addr_base16> <cnt_base10> send protect type on specified address\n"
+	"amlmmc clear_wp <partition_name> clear write protect of partition\n"
+	"amlmmc clear_wp <addr_base16> <cnt_base10> clear write protect on specified addresst\n"
+	"amlmmc ds <dev_num> <val> set driver strength\n"
+#ifdef CONFIG_SECURITYKEY
+	"amlmmc key - disprotect key partition\n"
+#endif
+);
+
+/* dtb read&write operation with backup updates */
+static u32 _calc_dtb_checksum(struct aml_dtb_rsv * dtb)
+{
+	int i = 0;
+	int size = sizeof(struct aml_dtb_rsv) - sizeof(u32);
+	u32 * buffer;
+	u32 checksum = 0;
+
+	if ((u64)dtb % 4 != 0) {
+		BUG();
+	}
+
+	size = size >> 2;
+	buffer = (u32*) dtb;
+	while (i < size)
+		checksum += buffer[i++];
+
+	return checksum;
+}
+
+static int _verify_dtb_checksum(struct aml_dtb_rsv * dtb)
+{
+	u32 checksum;
+
+	checksum = _calc_dtb_checksum(dtb);
+	dtb_info("calc %x, store %x\n", checksum, dtb->checksum);
+
+	return !(checksum == dtb->checksum);
+}
+
+static int _dtb_read(struct mmc *mmc, u64 blk, u64 cnt, void * addr)
+{
+	int dev = EMMC_DTB_DEV;
+	u64 n;
+	n = blk_dread(mmc_get_blk_desc(mmc), blk, cnt, addr);
+	if (n != cnt) {
+		dtb_err("%s: dev # %d, block # %#llx, count # %#llx ERROR!\n",
+				__func__, dev, blk, cnt);
+	}
+
+	return (n != cnt);
+}
+
+static int _dtb_write(struct mmc *mmc, u64 blk, u64 cnt, void * addr)
+{
+	int dev = EMMC_DTB_DEV;
+	u64 n;
+	n = blk_dwrite(mmc_get_blk_desc(mmc), blk, cnt, addr);
+	if (n != cnt) {
+		dtb_err("%s: dev # %d, block # %#llx, count # %#llx ERROR!\n",
+				__func__, dev, blk, cnt);
+	}
+
+	return (n != cnt);
+}
+
+static struct mmc *_dtb_init(void)
+{
+	struct mmc *mmc = find_mmc_device(EMMC_DTB_DEV);
+	if (!mmc) {
+		dtb_err("not find mmc\n");
+		return NULL;
+	}
+
+	if (mmc_init(mmc)) {
+		dtb_err("mmc init failed\n");
+		return NULL;
+	}
+	return mmc;
+}
+
+static int dtb_read_shortcut(struct mmc * mmc, void *addr)
+{
+	u64 blk, cnt, dtb_glb_offset;
+	int dev = EMMC_DTB_DEV;
+	struct aml_dtb_info *info = &dtb_infos;
+	struct partitions * part = NULL;
+	struct virtual_partition *vpart = NULL;
+	vpart = aml_get_virtual_partition_by_name(MMC_DTB_NAME);
+	part = aml_get_partition_by_name(MMC_RESERVED_NAME);
+	dtb_glb_offset = part->offset + vpart->offset;
+	/* short cut */
+	if (info->valid[0]) {
+		dtb_info("short cut in...\n");
+		blk = dtb_glb_offset / mmc->read_bl_len;
+		cnt = vpart->size / mmc->read_bl_len;
+		if (_dtb_read(mmc, blk, cnt, addr)) {
+			dtb_err("%s: dev # %d, block # %#llx,cnt # %#llx ERROR!\n",
+					__func__, dev, blk, cnt);
+			/*try dtb2 if it's valid */
+			if (info->valid[1]) {
+				blk = (dtb_glb_offset + vpart->size) / mmc->read_bl_len;
+				cnt = vpart->size / mmc->read_bl_len;
+				if (_dtb_read(mmc, blk, cnt, addr)) {
+					dtb_err("%s: dev # %d, block # %#llx, cnt # %#llx ERROR!\n",
+						__func__, dev, blk, cnt);
+					return -1;
+				}
+			}
+		}
+		return 0;
+	}
+	return -2;
+}
+
+static int update_dtb_info(struct mmc *mmc, void *addr)
+{
+	int ret = 0, dev = EMMC_DTB_DEV;
+	u64 blk, cnt, dtb_glb_offset;
+	struct aml_dtb_rsv * dtb = (struct aml_dtb_rsv *) addr;
+	struct aml_dtb_info *info = &dtb_infos;
+	int cpy = 1, valid = 0;
+	struct partitions * part = NULL;
+	struct virtual_partition *vpart = NULL;
+	vpart = aml_get_virtual_partition_by_name(MMC_DTB_NAME);
+	part = aml_get_partition_by_name(MMC_RESERVED_NAME);
+	dtb_glb_offset = part->offset + vpart->offset;
+
+	while (cpy >= 0) {
+		blk = (dtb_glb_offset + cpy * (vpart->size)) / mmc->read_bl_len;
+		cnt = vpart->size / mmc->read_bl_len;
+		ret = _dtb_read(mmc, blk, cnt, addr);
+		if (ret) {
+			dtb_err("%s: dev # %d, block # %#llx, cnt # %#llx ERROR!\n",
+				__func__, dev, blk, cnt);
+		} else {
+			ret = _verify_dtb_checksum(dtb);
+			/* check magic avoid whole 0 issue */
+			if (!ret && (dtb->magic != 0)) {
+				info->stamp[cpy] = dtb->timestamp;
+				info->valid[cpy] = 1;
+			}
+			else
+				dtb_wrn("cpy %d is not valid\n", cpy);
+		}
+		valid += info->valid[cpy];
+		cpy --;
+	}
+	return valid;
+}
+
+static int update_invalid_dtb(struct mmc *mmc, void *addr)
+{
+	int ret = 0, dev = EMMC_DTB_DEV;
+	u64 blk, cnt, dtb_glb_offset;
+	struct aml_dtb_rsv * dtb = (struct aml_dtb_rsv *) addr;
+	struct aml_dtb_info *info = &dtb_infos;
+	struct partitions * part = NULL;
+	struct virtual_partition *vpart = NULL;
+	vpart = aml_get_virtual_partition_by_name(MMC_DTB_NAME);
+	part = aml_get_partition_by_name(MMC_RESERVED_NAME);
+	dtb_glb_offset = part->offset + vpart->offset;
+	cnt = vpart->size / mmc->read_bl_len;
+
+	if (info->valid[1]) {
+		blk = (dtb_glb_offset + vpart->size) / mmc->read_bl_len;
+		if (_dtb_read(mmc, blk, cnt, addr)) {
+		dtb_err("%s: dev # %d, block # %#llx,cnt # %#llx ERROR!\n",
+				__func__, dev, blk, cnt);
+			ret = -2;
+		}
+		/* fixme, update the invalid one - dtb1 */
+		blk = (dtb_glb_offset) / mmc->read_bl_len;
+		if (_dtb_write(mmc, blk, cnt, addr)) {
+			dtb_err("%s: dev # %d, block # %#llx,cnt # %#llx ERROR!\n",
+				__func__, dev, blk, cnt);
+			ret = -4;
+		}
+		info->valid[0] = 1;
+		info->stamp[0] = dtb->timestamp;
+		ret = 0;
+	} else {
+		dtb_info("update dtb2");
+		blk = (dtb_glb_offset + vpart->size) / mmc->read_bl_len;
+		if (_dtb_write(mmc, blk, cnt, addr)) {
+			dtb_err("%s: dev # %d, block # %#llx,cnt # %#llx ERROR!\n",
+				__func__, dev, blk, cnt);
+			ret = -2;
+		}
+		info->valid[1] = 1;
+		info->stamp[1] = dtb->timestamp;
+	}
+	return ret;
+}
+
+int update_old_dtb(struct mmc *mmc, void *addr)
+{
+	int ret = 0, dev = EMMC_DTB_DEV;
+	u64 blk, cnt, dtb_glb_offset;
+	struct aml_dtb_rsv * dtb = (struct aml_dtb_rsv *) addr;
+	struct aml_dtb_info *info = &dtb_infos;
+	struct partitions * part = NULL;
+	struct virtual_partition *vpart = NULL;
+	vpart = aml_get_virtual_partition_by_name(MMC_DTB_NAME);
+	part = aml_get_partition_by_name(MMC_RESERVED_NAME);
+	dtb_glb_offset = part->offset + vpart->offset;
+	cnt = vpart->size / mmc->read_bl_len;
+	if (stamp_after(info->stamp[1], info->stamp[0])) {
+		blk = (dtb_glb_offset + vpart->size) / mmc->read_bl_len;
+		if (_dtb_read(mmc, blk, cnt, addr)) {
+			dtb_err("%s: dev # %d, block # %#llx,cnt # %#llx ERROR!\n",
+					__func__, dev, blk, cnt);
+			ret = -3;
+		}
+		/*update dtb1*/
+		blk = dtb_glb_offset / mmc->read_bl_len;
+		if (_dtb_write(mmc, blk, cnt, addr)) {
+			dtb_err("%s: dev # %d, block # %#llx,cnt # %#llx ERROR!\n",
+					__func__, dev, blk, cnt);
+			ret = -3;
+		}
+		info->stamp[0] = dtb->timestamp;
+		ret = 0;
+	} else if (stamp_after(info->stamp[0], info->stamp[1])) {
+		/*update dtb2*/
+		blk = (dtb_glb_offset + vpart->size) / mmc->read_bl_len;
+		if (_dtb_write(mmc, blk, cnt, addr)) {
+			dtb_err("%s: dev # %d, block # %#llx,cnt # %#llx ERROR!\n",
+					__func__, dev, blk, cnt);
+			ret = -3;
+		}
+		info->stamp[1] = dtb->timestamp;
+	} else {
+		dtb_info("do nothing\n");
+	}
+	return ret;
+}
+
+int dtb_read(void *addr)
+{
+	int ret = 0;
+	int valid = 0;
+	struct mmc *mmc;
+
+	mmc = _dtb_init();
+	if (mmc == NULL)
+		return -10;
+
+	if (dtb_read_shortcut(mmc, addr) == 0)
+		return ret;
+
+	valid = update_dtb_info(mmc, addr);
+	dtb_info("total valid %d\n", valid);
+	/* check valid */
+	switch (valid) {
+		/* none is valid, using the 1st one for compatibility*/
+		case 0:
+			ret = -1;
+			goto _out;
+		break;
+		/* only 1 is valid, using the valid one */
+		case 1:
+			update_invalid_dtb(mmc, addr);
+		break;
+		/* both are valid, pickup new one. */
+		case 2:
+			update_old_dtb(mmc, addr);
+		break;
+		default:
+			dtb_err("impossble valid values.\n");
+			BUG();
+		break;
+	}
+_out:
+	return ret;
+}
+
+
+int dtb_write(void *addr)
+{
+	int ret = 0;
+	struct aml_dtb_rsv * dtb = (struct aml_dtb_rsv *) addr;
+	struct aml_dtb_info *info = &dtb_infos;
+	u64 blk, cnt, dtb_glb_offset;
+	int cpy, valid;
+	struct mmc * mmc;
+	struct partitions * part = NULL;
+	struct virtual_partition *vpart = NULL;
+	vpart = aml_get_virtual_partition_by_name(MMC_DTB_NAME);
+	part = aml_get_partition_by_name(MMC_RESERVED_NAME);
+	dtb_glb_offset = part->offset + vpart->offset;
+
+	mmc = _dtb_init();
+	if (NULL == mmc)
+		return -10;
+
+	/* stamp */
+	valid = info->valid[0] + info->valid[1];
+	dtb_info("valid %d\n", valid);
+	if (0 == valid)
+		dtb->timestamp = 0;
+	else if (1 == valid) {
+		dtb->timestamp = 1 + info->stamp[info->valid[0]?0:1];
+	} else {
+		/* both are valid */
+		if (info->stamp[0] != info->stamp[1]) {
+			dtb_wrn("timestamp are not same %d:%d\n",
+				info->stamp[0], info->stamp[1]);
+			dtb->timestamp = 1 + stamp_after(info->stamp[1], info->stamp[0])?
+				info->stamp[1]:info->stamp[0];
+		} else
+			dtb->timestamp = 1 + info->stamp[0];
+	}
+	/*setting version and magic*/
+	dtb->version = 1; /* base version */
+	dtb->magic = 0x00447e41; /*A~D\0*/
+	dtb->checksum = _calc_dtb_checksum(dtb);
+	dtb_info("new stamp %d, checksum 0x%x, version %d, magic %s\n",
+		dtb->timestamp, dtb->checksum, dtb->version, (char *)&dtb->magic);
+
+	for (cpy = 0; cpy < DTB_COPIES; cpy++) {
+		blk = (dtb_glb_offset + cpy * (vpart->size)) / mmc->read_bl_len;
+		cnt = vpart->size / mmc->read_bl_len;
+		ret |= _dtb_write(mmc, blk, cnt, addr);
+		info->valid[cpy] = 1;
+		info->stamp[cpy] = dtb->timestamp;
+	}
+
+	return ret;
+}
+
+extern int check_valid_dts(unsigned char *buffer);
+int renew_partition_tbl(unsigned char *buffer)
+{
+	int ret = 0;
+
+	unsigned char *temp = NULL;
+	if (!buffer)
+		return 1;
+	temp = malloc (AML_DTB_IMG_MAX_SZ);
+	if (!temp)
+		return 1;
+	memcpy(temp, buffer, AML_DTB_IMG_MAX_SZ);
+	     /* todo, check new dts imcoming.... */
+	ret = check_valid_dts(temp);
+		free(temp);
+	/* todo, check new dts imcoming.... */
+/*	ret = check_valid_dts(buffer);*/
+	/* only the dts new is valid */
+	if (!ret) {
+		free_partitions();
+		get_partition_from_dts(buffer);
+		if (0 == mmc_device_init(_dtb_init())) {
+			printf("partition table success\n");
+			ret = 0;
+			goto _out;
+		}
+		printf("partition table error\n");
+		ret = 1;
+	}
+
+_out:
+	return ret;
+}
+
+int do_amlmmc_dtb_key(struct cmd_tbl *cmdtp, int flag, int argc, char * const argv[])
+{
+	int dev, ret = 0;
+	void *addr = NULL;
+	u64 cnt = 0, n = 0, blk = 0;
+	//u64 size;
+	struct partitions *part = NULL;
+	struct virtual_partition *vpart = NULL;
+	vpart = aml_get_virtual_partition_by_name(MMC_DTB_NAME);
+	part = aml_get_partition_by_name(MMC_RESERVED_NAME);
+
+	switch (argc) {
+		case 3:
+			if (strcmp(argv[1], "erase") == 0) {
+				if (strcmp(argv[2], "dtb") == 0) {
+					printf("start erase dtb......\n");
+					dev = EMMC_DTB_DEV;
+					struct mmc *mmc = find_mmc_device(dev);
+					if (!mmc) {
+						printf("not find mmc\n");
+						return 1;
+					}
+					blk = (part->offset + vpart->offset) / mmc->read_bl_len;
+					cnt = (vpart->size * 2) / mmc->read_bl_len;
+					if (cnt != 0)
+						n = blk_derase(mmc_get_blk_desc(mmc), blk, cnt);
+					printf("dev # %d, %s, several blocks erased %s\n",
+							dev, (flag == 0) ? " ":(argv[2]),(n == 0) ? "OK" : "ERROR");
+					return (n == 0) ? 0 : 1;
+				}else if (strcmp(argv[2], "key") == 0){
+					printf("start erase key......\n");
+					dev = 1;
+					struct mmc *mmc = find_mmc_device(dev);
+					if (!mmc) {
+						printf("not find mmc\n");
+						return 1;
+					}
+					n = mmc_key_erase();
+					printf("dev # %d, %s, several blocks erased %s\n",
+							dev, (flag == 0) ? " ":(argv[2]),(n == 0) ? "OK" : "ERROR");
+					return (n == 0) ? 0 : 1;
+				}
+			} else if (strcmp(argv[1], "cali_pattern") == 0) {
+
+				if (strcmp(argv[2], "write") == 0) {
+					dev = EMMC_DTB_DEV;
+					struct mmc *mmc = find_mmc_device(dev);
+					if (!mmc) {
+						printf("not find mmc\n");
+						return 1;
+					}
+					vpart = aml_get_virtual_partition_by_name(MMC_PATTERN_NAME);
+					part = aml_get_partition_by_name(MMC_RESERVED_NAME);
+					addr = (void *)malloc(vpart->size);
+					if (addr == NULL) {
+						printf("cali_pattern malloc fail\n");
+						return 1;
+					}
+					mmc_write_cali_mattern(addr);
+					blk = (part->offset + vpart->offset) / mmc->read_bl_len;
+					cnt = vpart->size / mmc->read_bl_len;
+					if (cnt != 0)
+						n = blk_dwrite(mmc_get_blk_desc(mmc), blk, cnt, addr);
+					printf("dev # %d, %s, several calibration pattern blocks write %s\n",
+							dev, (flag == 0) ? " ":(argv[2]),(n == cnt) ? "OK" : "ERROR");
+					free(addr);
+					return (n == cnt) ? 0 : 1;
+				}
+			}
+		case 4:
+			addr = (void *)simple_strtoul(argv[2], NULL, 16);
+			if (strcmp(argv[1], "dtb_read") == 0) {
+				/* fixme, */
+				ret = dtb_read(addr);
+				return 0;
+
+			} else if (strcmp(argv[1], "dtb_write") == 0) {
+				/* fixme, should we check the return value? */
+				ret = dtb_write(addr);
+				ret |= renew_partition_tbl(addr);
+				return ret;
+			}
+			return 0;
+		default:
+			break;
+	}
+	return 1;
+}
+
+/* update partition table in reserved partition. */
+__weak int emmc_update_ept(unsigned char *buffer)
+{
+	int ret = 0;
+
+#ifndef DTB_BIND_KERNEL
+	dtb_write(buffer);
+#endif
+	ret = renew_partition_tbl(buffer);
+	return ret;
+}
+
+/* fixme, should use renew_partition_tbl here! */
+__weak int emmc_update_mbr(unsigned char *buffer)
+{
+	int ret = 0;
+	//cpu_id_t cpu_id = get_cpu_id();
+
+	if (0) { //(cpu_id.family_id < MESON_CPU_MAJOR_ID_GXL) {
+		ret = -1;
+		printf("MBR not support, try dtb\n");
+		goto _out;
+	}
+#ifndef DTB_BIND_KERNEL
+	dtb_write(buffer);
+#endif
+	ret = get_partition_from_dts(buffer);
+	if (ret) {
+		printf("Fail to get partition talbe from dts\n");
+		goto _out;
+	}
+	ret = mmc_device_init(_dtb_init());
+	printf("%s: update mbr %s\n", __func__, ret?"Fail":"Success");
+_out:
+	return ret;
+}
+
+int emmc_erase_rsv(struct mmc *mmc, char *rsv_part)
+{
+	u64 cnt = 0, n = 0, blk = 0;
+	struct partitions *part = NULL;
+	struct virtual_partition *vpart = NULL;
+
+	if (rsv_part == NULL)
+		return -1;
+
+	vpart = aml_get_virtual_partition_by_name(MMC_DTB_NAME);
+	part = aml_get_partition_by_name(MMC_RESERVED_NAME);
+	if (strcmp(rsv_part, "dtb") == 0) {
+		blk = (part->offset + vpart->offset) / mmc->read_bl_len;
+		cnt = (vpart->size * 2) / mmc->read_bl_len;
+		if (cnt != 0)
+			n = blk_derase(mmc_get_blk_desc(mmc), blk, cnt);
+		printf("%s is erased %s\n",
+				rsv_part, (n == 0) ? "OK" : "ERROR");
+		return (n == 0) ? 0 : 1;
+	} else if (strcmp(rsv_part, "key") == 0) {
+		n = mmc_key_erase();
+		printf("%s is erased %s\n",
+				rsv_part, (n == 0) ? "OK" : "ERROR");
+		return (n == 0) ? 0 : 1;
+	}
+	return 1;
+}
+
+int do_emmc_erase(struct cmd_tbl *cmdtp, int flag, int argc, char * const argv[])
+{
+	int dev;
+	u64 cnt = 0, n = 0, blk = 0;
+	//u64 size;
+	struct partitions *part = NULL;
+	struct virtual_partition *vpart = NULL;
+	struct mmc *mmc;
+	if (argc != 3)
+		return CMD_RET_USAGE;
+
+	vpart = aml_get_virtual_partition_by_name(MMC_DTB_NAME);
+	part = aml_get_partition_by_name(MMC_RESERVED_NAME);
+	if (strcmp(argv[2], "dtb") == 0) {
+		printf("start erase dtb......\n");
+		dev = EMMC_DTB_DEV;
+		mmc = find_mmc_device(dev);
+		if (!mmc) {
+			printf("not find mmc\n");
+			return 1;
+		}
+		blk = (part->offset + vpart->offset) / mmc->read_bl_len;
+		cnt = (vpart->size * 2) / mmc->read_bl_len;
+		if (cnt != 0)
+			n = blk_derase(mmc_get_blk_desc(mmc), blk, cnt);
+		printf("dev # %d, %s, several blocks erased %s\n",
+				dev, (flag == 0) ? " ":(argv[2]),(n == 0) ? "OK" : "ERROR");
+		return (n == 0) ? 0 : 1;
+	} else if (strcmp(argv[2], "key") == 0) {
+		printf("start erase key......\n");
+		dev = 1;
+		mmc = find_mmc_device(dev);
+		if (!mmc) {
+			printf("not find mmc\n");
+			return 1;
+		}
+		n = mmc_key_erase();
+		printf("dev # %d, %s, several blocks erased %s\n",
+				dev, (flag == 0) ? " ":(argv[2]),(n == 0) ? "OK" : "ERROR");
+		return (n == 0) ? 0 : 1;
+	}
+	return 1;
+}
+
+int do_emmc_dtb_read(struct cmd_tbl *cmdtp, int flag, int argc, char * const argv[])
+{
+	int ret = 0;
+	void *addr = NULL;
+
+	if (argc != 4)
+		return CMD_RET_USAGE;
+
+	addr = (void *)simple_strtoul(argv[2], NULL, 16);
+	ret = dtb_read(addr);
+	return ret;
+}
+
+int do_emmc_dtb_write(struct cmd_tbl *cmdtp, int flag, int argc, char * const argv[])
+{
+	int ret = 0;
+	void *addr = NULL;
+
+	if (argc != 4)
+		return CMD_RET_USAGE;
+
+	addr = (void *)simple_strtoul(argv[2], NULL, 16);
+	ret = dtb_write(addr);
+	ret |= renew_partition_tbl(addr);
+	return ret;
+}
+
+static int _fastboot_context_read(struct mmc *mmc, u64 blk,
+		u64 cnt, void *addr)
+{
+	int dev = EMMC_FASTBOOT_CONTEXT_DEV;
+	u64 n;
+
+	n = blk_dread(mmc_get_blk_desc(mmc), blk, cnt, addr);
+	if (n != cnt) {
+		fb_err("%s: dev # %d, block # %#llx, count # %#llx ERROR!\n",
+			__func__, dev, blk, cnt);
+	}
+
+	return n != cnt;
+}
+
+int fastboot_context_read(void *buf, size_t size)
+{
+	uint32_t crc_result;
+	struct mmc *mmc;
+	struct FastbootContext *fb_cont;
+	int fb_size = sizeof(struct FastbootContext);
+	u64 blk, cnt, fb_glb_offset;
+	int dev = EMMC_FASTBOOT_CONTEXT_DEV;
+	struct partitions *part = NULL;
+	struct virtual_partition *vpart = NULL;
+
+	mmc = find_mmc_device(dev);
+	if (!mmc) {
+		puts("no mmc devices available\n");
+		return 1;
+	}
+
+	if (mmc_init(mmc)) {
+		printf("%s() %d: emmc init failed\n", __func__, __LINE__);
+		return 1;
+	}
+
+	vpart = aml_get_virtual_partition_by_name(MMC_FASTBOOT_CONTEXT_NAME);
+	part = aml_get_partition_by_name(MMC_RESERVED_NAME);
+	fb_glb_offset = part->offset + vpart->offset;
+
+	blk = fb_glb_offset / mmc->read_bl_len;
+	cnt = size / mmc->read_bl_len;
+
+	if (_fastboot_context_read(mmc, blk, cnt, buf))
+		return 1;
+
+	fb_cont = (struct FastbootContext *)buf;
+	crc_result = crc32(0, buf, fb_size - 4);
+
+	if (crc_result != fb_cont->crc32) {
+		printf("%s %d: crc checksum ERROR!\n", __func__, __LINE__);
+		return 1;
+	}
+	return 0;
+}
+
+
+int do_emmc_fb_read(struct cmd_tbl *cmdtp, int flag, int argc, char * const argv[])
+{
+	int ret = 0;
+	void *addr = NULL;
+	u64 size;
+
+	if (argc != 4)
+		return CMD_RET_USAGE;
+
+	addr = (void *)simple_strtoul(argv[2], NULL, 16);
+	size = simple_strtoull(argv[3], NULL, 16);
+	ret = fastboot_context_read(addr, size);
+	return ret;
+}
+
+static int _fastboot_context_write(struct mmc *mmc, u64 blk,
+		u64 cnt, void *addr)
+{
+	int dev = EMMC_FASTBOOT_CONTEXT_DEV;
+	int n;
+
+	n = blk_dwrite(mmc_get_blk_desc(mmc), blk, cnt, addr);
+
+	if (n != cnt) {
+		fb_err("%s: dev # %d, block # %#llx,cnt # %#llx ERROR!\n",
+			__func__, dev, blk, cnt);
+	}
+
+	return n != cnt;
+}
+
+int fastboot_context_write(void *buf, size_t size)
+{
+	int ret = 0;
+	struct FastbootContext *fb_cont = (struct FastbootContext *)buf;
+	u64 blk, cnt, fb_glb_offset;
+	struct mmc *mmc;
+	struct partitions *part = NULL;
+	struct virtual_partition *vpart = NULL;
+	int dev = EMMC_FASTBOOT_CONTEXT_DEV;
+	int fb_size = sizeof(struct FastbootContext);
+
+	mmc = find_mmc_device(dev);
+	if (!mmc) {
+		puts("no mmc devices available\n");
+		return 1;
+	}
+
+	ret = mmc_init(mmc);
+	if (ret) {
+		printf("%s() %d: emmc init failed\n", __func__, __LINE__);
+		return 1;
+	}
+
+	vpart = aml_get_virtual_partition_by_name(MMC_FASTBOOT_CONTEXT_NAME);
+	part = aml_get_partition_by_name(MMC_RESERVED_NAME);
+	fb_glb_offset = part->offset + vpart->offset;
+	fb_cont->crc32 = crc32(0, buf, fb_size - 4);
+	blk = fb_glb_offset / mmc->read_bl_len;
+	cnt = size / mmc->read_bl_len;
+	ret = _fastboot_context_write(mmc, blk, cnt, buf);
+
+	return ret;
+}
+
+int do_emmc_fb_write(struct cmd_tbl *cmdtp, int flag, int argc, char * const argv[])
+{
+	int ret = 0;
+	void *addr = NULL;
+	u64 size;
+
+	if (argc != 4)
+		return CMD_RET_USAGE;
+
+	addr = (void *)simple_strtoul(argv[2], NULL, 16);
+	size = simple_strtoull(argv[3], NULL, 16);
+	ret = fastboot_context_write(addr, size);
+	return ret;
+}
+
+int do_emmc_key_read(struct cmd_tbl *cmdtp, int flag, int argc, char * const argv[])
+{
+	int ret = 0;
+	void *addr = NULL;
+	u64 size;
+	uint32_t *actual_lenth=0;
+
+	if (argc != 4)
+		return CMD_RET_USAGE;
+
+	addr = (void *)simple_strtoul(argv[2], NULL, 16);
+	size = simple_strtoull(argv[3], NULL, 16);
+	printf("enter emmc key read !!\n");
+	printf("addr:%p   size:%llx\n",addr,size);
+	ret = mmc_key_read(addr, size,actual_lenth);
+	printf("ret:%d\n",ret);
+	return ret;
+}
+
+int do_emmc_key_write(struct cmd_tbl *cmdtp, int flag, int argc, char * const argv[]) {
+
+	int ret = 0;
+	void *addr = NULL;
+	u64 size;
+	uint32_t *actual_lenth=0;
+
+	if (argc != 4)
+		return CMD_RET_USAGE;
+
+	addr = (void *)simple_strtoul(argv[2], NULL, 16);
+	size = simple_strtoull(argv[3], NULL, 16);
+	ret = mmc_key_write(addr, size,actual_lenth);
+	return ret;
+
+
+}
+
+
+
+
+static struct cmd_tbl cmd_emmc[] = {
+	U_BOOT_CMD_MKENT(dtb_read,  4, 0, do_emmc_dtb_read,  "", ""),
+	U_BOOT_CMD_MKENT(dtb_write, 4, 0, do_emmc_dtb_write, "", ""),
+	U_BOOT_CMD_MKENT(erase,     3, 0, do_emmc_erase,     "", ""),
+	U_BOOT_CMD_MKENT(fastboot_read, 4, 0, do_emmc_fb_read, "", ""),
+	U_BOOT_CMD_MKENT(fastboot_write, 4, 0, do_emmc_fb_write, "", ""),
+	U_BOOT_CMD_MKENT(key_read, 4, 0, do_emmc_key_read, "", ""),
+	U_BOOT_CMD_MKENT(key_write, 4, 0, do_emmc_key_write, "", ""),
+};
+
+static int do_emmc_dtb_key(struct cmd_tbl *cmdtp, int flag, int argc, char * const argv[])
+{
+	struct cmd_tbl *cp;
+
+	cp = find_cmd_tbl(argv[1], cmd_emmc, ARRAY_SIZE(cmd_emmc));
+
+	if (cp == NULL || argc > cp->maxargs)
+		return CMD_RET_USAGE;
+	if (flag == CMD_FLAG_REPEAT && !cmd_is_repeatable(cp))
+		return CMD_RET_SUCCESS;
+	return cp->cmd(cmdtp, flag, argc, argv);
+}
+
+
+U_BOOT_CMD(
+	emmc, 4, 1, do_emmc_dtb_key,
+	"EMMC sub system",
+	"dtb_read addr size\n"
+	"emmc dtb_write addr size\n"
+	"emmc erase dtb\n"
+	"emmc erase key\n"
+	"emmc fastboot_read addr size\n"
+	"emmc fastboot_write addr size\n"
+	"emmc key_read addr size\n"
+	"emmc key_write addr size\n"
+);
+
diff --git a/cmd/storage.c b/cmd/storage.c
new file mode 100644
index 00000000000..98147fbe22c
--- /dev/null
+++ b/cmd/storage.c
@@ -0,0 +1,1503 @@
+// SPDX-License-Identifier: (GPL-2.0+ OR MIT)
+/*
+ * Storage interface module
+ *
+ * Copyright (C) 2018 Amlogic Corporation
+ *
+ */
+#include <amlogic/storage.h>
+#include <div64.h>
+#include <linux/math64.h>
+//#include <amlogic/cpu_id.h>
+#include <amlogic/store_wrapper.h>
+#include <amlogic/aml_efuse.h>
+#include <amlogic/blxx2bl33_param.h>
+#include <amlogic/aml_mtd.h>
+
+#include <amlogic/asm/romboot.h>
+#include <amlogic/asm/cpu_config.h>
+//#include <amlogic/asm/register.h>
+#include <amlogic/asm/bl31_apis.h>
+#include <amlogic/asm/secure_apb.h>
+
+#undef pr_info
+#define pr_info       printf
+
+#ifdef CONFIG_SPI_FLASH
+extern int spi_nor_pre(void);
+extern int spi_nor_probe(u32 init_flag);
+#endif
+
+#ifdef CONFIG_SPI_NAND
+extern int spi_nand_pre(void);
+extern int spi_nand_probe(u32 init_flag);
+#endif
+
+#ifdef CONFIG_MTD_SPI_NAND
+extern int spi_nand_pre(void);
+extern int spi_nand_probe(u32 init_flag);
+#endif
+
+#ifdef CONFIG_AML_NAND
+extern int amlnf_pre(void);
+extern int amlnf_probe(u32 init_flag);
+#endif
+
+#ifdef CONFIG_MESON_NFC
+extern int nand_pre(void);
+extern int nand_probe(uint32_t init_flag);
+#endif
+
+#ifdef CONFIG_MMC_MESON_GX
+extern int emmc_pre(void);
+extern int emmc_probe(u32 init_flag);
+#endif
+
+#ifdef CONFIG_MMC_MESON_GX
+extern int sdcard_pre(void);
+extern int sdcard_probe(u32 init_flag);
+#endif
+/* for info protect, fixme later */
+int info_disprotect = 0;
+
+static struct storage_t *current;
+static struct device_node_t device_list[] = {
+#ifdef CONFIG_MESON_NFC
+	{BOOT_NAND_MTD, "mtd", nand_pre, nand_probe},
+#endif
+#ifdef CONFIG_AML_NAND
+	{BOOT_NAND_NFTL, "nftl", amlnf_pre, amlnf_probe},
+#endif
+#ifdef CONFIG_SPI_NAND
+	/* old drivers will be removed later */
+	{BOOT_SNAND, "spi-nand", spi_nand_pre, spi_nand_probe},
+#endif
+#ifdef CONFIG_MTD_SPI_NAND
+	{BOOT_SNAND, "spi-nand", spi_nand_pre, spi_nand_probe},
+#endif
+#if CONFIG_SPI_FLASH
+	{BOOT_SNOR, "spi-nor", spi_nor_pre, spi_nor_probe},
+#endif
+#if 0
+	{BOOT_SD, "sd", sdcard_pre, sdcard_probe},
+#endif
+
+#ifdef CONFIG_MMC_MESON_GX
+	{BOOT_EMMC, "emmc", emmc_pre, emmc_probe},
+#endif
+
+};
+
+int store_register(struct storage_t *store_dev)
+{
+	if (!store_dev)
+		return 1;
+	if (!current) {
+		INIT_LIST_HEAD(&store_dev->list);
+		current = store_dev;
+		return 0;
+	}
+	/**
+	 * the head node will not be a valid node
+	 * usually when we use the list, but in storage
+	 * interface module, we init the device node as
+	 * a head instead a global list_head pointer,
+	 * it should be traversaled.
+	 */
+	if (store_dev == current)
+		return 0;
+	struct storage_t *dev;
+
+	if (store_dev->type == current->type)
+		return 1;
+	list_for_each_entry(dev, &current->list, list) {
+		if (dev == store_dev)
+			return 0;
+		else if (dev->type == store_dev->type)
+			return 1;
+	}
+	list_add_tail(&store_dev->list, &current->list);
+	current = store_dev;
+	return 0;
+}
+
+void store_unregister(struct storage_t *store_dev)
+{
+	if (store_dev == current) {
+		if (list_empty_careful(&store_dev->list)) {
+			current = NULL;
+		} else {
+			current = list_entry((current->list).next,
+					     struct storage_t, list);
+			list_del_init(&store_dev->list);
+		}
+	} else {
+		list_del_init(&store_dev->list);
+	}
+}
+
+int sheader_need(void)
+{
+	//const cpu_id_t cpuid = get_cpu_id();
+	//const int familyId = cpuid.family_id;
+
+	return 0; //(MESON_CPU_MAJOR_ID_SC2 == familyId);
+}
+
+unsigned char *ubootdata = NULL;
+void sheader_load(void *addr)
+{
+	ubootdata = addr;
+}
+
+/*
+ * storage header which size is 512B
+ * is bind into the tail of bl2.bin.
+ * @addr: uboot address.
+ */
+static p_payload_info_t parse_uboot_sheader(void *addr)
+{
+	p_payload_info_t pInfo = (p_payload_info_t)(addr + BL2_SIZE);
+
+	if (AML_MAGIC_HDR_L == pInfo->hdr.nMagicL &&
+	    AML_MAGIC_HDR_R == pInfo->hdr.nMagicR) {
+		printf("aml log : bootloader blxx mode!\n");
+		return pInfo;
+	}
+	return NULL;
+}
+
+boot_area_entry_t general_boot_part_entry[MAX_BOOT_AREA_ENTRIES] = {
+	{BOOT_BL2, BOOT_AREA_BB1ST, 0, BOOT_FIRST_BLOB_SIZE},
+	{BOOT_BL2E, BOOT_AREA_BL2E, 0, 0x40000},
+	{BOOT_BL2X, BOOT_AREA_BL2X, 0, 0x40000},
+	{BOOT_DDRFIP, BOOT_AREA_DDRFIP, 0, 0x40000},
+	{BOOT_DEVFIP, BOOT_AREA_DEVFIP, 0, 0x300000},
+};
+
+struct boot_layout general_boot_layout = {.boot_entry = general_boot_part_entry};
+struct storage_startup_parameter g_ssp;
+struct storage_bl *g_storage = NULL;
+
+static void storage_boot_layout_debug_info(
+			struct boot_layout *boot_layout)
+{
+	boot_area_entry_t *boot_entry = boot_layout->boot_entry;
+	int i;
+
+	printf("boot area list: \n");
+	for (i = 0; i < MAX_BOOT_AREA_ENTRIES && boot_entry[i].size; i++) {
+		printf("%10s    ", boot_entry[i].name);
+		printf("%10llx    ", boot_entry[i].offset);
+		printf("%10llx\n", boot_entry[i].size);
+	}
+}
+
+/* use STORAGE_ROUND_UP, y must be power of 2 */
+#define STORAGE_ROUND_UP_IF_UNALIGN(x, y) ((x) = (((x) + (y) - 1) & (~(y - 1))))
+#define NAND_RSV_OFFSET	1024
+#define ALIGN_SIZE	(4096)
+static int storage_boot_layout_rebuild(struct boot_layout *boot_layout,
+				       unsigned int bl2e_size,
+				       unsigned int bl2x_size)
+{
+	struct storage_startup_parameter *ssp = &g_ssp;
+	boot_area_entry_t *boot_entry = boot_layout->boot_entry;
+	uint64_t align_size, reserved_size = 0;
+	uint8_t i, cal_copy = ssp->boot_bakups;
+
+	align_size = ALIGN_SIZE;
+	if ((ssp->boot_device == BOOT_NAND_NFTL) ||
+		(ssp->boot_device == BOOT_NAND_MTD)) {
+		reserved_size = ssp->sip.nsp.layout_reserve_size;
+		align_size = ((NAND_RSV_OFFSET / cal_copy) * ssp->sip.nsp.page_size);
+		printf("reserved_size:0x%llx 0x%llx\n", reserved_size, align_size);
+	} else if (ssp->boot_device == BOOT_SNAND) {
+		reserved_size = ssp->sip.snasp.layout_reserve_size;
+		align_size = ((NAND_RSV_OFFSET / cal_copy) * ssp->sip.snasp.pagesize);
+	} else 	if (ssp->boot_device == BOOT_EMMC) {
+		ssp->boot_entry[0].offset = boot_entry[0].offset +=
+			BL2_CORE_BASE_OFFSET_EMMC;
+		cal_copy = 1;
+	}
+	STORAGE_ROUND_UP_IF_UNALIGN(boot_entry[0].size, align_size);
+	ssp->boot_entry[0].size = boot_entry[0].size;
+	printf("ssp->boot_entry[0] offset:0x%x, size:0x%x\n",
+			ssp->boot_entry[0].offset, ssp->boot_entry[0].size);
+	printf("cal_copy:0x%x\n", cal_copy);
+	printf("align_size:0x%llx\n", align_size);
+	printf("reserved_size:0x%llx\n", reserved_size);
+	if ((ssp->boot_device == BOOT_NAND_NFTL) ||
+		(ssp->boot_device == BOOT_NAND_MTD))
+		align_size = ssp->sip.nsp.block_size;
+	else if (ssp->boot_device == BOOT_SNAND)
+		align_size = ssp->sip.snasp.pagesize *
+			     ssp->sip.snasp.pages_per_eraseblock;
+	printf("align_size2:%llu\n", align_size);
+
+	boot_entry[BOOT_AREA_BL2E].size = bl2e_size;
+	boot_entry[BOOT_AREA_BL2X].size = bl2x_size;
+
+	for (i = 1; i < MAX_BOOT_AREA_ENTRIES && boot_entry[i - 1].size; i++) {
+		STORAGE_ROUND_UP_IF_UNALIGN(boot_entry[i].size, align_size);
+		boot_entry[i].offset = boot_entry[i-1].offset +
+				boot_entry[i-1].size * cal_copy + reserved_size;
+		reserved_size = 0;
+		ssp->boot_entry[i].size = boot_entry[i].size;
+		ssp->boot_entry[i].offset = boot_entry[i].offset;
+	}
+
+	return 0;
+}
+
+/* use STORAGE_ROUND_UP, y must be power of 2 */
+#define STORAGE_ROUND_UP_IF_UNALIGN(x, y) ((x) = (((x) + (y) - 1) & (~(y - 1))))
+#define NAND_RSV_OFFSET	1024
+#define ALIGN_SIZE	(4096)
+static int storage_boot_layout_general_setting(struct boot_layout *boot_layout,
+					       int need_build)
+{
+	//struct storage_startup_parameter *ssp = &g_ssp;
+	boot_area_entry_t *boot_entry = boot_layout->boot_entry;
+	struct storage_boot_entry *sbentry = g_ssp.boot_entry;
+	p_payload_info_t pInfo = parse_uboot_sheader(ubootdata);;
+	p_payload_info_hdr_t hdr = &pInfo->hdr;
+	p_payload_info_item_t pItem = pInfo->arrItems;
+	int offPayload = 0, szPayload = 0;
+	unsigned int bl2e_size, bl2x_size;
+	char name[8] = {0};
+	int nIndex = 0;
+
+	if (need_build == BOOT_ID_USB) {
+		for (nIndex = 1, pItem += 1;
+		     nIndex < hdr->byItemNum; ++nIndex, ++pItem) {
+			memcpy(name, &pItem->nMagic, sizeof(unsigned int));
+			offPayload = pItem->nOffset;
+			if (nIndex == BOOT_AREA_BL2E)
+				bl2e_size = pItem->nPayLoadSize;
+			if (nIndex == BOOT_AREA_BL2X)
+				bl2x_size = pItem->nPayLoadSize;
+			szPayload = pItem->nPayLoadSize;
+			pr_info("Item[%d]%4s offset 0x%08x sz 0x%x\n",
+			       nIndex, name, offPayload, szPayload);
+		}
+		storage_boot_layout_rebuild(boot_layout, bl2e_size, bl2x_size);
+	} else {
+		/* may be sdcard boot and also have to rebuild layout */
+		if (need_build == BOOT_ID_SDCARD) {
+			bl2e_size = sbentry[BOOT_AREA_BL2E].size;
+			bl2x_size = sbentry[BOOT_AREA_BL2X].size;
+			printf("bl2e_size=%x bl2x_size=%x current->type=%d\n",
+				bl2e_size, bl2x_size, current->type);
+			storage_boot_layout_rebuild(boot_layout,
+						    bl2e_size, bl2x_size);
+			return 0;
+		}
+		/* normal boot */
+		for (nIndex = 0;
+		     nIndex < MAX_BOOT_AREA_ENTRIES && sbentry->size;
+		     nIndex++, sbentry++) {
+			boot_entry[nIndex].size = sbentry->size;
+			boot_entry[nIndex].offset = sbentry->offset;
+		}
+	}
+
+	return 0;
+}
+
+uint8_t emmc_boot_seqs_tbl[8][2] = {
+		{0, 3}, {0, 2}, {0, 3}, {0, 1},
+		{1, 2}, {1, 1}, {2, 1}, {0, 0}
+	};
+
+static int _get_emmc_boot_seqs(void)
+{
+	uint8_t ebcfg = 0;
+	if (IS_FEAT_DIS_EMMC_USER())
+		ebcfg |= (1<<2);
+	if (IS_FEAT_DIS_EMMC_BOOT_0())
+		ebcfg |= (1<<1);
+	if (IS_FEAT_DIS_EMMC_BOOT_1())
+		ebcfg |= (1<<0);
+
+	return ebcfg;
+}
+
+static int storage_get_emmc_boot_seqs(void)
+{
+	return emmc_boot_seqs_tbl[_get_emmc_boot_seqs()][1];;
+}
+
+static int storage_get_emmc_boot_start(void)
+{
+	return emmc_boot_seqs_tbl[_get_emmc_boot_seqs()][0];;
+}
+
+#define NAND_RSV_BLOCK_NUM 48
+#define NSP_PAGE0_DISABLE 1
+extern unsigned char *ubootdata;
+static int storage_get_and_parse_ssp(int *need_build) // boot_device:
+{
+	struct storage_startup_parameter *ssp = &g_ssp;
+	union storage_independent_parameter *sip;
+	static struct param_e *storage_param_e;
+	int usb_boot = *need_build;
+
+	memset(ssp, 0, sizeof(struct storage_startup_parameter));
+	if (!usb_boot) {
+		storage_param_e = param_of(STORAGE_PARAM_TPYE);
+		if (!storage_param_e)
+			return -1;
+		memcpy(ssp, storage_param_e->data,
+			sizeof(struct storage_startup_parameter));
+		/* may be sdcard boot and also have to rebuild layout */
+		if (ssp->boot_device == BOOT_ID_SDCARD ||
+		    ssp->boot_device == BOOT_ID_USB) {
+			/* need change the storage base here */
+			*need_build = ssp->boot_device;
+		}
+	}
+
+	if (*need_build) {
+		sip = &ssp->sip;
+		ssp->boot_device = current->type;
+		switch (ssp->boot_device) {
+		case BOOT_EMMC:
+			ssp->boot_bakups = storage_get_emmc_boot_seqs();
+			break;
+		case BOOT_SNOR:
+			if (IS_FEAT_EN_4BL2_SNOR())
+				ssp->boot_bakups = 4;
+			if (IS_FEAT_DIS_NBL2_SNOR())
+				ssp->boot_bakups = 1;
+			break;
+		case BOOT_SNAND:
+			if (IS_FEAT_EN_8BL2_SNAND())
+				ssp->boot_bakups = 8;
+			if (IS_FEAT_DIS_NBL2_SNAND())
+				ssp->boot_bakups = 1;
+			sip->snasp.pagesize = current->info.write_unit;
+			sip->snasp.pages_per_eraseblock =
+			current->info.erase_unit / current->info.write_unit;
+			sip->snasp.eraseblocks_per_lun =
+			(current->info.caps >> 20) / current->info.erase_unit;
+			sip->snasp.planes_per_lun = 1;
+			sip->snasp.luns_per_target = 1;
+			sip->snasp.ntargets = 1;
+			sip->snasp.layout_reserve_size =
+				NAND_RSV_BLOCK_NUM * current->info.erase_unit;
+			break;
+		case BOOT_NAND_NFTL:
+		case BOOT_NAND_MTD:
+			if (IS_FEAT_DIS_8BL2_NAND())
+				ssp->boot_bakups = 4;
+			if (IS_FEAT_DIS_NBL2_NAND())
+				ssp->boot_bakups = 1;
+			ssp->boot_bakups = 8; //FIXIT?? efuse do not work now.
+			sip->nsp.page_size =  current->info.write_unit;
+			sip->nsp.block_size = current->info.erase_unit;
+			sip->nsp.pages_per_block =
+			current->info.erase_unit / current->info.write_unit;
+			sip->nsp.layout_reserve_size =
+				NAND_RSV_BLOCK_NUM * sip->nsp.block_size;
+			sip->nsp.page0_disable =  NSP_PAGE0_DISABLE;
+			break;
+		default:
+			/* do nothing. */
+			break;
+		}
+
+	}
+
+	/* sanity check */
+
+	printf("boot_device:%d\n", ssp->boot_device);
+	printf("boot_seq:%d\n", ssp->boot_seq);
+	printf("boot_bakups:%d\n", ssp->boot_bakups);
+	printf("rebuid_id :%d\n", *need_build);
+
+	return 0;
+}
+
+int storage_post_init(void)
+{
+	int ret = -1;
+	int need_build = 0;
+
+	ret = storage_get_and_parse_ssp(&need_build);
+	if (ret < 0)
+		return -1;
+	storage_boot_layout_general_setting(&general_boot_layout, need_build);
+	storage_boot_layout_debug_info(&general_boot_layout);
+
+	return ret;
+}
+
+int store_init(u32 init_flag)
+{
+	// cpu_id_t cpu_id = get_cpu_id();
+	int i, ret = 0;
+	u8 record = 0;
+
+	/*1. pre scan*/
+	for (i = 0; i < ARRAY_SIZE(device_list); i++) {
+		if (!device_list[i].pre()) {
+			record |= BIT(i);
+		}
+	}
+
+	if (!record) {
+		pr_info("No Valid storage device\n");
+		return record;
+	}
+
+	if (0) //(cpu_id.family_id == MESON_CPU_MAJOR_ID_SC2)
+		storage_post_init();
+
+	/*2. Enter the probe of the valid device*/
+	for (i = 0; i < ARRAY_SIZE(device_list); i++) {
+		if (record & BIT(i)) {
+			ret = device_list[i].probe(init_flag);
+			if (ret)
+				pr_info("the 0x%x storage device probe failed\n",
+			device_list[i].index);
+		}
+	}
+
+	return record;
+}
+
+static struct storage_t *store_get_current(void)
+{
+	return current;
+}
+
+int store_set_device(enum boot_type_e type)
+{
+	struct list_head *entry;
+	struct storage_t *dev, *store_dev = store_get_current();
+
+	if (!store_dev) {
+		pr_info("%s %d no current device\n", __func__, __LINE__);
+		return 1;
+	}
+	if (store_dev->type == type)
+		return 0;
+	list_for_each(entry, &store_dev->list) {
+		dev = list_entry(entry, struct storage_t, list);
+		if (dev->type == type) {
+			current = dev;
+			return 0;
+		}
+	}
+	pr_info("%s %d please confirm the %d device is valid\n",
+		__func__, __LINE__, type);
+	return 1;
+}
+
+enum boot_type_e store_get_type(void)
+{
+	struct storage_t *store = store_get_current();
+
+	if (!store) {
+		pr_info("%s %d please init storage device first\n",
+			__func__, __LINE__);
+		return BOOT_NONE;
+	}
+
+	return store->type;
+}
+
+int store_get_device_info(struct storage_info_t *info)
+{
+	struct storage_t *store = store_get_current();
+
+	if (!store) {
+		pr_info("%s %d please init storage device first\n",
+			__func__, __LINE__);
+		return 1;
+	}
+
+	memcpy((char *)info, (char *)&store->info,
+	       sizeof(struct storage_info_t));
+	return 0;
+}
+
+int store_get_device_bootloader_mode(void)
+{
+	struct storage_t *store = store_get_current();
+
+	if (!store) {
+		pr_info("%s %d please init storage device first\n",
+			__func__, __LINE__);
+		return -1;
+	}
+	return store->info.mode;
+}
+
+int store_read(const char *name, loff_t off, size_t size, void *buf)
+{
+	struct storage_t *store = store_get_current();
+
+	if (!store) {
+		pr_info("%s %d please init storage device first\n",
+			__func__, __LINE__);
+		return 1;
+	}
+	return store->read(name, off, size, buf);
+}
+
+int store_write(const char *name, loff_t off, size_t size, void *buf)
+{
+	struct storage_t *store = store_get_current();
+
+	if (!store) {
+		pr_info("%s %d please init storage device first\n",
+			__func__, __LINE__);
+		return 1;
+	}
+	return store->write(name, off, size, buf);
+}
+
+int store_erase(const char *name, loff_t off, size_t size, int scrub)
+{
+	struct storage_t *store = store_get_current();
+
+	if (!store) {
+		pr_info("%s %d please init storage device first\n",
+			__func__, __LINE__);
+		return 1;
+	}
+	return store->erase(name, off, size, scrub);
+}
+
+u64 store_part_size(const char *name)
+{
+	struct storage_t *store = store_get_current();
+
+	if (!store) {
+		pr_info("%s %d please init storage device first\n",
+			__func__, __LINE__);
+		return 1;
+	}
+	return store->get_part_size(name);
+}
+
+u8 store_boot_copy_num(const char *name)
+{
+	struct storage_t *store = store_get_current();
+
+	if (!store) {
+		pr_info("%s %d please init storage device first\n",
+			__func__, __LINE__);
+		return 1;
+	}
+	return store->get_copies(name);
+}
+
+
+#ifndef  SYSCTRL_SEC_STATUS_REG2
+static u32 fake_reg = 0;
+#define SYSCTRL_SEC_STATUS_REG2		(&fake_reg)
+#endif
+u8 store_boot_copy_start(void)
+{
+	struct storage_t *store = store_get_current();
+	//cpu_id_t cpu_id = get_cpu_id();
+
+	if (!store) {
+		pr_info("%s %d please init storage device first\n",
+			__func__, __LINE__);
+		return 0;
+	}
+	if (store->type != BOOT_EMMC)
+		return 0;
+	if (0) // (cpu_id.family_id == MESON_CPU_MAJOR_ID_SC2)
+		return storage_get_emmc_boot_start();
+	return 0;
+}
+
+u8 store_bootup_bootidx(const char *name)
+{
+	// cpu_id_t cpu_id = get_cpu_id();
+	u8 bl2_idx = 0, fip_idx = 0;
+	u32 val = 0;
+
+	if (0) { // cpu_id.family_id == MESON_CPU_MAJOR_ID_SC2) {
+			bl2_idx = readl(SYSCTRL_SEC_STATUS_REG2) & 0xF;
+			//TODO: fixme after robust devfip is finished.
+			fip_idx = bl2_idx;
+	} else {
+		/* accroding to the:
+			commit 975b4acbcfa686601999d56843471d98e9c0a2cd
+			storage: robust boot: record bootlog in SEC_AO_SEC_GP_CFG2 [1/2]
+			PD#SWPL-4850
+			...
+			record the bootup bl2/fip into SEC_AO_SEC_GP_CFG2
+			bit[27-25] bl2
+			bit[24-22] fip
+		*/
+		val = readl(SEC_AO_SEC_GP_CFG2);
+		bl2_idx = (val >> 25) & 0x7;
+		fip_idx = (val >> 22) & 0x7;
+	}
+	if (!strncmp(name, "bl2", sizeof("bl2")) ||
+			!strncmp(name, "spl", sizeof("spl")))
+		return bl2_idx;
+	else
+		return fip_idx;
+}
+
+void store_restore_bootidx(void)
+{
+	// cpu_id_t cpu_id = get_cpu_id();
+	if (0) { // (cpu_id.family_id == MESON_CPU_MAJOR_ID_SC2) {
+		extern void aml_set_bootsequence(uint32_t val);
+		aml_set_bootsequence(0x55);
+	}
+	return;
+}
+
+u64 store_boot_copy_size(const char *name)
+{
+	struct storage_t *store = store_get_current();
+
+	if (!store) {
+		pr_info("%s %d please init storage device first\n",
+			__func__, __LINE__);
+		return 1;
+	}
+	return store->get_copy_size(name);
+}
+
+int store_boot_read(const char *name, u8 copy, size_t size, void *buf)
+{
+	struct storage_t *store = store_get_current();
+
+	if (!store) {
+		pr_info("%s %d please init storage device first\n",
+			__func__, __LINE__);
+		return 1;
+	}
+	return store->boot_read(name, copy, size, buf);
+}
+
+int store_boot_write(const char *name, u8 copy, size_t size, void *buf)
+{
+	struct storage_t *store = store_get_current();
+
+	if (!store) {
+		pr_info("%s %d please init storage device first\n",
+			__func__, __LINE__);
+		return 1;
+	}
+	return store->boot_write(name, copy, size, buf);
+}
+
+int store_boot_erase(const char *name, u8 copy)
+{
+	struct storage_t *store = store_get_current();
+
+	if (!store) {
+		pr_info("%s %d please init storage device first\n",
+			__func__, __LINE__);
+		return 1;
+	}
+	return store->boot_erase(name, copy);
+}
+
+u32 store_rsv_size(const char *name)
+{
+	struct storage_t *store = store_get_current();
+
+	if (!store) {
+		pr_info("%s %d please init storage device first\n",
+			__func__, __LINE__);
+		return 1;
+	}
+	return store->get_rsv_size(name);
+}
+
+int store_rsv_read(const char *name, size_t size, void *buf)
+{
+	struct storage_t *store = store_get_current();
+
+	if (!store) {
+		pr_info("%s %d please init storage device first\n",
+			__func__, __LINE__);
+		return 1;
+	}
+	return store->read_rsv(name, size, buf);
+}
+
+int store_rsv_write(const char *name, size_t size, void *buf)
+{
+	struct storage_t *store = store_get_current();
+
+	if (!store) {
+		pr_info("%s %d please init storage device first\n",
+			__func__, __LINE__);
+		return 1;
+	}
+	return store->write_rsv(name, size, buf);
+}
+
+int store_rsv_erase(const char *name)
+{
+	struct storage_t *store = store_get_current();
+
+	if (!store) {
+		pr_info("%s %d please init storage device first\n",
+			__func__, __LINE__);
+		return 1;
+	}
+	return store->erase_rsv(name);
+}
+
+int store_rsv_protect(const char *name, bool ops)
+{
+	struct storage_t *store = store_get_current();
+
+	if (!store) {
+		pr_info("%s %d please init storage device first\n",
+			__func__, __LINE__);
+		return 1;
+	}
+	return store->protect_rsv(name, ops);
+}
+
+static int do_store_init(struct cmd_tbl *cmdtp,
+			 int flag, int argc, char * const argv[])
+{
+	u32 init_flag = 1;
+	u8 ret = 0;
+
+	if (unlikely(argc != 2 && argc != 3))
+		return CMD_RET_USAGE;
+
+	if (argc == 3)
+		init_flag = simple_strtoul(argv[2], NULL, 10);
+
+	/*Returns a nonzero value: device index*/
+	if (store_init(init_flag))
+		ret = 0;
+	else ret = 1;
+	return ret;
+}
+
+void store_print_device(struct storage_t *store_dev)
+{
+	int i;
+
+	for (i = 0; i < ARRAY_SIZE(device_list); i++)
+		if (store_dev->type & device_list[i].index)
+			pr_info("device type: [%s]\n", device_list[i].type);
+	pr_info("name %s\n", store_dev->info.name);
+	pr_info("id :");
+	for (i = 0; i < ARRAY_SIZE(store_dev->info.id); i++)
+		pr_info(" 0x%x", store_dev->info.id[i]);
+	pr_info("\n");
+	pr_info("read unit %d\n", store_dev->info.read_unit);
+	pr_info("write unit %d\n", store_dev->info.write_unit);
+	pr_info("erase unit %d\n", store_dev->info.erase_unit);
+	pr_info("total size %lld\n", store_dev->info.caps);
+	if (store_dev->info.mode)
+		pr_info("bootloader in discrete mode : %d\n",
+			store_dev->info.mode);
+	else
+		pr_info("bootloader in compact mode : %d\n",
+			store_dev->info.mode);
+}
+
+static int do_store_device(struct cmd_tbl *cmdtp,
+			int flag, int argc, char * const argv[])
+{
+	if (argc == 2) {
+		struct storage_t *store_dev, *dev;
+		struct list_head *entry;
+
+		store_dev = store_get_current();
+		pr_info("current device:\n");
+		pr_info("----------------------------------\n");
+		store_print_device(store_dev);
+		pr_info("----------------------------------\n");
+		list_for_each(entry, &store_dev->list) {
+			dev = list_entry(entry, struct storage_t, list);
+			pr_info("valid device:\n");
+			pr_info("----------------------------------\n");
+			store_print_device(dev);
+			pr_info("----------------------------------\n");
+		}
+		return 0;
+	} else if (argc == 3) {
+		char *name = NULL;
+		int i = 0, ret = 0;
+		name = argv[2];
+		for (i = 0; i < ARRAY_SIZE(device_list); i++)
+			if (!strcmp(name, device_list[i].type)) {
+
+				ret = store_set_device(device_list[i].index);
+				if (!ret) {
+					pr_info("now current device is: %s\n",
+						name);
+					return 0;
+				}
+			}
+		pr_info("%s %d no such device: %s\n",
+			__func__, __LINE__, name);
+		return ret;
+	}
+	return CMD_RET_USAGE;
+}
+
+static int do_store_partition(struct cmd_tbl *cmdtp,
+			int flag, int argc, char * const argv[])
+{
+	struct storage_t *store_dev;
+	int i = 0, partitions = 0;
+	int ret = 0;
+	char name[16];
+
+	if (argc > 2)
+		return CMD_RET_USAGE;
+	else {
+		store_dev = store_get_current();
+		if (store_dev->get_part_count)
+			partitions = store_dev->get_part_count();
+		pr_info("%d partitions of device %s:\n",
+			partitions, store_dev->info.name);
+
+		if (store_dev->list_part_name)
+			ret = store_dev->list_part_name(i, name);
+
+		return ret;
+	}
+}
+
+#ifdef CONFIG_AML_MTD
+extern int is_mtd_store_boot_area(const char *part_name);
+#endif
+static int do_store_erase(struct cmd_tbl *cmdtp,
+			  int flag, int argc, char * const argv[])
+{
+	struct storage_t *store = store_get_current();
+	unsigned long offset;
+	size_t size = 0;
+	char *name = NULL;
+	char *s;
+	int scrub_flag = 0, ret;
+	unsigned long time;
+
+	const char *scrub =
+		"Warning: scrub_flag is 1!!!!"
+		"scrub operation!!!\n"
+		"will erase oob area\n"
+		"There is no reliable way to recover them.\n"
+		"		  "
+		"are sure of what you are doing!\n"
+		"\nReally erase this NAND flash? <y/N>\n";
+
+	if (!store) {
+		pr_info("%s %d please init your storage device first!\n",
+			__func__, __LINE__);
+		return CMD_RET_FAILURE;
+	}
+
+	if (strncmp(argv[1], "scrub", 5) == 0)
+		scrub_flag = 1;
+
+	if (scrub_flag == 1) {
+		puts(scrub);
+		if (!confirm_yesno()) {
+			printf("erase aborted\n");
+			return 1;
+		}
+	}
+
+	/*store erase.chip*/
+	s = strchr(argv[1], '.');
+	if (s != NULL && strcmp(s, ".chip") == 0) {
+		offset = 0;
+	} else {
+		/*store erase normal, partition name can't NULL*/
+		if (unlikely(argc != 5))
+			return CMD_RET_USAGE;
+
+		size = (size_t)simple_strtoul(argv[argc - 1], NULL, 16);
+		offset = simple_strtoul(argv[argc - 2], NULL, 16);
+		name = argv[2];
+#ifdef CONFIG_AML_MTD
+		if (is_mtd_store_boot_area(name)) {
+			pr_info("%s %d please enter normal partition name except tpl area!\n",
+				__func__, __LINE__);
+			return CMD_RET_FAILURE;
+		}
+#endif
+	}
+
+	time = get_timer(0);
+	ret = store->erase(name, offset, size, scrub_flag);
+	time = get_timer(time);
+
+	if (size != 0)
+		printf("%lu bytes ", size);
+
+	printf("erased in %lu ms", time);
+	if ((time > 0) && (size != 0)) {
+		puts(" (");
+		print_size(div_u64(size, time) * 1000, "/s");
+		puts(")");
+	}
+	puts("\n");
+
+	return ret;
+}
+
+static int do_store_read(struct cmd_tbl *cmdtp,
+			 int flag, int argc, char * const argv[])
+{
+	struct storage_t *store = store_get_current();
+	unsigned long offset, addr, time;
+	size_t size;
+	char *name = NULL;
+	int ret;
+
+	if (!store) {
+		pr_info("%s %d please init your storage device first!\n",
+			__func__, __LINE__);
+		return CMD_RET_FAILURE;
+	}
+
+	if (unlikely(argc != 5 && argc != 6))
+		return CMD_RET_USAGE;
+
+	addr = simple_strtoul(argv[2], NULL, 16);
+	size = (size_t)simple_strtoul(argv[argc - 1], NULL, 16);
+	offset = simple_strtoul(argv[argc - 2], NULL, 16);
+	if (argc == 6)
+		name = argv[3];
+#ifdef CONFIG_AML_MTD
+	if (is_mtd_store_boot_area(name)) {
+			pr_info("%s %d please enter normal partition name except tpl area!\n",
+				__func__, __LINE__);
+			return CMD_RET_FAILURE;
+		}
+#endif
+	time = get_timer(0);
+	ret = store->read(name, offset, size, (u_char *)addr);
+	time = get_timer(time);
+
+	if (size != 0)
+		printf("%lu bytes ", size);
+
+	printf("read in %lu ms", time);
+	if ((time > 0) && (size != 0)) {
+		puts(" (");
+		print_size(div_u64(size, time) * 1000, "/s");
+		puts(")");
+	}
+	puts("\n");
+
+	return ret;
+}
+
+static int name2index(struct boot_layout *boot_layout, const char *img)
+{
+	boot_area_entry_t *boot_entry = NULL;
+	int i;
+
+	boot_entry = boot_layout->boot_entry;
+	for (i = 1; i < MAX_BOOT_AREA_ENTRIES && boot_entry[i].size; i++) {
+		if (!strncmp(img, boot_entry[i].name, strlen(boot_entry[i].name)))
+			return i;
+	}
+
+	return -1;
+}
+
+static int do_store_write_bl2img(struct cmd_tbl *cmdtp,
+			  int flag, int argc, char * const argv[])
+{
+	struct storage_t *store = store_get_current();
+	unsigned long offset, addr;
+	size_t size, size_src;
+	char *name = NULL;
+	int ret = -1, index;
+	struct boot_layout *boot_layout = &general_boot_layout;
+
+	if (!store) {
+		pr_info("%s %d please init your storage device first!\n",
+			__func__, __LINE__);
+		return CMD_RET_FAILURE;
+	}
+
+	addr = simple_strtoul(argv[2], NULL, 16);
+	name = argv[3];
+	size = simple_strtoul(argv[4], NULL, 16);
+
+	index = name2index(&general_boot_layout, name);
+	offset = boot_layout->boot_entry[index].offset;
+	size_src = boot_layout->boot_entry[index].size;
+	printf("[%s] offset:0x%lx, index:%d\n", name, offset, index);
+
+	if (size_src != size)
+		printf("new img size:0x%lx != img src:0x%lx\n", size, size_src);
+
+	ret = store->boot_write(name, offset, size, (u_char *)addr);
+
+	return ret;
+}
+
+int store_write_bl2img(void* addr, const char *name, size_t size)
+{
+	struct storage_t *store = store_get_current();
+	unsigned long offset;
+	size_t size_src;
+	int ret = -1, index;
+	struct boot_layout *boot_layout = &general_boot_layout;
+
+	if (!store) {
+		pr_info("%s %d please init your storage device first!\n",
+			__func__, __LINE__);
+		return CMD_RET_FAILURE;
+	}
+
+	index = name2index(&general_boot_layout, name);
+	offset = boot_layout->boot_entry[index].offset;
+	size_src = boot_layout->boot_entry[index].size;
+	printf("[%s] offset:0x%lx, index:%d\n", name, offset, index);
+
+	if (size_src != size)
+		printf("new img size:0x%zx != img src:0x%zx\n", size, size_src);
+
+	ret = store->boot_write(name, offset, size, (u_char *)addr);
+	if (size != 0)
+		printf("[%s][%d]%lx bytes\n", __func__, __LINE__, size);
+
+	return ret;
+}
+
+static int do_store_write(struct cmd_tbl *cmdtp,
+			  int flag, int argc, char * const argv[])
+{
+	struct storage_t *store = store_get_current();
+	unsigned long offset, addr, time;
+	size_t size;
+	char *name = NULL;
+	int ret;
+
+	if (!store) {
+		pr_info("%s %d please init your storage device first!\n",
+			__func__, __LINE__);
+		return CMD_RET_FAILURE;
+	}
+
+	if (unlikely(argc != 5 && argc != 6))
+		return CMD_RET_USAGE;
+
+	addr = simple_strtoul(argv[2], NULL, 16);
+	offset = simple_strtoul(argv[argc - 2], NULL, 16);
+	size = (size_t)simple_strtoul(argv[argc - 1], NULL, 16);
+	if (argc == 6)
+		name = argv[3];
+#ifdef CONFIG_AML_MTD
+	if (is_mtd_store_boot_area(name)) {
+			pr_info("%s %d please enter normal partition name except tpl area!\n",
+				__func__, __LINE__);
+			return CMD_RET_FAILURE;
+		}
+#endif
+	time = get_timer(0);
+	ret = store->write(name, offset, size, (u_char *)addr);
+	time = get_timer(time);
+
+	if (size != 0)
+		printf("%lu bytes ", size);
+
+	printf("write in %lu ms", time);
+	if ((time > 0) && (size != 0)) {
+		puts(" (");
+		print_size(div_u64(size, time) * 1000, "/s");
+		puts(")");
+	}
+	puts("\n");
+
+	return ret;
+}
+
+static int do_store_boot_read(struct cmd_tbl *cmdtp,
+			      int flag, int argc, char * const argv[])
+{
+	struct storage_t *store = store_get_current();
+	unsigned long addr;
+	size_t size;
+	u8 cpy;
+	char *name;
+
+	if (!store) {
+		pr_info("%s %d please init your storage device first!\n",
+			__func__, __LINE__);
+		return CMD_RET_FAILURE;
+	}
+
+	if (unlikely(argc != 6))
+		return CMD_RET_USAGE;
+
+	name = argv[2];
+	addr = (unsigned long)simple_strtoul(argv[3], NULL, 16);
+	cpy = (u8)simple_strtoul(argv[4], NULL, 16);
+	size = (size_t)simple_strtoul(argv[5], NULL, 16);
+
+	return store->boot_read(name, cpy, size, (u_char *)addr);
+}
+
+static int bl2x_mode_check_header(p_payload_info_t pInfo)
+{
+	p_payload_info_hdr_t hdr    = &pInfo->hdr;
+	const int nItemNum = hdr->byItemNum;
+	p_payload_info_item_t pItem = pInfo->arrItems;
+	u8 i = 0;
+	int sz_payload = 0;
+	uint64_t align_size = 1;
+	struct storage_startup_parameter *ssp = &g_ssp;
+	u8 cal_copy = ssp->boot_bakups;
+
+	printf("\naml log : info parse...\n");
+	printf("\tsztimes : %s\n",hdr->szTimeStamp);
+	printf("\tversion : %d\n",hdr->byVersion);
+	printf("\tItemNum : %d\n",nItemNum);
+	printf("\tSize    : %d(0x%x)\n",    hdr->nSize, hdr->nSize);
+	if (nItemNum > 8 || nItemNum < 3) {
+		pr_info("illegal nitem num %d\n", nItemNum);
+		return __LINE__;
+	}
+	if (ssp->boot_device == BOOT_NAND_MTD)
+		align_size = ((NAND_RSV_OFFSET / cal_copy) * ssp->sip.nsp.page_size);
+	else if (ssp->boot_device == BOOT_SNAND)
+		align_size = ((NAND_RSV_OFFSET / cal_copy) * ssp->sip.snasp.pagesize);
+
+	sz_payload = pItem->nPayLoadSize;
+	STORAGE_ROUND_UP_IF_UNALIGN(sz_payload, align_size);
+	if (sz_payload > ssp->boot_entry[0].size)
+		return __LINE__;
+	if (ssp->boot_device == BOOT_NAND_MTD)
+		align_size = ssp->sip.nsp.block_size;
+	else if (ssp->boot_device == BOOT_SNAND)
+		align_size = ssp->sip.snasp.pagesize *
+		ssp->sip.snasp.pages_per_eraseblock;
+	++pItem;
+
+	for (i = 1; i < nItemNum; i++, ++pItem) {
+		sz_payload = pItem->nPayLoadSize;
+		STORAGE_ROUND_UP_IF_UNALIGN(sz_payload, align_size);
+		if (sz_payload > ssp->boot_entry[i].size)
+			return __LINE__;
+	}
+
+	return 0;
+}
+
+static int _store_boot_write(const char *part_name, u8 cpy, size_t size, void *addr)
+{
+	// cpu_id_t cpu_id = get_cpu_id();
+	enum boot_type_e medium_type = store_get_type();
+	struct storage_startup_parameter *ssp = &g_ssp;
+	//struct storage_boot_entry *boot_entry = ssp->boot_entry;
+	//u8 i;
+	int ret = 0;
+	struct storage_t *store = store_get_current();
+	int bl2_size = BL2_SIZE;
+	int bl2_cpynum = 0;
+	int tpl_per_size = CONFIG_TPL_SIZE_PER_COPY;
+	int tpl_cpynum = 0;
+	int bootloader_maxsize = 0;
+
+	if (store_get_device_bootloader_mode() != DISCRETE_BOOTLOADER)
+		return store->boot_write(part_name, cpy, size, (u_char *)addr);
+
+	if (BOOT_NAND_MTD == medium_type ||  BOOT_SNAND == medium_type)
+		tpl_cpynum = CONFIG_NAND_TPL_COPY_NUM;
+	else if (medium_type == BOOT_SNOR)
+		tpl_cpynum = CONFIG_NOR_TPL_COPY_NUM;
+
+	if (0) { // cpu_id.family_id == MESON_CPU_MAJOR_ID_SC2) {
+		bl2_cpynum = ssp->boot_bakups;
+	} else	{
+		bootloader_maxsize = bl2_size + tpl_per_size;
+		bl2_cpynum = CONFIG_BL2_COPY_NUM;
+		if (size > bootloader_maxsize) {
+			pr_info("bootloader sz 0x%lx too large,max sz 0x%x\n",
+				size, bootloader_maxsize);
+			return CMD_RET_FAILURE;
+		}
+	}
+
+	if ((cpy >= tpl_cpynum || cpy >= bl2_cpynum) && (cpy != BOOT_OPS_ALL)) {
+		pr_info("update copy %d invalid, must < min(%d, %d)\n",
+			cpy, tpl_cpynum, bl2_cpynum);
+		return CMD_RET_FAILURE;
+	}
+
+	p_payload_info_t pinfo = parse_uboot_sheader((u8 *)addr);
+
+	if (!pinfo) {
+		ret = store->boot_write("tpl", cpy, size - bl2_size, (u_char *)(addr +bl2_size));
+		if (ret) {
+			pr_info("failed update tpl\n");
+			return CMD_RET_FAILURE;
+		}
+	} else {
+		if (bl2x_mode_check_header(pinfo)) {
+			pr_info("!!!warning bl2xx size is bigger than bl2x layout size\n");
+			pr_info("plase check bl2x,or erase flash and turn off\n");
+			pr_info("then turn on, and update uboot again\n");
+			return CMD_RET_FAILURE;
+		}
+
+		char name[8];
+		int nindex = 0;
+		p_payload_info_hdr_t hdr    = &pinfo->hdr;
+		p_payload_info_item_t pitem = pinfo->arrItems;
+		int off_payload = 0;
+		int sz_payload = 0;
+
+		memset(name, 0, 8);
+		for (nindex = 1, pitem +=1; nindex < hdr->byItemNum; ++nindex, ++pitem) {
+			memcpy(name, &pitem->nMagic, sizeof(unsigned int));
+			off_payload = pitem->nOffset;
+			sz_payload = pitem->nPayLoadSize;
+			pr_info("item[%d]%4s offset 0x%08x sz 0x%x\n",
+				nindex, name, off_payload, sz_payload);
+			if (!sz_payload)
+				continue;
+			ret = store->boot_write(general_boot_part_entry[nindex].name, cpy, sz_payload, (u_char *)(addr + off_payload));
+			if (ret) {
+				pr_info("Fail in flash payload %s\n",name);
+				return CMD_RET_FAILURE;
+			}
+		}
+	}
+
+	ret =  store->boot_write("bl2", cpy, bl2_size, (u_char *)addr);
+	if (ret) {
+		pr_info("Fail in flash payload bl2\n");
+		return CMD_RET_FAILURE;
+	}
+	return ret;
+
+}
+
+static int do_store_boot_write(struct cmd_tbl *cmdtp,
+			       int flag, int argc, char * const argv[])
+{
+	struct storage_t *store = store_get_current();
+	unsigned long addr;
+	size_t size;
+	u8 cpy = BOOT_OPS_ALL;
+	char *name;
+
+	if (!store) {
+		pr_info("%s %d please init your storage device first!\n",
+			__func__, __LINE__);
+		return CMD_RET_FAILURE;
+	}
+
+	if (unlikely(argc != 5 && argc != 6))
+		return CMD_RET_USAGE;
+
+	name = argv[2];
+	addr = (unsigned long)simple_strtoul(argv[3], NULL, 16);
+	size = (size_t)simple_strtoul(argv[argc - 1], NULL, 16);
+	if (argc == 6)
+		cpy = (u8)simple_strtoul(argv[4], NULL, 16);
+
+	if (strcmp(name, "bootloader") == 0) {
+		return _store_boot_write(name, cpy, size, (u_char *)addr);
+	}
+
+	return store->boot_write(name, cpy, size, (u_char *)addr);
+}
+
+static int do_store_boot_erase(struct cmd_tbl *cmdtp,
+			       int flag, int argc, char * const argv[])
+{
+	struct storage_t *store = store_get_current();
+	u8 cpy = BOOT_OPS_ALL;
+	char *name;
+
+	if (!store) {
+		pr_info("%s %d please init your storage device first!\n",
+			__func__, __LINE__);
+		return CMD_RET_FAILURE;
+	}
+
+	if (unlikely(argc != 3 && argc != 4))
+		return CMD_RET_USAGE;
+
+	name = argv[2];
+	if (argc == 4)
+		cpy = (u8)simple_strtoul(argv[3], NULL, 16);
+
+	return store->boot_erase(name, cpy);
+}
+
+static int do_store_rsv_ops(struct cmd_tbl *cmdtp,
+			    int flag, int argc, char * const argv[])
+{
+	struct storage_t *store = store_get_current();
+	char *name = NULL;
+
+	if (!store) {
+		pr_info("%s %d please init your storage device first!\n",
+			__func__, __LINE__);
+		return CMD_RET_FAILURE;
+	}
+
+	if (!strcmp(argv[2], "erase")) {
+		if (argc == 3)
+			;
+		else if (argc == 4)
+			name = argv[3];
+		else
+			return CMD_RET_USAGE;
+		return store->erase_rsv(name);
+	} else if (!strcmp(argv[2], "read") ||
+			   !strcmp(argv[2], "write")) {
+		u8 cmd = strcmp(argv[2], "read") ? 0 : 1;
+		unsigned long addr = simple_strtoul(argv[4], NULL, 16);
+		size_t size = (size_t)simple_strtoul(argv[5], NULL, 16);
+
+		name = argv[3];
+		if (unlikely(argc != 6))
+			return CMD_RET_USAGE;
+		if (cmd)
+			return store->read_rsv(name, size, (u_char *)addr);
+		else
+			return store->write_rsv(name, size, (u_char *)addr);
+	} else if (!strcmp(argv[2], "protect")) {
+		bool flag = false;
+		char *ops;
+
+		if (unlikely(argc != 4 && argc != 5))
+			return CMD_RET_USAGE;
+
+		name = (argc == 4) ? NULL : argv[3];
+		ops = argv[argc - 1];
+		if (!strcmp(ops, "on"))
+			flag = true;
+		else if (!strcmp(ops, "off"))
+			flag = false;
+		return store->protect_rsv(name, flag);
+	}
+	return CMD_RET_USAGE;
+}
+
+static struct cmd_tbl cmd_store_sub[] = {
+	U_BOOT_CMD_MKENT(init, 4, 0, do_store_init, "", ""),
+	U_BOOT_CMD_MKENT(device, 4, 0, do_store_device, "", ""),
+	U_BOOT_CMD_MKENT(partition, 3, 0, do_store_partition, "", ""),
+	U_BOOT_CMD_MKENT(scrub, 5, 0, do_store_erase, "", ""),
+	U_BOOT_CMD_MKENT(erase, 5, 0, do_store_erase, "", ""),
+	U_BOOT_CMD_MKENT(read, 6, 0, do_store_read, "", ""),
+	U_BOOT_CMD_MKENT(write, 7, 0, do_store_write, "", ""),
+	U_BOOT_CMD_MKENT(write_bl2img, 5, 0, do_store_write_bl2img, "", ""),
+	U_BOOT_CMD_MKENT(boot_read,	6, 0, do_store_boot_read, "", ""),
+	U_BOOT_CMD_MKENT(boot_write, 6, 0, do_store_boot_write, "", ""),
+	U_BOOT_CMD_MKENT(boot_erase, 4, 0, do_store_boot_erase, "", ""),
+	U_BOOT_CMD_MKENT(rsv, 6, 0, do_store_rsv_ops, "", ""),
+};
+
+static int do_store(struct cmd_tbl *cmdtp, int flag, int argc, char * const argv[])
+{
+	struct cmd_tbl *c;
+
+	if (argc < 2)
+		return CMD_RET_USAGE;
+
+	c = find_cmd_tbl(argv[1], cmd_store_sub, ARRAY_SIZE(cmd_store_sub));
+	if (c)
+		return c->cmd(cmdtp, flag, argc, argv);
+
+	return CMD_RET_USAGE;
+}
+
+U_BOOT_CMD(store, CONFIG_SYS_MAXARGS, 1, do_store,
+	"STORE sub-system:",
+	"store init [flag]\n"
+	"	init storage device\n"
+	"store device [name]\n"
+	"	show or set storage device\n"
+	"	'store device' command will list\n"
+	"	all valid storage device and print.\n"
+	"	'store device [name]' will set the\n"
+	"	[name] device to the current device\n"
+	"store partition\n"
+	"	show partitions of current device\n"
+	"store read addr [partition name] off size\n"
+	"	read 'size' bytes from offset 'off'\n"
+	"	of device/partition 'partition name' to.\n"
+	"	address 'addr' of memory.\n"
+	"	if partition name not value. read start with\n"
+	"	offset in normal logic area,if tpl area exist\n"
+	"	read offset at end of tpl area\n"
+	"store write addr [partition name] off size\n"
+	"	write 'size' bytes to offset 'off' of\n"
+	"	device/partition [partition name] from\n"
+	"	address 'addr' of memory.\n"
+	"	if partition name not value. write start with\n"
+	"	offset in normal logic area,if tpl area exist\n"
+	"	write offset at end of tpl area\n"
+	"store erase partition name off size.\n"
+	"	erase 'size' bytes from offset 'off'\n"
+	"	of device/partition [partition name]\n"
+	"	partition name must't NULL\n"
+	"store scrub partition name off size.\n"
+	"	erase 'size' bytes from offset 'off'\n"
+	"	of device/partition [partition name]\n"
+	"	includes oob area if the device has.\n"
+	"	partition name must't NULL\n"
+	"store erase.chip\n"
+	"	erase all nand chip,except bad block\n"
+	"store scrub.chip\n"
+	"	erase all nand chip,include bad block\n"
+	"store boot_read name addr copy size\n"
+	"	read 'size' bytes from 'copy'th backup\n"
+	"	in name partition, 'copy' can't be null.\n"
+	"	name:\n"
+	"	in discrete mode: 'bl2'/'tpl'(fip)\n"
+	"	in compact mode: 'bootloader'\n"
+	"store boot_write name addr [copy] size\n"
+	"	write 'size' bytes to 'copy'th backup\n"
+	"	in [name] partition from address\n"
+	"	'addr' of memory. when the optional 'copy'\n"
+	"	is null, it will writes to all copies\n"
+	"	name:\n"
+	"	in discrete mode:\n"
+	"	'bl2/bl2e/bl2x/ddrfip/tpl(fip), only update part\n"
+	"	'bootloader', update whole uboot.bin, in this case\n"
+	"	@copy:if used, must < min(tplCpyNum, Bl2CpyNum), update only the specified copy\n"
+	"	if not used, update all the copies of bl2 bl2e bl2x ddrfip tpl!\n"
+	"	in compact mode: 'bootloader'\n"
+	"store boot_erase name [copy]\n"
+	"	erase the name info from 'copy'th backup\n"
+	"	when the optional 'copy' not value, it\n"
+	"	will erase all copies.\n"
+	"	name:\n"
+	"	in discrete mode: \n"
+	"	'bl2'/'tpl'(fip): erase bl2/tpl partition\n"
+	"	'bootloader':erase bl2 + tpl partition\n"
+	"	in compact mode: 'bootloader'\n"
+	"store rsv read name addr size\n"
+	"	read 'size' bytes 'name' rsv info\n"
+	"	to address 'addr' of memory\n"
+	"	'name' could be key/dtb/env etc...\n"
+	"store rsv write name addr size\n"
+	"	write 'size' bytes 'name' rsv info\n"
+	"	from address 'addr' of memory\n"
+	"store rsv erase name\n"
+	"	erase 'name' rsv info\n"
+	"	name must't null\n"
+	"store rsv protect name on/off\n"
+	"	turn on/off the rsv info protection\n"
+	"	name must't null\n"
+);
diff --git a/common/aml_dt.c b/common/aml_dt.c
new file mode 100644
index 00000000000..a6888999d44
--- /dev/null
+++ b/common/aml_dt.c
@@ -0,0 +1,600 @@
+/*
+* Copyright (C) 2017 Amlogic, Inc. All rights reserved.
+* *
+This program is free software; you can redistribute it and/or modify
+* it under the terms of the GNU General Public License as published by
+* the Free Software Foundation; either version 2 of the License, or
+* (at your option) any later version.
+* *
+This program is distributed in the hope that it will be useful, but WITHOUT
+* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
+* more details.
+* *
+You should have received a copy of the GNU General Public License along
+* with this program; if not, write to the Free Software Foundation, Inc.,
+* 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+* *
+Description:
+*/
+#include <common.h>
+#include <bootm.h>
+#include <command.h>
+#include <image.h>
+#include <malloc.h>
+#include <amlogic/asm/io.h>
+#include <amlogic/asm/secure_apb.h>
+#include <amlstorage/partition_table.h>
+#include <gzip.h>
+
+//#define AML_DT_DEBUG
+#ifdef AML_DT_DEBUG
+#define dbg_printf(...) printf(__VA_ARGS__)
+#else
+#define dbg_printf(...) ((void)0)
+#endif
+
+#define  AML_MULTI_DTB_API_NEW
+//#define AML_MULTI_DTB_CHECK_CMD //command for multi-dtb test
+
+#ifdef AML_MULTI_DTB_API_NEW
+
+/*for multi-dtb gzip buffer*/
+#define GUNZIP_BUF_SIZE         (1<<20)     /*1MB  is enough?*/
+
+/*magic for multi-dtb*/
+#define MAGIC_GZIP_MASK         (0x0000FFFF)
+#define MAGIC_GZIP_ID           (0x00008B1F)
+#define IS_GZIP_PACKED(nMagic)  (MAGIC_GZIP_ID == (MAGIC_GZIP_MASK & nMagic))
+#define MAGIC_DTB_SGL_ID        (0xedfe0dd0)
+#define MAGIC_DTB_MLT_ID        (0x5f4c4d41)
+
+/*amlogic multi-dtb version*/
+#define AML_MUL_DTB_VER_1       (1)
+#define AML_MUL_DTB_VER_2       (2)
+
+/*max char for dtb name, fixed to soc_package_board format*/
+#define AML_MAX_DTB_NAME_SIZE   (128)
+#define AML_DTB_TOKEN_MAX_COUNT (AML_MAX_DTB_NAME_SIZE>>1)
+
+typedef struct{
+	unsigned int nMagic;
+	unsigned int nVersion;
+	unsigned int nDTBCount;
+}st_dtb_hdr_t,*p_st_dtb_hdr_t;
+
+/*v1,v2 multi-dtb only support max to 3 tokens for each DTB name*/
+#define MULTI_DTB_TOKEN_MAX_COUNT      (3)
+#define MULTI_DTB_TOKEN_UNIT_SIZE_V1   (4)      //v1 support 4bytes for each token
+#define MULTI_DTB_TOKEN_UNIT_SIZE_V2   (16)     //v2 support 16bytes for each token
+
+/*v1 multi-dtb*/
+typedef struct{
+	unsigned char     szToken[MULTI_DTB_TOKEN_MAX_COUNT][MULTI_DTB_TOKEN_UNIT_SIZE_V1];
+	int               nDTBOffset;
+	int               nDTBIMGSize;
+}st_dtb_token_v1_t,*p_st_dtb_token_v1_t;
+
+typedef struct{
+	st_dtb_hdr_t      hdr;
+	st_dtb_token_v1_t dtb[1];
+}st_dtb_v1_t,*p_st_dtb_v1_t;
+
+
+/*v2 multi-dtb*/
+typedef struct{
+	unsigned char     szToken[MULTI_DTB_TOKEN_MAX_COUNT][MULTI_DTB_TOKEN_UNIT_SIZE_V2];
+	int               nDTBOffset;
+	int               nDTBIMGSize;
+}st_dtb_token_v2_t,*p_st_dtb_token_v2_t;
+
+typedef struct{
+	st_dtb_hdr_t      hdr;
+	st_dtb_token_v2_t dtb[1];
+}st_dtb_v2_t,*p_st_dtb_v2_t;
+
+
+/*to get the valid DTB index with matched DTB name*/
+static int get_dtb_index(const char aml_dt_buf[128],unsigned long fdt_addr)
+{
+	int nReturn = -1;
+
+	if (!aml_dt_buf)
+		goto exit;
+
+	p_st_dtb_hdr_t pDTBHdr = (p_st_dtb_hdr_t)fdt_addr;
+	char sz_aml_dt_msb[10][MULTI_DTB_TOKEN_UNIT_SIZE_V2];
+	memset(sz_aml_dt_msb,0,sizeof(sz_aml_dt_msb));
+
+	/* split aml_dt with token '_',  e.g "tm2-revb_t962x3_ab301" */
+	//printf("		aml_dt : %s\n",aml_dt_buf);
+
+	char *tokens[AML_DTB_TOKEN_MAX_COUNT];
+	char sz_temp[AML_MAX_DTB_NAME_SIZE+4];
+	memset(tokens,0,sizeof(tokens));
+	memset(sz_temp,0,sizeof(sz_temp));
+	strncpy(sz_temp,aml_dt_buf,128);
+	int i,j;
+	int nLen = strlen(sz_temp);
+	sz_temp[nLen]='_';
+	sz_temp[nLen+1]='\0';
+	nLen +=1;
+	tokens[0]=sz_temp;
+	for (i = 1; i < sizeof(tokens)/sizeof(tokens[0]); i++)
+	{
+		tokens[i] = strstr(tokens[i-1],"_");
+		if (!tokens[i])
+			break;
+
+		*tokens[i]='\0';
+
+		tokens[i]=tokens[i]+1;
+
+		if (!(*tokens[i]))
+		{
+			tokens[i] = 0;
+			break;
+		}
+	}
+
+	//for (i=0;i<10 && tokens[i];++i)
+	//	printf("token-%d:%s\n",i,tokens[i]);
+
+	int nTokenLen = 0;
+
+	switch (pDTBHdr->nVersion)
+	{
+	case AML_MUL_DTB_VER_1:
+	{
+		nTokenLen = MULTI_DTB_TOKEN_UNIT_SIZE_V1;
+	}break;
+	case AML_MUL_DTB_VER_2:
+	{
+		nTokenLen = MULTI_DTB_TOKEN_UNIT_SIZE_V2;
+	}break;
+	default: goto exit; break;
+	}
+
+
+	for (i = 0;i<MULTI_DTB_TOKEN_MAX_COUNT;++i)
+	{
+		if (tokens[i])
+		{
+			char *pbyswap = (char*)sz_aml_dt_msb+(nTokenLen*i);
+			strcpy(pbyswap,tokens[i]);
+			unsigned int nValSwap;
+			for (j = 0;j< nTokenLen;j+=4)
+			{
+				int m;
+				/*swap byte order with unit@4bytes*/
+				nValSwap = *(unsigned int *)(pbyswap+j);
+				for (m=0;m<4;m++)
+					pbyswap[j+m] = (nValSwap >> ((3-m)<<3)) & 0xFF;
+
+				/*replace 0 with 0x20*/
+				for (m=0;m<MULTI_DTB_TOKEN_UNIT_SIZE_V2;++m)
+					if (0 == pbyswap[m])
+						pbyswap[m]=0x20;
+			}
+		}
+		else
+			break;
+	}
+
+	switch (pDTBHdr->nVersion)
+	{
+	case AML_MUL_DTB_VER_1:
+	{
+		p_st_dtb_v1_t pDTB_V1 = (p_st_dtb_v1_t)fdt_addr;
+		for (i=0;i< pDTB_V1->hdr.nDTBCount;++i)
+		{
+			if (!memcmp(pDTB_V1->dtb[i].szToken,sz_aml_dt_msb,
+				MULTI_DTB_TOKEN_MAX_COUNT*nTokenLen))
+			{
+				nReturn = i;
+				break;
+			}
+		}
+
+	}break;
+	case AML_MUL_DTB_VER_2:
+	{
+		p_st_dtb_v2_t pDTB_V2 = (p_st_dtb_v2_t)fdt_addr;
+		for (i=0;i< pDTB_V2->hdr.nDTBCount;++i)
+		{
+			if (!memcmp(pDTB_V2->dtb[i].szToken,sz_aml_dt_msb,
+				MULTI_DTB_TOKEN_MAX_COUNT*nTokenLen))
+			{
+				nReturn = i;
+				break;
+			}
+		}
+
+	}break;
+	default: goto exit; break;
+	}
+
+exit:
+
+	return nReturn;
+
+}
+
+unsigned long __attribute__((unused))	get_multi_dt_entry(unsigned long fdt_addr)
+{
+	unsigned long lReturn = 0; //return buffer for valid DTB;
+	void * gzip_buf = NULL;
+	unsigned long pInputFDT  = fdt_addr;
+	p_st_dtb_hdr_t pDTBHdr   = (p_st_dtb_hdr_t)pInputFDT;
+	unsigned long unzip_size = GUNZIP_BUF_SIZE;
+
+	printf("      Amlogic Multi-DTB tool\n");
+
+	/* first check the blob header, support GZIP format */
+	if ( IS_GZIP_PACKED(pDTBHdr->nMagic))
+	{
+		printf("      GZIP format, decompress...\n");
+		gzip_buf = malloc(GUNZIP_BUF_SIZE);
+		if (!gzip_buf)
+		{
+			printf("      ERROR! fail to allocate memory for GUNZIP...\n");
+			goto exit;
+		}
+		memset(gzip_buf, 0, GUNZIP_BUF_SIZE);
+		if (gunzip(gzip_buf, GUNZIP_BUF_SIZE, (void *)pInputFDT, &unzip_size) < 0)
+		{
+			printf("      ERROR! GUNZIP process fail...\n");
+			goto exit;
+		}
+		if (unzip_size > GUNZIP_BUF_SIZE)
+		{
+			printf("      ERROR! GUNZIP overflow...\n");
+			goto exit;
+		}
+		//memcpy((void*)fdt_addr,gzip_buf,unzip_size);
+		pInputFDT = (unsigned long)gzip_buf;
+		pDTBHdr   = (p_st_dtb_hdr_t)pInputFDT;
+	}
+
+
+	switch (pDTBHdr->nMagic)
+	{
+	case MAGIC_DTB_SGL_ID:
+	{
+		printf("      Single DTB detected\n");
+
+		if (fdt_addr != (unsigned long)pInputFDT) //in case of GZIP single DTB
+			memcpy((void*)fdt_addr,(void*)pInputFDT,unzip_size);
+
+		lReturn = fdt_addr;
+
+	}break;
+	case MAGIC_DTB_MLT_ID:
+	{
+		printf("      Multi DTB detected.\n");
+		printf("      Multi DTB tool version: v%d.\n", pDTBHdr->nVersion);
+		printf("      Support %d DTBS.\n", pDTBHdr->nDTBCount);
+
+
+		/* check and set aml_dt */
+		char aml_dt_buf[AML_MAX_DTB_NAME_SIZE+4];
+		memset(aml_dt_buf, 0, sizeof(aml_dt_buf));
+
+		/* update 2016.07.27, checkhw and setenv everytime,
+		or else aml_dt will set only once if it is reserved */
+		extern int checkhw(char * name);
+#if 1
+		if (checkhw(aml_dt_buf) < 0 || strlen(aml_dt_buf) <= 0)
+		{
+			printf("      Get env aml_dt failed!\n");
+			goto exit;
+		}
+#else
+		char *aml_dt = getenv(AML_DT_UBOOT_ENV);
+		/* if aml_dt not exist or env not ready, get correct dtb by name */
+		if (NULL == aml_dt)
+			checkhw(aml_dt_buf);
+		else
+			memcpy(aml_dt_buf, aml_dt,
+			(strlen(aml_dt)>AML_MAX_DTB_NAME_SIZE?AML_MAX_DTB_NAME_SIZE:(strlen(aml_dt)+1)));
+#endif
+
+		int dtb_match_num = get_dtb_index(aml_dt_buf,(unsigned long)pInputFDT);
+
+		/*check valid dtb index*/
+		if (dtb_match_num < 0 || dtb_match_num >= pDTBHdr->nDTBCount)
+		{
+			printf("      NOT found matched DTB for \"%s\"\n",aml_dt_buf);
+			goto exit;
+		}
+
+		printf("      Found DTB for \"%s\"\n",aml_dt_buf);
+
+		switch (pDTBHdr->nVersion)
+		{
+		case AML_MUL_DTB_VER_1:
+		{
+			p_st_dtb_v1_t pDTB_V1 = (p_st_dtb_v1_t)pInputFDT;
+			lReturn = pDTB_V1->dtb[dtb_match_num].nDTBOffset + pInputFDT;
+
+			if (pInputFDT != fdt_addr)
+			{
+				memcpy((void*)fdt_addr, (void*)lReturn,pDTB_V1->dtb[dtb_match_num].nDTBIMGSize);
+				lReturn = fdt_addr;
+			}
+
+		}break;
+		case AML_MUL_DTB_VER_2:
+		{
+			p_st_dtb_v2_t pDTB_V2 = (p_st_dtb_v2_t)pInputFDT;
+			lReturn = pDTB_V2->dtb[dtb_match_num].nDTBOffset + pInputFDT;
+
+			if (pInputFDT != fdt_addr)
+			{
+				memcpy((void*)fdt_addr, (void*)lReturn,pDTB_V2->dtb[dtb_match_num].nDTBIMGSize);
+				lReturn = fdt_addr;
+			}
+
+		}break;
+		default:
+		{
+			printf("      Invalid Multi-DTB Version [%d]!\n",
+				pDTBHdr->nVersion);
+			goto exit;
+		}break;
+		}
+
+	}break;
+	default: goto exit; break;
+	}
+
+exit:
+
+	if (gzip_buf)
+	{
+		free(gzip_buf);
+		gzip_buf = 0;
+	}
+
+	return lReturn;
+}
+
+#else //#ifdef AML_MULTI_DTB_API_NEW
+
+#define AML_DT_IND_LENGTH_V1		4	/*fixed*/
+#define AML_DT_IND_LENGTH_V2		16	/*fixed*/
+
+#define AML_DT_IND_LENGTH			16
+#define AML_DT_ID_VARI_TOTAL		3	//Total 3 strings
+#define AML_DT_EACH_ID_INT			(AML_DT_IND_LENGTH / 4)
+
+/*Latest version: v2*/
+#define AML_DT_VERSION_OFFSET		4
+#define AML_DT_TOTAL_DTB_OFFSET		8
+#define AML_DT_FIRST_DTB_OFFSET		12
+//#define AML_DT_DTB_HEADER_SIZE	(8+(AML_DT_IND_LENGTH * AML_DT_ID_VARI_TOTAL))
+#define AML_DT_DTB_DT_INFO_OFFSET	0
+//#define AML_DT_DTB_OFFSET_OFFSET	(AML_DT_IND_LENGTH * AML_DT_ID_VARI_TOTAL)
+//#define AML_DT_DTB_SIZE_OFFSET	16
+
+#define AML_DT_UBOOT_ENV	"aml_dt"
+#define DT_HEADER_MAGIC		0xedfe0dd0	/*header of dtb file*/
+#define AML_DT_HEADER_MAGIC	0x5f4c4d41	/*"AML_", multi dtbs supported*/
+
+#define IS_GZIP_FORMAT(data)		((data & (0x0000FFFF)) == (0x00008B1F))
+#define GUNZIP_BUF_SIZE				(0x500000) /* 5MB */
+#define DTB_MAX_SIZE				(AML_DTB_IMG_MAX_SZ)
+
+//#define readl(addr) (*(volatile unsigned int*)(addr))
+extern int checkhw(char * name);
+
+unsigned long __attribute__((unused))
+	get_multi_dt_entry(unsigned long fdt_addr){
+	unsigned int dt_magic = readl(fdt_addr);
+	unsigned int dt_total = 0;
+	unsigned int dt_tool_version = 0;
+	unsigned int gzip_format = 0;
+	void * gzip_buf = NULL;
+	unsigned long dt_entry = fdt_addr;
+
+	printf("      Amlogic multi-dtb tool\n");
+
+	/* first check the file header, support GZIP format */
+	gzip_format = IS_GZIP_FORMAT(dt_magic);
+	if (gzip_format) {
+		printf("      GZIP format, decompress...\n");
+		gzip_buf = malloc(GUNZIP_BUF_SIZE);
+		memset(gzip_buf, 0, GUNZIP_BUF_SIZE);
+		unsigned long unzip_size = GUNZIP_BUF_SIZE;
+		gunzip(gzip_buf, GUNZIP_BUF_SIZE, (void *)fdt_addr, &unzip_size);
+		dbg_printf("      DBG: unzip_size: 0x%x\n", (unsigned int)unzip_size);
+		if (unzip_size > GUNZIP_BUF_SIZE) {
+			printf("      Warning! GUNZIP overflow...\n");
+		}
+		fdt_addr = (unsigned long)gzip_buf;
+		dt_magic = readl(fdt_addr);
+	}
+
+	dbg_printf("      DBG: fdt_addr: 0x%x\n", (unsigned int)fdt_addr);
+	dbg_printf("      DBG: dt_magic: 0x%x\n", (unsigned int)dt_magic);
+
+	/*printf("      Process device tree. dt magic: %x\n", dt_magic);*/
+	if (dt_magic == DT_HEADER_MAGIC) {/*normal dtb*/
+		printf("      Single dtb detected\n");
+		if (gzip_format) {
+			memcpy((void *)dt_entry, (void *)fdt_addr, DTB_MAX_SIZE);
+			fdt_addr = dt_entry;
+			if (gzip_buf)
+				free(gzip_buf);
+		}
+		return fdt_addr;
+	}
+	else if (dt_magic == AML_DT_HEADER_MAGIC) {/*multi dtb*/
+		printf("      Multi dtb detected\n");
+		/* check and set aml_dt */
+		int i = 0;
+		char *aml_dt_buf;
+		aml_dt_buf = (char *)malloc(sizeof(char)*64);
+		printf("Multi dtb malloc aml_dt_buf addr = %p\n", aml_dt_buf);
+		memset(aml_dt_buf, 0, sizeof(aml_dt_buf));
+
+		/* update 2016.07.27, checkhw and setenv everytime,
+		or else aml_dt will set only once if it is reserved */
+#if 1
+		checkhw(aml_dt_buf);
+#else
+		char *aml_dt = getenv(AML_DT_UBOOT_ENV);
+		/* if aml_dt not exist or env not ready, get correct dtb by name */
+		if (NULL == aml_dt)
+			checkhw(aml_dt_buf);
+		else
+			memcpy(aml_dt_buf, aml_dt, (strlen(aml_dt)>64?64:(strlen(aml_dt)+1)));
+#endif
+
+		unsigned int aml_dt_len = aml_dt_buf ? strlen(aml_dt_buf) : 0;
+		if (aml_dt_len <= 0) {
+			printf("      Get env aml_dt failed!\n");
+			if (aml_dt_buf)
+				free(aml_dt_buf);
+			if (gzip_buf)
+				free(gzip_buf);
+			return fdt_addr;
+		}
+
+		/*version control, compatible with v1*/
+		dt_tool_version = readl(fdt_addr + AML_DT_VERSION_OFFSET);
+		unsigned int aml_each_id_length=0;
+		unsigned int aml_dtb_offset_offset;
+		unsigned int aml_dtb_header_size;
+		if (dt_tool_version == 1)
+			aml_each_id_length = 4;
+		else if(dt_tool_version == 2)
+			aml_each_id_length = 16;
+
+		aml_dtb_offset_offset = aml_each_id_length * AML_DT_ID_VARI_TOTAL;
+		aml_dtb_header_size = 8+(aml_each_id_length * AML_DT_ID_VARI_TOTAL);
+		printf("      Multi dtb tool version: v%d .\n", dt_tool_version);
+
+		/*fdt_addr + 0x8: num of dtbs*/
+		dt_total = readl(fdt_addr + AML_DT_TOTAL_DTB_OFFSET);
+		printf("      Support %d dtbs.\n", dt_total);
+
+		/* split aml_dt to 3 strings */
+		char *tokens[3] = {NULL, NULL, NULL};
+		for (i = 0; i < AML_DT_ID_VARI_TOTAL; i++) {
+			tokens[i] = strsep(&aml_dt_buf, "_");
+		}
+		//if (aml_dt_buf)
+			//free(aml_dt_buf);
+		printf("        aml_dt soc: %s platform: %s variant: %s\n", tokens[0], tokens[1], tokens[2]);
+
+		/*match and print result*/
+		char **dt_info;
+		dt_info = (char **)malloc(sizeof(char *)*AML_DT_ID_VARI_TOTAL);
+		for (i = 0; i < AML_DT_ID_VARI_TOTAL; i++)
+			dt_info[i] = (char *)malloc(sizeof(char)*aml_each_id_length);
+		unsigned int dtb_match_num = 0xffff;
+		unsigned int x = 0, y = 0, z = 0; //loop counter
+		unsigned int read_data;
+		for (i = 0; i < dt_total; i++) {
+			for (x = 0; x < AML_DT_ID_VARI_TOTAL; x++) {
+				for (y = 0; y < aml_each_id_length; y+=4) {
+					read_data = readl(fdt_addr + AML_DT_FIRST_DTB_OFFSET + \
+						 i * aml_dtb_header_size + AML_DT_DTB_DT_INFO_OFFSET + \
+						 (x * aml_each_id_length) + y);
+					dt_info[x][y+0] = (read_data >> 24) & 0xff;
+					dt_info[x][y+1] = (read_data >> 16) & 0xff;
+					dt_info[x][y+2] = (read_data >> 8) & 0xff;
+					dt_info[x][y+3] = (read_data >> 0) & 0xff;
+				}
+				for (z=0; z<aml_each_id_length; z++) {
+					/*fix string with \0*/
+					if (0x20 == (uint)dt_info[x][z]) {
+						dt_info[x][z] = '\0';
+					}
+				}
+				//printf("dt_info[x]: %s\n", dt_info[x]);
+				//printf("strlen(dt_info[x]): %d\n", strlen(dt_info[x]));
+			}
+			if (dt_tool_version == 1)
+				printf("        dtb %d soc: %.4s   plat: %.4s   vari: %.4s\n", i, (char *)(dt_info[0]), (char *)(dt_info[1]), (char *)(dt_info[2]));
+			else if(dt_tool_version == 2)
+				printf("        dtb %d soc: %.16s   plat: %.16s   vari: %.16s\n", i, (char *)(dt_info[0]), (char *)(dt_info[1]), (char *)(dt_info[2]));
+			uint match_str_counter = 0;
+			for (z=0; z<AML_DT_ID_VARI_TOTAL; z++) {
+				/*must match 3 strings*/
+				if (!strncmp(tokens[z], (char *)(dt_info[z]), strlen(tokens[z])) && \
+					(strlen(tokens[z]) == strlen(dt_info[z])))
+					match_str_counter++;
+			}
+			if (match_str_counter == AML_DT_ID_VARI_TOTAL) {
+				//printf("Find match dtb\n");
+				dtb_match_num = i;
+			}
+			for (z=0; z<AML_DT_ID_VARI_TOTAL; z++) {
+				/*clear data for next loop*/
+				memset(dt_info[z], 0, sizeof(aml_each_id_length));
+			}
+		}
+		/*clean malloc memory*/
+		for (i = 0; i < AML_DT_ID_VARI_TOTAL; i++) {
+			if (dt_info[i])
+				free(dt_info[i]);
+		}
+		if (dt_info)
+			free(dt_info);
+
+		/*if find match dtb, return address, or else return main entrance address*/
+		if (0xffff != dtb_match_num) {
+			printf("      Find match dtb: %d\n", dtb_match_num);
+			/*this offset is based on dtb image package, so should add on base address*/
+			fdt_addr = (fdt_addr + readl(fdt_addr + AML_DT_FIRST_DTB_OFFSET + \
+				dtb_match_num * aml_dtb_header_size + aml_dtb_offset_offset));
+			if (gzip_format) {
+				memcpy((void *)dt_entry, (void *)fdt_addr, DTB_MAX_SIZE);
+				fdt_addr = dt_entry;
+				if (gzip_buf)
+					free(gzip_buf);
+			}
+			return fdt_addr;
+		}
+		else{
+			printf("      Not match any dtb.\n");
+			if (gzip_buf)
+				free(gzip_buf);
+			return fdt_addr;
+		}
+	}
+	else {
+		printf("      Cannot find legal dtb!\n");
+		if (gzip_buf)
+			free(gzip_buf);
+		return fdt_addr;
+	}
+}
+#endif //#ifdef AML_MULTI_DTB_API_NEW
+
+extern int check_valid_dts(unsigned char *buffer);
+#ifdef 	AML_MULTI_DTB_CHECK_CMD
+static int do_test(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[])
+{
+	unsigned long loadaddr = 0x1080000;
+
+	if (argc > 1)
+		loadaddr = simple_strtoul(argv[1],NULL,16);
+
+	check_valid_dts((void*)loadaddr);
+
+	return 0;
+}
+
+U_BOOT_CMD(
+   dtb_chk,           //command name
+   2,                 //maxargs
+   0,                 //repeatable
+   do_test,           //command function
+   "multi-dtb check command",             //description
+   "    argv: dtb_chk <dtbLoadaddr> \n"   //usage
+   "    do dtb check, which already loaded at <dtbLoadaddr>.\n"
+);
+#endif //#ifdef 	AML_MULTI_DTB_CHECK_CMD
diff --git a/common/partitions.c b/common/partitions.c
new file mode 100644
index 00000000000..25ad5e447d8
--- /dev/null
+++ b/common/partitions.c
@@ -0,0 +1,206 @@
+#include <common.h>
+#include <malloc.h>
+#include <linux/err.h>
+#include <amlstorage/partition_table.h>
+#include <linux/libfdt.h>
+#include <amlogic/asm/bl31_apis.h>
+#include <amlogic/aml_efuse.h>
+
+#ifdef CONFIG_MULTI_DTB
+	extern unsigned long get_multi_dt_entry(unsigned long fdt_addr);
+#endif
+
+struct partitions_data{
+	int nr;
+	struct partitions *parts;
+};
+
+struct partitions *part_table = NULL;
+static int parts_total_num;
+int has_boot_slot = 0;
+int has_system_slot = 0;
+bool dynamic_partition = false;
+bool vendor_boot_partition = false;
+
+int get_partitions_table(struct partitions **table)
+{
+	int ret = 0;
+	if (part_table && parts_total_num) {
+		*table = part_table;
+		ret = parts_total_num;
+	}
+	return ret;
+}
+int get_partition_count(void)
+{
+	return parts_total_num;
+}
+struct partitions *get_partitions(void)
+{
+	return part_table;
+}
+
+void free_partitions(void)
+{
+	if (part_table)
+		free(part_table);
+	part_table = NULL;
+}
+
+#ifndef IS_FEAT_BOOT_VERIFY
+#define IS_FEAT_BOOT_VERIFY() 0
+#endif// #ifndef IS_FEAT_BOOT_VERIFY
+
+/*
+  return 0 if dts is valid
+  other value are falure.
+*/
+int check_valid_dts(unsigned char *buffer)
+{
+	int ret = -__LINE__;
+	char *dt_addr;
+	/* fixme, a work around way */
+	unsigned char *sbuffer = (unsigned char *)env_get_hex("loadaddr", 0x1000000 + 0x100000);
+	/* g12a merge to trunk, use trunk code */
+	//unsigned char *sbuffer = (unsigned char *)0x1000000;
+
+	if (IS_FEAT_BOOT_VERIFY()) {
+		memcpy(sbuffer, buffer, AML_DTB_IMG_MAX_SZ);
+		flush_cache((unsigned long)sbuffer, AML_DTB_IMG_MAX_SZ);
+		ret = aml_sec_boot_check(AML_D_P_IMG_DECRYPT, (long unsigned)sbuffer, AML_DTB_IMG_MAX_SZ, 0);
+		if (ret) {
+			printf("\n %s() %d: Decrypt dtb: Sig Check %d\n", __func__, __LINE__, ret);
+			return -__LINE__;
+		}
+		memcpy(buffer, sbuffer, AML_DTB_IMG_MAX_SZ);
+	}
+#ifdef CONFIG_MULTI_DTB
+	dt_addr = (char *)get_multi_dt_entry((unsigned long)buffer);
+#else
+	dt_addr = (char *)buffer;
+#endif
+	pr_debug("start dts,buffer=%p,dt_addr=%p\n", buffer, dt_addr);
+	ret = fdt_check_header(dt_addr);
+	if ( ret < 0 )
+		printf("%s: %s\n",__func__,fdt_strerror(ret));
+	/* fixme, is it 0 when ok? */
+	return ret;
+}
+
+int get_partition_from_dts(unsigned char *buffer)
+{
+	char *dt_addr;
+	int nodeoffset,poffset=0;
+	int *parts_num;
+	char propname[8];
+	const uint32_t *phandle;
+	const char *uname;
+	const char *usize;
+	const char *umask;
+	int index;
+	int ret = -1;
+
+	if ( buffer == NULL)
+		goto _err;
+
+	ret = check_valid_dts(buffer);
+	printf("%s() %d: ret %d\n",__func__, __LINE__, ret);
+	if ( ret < 0 )
+	{
+		printf("%s() %d: ret %d\n",__func__, __LINE__, ret);
+		goto _err;
+	}
+#ifdef CONFIG_MULTI_DTB
+	dt_addr = (char *)get_multi_dt_entry((unsigned long)buffer);
+#else
+	dt_addr = (char *)buffer;
+#endif
+	nodeoffset = fdt_path_offset(dt_addr, "/partitions");
+	if (nodeoffset < 0)
+	{
+		printf("%s: not find /partitions node %s.\n",__func__,fdt_strerror(nodeoffset));
+		ret = -1;
+		goto _err;
+	}
+	parts_num = (int *)fdt_getprop(dt_addr, nodeoffset, "parts", NULL);
+	printf("parts: %d\n",be32_to_cpup((u32*)parts_num));
+
+	if (parts_num > 0)
+	{
+		part_table = (struct partitions *)malloc(sizeof(struct partitions)*(be32_to_cpup((u32*)parts_num)));
+		if (!part_table) {
+			printk("%s part_table alloc _err\n",__func__);
+			//kfree(data);
+			return -1;
+		}
+		memset(part_table, 0, sizeof(struct partitions)*(be32_to_cpup((u32*)parts_num)));
+		parts_total_num = be32_to_cpup((u32*)parts_num);
+	}
+	dynamic_partition = false;
+	env_set("partiton_mode","normal");
+	vendor_boot_partition = false;
+	env_set("vendor_boot_mode","false");
+	for (index = 0; index < be32_to_cpup((u32*)parts_num); index++)
+	{
+		sprintf(propname,"part-%d", index);
+
+		phandle = fdt_getprop(dt_addr, nodeoffset, propname, NULL);
+		if (!phandle) {
+			printf("don't find  match part-%d\n",index);
+			goto _err;
+		}
+		if (phandle) {
+			poffset = fdt_node_offset_by_phandle(dt_addr, be32_to_cpup((u32*)phandle));
+			if (!poffset) {
+				printf("%s:%d,can't find device node\n",__func__,__LINE__);
+				goto _err;
+			}
+		}
+		uname = fdt_getprop(dt_addr, poffset, "pname", NULL);
+		//printf("%s:%d  uname: %s\n",__func__,__LINE__, uname);
+		/* a string but not */
+		usize = fdt_getprop(dt_addr, poffset, "size", NULL);
+		//printf("%s:%d size: 0x%x  0x%x\n",__func__,__LINE__, be32_to_cpup((u32*)usize), be32_to_cpup((((u32*)usize)+1)));
+		umask = fdt_getprop(dt_addr, poffset, "mask", NULL);
+		//printf("%s:%d mask: 0x%x\n",__func__,__LINE__, be32_to_cpup((u32*)umask));
+		/* fill parition table */
+		if (uname != NULL)
+			memcpy(part_table[index].name, uname, strlen(uname));
+		part_table[index].size = ((unsigned long)be32_to_cpup((u32*)usize) << 32) | (unsigned long)be32_to_cpup((((u32*)usize)+1));
+		part_table[index].mask_flags = be32_to_cpup((u32*)umask);
+		printf("%02d:%10s\t%016llx %01x\n", index, uname, part_table[index].size, part_table[index].mask_flags);
+
+		if (strcmp(uname, "boot_a") == 0) {
+			has_boot_slot = 1;
+			printf("set has_boot_slot = 1\n");
+		}
+		else if (strcmp(uname, "boot") == 0) {
+			has_boot_slot = 0;
+			printf("set has_boot_slot = 0\n");
+		}
+		if (strcmp(uname, "system_a") == 0)
+			has_system_slot = 1;
+		else if (strcmp(uname, "system") == 0)
+			has_system_slot = 0;
+
+		if (strcmp(uname, "super") == 0) {
+			dynamic_partition = true;
+			env_set("partiton_mode","dynamic");
+			printf("enable dynamic_partition\n");
+		}
+
+		if (strncmp(uname, "vendor_boot", 11) == 0) {
+			vendor_boot_partition = true;
+			env_set("vendor_boot_mode","true");
+			printf("enable vendor_boot\n");
+		}
+	}
+	return 0;
+
+_err:
+	if (part_table != NULL) {
+		free(part_table);
+		part_table = NULL;
+	}
+	return ret;
+}
diff --git a/disk/part_aml.c b/disk/part_aml.c
new file mode 100644
index 00000000000..828a1b2d5c3
--- /dev/null
+++ b/disk/part_aml.c
@@ -0,0 +1,110 @@
+/*
+ * (C) Copyright 2001
+ * Yonghui.yu , Amlogic Inc, yonghui.yu@amlogic.com.
+ *
+ * SPDX-License-Identifier:	GPL-2.0+
+ */
+
+#include <common.h>
+#include <command.h>
+#include <memalign.h>
+
+#include <common.h>
+#include <blk.h>
+#include <command.h>
+#include <ide.h>
+#include <memalign.h>
+#include <asm/unaligned.h>
+#include <linux/compiler.h>
+#include <part.h>
+
+#ifdef CONFIG_HAVE_BLOCK_DEVICE
+extern int get_part_info_from_tbl(struct blk_desc * dev_desc,
+	int part_num, struct disk_partition * info);
+int get_part_info_by_name(struct blk_desc *dev_desc,
+	const char *name, struct disk_partition *info);
+#define	AML_PART_DEBUG	(0)
+
+#if	(AML_PART_DEBUG)
+#define	PRINTF(fmt,args...)	printf (fmt ,##args)
+#else
+#define PRINTF(fmt,args...)
+#endif
+
+#define AML_SEC_SIZE	(512)
+#define MAGIC_OFFSET	(1)
+
+/* read back boot partitons */
+static int _get_partition_info_aml(struct blk_desc * dev_desc,
+	int part_num, struct disk_partition * info, int verb)
+{
+	int ret = 0;
+
+	if (UCLASS_MMC != dev_desc->if_type)
+		return -1;
+
+	info->blksz=dev_desc->blksz;
+	sprintf ((char *)info->type, "U-Boot");
+	/* using partition name in partition tables */
+	ret = get_part_info_from_tbl(dev_desc, part_num, info);
+	if (ret) {
+		/*printf ("** Partition %d not found on device %d **\n",
+			part_num,dev_desc->devnum);*/
+		return -1;
+	}
+
+	PRINTF(" part %d found @ %lx size %lx\n",part_num,info->start,info->size);
+	return 0;
+}
+
+int get_partition_info_aml(struct blk_desc * dev_desc,
+	int part_num, struct disk_partition * info)
+{
+	return(_get_partition_info_aml(dev_desc, part_num, info, 1));
+}
+
+int get_partition_info_aml_by_name(struct blk_desc *dev_desc,
+	const char *name, struct disk_partition *info)
+{
+	return (get_part_info_by_name(dev_desc,
+		name, info));
+}
+
+void print_part_aml(struct blk_desc * dev_desc)
+{
+	struct disk_partition info;
+	int i;
+	if (_get_partition_info_aml(dev_desc,0,&info,0) == -1) {
+		printf("** No boot partition found on device %d **\n",dev_desc->devnum);
+		return;
+	}
+	printf("Part   Start     Sect x Size Type  name\n");
+	i=0;
+	do {
+		printf(" %02d " LBAFU " " LBAFU " %6ld %.32s %.32s\n",
+		       i++, info.start, info.size, info.blksz, info.type, info.name);
+	} while (_get_partition_info_aml(dev_desc,i,&info,0)!=-1);
+}
+#define AML_MPT_OFFSET	(73728)	/* 36M */
+/* fix 40Mbyte to check the MPT magic */
+int test_part_aml (struct blk_desc *dev_desc)
+{
+	ALLOC_CACHE_ALIGN_BUFFER(char, buffer, dev_desc->blksz);
+	if (blk_dread(dev_desc, AML_MPT_OFFSET, 1, (ulong *) buffer) != 1)
+		return -1;
+	if (!strncmp(buffer, "MPT", 3))
+		return 1; // FIXME: return negative result for AML partition for normal u-boot bootsequence
+	return 1;
+}
+
+
+U_BOOT_PART_TYPE(aml) = {
+	.name		= "AML",
+	.part_type	= PART_TYPE_AML,
+	.max_entries	= AML_ENTRY_NUMBERS,
+	.get_info	= get_partition_info_aml,
+	.print		= print_part_aml,
+	.test		= test_part_aml,
+};
+
+#endif
diff --git a/drivers/amlogic/Kconfig b/drivers/amlogic/Kconfig
new file mode 100644
index 00000000000..ff94c4b85e2
--- /dev/null
+++ b/drivers/amlogic/Kconfig
@@ -0,0 +1,14 @@
+menu "AMLOGIC Drivers"
+
+config AML_DRIVER
+	bool "AML drivers Support"
+	select SHA1
+	select SHA256
+	help
+	  Enable support for the Amlogic drivers.
+
+source "drivers/amlogic/keymanage/Kconfig"
+
+source "drivers/amlogic/storagekey/Kconfig"
+
+endmenu
diff --git a/drivers/amlogic/Makefile b/drivers/amlogic/Makefile
new file mode 100644
index 00000000000..544cc608b58
--- /dev/null
+++ b/drivers/amlogic/Makefile
@@ -0,0 +1,5 @@
+# SPDX-License-Identifier: GPL-2.0+
+
+obj-$(CONFIG_UNIFY_KEY_MANAGE) += keymanage/
+
+obj-$(CONFIG_SECURE_STORAGE) += storagekey/
diff --git a/drivers/amlogic/keymanage/Kconfig b/drivers/amlogic/keymanage/Kconfig
new file mode 100644
index 00000000000..0c77689ae4b
--- /dev/null
+++ b/drivers/amlogic/keymanage/Kconfig
@@ -0,0 +1,21 @@
+menuconfig UNIFY_KEY_MANAGE
+    bool "Amlogic unifykey"
+	depends on OF_LIBFDT
+    help
+        This enables support for keyman (Amlogic key manage),
+        A driver providing APIs for flash key and efuse key
+if UNIFY_KEY_MANAGE
+    config AML_SECURITY_KEY
+        depends on SECURE_STORAGE
+        bool "Amlogic flash key"
+        default y
+        select SHA256
+        select SHA1
+        help
+            "security key wrapper for APIs bl31"
+    config KEYMAN_PROVISION_KEY
+        bool "Amlogic burn provision key"
+        default n
+        help
+            "provision key wrapper for burn tool"
+endif #if UNIFY_KEY_MANAGE
diff --git a/drivers/amlogic/keymanage/Makefile b/drivers/amlogic/keymanage/Makefile
new file mode 100644
index 00000000000..08dd44eaec6
--- /dev/null
+++ b/drivers/amlogic/keymanage/Makefile
@@ -0,0 +1,32 @@
+#
+# (C) Copyright 2000-2007
+# Wolfgang Denk, DENX Software Engineering, wd@denx.de.
+#
+# See file CREDITS for list of people who contributed to this
+# project.
+#
+# This program is free software; you can redistribute it and/or
+# modify it under the terms of the GNU General Public License as
+# published by the Free Software Foundation; either version 2 of
+# the License, or (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.	See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston,
+# MA 02111-1307 USA
+#
+
+obj-$(CONFIG_UNIFY_KEY_MANAGE) += aml_key_manage.o
+
+aml_key_manage-y 						 		= key_unify.o
+aml_key_manage-y 						 	   += key_manage.o
+aml_key_manage-$(CONFIG_OF_LIBFDT) 				+= km_dts.o
+aml_key_manage-$(CONFIG_EFUSE) 					+= km_efuse_key.o
+aml_key_manage-$(CONFIG_AML_SECURITY_KEY) 		+= km_secure_key.o
+aml_key_manage-$(CONFIG_KEYMAN_PROVISION_KEY) 	+= km_provision_key.o
+
diff --git a/drivers/amlogic/keymanage/key_manage.c b/drivers/amlogic/keymanage/key_manage.c
new file mode 100644
index 00000000000..f8e0700b0a1
--- /dev/null
+++ b/drivers/amlogic/keymanage/key_manage.c
@@ -0,0 +1,689 @@
+/*
+ * \file        key_encrypt_decrypt.c
+ * \brief       encrypt a key before burn to target deive,
+ *              decrypt a key after read from target device
+ *
+ * \version     1.0.0
+ * \date        15/07/17
+ * \author      Sam.Wu <yihui.wu@amlgic.com>
+ *
+ * Copyright (c) 2015 Amlogic. All Rights Reserved.
+ *
+ */
+#include "key_manage_i.h"
+#include <u-boot/sha1.h>
+#include <linux/ctype.h>
+#include <command.h>
+#include <env.h>
+#include <u-boot/sha1.h>
+
+
+#if defined(CONFIG_AML_SECURITY_KEY)
+extern int _burn_key_in_type_hdcp2(const char* keyname,
+        void* databuf, const unsigned bufLen, char* decryptBuf);
+extern int _read_key_in_type_hdcp2(const char* keyname,
+        void* databuf, const unsigned bufLen, char* decryptBuf);
+extern int _km_hdcp2_size(void);
+#else
+static int _burn_key_in_type_hdcp2(const char* keyname,
+        void* databuf, const unsigned bufLen, char* decryptBuf)
+{
+    KM_ERR("CONFIG_AML_SECURITY_KEY undefined\n");
+    return -__LINE__;
+}
+static int _read_key_in_type_hdcp2(const char* keyname,
+        void* databuf, const unsigned bufLen, char* decryptBuf)
+{
+    KM_ERR("CONFIG_AML_SECURITY_KEY undefined\n");
+    return -__LINE__;
+}
+int _km_hdcp2_size(void)
+{
+    KM_ERR("CONFIG_AML_SECURITY_KEY undefined\n");
+    return 0;
+}
+#endif// #if defined(CONFIG_AML_SECURITY_KEY)
+
+enum _KmUsrKeyType{
+    KM_USER_KEY_TYPE_MAC        = 0 ,//key format is all ascii, and splitted by :
+    KM_USER_KEY_TYPE_SHA1           ,//key format is end with 20 bytes sha1sum
+    KM_USER_KEY_TYPE_HDCP2          ,//special case, can only identified with name
+    KM_USER_KEY_TYPE_RAW            ,//raw format which can burn to target directly
+};
+
+static const char* _cfgKeyTypes[] = {
+    [KM_USER_KEY_TYPE_MAC]          = "mac"     ,
+    [KM_USER_KEY_TYPE_SHA1]         = "sha1"    ,
+    [KM_USER_KEY_TYPE_HDCP2]        = "hdcp2"   ,
+    [KM_USER_KEY_TYPE_RAW]          = "raw"     ,
+};
+#define _SUPPORTED_CFG_TYPES_NUM    ( sizeof(_cfgKeyTypes) / sizeof(char*) )
+
+
+static int km_get_user_key_format(const char* srcKeyName, int* key_type)
+{
+    int ret                 = 0;
+    int   srcKeyType        = 0;
+    const char* cfgType     = NULL;
+
+    cfgType = keymanage_dts_get_key_type (srcKeyName) ;
+    if (NULL == cfgType) {
+        KM_ERR("Fail in get keytype cfg in dts for key[%s]\n", srcKeyName);
+        return __LINE__;
+    }
+
+    for (srcKeyType = 0; srcKeyType < _SUPPORTED_CFG_TYPES_NUM; ++srcKeyType)
+    {
+        ret = strcmp(cfgType, _cfgKeyTypes[srcKeyType]);
+        if (!ret) break;
+    }
+    if (srcKeyType == _SUPPORTED_CFG_TYPES_NUM) {
+        KM_ERR("prop key-type[%s] unsupported in key[%s]\n", cfgType, srcKeyName);
+        return __LINE__;
+    }
+
+    if (KM_USER_KEY_TYPE_RAW == srcKeyType)
+    {
+        do
+        {
+            ret = !strcmp(srcKeyName, "mac") || !strcmp(srcKeyName, "mac_bt") || !strcmp(srcKeyName, "mac_wifi");
+            if (ret) { srcKeyType = KM_USER_KEY_TYPE_MAC; break; }
+
+            /*ret = !strcmp(srcKeyName, "hdcp") ;*/
+            /*if (ret) { srcKeyType = KM_USER_KEY_TYPE_SHA1; break; }*/
+
+            ret = !strcmp(srcKeyName, "hdcp2") ;
+            if (ret) { srcKeyType = KM_USER_KEY_TYPE_HDCP2; break; }
+
+        }while(0);
+    }
+
+    *key_type = srcKeyType;
+    return 0;
+}
+
+#if 1//START MAC
+const int _UsrMacKeyLen = 17;
+
+//key manager user interface: mac format check and change format if needed
+static int _burn_key_in_type_mac(const char* keyname, const char* srcKeyVal, const unsigned srcKeyLen, void* decryptBuf)
+{
+    int ret = 0;
+    int index = 0;
+    ssize_t     targetKeyLen    = 0;
+    char*       dstKeyVal       = (char*)decryptBuf;
+
+    if (_UsrMacKeyLen != srcKeyLen) {
+        KM_ERR("mac len %d is invalid, must be %d\n", srcKeyLen, _UsrMacKeyLen);
+        return -EINVAL;
+    }
+
+    for (index = 0; index < _UsrMacKeyLen; index += 3)
+    {
+        int k = 0;
+        const char* p = srcKeyVal + index;
+        for (k = 0; k < 2; ++k) {
+            const char c = *p++;
+            if (!isxdigit(c)) {
+                KM_ERR("mac str(%s) fmt err at index[%d]\n", srcKeyVal, index + k);
+                return __LINE__;
+            }
+        }
+        if (':' != *p && index + k < _UsrMacKeyLen) {
+            KM_ERR("mac str(%s) fmt err at index[%d], must be :, but %c\n", srcKeyVal, index + 2, *p);
+            return __LINE__;
+        }
+    }
+
+    enum key_manager_dev_e keyDev = keymanage_dts_get_key_device(keyname);
+    if (KEY_M_MAX_DEV == keyDev) {
+        KM_ERR("Fail get key dev for key[%s]\n", keyname);
+        return __LINE__;
+    }
+    if (KEY_M_EFUSE_NORMAL != keyDev) { targetKeyLen = _UsrMacKeyLen; }
+    else
+    {//efusekey, check configure size
+        ret = key_unify_query_size(keyname, &targetKeyLen);
+        if (ret) {
+            KM_ERR("Fail at get key size, ret=%d\n", ret);
+            return __LINE__;
+        }
+
+        if (6 != targetKeyLen && targetKeyLen != _UsrMacKeyLen) {
+            KM_ERR("efuse key[%s] len %zd err\n", keyname, targetKeyLen);
+            return __LINE__;
+        }
+    }
+
+    if (_UsrMacKeyLen == targetKeyLen) {//say its target not efuse ?
+        ret =  key_unify_write(keyname, srcKeyVal, srcKeyLen);
+        return ret;
+    }
+
+    KM_DBG("targetKeyLen=%zd\n", targetKeyLen);
+    for (index = 0; index < targetKeyLen; ++index) {
+        char theByteStr[4] ;
+        theByteStr[0] = srcKeyVal[index * 3 + 0];
+        theByteStr[1] = srcKeyVal[index * 3 + 1];
+        theByteStr[2] = '\0';
+        unsigned byteSum = 0;
+
+        byteSum = simple_strtoul(theByteStr, NULL, 16);
+        KM_DBG("byteSum[%d]=0x%x\n", index, byteSum);
+        if (byteSum > 0xff) {
+            KM_ERR("theByteStr=%s err\n", theByteStr);
+            return __LINE__;
+        }
+        dstKeyVal[index] = byteSum;
+    }
+
+    ret = key_unify_write(keyname, dstKeyVal, targetKeyLen);
+    return ret;
+}
+
+//Return value: key size that user wanted, ok if > 0
+static int _read_key_in_type_mac(const char* keyname, char* databuf, const unsigned bufLen, char* decryptBuf)
+{
+    int ret = 0;
+    int index = 0;
+    ssize_t keyDevSz = 0;
+
+    if (_UsrMacKeyLen > bufLen) {
+        KM_ERR("mac len %d is invalid, must be %d\n", bufLen, _UsrMacKeyLen);
+        return -__LINE__;
+    }
+
+    ret = key_unify_query_size (keyname, &keyDevSz) ;
+    if (ret) {
+        KM_ERR("Fail in get key sz, ret=%d\n", ret);
+        return -__LINE__;
+    }
+
+    ret = key_unify_read (keyname, decryptBuf, (unsigned)keyDevSz) ;
+    if (ret) {
+        KM_ERR("fail in read key[%s]\n", keyname);
+        return -__LINE__;
+    }
+
+    if (_UsrMacKeyLen == keyDevSz) {
+        memcpy(databuf, decryptBuf, keyDevSz);
+        return 0;
+    }
+
+    databuf[0] = '\0';
+    for (index = 0; index < keyDevSz; ++index)
+    {
+        const unsigned byteSum = decryptBuf[index];
+
+        sprintf(databuf, "%s%02x:", databuf, byteSum);
+    }
+
+    return ret;
+}
+#endif//END MAC
+
+#if 1//Start sha1sum
+//key value which end up 20 bytes sha1sum
+//check the sha1sum and remove it after checked ok
+static int _burn_key_in_type_sha1(const char* keyname, void* databuf, const unsigned bufLen, char* decryptBuf)
+{
+    int ret = 0;
+    const unsigned srcKeyLen    = bufLen;
+    const char* srcKeyVal       = (char*)databuf;
+    const unsigned shaSumLen = 20;
+    const unsigned licLen = srcKeyLen - shaSumLen;
+    const u8* orgSum = (u8*)srcKeyVal + licLen;
+    u8 genSum[shaSumLen];
+
+    if (srcKeyLen <= 20) {
+        KM_ERR("Err key len %d for sha1 fmt\n", srcKeyLen);
+        return __LINE__;
+    }
+
+    sha1_csum((u8*)srcKeyVal, licLen, genSum);
+
+    ret = memcmp(orgSum, genSum, shaSumLen);
+    if (ret) {
+        const unsigned fmtStrLen = shaSumLen * 2 + 2;
+        char org_sha1Str[fmtStrLen + 2];
+        char gen_sha1Str[fmtStrLen + 2];
+        int byteIndex = 0;
+
+        org_sha1Str[0] = gen_sha1Str[0] = '\0';
+        for (byteIndex = 0; byteIndex < shaSumLen; ++byteIndex)
+        {
+            sprintf(org_sha1Str, "%s%02x", org_sha1Str, orgSum[byteIndex]);
+            sprintf(gen_sha1Str, "%s%02x", gen_sha1Str, genSum[byteIndex]);
+        }
+        KM_ERR("sha1sum, orgSum[%s] != genSum[%s]\n", org_sha1Str, gen_sha1Str);
+
+        return __LINE__;
+    }
+    KM_MSG("Verify key with sha1sum OK\n");
+
+    ret = key_unify_write(keyname, srcKeyVal, licLen);
+    return ret;
+}
+#endif//END sha1sum
+/* *
+ * APIs of key manage
+*/
+
+int key_manage_init(const char* seednum, const char* dtbaddr)
+{
+    int ret = key_unify_init(seednum, dtbaddr);
+
+    return ret;
+}
+
+int key_manage_exit(void)
+{
+    return key_unify_uninit();
+}
+
+int key_manage_write(const char* keyname, const void* keydata, const unsigned dataLen)
+{
+    int ret = 0;
+    int srcKeyType;
+    char* decryptBuf = NULL;
+    const int DecryptBufMaxLen = 64<<10;
+
+    ret = key_unify_query_key_has_configure(keyname);
+    if (!ret) {
+        KM_ERR ("There isn't cfg for key[%s]\n", keyname) ;
+        return __LINE__;
+    }
+
+    ret = km_get_user_key_format(keyname, &srcKeyType);
+    if (ret) {
+        KM_ERR ("Fail in get user key type\n") ;
+        return __LINE__;
+    }
+
+    decryptBuf = (char*)malloc(DecryptBufMaxLen);
+    switch (srcKeyType)
+    {
+        case KM_USER_KEY_TYPE_MAC:
+            {
+                ret = _burn_key_in_type_mac(keyname, (char*)keydata, dataLen, decryptBuf);
+            }
+            break;
+
+        case KM_USER_KEY_TYPE_SHA1:
+            {
+                ret = _burn_key_in_type_sha1(keyname, (char*)keydata, dataLen, decryptBuf);
+            }
+            break;
+
+        case KM_USER_KEY_TYPE_HDCP2:
+            {
+                ret = _burn_key_in_type_hdcp2(keyname, (char*)keydata, dataLen, decryptBuf);
+            }
+            break;
+
+        case KM_USER_KEY_TYPE_RAW:
+            {
+                ret = key_unify_write(keyname, (char*)keydata, dataLen);
+            }
+            break;
+    }
+
+    free(decryptBuf);
+    return ret;
+}
+
+int key_manage_read(const char* keyname, void* keydata, const unsigned bufLen)
+{
+    int ret = 0;
+    ssize_t keysize = 0;
+    int srcKeyType = 0;
+    char* decryptBuf = NULL;
+    const int DecryptBufMaxLen = 64<<10;
+
+    ret = key_manage_query_size(keyname, &keysize);
+    if (ret) {
+        KM_ERR ("Fail in query key size for key[%s]\n", keyname) ;
+        return __LINE__;
+    }
+    if (keysize > bufLen) {
+        KM_ERR ("keysize %zd > bufLen %d\n", keysize, bufLen) ;
+        return __LINE__;
+    }
+
+    ret = km_get_user_key_format(keyname, &srcKeyType);
+    if (ret) {
+        KM_ERR ("Fail in get user key type\n") ;
+        return __LINE__;
+    }
+
+    decryptBuf = (char*)malloc(DecryptBufMaxLen);
+    switch (srcKeyType)
+    {
+        case KM_USER_KEY_TYPE_MAC:
+            {
+                ret = _read_key_in_type_mac(keyname, (char*)keydata, (unsigned)keysize, decryptBuf);
+            }
+            break;
+
+        case KM_USER_KEY_TYPE_HDCP2:
+            {
+                ret = _read_key_in_type_hdcp2(keyname, keydata, (unsigned)keysize, decryptBuf);
+            }
+            break;
+
+        case KM_USER_KEY_TYPE_SHA1:
+        case KM_USER_KEY_TYPE_RAW:
+        default:
+            {
+                ret = key_unify_read(keyname, keydata, (unsigned)keysize);
+            }
+            break;
+    }
+
+    free(decryptBuf);
+    return ret;
+}
+
+int key_manage_query_size(const char* keyname, ssize_t* keysize)
+{
+    int ret = 0;
+    int exist = 0;
+    int srcKeyType = 0;
+
+    ret = key_manage_query_exist(keyname, &exist);
+    if (ret) {
+        KM_ERR ("Fail in query key exist\n") ;
+        return __LINE__;
+    }
+    if (!exist) {
+        KM_ERR ("key[%s] not programed yet\n", keyname) ;
+        return __LINE__;
+    }
+
+    ret = km_get_user_key_format(keyname, &srcKeyType);
+    if (ret) {
+        KM_ERR ("Fail in get user key type\n") ;
+        return __LINE__;
+    }
+
+    switch (srcKeyType)
+    {
+        case KM_USER_KEY_TYPE_MAC:
+            {
+                *keysize = _UsrMacKeyLen;
+            }
+            break;
+
+        case KM_USER_KEY_TYPE_HDCP2:
+            {
+                *keysize = _km_hdcp2_size();
+            }
+            break;
+
+        case KM_USER_KEY_TYPE_RAW:
+        case KM_USER_KEY_TYPE_SHA1:
+        default:
+            ret = key_unify_query_size(keyname, keysize);
+    }
+
+    return ret;
+}
+
+int key_manage_query_exist(const char* keyname, int* exist)
+{
+    int ret = 0;
+
+    ret = key_unify_query_key_has_configure(keyname);
+    if (!ret) {
+        KM_ERR ("There isn't dts cfg for key[%s]\n", keyname) ;
+        return __LINE__;
+    }
+
+    ret = key_unify_query_exist(keyname, exist);
+
+    return ret;
+}
+
+int key_manage_query_secure(const char* keyname, int* isSecure)
+{
+    int ret = 0;
+    int exist = 0;
+
+    ret = key_manage_query_exist(keyname, &exist);
+    if (ret) {
+        KM_ERR ("Fail in query key exist, ret=%d\n", ret) ;
+        return __LINE__;
+    }
+    if (!exist) {
+        KM_ERR ("Key[%s] not programed yet\n", keyname) ;
+        return __LINE__;
+    }
+
+    ret = key_unify_query_secure(keyname, isSecure);
+
+    return ret;
+}
+
+int key_manage_query_canOverWrite(const char* keyname, int* canOverWrite)
+{
+    return key_unify_query_canOverWrite(keyname, canOverWrite);
+}
+
+static int do_keyman_init(struct cmd_tbl *cmdtp, int flag, int argc, char * const argv[])
+{
+    int ret = 0;
+    const char* seedNum = argv[1];
+    const char* dtbAddr = argc > 2 ? argv[2] : NULL;
+
+    if (argc < 2) return CMD_RET_USAGE;
+
+    ret = key_manage_init(seedNum, dtbAddr);
+    return ret;
+}
+
+static int do_keyman_exit(struct cmd_tbl *cmdtp, int flag, int argc, char * const argv[])
+{
+    return key_manage_exit();
+}
+
+//read keyname addr <fmt>
+//fmt can be hex/str, if str, env keyname will be setted
+static int do_keyman_read(struct cmd_tbl *cmdtp, int flag, int argc, char * const argv[])
+{
+    int ret = 0;
+    const char* keyname = argv[1];
+    char* dataBuf = NULL;
+    const char* dataFmt = argc > 3 ? argv[3] : NULL;
+    ssize_t keyLen = 0;
+    if (argc < 3) return CMD_RET_USAGE;
+
+    dataBuf = (char*)simple_strtoul(argv[2], NULL, 16);
+    if (!dataBuf) {
+        KM_ERR("Fail in parse argv[2] to dataBuf\n");
+        return __LINE__;
+    }
+
+    ret = key_manage_query_size(keyname, &keyLen);
+    if (ret) {
+        KM_DBG("Fail get sz for[%s]\n", keyname);//here occure in booting if key not burned yet!
+        return __LINE__;
+    }
+    ret = key_manage_read(keyname, dataBuf, keyLen);
+    if (ret) {
+        KM_ERR("Fail in read key[%s] at sz %zd\n", keyname, keyLen);
+        return __LINE__;
+    }
+    if (dataFmt)
+    {
+        if (!strcmp("hex", dataFmt))
+        {
+            _keyman_buf_to_hex_ascii((uint8_t*)dataBuf, keyLen, NULL);
+            return 0;
+        }
+        else if(!strcmp("str", dataFmt))
+        {
+            int i = 0;
+
+            dataBuf[keyLen] = '\0';
+            for (; i < keyLen; ++i) {
+                ret = isascii(dataBuf[i]);
+                if (!ret) {
+                    KM_MSG("key value has non ascii, can't pr\n");
+                    return CMD_RET_FAILURE;
+                }
+            }
+            env_set(keyname, dataBuf);//setenv for bootargs
+            KM_DBG("env:%s=%s\n", keyname, dataBuf);
+            return 0;
+        }
+        else KM_MSG("Err key dataFmt(%s)\n", dataFmt);
+    }
+
+    return ret ? CMD_RET_FAILURE : CMD_RET_SUCCESS;
+}
+
+//argv: 1       2       3
+//write keyname size    addr
+//write keyname hex/str value
+static int do_keyman_write(struct cmd_tbl *cmdtp, int flag, int argc, char * const argv[])
+{
+    int ret = 0;
+    const char* keyname     = argv[1];
+    const char* databuf     = NULL;
+    char*       tmpBuf      = NULL;
+    const char* inputFmt    = argv[2];
+    unsigned    dataLen     = 0;
+    if (argc < 4) return CMD_RET_USAGE;
+
+    if (!strcmp("hex", inputFmt))
+    {
+        databuf = argv[3];
+        dataLen = strlen(databuf) / 2;
+
+        tmpBuf = (char*)malloc(dataLen);
+        ret = _keyman_hex_ascii_to_buf(databuf, tmpBuf, dataLen);
+        if (ret) {
+            KM_ERR("Fail in change hex argv[3] to bin, err=%d\n", ret);
+            free(tmpBuf);
+            return CMD_RET_FAILURE;
+        }
+        databuf = tmpBuf;
+    }
+    else if(!strcmp("str", inputFmt))
+    {
+        databuf = argv[3];
+        dataLen = strlen(databuf);
+
+        const char* p = databuf;
+        for (; *p; ++p) {
+            if (!isascii(*p)) {
+                KM_ERR("inputFmt is %s, but argv[3] contain non ascii\n", inputFmt);
+                return CMD_RET_FAILURE;
+            }
+        }
+        KM_DBG("str:%s, len=%d\n", databuf, dataLen);
+    }
+    else
+    {
+        dataLen = simple_strtoul(argv[2], NULL, 0);
+        if (!dataLen) {
+            KM_ERR("dataLen err\n");
+            return __LINE__;
+        }
+        if (dataLen > (64*1024)) {
+            KM_ERR("keylen 0x%x too large!\n", dataLen);
+            return __LINE__;
+        }
+        databuf = (char*)simple_strtoul(argv[3], NULL, 16);
+    }
+
+    ret = key_manage_write(keyname, databuf, dataLen);
+    if (tmpBuf) free(tmpBuf) ;
+    return ret ? CMD_RET_FAILURE : CMD_RET_SUCCESS;
+}
+
+//query: 1          2
+//      exist       keyname
+//      secure      keyname
+//      size        keyname
+static int do_keyman_query(struct cmd_tbl *cmdtp, int flag, int argc, char * const argv[])
+{
+    int ret = 0;
+    const char* cmd     = argv[1];
+    const char* keyname = argv[2];
+    if (argc < 3) return CMD_RET_USAGE;
+
+    if (!strcmp("exist", cmd))
+    {
+        int exist = 0;
+        ret = key_manage_query_exist(keyname, &exist);
+        if (ret) {
+            KM_ERR("Fail in query key exist, err=%d", ret);
+            return CMD_RET_FAILURE;
+        }
+        KM_MSG("key[%s] is %s Exist\n", keyname, exist ? "" : "NOT");
+        ret = exist ? CMD_RET_SUCCESS : CMD_RET_FAILURE;
+    }
+    else if(!strcmp("secure", cmd))
+    {
+        int isSecure = 0;
+        ret = key_manage_query_secure(keyname, &isSecure);
+        if (ret) {
+            KM_ERR("Fail in query key secure, err=%d\n", ret);
+            return CMD_RET_FAILURE;
+        }
+        KM_MSG("key[%s] is %s Secure\n", keyname, isSecure ? "" : "NOT");
+        ret = isSecure ? CMD_RET_SUCCESS : CMD_RET_FAILURE;
+    }
+    else if(!strcmp("size", cmd))
+    {
+        ssize_t keysize = 0;
+        ret = key_manage_query_size(keyname, &keysize);
+        if (ret) {
+            KM_ERR("Fail in query key size, err=%d\n", ret);
+            return CMD_RET_FAILURE;
+        }
+        KM_MSG("key[%s] size is %zd\n", keyname, keysize);
+        ret = keysize ? CMD_RET_SUCCESS : CMD_RET_FAILURE;
+    }
+    else return CMD_RET_USAGE;
+
+    return ret;
+}
+
+static struct cmd_tbl cmd_keyman_sub[] = {
+    U_BOOT_CMD_MKENT(init,          3, 0, do_keyman_init, "", ""),
+    U_BOOT_CMD_MKENT(exit,          2, 0, do_keyman_exit, "", ""),
+    U_BOOT_CMD_MKENT(read,          4, 0, do_keyman_read, "", ""),
+    U_BOOT_CMD_MKENT(write,         4, 0, do_keyman_write, "", ""),
+    U_BOOT_CMD_MKENT(query,         3, 0, do_keyman_query, "", ""),
+};
+
+static int do_keymanage(struct cmd_tbl * cmdtp, int flag, int argc, char * const argv[])
+{
+    struct cmd_tbl *c;
+
+    if (argc < 2) return CMD_RET_USAGE;
+
+    c = find_cmd_tbl(argv[1], cmd_keyman_sub, ARRAY_SIZE(cmd_keyman_sub));
+
+	if (!c) { return CMD_RET_USAGE;}
+
+    return	c->cmd(cmdtp, flag, --argc, ++argv);
+}
+
+U_BOOT_CMD(
+   keyman,           //command name
+   5,                   //maxargs
+   0,                   //repeatable
+   do_keymanage,   //command function
+   "Unify key ops interfaces based dts cfg",           //description
+   "    argv:  \n"   //usage
+   "    init seedNum <dtbAddr>\n"
+   "    read keyname addr <hex/str>\n"
+   "    write keyname size addr \n"
+   "    write keyname hex/str value\n"
+   "    query exist/secure/size keyname\n"
+   "    exit \n"
+);
+
diff --git a/drivers/amlogic/keymanage/key_manage.h b/drivers/amlogic/keymanage/key_manage.h
new file mode 100644
index 00000000000..ab482f45a05
--- /dev/null
+++ b/drivers/amlogic/keymanage/key_manage.h
@@ -0,0 +1,61 @@
+#ifndef __KEY_MANAGE_H__
+#define __KEY_MANAGE_H__
+
+enum key_manager_dev_e{
+    KEY_M_UNKNOW_DEV=0,
+    KEY_M_EFUSE_NORMAL,
+    KEY_M_SECURE_KEY,       //secure nandkey/emmckey
+    KEY_M_NORAML_KEY,       //non-secure nandkey/emmckey
+    KEY_M_PROVISION_KEY,    //provision key
+    KEY_M_MAX_DEV,
+};
+
+/*key data format*/
+enum key_manager_df_e{
+       KEY_M_HEXDATA=0,
+       KEY_M_HEXASCII,
+       KEY_M_ALLASCII,
+       KEY_M_MAX_DF,
+};
+
+enum key_manager_permit_e{
+       KEY_M_PERMIT_READ = (1<<0),
+       KEY_M_PERMIT_WRITE = (1<<1),
+       KEY_M_PERMIT_DEL    = (1<<2),
+       KEY_M_PERMIT_MASK   = 0Xf,
+};
+
+enum key_manager_type_e{
+    KEY_M_TYPE_NORMAL       = 0 ,
+    KEY_M_TYPE_MAC              ,
+    KEY_M_TYPE_SHA1             ,
+    KEY_M_TYPE_HDCP2            ,
+
+    KEY_M_TYPE_TOTAL_NUM
+};
+
+#define KEY_UNIFY_NAME_LEN	    48
+#define KEY_UNIFY_TYPE_LEN_MAX  ( 16 - 1 )
+
+struct key_item_t{
+    char name[KEY_UNIFY_NAME_LEN];
+    char keyType[KEY_UNIFY_TYPE_LEN_MAX + 1];//mac/sha1/hdcp2/normal
+    char encType[KEY_UNIFY_TYPE_LEN_MAX + 1];//mac/sha1/hdcp2/normal
+    int id;
+    unsigned int dev; //key save in device //efuse,
+    unsigned int datFmt;  //data format
+    unsigned int permit;
+    int flag;
+    int reserv;//reserve and align to 64
+};
+
+struct key_info_t{
+    int key_num;
+    int efuse_version;
+    int key_flag;
+    int encrypt_type;
+};
+
+
+#endif // #ifndef __KEY_MANAGE_H__
+
diff --git a/drivers/amlogic/keymanage/key_manage_i.h b/drivers/amlogic/keymanage/key_manage_i.h
new file mode 100644
index 00000000000..73404c1dbf1
--- /dev/null
+++ b/drivers/amlogic/keymanage/key_manage_i.h
@@ -0,0 +1,65 @@
+/*
+ * \file        key_manage_i.h
+ * \brief       common included files for key manager
+ *
+ * \version     1.0.0
+ * \date        15/06/30
+ * \author      Sam.Wu <yihui.wu@amlgic.com>
+ *
+ * Copyright (c) 2015 Amlogic. All Rights Reserved.
+ *
+ */
+#ifndef __KEY_MANAGE_I_H__
+#define __KEY_MANAGE_I_H__
+
+#include <config.h>
+#include <common.h>
+#include <linux/string.h>
+#include <errno.h>
+#include <malloc.h>
+#include "key_manage.h"
+#include <amlogic/keyunify.h>
+#include <amlogic/amlkey_if.h>
+
+#define KM_DBG(fmt ...)     //printf("[KM]Dbg:"fmt)
+#define KM_MSG(fmt ...)     printf("[KM]Msg:"fmt)
+#define KM_ERR(fmt ...)     printf("[KM]Error:f[%s]L%d:", __func__, __LINE__),printf(fmt)
+
+int _keyman_hex_ascii_to_buf(const char* input, char* buf, const unsigned bufSz);
+int _keyman_buf_to_hex_ascii(const uint8_t* pdata, const unsigned dataLen, char* fmtStr/*pr if NULL*/);
+
+int keymanage_dts_parse(const void* dt_addr);
+enum key_manager_df_e keymanage_dts_get_key_fmt(const char *keyname);
+enum key_manager_dev_e keymanage_dts_get_key_device(const char *keyname);
+const char* keymanage_dts_get_key_type(const char* keyname);
+const char* keymanage_dts_get_enc_type(const char* keyname);
+char unifykey_get_efuse_version(void);
+int unifykey_get_encrypt_type(void);
+
+int keymanage_efuse_init(const char *buf, int len);
+int keymange_efuse_exit(void);
+int keymanage_efuse_write(const char *keyname, const void* keydata, unsigned int datalen);
+int keymanage_efuse_exist(const char* keyname);
+ssize_t keymanage_efuse_size(const char* keyname);
+int keymanage_efuse_query_can_read(const char* keyname);
+int keymanage_efuse_read(const char *keyname, void* databuf, const unsigned bufsz);
+
+int keymanage_securekey_init(const char* buf, int len);
+int keymanage_securekey_exit(void);
+int keymanage_secukey_write(const char *keyname, const void* keydata, unsigned int datalen);
+ssize_t keymanage_secukey_size(const char* keyname);
+int keymanage_secukey_exist(const char* keyname);
+int keymanage_secukey_can_read(const char* keyname);
+int keymanage_secukey_read(const char* keyname, void* databuf,  unsigned buflen);
+
+//provision key ops
+int keymanage_provision_init(const char *buf, int len);
+int keymanage_provision_exit(void);
+int keymanage_provision_write(const char *keyname, const void* keydata, unsigned int datalen);
+ssize_t keymanage_provision_size(const char* keyname);
+int keymanage_provision_exist(const char* keyname);
+int keymanage_provision_query_can_read(const char* keyname);
+int keymanage_provision_read(const char *keyname, void* databuf, const unsigned bufSz);
+
+#endif//#ifndef __KEY_MANAGE_I_H__
+
diff --git a/drivers/amlogic/keymanage/key_unify.c b/drivers/amlogic/keymanage/key_unify.c
new file mode 100644
index 00000000000..069fff08dd2
--- /dev/null
+++ b/drivers/amlogic/keymanage/key_unify.c
@@ -0,0 +1,610 @@
+/*
+ * Unify interfaces for read/write nandkey/emmckey/efuse key
+ */
+#include "key_manage_i.h"
+#include <amlogic/keyunify.h>
+#include <linux/ctype.h>
+#include <command.h>
+#include <env.h>
+
+#define KEY_NO_EXIST	0
+#define KEY_BURNED		1
+
+#define KEY_READ_PERMIT		10
+#define KEY_READ_PROHIBIT	11
+
+#define KEY_WRITE_MASK		(0x0f<<4)
+#define KEY_WRITE_PERMIT	(10<<4)
+#define KEY_WRITE_PROHIBIT	(11<<4)
+
+typedef struct _devKeyOps{
+    int     (*pInitFunc) (const char* buf, int len);
+    int     (*pUninitFunc)(void);
+    int     (*pWriteFunc)(const char *keyname, const void* keydata, unsigned int datalen);
+    ssize_t (*pGetSize)(const char* keyname);
+    int     (*pKeyExist)(const char* keyname);
+    int     (*pKeyCanRead)(const char* keyname);
+    int     (*pReadFunc)(const char* keyname, void* dataBuf,  unsigned buflen);
+
+    //Fields:
+    int     can_overwrite;//is OTP
+
+}KmDevKeyOps;
+
+static KmDevKeyOps _SecukeyOps = {
+        .pInitFunc           = keymanage_securekey_init        ,
+        .pUninitFunc         = keymanage_securekey_exit        ,
+        .pWriteFunc          = keymanage_secukey_write         ,
+        .pGetSize            = keymanage_secukey_size          ,
+        .pKeyExist           = keymanage_secukey_exist         ,
+        .pKeyCanRead         = keymanage_secukey_can_read      ,
+        .pReadFunc           = keymanage_secukey_read          ,
+
+        .can_overwrite       = 1                               ,
+};
+
+#if defined(CONFIG_EFUSE)
+static KmDevKeyOps _efuseKeyOps = {
+        .pInitFunc           = keymanage_efuse_init            ,
+        .pUninitFunc         = keymange_efuse_exit             ,
+        .pWriteFunc          = keymanage_efuse_write           ,
+        .pGetSize            = keymanage_efuse_size            ,
+        .pKeyExist           = keymanage_efuse_exist           ,
+        .pKeyCanRead         = keymanage_efuse_query_can_read  ,
+        .pReadFunc           = keymanage_efuse_read            ,
+
+        .can_overwrite       = 0                               ,
+};
+#endif//#if defined(CONFIG_EFUSE)
+
+#if defined(CONFIG_KEYMAN_PROVISION_KEY)
+static KmDevKeyOps _provisionKeyOps = {
+        .pInitFunc           = keymanage_provision_init             ,
+        .pUninitFunc         = keymanage_provision_exit             ,
+        .pWriteFunc          = keymanage_provision_write            ,
+        .pGetSize            = keymanage_provision_size             ,
+        .pKeyExist           = keymanage_provision_exist            ,
+        .pKeyCanRead         = keymanage_provision_query_can_read   ,
+        .pReadFunc           = keymanage_provision_read             ,
+
+        .can_overwrite       = 1                                    ,
+};
+#endif//#if defined(CONFIG_KEYMAN_PROVISION_KEY)
+
+#define _KM_DEV_INDEX_SECUREKEY         0
+#define _KM_DEV_INDEX_PROVISION         1
+#if defined(CONFIG_KEYMAN_PROVISION_KEY)
+#define _KM_DEV_INDEX_EFUSE             2
+#else
+#define _KM_DEV_INDEX_EFUSE             1
+#endif//#if defined(CONFIG_KEYMAN_PROVISION_KEY)
+
+static KmDevKeyOps* _km_devKeyOpsArr[] = {
+            [_KM_DEV_INDEX_SECUREKEY]      = &_SecukeyOps,
+#if defined(CONFIG_KEYMAN_PROVISION_KEY)
+            [_KM_DEV_INDEX_PROVISION]	   = &_provisionKeyOps,
+#endif//#if defined(CONFIG_KEYMAN_PROVISION_KEY)
+#if defined(CONFIG_EFUSE)
+            [_KM_DEV_INDEX_EFUSE]          = &_efuseKeyOps,
+#endif//#if defined(CONFIG_EFUSE)
+};
+
+static const int _KM_DEVCNT = sizeof(_km_devKeyOpsArr) / sizeof(_km_devKeyOpsArr[0]);
+
+int _keyman_hex_ascii_to_buf(const char* input, char* buf, const unsigned bufSz)
+{
+    int ret = 0;
+    const char* tmpStr = input;
+    const unsigned inputLen = strlen(input);
+    int i = 0;
+
+    if (!inputLen) {
+        KM_ERR("err input len 0\n");
+        return __LINE__;
+    }
+    if (inputLen & 1) {
+        KM_ERR("inputLen %d not even\n", inputLen);
+        return __LINE__;
+    }
+    if (bufSz * 2 > inputLen) {
+        KM_ERR("bufSz %d not enough\n", bufSz);
+        return __LINE__;
+    }
+    for (tmpStr = input; *tmpStr; ++tmpStr)
+    {
+        char c = *tmpStr;
+        ret = isxdigit(c);
+        if (!ret) {
+            KM_ERR("input(%s) contain non xdigit, c=%c\n", input, c);
+            return __LINE__;
+        }
+    }
+
+    for (i = 0; i < inputLen; i += 2)
+    {
+        char tmpByte[8];
+        tmpByte[2] = '\0';
+        tmpByte[0] = input[i];
+        tmpByte[1] = input[i + 1];
+
+        const unsigned val = simple_strtoul(tmpByte, NULL, 16);
+        if (val > 0xff) {
+            KM_ERR("Exception: val 0x%x > 0xff\n", val);
+            return __LINE__;
+        }
+        buf[i>>1] = val;
+    }
+
+    return 0;
+}
+
+int _keyman_buf_to_hex_ascii(const uint8_t* pdata, const unsigned dataLen, char* fmtStr/*pr if NULL*/)
+{
+    if (NULL == fmtStr) //Only print
+    {
+        int i = 0;
+        KM_MSG("key len is %d, hex value in hexdump:", dataLen);
+        for (; i < dataLen; ++i, ++pdata)
+        {
+            if (!(i & 0xf)) printf("\n\t[0x%04x]:\t\t", i);
+            printf("%02x ", *pdata);
+        }
+        printf("\n");
+    }
+    else
+    {
+        int i = 0;
+
+        *fmtStr = '\0';
+        for (; i < dataLen; ++i, ++pdata)
+        {
+            sprintf(fmtStr, "%s%02x", fmtStr, *pdata);
+        }
+    }
+
+    return 0;
+}
+
+/*
+ * function name: key_unify_init
+ * buf : input
+ * len  : > 0
+ * return : >=0: ok, other: fail
+ * */
+int key_unify_init(const char* seedStr, const char* dtbLoadaddr)
+{
+    int err=EINVAL;
+    int i;
+    uint64_t seedNum = 0;
+
+    if (!dtbLoadaddr)
+    {
+        dtbLoadaddr = (char*) env_get_ulong("fdtcontroladdr", 16, CFG_SYS_SDRAM_BASE + (16U<<20));
+    }
+
+    if (keymanage_dts_parse(dtbLoadaddr)) {
+        KM_DBG("Fail parse /unifykey at addr[0x%p]\n", dtbLoadaddr);
+        return err;
+    }
+
+    seedNum = simple_strtoull(seedStr, NULL, 0);
+    if (!seedNum) {
+        KM_ERR("Seed is 0 err\n");
+        return __LINE__;
+    }
+
+    if (amlkey_if_init(dtbLoadaddr)) {
+        KM_ERR("amlkey interface init fail\n");
+        return __LINE__;
+    }
+
+    for (i=0; i < _KM_DEVCNT; i++)
+    {
+        KmDevKeyOps* theDevOps = _km_devKeyOpsArr[i];
+        err = theDevOps->pInitFunc((char*)&seedNum, sizeof(uint64_t)/sizeof(char));
+        if (err) {
+            KM_ERR("Device[%d] init failed, err=%d\n", i, err);
+            return err;
+        }
+    }
+
+    return 0;
+}
+
+/* function name: key_unify_uninit
+ * functiion : uninit
+ * return : >=0 ok, <0 fail
+ * */
+int key_unify_uninit(void)
+{
+    int err=-EINVAL;
+    int i;
+
+    for (i=0; i < _KM_DEVCNT; i++)
+    {
+        KmDevKeyOps* theDevOps = _km_devKeyOpsArr[i];
+        err = theDevOps->pUninitFunc();
+        if (err) {
+            KM_ERR("device[%d] unini fail\n", i);
+            /*return err;*/
+        }
+    }
+
+    return 0;
+}
+
+static const KmDevKeyOps* _get_km_ops_by_name(const char* keyname)
+{
+    KmDevKeyOps* theDevOps  = NULL;
+
+    //step 1: get device ops by configured key-device
+    enum key_manager_dev_e theDevice = keymanage_dts_get_key_device(keyname);
+
+    switch (theDevice)
+    {
+        case KEY_M_EFUSE_NORMAL:
+            {
+                theDevOps = _km_devKeyOpsArr[_KM_DEV_INDEX_EFUSE];
+            }
+            break;
+
+        case KEY_M_NORAML_KEY:
+        case KEY_M_SECURE_KEY:
+            {
+                theDevOps = _km_devKeyOpsArr[_KM_DEV_INDEX_SECUREKEY];
+            }
+            break;
+
+        case KEY_M_PROVISION_KEY:
+            theDevOps = _km_devKeyOpsArr[_KM_DEV_INDEX_PROVISION];
+            break;
+
+        case KEY_M_UNKNOW_DEV:
+        default:
+            KM_ERR("key %s not know device %d\n", keyname, theDevice);
+            return NULL;
+    }
+
+    return theDevOps;
+}
+
+int key_unify_query_key_has_configure(const char* keyname)
+{
+    return _get_km_ops_by_name(keyname) ? 1 : 0;
+}
+
+/* funtion name: key_unify_write
+ * keyname : key name is ascii string
+ * keydata : key data buf
+ * datalen : key buf len
+ * return  0: ok, -0x1fe: no space, other fail
+ *
+ * Step 1: Get burn target from dtb
+ * Step 2: check whether can burned, OTP can't burned twice
+ *          2.1)check is programmed yet, burn directly if not programmed yet.
+ *          2.2)if programmed yet, check if OTP
+ * Step 3: burn the key to the target
+ * */
+int key_unify_write(const char *keyname, const void* keydata, const unsigned datalen)
+{
+    int err=0;
+    const KmDevKeyOps* theDevOps  = NULL;
+
+    theDevOps = _get_km_ops_by_name(keyname);
+    if (!theDevOps) {
+        KM_ERR("key[%s] no cfg in dts\n", keyname);
+        return __LINE__;
+    }
+
+    if (!theDevOps->can_overwrite) {
+        KM_DBG("can't overwrite\n");
+        int ret = theDevOps->pKeyExist(keyname);
+        if (ret) {
+            KM_ERR("OTP key[%s] already existed, can't program twice!\n", keyname);
+            return __LINE__;
+        }
+    }
+
+    err = theDevOps->pWriteFunc(keyname, keydata, datalen);
+
+    return err;
+}
+
+/*
+ *function name: key_unify_read
+ * keyname : key name is ascii string
+ * keydata : key data buf
+ * datalen : key buf len
+ * reallen : key real len
+ * return : <0 fail, >=0 ok
+ * */
+int key_unify_read(const char *keyname, void* keydata, const unsigned bufLen)
+{
+    int err=0;
+    const KmDevKeyOps* theDevOps  = NULL;
+
+    theDevOps = _get_km_ops_by_name(keyname);
+    if (!theDevOps) {
+        KM_ERR("key[%s] no cfg in dts\n", keyname);
+        return __LINE__;
+    }
+
+    int ret = theDevOps->pKeyExist(keyname);
+    if (!ret) {
+        KM_ERR("key[%s] not programed yet\n", keyname);
+        return __LINE__;
+    }
+
+    ret = theDevOps->pKeyCanRead(keyname);
+    if (!ret) {
+        KM_ERR("key[%s] can't read as it's secure\n", keyname);
+        return __LINE__;
+    }
+
+    const ssize_t keySz = theDevOps->pGetSize(keyname);
+    if (keySz > bufLen && bufLen) {
+        KM_ERR("keySz[%lu] > bufLen[%d]\n", keySz, bufLen);
+        return __LINE__;
+    }
+
+    err = theDevOps->pReadFunc(keyname, keydata, keySz);
+
+    return err;
+}
+
+int key_unify_query_size(const char* keyname, ssize_t* keysize)
+{
+    const KmDevKeyOps* theDevOps  = NULL;
+
+    theDevOps = _get_km_ops_by_name(keyname);
+    if (!theDevOps) {
+        KM_ERR("key[%s] not cfg in dts\n", keyname);
+        return __LINE__;
+    }
+
+#if 0
+    int ret = theDevOps->pKeyCanRead(keyname);
+    if (!ret) {
+        KM_ERR("key[%s] can't read as it's secure\n", keyname);
+        return __LINE__;
+    }
+#endif
+
+    *keysize = theDevOps->pGetSize(keyname);
+
+    return 0;
+}
+
+int key_unify_query_exist(const char* keyname, int* exist)
+{
+    const KmDevKeyOps* theDevOps  = NULL;
+
+    theDevOps = _get_km_ops_by_name (keyname) ;
+    if (!theDevOps) {
+        KM_ERR("key[%s] not cfg in dts\n", keyname);
+        return __LINE__;
+    }
+
+    *exist = theDevOps->pKeyExist(keyname);
+
+    return 0;
+}
+
+int key_unify_query_secure(const char* keyname, int* isSecure)
+{
+    const KmDevKeyOps* theDevOps  = NULL;
+
+    theDevOps = _get_km_ops_by_name (keyname) ;
+    if (!theDevOps) {
+        KM_ERR("key[%s] no cfg in dts\n", keyname);
+        return __LINE__;
+    }
+
+    int ret = theDevOps->pKeyExist (keyname) ;
+    if (!ret) {
+        KM_ERR("key[%s] not programed yet\n", keyname);
+        return __LINE__;
+    }
+
+    *isSecure = !theDevOps->pKeyCanRead (keyname) ;
+    if (!ret) {
+        KM_ERR ("key[%s] can't read as it's secure\n", keyname) ;
+        return __LINE__;
+    }
+
+    return 0;
+}
+
+int key_unify_query_canOverWrite(const char* keyname, int* canOverWrite)
+{
+    const KmDevKeyOps* theDevOps  = NULL;
+
+    theDevOps = _get_km_ops_by_name(keyname);
+    if (!theDevOps) {
+        KM_ERR("key[%s] no cfg in dts\n", keyname);
+        return __LINE__;
+    }
+
+    *canOverWrite = theDevOps->can_overwrite;
+    return 0;
+}
+
+int do_keyunify (struct cmd_tbl *cmdtp, int flag, int argc, char * const argv[])
+{
+    int err;
+    char *cmd;
+    int ret = 0;
+
+    if (argc < 2) return CMD_RET_USAGE;
+
+    cmd = argv[1];
+    //keyman init seedNum <dtbLoadAddr>
+    if (!strcmp(cmd,"init"))
+    {
+        if (argc < 3) {
+            return CMD_RET_USAGE;
+        }
+        const char* seedNum     = argv[2];
+        const char* dtbLoadaddr = argc > 3 ? argv[3] : NULL;
+        err = key_unify_init(seedNum, dtbLoadaddr);
+        return err ? CMD_RET_FAILURE : CMD_RET_SUCCESS;
+    }
+
+    //keyunify write keyname addr <size>
+    //keyunify write keyname hexascii
+    if (!strcmp(cmd,"write"))
+    {
+        if (argc < 4) return CMD_RET_USAGE;
+
+        const char* keyname = argv[2];
+        const char* keyData = (char*)simple_strtoul(argv[3], NULL, 16);
+        unsigned len  = argc > 4 ? simple_strtoul(argv[4], NULL, 0) : 0;
+        char*  dataBuf = NULL;
+
+        if (argc == 4)
+        {
+            const char* hexascii = argv[3];
+
+            len = strlen(hexascii) / 2;
+            dataBuf = (char*)malloc(len);
+            if (!dataBuf) {
+                KM_ERR("Fail in malloc len %d\n", len);
+                return CMD_RET_FAILURE;
+            }
+
+            err = _keyman_hex_ascii_to_buf(hexascii, dataBuf, len);
+            if (err) {
+                KM_ERR("Fail in decrypt hexascii to buf, err=%d\n", err);
+                free(dataBuf);
+                return CMD_RET_FAILURE;
+            }
+            keyData = dataBuf;
+        }
+
+        KM_DBG("write key[%s], addr=%p, len=%d\n", keyname, keyData, len);
+        err = key_unify_write(keyname, keyData, len);
+        if (err ) {
+            KM_ERR("%s key write fail, err=%d\n", keyname, err);
+            return CMD_RET_FAILURE;
+        }
+        if (dataBuf)free(dataBuf) ;
+
+        return CMD_RET_SUCCESS;
+    }
+
+    //keyman query size/secure/exist keyname
+    if (!strcmp(cmd,"query"))
+    {
+        if (argc < 4) return CMD_RET_USAGE;
+
+        const char* subCmd  = argv[2];
+        const char* keyname = argv[3];
+
+        ret = CMD_RET_FAILURE;
+        if (!strcmp("size", subCmd))
+        {
+            ssize_t keysize = 0;
+            err = key_unify_query_size(keyname, &keysize);
+            if (!err) {
+                ret = CMD_RET_SUCCESS;
+                KM_MSG("key[%s] is %u bytes\n", keyname, (unsigned)keysize);
+            }
+        }
+        else if(!strcmp("secure", subCmd))
+        {
+            int isSecure = 0;
+
+            err = key_unify_query_secure(keyname, &isSecure);
+            if (!err) {
+                ret = CMD_RET_SUCCESS;
+                KM_MSG("key[%s] is %s Secure\n", keyname, isSecure ? "DO" : "NON");
+            }
+        }
+        else if(!strcmp("exist", subCmd))
+        {
+            int exist = 0;
+            err = key_unify_query_exist(keyname, &exist);
+            if (!err) {
+                ret = CMD_RET_SUCCESS;
+                KM_MSG("key[%s] is %s existed\n", keyname, exist ? "DO" : "NON");
+            }
+        }
+        else{
+            return CMD_RET_USAGE;
+        }
+
+        return ret;
+    }
+
+    //keyman read keyname memAddr
+    if (!strcmp(cmd,"read"))
+    {
+        if (argc < 4) return CMD_RET_USAGE;
+
+        const char* keyname = argv[2];
+        void* keydata = (void*)simple_strtoul(argv[3], NULL, 16);
+
+        ssize_t keysize = 0;
+        err = key_unify_query_size(keyname, &keysize);
+        if (err) {
+            KM_ERR("Fail in get keysz, err=%d\n", err);
+            return __LINE__;
+        }
+
+        err = key_unify_read(keyname, keydata, (unsigned)keysize);
+        if (err) {
+            KM_ERR("%s key read fail\n", keyname);
+            return CMD_RET_FAILURE;
+        }
+        _keyman_buf_to_hex_ascii(keydata, (unsigned)keysize, NULL);
+
+        return err;
+    }
+
+    if (!strcmp(cmd,"uninit"))
+    {
+        return key_unify_uninit();
+    }
+
+    return CMD_RET_USAGE;
+}
+
+U_BOOT_CMD(
+        keyunify, CONFIG_SYS_MAXARGS, 1, do_keyunify,
+        "key unify sub-system",
+        "init seedNum [dtbAddr] --init the drivers\n"
+        "keyunify uninit - init key in device\n"
+        "keyunify write keyname data <len>  ---- wirte key data. len non-exist if data is ascii str\n"
+        "keyunify read keyname data-addr <len> \n"
+);
+
+
+#if !defined(CONFIG_AML_SECURITY_KEY)
+int keymanage_securekey_init(const char* buf, int len) { return -EINVAL; }
+int keymanage_securekey_exit(void){ return -EINVAL; }
+int keymanage_secukey_write(const char *keyname, const void* keydata, unsigned int datalen){ return -EINVAL; }
+ssize_t keymanage_secukey_size(const char* keyname){ return 0; }
+int keymanage_secukey_exist(const char* keyname){ return 0; }
+int keymanage_secukey_can_read(const char* keyname){ return 0; }
+int keymanage_secukey_read(const char* keyname, void* dataBuf,  unsigned buflen){ return -EINVAL; }
+#endif// #if CONFIG_AML_SECURITY_KEY
+
+#if !defined(CONFIG_EFUSE)
+int keymanage_efuse_init(const char *buf, int len) { return -EINVAL; }
+int keymange_efuse_exit(void) {return -EINVAL;}
+int keymanage_efuse_write(const char *keyname, const void* keydata, unsigned int datalen) { return -EINVAL; }
+int keymanage_efuse_exist(const char* keyname) { return -EINVAL; }
+ssize_t keymanage_efuse_size(const char* keyname) { return 0; }
+int keymanage_efuse_read(const char *keyname, void* dataBuf, const unsigned bufsz) { return -EINVAL; }
+int keymanage_efuse_query_is_burned(const char* keyname) { return -EINVAL; }
+int keymanage_efuse_query_can_read(const char* keyname) { return -EINVAL; }
+#endif// #ifdef CONFIG_EFUSE
+
+#if !defined(CONFIG_OF_LIBFDT)
+int keymanage_dts_parse(const void* dt_addr){ return -EINVAL; }
+enum key_manager_df_e keymanage_dts_get_key_fmt(const char *keyname){ return -EINVAL; }
+enum key_manager_dev_e keymanage_dts_get_key_device(const char *keyname){ return -EINVAL; }
+char unifykey_get_efuse_version(void) { return -1; }
+#endif//#ifdef CONFIG_OF_LIBFDT
+
+
diff --git a/drivers/amlogic/keymanage/km_dts.c b/drivers/amlogic/keymanage/km_dts.c
new file mode 100644
index 00000000000..d2a2186147a
--- /dev/null
+++ b/drivers/amlogic/keymanage/km_dts.c
@@ -0,0 +1,392 @@
+#include "key_manage_i.h"
+//#include <fdt.h>
+#include <linux/libfdt.h>
+
+#define UNIFYKEY_DATAFORMAT_HEXDATA	    "hexdata"
+#define UNIFYKEY_DATAFORMAT_HEXASCII	"hexascii"
+#define UNIFYKEY_DATAFORMAT_ALLASCII	"allascii"
+
+#define UNIFYKEY_DEVICE_EFUSEKEY	    "efuse"
+#define UNIFYKEY_DEVICE_NORMAL		    "normal"
+#define UNIFYKEY_DEVICE_SECURESKEY	    "secure"
+#define UNIFYKEY_DEVICE_PROVISIONKEY    "provision"
+
+#define UNIFYKEY_PERMIT_READ		"read"
+#define UNIFYKEY_PERMIT_WRITE		"write"
+#define UNIFYKEY_PERMIT_DEL			"del"
+
+static struct key_info_t unify_key_info={.key_num =0, .key_flag = 0, .efuse_version = -1, .encrypt_type = 0};
+static struct key_item_t *unifykey_item=NULL;
+static struct key_item_t* _defProvisonItem =NULL;//keyname start with "KEY_PROVISION_" and device is "provison"
+#define _PROVSION_DEFAULT_KEY_NAME  "KEY_PROVISION_XXX"
+
+static int unifykey_item_verify_check(struct key_item_t *key_item)
+{
+	if (!key_item) {
+		KM_ERR("unify key item is invalid\n");
+		return -1;
+	}
+
+	if (!key_item->name || (key_item->dev == KEY_M_UNKNOW_DEV) ||(key_item->datFmt == KEY_M_MAX_DF)) {
+		KM_ERR("unify key item is invalid\n");
+		return -1;
+	}
+
+	return 0;
+}
+
+static struct key_item_t *unifykey_find_item_by_name(const char *name)
+{
+	struct key_item_t *pre_item;
+    int i = 0;
+    const unsigned cnt = unify_key_info.key_num;
+
+    for (pre_item = unifykey_item; i < cnt; ++pre_item, ++i)
+    {
+        if (!strcmp(pre_item->name,name)) {
+            return pre_item;
+        }
+    }
+
+    if (!strncmp(_PROVSION_DEFAULT_KEY_NAME, name, strlen(_PROVSION_DEFAULT_KEY_NAME) - 3)) {
+        return _defProvisonItem;
+    }
+	return NULL;
+}
+
+enum key_manager_df_e keymanage_dts_get_key_fmt(const char *keyname)
+{
+	struct key_item_t *key_manage;
+    enum key_manager_df_e keyValFmt = KEY_M_MAX_DF;
+
+    if (!unify_key_info.key_flag) {
+        KM_ERR("/unify not parsed yet!\n");
+        return KEY_M_MAX_DF;
+    }
+
+	key_manage = unifykey_find_item_by_name(keyname);
+	if (key_manage == NULL) {
+		KM_ERR ("%s key name is not exist\n", keyname) ;
+		return keyValFmt;
+	}
+	if (unifykey_item_verify_check(key_manage)) {
+		KM_ERR ("%s key name is invalid\n", keyname) ;
+		return keyValFmt;
+	}
+
+    keyValFmt = key_manage->datFmt;
+	return keyValFmt;
+}
+
+//which device does the key stored in
+enum key_manager_dev_e keymanage_dts_get_key_device(const char *keyname)
+{
+	struct key_item_t *key_manage;
+
+    if (!unify_key_info.key_flag) {
+        KM_ERR("/unify not parsed yet!\n");
+        return KEY_M_MAX_DEV;
+    }
+	key_manage = unifykey_find_item_by_name(keyname);
+	if (key_manage == NULL) {
+		KM_ERR("%s key name is not exist\n",keyname);
+		return KEY_M_MAX_DEV;
+	}
+	if (unifykey_item_verify_check(key_manage)) {
+		KM_ERR("%s key name is invalid\n",keyname);
+		return KEY_M_MAX_DEV;
+	}
+
+	return key_manage->dev;
+}
+
+const char* keymanage_dts_get_enc_type(const char* keyname)
+{
+	struct key_item_t *key_manage;
+
+    if (!unify_key_info.key_flag) {
+		KM_ERR("/unify not parsed yet!\n");
+		return NULL;
+	}
+	key_manage = unifykey_find_item_by_name(keyname);
+	if (key_manage == NULL) {
+		KM_ERR("%s key name is not exist\n",keyname);
+		return NULL;
+	}
+
+	return key_manage->encType;
+}
+
+const char* keymanage_dts_get_key_type(const char* keyname)
+{
+	struct key_item_t *key_manage;
+
+    if (!unify_key_info.key_flag) {
+        KM_ERR("/unify not parsed yet!\n");
+        return NULL;
+    }
+	key_manage = unifykey_find_item_by_name(keyname);
+	if (key_manage == NULL) {
+		KM_ERR("%s key name is not exist\n",keyname);
+		return NULL;
+	}
+
+	return key_manage->keyType;
+}
+
+char unifykey_get_efuse_version(void)
+{
+	char ver=0;
+
+    if (!unify_key_info.key_flag) {
+        KM_ERR("/unify not parsed yet!\n");
+        return 0;
+    }
+
+	if (unify_key_info.efuse_version != -1) {
+		ver = (char)unify_key_info.efuse_version;
+	}
+	return ver;
+}
+
+int unifykey_get_encrypt_type(void)
+{
+	return unify_key_info.encrypt_type;
+}
+
+static int unifykey_item_dt_parse(const void* dt_addr,int nodeoffset,int id,char *item_path)
+{
+	struct key_item_t *temp_item=NULL;
+	char *propdata;
+	struct fdt_property *prop;
+	int count;
+
+	temp_item = unifykey_item + id;
+
+	propdata = (char*)fdt_getprop(dt_addr, nodeoffset, "key-encrypt", NULL);
+	if (propdata) {
+		count = strlen(propdata);
+        if ( count > KEY_UNIFY_TYPE_LEN_MAX ) {
+			KM_ERR("key-encrypt [%s] too long\n", propdata);
+			return __LINE__;
+		}
+		memcpy(temp_item->encType, propdata, count);
+	}
+
+	propdata = (char*)fdt_getprop(dt_addr, nodeoffset, "key-name",NULL);
+	if (!propdata) {
+		printf("%s get key-name fail,%s:%d\n",item_path,__func__,__LINE__);
+        return __LINE__;
+	}
+
+	count = strlen(propdata);
+	if (count >= KEY_UNIFY_NAME_LEN) {
+        KM_ERR("key-name strlen (%d) > max(%d) at key_%d\n", count, KEY_UNIFY_NAME_LEN - 1, id);
+        return __LINE__;
+	}
+    memcpy(temp_item->name, propdata, count);
+    temp_item->name[count] = 0;
+
+	propdata = (char*)fdt_getprop(dt_addr, nodeoffset, "key-device",NULL);
+	if (!propdata) {
+		KM_ERR("%s get key-device fail at key_%d\n",item_path, id);
+        return __LINE__;
+	}
+
+    if (strcmp(propdata,UNIFYKEY_DEVICE_EFUSEKEY) == 0) {
+        temp_item->dev = KEY_M_EFUSE_NORMAL;
+    }
+    else if(strcmp(propdata,UNIFYKEY_DEVICE_SECURESKEY) == 0){
+        temp_item->dev = KEY_M_SECURE_KEY;
+    }
+    else if(strcmp(propdata,UNIFYKEY_DEVICE_NORMAL) == 0){
+        temp_item->dev = KEY_M_NORAML_KEY;
+    }
+    else{
+        KM_ERR("key-device %s is unknown at key_%d\n", propdata, id);
+        return __LINE__;
+    }
+
+	propdata = (char*)fdt_getprop((const void *)dt_addr, nodeoffset, "key-type",NULL);
+	if (!propdata) //prop 'key-type' not configured, default to raw except special names
+    {
+        strcpy(temp_item->keyType, "raw");
+	}
+    else
+    {
+        const int keyTypeLen = strlen(propdata);
+        if (keyTypeLen > KEY_UNIFY_TYPE_LEN_MAX) {
+            KM_ERR("key[%s]cfg key-type[%s] sz %d > max %d\n", temp_item->name, propdata, keyTypeLen, KEY_UNIFY_TYPE_LEN_MAX);
+            return __LINE__;
+        }
+        strcpy(temp_item->keyType, propdata);
+    }
+
+	prop = (struct fdt_property*)fdt_get_property((const void *)dt_addr,nodeoffset,"key-permit",NULL) ;
+	if (!prop) {
+		KM_ERR("%s get key-permit fail at  key_%d\n",item_path, id);
+        return __LINE__;
+	}
+
+    temp_item->permit = 0;
+    const int propLen = prop->len > 512 ? strnlen(prop->data, 512) : prop->len;
+    if (fdt_stringlist_contains(prop->data, propLen, UNIFYKEY_PERMIT_READ)) {
+        temp_item->permit |= KEY_M_PERMIT_READ;
+    }
+    if (fdt_stringlist_contains(prop->data, propLen, UNIFYKEY_PERMIT_WRITE)) {
+        temp_item->permit |= KEY_M_PERMIT_WRITE;
+    }
+    if (fdt_stringlist_contains(prop->data, propLen, UNIFYKEY_PERMIT_DEL)) {
+        temp_item->permit |= KEY_M_PERMIT_DEL;
+    }
+
+	temp_item->id = id;
+
+    KM_DBG("key[%02d] keyname %s, %d\n", id, temp_item->name, temp_item->dev);
+
+	return 0;
+}
+
+static int unifykey_item_create(const void* dt_addr,int num)
+{
+    int ret = 0;
+    int i,nodeoffset;
+    char item_path[100];
+
+    for (i=0;i<num;i++)
+    {
+        sprintf(item_path, "/unifykey/key_%d", i);
+
+        nodeoffset = fdt_path_offset (dt_addr, item_path) ;
+        if (nodeoffset < 0) {
+            KM_ERR(" dts: not find  node %s.\n",fdt_strerror(nodeoffset));
+            return __LINE__;
+        }
+
+        ret = unifykey_item_dt_parse(dt_addr,nodeoffset, i, item_path);
+        if (ret) {
+            KM_ERR("Fail at parse %s\n", item_path);
+            return __LINE__;
+        }
+    }
+
+    //	printf("unifykey-num fact is %x\n",count);
+    return 0;
+}
+
+//parse and cache the dts cfg
+//TODO: check keys names has no duplicated
+int keymanage_dts_parse(const void* dt_addr)
+{
+    int ret = 0;
+	int child;
+	int nodeoffset, provisionOffset;
+	int unifykeyNum = 0, provisionNum = 0;
+	char *punifykey_num, *encrypt_type;
+
+	if (fdt_check_header(dt_addr)!= 0) {
+        KM_ERR("not a fdt at 0x%p\n", dt_addr);
+        return __LINE__;
+    }
+
+	nodeoffset = fdt_path_offset(dt_addr, "/unifykey");
+	if (nodeoffset < 0) {
+		KM_ERR("dts: err(%s) in find /unifykey.\n",fdt_strerror(nodeoffset));
+		return __LINE__;
+	}
+
+	unify_key_info.efuse_version = -1;
+	punifykey_num = (char*)fdt_getprop((const void *)dt_addr, nodeoffset, "efuse-version",NULL);
+	if (punifykey_num) {
+		unify_key_info.efuse_version = be32_to_cpup((unsigned int*)punifykey_num);
+		KM_MSG("efuse-version config is %x\n",unify_key_info.efuse_version);
+	}
+
+	unify_key_info.key_num = 0;
+	fdt_for_each_subnode(child, dt_addr, nodeoffset) {
+		unifykeyNum++;
+	}
+
+	provisionOffset = fdt_path_offset(dt_addr, "/provisionkey");
+	if (provisionOffset >= 0) {
+		fdt_for_each_subnode(child, dt_addr, provisionOffset) {
+			provisionNum++;
+		}
+	}
+	unify_key_info.key_num = unifykeyNum + provisionNum;
+	KM_MSG("key_num: %d\n", unify_key_info.key_num);
+
+	unify_key_info.encrypt_type = -1;
+	encrypt_type = (char*)fdt_getprop((const void *)dt_addr, nodeoffset, "unifykey-encrypt",NULL);
+	if (encrypt_type) {
+		unify_key_info.encrypt_type = be32_to_cpup((unsigned int*)encrypt_type);
+	}
+
+	if (unify_key_info.key_num <= 0) {
+		KM_ERR("unifykey-num is not configured\n");
+        return __LINE__;
+	}
+    if (unify_key_info.key_num > 256) {
+        KM_ERR("Cfg key_num is %d > 32,pls check!\n", unify_key_info.key_num);
+        return __LINE__;
+    }
+
+    if (unifykey_item) {
+        free(unifykey_item);
+    }
+    const unsigned keyInfBufLen = unify_key_info.key_num * sizeof(struct key_item_t);
+    unifykey_item = (struct key_item_t*)malloc(keyInfBufLen);
+    memset(unifykey_item, 0 , keyInfBufLen);
+
+    ret = unifykey_item_create(dt_addr,unifykeyNum);
+    unify_key_info.key_flag = ret ? 0 : 1;
+
+    if (provisionOffset >= 0)
+    {
+        KM_DBG("dts: in find /provisionkey.\n");
+
+        int defPermits = 0;
+        const struct fdt_property *prop = fdt_get_property(dt_addr, provisionOffset,"key-permit-default",NULL) ;
+        if (prop) {
+            const int propLen = prop->len > 512 ? strnlen(prop->data, 512) : prop->len;
+            if (fdt_stringlist_contains(prop->data, propLen, UNIFYKEY_PERMIT_READ)) {
+                defPermits |= KEY_M_PERMIT_READ;
+            }
+            if (fdt_stringlist_contains(prop->data, propLen, UNIFYKEY_PERMIT_WRITE)) {
+                defPermits |= KEY_M_PERMIT_WRITE;
+            }
+            if (fdt_stringlist_contains(prop->data, propLen, UNIFYKEY_PERMIT_DEL)) {
+                defPermits |= KEY_M_PERMIT_DEL;
+            }
+        }
+
+        int node = 0;
+        int id = unifykeyNum;
+        int szlen = 0;
+        fdt_for_each_subnode(node, dt_addr, provisionOffset) {
+            int len = 0;
+            const char* keyName = fdt_get_name(dt_addr, node, &len);
+            KM_DBG("provisionkey[%s] len %d\n", keyName, len);
+
+            struct key_item_t *pItem= unifykey_item + id;
+
+            szlen = strnlen(keyName, KEY_UNIFY_NAME_LEN - 1);
+            memcpy(pItem->name, keyName, szlen);
+            if (szlen < KEY_UNIFY_NAME_LEN) pItem->name[szlen] = '\0';
+
+            strcpy(pItem->keyType, "raw");
+            pItem->dev = KEY_M_PROVISION_KEY;
+            pItem->permit = defPermits;
+            pItem->id      = id++;
+            if (!strcmp(_PROVSION_DEFAULT_KEY_NAME, keyName)) _defProvisonItem = pItem;
+        }
+
+        if ((node < 0) && (node != -FDT_ERR_NOTFOUND)) {
+            KM_ERR("in parse /provisionkey, err(%s)\n", fdt_strerror(node));
+            return __LINE__;
+        }
+    }
+
+	return ret;
+}
+
diff --git a/drivers/amlogic/keymanage/km_efuse_key.c b/drivers/amlogic/keymanage/km_efuse_key.c
new file mode 100644
index 00000000000..c5c1e53baf7
--- /dev/null
+++ b/drivers/amlogic/keymanage/km_efuse_key.c
@@ -0,0 +1,156 @@
+/*
+ * \file        km_efuse_key.c
+ * \brief       efuse key ops for key manage
+ *
+ * \version     1.0.0
+ * \date        15/06/30
+ * \author      Sam.Wu <yihui.wu@amlgic.com>
+ *
+ * Copyright (c) 2015 Amlogic. All Rights Reserved.
+ *
+ */
+#include "key_manage_i.h"
+#include <amlogic/asm/secure_apb.h>
+#include <asm/io.h>
+
+#include <command.h>
+#include <amlogic/aml_efuse.h>
+
+#define SECURE_BOOT_KEY_NAME    "secure_boot_set"
+
+extern int efuse_usr_api_init_dtb(const char*  dt_addr);
+extern int efuse_usr_api_get_cfg_key_size(const char* keyname, unsigned* pSz);
+extern int efuse_usr_api_write_key(const char* keyname, const void* keydata, const unsigned dataSz);
+extern int efuse_usr_api_read_key(const char* keyname, void* databuf, const unsigned bufSz);
+
+int keymanage_efuse_init(const char *buf, int len)
+{
+    char ver;
+    int ret = 0;
+
+    const char* dtbLoadAddr;
+    dtbLoadAddr = (char*) env_get_ulong("fdtcontroladdr", 16, CFG_SYS_SDRAM_BASE + (16U<<20));
+
+    ret = efuse_usr_api_init_dtb(dtbLoadAddr);
+    if (ret) {
+        KM_ERR("efuse init failed\n");
+        return __LINE__;
+    }
+
+    ver = unifykey_get_efuse_version();
+    if (ver == 0) {
+        KM_DBG("efuse version not cfg\n");
+        return 0;
+    }
+
+    //TODO: program the efuse version
+
+    return ret;
+}
+
+int keymange_efuse_exit(void)
+{
+    return 0;
+}
+
+//must be hexdata if stored in efuse
+int keymanage_efuse_write(const char *keyname, const void* keydata, unsigned int datalen)
+{
+    int ret = 0;
+
+    if (!strcmp(SECURE_BOOT_KEY_NAME, keyname))
+    {
+            char _cmdbuf[96];
+            sprintf(_cmdbuf, "efuse %s %p", keyname, keydata);
+            ret = run_command(_cmdbuf, 0);;
+    }
+    else
+    {
+            ret = efuse_usr_api_write_key(keyname,  keydata, datalen);
+    }
+
+    return ret;
+}
+
+ssize_t keymanage_efuse_size(const char* keyname)
+{
+    int ret = 0;
+    unsigned cfgSz = 0;
+
+    ret = efuse_usr_api_get_cfg_key_size(keyname, &cfgSz);
+    if (ret || !cfgSz) {
+        KM_ERR("Fail at get cfg size for efuse key[%s]\n", keyname);
+        return 0;
+    }
+
+    return cfgSz;
+}
+
+int keymanage_efuse_exist(const char* keyname)
+{
+
+        if (!strcmp(SECURE_BOOT_KEY_NAME, keyname))
+        {
+                const unsigned long cfg10 = IS_FEAT_BOOT_VERIFY();
+                KM_MSG("cfg10=0x%lX\n", cfg10);
+                return ( cfg10 );
+        }
+        else
+        {
+                int ret = 0;
+                const ssize_t cfgSz = keymanage_efuse_size(keyname);
+                char* databuf = NULL;
+                int isEmpty = 1;
+                int i = 0;
+
+                databuf = (char*)malloc(cfgSz);
+                if (!databuf) {
+                        KM_ERR("Fail to alloc bufsz 0x%x for key %s\n", (unsigned)cfgSz, keyname);
+                        return 0;
+                }
+                ret = keymanage_efuse_read(keyname, databuf, cfgSz);
+                if (ret) {
+                        KM_ERR("Fail at read key[%s]\n", keyname);
+                        goto _exit;
+                }
+                for (i = 0; i < cfgSz && isEmpty; ++i) {
+                        isEmpty = !databuf[i];
+                }
+
+_exit:
+                free(databuf);
+                return !isEmpty;
+        }
+
+        return __LINE__;
+}
+
+int keymanage_efuse_query_can_read(const char* keyname)
+{
+        if (!strcmp(SECURE_BOOT_KEY_NAME, keyname))
+        {
+                return 0;
+        }
+        else
+        {
+                return 1;//user space always can be read
+        }
+}
+
+//data format is hexdata
+int keymanage_efuse_read(const char *keyname, void* databuf, const unsigned bufSz)
+{
+    int ret = 0;
+    unsigned cfgSz = 0;
+
+    cfgSz = keymanage_efuse_size(keyname);
+    if (cfgSz > bufSz) {
+        KM_ERR("buf sz 0x%x < dts cfg sz 0x%x\n", bufSz, cfgSz);
+        return __LINE__;
+    }
+
+    ret = efuse_usr_api_read_key(keyname, databuf, cfgSz);
+
+    return ret;
+}
+
diff --git a/drivers/amlogic/keymanage/km_provision_key.c b/drivers/amlogic/keymanage/km_provision_key.c
new file mode 100644
index 00000000000..954a42b28a2
--- /dev/null
+++ b/drivers/amlogic/keymanage/km_provision_key.c
@@ -0,0 +1,102 @@
+/*
+* Copyright (C) 2017 Amlogic, Inc. All rights reserved.
+* *
+This program is free software; you can redistribute it and/or modify
+* it under the terms of the GNU General Public License as published by
+* the Free Software Foundation; either version 2 of the License, or
+* (at your option) any later version.
+* *
+This program is distributed in the hope that it will be useful, but WITHOUT
+* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
+* more details.
+* *
+You should have received a copy of the GNU General Public License along
+* with this program; if not, write to the Free Software Foundation, Inc.,
+* 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+* *
+Description:
+*/
+
+#include "key_manage_i.h"
+#include <cli.h>
+
+#define _CMD_BUF_LEN 512
+static char _cmdBuf[_CMD_BUF_LEN];
+
+int keymanage_provision_init(const char *buf, int len)
+{
+	KM_DBG("f(%s)L%d\n", __func__, __LINE__);
+	return 0;
+}
+
+int keymanage_provision_exit(void)
+{
+	KM_DBG("f(%s)L%d\n", __func__, __LINE__);
+    return 0;
+}
+
+//must be hexdata if stored in efuse
+int keymanage_provision_write(const char *keyname, const void* keydata, unsigned int datalen)
+{
+	KM_DBG("f(%s)L%d\n", __func__, __LINE__);
+
+	snprintf(_cmdBuf, _CMD_BUF_LEN, "factory_provision write %s 0x%p 0x%x", keyname, keydata, datalen);
+	int iRet = run_command(_cmdBuf, 0);
+	KM_MSG("factory provision[%s], query sta=%d\n", keyname, iRet);
+
+	return iRet;
+}
+
+ssize_t keymanage_provision_size(const char* keyname)
+{
+	KM_DBG("f(%s)L%d\n", __func__, __LINE__);
+	uint32_t retBuf[12];
+	snprintf(_cmdBuf, _CMD_BUF_LEN, "factory_provision query %s 0x%p", keyname, retBuf);
+	int iRet = run_command(_cmdBuf, 0);
+	if (iRet) {
+		KM_MSG("factory provision[%s], query sta=%d\n", keyname, iRet);
+		return 0;
+	}
+
+	return retBuf[0];
+}
+
+int keymanage_provision_exist(const char* keyname)
+{
+	KM_DBG("f(%s)L%d\n", __func__, __LINE__);
+	snprintf(_cmdBuf, _CMD_BUF_LEN, "factory_provision query %s", keyname);
+	int iRet = run_command(_cmdBuf, 0);
+	if (iRet) KM_MSG("factory provision[%s], query sta=%d\n", keyname, iRet);
+
+	return !iRet;
+}
+
+int keymanage_provision_query_can_read(const char* keyname)
+{
+	KM_DBG("f(%s)L%d\n", __func__, __LINE__);
+
+	return 0;//always cannot be read
+}
+
+//read hash instead of actual value
+int keymanage_provision_read(const char *keyname, void* databuf, const unsigned bufSz)
+{
+	KM_DBG("f(%s)L%d\n", __func__, __LINE__);
+	uint32_t retBuf[12];
+	snprintf(_cmdBuf, _CMD_BUF_LEN, "factory_provision query %s 0x%p", keyname, retBuf);
+	int iRet = run_command(_cmdBuf, 0);
+	if (iRet) {
+		KM_MSG("factory provision[%s], query sta=%d\n", keyname, iRet);
+		return __LINE__;
+	}
+	if (bufSz < 32) {
+		KM_ERR("bufsz %d not enough for sha256sum\n", bufSz);
+		return -__LINE__;
+	}
+
+	KM_MSG("provision read return sha256sum, but not original data\n");
+	memcpy(databuf, retBuf + 1, 32);
+	return 0;//
+}
+
diff --git a/drivers/amlogic/keymanage/km_secure_key.c b/drivers/amlogic/keymanage/km_secure_key.c
new file mode 100644
index 00000000000..f33652b1b67
--- /dev/null
+++ b/drivers/amlogic/keymanage/km_secure_key.c
@@ -0,0 +1,263 @@
+/*
+ * \file        km_secure_key.c
+ * \brief       secure storage key ops for key manage
+ *
+ * \version     1.0.0
+ * \date        15/06/30
+ * \author      Sam.Wu <yihui.wu@amlgic.com>
+ *
+ * Copyright (c) 2015 Amlogic. All Rights Reserved.
+ *
+ */
+#include "key_manage_i.h"
+#include <amlogic/amlkey_if.h>
+#include <u-boot/sha256.h>
+
+int keymanage_securekey_init(const char* buf, int len)
+{
+	int encrypt_type;
+
+	encrypt_type = unifykey_get_encrypt_type();
+	return amlkey_init((uint8_t*)buf, len, encrypt_type);	//confirm
+}
+
+int keymanage_securekey_exit(void)
+{
+    return 0;
+}
+
+int keymanage_secukey_write(const char *keyname, const void* keydata, unsigned int datalen)
+{
+    int ret = 0;
+    uint8_t origSum[SHA256_SUM_LEN];
+    const int isSecure =  ( KEY_M_SECURE_KEY == keymanage_dts_get_key_device(keyname) ) ? 1 : 0;
+    const int isEncrypt= strlen(keymanage_dts_get_enc_type(keyname)) ? 1 : 0;
+    const unsigned int keyAttr = ( isSecure << 0 ) | ( isEncrypt << 8 );
+    ssize_t writenLen = 0;
+
+    if (isSecure)
+    {
+        sha256_context ctx;
+        sha256_starts(&ctx);
+        sha256_update(&ctx, keydata, datalen);
+        sha256_finish(&ctx, origSum);
+    }
+
+    KM_MSG("isEncrypt=%s\n", keymanage_dts_get_enc_type(keyname));
+    KM_DBG("%s, keyname=%s, keydata=%p, datalen=%d, isSecure=%d\n", __func__, keyname, keydata, datalen, isSecure);
+    KM_MSG("keyAttr is 0x%08X\n", keyAttr);
+    writenLen = amlkey_write((uint8_t*)keyname, (uint8_t*)keydata, datalen, keyAttr);
+    if (writenLen != datalen) {
+        KM_ERR("Want to write %u bytes, but only %zd Bytes\n", datalen, writenLen);
+        return __LINE__;
+    }
+
+    if (isSecure)
+    {
+        uint8_t genSum[SHA256_SUM_LEN];
+
+        ret = amlkey_hash_4_secure((uint8_t*)keyname, genSum);
+        if (ret) {
+            KM_ERR("Failed when gen hash for secure key[%s], ret=%d\n", keyname, ret);
+            return __LINE__;
+        }
+
+        ret = memcmp(origSum, genSum, SHA256_SUM_LEN);
+        if (ret)
+        {
+            int index = 0;
+            char origSum_str[SHA256_SUM_LEN * 2 + 2];
+            char genSum_str[SHA256_SUM_LEN * 2 + 2];
+
+            origSum_str[0] = genSum_str[0] = '\0';
+            for (index = 0; index < SHA256_SUM_LEN; ++index) {
+
+                sprintf(origSum_str, "%s%02x", origSum_str, origSum[index]);
+                sprintf(genSum_str, "%s%02x", genSum_str, genSum[index]);
+            }
+
+            KM_ERR("Failed in check hash, origSum[%s] != genSum[%s]\n", origSum_str, genSum_str);
+            return __LINE__;
+        }
+        KM_MSG("OK in check sha1256 in burn key[%s]\n", keyname);
+    }
+
+    return ret;
+}
+
+ssize_t keymanage_secukey_size(const char* keyname)
+{
+	return amlkey_size((uint8_t*)keyname);	//actully size
+}
+
+int keymanage_secukey_exist(const char* keyname)
+{
+	return amlkey_isexsit((uint8_t*)keyname);	//exsit 1, non 0
+}
+
+int keymanage_secukey_can_read(const char* keyname)
+{
+	return !amlkey_issecure((uint8_t*)keyname);	//secure 1, non 0
+}
+
+int keymanage_secukey_read(const char* keyname, void* databuf,  unsigned buflen)
+{
+    int ret = 0;
+
+    ret = keymanage_secukey_can_read(keyname);
+    if (!ret) {
+        KM_ERR("key[%s] can't read, is configured secured?\n", keyname);
+        return __LINE__;
+    }
+
+	const ssize_t readLen = amlkey_read((uint8_t*)keyname, (uint8_t*)databuf, buflen);
+    if (readLen != buflen) {
+        KM_ERR("key[%s], want read %u Bytes, but %zd bytes\n", keyname, buflen, readLen);
+        return __LINE__;
+    }
+
+    return 0;
+}
+
+#if 1//hdcp2 rx start
+#define HDCP2_RX_LC128_LEN         (36)
+#define HDCP2_RX_KEY_LEN           (862)
+#pragma pack(push, 1)
+typedef struct _Hdcp2RxKeyFmt{
+    unsigned                version;
+    char                    lc128[HDCP2_RX_LC128_LEN];
+    char                    keyVal[HDCP2_RX_KEY_LEN];
+}Hdcp2RxKeyFmt_t;
+#pragma pack(pop)
+
+#define HDCP2_RX_KEY_TOTAL_LEN        sizeof(Hdcp2RxKeyFmt_t)
+#define HDCP2_RX_KEY_LC128_NAME       "hdcp2lc128"
+#define HDCP2_RX_KEY_NAME             "hdcp2key"
+#define HDCP2_RX_KEY_VERSION           (0x02000000U)
+#define HDCP2_VERSION_LEN               ( 4 )
+
+static char generalDataChange(const char input)
+{
+    int i;
+    char result = 0;
+
+    for (i=0; i<8; i++) {
+        if ((input & (1<<i)) != 0)
+            result |= (1<<(7-i));
+        else
+            result &= ~(1<<(7-i));
+    }
+
+    return result;
+}
+
+static void hdcp2DataEncryption(const unsigned len, const char *input, char *out)
+{
+    int i = 0;
+
+    for (i=0; i<len; i++)
+        *out++ = generalDataChange(*input++);
+}
+
+static void hdcp2DataDecryption(const unsigned len, const char *input, char *out)
+{
+    int i = 0;
+
+    for (i=0; i<len; i++)
+        *out++ = generalDataChange(*input++);
+}
+
+int _burn_key_in_type_hdcp2(const char* keyname, void* databuf, const unsigned bufLen, char* decryptBuf)
+{
+    Hdcp2RxKeyFmt_t* pHdcp2RxKey = (Hdcp2RxKeyFmt_t*)databuf;
+    const int keyLen = HDCP2_RX_KEY_TOTAL_LEN;
+
+    if (keyLen > bufLen) {
+        KM_ERR("hdcp2 rx len unsupported. want %d but get %d\n", keyLen, bufLen);
+        return __LINE__;
+    }
+    if (HDCP2_RX_KEY_VERSION != pHdcp2RxKey->version) {
+        KM_ERR("Version value 0x%x is error, should be 0x%x\n", pHdcp2RxKey->version, HDCP2_RX_KEY_VERSION);
+        return __LINE__;
+    }
+
+    hdcp2DataEncryption(keyLen, databuf, decryptBuf);
+    KM_MSG("Ecnrypt hdcp2 END.\n");
+    pHdcp2RxKey = (Hdcp2RxKeyFmt_t*)decryptBuf;
+
+    const uint8_t* tmpName      = (uint8_t*)HDCP2_RX_KEY_LC128_NAME;
+    unsigned        tmpLen      = HDCP2_RX_LC128_LEN;
+    unsigned        isSecure    = 0;
+    ssize_t retLen = 0;
+    retLen = amlkey_write(tmpName, (uint8_t*)&pHdcp2RxKey->lc128, tmpLen , isSecure);
+    if (retLen != tmpLen) {
+        KM_ERR ("Fail in write hdcp2 lc128, retLen %zd != want len %d\n", retLen, tmpLen) ;
+        return __LINE__;
+    }
+
+    tmpName = (uint8_t*)HDCP2_RX_KEY_NAME;
+    tmpLen = HDCP2_RX_KEY_LEN;
+    retLen = amlkey_write(tmpName, (uint8_t*)&pHdcp2RxKey->keyVal, tmpLen , isSecure);
+    if (retLen != tmpLen) {
+        KM_ERR ("Fail in write hdcp2 key, retLen %zd != want len %d\n", retLen, tmpLen) ;
+        return __LINE__;
+    }
+
+    tmpLen = HDCP2_VERSION_LEN;
+    retLen = amlkey_write((uint8_t*)keyname, (uint8_t*)&pHdcp2RxKey->version, tmpLen, isSecure);
+    if (retLen != tmpLen) {
+        KM_ERR ("Fail in write hdcp2 key, retLen %zd != want len %d\n", retLen, tmpLen) ;
+        return __LINE__;
+    }
+
+    return 0;
+}
+
+int _read_key_in_type_hdcp2(const char* keyname, void* databuf, const unsigned bufLen, char* decryptBuf)
+{
+    const unsigned srcKeyLen    = HDCP2_RX_KEY_TOTAL_LEN;
+    Hdcp2RxKeyFmt_t* pHdcp2RxKey = (Hdcp2RxKeyFmt_t*)decryptBuf;
+    const uint8_t* tmpName = NULL;
+    int tmpLen = 0;
+
+    if (bufLen < srcKeyLen) {
+        KM_ERR("hdcp2 rx len unsupported. want %d but only %d\n", srcKeyLen, bufLen);
+        return __LINE__;
+    }
+
+    ssize_t retLen = 0;
+    tmpName = (uint8_t*)keyname;
+    tmpLen = HDCP2_VERSION_LEN;
+    retLen = amlkey_read(tmpName, (uint8_t*)&pHdcp2RxKey->version, tmpLen);
+    if (retLen != tmpLen) {
+        KM_ERR ("Fail in read key[%s] at len %d\n", tmpName, tmpLen) ;
+        return __LINE__;
+    }
+
+    tmpName = (uint8_t*)HDCP2_RX_KEY_NAME;
+    tmpLen  = HDCP2_RX_KEY_LEN;
+    retLen = amlkey_read(tmpName, (uint8_t*)&pHdcp2RxKey->keyVal, tmpLen);
+    if (retLen != tmpLen) {
+        KM_ERR ("Fail in read key[%s] at len %d\n", tmpName, tmpLen) ;
+        return __LINE__;
+    }
+
+    tmpName = (uint8_t*)HDCP2_RX_KEY_LC128_NAME;
+    tmpLen  = HDCP2_RX_LC128_LEN;
+    retLen = amlkey_read(tmpName, (uint8_t*)&pHdcp2RxKey->lc128, tmpLen);
+    if (retLen != tmpLen) {
+        KM_ERR ("Fail in read key[%s] at len %d\n", tmpName, tmpLen) ;
+        return __LINE__;
+    }
+
+    hdcp2DataDecryption(srcKeyLen, (char*)pHdcp2RxKey, databuf);
+
+    return 0;
+}
+int _km_hdcp2_size(void)
+{
+    return HDCP2_RX_KEY_TOTAL_LEN;
+}
+#endif//hdcp2 rx end
+
+
diff --git a/drivers/amlogic/keymanage/km_secure_key_2015.c b/drivers/amlogic/keymanage/km_secure_key_2015.c
new file mode 100644
index 00000000000..5baabb88f05
--- /dev/null
+++ b/drivers/amlogic/keymanage/km_secure_key_2015.c
@@ -0,0 +1,118 @@
+/* SPDX-License-Identifier: (GPL-2.0+ OR MIT) */
+/*
+ * drivers/keymanage/km_secure_key.c
+ *
+ * Copyright (C) 2020 Amlogic, Inc. All rights reserved.
+ *
+ */
+
+#include "key_manage_i.h"
+#include <amlogic/amlkey_if.h>
+#include <u-boot/sha256.h>
+
+int keymanage_securekey_init(const char* buf, int len)
+{
+	int encrypt_type;
+
+	encrypt_type = unifykey_get_encrypt_type();
+	return amlkey_init((uint8_t*)buf, len, encrypt_type);	//confirm
+}
+
+int keymanage_securekey_exit(void)
+{
+    return 0;
+}
+
+int keymanage_secukey_write(const char *keyname, const void* keydata, unsigned int datalen)
+{
+    int ret = 0;
+    uint8_t origSum[SHA256_SUM_LEN];
+    const int isSecure =  ( KEY_M_SECURE_KEY == keymanage_dts_get_key_device(keyname) ) ? 1 : 0;
+    const int isEncrypt= strlen(keymanage_dts_get_enc_type(keyname)) ? 1 : 0;
+    const unsigned int keyAttr = ( isSecure << 0 ) | ( isEncrypt << 8 );
+    ssize_t writenLen = 0;
+
+    if (isSecure)
+    {
+        sha256_context ctx;
+        sha256_starts(&ctx);
+        sha256_update(&ctx, keydata, datalen);
+        sha256_finish(&ctx, origSum);
+    }
+
+    KM_MSG("isEncrypt=%s\n", keymanage_dts_get_enc_type(keyname));
+    KM_DBG("%s, keyname=%s, keydata=%p, datalen=%d, isSecure=%d\n", __func__, keyname, keydata, datalen, isSecure);
+    KM_MSG("keyAttr is 0x%08X\n", keyAttr);
+    writenLen = amlkey_write((uint8_t*)keyname, (uint8_t*)keydata, datalen, keyAttr);
+    if (writenLen != datalen) {
+        KM_ERR("Want to write %u bytes, but only %zd Bytes\n", datalen, writenLen);
+        return __LINE__;
+    }
+
+    if (isSecure)
+    {
+        uint8_t genSum[SHA256_SUM_LEN];
+
+        ret = amlkey_hash_4_secure((uint8_t*)keyname, genSum);
+        if (ret) {
+            KM_ERR("Failed when gen hash for secure key[%s], ret=%d\n", keyname, ret);
+            return __LINE__;
+        }
+
+        ret = memcmp(origSum, genSum, SHA256_SUM_LEN);
+        if (ret)
+        {
+            int index = 0;
+            char origSum_str[SHA256_SUM_LEN * 2 + 2];
+            char genSum_str[SHA256_SUM_LEN * 2 + 2];
+
+            origSum_str[0] = genSum_str[0] = '\0';
+            for (index = 0; index < SHA256_SUM_LEN; ++index) {
+
+                sprintf(origSum_str, "%s%02x", origSum_str, origSum[index]);
+                sprintf(genSum_str, "%s%02x", genSum_str, genSum[index]);
+            }
+
+            KM_ERR("Failed in check hash, origSum[%s] != genSum[%s]\n", origSum_str, genSum_str);
+            return __LINE__;
+        }
+        KM_MSG("OK in check sha1256 in burn key[%s]\n", keyname);
+    }
+
+    return ret;
+}
+
+ssize_t keymanage_secukey_size(const char* keyname)
+{
+	return amlkey_size((uint8_t*)keyname);	//actully size
+}
+
+int keymanage_secukey_exist(const char* keyname)
+{
+	return amlkey_isexsit((uint8_t*)keyname);	//exsit 1, non 0
+}
+
+int keymanage_secukey_can_read(const char* keyname)
+{
+	return !amlkey_issecure((uint8_t*)keyname);	//secure 1, non 0
+}
+
+int keymanage_secukey_read(const char* keyname, void* databuf,  unsigned buflen)
+{
+    int ret = 0;
+
+    ret = keymanage_secukey_can_read(keyname);
+    if (!ret) {
+        KM_ERR("key[%s] can't read, is configured secured?\n", keyname);
+        return __LINE__;
+    }
+
+    const ssize_t readLen = amlkey_read((uint8_t*)keyname, (uint8_t*)databuf, buflen);
+    if (readLen != buflen) {
+        KM_ERR("key[%s], want read %u Bytes, but %zd bytes\n", keyname, buflen, readLen);
+        return __LINE__;
+    }
+
+    return 0;
+}
+
diff --git a/drivers/amlogic/storagekey/Kconfig b/drivers/amlogic/storagekey/Kconfig
new file mode 100644
index 00000000000..311ab7e8ec3
--- /dev/null
+++ b/drivers/amlogic/storagekey/Kconfig
@@ -0,0 +1,2 @@
+config SECURE_STORAGE
+    bool "Amlogic bl31 storage key"
diff --git a/drivers/amlogic/storagekey/Makefile b/drivers/amlogic/storagekey/Makefile
new file mode 100644
index 00000000000..6e7ccb4ba3e
--- /dev/null
+++ b/drivers/amlogic/storagekey/Makefile
@@ -0,0 +1,3 @@
+obj-$(CONFIG_SECURE_STORAGE) += storagekey.o
+obj-$(CONFIG_SECURE_STORAGE) += securestorage.o
+obj-$(CONFIG_SECURE_STORAGE) += normal_key.o
diff --git a/drivers/amlogic/storagekey/normal_key.c b/drivers/amlogic/storagekey/normal_key.c
new file mode 100644
index 00000000000..9e40c8fdfe9
--- /dev/null
+++ b/drivers/amlogic/storagekey/normal_key.c
@@ -0,0 +1,672 @@
+/*
+ * drivers/storagekey/normal_key.c
+ *
+ * Copyright (C) 2015 Amlogic, Inc. All rights reserved.
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License for
+ * more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program; if not, write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
+*/
+
+#include <common.h>
+#include <linux/types.h>
+#include <linux/list.h>
+#include <u-boot/sha256.h>
+#include <malloc.h>
+#include "normal_key.h"
+
+#undef pr_info
+#define pr_info(fmt ...)     printf("[KM]Msg:"fmt)
+#undef pr_err
+#define pr_err(fmt ...)     printf("[KM]Error:f[%s]L%d:", __func__, __LINE__),printf(fmt)
+
+#define DBG 0
+
+/* Storage BLOCK RAW HEAD: fixed 512B*/
+#define ENC_TYPE_DEFAULT 0
+#define ENC_TYPE_EFUSE	1
+#define ENC_TYPE_FIXED	2
+
+#define STORAGE_BLOCK_RAW_HEAD_SIZE 512
+
+#define BLOCK_VERSION_0		0
+
+#define ERR_HEADER	0x1
+#define ERR_KEYMEMFAIL	0x2
+#define ERR_KEYRDFAIL	0x4
+#define ERR_KEYCHKFAIL	0x8
+#define ERR_ENCHDFAIL	0x10
+#define ERR_DATASZ	0x20
+struct storage_block_raw_head {
+	u8 mark[16]; /* AMLNORMAL*/
+	u32 version;
+	u32 enctype; /*from EFUSE, from default, from fixed*/
+	u32 keycnt;
+	u32 initcnt;
+	u32 wrtcnt;
+	u32 errcnt;
+	u32 flags;
+	u8  headhash[32];
+	u8  hash[32];
+};
+
+/* Storage BLOCK ENC HEAD: fixed 512B*/
+#define STORAGE_BLOCK_ENC_HEAD_SIZE 512
+struct storage_block_enc_head {
+	u32 blocksize;
+	u32 flashsize;
+};
+
+/* Storage Format: TLV*/
+enum emTLVTag {
+	EMTLVNONE,
+
+	EMTLVHEAD,
+	EMTLVHEADSIZE,
+
+	EMTLVOBJECT,
+	EMTLVOBJNAMESIZE,
+	EMTLVOBJNAME,
+	EMTLVOBJDATASIZE,
+	EMTLVOBJDATABUF,
+	EMTLVOBJTYPE,
+	EMTLVOBJATTR,
+	EMTLVOBJHASHBUF,
+
+	EMTLVHEADFLASHSIZE,
+};
+
+struct storage_node {
+	struct list_head node;
+	struct storage_object object;
+};
+
+static LIST_HEAD(keys);
+static int blockinited;
+static struct storage_block_raw_head rawhead;
+static struct storage_block_enc_head enchead;
+static char *blockmark = "AMLNORMAL";
+
+#if DBG
+static void dump_raw_head(struct storage_block_raw_head *prawhead)
+{
+	pr_info("rawhead:\n");
+	pr_info("mark: %s\n", prawhead->mark);
+	pr_info("keycnt: %u\n", prawhead->keycnt);
+	pr_info("initcnt: %u\n", prawhead->initcnt);
+	pr_info("wrtcnt: %u\n", prawhead->wrtcnt);
+	pr_info("errcnt: %u\n", prawhead->errcnt);
+	pr_info("flags: 0x%x\n", prawhead->flags);
+}
+
+static void dump_enc_head(struct storage_block_enc_head *penchead)
+{
+	pr_info("enchead:\n");
+	pr_info("blocksize: %u\n", penchead->blocksize);
+	pr_info("flashsize: %u\n", penchead->flashsize);
+}
+
+static void dump_mem(const u8 *p, int len)
+{
+	int idx = 0, j, tmp;
+	char buf[64];
+	int total;
+
+	while (idx < len) {
+		total = 0;
+		tmp = min(((int)len - idx), 16);
+		for (j = 0; j < tmp; j++)
+			total += snprintf(buf + total, 64 - total,
+					  "%02x ", p[idx + j]);
+		buf[total] = 0;
+		pr_info("%s\n", buf);
+		idx += tmp;
+	}
+}
+
+static void dump_object(struct storage_object *obj)
+{
+	pr_info("key: [%u, %.*s, %x, %x, %u]\n",
+		obj->namesize, obj->namesize, obj->name,
+		obj->type, obj->attribute, obj->datasize);
+	if (obj->dataptr) {
+		pr_info("data:\n");
+		dump_mem(obj->dataptr, obj->datasize);
+	}
+}
+#endif
+
+static u32 Tlv_WriteUint32(u8 *output, s32 len,
+			   u32 tag, u32 value)
+{
+	u32 *out = (u32 *)output;
+
+	if (len < 12)
+		return 0;
+
+	out[0] = tag;
+	out[1] = 4;
+	out[2] = value;
+	return 12;
+}
+
+static u32 Tlv_WriteBuf(u8 *output, s32 len,
+			u32 tag,
+			u32 length, u8 *input)
+{
+	u8 *out = output;
+	u32 tmplen = (((length + 3) / 4) * 4);
+
+	if (len < (s32)(8 + tmplen))
+		return 0;
+
+	*((u32 *)out) = tag;
+	*((u32 *)(out + 4)) = tmplen;
+	memset(out + 8, 0, tmplen);
+	memcpy(out + 8, input, length);
+
+	return tmplen + 8;
+}
+
+static u32 Tlv_ReadTl(u8 *input, int32_t len,
+		      u32 *tag, u32 *length,
+		      u32 *idx)
+{
+	if (len < 8)
+		return 0;
+
+	*tag = *((u32 *)input);
+	*length =  *((u32 *)(input + 4));
+
+	if ((8 + *length) > len)
+		return 0;
+	*idx += 8;
+
+	return 8;
+}
+
+static u32 Tlv_ReadHead(u8 *input, int32_t len,
+			struct storage_block_enc_head *pblockhead)
+{
+	u32 tag;
+	u32 sum;
+	u32 length;
+	u32 idx = 0;
+	u32 ret;
+
+	ret = Tlv_ReadTl(input, len,
+			 &tag, &sum, &idx);
+	if (!ret)
+		return 0;
+
+	if (tag != EMTLVHEAD)
+		return 0;
+
+	sum += ret;
+	while (idx < sum) {
+		ret = Tlv_ReadTl(input + idx, len - idx,
+				 &tag, &length, &idx);
+		if (!ret)
+			return 0;
+
+		switch (tag) {
+		case EMTLVHEADSIZE:
+			pblockhead->blocksize = *((u32 *)(input + idx));
+			break;
+		case EMTLVHEADFLASHSIZE:
+			pblockhead->flashsize = *((u32 *)(input + idx));
+			break;
+		default:
+			break;
+		}
+		idx += length;
+	}
+	return sum;
+}
+
+static u32 Tlv_ReadObject(u8 *input, int32_t len,
+			  struct storage_object *pcontent)
+{
+	u32 tag;
+	u32 length;
+	u32 sum;
+	u32 idx = 0;
+	u32 ret;
+
+	memset(pcontent, 0, sizeof(*pcontent));
+	ret = Tlv_ReadTl(input, len,
+			 &tag, &sum, &idx);
+	if (!ret)
+		return 0;
+
+	if (tag != EMTLVOBJECT)
+		return 0;
+
+	sum += ret;
+	while (idx < sum) {
+		ret = Tlv_ReadTl(input + idx, len - idx,
+				 &tag, &length, &idx);
+		if (!ret)
+			goto tlv_readkeycontent_err;
+
+		switch (tag) {
+		case EMTLVOBJNAMESIZE:
+			pcontent->namesize = *((u32 *)(input + idx));
+			break;
+		case EMTLVOBJNAME:
+			memset(pcontent->name, 0, MAX_OBJ_NAME_LEN);
+			memcpy(pcontent->name, input + idx, pcontent->namesize);
+			break;
+		case EMTLVOBJTYPE:
+			pcontent->type = *((u32 *)(input + idx));
+			break;
+		case EMTLVOBJATTR:
+			pcontent->attribute = *((u32 *)(input + idx));
+			break;
+		case EMTLVOBJDATASIZE:
+			pcontent->datasize = *((u32 *)(input + idx));
+			break;
+		case EMTLVOBJHASHBUF:
+			if (length != 32)
+				goto tlv_readkeycontent_err;
+			memcpy(pcontent->hashptr, input + idx, length);
+			break;
+		case EMTLVOBJDATABUF:
+			pcontent->dataptr = malloc(pcontent->datasize);
+			if (!pcontent->dataptr)
+				goto tlv_readkeycontent_err;
+			memcpy(pcontent->dataptr,
+			       input + idx, pcontent->datasize);
+			break;
+		default:
+			break;
+		}
+		idx += length;
+	}
+	return sum;
+
+tlv_readkeycontent_err:
+	free(pcontent->dataptr);
+	return 0;
+}
+
+#define WRT_UINT32(tag, field) \
+	({ \
+		u32 __tmp; \
+		__tmp = Tlv_WriteUint32(output + idx, len - idx, \
+					tag, field); \
+		if (__tmp) \
+			idx += __tmp; \
+		__tmp; \
+	})
+
+#define WRT_BUF(tag, buflen, buf) \
+	({ \
+		u32 __tmp; \
+		__tmp = Tlv_WriteBuf(output + idx, len - idx, \
+				     tag, buflen, buf); \
+		if (__tmp) \
+			idx += __tmp; \
+		__tmp; \
+	})
+
+u32 Tlv_WriteHead(struct storage_block_enc_head *enchead,
+		  u8 *output, int32_t len)
+{
+	u32 *sum;
+	u32 idx = 0;
+
+	if (len < 8)
+		return 0;
+
+	*(u32 *)output = EMTLVHEAD;
+	sum = (u32 *)(output + 4);
+	idx += 8;
+
+	if (!WRT_UINT32(EMTLVHEADSIZE, enchead->blocksize))
+		return 0;
+	if (!WRT_UINT32(EMTLVHEADFLASHSIZE, enchead->flashsize))
+		return 0;
+
+	*sum = idx - 8;
+	return idx;
+}
+
+u32 Tlv_WriteObject(struct storage_object *object,
+		    u8 *output, int32_t len)
+{
+	u32 *sum;
+	u32 idx = 0;
+
+	if (len < 8)
+		return 0;
+
+	*(u32 *)output = EMTLVOBJECT;
+	sum = (u32 *)(output + 4);
+	idx += 8;
+
+	if (object->namesize != 0) {
+		if (!WRT_UINT32(EMTLVOBJNAMESIZE, object->namesize))
+			return 0;
+		if (!WRT_BUF(EMTLVOBJNAME, object->namesize,
+			     (u8 *)object->name))
+			return 0;
+	}
+
+	if (object->dataptr && object->datasize != 0) {
+		if (!WRT_UINT32(EMTLVOBJDATASIZE, object->datasize))
+			return 0;
+		if (!WRT_BUF(EMTLVOBJDATABUF, object->datasize,
+			     object->dataptr))
+			return 0;
+	}
+
+	if (!WRT_BUF(EMTLVOBJHASHBUF, 32, object->hashptr))
+		return 0;
+	if (!WRT_UINT32(EMTLVOBJTYPE, object->type))
+		return 0;
+	if (!WRT_UINT32(EMTLVOBJATTR, object->attribute))
+		return 0;
+
+	*sum = idx - 8;
+	return idx;
+}
+
+static int normalkey_hash(u8 *data, u32 len, u8 *hash)
+{
+	sha256_context ctx;
+	sha256_starts(&ctx);
+	sha256_update(&ctx, data, len);
+	sha256_finish(&ctx, hash);
+	return 0;
+}
+
+int normalkey_init(void)
+{
+	if (blockinited)
+		return 0;
+
+	blockinited = 1;
+	return 0;
+}
+
+void normalkey_deinit(void)
+{
+	struct storage_node *pos, *n;
+
+	if (!blockinited)
+		return;
+
+	blockinited = 0;
+
+	list_for_each_entry_safe(pos, n, &keys, node) {
+		list_del(&pos->node);
+		free(pos->object.dataptr);
+		free(pos);
+	}
+}
+
+struct storage_object *normalkey_get(const u8 *name)
+{
+	struct storage_node *pos;
+	struct storage_object *obj;
+	u32 len;
+
+	if (!name)
+		return NULL;
+
+	len = strlen((const char*)name);
+	list_for_each_entry(pos, &keys, node) {
+		obj = &pos->object;
+		if (len == obj->namesize &&
+		    !memcmp(name, obj->name, len))
+			return obj;
+	}
+
+	return NULL;
+}
+
+int normalkey_add(const u8 *name, u8 *buffer, u32 len, u32 attr)
+{
+	struct storage_object *obj;
+	struct storage_node *node;
+	u32 namelen;
+	u8 *data;
+
+	if (blockinited != 2)
+		return -1;
+
+	if (!name || !buffer || !len || (attr & OBJ_ATTR_SECURE))
+		return -1;
+
+	namelen = strlen((const char*)name);
+	if (namelen > MAX_OBJ_NAME_LEN)
+		return -1;
+
+	obj = normalkey_get(name);
+	if (obj) {
+		if (attr != obj->attribute)
+			return -1;
+		if (len > obj->datasize) {
+			data = malloc(len);
+			if (!data)
+				return -1;
+			free(obj->dataptr);
+			obj->dataptr = data;
+		}
+	} else {
+		node = malloc(sizeof(*node));
+		if (!node)
+			return -1;
+		data = malloc(len);
+		if (!data) {
+			free(node);
+			return -1;
+		}
+		obj = &node->object;
+		memcpy(obj->name, name, namelen);
+		obj->namesize = namelen;
+		obj->attribute = attr;
+		obj->type = OBJ_TYPE_GENERIC;
+		obj->dataptr = data;
+		list_add(&node->node, &keys);
+	}
+	obj->datasize = len;
+	memcpy(obj->dataptr, buffer, len);
+	normalkey_hash(buffer, len, obj->hashptr);
+	return 0;
+}
+
+int normalkey_del(const u8 *name)
+{
+	struct storage_object *obj;
+	struct storage_node *node;
+
+	if (blockinited != 2)
+		return -1;
+
+	obj = normalkey_get(name);
+	if (!obj)
+		return -1;
+
+	node = container_of(obj, struct storage_node, object);
+	list_del(&node->node);
+	free(obj->dataptr);
+	free(node);
+
+	return 0;
+}
+
+int normalkey_readfromblock(void *block, unsigned long size)
+{
+	struct storage_block_raw_head *prawhead;
+	u8 *penchead, *pdata;
+	struct storage_node *node = NULL;
+	u8 hash[32];
+	u32 idx;
+	u32 ret;
+
+	if (blockinited != 1)
+		return -1;
+
+	prawhead = (struct storage_block_raw_head *)block;
+	penchead = (u8 *)block + STORAGE_BLOCK_RAW_HEAD_SIZE;
+	pdata = penchead + STORAGE_BLOCK_ENC_HEAD_SIZE;
+
+	if (!block || size <=
+	    (STORAGE_BLOCK_ENC_HEAD_SIZE + STORAGE_BLOCK_RAW_HEAD_SIZE))
+		return -1;
+
+	blockinited = 2;
+
+	memset(&rawhead, 0, sizeof(rawhead));
+	strncpy((char*)rawhead.mark, blockmark, 15);
+	rawhead.version = BLOCK_VERSION_0;
+
+	enchead.flashsize = size;
+	if (strcmp((const char *)prawhead->mark, blockmark) != 0) {
+		pr_info("mark is not found\n");
+		return 0;
+	}
+
+	normalkey_hash((u8 *)prawhead, sizeof(*prawhead) - 64,
+		       rawhead.headhash);
+	if (memcmp(rawhead.headhash, prawhead->headhash, 32)) {
+		pr_info("rawhead hash check fail\n");
+		rawhead.flags |= ERR_HEADER;
+	} else {
+		pr_info("rawhead hash check successful\n");
+		rawhead.keycnt = prawhead->keycnt;
+		rawhead.initcnt = prawhead->initcnt;
+		rawhead.wrtcnt = prawhead->wrtcnt;
+		rawhead.errcnt = prawhead->errcnt;
+		rawhead.flags = prawhead->flags;
+	}
+
+	rawhead.initcnt++;
+
+#if DBG
+	dump_raw_head(&rawhead);
+#endif
+
+	normalkey_hash(penchead, size - STORAGE_BLOCK_RAW_HEAD_SIZE,
+		       rawhead.hash);
+	if (memcmp(rawhead.hash, prawhead->hash, 32)) {
+		pr_info("data hash check fail\n");
+		rawhead.errcnt++;
+		return 0;
+	}
+
+	ret = Tlv_ReadHead(penchead, STORAGE_BLOCK_ENC_HEAD_SIZE,
+			   &enchead);
+	if (!ret) {
+		pr_info("read head fail\n");
+		rawhead.flags |= ERR_ENCHDFAIL;
+		return 0;
+	}
+
+#if DBG
+	dump_enc_head(&enchead);
+#endif
+
+	if (size < (enchead.blocksize + STORAGE_BLOCK_ENC_HEAD_SIZE +
+	    STORAGE_BLOCK_RAW_HEAD_SIZE)) {
+		rawhead.flags |= ERR_DATASZ;
+		return 0;
+	}
+
+	idx = 0;
+	while (idx < enchead.blocksize) {
+		struct storage_object *obj = NULL;
+
+		if (!node) {
+			node = malloc(sizeof(*node));
+			if (!node) {
+				rawhead.flags |= ERR_KEYMEMFAIL;
+				break;
+			}
+		}
+		obj = &node->object;
+		ret = Tlv_ReadObject(pdata + idx,
+				     enchead.blocksize - idx, obj);
+		if (!ret) {
+			rawhead.flags |= ERR_KEYRDFAIL;
+			break;
+		}
+		idx += ret;
+
+		normalkey_hash(obj->dataptr, obj->datasize, hash);
+		if (memcmp(hash, obj->hashptr, 32)) {
+			free(obj->dataptr);
+			rawhead.flags |= ERR_KEYCHKFAIL;
+			continue;
+		}
+#if DBG
+		dump_object(obj);
+#endif
+		list_add(&node->node, &keys);
+		node = NULL;
+	}
+
+	free(node);
+	return 0;
+}
+
+int normalkey_writetoblock(void *block, unsigned long size)
+{
+	u8 *prawhead;
+	u8 *penchead, *pdata;
+	struct storage_object *obj = NULL;
+	struct storage_node *node = NULL;
+	u32 idx;
+	u32 ret;
+
+	if (blockinited != 2)
+		return -1;
+
+	prawhead = (u8 *)block;
+	penchead = prawhead + STORAGE_BLOCK_RAW_HEAD_SIZE;
+	pdata = penchead + STORAGE_BLOCK_ENC_HEAD_SIZE;
+
+	if (!block || size <=
+	    (STORAGE_BLOCK_ENC_HEAD_SIZE + STORAGE_BLOCK_RAW_HEAD_SIZE))
+		return -1;
+
+	enchead.flashsize = size;
+	size -= (STORAGE_BLOCK_ENC_HEAD_SIZE + STORAGE_BLOCK_RAW_HEAD_SIZE);
+	idx = 0;
+	rawhead.keycnt = 0;
+	list_for_each_entry(node, &keys, node) {
+		obj = &node->object;
+		ret = Tlv_WriteObject(obj, pdata + idx, size - idx);
+		if (!ret)
+			return -1;
+		idx += ret;
+		rawhead.keycnt++;
+	}
+	enchead.blocksize = idx;
+
+	ret = Tlv_WriteHead(&enchead, penchead, STORAGE_BLOCK_ENC_HEAD_SIZE);
+	if (!ret)
+		return -1;
+
+	rawhead.wrtcnt++;
+	normalkey_hash((u8 *)&rawhead, sizeof(rawhead) - 64,
+		       rawhead.headhash);
+	normalkey_hash(penchead,
+		       enchead.flashsize - STORAGE_BLOCK_RAW_HEAD_SIZE,
+		       rawhead.hash);
+	memcpy(prawhead, &rawhead, sizeof(rawhead));
+
+	return 0;
+}
diff --git a/drivers/amlogic/storagekey/normal_key.h b/drivers/amlogic/storagekey/normal_key.h
new file mode 100644
index 00000000000..18772db67e0
--- /dev/null
+++ b/drivers/amlogic/storagekey/normal_key.h
@@ -0,0 +1,49 @@
+/*
+ * drivers/amlogic/storagekey/normal_key.h
+ *
+ * Copyright (C) 2017 Amlogic, Inc. All rights reserved.
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License for
+ * more details.
+ *
+ */
+
+#ifndef _AML_NORMAL_KEY_H_
+#define _AML_NORMAL_KEY_H_
+
+#define MAX_OBJ_NAME_LEN	80
+
+/*Attribute*/
+#define OBJ_ATTR_SECURE	BIT(0)
+#define OBJ_ATTR_OTP	BIT(1)
+#define OBJ_ATTR_ENC	BIT(8)
+
+/* Type */
+#define OBJ_TYPE_GENERIC	0xA00000BF
+
+struct storage_object {
+	char name[MAX_OBJ_NAME_LEN];
+	u32 namesize;
+	u32 attribute; /*secure, OTP*/
+	u32 type; /*AES, RSA, GENERIC, ...*/
+	u32 datasize;
+	u8 *dataptr;
+	u8 hashptr[32];
+};
+
+int normalkey_init(void);
+void normalkey_deinit(void);
+struct storage_object *normalkey_get(const u8 *name);
+int normalkey_add(const u8 *name, u8 *buffer, u32 len, u32 attr);
+int normalkey_del(const u8 *name);
+int normalkey_readfromblock(void *block, unsigned long size);
+int normalkey_writetoblock(void *block, unsigned long size);
+
+#endif
diff --git a/drivers/amlogic/storagekey/securestorage.c b/drivers/amlogic/storagekey/securestorage.c
new file mode 100644
index 00000000000..c65fee5586f
--- /dev/null
+++ b/drivers/amlogic/storagekey/securestorage.c
@@ -0,0 +1,389 @@
+#include <common.h>
+#include <linux/types.h>
+#include <amlogic/secure_storage.h>
+
+// TODO: refactor
+#include <amlogic/asm/secure_apb.h>
+#include <amlogic/asm/bl31_apis.h>
+
+static uint64_t storage_share_in_base;
+static uint64_t storage_share_out_base;
+static uint64_t storage_share_block_base;
+static uint64_t storage_share_block_size;
+static int32_t storage_init_status;
+
+static uint64_t bl31_storage_ops(uint64_t function_id)
+{
+	asm volatile(
+		__asmeq("%0", "x0")
+		"smc    #0\n"
+		: "+r" (function_id));
+
+	return function_id;
+}
+uint64_t bl31_storage_ops2(uint64_t function_id, uint64_t arg1)
+{
+	asm volatile(
+		__asmeq("%0", "x0")
+		__asmeq("%1", "x1")
+		"smc    #0\n"
+		: "+r" (function_id)
+		: "r"(arg1));
+
+	return function_id;
+}
+uint64_t bl31_storage_ops3(uint64_t function_id, uint64_t arg1, uint32_t arg2)
+{
+	asm volatile(
+		__asmeq("%0", "x0")
+		__asmeq("%1", "x1")
+		__asmeq("%2", "x2")
+		"smc    #0\n"
+		: "+r" (function_id)
+		: "r"(arg1), "r"(arg2));
+
+	return function_id;
+}
+
+static uint64_t bl31_storage_write(uint8_t *keyname, uint8_t *keybuf,
+				uint32_t keylen, uint32_t keyattr)
+{
+	uint32_t *input = (uint32_t *)storage_share_in_base;
+	uint8_t *data;
+	uint32_t namelen;
+
+	namelen = strlen((const char *)keyname);
+	*input++ = namelen;
+	*input++ = keylen;
+	*input++ = keyattr;
+	data = (uint8_t *)input;
+	memcpy(data, keyname, namelen);
+	data += namelen;
+	memcpy(data, keybuf, keylen);
+	return bl31_storage_ops(SECURITY_KEY_WRITE);
+}
+
+static uint64_t bl31_storage_read(uint8_t *keyname, uint8_t *keybuf,
+				uint32_t keylen, uint32_t *readlen)
+{
+	uint32_t *input = (uint32_t *)storage_share_in_base;
+	uint32_t *output = (uint32_t *)storage_share_out_base;
+	uint32_t namelen;
+	uint8_t *name, *buf;
+	uint64_t ret;
+
+	namelen = strlen((const char *)keyname);
+	*input++ = namelen;
+	*input++ = keylen;
+	name = (uint8_t *)input;
+	memcpy(name, keyname, namelen);
+	ret = bl31_storage_ops(SECURITY_KEY_READ);
+	if (ret == RET_OK) {
+		*readlen = *output;
+		buf = (uint8_t *)(output+1);
+		memcpy(keybuf, buf, *readlen);
+	}
+	return ret;
+}
+
+static uint64_t bl31_storage_query(uint8_t *keyname, uint32_t *retval)
+{
+	uint32_t *input = (uint32_t *)storage_share_in_base;
+	uint32_t *output = (uint32_t *)storage_share_out_base;
+	uint32_t namelen;
+	uint8_t *name;
+	uint64_t ret;
+
+	namelen = strlen((const char *)keyname);
+	*input++ = namelen;
+	name = (uint8_t *)input;
+	memcpy(name, keyname, namelen);
+	ret = bl31_storage_ops(SECURITY_KEY_QUERY);
+	if (ret == RET_OK)
+		*retval = *output;
+	return ret;
+}
+
+static uint64_t bl31_storage_status(uint8_t *keyname, uint32_t *retval)
+{
+	uint32_t *input = (uint32_t *)storage_share_in_base;
+	uint32_t *output = (uint32_t *)storage_share_out_base;
+	uint32_t namelen;
+	uint8_t *name;
+	uint64_t ret;
+
+	namelen = strlen((const char *)keyname);
+	*input++ = namelen;
+	name = (uint8_t *)input;
+	memcpy(name, keyname, namelen);
+	ret = bl31_storage_ops(SECURITY_KEY_STATUS);
+	if (ret == RET_OK)
+		*retval = *output;
+	return ret;
+}
+static uint64_t bl31_storage_tell(uint8_t *keyname, uint32_t *retval)
+{
+	uint32_t *input = (uint32_t *)storage_share_in_base;
+	uint32_t *output = (uint32_t *)storage_share_out_base;
+	uint32_t namelen;
+	uint8_t *name;
+	uint64_t ret;
+
+	namelen = strlen((const char *)keyname);
+	*input++ = namelen;
+	name = (uint8_t *)input;
+	memcpy(name, keyname, namelen);
+	ret = bl31_storage_ops(SECURITY_KEY_TELL);
+	if (ret == RET_OK)
+		*retval = *output;
+	return ret;
+}
+
+static uint64_t bl31_storage_verify(uint8_t *keyname, uint8_t *hashbuf)
+{
+	uint32_t *input = (uint32_t *)storage_share_in_base;
+	uint32_t *output = (uint32_t *)storage_share_out_base;
+	uint32_t namelen;
+	uint8_t *name;
+	uint64_t ret;
+
+	namelen = strlen((const char *)keyname);
+	*input++ = namelen;
+	name = (uint8_t *)input;
+	memcpy(name, keyname, namelen);
+	ret = bl31_storage_ops(SECURITY_KEY_VERIFY);
+
+	if (ret == RET_OK)
+		memcpy(hashbuf, (uint8_t *)output, 32);
+	return ret;
+}
+
+static uint64_t bl31_storage_list(uint8_t *listbuf,
+	uint32_t outlen, uint32_t *readlen)
+{
+	uint32_t *output = (uint32_t *)storage_share_out_base;
+	uint64_t ret;
+
+	ret = bl31_storage_ops(SECURITY_KEY_LIST);
+	if (ret == RET_OK) {
+		if (*output > outlen)
+			*readlen = outlen;
+		else
+			*readlen = *output;
+		memcpy(listbuf, (uint8_t *)(output+1), *readlen);
+	}
+	return ret;
+}
+
+static uint64_t bl31_storage_remove(uint8_t *keyname)
+{
+	uint32_t *input = (uint32_t *)storage_share_in_base;
+	uint32_t namelen;
+	uint8_t *name;
+
+	namelen = strlen((const char *)keyname);
+	*input++ = namelen;
+	name = (uint8_t *)input;
+	memcpy(name, keyname, namelen);
+	return bl31_storage_ops(SECURITY_KEY_REMOVE);
+}
+
+static inline int32_t smc_to_ns_errno(uint64_t errno)
+{
+	int32_t ret = (int32_t)(errno&0xffffffff);
+	return ret;
+}
+
+void secure_storage_init(void)
+{
+		storage_share_in_base =
+				bl31_storage_ops(GET_SHARE_STORAGE_IN_BASE);
+		storage_share_out_base =
+				bl31_storage_ops(GET_SHARE_STORAGE_OUT_BASE);
+		storage_share_block_base =
+				bl31_storage_ops(GET_SHARE_STORAGE_BLOCK_BASE);
+		storage_share_block_size =
+				bl31_storage_ops(GET_SHARE_STORAGE_BLOCK_SIZE);
+
+		if (storage_share_in_base == SMC_UNK
+				|| storage_share_out_base == SMC_UNK
+				|| storage_share_block_base == SMC_UNK
+				|| storage_share_block_size == SMC_UNK)
+			storage_init_status = -1;
+		else
+			storage_init_status = 1;
+}
+
+void *secure_storage_getbuffer(uint32_t *size)
+{
+	if (storage_init_status == 0)
+		secure_storage_init();
+
+	if (storage_init_status == 1) {
+			storage_share_block_size =
+				bl31_storage_ops(GET_SHARE_STORAGE_BLOCK_SIZE);
+		*size = (uint32_t)storage_share_block_size;
+		return (void *)storage_share_block_base;
+	}
+	else {
+		*size = 0;
+		return NULL;
+	}
+}
+void secure_storage_notifier(void)
+{
+	bl31_storage_ops(SECURITY_KEY_NOTIFY);
+}
+
+void secure_storage_notifier_ex(uint32_t storagesize, uint32_t rsvarg)
+{
+	bl31_storage_ops3(SECURITY_KEY_NOTIFY_EX, storagesize, rsvarg);
+}
+
+int32_t secure_storage_write(uint8_t *keyname, uint8_t *keybuf,
+				uint32_t keylen, uint32_t keyattr)
+{
+	uint32_t ret;
+
+	if (storage_init_status == 0)
+		secure_storage_init();
+
+	if (storage_init_status == 1)
+		ret = bl31_storage_write(keyname, keybuf, keylen, keyattr);
+	else
+		ret = RET_EUND;
+	return smc_to_ns_errno(ret);
+}
+
+int32_t secure_storage_read(uint8_t *keyname, uint8_t *keybuf,
+			uint32_t keylen, uint32_t *readlen)
+{
+	uint64_t ret;
+	if (storage_init_status == 0)
+		secure_storage_init();
+
+	if (storage_init_status == 1)
+		ret = bl31_storage_read(keyname, keybuf, keylen, readlen);
+	else
+		ret = RET_EUND;
+
+	return smc_to_ns_errno(ret);
+}
+
+int32_t secure_storage_query(uint8_t *keyname, uint32_t *retval)
+{
+	uint64_t ret;
+	if (storage_init_status == 0)
+		secure_storage_init();
+
+	if (storage_init_status == 1)
+		ret = bl31_storage_query(keyname, retval);
+	else
+		ret = RET_EUND;
+
+	return smc_to_ns_errno(ret);
+}
+
+int32_t secure_storage_status(uint8_t *keyname, uint32_t *retval)
+{
+	uint64_t ret;
+	if (storage_init_status == 0)
+		secure_storage_init();
+
+	if (storage_init_status == 1)
+		ret = bl31_storage_status(keyname, retval);
+	else
+		ret = RET_EUND;
+
+	return smc_to_ns_errno(ret);
+}
+
+int32_t secure_storage_tell(uint8_t *keyname, uint32_t *retval)
+{
+	uint64_t ret;
+	if (storage_init_status == 0)
+		secure_storage_init();
+
+	if (storage_init_status == 1)
+		ret = bl31_storage_tell(keyname, retval);
+	else
+		ret = RET_EUND;
+
+	return smc_to_ns_errno(ret);
+}
+
+int32_t secure_storage_verify(uint8_t *keyname, uint8_t *hashbuf)
+{
+	uint64_t ret;
+	if (storage_init_status == 0)
+		secure_storage_init();
+
+	if (storage_init_status == 1)
+		ret = bl31_storage_verify(keyname, hashbuf);
+	else
+		ret = RET_EUND;
+
+	return smc_to_ns_errno(ret);
+}
+
+int32_t secure_storage_list(uint8_t *listbuf,
+		uint32_t buflen, uint32_t *readlen)
+{
+	uint64_t ret;
+	if (storage_init_status == 0)
+		secure_storage_init();
+
+	if (storage_init_status == 1)
+		ret = bl31_storage_list(listbuf, buflen, readlen);
+	else
+		ret = RET_EUND;
+
+	return smc_to_ns_errno(ret);
+}
+
+int32_t secure_storage_remove(uint8_t *keyname)
+{
+	uint64_t ret;
+	if (storage_init_status == 0)
+		secure_storage_init();
+
+	if (storage_init_status == 1)
+		ret = bl31_storage_remove(keyname);
+	else
+		ret = RET_EUND;
+
+	return smc_to_ns_errno(ret);
+}
+
+void secure_storage_set_info(uint32_t info)
+{
+	register uint64_t x0 asm("x0")= SET_STORAGE_INFO;
+	register uint64_t x1 asm("x1") = info;
+	asm volatile(
+		__asmeq("%0", "x0")
+		__asmeq("%1", "x1")
+		"smc    #0\n"
+		: :"r" (x0), "r"(x1));
+
+}
+
+int32_t secure_storage_set_enctype(uint32_t type)
+{
+	uint64_t  ret;
+	ret = bl31_storage_ops2(SECURITY_KEY_SET_ENCTYPE, type);
+	return smc_to_ns_errno(ret);
+}
+
+int32_t secure_storage_get_enctype(void)
+{
+	uint64_t ret;
+	ret = bl31_storage_ops(SECURITY_KEY_GET_ENCTYPE);
+	return smc_to_ns_errno(ret);
+}
+
+int32_t secure_storage_version(void)
+{
+	uint64_t ret;
+	ret = bl31_storage_ops(SECURITY_KEY_VERSION);
+	return smc_to_ns_errno(ret);
+}
diff --git a/drivers/amlogic/storagekey/storagekey.c b/drivers/amlogic/storagekey/storagekey.c
new file mode 100644
index 00000000000..646ad3f0ded
--- /dev/null
+++ b/drivers/amlogic/storagekey/storagekey.c
@@ -0,0 +1,587 @@
+/*
+ * drivers/storagekey/storagekey.c
+ *
+ * Copyright (C) 2015 Amlogic, Inc. All rights reserved.
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License for
+ * more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program; if not, write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
+*/
+
+/* extern from bl31 */
+/*
+ * when RET_OK
+ * query: retval=1: key exsit,=0: key not exsitï¼›
+ * tell: retvak = key size
+ * status: retval=1: secure, retval=0: non-secure
+
+ */
+
+#include <common.h>
+#include <linux/types.h>
+#include <amlogic/secure_storage.h>
+#include <amlogic/amlkey_if.h>
+#include <amlogic/storage.h>
+#include <fdtdec.h>
+#ifdef CONFIG_STORE_COMPATIBLE
+#include <partition_table.h>
+#endif
+#include "normal_key.h"
+
+/* key buffer status */
+/* bit0, dirty flag*/
+#define KEYBUFFER_CLEAN		(0 << 0)
+#define KEYBUFFER_DIRTY		(1 << 0)
+#define SECUESTORAGE_HEAD_SIZE		(256)
+#define SECUESTORAGE_WHOLE_SIZE		(0x40000)
+
+struct storagekey_info_t {
+	uint8_t * buffer;
+	uint32_t size;
+	uint32_t status;
+};
+
+static struct storagekey_info_t storagekey_info = {
+	.buffer = NULL,
+	/* default size */
+	.size = SECUESTORAGE_WHOLE_SIZE,
+	.status = KEYBUFFER_CLEAN,
+};
+
+/**
+ *1.init
+ * return ok 0, fail 1
+ */
+static int32_t _amlkey_init(uint8_t *seed, uint32_t len, int encrypt_type)
+{
+	int32_t ret = 0;
+	uint32_t buffer_size, actual_size;
+
+	/* do nothing for now*/
+	printf("%s() enter!\n", __func__);
+	if (storagekey_info.buffer != NULL) {
+		printf("%s() %d: already init!\n", __func__, __LINE__);
+		goto _out;
+	}
+
+	/* get buffer from bl31 */
+	storagekey_info.buffer = secure_storage_getbuffer(&buffer_size);
+	if (storagekey_info.buffer == NULL) {
+		printf("%s() %d: can't get buffer from bl31!\n",
+			__func__, __LINE__);
+		ret = -1;
+		goto _out;
+	}
+
+	if (encrypt_type == -1)
+		encrypt_type = 0;
+	secure_storage_set_enctype(encrypt_type);
+	actual_size = store_rsv_size("key");
+	printf("%s %d actual_size: 0x%x\n", __func__, __LINE__,
+		actual_size);
+
+	storagekey_info.size = min_t(uint32_t, actual_size, buffer_size);
+	ret = store_rsv_read("key", storagekey_info.size, storagekey_info.buffer);
+	/* When the key is invalid at the first burn, it should be initialized again. */
+	if (ret == RSV_UNVAIL)
+		ret = 0;
+	if (ret) {
+		printf("amlkey init rsv read key faill\n");
+		/* memset head info for bl31 */
+		memset(storagekey_info.buffer, 0, SECUESTORAGE_HEAD_SIZE);
+		ret = 0;
+		goto _out;
+	}
+
+	secure_storage_notifier_ex(storagekey_info.size, 0);
+
+	storagekey_info.buffer = secure_storage_getbuffer(&buffer_size);
+	if (buffer_size != storagekey_info.size) {
+		ret = -1;
+		goto _out;
+	}
+
+#ifdef CONFIG_STORE_COMPATIBLE
+	info_disprotect &= ~DISPROTECT_KEY;  //protect
+#endif
+_out:
+	return ret;
+}
+
+/**
+ *2. query if the key already programmed
+ * return: exsit 1, non 0
+ */
+static int32_t _amlkey_isexsit(const uint8_t * name)
+{
+	int32_t ret = 0;
+	uint32_t retval;
+
+	if ( NULL == name ) {
+		printf("%s() %d, invalid key ", __func__, __LINE__);
+		return 0;
+	}
+
+	ret = secure_storage_query((uint8_t *)name, &retval);
+	if (ret) {
+		printf("%s() %d: ret %d\n", __func__, __LINE__, ret);
+		retval = 0;
+	}
+
+	return (int32_t)retval;
+}
+
+static uint32_t _amlkey_get_attr(const uint8_t * name)
+{
+	int32_t ret = 0;
+	uint32_t retval;
+
+	if ( NULL == name ) {
+		printf("%s() %d, invalid key ", __func__, __LINE__);
+		return 0;
+	}
+
+	ret = secure_storage_status((uint8_t *)name, &retval);
+	if (ret) {
+		printf("%s() %d: ret %d\n", __func__, __LINE__, ret);
+		retval = 0;
+	}
+
+	return retval;
+}
+
+/**
+ * 3.1 query if the prgrammed key is secure. key must exsit!
+ * return secure 1, non 0;
+ */
+int32_t amlkey_issecure(const uint8_t * name)
+{
+	return (amlkey_get_attr(name)&UNIFYKEY_ATTR_SECURE_MASK);
+}
+
+/**
+ * 3.2 query if the prgrammed key is encrypt
+ * return encrypt 1, non-encrypt 0;
+ */
+int32_t amlkey_isencrypt(const uint8_t * name)
+{
+	return (amlkey_get_attr(name)&UNIFYKEY_ATTR_ENCRYPT_MASK);
+}
+/**
+ * 4. actual bytes of key value
+ *  return actual size.
+ */
+static ssize_t _amlkey_size(const uint8_t *name)
+{
+	ssize_t size = 0;
+	int32_t ret = 0;
+	uint32_t retval;
+
+	if ( NULL == name ) {
+		printf("%s() %d, invalid key ", __func__, __LINE__);
+		return 0;
+	}
+
+	ret = secure_storage_tell((uint8_t *)name, &retval);
+	if (ret) {
+		printf("%s() %d: ret %d\n", __func__, __LINE__, ret);
+		retval = 0;
+	}
+	size = (ssize_t)retval;
+	return size;
+}
+
+/**
+ *5. read non-secure key in bytes, return bytes readback actully.
+ * return actual size read back.
+ */
+static ssize_t _amlkey_read(const uint8_t *name, uint8_t *buffer, uint32_t len)
+{
+	int32_t ret = 0;
+	ssize_t retval = 0;
+	uint32_t actul_len;
+
+	if ( NULL == name ) {
+		printf("%s() %d, invalid key ", __func__, __LINE__);
+		return 0;
+	}
+	ret = secure_storage_read((uint8_t *)name, buffer, len, &actul_len);
+	if (ret) {
+		printf("%s() %d: return %d\n", __func__, __LINE__, ret);
+		retval = 0;
+		goto _out;
+	}
+	retval = actul_len;
+_out:
+	return retval;
+}
+
+/**
+ * 6.write secure/non-secure key in bytes , return bytes readback actully
+ * attr: bit0, secure/non-secure;
+ *		 bit8, encrypt/non-encrypt;
+ * return actual size write down.
+ */
+static ssize_t _amlkey_write(const uint8_t *name, uint8_t *buffer, uint32_t len, uint32_t attr)
+{
+	int32_t ret = 0;
+	ssize_t retval = 0;
+	uint32_t actual_size;
+
+	if ( NULL == name ) {
+		printf("%s() %d, invalid key ", __func__, __LINE__);
+		return retval;
+	}
+	ret = secure_storage_write((uint8_t *)name, buffer, len, attr);
+	if (ret) {
+		printf("%s() %d: return %d\n", __func__, __LINE__, ret);
+		retval = 0;
+		goto _out;
+	} else {
+		retval = (ssize_t)len;
+		/* write down! */
+		if (storagekey_info.buffer != NULL) {
+            ret = store_rsv_write("key", storagekey_info.size, storagekey_info.buffer);
+			if (ret) {
+				printf("%s() %d, store_key_write fail\n",
+					__func__, __LINE__);
+				retval = 0;
+			}
+            actual_size = storagekey_info.size;
+		}
+	}
+_out:
+	return retval;
+}
+/**
+ * 7. get the hash value of programmed secure key | 32bytes length, sha256
+ * return success 0, fail -1
+ */
+static int32_t _amlkey_hash_4_secure(const uint8_t * name, uint8_t * hash)
+{
+	int32_t ret = 0;
+
+	ret = secure_storage_verify((uint8_t *)name, hash);
+
+	return ret;
+}
+
+/**
+ * 7. del key by name
+ * return success 0, fail -1
+ */
+static int32_t _amlkey_del(const uint8_t * name)
+{
+	int32_t ret = 0;
+	uint32_t actual_size;
+
+	ret = secure_storage_remove((uint8_t *)name);
+	if ((ret == 0) && (storagekey_info.buffer != NULL)) {
+		/* flush back */
+        ret = store_rsv_write("key", storagekey_info.size, storagekey_info.buffer);
+		if (ret) {
+			printf("%s() %d, store_key_write fail\n",
+				__func__, __LINE__);
+		}
+	} else {
+		printf("%s() %d, remove key fail\n",
+			__func__, __LINE__);
+	}
+
+	return ret;
+}
+
+
+
+#define DEFINE_MUTEX(...)
+#define mutex_lock(...)
+#define mutex_unlock(...)
+#define PAGE_ALIGNED(a) (((a)&0xFFF)==0)
+#undef pr_info
+#define pr_info(fmt ...)     printf("[KM]Msg:"fmt)
+#undef pr_err
+#define pr_err(fmt ...)     printf("[KM]Error:f[%s]L%d:", __func__, __LINE__),printf(fmt)
+
+#define DEF_NORMAL_BLOCK_SIZE	(256 * 1024)
+//static DEFINE_MUTEX(normalkey_lock);
+static uint32_t normal_blksz = DEF_NORMAL_BLOCK_SIZE;
+static uint32_t normal_flashsize = DEF_NORMAL_BLOCK_SIZE;
+static uint8_t *normal_block;
+
+static int _store_key_read(uint8_t * buffer, uint32_t length, uint32_t *actual_lenth)
+{
+	int ret;
+	uint32_t actual_size;
+	actual_size = store_rsv_size("key");
+	if (actual_size <= 1024)
+		return -1;
+
+	length = min_t(uint32_t, actual_size, length);
+	ret = store_rsv_read("key", length, buffer);
+	/* When the key is invalid at the first burn, it should be initialized again. */
+	if (ret && ret != RSV_UNVAIL) {
+		printf("amlkey init rsv read key faill\n");
+		return -1;
+	}
+	if (actual_lenth)
+		*actual_lenth = length;
+	return 0;
+}
+static int _store_key_write(uint8_t * buffer, uint32_t length, uint32_t *actual_lenth)
+{
+	int32_t ret;
+	ret = store_rsv_write("key", length, buffer);
+	if (ret)
+		return -1;
+	if (actual_lenth)
+		*actual_lenth = length;
+	return 0;
+}
+
+static int32_t _amlkey_init_normal(uint8_t *seed, uint32_t len, int encrypt_type)
+{
+	static int inited = 0;
+	int ret;
+
+	if (inited)
+		return 0;
+	inited = 1;
+
+	if (!normal_block)
+		return -1;
+
+	if (normalkey_init())
+		return -1;
+
+	mutex_lock(&normalkey_lock);
+	ret = _store_key_read(normal_block,
+			     normal_blksz,
+			     &normal_flashsize);
+	if (ret) {
+		pr_err("read storage fail\n");
+		goto finish;
+	}
+
+	ret = normalkey_readfromblock(normal_block, normal_flashsize);
+	if (ret) {
+		pr_err("init block key fail\n");
+		goto finish;
+	}
+
+#ifdef CONFIG_STORE_COMPATIBLE
+	info_disprotect &= ~DISPROTECT_KEY;  //protect
+#endif
+	ret = 0;
+finish:
+	if (ret)
+		normalkey_deinit();
+	mutex_unlock(&normalkey_lock);
+
+	return ret;
+}
+
+static int32_t _amlkey_exist_normal(const uint8_t *name)
+{
+	struct storage_object *obj;
+
+	mutex_lock(&normalkey_lock);
+	obj = normalkey_get(name);
+	mutex_unlock(&normalkey_lock);
+
+	return !!obj;
+}
+
+static uint32_t _amlkey_get_attr_normal(const uint8_t *name)
+{
+	uint32_t attr = 0;
+	struct storage_object *obj;
+
+	mutex_lock(&normalkey_lock);
+	obj = normalkey_get(name);
+	if (obj)
+		attr = obj->attribute;
+	mutex_unlock(&normalkey_lock);
+
+	return attr;
+}
+
+static ssize_t _amlkey_size_normal(const uint8_t *name)
+{
+	unsigned int size = 0;
+	struct storage_object *obj;
+
+	mutex_lock(&normalkey_lock);
+	obj = normalkey_get(name);
+	if (obj)
+		size = obj->datasize;
+	mutex_unlock(&normalkey_lock);
+
+	return size;
+}
+
+static ssize_t _amlkey_read_normal(const uint8_t *name, uint8_t *buffer, uint32_t len)
+{
+	unsigned int size = 0;
+	struct storage_object *obj;
+
+	mutex_lock(&normalkey_lock);
+	obj = normalkey_get(name);
+	if (obj && len >= obj->datasize) {
+		size = obj->datasize;
+		memcpy(buffer, obj->dataptr, size);
+	}
+	mutex_unlock(&normalkey_lock);
+
+	return size;
+}
+
+static ssize_t _amlkey_write_normal(const uint8_t *name, uint8_t *buffer,
+				    uint32_t len, uint32_t attr)
+{
+	int ret;
+	uint32_t wrtsz = 0;
+
+	if (attr & OBJ_ATTR_SECURE) {
+		pr_err("can't write secure key\n");
+		return 0;
+	}
+
+	mutex_lock(&normalkey_lock);
+	ret = normalkey_add(name, buffer, len, attr);
+	if (ret) {
+		pr_err("write key fail\n");
+		ret = 0;
+		goto unlock;
+	}
+
+	ret = normalkey_writetoblock(normal_block, normal_flashsize);
+	if (ret) {
+		pr_err("write block fail\n");
+		ret = 0;
+		goto unlock;
+	}
+
+	ret = _store_key_write(normal_block,
+			      normal_flashsize,
+			      &wrtsz);
+	if (ret) {
+		pr_err("write storage fail\n");
+		ret = 0;
+		goto unlock;
+	}
+	ret = len;
+unlock:
+	mutex_unlock(&normalkey_lock);
+	return ret;
+}
+
+static int32_t _amlkey_hash_normal(const uint8_t *name, uint8_t *hash)
+{
+	int ret = -1;
+	struct storage_object *obj;
+
+	mutex_lock(&normalkey_lock);
+	obj = normalkey_get(name);
+	if (obj) {
+		ret = 0;
+		memcpy(hash, obj->hashptr, 32);
+	}
+	mutex_unlock(&normalkey_lock);
+
+	return ret;
+}
+
+int normal_key_init(const void* dt_addr)
+{
+	uint32_t blksz = 0;
+	int nodeoffset;
+	char *pblksz;
+
+	if (!dt_addr || fdt_check_header(dt_addr)!= 0) {
+		goto blkalloc;
+	}
+
+	nodeoffset = fdt_path_offset(dt_addr, "/unifykey");
+	if (nodeoffset < 0) {
+		goto blkalloc;
+	}
+
+	pblksz = (char*)fdt_getprop((const void *)dt_addr, nodeoffset, "blocksize",NULL);
+	if (pblksz) {
+		blksz = be32_to_cpup((unsigned int*)pblksz);
+	}
+
+	if (blksz && PAGE_ALIGNED(blksz)) {
+		normal_blksz = blksz;
+		pr_info("block size from config: %x\n", blksz);
+	}
+
+blkalloc:
+	normal_block = malloc(normal_blksz);
+	if (!normal_block) {
+		pr_err("malloc block buffer fail: %x\n", normal_blksz);
+		return -1;
+	}
+
+	return 0;
+}
+
+enum amlkey_if_type {
+	IFTYPE_SECURE_STORAGE,
+	IFTYPE_NORMAL_STORAGE,
+	IFTYPE_MAX
+};
+
+struct amlkey_if amlkey_ifs[] = {
+	[IFTYPE_SECURE_STORAGE] = {
+		.init = _amlkey_init,
+		.exsit = _amlkey_isexsit,
+		.get_attr = _amlkey_get_attr,
+		.size = _amlkey_size,
+		.read = _amlkey_read,
+		.write = _amlkey_write,
+		.hash = _amlkey_hash_4_secure,
+	},
+	[IFTYPE_NORMAL_STORAGE] = {
+		.init = _amlkey_init_normal,
+		.exsit = _amlkey_exist_normal,
+		.get_attr = _amlkey_get_attr_normal,
+		.size = _amlkey_size_normal,
+		.read = _amlkey_read_normal,
+		.write = _amlkey_write_normal,
+		.hash = _amlkey_hash_normal,
+	}
+};
+
+struct amlkey_if *amlkey_if = &amlkey_ifs[IFTYPE_SECURE_STORAGE];
+int amlkey_if_init(const void* dt_addr)
+{
+	static int inited = 0;
+	uint32_t buffer_size;
+	int ret = 0;
+
+	if (inited)
+		return 0;
+	inited = 1;
+
+	if (secure_storage_getbuffer(&buffer_size)) {
+		amlkey_if = &amlkey_ifs[IFTYPE_SECURE_STORAGE];
+		return ret;
+	}
+
+	pr_info("normal key used!\n");
+	ret = normal_key_init(dt_addr);
+	amlkey_if = &amlkey_ifs[IFTYPE_NORMAL_STORAGE];
+
+	return ret;
+}
diff --git a/drivers/efuse/Kconfig b/drivers/efuse/Kconfig
new file mode 100644
index 00000000000..3ee40478a11
--- /dev/null
+++ b/drivers/efuse/Kconfig
@@ -0,0 +1,4 @@
+config EFUSE
+	bool "AML EFUSE Support"
+	help
+	  Enable support for the Amlogic EFUSE controller.
diff --git a/drivers/efuse/Makefile b/drivers/efuse/Makefile
new file mode 100644
index 00000000000..62ab0325baf
--- /dev/null
+++ b/drivers/efuse/Makefile
@@ -0,0 +1,9 @@
+# SPDX-License-Identifier: GPL-2.0+
+
+obj-$(CONFIG_EFUSE) += aml_efuse.o
+
+obj-$(CONFIG_EFUSE) += efuse.o
+
+obj-$(CONFIG_EFUSE) += efuse_usr_space_api.o
+
+obj-$(CONFIG_EFUSE) += bl31_apis.o
diff --git a/drivers/efuse/aml_efuse.c b/drivers/efuse/aml_efuse.c
new file mode 100644
index 00000000000..a553a201f71
--- /dev/null
+++ b/drivers/efuse/aml_efuse.c
@@ -0,0 +1,123 @@
+/*
+ * Copyright (C) 2014-2018 Amlogic, Inc. All rights reserved.
+ *
+ * All information contained herein is Amlogic confidential.
+ *
+ * This software is provided to you pursuant to Software License Agreement
+ * (SLA) with Amlogic Inc ("Amlogic"). This software may be used
+ * only in accordance with the terms of this agreement.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification is strictly prohibited without prior written permission from
+ * Amlogic.
+ *
+ * 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
+ * OWNER 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.
+ */
+/*
+ *
+ * Copyright (C) 2018 Amlogic, Inc. All rights reserved.
+*/
+
+#include <common.h>
+#include <amlogic/aml_efuse.h>
+#include <amlogic/asm/io.h>
+#include <amlogic/asm/secure_apb.h>
+
+//weak function for EFUSE license query
+//all following functions are defined with "weak" for customization of each SoC
+//EFUSE_LICX	--> AO_SEC_SD_CFG10/9 --> EFUSE mirror
+int  __attribute__((weak)) IS_FEAT_BOOT_VERIFY(void)
+{
+	#ifndef ADDR_IS_FEAT_BOOT_VERIFY
+	  #ifdef EFUSE_LIC0
+		  #define ADDR_IS_FEAT_BOOT_VERIFY (EFUSE_LIC0)
+		  #define OSET_IS_FEAT_BOOT_VERIFY (0)
+	  #elif defined(OTP_LIC0)
+		  #define ADDR_IS_FEAT_BOOT_VERIFY (OTP_LIC0)
+		  #define OSET_IS_FEAT_BOOT_VERIFY (0)
+	  #else
+		  #define ADDR_IS_FEAT_BOOT_VERIFY (AO_SEC_SD_CFG10)
+		  #define OSET_IS_FEAT_BOOT_VERIFY (4)
+	  #endif
+	#endif
+
+	return ((readl(ADDR_IS_FEAT_BOOT_VERIFY) >> OSET_IS_FEAT_BOOT_VERIFY) & 1);
+
+	#undef ADDR_IS_FEAT_BOOT_VERIFY
+	#undef OSET_IS_FEAT_BOOT_VERIFY
+}
+int  __attribute__((weak)) IS_FEAT_BOOT_ENCRYPT(void)
+{
+	#ifndef ADDR_IS_FEAT_BOOT_ENCRYPT
+	  #ifdef EFUSE_LIC0
+		#define ADDR_IS_FEAT_BOOT_ENCRYPT (EFUSE_LIC0)
+		#define OSET_IS_FEAT_BOOT_ENCRYPT (1)
+	  #elif defined(OTP_LIC0)
+		#define ADDR_IS_FEAT_BOOT_ENCRYPT (OTP_LIC0)
+		#define OSET_IS_FEAT_BOOT_ENCRYPT (1)
+	  #else
+		#define ADDR_IS_FEAT_BOOT_ENCRYPT (AO_SEC_SD_CFG10)
+		#define OSET_IS_FEAT_BOOT_ENCRYPT (28)
+	  #endif
+	#endif
+
+	return ((readl(ADDR_IS_FEAT_BOOT_ENCRYPT) >> OSET_IS_FEAT_BOOT_ENCRYPT) & 1);
+
+	#undef ADDR_IS_FEAT_BOOT_ENCRYPT
+	#undef OSET_IS_FEAT_BOOT_ENCRYPT
+}
+
+int  __attribute__((weak)) IS_FEAT_DIS_EMMC_USER(void)
+{
+	return 0;
+}
+
+int  __attribute__((weak)) IS_FEAT_DIS_EMMC_BOOT_0(void)
+{
+	return 0;
+}
+
+int  __attribute__((weak)) IS_FEAT_DIS_EMMC_BOOT_1(void)
+{
+	return 0;
+}
+
+int  __attribute__((weak)) IS_FEAT_EN_4BL2_SNOR(void)
+{
+	return 0;
+}
+
+int  __attribute__((weak)) IS_FEAT_DIS_NBL2_SNOR(void)
+{
+	return 0;
+}
+
+int  __attribute__((weak)) IS_FEAT_EN_8BL2_SNAND(void)
+{
+	return 0;
+}
+
+int  __attribute__((weak)) IS_FEAT_DIS_NBL2_SNAND(void)
+{
+	return 0;
+}
+
+int  __attribute__((weak)) IS_FEAT_DIS_8BL2_NAND(void)
+{
+	return 0;
+}
+
+int  __attribute__((weak)) IS_FEAT_DIS_NBL2_NAND(void)
+{
+	return 1;
+}
diff --git a/drivers/efuse/bl31_apis.c b/drivers/efuse/bl31_apis.c
new file mode 100644
index 00000000000..18f6fc69683
--- /dev/null
+++ b/drivers/efuse/bl31_apis.c
@@ -0,0 +1,474 @@
+/*
+ * arch/arm/cpu/armv8/txlx/bl31_apis.c
+ *
+ * Copyright (C) 2014-2017 Amlogic, Inc. All rights reserved.
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License for
+ * more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program; if not, write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
+ */
+
+/*
+ * Trustzone API
+ */
+
+#include <amlogic/asm/io.h>
+#include <amlogic/asm/efuse.h>
+#include <asm/cache.h>
+#include <amlogic/asm/bl31_apis.h>
+#include <amlogic/cpu_id.h>
+#include <amlogic/asm/secure_apb.h>
+
+static long sharemem_input_base;
+static long sharemem_output_base;
+
+long get_sharemem_info(unsigned long function_id)
+{
+	asm volatile(
+		__asmeq("%0", "x0")
+		"smc    #0\n"
+		: "+r" (function_id));
+
+	return function_id;
+}
+
+int32_t set_boot_params(const keymaster_boot_params *boot_params)
+{
+	const unsigned cmd = SET_BOOT_PARAMS;
+
+	if (!boot_params)
+		return -1;
+
+	if (!sharemem_input_base)
+		sharemem_input_base =
+			get_sharemem_info(GET_SHARE_MEM_INPUT_BASE);
+
+	memcpy((void *)sharemem_input_base,
+			(const void *)boot_params, sizeof(keymaster_boot_params));
+
+	asm __volatile__("" : : : "memory");
+	register uint64_t x0 asm("x0") = cmd;
+	register uint64_t x1 asm("x1") = sizeof(keymaster_boot_params);
+	do {
+		asm volatile(
+		    __asmeq("%0", "x0")
+		    __asmeq("%1", "x0")
+		    __asmeq("%2", "x1")
+		    "smc    #0\n"
+		    : "=r"(x0)
+		    : "r"(x0), "r"(x1));
+	} while (0);
+
+	return (!x0)? -1: 0;
+}
+
+#ifdef CONFIG_EFUSE
+int32_t meson_trustzone_efuse(struct efuse_hal_api_arg *arg)
+{
+	int ret;
+	unsigned cmd, offset, size;
+	unsigned long *retcnt = (unsigned long *)(arg->retcnt_phy);
+
+	if (!sharemem_input_base)
+		sharemem_input_base =
+			get_sharemem_info(GET_SHARE_MEM_INPUT_BASE);
+	if (!sharemem_output_base)
+		sharemem_output_base =
+			get_sharemem_info(GET_SHARE_MEM_OUTPUT_BASE);
+
+	if (arg->cmd == EFUSE_HAL_API_READ)
+		cmd = EFUSE_READ;
+	else if (arg->cmd == EFUSE_HAL_API_WRITE)
+		cmd = EFUSE_WRITE;
+	else
+		cmd = EFUSE_WRITE_PATTERN;
+	offset = arg->offset;
+	size = arg->size;
+
+	if (arg->cmd == EFUSE_HAL_API_WRITE)
+		memcpy((void *)sharemem_input_base,
+		       (const void *)arg->buffer_phy, size);
+		asm __volatile__("" : : : "memory");
+
+	register uint64_t x0 asm("x0") = cmd;
+	register uint64_t x1 asm("x1") = offset;
+	register uint64_t x2 asm("x2") = size;
+	do {
+		asm volatile(
+		    __asmeq("%0", "x0")
+		    __asmeq("%1", "x0")
+		    __asmeq("%2", "x1")
+		    __asmeq("%3", "x2")
+		    "smc    #0\n"
+		    : "=r"(x0)
+		    : "r"(x0), "r"(x1), "r"(x2));
+	} while (0);
+	ret = x0;
+	*retcnt = x0;
+
+	if ((arg->cmd == EFUSE_HAL_API_READ) && (ret != 0))
+		memcpy((void *)arg->buffer_phy,
+		       (const void *)sharemem_output_base, ret);
+
+	if (!ret)
+		return -1;
+	else
+		return 0;
+}
+
+int32_t meson_trustzone_efuse_get_max(struct efuse_hal_api_arg *arg)
+{
+	int32_t ret;
+	unsigned cmd;
+
+	if (arg->cmd == EFUSE_HAL_API_USER_MAX)
+		cmd = EFUSE_USER_MAX;
+
+	asm __volatile__("" : : : "memory");
+
+	register uint64_t x0 asm("x0") = cmd;
+
+	do {
+		asm volatile(
+		    __asmeq("%0", "x0")
+		    __asmeq("%1", "x0")
+		    "smc    #0\n"
+		    : "=r"(x0)
+		    : "r"(x0));
+	} while (0);
+	ret = x0;
+
+	if (!ret)
+		return -1;
+	else
+		return ret;
+}
+
+ssize_t meson_trustzone_efuse_writepattern(const char *buf, size_t count)
+{
+	struct efuse_hal_api_arg arg;
+	unsigned long retcnt;
+
+	if (count != EFUSE_BYTES)
+		return 0;	/* Past EOF */
+
+	arg.cmd = EFUSE_HAL_API_WRITE_PATTERN;
+	arg.offset = 0;
+	arg.size = count;
+	arg.buffer_phy = (unsigned long)buf;
+	arg.retcnt_phy = (unsigned long)&retcnt;
+	int ret;
+	ret = meson_trustzone_efuse(&arg);
+	return ret;
+}
+#endif
+
+uint64_t meson_trustzone_efuse_check(unsigned char *addr)
+{
+	uint64_t ret = 0;
+	struct sram_hal_api_arg arg = {};
+
+	arg.cmd = SRAM_HAL_API_CHECK_EFUSE;
+	arg.req_len = 0x1000000;
+	arg.res_len = 0;
+	arg.req_phy_addr = (unsigned long)addr;
+	arg.res_phy_addr = (unsigned long)NULL;
+
+	asm __volatile__("" : : : "memory");
+
+	register uint64_t x0 asm("x0") = CALL_TRUSTZONE_HAL_API;
+	register uint64_t x1 asm("x1") = TRUSTZONE_HAL_API_SRAM;
+	register uint64_t x2 asm("x2") = (unsigned long)(&arg);
+	do {
+		asm volatile(
+		    __asmeq("%0", "x0")
+		    __asmeq("%1", "x0")
+		    __asmeq("%2", "x1")
+		    __asmeq("%3", "x2")
+		    "smc #0\n"
+		    : "=r"(x0)
+		    : "r"(x0), "r"(x1), "r"(x2));
+	} while (0);
+
+	ret = x0;
+
+	return ret;
+}
+
+void debug_efuse_cmd(unsigned long cmd)
+{
+	asm volatile(
+		__asmeq("%0", "x0")
+		"smc    #0\n"
+		: : "r" (cmd));
+}
+
+void bl31_debug_efuse_write_pattern(const char *buf)
+{
+	if (!sharemem_input_base)
+		sharemem_input_base =
+			get_sharemem_info(GET_SHARE_MEM_INPUT_BASE);
+	memcpy((void *)sharemem_input_base, (const void *)buf, 512);
+
+	debug_efuse_cmd(DEBUG_EFUSE_WRITE_PATTERN);
+}
+
+void bl31_debug_efuse_read_pattern(char *buf)
+{
+	if (!sharemem_output_base)
+		sharemem_output_base =
+			get_sharemem_info(GET_SHARE_MEM_OUTPUT_BASE);
+	debug_efuse_cmd(DEBUG_EFUSE_READ_PATTERN);
+
+	memcpy((void *)buf, (const void *)sharemem_output_base, 512);
+}
+
+void aml_set_jtag_state(unsigned state, unsigned select)
+{
+	uint64_t command;
+	if (state == JTAG_STATE_ON)
+		command = JTAG_ON;
+	else
+		command = JTAG_OFF;
+	asm __volatile__("" : : : "memory");
+
+	asm volatile(
+		__asmeq("%0", "x0")
+		__asmeq("%1", "x1")
+		"smc    #0\n"
+		: : "r" (command), "r"(select));
+}
+
+unsigned aml_get_reboot_reason(void)
+{
+	unsigned reason;
+	uint64_t ret;
+
+	register uint64_t x0 asm("x0") = GET_REBOOT_REASON;
+	asm volatile(
+		__asmeq("%0", "x0")
+		"smc #0\n"
+		:"+r"(x0));
+		ret = x0;
+		reason = (unsigned)(ret&0xffffffff);
+		return reason;
+}
+
+void set_viu_probe_enable(void)
+{
+	register uint64_t x0 asm("x0") = VIU_PREOBE_EN;
+
+	asm volatile(
+			__asmeq("%0", "x0")
+			"smc #0\n"
+			:"+r"(x0));
+}
+unsigned aml_reboot(uint64_t function_id, uint64_t arg0, uint64_t arg1, uint64_t arg2)
+{
+	register long x0 asm("x0") = function_id;
+	register long x1 asm("x1") = arg0;
+	register long x2 asm("x2") = arg1;
+	register long x3 asm("x3") = arg2;
+	asm volatile(
+			__asmeq("%0", "x0")
+			__asmeq("%1", "x1")
+			__asmeq("%2", "x2")
+			__asmeq("%3", "x3")
+			"smc	#0\n"
+		: "+r" (x0)
+		: "r" (x1), "r" (x2), "r" (x3));
+
+	return function_id;
+}
+
+void aml_set_reboot_reason(uint64_t function_id, uint64_t arg0, uint64_t arg1, uint64_t arg2)
+{
+	register long x0 asm("x0") = function_id;
+	register long x1 asm("x1") = arg0;
+	register long x2 asm("x2") = arg1;
+	register long x3 asm("x3") = arg2;
+	asm volatile(
+			__asmeq("%0", "x0")
+			__asmeq("%1", "x1")
+			__asmeq("%2", "x2")
+			__asmeq("%3", "x3")
+			"smc	#0\n"
+			: "+r" (x0)
+			: "r" (x1), "r" (x2), "r" (x3));
+
+	return ;
+}
+
+unsigned long aml_sec_boot_check(unsigned long nType,
+	unsigned long pBuffer,
+	unsigned long nLength,
+	unsigned long nOption)
+{
+	uint64_t ret = 1;
+
+//#define AML_SECURE_LOG_TE
+
+#if defined(AML_SECURE_LOG_TE)
+	#define AML_GET_TE(a) do{a = *((volatile unsigned int*)0xc1109988);}while(0);
+	unsigned nT1,nT2,nT3;
+#else
+	#define AML_GET_TE(...)
+#endif
+
+	AML_GET_TE(nT1);
+
+	asm __volatile__("" : : : "memory");
+
+	register uint64_t x0 asm("x0") = AML_DATA_PROCESS;
+	register uint64_t x1 asm("x1") = nType;
+	register uint64_t x2 asm("x2") = pBuffer;
+	register uint64_t x3 asm("x3") = nLength;
+	register uint64_t x4 asm("x4") = nOption;
+
+	do {
+		asm volatile(
+		    __asmeq("%0", "x0")
+		    __asmeq("%1", "x0")
+		    __asmeq("%2", "x1")
+		    __asmeq("%3", "x2")
+		    __asmeq("%4", "x3")
+		    __asmeq("%5", "x4")
+		    "smc #0\n"
+		    : "=r"(x0)
+		    : "r"(x0), "r"(x1), "r"(x2),"r"(x3),"r"(x4));
+	} while (0);
+
+	ret = x0;
+
+	AML_GET_TE(nT2);;
+
+	flush_dcache_range((unsigned long )pBuffer, (unsigned long )pBuffer+nLength);
+
+	AML_GET_TE(nT3);
+
+#if defined(AML_SECURE_LOG_TE)
+	printf("aml log : dec use %d(us) , flush cache used %d(us)\n",
+		nT2 - nT1, nT3 - nT2);
+#endif
+
+	return ret;
+}
+
+void set_usb_boot_function(unsigned long command)
+{
+	register long x0 asm("x0") = SET_USB_BOOT_FUNC;
+	register long x1 asm("x1") = command;
+
+	asm volatile(
+			__asmeq("%0", "x0")
+			__asmeq("%1", "x1")
+			"smc	#0\n"
+		: "+r" (x0)
+		: "r" (x1));
+}
+
+void aml_system_off(void)
+{
+	/* TODO: Add poweroff capability */
+	aml_reboot(0x82000042, 1, 0, 0);
+	aml_reboot(0x84000008, 0, 0, 0);
+}
+
+int __get_chip_id(unsigned char *buff, unsigned int size)
+{
+	if (buff == NULL || size < 16)
+		return -1;
+
+	if (!sharemem_output_base)
+		sharemem_output_base =
+			get_sharemem_info(GET_SHARE_MEM_OUTPUT_BASE);
+
+	if (sharemem_output_base) {
+		register long x0 asm("x0") = GET_CHIP_ID;
+		register long x1 asm("x1") = 2;
+
+		asm volatile(
+			__asmeq("%0", "x0")
+			__asmeq("%1", "x1")
+				"smc	#0\n"
+			: "+r" (x0)
+			: "r" (x1));
+
+		if (x0 == 0) {
+			int version = *((unsigned int *)sharemem_output_base);
+
+			if (version == 2) {
+				memcpy(buff, (void *)sharemem_output_base + 4, 16);
+			}
+			else {
+				/**
+				 * Legacy 12-byte chip ID read out, transform data
+				 * to expected order format.
+				 */
+				uint32_t chip_info = readl(P_AO_SEC_SD_CFG8);
+				uint8_t *ch;
+				int i;
+
+				((uint32_t *)buff)[0] =
+					((chip_info & 0xff000000)	|	// Family ID
+					((chip_info << 8) & 0xff0000)	|	// Chip Revision
+					((chip_info >> 8) & 0xff00));		// Package ID
+
+				((uint32_t *)buff)[0] = htonl(((uint32_t *)buff)[0]);
+
+				/* Transform into expected order for display */
+				ch = (uint8_t *)(sharemem_output_base + 4);
+				for (i = 0; i < 12; i++)
+					buff[i + 4] = ch[11 - i];
+			}
+
+			return 0;
+		}
+	}
+
+	return -1;
+}
+
+int32_t get_avbkey_from_fip(uint8_t *buf, uint32_t buflen)
+{
+	const unsigned cmd = GET_AVBKEY_FROM_FIP;
+	uint32_t retlen = 0;
+	uint32_t ret = 0;
+
+	if (!buf)
+		return -1;
+
+	if (!sharemem_output_base)
+		sharemem_output_base =
+			get_sharemem_info(GET_SHARE_MEM_OUTPUT_BASE);
+
+	asm __volatile__("" : : : "memory");
+	register uint64_t x0 asm("x0") = cmd;
+	do {
+		asm volatile(
+		    __asmeq("%0", "x0")
+		    __asmeq("%1", "x0")
+		    "smc    #0\n"
+		    : "=r"(x0)
+		    : "r"(x0));
+	} while (0);
+
+	if (!x0)
+		ret = -1;
+	retlen = x0;
+
+	if (ret != -1 && buflen >= retlen)
+		memcpy(buf, (const void *)sharemem_output_base, retlen);
+
+	return ret;
+}
diff --git a/drivers/efuse/efuse.c b/drivers/efuse/efuse.c
new file mode 100644
index 00000000000..5560bcd384c
--- /dev/null
+++ b/drivers/efuse/efuse.c
@@ -0,0 +1,141 @@
+/*
+ * drivers/efuse/efuse.c
+ *
+ * Copyright (C) 2018 Amlogic, Inc. All rights reserved.
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License for
+ * more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program; if not, write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
+ */
+
+#include <config.h>
+#include <common.h>
+#include <command.h>
+#include <amlogic/asm/io.h>
+#include <amlogic/asm/efuse.h>
+
+char efuse_buf[EFUSE_BYTES] = {0};
+
+ssize_t efuse_read(char *buf, size_t count, loff_t *ppos)
+{
+	unsigned int pos = *ppos;
+
+	struct efuse_hal_api_arg arg;
+	unsigned int retcnt;
+	int ret;
+
+	arg.cmd = EFUSE_HAL_API_READ;
+	arg.offset = pos;
+	arg.size = count;
+	arg.buffer_phy = (unsigned long)buf;
+	arg.retcnt_phy = (unsigned long)&retcnt;
+	ret = meson_trustzone_efuse(&arg);
+	if (ret == 0) {
+		*ppos += retcnt;
+		return retcnt;
+	} else{
+		return ret;
+	}
+}
+
+ssize_t efuse_write(const char *buf, size_t count, loff_t *ppos)
+{
+	unsigned int pos = *ppos;
+
+	if ((pos & 0xffff) >= EFUSE_BYTES)
+		return 0;	/* Past EOF */
+	if (count > EFUSE_BYTES - pos)
+		count = EFUSE_BYTES - pos;
+	if (count > EFUSE_BYTES)
+		return -1;
+
+	struct efuse_hal_api_arg arg;
+	unsigned int retcnt;
+
+	arg.cmd = EFUSE_HAL_API_WRITE;
+	arg.offset = pos;
+	arg.size = count;
+	arg.buffer_phy = (unsigned long)buf;
+	arg.retcnt_phy = (unsigned long)&retcnt;
+	int ret;
+
+	ret = meson_trustzone_efuse(&arg);
+	if (ret == 0) {
+		*ppos = retcnt;
+		return retcnt;
+	} else{
+		return ret;
+	}
+}
+
+int efuse_read_usr(char *buf, size_t count, loff_t *ppos)
+{
+	char data[EFUSE_BYTES];
+	char *pdata = NULL;
+	int ret;
+	loff_t pos;
+
+	memset(data, 0, count);
+
+	pdata = data;
+	pos = *ppos;
+	ret = efuse_read(pdata, count, (loff_t *)&pos);
+
+	memcpy(buf, data, count);
+
+	return ret;
+}
+
+int efuse_write_usr(char *buf, size_t count, loff_t *ppos)
+{
+	char data[EFUSE_BYTES];
+	char *pdata = NULL;
+	char *penc = NULL;
+	int ret;
+	loff_t pos;
+
+	if (count == 0) {
+		printf("data length: 0 is error!\n");
+		return -1;
+	}
+
+	memset(data, 0, EFUSE_BYTES);
+	memset(efuse_buf, 0, EFUSE_BYTES);
+
+	memcpy(data, buf, count);
+	pdata = data;
+	penc = efuse_buf;
+
+	memcpy(penc, pdata, count);
+	pos = *ppos;
+
+	ret = efuse_write(efuse_buf, count, (loff_t *)&pos);
+
+	return ret;
+}
+
+uint32_t efuse_get_max(void)
+{
+	struct efuse_hal_api_arg arg;
+	int ret;
+
+	arg.cmd = EFUSE_HAL_API_USER_MAX;
+
+	ret = meson_trustzone_efuse_get_max(&arg);
+	if (ret == 0) {
+		printf("ERROR: can not get efuse user max bytes!!!\n");
+		return -1;
+	} else{
+		return ret;
+	}
+}
diff --git a/drivers/efuse/efuse_usr_space_api.c b/drivers/efuse/efuse_usr_space_api.c
new file mode 100644
index 00000000000..241b6d0be49
--- /dev/null
+++ b/drivers/efuse/efuse_usr_space_api.c
@@ -0,0 +1,379 @@
+/*
+ * \file        efuse_usr_space_api.c
+ * \brief       support read/write user space using keyname mode
+ *              mapping keyname to offset by looking /efusekey in dtb
+ *
+ * \version     1.0.0
+ * \date        15/07/14
+ * \author      Sam.Wu <yihui.wu@amlgic.com>
+ *
+ * Copyright (c) 2015 Amlogic. All Rights Reserved.
+ *
+ */
+#include <config.h>
+#include <common.h>
+#include <command.h>
+#include <malloc.h>
+#include <linux/ctype.h>
+#include <amlogic/asm/efuse.h>
+#include <linux/libfdt.h>
+
+#define EFUSE_DBG(fmt...)   //printf("[EFUSE_DBG]"fmt)
+#define EFUSE_MSG(fmt...)   printf("[EFUSE_MSG]"fmt)
+#define EFUSE_ERR(fmt...)   printf("[EFUSE_ERR]f(%s)L%d:", __func__, __LINE__),printf(fmt)
+
+struct efusekey_info{
+	char keyname[32];
+	unsigned offset;
+	unsigned size;
+};
+
+static struct _efuseCfgInf{
+    unsigned                initMaigc;//magic to indicate whether inited
+    unsigned                totalCfgKeyNums;
+    struct efusekey_info *  pKeyInf;
+}
+_efuseKeyInfos = {.totalCfgKeyNums = 0, .pKeyInf = NULL};
+
+int efuse_usr_api_init_dtb(const char*  dt_addr)
+{
+	int nodeoffset, poffset = 0;
+	char propname[32];
+	const void* phandle;
+	int ret;
+	int index;
+	uint32_t max_size;
+    unsigned efusekeynum = 0;
+    struct efusekey_info * efusekey_infos = NULL;
+
+	ret = fdt_check_header(dt_addr);
+	if (ret < 0) {
+		EFUSE_ERR("fdt check failed [%s]\n", fdt_strerror(ret));
+        return __LINE__;
+    }
+    _efuseKeyInfos.initMaigc = 0;
+
+	nodeoffset = fdt_path_offset(dt_addr, "/efusekey");
+	if (nodeoffset < 0) {
+		EFUSE_ERR("not find /efusekey node [%s].\n", fdt_strerror(nodeoffset));
+        return __LINE__;
+    }
+
+	phandle = fdt_getprop(dt_addr, nodeoffset, "keynum", NULL);
+	efusekeynum = be32_to_cpup((u32 *)phandle);
+	EFUSE_MSG("keynum is %x\n", efusekeynum);
+
+    if (efusekey_infos) free(efusekey_infos) ;
+    efusekey_infos = (struct efusekey_info *)malloc(sizeof (struct efusekey_info) *efusekeynum);
+    if (!efusekey_infos) {
+        EFUSE_ERR("malloc err\n");
+        return __LINE__;
+    }
+
+	max_size = efuse_get_max();
+
+	for (index = 0; index < efusekeynum; index++)
+    {
+        struct efusekey_info* theKeyInf = efusekey_infos + index;
+		sprintf(propname, "key%d", index);
+		/* printf("%s: propname: %s\n",__func__,propname); */
+		phandle = fdt_getprop(dt_addr, nodeoffset, propname, NULL);
+		if (!phandle) {
+			EFUSE_ERR("don't find  match %s\n", propname);
+			goto err;
+		}
+        poffset = fdt_node_offset_by_phandle(dt_addr,
+                be32_to_cpup((u32 *)phandle));
+        if (!poffset) {
+            EFUSE_ERR("can't find device node for key[%s]\n", propname);
+            goto err;
+        }
+
+
+		phandle = fdt_getprop(dt_addr, poffset, "keyname", NULL);
+        if (!phandle) {
+            EFUSE_ERR("Can't find keyname for key[%d]\n", index);
+            goto err;
+        }
+		strcpy(theKeyInf->keyname, phandle);
+
+		phandle = fdt_getprop(dt_addr, poffset, "offset", NULL);
+        if (!phandle) {
+            EFUSE_ERR("Can't find offset for key[%s]\n", theKeyInf->keyname);
+            goto err;
+        }
+		theKeyInf->offset = be32_to_cpup((u32 *)phandle);
+
+		phandle = fdt_getprop(dt_addr, poffset, "size", NULL);
+        if (!phandle) {
+            EFUSE_ERR("Can't find size for key[%s]\n", theKeyInf->keyname);
+            goto err;
+        }
+		theKeyInf->size = be32_to_cpup((u32 *)phandle);
+
+		EFUSE_DBG("key[%02d] name=%12s, offset=0x%04x, size=0x%04x\n",
+                index, theKeyInf->keyname, theKeyInf->offset, theKeyInf->size);
+        if (theKeyInf->offset + theKeyInf->size > max_size) {
+            EFUSE_ERR("\n offset (0x%x) + size (0x%x) > max [0x%x]!\n", theKeyInf->offset, theKeyInf->size, max_size);
+            return __LINE__;
+        }
+	}
+
+    _efuseKeyInfos.totalCfgKeyNums = efusekeynum;
+    _efuseKeyInfos.pKeyInf         = efusekey_infos;
+    EFUSE_DBG("%s success!\n", __func__);
+    _efuseKeyInfos.initMaigc = 0xee;
+	return 0;
+
+err:
+	free(efusekey_infos);
+	EFUSE_ERR("%s error!\n", __func__);
+	return -1;
+}
+
+static int _get_cfg_key_inf_byname(const char* keyname, const struct efusekey_info ** pKeyInf)
+{
+    int index = 0;
+    struct efusekey_info* theKeyInf = _efuseKeyInfos.pKeyInf;
+    int ret = 0;
+
+    if (0xee != _efuseKeyInfos.initMaigc) {
+        EFUSE_ERR("Pls init first.\n");
+        return __LINE__;
+    }
+    for (; index < _efuseKeyInfos.totalCfgKeyNums; ++index, ++theKeyInf)
+    {
+        const char* theKeyname = theKeyInf->keyname;
+        ret = strcmp(theKeyname, keyname);
+        if (ret) continue;
+
+        *pKeyInf = theKeyInf;
+        return 0;
+    }
+
+    EFUSE_ERR("efuse keyname(%s) not configured\n", keyname);
+    return __LINE__;//Not found the matched name
+}
+
+int efuse_usr_api_get_cfg_key_size(const char* keyname, unsigned* pSz)
+{
+    int ret = 0;
+    const struct efusekey_info* theCfgKeyInf = NULL;
+
+    ret = _get_cfg_key_inf_byname(keyname, &theCfgKeyInf);
+    if (ret) {
+        EFUSE_ERR("not name cfg in dts.\n");
+        return __LINE__;
+    }
+
+    *pSz = theCfgKeyInf->size;
+    return 0;
+}
+
+int efuse_usr_api_write_key(const char* keyname, const void* keydata, const unsigned dataSz)
+{
+    int ret = 0;
+    const struct efusekey_info* theCfgKeyInf = NULL;
+
+    ret = _get_cfg_key_inf_byname(keyname, &theCfgKeyInf);
+    if (ret) {
+        EFUSE_ERR("not name cfg in dts.\n");
+        return __LINE__;
+    }
+    if (dataSz != theCfgKeyInf->size) {
+        EFUSE_ERR("dataSz 0x%x != cfg size 0x%x\n", dataSz, theCfgKeyInf->size);
+        return __LINE__;
+    }
+
+    ret = efuse_write_usr((char*)keydata, theCfgKeyInf->size, (loff_t*)&theCfgKeyInf->offset);
+    if (ret < 0) {
+        EFUSE_ERR("error: efuse write fail.\n");
+        return __LINE__;
+    }
+
+    return 0;
+}
+
+//usrefuse read mac $loadaddr (size)
+int efuse_usr_api_read_key(const char* keyname, void* databuf, const unsigned bufSz)
+{
+    int ret = 0;
+    const struct efusekey_info* theCfgKeyInf = NULL;
+    loff_t offset = 0;
+
+    ret = _get_cfg_key_inf_byname(keyname, &theCfgKeyInf);
+    if (ret) {
+        EFUSE_ERR("not name cfg in dts.\n");
+        return __LINE__;
+    }
+    const unsigned cfgCnt = theCfgKeyInf->size;
+    if (cfgCnt > bufSz && bufSz) {
+        EFUSE_ERR("cfg size 0x%x > bufsz 0x%x\n", cfgCnt, bufSz);
+        return __LINE__;
+    }
+    EFUSE_DBG("keyname=%s, databuf=%p, bufSz=%d, cfgCnt=%u\n", keyname, databuf, bufSz, cfgCnt);
+
+    offset = theCfgKeyInf->offset;
+    memset(databuf, cfgCnt, 0);
+    ret = efuse_read_usr((char*)databuf, cfgCnt, &offset);
+    if (ret == -1) {
+        EFUSE_ERR("ERROR: efuse read user data fail!, size=%u, offset=%llu\n", cfgCnt, offset);
+        return __LINE__;
+    }
+
+    if (ret != cfgCnt) {
+        EFUSE_ERR("ERROR: read %d byte(s) not wanted %d byte(s) data\n", ret, cfgCnt);
+        return __LINE__;
+    }
+
+    return 0;
+}
+
+static int hex_ascii_to_buf(const char* input, uint8_t* buf, const unsigned bufSz)
+{
+    int ret = 0;
+    const char* tmpStr = input;
+    const unsigned inputLen = strlen(input);
+    int i = 0;
+
+    if (!inputLen) {
+        EFUSE_ERR("err input len 0\n");
+        return __LINE__;
+    }
+    if ( ((inputLen>>1)<<1) != inputLen ) {
+        EFUSE_ERR("inputLen %d not even\n", inputLen);
+        return __LINE__;
+    }
+    if (bufSz * 2 > inputLen) {
+        EFUSE_ERR("bufSz %d not enough\n", bufSz);
+        return __LINE__;
+    }
+    for (tmpStr = input; *tmpStr; ++tmpStr)
+    {
+        char c = *tmpStr;
+        ret = isxdigit(c);
+        if (!ret) {
+            EFUSE_ERR("input(%s) contain non xdigit, c=%c\n", input, c);
+            return __LINE__;
+        }
+    }
+
+    for (i = 0; i < inputLen; i += 2)
+    {
+        char tmpByte[8];
+        tmpByte[2] = '\0';
+        tmpByte[0] = input[i];
+        tmpByte[1] = input[i + 1];
+
+        const unsigned val = simple_strtoul(tmpByte, NULL, 16);
+        if (val > 0xff) {
+            EFUSE_ERR("Exception: val 0x%x > 0xff\n", val);
+            return __LINE__;
+        }
+        buf[i>>1] = val;
+    }
+
+    return 0;
+}
+
+static int do_usr_efuse_api(struct cmd_tbl *cmdtp, int flag, int argc, char * const argv[])
+{
+    int ret = 0;
+    const char* subcmd = argv[1];
+    if (argc < 2) return CMD_RET_USAGE;
+
+    if (!strcmp("init", subcmd))
+    {
+        const char* dtbLoadAddr = NULL;
+        if (argc > 2)
+        {
+            dtbLoadAddr = (char*)simple_strtoul(argv[2], NULL, 0);
+        }
+        else
+        {
+            dtbLoadAddr = env_get("dtb_mem_addr");
+            if (!dtbLoadAddr) {
+                env_set("dtb_mem_addr", simple_itoa(CFG_SYS_SDRAM_BASE + (16U<<20)));
+            }
+            dtbLoadAddr = (char*)simple_strtoul(dtbLoadAddr, NULL, 0);
+        }
+        ret = efuse_usr_api_init_dtb(dtbLoadAddr);
+    }
+    else if(!strcmp("size", subcmd))
+    {
+        const char* keyname = argv[2];
+        unsigned keysize = argc > 3 ? simple_strtoul(argv[3], NULL, 0) : 0;
+
+        ret = efuse_usr_api_get_cfg_key_size(keyname, &keysize);
+        EFUSE_MSG("keysize=%d\n", keysize);
+    }
+    else if(!strcmp("read", subcmd))
+    {
+        if (argc < 4) return CMD_RET_USAGE;
+        const char* keyname = argv[2];
+        char* databuf = (char*)simple_strtoul(argv[3], NULL, 16);
+        unsigned bufSz = argc > 4 ? simple_strtoul(argv[4], NULL, 0) : 0;
+
+        if (!bufSz)
+        {
+            ret =  efuse_usr_api_get_cfg_key_size(keyname, &bufSz);
+            if (ret) {
+                EFUSE_ERR("Fail in get sz for key[%s]\n", keyname);
+                return __LINE__;
+            }
+        }
+
+        ret = efuse_usr_api_read_key(keyname, databuf, bufSz);
+        if (!ret)
+        {
+            int i = 0;
+            printf("efuse read data");
+            for (i = 0; i < bufSz; i++) {
+                if (i%8 == 0) printf("\n[0x%02x]:", i);
+                printf("%02x ", databuf[i]);
+            }
+            printf("\n");
+        }
+    }
+    else if(!strcmp("write", subcmd))
+    {
+        if (argc < 4) return CMD_RET_USAGE;
+        const char* keyname = argv[2];
+        char* keydata = (char*)simple_strtoul(argv[3], NULL, 16);
+        unsigned bufSz = argc > 4 ? simple_strtoul(argv[4], NULL, 0) : 0;
+        uint8_t* tmpBuf = NULL;
+
+        if (!bufSz)
+        {
+            const char* input = argv[3];
+            bufSz = ( strlen(input) >> 1 );
+            tmpBuf = malloc(bufSz);
+
+            ret = hex_ascii_to_buf(input, tmpBuf, bufSz);
+            if (ret) {
+                EFUSE_ERR("Failed in change hex ascii to buf\n");
+                return __LINE__;
+            }
+            keydata = (char*)tmpBuf;
+        }
+        ret = efuse_usr_api_write_key(keyname, keydata, bufSz);
+        if (tmpBuf) free(tmpBuf) ;
+    }
+
+    return ret ? CMD_RET_FAILURE : CMD_RET_SUCCESS;
+}
+
+U_BOOT_CMD(
+	efuse_user,
+    5,  //max argc
+    1,	//repeatable
+    do_usr_efuse_api,
+	"efuse user space read write ops",
+	"init <dtbAddr>  --- init efuse user space\n"
+	"size keyname <addr>  --- get key size configured in dts\n"
+	"read keyname addr <size> --- read key value to mem addr \n"
+	"write --- write key value\n"
+	"       efuse_user write keyname hexstring --- write key value in hex string\n"
+	"       efuse_user write keyname addr size --- write key value, U need load you key value into mem addr first\n"
+);
+
diff --git a/drivers/mmc/aml_emmc_partition.c b/drivers/mmc/aml_emmc_partition.c
new file mode 100644
index 00000000000..550042adb35
--- /dev/null
+++ b/drivers/mmc/aml_emmc_partition.c
@@ -0,0 +1,1715 @@
+/*
+ * Copyright 2016, Amlogic Inc
+ * yonghui.yu
+ *
+ * Based vaguely on the Linux code
+ *
+ * SPDX-License-Identifier:	GPL-2.0+
+ */
+
+#include <config.h>
+#include <common.h>
+#include <command.h>
+#include <errno.h>
+#include <mmc.h>
+#include <part.h>
+#include <memalign.h>
+#include <malloc.h>
+#include <linux/list.h>
+#include <div64.h>
+#include "mmc_private.h"
+#include <amlstorage/emmc_partitions.h>
+#include <amlogic/cpu_id.h>
+#include <part_efi.h>
+#include <asm/global_data.h>
+
+DECLARE_GLOBAL_DATA_PTR;
+/* using mbr*/
+#define CONFIG_PTBL_MBR	(1)
+#if (CONFIG_PTBL_MBR)
+	/* cmpare partition name? */
+	#define CONFIG_CMP_PARTNAME	(0)
+	/* cmpare partition mask */
+	#define CONFIG_CMP_PARTMASK	(0)
+#else
+	#define CONFIG_CMP_PARTNAME	(1)
+	#define CONFIG_CMP_PARTMASK	(1)
+#endif
+/* debug info*/
+#define CONFIG_MPT_DEBUG 	(0)
+#define GPT_PRIORITY             (1)
+
+#define apt_err(fmt, ...) printf( "%s()-%d: " fmt , \
+                  __func__, __LINE__, ##__VA_ARGS__)
+
+#define apt_wrn(fmt, ...) printf( "%s()-%d: " fmt , \
+                  __func__, __LINE__, ##__VA_ARGS__)
+#if (CONFIG_MPT_DEBUG)
+/* for detail debug info */
+#define apt_info(fmt, ...) printf( "%s()-%d: " fmt , \
+                  __func__, __LINE__, ##__VA_ARGS__)
+#else
+#define apt_info(fmt, ...)
+#endif
+
+/* creat MBR for emmc */
+#define MAX_PNAME_LEN 	(16)
+#define MAX_PART_COUNT	(32)
+
+/*
+  Global offset of reserved partition is 36MBytes
+  since MMC_BOOT_PARTITION_RESERVED is 32MBytes and
+  MMC_BOOT_DEVICE_SIZE is 4MBytes.
+  MMC_RESERVED_SIZE is 64MBytes for now.
+  layout detail inside reserved partition.
+  0x000000 - 0x003fff: partition table
+  0x004000 - 0x03ffff: storage key area	(16k offset & 256k size)
+  0x400000 - 0x47ffff: dtb area  (4M offset & 512k size)
+  0x480000 - 64MBytes: resv for other usage.
+  ...
+ */
+/*
+#define RSV_DTB_OFFSET_GLB	(SZ_1M*40)
+#define RSV_DTB_SIZE		(512*1024UL)
+#define RSV_PTBL_OFFSET		(SZ_1M*0)
+#define RSV_PTBL_SIZE		(16*1024UL)
+#define RSV_SKEY_OFFSET		(16*1024UL)
+#define RSV_SKEY_SIZE		(256*1024UL)
+#define RSV_DTB_OFFSET		(SZ_1M*4)
+*/
+
+/* virtual partitions which are in "reserved" */
+#define MAX_MMC_VIRTUAL_PART_CNT	(5)
+
+
+/* BinaryLayout of partition table stored in rsv area */
+struct ptbl_rsv {
+    char magic[4];				/* MPT */
+    unsigned char version[12];	/* binary version */
+    int count;	/* partition count in using */
+    int checksum;
+    struct partitions partitions[MAX_MMC_PART_NUM];
+};
+
+/* partition table for innor usage*/
+struct _iptbl {
+	struct partitions *partitions;
+	int count;	/* partition count in use */
+};
+
+unsigned device_boot_flag = 0xff;
+bool is_partition_checked = false;
+
+#ifndef CONFIG_AML_MMC_INHERENT_PART
+/* fixme, name should be changed as aml_inherent_ptbl */
+struct partitions emmc_partition_table[] = {
+#ifndef CONFIG_AML_GPT
+	PARTITION_ELEMENT(MMC_BOOT_NAME, MMC_BOOT_DEVICE_SIZE, 0),
+#endif
+	PARTITION_ELEMENT(MMC_RESERVED_NAME, MMC_RESERVED_SIZE, 0),
+	/* prior partitions, same partition name with dts*/
+	/* partition size will be overide by dts*/
+	PARTITION_ELEMENT(MMC_CACHE_NAME, 0, 0),
+	PARTITION_ELEMENT(MMC_ENV_NAME, MMC_ENV_SIZE, 0),
+};
+
+struct virtual_partition virtual_partition_table[] = {
+    /* partition for name idx, off & size will not be used! */
+#if (CONFIG_PTBL_MBR)
+    VIRTUAL_PARTITION_ELEMENT(MMC_MBR_NAME, MMC_MBR_OFFSET, MMC_MBR_SIZE),
+#endif
+    VIRTUAL_PARTITION_ELEMENT(MMC_BOOT_NAME0, 0, 0),
+    VIRTUAL_PARTITION_ELEMENT(MMC_BOOT_NAME1, 0, 0),
+
+    /* virtual partition in reserved partition, take care off and size */
+#ifdef CONFIG_AML_PARTITION
+	VIRTUAL_PARTITION_ELEMENT(MMC_TABLE_NAME, MMC_TABLE_OFFSET, MMC_TABLE_SIZE),
+#endif
+	VIRTUAL_PARTITION_ELEMENT(MMC_KEY_NAME, EMMCKEY_RESERVE_OFFSET, MMC_KEY_SIZE),
+	VIRTUAL_PARTITION_ELEMENT(MMC_PATTERN_NAME, CALI_PATTERN_OFFSET, CALI_PATTERN_SIZE),
+	VIRTUAL_PARTITION_ELEMENT(MMC_MAGIC_NAME, MAGIC_OFFSET, MAGIC_SIZE),
+	VIRTUAL_PARTITION_ELEMENT(MMC_RANDOM_NAME, RANDOM_OFFSET, RANDOM_SIZE),
+#ifndef DTB_BIND_KERNEL
+	VIRTUAL_PARTITION_ELEMENT(MMC_DTB_NAME, DTB_OFFSET, DTB_SIZE),
+#endif
+	VIRTUAL_PARTITION_ELEMENT(MMC_FASTBOOT_CONTEXT_NAME,
+			FASTBOOT_CONTEXT_OFFSET, FASTBOOT_CONTEXT_SIZE),
+	VIRTUAL_PARTITION_ELEMENT(MMC_DDR_PARAMETER_NAME,DDR_PARAMETER_OFFSET, DDR_PARAMETER_SIZE),
+};
+
+int get_emmc_partition_arraysize(void)
+{
+    return ARRAY_SIZE(emmc_partition_table);
+}
+
+int get_emmc_virtual_partition_arraysize(void)
+{
+    return ARRAY_SIZE(virtual_partition_table);
+}
+
+#endif
+
+void __attribute__((unused)) _dump_part_tbl(struct partitions *p, int count)
+{
+	int i = 0;
+	apt_info("count %d\n", count);
+	while (i < count) {
+		printf("%02d %10s %016llx %016llx\n", i, p[i].name, p[i].offset, p[i].size);
+		i++;
+	}
+	return;
+}
+
+static int _get_part_index_by_name(struct partitions *tbl,
+					   int cnt, const char *name)
+{
+	   int i=0;
+	   struct partitions *part = NULL;
+
+       while (i < cnt) {
+			   part = &tbl[i];
+               if (!strcmp(name, part->name)) {
+					   apt_info("find %s @ tbl[%d]\n", name, i);
+					   break;
+			   }
+			   i++;
+	   };
+       if (i == cnt) {
+			   i = -1;
+			   apt_wrn("do not find match in table %s\n", name);
+	   }
+	   return i;
+}
+
+
+
+static struct partitions *_find_partition_by_name(struct partitions *tbl,
+			int cnt, const char *name)
+{
+	int i = 0;
+	struct partitions *part = NULL;
+
+	while (i < cnt) {
+
+		part = &tbl[i];
+		if (!strcmp(name, part->name)) {
+			apt_info("find %s @ tbl[%d]\n", name, i);
+			break;
+		}
+		i++;
+	};
+	if (i == cnt) {
+		part = NULL;
+		apt_wrn("do not find match in table %s\n", name);
+	}
+	return part;
+}
+
+/* fixme, must called after offset was calculated. */
+static ulong _get_inherent_offset(const char *name)
+{
+	struct partitions *part;
+
+	part = _find_partition_by_name(emmc_partition_table,
+			get_emmc_partition_arraysize(), name);
+	if (NULL == part)
+		return -1;
+	else
+		return part->offset;
+}
+/* partition table (Emmc Partition Table) */
+struct _iptbl *p_iptbl_ept = NULL;
+
+/* trans byte into lba manner for rsv area read/write */
+#ifdef CONFIG_AML_PARTITION
+static ulong _mmc_rsv_read(struct mmc *mmc, ulong offset, ulong size, void * buffer)
+{
+	lbaint_t _blk, _cnt;
+	if (0 == size)
+		return 0;
+
+	_blk = offset / mmc->read_bl_len;
+	_cnt = size / mmc->read_bl_len;
+	_cnt = blk_dread(mmc_get_blk_desc(mmc), _blk, _cnt, buffer);
+
+	return (ulong)(_cnt * mmc->read_bl_len);
+}
+
+static ulong _mmc_rsv_write(struct mmc *mmc, ulong offset, ulong size, void * buffer)
+{
+	lbaint_t _blk, _cnt;
+	if (0 == size)
+		return 0;
+
+	_blk = offset / mmc->read_bl_len;
+	_cnt = size / mmc->read_bl_len;
+	_cnt = blk_dwrite(mmc_get_blk_desc(mmc), _blk, _cnt, buffer);
+
+	return (ulong)(_cnt * mmc->read_bl_len);
+}
+#endif
+
+
+static struct partitions * get_ptbl_from_dtb(struct mmc *mmc)
+{
+	struct partitions * ptbl = NULL;
+#ifdef CONFIG_AML_PARTITION
+#ifndef DTB_BIND_KERNEL
+	unsigned char * buffer = NULL;
+	ulong ret, offset;
+	struct virtual_partition *vpart = aml_get_virtual_partition_by_name(MMC_DTB_NAME);
+
+	/* try get dtb table from ddr, which may exsit while usb burning */
+	if (NULL == get_partitions()) {
+		/* if failed, try rsv dtb area then. */
+		buffer = malloc(vpart->size * DTB_COPIES);
+		if (NULL == buffer) {
+			apt_err("Can not alloc enough buffer\n");
+			goto _err;
+		}
+		offset = _get_inherent_offset(MMC_RESERVED_NAME) + vpart->offset;
+		ret = _mmc_rsv_read(mmc, offset, (vpart->size * DTB_COPIES), buffer);
+		if (ret != (vpart->size * DTB_COPIES)) {
+			apt_err("Can not alloc enough buffer\n");
+			goto _err1;
+		}
+		/* parse it */
+		if (get_partition_from_dts(buffer)) {
+			apt_err("get partition table from dts failed. try from internal dts\n");
+			if (buffer)
+				free(buffer);
+			buffer = (char*) env_get_ulong("fdtcontroladdr", 16, CFG_SYS_SDRAM_BASE + (16U<<20));
+			if (get_partition_from_dts(buffer)) {
+				apt_err("get partition table from internal dts failed.\n");
+				goto _err;
+			}
+			buffer = NULL;
+		}
+		/* double check part_table(glb) */
+		if (NULL == get_partitions()) {
+			goto _err1;
+		}
+		apt_info("get partition table from dts successfully\n");
+
+		if (buffer)
+			free(buffer);
+		buffer = NULL;
+	}
+#endif
+#endif
+	/* asign partition info to *ptbl */
+	ptbl = get_partitions();
+	return ptbl;
+#ifdef CONFIG_AML_PARTITION
+#ifndef DTB_BIND_KERNEL
+_err1:
+	if (buffer)
+		free(buffer);
+_err:
+	free (ptbl);
+	return NULL;
+#endif
+#endif
+}
+
+
+
+
+static struct partitions *is_prio_partition(struct _iptbl *list, struct partitions *part)
+{
+	int i;
+	struct partitions *plist = NULL;
+
+	if (list->count == 0)
+		goto _out;
+
+	apt_info("count %d\n", list->count);
+	for (i=0; i<list->count; i++) {
+		plist = &list->partitions[i];
+		apt_info("%d: %s, %s\n", i, part->name, plist->name);
+		if (!strcmp(plist->name, part->name)) {
+			apt_info("%s is prio in list[%d]\n", part->name, i);
+			break;
+		}
+	}
+	if (i == list->count)
+		plist = NULL;
+_out:
+	return plist;
+}
+
+/*  calculate offset of each partitions.
+	bottom is a flag for considering
+ */
+static int _calculate_offset(struct mmc *mmc, struct _iptbl *itbl, u32 bottom)
+{
+	int i;
+	struct partitions *part;
+	ulong  gap = PARTITION_RESERVED;
+	int ret = 0;
+
+	if (itbl->count <= 0)
+		return -1;
+	part = itbl->partitions;
+#if (CONFIG_MPT_DEBUG)
+	_dump_part_tbl(part, itbl->count);
+#endif
+
+#if CONFIG_AML_GPT
+	part->offset = RESERVED_GPT_OFFSET;
+#endif
+
+	if (!strcmp(part->name, "bootloader")) {
+		part->offset = 0;
+		gap = MMC_BOOT_PARTITION_RESERVED;
+	}
+	for (i=1; i<itbl->count; i++) {
+		/**/
+		part[i].offset = part[i-1].offset + part[i-1].size + gap;
+		/* check capicity overflow ?*/
+		if (((part[i].offset + part[i].size) > mmc->capacity) ||
+				(part[i].size == -1)) {
+			part[i].size = mmc->capacity - part[i].offset;
+			/* reserv space @ the bottom */
+			if (bottom && (part[i].size > MMC_BOTTOM_RSV_SIZE)) {
+				apt_info("reserv %d bytes at bottom\n", MMC_BOTTOM_RSV_SIZE);
+				part[i].size -= MMC_BOTTOM_RSV_SIZE;
+			}
+			break;
+		}
+		gap = PARTITION_RESERVED;
+	}
+	if (i < (itbl->count - 1)) {
+		apt_err("too large partition table for current emmc, overflow!\n");
+		ret = -1;
+	}
+#if (CONFIG_MPT_DEBUG)
+	_dump_part_tbl(part, itbl->count);
+#endif
+	return ret;
+}
+
+static void compose_ept(struct _iptbl *dtb, struct _iptbl *inh,
+			struct _iptbl *ept)
+{
+	int i;
+	struct partitions *partition = NULL;
+	struct partitions *dst, *src, *prio;
+
+	/* overide inh info by dts */
+	apt_info("dtb %p, inh %p, ept %p\n", dtb, inh, ept);
+	apt_info("ept->partitions %p\n", ept->partitions);
+	partition = ept->partitions;
+	apt_info("partition %p\n", partition);
+	for (i=0; i<MAX_PART_COUNT; i++) {
+		apt_info("i %d, ept->count %d\n", i, ept->count);
+		dst = &partition[ept->count];
+		src = (i < inh->count) ? &inh->partitions[i]:&dtb->partitions[i-inh->count];
+
+		prio = is_prio_partition(ept, src);
+		if (prio) {
+			/* overide prio partition by new */
+			apt_info("override %d: %s\n", ept->count, prio->name);
+			//*prio = *src;
+			dst = prio;
+		} else
+			ept->count ++;
+		*dst = *src;
+		if (-1 == src->size) {
+			apt_info("break! %s\n", src->name);
+			break;
+		}
+	}
+
+	return;
+}
+#ifdef CONFIG_AML_PARTITION
+static int _get_version(unsigned char * s)
+{
+	int version = 0;
+	if (!strncmp((char *)s, MMC_MPT_VERSION_2, sizeof(MMC_MPT_VERSION_2)))
+		version = 2;
+	else if (!strncmp((char *)s, MMC_MPT_VERSION_1, sizeof(MMC_MPT_VERSION_1)))
+		version = 1;
+	else
+		version = -1;
+
+	return version;
+}
+
+/*  calc checksum.
+	there's a bug on v1 which did not calculate all the partitios.
+ */
+static int _calc_iptbl_check_v2(struct partitions * part, int count)
+{
+	int ret = 0, i;
+	int size = count * sizeof(struct partitions) >> 2;
+	int *buf = (int *)part;
+
+	for (i = 0; i < size; i++)
+		ret +=buf[i];
+
+	return ret;
+}
+
+static int _calc_iptbl_check_v1(struct partitions *part, int count)
+{
+    int i, j;
+	u32 checksum = 0, *p;
+
+	for (i = 0; i < count; i++) {
+		p = (u32*)part;
+		/*BUG here, do not fix it!!*/
+		for (j = sizeof(struct partitions)/sizeof(checksum); j > 0; j--) {
+			checksum += *p;
+			p++;
+	    }
+    }
+
+	return checksum;
+}
+
+static int _calc_iptbl_check(struct partitions * part, int count, int version)
+{
+	if (1 == version)
+		return _calc_iptbl_check_v1(part, count);
+	else if (2 == version)
+		return _calc_iptbl_check_v2(part, count);
+	else
+		return -1;
+}
+
+/* ept is malloced out side */
+static int _cpy_iptbl(struct _iptbl * dst, struct _iptbl * src)
+{
+	int ret = 0;
+	if (!dst || !src) {
+		apt_err("invalid arg %s\n", !dst ? "dst" : "src");
+		ret = -1;
+		goto _out;
+	}
+	if (!dst->partitions || !src->partitions) {
+		apt_err("invalid arg %s->partitions\n", !dst ? "dst" : "src");
+		ret = -2;
+		goto _out;
+	}
+
+	dst->count = src->count;
+	memcpy(dst->partitions, src->partitions, sizeof(struct partitions) * src->count);
+
+_out:
+	return ret;
+}
+
+
+/* get ptbl from rsv area from emmc */
+static int get_ptbl_rsv(struct mmc *mmc, struct _iptbl *rsv)
+{
+	struct ptbl_rsv * ptbl_rsv = NULL;
+	uchar * buffer = NULL;
+	ulong size, offset;
+	int checksum, version, ret = 0;
+	struct virtual_partition *vpart = aml_get_virtual_partition_by_name(MMC_TABLE_NAME);
+
+	size = (sizeof(struct ptbl_rsv) + 511) / 512 * 512;
+	if (vpart->size < size) {
+		apt_err("too much partitons\n");
+		ret = -1;
+		goto _out;
+	}
+	buffer = malloc(size);
+	if (NULL == buffer) {
+		apt_err("no enough memory for ptbl rsv\n");
+		ret = -2;
+		goto _out;
+	}
+	/* read it from emmc. */
+	offset = _get_inherent_offset(MMC_RESERVED_NAME) + vpart->offset;
+	if (size != _mmc_rsv_read(mmc, offset, size, buffer)) {
+		apt_err("read ptbl from rsv failed\n");
+		ret = -3;
+		goto _out;
+	}
+
+	ptbl_rsv = (struct ptbl_rsv *) buffer;
+	apt_info("magic %3.3s, version %8.8s, checksum %x\n", ptbl_rsv->magic,
+			ptbl_rsv->version, ptbl_rsv->checksum);
+	/* fixme, check magic ?*/
+	if (strncmp(ptbl_rsv->magic, MMC_PARTITIONS_MAGIC, sizeof(MMC_PARTITIONS_MAGIC))) {
+		apt_err("magic faild %s, %3.3s\n", MMC_PARTITIONS_MAGIC, ptbl_rsv->magic);
+		ret = -4;
+		goto _out;
+	}
+	/* check version*/
+	version = _get_version(ptbl_rsv->version);
+	if (version < 0) {
+		apt_err("version faild %s, %3.3s\n", MMC_PARTITIONS_MAGIC, ptbl_rsv->magic);
+		ret = -5;
+		goto _out;
+	}
+	if (ptbl_rsv->count > MAX_MMC_PART_NUM) {
+		apt_err("invalid partition count %d\n", ptbl_rsv->count);
+		ret = -1;
+		goto _out;
+	}
+	/* check sum */
+	checksum = _calc_iptbl_check(ptbl_rsv->partitions, ptbl_rsv->count, version);
+	if (checksum != ptbl_rsv->checksum) {
+		apt_err("checksum faild 0x%x, 0x%x\n", ptbl_rsv->checksum, checksum);
+		ret = -6;
+		goto _out;
+	}
+
+	rsv->count = ptbl_rsv->count;
+	memcpy(rsv->partitions, ptbl_rsv->partitions, rsv->count * sizeof(struct partitions));
+
+_out:
+	if (buffer)
+		free (buffer);
+	return ret;
+}
+
+
+/* update partition tables from src
+	if success, return 0;
+	else, return 1
+	*/
+static int update_ptbl_rsv(struct mmc *mmc, struct _iptbl *src)
+{
+	struct ptbl_rsv *ptbl_rsv = NULL;
+	uchar *buffer;
+	ulong size, offset;
+	int ret = 0, version;
+	struct virtual_partition *vpart = aml_get_virtual_partition_by_name(MMC_TABLE_NAME);
+
+	size = (sizeof(struct ptbl_rsv) + 511) / 512 * 512;
+	buffer = malloc(size);
+	if (NULL == buffer) {
+		apt_err("no enough memory for ptbl rsv\n");
+		return -1;
+	}
+	memset(buffer, 0 , size);
+	/* version, magic and checksum */
+	ptbl_rsv = (struct ptbl_rsv *) buffer;
+	strcpy((char *)ptbl_rsv->version, MMC_MPT_VERSION);
+	strcpy(ptbl_rsv->magic, MMC_PARTITIONS_MAGIC);
+	if (src->count > MAX_MMC_PART_NUM) {
+		apt_err("too much partitions\n");
+		ret = -1;
+		goto _err;
+	}
+	ptbl_rsv->count = src->count;
+	memcpy(ptbl_rsv->partitions, src->partitions,
+		sizeof(struct partitions)*src->count);
+	version = _get_version(ptbl_rsv->version);
+	ptbl_rsv->checksum = _calc_iptbl_check(src->partitions, src->count, version);
+	/* write it to emmc. */
+	apt_info("magic %3.3s, version %8.8s, checksum %x\n", ptbl_rsv->magic, ptbl_rsv->version, ptbl_rsv->checksum);
+	offset = _get_inherent_offset(MMC_RESERVED_NAME) + vpart->offset;
+	if (_mmc_rsv_write(mmc, offset, size, buffer) != size) {
+		apt_err("write ptbl to rsv failed\n");
+		ret = -1;
+		goto _err;
+	}
+_err:
+	free (buffer);
+	return ret;
+}
+
+static void _free_iptbl(struct _iptbl *iptbl)
+{
+	if (iptbl && iptbl->partitions) {
+		free(iptbl->partitions);
+		iptbl->partitions = NULL;
+	}
+	if (iptbl) {
+		free(iptbl);
+		iptbl = NULL;
+	}
+
+	return;
+}
+
+#endif
+static int _cmp_partition(struct partitions *dst, struct partitions *src, int overide)
+{
+	int ret = 0;
+#if (CONFIG_CMP_PARTNAME)
+	if (strncmp(dst->name, src->name, sizeof(src->name)))
+		ret = -2;
+#endif
+	if (dst->size != src->size)
+		ret = -3;
+	if (dst->offset != src->offset)
+		ret = -4;
+#if (CONFIG_CMP_PARTMASK)
+	if (dst->mask_flags != src->mask_flags)
+		ret = -5;
+#endif
+
+	if (ret && (!overide)) {
+		apt_err("name: %10.10s<->%10.10s\n", dst->name, src->name);
+		apt_err("size: %llx<->%llx\n", dst->size, src->size);
+		apt_err("offset: %llx<->%llx\n", dst->offset, src->offset);
+		apt_err("mask: %08x<->%08x\n", dst->mask_flags, src->mask_flags);
+	}
+
+	if (overide) {
+		*dst = *src;
+		ret = 0;
+	}
+
+	return ret;
+}
+
+/* compare partition tables
+	if same, do nothing then return 0;
+	else, print the diff ones and return -x
+	-1:count
+	-2:name
+	-3:size
+	-4:offset
+	*/
+static int _cmp_iptbl(struct _iptbl * dst, struct _iptbl * src)
+{
+	int ret = 0, i = 0;
+	struct partitions *dstp;
+	struct partitions *srcp;
+
+	if (dst->count != src->count) {
+		apt_err("partition count is not same %d:%d\n", dst->count, src->count);
+		ret = -1;
+		goto _out;
+	}
+
+	while (i < dst->count) {
+		dstp = &dst->partitions[i];
+		srcp = &src->partitions[i];
+		ret = _cmp_partition(dstp, srcp, 0);
+		if (ret) {
+			apt_err("partition %d has changed\n", i);
+			break;
+		}
+		i++;
+	}
+
+_out:
+	return ret;
+}
+
+
+/* iptbl buffer opt. */
+static int _zalloc_iptbl(struct _iptbl **_iptbl)
+{
+	int ret = 0;
+	struct _iptbl *iptbl;
+	struct partitions *partition = NULL;
+
+	partition = malloc(sizeof(struct partitions)*MAX_PART_COUNT);
+	if (NULL == partition) {
+		ret = -1;
+		apt_err("no enough memory for partitions\n");
+		goto _out;
+	}
+
+	iptbl = malloc(sizeof(struct _iptbl));
+	if (NULL == iptbl) {
+		ret = -2;
+		apt_err("no enough memory for ept\n");
+		free(partition);
+		goto _out;
+	}
+	memset(partition, 0, sizeof(struct partitions)*MAX_PART_COUNT);
+	memset(iptbl, 0, sizeof(struct _iptbl));
+
+	iptbl->partitions = partition;
+	apt_info("iptbl %p, partition %p, iptbl->partitions %p\n",
+		iptbl, partition, iptbl->partitions);
+	*_iptbl = iptbl;
+_out:
+	return ret;
+}
+
+
+/*
+ * fixme, need check space size later.
+ */
+
+static inline int le32_to_int(unsigned char *le32)
+{
+	return ((le32[3] << 24) +
+	    (le32[2] << 16) +
+	    (le32[1] << 8) +
+	     le32[0]
+	   );
+}
+
+static int test_block_type(unsigned char *buffer)
+{
+	int slot;
+	struct dos_partition *p;
+
+	if ((buffer[DOS_PART_MAGIC_OFFSET + 0] != 0x55) ||
+	    (buffer[DOS_PART_MAGIC_OFFSET + 1] != 0xaa) ) {
+		return (-1);
+	} /* no DOS Signature at all */
+	p = (struct dos_partition *)&buffer[DOS_PART_TBL_OFFSET];
+	for (slot = 0; slot < 3; slot++) {
+		if (p->boot_ind != 0 && p->boot_ind != 0x80) {
+			if (!slot &&
+			    (strncmp((char *)&buffer[DOS_PBR_FSTYPE_OFFSET],
+				     "FAT", 3) == 0 ||
+			     strncmp((char *)&buffer[DOS_PBR32_FSTYPE_OFFSET],
+				     "FAT32", 5) == 0)) {
+				return DOS_PBR; /* is PBR */
+			} else {
+				return -1;
+			}
+		}
+	}
+	return DOS_MBR;	    /* Is MBR */
+}
+
+//DOS_MBR OR DOS_PBR
+/*
+ * re-constructe iptbl from mbr&ebr infos.
+ * memory for  iptbl_mbr must be alloced outside.
+ *
+ */
+static void _construct_ptbl_by_mbr(struct mmc *mmc, struct _iptbl *iptbl_mbr)
+{
+	int ret,i;
+	int flag = 0;
+	lbaint_t read_offset = 0;
+	int part_num = 0;
+	int primary_num = 0;
+	uint64_t logic_start = 0;
+	uint64_t externed_start = 0;
+	struct dos_partition *pt;
+	struct partitions *partitions = iptbl_mbr->partitions;
+
+	apt_info("aml MBR&EBR debug...\n");
+	ALLOC_CACHE_ALIGN_BUFFER(unsigned char, buffer, 512);
+	for (;;) {
+		apt_info("**%02d: read_offset %016llx\n", part_num, (uint64_t)read_offset<<9);
+		ret = blk_dread(mmc_get_blk_desc(mmc), read_offset, 1, buffer);
+		if (read_offset == 0)
+			flag = 1;
+		else
+			flag = 0;
+		/* debug code */
+		// print_buffer(0,buffer,1,512,16);
+		if (ret != 1) {
+			apt_err("ret %d fail to read current ebr&mbr from emmc! \n", ret);
+			break;
+		}
+		ret = test_block_type(buffer);
+		if (ret != 0 && ret != 1) {
+			apt_err("invalid magic value: 0x%02x%02x\n",
+				buffer[DOS_PART_MAGIC_OFFSET], buffer[DOS_PART_MAGIC_OFFSET + 1]);
+			break;
+		}
+
+		pt = (dos_partition_t *)(&buffer[0] + DOS_PART_TBL_OFFSET);
+		for (i = 0; i < 4; i++, pt++) {
+			if ( (pt->boot_ind == 0x00 || pt->boot_ind == 0x80) && pt->sys_ind == 0x83 ) {
+				//emmc_partition[part_num]->name = NULL;
+				partitions[part_num].offset = ((uint64_t)(le32_to_int(pt->start4)+read_offset) << 9ULL);
+				partitions[part_num].size = (uint64_t)le32_to_int(pt->size4) << 9ULL;
+				partitions[part_num].mask_flags = pt->sys_ind;
+
+				apt_info("--partition[%d]: %016llx, %016llx, 0x%08x \n",
+					part_num, partitions[part_num].offset,
+					partitions[part_num].size,
+					le32_to_int(pt->size4));
+				part_num++;
+				if ( flag )
+					primary_num++;
+			}else{/* get the next externed partition info */
+				if ( pt->boot_ind == 0x00 && pt->sys_ind == 0x05) {
+					logic_start = (uint64_t)le32_to_int (pt->start4);
+					//logic_size = (uint64_t)le32_to_int (pt->size4);
+				}
+			}
+		}
+		/* mbr & ebr debug infos */
+		apt_info("******%02d: read_offset=%016llx, logic_start=%016llx\n",
+			part_num,(uint64_t)read_offset*512ULL,logic_start*512ULL);
+
+		if (part_num == primary_num) {
+			externed_start = logic_start;
+			read_offset = externed_start;
+		}else
+			read_offset = externed_start + logic_start;
+		if (logic_start == 0)
+			break;
+		logic_start = 0;
+
+	}
+	iptbl_mbr->count = part_num;
+	apt_info("iptbl_mbr->count = %d\n", iptbl_mbr->count);
+
+	return;
+}
+
+static int __attribute__((unused)) _check_ptbl_mbr(struct mmc *mmc, struct _iptbl *ept)
+{
+	int ret = 0;
+	/* re-constructed by mbr */
+	struct _iptbl *iptbl_mbr = NULL, *ept2 = NULL;
+	struct partitions *partitions = NULL;
+	int i,j;
+
+	iptbl_mbr = malloc(sizeof(struct _iptbl));
+	if (NULL == iptbl_mbr) {
+		apt_err("no enough memory for iptbl_mbr\n");
+		return -1;
+	}
+	memset(iptbl_mbr , 0, sizeof(struct _iptbl));
+	partitions = (struct partitions *)malloc(sizeof(struct partitions) * DOS_PARTITION_COUNT);
+	if (NULL == partitions) {
+		apt_err("no enough memory for partitions\n");
+		free(iptbl_mbr);
+		return -1;
+	}
+	memset(partitions, 0, sizeof(struct partitions) * DOS_PARTITION_COUNT);
+	iptbl_mbr->partitions = partitions;
+
+	_construct_ptbl_by_mbr(mmc, iptbl_mbr);
+        if (iptbl_mbr->count > 0)
+	{
+		ret = 0;
+		goto _check_return;
+	}
+
+	ept2 = (struct _iptbl*) malloc(sizeof(struct _iptbl));
+	if (!ept2) 
+		return -1;
+
+	ept2 -> partitions = (struct partitions*) malloc (sizeof(struct partitions) * ept->count);
+	if (!ept2->partitions) 
+		return -1;
+	memset (ept2->partitions, 0, sizeof(struct partitions) * ept->count);
+	ept2 -> count = 0;
+
+	for (i=4,j=0;i<ept->count;i++)
+	{
+		apt_info("-!check partition name %s\n",ept->partitions[i].name);
+		memcpy(&ept2->partitions[j],&ept->partitions[i], sizeof(struct partitions));
+		j++;
+
+	}
+	ept2->count = j;
+
+	ret = _cmp_iptbl(iptbl_mbr, ept2);
+	if (ept2->partitions)
+		free (ept2->partitions);
+	if (ept2)
+		free (ept2);
+
+	if (partitions)
+		free(partitions);
+	if (iptbl_mbr)
+		free(iptbl_mbr);
+ _check_return:
+	apt_wrn("MBR is %s\n", ret?"Improper!":"OK!");
+	return ret;
+}
+
+/* construct a partition table entry of EBR */
+static int _construct_ebr_1st_entry(struct _iptbl *p_iptbl,struct dos_partition *p_ebr, int part_num )
+{
+	uint64_t start_offset = 0;
+	uint64_t logic_size = 0;
+
+	p_ebr->boot_ind = 0x00;
+	p_ebr->sys_ind = 0x83;
+	/* Starting = relative offset between this EBR sector and the first sector of the logical partition
+	* the gap between two partition is a fixed value of PARTITION_RESERVED ,otherwise the emmc partiton
+	* is different with reserved */
+	start_offset = PARTITION_RESERVED >> 9;
+	/* Number of sectors = total count of sectors for this logical partition */
+	// logic_size = (p_iptbl->partitions[part_num].size) >> 9ULL;
+	logic_size = lldiv(p_iptbl->partitions[part_num].size, 512);
+	apt_info("*** %02d: size 0x%016llx, logic_size 0x%016llx\n", part_num, p_iptbl->partitions[part_num].size, logic_size);
+	memcpy((unsigned char *)(p_ebr->start4), &start_offset, 4);
+	memcpy((unsigned char *)(p_ebr->size4), &logic_size, 4);
+	return 0;
+}
+
+static int _construct_ebr_2nd_entry(struct _iptbl *p_iptbl, struct dos_partition *p_ebr, int part_num)
+{
+	uint64_t start_offset = 0;
+	uint64_t logic_size = 0;
+
+	if ((part_num+2) > p_iptbl->count)
+		return 0;
+
+	p_ebr->boot_ind = 0x00;
+	p_ebr->sys_ind = 0x05;
+	/* Starting sector = LBA address of next EBR minus LBA address of extended partition's first EBR */
+	start_offset = (p_iptbl->partitions[part_num+1].offset - PARTITION_RESERVED -
+					(p_iptbl->partitions[3].offset - PARTITION_RESERVED)) >> 9;
+	/* total count of sectors for next logical partition, but count starts from the next EBR sector */
+	logic_size = (p_iptbl->partitions[part_num+1].size + PARTITION_RESERVED) >> 9;
+
+	memcpy((unsigned char *)(p_ebr->start4), &start_offset, 4);
+	memcpy((unsigned char *)(p_ebr->size4), &logic_size, 4);
+
+	return 0;
+}
+
+/* construct a partition table entry of MBR OR EBR */
+static int _construct_mbr_entry(struct _iptbl *p_iptbl, struct dos_partition *p_entry, int part_num)
+{
+	uint64_t start_offset = 0;
+	uint64_t primary_size = 0;
+	uint64_t externed_size = 0;
+	int i;
+	/* the entry is active or not */
+	if (part_num == 0 )
+		p_entry->boot_ind = 0x00;
+	else
+		p_entry->boot_ind = 0x00;
+
+	if (part_num == 3) {/* the logic partion entry */
+		/* the entry type */
+		p_entry->sys_ind = 0x05;
+		start_offset = (p_iptbl->partitions[3].offset - PARTITION_RESERVED) >> 9;
+		for ( i = 3;i< p_iptbl->count;i++)
+			externed_size = p_iptbl->partitions[i].size >> 9;
+
+		memcpy((unsigned char *)p_entry->start4, &start_offset, 4);
+		memcpy((unsigned char *)p_entry->size4, &externed_size, 4);
+	}else{/* the primary partion entry */
+		/* the entry type */
+		p_entry->sys_ind = 0x83;
+		start_offset = (p_iptbl->partitions[part_num].offset) >> 9;
+		primary_size = (p_iptbl->partitions[part_num].size)>>9;
+		memcpy((unsigned char *)p_entry->start4, &start_offset, 4);
+		memcpy((unsigned char *)p_entry->size4, &primary_size, 4);
+	}
+
+	return 0;
+}
+
+static int _construct_mbr_or_ebr(struct _iptbl *p_iptbl, struct dos_mbr_or_ebr *p_br,
+	int part_num, int type)
+{
+	int i;
+
+        apt_info("!!!++++ %0d(%0d) my count:%i\n",part_num, p_iptbl->count,p_iptbl->count<4?p_iptbl->count:4);
+	if (DOS_MBR == type) {
+		/* constuct a integral MBR */
+		for (i = 0; i< ((p_iptbl->count<4)?p_iptbl->count:4) ; i++)
+			_construct_mbr_entry(p_iptbl, &p_br->part_entry[i], i);
+
+	}else{
+		/* constuct a integral EBR */
+		p_br->bootstart[DOS_PBR32_FSTYPE_OFFSET] = 'F';
+		p_br->bootstart[DOS_PBR32_FSTYPE_OFFSET + 1] = 'A';
+		p_br->bootstart[DOS_PBR32_FSTYPE_OFFSET + 2] = 'T';
+		p_br->bootstart[DOS_PBR32_FSTYPE_OFFSET + 3] = '3';
+		p_br->bootstart[DOS_PBR32_FSTYPE_OFFSET + 4] = '2';
+
+		_construct_ebr_1st_entry(p_iptbl, &p_br->part_entry[0], part_num);
+		_construct_ebr_2nd_entry(p_iptbl, &p_br->part_entry[1], part_num);
+	}
+
+	p_br->magic[0] = 0x55 ;
+	p_br->magic[1] = 0xAA ;
+	return 0;
+}
+
+static __attribute__((unused)) int _update_ptbl_mbr(struct mmc *mmc, struct _iptbl *p_iptbl)
+{
+	int ret = 0, start_blk = 0, blk_cnt = 1;
+	unsigned char *src;
+	int i,j;
+	struct dos_mbr_or_ebr *mbr;
+	struct _iptbl *ptb ;
+	struct _iptbl *ptb2;
+
+	ptb = p_iptbl;
+	ptb2 = (struct _iptbl*) malloc(sizeof(struct _iptbl));
+
+	ptb2 -> partitions = (struct partitions*) malloc (sizeof(struct partitions) * ptb->count);
+	memset (ptb2->partitions, 0, sizeof(struct partitions) * ptb->count);
+	ptb2 -> count = 0;
+
+	for (i=4,j=0;i<ptb->count;i++)
+	{
+		apt_info("-!check partition name %s\n",ptb->partitions[i].name);
+		memcpy(&ptb2->partitions[j],&ptb->partitions[i], sizeof(struct partitions));
+		j++;
+
+	}
+	ptb2->count = j;
+	ptb = ptb2;
+
+	mbr = malloc(sizeof(struct dos_mbr_or_ebr));
+
+	for (i=0;i<ptb->count;i++) {
+		apt_info("-update MBR-: partition[%02d]: %016llx - %016llx skipped:%s name:%s parts count:%02d\n",i,
+			ptb->partitions[i].offset, ptb->partitions[i].size, ptb->partitions[i].size==0? "yes" :"no", ptb->partitions[i].name, ptb->count);
+	}
+
+	for (i = 0;i < ptb->count;) {
+		apt_info("!!!!--- update_ptbl_mbr %02d (%02d)\n", i, ptb->count);
+		memset(mbr ,0 ,sizeof(struct dos_mbr_or_ebr));
+		if (i == 0) {
+			_construct_mbr_or_ebr(ptb, mbr, i, 0);
+			i = i+2;
+		} else
+			_construct_mbr_or_ebr(ptb, mbr, i, 2);
+		src = (unsigned char *)mbr;
+		apt_info("--%s(): %02d(%02d), off %x\n", __func__, i, ptb->count, start_blk);
+		ret = blk_dwrite(mmc_get_blk_desc(mmc), start_blk, blk_cnt, src);
+		i++;
+		if (ret != blk_cnt) {
+			apt_err("write current MBR failed! ret: %d != cnt: %d\n",ret,blk_cnt);
+			break;
+		}
+		start_blk = (ptb->partitions[i].offset - PARTITION_RESERVED) >> 9;
+		apt_info("!!!!end update_ptbl_mbr %02d (%02d)\n", i, ptb->count);
+	}
+	free(mbr);
+	free(ptb->partitions);
+	free(ptb);
+
+	ret = !ret;
+	if (ret)
+		apt_err("write MBR failed!\n");
+	else
+		apt_err("write MBR ok!!!!\n");
+
+	return ret;
+}
+
+#ifdef CONFIG_AML_GPT
+int is_gpt_changed(struct mmc *mmc, struct _iptbl *p_iptbl_ept)
+{
+	int i, k;
+	gpt_entry *gpt_pte = NULL;
+	size_t efiname_len;
+	struct _iptbl *ept = p_iptbl_ept;
+	struct partitions *partitions = ept->partitions;
+	int parts_num = ept->count;
+	uint64_t offset;
+	uint64_t size;
+	char name[PARTNAME_SZ];
+	int gpt_changed = 0;
+	struct blk_desc *dev_desc = mmc_get_blk_desc(mmc);
+	ALLOC_CACHE_ALIGN_BUFFER_PAD(gpt_header, gpt_head, 1, dev_desc->blksz);
+
+	if (!dev_desc) {
+		printf("%s: Invalid Argument(s)\n", __func__);
+		return 1;
+	}
+
+	if (is_gpt_valid(dev_desc, GPT_PRIMARY_PARTITION_TABLE_LBA,
+				gpt_head, &gpt_pte) != 1) {
+		printf("%s: ***ERROR:Invalid GPT ***\n", __func__);
+		if (is_gpt_valid(dev_desc, (dev_desc->lba - 1),
+					gpt_head, &gpt_pte) != 1) {
+			printf("%s: ***ERROR: Invalid Backup GPT ***\n",
+					__func__);
+			return 1;
+		} else {
+			printf("%s: *** Using Backup GPT ***\n",
+					__func__);
+		}
+			//return 1;
+	}
+	for (i = 0; i < le32_to_cpu(gpt_head->num_partition_entries); i++) {
+		if (!is_pte_valid(&gpt_pte[i]))
+			break;
+
+		offset = le64_to_cpu(gpt_pte[i].starting_lba<<9ULL);
+		if (partitions[i].offset != offset) {
+			printf("Caution! GPT offset had been changed\n");
+			gpt_changed = 1;
+			break;
+		}
+
+		size = ((le64_to_cpu(gpt_pte[i].ending_lba)+1) -
+			le64_to_cpu(gpt_pte[i].starting_lba)) << 9ULL;
+		if (i == parts_num - 1) {
+			if ((partitions[i].size - GPT_TOTAL_SIZE) != size) {
+				printf("Caution! GPT size had been changed\n");
+				gpt_changed = 1;
+				break;
+			}
+		} else {
+		if (partitions[i].size != size) {
+			printf("Caution! GPT size had been changed\n");
+			gpt_changed = 1;
+			break;
+			}
+		}
+
+		/* partition name */
+		efiname_len = sizeof(gpt_pte[i].partition_name)
+			/ sizeof(efi_char16_t);
+
+		memset(name, 0, PARTNAME_SZ);
+		for (k = 0; k < efiname_len; k++)
+			name[k] = (char)gpt_pte[i].partition_name[k];
+		if (strcmp(name, partitions[i].name) != 0) {
+			printf("Caution! GPT name had been changed\n");
+			gpt_changed = 1;
+			break;
+		}
+
+	}
+	if ((i != parts_num) && (gpt_changed == 0)) {
+		gpt_changed = 1;
+		printf("Caution! GPT number had been changed\n");
+	}
+
+	free(gpt_pte);
+	return gpt_changed;
+}
+int is_gpt_broken(struct mmc *mmc)
+{
+	gpt_entry *gpt_pte = NULL;
+	int broken_status = 0;
+	struct blk_desc *dev_desc = mmc_get_blk_desc(mmc);
+	ALLOC_CACHE_ALIGN_BUFFER_PAD(gpt_header, gpt_head, 1, dev_desc->blksz);
+
+	if (!dev_desc) {
+		printf("%s: Invalid Argument(s)\n", __func__);
+		return 1;
+	}
+
+	if (is_gpt_valid(dev_desc, GPT_PRIMARY_PARTITION_TABLE_LBA,
+				gpt_head, &gpt_pte) != 1) {
+		broken_status += 1;
+		printf("%s: ***ERROR:Invalid GPT ***\n", __func__);
+	}
+	if (is_gpt_valid(dev_desc, (dev_desc->lba - 1),
+				gpt_head, &gpt_pte) != 1) {
+		printf("%s: ***ERROR: Invalid Backup GPT ***\n",
+					__func__);
+		broken_status += 2;
+	}
+
+	if (broken_status != 3)
+		free(gpt_pte);
+	return broken_status;
+
+}
+
+int fill_ept_by_gpt(struct mmc *mmc, struct _iptbl *p_iptbl_ept)
+{
+	struct blk_desc *dev_desc = mmc_get_blk_desc(mmc);
+	ALLOC_CACHE_ALIGN_BUFFER_PAD(gpt_header, gpt_head, 1, dev_desc->blksz);
+	gpt_entry *gpt_pte = NULL;
+	int i, k;
+	size_t efiname_len, dosname_len;
+	struct _iptbl *ept = p_iptbl_ept;
+	struct partitions *partitions = ept->partitions;
+
+	if (!dev_desc) {
+		printf("%s: Invalid Argument(s)\n", __func__);
+		return 1;
+	}
+
+	if (is_gpt_valid(dev_desc, GPT_PRIMARY_PARTITION_TABLE_LBA,
+				gpt_head, &gpt_pte) != 1) {
+		printf("%s: ***ERROR:Invalid GPT ***\n", __func__);
+		if (is_gpt_valid(dev_desc, (dev_desc->lba - 1),
+					gpt_head, &gpt_pte) != 1) {
+			printf("%s: ***ERROR: Invalid Backup GPT ***\n",
+					__func__);
+			return 1;
+		} else {
+			printf("%s: *** Using Backup GPT ***\n",
+					__func__);
+		}
+			//return 1;
+	}
+
+	for (i = 0; i < le32_to_cpu(gpt_head->num_partition_entries); i++) {
+		if (!is_pte_valid(&gpt_pte[i]))
+			break;
+
+		partitions[i].offset = le64_to_cpu(gpt_pte[i].starting_lba<<9ULL);
+		partitions[i].size = ((le64_to_cpu(gpt_pte[i].ending_lba)+1) -
+			le64_to_cpu(gpt_pte[i].starting_lba)) << 9ULL;
+		/* mask flag */
+		partitions[i].mask_flags = (uint32_t)le64_to_cpu(gpt_pte[i].attributes.fields.reserved);
+		/* partition name */
+		efiname_len = sizeof(gpt_pte[i].partition_name)
+			/ sizeof(efi_char16_t);
+		dosname_len = sizeof(partitions[i].name);
+
+		memset(partitions[i].name, 0, sizeof(partitions[i].name));
+		for (k = 0; k < min(dosname_len, efiname_len); k++)
+			partitions[i].name[k] = (char)gpt_pte[i].partition_name[k];
+
+	}
+	ept->count = i;
+	free(gpt_pte);
+	return 0;
+}
+
+void trans_ept_to_diskpart(struct _iptbl *ept, struct disk_partition *disk_part) {
+	struct partitions *part = ept->partitions;
+	int count = ept->count;
+	int i;
+	for (i = 0; i < count; i++) {
+		disk_part[i].start = part[i].offset >> 9;
+		strcpy((char *)disk_part[i].name, part[i].name);
+		/* store maskflag into type, 8bits ONLY! */
+		disk_part[i].type[0] = (uchar)part[i].mask_flags;
+	#ifdef CONFIG_PARTITION_TYPE_GUID
+		strcpy((char *)disk_part[i].type_guid, part[i].name);
+	#endif
+	#ifdef CONFIG_RANDOM_UUID
+		gen_rand_uuid_str(disk_part[i].uuid, UUID_STR_FORMAT_STD);
+	#endif
+		disk_part[i].bootable = 0;
+		if ( i == (count - 1))
+			disk_part[i].size = 0;
+		else
+			disk_part[i].size = (part[i].size) >> 9;
+	}
+	return;
+}
+
+
+
+
+#endif
+
+/***************************************************
+ *	init partition table for emmc device.
+ *	returns 0 means ok.
+ *			other means failure.
+ ***************************************************
+ *  work flows:
+ *	source of logic partition table(LPT) is from dts
+ *	no matter MACRO is on/off
+ *		1. try to get LPT from dtb
+ *			1.1 if dtb exist, compose ept by LPT&inh
+ *			1.2 if not, go ahead
+ *      2. try to get ept from emmc rsv partition
+ *			2.1 if not:
+ * 				2.1.1 when dtb exists
+ *					2.1.1.1 check ept with dtb
+ *					2.1.1.2 update rsv if needed
+ * 				2.1.1 without dtb, exit
+ *			2.2 if got:
+ *				2.2.1 try to reconstruct ept by MBR
+ *				2.2.2 check it with ept
+ *				2.2.3 update MBR if needed
+ ***************************************************
+ *	when normal boot:
+ *		without dtb, with rsv, with MBR
+ *  when blank emmc:
+ *		without dtb, without rsv, without MBR
+ *  when burning MBR on a blank emmc:
+ *		with dtb, without rsv, without MBR
+ *  when burning MBR on a emmc with rsv:
+ *		with dtb, with rsv, without MBR
+ *  when burning MBR on a emmc with rsv&MBR:
+ *		with dtb, with rsv, with MBR
+ ***************************************************/
+int mmc_device_init (struct mmc *mmc)
+{
+	int ret = 1;
+#if (CONFIG_PTBL_MBR)  || (!CONFIG_AML_PARTITION)
+	//cpu_id_t cpu_id = get_cpu_id();
+#endif
+	/* partition table from dtb/code/emmc rsv */
+	struct _iptbl iptbl_dtb, iptbl_inh;
+
+	/* calculate inherent offset */
+	iptbl_inh.count = get_emmc_partition_arraysize();
+	if (iptbl_inh.count) {
+		iptbl_inh.partitions = emmc_partition_table;
+		_calculate_offset(mmc, &iptbl_inh, 0);
+	}
+	apt_info("inh count %d\n",  iptbl_inh.count);
+#if (CONFIG_MPT_DEBUG)
+	apt_info("inherent partition table\n");
+	_dump_part_tbl(iptbl_inh.partitions, iptbl_inh.count);
+#endif
+	/* For re-entry */
+	if (NULL == p_iptbl_ept) {
+		ret = _zalloc_iptbl(&p_iptbl_ept);
+		if (ret)
+			goto _out;
+	} else {
+		p_iptbl_ept->count = 0;
+		memset(p_iptbl_ept->partitions, 0,
+			sizeof(struct partitions)*MAX_PART_COUNT);
+	}
+
+	/* try to get partition table from dtb(ddr or emmc) */
+	iptbl_dtb.partitions = get_ptbl_from_dtb(mmc);
+	/* construct ept by dtb if exist */
+	if (iptbl_dtb.partitions) {
+		iptbl_dtb.count = get_partition_count();
+		apt_info("dtb %p, count %d\n", iptbl_dtb.partitions, iptbl_dtb.count);
+		/* reserved partition must exist! */
+		if (iptbl_inh.count) {
+			compose_ept(&iptbl_dtb, &iptbl_inh, p_iptbl_ept);
+			if (0 == p_iptbl_ept->count) {
+				apt_err("compose partition table failed!\n");
+				goto _out;
+			}
+			/* calculate offset infos. considering GAPs */
+			if (_calculate_offset(mmc, p_iptbl_ept, 1)) {
+				goto _out;
+			}
+		#if (CONFIG_MPT_DEBUG)
+			apt_info("ept partition table\n");
+			_dump_part_tbl(p_iptbl_ept->partitions, p_iptbl_ept->count);
+		#endif
+		} else {
+			/* report fail, because there is no reserved partitions */
+			apt_err("compose partition table failed!\n");
+			ret = -1;
+			goto _out;
+		}
+	} else
+		apt_wrn("get partition table from dtb failed\n");
+#ifndef CONFIG_AML_PARTITION
+	if (0) { //(cpu_id.family_id < MESON_CPU_MAJOR_ID_G12B) {
+		printf("CONFIG_AML_PARTITION should define before G12B\n");
+		goto _out;
+	}
+#endif
+
+#ifdef CONFIG_AML_PARTITION
+	int update = 1;
+	struct _iptbl *p_iptbl_rsv = NULL;
+	/* try to get partiton table from rsv */
+	ret = _zalloc_iptbl(&p_iptbl_rsv);
+	if (ret)
+		goto _out;
+	ret = get_ptbl_rsv(mmc, p_iptbl_rsv);
+        apt_info("!!!! after call get_ptbl_rsv got %i parts\n",p_iptbl_rsv->count);
+
+	if (p_iptbl_rsv->count) {
+		/* dtb exist, p_iptbl_ept already inited */
+		if (iptbl_dtb.partitions) {
+			ret = _cmp_iptbl(p_iptbl_ept, p_iptbl_rsv);
+			if (!ret) {
+				update = 0;
+			}
+		} else {
+			/* without dtb, update ept with rsv */
+		        apt_info("!!!! call _cpy_iptbl from rsv to ept %i\n",p_iptbl_rsv->count);
+			_cpy_iptbl(p_iptbl_ept, p_iptbl_rsv);
+			update = 0;
+		}
+	} else {
+		/* without dtb& rsv */
+		if (!iptbl_dtb.partitions) {
+			apt_err("dtb&rsv are not exist, no LPT source\n");
+			ret = -9;
+			goto _out;
+		}
+	}
+
+	if (update && iptbl_dtb.partitions) {
+		apt_wrn("update rsv with dtb!\n");
+		ret = update_ptbl_rsv(mmc, p_iptbl_ept);
+	}
+#endif
+	//apt_wrn("ept source is %s\n", (ept_source == p_iptbl_ept)?"ept":"rsv");
+#if (CONFIG_PTBL_MBR)
+	/* 1st sector was reserved by romboot after gxl */
+	if (1) { //(cpu_id.family_id >= MESON_CPU_MAJOR_ID_GXL) {
+		if (_check_ptbl_mbr(mmc, p_iptbl_ept)) {
+			apt_info("!!!! after _check_ptbl_mbr, see %i ept parts, check result %i\n",p_iptbl_ept->count, _check_ptbl_mbr(mmc, p_iptbl_ept));
+			/*fixme, comaptible for mbr&ebr */
+			ret |= _update_ptbl_mbr(mmc, p_iptbl_ept);
+			apt_wrn("MBR Updated!\n");
+		}
+	}
+#endif
+#ifdef CONFIG_AML_GPT
+	char *str_disk_guid;
+	int gpt_priority = GPT_PRIORITY;
+	struct disk_partition *disk_partition;
+	int dcount = p_iptbl_ept->count;
+	struct blk_desc *dev_desc = mmc_get_blk_desc(mmc);
+	disk_partition = calloc(1, PAD_TO_BLOCKSIZE(sizeof(struct disk_partition) * dcount, dev_desc));
+	trans_ept_to_diskpart(p_iptbl_ept, disk_partition);
+	str_disk_guid = malloc(UUID_STR_LEN + 1);
+	if (str_disk_guid == NULL) {
+		free(disk_partition);
+		return -ENOMEM;
+	}
+#ifdef CONFIG_RANDOM_UUID
+	gen_rand_uuid_str(str_disk_guid, UUID_STR_FORMAT_STD);
+#endif
+	if (part_test_efi(mmc_get_blk_desc(mmc)) != 0) {
+		ret = gpt_restore(mmc_get_blk_desc(mmc), str_disk_guid, disk_partition, dcount);
+		printf("GPT IS RESTORED %s\n", ret ? "Failed!" : "OK!");
+	} else if (is_gpt_changed(mmc, p_iptbl_ept)) {
+		if (gpt_priority) {
+			fill_ept_by_gpt(mmc, p_iptbl_ept);
+			printf("and gpt has higher priority, so ept had been update\n");
+		} else {
+			gpt_restore(mmc_get_blk_desc(mmc), str_disk_guid, disk_partition, dcount);
+			printf("but EPT has higher priority, so gpt had been recover\n");
+		}
+	}
+
+	int broken_status = is_gpt_broken(mmc);
+	if (broken_status != 0 && broken_status != 3) {
+		fill_ept_by_gpt(mmc, p_iptbl_ept);
+		free(disk_partition);
+		dcount = p_iptbl_ept->count;
+		disk_partition = calloc(1, PAD_TO_BLOCKSIZE(sizeof(struct disk_partition) * dcount, dev_desc));
+		trans_ept_to_diskpart(p_iptbl_ept, disk_partition);
+		ret = gpt_restore(mmc_get_blk_desc(mmc), str_disk_guid, disk_partition, p_iptbl_ept->count);
+		if (broken_status == 1)
+			printf("The first gpt has been restore\n");
+		else if (broken_status == 2)
+			printf("The second gpt has been restore\n");
+		else
+			printf("Both gpt has been restore\n");
+	}
+
+	free(str_disk_guid);
+	free(disk_partition);
+#endif
+	/* init part again */
+	apt_info("!!!! init part again\n");
+	part_init(mmc_get_blk_desc(mmc));
+
+_out:
+#ifdef CONFIG_AML_PARTITION
+	if (p_iptbl_rsv)
+		_free_iptbl(p_iptbl_rsv);
+#endif
+	return ret;
+}
+
+
+struct partitions *find_mmc_partition_by_name (char const *name)
+{
+	struct partitions *partition = NULL;
+
+	apt_info("p_iptbl_ept %p\n", p_iptbl_ept);
+	if (NULL == p_iptbl_ept) {
+		goto _out;
+	}
+	partition = p_iptbl_ept->partitions;
+	partition = _find_partition_by_name(partition,
+			p_iptbl_ept->count, name);
+	apt_info("partition %p\n", partition);
+	if (!partition) {
+		partition = _find_partition_by_name(emmc_partition_table,
+			get_emmc_partition_arraysize(), name);
+	}
+	apt_info("partition %p\n", partition);
+_out:
+	return partition;
+}
+
+/*
+ find virtual partition in inherent table.
+*/
+int find_virtual_partition_by_name (char const *name, struct partitions *partition)
+{
+	int ret = 0;
+	ulong offset;
+	struct virtual_partition *vpart = aml_get_virtual_partition_by_name(MMC_DTB_NAME);
+	if (NULL == partition)
+		return -1;
+
+	offset = _get_inherent_offset(MMC_RESERVED_NAME);
+	if (-1 == offset) {
+		apt_err("can't find %s in inherent\n", MMC_RESERVED_NAME);
+		return -1;
+	}
+
+	if (!strcmp(name, "dtb")) {
+		strcpy(partition->name, name);
+		partition->offset = offset + vpart->offset;
+		partition->size = (vpart->size * DTB_COPIES);
+	}
+
+	return ret;
+}
+
+int find_dev_num_by_partition_name (char const *name)
+{
+	int dev = -1;
+
+	/* card */
+	if (!strcmp(name, MMC_CARD_PARTITION_NAME)) {
+		dev = 0;
+    } else { /* eMMC OR TSD */
+		/* partition name is valid */
+		if (find_mmc_partition_by_name(name)) {
+			dev = 1;
+		}
+	}
+	return dev;
+}
+
+static inline uint64_t get_part_size(struct partitions *part, int num)
+{
+    return part[num].size;
+}
+
+static inline uint64_t get_part_offset(struct partitions *part, int num)
+{
+    return part[num].offset;
+}
+
+static inline char * get_part_name(struct partitions *part, int num)
+{
+    return (char *)part[num].name;
+}
+
+int get_part_info_from_tbl(struct blk_desc *dev_desc,
+	int num, struct disk_partition *info)
+{
+    int ret = 0;
+    struct partitions *part;
+
+	if (NULL == p_iptbl_ept)
+        return -1;
+	if (num > (p_iptbl_ept->count-1))
+        return -1;
+    part = p_iptbl_ept->partitions;
+
+    /*get partition info by index! */
+    info->start = (lbaint_t)(get_part_offset(part, num)/dev_desc->blksz);
+    info->size = (lbaint_t)(get_part_size(part, num)/dev_desc->blksz);
+	info->blksz = dev_desc->blksz;
+    strcpy((char *)info->name, get_part_name(part, num));
+
+    return ret;
+}
+#if (CONFIG_MPT_DEBUG)
+void show_partition_info(struct disk_partition *info)
+{
+	printf("----------%s----------\n", __func__);
+	printf("name %10s\n", info->name);
+	printf("blksz " LBAFU "\n", info->blksz);
+	printf("sart %ld\n", info->start);
+	printf("size %ld\n", info->size);
+	printf("----------end----------\n");
+}
+#endif
+
+
+struct partitions *aml_get_partition_by_name(const char *name)
+{
+	struct partitions *partition = NULL;
+	partition = _find_partition_by_name(emmc_partition_table,
+			get_emmc_partition_arraysize(), name);
+	if (partition == NULL)
+		apt_wrn("do not find match in inherent table %s\n", name);
+	return partition;
+}
+
+struct virtual_partition *aml_get_virtual_partition_by_name(const char *name)
+{
+	int i = 0, cnt;
+	struct virtual_partition *part = NULL;
+	cnt = get_emmc_virtual_partition_arraysize();
+	while (i < cnt) {
+
+		part = &virtual_partition_table[i];
+		if (!strcmp(name, part->name)) {
+			apt_info("find %10s @ tbl[%d]\n", name, i);
+			break;
+		}
+		i++;
+	};
+	if (i == cnt) {
+		part = NULL;
+		apt_wrn("do not find match in table %10s\n", name);
+	}
+	return part;
+}
+
+int get_part_info_by_name(struct blk_desc *dev_desc,
+	const char *name, struct disk_partition *info)
+{
+	struct partitions *partition = NULL;
+	struct partitions virtual;
+	int ret = 0;
+	cpu_id_t cpu_id = get_cpu_id();
+
+	partition = find_mmc_partition_by_name((char *)name);
+	if (partition) {
+		info->start = (lbaint_t)(partition->offset/dev_desc->blksz);
+		info->size = (lbaint_t)(partition->size/dev_desc->blksz);
+		info->blksz = dev_desc->blksz;
+		strcpy((char *)info->name, partition->name);
+	} else if (!find_virtual_partition_by_name((char *)name, &virtual)) {
+		/* try virtual partitions */
+		apt_wrn("Got %s in virtual table\n", name);
+		info->start = (lbaint_t)(virtual.offset/dev_desc->blksz);
+		info->size = (lbaint_t)(virtual.size/dev_desc->blksz);
+		info->blksz = dev_desc->blksz;
+		strcpy((char *)info->name, virtual.name);
+	} else {
+		/* all partitions were tried, fail */
+		ret = -1;
+		goto _out;
+	}
+	/* for bootloader */
+	if ((0 == info->start) && (cpu_id.family_id >= MESON_CPU_MAJOR_ID_GXL)) {
+		info->start = 1;
+		info->size -= 1;
+	}
+
+#if (CONFIG_MPT_DEBUG)
+	show_partition_info(info);
+#endif
+_out:
+	return ret;
+}
+
+
+/*
+ * get the partition number by name
+ * return value
+ *     < 0 means no partition found
+ *     >= 0 means valid partition
+ */
+__weak int get_partition_num_by_name(char const *name)
+{
+	   int ret = -1;
+	   struct partitions *partition = NULL;
+
+       if (NULL == p_iptbl_ept)
+			   goto _out;
+	   partition = p_iptbl_ept->partitions;
+	   ret = _get_part_index_by_name(partition,
+					   p_iptbl_ept->count, name);
+_out:
+	   return ret;
+}
+
+/*
+ * get the partition info by number
+ * return value
+ *     < 0 means no partition found
+ *     >= 0 means valid partition
+ */
+__weak struct partitions *get_partition_info_by_num(const int num)
+{
+	struct partitions *partition = NULL;
+
+	if ((NULL == p_iptbl_ept)
+		|| (num >= p_iptbl_ept->count))
+		goto _out;
+	partition = &p_iptbl_ept->partitions[num];
+
+_out:
+	return partition;
+}
diff --git a/drivers/mmc/mmc_aml copy.c b/drivers/mmc/mmc_aml copy.c
new file mode 100644
index 00000000000..66c0203dc6d
--- /dev/null
+++ b/drivers/mmc/mmc_aml copy.c	
@@ -0,0 +1,3299 @@
+// SPDX-License-Identifier: GPL-2.0+
+/*
+ * Copyright 2008, Freescale Semiconductor, Inc
+ * Andy Fleming
+ *
+ * Based vaguely on the Linux code
+ */
+
+#include <config.h>
+#include <common.h>
+#include <command.h>
+#include <dm.h>
+#include <dm/device-internal.h>
+#include <errno.h>
+#include <mmc.h>
+#include <part.h>
+#include <power/regulator.h>
+#include <malloc.h>
+#include <memalign.h>
+#include <linux/list.h>
+#include <div64.h>
+#include "mmc_private.h"
+#include <amlstorage/emmc_partitions.h>
+#include <amlstorage/partition_table.h>
+#include <amlogic/storage.h>
+#include <amlogic/asm/secure_apb.h>
+#include <amlogic/asm/sd_emmc.h>
+
+struct aml_pattern aml_pattern_table[] = {
+	AML_PATTERN_ELEMENT(MMC_PATTERN_NAME, CALI_PATTERN),
+	AML_PATTERN_ELEMENT(MMC_MAGIC_NAME, MAGIC_PATTERN),
+	AML_PATTERN_ELEMENT(MMC_RANDOM_NAME, RANDOM_PATTERN),
+};
+static int mmc_set_signal_voltage(struct mmc *mmc, uint signal_voltage);
+static int mmc_power_cycle(struct mmc *mmc);
+#if !CONFIG_IS_ENABLED(MMC_TINY)
+static int mmc_select_mode_and_width(struct mmc *mmc, uint card_caps);
+#endif
+
+extern int emmc_probe(uint32_t init_flag);
+
+bool emmckey_is_access_range_legal (struct mmc *mmc, ulong start, lbaint_t blkcnt) {
+	ulong key_start_blk, key_end_blk;
+	u64 key_glb_offset;
+	struct partitions * part = NULL;
+	struct virtual_partition *vpart = NULL;
+	if (IS_MMC(mmc)) {
+		vpart = aml_get_virtual_partition_by_name(MMC_KEY_NAME);
+		part = aml_get_partition_by_name(MMC_RESERVED_NAME);
+		key_glb_offset = part->offset + vpart->offset;
+		key_start_blk = (key_glb_offset / MMC_BLOCK_SIZE);
+		key_end_blk = ((key_glb_offset + vpart->size) / MMC_BLOCK_SIZE - 1);
+		if (!(info_disprotect & DISPROTECT_KEY)) {
+			if ((key_start_blk <= (start + blkcnt -1))
+				&& (key_end_blk >= start)
+				&& (blkcnt != start)) {
+				pr_info("%s, keys %ld, keye %ld, start %ld, blkcnt %ld\n",
+						mmc->cfg->name, key_start_blk,
+						key_end_blk, start, blkcnt);
+				pr_err("Emmckey: Access range is illegal!\n");
+				return 0;
+			}
+		}
+	}
+	return 1;
+}
+
+int emmc_boot_chk(struct mmc *mmc)
+{
+	u32 val = 0;
+
+	if (strcmp(mmc->dev->name, "emmc"))
+		return 0;
+
+	val = readl(SEC_AO_SEC_GP_CFG0);
+	pr_info("SEC_AO_SEC_GP_CFG0 = %x\n", val);
+	if ((val & 0xf) == 0x1)
+		return 1;
+
+	return 0;
+}
+
+#if CONFIG_IS_ENABLED(MMC_TINY)
+static struct mmc mmc_static;
+struct mmc *find_mmc_device(int dev_num)
+{
+	return &mmc_static;
+}
+
+void mmc_do_preinit(void)
+{
+	struct mmc *m = &mmc_static;
+#ifdef CONFIG_FSL_ESDHC_ADAPTER_IDENT
+	mmc_set_preinit(m, 1);
+#endif
+	if (m->preinit)
+		mmc_start_init(m);
+}
+
+struct blk_desc *mmc_get_blk_desc(struct mmc *mmc)
+{
+	return &mmc->block_dev;
+}
+#endif
+
+#if !CONFIG_IS_ENABLED(DM_MMC)
+
+#if CONFIG_IS_ENABLED(MMC_UHS_SUPPORT)
+static int mmc_wait_dat0(struct mmc *mmc, int state, int timeout)
+{
+	return -ENOSYS;
+}
+#endif
+
+__weak int board_mmc_getwp(struct mmc *mmc)
+{
+	return -1;
+}
+
+int mmc_getwp(struct mmc *mmc)
+{
+	int wp;
+
+	wp = board_mmc_getwp(mmc);
+
+	if (wp < 0) {
+		if (mmc->cfg->ops->getwp)
+			wp = mmc->cfg->ops->getwp(mmc);
+		else
+			wp = 0;
+	}
+
+	return wp;
+}
+
+__weak int board_mmc_getcd(struct mmc *mmc)
+{
+	return -1;
+}
+#endif
+
+#ifdef CONFIG_MMC_TRACE
+void mmmc_trace_before_send(struct mmc *mmc, struct mmc_cmd *cmd)
+{
+	pr_info("CMD_SEND:%d\n", cmd->cmdidx);
+	pr_info("\t\tARG\t\t\t 0x%08X\n", cmd->cmdarg);
+}
+
+void mmmc_trace_after_send(struct mmc *mmc, struct mmc_cmd *cmd, int ret)
+{
+	int i;
+	u8 *ptr;
+
+	if (ret) {
+		pr_info("\t\tRET\t\t\t %d\n", ret);
+	} else {
+		switch (cmd->resp_type) {
+		case MMC_RSP_NONE:
+			pr_info("\t\tMMC_RSP_NONE\n");
+			break;
+		case MMC_RSP_R1:
+			pr_info("\t\tMMC_RSP_R1,5,6,7 \t 0x%08X \n",
+				cmd->response[0]);
+			break;
+		case MMC_RSP_R1b:
+			pr_info("\t\tMMC_RSP_R1b\t\t 0x%08X \n",
+				cmd->response[0]);
+			break;
+		case MMC_RSP_R2:
+			pr_info("\t\tMMC_RSP_R2\t\t 0x%08X \n",
+				cmd->response[0]);
+			pr_info("\t\t          \t\t 0x%08X \n",
+				cmd->response[1]);
+			pr_info("\t\t          \t\t 0x%08X \n",
+				cmd->response[2]);
+			pr_info("\t\t          \t\t 0x%08X \n",
+				cmd->response[3]);
+			pr_info("\n");
+			pr_info("\t\t\t\t\tDUMPING DATA\n");
+			for (i = 0; i < 4; i++) {
+				int j;
+				pr_info("\t\t\t\t\t%03d - ", i*4);
+				ptr = (u8 *)&cmd->response[i];
+				ptr += 3;
+				for (j = 0; j < 4; j++)
+					pr_info("%02X ", *ptr--);
+				pr_info("\n");
+			}
+			break;
+		case MMC_RSP_R3:
+			pr_info("\t\tMMC_RSP_R3,4\t\t 0x%08X \n",
+				cmd->response[0]);
+			break;
+		default:
+			pr_info("\t\tERROR MMC rsp not supported\n");
+			break;
+		}
+	}
+}
+
+void mmc_trace_state(struct mmc *mmc, struct mmc_cmd *cmd)
+{
+	int status;
+
+	status = (cmd->response[0] & MMC_STATUS_CURR_STATE) >> 9;
+	pr_info("CURR STATE:%d\n", status);
+}
+#endif
+
+#if CONFIG_IS_ENABLED(MMC_VERBOSE) || defined(DEBUG)
+const char *mmc_mode_name(enum bus_mode mode)
+{
+	static const char *const names[] = {
+	      [MMC_LEGACY]	= "MMC legacy",
+	      [SD_LEGACY]	= "SD Legacy",
+	      [MMC_HS]		= "MMC High Speed (26MHz)",
+	      [SD_HS]		= "SD High Speed (50MHz)",
+	      [UHS_SDR12]	= "UHS SDR12 (25MHz)",
+	      [UHS_SDR25]	= "UHS SDR25 (50MHz)",
+	      [UHS_SDR50]	= "UHS SDR50 (100MHz)",
+	      [UHS_SDR104]	= "UHS SDR104 (208MHz)",
+	      [UHS_DDR50]	= "UHS DDR50 (50MHz)",
+	      [MMC_HS_52]	= "MMC High Speed (52MHz)",
+	      [MMC_DDR_52]	= "MMC DDR52 (52MHz)",
+	      [MMC_HS_200]	= "HS200 (200MHz)",
+	      [MMC_HS_400]	= "HS400 (200MHz)",
+	};
+
+	if (mode >= MMC_MODES_END)
+		return "Unknown mode";
+	else
+		return names[mode];
+}
+#endif
+
+static uint mmc_mode2freq(struct mmc *mmc, enum bus_mode mode)
+{
+	static const int freqs[] = {
+	      [MMC_LEGACY]	= 25000000,
+	      [SD_LEGACY]	= 25000000,
+	      [MMC_HS]		= 26000000,
+	      [SD_HS]		= 50000000,
+	      [MMC_HS_52]	= 52000000,
+	      [MMC_DDR_52]	= 52000000,
+	      [UHS_SDR12]	= 25000000,
+	      [UHS_SDR25]	= 50000000,
+	      [UHS_SDR50]	= 100000000,
+	      [UHS_DDR50]	= 50000000,
+	      [UHS_SDR104]	= 208000000,
+	      [MMC_HS_200]	= 200000000,
+	      [MMC_HS_400]	= 200000000,
+	};
+
+	if (mode == MMC_LEGACY)
+		return mmc->legacy_speed;
+	else if (mode >= MMC_MODES_END)
+		return 0;
+	else
+		return freqs[mode];
+}
+
+static int mmc_select_mode(struct mmc *mmc, enum bus_mode mode)
+{
+	mmc->selected_mode = mode;
+	mmc->tran_speed = mmc_mode2freq(mmc, mode);
+	mmc->ddr_mode = mmc_is_mode_ddr(mode);
+	pr_debug("selecting mode %s (freq : %d MHz)\n", mmc_mode_name(mode),
+		 mmc->tran_speed / 1000000);
+	return 0;
+}
+
+#if !CONFIG_IS_ENABLED(DM_MMC)
+int mmc_send_cmd(struct mmc *mmc, struct mmc_cmd *cmd, struct mmc_data *data)
+{
+	int ret;
+
+	mmmc_trace_before_send(mmc, cmd);
+	ret = mmc->cfg->ops->send_cmd(mmc, cmd, data);
+	mmmc_trace_after_send(mmc, cmd, ret);
+
+	return ret;
+}
+#endif
+
+int mmc_send_status(struct mmc *mmc, int timeout)
+{
+	struct mmc_cmd cmd;
+	int err, retries = 5;
+	int status;
+	cmd.cmdidx = MMC_CMD_SEND_STATUS;
+	cmd.resp_type = MMC_RSP_R1;
+	if (!mmc_host_is_spi(mmc))
+		cmd.cmdarg = mmc->rca << 16;
+
+	while (1) {
+		err = mmc_send_cmd(mmc, &cmd, NULL);
+		if (!err) {
+			if ((cmd.response[0] & MMC_STATUS_RDY_FOR_DATA) &&
+			    (cmd.response[0] & MMC_STATUS_CURR_STATE) !=
+			     MMC_STATE_PRG)
+				break;
+
+			if (cmd.response[0] & MMC_STATUS_MASK) {
+#if !defined(CONFIG_SPL_BUILD) || defined(CONFIG_SPL_LIBCOMMON_SUPPORT)
+				pr_err("Status Error: 0x%08X\n",
+				       cmd.response[0]);
+#endif
+				return -ECOMM;
+			}
+		} else if (--retries < 0)
+			return err;
+
+		if (timeout-- <= 0)
+			break;
+
+		udelay(1000);
+	}
+
+	mmc_trace_state(mmc, &cmd);
+	if (timeout <= 0) {
+#if !defined(CONFIG_SPL_BUILD) || defined(CONFIG_SPL_LIBCOMMON_SUPPORT)
+		pr_debug("Timeout waiting card ready\n");
+#endif
+		return -ETIMEDOUT;
+	}
+	status = (cmd.response[0] & MMC_STATUS_CURR_STATE) >> 9;
+	if (cmd.response[0] & MMC_STATUS_SWITCH_ERROR) {
+		pr_err("mmc status switch error status =0x%x\n", status);
+		return -21;
+	}
+	return 0;
+}
+
+int mmc_set_blocklen(struct mmc *mmc, int len)
+{
+	struct mmc_cmd cmd;
+	int err;
+
+	if (mmc->ddr_mode)
+		return 0;
+
+	cmd.cmdidx = MMC_CMD_SET_BLOCKLEN;
+	cmd.resp_type = MMC_RSP_R1;
+	cmd.cmdarg = len;
+
+	err = mmc_send_cmd(mmc, &cmd, NULL);
+
+#ifdef CONFIG_MMC_QUIRKS
+	if (err && (mmc->quirks & MMC_QUIRK_RETRY_SET_BLOCKLEN)) {
+		int retries = 4;
+		/*
+		 * It has been seen that SET_BLOCKLEN may fail on the first
+		 * attempt, let's try a few more time
+		 */
+		do {
+			err = mmc_send_cmd(mmc, &cmd, NULL);
+			if (!err)
+				break;
+		} while (retries--);
+	}
+#endif
+
+	return err;
+}
+
+#ifdef MMC_SUPPORTS_TUNING
+static const u8 tuning_blk_pattern_4bit[] = {
+	0xff, 0x0f, 0xff, 0x00, 0xff, 0xcc, 0xc3, 0xcc,
+	0xc3, 0x3c, 0xcc, 0xff, 0xfe, 0xff, 0xfe, 0xef,
+	0xff, 0xdf, 0xff, 0xdd, 0xff, 0xfb, 0xff, 0xfb,
+	0xbf, 0xff, 0x7f, 0xff, 0x77, 0xf7, 0xbd, 0xef,
+	0xff, 0xf0, 0xff, 0xf0, 0x0f, 0xfc, 0xcc, 0x3c,
+	0xcc, 0x33, 0xcc, 0xcf, 0xff, 0xef, 0xff, 0xee,
+	0xff, 0xfd, 0xff, 0xfd, 0xdf, 0xff, 0xbf, 0xff,
+	0xbb, 0xff, 0xf7, 0xff, 0xf7, 0x7f, 0x7b, 0xde,
+};
+
+static const u8 tuning_blk_pattern_8bit[] = {
+	0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0x00,
+	0xff, 0xff, 0xcc, 0xcc, 0xcc, 0x33, 0xcc, 0xcc,
+	0xcc, 0x33, 0x33, 0xcc, 0xcc, 0xcc, 0xff, 0xff,
+	0xff, 0xee, 0xff, 0xff, 0xff, 0xee, 0xee, 0xff,
+	0xff, 0xff, 0xdd, 0xff, 0xff, 0xff, 0xdd, 0xdd,
+	0xff, 0xff, 0xff, 0xbb, 0xff, 0xff, 0xff, 0xbb,
+	0xbb, 0xff, 0xff, 0xff, 0x77, 0xff, 0xff, 0xff,
+	0x77, 0x77, 0xff, 0x77, 0xbb, 0xdd, 0xee, 0xff,
+	0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00,
+	0x00, 0xff, 0xff, 0xcc, 0xcc, 0xcc, 0x33, 0xcc,
+	0xcc, 0xcc, 0x33, 0x33, 0xcc, 0xcc, 0xcc, 0xff,
+	0xff, 0xff, 0xee, 0xff, 0xff, 0xff, 0xee, 0xee,
+	0xff, 0xff, 0xff, 0xdd, 0xff, 0xff, 0xff, 0xdd,
+	0xdd, 0xff, 0xff, 0xff, 0xbb, 0xff, 0xff, 0xff,
+	0xbb, 0xbb, 0xff, 0xff, 0xff, 0x77, 0xff, 0xff,
+	0xff, 0x77, 0x77, 0xff, 0x77, 0xbb, 0xdd, 0xee,
+};
+
+int mmc_send_tuning(struct mmc *mmc, u32 opcode, int *cmd_error)
+{
+	struct mmc_cmd cmd;
+	struct mmc_data data;
+	const u8 *tuning_block_pattern;
+	int size, err;
+
+	if (mmc->bus_width == 8) {
+		tuning_block_pattern = tuning_blk_pattern_8bit;
+		size = sizeof(tuning_blk_pattern_8bit);
+	} else if (mmc->bus_width == 4) {
+		tuning_block_pattern = tuning_blk_pattern_4bit;
+		size = sizeof(tuning_blk_pattern_4bit);
+	} else {
+		return -EINVAL;
+	}
+
+	ALLOC_CACHE_ALIGN_BUFFER(u8, data_buf, size);
+
+	cmd.cmdidx = opcode;
+	cmd.cmdarg = 0;
+	cmd.resp_type = MMC_RSP_R1;
+
+	data.dest = (void *)data_buf;
+	data.blocks = 1;
+	data.blocksize = size;
+	data.flags = MMC_DATA_READ;
+
+	err = mmc_send_cmd(mmc, &cmd, &data);
+	if (err)
+		return err;
+
+	if (memcmp(data_buf, tuning_block_pattern, size))
+		return -EIO;
+
+	return 0;
+}
+#endif
+
+static int mmc_read_blocks(struct mmc *mmc, void *dst, lbaint_t start,
+			   lbaint_t blkcnt)
+{
+	struct mmc_cmd cmd;
+	struct mmc_data data;
+
+	if (blkcnt > 1)
+		cmd.cmdidx = MMC_CMD_READ_MULTIPLE_BLOCK;
+	else
+		cmd.cmdidx = MMC_CMD_READ_SINGLE_BLOCK;
+
+	if (mmc->high_capacity)
+		cmd.cmdarg = start;
+	else
+		cmd.cmdarg = start * mmc->read_bl_len;
+
+	cmd.resp_type = MMC_RSP_R1;
+
+	data.dest = dst;
+	data.blocks = blkcnt;
+	data.blocksize = mmc->read_bl_len;
+	data.flags = MMC_DATA_READ;
+
+	if (mmc_send_cmd(mmc, &cmd, &data))
+		return 0;
+
+	if (blkcnt > 1) {
+		cmd.cmdidx = MMC_CMD_STOP_TRANSMISSION;
+		cmd.cmdarg = 0;
+		cmd.resp_type = MMC_RSP_R1b;
+		if (mmc_send_cmd(mmc, &cmd, NULL)) {
+#if !defined(CONFIG_SPL_BUILD) || defined(CONFIG_SPL_LIBCOMMON_SUPPORT)
+			pr_err("mmc fail to send stop cmd\n");
+#endif
+			return 0;
+		}
+	}
+
+	return blkcnt;
+}
+
+#if CONFIG_IS_ENABLED(BLK)
+ulong mmc_bread(struct udevice *dev, lbaint_t start, lbaint_t blkcnt, void *dst)
+#else
+ulong mmc_bread(struct blk_desc *block_dev, lbaint_t start, lbaint_t blkcnt,
+		void *dst)
+#endif
+{
+#if CONFIG_IS_ENABLED(BLK)
+	struct blk_desc *block_dev = dev_get_uclass_platdata(dev);
+#endif
+	int dev_num = block_dev->devnum;
+	int err;
+	lbaint_t cur, blocks_todo = blkcnt;
+
+	if (blkcnt == 0)
+		return 0;
+
+	struct mmc *mmc = find_mmc_device(dev_num);
+	if (!mmc)
+		return 0;
+
+	if (CONFIG_IS_ENABLED(MMC_TINY))
+		err = mmc_switch_part(mmc, block_dev->hwpart);
+	else
+		err = blk_dselect_hwpart(block_dev, block_dev->hwpart);
+
+	if (err < 0)
+		return 0;
+
+	if ((start + blkcnt) > block_dev->lba) {
+#if !defined(CONFIG_SPL_BUILD) || defined(CONFIG_SPL_LIBCOMMON_SUPPORT)
+		pr_err("MMC: block number 0x" LBAF " exceeds max(0x" LBAF ")\n",
+		       start + blkcnt, block_dev->lba);
+#endif
+		return 0;
+	}
+
+	if (mmc_set_blocklen(mmc, mmc->read_bl_len)) {
+		pr_debug("%s: Failed to set blocklen\n", __func__);
+		return 0;
+	}
+	if (!emmckey_is_access_range_legal(mmc, start, blkcnt))
+		return 0;
+
+	do {
+		cur = (blocks_todo > mmc->cfg->b_max) ?
+			mmc->cfg->b_max : blocks_todo;
+		if (mmc_read_blocks(mmc, dst, start, cur) != cur) {
+			pr_debug("%s: Failed to read blocks\n", __func__);
+			return 0;
+		}
+		blocks_todo -= cur;
+		start += cur;
+		dst += cur * mmc->read_bl_len;
+	} while (blocks_todo > 0);
+
+	return blkcnt;
+}
+
+static int mmc_go_idle(struct mmc *mmc)
+{
+	struct mmc_cmd cmd;
+	int err;
+
+	udelay(1000);
+
+	cmd.cmdidx = MMC_CMD_GO_IDLE_STATE;
+	cmd.cmdarg = 0;
+	cmd.resp_type = MMC_RSP_NONE;
+
+	err = mmc_send_cmd(mmc, &cmd, NULL);
+
+	if (err)
+		return err;
+
+	udelay(2000);
+
+	return 0;
+}
+
+#if CONFIG_IS_ENABLED(MMC_UHS_SUPPORT)
+static int mmc_switch_voltage(struct mmc *mmc, int signal_voltage)
+{
+	struct mmc_cmd cmd;
+	int err = 0;
+
+	/*
+	 * Send CMD11 only if the request is to switch the card to
+	 * 1.8V signalling.
+	 */
+	if (signal_voltage == MMC_SIGNAL_VOLTAGE_330)
+		return mmc_set_signal_voltage(mmc, signal_voltage);
+
+	cmd.cmdidx = SD_CMD_SWITCH_UHS18V;
+	cmd.cmdarg = 0;
+	cmd.resp_type = MMC_RSP_R1;
+
+	err = mmc_send_cmd(mmc, &cmd, NULL);
+	if (err)
+		return err;
+
+	if (!mmc_host_is_spi(mmc) && (cmd.response[0] & MMC_STATUS_ERROR))
+		return -EIO;
+
+	/*
+	 * The card should drive cmd and dat[0:3] low immediately
+	 * after the response of cmd11, but wait 100 us to be sure
+	 */
+	err = mmc_wait_dat0(mmc, 0, 100);
+	if (err == -ENOSYS)
+		udelay(100);
+	else if (err)
+		return -ETIMEDOUT;
+
+	/*
+	 * During a signal voltage level switch, the clock must be gated
+	 * for 5 ms according to the SD spec
+	 */
+	mmc_set_clock(mmc, mmc->clock, MMC_CLK_DISABLE);
+
+	err = mmc_set_signal_voltage(mmc, signal_voltage);
+	if (err)
+		return err;
+
+	/* Keep clock gated for at least 10 ms, though spec only says 5 ms */
+	mdelay(10);
+	mmc_set_clock(mmc, mmc->clock, MMC_CLK_ENABLE);
+
+	/*
+	 * Failure to switch is indicated by the card holding
+	 * dat[0:3] low. Wait for at least 1 ms according to spec
+	 */
+	err = mmc_wait_dat0(mmc, 1, 1000);
+	if (err == -ENOSYS)
+		udelay(1000);
+	else if (err)
+		return -ETIMEDOUT;
+
+	return 0;
+}
+#endif
+
+static int sd_send_op_cond(struct mmc *mmc, bool uhs_en)
+{
+	int timeout = 1000;
+	int err;
+	struct mmc_cmd cmd;
+
+	while (1) {
+		cmd.cmdidx = MMC_CMD_APP_CMD;
+		cmd.resp_type = MMC_RSP_R1;
+		cmd.cmdarg = 0;
+
+		err = mmc_send_cmd(mmc, &cmd, NULL);
+
+		if (err)
+			return err;
+
+		cmd.cmdidx = SD_CMD_APP_SEND_OP_COND;
+		cmd.resp_type = MMC_RSP_R3;
+
+		/*
+		 * Most cards do not answer if some reserved bits
+		 * in the ocr are set. However, Some controller
+		 * can set bit 7 (reserved for low voltages), but
+		 * how to manage low voltages SD card is not yet
+		 * specified.
+		 */
+		cmd.cmdarg = mmc_host_is_spi(mmc) ? 0 :
+			(mmc->cfg->voltages & 0xff8000);
+
+		if (mmc->version == SD_VERSION_2)
+			cmd.cmdarg |= OCR_HCS;
+
+		if (uhs_en)
+			cmd.cmdarg |= OCR_S18R;
+
+		err = mmc_send_cmd(mmc, &cmd, NULL);
+
+		if (err)
+			return err;
+
+		if (cmd.response[0] & OCR_BUSY)
+			break;
+
+		if (timeout-- <= 0)
+			return -EOPNOTSUPP;
+
+		udelay(1000);
+	}
+
+	if (mmc->version != SD_VERSION_2)
+		mmc->version = SD_VERSION_1_0;
+
+	if (mmc_host_is_spi(mmc)) { /* read OCR for spi */
+		cmd.cmdidx = MMC_CMD_SPI_READ_OCR;
+		cmd.resp_type = MMC_RSP_R3;
+		cmd.cmdarg = 0;
+
+		err = mmc_send_cmd(mmc, &cmd, NULL);
+
+		if (err)
+			return err;
+	}
+
+	mmc->ocr = cmd.response[0];
+
+#if CONFIG_IS_ENABLED(MMC_UHS_SUPPORT)
+	if (uhs_en && !(mmc_host_is_spi(mmc)) && (cmd.response[0] & 0x41000000)
+	    == 0x41000000) {
+		err = mmc_switch_voltage(mmc, MMC_SIGNAL_VOLTAGE_180);
+		if (err)
+			return err;
+	}
+#endif
+
+	mmc->high_capacity = ((mmc->ocr & OCR_HCS) == OCR_HCS);
+	mmc->rca = 0;
+
+	return 0;
+}
+
+static int mmc_send_op_cond_iter(struct mmc *mmc, int use_arg)
+{
+	struct mmc_cmd cmd;
+	int err;
+
+	cmd.cmdidx = MMC_CMD_SEND_OP_COND;
+	cmd.resp_type = MMC_RSP_R3;
+	cmd.cmdarg = 0;
+	if (use_arg && !mmc_host_is_spi(mmc))
+		cmd.cmdarg = OCR_HCS |
+			(mmc->cfg->voltages &
+			(mmc->ocr & OCR_VOLTAGE_MASK)) |
+			(mmc->ocr & OCR_ACCESS_MODE);
+
+	err = mmc_send_cmd(mmc, &cmd, NULL);
+	if (err)
+		return err;
+	mmc->ocr = cmd.response[0];
+	return 0;
+}
+
+static int mmc_send_op_cond(struct mmc *mmc)
+{
+	int err, i;
+
+	/* Some cards seem to need this */
+	mmc_go_idle(mmc);
+
+ 	/* Asking to the card its capabilities */
+	for (i = 0; i < 2; i++) {
+		err = mmc_send_op_cond_iter(mmc, i != 0);
+		if (err)
+			return err;
+
+		/* exit if not busy (flag seems to be inverted) */
+		if (mmc->ocr & OCR_BUSY)
+			break;
+	}
+	mmc->op_cond_pending = 1;
+	return 0;
+}
+
+static int mmc_complete_op_cond(struct mmc *mmc)
+{
+	struct mmc_cmd cmd;
+	int timeout = 1000;
+	ulong start;
+	int err;
+
+	mmc->op_cond_pending = 0;
+	if (!(mmc->ocr & OCR_BUSY)) {
+		/* Some cards seem to need this */
+		mmc_go_idle(mmc);
+
+		start = get_timer(0);
+		while (1) {
+			err = mmc_send_op_cond_iter(mmc, 1);
+			if (err)
+				return err;
+			if (mmc->ocr & OCR_BUSY)
+				break;
+			if (get_timer(start) > timeout)
+				return -EOPNOTSUPP;
+			udelay(100);
+		}
+	}
+
+	if (mmc_host_is_spi(mmc)) { /* read OCR for spi */
+		cmd.cmdidx = MMC_CMD_SPI_READ_OCR;
+		cmd.resp_type = MMC_RSP_R3;
+		cmd.cmdarg = 0;
+
+		err = mmc_send_cmd(mmc, &cmd, NULL);
+
+		if (err)
+			return err;
+
+		mmc->ocr = cmd.response[0];
+	}
+
+	mmc->version = MMC_VERSION_UNKNOWN;
+
+	mmc->high_capacity = ((mmc->ocr & OCR_HCS) == OCR_HCS);
+	mmc->rca = 1;
+
+	return 0;
+}
+
+static int mmc_send_ext_csd(struct mmc *mmc, u8 *ext_csd)
+{
+	struct mmc_cmd cmd;
+	struct mmc_data data;
+	int err;
+
+	/* Get the Card Status Register */
+	cmd.cmdidx = MMC_CMD_SEND_EXT_CSD;
+	cmd.resp_type = MMC_RSP_R1;
+	cmd.cmdarg = 0;
+
+	data.dest = (char *)ext_csd;
+	data.blocks = 1;
+	data.blocksize = MMC_MAX_BLOCK_LEN;
+	data.flags = MMC_DATA_READ;
+
+	err = mmc_send_cmd(mmc, &cmd, &data);
+
+	return err;
+}
+
+int mmc_get_ext_csd(struct mmc *mmc, u8 *ext_csd)
+{
+	return mmc_send_ext_csd(mmc, ext_csd);
+}
+
+int mmc_switch(struct mmc *mmc, u8 set, u8 index, u8 value)
+{
+	struct mmc_cmd cmd;
+	int timeout = 1000;
+	int retries = 3;
+	int ret;
+
+	cmd.cmdidx = MMC_CMD_SWITCH;
+	cmd.resp_type = MMC_RSP_R1b;
+	cmd.cmdarg = (MMC_SWITCH_MODE_WRITE_BYTE << 24) |
+				 (index << 16) |
+				 (value << 8);
+
+	while (retries > 0) {
+		ret = mmc_send_cmd(mmc, &cmd, NULL);
+
+		/* Waiting for the ready status */
+		if (!ret) {
+			ret = mmc_send_status(mmc, timeout);
+			return ret;
+		}
+
+		retries--;
+	}
+
+	return ret;
+
+}
+
+#if !CONFIG_IS_ENABLED(MMC_TINY)
+u8 ext_csd_w[] = {191, 187, 185, 183, 179, 178, 177, 175,
+					173, 171, 169, 167, 165, 164, 163, 162,
+					161, 156, 155, 143, 140, 136, 134, 133,
+					132, 131, 62, 59, 56, 52, 37, 34,
+					33, 32, 31, 30, 29, 22, 17, 16, 15};
+
+int mmc_set_ext_csd(struct mmc *mmc, u8 index, u8 value)
+{
+	int ret = -21, i;
+
+	for (i = 0; i < sizeof(ext_csd_w); i++) {
+		if (ext_csd_w[i] == index)
+			break;
+	}
+	if (i != sizeof(ext_csd_w))
+		ret = mmc_switch(mmc, EXT_CSD_CMD_SET_NORMAL, index, value);
+
+	return ret;
+}
+
+static int mmc_set_card_speed(struct mmc *mmc, enum bus_mode mode)
+{
+	int err;
+	int speed_bits;
+
+	ALLOC_CACHE_ALIGN_BUFFER(u8, test_csd, MMC_MAX_BLOCK_LEN);
+
+	switch (mode) {
+	case MMC_HS:
+	case MMC_HS_52:
+	case MMC_DDR_52:
+		speed_bits = EXT_CSD_TIMING_HS;
+		break;
+#if CONFIG_IS_ENABLED(MMC_HS200_SUPPORT)
+	case MMC_HS_200:
+		speed_bits = EXT_CSD_TIMING_HS200;
+		break;
+#endif
+#if CONFIG_IS_ENABLED(MMC_HS400_SUPPORT)
+	case MMC_HS_400:
+		speed_bits = EXT_CSD_TIMING_HS400;
+		break;
+#endif
+	case MMC_LEGACY:
+		speed_bits = EXT_CSD_TIMING_LEGACY;
+		break;
+	default:
+		return -EINVAL;
+	}
+	err = mmc_switch(mmc, EXT_CSD_CMD_SET_NORMAL, EXT_CSD_HS_TIMING,
+			 speed_bits);
+	if (err)
+		return err;
+
+	if ((mode == MMC_HS) || (mode == MMC_HS_52)) {
+		/* Now check to see that it worked */
+		err = mmc_send_ext_csd(mmc, test_csd);
+		if (err)
+			return err;
+
+		/* No high-speed support */
+		if (!test_csd[EXT_CSD_HS_TIMING])
+			return -ENOTSUPP;
+	}
+
+	return 0;
+}
+
+static int mmc_get_capabilities(struct mmc *mmc)
+{
+	u8 *ext_csd = mmc->ext_csd;
+	char cardtype;
+
+	mmc->card_caps = MMC_MODE_1BIT | MMC_CAP(MMC_LEGACY);
+
+	if (mmc_host_is_spi(mmc))
+		return 0;
+
+	/* Only version 4 supports high-speed */
+	if (mmc->version < MMC_VERSION_4)
+		return 0;
+
+	if (!ext_csd) {
+		pr_err("No ext_csd found!\n"); /* this should enver happen */
+		return -ENOTSUPP;
+	}
+
+	mmc->card_caps |= MMC_MODE_4BIT | MMC_MODE_8BIT;
+
+	cardtype = ext_csd[EXT_CSD_CARD_TYPE];
+	mmc->cardtype = cardtype;
+
+#if CONFIG_IS_ENABLED(MMC_HS200_SUPPORT)
+	if (cardtype & (EXT_CSD_CARD_TYPE_HS200_1_2V |
+			EXT_CSD_CARD_TYPE_HS200_1_8V)) {
+		mmc->card_caps |= MMC_MODE_HS200;
+	}
+#endif
+#if CONFIG_IS_ENABLED(MMC_HS400_SUPPORT)
+	if (cardtype & (EXT_CSD_CARD_TYPE_HS400_1_2V |
+			EXT_CSD_CARD_TYPE_HS400_1_8V)) {
+		mmc->card_caps |= MMC_MODE_HS400;
+	}
+#endif
+	if (cardtype & EXT_CSD_CARD_TYPE_52) {
+		if (cardtype & EXT_CSD_CARD_TYPE_DDR_52)
+			mmc->card_caps |= MMC_MODE_DDR_52MHz;
+		mmc->card_caps |= MMC_MODE_HS_52MHz;
+	}
+	if (cardtype & EXT_CSD_CARD_TYPE_26)
+		mmc->card_caps |= MMC_MODE_HS;
+
+	return 0;
+}
+#endif
+
+static int mmc_set_capacity(struct mmc *mmc, int part_num)
+{
+	switch (part_num) {
+	case 0:
+		mmc->capacity = mmc->capacity_user;
+		break;
+	case 1:
+	case 2:
+		mmc->capacity = mmc->capacity_boot;
+		break;
+	case 3:
+		mmc->capacity = mmc->capacity_rpmb;
+		break;
+	case 4:
+	case 5:
+	case 6:
+	case 7:
+		mmc->capacity = mmc->capacity_gp[part_num - 4];
+		break;
+	default:
+		return -1;
+	}
+
+	mmc_get_blk_desc(mmc)->lba = lldiv(mmc->capacity, mmc->read_bl_len);
+
+	return 0;
+}
+
+int mmc_switch_part(struct mmc *mmc, unsigned int part_num)
+{
+	int ret;
+
+	ret = mmc_switch(mmc, EXT_CSD_CMD_SET_NORMAL, EXT_CSD_PART_CONF,
+			 (mmc->part_config & ~PART_ACCESS_MASK)
+			 | (part_num & PART_ACCESS_MASK));
+
+	/*
+	 * Set the capacity if the switch succeeded or was intended
+	 * to return to representing the raw device.
+	 */
+	if ((ret == 0) || ((ret == -ENODEV) && (part_num == 0))) {
+		ret = mmc_set_capacity(mmc, part_num);
+		mmc_get_blk_desc(mmc)->hwpart = part_num;
+	}
+
+	return ret;
+}
+
+#if CONFIG_IS_ENABLED(MMC_HW_PARTITIONING)
+int mmc_hwpart_config(struct mmc *mmc,
+		      const struct mmc_hwpart_conf *conf,
+		      enum mmc_hwpart_conf_mode mode)
+{
+	u8 part_attrs = 0;
+	u32 enh_size_mult;
+	u32 enh_start_addr;
+	u32 gp_size_mult[4];
+	u32 max_enh_size_mult;
+	u32 tot_enh_size_mult = 0;
+	u8 wr_rel_set;
+	int i, pidx, err;
+	ALLOC_CACHE_ALIGN_BUFFER(u8, ext_csd, MMC_MAX_BLOCK_LEN);
+
+	if (mode < MMC_HWPART_CONF_CHECK || mode > MMC_HWPART_CONF_COMPLETE)
+		return -EINVAL;
+
+	if (IS_SD(mmc) || (mmc->version < MMC_VERSION_4_41)) {
+		pr_err("eMMC >= 4.4 required for enhanced user data area\n");
+		return -EMEDIUMTYPE;
+	}
+
+	if (!(mmc->part_support & PART_SUPPORT)) {
+		pr_err("Card does not support partitioning\n");
+		return -EMEDIUMTYPE;
+	}
+
+	if (!mmc->hc_wp_grp_size) {
+		pr_err("Card does not define HC WP group size\n");
+		return -EMEDIUMTYPE;
+	}
+
+	/* check partition alignment and total enhanced size */
+	if (conf->user.enh_size) {
+		if (conf->user.enh_size % mmc->hc_wp_grp_size ||
+		    conf->user.enh_start % mmc->hc_wp_grp_size) {
+			pr_err("User data enhanced area not HC WP group "
+			       "size aligned\n");
+			return -EINVAL;
+		}
+		part_attrs |= EXT_CSD_ENH_USR;
+		enh_size_mult = conf->user.enh_size / mmc->hc_wp_grp_size;
+		if (mmc->high_capacity) {
+			enh_start_addr = conf->user.enh_start;
+		} else {
+			enh_start_addr = (conf->user.enh_start << 9);
+		}
+	} else {
+		enh_size_mult = 0;
+		enh_start_addr = 0;
+	}
+	tot_enh_size_mult += enh_size_mult;
+
+	for (pidx = 0; pidx < 4; pidx++) {
+		if (conf->gp_part[pidx].size % mmc->hc_wp_grp_size) {
+			pr_err("GP%i partition not HC WP group size "
+			       "aligned\n", pidx+1);
+			return -EINVAL;
+		}
+		gp_size_mult[pidx] = conf->gp_part[pidx].size / mmc->hc_wp_grp_size;
+		if (conf->gp_part[pidx].size && conf->gp_part[pidx].enhanced) {
+			part_attrs |= EXT_CSD_ENH_GP(pidx);
+			tot_enh_size_mult += gp_size_mult[pidx];
+		}
+	}
+
+	if (part_attrs && ! (mmc->part_support & ENHNCD_SUPPORT)) {
+		pr_err("Card does not support enhanced attribute\n");
+		return -EMEDIUMTYPE;
+	}
+
+	err = mmc_send_ext_csd(mmc, ext_csd);
+	if (err)
+		return err;
+
+	max_enh_size_mult =
+		(ext_csd[EXT_CSD_MAX_ENH_SIZE_MULT+2] << 16) +
+		(ext_csd[EXT_CSD_MAX_ENH_SIZE_MULT+1] << 8) +
+		ext_csd[EXT_CSD_MAX_ENH_SIZE_MULT];
+	if (tot_enh_size_mult > max_enh_size_mult) {
+		pr_err("Total enhanced size exceeds maximum (%u > %u)\n",
+		       tot_enh_size_mult, max_enh_size_mult);
+		return -EMEDIUMTYPE;
+	}
+
+	/* The default value of EXT_CSD_WR_REL_SET is device
+	 * dependent, the values can only be changed if the
+	 * EXT_CSD_HS_CTRL_REL bit is set. The values can be
+	 * changed only once and before partitioning is completed. */
+	wr_rel_set = ext_csd[EXT_CSD_WR_REL_SET];
+	if (conf->user.wr_rel_change) {
+		if (conf->user.wr_rel_set)
+			wr_rel_set |= EXT_CSD_WR_DATA_REL_USR;
+		else
+			wr_rel_set &= ~EXT_CSD_WR_DATA_REL_USR;
+	}
+	for (pidx = 0; pidx < 4; pidx++) {
+		if (conf->gp_part[pidx].wr_rel_change) {
+			if (conf->gp_part[pidx].wr_rel_set)
+				wr_rel_set |= EXT_CSD_WR_DATA_REL_GP(pidx);
+			else
+				wr_rel_set &= ~EXT_CSD_WR_DATA_REL_GP(pidx);
+		}
+	}
+
+	if (wr_rel_set != ext_csd[EXT_CSD_WR_REL_SET] &&
+	    !(ext_csd[EXT_CSD_WR_REL_PARAM] & EXT_CSD_HS_CTRL_REL)) {
+		puts("Card does not support host controlled partition write "
+		     "reliability settings\n");
+		return -EMEDIUMTYPE;
+	}
+
+	if (ext_csd[EXT_CSD_PARTITION_SETTING] &
+	    EXT_CSD_PARTITION_SETTING_COMPLETED) {
+		pr_err("Card already partitioned\n");
+		return -EPERM;
+	}
+
+	if (mode == MMC_HWPART_CONF_CHECK)
+		return 0;
+
+	/* Partitioning requires high-capacity size definitions */
+	if (!(ext_csd[EXT_CSD_ERASE_GROUP_DEF] & 0x01)) {
+		err = mmc_switch(mmc, EXT_CSD_CMD_SET_NORMAL,
+				 EXT_CSD_ERASE_GROUP_DEF, 1);
+
+		if (err)
+			return err;
+
+		ext_csd[EXT_CSD_ERASE_GROUP_DEF] = 1;
+
+		/* update erase group size to be high-capacity */
+		mmc->erase_grp_size =
+			ext_csd[EXT_CSD_HC_ERASE_GRP_SIZE] * 1024;
+	}
+
+	/* all OK, write the configuration */
+	for (i = 0; i < 4; i++) {
+		err = mmc_switch(mmc, EXT_CSD_CMD_SET_NORMAL,
+				 EXT_CSD_ENH_START_ADDR+i,
+				 (enh_start_addr >> (i*8)) & 0xFF);
+		if (err)
+			return err;
+	}
+	for (i = 0; i < 3; i++) {
+		err = mmc_switch(mmc, EXT_CSD_CMD_SET_NORMAL,
+				 EXT_CSD_ENH_SIZE_MULT+i,
+				 (enh_size_mult >> (i*8)) & 0xFF);
+		if (err)
+			return err;
+	}
+	for (pidx = 0; pidx < 4; pidx++) {
+		for (i = 0; i < 3; i++) {
+			err = mmc_switch(mmc, EXT_CSD_CMD_SET_NORMAL,
+					 EXT_CSD_GP_SIZE_MULT+pidx*3+i,
+					 (gp_size_mult[pidx] >> (i*8)) & 0xFF);
+			if (err)
+				return err;
+		}
+	}
+	err = mmc_switch(mmc, EXT_CSD_CMD_SET_NORMAL,
+			 EXT_CSD_PARTITIONS_ATTRIBUTE, part_attrs);
+	if (err)
+		return err;
+
+	if (mode == MMC_HWPART_CONF_SET)
+		return 0;
+
+	/* The WR_REL_SET is a write-once register but shall be
+	 * written before setting PART_SETTING_COMPLETED. As it is
+	 * write-once we can only write it when completing the
+	 * partitioning. */
+	if (wr_rel_set != ext_csd[EXT_CSD_WR_REL_SET]) {
+		err = mmc_switch(mmc, EXT_CSD_CMD_SET_NORMAL,
+				 EXT_CSD_WR_REL_SET, wr_rel_set);
+		if (err)
+			return err;
+	}
+
+	/* Setting PART_SETTING_COMPLETED confirms the partition
+	 * configuration but it only becomes effective after power
+	 * cycle, so we do not adjust the partition related settings
+	 * in the mmc struct. */
+
+	err = mmc_switch(mmc, EXT_CSD_CMD_SET_NORMAL,
+			 EXT_CSD_PARTITION_SETTING,
+			 EXT_CSD_PARTITION_SETTING_COMPLETED);
+	if (err)
+		return err;
+
+	return 0;
+}
+#endif
+
+#if !CONFIG_IS_ENABLED(DM_MMC)
+int mmc_getcd(struct mmc *mmc)
+{
+	int cd;
+
+	cd = board_mmc_getcd(mmc);
+
+	if (cd < 0) {
+		if (mmc->cfg->ops->getcd)
+			cd = mmc->cfg->ops->getcd(mmc);
+		else
+			cd = 1;
+	}
+
+	return cd;
+}
+#endif
+
+#if !CONFIG_IS_ENABLED(MMC_TINY)
+static int sd_switch(struct mmc *mmc, int mode, int group, u8 value, u8 *resp)
+{
+	struct mmc_cmd cmd;
+	struct mmc_data data;
+
+	/* Switch the frequency */
+	cmd.cmdidx = SD_CMD_SWITCH_FUNC;
+	cmd.resp_type = MMC_RSP_R1;
+	cmd.cmdarg = (mode << 31) | 0xffffff;
+	cmd.cmdarg &= ~(0xf << (group * 4));
+	cmd.cmdarg |= value << (group * 4);
+
+	data.dest = (char *)resp;
+	data.blocksize = 64;
+	data.blocks = 1;
+	data.flags = MMC_DATA_READ;
+
+	return mmc_send_cmd(mmc, &cmd, &data);
+}
+
+static int sd_get_capabilities(struct mmc *mmc)
+{
+	int err;
+	struct mmc_cmd cmd;
+	ALLOC_CACHE_ALIGN_BUFFER(__be32, scr, 2);
+	ALLOC_CACHE_ALIGN_BUFFER(__be32, switch_status, 16);
+	struct mmc_data data;
+	int timeout;
+#if CONFIG_IS_ENABLED(MMC_UHS_SUPPORT)
+	u32 sd3_bus_mode;
+#endif
+
+	mmc->card_caps = MMC_MODE_1BIT | MMC_CAP(SD_LEGACY);
+
+	if (mmc_host_is_spi(mmc))
+		return 0;
+
+	/* Read the SCR to find out if this card supports higher speeds */
+	cmd.cmdidx = MMC_CMD_APP_CMD;
+	cmd.resp_type = MMC_RSP_R1;
+	cmd.cmdarg = mmc->rca << 16;
+
+	err = mmc_send_cmd(mmc, &cmd, NULL);
+
+	if (err)
+		return err;
+
+	cmd.cmdidx = SD_CMD_APP_SEND_SCR;
+	cmd.resp_type = MMC_RSP_R1;
+	cmd.cmdarg = 0;
+
+	timeout = 3;
+
+retry_scr:
+	data.dest = (char *)scr;
+	data.blocksize = 8;
+	data.blocks = 1;
+	data.flags = MMC_DATA_READ;
+
+	err = mmc_send_cmd(mmc, &cmd, &data);
+
+	if (err) {
+		if (timeout--)
+			goto retry_scr;
+
+		return err;
+	}
+
+	mmc->scr[0] = __be32_to_cpu(scr[0]);
+	mmc->scr[1] = __be32_to_cpu(scr[1]);
+
+	switch ((mmc->scr[0] >> 24) & 0xf) {
+	case 0:
+		mmc->version = SD_VERSION_1_0;
+		break;
+	case 1:
+		mmc->version = SD_VERSION_1_10;
+		break;
+	case 2:
+		mmc->version = SD_VERSION_2;
+		if ((mmc->scr[0] >> 15) & 0x1)
+			mmc->version = SD_VERSION_3;
+		break;
+	default:
+		mmc->version = SD_VERSION_1_0;
+		break;
+	}
+
+	if (mmc->scr[0] & SD_DATA_4BIT)
+		mmc->card_caps |= MMC_MODE_4BIT;
+
+	/* Version 1.0 doesn't support switching */
+	if (mmc->version == SD_VERSION_1_0)
+		return 0;
+
+	timeout = 4;
+	while (timeout--) {
+		err = sd_switch(mmc, SD_SWITCH_CHECK, 0, 1,
+				(u8 *)switch_status);
+
+		if (err)
+			return err;
+
+		/* The high-speed function is busy.  Try again */
+		if (!(__be32_to_cpu(switch_status[7]) & SD_HIGHSPEED_BUSY))
+			break;
+	}
+
+	/* If high-speed isn't supported, we return */
+	if (__be32_to_cpu(switch_status[3]) & SD_HIGHSPEED_SUPPORTED)
+		mmc->card_caps |= MMC_CAP(SD_HS);
+
+#if CONFIG_IS_ENABLED(MMC_UHS_SUPPORT)
+	/* Version before 3.0 don't support UHS modes */
+	if (mmc->version < SD_VERSION_3)
+		return 0;
+
+	sd3_bus_mode = __be32_to_cpu(switch_status[3]) >> 16 & 0x1f;
+	if (sd3_bus_mode & SD_MODE_UHS_SDR104)
+		mmc->card_caps |= MMC_CAP(UHS_SDR104);
+	if (sd3_bus_mode & SD_MODE_UHS_SDR50)
+		mmc->card_caps |= MMC_CAP(UHS_SDR50);
+	if (sd3_bus_mode & SD_MODE_UHS_SDR25)
+		mmc->card_caps |= MMC_CAP(UHS_SDR25);
+	if (sd3_bus_mode & SD_MODE_UHS_SDR12)
+		mmc->card_caps |= MMC_CAP(UHS_SDR12);
+	if (sd3_bus_mode & SD_MODE_UHS_DDR50)
+		mmc->card_caps |= MMC_CAP(UHS_DDR50);
+#endif
+
+	return 0;
+}
+
+static int sd_set_card_speed(struct mmc *mmc, enum bus_mode mode)
+{
+	int err;
+
+	ALLOC_CACHE_ALIGN_BUFFER(uint, switch_status, 16);
+	int speed;
+
+	/* SD version 1.00 and 1.01 does not support CMD 6 */
+	if (mmc->version == SD_VERSION_1_0)
+		return 0;
+
+	switch (mode) {
+	case SD_LEGACY:
+		speed = UHS_SDR12_BUS_SPEED;
+		break;
+	case SD_HS:
+		speed = HIGH_SPEED_BUS_SPEED;
+		break;
+#if CONFIG_IS_ENABLED(MMC_UHS_SUPPORT)
+	case UHS_SDR12:
+		speed = UHS_SDR12_BUS_SPEED;
+		break;
+	case UHS_SDR25:
+		speed = UHS_SDR25_BUS_SPEED;
+		break;
+	case UHS_SDR50:
+		speed = UHS_SDR50_BUS_SPEED;
+		break;
+	case UHS_DDR50:
+		speed = UHS_DDR50_BUS_SPEED;
+		break;
+	case UHS_SDR104:
+		speed = UHS_SDR104_BUS_SPEED;
+		break;
+#endif
+	default:
+		return -EINVAL;
+	}
+
+	err = sd_switch(mmc, SD_SWITCH_SWITCH, 0, speed, (u8 *)switch_status);
+	if (err)
+		return err;
+
+	if (((__be32_to_cpu(switch_status[4]) >> 24) & 0xF) != speed)
+		return -ENOTSUPP;
+
+	return 0;
+}
+
+static int sd_select_bus_width(struct mmc *mmc, int w)
+{
+	int err;
+	struct mmc_cmd cmd;
+
+	if ((w != 4) && (w != 1))
+		return -EINVAL;
+
+	cmd.cmdidx = MMC_CMD_APP_CMD;
+	cmd.resp_type = MMC_RSP_R1;
+	cmd.cmdarg = mmc->rca << 16;
+
+	err = mmc_send_cmd(mmc, &cmd, NULL);
+	if (err)
+		return err;
+
+	cmd.cmdidx = SD_CMD_APP_SET_BUS_WIDTH;
+	cmd.resp_type = MMC_RSP_R1;
+	if (w == 4)
+		cmd.cmdarg = 2;
+	else if (w == 1)
+		cmd.cmdarg = 0;
+	err = mmc_send_cmd(mmc, &cmd, NULL);
+	if (err)
+		return err;
+
+	return 0;
+}
+#endif
+
+#if CONFIG_IS_ENABLED(MMC_WRITE)
+static int sd_read_ssr(struct mmc *mmc)
+{
+	static const unsigned int sd_au_size[] = {
+		0,		SZ_16K / 512,		SZ_32K / 512,
+		SZ_64K / 512,	SZ_128K / 512,		SZ_256K / 512,
+		SZ_512K / 512,	SZ_1M / 512,		SZ_2M / 512,
+		SZ_4M / 512,	SZ_8M / 512,		(SZ_8M + SZ_4M) / 512,
+		SZ_16M / 512,	(SZ_16M + SZ_8M) / 512,	SZ_32M / 512,
+		SZ_64M / 512,
+	};
+	int err, i;
+	struct mmc_cmd cmd;
+	ALLOC_CACHE_ALIGN_BUFFER(uint, ssr, 16);
+	struct mmc_data data;
+	int timeout = 3;
+	unsigned int au, eo, et, es;
+
+	cmd.cmdidx = MMC_CMD_APP_CMD;
+	cmd.resp_type = MMC_RSP_R1;
+	cmd.cmdarg = mmc->rca << 16;
+
+	err = mmc_send_cmd(mmc, &cmd, NULL);
+	if (err)
+		return err;
+
+	cmd.cmdidx = SD_CMD_APP_SD_STATUS;
+	cmd.resp_type = MMC_RSP_R1;
+	cmd.cmdarg = 0;
+
+retry_ssr:
+	data.dest = (char *)ssr;
+	data.blocksize = 64;
+	data.blocks = 1;
+	data.flags = MMC_DATA_READ;
+
+	err = mmc_send_cmd(mmc, &cmd, &data);
+	if (err) {
+		if (timeout--)
+			goto retry_ssr;
+
+		return err;
+	}
+
+	for (i = 0; i < 16; i++)
+		ssr[i] = be32_to_cpu(ssr[i]);
+
+	au = (ssr[2] >> 12) & 0xF;
+	if ((au <= 9) || (mmc->version == SD_VERSION_3)) {
+		mmc->ssr.au = sd_au_size[au];
+		es = (ssr[3] >> 24) & 0xFF;
+		es |= (ssr[2] & 0xFF) << 8;
+		et = (ssr[3] >> 18) & 0x3F;
+		if (es && et) {
+			eo = (ssr[3] >> 16) & 0x3;
+			mmc->ssr.erase_timeout = (et * 1000) / es;
+			mmc->ssr.erase_offset = eo * 1000;
+		}
+	} else {
+		pr_debug("Invalid Allocation Unit Size.\n");
+	}
+
+	return 0;
+}
+#endif
+/* frequency bases */
+/* divided by 10 to be nice to platforms without floating point */
+static const int fbase[] = {
+	10000,
+	100000,
+	1000000,
+	10000000,
+};
+
+/* Multiplier values for TRAN_SPEED.  Multiplied by 10 to be nice
+ * to platforms without floating point.
+ */
+static const u8 multipliers[] = {
+	0,	/* reserved */
+	10,
+	12,
+	13,
+	15,
+	20,
+	25,
+	30,
+	35,
+	40,
+	45,
+	50,
+	55,
+	60,
+	70,
+	80,
+};
+
+static inline int bus_width(uint cap)
+{
+	if (cap == MMC_MODE_8BIT)
+		return 8;
+	if (cap == MMC_MODE_4BIT)
+		return 4;
+	if (cap == MMC_MODE_1BIT)
+		return 1;
+	pr_warn("invalid bus witdh capability 0x%x\n", cap);
+	return 0;
+}
+
+#if !CONFIG_IS_ENABLED(DM_MMC)
+#ifdef MMC_SUPPORTS_TUNING
+static int mmc_execute_tuning(struct mmc *mmc, uint opcode)
+{
+	return -ENOTSUPP;
+}
+#endif
+
+static void mmc_send_init_stream(struct mmc *mmc)
+{
+}
+
+static int mmc_set_ios(struct mmc *mmc)
+{
+	int ret = 0;
+
+	if (mmc->cfg->ops->set_ios)
+		ret = mmc->cfg->ops->set_ios(mmc);
+
+	return ret;
+}
+#endif
+
+int mmc_set_clock(struct mmc *mmc, uint clock, bool disable)
+{
+	if (!disable) {
+		if (clock > mmc->cfg->f_max)
+			clock = mmc->cfg->f_max;
+
+		if (clock < mmc->cfg->f_min)
+			clock = mmc->cfg->f_min;
+	}
+
+	mmc->clock = clock;
+	mmc->clk_disable = disable;
+
+	pr_debug("clock is %s (%dHz)\n",
+			disable ? "disabled" : "enabled", clock);
+
+	return mmc_set_ios(mmc);
+}
+
+static int mmc_set_bus_width(struct mmc *mmc, uint width)
+{
+	mmc->bus_width = width;
+
+	return mmc_set_ios(mmc);
+}
+
+#if CONFIG_IS_ENABLED(MMC_VERBOSE) || defined(DEBUG)
+/*
+ * helper function to display the capabilities in a human
+ * friendly manner. The capabilities include bus width and
+ * supported modes.
+ */
+void mmc_dump_capabilities(const char *text, uint caps)
+{
+	enum bus_mode mode;
+
+	pr_debug("%s: widths [", text);
+	if (caps & MMC_MODE_8BIT)
+		pr_debug("8, ");
+	if (caps & MMC_MODE_4BIT)
+		pr_debug("4, ");
+	if (caps & MMC_MODE_1BIT)
+		pr_debug("1, ");
+	pr_debug("\b\b] modes [");
+	for (mode = MMC_LEGACY; mode < MMC_MODES_END; mode++)
+		if (MMC_CAP(mode) & caps)
+			pr_debug("%s, ", mmc_mode_name(mode));
+	pr_debug("\b\b]\n");
+}
+#endif
+
+struct mode_width_tuning {
+	enum bus_mode mode;
+	uint widths;
+#ifdef MMC_SUPPORTS_TUNING
+	uint tuning;
+#endif
+};
+
+#if CONFIG_IS_ENABLED(MMC_IO_VOLTAGE)
+int mmc_voltage_to_mv(enum mmc_voltage voltage)
+{
+	switch (voltage) {
+	case MMC_SIGNAL_VOLTAGE_000: return 0;
+	case MMC_SIGNAL_VOLTAGE_330: return 3300;
+	case MMC_SIGNAL_VOLTAGE_180: return 1800;
+	case MMC_SIGNAL_VOLTAGE_120: return 1200;
+	}
+	return -EINVAL;
+}
+
+static int mmc_set_signal_voltage(struct mmc *mmc, uint signal_voltage)
+{
+	int err;
+
+	if (mmc->signal_voltage == signal_voltage)
+		return 0;
+
+	mmc->signal_voltage = signal_voltage;
+	err = mmc_set_ios(mmc);
+	if (err)
+		pr_debug("unable to set voltage (err %d)\n", err);
+
+	return err;
+}
+#else
+static inline int mmc_set_signal_voltage(struct mmc *mmc, uint signal_voltage)
+{
+	return 0;
+}
+#endif
+
+#if !CONFIG_IS_ENABLED(MMC_TINY)
+static const struct mode_width_tuning sd_modes_by_pref[] = {
+#if CONFIG_IS_ENABLED(MMC_UHS_SUPPORT)
+#ifdef MMC_SUPPORTS_TUNING
+	{
+		.mode = UHS_SDR104,
+		.widths = MMC_MODE_4BIT | MMC_MODE_1BIT,
+		.tuning = MMC_CMD_SEND_TUNING_BLOCK
+	},
+#endif
+	{
+		.mode = UHS_SDR50,
+		.widths = MMC_MODE_4BIT | MMC_MODE_1BIT,
+	},
+	{
+		.mode = UHS_DDR50,
+		.widths = MMC_MODE_4BIT | MMC_MODE_1BIT,
+	},
+	{
+		.mode = UHS_SDR25,
+		.widths = MMC_MODE_4BIT | MMC_MODE_1BIT,
+	},
+#endif
+	{
+		.mode = SD_HS,
+		.widths = MMC_MODE_4BIT | MMC_MODE_1BIT,
+#ifdef MMC_SUPPORTS_TUNING
+		.tuning = MMC_SD_HS_TUNING
+#endif
+	},
+#if CONFIG_IS_ENABLED(MMC_UHS_SUPPORT)
+	{
+		.mode = UHS_SDR12,
+		.widths = MMC_MODE_4BIT | MMC_MODE_1BIT,
+	},
+#endif
+	{
+		.mode = SD_LEGACY,
+		.widths = MMC_MODE_4BIT | MMC_MODE_1BIT,
+	}
+};
+
+#define for_each_sd_mode_by_pref(caps, mwt) \
+	for (mwt = sd_modes_by_pref;\
+	     mwt < sd_modes_by_pref + ARRAY_SIZE(sd_modes_by_pref);\
+	     mwt++) \
+		if (caps & MMC_CAP(mwt->mode))
+
+static int sd_select_mode_and_width(struct mmc *mmc, uint card_caps)
+{
+	int err;
+	uint widths[] = {MMC_MODE_4BIT, MMC_MODE_1BIT};
+	const struct mode_width_tuning *mwt;
+#if CONFIG_IS_ENABLED(MMC_UHS_SUPPORT)
+	bool uhs_en = (mmc->ocr & OCR_S18R) ? true : false;
+#else
+	bool uhs_en = false;
+#endif
+	uint caps;
+
+#ifdef DEBUG
+	mmc_dump_capabilities("sd card", card_caps);
+	mmc_dump_capabilities("host", mmc->host_caps);
+#endif
+
+	/* Restrict card's capabilities by what the host can do */
+	caps = card_caps & mmc->host_caps;
+
+	if (!uhs_en)
+		caps &= ~UHS_CAPS;
+
+	for_each_sd_mode_by_pref(caps, mwt) {
+		uint *w;
+
+		for (w = widths; w < widths + ARRAY_SIZE(widths); w++) {
+			if (*w & caps & mwt->widths) {
+				pr_debug("trying mode %s width %d (at %d MHz)\n",
+					 mmc_mode_name(mwt->mode),
+					 bus_width(*w),
+					 mmc_mode2freq(mmc, mwt->mode) / 1000000);
+
+				/* configure the bus width (card + host) */
+				err = sd_select_bus_width(mmc, bus_width(*w));
+				if (err)
+					goto error;
+				mmc_set_bus_width(mmc, bus_width(*w));
+
+				/* configure the bus mode (card) */
+				err = sd_set_card_speed(mmc, mwt->mode);
+				if (err)
+					goto error;
+
+				/* configure the bus mode (host) */
+				mmc_select_mode(mmc, mwt->mode);
+				mmc_set_clock(mmc, mmc->tran_speed,
+						MMC_CLK_ENABLE);
+
+#ifdef MMC_SUPPORTS_TUNING
+				/* execute tuning if needed */
+				if (mwt->tuning && !mmc_host_is_spi(mmc)) {
+					err = mmc_execute_tuning(mmc,
+								 mwt->tuning);
+					if (err) {
+						pr_debug("tuning failed\n");
+						goto error;
+					}
+				}
+#endif
+
+#if CONFIG_IS_ENABLED(MMC_WRITE)
+				err = sd_read_ssr(mmc);
+				if (err)
+					pr_warn("unable to read ssr\n");
+#endif
+				if (!err)
+					return 0;
+
+error:
+				/* revert to a safer bus speed */
+				mmc_select_mode(mmc, SD_LEGACY);
+				mmc_set_clock(mmc, mmc->tran_speed,
+						MMC_CLK_ENABLE);
+			}
+		}
+	}
+
+	pr_err("unable to select a mode\n");
+	return -ENOTSUPP;
+}
+
+/*
+ * read the compare the part of ext csd that is constant.
+ * This can be used to check that the transfer is working
+ * as expected.
+ */
+static int mmc_read_and_compare_ext_csd(struct mmc *mmc)
+{
+	int err;
+	const u8 *ext_csd = mmc->ext_csd;
+	ALLOC_CACHE_ALIGN_BUFFER(u8, test_csd, MMC_MAX_BLOCK_LEN);
+
+	if (mmc->version < MMC_VERSION_4)
+		return 0;
+
+	err = mmc_send_ext_csd(mmc, test_csd);
+	if (err)
+		return err;
+
+	/* Only compare read only fields */
+	if (ext_csd[EXT_CSD_PARTITIONING_SUPPORT]
+		== test_csd[EXT_CSD_PARTITIONING_SUPPORT] &&
+	    ext_csd[EXT_CSD_HC_WP_GRP_SIZE]
+		== test_csd[EXT_CSD_HC_WP_GRP_SIZE] &&
+	    ext_csd[EXT_CSD_REV]
+		== test_csd[EXT_CSD_REV] &&
+	    ext_csd[EXT_CSD_HC_ERASE_GRP_SIZE]
+		== test_csd[EXT_CSD_HC_ERASE_GRP_SIZE] &&
+	    memcmp(&ext_csd[EXT_CSD_SEC_CNT],
+		   &test_csd[EXT_CSD_SEC_CNT], 4) == 0)
+		return 0;
+
+	return -EBADMSG;
+}
+
+#if CONFIG_IS_ENABLED(MMC_IO_VOLTAGE)
+static int mmc_set_lowest_voltage(struct mmc *mmc, enum bus_mode mode,
+				  uint32_t allowed_mask)
+{
+	u32 card_mask = 0;
+
+	switch (mode) {
+	case MMC_HS_400:
+	case MMC_HS_200:
+		if (mmc->cardtype & (EXT_CSD_CARD_TYPE_HS200_1_8V |
+		    EXT_CSD_CARD_TYPE_HS400_1_8V))
+			card_mask |= MMC_SIGNAL_VOLTAGE_180;
+		if (mmc->cardtype & (EXT_CSD_CARD_TYPE_HS200_1_2V |
+		    EXT_CSD_CARD_TYPE_HS400_1_2V))
+			card_mask |= MMC_SIGNAL_VOLTAGE_120;
+		break;
+	case MMC_DDR_52:
+		if (mmc->cardtype & EXT_CSD_CARD_TYPE_DDR_1_8V)
+			card_mask |= MMC_SIGNAL_VOLTAGE_330 |
+				     MMC_SIGNAL_VOLTAGE_180;
+		if (mmc->cardtype & EXT_CSD_CARD_TYPE_DDR_1_2V)
+			card_mask |= MMC_SIGNAL_VOLTAGE_120;
+		break;
+	default:
+		card_mask |= MMC_SIGNAL_VOLTAGE_330;
+		break;
+	}
+
+	while (card_mask & allowed_mask) {
+		enum mmc_voltage best_match;
+
+		best_match = 1 << (ffs(card_mask & allowed_mask) - 1);
+		if (!mmc_set_signal_voltage(mmc,  best_match))
+			return 0;
+
+		allowed_mask &= ~best_match;
+	}
+
+	return -ENOTSUPP;
+}
+#else
+static inline int mmc_set_lowest_voltage(struct mmc *mmc, enum bus_mode mode,
+					 uint32_t allowed_mask)
+{
+	return 0;
+}
+#endif
+
+static const struct mode_width_tuning mmc_modes_by_pref[] = {
+#if CONFIG_IS_ENABLED(MMC_HS400_SUPPORT)
+	{
+		.mode = MMC_HS_400,
+		.widths = MMC_MODE_8BIT,
+		.tuning = MMC_CMD_SEND_TUNING_BLOCK_HS200
+	},
+#endif
+#if CONFIG_IS_ENABLED(MMC_HS200_SUPPORT)
+	{
+		.mode = MMC_HS_200,
+		.widths = MMC_MODE_8BIT | MMC_MODE_4BIT,
+		.tuning = MMC_CMD_SEND_TUNING_BLOCK_HS200
+	},
+#endif
+	{
+		.mode = MMC_DDR_52,
+		.widths = MMC_MODE_8BIT | MMC_MODE_4BIT,
+	},
+	{
+		.mode = MMC_HS_52,
+		.widths = MMC_MODE_8BIT | MMC_MODE_4BIT | MMC_MODE_1BIT,
+#ifdef MMC_SUPPORTS_TUNING
+		.tuning = MMC_SD_HS_TUNING
+#endif
+	},
+	{
+		.mode = MMC_HS,
+		.widths = MMC_MODE_8BIT | MMC_MODE_4BIT | MMC_MODE_1BIT,
+	},
+	{
+		.mode = MMC_LEGACY,
+		.widths = MMC_MODE_8BIT | MMC_MODE_4BIT | MMC_MODE_1BIT,
+	}
+};
+
+#define for_each_mmc_mode_by_pref(caps, mwt) \
+	for (mwt = mmc_modes_by_pref;\
+	    mwt < mmc_modes_by_pref + ARRAY_SIZE(mmc_modes_by_pref);\
+	    mwt++) \
+		if (caps & MMC_CAP(mwt->mode))
+
+static const struct ext_csd_bus_width {
+	uint cap;
+	bool is_ddr;
+	uint ext_csd_bits;
+} ext_csd_bus_width[] = {
+	{MMC_MODE_8BIT, true, EXT_CSD_DDR_BUS_WIDTH_8},
+	{MMC_MODE_4BIT, true, EXT_CSD_DDR_BUS_WIDTH_4},
+	{MMC_MODE_8BIT, false, EXT_CSD_BUS_WIDTH_8},
+	{MMC_MODE_4BIT, false, EXT_CSD_BUS_WIDTH_4},
+	{MMC_MODE_1BIT, false, EXT_CSD_BUS_WIDTH_1},
+};
+
+#if CONFIG_IS_ENABLED(MMC_HS400_SUPPORT)
+static int mmc_select_hs400(struct mmc *mmc)
+{
+	int err;
+
+	/* Set timing to HS200 for tuning */
+	err = mmc_set_card_speed(mmc, MMC_HS_200);
+	if (err)
+		return err;
+
+	/* configure the bus mode (host) */
+	mmc_select_mode(mmc, MMC_HS_200);
+	mmc_set_clock(mmc, mmc->tran_speed, false);
+
+	/* execute tuning if needed */
+	err = mmc_execute_tuning(mmc, MMC_CMD_SEND_TUNING_BLOCK_HS200);
+	if (err) {
+		pr_debug("tuning failed\n");
+		return err;
+	}
+
+	/* Set back to HS */
+	mmc_set_card_speed(mmc, MMC_HS);
+	mmc_set_clock(mmc, mmc_mode2freq(mmc, MMC_HS), false);
+
+	err = mmc_switch(mmc, EXT_CSD_CMD_SET_NORMAL, EXT_CSD_BUS_WIDTH,
+			 EXT_CSD_BUS_WIDTH_8 | EXT_CSD_DDR_FLAG);
+	if (err)
+		return err;
+
+	err = mmc_set_card_speed(mmc, MMC_HS_400);
+	if (err)
+		return err;
+
+	mmc_select_mode(mmc, MMC_HS_400);
+	err = mmc_set_clock(mmc, mmc->tran_speed, false);
+	if (err)
+		return err;
+
+	return 0;
+}
+#else
+static int mmc_select_hs400(struct mmc *mmc)
+{
+	return -ENOTSUPP;
+}
+#endif
+
+#define for_each_supported_width(caps, ddr, ecbv) \
+	for (ecbv = ext_csd_bus_width;\
+	    ecbv < ext_csd_bus_width + ARRAY_SIZE(ext_csd_bus_width);\
+	    ecbv++) \
+		if ((ddr == ecbv->is_ddr) && (caps & ecbv->cap))
+
+static int mmc_select_mode_and_width(struct mmc *mmc, uint card_caps)
+{
+	int err;
+	const struct mode_width_tuning *mwt;
+	const struct ext_csd_bus_width *ecbw;
+
+#ifdef DEBUG
+	mmc_dump_capabilities("mmc", card_caps);
+	mmc_dump_capabilities("host", mmc->host_caps);
+#endif
+
+	/* Restrict card's capabilities by what the host can do */
+	card_caps &= mmc->host_caps;
+
+	/* Only version 4 of MMC supports wider bus widths */
+	if (mmc->version < MMC_VERSION_4)
+		return 0;
+
+	if (!mmc->ext_csd) {
+		pr_debug("No ext_csd found!\n"); /* this should enver happen */
+		return -ENOTSUPP;
+	}
+
+	for_each_mmc_mode_by_pref(card_caps, mwt) {
+		for_each_supported_width(card_caps & mwt->widths,
+					 mmc_is_mode_ddr(mwt->mode), ecbw) {
+			enum mmc_voltage old_voltage;
+			pr_debug("trying mode %s width %d (at %d MHz)\n",
+				 mmc_mode_name(mwt->mode),
+				 bus_width(ecbw->cap),
+				 mmc_mode2freq(mmc, mwt->mode) / 1000000);
+			old_voltage = mmc->signal_voltage;
+			err = mmc_set_lowest_voltage(mmc, mwt->mode,
+						     MMC_ALL_SIGNAL_VOLTAGE);
+			if (err)
+				continue;
+
+			/* configure the bus width (card + host) */
+			err = mmc_switch(mmc, EXT_CSD_CMD_SET_NORMAL,
+				    EXT_CSD_BUS_WIDTH,
+				    ecbw->ext_csd_bits & ~EXT_CSD_DDR_FLAG);
+			if (err)
+				goto error;
+			mmc_set_bus_width(mmc, bus_width(ecbw->cap));
+
+			if (mwt->mode == MMC_HS_400) {
+				err = mmc_select_hs400(mmc);
+				if (err) {
+					pr_err("Select HS400 failed %d\n", err);
+					goto error;
+				}
+			} else {
+				/* configure the bus speed (card) */
+				err = mmc_set_card_speed(mmc, mwt->mode);
+				if (err)
+					goto error;
+
+				/*
+				 * configure the bus width AND the ddr mode
+				 * (card). The host side will be taken care
+				 * of in the next step
+				 */
+				if (ecbw->ext_csd_bits & EXT_CSD_DDR_FLAG) {
+					err = mmc_switch(mmc,
+							 EXT_CSD_CMD_SET_NORMAL,
+							 EXT_CSD_BUS_WIDTH,
+							 ecbw->ext_csd_bits);
+					if (err)
+						goto error;
+				}
+
+				/* configure the bus mode (host) */
+				mmc_select_mode(mmc, mwt->mode);
+				mmc_set_clock(mmc, mmc->tran_speed,
+					      MMC_CLK_ENABLE);
+#ifdef MMC_SUPPORTS_TUNING
+
+				/* execute tuning if needed */
+				if (mwt->tuning) {
+					err = mmc_execute_tuning(mmc,
+								 mwt->tuning);
+					if (err) {
+						pr_debug("tuning failed\n");
+						goto error;
+					}
+				}
+#endif
+			}
+
+			/* do a transfer to check the configuration */
+			err = mmc_read_and_compare_ext_csd(mmc);
+			if (!err)
+				return 0;
+error:
+			mmc_set_signal_voltage(mmc, old_voltage);
+			/* if an error occured, revert to a safer bus mode */
+			mmc_switch(mmc, EXT_CSD_CMD_SET_NORMAL,
+				   EXT_CSD_BUS_WIDTH, EXT_CSD_BUS_WIDTH_1);
+			mmc_select_mode(mmc, MMC_LEGACY);
+			mmc_set_bus_width(mmc, 1);
+		}
+	}
+
+	pr_err("unable to select a mode\n");
+
+	return -ENOTSUPP;
+}
+#endif
+
+#if CONFIG_IS_ENABLED(MMC_TINY)
+DEFINE_CACHE_ALIGN_BUFFER(u8, ext_csd_bkup, MMC_MAX_BLOCK_LEN);
+#endif
+
+static int mmc_startup_v4(struct mmc *mmc)
+{
+	int err, i;
+	u64 capacity;
+	bool has_parts = false;
+	bool part_completed;
+	static const u32 mmc_versions[] = {
+		MMC_VERSION_4,
+		MMC_VERSION_4_1,
+		MMC_VERSION_4_2,
+		MMC_VERSION_4_3,
+		MMC_VERSION_4_4,
+		MMC_VERSION_4_41,
+		MMC_VERSION_4_5,
+		MMC_VERSION_5_0,
+		MMC_VERSION_5_1
+	};
+
+#if CONFIG_IS_ENABLED(MMC_TINY)
+	u8 *ext_csd = ext_csd_bkup;
+
+	if (IS_SD(mmc) || mmc->version < MMC_VERSION_4)
+		return 0;
+
+	if (!mmc->ext_csd)
+		memset(ext_csd_bkup, 0, sizeof(ext_csd_bkup));
+
+	err = mmc_send_ext_csd(mmc, ext_csd);
+	if (err)
+		goto error;
+
+	/* store the ext csd for future reference */
+	if (!mmc->ext_csd)
+		mmc->ext_csd = ext_csd;
+#else
+	ALLOC_CACHE_ALIGN_BUFFER(u8, ext_csd, MMC_MAX_BLOCK_LEN);
+
+	if (IS_SD(mmc) || (mmc->version < MMC_VERSION_4))
+		return 0;
+
+	/* check  ext_csd version and capacity */
+	err = mmc_send_ext_csd(mmc, ext_csd);
+	if (err)
+		goto error;
+
+	/* store the ext csd for future reference */
+	if (!mmc->ext_csd)
+		mmc->ext_csd = malloc(MMC_MAX_BLOCK_LEN);
+	if (!mmc->ext_csd)
+		return -ENOMEM;
+	memcpy(mmc->ext_csd, ext_csd, MMC_MAX_BLOCK_LEN);
+#endif
+	if (ext_csd[EXT_CSD_REV] >= ARRAY_SIZE(mmc_versions))
+		return -EINVAL;
+
+	mmc->version = mmc_versions[ext_csd[EXT_CSD_REV]];
+
+	if (mmc->version >= MMC_VERSION_4_2) {
+		/*
+		 * According to the JEDEC Standard, the value of
+		 * ext_csd's capacity is valid if the value is more
+		 * than 2GB
+		 */
+		capacity = ext_csd[EXT_CSD_SEC_CNT] << 0
+				| ext_csd[EXT_CSD_SEC_CNT + 1] << 8
+				| ext_csd[EXT_CSD_SEC_CNT + 2] << 16
+				| ext_csd[EXT_CSD_SEC_CNT + 3] << 24;
+		capacity *= MMC_MAX_BLOCK_LEN;
+		if ((capacity >> 20) > 2 * 1024)
+			mmc->capacity_user = capacity;
+	}
+
+	/* The partition data may be non-zero but it is only
+	 * effective if PARTITION_SETTING_COMPLETED is set in
+	 * EXT_CSD, so ignore any data if this bit is not set,
+	 * except for enabling the high-capacity group size
+	 * definition (see below).
+	 */
+	part_completed = !!(ext_csd[EXT_CSD_PARTITION_SETTING] &
+			    EXT_CSD_PARTITION_SETTING_COMPLETED);
+
+	/* store the partition info of emmc */
+	mmc->part_support = ext_csd[EXT_CSD_PARTITIONING_SUPPORT];
+	if ((ext_csd[EXT_CSD_PARTITIONING_SUPPORT] & PART_SUPPORT) ||
+	    ext_csd[EXT_CSD_BOOT_MULT])
+		mmc->part_config = ext_csd[EXT_CSD_PART_CONF];
+	if (part_completed &&
+	    (ext_csd[EXT_CSD_PARTITIONING_SUPPORT] & ENHNCD_SUPPORT))
+		mmc->part_attr = ext_csd[EXT_CSD_PARTITIONS_ATTRIBUTE];
+
+	mmc->capacity_boot = ext_csd[EXT_CSD_BOOT_MULT] << 17;
+
+	mmc->capacity_rpmb = ext_csd[EXT_CSD_RPMB_MULT] << 17;
+
+	for (i = 0; i < 4; i++) {
+		int idx = EXT_CSD_GP_SIZE_MULT + i * 3;
+		uint mult = (ext_csd[idx + 2] << 16) +
+			(ext_csd[idx + 1] << 8) + ext_csd[idx];
+		if (mult)
+			has_parts = true;
+		if (!part_completed)
+			continue;
+		mmc->capacity_gp[i] = mult;
+		mmc->capacity_gp[i] *=
+			ext_csd[EXT_CSD_HC_ERASE_GRP_SIZE];
+		mmc->capacity_gp[i] *= ext_csd[EXT_CSD_HC_WP_GRP_SIZE];
+		mmc->capacity_gp[i] <<= 19;
+	}
+
+#ifndef CONFIG_SPL_BUILD
+	if (part_completed) {
+		mmc->enh_user_size =
+			(ext_csd[EXT_CSD_ENH_SIZE_MULT + 2] << 16) +
+			(ext_csd[EXT_CSD_ENH_SIZE_MULT + 1] << 8) +
+			ext_csd[EXT_CSD_ENH_SIZE_MULT];
+		mmc->enh_user_size *= ext_csd[EXT_CSD_HC_ERASE_GRP_SIZE];
+		mmc->enh_user_size *= ext_csd[EXT_CSD_HC_WP_GRP_SIZE];
+		mmc->enh_user_size <<= 19;
+		mmc->enh_user_start =
+			(ext_csd[EXT_CSD_ENH_START_ADDR + 3] << 24) +
+			(ext_csd[EXT_CSD_ENH_START_ADDR + 2] << 16) +
+			(ext_csd[EXT_CSD_ENH_START_ADDR + 1] << 8) +
+			ext_csd[EXT_CSD_ENH_START_ADDR];
+		if (mmc->high_capacity)
+			mmc->enh_user_start <<= 9;
+	}
+#endif
+
+	/* dev life time estimate type A/B */
+	mmc->dev_lifetime_est_typ_a
+		= ext_csd[EXT_CSD_DEV_LIFETIME_EST_TYP_A];
+	mmc->dev_lifetime_est_typ_b
+		= ext_csd[EXT_CSD_DEV_LIFETIME_EST_TYP_B];
+
+	/*
+	 * Host needs to enable ERASE_GRP_DEF bit if device is
+	 * partitioned. This bit will be lost every time after a reset
+	 * or power off. This will affect erase size.
+	 */
+	if (part_completed)
+		has_parts = true;
+	if ((ext_csd[EXT_CSD_PARTITIONING_SUPPORT] & PART_SUPPORT) &&
+	    (ext_csd[EXT_CSD_PARTITIONS_ATTRIBUTE] & PART_ENH_ATTRIB))
+		has_parts = true;
+	if (has_parts) {
+		err = mmc_switch(mmc, EXT_CSD_CMD_SET_NORMAL,
+				 EXT_CSD_ERASE_GROUP_DEF, 1);
+
+		if (err)
+			goto error;
+
+		ext_csd[EXT_CSD_ERASE_GROUP_DEF] = 1;
+	}
+
+	if (ext_csd[EXT_CSD_ERASE_GROUP_DEF] & 0x01) {
+#if CONFIG_IS_ENABLED(MMC_WRITE)
+		/* Read out group size from ext_csd */
+		mmc->erase_grp_size =
+			ext_csd[EXT_CSD_HC_ERASE_GRP_SIZE] * 1024;
+#endif
+		/*
+		 * if high capacity and partition setting completed
+		 * SEC_COUNT is valid even if it is smaller than 2 GiB
+		 * JEDEC Standard JESD84-B45, 6.2.4
+		 */
+		if (mmc->high_capacity && part_completed) {
+			capacity = (ext_csd[EXT_CSD_SEC_CNT]) |
+				(ext_csd[EXT_CSD_SEC_CNT + 1] << 8) |
+				(ext_csd[EXT_CSD_SEC_CNT + 2] << 16) |
+				(ext_csd[EXT_CSD_SEC_CNT + 3] << 24);
+			capacity *= MMC_MAX_BLOCK_LEN;
+			mmc->capacity_user = capacity;
+		}
+	}
+#if CONFIG_IS_ENABLED(MMC_WRITE)
+	else {
+		/* Calculate the group size from the csd value. */
+		int erase_gsz, erase_gmul;
+		erase_gsz = (mmc->csd[2] & 0x00007c00) >> 10;
+		erase_gmul = (mmc->csd[2] & 0x000003e0) >> 5;
+		mmc->erase_grp_size = (erase_gsz + 1)
+			* (erase_gmul + 1);
+	}
+#endif
+#if CONFIG_IS_ENABLED(MMC_HW_PARTITIONING)
+	mmc->hc_wp_grp_size = 1024
+		* ext_csd[EXT_CSD_HC_ERASE_GRP_SIZE]
+		* ext_csd[EXT_CSD_HC_WP_GRP_SIZE];
+#endif
+
+	mmc->wr_rel_set = ext_csd[EXT_CSD_WR_REL_SET];
+
+	return 0;
+error:
+	if (mmc->ext_csd) {
+#if !CONFIG_IS_ENABLED(MMC_TINY)
+		free(mmc->ext_csd);
+#endif
+		mmc->ext_csd = NULL;
+	}
+	return err;
+}
+
+static int mmc_startup(struct mmc *mmc)
+{
+	int err, i;
+	uint mult, freq;
+	u64 cmult, csize;
+	struct mmc_cmd cmd;
+	struct blk_desc *bdesc;
+
+#ifdef CONFIG_MMC_SPI_CRC_ON
+	if (mmc_host_is_spi(mmc)) { /* enable CRC check for spi */
+		cmd.cmdidx = MMC_CMD_SPI_CRC_ON_OFF;
+		cmd.resp_type = MMC_RSP_R1;
+		cmd.cmdarg = 1;
+		err = mmc_send_cmd(mmc, &cmd, NULL);
+		if (err)
+			return err;
+	}
+#endif
+
+#ifdef CONFIG_MMC_FBOOT
+	if (emmc_boot_chk(mmc)) {
+		mmc_switch_part(mmc, 0);
+
+		/* disSelect the card, and put it into detect Mode */
+		if (!mmc_host_is_spi(mmc)) { /* cmd not supported in spi */
+			cmd.cmdidx = MMC_CMD_SELECT_CARD;
+			cmd.resp_type = MMC_RSP_NONE;
+			cmd.cmdarg = 0;
+			err = mmc_send_cmd(mmc, &cmd, NULL);
+
+			if (err)
+				return err;
+		}
+
+		/* Put the Card in Identify Mode */
+		cmd.cmdidx = MMC_CMD_SEND_CID;
+		cmd.resp_type = MMC_RSP_R2;
+		cmd.cmdarg = mmc->rca << 16;
+
+		err = mmc_send_cmd(mmc, &cmd, NULL);
+		if (err)
+			return err;
+
+		memcpy(mmc->cid, cmd.response, 16);
+	} else {
+#endif
+		/* Put the Card in Identify Mode */
+		cmd.cmdidx = mmc_host_is_spi(mmc) ? MMC_CMD_SEND_CID :
+			MMC_CMD_ALL_SEND_CID; /* cmd not supported in spi */
+		cmd.resp_type = MMC_RSP_R2;
+		cmd.cmdarg = 0;
+
+		err = mmc_send_cmd(mmc, &cmd, NULL);
+
+#ifdef CONFIG_MMC_QUIRKS
+		if (err && (mmc->quirks & MMC_QUIRK_RETRY_SEND_CID)) {
+			int retries = 4;
+			/*
+			 * It has been seen that SEND_CID may fail on the first
+			 * attempt, let's try a few more time
+			 */
+			do {
+				err = mmc_send_cmd(mmc, &cmd, NULL);
+				if (!err)
+					break;
+			} while (retries--);
+		}
+#endif
+
+		if (err)
+			return err;
+
+		memcpy(mmc->cid, cmd.response, 16);
+
+		/*
+		 * For MMC cards, set the Relative Address.
+		 * For SD cards, get the Relatvie Address.
+		 * This also puts the cards into Standby State
+		 */
+		if (!mmc_host_is_spi(mmc)) { /* cmd not supported in spi */
+			cmd.cmdidx = SD_CMD_SEND_RELATIVE_ADDR;
+			cmd.cmdarg = mmc->rca << 16;
+			cmd.resp_type = MMC_RSP_R6;
+
+			err = mmc_send_cmd(mmc, &cmd, NULL);
+
+			if (err)
+				return err;
+
+			if (IS_SD(mmc))
+				mmc->rca = (cmd.response[0] >> 16) & 0xffff;
+		}
+#ifdef CONFIG_MMC_FBOOT
+	}
+#endif
+
+	/* Get the Card-Specific Data */
+	cmd.cmdidx = MMC_CMD_SEND_CSD;
+	cmd.resp_type = MMC_RSP_R2;
+	cmd.cmdarg = mmc->rca << 16;
+
+	err = mmc_send_cmd(mmc, &cmd, NULL);
+
+	if (err)
+		return err;
+
+	mmc->csd[0] = cmd.response[0];
+	mmc->csd[1] = cmd.response[1];
+	mmc->csd[2] = cmd.response[2];
+	mmc->csd[3] = cmd.response[3];
+
+	if (mmc->version == MMC_VERSION_UNKNOWN) {
+		int version = (cmd.response[0] >> 26) & 0xf;
+
+		switch (version) {
+		case 0:
+			mmc->version = MMC_VERSION_1_2;
+			break;
+		case 1:
+			mmc->version = MMC_VERSION_1_4;
+			break;
+		case 2:
+			mmc->version = MMC_VERSION_2_2;
+			break;
+		case 3:
+			mmc->version = MMC_VERSION_3;
+			break;
+		case 4:
+			mmc->version = MMC_VERSION_4;
+			break;
+		default:
+			mmc->version = MMC_VERSION_1_2;
+			break;
+		}
+	}
+
+	/* divide frequency by 10, since the mults are 10x bigger */
+	freq = fbase[(cmd.response[0] & 0x7)];
+	mult = multipliers[((cmd.response[0] >> 3) & 0xf)];
+
+	mmc->legacy_speed = freq * mult;
+	mmc_select_mode(mmc, MMC_LEGACY);
+
+	mmc->dsr_imp = ((cmd.response[1] >> 12) & 0x1);
+	mmc->read_bl_len = 1 << ((cmd.response[1] >> 16) & 0xf);
+#if CONFIG_IS_ENABLED(MMC_WRITE)
+
+	if (IS_SD(mmc))
+		mmc->write_bl_len = mmc->read_bl_len;
+	else
+		mmc->write_bl_len = 1 << ((cmd.response[3] >> 22) & 0xf);
+#endif
+
+	if (mmc->high_capacity) {
+		csize = (mmc->csd[1] & 0x3f) << 16
+			| (mmc->csd[2] & 0xffff0000) >> 16;
+		cmult = 8;
+	} else {
+		csize = (mmc->csd[1] & 0x3ff) << 2
+			| (mmc->csd[2] & 0xc0000000) >> 30;
+		cmult = (mmc->csd[2] & 0x00038000) >> 15;
+	}
+
+	mmc->capacity_user = (csize + 1) << (cmult + 2);
+	mmc->capacity_user *= mmc->read_bl_len;
+	mmc->capacity_boot = 0;
+	mmc->capacity_rpmb = 0;
+	for (i = 0; i < 4; i++)
+		mmc->capacity_gp[i] = 0;
+
+	if (mmc->read_bl_len > MMC_MAX_BLOCK_LEN)
+		mmc->read_bl_len = MMC_MAX_BLOCK_LEN;
+
+#if CONFIG_IS_ENABLED(MMC_WRITE)
+	if (mmc->write_bl_len > MMC_MAX_BLOCK_LEN)
+		mmc->write_bl_len = MMC_MAX_BLOCK_LEN;
+#endif
+
+	if ((mmc->dsr_imp) && (0xffffffff != mmc->dsr)) {
+		cmd.cmdidx = MMC_CMD_SET_DSR;
+		cmd.cmdarg = (mmc->dsr & 0xffff) << 16;
+		cmd.resp_type = MMC_RSP_NONE;
+		if (mmc_send_cmd(mmc, &cmd, NULL))
+			pr_warn("MMC: SET_DSR failed\n");
+	}
+
+	/* Select the card, and put it into Transfer Mode */
+	if (!mmc_host_is_spi(mmc)) { /* cmd not supported in spi */
+		cmd.cmdidx = MMC_CMD_SELECT_CARD;
+		cmd.resp_type = MMC_RSP_R1;
+		cmd.cmdarg = mmc->rca << 16;
+		err = mmc_send_cmd(mmc, &cmd, NULL);
+
+		if (err)
+			return err;
+	}
+
+	/*
+	 * For SD, its erase group is always one sector
+	 */
+#if CONFIG_IS_ENABLED(MMC_WRITE)
+	mmc->erase_grp_size = 1;
+#endif
+	mmc->part_config = MMCPART_NOAVAILABLE;
+
+	err = mmc_startup_v4(mmc);
+	if (err)
+		return err;
+
+	err = mmc_set_capacity(mmc, mmc_get_blk_desc(mmc)->hwpart);
+	if (err)
+		return err;
+
+#if CONFIG_IS_ENABLED(MMC_TINY)
+	mmc_set_clock(mmc, mmc->legacy_speed, false);
+	mmc_select_mode(mmc, IS_SD(mmc) ? SD_LEGACY : MMC_LEGACY);
+	mmc_set_bus_width(mmc, 1);
+#else
+	if (IS_SD(mmc)) {
+		err = sd_get_capabilities(mmc);
+		if (err)
+			return err;
+		err = sd_select_mode_and_width(mmc, mmc->card_caps);
+	} else {
+		err = mmc_get_capabilities(mmc);
+		if (err)
+			return err;
+		mmc_select_mode_and_width(mmc, mmc->card_caps);
+	}
+#endif
+	if (err)
+		return err;
+
+	mmc->best_mode = mmc->selected_mode;
+
+	/* Fix the block length for DDR mode */
+	if (mmc->ddr_mode) {
+		mmc->read_bl_len = MMC_MAX_BLOCK_LEN;
+#if CONFIG_IS_ENABLED(MMC_WRITE)
+		mmc->write_bl_len = MMC_MAX_BLOCK_LEN;
+#endif
+	}
+
+	/* fill in device description */
+	bdesc = mmc_get_blk_desc(mmc);
+	bdesc->lun = 0;
+	bdesc->hwpart = 0;
+	bdesc->type = 0;
+	bdesc->blksz = mmc->read_bl_len;
+	bdesc->log2blksz = LOG2(bdesc->blksz);
+	bdesc->lba = lldiv(mmc->capacity, mmc->read_bl_len);
+#if !defined(CONFIG_SPL_BUILD) || \
+		(defined(CONFIG_SPL_LIBCOMMON_SUPPORT) && \
+		!defined(CONFIG_USE_TINY_PRINTF))
+	sprintf(bdesc->vendor, "Man %06x Snr %04x%04x",
+		mmc->cid[0] >> 24, (mmc->cid[2] & 0xffff),
+		(mmc->cid[3] >> 16) & 0xffff);
+	sprintf(bdesc->product, "%c%c%c%c%c%c", mmc->cid[0] & 0xff,
+		(mmc->cid[1] >> 24), (mmc->cid[1] >> 16) & 0xff,
+		(mmc->cid[1] >> 8) & 0xff, mmc->cid[1] & 0xff,
+		(mmc->cid[2] >> 24) & 0xff);
+	sprintf(bdesc->revision, "%d.%d", (mmc->cid[2] >> 20) & 0xf,
+		(mmc->cid[2] >> 16) & 0xf);
+#else
+	bdesc->vendor[0] = 0;
+	bdesc->product[0] = 0;
+	bdesc->revision[0] = 0;
+#endif
+
+#if !defined(CONFIG_DM_MMC) && (!defined(CONFIG_SPL_BUILD) || defined(CONFIG_SPL_LIBDISK_SUPPORT))
+	part_init(bdesc);
+#endif
+
+	return 0;
+}
+
+static int mmc_send_if_cond(struct mmc *mmc)
+{
+	struct mmc_cmd cmd;
+	int err;
+
+	cmd.cmdidx = SD_CMD_SEND_IF_COND;
+	/* We set the bit if the host supports voltages between 2.7 and 3.6 V */
+	cmd.cmdarg = ((mmc->cfg->voltages & 0xff8000) != 0) << 8 | 0xaa;
+	cmd.resp_type = MMC_RSP_R7;
+
+	err = mmc_send_cmd(mmc, &cmd, NULL);
+	if (err)
+		return err;
+
+	if ((cmd.response[0] & 0xff) != 0xaa)
+		return -EOPNOTSUPP;
+	else
+		mmc->version = SD_VERSION_2;
+
+	return 0;
+}
+
+#if !CONFIG_IS_ENABLED(DM_MMC)
+/* board-specific MMC power initializations. */
+__weak void board_mmc_power_init(void)
+{
+}
+#endif
+
+static int mmc_power_init(struct mmc *mmc)
+{
+#if CONFIG_IS_ENABLED(DM_MMC)
+#if CONFIG_IS_ENABLED(DM_REGULATOR)
+	int ret;
+
+	ret = device_get_supply_regulator(mmc->dev, "vmmc-supply",
+					  &mmc->vmmc_supply);
+	if (ret)
+		pr_debug("%s: No vmmc supply\n", mmc->dev->name);
+
+	ret = device_get_supply_regulator(mmc->dev, "vqmmc-supply",
+					  &mmc->vqmmc_supply);
+	if (ret)
+		pr_debug("%s: No vqmmc supply\n", mmc->dev->name);
+#endif
+#else /* !CONFIG_DM_MMC */
+	/*
+	 * Driver model should use a regulator, as above, rather than calling
+	 * out to board code.
+	 */
+	board_mmc_power_init();
+#endif
+	return 0;
+}
+
+/*
+ * put the host in the initial state:
+ * - turn on Vdd (card power supply)
+ * - configure the bus width and clock to minimal values
+ */
+static void mmc_set_initial_state(struct mmc *mmc)
+{
+	int err;
+
+	/* First try to set 3.3V. If it fails set to 1.8V */
+	err = mmc_set_signal_voltage(mmc, MMC_SIGNAL_VOLTAGE_330);
+	if (err != 0)
+		err = mmc_set_signal_voltage(mmc, MMC_SIGNAL_VOLTAGE_180);
+	if (err != 0)
+		pr_warn("mmc: failed to set signal voltage\n");
+
+	mmc_select_mode(mmc, MMC_LEGACY);
+	mmc_set_bus_width(mmc, 1);
+	mmc_set_clock(mmc, 0, MMC_CLK_ENABLE);
+}
+
+static int mmc_power_on(struct mmc *mmc)
+{
+#if CONFIG_IS_ENABLED(DM_MMC) && CONFIG_IS_ENABLED(DM_REGULATOR)
+	if (mmc->vmmc_supply) {
+		int ret = regulator_set_enable(mmc->vmmc_supply, true);
+
+		if (ret) {
+			puts("Error enabling VMMC supply\n");
+			return ret;
+		}
+	}
+#endif
+	return 0;
+}
+
+static int mmc_power_off(struct mmc *mmc)
+{
+	mmc_set_clock(mmc, 0, MMC_CLK_DISABLE);
+#if CONFIG_IS_ENABLED(DM_MMC) && CONFIG_IS_ENABLED(DM_REGULATOR)
+	if (mmc->vmmc_supply) {
+		int ret = regulator_set_enable(mmc->vmmc_supply, false);
+
+		if (ret) {
+			pr_debug("Error disabling VMMC supply\n");
+			return ret;
+		}
+	}
+#endif
+	return 0;
+}
+
+static int mmc_power_cycle(struct mmc *mmc)
+{
+	int ret;
+
+	ret = mmc_power_off(mmc);
+	if (ret)
+		return ret;
+	/*
+	 * SD spec recommends at least 1ms of delay. Let's wait for 2ms
+	 * to be on the safer side.
+	 */
+	udelay(2000);
+	return mmc_power_on(mmc);
+}
+
+int mmc_get_op_cond(struct mmc *mmc)
+{
+	bool uhs_en = supports_uhs(mmc->cfg->host_caps);
+	int err;
+
+	if (mmc->has_init)
+		return 0;
+
+#ifdef CONFIG_FSL_ESDHC_ADAPTER_IDENT
+	mmc_adapter_card_type_ident();
+#endif
+	err = mmc_power_init(mmc);
+	if (err)
+		return err;
+
+#ifdef CONFIG_MMC_QUIRKS
+	mmc->quirks = MMC_QUIRK_RETRY_SET_BLOCKLEN |
+		      MMC_QUIRK_RETRY_SEND_CID;
+#endif
+
+	err = mmc_power_cycle(mmc);
+	if (err) {
+		/*
+		 * if power cycling is not supported, we should not try
+		 * to use the UHS modes, because we wouldn't be able to
+		 * recover from an error during the UHS initialization.
+		 */
+		pr_debug("Unable to do a full power cycle. Disabling the UHS modes for safety\n");
+		uhs_en = false;
+		mmc->host_caps &= ~UHS_CAPS;
+		err = mmc_power_on(mmc);
+	}
+	if (err)
+		return err;
+
+#if CONFIG_IS_ENABLED(DM_MMC)
+	/* The device has already been probed ready for use */
+#else
+	/* made sure it's not NULL earlier */
+	err = mmc->cfg->ops->init(mmc);
+	if (err)
+		return err;
+#endif
+	mmc->ddr_mode = 0;
+
+retry:
+	mmc_set_initial_state(mmc);
+	mmc_send_init_stream(mmc);
+
+	/* Reset the Card */
+	err = mmc_go_idle(mmc);
+	if (err)
+		return err;
+
+	/* The internal partition reset to user partition(0) at every CMD0*/
+	mmc_get_blk_desc(mmc)->hwpart = 0;
+
+	/* Test for SD version 2 */
+	err = mmc_send_if_cond(mmc);
+
+	/* Now try to get the SD card's operating condition */
+	err = sd_send_op_cond(mmc, uhs_en);
+	if (err && uhs_en) {
+		uhs_en = false;
+		mmc_power_cycle(mmc);
+		goto retry;
+	}
+
+	/* If the command timed out, we check for an MMC card */
+	if (err == -ETIMEDOUT) {
+		err = mmc_send_op_cond(mmc);
+
+		if (err) {
+#if !defined(CONFIG_SPL_BUILD) || defined(CONFIG_SPL_LIBCOMMON_SUPPORT)
+			pr_err("Card did not respond to voltage select!\n");
+#endif
+			return -EOPNOTSUPP;
+		}
+	}
+
+	return err;
+}
+
+int mmc_start_init(struct mmc *mmc)
+{
+	bool no_card;
+	int err = 0;
+
+	/*
+	 * all hosts are capable of 1 bit bus-width and able to use the legacy
+	 * timings.
+	 */
+	mmc->host_caps = mmc->cfg->host_caps | MMC_CAP(SD_LEGACY) |
+			 MMC_CAP(MMC_LEGACY) | MMC_MODE_1BIT;
+
+#if !defined(CONFIG_MMC_BROKEN_CD)
+	/* we pretend there's no card when init is NULL */
+	no_card = mmc_getcd(mmc) == 0;
+#else
+	no_card = 0;
+#endif
+#if !CONFIG_IS_ENABLED(DM_MMC)
+	no_card = no_card || (mmc->cfg->ops->init == NULL);
+#endif
+	if (no_card) {
+		mmc->has_init = 0;
+#if !defined(CONFIG_SPL_BUILD) || defined(CONFIG_SPL_LIBCOMMON_SUPPORT)
+		pr_err("MMC: no card present\n");
+#endif
+		return -ENOMEDIUM;
+	}
+
+#ifdef CONFIG_MMC_FBOOT
+	if (emmc_boot_chk(mmc)) {
+		mmc->high_capacity = 1;
+		mmc->rca = 1;
+		mmc->version = MMC_VERSION_UNKNOWN;
+	} else
+#endif
+		err = mmc_get_op_cond(mmc);
+
+	if (!err)
+		mmc->init_in_progress = 1;
+
+	return err;
+}
+
+static int mmc_complete_init(struct mmc *mmc)
+{
+	int err = 0;
+
+	mmc->init_in_progress = 0;
+	if (mmc->op_cond_pending)
+		err = mmc_complete_op_cond(mmc);
+
+	if (!err)
+		err = mmc_startup(mmc);
+	if (err)
+		mmc->has_init = 0;
+	else
+		mmc->has_init = 1;
+	return err;
+}
+
+void mmc_write_cali_mattern(void *addr, struct aml_pattern *table)
+{
+	int i = 0;
+	unsigned int s = 10;
+	u32 *mattern = (u32 *)addr;
+	struct virtual_partition *vpart =
+		aml_get_virtual_partition_by_name(table->name);
+	for (i = 0;i < (vpart->size)/4 - 1;i++) {
+		if (!strcmp(table->name, "random"))
+			mattern[i] = rand_r(&s);
+		else
+			mattern[i] = table->pattern;
+	}
+	mattern[i] = crc32(0, (u8 *)addr, (vpart->size - 4));
+	return;
+}
+
+int mmc_pattern_check(struct mmc *mmc, struct aml_pattern *table)
+{
+	void *addr = NULL;
+	u64 cnt = 0, n = 0, blk = 0;
+	u32 *buf = NULL;
+	u32 crc32_s = 0;
+	struct partitions *part = NULL;
+	struct virtual_partition *vpart = NULL;
+
+	vpart = aml_get_virtual_partition_by_name(table->name);
+
+	addr = (void *)malloc(vpart->size);
+	if (!addr) {
+		printf("%s malloc failed\n", table->name);
+		return 1;
+	}
+	part = aml_get_partition_by_name(MMC_RESERVED_NAME);
+	blk = (part->offset + vpart->offset) / mmc->read_bl_len;
+	cnt = vpart->size / mmc->read_bl_len;
+	n = blk_dread(mmc_get_blk_desc(mmc), blk, cnt, addr);
+	if (n != cnt) {
+		printf("read pattern failed\n");
+		free(addr);
+		return 1;
+	} else {
+		buf = (u32 *)addr;
+		crc32_s = crc32(0, (u8 *)addr, (vpart->size - 4));
+		if (crc32_s != buf[vpart->size/4 - 1]) {
+			printf("check %s failed,need to write\n",
+						table->name);
+			mmc_write_cali_mattern(addr, table);
+			n = blk_dwrite(mmc_get_blk_desc(mmc), blk, cnt, addr);
+			printf("several 0x%x pattern blocks write %s\n",
+				table->pattern, (n == cnt) ? "OK" : "ERROR");
+		}
+		printf("crc32_s:0x%x == storage crc_pattern:0x%x!!!\n",
+				crc32_s, buf[vpart->size/4 - 1]);
+	}
+	free(addr);
+	return (n == cnt) ? 0 : 1;
+}
+
+int mmc_init(struct mmc *mmc)
+{
+	int err = 0, i;
+	__maybe_unused ulong start;
+#if CONFIG_IS_ENABLED(DM_MMC)
+	struct mmc_uclass_priv *upriv = dev_get_uclass_priv(mmc->dev);
+
+	upriv->mmc = mmc;
+#endif
+	if (mmc->has_init)
+		return 0;
+
+	start = get_timer(0);
+
+	if (!mmc->init_in_progress)
+		err = mmc_start_init(mmc);
+
+	if (!err)
+		err = mmc_complete_init(mmc);
+	if (err)
+		pr_info("%s: %d, time %lu\n", __func__, err, get_timer(start));
+	info_disprotect |= DISPROTECT_KEY;
+	if (IS_MMC(mmc)) {
+		if (!is_partition_checked) {
+			if (mmc_device_init(mmc) == 0) {
+				is_partition_checked = true;
+				pr_info("eMMC/TSD partition table have been checked OK!\n");
+				for (i = 0; i < ARRAY_SIZE(aml_pattern_table); i++)
+					mmc_pattern_check(mmc, &aml_pattern_table[i]);
+			}
+		}
+	}
+	info_disprotect &= ~DISPROTECT_KEY;
+	return err;
+
+}
+
+ulong mmc_ffu_write(int dev_num, lbaint_t start, lbaint_t blkcnt, const void *src)
+{
+	struct mmc_cmd cmd;
+	struct mmc_data data;
+	int ret, timeout = 1000;
+	struct mmc *mmc = find_mmc_device(dev_num);
+	if (!mmc || !blkcnt)
+		return 0;
+
+	printf("mmc ffu start = %lx, cnt = %lx, addr = %p\n", start, blkcnt, src);
+
+	cmd.cmdidx = MMC_CMD_SET_BLOCK_COUNT;
+	cmd.cmdarg = blkcnt & 0xFFFF;
+	cmd.resp_type = MMC_RSP_R1;
+	ret = mmc_send_cmd(mmc, &cmd, NULL);
+	if (ret) {
+		printf("mmc set blkcnt failed\n");
+		return 0;
+	}
+
+	cmd.cmdidx = MMC_CMD_WRITE_MULTIPLE_BLOCK;
+	cmd.cmdarg = start;
+	cmd.resp_type = MMC_RSP_R1b;
+
+	data.src = src;
+	data.blocks = blkcnt;
+	data.blocksize = mmc->write_bl_len;
+	data.flags = MMC_DATA_WRITE;
+
+	ret = mmc_send_cmd(mmc, &cmd, &data);
+	if (ret) {
+		printf("mmc write failed\n");
+		return 0;
+	}
+
+	/* Waiting for the ready status */
+	if (mmc_send_status(mmc, timeout))
+		return 0;
+
+	return blkcnt;
+}
+
+int mmc_ffu_op(int dev, u64 ffu_ver, void *addr, u64 cnt)
+{
+	int err, i, supported_modes, fw_cfg, ffu_status;
+	u64 fw_ver = 0, n;
+	u8 ext_csd_ffu[512] = {0};
+	lbaint_t ffu_addr=0;
+	struct mmc *mmc = find_mmc_device(dev);
+	if (!mmc)
+		return -ENODEV;
+
+	printf("ffu update start\n");
+	/* check Manufacturer MID */
+	if ((mmc->cid[0] >> 24) == SAMSUNG_MID) {
+		ffu_addr = SAMSUNG_FFU_ADDR;
+	} else if ((mmc->cid[0] >> 24) == KINGSTON_MID) {
+		ffu_addr = KINGSTON_FFU_ADDR;
+	} else if ((mmc->cid[0] >> 24) == BIWIN_MID) {
+		ffu_addr = BIWIN_FFU_ADDR;
+	} else {
+		printf("FFU update for this manufacturer not support yet\n");
+		return -1;
+	}
+
+	/*
+	 * check FFU Supportability
+	 * check FFU Prohibited or not
+	 * check current firmware version
+	 */
+	memset(ext_csd_ffu, 0, 512);
+	err = mmc_get_ext_csd(mmc, ext_csd_ffu);
+	if (err)
+		return err;
+
+	supported_modes = ext_csd_ffu[EXT_CSD_SUPPORTED_MODES] & 0x1;
+	fw_cfg = ext_csd_ffu[EXT_CSD_FW_CFG] & 0x1;
+	for (i = 0; i < 8; i++) {
+		fw_ver |= ext_csd_ffu[EXT_CSD_FW_VERSION + 7 - i];
+		if (i < 7)
+			fw_ver <<= 8;
+	}
+	if ((mmc->cid[0] >> 24) == BIWIN_MID)
+		fw_ver = ((fw_ver >> 16) & 0xffffffff);
+	printf("old fw_ver = %llx\n", fw_ver);
+	if (!supported_modes || fw_cfg || (fw_ver >= ffu_ver))
+		return -1;
+
+	/* Set FFU Mode */
+	err = mmc_switch(mmc, EXT_CSD_CMD_SET_NORMAL, EXT_CSD_MODE_CFG, 1);
+	if (err) {
+		printf("Failed: set FFU mode\n");
+		return err;
+	}
+
+	/* Write patch file at one write command */
+	n = mmc_ffu_write(dev, ffu_addr, cnt, addr);
+	if (n != cnt) {
+		printf("target is %llx block, but only %llx block has been write\n", cnt, n);
+		return -1;
+	}
+
+	memset(ext_csd_ffu, 0, 512);
+	err = mmc_get_ext_csd(mmc, ext_csd_ffu);
+	if (err)
+		return err;
+
+	for (i = 0; i < 8; i++) {
+		fw_ver |= ext_csd_ffu[EXT_CSD_FW_VERSION + 7 - i];
+		if (i < 7)
+			fw_ver <<= 8;
+	}
+	if ((mmc->cid[0] >> 24) == BIWIN_MID)
+		fw_ver = ((fw_ver >> 16) & 0xffffffff);
+	printf("new fw_ver = %llx\n", fw_ver);
+	if ((mmc->cid[0] >> 24) == SAMSUNG_MID) {
+		/* Set Normal Mode */
+		err = mmc_switch(mmc, EXT_CSD_CMD_SET_NORMAL, EXT_CSD_MODE_CFG, 0);
+		if (err)
+			return err;
+	}
+
+	/* reset devices */
+	err = mmc_go_idle(mmc);
+	if (err)
+		return err;
+
+	/* Initialization */
+	mmc->has_init = 0;
+	err = mmc_init(mmc);
+	if (err)
+		return err;
+
+	/* Read ffu_status, check ffu_version */
+	memset(ext_csd_ffu, 0, 512);
+	err = mmc_get_ext_csd(mmc, ext_csd_ffu);
+	if (err)
+		return err;
+	ffu_status = ext_csd_ffu[EXT_CSD_FFU_STATUS] & 0xff;
+	fw_ver = 0;
+	for (i = 0; i < 8; i++) {
+		fw_ver |= ext_csd_ffu[EXT_CSD_FW_VERSION + 7 - i];
+		if (i < 7)
+			fw_ver <<= 8;
+	}
+	if ((mmc->cid[0] >> 24) == BIWIN_MID)
+		fw_ver = ((fw_ver >> 16) & 0xffffffff);
+	printf("new fw_ver = %llx\n", fw_ver);
+	if (ffu_status || (fw_ver != ffu_ver))
+		return ffu_status;
+
+	printf("FFU update ok!\n");
+	return 0;
+}
+
+int mmc_set_dsr(struct mmc *mmc, u16 val)
+{
+	mmc->dsr = val;
+	return 0;
+}
+
+/* CPU-specific MMC initializations */
+__weak int cpu_mmc_init(bd_t *bis)
+{
+	return -1;
+}
+
+/* board-specific MMC initializations. */
+__weak int board_mmc_init(bd_t *bis)
+{
+	return -1;
+}
+
+void mmc_set_preinit(struct mmc *mmc, int preinit)
+{
+	mmc->preinit = preinit;
+}
+
+#if CONFIG_IS_ENABLED(DM_MMC)
+static int mmc_probe(bd_t *bis)
+{
+	int ret, i;
+	struct uclass *uc;
+	struct udevice *dev;
+
+	ret = uclass_get(UCLASS_MMC, &uc);
+	if (ret)
+		return ret;
+
+	/*
+	 * Try to add them in sequence order. Really with driver model we
+	 * should allow holes, but the current MMC list does not allow that.
+	 * So if we request 0, 1, 3 we will get 0, 1, 2.
+	 */
+	for (i = 0; ; i++) {
+		ret = uclass_get_device_by_seq(UCLASS_MMC, i, &dev);
+		if (ret == -ENODEV)
+			break;
+	}
+	uclass_foreach_dev(dev, uc) {
+		ret = device_probe(dev);
+		if (ret)
+			pr_err("%s - probe failed: %d\n", dev->name, ret);
+	}
+
+	return 0;
+}
+#else
+static int mmc_probe(bd_t *bis)
+{
+	if (board_mmc_init(bis) < 0)
+		cpu_mmc_init(bis);
+
+	return 0;
+}
+#endif
+
+int mmc_initialize(bd_t *bis)
+{
+	static int initialized = 0;
+	int ret;
+	if (initialized)	/* Avoid initializing mmc multiple times */
+		return 0;
+	initialized = 1;
+
+#if !CONFIG_IS_ENABLED(BLK)
+#if !CONFIG_IS_ENABLED(MMC_TINY)
+	mmc_list_init();
+#endif
+#endif
+	ret = mmc_probe(bis);
+	if (ret)
+		return ret;
+
+#ifndef CONFIG_SPL_BUILD
+	//print_mmc_devices(',');
+#endif
+
+	mmc_do_preinit();
+	return 0;
+}
+
+#ifdef CONFIG_CMD_BKOPS_ENABLE
+int mmc_set_bkops_enable(struct mmc *mmc)
+{
+	int err;
+	ALLOC_CACHE_ALIGN_BUFFER(u8, ext_csd, MMC_MAX_BLOCK_LEN);
+
+	err = mmc_send_ext_csd(mmc, ext_csd);
+	if (err) {
+		puts("Could not get ext_csd register values\n");
+		return err;
+	}
+
+	if (!(ext_csd[EXT_CSD_BKOPS_SUPPORT] & 0x1)) {
+		puts("Background operations not supported on device\n");
+		return -EMEDIUMTYPE;
+	}
+
+	if (ext_csd[EXT_CSD_BKOPS_EN] & 0x1) {
+		puts("Background operations already enabled\n");
+		return 0;
+	}
+
+	err = mmc_switch(mmc, EXT_CSD_CMD_SET_NORMAL, EXT_CSD_BKOPS_EN, 1);
+	if (err) {
+		puts("Failed to enable manual background operations\n");
+		return err;
+	}
+
+	puts("Enabled manual background operations\n");
+
+	return 0;
+}
+#endif
+
+extern unsigned long blk_dwrite(struct blk_desc *block_dev, lbaint_t start,
+		lbaint_t blkcnt, const void *buffer);
+
+int mmc_key_write(unsigned char *buf, unsigned int size, uint32_t *actual_lenth)
+{
+	ulong start, start_blk, blkcnt, ret;
+	unsigned char * temp_buf = buf;
+	int i = 2, dev = EMMC_DTB_DEV;
+	struct partitions * part = NULL;
+	struct mmc *mmc;
+	struct virtual_partition *vpart = NULL;
+	vpart = aml_get_virtual_partition_by_name(MMC_KEY_NAME);
+	part = aml_get_partition_by_name(MMC_RESERVED_NAME);
+
+	mmc = find_mmc_device(dev);
+
+	start = part->offset + vpart->offset;
+	start_blk = (start / MMC_BLOCK_SIZE);
+	blkcnt = (size / MMC_BLOCK_SIZE);
+	info_disprotect |= DISPROTECT_KEY;
+	do {
+		ret = blk_dwrite(mmc_get_blk_desc(mmc), start_blk, blkcnt, temp_buf);
+		if (ret != blkcnt) {
+			pr_err("[%s] %d, mmc_bwrite error\n",
+				__func__, __LINE__);
+			return 1;
+		}
+		start_blk += vpart->size / MMC_BLOCK_SIZE;
+	} while (--i);
+	info_disprotect &= ~DISPROTECT_KEY;
+	return 0;
+}
+
+
+
+
+extern unsigned long blk_derase(struct blk_desc *block_dev, lbaint_t start,
+		lbaint_t blkcnt);
+
+int mmc_key_erase(void)
+{
+	ulong start, start_blk, blkcnt, ret;
+	struct partitions * part = NULL;
+	struct virtual_partition *vpart = NULL;
+	struct mmc *mmc;
+	vpart = aml_get_virtual_partition_by_name(MMC_KEY_NAME);
+	part = aml_get_partition_by_name(MMC_RESERVED_NAME);
+	int dev = EMMC_DTB_DEV;
+
+	mmc = find_mmc_device(dev);
+	start = part->offset + vpart->offset;
+	start_blk = (start / MMC_BLOCK_SIZE);
+	blkcnt = (vpart->size / MMC_BLOCK_SIZE) * 2;//key and backup key
+	info_disprotect |= DISPROTECT_KEY;
+	ret = blk_derase(mmc_get_blk_desc(mmc), start_blk, blkcnt);
+	info_disprotect &= ~DISPROTECT_KEY;
+	if (ret) {
+		pr_err("[%s] %d mmc_berase error\n",
+				__func__, __LINE__);
+		return 1;
+	}
+	return 0;
+}
+
+
+int mmc_key_read(unsigned char *buf, unsigned int size, uint32_t *actual_lenth)
+{
+	ulong start, start_blk, blkcnt, ret;
+	int dev = EMMC_DTB_DEV;
+	unsigned char *temp_buf = buf;
+	struct partitions * part = NULL;
+	struct mmc *mmc;
+	struct virtual_partition *vpart = NULL;
+	vpart = aml_get_virtual_partition_by_name(MMC_KEY_NAME);
+	part = aml_get_partition_by_name(MMC_RESERVED_NAME);
+
+	mmc = find_mmc_device(dev);
+	*actual_lenth =  0x40000;/*key size is 256KB*/
+	start = part->offset + vpart->offset;
+	start_blk = (start / MMC_BLOCK_SIZE);
+	blkcnt = (size / MMC_BLOCK_SIZE);
+	info_disprotect |= DISPROTECT_KEY;
+	ret = blk_dread(mmc_get_blk_desc(mmc), start_blk, blkcnt, temp_buf);
+	info_disprotect &= ~DISPROTECT_KEY;
+	if (ret != blkcnt) {
+		pr_err("[%s] %d, mmc_bread error\n",
+			__func__, __LINE__);
+		return 1;
+	}
+	return 0;
+}
+
+
+
diff --git a/drivers/mmc/mmc_aml.c b/drivers/mmc/mmc_aml.c
new file mode 100644
index 00000000000..a9b0ff780f8
--- /dev/null
+++ b/drivers/mmc/mmc_aml.c
@@ -0,0 +1,416 @@
+// SPDX-License-Identifier: GPL-2.0+
+/*
+ * Copyright 2008, Freescale Semiconductor, Inc
+ * Andy Fleming
+ *
+ * Based vaguely on the Linux code
+ */
+
+#include <config.h>
+#include <common.h>
+#include <command.h>
+#include <dm.h>
+#include <dm/device-internal.h>
+#include <errno.h>
+#include <mmc.h>
+#include <part.h>
+#include <power/regulator.h>
+#include <malloc.h>
+#include <memalign.h>
+#include <linux/list.h>
+#include <linux/crc32.h>
+#include <rand.h>
+#include <div64.h>
+#include "mmc_private.h"
+#include <amlstorage/emmc_partitions.h>
+#include <amlstorage/partition_table.h>
+#include <amlogic/storage.h>
+#include <amlogic/asm/secure_apb.h>
+#include <amlogic/asm/sd_emmc.h>
+
+static int mmc_set_signal_voltage(struct mmc *mmc, uint signal_voltage);
+
+extern int emmc_probe(uint32_t init_flag);
+
+bool emmckey_is_access_range_legal (struct mmc *mmc, ulong start, lbaint_t blkcnt) {
+	ulong key_start_blk, key_end_blk;
+	u64 key_glb_offset;
+	struct partitions * part = NULL;
+	struct virtual_partition *vpart = NULL;
+	if (IS_MMC(mmc)) {
+		vpart = aml_get_virtual_partition_by_name(MMC_KEY_NAME);
+		part = aml_get_partition_by_name(MMC_RESERVED_NAME);
+		key_glb_offset = part->offset + vpart->offset;
+		key_start_blk = (key_glb_offset / MMC_BLOCK_SIZE);
+		key_end_blk = ((key_glb_offset + vpart->size) / MMC_BLOCK_SIZE - 1);
+		if (!(info_disprotect & DISPROTECT_KEY)) {
+			if ((key_start_blk <= (start + blkcnt -1))
+				&& (key_end_blk >= start)
+				&& (blkcnt != start)) {
+				pr_info("%s, keys %ld, keye %ld, start %ld, blkcnt %ld\n",
+						mmc->cfg->name, key_start_blk,
+						key_end_blk, start, blkcnt);
+				pr_err("Emmckey: Access range is illegal!\n");
+				return 0;
+			}
+		}
+	}
+	return 1;
+}
+
+int emmc_boot_chk(struct mmc *mmc)
+{
+	u32 val = 0;
+
+	if (strcmp(mmc->dev->name, "emmc"))
+		return 0;
+
+	val = readl(SEC_AO_SEC_GP_CFG0);
+	pr_info("SEC_AO_SEC_GP_CFG0 = %x\n", val);
+	if ((val & 0xf) == 0x1)
+		return 1;
+
+	return 0;
+}
+
+#if CONFIG_IS_ENABLED(MMC_TINY)
+static struct mmc mmc_static;
+struct mmc *find_mmc_device(int dev_num)
+{
+	return &mmc_static;
+}
+
+void mmc_do_preinit(void)
+{
+	struct mmc *m = &mmc_static;
+#ifdef CONFIG_FSL_ESDHC_ADAPTER_IDENT
+	mmc_set_preinit(m, 1);
+#endif
+	if (m->preinit)
+		mmc_start_init(m);
+}
+
+struct blk_desc *mmc_get_blk_desc(struct mmc *mmc)
+{
+	return &mmc->block_dev;
+}
+#endif
+
+#if !CONFIG_IS_ENABLED(DM_MMC)
+
+#if CONFIG_IS_ENABLED(MMC_UHS_SUPPORT)
+static int mmc_wait_dat0(struct mmc *mmc, int state, int timeout)
+{
+	return -ENOSYS;
+}
+#endif
+
+__weak int board_mmc_getwp(struct mmc *mmc)
+{
+	return -1;
+}
+
+int mmc_getwp(struct mmc *mmc)
+{
+	int wp;
+
+	wp = board_mmc_getwp(mmc);
+
+	if (wp < 0) {
+		if (mmc->cfg->ops->getwp)
+			wp = mmc->cfg->ops->getwp(mmc);
+		else
+			wp = 0;
+	}
+
+	return wp;
+}
+
+__weak int board_mmc_getcd(struct mmc *mmc)
+{
+	return -1;
+}
+#endif
+
+#ifdef CONFIG_MMC_TRACE
+void mmmc_trace_before_send(struct mmc *mmc, struct mmc_cmd *cmd)
+{
+	pr_info("CMD_SEND:%d\n", cmd->cmdidx);
+	pr_info("\t\tARG\t\t\t 0x%08X\n", cmd->cmdarg);
+}
+
+void mmmc_trace_after_send(struct mmc *mmc, struct mmc_cmd *cmd, int ret)
+{
+	int i;
+	u8 *ptr;
+
+	if (ret) {
+		pr_info("\t\tRET\t\t\t %d\n", ret);
+	} else {
+		switch (cmd->resp_type) {
+		case MMC_RSP_NONE:
+			pr_info("\t\tMMC_RSP_NONE\n");
+			break;
+		case MMC_RSP_R1:
+			pr_info("\t\tMMC_RSP_R1,5,6,7 \t 0x%08X \n",
+				cmd->response[0]);
+			break;
+		case MMC_RSP_R1b:
+			pr_info("\t\tMMC_RSP_R1b\t\t 0x%08X \n",
+				cmd->response[0]);
+			break;
+		case MMC_RSP_R2:
+			pr_info("\t\tMMC_RSP_R2\t\t 0x%08X \n",
+				cmd->response[0]);
+			pr_info("\t\t          \t\t 0x%08X \n",
+				cmd->response[1]);
+			pr_info("\t\t          \t\t 0x%08X \n",
+				cmd->response[2]);
+			pr_info("\t\t          \t\t 0x%08X \n",
+				cmd->response[3]);
+			pr_info("\n");
+			pr_info("\t\t\t\t\tDUMPING DATA\n");
+			for (i = 0; i < 4; i++) {
+				int j;
+				pr_info("\t\t\t\t\t%03d - ", i*4);
+				ptr = (u8 *)&cmd->response[i];
+				ptr += 3;
+				for (j = 0; j < 4; j++)
+					pr_info("%02X ", *ptr--);
+				pr_info("\n");
+			}
+			break;
+		case MMC_RSP_R3:
+			pr_info("\t\tMMC_RSP_R3,4\t\t 0x%08X \n",
+				cmd->response[0]);
+			break;
+		default:
+			pr_info("\t\tERROR MMC rsp not supported\n");
+			break;
+		}
+	}
+}
+
+#endif
+
+int mmc_get_ext_csd(struct mmc *mmc, u8 *ext_csd)
+{
+	return mmc_send_ext_csd(mmc, ext_csd);
+}
+
+#if !CONFIG_IS_ENABLED(MMC_TINY)
+u8 ext_csd_w[] = {191, 187, 185, 183, 179, 178, 177, 175,
+					173, 171, 169, 167, 165, 164, 163, 162,
+					161, 156, 155, 143, 140, 136, 134, 133,
+					132, 131, 62, 59, 56, 52, 37, 34,
+					33, 32, 31, 30, 29, 22, 17, 16, 15};
+
+int mmc_set_ext_csd(struct mmc *mmc, u8 index, u8 value)
+{
+	int ret = -21, i;
+
+	for (i = 0; i < sizeof(ext_csd_w); i++) {
+		if (ext_csd_w[i] == index)
+			break;
+	}
+	if (i != sizeof(ext_csd_w))
+		ret = mmc_switch(mmc, EXT_CSD_CMD_SET_NORMAL, index, value);
+
+	return ret;
+}
+
+
+#endif
+
+#if !CONFIG_IS_ENABLED(DM_MMC)
+#ifdef MMC_SUPPORTS_TUNING
+static int mmc_execute_tuning(struct mmc *mmc, uint opcode)
+{
+	return -ENOTSUPP;
+}
+#endif
+
+static int mmc_set_ios(struct mmc *mmc)
+{
+	int ret = 0;
+
+	if (mmc->cfg->ops->set_ios)
+		ret = mmc->cfg->ops->set_ios(mmc);
+
+	return ret;
+}
+#endif
+
+struct mode_width_tuning {
+	enum bus_mode mode;
+	uint widths;
+#ifdef MMC_SUPPORTS_TUNING
+	uint tuning;
+#endif
+};
+
+#if CONFIG_IS_ENABLED(MMC_IO_VOLTAGE)
+int mmc_voltage_to_mv(enum mmc_voltage voltage)
+{
+	switch (voltage) {
+	case MMC_SIGNAL_VOLTAGE_000: return 0;
+	case MMC_SIGNAL_VOLTAGE_330: return 3300;
+	case MMC_SIGNAL_VOLTAGE_180: return 1800;
+	case MMC_SIGNAL_VOLTAGE_120: return 1200;
+	}
+	return -EINVAL;
+}
+
+static int mmc_set_signal_voltage(struct mmc *mmc, uint signal_voltage)
+{
+	int err;
+
+	if (mmc->signal_voltage == signal_voltage)
+		return 0;
+
+	mmc->signal_voltage = signal_voltage;
+	err = mmc_set_ios(mmc);
+	if (err)
+		pr_debug("unable to set voltage (err %d)\n", err);
+
+	return err;
+}
+#else
+static inline int mmc_set_signal_voltage(struct mmc *mmc, uint signal_voltage)
+{
+	return 0;
+}
+#endif
+
+#if !CONFIG_IS_ENABLED(DM_MMC)
+/* board-specific MMC power initializations. */
+__weak void board_mmc_power_init(void)
+{
+}
+#endif
+
+#ifdef CONFIG_CMD_BKOPS_ENABLE
+int mmc_set_bkops_enable(struct mmc *mmc)
+{
+	int err;
+	ALLOC_CACHE_ALIGN_BUFFER(u8, ext_csd, MMC_MAX_BLOCK_LEN);
+
+	err = mmc_send_ext_csd(mmc, ext_csd);
+	if (err) {
+		puts("Could not get ext_csd register values\n");
+		return err;
+	}
+
+	if (!(ext_csd[EXT_CSD_BKOPS_SUPPORT] & 0x1)) {
+		puts("Background operations not supported on device\n");
+		return -EMEDIUMTYPE;
+	}
+
+	if (ext_csd[EXT_CSD_BKOPS_EN] & 0x1) {
+		puts("Background operations already enabled\n");
+		return 0;
+	}
+
+	err = mmc_switch(mmc, EXT_CSD_CMD_SET_NORMAL, EXT_CSD_BKOPS_EN, 1);
+	if (err) {
+		puts("Failed to enable manual background operations\n");
+		return err;
+	}
+
+	puts("Enabled manual background operations\n");
+
+	return 0;
+}
+#endif
+
+extern unsigned long blk_dwrite(struct blk_desc *block_dev, lbaint_t start,
+		lbaint_t blkcnt, const void *buffer);
+
+int mmc_key_write(unsigned char *buf, unsigned int size, uint32_t *actual_lenth)
+{
+	ulong start, start_blk, blkcnt, ret;
+	unsigned char * temp_buf = buf;
+	int i = 2, dev = EMMC_DTB_DEV;
+	struct partitions * part = NULL;
+	struct mmc *mmc;
+	struct virtual_partition *vpart = NULL;
+	vpart = aml_get_virtual_partition_by_name(MMC_KEY_NAME);
+	part = aml_get_partition_by_name(MMC_RESERVED_NAME);
+
+	mmc = find_mmc_device(dev);
+
+	start = part->offset + vpart->offset;
+	start_blk = (start / MMC_BLOCK_SIZE);
+	blkcnt = (size / MMC_BLOCK_SIZE);
+	info_disprotect |= DISPROTECT_KEY;
+	do {
+		ret = blk_dwrite(mmc_get_blk_desc(mmc), start_blk, blkcnt, temp_buf);
+		if (ret != blkcnt) {
+			pr_err("[%s] %d, mmc_bwrite error\n",
+				__func__, __LINE__);
+			return 1;
+		}
+		start_blk += vpart->size / MMC_BLOCK_SIZE;
+	} while (--i);
+	info_disprotect &= ~DISPROTECT_KEY;
+	return 0;
+}
+
+extern unsigned long blk_derase(struct blk_desc *block_dev, lbaint_t start,
+		lbaint_t blkcnt);
+
+int mmc_key_erase(void)
+{
+	ulong start, start_blk, blkcnt, ret;
+	struct partitions * part = NULL;
+	struct virtual_partition *vpart = NULL;
+	struct mmc *mmc;
+	vpart = aml_get_virtual_partition_by_name(MMC_KEY_NAME);
+	part = aml_get_partition_by_name(MMC_RESERVED_NAME);
+	int dev = EMMC_DTB_DEV;
+
+	mmc = find_mmc_device(dev);
+	start = part->offset + vpart->offset;
+	start_blk = (start / MMC_BLOCK_SIZE);
+	blkcnt = (vpart->size / MMC_BLOCK_SIZE) * 2;//key and backup key
+	info_disprotect |= DISPROTECT_KEY;
+	ret = blk_derase(mmc_get_blk_desc(mmc), start_blk, blkcnt);
+	info_disprotect &= ~DISPROTECT_KEY;
+	if (ret) {
+		pr_err("[%s] %d mmc_berase error\n",
+				__func__, __LINE__);
+		return 1;
+	}
+	return 0;
+}
+
+
+int mmc_key_read(unsigned char *buf, unsigned int size, uint32_t *actual_lenth)
+{
+	ulong start, start_blk, blkcnt, ret;
+	int dev = EMMC_DTB_DEV;
+	unsigned char *temp_buf = buf;
+	struct partitions * part = NULL;
+	struct mmc *mmc;
+	struct virtual_partition *vpart = NULL;
+	vpart = aml_get_virtual_partition_by_name(MMC_KEY_NAME);
+	part = aml_get_partition_by_name(MMC_RESERVED_NAME);
+
+	mmc = find_mmc_device(dev);
+	*actual_lenth =  0x40000;/*key size is 256KB*/
+	start = part->offset + vpart->offset;
+	start_blk = (start / MMC_BLOCK_SIZE);
+	blkcnt = (size / MMC_BLOCK_SIZE);
+	info_disprotect |= DISPROTECT_KEY;
+	ret = blk_dread(mmc_get_blk_desc(mmc), start_blk, blkcnt, temp_buf);
+	info_disprotect &= ~DISPROTECT_KEY;
+	if (ret != blkcnt) {
+		pr_err("[%s] %d, mmc_bread error\n",
+			__func__, __LINE__);
+		return 1;
+	}
+	return 0;
+}
+
+
+
diff --git a/drivers/mmc/storage_emmc.c b/drivers/mmc/storage_emmc.c
new file mode 100644
index 00000000000..d938066e49b
--- /dev/null
+++ b/drivers/mmc/storage_emmc.c
@@ -0,0 +1,946 @@
+// SPDX-License-Identifier: (GPL-2.0+ OR MIT)
+#include <amlogic/storage.h>
+#include <amlstorage/partition_table.h>
+#include <amlstorage/emmc_partitions.h>
+#include <amlogic/cpu_id.h>
+#include <amlogic/asm/bl31_apis.h>
+#include <linux/compat.h>
+#include <amlogic/aml_mmc.h>
+
+#include <asm/global_data.h>
+#include <dm/pinctrl.h>
+
+
+#define USER_PARTITION 0
+#define BOOT0_PARTITION 1
+#define BOOT1_PARTITION 2
+#define RPMB_PARTITION 3
+
+#define NOMAL_INIT 0
+#define ERASE_ALL 3
+#define ERASE_RESERVED 2
+
+#define GXB_START_BLK   0
+#define GXL_START_BLK   1
+#define STORAGE_EMMC 1
+/* max 2MB for emmc in blks */
+#define UBOOT_SIZE  (0x1000)
+#define BLOCK_SIZE 512
+
+
+
+
+
+extern int find_dev_num_by_partition_name (char const *name);
+extern struct partitions *get_partition_info_by_num(const int num);
+extern bool emmckey_is_protected(struct mmc *mmc);
+extern int info_disprotect;
+extern int dtb_read(void *addr);
+extern int dtb_write(void *addr);
+extern int renew_partition_tbl(unsigned char *buffer);
+
+static int storage_range_check(struct mmc *mmc,char const *part_name,loff_t offset, size_t *size,loff_t *off) {
+
+	struct partitions *part_info = NULL;
+
+	//cpu_id_t cpu_id = get_cpu_id();
+
+
+	if (strcmp(part_name, "bootloader") == 0) {
+		*off = 0;
+		if (1) { //if (cpu_id.family_id >= MESON_CPU_MAJOR_ID_GXL) {
+			*off += 512;
+		}
+		if (*size == 0) {
+			*size =mmc->capacity_boot;
+			if (1) { //if (cpu_id.family_id >= MESON_CPU_MAJOR_ID_GXL) {
+				*size = *size - 512;
+			}
+		}
+	} else {
+		part_info = find_mmc_partition_by_name(part_name);
+		if (!part_info) {
+			printf("error partition name!\n");
+			return 1;
+		}
+		if ((part_info->mask_flags & PART_PROTECT_FLAG) &&
+			!(info_disprotect & DISPROTECT_KEY)) {
+				printf("%s is protected, pls open it in Dts\n",
+				part_info->name);
+				return 1;
+		}
+
+		*off = part_info->offset+offset;
+		if (offset >= part_info->size) {
+			printf("Start address out #%s# partition'address region,(off < 0x%llx)\n",
+						part_name, part_info->size);
+			return 1;
+		}
+		if ((*off+*size) > (part_info->size+part_info->offset)) {
+			printf("End address exceeds #%s# partition,(offset = 0x%llx,size = 0x%llx)\n",
+						part_name, part_info->offset,part_info->size);
+			return 1;
+		}
+
+		if (*size == 0) {
+			*size = part_info->size - offset;
+		}
+	}
+	return 0;
+}
+
+
+
+static int storage_rsv_range_check(char const *part_name, size_t *size,loff_t *off) {
+
+	struct partitions *part = NULL;
+	struct virtual_partition *vpart = NULL;
+
+
+	vpart = aml_get_virtual_partition_by_name(part_name);
+
+	if (!vpart) {
+		printf("error partition name!\n");
+		return 1;
+	}
+	part = aml_get_partition_by_name(MMC_RESERVED_NAME);
+	if (!part) {
+		printf("error partition name!\n");
+		return 1;
+	}
+	*off = part->offset + vpart->offset;
+	if ((*size) > vpart->size) {
+		printf("End address exceeds #%s# partition,(offset = 0x%llx,size = 0x%llx)\n",
+						part_name, vpart->offset,vpart->size);
+		return 1;
+	}
+	if (*size == 0)
+		*size = vpart->size;
+	return 0;
+}
+
+
+static int storage_byte_read(struct mmc *mmc,loff_t off, size_t  size,void *addr) {
+
+	int blk_shift = 0;
+	u64 cnt = 0, n = 0, blk = 0, sz_byte = 0;
+	ulong start_blk;
+	void *addr_tmp;
+	void *addr_byte;
+
+	blk_shift =  ffs(mmc->read_bl_len) - 1;
+	blk = off >>  blk_shift ;
+	cnt = size >>  blk_shift ;
+	sz_byte = size - ((cnt) << blk_shift) ;
+	mmc_init(mmc);
+
+	pr_info("blk:%lld   cnt:%lld \n",blk,cnt);
+	n = blk_dread(mmc_get_blk_desc(mmc), blk, cnt, addr);
+	if ((n == cnt) && (sz_byte != 0)) {
+	   /*printf("sz_byte=%#llx bytes\n",sz_byte);*/
+	   addr_tmp = malloc(mmc->read_bl_len);
+	   addr_byte = (void *)(addr+cnt*(mmc->read_bl_len));
+	   start_blk = blk+cnt;
+
+	   if (addr_tmp == NULL) {
+		   printf("mmc read: malloc fail\n");
+		   return 1;
+	   }
+
+	   if (blk_dread(mmc_get_blk_desc(mmc), start_blk, 1, addr_tmp) != 1) { // read 1 block
+		   free(addr_tmp);
+		   printf("mmc read 1 block fail\n");
+		   return 1;
+	   }
+
+	   memcpy(addr_byte, addr_tmp, sz_byte);
+	   free(addr_tmp);
+	}
+	return (n == cnt) ? 0 : 1;
+
+
+}
+
+static int storage_byte_write(struct mmc *mmc,loff_t off, size_t  size,void *addr) {
+
+	int blk_shift = 0;
+	u64 cnt = 0, n = 0, blk = 0, sz_byte = 0;
+
+	blk_shift =  ffs(mmc->read_bl_len) - 1;
+	blk = off >>  blk_shift ;
+	cnt = size >>  blk_shift ;
+	sz_byte = size - ((cnt) << blk_shift);
+	mmc_init(mmc);
+	pr_info("blk:%lld   cnt:%lld \n",blk,cnt);
+
+	n = blk_dwrite(mmc_get_blk_desc(mmc), blk, cnt, addr);
+	if ((n == cnt) && (sz_byte != 0)) {
+		// printf("sz_byte=%#llx bytes\n",sz_byte);
+		void *addr_tmp = malloc(mmc->write_bl_len);
+		void *addr_byte = (void*)(addr+cnt*(mmc->write_bl_len));
+		ulong start_blk = blk+cnt;
+
+		if (addr_tmp == NULL) {
+			printf("mmc write: malloc fail\n");
+			return 1;
+		}
+
+		if (blk_dread(mmc_get_blk_desc(mmc), start_blk, 1, addr_tmp) != 1) { // read 1 block
+			free(addr_tmp);
+			printf("mmc read 1 block fail\n");
+			return 1;
+		}
+
+		memcpy(addr_tmp, addr_byte, sz_byte);
+		if (blk_dwrite(mmc_get_blk_desc(mmc), start_blk, 1, addr_tmp) != 1) { // write 1 block
+			free(addr_tmp);
+			printf("mmc write 1 block fail\n");
+			return 1;
+		}
+		free(addr_tmp);
+	}
+	//printf("%#llx blocks , %#llx bytes written: %s\n", n, sz_byte, (n==cnt) ? "OK" : "ERROR");
+	return (n == cnt) ? 0 : 1;
+}
+
+
+static int storage_byte_erase(struct mmc *mmc,loff_t off, size_t  size) {
+
+	int blk_shift = 0;
+	u64 cnt = 0, n = 0, blk = 0;
+
+	blk_shift =  ffs(mmc->read_bl_len) - 1;
+	blk = off >>  blk_shift ;
+	cnt = size >>  blk_shift ;
+	mmc_init(mmc);
+	pr_info("blk:%lld   cnt:%lld \n",blk,cnt);
+	if (cnt)
+		n = blk_derase(mmc_get_blk_desc(mmc), blk, cnt);
+	printf("%lld blocks erased: %s\n", cnt, (n == 0) ? "OK" : "ERROR");
+	return (n == 0) ? 0 : 1;
+}
+
+static int storage_erase_in_part(char const *part_name, loff_t off, size_t size)
+{
+	int ret = 1;
+	struct mmc *mmc;
+	loff_t offset;
+
+	mmc = find_mmc_device(STORAGE_EMMC);
+	if (!mmc)
+		return 1;
+
+	ret = storage_range_check(mmc,part_name, off, &size, &offset);
+	if (ret)
+		return ret;
+
+	ret = storage_byte_erase(mmc, offset, size);
+	return (ret == 0) ? 0 : 1;
+}
+
+
+
+static int storage_read_in_part(char const *part_name, loff_t off, size_t size, void *dest)
+{
+	int ret =1;
+	struct mmc *mmc;
+	loff_t offset;
+
+	mmc = find_mmc_device(STORAGE_EMMC);
+	if (!mmc)
+		return 1;
+
+	ret = storage_range_check(mmc,part_name,off,&size,&offset);
+
+	if (ret) return ret;
+
+	ret = storage_byte_read(mmc, offset, size, dest);
+
+	return ret;
+}
+
+
+static int storage_write_in_part(char const *part_name, loff_t off, size_t size, void *source)
+{
+	int ret = 1;
+	loff_t offset;
+	struct mmc *mmc;
+
+	mmc = find_mmc_device(STORAGE_EMMC);
+	if (!mmc) {
+		printf("Cannot find mmc. \n");
+		return 1;
+	}
+	ret = storage_range_check(mmc,part_name, off, &size, &offset);
+	if (ret) return ret;
+
+	ret = storage_byte_write(mmc, offset, size, source);
+	return ret;
+}
+
+static int storage_mmc_erase_user(struct mmc *mmc) {
+	int ret = 0, i;
+	struct partitions *part_info = NULL;
+
+	if (info_disprotect & DISPROTECT_KEY) {//key disprotect,erase all
+		ret = blk_derase(mmc_get_blk_desc(mmc), 0, 0);
+	} else {//key protect partition with the protect_flag
+		for (i = 0;;i++) {
+			part_info = get_partition_info_by_num(i);
+			if (part_info == NULL)
+				break;
+			if (!strcmp("reserved", part_info->name)) {
+				printf("Part:reserved is skiped\n");
+				continue;
+			}
+			if (part_info->mask_flags & PART_PROTECT_FLAG) {
+				printf("Part:%s is protected\n", part_info->name);
+				continue;
+			}
+			ret = blk_derase(mmc_get_blk_desc(mmc),
+					part_info->offset / BLOCK_SIZE,
+					part_info->size / BLOCK_SIZE);
+			printf("Erased: %s %s\n",
+					part_info->name,
+					(ret == 0)? "OK" : "ERR");
+		}
+	}
+	printf("User partition erased: %s\n", (ret == 0) ? "OK" : "ERROR");
+	return ret;
+}
+
+static int storage_mmc_erase(int flag, struct mmc *mmc) {
+
+	int ret = 0;
+	loff_t off = 0;
+	size_t size = 0;
+
+	if (flag >= ERASE_ALL) {//erase all except reserved
+		ret = storage_mmc_erase_user(mmc);
+		if (ret != 0) {
+			return -1;
+		}
+
+		ret = blk_select_hwpart_devnum(UCLASS_MMC, STORAGE_EMMC, BOOT0_PARTITION);
+		if (ret) goto R_SWITCH_BACK;
+		ret = blk_derase(mmc_get_blk_desc(mmc), 0, 0);
+		printf("boot0 partition erased: %s\n", (ret == 0) ? "OK" : "ERROR");
+
+		ret = blk_select_hwpart_devnum(UCLASS_MMC, STORAGE_EMMC, BOOT1_PARTITION);
+
+		if (ret) goto R_SWITCH_BACK;
+		ret = blk_derase(mmc_get_blk_desc(mmc), 0, 0);
+		printf("boot1 partition erased: %s\n", (ret == 0) ? "OK" : "ERROR");
+R_SWITCH_BACK:
+		ret = blk_select_hwpart_devnum(UCLASS_MMC, STORAGE_EMMC, USER_PARTITION);
+
+	} else if (flag == ERASE_RESERVED) {//erase reserved
+
+		info_disprotect |= DISPROTECT_KEY;
+		ret = storage_rsv_range_check("reserved", &size, &off);
+		if (ret != 0) {
+			return -1;
+		}
+		ret = storage_erase_in_part("reserved", off, size);
+		info_disprotect &= ~DISPROTECT_KEY;
+	}
+
+	return ret;
+
+
+}
+
+
+
+int mmc_storage_init(unsigned char init_flag) {
+
+	int ret =1;
+	struct mmc *mmc;
+	mmc = find_mmc_device(STORAGE_EMMC);
+	mmc->has_init=0;
+	pinctrl_select_state(mmc->dev, "default");
+	if (!mmc) {
+		return -1;
+	}
+	ret = mmc_init(mmc);
+	if (ret != 0) {
+		return -1;
+	}
+	ret = storage_mmc_erase(init_flag, mmc);
+	return ret;
+}
+
+
+
+
+
+uint64_t mmc_storage_get_part_size(const char *part_name) {
+
+	struct partitions *part_info = NULL;
+
+	part_info = find_mmc_partition_by_name(part_name);
+
+	if (part_info == NULL) {
+		printf("get partition info failed !!\n");
+		return -1;
+	}
+	return part_info->size;
+}
+
+int mmc_storage_read(const char *part_name, loff_t off, size_t size, void *dest) {
+
+	int ret=1;
+	struct mmc *mmc;
+	mmc = find_mmc_device(STORAGE_EMMC);
+
+	if (!mmc)
+		return 1;
+
+	if (!part_name) {//the operating object is the device,the unit of operation is block.
+		info_disprotect |= DISPROTECT_KEY;
+		ret = blk_dread(mmc_get_blk_desc(mmc), off, size, dest);
+		info_disprotect &= ~DISPROTECT_KEY;
+		printf("%d blocks read: %s\n", ret, (ret == size) ? "OK" : "ERROR");
+		return (ret == size) ? 0 : 1;
+
+	} else {//the opering object is partition,the unit of operation is byte.
+		ret = storage_read_in_part(part_name, off,size, dest);
+	}
+
+	return ret;
+
+}
+
+
+int mmc_storage_write(const char *part_name, loff_t off, size_t size, void *source) {
+
+	int ret=1;
+
+	struct mmc *mmc;
+	mmc = find_mmc_device(STORAGE_EMMC);
+	if (!mmc)
+		return 1;
+
+	if (!part_name) {//the operating object is the device,the unit of operation is block.
+		info_disprotect |= DISPROTECT_KEY;
+		ret = blk_dwrite(mmc_get_blk_desc(mmc), off, size, source);
+		info_disprotect &= ~DISPROTECT_KEY;
+		printf("%d blocks written: %s\n", ret, (ret == size) ? "OK" : "ERROR");
+		return (ret == size) ? 0 : 1;
+	} else {//the opering object is partition,the unit of operation is byte.
+		ret = storage_write_in_part(part_name, off, size, source);
+	}
+	return ret;
+}
+
+int mmc_storage_erase(const char *part_name, loff_t off, size_t size, int scrub_flag) {
+
+	int ret=1;
+	struct mmc *mmc;
+	mmc = find_mmc_device(STORAGE_EMMC);
+	if (!mmc)
+		return 1;
+
+	if (!part_name) {//the operating object is the device,the unit of operation is block.
+		ret = storage_mmc_erase(ERASE_ALL, mmc);
+		return (ret == 0) ? 0 : 1;
+	} else {//the opering object is partition,the unit of operation is byte.
+		ret = storage_erase_in_part(part_name, off, size);
+	}
+	return ret;
+}
+
+uint8_t mmc_storage_get_copies(const char *part_name) {
+
+	char ret=3;
+
+	return ret;
+
+}
+
+
+uint64_t mmc_get_copy_size(const char *part_name) {
+
+	struct partitions *part_info = NULL;
+
+#ifdef CONFIG_AML_GPT
+	return UBOOT_SIZE*512;
+#else
+	part_info = find_mmc_partition_by_name("bootloader");
+	if (part_info == NULL) {
+		printf("get partition info failed !!\n");
+		return -1;
+	}
+	return part_info->size;
+#endif
+}
+
+/* dtb read&write operation with backup updates */
+static u32 _calc_boot_info_checksum(struct storage_emmc_boot_info *boot_info)
+{
+	u32 *buffer = (u32*)boot_info;
+	u32 checksum = 0;
+	int i = 0;
+
+	do {
+		checksum += buffer[i];
+	} while (i++ < ((EMMC_BOOT_INFO_SIZE >> 2) - 2));
+
+	return checksum;
+}
+
+static int fill_mask8_part(struct part_property *mask8)
+{
+	struct partitions *part;
+	int i = 0, mask8_cnt = 0;
+
+	part = get_partition_info_by_num(i);
+	while (part) {
+		if ((part->mask_flags == 8)
+			&& (mask8_cnt++ < BOOTINFO_MAX_PARTITIONS)) {
+			strncpy(mask8->name, part->name, strlen(part->name));
+			mask8->addr = part->offset / MMC_BLOCK_SIZE;
+			mask8->size = part->size / MMC_BLOCK_SIZE;
+			mask8++;
+		}
+		if (mask8_cnt == BOOTINFO_MAX_PARTITIONS)
+			break;
+		i++;
+		part = get_partition_info_by_num(i);
+	}
+
+	return mask8_cnt;
+}
+
+static int amlmmc_write_info_sector(struct mmc *mmc)
+{
+	struct storage_emmc_boot_info *boot_info;
+	struct virtual_partition *ddr_part;
+	struct partitions *part;
+	/* partitons with mask = 8 need to fill to bootinfo */
+	struct part_property *mask8;
+	int mask8_partition_count;
+	u8 *buffer;
+	int ret = 0, i;
+
+	buffer = malloc(MMC_BLOCK_SIZE);
+	if (!buffer)
+		return -ENOMEM;
+
+	memset(buffer, 0, sizeof(*boot_info));
+	boot_info = (struct storage_emmc_boot_info *)buffer;
+	part = aml_get_partition_by_name(MMC_RESERVED_NAME);
+	boot_info->rsv_base_addr = part->offset / MMC_BLOCK_SIZE;
+	ddr_part =  aml_get_virtual_partition_by_name(MMC_DDR_PARAMETER_NAME);
+	boot_info->ddr.addr = ddr_part->offset / MMC_BLOCK_SIZE;
+	boot_info->ddr.size = ddr_part->size / MMC_BLOCK_SIZE;
+
+	mask8 = boot_info->parts;
+	mask8_partition_count = fill_mask8_part(mask8);
+
+	boot_info->version = 1;
+	boot_info->checksum = _calc_boot_info_checksum(boot_info);
+
+	printf("boot_info.rsv_base_addr:\t%04x\n", boot_info->rsv_base_addr);
+	printf("boot_info.ddr.addr:%04x\n", boot_info->ddr.addr);
+	printf("boot_info.ddr.size:%04x\n", boot_info->ddr.size);
+	printf("boot info: parts %d\n", mask8_partition_count);
+	for (i = 0; i < mask8_partition_count; i++) {
+		printf("boot_info.part[%d]\n", i);
+		printf("\t.name:%s\n", boot_info->parts[i].name);
+		printf("\t.addr:%04x\n", boot_info->parts[i].addr);
+		printf("\t.size:%04x\n", boot_info->parts[i].size);
+	}
+	printf("boot_info.version:%04x\n", boot_info->version);
+	printf("boot_info.checksum:%04x\n", boot_info->checksum);
+
+	if (blk_dwrite(mmc_get_blk_desc(mmc), 0, 1, buffer) != 1)
+		ret = -EIO;
+
+	free(buffer);
+	return ret;
+}
+
+int mmc_boot_read(const char *part_name, uint8_t cpy, size_t size, void *dest) {
+
+	char ret=1;
+	int i;
+
+	if (cpy == 0)
+		cpy = 1;
+	else if (cpy == 1)
+		cpy = 2;
+	else if (cpy == 2)
+		cpy = 4;
+	else if (cpy == 0xff)
+		cpy = 7;
+	for (i=0;i<3;i++) {//cpy:
+
+		if (cpy & 1) {
+			ret = blk_select_hwpart_devnum(UCLASS_MMC, STORAGE_EMMC, i);
+			if (ret) goto R_SWITCH_BACK;
+#ifdef CONFIG_AML_GPT
+			if (i == 0)
+				continue;
+#endif
+			ret = storage_read_in_part(part_name, 0, size, dest);
+
+			if (ret != 0) {
+				printf("storage read bootloader failed \n");
+				goto R_SWITCH_BACK;
+			}
+		}
+		cpy = cpy >> 1;
+	}
+
+
+R_SWITCH_BACK:
+	ret = blk_select_hwpart_devnum(UCLASS_MMC, STORAGE_EMMC, USER_PARTITION);
+	if (ret != 0) {
+		printf("switch part  failed \n");
+		return -1;
+	}
+
+	return ret;
+
+}
+
+int mmc_boot_write(const char *part_name, uint8_t cpy, size_t size, void *source) {
+
+	char ret=1;
+	int i = 0;
+	struct mmc *mmc;
+
+	mmc = find_mmc_device(STORAGE_EMMC);
+
+	if (cpy == 0)
+		cpy = 1;
+	else if (cpy == 1)
+		cpy = 2;
+	else if (cpy == 2)
+		cpy = 4;
+	else if (cpy == 0xff)
+		cpy = 7;
+
+	for (i=0;i<3;i++) {//cpy:bin 100 is oprate boot1,bin 010 is oprate boot0,bin 001 is oprate user bootloader.bin 111 is operate all boot.
+
+		if (cpy & 1) {
+			ret = blk_select_hwpart_devnum(UCLASS_MMC, STORAGE_EMMC, i);
+			if (ret) goto W_SWITCH_BACK;
+#ifdef CONFIG_EMMC_BOOT1_TOUCH_REGION
+			if (i == 2) {
+				size = CONFIG_EMMC_BOOT1_TOUCH_REGION;
+			}
+#endif
+#ifdef CONFIG_AML_GPT
+			if (i == 0)
+				continue;
+#endif
+			ret = storage_write_in_part(part_name, 0, size, source);
+
+			if (ret != 0) {
+				printf("storage write bootloader failed \n");
+				goto W_SWITCH_BACK;
+			}
+			if (i != 0)
+				amlmmc_write_info_sector(mmc);
+		}
+		cpy = cpy >> 1;
+	}
+
+
+W_SWITCH_BACK:
+	ret = blk_select_hwpart_devnum(UCLASS_MMC, STORAGE_EMMC, USER_PARTITION);
+	if (ret != 0) {
+		printf("switch part failed \n");
+		return -1;
+	}
+
+	return ret;
+
+}
+
+int mmc_boot_erase(const char *part_name, uint8_t cpy) {
+
+	char ret=1;
+	int i;
+	size_t size = 0;
+
+	if (cpy == 0)
+		cpy = 1;
+	else if (cpy == 1)
+		cpy = 2;
+	else if (cpy == 2)
+		cpy = 4;
+	else if (cpy == 0xff)
+		cpy = 7;
+	for (i=0;i<3;i++) {//cpy:
+
+		if (cpy & 1) {
+			ret = blk_select_hwpart_devnum(UCLASS_MMC, STORAGE_EMMC, i);
+			if (ret) goto E_SWITCH_BACK;
+#ifdef CONFIG_EMMC_BOOT1_TOUCH_REGION
+			if (i == 2) {
+				size = CONFIG_EMMC_BOOT1_TOUCH_REGION;
+			}
+#endif
+#ifdef CONFIG_AML_GPT
+			if (i == 0)
+				continue;
+#endif
+			ret = storage_erase_in_part(part_name, 0, size);
+
+			if (ret != 0) {
+				printf("storage read bootloader failed \n");
+				goto E_SWITCH_BACK;
+			}
+		}
+		cpy = cpy >> 1;
+	}
+
+
+E_SWITCH_BACK:
+	ret = blk_select_hwpart_devnum(UCLASS_MMC, STORAGE_EMMC, USER_PARTITION);
+	if (ret != 0) {
+		printf("switch part faild \n");
+		return -1;
+	}
+
+
+	return ret;
+}
+
+uint32_t mmc_get_rsv_size(const char *rsv_name) {
+
+	struct virtual_partition *vpart = NULL;
+	vpart = aml_get_virtual_partition_by_name(rsv_name);
+	printf("the %s partition size is:%llx   byte\n",rsv_name,vpart->size);
+	return vpart->size;
+
+}
+
+static inline int env_read(size_t size, void *buf) {
+	return storage_read_in_part("env", 0, size, buf);
+}
+
+static inline int env_write(size_t size, void *buf) {
+	return storage_write_in_part("env", 0, size, buf);
+}
+
+int mmc_read_rsv(const char *rsv_name, size_t size, void *buf) {
+
+	char ret=1;
+	struct mmc *mmc;
+	loff_t off =0;
+	/*unsigned long dtImgAddr = simple_strtoul(buf, NULL, 16);*/
+	ret = !strcmp("env", rsv_name) || !strcmp("key", rsv_name)
+		|| !strcmp("dtb", rsv_name)||!strcmp("fastboot", rsv_name)
+		||!strcmp("ddr-parameter", rsv_name);
+	if (!ret) return 1;
+
+	mmc = find_mmc_device(STORAGE_EMMC);
+	if (!mmc) {
+		puts("no mmc devices available\n");
+		return 1;
+	}
+
+	if (!strcmp("env", rsv_name)) {
+		ret = env_read(size, buf);
+		return ret;
+	}
+
+	ret = storage_rsv_range_check(rsv_name, &size, &off);
+	if (ret) return ret;
+	if (!strcmp("dtb", rsv_name)) {
+		ret = dtb_read(buf);
+		return ret;
+	}
+
+	if (!strcmp("key", rsv_name))
+		info_disprotect |= DISPROTECT_KEY;
+	ret = storage_byte_read(mmc, off, size, buf);
+	if (!strcmp("key", rsv_name))
+		info_disprotect &= ~DISPROTECT_KEY;
+	if (ret != 0) {
+		printf("read resv failed\n");
+	}
+
+	return ret;
+}
+int mmc_write_rsv(const char *rsv_name, size_t size, void *buf) {
+
+	char ret=1;
+
+	struct mmc *mmc;
+	loff_t off = 0;
+
+	ret = !strcmp("env", rsv_name) || !strcmp("key", rsv_name)
+		|| !strcmp("dtb", rsv_name)||!strcmp("fastboot", rsv_name)
+		||!strcmp("ddr-parameter", rsv_name);
+	if (!ret)
+		return 1;
+	mmc = find_mmc_device(STORAGE_EMMC);
+	if (!mmc) {
+		puts("no mmc devices available\n");
+		return 1;
+	}
+
+	if (!strcmp("env", rsv_name)) {
+		ret = env_write(size, buf);
+		return ret;
+	}
+
+	ret = storage_rsv_range_check(rsv_name, &size, &off);
+	if (ret) return ret;
+
+	if (!strcmp("dtb", rsv_name)) {
+		ret = dtb_write(buf);
+		ret |= renew_partition_tbl(buf);
+	} else {
+		if (!strcmp("key", rsv_name))
+			info_disprotect |= DISPROTECT_KEY;
+		ret = storage_byte_write(mmc, off, size, buf);
+		if (!strcmp("key", rsv_name))
+			info_disprotect &= ~DISPROTECT_KEY;
+	}
+
+	if (ret != 0)
+		printf("write rsv failed\n");
+
+	return ret;
+}
+int mmc_erase_rsv(const char *rsv_name) {
+
+	char ret=1;
+	struct mmc *mmc;
+	loff_t off = 0;
+	size_t size = 0;
+	ret = !strcmp("key", rsv_name) || !strcmp("dtb", rsv_name)
+		||!strcmp("fastboot", rsv_name)
+		||!strcmp("ddr-parameter", rsv_name);
+	if (!ret) return 1;
+	mmc = find_mmc_device(STORAGE_EMMC);
+	if (!mmc) {
+		puts("no mmc devices available\n");
+		return 1;
+	}
+	ret = storage_rsv_range_check(rsv_name, &size, &off);
+	if (ret) return ret;
+	if (!strcmp("key", rsv_name))
+		info_disprotect |= DISPROTECT_KEY;
+	ret = storage_byte_erase(mmc, off, size);
+	if (!strcmp("key", rsv_name))
+		info_disprotect &= ~DISPROTECT_KEY;
+	if (ret != 0) {
+		printf("erase resv failed\n");
+	}
+	return ret;
+}
+
+int mmc_protect_rsv(const char *rsv_name, bool ops) {
+
+	char ret=1;
+	ret = strcmp("key", rsv_name);
+	if (ret) return 1;
+
+	if (ops) {
+
+		info_disprotect &= ~DISPROTECT_KEY;
+		printf("Protect the key partition!\n");
+	} else {
+		info_disprotect |= DISPROTECT_KEY;
+		printf("Disprotect the key partition!\n");
+	}
+	return ret;
+
+}
+
+void config_storage_dev_func(struct storage_t *dev, struct mmc* mmc)
+{
+	/******basic info*******/
+	dev->type = BOOT_EMMC;
+	printf("store flag: %d, types: %d\n", dev->init_flag, dev->type);
+	/*dev->info.name = mmc->cid[0] & 0xff,
+		(mmc->cid[1] >> 24), (mmc->cid[1] >> 16) & 0xff,
+		(mmc->cid[1] >> 8) & 0xff, mmc->cid[1] & 0xff;
+	dev->info.id = mmc->cid[0] >> 24;*/
+	dev->info.read_unit = mmc->read_bl_len;
+	dev->info.write_unit = mmc->write_bl_len;
+	dev->info.erase_unit = mmc->erase_grp_size;
+	dev->info.caps = mmc->capacity_user;
+	dev->info.mode = COMPACT_BOOTLOADER;
+
+	dev->get_part_size = mmc_storage_get_part_size;
+	dev->read = mmc_storage_read;
+	dev->write = mmc_storage_write;
+	dev->erase = mmc_storage_erase;
+
+	dev->get_copies = mmc_storage_get_copies;
+	dev->get_copy_size = mmc_get_copy_size;
+	dev->boot_read = mmc_boot_read;
+	dev->boot_write = mmc_boot_write;
+	dev->boot_erase = mmc_boot_erase;
+
+	dev->get_rsv_size = mmc_get_rsv_size;
+	dev->read_rsv = mmc_read_rsv;
+	dev->write_rsv = mmc_write_rsv;
+	dev->erase_rsv = mmc_erase_rsv;
+	dev->protect_rsv = mmc_protect_rsv;
+
+	return;
+}
+
+DECLARE_GLOBAL_DATA_PTR;
+int sdcard_pre(void)
+{
+	return 0;
+}
+
+
+int sdcard_probe(uint32_t init_flag)
+{
+	return 0;
+}
+
+int emmc_pre(void)
+{
+	char ret = 1;
+	struct mmc *mmc;
+	static struct storage_t *storage_dev = NULL;
+
+	mmc_initialize(gd->bd);
+	mmc = find_mmc_device(STORAGE_EMMC);
+	mmc->has_init = 0;
+	ret = mmc_start_init(mmc);
+	if (ret == 0) {
+	/*struct store_operation *storage_opera = NULL;*/
+		storage_dev = kzalloc(sizeof(struct storage_t), GFP_KERNEL);
+		if (storage_dev == NULL) {
+			printf("malloc failed for storage_dev\n");
+			ret = -1;
+			return ret;
+		}
+		config_storage_dev_func(storage_dev, mmc);
+		store_register(storage_dev);
+		printf("emmc init success!\n");
+	} else
+		printf("emmc init fail!\n");
+	return ret;
+}
+
+
+int emmc_probe(uint32_t init_flag)
+{
+	char ret = 0;
+
+	ret = mmc_storage_init(init_flag); /*flag 0*/
+	if (ret) {
+		printf("mmc init failed ret:%x\n", ret);
+		goto exit_error;
+	}
+	printf("emmc probe success\n");
+
+exit_error:
+	return ret;
+}
+
diff --git a/include/amlogic/aml_cec.h b/include/amlogic/aml_cec.h
new file mode 100644
index 00000000000..4f0b2bd3a1a
--- /dev/null
+++ b/include/amlogic/aml_cec.h
@@ -0,0 +1,86 @@
+/*
+ * include/amlogic/aml_cec.h
+ *
+ * Copyright (C) 2012 AMLOGIC, INC. All Rights Reserved.
+ * Author: hongmin hua <hongmin hua@amlogic.com>
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the smems of the GNU General Public License as published by
+ * the Free Software Foundation; version 2 of the License.
+ */
+
+
+#ifndef _AML_CEC_H
+#define _AML_CEC_H
+
+/*
+ * CEC OPCODES
+ */
+#define	CEC_OC_ABORT_MESSAGE 					0xFF
+#define	CEC_OC_ACTIVE_SOURCE 					0x82
+#define	CEC_OC_CEC_VERSION 					0x9E
+#define	CEC_OC_CLEAR_ANALOGUE_TIMER 				0x33
+#define	CEC_OC_CLEAR_DIGITAL_TIMER 				0x99
+#define	CEC_OC_CLEAR_EXTERNAL_TIMER 				0xA1
+#define	CEC_OC_DECK_CONTROL 					0x42
+#define	CEC_OC_DECK_STATUS 					0x1B
+#define	CEC_OC_DEVICE_VENDOR_ID 				0x87
+#define	CEC_OC_FEATURE_ABORT 					0x00
+#define	CEC_OC_GET_CEC_VERSION 					0x9F
+#define	CEC_OC_GET_MENU_LANGUAGE 				0x91
+#define	CEC_OC_GIVE_AUDIO_STATUS 				0x71
+#define	CEC_OC_GIVE_DECK_STATUS 				0x1A
+#define	CEC_OC_GIVE_DEVICE_POWER_STATUS 			0x8F
+#define	CEC_OC_GIVE_DEVICE_VENDOR_ID 				0x8C
+#define	CEC_OC_GIVE_OSD_NAME 					0x46
+#define	CEC_OC_GIVE_PHYSICAL_ADDRESS 				0x83
+#define	CEC_OC_GIVE_SYSTEM_AUDIO_MODE_STATUS 			0x7D
+#define	CEC_OC_GIVE_TUNER_DEVICE_STATUS 			0x08
+#define	CEC_OC_IMAGE_VIEW_ON 					0x04
+#define	CEC_OC_INACTIVE_SOURCE 					0x9D
+#define	CEC_OC_MENU_REQUEST 					0x8D
+#define	CEC_OC_MENU_STATUS 					0x8E
+#define	CEC_OC_PLAY 						0x41
+#define	CEC_OC_POLLING_MESSAGE 					0xFC	/* Fake Code - <Poll Message> has no OP Code and requires only the header byte */
+#define	CEC_OC_RECORD_OFF 					0x0B
+#define	CEC_OC_RECORD_ON 					0x09
+#define	CEC_OC_RECORD_STATUS 					0x0A
+#define	CEC_OC_RECORD_TV_SCREEN 				0x0F
+#define	CEC_OC_REPORT_AUDIO_STATUS 				0x7A
+#define	CEC_OC_REPORT_PHYSICAL_ADDRESS 				0x84
+#define	CEC_OC_REPORT_POWER_STATUS 				0x90
+#define	CEC_OC_REQUEST_ACTIVE_SOURCE 				0x85
+#define	CEC_OC_ROUTING_CHANGE 					0x80
+#define	CEC_OC_ROUTING_INFORMATION 				0x81
+#define	CEC_OC_SELECT_ANALOGUE_SERVICE 				0x92
+#define	CEC_OC_SELECT_DIGITAL_SERVICE 				0x93
+#define	CEC_OC_SET_ANALOGUE_TIMER 				0x34
+#define	CEC_OC_SET_AUDIO_RATE 					0x9A
+#define	CEC_OC_SET_DIGITAL_TIMER 				0x97
+#define	CEC_OC_SET_EXTERNAL_TIMER 				0xA2
+#define	CEC_OC_SET_MENU_LANGUAGE 				0x32
+#define	CEC_OC_SET_OSD_NAME 					0x47
+#define	CEC_OC_SET_OSD_STRING 					0x64
+#define	CEC_OC_SET_STREAM_PATH 					0x86
+#define	CEC_OC_SET_SYSTEM_AUDIO_MODE 				0x72
+#define	CEC_OC_SET_TIMER_PROGRAM_TITLE 				0x67
+#define	CEC_OC_STANDBY 						0x36
+#define	CEC_OC_SYSTEM_AUDIO_MODE_REQUEST 			0x70
+#define	CEC_OC_SYSTEM_AUDIO_MODE_STATUS 			0x7E
+#define	CEC_OC_TEXT_VIEW_ON 					0x0D
+#define	CEC_OC_TIMER_CLEARED_STATUS 				0x43
+#define	CEC_OC_TIMER_STATUS 					0x35
+#define	CEC_OC_TUNER_DEVICE_STATUS 				0x07
+#define	CEC_OC_TUNER_STEP_DECREMENT 				0x06
+#define	CEC_OC_TUNER_STEP_INCREMENT 				0x05
+#define	CEC_OC_USER_CONTROL_PRESSED 				0x44
+#define	CEC_OC_USER_CONTROL_RELEASED 				0x45
+#define	CEC_OC_VENDOR_COMMAND 					0x89
+#define	CEC_OC_VENDOR_COMMAND_WITH_ID 				0xA0
+#define	CEC_OC_VENDOR_REMOTE_BUTTON_DOWN 			0x8A
+#define	CEC_OC_VENDOR_REMOTE_BUTTON_UP 				0x8B
+
+int cec_hw_init(int logic_addr, unsigned char fun_cfg);
+
+#endif/*_AML_CEC_H*/
+
diff --git a/include/amlogic/aml_efuse.h b/include/amlogic/aml_efuse.h
new file mode 100644
index 00000000000..4dece0725de
--- /dev/null
+++ b/include/amlogic/aml_efuse.h
@@ -0,0 +1,79 @@
+
+/*
+ *
+ * Copyright (C) 2018 Amlogic, Inc. All rights reserved.
+*/
+
+#ifndef __BL2_EFUSE_H__
+#define __BL2_EFUSE_H__
+
+#if 0
+//just keep following CFG10/9 for new API implement
+#define IS_FEAT_USB_PD_CHK_ENABLE()   (readl(AO_SEC_SD_CFG10) & (1 << 1))
+#define IS_FEAT_THERMAL_CALIBRATED()  (readl(AO_SEC_SD_CFG10) & (1 << 2))
+#define IS_FEAT_BOOT_VERIFY()         (readl(AO_SEC_SD_CFG10) & (1 << 4))
+#define IS_FEAT_ROOT_KEY_BURNED()     (readl(AO_SEC_SD_CFG10) & (1 << 5))
+#define IS_FEAT_PLL_SET_BURNED()      (readl(AO_SEC_SD_CFG10) & (1 << 6))
+#define IS_FEAT_M3_PLL_ENABLE()       (readl(AO_SEC_SD_CFG10) & (1 << 7))
+#define IS_FEAT_M4_PLL_ENABLE()       (readl(AO_SEC_SD_CFG10) & (1 << 7))
+#define IS_FEAT_A53_PLL_ENABLE()      (readl(AO_SEC_SD_CFG10) & (1 << 8))
+#define IS_FEAT_NAMD_EXT_CMD_BURNED() (readl(AO_SEC_SD_CFG10) & (1 << 9))
+#define IS_FEAT_JTG_PD_CHK_ENABLE()   (readl(AO_SEC_SD_CFG10) & (1 << 11))
+#define IS_FEAT_JTG_ENABLE()          (readl(AO_SEC_SD_CFG10) & (1 << 12))
+#define IS_FEAT_CHIP_ID_BURNED        (readl(AO_SEC_SD_CFG10) & (1 << 13))
+#define IS_FEAT_DTS_ENABLE            (readl(AO_SEC_SD_CFG10) & (1 << 14))
+#define IS_FEAT_DISK_ENC_ENABLE       (readl(AO_SEC_SD_CFG10) & (1 << 15))
+#define IS_FEAT_DOLBY_AUDIO_ENABLE    (readl(AO_SEC_SD_CFG10) & (1 << 16))
+#define IS_FEAT_SCN_PD_CHK_ENABLE     (readl(AO_SEC_SD_CFG10) & (1 << 17))
+#define IS_FEAT_USB_BOOT_ENABLE       (readl(AO_SEC_SD_CFG10) & (1 << 19))
+#define IS_FEAT_SPI_BOOT_ENABLE       (readl(AO_SEC_SD_CFG10) & (1 << 20))
+#define IS_FEAT_RECOVERY_BOOT_ENABLE  (readl(AO_SEC_SD_CFG10) & (1 << 21))
+#define IS_FEAT_SD_BOOT_ENABLE        (readl(AO_SEC_SD_CFG10) & (1 << 22))
+#define IS_FEAT_NAND_EMMC_BOOT_ENABLE (readl(AO_SEC_SD_CFG10) & (1 << 23))
+#define IS_FEAT_ANTIROLLBACK_ENABLE   (readl(AO_SEC_SD_CFG10) & (1 << 25))
+#define IS_FEAT_BOOT_ENCRYPT()        (readl(AO_SEC_SD_CFG10) & (1 << 28))
+#define IS_FEAT_A53_L1_ENABLE()       (readl(AO_SEC_SD_CFG10) & (1 << 29))
+#define IS_FEAT_KEY_LDR_INIT()        (readl(AO_SEC_SD_CFG10) & (1 << 30))
+#define IS_FEAT_AP_COLD_BOOT_LOCK()   (readl(AO_SEC_SD_CFG10) & (1 << 31))
+#define IS_FEAT_BOOT_M3_ENCRYPT()     (readl(AO_SEC_SD_CFG9) & (1 << 5))
+#define IS_FEAT_BOOT_M4_ENCRYPT()     (readl(AO_SEC_SD_CFG9) & (1 << 6))
+#define IS_FEAT_NAND_BL2_BKP_RETRY()  (readl(AO_SEC_SD_CFG9) & (1 << 10))
+#define IS_FEAT_EMMC_BL2_BKP_RETRY()  (readl(AO_SEC_SD_CFG9) & (1 << 11))
+#define IS_FEAT_SCAN_DISABLE()        (readl(AO_SEC_SD_CFG9) & (1 << 12))
+#define IS_FEAT_NAND_128P_DISABLE()   (readl(AO_SEC_SD_CFG9) & (1 << 13))
+#define IS_FEAT_EMMC_LAST_ENABLE()    (readl(AO_SEC_SD_CFG9) & (1 << 14))
+#define IS_FEAT_HIGH_USB_ENABLE()     (readl(AO_SEC_SD_CFG9) & (1 << 15))
+#define IS_FEAT_BOOT_M3_VERIFY()      (readl(AO_SEC_SD_CFG9) & (1 << 16))
+#define IS_FEAT_BOOT_M4_VERIFY()      (readl(AO_SEC_SD_CFG9) & (1 << 17))
+#define IS_FEAT_CORNOR_INFO_BURNED()  (readl(AO_SEC_SD_CFG9) & (1 << 19))
+#define IS_FEAT_SCK_BURNED()          (readl(AO_SEC_SD_CFG9) & (1 << 20))
+#define IS_FEAT_BLK0_WR_LOCKED()      (readl(AO_SEC_SD_CFG9) & (1 << 21))
+#define IS_FEAT_M4_DISABLE()          (readl(AO_SEC_SD_CFG9) & (1 << 22))
+#define IS_FEAT_M4_SP_MODE_ENABLE()   (readl(AO_SEC_SD_CFG9) & (1 << 23))
+#define IS_FEAT_A53_CLK_12G()         (readl(AO_SEC_SD_CFG9) & (1 << 24))
+#define IS_FEAT_A53_CLK_15G()         (readl(AO_SEC_SD_CFG9) & (1 << 25))
+#define IS_FEAT_A53_CLK_20G()         (readl(AO_SEC_SD_CFG9) & (1 << 26))
+#define IS_FEAT_USB_PLL_ENABLE()      (readl(AO_SEC_SD_CFG9) & (1 << 27))
+#define IS_FEAT_RMA_ENABLE()          (readl(AO_SEC_SD_CFG9) & (1 << 28))
+#define IS_FEAT_OPS_CLI_BURNED()      (readl(AO_SEC_SD_CFG9) & (1 << 29))
+#define IS_FEAT_M4_UNLOCK_ENABLE()    (readl(AO_SEC_SD_CFG9) & (1 << 31))
+#define IS_FEAT_DISABLE_PRINT()       (readl(EFUSE_LIC0) & (1 << 22)))
+#endif
+
+//weak function for each SoC implement
+//Unify EFUSE license query API
+//all following functions are defined with "weak" for customization of each SoC
+//EFUSE_LICX	--> AO_SEC_SD_CFG10/9 --> EFUSE mirror
+int IS_FEAT_BOOT_VERIFY(void);
+int IS_FEAT_BOOT_ENCRYPT(void);
+int IS_FEAT_DIS_EMMC_USER(void);
+int IS_FEAT_DIS_EMMC_BOOT_0(void);
+int IS_FEAT_DIS_EMMC_BOOT_1(void);
+int IS_FEAT_EN_4BL2_SNOR(void);
+int IS_FEAT_DIS_NBL2_SNOR(void);
+int IS_FEAT_EN_8BL2_SNAND(void);
+int IS_FEAT_DIS_NBL2_SNAND(void);
+int IS_FEAT_DIS_8BL2_NAND(void);
+int IS_FEAT_DIS_NBL2_NAND(void);
+
+#endif /* __BL2_EFUSE_H__ */
diff --git a/include/amlogic/aml_gpio.h b/include/amlogic/aml_gpio.h
new file mode 100644
index 00000000000..c1e1ed1ef5a
--- /dev/null
+++ b/include/amlogic/aml_gpio.h
@@ -0,0 +1,54 @@
+#ifndef __AML_GPIO__
+#define __AML_GPIO__
+#include <asm/io.h>
+/**
+ * struct meson_reg_desc - a register descriptor
+ *
+ * @reg:	register offset in the regmap
+ * @bit:	bit index in register
+ *
+ * The structure describes the information needed to control pull,
+ * pull-enable, direction, etc. for a single pin
+ */
+struct meson_reg_desc {
+	unsigned int reg;
+	unsigned int bit;
+};
+
+/**
+ * enum meson_reg_type - type of registers encoded in @meson_reg_desc
+ */
+enum meson_reg_type {
+	REG_PULLEN,
+	REG_PULL,
+	REG_DIR,
+	REG_OUT,
+	REG_IN,
+	NUM_REG,
+};
+
+
+
+
+struct meson_bank {
+	const char *name;
+	unsigned int first;
+	unsigned int last;
+	struct meson_reg_desc regs[NUM_REG];
+};
+#define GPIO_REG_BIT(reg, bit) ((reg<<5)|bit)
+#define GPIO_REG(value) ((value>>5))
+#define GPIO_BIT(value) ((value&0x1F))
+//#define BIT(bit)    (1<<bit)
+static inline void regmap_update_bits(unsigned long reg,unsigned mask,unsigned val)
+{
+
+	unsigned int tmp, orig;
+	orig = readl(reg);
+	tmp = orig & ~mask;
+	tmp |= val & mask;
+	writel(tmp,reg);
+	return;
+}
+
+#endif
diff --git a/include/amlogic/aml_hdmirx.h b/include/amlogic/aml_hdmirx.h
new file mode 100644
index 00000000000..b4b0f5a84ad
--- /dev/null
+++ b/include/amlogic/aml_hdmirx.h
@@ -0,0 +1,19 @@
+/*
+ * include/amlogic/aml_hdmirx.h
+ *
+ * Copyright (C) 2012 AMLOGIC, INC. All Rights Reserved.
+ * Author: hongmin hua <hongmin hua@amlogic.com>
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the smems of the GNU General Public License as published by
+ * the Free Software Foundation; version 2 of the License.
+ */
+
+#ifndef _AML_HDMIRX_H
+#define _AML_HDMIRX_H
+
+void hdmirx_hw_init(unsigned int port_map,
+		unsigned char *pedid_data,
+		int edid_size);
+
+#endif /* _AML_HDMIRX_H */
diff --git a/include/amlogic/aml_irblaster.h b/include/amlogic/aml_irblaster.h
new file mode 100644
index 00000000000..b2c4ef703e7
--- /dev/null
+++ b/include/amlogic/aml_irblaster.h
@@ -0,0 +1,29 @@
+#ifndef __AML_IRBLATER_H
+#define __AML_IRBLATER_H
+
+#define MAX_WINDOWS_LEN 512
+struct aml_irblaster_drv_s {
+	unsigned int protocol;
+	unsigned int frequency;
+	unsigned int sendvalue;
+	unsigned int windows[MAX_WINDOWS_LEN];
+	unsigned int windows_num;
+	unsigned int dutycycle;
+	unsigned int openflag;
+	int (*open)(void);
+	int (*close)(void);
+	int (*test)(unsigned int);
+	int (*send)(unsigned int);
+	int (*setprotocol)(char *);
+	const char *(*getprocotol)(void);
+	int (*setfrequency)(unsigned int);
+	unsigned int (*getfrequency)(void);
+	void (*print_windows)(void);
+	int (*read_reg)(volatile unsigned int *, unsigned int);
+	int (*write_reg)(volatile unsigned int *, unsigned int);
+};
+
+struct aml_irblaster_drv_s *aml_irblaster_get_driver(void);
+#endif
+
+
diff --git a/include/amlogic/aml_is31fl32xx.h b/include/amlogic/aml_is31fl32xx.h
new file mode 100644
index 00000000000..6211ebc956c
--- /dev/null
+++ b/include/amlogic/aml_is31fl32xx.h
@@ -0,0 +1,9 @@
+#ifndef __AML_IS31F132XX
+#define __AML_IS31F132XX
+
+#define IS31F132XX_DEVICE_ADDR 0x3c
+
+void board_is31fl32xx_init(void);
+void board_is31fl32xx_light_on(void);
+
+#endif
diff --git a/include/amlogic/aml_led.h b/include/amlogic/aml_led.h
new file mode 100644
index 00000000000..b2f3bda3f7a
--- /dev/null
+++ b/include/amlogic/aml_led.h
@@ -0,0 +1,68 @@
+#ifndef __AML_LED_H__
+#define __AML_LED_H__
+
+#define LED_TIMER_INTERVAL 10 //ms
+
+#define LED_EVENT_NULL 0
+#define LED_EVENT_OFF 1
+#define LED_EVENT_ON 2
+#define LED_EVENT_FLASH 3
+#define LED_EVENT_BREATH 4
+
+#define SHUTDOWN_MODE 0
+#define SUSPEND_RESUME_MODE 1
+#define RECOVERY_MODE 2
+
+
+enum led_workmode {
+	LWM_OFF,
+	LWM_ON,
+	LWM_FLASH,
+	LWM_BREATH,
+	LWM_NULL,
+};
+
+/* s,b,w type is enum led_workmode */
+#define lwm_set_standby(mode, s) do {mode |= (s) << 0;} while(0)
+#define lwm_set_booting(mode, b) do {mode |= (b) << 4;} while(0)
+#define lwm_set_working(mode, w) do {mode |= (w) << 8;} while(0)
+#define lwm_set_suspend(mode, s) do {mode |= (s) << 12;} while(0)
+
+#define lwm_get_standby(mode) (((mode) >> 0) & 0xF)
+#define lwm_get_booting(mode) (((mode) >> 4) & 0xF)
+#define lwm_get_working(mode) (((mode) >> 8) & 0xF)
+#define lwm_get_suspend(mode) (((mode) >> 12) & 0xF)
+
+struct coord {
+	int x;
+	int y;
+};
+
+struct aml_led_config {
+	int off_brightness;
+	int on_brightness;
+	int flash_off_brightness;
+	int flash_off_time;
+	int flash_on_brightness;
+	int flash_on_time;
+	struct coord *breath_inflections;
+	int breath_inflections_num;
+	void (*set_brightness)(int brightness);
+};
+
+#define LED_EVENT_BUF_SIZE 3
+struct aml_led {
+	int event[LED_EVENT_BUF_SIZE];
+	int event_data[LED_EVENT_BUF_SIZE];
+	int state;
+	int brightness;
+	int time;
+	int count;
+	struct aml_led_config *config;
+};
+
+void aml_led_init(struct aml_led *led, struct aml_led_config *config);
+void aml_led_timer_proc(struct aml_led *led);
+void aml_led_event(struct aml_led *led, int event, int event_data);
+
+#endif
\ No newline at end of file
diff --git a/include/amlogic/aml_mmc.h b/include/amlogic/aml_mmc.h
new file mode 100644
index 00000000000..4d7801c04e0
--- /dev/null
+++ b/include/amlogic/aml_mmc.h
@@ -0,0 +1,105 @@
+/*
+ * Copyright (C) 2017 Amlogic, Inc. All rights reserved.
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License for
+ * more details.
+ * 	yonghui.yu@amlogic.com
+ */
+
+
+#ifndef __AML_MMC_H__
+#define __AML_MMC_H__
+
+#include <common.h>
+
+
+/* bootloader operation */
+#define AML_BL_USER		(0x1 << 0)
+#define AML_BL_BOOT0	(0x1 << 1)
+#define AML_BL_BOOT1	(0x1 << 2)
+#define AML_BL_BOOT     (0x6)
+#define AML_BL_ALL		(0x7)
+
+/** For actul partitions with mask 8 store into bootinfo
+ * name: partition name.
+ * addr: sector addr of the partition
+ * size: sector cont of the partition
+*/
+struct part_property
+{
+	char name[8];
+	uint32_t addr;
+	uint32_t size;
+};
+#define PART_PROPERTY_SIZE sizeof(struct part_property)
+#define BOOTINFO_MAX_PARTITIONS (4)
+#define BOOTINFO_PARITIONS_SIZE (PART_PROPERTY_SIZE * BOOTINFO_MAX_PARTITIONS)
+
+
+#define VPART_PROPERTY_SIZE sizeof(struct vpart_property)
+struct vpart_property {
+	u32 addr;
+	u32 size;
+};
+
+/*
+ * sizeof(struct storage_emmc_boot_info) is strictly
+ * smaller than or equal to one sector. we will bind
+ * it in one sector with u-boot.bin together and
+ * write into boot loader area.
+ * @rsv_base_addr : the sector address of reserved area
+ * @dtb  : the sector address and size of dtb property
+ * @ddr  : the sector address and size of ddr property
+ */
+#define EMMC_BOOT_INFO_SIZE	512
+struct storage_emmc_boot_info {
+	u32 version;
+	u32 rsv_base_addr;
+	struct vpart_property dtb;
+	struct vpart_property ddr;
+
+	struct part_property parts[BOOTINFO_MAX_PARTITIONS];
+	uint8_t reserved[512 - 2 * VPART_PROPERTY_SIZE - BOOTINFO_PARITIONS_SIZE - 12];
+	u32 checksum;
+};
+
+int amlmmc_write_bootloader(int dev, int map,
+		unsigned int size, const void *src);
+int amlmmc_erase_bootloader(int dev, int map);
+
+
+/* interface on reserved area. */
+void mmc_write_cali_mattern(void *addr);
+
+/* dtb operation */
+int dtb_write(void *addr);
+
+/* emmc key operation */
+int mmc_key_read(unsigned char *buf,
+		unsigned int size, uint32_t *actual_lenth);
+int mmc_key_write(unsigned char *buf,
+		unsigned int size, uint32_t *actual_lenth);
+int mmc_key_erase(void);
+
+/* partition operation */
+int renew_partition_tbl(unsigned char *buffer);
+int find_dev_num_by_partition_name (char const *name);
+
+#ifdef CONFIG_AML_PARTITION
+int emmc_update_mbr(unsigned char *buffer);
+#endif
+
+/*mmc ext_csd register operation*/
+int mmc_get_ext_csd(struct mmc *mmc, u8 *ext_csd);
+int mmc_set_ext_csd(struct mmc *mmc, u8 index, u8 value);
+
+
+
+#endif /* __AML_MMC_H__ */
diff --git a/include/amlogic/aml_mtd.h b/include/amlogic/aml_mtd.h
new file mode 100644
index 00000000000..4eb17e4fa28
--- /dev/null
+++ b/include/amlogic/aml_mtd.h
@@ -0,0 +1,31 @@
+/* SPDX-License-Identifier: GPL-2.0+ */
+/*
+ * Header file of amlogic mtd driver
+ *
+ * Copyright (C) 2018 Amlogic Corporation
+ *
+ * Licensed under the GPL-2 or later.
+ *
+ */
+
+#ifndef __AMLMTD_H_
+#define __AMLMTD_H_
+#define BOOT_TOTAL_PAGES			1024
+
+#define CONFIG_BL2_COPY_NUM			8
+#define CONFIG_TPL_SIZE_PER_COPY	0x200000
+#define CONFIG_NOR_TPL_COPY_NUM		1 //for spi-nor
+#define CONFIG_NAND_TPL_COPY_NUM	4 // for slc & spi-nand
+
+#define BOOT_LOADER			"bootloader"
+#define BOOT_BL2			"bl2"
+#define BOOT_SPL			"spl"
+#define BOOT_BL2E                       "bl2e"
+#define BOOT_BL2X                       "bl2x"
+#define BOOT_DDRFIP                     "ddrfip"
+#define BOOT_DEVFIP                     "devfip"
+#define BOOT_TPL			"tpl"
+#define BOOT_FIP			"fip"
+#define MAX_MTD_CNT			2
+
+#endif/* __AMLMTD_H_ */
diff --git a/include/amlogic/aml_nand.h b/include/amlogic/aml_nand.h
new file mode 100644
index 00000000000..8be39746818
--- /dev/null
+++ b/include/amlogic/aml_nand.h
@@ -0,0 +1,24 @@
+/*
+ * Copyright (C) 2017 Amlogic, Inc. All rights reserved.
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License for
+ * more details.
+ *
+ */
+#ifndef __AML_NAND_H__
+#define __AML_NAND_H__
+
+int amlnf_dtb_save(u8 *buf, unsigned int len);
+int amlnf_dtb_erase(void);
+int get_boot_num(struct mtd_info *mtd, size_t rwsize);
+
+/*#define RESERVED_BLOCK_NUM 48*/
+
+#endif/* __AML_NAND_H__ */
diff --git a/include/amlogic/aml_rsv.h b/include/amlogic/aml_rsv.h
new file mode 100644
index 00000000000..7e17c83435a
--- /dev/null
+++ b/include/amlogic/aml_rsv.h
@@ -0,0 +1,106 @@
+/* SPDX-License-Identifier: GPL-2.0+ */
+/*
+ * Header file of amlogic reserve manager
+ *
+ * Copyright (C) 2018 Amlogic Corporation
+ *
+ * Licensed under the GPL-2 or later.
+ *
+ */
+
+#ifndef __MESON_RSV_H_
+#define __MESON_RSV_H_
+
+#define NAND_RSV_BLOCK_NUM 48
+
+#define NAND_GAP_BLOCK_NUM 4
+#define NAND_BBT_BLOCK_NUM 4
+#define NAND_ENV_BLOCK_NUM 8
+#define NAND_KEY_BLOCK_NUM 8
+#define NAND_DTB_BLOCK_NUM 4
+
+#define BBT_NAND_MAGIC	"nbbt"
+#define ENV_NAND_MAGIC	"nenv"
+#define KEY_NAND_MAGIC	"nkey"
+#define SEC_NAND_MAGIC	"nsec"
+#define DTB_NAND_MAGIC	"ndtb"
+
+/*define abnormal state for reserved area*/
+#define POWER_ABNORMAL_FLAG	0x01
+#define ECC_ABNORMAL_FLAG	0x02
+
+
+struct meson_rsv_info_t {
+	struct mtd_info *mtd;
+	struct valid_node_t *nvalid;
+	struct free_node_t *nfree;
+	unsigned int start;
+	unsigned int end;
+	unsigned int size;
+	char name[8];
+	u_char valid;
+	u_char init;
+	void *handler;
+};
+
+struct valid_node_t {
+	s16 ec;
+	s16	blk_addr;
+	s16	page_addr;
+	int timestamp;
+	s16 status;
+};
+
+struct free_node_t {
+	unsigned int index;
+	s16 ec;
+	s16	blk_addr;
+	int dirty_flag;
+	struct free_node_t *next;
+};
+
+struct oobinfo_t {
+	char name[4];
+	s16 ec;
+	unsigned timestamp:15;
+	unsigned status_page:1;
+};
+
+struct meson_rsv_handler_t {
+	struct mtd_info *mtd;
+	unsigned long long fn_bitmask;
+	struct free_node_t *free_node[NAND_RSV_BLOCK_NUM];
+	struct meson_rsv_info_t *bbt;
+#ifndef CONFIG_ENV_IS_IN_NAND
+	struct meson_rsv_info_t *env;
+#endif
+	struct meson_rsv_info_t *key;
+	struct meson_rsv_info_t *dtb;
+	void *priv;
+};
+
+int meson_rsv_bbt_read(u_char *dest, size_t size);
+int meson_rsv_key_read(u_char *dest, size_t size);
+int meson_rsv_env_read(u_char *dest, size_t size);
+int meson_rsv_dtb_read(u_char *dest, size_t size);
+/* do not provide bbt write operates */
+int meson_rsv_key_write(u_char *source, size_t size);
+int meson_rsv_env_write(u_char *source, size_t size);
+int meson_rsv_dtb_write(u_char *source, size_t size);
+uint32_t meson_rsv_bbt_size(void);
+uint32_t meson_rsv_key_size(void);
+uint32_t meson_rsv_env_size(void);
+uint32_t meson_rsv_dtb_size(void);
+/* do not provide bbt erase operates */
+int meson_rsv_key_erase(void);
+int meson_rsv_env_erase(void);
+int meson_rsv_dtb_erase(void);
+int meson_rsv_check(struct meson_rsv_info_t *rsv_info);
+int meson_rsv_init(struct mtd_info *mtd, struct meson_rsv_handler_t *handler);
+int meson_rsv_scan(struct meson_rsv_info_t *rsv_info);
+int meson_rsv_read(struct meson_rsv_info_t *rsv_info, u_char *buf);
+int meson_rsv_save(struct meson_rsv_info_t *rsv_info, u_char *buf);
+int meson_rsv_write(struct meson_rsv_info_t *rsv_info, u_char *buf);
+int meson_rsv_erase_protect(struct meson_rsv_handler_t *handler,
+uint32_t block_addr);
+#endif/* __MESON_RSV_H_ */
diff --git a/include/amlogic/aml_tlv.h b/include/amlogic/aml_tlv.h
new file mode 100644
index 00000000000..93fa0a305f4
--- /dev/null
+++ b/include/amlogic/aml_tlv.h
@@ -0,0 +1,157 @@
+/*
+ * Copyright (C) 2018 Amlogic, Inc. All rights reserved.
+ *
+ * All information contained herein is Amlogic confidential.
+ *
+ * This software is provided to you pursuant to Software License Agreement
+ * (SLA) with Amlogic Inc ("Amlogic"). This software may be used
+ * only in accordance with the terms of this agreement.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification is strictly prohibited without prior written permission from
+ * Amlogic.
+ *
+ * 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
+ * OWNER 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.
+ *
+ * Created by haixiang.bao@amlogic.com
+ *
+ * Revision history:  1. 2018.05.31 v0.1 init for transfer data from BL2 to BL3X
+ *
+ */
+
+
+#ifndef __AMLOGIC_TLV_H_
+#define __AMLOGIC_TLV_H_
+
+typedef struct __s_bl2_tlv_item_t{
+	unsigned    int    nType;   //type: user defined, should sync between BL2 and BL3X
+	unsigned    int    nLength; //length: length of szContent, no alignment
+	unsigned    int    nStoreLength; //length: length of szContent, alignment to 16
+	unsigned    char   szRserved1[4];//reserved for future
+	struct __s_bl2_tlv_item_t * pNextItem;//next item, list for fetch all quickly
+	unsigned    char   szContent[4]; //data transfered from BL2
+}s_bl2_tlv_item_t;
+
+typedef struct __s_bl2_to_bl3x_hdr_t{
+	unsigned    int    nMagic;         //magic for identify itself, AML_BL2_TMASTER_MAGIC (@BL2)
+	unsigned    int    nVersion;       //version for control
+	unsigned    int    nHeadSize;      //sizeof(this)
+	unsigned    char   szRserved1[4];  //reserved for furture
+
+	unsigned    char   szBL2Info[96];  //BL2 build information
+
+	s_bl2_tlv_item_t * pNextBlob;      //next active valid blob item
+	unsigned    int    nTLVCount;      //current valid TLV item number
+	unsigned    int    nTotalSize;     //total size of all TLV items
+	unsigned    char   szSHA2TLV[32];  //SHA2 of all TLV items, size is nTotalSize
+
+} s_bl2_to_bl3x_hdr_t;
+
+typedef struct __s_bl2_to_bl3x_send_t{
+
+	s_bl2_to_bl3x_hdr_t hdr;
+
+	unsigned     char   szSHA2Head[32];
+
+	s_bl2_tlv_item_t	blob[1];
+
+} s_bl2_to_bl3x_send_t;
+
+typedef enum{
+	e_ok_ret      = 0,
+
+	e_err_not_support = 0x01,
+
+	e_err_no_item = 0x10,
+	e_err_sha_hdr = 0x11,
+	e_err_sha_tlv = 0x12,
+
+	e_err_in_data = 0x20,
+	e_err_in_size = 0x21,
+	e_err_over_size=0x22,
+	e_err_item_exit=0x23,
+
+}e_ret_type;
+
+typedef enum{
+	e_t_ap_ver    = 0x10,
+	e_t_scp_ver   = 0x11,
+	e_t_sp_ver    = 0x12,
+	e_t_bl2z_ver  = 0x13,
+	e_t_bl30_ver  = 0x14,
+	e_t_bl301_ver = 0x15,
+	e_t_bl31_ver  = 0x16,
+	e_t_bl32_ver  = 0x17,
+	e_t_bl33_ver  = 0x18,
+
+	e_t_root_aes          = 0x20,
+	e_t_root_rsa_sha_all  = 0x21,
+	e_t_root_rsa_sha  	  = 0x22,
+	e_t_root_rsa_puk      = 0x23,
+
+	e_t_user_aes          = 0x30,
+	e_t_user_rsa_sha_all  = 0x31,
+	e_t_user_rsa_sha  	  = 0x32,
+	e_t_user_rsa_puk  	  = 0x33,
+
+	e_t_bl30_rsa_puk      = 0x50,
+	e_t_bl30_aes          = 0x51,
+
+	e_t_bl31_rsa_puk	  = 0x60,
+	e_t_bl31_aes          = 0x61,
+
+	e_t_bl32_rsa_puk      = 0x70,
+	e_t_bl32_aes          = 0x71,
+
+	e_t_bl33_rsa_puk      = 0x80,
+	e_t_bl33_aes          = 0x81,
+
+
+	//....
+
+}e_item_type;
+
+
+//magic ID
+#define	 AML_BL2_TMASTER_MAGIC     (0x324c4240) 	//@BL2
+
+//major & minor version
+#define  AML_BL2_TMASTER_MAJ_VER   (0x00)         //major version
+#define	 AML_BL2_TMASTER_MIN_VER   (0x01)			    //minor version
+#define	 AML_BL2_TMASTER_VERSION   ((AML_BL2_TMASTER_MAJ_VER << 16) |\
+									AML_BL2_TMASTER_MIN_VER)        //major << 16 | minor version
+
+//item data length alignment
+#define  AML_BL2_TMASTER_ITEM_UNIT_LEN            (16)
+#define  AML_BL2_TMASTER_ITEM_ALIGN_LEN(len)      ((len) + (AML_BL2_TMASTER_ITEM_UNIT_LEN-1)) & (~(AML_BL2_TMASTER_ITEM_UNIT_LEN-1))
+
+//CFG reg to store DDR address
+#define  AML_BL2_TMASTER_CFG_REG  (AO_SEC_GP_CFG6)
+
+//DDR buffer size
+#ifndef AML_BL2_TMASTER_DDR_MLEN
+#define  AML_BL2_TMASTER_DDR_MLEN  ((1<<20) - sizeof(s_bl2_to_bl3x_send_t))  //1MB for transfer data from BL2 to BL3X
+#endif
+
+//flag to pass BL2 build info to BL3X
+//#define CONFIG_AML_TLV_BL2_VER_INFO
+
+//IMPORTANT: BECAUSE THOSE FUNCTIONS WILL USE DDR AS STORAGE(DEFAULT) THEN
+//                    ALL THE APIS MSUT BE USED AFTER DDR INIT DONE
+//global APIs to pad & fetch item
+//pad item with data, type and length
+e_ret_type aml_append_item(unsigned int nType, unsigned int nLength, unsigned char *pData);
+//fetch item with type
+e_ret_type aml_fetch_item(unsigned int nType, s_bl2_tlv_item_t **ppItem);
+
+#endif /* __AMLOGIC_TLV_H_ */
diff --git a/include/amlogic/aml_v2_burning.h b/include/amlogic/aml_v2_burning.h
new file mode 100644
index 00000000000..1ecdad65b01
--- /dev/null
+++ b/include/amlogic/aml_v2_burning.h
@@ -0,0 +1,31 @@
+/*
+ * \file        aml_v2_burning.h
+ * \brief       common interfaces for version burning
+ *
+ * \version     1.0.0
+ * \date        09/15/2013
+ * \author      Sam.Wu <yihui.wu@amlgic.com>
+ *
+ * Copyright (c) 2013 Amlogic. All Rights Reserved.
+ *
+ */
+
+//is the uboot loaded from usb otg
+int is_tpl_loaded_from_usb(void);
+
+//is the uboot loaded from sdcard mmc 0
+//note only sdmmc supported by romcode when external device boot
+int is_tpl_loaded_from_ext_sdmmc(void);
+
+//Check if uboot loaded from external sdmmc or usb otg
+int aml_burn_check_uboot_loaded_for_burn(int flag);
+
+int aml_burn_factory_producing(int flag, bd_t* bis);
+
+//usb producing mode, if tpl loaded from usb pc tool and auto enter producing mode
+int aml_try_factory_usb_burning(int flag, bd_t* bis);
+
+//Auto enter sdcard burning if booted from sdcard and aml_sdc_burn.ini existed
+int aml_try_factory_sdcard_burning(int flag, bd_t* bis);
+
+
diff --git a/include/amlogic/aml_v3_burning.h b/include/amlogic/aml_v3_burning.h
new file mode 100644
index 00000000000..545ef33b1cc
--- /dev/null
+++ b/include/amlogic/aml_v3_burning.h
@@ -0,0 +1,14 @@
+/*
+ * \file        aml_v3_burning.h
+ * \brief       v3 burning entry
+ *
+ * \version     1.0.0
+ * \date        2018/12/20
+ * \author      Sam.Wu <yihui.wu@amlgic.com>
+ *
+ * Copyright (c) 2018 Amlogic. All Rights Reserved.
+ *
+ */
+
+int aml_v3_factory_usb_burning(int flag, bd_t* bis);
+
diff --git a/include/amlogic/amlkey_if.h b/include/amlogic/amlkey_if.h
new file mode 100644
index 00000000000..d15bbe7eee3
--- /dev/null
+++ b/include/amlogic/amlkey_if.h
@@ -0,0 +1,85 @@
+/*
+ * \file        amlkey_if.h
+ * \brief       APIs of secure key for users
+ *
+ * \version     1.0.0
+ * \date        15/07/10
+ * \author      Sam.Wu <yihui.wu@amlgic.com>
+ *
+ * Copyright (c) 2015 Amlogic. All Rights Reserved.
+ *
+ */
+#ifndef __AMLKEY_IF_H__
+#define __AMLKEY_IF_H__
+
+#define AMLKEY_NAME_LEN_MAX     (80)
+
+struct amlkey_if {
+	int32_t (*init)(uint8_t *seed, uint32_t len, int encrypt_type);
+	int32_t (*exsit)(const uint8_t *name);
+	ssize_t (*size)(const uint8_t *name);
+	uint32_t (*get_attr)(const uint8_t *name);
+	ssize_t (*read)(const uint8_t *name, uint8_t *buffer, uint32_t len);
+	ssize_t (*write)(const uint8_t *name, uint8_t *buffer, uint32_t len, uint32_t attr);
+	int32_t (*hash)(const uint8_t *name, uint8_t *hash);
+};
+
+extern struct amlkey_if *amlkey_if;
+
+static inline uint32_t amlkey_get_attr(const uint8_t *name)
+{
+	return amlkey_if->get_attr(name);
+}
+
+int amlkey_if_init(const void* dt_addr);
+
+//1.init
+static inline int32_t amlkey_init(uint8_t *seed, uint32_t len, int encrypt_type)
+{
+	return amlkey_if->init(seed, len, encrypt_type);
+}
+
+//2. query if the key already programmed, exsit 1, non 0
+static inline int32_t amlkey_isexsit(const uint8_t * name)
+{
+	return amlkey_if->exsit(name);
+}
+
+//3. query attr, key must exsit before those functions were called.
+	//3.1 whether the prgrammed key is secure, secure 1, non 0
+int32_t amlkey_issecure(const uint8_t * name);
+
+	//3.2 whether the prgrammed key is encrypt, encrypt 1, non 0
+int32_t amlkey_isencrypt(const uint8_t * name);
+
+//4. actual bytes of key value
+static inline ssize_t amlkey_size(const uint8_t *name)
+{
+	return amlkey_if->size(name);
+}
+
+//5. read non-secure key in bytes, return byets readback actully.
+static inline ssize_t amlkey_read(const uint8_t *name, uint8_t *buffer, uint32_t len)
+{
+	return amlkey_if->read(name, buffer, len);
+}
+
+//6.write key with attribute in bytes , return byets readback actully
+	//attr: bit0: secure/non-secure;
+	//		bit8: encrypt/non-encrypt
+#define UNIFYKEY_ATTR_SECURE_MASK	(1<<0)
+#define UNIFYKEY_ATTR_ENCRYPT_MASK	(1<<8)
+static inline ssize_t amlkey_write(const uint8_t *name, uint8_t *buffer, uint32_t len,
+				   uint32_t attr)
+{
+	return amlkey_if->write(name, buffer, len, attr);
+}
+
+//7. get the hash value of programmed secure key | 32bytes length, sha256
+static inline int32_t amlkey_hash_4_secure(const uint8_t *name, uint8_t *hash)
+{
+	return amlkey_if->hash(name, hash);
+}
+
+#endif// #ifndef __AMLKEY_IF_H__
+
diff --git a/include/amlogic/anti-rollback.h b/include/amlogic/anti-rollback.h
new file mode 100644
index 00000000000..95d42651eab
--- /dev/null
+++ b/include/amlogic/anti-rollback.h
@@ -0,0 +1,40 @@
+/*
+ * Copyright (C) 2014-2017 Amlogic, Inc. All rights reserved.
+ *
+ * All information contained herein is Amlogic confidential.
+ *
+ * This software is provided to you pursuant to Software License Agreement
+ * (SLA) with Amlogic Inc ("Amlogic"). This software may be used
+ * only in accordance with the terms of this agreement.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification is strictly prohibited without prior written permission from
+ * Amlogic.
+ *
+ * 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
+ * OWNER 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 __ANTI_ROLLBACK_
+#define __ANTI_ROLLBACK_
+
+#include <linux/types.h>
+
+bool check_antirollback(uint32_t kernel_version);
+
+bool set_avb_antirollback(uint32_t index, uint32_t version);
+bool get_avb_antirollback(uint32_t index, uint32_t* version);
+bool get_avb_lock_state(uint32_t* lock_state);
+bool avb_lock(void);
+bool avb_unlock(void);
+
+#endif
diff --git a/include/amlogic/asm/bl31_apis.h b/include/amlogic/asm/bl31_apis.h
new file mode 100644
index 00000000000..4227494b93e
--- /dev/null
+++ b/include/amlogic/asm/bl31_apis.h
@@ -0,0 +1,166 @@
+
+/*
+ * arch/arm/include/asm/arch-txl/bl31_apis.h
+ *
+ * Copyright (C) 2015 Amlogic, Inc. All rights reserved.
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License for
+ * more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program; if not, write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
+*/
+
+/*
+ * Trustzone API
+ *
+ * Copyright (C) 2012 Amlogic, Inc.
+ *
+ * Author: Platform-SH@amlogic.com
+ *
+ */
+
+#ifndef __GXBB_BL31_APIS_H
+#define __GXBB_BL31_APIS_H
+
+#include <amlogic/asm/io.h>
+
+/*#define SRAM_READ				0x82000010
+#define CORE_RD_REV1			0x82000011
+#define SRAM_ACS_READ		0x82000012
+#define SRAM_ACS_INDIRECT_READ		0x82000013*/
+
+#define GET_SHARE_MEM_INPUT_BASE		0x82000020
+#define GET_SHARE_MEM_OUTPUT_BASE		0x82000021
+#define GET_REBOOT_REASON		0x82000022
+#define GET_SHARE_STORAGE_IN_BASE		0x82000023
+#define GET_SHARE_STORAGE_OUT_BASE		0x82000024
+#define GET_SHARE_STORAGE_BLOCK_BASE	0x82000025
+#define GET_SHARE_STORAGE_MESSAGE_BASE	0x82000026
+#define GET_SHARE_STORAGE_BLOCK_SIZE		0x82000027
+#define SET_STORAGE_INFO		0x82000028
+#define SET_REBOOT_REASON		0x82000049
+
+/* Set Reboot Reason then Reboot*/
+#define PSCI_SYS_REBOOT		0x84000009
+
+/* SECUREOS DEFINITION*/
+/* SMC Identifiers for non-secure world functions */
+#define CALL_TRUSTZONE_HAL_API                  0x5
+
+/* EFUSE */
+#define EFUSE_READ					0x82000030
+#define EFUSE_WRITE				0x82000031
+#define EFUSE_WRITE_PATTERN		0x82000032
+#define EFUSE_USER_MAX    0x82000033
+
+#define DEBUG_EFUSE_WRITE_PATTERN	0x820000F0
+#define DEBUG_EFUSE_READ_PATTERN	0x820000F1
+
+/* JTAG*/
+#define JTAG_ON                                0x82000040
+#define JTAG_OFF                               0x82000041
+
+#define SET_USB_BOOT_FUNC	0x82000043
+	/* USB BOOT FUNC sub command list*/
+	#define CLEAR_USB_BOOT			1
+	#define FORCE_USB_BOOT			2
+	#define RUN_COMD_USB_BOOT		3
+	#define PANIC_DUMP_USB_BOOT	4
+
+#define GET_CHIP_ID			0x82000044
+/* Security Key*/
+#define SECURITY_KEY_QUERY	0x82000060
+#define SECURITY_KEY_READ	0x82000061
+#define SECURITY_KEY_WRITE	0x82000062
+#define SECURITY_KEY_TELL		0x82000063
+#define SECURITY_KEY_VERIFY	0x82000064
+#define SECURITY_KEY_STATUS	0x82000065
+#define SECURITY_KEY_NOTIFY	0x82000066
+#define SECURITY_KEY_LIST		0x82000067
+#define SECURITY_KEY_REMOVE	0x82000068
+#define SECURITY_KEY_NOTIFY_EX	0x82000069
+#define SECURITY_KEY_SET_ENCTYPE	0x8200006A
+#define SECURITY_KEY_GET_ENCTYPE	0x8200006B
+#define SECURITY_KEY_VERSION		0x8200006C
+
+/*viu probe en*/
+#define VIU_PREOBE_EN		0x82000080
+
+/* KEYMASTER */
+#define SET_BOOT_PARAMS		0x82000072
+#define SHA256_DIGEST_SIZE  32
+typedef struct {
+	uint32_t device_locked;
+	uint32_t verified_boot_state;
+	uint8_t verified_boot_key[SHA256_DIGEST_SIZE];
+	uint8_t verified_boot_hash[SHA256_DIGEST_SIZE];
+} keymaster_boot_params;
+
+/* Secure HAL APIs */
+#define TRUSTZONE_HAL_API_SRAM                  0x400
+
+
+#define SRAM_HAL_API_CHECK_EFUSE 0x403
+struct sram_hal_api_arg {
+	unsigned int cmd;
+	unsigned int req_len;
+	unsigned int res_len;
+	unsigned long req_phy_addr;
+	unsigned long res_phy_addr;
+	unsigned long ret_phy_addr;
+};
+
+#define JTAG_STATE_ON  0
+#define JTAG_STATE_OFF 1
+#define JTAG_M3_AO     0
+#define JTAG_M3_EE     1
+#define JTAG_A53_AO    2
+#define JTAG_A53_EE 3
+#define CLUSTER_BIT 2
+
+#define GET_AVBKEY_FROM_FIP              0x820000b0
+
+/////////////////////////////////////////////////////////////////////////////////
+#define AML_DATA_PROCESS                 (0x820000FF)
+	#define AML_D_P_W_EFUSE_SECURE_BOOT  (0x10)
+	#define AML_D_P_W_EFUSE_PASSWORD     (0x11)
+	#define AML_D_P_W_EFUSE_CUSTOMER_ID  (0x12)
+	#define AML_D_P_W_EFUSE_AMLOGIC 	 (0x20)
+	#define AML_D_P_IMG_DECRYPT          (0x40)
+	#define AML_D_P_UPGRADE_CHECK        (0x80)
+	#define AML_D_Q_IMG_SIG_HDR_SIZE     (0x100)
+
+#define GXB_EFUSE_PATTERN_SIZE      (0x500)
+#define GXB_IMG_SIZE                (24<<20)
+#define GXB_IMG_LOAD_ADDR           (0x1080000)
+	#define GXB_IMG_DEC_KNL   (1<<0)
+	#define GXB_IMG_DEC_RMD   (1<<1)
+	#define GXB_IMG_DEC_DTB   (1<<2)
+	#define GXB_IMG_DEC_ALL   (GXB_IMG_DEC_KNL|GXB_IMG_DEC_RMD|GXB_IMG_DEC_DTB)
+
+#define __asmeq(x, y)  ".ifnc " x "," y " ; .err ; .endif\n\t"
+
+void aml_set_jtag_state(unsigned state, unsigned select);
+unsigned aml_get_reboot_reason(void);
+unsigned aml_reboot(uint64_t function_id, uint64_t arg0, uint64_t arg1, uint64_t arg2);
+void aml_set_reboot_reason(uint64_t function_id, uint64_t arg0, uint64_t arg1, uint64_t arg2);
+unsigned long aml_sec_boot_check(unsigned long ,unsigned long ,unsigned long,unsigned long );
+long get_sharemem_info(unsigned long);
+void set_usb_boot_function(unsigned long command);
+void aml_system_off(void);
+
+void bl31_get_chipid(unsigned int *, unsigned int *,
+	unsigned int *, unsigned int *);
+void set_viu_probe_enable(void);
+int32_t set_boot_params(const keymaster_boot_params*);
+int32_t get_avbkey_from_fip(uint8_t *buf, uint32_t buflen);
+#endif
diff --git a/include/amlogic/asm/clock.h b/include/amlogic/asm/clock.h
new file mode 100644
index 00000000000..3a24778206e
--- /dev/null
+++ b/include/amlogic/asm/clock.h
@@ -0,0 +1,41 @@
+/* SPDX-License-Identifier: GPL-2.0+ */
+/*
+ * Copyright 2018 - AmLogic, Inc.
+ */
+#ifndef _ARCH_MESON_G12A_CLOCK_H_
+#define _ARCH_MESON_G12A_CLOCK_H_
+
+/*
+ * Clock controller register offsets
+ *
+ * Register offsets from the data sheet are listed in comment blocks below.
+ * Those offsets must be multiplied by 4 before adding them to the base address
+ * to get the right value
+ */
+
+#define HHI_GCLK_MPEG0			0x140 /* 0x50 offset in data sheet1 */
+#define HHI_GCLK_MPEG1			0x144 /* 0x51 offset in data sheet1 */
+#define HHI_GCLK_MPEG2			0x148 /* 0x52 offset in data sheet1 */
+#define HHI_GCLK_OTHER			0x150 /* 0x54 offset in data sheet1 */
+#define HHI_FIX_PLL_CNTL0		0x2A0 /* 0xa8 offset in data sheet1 */
+#define HHI_FIX_PLL_CNTL1		0x2A4 /* 0xa9 offset in data sheet1 */
+#define HHI_SYS_PLL_CNTL0		0x2f4 /* 0xbd offset in data sheet1 */
+#define HHI_SYS_PLL_CNTL1		0x2f8 /* 0xbe offset in data sheet1 */
+#define HHI_SYS_PLL_CNTL2		0x2fc /* 0xbf offset in data sheet1 */
+#define HHI_SYS_PLL_CNTL3		0x300 /* 0xc0 offset in data sheet1 */
+#define HHI_SYS_PLL_CNTL4		0x304 /* 0xc1 offset in data sheet1 */
+#define HHI_SYS_PLL_CNTL5		0x308 /* 0xc2 offset in data sheet1 */
+#define HHI_SYS_PLL_CNTL6		0x30c /* 0xc3 offset in data sheet1 */
+#define HHI_SPICC_CLK_CNTL		0x3dc /* 0xf7 offset in data sheet1 */
+#define HHI_NAND_CLK_CNTL		0x25c /* 0x97 offset in data sheet1 */
+#define HHI_SD_EMMC_CLK_CNTL		0x264 /* 0x99 offset in data sheet1 */
+
+#define CLKID_UNREALIZED		0xfff
+
+/* AO registers */
+#define AO_SAR_CLK			0x90
+#define AO_CLK_GATE0			0x4c
+
+ulong meson_measure_clk_rate(unsigned int clk);
+
+#endif
diff --git a/include/amlogic/asm/cpu_config.h b/include/amlogic/asm/cpu_config.h
new file mode 100644
index 00000000000..7e7c758f867
--- /dev/null
+++ b/include/amlogic/asm/cpu_config.h
@@ -0,0 +1,101 @@
+
+/*
+ * arch/arm/include/asm/arch-txl/cpu_config.h
+ *
+ * Copyright (C) 2015 Amlogic, Inc. All rights reserved.
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License for
+ * more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program; if not, write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
+*/
+
+#ifndef _BOOT_ROM_CONFIG_H_
+#define _BOOT_ROM_CONFIG_H_
+
+/***********************************************************
+ * The following constants are GXBB definition
+ **********************************************************/
+#define ROMBOOT_START   0xD9040000
+#define ROM_SIZE        (64*1024)
+#define ROMBOOT_END     (ROMBOOT_START+ROM_SIZE)
+
+/***********************************************************
+ * AHB-SRAM Total Size 80KB, layout shown as below
+ *
+ * ROMCODE use the top 32KB
+ *
+ * [	128]	0xD901_3F80 - 0xD901_3FFF	Reserved
+ * [	128]	0xD901_3F00 - 0xD901_3F7F	CPUs Boot Entry
+ * [	256]	0xD901_3E00 - 0xD901_3EFF	Debug Info
+ * [	512]	0xD901_3C00 - 0xD901_3DFF	eFuse mirror
+ * [	 1K]	0xD901_3800 - 0xD901_3BFF	Secure Mailbox (3)
+ * [	 1K]	0xD901_3400 - 0xD901_37FF	High Mailbox (2) *
+ * [	 1K]	0xD901_3000 - 0xD901_33FF	High Mailbox (1) *
+ * [	26K]	0xD900_C800 - 0xD901_2FFF	BL1 Stack, BSS
+ * [	 1K]	0xD900_C400 - 0xD900_C7FF	NAND, USB Buffer
+ * [	 1K]	0xD900_C000 - 0xD900_C3FF	Reserved
+ *
+ **********************************************************/
+#define RAM_START			0xD9000000
+#define RAM_SIZE			(80 * 1024)
+#define BL1_RAM_START			(RAM_START + 0xC000)
+#define BL1_RAM_SIZE			(32 * 1024)
+#define BL1_RAM_END			(BL1_RAM_START + BL1_RAM_SIZE)
+#define BSS_START			(BL1_RAM_START + (2 * 1024))
+#define BSS_SIZE			(18 * 1024)
+#define _STACK_END			(BSS_START + BSS_SIZE + 8*1024)
+#define BL1_EFUSE_MIRROR		(BL1_RAM_END - 1024)
+#define P_SHARED_EFUSE_MIRROR		(volatile uint32_t *)(BL1_EFUSE_MIRROR)
+#define BL1_DEBUG_BUFFER		(BL1_RAM_END - 512)
+#define CPU_BOOT_ENTRY		(BL1_DEBUG_BUFFER + 256)
+#define P_SHARED_DEBUG_BUFF		(volatile uint32_t *)(BL1_DEBUG_BUFFER)
+#define BL1_SEC_MBX			(BL1_RAM_END - 2*1024)
+#define BL1_NAND_BUFF			(BL1_RAM_START + 1024)
+#define BL1_USB_BUFF			(BL1_NAND_BUFF)
+
+#define MEMORY_LOC			RAM_START
+
+#define SRAM_DEBUG_BUFF_SIZE		256
+
+/* BL2 SPL size */
+#define BL2_SIZE			(64 * 1024)
+
+//for signature test
+//#define CONFIG_AML_SIG_TEST_BUILD
+
+/* Software SHA2 */
+#define CONFIG_SHA2_SW
+
+/* Hardware SHA2 */
+#define CONFIG_SHA2_HW
+#define SHA2_HW_UPDATE_API
+
+/* Keep timer config in conf.h */
+#define CONFIG_TIMER
+
+/* Bootrom debug info */
+#define CONFIG_DEBUG_INFO
+
+/* Mincrypt RSA library */
+//#define CONFIG_MINCRYPT
+
+/* PolarSSL RSA library */
+#define CONFIG_POLARSSL_RSA
+
+#ifdef CONFIG_POLARSSL_RSA
+#ifndef CONFIG_MALLOC
+#define CONFIG_MALLOC
+#endif /* ! CONFIG_MALLOC */
+#endif /* CONFIG_POLARSSL_RSA */
+
+#endif /* _BOOT_ROM_CONFIG_H_ */
diff --git a/include/amlogic/asm/cpu_sdio.h b/include/amlogic/asm/cpu_sdio.h
new file mode 100644
index 00000000000..baf87065849
--- /dev/null
+++ b/include/amlogic/asm/cpu_sdio.h
@@ -0,0 +1,264 @@
+
+/*
+ * arch/arm/include/asm/arch-txl/cpu_sdio.h
+ *
+ * Copyright (C) 2015 Amlogic, Inc. All rights reserved.
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License for
+ * more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program; if not, write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
+*/
+
+#ifndef __CPU_SDIO_H__
+#define __CPU_SDIO_H__
+
+#define SD_EMMC_BASE_A 0xFFE03000
+#define SD_EMMC_BASE_B 0xFFE05000
+#define SD_EMMC_BASE_C 0xFFE07000
+
+#define SDIO_PORT_A 0
+#define SDIO_PORT_B 1
+#define SDIO_PORT_C 2
+
+#if 0
+#define	SD_EMMC_RXD_ERROR				1
+#define	SD_EMMC_TXD_ERROR				1<<1
+#define	SD_EMMC_DESC_ERROR				1<<2
+#define	SD_EMMC_RESP_CRC_ERROR			1<<3
+#define	SD_EMMC_RESP_TIMEOUT_ERROR		1<<4
+#define	SD_EMMC_DESC_TIMEOUT_ERROR		1<<5
+#endif
+
+struct sd_emmc_global_regs {
+    volatile uint32_t gclock;     // 0x00
+    volatile uint32_t gdelay;     // 0x04
+	volatile uint32_t gdelay1;    //0x08
+    volatile uint32_t gadjust;    // 0x0c
+    volatile uint32_t gcalout;    // 0x10
+    volatile uint32_t reserved_14[11];   // 0x14~0x3c
+    volatile uint32_t gstart;     // 0x40
+    volatile uint32_t gcfg;       // 0x44
+    volatile uint32_t gstatus;    // 0x48
+    volatile uint32_t girq_en;    // 0x4c
+    volatile uint32_t gcmd_cfg;   // 0x50
+    volatile uint32_t gcmd_arg;   // 0x54
+    volatile uint32_t gcmd_dat;   // 0x58
+    volatile uint32_t gcmd_rsp0;   // 0x5c
+    volatile uint32_t gcmd_rsp1;  // 0x60
+    volatile uint32_t gcmd_rsp2;  // 0x64
+    volatile uint32_t gcmd_rsp3;  // 0x68
+    volatile uint32_t reserved_6c;       // 0x6c
+    volatile uint32_t gcurr_cfg;  // 0x70
+    volatile uint32_t gcurr_arg;  // 0x74
+    volatile uint32_t gcurr_dat;  // 0x78
+    volatile uint32_t gcurr_rsp;  // 0x7c
+    volatile uint32_t gnext_cfg;  // 0x80
+    volatile uint32_t gnext_arg;  // 0x84
+    volatile uint32_t gnext_dat;  // 0x88
+    volatile uint32_t gnext_rsp;  // 0x8c
+    volatile uint32_t grxd;       // 0x90
+    volatile uint32_t gtxd;       // 0x94
+    volatile uint32_t reserved_98[90];   // 0x98~0x1fc
+    volatile uint32_t gdesc[128]; // 0x200
+    volatile uint32_t gping[128]; // 0x400
+    volatile uint32_t gpong[128]; // 0x800
+};
+
+union sd_emmc_setup {
+    uint32_t d32;
+    struct {
+        unsigned bw:3;
+        unsigned fast:1;
+        unsigned par:3;
+        unsigned hcs:1;
+        unsigned sd:1;
+        unsigned sdhc:1;
+        unsigned type:6;
+        unsigned rca:16;
+    } b;
+};
+
+struct sd_emmc_desc_info{
+    uint32_t cmd_info;
+    uint32_t cmd_arg;
+    uint32_t data_addr;
+    uint32_t resp_addr;
+};
+
+struct cmd_cfg{
+    uint32_t length:9;
+    uint32_t block_mode:1;
+    uint32_t r1b:1;
+    uint32_t end_of_chain:1;
+    uint32_t timeout:4;
+    uint32_t no_resp:1;
+    uint32_t no_cmd:1;
+    uint32_t data_io:1;
+    uint32_t data_wr:1;
+    uint32_t resp_nocrc:1;
+    uint32_t resp_128:1;
+    uint32_t resp_num:1;
+    uint32_t data_num:1;
+    uint32_t cmd_index:6;
+    uint32_t error:1;
+    uint32_t owner:1;
+};
+
+struct sd_emmc_status{
+	uint32_t rxd_err:8;      /*[7:0]     RX data CRC error per wire, for multiple block read, the CRC errors are ORed together.*/
+	uint32_t txd_err:1;      /*[8]       TX data CRC error, for multiple block write, any one of blocks CRC error. */
+	uint32_t desc_err:1;     /*[9]       SD/eMMC controller doesn¡¯t own descriptor. The owner bit is ¡°0¡±, set cfg_ignore_owner to ignore this error.*/
+	uint32_t resp_err:1;     /*[10]      Response CRC error.*/
+	uint32_t resp_timeout:1; /*[11]      No response received before time limit. The timeout limit is set by cfg_resp_timeout.*/
+	uint32_t desc_timeout:1; /*[12]      Descriptor execution time over time limit. The timeout limit is set by descriptor itself.*/
+                            /*      Consider the multiple block read/write, set the proper timeout limits.*/
+	uint32_t end_of_chain:1; /*[13]      End of Chain IRQ, Normal IRQ. */
+	uint32_t desc_irq:1;     /*[14]      This descriptor requests an IRQ, Normal IRQ, the descriptor chain execution keeps going on.*/
+	uint32_t irq_sdio:1;     /*[15]      SDIO device uses DAT[1] to request IRQ. */
+	uint32_t dat_i:8;        /*[23:16]   Input data signals. */
+	uint32_t cmd_i:1;        /*[24]      nput response signal. */
+	uint32_t ds:1;           /*[25]      Input data strobe. */
+	uint32_t bus_fsm:4;      /*[29:26]   BUS fsm */
+    uint32_t desc_wr_rdy:1;  /*[30]      Descriptor write back process is done and it is ready for CPU to read.*/
+	uint32_t core_rdy:1;	 /*[31]       desc_busy or sd_emmc_irq or bus_fsm is not idle.*/
+};//__attribute__((__may_alias__));
+
+
+struct sd_emmc_clock{
+    uint32_t div:6;          /*[5:0]     Clock divider. Frequency = clock source/cfg_div, Maximum divider 63. */
+                            /*Clock off: cfg_div==0, the clock is disabled */
+                            /*Divider bypass: cfg_div==1, clock source is used as core clock without divider. */
+    uint32_t src:2;          /*[7:6]     Clock source, 0: Crystal 24MHz, 1: Fix PLL, 850MHz*/
+                            /* 2: MPLL, <637MHz, used for 400MHz exactly. 3: different PLL */
+    uint32_t core_phase:2;   /*[9:8]     Core clock phase. 0: 0 phase, 1: 90 phase, 2: 180 phase, 3: 270 phase.*/
+    uint32_t tx_phase:2;     /*[11:10]   TX clock phase. 0: 0 phase, 1: 90 phase, 2: 180 phase, 3: 270 phase.*/
+    uint32_t rx_phase:2;     /*[13:12]   RX clock phase. 0: 0 phase, 1: 90 phase, 2: 180 phase, 3: 270 phase.*/
+    uint32_t reserved14:2;
+    uint32_t tx_delay:6;     /*[21:16]   TX clock delay line. 0: no delay, n: delay n*200ps. Maximum delay 3ns.*/
+    uint32_t rx_delay:6;     /*[27:22]   RX clock delay line. 0: no delay, n: delay n*200ps. Maximum delay 3ns.*/
+    uint32_t always_on:1;    /*[28]      1: Keep clock always on. 0: Clock on/off controlled by activities. */
+                            /*Any APB3 access or descriptor execution will keep clock on.*/
+    uint32_t irq_sdio_sleep:1; /*[29]    1: enable IRQ sdio when in sleep mode. */
+	uint32_t irq_sdio_sleep_ds:1;/*[30] 1:enable ds as irq*/
+    uint32_t reserved26:1;
+};
+
+struct sd_emmc_delay{
+    uint32_t dat0:6;         /*[3:0]       Data 0 delay line. */
+    uint32_t dat1:6;         /*[7:4]       Data 1 delay line. */
+    uint32_t dat2:6;         /*[11:8]      Data 2 delay line. */
+    uint32_t dat3:6;         /*[15:12]     Data 3 delay line. */
+    uint32_t dat4:6;         /*[19:16]     Data 4 delay line. */
+	uint32_t spare:2;
+};
+
+struct sd_emmc_delay1{
+    uint32_t dat5:6;         /*[23:20]     Data 5 delay line. */
+    uint32_t dat6:6;         /*[27:24]     Data 6 delay line. */
+    uint32_t dat7:6;         /*[31:28]     Data 7 delay line. */
+	uint32_t dat8:6;         /*[31:28]     Data 7 delay line. */
+	uint32_t dat9:6;         /*[31:28]     Data 7 delay line. */
+	uint32_t spare:2;
+};
+
+struct sd_emmc_adjust{
+    uint32_t cmd_delay:4;           /*[3:0]       Command delay line. */
+    uint32_t ds_delay:4;            /*[7:4]       DS delay line. */
+    uint32_t cali_sel:4;            /*[11:8]      Select one signal to be tested.*/
+                                        /*Signals are labeled from 0 to 9 the same as delay lines. */
+    uint32_t cali_enable:1;         /*[12]        Enable calibration. */
+    uint32_t adj_enable:1;          /*[13]       Adjust interface timing by resampling the input signals. */
+    uint32_t cali_rise:1;           /*[14]       1: test the rising edge. 0: test the falling edge. */
+    uint32_t ds_enable:1;			/*[15]		Sampling the DAT based on DS in HS400 mode*/
+    uint32_t adj_delay:6;           /*[21:16]       Resample the input signals when clock index==adj_delay. */
+    uint32_t adj_auto:1;			/*[22]			Use cali_dut first falling edge to adjust the timing */
+										/*set cali_enable to 1 to use this function*/
+	uint32_t reserved23:9;
+};
+
+
+struct sd_emmc_calout{
+    uint32_t cali_idx:6;         /*[5:0]       Calibration reading. The event happens at this index. */
+    uint32_t reserved6:1;
+    uint32_t cali_vld:1;         /*[7]         The reading is valid. */
+    uint32_t cali_setup:8;       /*[15:8]      Copied from BASE+0x8 [15:8] include cali_sel, cali_enable, adj_enable, cali_rise. */
+    uint32_t reserved16:16;
+};
+
+
+struct sd_emmc_start{
+	uint32_t init:1;         /*[0]   1: Read descriptor from internal SRAM, limited to 32 descriptors. */
+                            /*  0: Read descriptor from external DDR */
+	uint32_t busy:1;         /*[1]   1: Start command chain execution process. 0: Stop */
+	uint32_t addr:30;        /*[31:2] Descriptor address, the last 2 bits are 0, 4 bytes aligned. */
+                            /*  When internal SRAM is used, the valid address range is from 0x200~0x3ff */
+                            /*  When external DDR is used, the valid address is anywhere in DDR, the length of chain is unlimited.*/
+};//__attribute__((__may_alias__));
+
+
+struct sd_emmc_config{
+	uint32_t bus_width:2;    /*[1:0]     0: 1 bit, 1: 4 bits, 2: 8 bits, 3: 2 bits (not supported)*/
+	uint32_t ddr:1;          /*[2]       1: DDR mode, 0: SDR mode */
+	uint32_t dc_ugt:1;       /*[3]       1: DDR access urgent, 0: DDR access normal. */
+	uint32_t bl_len:4;       /*[7:4]     Block length 2^cfg_bl_len, because internal buffer size is limited to 512 bytes, the cfg_bl_len <=9. */
+	uint32_t resp_timeout:4; /*[11:8]    Wait response till 2^cfg_resp_timeout core clock cycles. Maximum 32768 core cycles. */
+	uint32_t rc_cc:4;        /*[15:12]   Wait response-command, command-command gap before next command, 2^cfg_rc_cc core clock cycles. */
+	uint32_t out_fall:1;     /*[16]      DDR mode only. The command and TXD start from rising edge. Set 1 to start from falling edge. */
+	uint32_t blk_gap_ip:1;   /*[17]      1: Enable SDIO data block gap interrupt period. 0: Disabled.*/
+	uint32_t spare:1;        /*[18]      Spare,  ??? need check*/
+	uint32_t ignore_owner:1; /*[19]      Use this descriptor even if its owner bit is ¡°0¡±.*/
+	uint32_t chk_ds:1;       /*[20]      Check data strobe in HS400.*/
+	uint32_t cmd_low:1;      /*[21]      Hold CMD as output Low, eMMC boot mode.*/
+	uint32_t stop_clk:1;     /*[22]      1: stop clock. 0: normal clock.*/
+	                        /*In normal mode, the clock is automatically on/off during reading mode to back off reading in case of*/
+	                        /*DDR slow response, stop clock is used in voltage switch.*/
+	uint32_t auto_clk:1;     /*[23]      1: when BUS is idle and no descriptor is available, turn off clock, to save power.*/
+                            /*      0: core clock is always on.*/
+    uint32_t txd_add_err:1;	/*[24]   	TXD add error test*/
+							/*Test feature, should not be used in normal condition.*/
+							/*It will inverted the first CRC bits of the 3rd block.*/
+							/*Block index starts from 0, 1, 2, ¡­*/
+    uint32_t txd_retry:1;	/*[25]   	When TXD CRC error, host sends the block again.*/
+							/*The total number of retries of one descriptor is limited to 15, */
+							/*after 15 retries, the TXD_err is set to high.*/
+    uint32_t revd:8;	        /*[31:26]   reved*/
+};//__attribute__((__may_alias__));
+
+
+struct sd_emmc_irq_en{
+	uint32_t rxd_err:8;      /*[7:0]     RX data CRC error per wire.*/
+	uint32_t txd_err:1;      /*[8]       TX data CRC error. */
+	uint32_t desc_err:1;     /*[9]       SD/eMMC controller doesn¡¯t own descriptor. */
+	uint32_t resp_err:1;     /*[10]      Response CRC error.*/
+	uint32_t resp_timeout:1; /*[11]      No response received before time limit. */
+	uint32_t desc_timeout:1; /*[12]      Descriptor execution time over time limit. */
+	uint32_t end_of_chain:1; /*[13]      End of Chain IRQ. */
+	uint32_t desc_irq:1;     /*[14]      This descriptor requests an IRQ. */
+	uint32_t irq_sdio:1;     /*[15]      Enable sdio interrupt. */
+    uint32_t revd:16;	    /*[31:16]   reved*/
+};
+
+struct sd_emmc_data_info{
+	uint32_t cnt:10;         /*[9:0]     Rxd words received from BUS. Txd words received from DDR.*/
+	uint32_t blk:9;          /*[24:16]   Rxd Blocks received from BUS. Txd blocks received from DDR.*/
+	uint32_t revd:30;        /*[31:17]   Reved. */
+};
+
+
+struct sd_emmc_card_info{
+	uint32_t txd_cnt:10;     /*[9:0]     Txd BUS cycle counter. */
+	uint32_t txd_blk:9;      /*[24:16]   Txd BUS block counter.*/
+	uint32_t revd:30;        /*[31:17]   Reved. */
+};
+
+#endif
diff --git a/include/amlogic/asm/efuse.h b/include/amlogic/asm/efuse.h
new file mode 100644
index 00000000000..b5ea02723f9
--- /dev/null
+++ b/include/amlogic/asm/efuse.h
@@ -0,0 +1,62 @@
+
+/*
+ * arch/arm/include/asm/arch-txl/efuse.h
+ *
+ * Copyright (C) 2015 Amlogic, Inc. All rights reserved.
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License for
+ * more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program; if not, write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
+*/
+
+#ifndef __EFUSE_H
+#define __EFUSE_H
+
+#include <config.h>
+#include <common.h>
+
+/* efuse HAL_API arg */
+struct efuse_hal_api_arg {
+	unsigned int cmd;		/* R/W */
+	unsigned int offset;
+	unsigned int size;
+	unsigned long buffer_phy;
+	unsigned long retcnt_phy;
+};
+
+
+#define EFUSE_BYTES				512   /* (EFUSE_BITS/8) */
+
+#define EFUSE_HAL_API_READ	0
+#define EFUSE_HAL_API_WRITE 1
+#define EFUSE_HAL_API_WRITE_PATTERN 2
+#define EFUSE_HAL_API_USER_MAX 3
+
+#define EFUSE_USER_MASK            (0x1 << 16)
+#define EFUSE_THERMAL_MASK         (0x1 << 17)
+#define EFUSE_THERMAL_VERFLAG_MASK (0x1 << 18)
+#define EFUSE_ENCRYPT_MASK         (0x1 << 19)
+
+//#define ASSIST_HW_REV                              0x1f53
+
+int efuse_read_usr(char *buf, size_t count, loff_t *ppos);
+int efuse_write_usr(char *buf, size_t count, loff_t *ppos);
+uint32_t efuse_get_max(void);
+ssize_t efuse_read(char *buf, size_t count, loff_t *ppos);
+ssize_t efuse_write(const char *buf, size_t count, loff_t *ppos);
+
+int32_t meson_trustzone_efuse(struct efuse_hal_api_arg *arg);
+int32_t meson_trustzone_efuse_get_max(struct efuse_hal_api_arg *arg);
+
+#endif
+
diff --git a/include/amlogic/asm/io.h b/include/amlogic/asm/io.h
new file mode 100644
index 00000000000..8640303b518
--- /dev/null
+++ b/include/amlogic/asm/io.h
@@ -0,0 +1,118 @@
+
+/*
+ * arch/arm/include/asm/arch-txl/io.h
+ *
+ * Copyright (C) 2015 Amlogic, Inc. All rights reserved.
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License for
+ * more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program; if not, write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
+*/
+
+#ifndef __MACH_MESSON_REGS_IO_H
+#define __MACH_MESSON_REGS_IO_H
+
+#ifndef __ASSEMBLY__
+
+#include <asm/io.h>
+#define IO_CBUS_BASE                    (0xFFD00000L)
+#define IO_AXI_BUS_BASE                 (0xFFB00000L) /* gpv */
+#define IO_AHB_BUS_BASE                 (0xFF500000L) /* usb0 */
+#define IO_APB_BUS_BASE                 (0xFFFC0000L) /* AHB SRAM, sec/sys ahb? txlx_mem_map.xlsx */
+#define IO_APB_HDMI_BUS_BASE            (0xFFE00000L) /*  */
+#define IO_VPU_BUS_BASE                 (0xFF900000L) /* VPU */
+
+#define CBUS_REG_OFFSET(reg) ((reg) << 2)
+#define CBUS_REG_ADDR(reg)	 (IO_CBUS_BASE + CBUS_REG_OFFSET(reg))
+
+#define AXI_REG_OFFSET(reg)  ((reg) << 2)
+#define AXI_REG_ADDR(reg)	 (IO_AXI_BUS_BASE + AXI_REG_OFFSET(reg))
+
+#define AHB_REG_OFFSET(reg)  ((reg) << 2)
+#define AHB_REG_ADDR(reg)	 (IO_AHB_BUS_BASE + AHB_REG_OFFSET(reg))
+
+#define VPU_REG_OFFSET(reg)  ((reg) << 2)
+#define VPU_REG_ADDR(reg)	 (IO_VPU_BUS_BASE + VPU_REG_OFFSET(reg))
+
+
+#define APB_REG_OFFSET(reg)  (reg)
+#define APB_REG_ADDR(reg)	 (IO_APB_BUS_BASE + APB_REG_OFFSET(reg))
+#define APB_REG_ADDR_VALID(reg) (((unsigned long)(reg) & 3) == 0)
+
+#define APB_HDMI_REG_OFFSET(reg)  (reg)
+#define APB_HDMI_REG_ADDR(reg)	 (IO_APB_HDMI_BUS_BASE + APB_HDMI_REG_OFFSET(reg))
+#define APB_HDMI_REG_ADDR_VALID(reg) (((unsigned long)(reg) & 3) == 0)
+
+
+#define WRITE_CBUS_REG(reg, val) __raw_writel(val, CBUS_REG_ADDR(reg))
+#define READ_CBUS_REG(reg) (__raw_readl(CBUS_REG_ADDR(reg)))
+#define WRITE_CBUS_REG_BITS(reg, val, start, len) \
+    WRITE_CBUS_REG(reg,	(READ_CBUS_REG(reg) & ~(((1L<<(len))-1)<<(start)) )| ((unsigned)((val)&((1L<<(len))-1)) << (start)))
+#define READ_CBUS_REG_BITS(reg, start, len) \
+    ((READ_CBUS_REG(reg) >> (start)) & ((1L<<(len))-1))
+#define CLEAR_CBUS_REG_MASK(reg, mask) WRITE_CBUS_REG(reg, (READ_CBUS_REG(reg)&(~(mask))))
+#define SET_CBUS_REG_MASK(reg, mask)   WRITE_CBUS_REG(reg, (READ_CBUS_REG(reg)|(mask)))
+
+#define WRITE_AXI_REG(reg, val) __raw_writel(val, AXI_REG_ADDR(reg))
+#define READ_AXI_REG(reg) (__raw_readl(AXI_REG_ADDR(reg)))
+#define WRITE_AXI_REG_BITS(reg, val, start, len) \
+    WRITE_AXI_REG(reg,	(READ_AXI_REG(reg) & ~(((1L<<(len))-1)<<(start)) )| ((unsigned)((val)&((1L<<(len))-1)) << (start)))
+#define READ_AXI_REG_BITS(reg, start, len) \
+    ((READ_AXI_REG(reg) >> (start)) & ((1L<<(len))-1))
+#define CLEAR_AXI_REG_MASK(reg, mask) WRITE_AXI_REG(reg, (READ_AXI_REG(reg)&(~(mask))))
+#define SET_AXI_REG_MASK(reg, mask)   WRITE_AXI_REG(reg, (READ_AXI_REG(reg)|(mask)))
+
+#define WRITE_AHB_REG(reg, val) __raw_writel(val, AHB_REG_ADDR(reg))
+#define READ_AHB_REG(reg) (__raw_readl(AHB_REG_ADDR(reg)))
+#define WRITE_AHB_REG_BITS(reg, val, start, len) \
+    WRITE_AHB_REG(reg,	(READ_AHB_REG(reg) & ~(((1L<<(len))-1)<<(start)) )| ((unsigned)((val)&((1L<<(len))-1)) << (start)))
+#define READ_AHB_REG_BITS(reg, start, len) \
+    ((READ_AHB_REG(reg) >> (start)) & ((1L<<(len))-1))
+#define CLEAR_AHB_REG_MASK(reg, mask) WRITE_AHB_REG(reg, (READ_AHB_REG(reg)&(~(mask))))
+#define SET_AHB_REG_MASK(reg, mask)   WRITE_AHB_REG(reg, (READ_AHB_REG(reg)|(mask)))
+
+#define WRITE_APB_REG(reg, val) __raw_writel(val, APB_REG_ADDR(reg))
+#define READ_APB_REG(reg) (__raw_readl(APB_REG_ADDR(reg)))
+#define WRITE_APB_REG_BITS(reg, val, start, len) \
+    WRITE_APB_REG(reg,	(READ_APB_REG(reg) & ~(((1L<<(len))-1)<<(start)) )| ((unsigned)((val)&((1L<<(len))-1)) << (start)))
+#define READ_APB_REG_BITS(reg, start, len) \
+    ((READ_APB_REG(reg) >> (start)) & ((1L<<(len))-1))
+#define CLEAR_APB_REG_MASK(reg, mask) WRITE_APB_REG(reg, (READ_APB_REG(reg)&(~(mask))))
+#define SET_APB_REG_MASK(reg, mask)   WRITE_APB_REG(reg, (READ_APB_REG(reg)|(mask)))
+
+#define WRITE_APB_HDMI_REG(reg, val) __raw_writel(val, APB_HDMI_REG_ADDR(reg))
+#define READ_APB_HDMI_REG(reg) (__raw_readl(APB_HDMI_REG_ADDR(reg)))
+#define WRITE_APB_HDMI_REG_BITS(reg, val, start, len) \
+    WRITE_APB_HDMI_REG(reg,	(READ_APB_HDMI_REG(reg) & ~(((1L<<(len))-1)<<(start)) )| ((unsigned)((val)&((1L<<(len))-1)) << (start)))
+#define READ_APB_HDMI_REG_BITS(reg, start, len) \
+    ((READ_APB_HDMI_REG(reg) >> (start)) & ((1L<<(len))-1))
+#define CLEAR_APB_HDMI_REG_MASK(reg, mask) WRITE_APB_HDMI_REG(reg, (READ_APB_HDMI_REG(reg)&(~(mask))))
+#define SET_APB_HDMI_REG_MASK(reg, mask)   WRITE_APB_HDMI_REG(reg, (READ_APB_HDMI_REG(reg)|(mask)))
+
+/* for back compatible alias */
+#define WRITE_MPEG_REG(reg, val) \
+	WRITE_CBUS_REG(reg, val)
+#define READ_MPEG_REG(reg) \
+	READ_CBUS_REG(reg)
+#define WRITE_MPEG_REG_BITS(reg, val, start, len) \
+	WRITE_CBUS_REG_BITS(reg, val, start, len)
+#define READ_MPEG_REG_BITS(reg, start, len) \
+	READ_CBUS_REG_BITS(reg, start, len)
+#define CLEAR_MPEG_REG_MASK(reg, mask) \
+	CLEAR_CBUS_REG_MASK(reg, mask)
+#define SET_MPEG_REG_MASK(reg, mask) \
+	SET_CBUS_REG_MASK(reg, mask)
+#endif
+
+
+#endif
diff --git a/include/amlogic/asm/register.h b/include/amlogic/asm/register.h
new file mode 100644
index 00000000000..aa342a50fd9
--- /dev/null
+++ b/include/amlogic/asm/register.h
@@ -0,0 +1,98 @@
+
+/*
+ * arch/arm/include/asm/arch-txl/register.h
+ *
+ * Copyright (C) 2015 Amlogic, Inc. All rights reserved.
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License for
+ * more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program; if not, write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
+*/
+
+#ifndef __REGISTER_H__
+#define __REGISTER_H__
+
+#define IO_CBUS_BASE			0xFFD00000
+#define IO_AXI_BUS_BASE			0xFFB00000
+#define IO_AHB_BUS_BASE			0xFF500000
+#define IO_APB_BUS_BASE			0xFFFC0000
+#define IO_APB_HDMI_BUS_BASE	0xFFE00000
+#define IO_VPU_BUS_BASE			0xFF900000
+
+#define CBUS_REG_OFFSET(reg) ((reg) << 2)
+#define CBUS_REG_ADDR(reg)	 (IO_CBUS_BASE + CBUS_REG_OFFSET(reg))
+
+#if 0
+/* below UART0,UART1,AO_UART is m8 addr,it is placed is for compiling pass */
+/* -------------------------------
+// UART0
+// ---------------------------- */
+#define UART0_WFIFO                                0x2130
+#define UART0_RFIFO                                0x2131
+#define UART0_CONTROL                              0x2132
+#define UART0_STATUS                               0x2133
+#define UART0_MISC                                 0x2134
+#define UART0_REG5                                 0x2135
+/* ----------------------------
+// UART1
+----------------------------*/
+#define UART1_WFIFO                                0x2137
+#define UART1_RFIFO                                0x2138
+#define UART1_CONTROL                              0x2139
+#define UART1_STATUS                               0x213a
+#define UART1_MISC                                 0x213b
+#define UART1_REG5                                 0x213c
+
+/* ------------------------------------------------------
+ The following are handled by $periphs/rtl/periphs_reg.v
+  ----------------------------------------              */
+#define PREG_CTLREG0_ADDR                          0x2000
+#define P_PREG_CTLREG0_ADDR CBUS_REG_ADDR(PREG_CTLREG0_ADDR)
+
+/* ----------------------------
+ clock measure (4)
+ ---------------------------- */
+#define MSR_CLK_DUTY                               0x21d6
+#define MSR_CLK_REG0                               0x21d7
+#define MSR_CLK_REG1                               0x21d8
+#define MSR_CLK_REG2                               0x21d9
+#define P_MSR_CLK_DUTY CBUS_REG_ADDR(MSR_CLK_DUTY)
+#define P_MSR_CLK_REG0 CBUS_REG_ADDR(MSR_CLK_REG0)
+#define P_MSR_CLK_REG1 CBUS_REG_ADDR(MSR_CLK_REG1)
+#define P_MSR_CLK_REG2 CBUS_REG_ADDR(MSR_CLK_REG2)
+#endif
+
+#if 0
+/* --------------------------------
+ *  AO uart
+ * -------------------------------*/
+#define IO_AOBUS_BASE			0xc8100000  ///1M
+
+#define AOBUS_REG_OFFSET(reg)   ((reg) )
+#define AOBUS_REG_ADDR(reg)	    (IO_AOBUS_BASE + AOBUS_REG_OFFSET(reg))
+
+#define AO_UART_WFIFO ((0x01 << 10) | (0x30 << 2)) 	///../ucode/c_always_on_pointer.h:89
+#define P_AO_UART_WFIFO 		AOBUS_REG_ADDR(AO_UART_WFIFO)
+#define AO_UART_RFIFO ((0x01 << 10) | (0x31 << 2)) 	///../ucode/c_always_on_pointer.h:90
+#define P_AO_UART_RFIFO 		AOBUS_REG_ADDR(AO_UART_RFIFO)
+#define AO_UART_CONTROL ((0x01 << 10) | (0x32 << 2)) 	///../ucode/c_always_on_pointer.h:91
+#define P_AO_UART_CONTROL 		AOBUS_REG_ADDR(AO_UART_CONTROL)
+#define AO_UART_STATUS ((0x01 << 10) | (0x33 << 2)) 	///../ucode/c_always_on_pointer.h:92
+#define P_AO_UART_STATUS 		AOBUS_REG_ADDR(AO_UART_STATUS)
+#define AO_UART_MISC ((0x01 << 10) | (0x34 << 2)) 	///../ucode/c_always_on_pointer.h:93
+#define P_AO_UART_MISC 		AOBUS_REG_ADDR(AO_UART_MISC)
+#define AO_UART_REG5 ((0x01 << 10) | (0x35 << 2)) 	///../ucode/c_always_on_pointer.h:94
+#define P_AO_UART_REG5 		AOBUS_REG_ADDR(AO_UART_REG5)
+#endif
+
+#endif //__REGISTER_H__
diff --git a/include/amlogic/asm/regs.h b/include/amlogic/asm/regs.h
new file mode 100644
index 00000000000..26df3071ccb
--- /dev/null
+++ b/include/amlogic/asm/regs.h
@@ -0,0 +1,32964 @@
+// ----------------------------------------------------------------------
+// regs.h header
+//
+// bus base define, update manually
+//
+// ----------------------------------------------------------------------
+//
+#ifndef _BASE_REGISTER
+#define _BASE_REGISTER
+#define REG_BASE_AOBUS                  (0xFF800000L)
+#define REG_BASE_PERIPHS                (0xFF634000L)
+#define REG_BASE_CBUS                   (0xFFD00000L)
+#define REG_BASE_HIU                    (0xFF63C000L)
+#define REG_BASE_VCBUS                  (0xFF900000L)
+#define DMC_REG_BASE                    (0xFF638000L)
+#define REG_BASE_DSI_HOST          		(0xFFD00000L)/* 0xFFD07000L*/
+
+#endif /*_BASE_REGISTER*/
+
+#ifndef REG_OTHERS
+#define REG_OTHERS
+/* other regs */
+#define   SPI_START_ADDR                             0xFB000000
+#define P_SPI_START_ADDR    (volatile unsigned int *)0xFB000000
+
+#endif /*REG_OTHERS*/
+
+// ----------------------------------------------------------------------
+// This file is automatically generated from the script:
+//
+// ./create_headers_from_register_map_h.pl
+//
+// and was applied to the file
+//
+// ./register_map.h
+//
+// DO NOT EDIT!!!!!
+// ----------------------------------------------------------------------
+//
+#ifdef REGISTER_H
+#else
+#define REGISTER_H
+#endif
+
+// ----------------------------------------------------------------------
+// This file is automatically generated from the script:
+//
+// ./create_headers_from_dos_params_h.pl
+//
+// and was applied to the file
+//
+// ./dos_param.h
+//
+// DO NOT EDIT!!!!!
+// ----------------------------------------------------------------------
+//
+#ifdef DOS_REGISTER_H
+#else
+#define DOS_REGISTER_H
+
+
+//
+// Reading file:  ./dos_param.h
+//
+//------------------------------------------------------------------------------
+// Define all modules' base address under DOS
+// APB allocation from 32'hd0050000
+//------------------------------------------------------------------------------
+// Define base address for VDEC module under DOS:
+//  DOS_VDEC_ASSIST_BASE_ADDR       14'h0000
+//  DOS_VDEC_MDEC_BASE_ADDR         14'h0900
+//  DOS_VDEC_VLD_BASE_ADDR          14'h0c00
+//  DOS_VDEC_IQIDCT_BASE_ADDR       14'h0e00
+//  DOS_VDEC_VCPU_BASE_ADDR         14'h0300
+//  DOS_VDEC_RESERVED_BASE_ADDR     14'h0f00 // Do not use this offset
+// Define base address for DOS top-level register module:
+//  DOS_TOP_BASE_ADDR               14'h3f00
+//------------------------------------------------------------------------------
+// VDEC_ASSIST module level register offset
+//------------------------------------------------------------------------------
+// -----------------------------------------------
+// CBUS_BASE:  DOS_VDEC_ASSIST_CBUS_BASE = 0x00
+// -----------------------------------------------
+#define   VDEC_ASSIST_MMC_CTRL0                    (0x0001)
+#define P_VDEC_ASSIST_MMC_CTRL0                    (volatile unsigned int *)((0x0001  << 2) + 0xff620000)
+#define   VDEC_ASSIST_MMC_CTRL1                    (0x0002)
+#define P_VDEC_ASSIST_MMC_CTRL1                    (volatile unsigned int *)((0x0002  << 2) + 0xff620000)
+#define   VDEC_ASSIST_MMC_CTRL2                    (0x0003)
+#define P_VDEC_ASSIST_MMC_CTRL2                    (volatile unsigned int *)((0x0003  << 2) + 0xff620000)
+#define   VDEC_ASSIST_MMC_CTRL3                    (0x0004)
+#define P_VDEC_ASSIST_MMC_CTRL3                    (volatile unsigned int *)((0x0004  << 2) + 0xff620000)
+#define   VDEC_ASSIST_AMR1_INT0                    (0x0025)
+#define P_VDEC_ASSIST_AMR1_INT0                    (volatile unsigned int *)((0x0025  << 2) + 0xff620000)
+#define   VDEC_ASSIST_AMR1_INT1                    (0x0026)
+#define P_VDEC_ASSIST_AMR1_INT1                    (volatile unsigned int *)((0x0026  << 2) + 0xff620000)
+#define   VDEC_ASSIST_AMR1_INT2                    (0x0027)
+#define P_VDEC_ASSIST_AMR1_INT2                    (volatile unsigned int *)((0x0027  << 2) + 0xff620000)
+#define   VDEC_ASSIST_AMR1_INT3                    (0x0028)
+#define P_VDEC_ASSIST_AMR1_INT3                    (volatile unsigned int *)((0x0028  << 2) + 0xff620000)
+#define   VDEC_ASSIST_AMR1_INT4                    (0x0029)
+#define P_VDEC_ASSIST_AMR1_INT4                    (volatile unsigned int *)((0x0029  << 2) + 0xff620000)
+#define   VDEC_ASSIST_AMR1_INT5                    (0x002a)
+#define P_VDEC_ASSIST_AMR1_INT5                    (volatile unsigned int *)((0x002a  << 2) + 0xff620000)
+#define   VDEC_ASSIST_AMR1_INT6                    (0x002b)
+#define P_VDEC_ASSIST_AMR1_INT6                    (volatile unsigned int *)((0x002b  << 2) + 0xff620000)
+#define   VDEC_ASSIST_AMR1_INT7                    (0x002c)
+#define P_VDEC_ASSIST_AMR1_INT7                    (volatile unsigned int *)((0x002c  << 2) + 0xff620000)
+#define   VDEC_ASSIST_AMR1_INT8                    (0x002d)
+#define P_VDEC_ASSIST_AMR1_INT8                    (volatile unsigned int *)((0x002d  << 2) + 0xff620000)
+#define   VDEC_ASSIST_AMR1_INT9                    (0x002e)
+#define P_VDEC_ASSIST_AMR1_INT9                    (volatile unsigned int *)((0x002e  << 2) + 0xff620000)
+#define   VDEC_ASSIST_AMR1_INTA                    (0x002f)
+#define P_VDEC_ASSIST_AMR1_INTA                    (volatile unsigned int *)((0x002f  << 2) + 0xff620000)
+#define   VDEC_ASSIST_AMR1_INTB                    (0x0030)
+#define P_VDEC_ASSIST_AMR1_INTB                    (volatile unsigned int *)((0x0030  << 2) + 0xff620000)
+#define   VDEC_ASSIST_AMR1_INTC                    (0x0031)
+#define P_VDEC_ASSIST_AMR1_INTC                    (volatile unsigned int *)((0x0031  << 2) + 0xff620000)
+#define   VDEC_ASSIST_AMR1_INTD                    (0x0032)
+#define P_VDEC_ASSIST_AMR1_INTD                    (volatile unsigned int *)((0x0032  << 2) + 0xff620000)
+#define   VDEC_ASSIST_AMR1_INTE                    (0x0033)
+#define P_VDEC_ASSIST_AMR1_INTE                    (volatile unsigned int *)((0x0033  << 2) + 0xff620000)
+#define   VDEC_ASSIST_AMR1_INTF                    (0x0034)
+#define P_VDEC_ASSIST_AMR1_INTF                    (volatile unsigned int *)((0x0034  << 2) + 0xff620000)
+#define   VDEC_ASSIST_AMR2_INT0                    (0x0035)
+#define P_VDEC_ASSIST_AMR2_INT0                    (volatile unsigned int *)((0x0035  << 2) + 0xff620000)
+#define   VDEC_ASSIST_AMR2_INT1                    (0x0036)
+#define P_VDEC_ASSIST_AMR2_INT1                    (volatile unsigned int *)((0x0036  << 2) + 0xff620000)
+#define   VDEC_ASSIST_AMR2_INT2                    (0x0037)
+#define P_VDEC_ASSIST_AMR2_INT2                    (volatile unsigned int *)((0x0037  << 2) + 0xff620000)
+#define   VDEC_ASSIST_AMR2_INT3                    (0x0038)
+#define P_VDEC_ASSIST_AMR2_INT3                    (volatile unsigned int *)((0x0038  << 2) + 0xff620000)
+#define   VDEC_ASSIST_AMR2_INT4                    (0x0039)
+#define P_VDEC_ASSIST_AMR2_INT4                    (volatile unsigned int *)((0x0039  << 2) + 0xff620000)
+#define   VDEC_ASSIST_AMR2_INT5                    (0x003a)
+#define P_VDEC_ASSIST_AMR2_INT5                    (volatile unsigned int *)((0x003a  << 2) + 0xff620000)
+#define   VDEC_ASSIST_AMR2_INT6                    (0x003b)
+#define P_VDEC_ASSIST_AMR2_INT6                    (volatile unsigned int *)((0x003b  << 2) + 0xff620000)
+#define   VDEC_ASSIST_AMR2_INT7                    (0x003c)
+#define P_VDEC_ASSIST_AMR2_INT7                    (volatile unsigned int *)((0x003c  << 2) + 0xff620000)
+#define   VDEC_ASSIST_AMR2_INT8                    (0x003d)
+#define P_VDEC_ASSIST_AMR2_INT8                    (volatile unsigned int *)((0x003d  << 2) + 0xff620000)
+#define   VDEC_ASSIST_AMR2_INT9                    (0x003e)
+#define P_VDEC_ASSIST_AMR2_INT9                    (volatile unsigned int *)((0x003e  << 2) + 0xff620000)
+#define   VDEC_ASSIST_AMR2_INTA                    (0x003f)
+#define P_VDEC_ASSIST_AMR2_INTA                    (volatile unsigned int *)((0x003f  << 2) + 0xff620000)
+#define   VDEC_ASSIST_AMR2_INTB                    (0x0040)
+#define P_VDEC_ASSIST_AMR2_INTB                    (volatile unsigned int *)((0x0040  << 2) + 0xff620000)
+#define   VDEC_ASSIST_AMR2_INTC                    (0x0041)
+#define P_VDEC_ASSIST_AMR2_INTC                    (volatile unsigned int *)((0x0041  << 2) + 0xff620000)
+#define   VDEC_ASSIST_AMR2_INTD                    (0x0042)
+#define P_VDEC_ASSIST_AMR2_INTD                    (volatile unsigned int *)((0x0042  << 2) + 0xff620000)
+#define   VDEC_ASSIST_AMR2_INTE                    (0x0043)
+#define P_VDEC_ASSIST_AMR2_INTE                    (volatile unsigned int *)((0x0043  << 2) + 0xff620000)
+#define   VDEC_ASSIST_AMR2_INTF                    (0x0044)
+#define P_VDEC_ASSIST_AMR2_INTF                    (volatile unsigned int *)((0x0044  << 2) + 0xff620000)
+#define   VDEC_ASSIST_MBX_SSEL                     (0x0045)
+#define P_VDEC_ASSIST_MBX_SSEL                     (volatile unsigned int *)((0x0045  << 2) + 0xff620000)
+#define   VDEC_ASSIST_TIMER0_LO                    (0x0060)
+#define P_VDEC_ASSIST_TIMER0_LO                    (volatile unsigned int *)((0x0060  << 2) + 0xff620000)
+#define   VDEC_ASSIST_TIMER0_HI                    (0x0061)
+#define P_VDEC_ASSIST_TIMER0_HI                    (volatile unsigned int *)((0x0061  << 2) + 0xff620000)
+#define   VDEC_ASSIST_TIMER1_LO                    (0x0062)
+#define P_VDEC_ASSIST_TIMER1_LO                    (volatile unsigned int *)((0x0062  << 2) + 0xff620000)
+#define   VDEC_ASSIST_TIMER1_HI                    (0x0063)
+#define P_VDEC_ASSIST_TIMER1_HI                    (volatile unsigned int *)((0x0063  << 2) + 0xff620000)
+#define   VDEC_ASSIST_DMA_INT                      (0x0064)
+#define P_VDEC_ASSIST_DMA_INT                      (volatile unsigned int *)((0x0064  << 2) + 0xff620000)
+#define   VDEC_ASSIST_DMA_INT_MSK                  (0x0065)
+#define P_VDEC_ASSIST_DMA_INT_MSK                  (volatile unsigned int *)((0x0065  << 2) + 0xff620000)
+#define   VDEC_ASSIST_DMA_INT2                     (0x0066)
+#define P_VDEC_ASSIST_DMA_INT2                     (volatile unsigned int *)((0x0066  << 2) + 0xff620000)
+#define   VDEC_ASSIST_DMA_INT_MSK2                 (0x0067)
+#define P_VDEC_ASSIST_DMA_INT_MSK2                 (volatile unsigned int *)((0x0067  << 2) + 0xff620000)
+#define   VDEC_ASSIST_MBOX0_IRQ_REG                (0x0070)
+#define P_VDEC_ASSIST_MBOX0_IRQ_REG                (volatile unsigned int *)((0x0070  << 2) + 0xff620000)
+#define   VDEC_ASSIST_MBOX0_CLR_REG                (0x0071)
+#define P_VDEC_ASSIST_MBOX0_CLR_REG                (volatile unsigned int *)((0x0071  << 2) + 0xff620000)
+#define   VDEC_ASSIST_MBOX0_MASK                   (0x0072)
+#define P_VDEC_ASSIST_MBOX0_MASK                   (volatile unsigned int *)((0x0072  << 2) + 0xff620000)
+#define   VDEC_ASSIST_MBOX0_FIQ_SEL                (0x0073)
+#define P_VDEC_ASSIST_MBOX0_FIQ_SEL                (volatile unsigned int *)((0x0073  << 2) + 0xff620000)
+#define   VDEC_ASSIST_MBOX1_IRQ_REG                (0x0074)
+#define P_VDEC_ASSIST_MBOX1_IRQ_REG                (volatile unsigned int *)((0x0074  << 2) + 0xff620000)
+#define   VDEC_ASSIST_MBOX1_CLR_REG                (0x0075)
+#define P_VDEC_ASSIST_MBOX1_CLR_REG                (volatile unsigned int *)((0x0075  << 2) + 0xff620000)
+#define   VDEC_ASSIST_MBOX1_MASK                   (0x0076)
+#define P_VDEC_ASSIST_MBOX1_MASK                   (volatile unsigned int *)((0x0076  << 2) + 0xff620000)
+#define   VDEC_ASSIST_MBOX1_FIQ_SEL                (0x0077)
+#define P_VDEC_ASSIST_MBOX1_FIQ_SEL                (volatile unsigned int *)((0x0077  << 2) + 0xff620000)
+#define   VDEC_ASSIST_MBOX2_IRQ_REG                (0x0078)
+#define P_VDEC_ASSIST_MBOX2_IRQ_REG                (volatile unsigned int *)((0x0078  << 2) + 0xff620000)
+#define   VDEC_ASSIST_MBOX2_CLR_REG                (0x0079)
+#define P_VDEC_ASSIST_MBOX2_CLR_REG                (volatile unsigned int *)((0x0079  << 2) + 0xff620000)
+#define   VDEC_ASSIST_MBOX2_MASK                   (0x007a)
+#define P_VDEC_ASSIST_MBOX2_MASK                   (volatile unsigned int *)((0x007a  << 2) + 0xff620000)
+#define   VDEC_ASSIST_MBOX2_FIQ_SEL                (0x007b)
+#define P_VDEC_ASSIST_MBOX2_FIQ_SEL                (volatile unsigned int *)((0x007b  << 2) + 0xff620000)
+//------------------------------------------------------------------------------
+// VDEC2_ASSIST module level register offset
+//------------------------------------------------------------------------------
+// -----------------------------------------------
+// CBUS_BASE:  DOS_VDEC2_ASSIST_CBUS_BASE = 0x00
+// -----------------------------------------------
+#define   VDEC2_ASSIST_MMC_CTRL0                   (0x2001)
+#define P_VDEC2_ASSIST_MMC_CTRL0                   (volatile unsigned int *)((0x2001  << 2) + 0xff620000)
+#define   VDEC2_ASSIST_MMC_CTRL1                   (0x2002)
+#define P_VDEC2_ASSIST_MMC_CTRL1                   (volatile unsigned int *)((0x2002  << 2) + 0xff620000)
+#define   VDEC2_ASSIST_AMR1_INT0                   (0x2025)
+#define P_VDEC2_ASSIST_AMR1_INT0                   (volatile unsigned int *)((0x2025  << 2) + 0xff620000)
+#define   VDEC2_ASSIST_AMR1_INT1                   (0x2026)
+#define P_VDEC2_ASSIST_AMR1_INT1                   (volatile unsigned int *)((0x2026  << 2) + 0xff620000)
+#define   VDEC2_ASSIST_AMR1_INT2                   (0x2027)
+#define P_VDEC2_ASSIST_AMR1_INT2                   (volatile unsigned int *)((0x2027  << 2) + 0xff620000)
+#define   VDEC2_ASSIST_AMR1_INT3                   (0x2028)
+#define P_VDEC2_ASSIST_AMR1_INT3                   (volatile unsigned int *)((0x2028  << 2) + 0xff620000)
+#define   VDEC2_ASSIST_AMR1_INT4                   (0x2029)
+#define P_VDEC2_ASSIST_AMR1_INT4                   (volatile unsigned int *)((0x2029  << 2) + 0xff620000)
+#define   VDEC2_ASSIST_AMR1_INT5                   (0x202a)
+#define P_VDEC2_ASSIST_AMR1_INT5                   (volatile unsigned int *)((0x202a  << 2) + 0xff620000)
+#define   VDEC2_ASSIST_AMR1_INT6                   (0x202b)
+#define P_VDEC2_ASSIST_AMR1_INT6                   (volatile unsigned int *)((0x202b  << 2) + 0xff620000)
+#define   VDEC2_ASSIST_AMR1_INT7                   (0x202c)
+#define P_VDEC2_ASSIST_AMR1_INT7                   (volatile unsigned int *)((0x202c  << 2) + 0xff620000)
+#define   VDEC2_ASSIST_AMR1_INT8                   (0x202d)
+#define P_VDEC2_ASSIST_AMR1_INT8                   (volatile unsigned int *)((0x202d  << 2) + 0xff620000)
+#define   VDEC2_ASSIST_AMR1_INT9                   (0x202e)
+#define P_VDEC2_ASSIST_AMR1_INT9                   (volatile unsigned int *)((0x202e  << 2) + 0xff620000)
+#define   VDEC2_ASSIST_AMR1_INTA                   (0x202f)
+#define P_VDEC2_ASSIST_AMR1_INTA                   (volatile unsigned int *)((0x202f  << 2) + 0xff620000)
+#define   VDEC2_ASSIST_AMR1_INTB                   (0x2030)
+#define P_VDEC2_ASSIST_AMR1_INTB                   (volatile unsigned int *)((0x2030  << 2) + 0xff620000)
+#define   VDEC2_ASSIST_AMR1_INTC                   (0x2031)
+#define P_VDEC2_ASSIST_AMR1_INTC                   (volatile unsigned int *)((0x2031  << 2) + 0xff620000)
+#define   VDEC2_ASSIST_AMR1_INTD                   (0x2032)
+#define P_VDEC2_ASSIST_AMR1_INTD                   (volatile unsigned int *)((0x2032  << 2) + 0xff620000)
+#define   VDEC2_ASSIST_AMR1_INTE                   (0x2033)
+#define P_VDEC2_ASSIST_AMR1_INTE                   (volatile unsigned int *)((0x2033  << 2) + 0xff620000)
+#define   VDEC2_ASSIST_AMR1_INTF                   (0x2034)
+#define P_VDEC2_ASSIST_AMR1_INTF                   (volatile unsigned int *)((0x2034  << 2) + 0xff620000)
+#define   VDEC2_ASSIST_AMR2_INT0                   (0x2035)
+#define P_VDEC2_ASSIST_AMR2_INT0                   (volatile unsigned int *)((0x2035  << 2) + 0xff620000)
+#define   VDEC2_ASSIST_AMR2_INT1                   (0x2036)
+#define P_VDEC2_ASSIST_AMR2_INT1                   (volatile unsigned int *)((0x2036  << 2) + 0xff620000)
+#define   VDEC2_ASSIST_AMR2_INT2                   (0x2037)
+#define P_VDEC2_ASSIST_AMR2_INT2                   (volatile unsigned int *)((0x2037  << 2) + 0xff620000)
+#define   VDEC2_ASSIST_AMR2_INT3                   (0x2038)
+#define P_VDEC2_ASSIST_AMR2_INT3                   (volatile unsigned int *)((0x2038  << 2) + 0xff620000)
+#define   VDEC2_ASSIST_AMR2_INT4                   (0x2039)
+#define P_VDEC2_ASSIST_AMR2_INT4                   (volatile unsigned int *)((0x2039  << 2) + 0xff620000)
+#define   VDEC2_ASSIST_AMR2_INT5                   (0x203a)
+#define P_VDEC2_ASSIST_AMR2_INT5                   (volatile unsigned int *)((0x203a  << 2) + 0xff620000)
+#define   VDEC2_ASSIST_AMR2_INT6                   (0x203b)
+#define P_VDEC2_ASSIST_AMR2_INT6                   (volatile unsigned int *)((0x203b  << 2) + 0xff620000)
+#define   VDEC2_ASSIST_AMR2_INT7                   (0x203c)
+#define P_VDEC2_ASSIST_AMR2_INT7                   (volatile unsigned int *)((0x203c  << 2) + 0xff620000)
+#define   VDEC2_ASSIST_AMR2_INT8                   (0x203d)
+#define P_VDEC2_ASSIST_AMR2_INT8                   (volatile unsigned int *)((0x203d  << 2) + 0xff620000)
+#define   VDEC2_ASSIST_AMR2_INT9                   (0x203e)
+#define P_VDEC2_ASSIST_AMR2_INT9                   (volatile unsigned int *)((0x203e  << 2) + 0xff620000)
+#define   VDEC2_ASSIST_AMR2_INTA                   (0x203f)
+#define P_VDEC2_ASSIST_AMR2_INTA                   (volatile unsigned int *)((0x203f  << 2) + 0xff620000)
+#define   VDEC2_ASSIST_AMR2_INTB                   (0x2040)
+#define P_VDEC2_ASSIST_AMR2_INTB                   (volatile unsigned int *)((0x2040  << 2) + 0xff620000)
+#define   VDEC2_ASSIST_AMR2_INTC                   (0x2041)
+#define P_VDEC2_ASSIST_AMR2_INTC                   (volatile unsigned int *)((0x2041  << 2) + 0xff620000)
+#define   VDEC2_ASSIST_AMR2_INTD                   (0x2042)
+#define P_VDEC2_ASSIST_AMR2_INTD                   (volatile unsigned int *)((0x2042  << 2) + 0xff620000)
+#define   VDEC2_ASSIST_AMR2_INTE                   (0x2043)
+#define P_VDEC2_ASSIST_AMR2_INTE                   (volatile unsigned int *)((0x2043  << 2) + 0xff620000)
+#define   VDEC2_ASSIST_AMR2_INTF                   (0x2044)
+#define P_VDEC2_ASSIST_AMR2_INTF                   (volatile unsigned int *)((0x2044  << 2) + 0xff620000)
+#define   VDEC2_ASSIST_MBX_SSEL                    (0x2045)
+#define P_VDEC2_ASSIST_MBX_SSEL                    (volatile unsigned int *)((0x2045  << 2) + 0xff620000)
+#define   VDEC2_ASSIST_TIMER0_LO                   (0x2060)
+#define P_VDEC2_ASSIST_TIMER0_LO                   (volatile unsigned int *)((0x2060  << 2) + 0xff620000)
+#define   VDEC2_ASSIST_TIMER0_HI                   (0x2061)
+#define P_VDEC2_ASSIST_TIMER0_HI                   (volatile unsigned int *)((0x2061  << 2) + 0xff620000)
+#define   VDEC2_ASSIST_TIMER1_LO                   (0x2062)
+#define P_VDEC2_ASSIST_TIMER1_LO                   (volatile unsigned int *)((0x2062  << 2) + 0xff620000)
+#define   VDEC2_ASSIST_TIMER1_HI                   (0x2063)
+#define P_VDEC2_ASSIST_TIMER1_HI                   (volatile unsigned int *)((0x2063  << 2) + 0xff620000)
+#define   VDEC2_ASSIST_DMA_INT                     (0x2064)
+#define P_VDEC2_ASSIST_DMA_INT                     (volatile unsigned int *)((0x2064  << 2) + 0xff620000)
+#define   VDEC2_ASSIST_DMA_INT_MSK                 (0x2065)
+#define P_VDEC2_ASSIST_DMA_INT_MSK                 (volatile unsigned int *)((0x2065  << 2) + 0xff620000)
+#define   VDEC2_ASSIST_DMA_INT2                    (0x2066)
+#define P_VDEC2_ASSIST_DMA_INT2                    (volatile unsigned int *)((0x2066  << 2) + 0xff620000)
+#define   VDEC2_ASSIST_DMA_INT_MSK2                (0x2067)
+#define P_VDEC2_ASSIST_DMA_INT_MSK2                (volatile unsigned int *)((0x2067  << 2) + 0xff620000)
+#define   VDEC2_ASSIST_MBOX0_IRQ_REG               (0x2070)
+#define P_VDEC2_ASSIST_MBOX0_IRQ_REG               (volatile unsigned int *)((0x2070  << 2) + 0xff620000)
+#define   VDEC2_ASSIST_MBOX0_CLR_REG               (0x2071)
+#define P_VDEC2_ASSIST_MBOX0_CLR_REG               (volatile unsigned int *)((0x2071  << 2) + 0xff620000)
+#define   VDEC2_ASSIST_MBOX0_MASK                  (0x2072)
+#define P_VDEC2_ASSIST_MBOX0_MASK                  (volatile unsigned int *)((0x2072  << 2) + 0xff620000)
+#define   VDEC2_ASSIST_MBOX0_FIQ_SEL               (0x2073)
+#define P_VDEC2_ASSIST_MBOX0_FIQ_SEL               (volatile unsigned int *)((0x2073  << 2) + 0xff620000)
+#define   VDEC2_ASSIST_MBOX1_IRQ_REG               (0x2074)
+#define P_VDEC2_ASSIST_MBOX1_IRQ_REG               (volatile unsigned int *)((0x2074  << 2) + 0xff620000)
+#define   VDEC2_ASSIST_MBOX1_CLR_REG               (0x2075)
+#define P_VDEC2_ASSIST_MBOX1_CLR_REG               (volatile unsigned int *)((0x2075  << 2) + 0xff620000)
+#define   VDEC2_ASSIST_MBOX1_MASK                  (0x2076)
+#define P_VDEC2_ASSIST_MBOX1_MASK                  (volatile unsigned int *)((0x2076  << 2) + 0xff620000)
+#define   VDEC2_ASSIST_MBOX1_FIQ_SEL               (0x2077)
+#define P_VDEC2_ASSIST_MBOX1_FIQ_SEL               (volatile unsigned int *)((0x2077  << 2) + 0xff620000)
+#define   VDEC2_ASSIST_MBOX2_IRQ_REG               (0x2078)
+#define P_VDEC2_ASSIST_MBOX2_IRQ_REG               (volatile unsigned int *)((0x2078  << 2) + 0xff620000)
+#define   VDEC2_ASSIST_MBOX2_CLR_REG               (0x2079)
+#define P_VDEC2_ASSIST_MBOX2_CLR_REG               (volatile unsigned int *)((0x2079  << 2) + 0xff620000)
+#define   VDEC2_ASSIST_MBOX2_MASK                  (0x207a)
+#define P_VDEC2_ASSIST_MBOX2_MASK                  (volatile unsigned int *)((0x207a  << 2) + 0xff620000)
+#define   VDEC2_ASSIST_MBOX2_FIQ_SEL               (0x207b)
+#define P_VDEC2_ASSIST_MBOX2_FIQ_SEL               (volatile unsigned int *)((0x207b  << 2) + 0xff620000)
+//------------------------------------------------------------------------------
+// HCODEC_ASSIST module level register offset
+//------------------------------------------------------------------------------
+// -----------------------------------------------
+// CBUS_BASE:  DOS_HCODEC_ASSIST_CBUS_BASE = 0x00
+// -----------------------------------------------
+#define   HCODEC_ASSIST_MMC_CTRL0                  (0x1001)
+#define P_HCODEC_ASSIST_MMC_CTRL0                  (volatile unsigned int *)((0x1001  << 2) + 0xff620000)
+#define   HCODEC_ASSIST_MMC_CTRL1                  (0x1002)
+#define P_HCODEC_ASSIST_MMC_CTRL1                  (volatile unsigned int *)((0x1002  << 2) + 0xff620000)
+#define   HCODEC_ASSIST_MMC_CTRL2                  (0x1003)
+#define P_HCODEC_ASSIST_MMC_CTRL2                  (volatile unsigned int *)((0x1003  << 2) + 0xff620000)
+#define   HCODEC_ASSIST_MMC_CTRL3                  (0x1004)
+#define P_HCODEC_ASSIST_MMC_CTRL3                  (volatile unsigned int *)((0x1004  << 2) + 0xff620000)
+//cfg_soft_rst = mfdin_reg0_crst[0]; // Soft Reset
+//cfg_cg_cfe   = mfdin_reg0_crst[1]; // Clock Gating Forcing Enable
+//cfg_dbuf_rst = mfdin_reg0_crst[2]; // Reset DBUF information
+#define   HCODEC_MFDIN_REG0_CRST                   (0x1008)
+#define P_HCODEC_MFDIN_REG0_CRST                   (volatile unsigned int *)((0x1008  << 2) + 0xff620000)
+//cfg_iformat       = mfdin_reg1_ctrl[3:0]; // Data In Format: 0 :CANVAS 422 YCbCr<-one canvas,
+                                                     //        1 :CANVAS 444 YCbCr(or RGB)<-one canvas,
+                                                     //        2 :CANVAS 420 Y<-one CrCb<-one (NV21)
+                                                     //        3 :CANVAS 420 Y<-one CbCr<-one (NV12)
+                                                     //        4 :CANVAS 420 Y<-one Cb<-one Cr<-one
+                                                     //        5 :CANVAS 444 Y<-one Cb<-one Cr<-one
+                                                     //        6 : Reserved for other canvas mode
+                                                     //        7 : should combine with cfg_ifmt_extra, for 10-12bits
+                                                     //        8 :LINEAR RGB888 (24bit)
+                                                     //        9 :LINEAR RGB565 (16bit)
+                                                     //        10:LINEAR YUV422
+                                                     //        11:LINEAR YUV420 (Note:Legacy mode not supported)
+                                                     //        12~15: Reserved for other linear mode
+//cfg_oformat       = mfdin_reg1_ctrl[5:4];  // Data Out Format: 0:420 1:422 2:444 3:reserved
+//cfg_dsample_enable= mfdin_reg1_ctrl[6];    // Downsample Enable
+//cfg_dsample_trunc = mfdin_reg1_ctrl[7];    // Downsample Addition Option: 0:Round 1:Truncated
+//cfg_block_ysize   = mfdin_reg1_ctrl[8];    // 0:block-y-size=16, 1:block-y-size=8(for JPEG's efficiency)
+//cfg_interp_enable = mfdin_reg1_ctrl[9];    // Chroma Interpolation Enable
+//cfg_interp_mode   = mfdin_reg1_ctrl[11:10];// 0:average round 1:average truncated 2:repeat left 3:repeat right
+//cfg_r2y_enable    = mfdin_reg1_ctrl[12];   // RGb->YUV Enable
+//cfg_r2y_mode      = mfdin_reg1_ctrl[14:13];// RGb->YUV Mode
+//cfg_rgb565_mode   = mfdin_reg1_ctrl[15];   // RGB565 mode: 0:fill zero in tail 1:fill zero in head
+//cfg_ifmt_extra    = mfdin_reg1_ctrl[17:16];// when cfg_iformat==7,
+                                             //        0: CANVAS 12bit 422, YCbCr<-one canvas{...Y1[11:0],C1[11:0],Y0[11:0],C0[11:0]}
+                                             //        1: CANVAS 10bit 444, YCbCr<-one canvas{...2'b0,Y0[9:0],U0[9:0],V0[9:0]}
+                                             //        2: CANVAS 10bit 422, YCbCr<-one canvas{...Y1[9:0],C1[9:0],Y0[9:0],C0[9:0]}
+//cfg_reserved1     = mfdin_reg1_ctrl[18];   // Reserved
+//cfg_nr_enable     = mfdin_reg1_ctrl[19];   // Noise Reduction Enable
+//cfg_outofpic      = mfdin_reg1_ctrl[28:20];// Out Of Picture Control: [8]mode:0:extend 1:fixed, [7:0]fixed value
+//cfg_rd_blktype    = mfdin_reg1_ctrl[30:29];// Block Type: 0:H264_I_PIC_ALL_4x4, 1:H264_P_PIC_Y_16x16_C_8x8, 2:JPEG_ALL_8x8, 3:Reserved
+//cfg_rd_nonycintl  = mfdin_reg1_ctrl[31];   // 0:YC interleaved 1:YC non-interleaved(for JPEG)
+#define   HCODEC_MFDIN_REG1_CTRL                   (0x1009)
+#define P_HCODEC_MFDIN_REG1_CTRL                   (volatile unsigned int *)((0x1009  << 2) + 0xff620000)
+//mfdin_reg2: DEBUG Only Status
+#define   HCODEC_MFDIN_REG2_STAT                   (0x100a)
+#define P_HCODEC_MFDIN_REG2_STAT                   (volatile unsigned int *)((0x100a  << 2) + 0xff620000)
+//cfg_canvas_index0  = mfdin_reg3_canv[7:0];  //canvas index 0
+//cfg_canvas_index1  = mfdin_reg3_canv[15:8]; //canvas index 1
+//cfg_canvas_index2  = mfdin_reg3_canv[23:16];//canvas index 2
+//cfg_canv_idx0_bppx = mfdin_reg3_canv[25:24];//canvas bytes per pixel in x direction for index0, 0:half 1:1 2:2 3:3
+//cfg_canv_idx1_bppx = mfdin_reg3_canv[27:26];//canvas bytes per pixel in x direction for index1, 0:half 1:1 2:2 3:3
+//cfg_canv_idx0_bppy = mfdin_reg3_canv[29:28];//canvas bytes per pixel in y direction for index0, 0:half 1:1 2:2 3:3
+//cfg_canv_idx1_bppy = mfdin_reg3_canv[31:30];//canvas bytes per pixel in y direction for index1, 0:half 1:1 2:2 3:3
+#define   HCODEC_MFDIN_REG3_CANV                   (0x100b)
+#define P_HCODEC_MFDIN_REG3_CANV                   (volatile unsigned int *)((0x100b  << 2) + 0xff620000)
+//cfg_bytes_per_line  = mfdin_reg4_lnr0[15:0];  //linear Bytes per line
+//cfg_linear_bytes4p  = mfdin_reg4_lnr0[17:16]; //linear (Bytes per pixel) - 1
+//cfg_linear_dbl2line = mfdin_reg4_lnr0[18];    //linear double size for odd line
+#define   HCODEC_MFDIN_REG4_LNR0                   (0x100c)
+#define P_HCODEC_MFDIN_REG4_LNR0                   (volatile unsigned int *)((0x100c  << 2) + 0xff620000)
+//cfg_base_address    = mfdin_reg5_lnr1[31:0];  //linear base address
+#define   HCODEC_MFDIN_REG5_LNR1                   (0x100d)
+#define P_HCODEC_MFDIN_REG5_LNR1                   (volatile unsigned int *)((0x100d  << 2) + 0xff620000)
+//assign cfg_r2y_trunc     = mfdin_reg6_dcfg[9];   //RGb->YUV Addition Option: 0:Round 1:Truncated
+//assign cfg_dma_ugt       = mfdin_reg6_dcfg[8];   //DMA Urgent
+//assign cfg_dma_thread_id = mfdin_reg6_dcfg[7:6]; //DMA Thread ID
+//assign cfg_dma_burst_num = mfdin_reg6_dcfg[5:0]; //DMA Burst Number
+#define   HCODEC_MFDIN_REG6_DCFG                   (0x100e)
+#define P_HCODEC_MFDIN_REG6_DCFG                   (volatile unsigned int *)((0x100e  << 2) + 0xff620000)
+//cfg_soft_cmd = mfdin_reg7_scmd; // Soft Command [28]selfcleared start,[27:14]dmb_x,[13:0]dmb_y
+#define   HCODEC_MFDIN_REG7_SCMD                   (0x100f)
+#define P_HCODEC_MFDIN_REG7_SCMD                   (volatile unsigned int *)((0x100f  << 2) + 0xff620000)
+//cfg_pic_xsize = mfdin_reg8_dmbl[23:12]; //pixel (x,y) at the begining of last dmb in the picturem, picture x size
+//cfg_pic_ysize = mfdin_reg8_dmbl[11:0];  //picture y size
+#define   HCODEC_MFDIN_REG8_DMBL                   (0x1010)
+#define P_HCODEC_MFDIN_REG8_DMBL                   (volatile unsigned int *)((0x1010  << 2) + 0xff620000)
+//cfg_endian = mfdin_reg9_endn; //Endian Control
+#define   HCODEC_MFDIN_REG9_ENDN                   (0x1011)
+#define P_HCODEC_MFDIN_REG9_ENDN                   (volatile unsigned int *)((0x1011  << 2) + 0xff620000)
+//cfg_canv_biasx = mfdin_rega_cav1[23:12]; //canvas bias address x
+//cfg_canv_biasy = mfdin_rega_cav1[11:0];  //canvas bias address y
+#define   HCODEC_MFDIN_REGA_CAV1                   (0x1012)
+#define P_HCODEC_MFDIN_REGA_CAV1                   (volatile unsigned int *)((0x1012  << 2) + 0xff620000)
+//cfg_amp_en = mfdin_regb_ampc[24];      //Amplitude Enable
+//cfg_amp_cy = mfdin_regb_ampc[23:16];   //Amplitude Coeff Y
+//cfg_amp_cu = mfdin_regb_ampc[15:8];    //Amplitude Coeff U
+//cfg_amp_cv = mfdin_regb_ampc[7:0];     //Amplitude Coeff V
+#define   HCODEC_MFDIN_REGB_AMPC                   (0x1013)
+#define P_HCODEC_MFDIN_REGB_AMPC                   (volatile unsigned int *)((0x1013  << 2) + 0xff620000)
+//cfg_mb_end = mfdin_regc_mblp; // Soft Command [28]mb end enable,[27:14]dmb_x,[13:0]dmb_y
+#define   HCODEC_MFDIN_REGC_MBLP                   (0x1014)
+#define P_HCODEC_MFDIN_REGC_MBLP                   (volatile unsigned int *)((0x1014  << 2) + 0xff620000)
+//       cfg_y_snr_en               = mfdin_reg0d[0];
+//       cfg_y_snr_err_norm         = mfdin_reg0d[1];
+// [3:0] cfg_y_snr_gau_bld_core     = mfdin_reg0d[5:2];
+// [7:0] cfg_y_snr_gau_bld_ofst     = mfdin_reg0d[13:6];
+// [5:0] cfg_y_snr_gau_bld_rate     = mfdin_reg0d[19:14];
+// [5:0] cfg_y_snr_gau_alp0_min     = mfdin_reg0d[25:20];
+// [5:0] cfg_y_snr_gau_alp0_max     = mfdin_reg0d[31:26];
+#define   HCODEC_MFDIN_REG0D                       (0x1015)
+#define P_HCODEC_MFDIN_REG0D                       (volatile unsigned int *)((0x1015  << 2) + 0xff620000)
+//       cfg_y_tnr_en               = mfdin_reg0e[0];
+//       cfg_y_tnr_mc_en            = mfdin_reg0e[1];
+//       cfg_y_tnr_txt_mode         = mfdin_reg0e[2];
+// [3:0] cfg_y_tnr_mot_sad_margin   = mfdin_reg0e[6:3];
+// [5:0] cfg_y_tnr_alpha_min        = mfdin_reg0e[12:7];
+// [5:0] cfg_y_tnr_alpha_max        = mfdin_reg0e[18:13];
+// [5:0] cfg_y_tnr_deghost_os       = mfdin_reg0e[24:19];
+#define   HCODEC_MFDIN_REG0E                       (0x1016)
+#define P_HCODEC_MFDIN_REG0E                       (volatile unsigned int *)((0x1016  << 2) + 0xff620000)
+// [3:0] cfg_y_tnr_mot_cortxt_rate  = mfdin_reg0f[3:0];
+// [7:0] cfg_y_tnr_mot_distxt_ofst  = mfdin_reg0f[15:8];
+// [3:0] cfg_y_tnr_mot_distxt_rate  = mfdin_reg0f[7:4];
+// [7:0] cfg_y_tnr_mot_dismot_ofst  = mfdin_reg0f[23:16];
+// [7:0] cfg_y_tnr_mot_frcsad_lock  = mfdin_reg0f[31:24];
+#define   HCODEC_MFDIN_REG0F                       (0x1017)
+#define P_HCODEC_MFDIN_REG0F                       (volatile unsigned int *)((0x1017  << 2) + 0xff620000)
+// [7:0] cfg_y_tnr_mot2alp_frc_gain = mfdin_reg10[7:0];
+// [7:0] cfg_y_tnr_mot2alp_nrm_gain = mfdin_reg10[15:8];
+// [7:0] cfg_y_tnr_mot2alp_dis_gain = mfdin_reg10[23:16];
+// [5:0] cfg_y_tnr_mot2alp_dis_ofst = mfdin_reg10[29:24];
+#define   HCODEC_MFDIN_REG10                       (0x1018)
+#define P_HCODEC_MFDIN_REG10                       (volatile unsigned int *)((0x1018  << 2) + 0xff620000)
+// [7:0] cfg_y_bld_beta2alp_rate    = mfdin_reg11[7:0];
+// [5:0] cfg_y_bld_beta_min         = mfdin_reg11[13:8];
+// [5:0] cfg_y_bld_beta_max         = mfdin_reg11[19:14];
+#define   HCODEC_MFDIN_REG11                       (0x1019)
+#define P_HCODEC_MFDIN_REG11                       (volatile unsigned int *)((0x1019  << 2) + 0xff620000)
+// REG12~16 for Chroma, same as Luma
+#define   HCODEC_MFDIN_REG12                       (0x101a)
+#define P_HCODEC_MFDIN_REG12                       (volatile unsigned int *)((0x101a  << 2) + 0xff620000)
+#define   HCODEC_MFDIN_REG13                       (0x101b)
+#define P_HCODEC_MFDIN_REG13                       (volatile unsigned int *)((0x101b  << 2) + 0xff620000)
+#define   HCODEC_MFDIN_REG14                       (0x101c)
+#define P_HCODEC_MFDIN_REG14                       (volatile unsigned int *)((0x101c  << 2) + 0xff620000)
+#define   HCODEC_MFDIN_REG15                       (0x101d)
+#define P_HCODEC_MFDIN_REG15                       (volatile unsigned int *)((0x101d  << 2) + 0xff620000)
+#define   HCODEC_MFDIN_REG16                       (0x101e)
+#define P_HCODEC_MFDIN_REG16                       (volatile unsigned int *)((0x101e  << 2) + 0xff620000)
+#define   HCODEC_ASSIST_AMR1_INT0                  (0x1025)
+#define P_HCODEC_ASSIST_AMR1_INT0                  (volatile unsigned int *)((0x1025  << 2) + 0xff620000)
+#define   HCODEC_ASSIST_AMR1_INT1                  (0x1026)
+#define P_HCODEC_ASSIST_AMR1_INT1                  (volatile unsigned int *)((0x1026  << 2) + 0xff620000)
+#define   HCODEC_ASSIST_AMR1_INT2                  (0x1027)
+#define P_HCODEC_ASSIST_AMR1_INT2                  (volatile unsigned int *)((0x1027  << 2) + 0xff620000)
+#define   HCODEC_ASSIST_AMR1_INT3                  (0x1028)
+#define P_HCODEC_ASSIST_AMR1_INT3                  (volatile unsigned int *)((0x1028  << 2) + 0xff620000)
+#define   HCODEC_ASSIST_AMR1_INT4                  (0x1029)
+#define P_HCODEC_ASSIST_AMR1_INT4                  (volatile unsigned int *)((0x1029  << 2) + 0xff620000)
+#define   HCODEC_ASSIST_AMR1_INT5                  (0x102a)
+#define P_HCODEC_ASSIST_AMR1_INT5                  (volatile unsigned int *)((0x102a  << 2) + 0xff620000)
+#define   HCODEC_ASSIST_AMR1_INT6                  (0x102b)
+#define P_HCODEC_ASSIST_AMR1_INT6                  (volatile unsigned int *)((0x102b  << 2) + 0xff620000)
+#define   HCODEC_ASSIST_AMR1_INT7                  (0x102c)
+#define P_HCODEC_ASSIST_AMR1_INT7                  (volatile unsigned int *)((0x102c  << 2) + 0xff620000)
+#define   HCODEC_ASSIST_AMR1_INT8                  (0x102d)
+#define P_HCODEC_ASSIST_AMR1_INT8                  (volatile unsigned int *)((0x102d  << 2) + 0xff620000)
+#define   HCODEC_ASSIST_AMR1_INT9                  (0x102e)
+#define P_HCODEC_ASSIST_AMR1_INT9                  (volatile unsigned int *)((0x102e  << 2) + 0xff620000)
+#define   HCODEC_ASSIST_AMR1_INTA                  (0x102f)
+#define P_HCODEC_ASSIST_AMR1_INTA                  (volatile unsigned int *)((0x102f  << 2) + 0xff620000)
+#define   HCODEC_ASSIST_AMR1_INTB                  (0x1030)
+#define P_HCODEC_ASSIST_AMR1_INTB                  (volatile unsigned int *)((0x1030  << 2) + 0xff620000)
+#define   HCODEC_ASSIST_AMR1_INTC                  (0x1031)
+#define P_HCODEC_ASSIST_AMR1_INTC                  (volatile unsigned int *)((0x1031  << 2) + 0xff620000)
+#define   HCODEC_ASSIST_AMR1_INTD                  (0x1032)
+#define P_HCODEC_ASSIST_AMR1_INTD                  (volatile unsigned int *)((0x1032  << 2) + 0xff620000)
+#define   HCODEC_ASSIST_AMR1_INTE                  (0x1033)
+#define P_HCODEC_ASSIST_AMR1_INTE                  (volatile unsigned int *)((0x1033  << 2) + 0xff620000)
+#define   HCODEC_ASSIST_AMR1_INTF                  (0x1034)
+#define P_HCODEC_ASSIST_AMR1_INTF                  (volatile unsigned int *)((0x1034  << 2) + 0xff620000)
+#define   HCODEC_ASSIST_AMR2_INT0                  (0x1035)
+#define P_HCODEC_ASSIST_AMR2_INT0                  (volatile unsigned int *)((0x1035  << 2) + 0xff620000)
+#define   HCODEC_ASSIST_AMR2_INT1                  (0x1036)
+#define P_HCODEC_ASSIST_AMR2_INT1                  (volatile unsigned int *)((0x1036  << 2) + 0xff620000)
+#define   HCODEC_ASSIST_AMR2_INT2                  (0x1037)
+#define P_HCODEC_ASSIST_AMR2_INT2                  (volatile unsigned int *)((0x1037  << 2) + 0xff620000)
+#define   HCODEC_ASSIST_AMR2_INT3                  (0x1038)
+#define P_HCODEC_ASSIST_AMR2_INT3                  (volatile unsigned int *)((0x1038  << 2) + 0xff620000)
+#define   HCODEC_ASSIST_AMR2_INT4                  (0x1039)
+#define P_HCODEC_ASSIST_AMR2_INT4                  (volatile unsigned int *)((0x1039  << 2) + 0xff620000)
+#define   HCODEC_ASSIST_AMR2_INT5                  (0x103a)
+#define P_HCODEC_ASSIST_AMR2_INT5                  (volatile unsigned int *)((0x103a  << 2) + 0xff620000)
+#define   HCODEC_ASSIST_AMR2_INT6                  (0x103b)
+#define P_HCODEC_ASSIST_AMR2_INT6                  (volatile unsigned int *)((0x103b  << 2) + 0xff620000)
+#define   HCODEC_ASSIST_AMR2_INT7                  (0x103c)
+#define P_HCODEC_ASSIST_AMR2_INT7                  (volatile unsigned int *)((0x103c  << 2) + 0xff620000)
+#define   HCODEC_ASSIST_AMR2_INT8                  (0x103d)
+#define P_HCODEC_ASSIST_AMR2_INT8                  (volatile unsigned int *)((0x103d  << 2) + 0xff620000)
+#define   HCODEC_ASSIST_AMR2_INT9                  (0x103e)
+#define P_HCODEC_ASSIST_AMR2_INT9                  (volatile unsigned int *)((0x103e  << 2) + 0xff620000)
+#define   HCODEC_ASSIST_AMR2_INTA                  (0x103f)
+#define P_HCODEC_ASSIST_AMR2_INTA                  (volatile unsigned int *)((0x103f  << 2) + 0xff620000)
+#define   HCODEC_ASSIST_AMR2_INTB                  (0x1040)
+#define P_HCODEC_ASSIST_AMR2_INTB                  (volatile unsigned int *)((0x1040  << 2) + 0xff620000)
+#define   HCODEC_ASSIST_AMR2_INTC                  (0x1041)
+#define P_HCODEC_ASSIST_AMR2_INTC                  (volatile unsigned int *)((0x1041  << 2) + 0xff620000)
+#define   HCODEC_ASSIST_AMR2_INTD                  (0x1042)
+#define P_HCODEC_ASSIST_AMR2_INTD                  (volatile unsigned int *)((0x1042  << 2) + 0xff620000)
+#define   HCODEC_ASSIST_AMR2_INTE                  (0x1043)
+#define P_HCODEC_ASSIST_AMR2_INTE                  (volatile unsigned int *)((0x1043  << 2) + 0xff620000)
+#define   HCODEC_ASSIST_AMR2_INTF                  (0x1044)
+#define P_HCODEC_ASSIST_AMR2_INTF                  (volatile unsigned int *)((0x1044  << 2) + 0xff620000)
+#define   HCODEC_ASSIST_MBX_SSEL                   (0x1045)
+#define P_HCODEC_ASSIST_MBX_SSEL                   (volatile unsigned int *)((0x1045  << 2) + 0xff620000)
+#define   HCODEC_ASSIST_TIMER0_LO                  (0x1060)
+#define P_HCODEC_ASSIST_TIMER0_LO                  (volatile unsigned int *)((0x1060  << 2) + 0xff620000)
+#define   HCODEC_ASSIST_TIMER0_HI                  (0x1061)
+#define P_HCODEC_ASSIST_TIMER0_HI                  (volatile unsigned int *)((0x1061  << 2) + 0xff620000)
+#define   HCODEC_ASSIST_TIMER1_LO                  (0x1062)
+#define P_HCODEC_ASSIST_TIMER1_LO                  (volatile unsigned int *)((0x1062  << 2) + 0xff620000)
+#define   HCODEC_ASSIST_TIMER1_HI                  (0x1063)
+#define P_HCODEC_ASSIST_TIMER1_HI                  (volatile unsigned int *)((0x1063  << 2) + 0xff620000)
+#define   HCODEC_ASSIST_DMA_INT                    (0x1064)
+#define P_HCODEC_ASSIST_DMA_INT                    (volatile unsigned int *)((0x1064  << 2) + 0xff620000)
+#define   HCODEC_ASSIST_DMA_INT_MSK                (0x1065)
+#define P_HCODEC_ASSIST_DMA_INT_MSK                (volatile unsigned int *)((0x1065  << 2) + 0xff620000)
+#define   HCODEC_ASSIST_DMA_INT2                   (0x1066)
+#define P_HCODEC_ASSIST_DMA_INT2                   (volatile unsigned int *)((0x1066  << 2) + 0xff620000)
+#define   HCODEC_ASSIST_DMA_INT_MSK2               (0x1067)
+#define P_HCODEC_ASSIST_DMA_INT_MSK2               (volatile unsigned int *)((0x1067  << 2) + 0xff620000)
+#define   HCODEC_ASSIST_MBOX0_IRQ_REG              (0x1070)
+#define P_HCODEC_ASSIST_MBOX0_IRQ_REG              (volatile unsigned int *)((0x1070  << 2) + 0xff620000)
+#define   HCODEC_ASSIST_MBOX0_CLR_REG              (0x1071)
+#define P_HCODEC_ASSIST_MBOX0_CLR_REG              (volatile unsigned int *)((0x1071  << 2) + 0xff620000)
+#define   HCODEC_ASSIST_MBOX0_MASK                 (0x1072)
+#define P_HCODEC_ASSIST_MBOX0_MASK                 (volatile unsigned int *)((0x1072  << 2) + 0xff620000)
+#define   HCODEC_ASSIST_MBOX0_FIQ_SEL              (0x1073)
+#define P_HCODEC_ASSIST_MBOX0_FIQ_SEL              (volatile unsigned int *)((0x1073  << 2) + 0xff620000)
+#define   HCODEC_ASSIST_MBOX1_IRQ_REG              (0x1074)
+#define P_HCODEC_ASSIST_MBOX1_IRQ_REG              (volatile unsigned int *)((0x1074  << 2) + 0xff620000)
+#define   HCODEC_ASSIST_MBOX1_CLR_REG              (0x1075)
+#define P_HCODEC_ASSIST_MBOX1_CLR_REG              (volatile unsigned int *)((0x1075  << 2) + 0xff620000)
+#define   HCODEC_ASSIST_MBOX1_MASK                 (0x1076)
+#define P_HCODEC_ASSIST_MBOX1_MASK                 (volatile unsigned int *)((0x1076  << 2) + 0xff620000)
+#define   HCODEC_ASSIST_MBOX1_FIQ_SEL              (0x1077)
+#define P_HCODEC_ASSIST_MBOX1_FIQ_SEL              (volatile unsigned int *)((0x1077  << 2) + 0xff620000)
+#define   HCODEC_ASSIST_MBOX2_IRQ_REG              (0x1078)
+#define P_HCODEC_ASSIST_MBOX2_IRQ_REG              (volatile unsigned int *)((0x1078  << 2) + 0xff620000)
+#define   HCODEC_ASSIST_MBOX2_CLR_REG              (0x1079)
+#define P_HCODEC_ASSIST_MBOX2_CLR_REG              (volatile unsigned int *)((0x1079  << 2) + 0xff620000)
+#define   HCODEC_ASSIST_MBOX2_MASK                 (0x107a)
+#define P_HCODEC_ASSIST_MBOX2_MASK                 (volatile unsigned int *)((0x107a  << 2) + 0xff620000)
+#define   HCODEC_ASSIST_MBOX2_FIQ_SEL              (0x107b)
+#define P_HCODEC_ASSIST_MBOX2_FIQ_SEL              (volatile unsigned int *)((0x107b  << 2) + 0xff620000)
+//------------------------------------------------------------------------------
+// MDEC module level register offset
+//------------------------------------------------------------------------------
+//
+// Reading file:  mdec_regs.h
+//
+//========================================================================
+//  MDEC module level register offset
+//========================================================================
+// -----------------------------------------------
+// CBUS_BASE:  DOS_VDEC_MDEC_CBUS_BASE = 0x09
+// -----------------------------------------------
+#define   MC_CTRL_REG                              (0x0900)
+#define P_MC_CTRL_REG                              (volatile unsigned int *)((0x0900  << 2) + 0xff620000)
+#define   MC_MB_INFO                               (0x0901)
+#define P_MC_MB_INFO                               (volatile unsigned int *)((0x0901  << 2) + 0xff620000)
+#define   MC_PIC_INFO                              (0x0902)
+#define P_MC_PIC_INFO                              (volatile unsigned int *)((0x0902  << 2) + 0xff620000)
+#define   MC_HALF_PEL_ONE                          (0x0903)
+#define P_MC_HALF_PEL_ONE                          (volatile unsigned int *)((0x0903  << 2) + 0xff620000)
+#define   MC_HALF_PEL_TWO                          (0x0904)
+#define P_MC_HALF_PEL_TWO                          (volatile unsigned int *)((0x0904  << 2) + 0xff620000)
+#define   POWER_CTL_MC                             (0x0905)
+#define P_POWER_CTL_MC                             (volatile unsigned int *)((0x0905  << 2) + 0xff620000)
+#define   MC_CMD                                   (0x0906)
+#define P_MC_CMD                                   (volatile unsigned int *)((0x0906  << 2) + 0xff620000)
+#define   MC_CTRL0                                 (0x0907)
+#define P_MC_CTRL0                                 (volatile unsigned int *)((0x0907  << 2) + 0xff620000)
+#define   MC_PIC_W_H                               (0x0908)
+#define P_MC_PIC_W_H                               (volatile unsigned int *)((0x0908  << 2) + 0xff620000)
+#define   MC_STATUS0                               (0x0909)
+#define P_MC_STATUS0                               (volatile unsigned int *)((0x0909  << 2) + 0xff620000)
+#define   MC_STATUS1                               (0x090a)
+#define P_MC_STATUS1                               (volatile unsigned int *)((0x090a  << 2) + 0xff620000)
+#define   MC_CTRL1                                 (0x090b)
+#define P_MC_CTRL1                                 (volatile unsigned int *)((0x090b  << 2) + 0xff620000)
+#define   MC_MIX_RATIO0                            (0x090c)
+#define P_MC_MIX_RATIO0                            (volatile unsigned int *)((0x090c  << 2) + 0xff620000)
+#define   MC_MIX_RATIO1                            (0x090d)
+#define P_MC_MIX_RATIO1                            (volatile unsigned int *)((0x090d  << 2) + 0xff620000)
+#define   MC_DP_MB_XY                              (0x090e)
+#define P_MC_DP_MB_XY                              (volatile unsigned int *)((0x090e  << 2) + 0xff620000)
+#define   MC_OM_MB_XY                              (0x090f)
+#define P_MC_OM_MB_XY                              (volatile unsigned int *)((0x090f  << 2) + 0xff620000)
+#define   PSCALE_RST                               (0x0910)
+#define P_PSCALE_RST                               (volatile unsigned int *)((0x0910  << 2) + 0xff620000)
+#define   PSCALE_CTRL                              (0x0911)
+#define P_PSCALE_CTRL                              (volatile unsigned int *)((0x0911  << 2) + 0xff620000)
+#define   PSCALE_PICI_W                            (0x0912)
+#define P_PSCALE_PICI_W                            (volatile unsigned int *)((0x0912  << 2) + 0xff620000)
+#define   PSCALE_PICI_H                            (0x0913)
+#define P_PSCALE_PICI_H                            (volatile unsigned int *)((0x0913  << 2) + 0xff620000)
+#define   PSCALE_PICO_W                            (0x0914)
+#define P_PSCALE_PICO_W                            (volatile unsigned int *)((0x0914  << 2) + 0xff620000)
+#define   PSCALE_PICO_H                            (0x0915)
+#define P_PSCALE_PICO_H                            (volatile unsigned int *)((0x0915  << 2) + 0xff620000)
+#define   PSCALE_PICO_START_X                      (0x0916)
+#define P_PSCALE_PICO_START_X                      (volatile unsigned int *)((0x0916  << 2) + 0xff620000)
+#define   PSCALE_PICO_START_Y                      (0x0917)
+#define P_PSCALE_PICO_START_Y                      (volatile unsigned int *)((0x0917  << 2) + 0xff620000)
+#define   PSCALE_DUMMY                             (0x0918)
+#define P_PSCALE_DUMMY                             (volatile unsigned int *)((0x0918  << 2) + 0xff620000)
+#define   PSCALE_FILT0_COEF0                       (0x0919)
+#define P_PSCALE_FILT0_COEF0                       (volatile unsigned int *)((0x0919  << 2) + 0xff620000)
+#define   PSCALE_FILT0_COEF1                       (0x091a)
+#define P_PSCALE_FILT0_COEF1                       (volatile unsigned int *)((0x091a  << 2) + 0xff620000)
+#define   PSCALE_CMD_CTRL                          (0x091b)
+#define P_PSCALE_CMD_CTRL                          (volatile unsigned int *)((0x091b  << 2) + 0xff620000)
+#define   PSCALE_CMD_BLK_X                         (0x091c)
+#define P_PSCALE_CMD_BLK_X                         (volatile unsigned int *)((0x091c  << 2) + 0xff620000)
+#define   PSCALE_CMD_BLK_Y                         (0x091d)
+#define P_PSCALE_CMD_BLK_Y                         (volatile unsigned int *)((0x091d  << 2) + 0xff620000)
+#define   PSCALE_STATUS                            (0x091e)
+#define P_PSCALE_STATUS                            (volatile unsigned int *)((0x091e  << 2) + 0xff620000)
+#define   PSCALE_BMEM_ADDR                         (0x091f)
+#define P_PSCALE_BMEM_ADDR                         (volatile unsigned int *)((0x091f  << 2) + 0xff620000)
+#define   PSCALE_BMEM_DAT                          (0x0920)
+#define P_PSCALE_BMEM_DAT                          (volatile unsigned int *)((0x0920  << 2) + 0xff620000)
+#define   PSCALE_DRAM_BUF_CTRL                     (0x0921)
+#define P_PSCALE_DRAM_BUF_CTRL                     (volatile unsigned int *)((0x0921  << 2) + 0xff620000)
+#define   PSCALE_MCMD_CTRL                         (0x0922)
+#define P_PSCALE_MCMD_CTRL                         (volatile unsigned int *)((0x0922  << 2) + 0xff620000)
+#define   PSCALE_MCMD_XSIZE                        (0x0923)
+#define P_PSCALE_MCMD_XSIZE                        (volatile unsigned int *)((0x0923  << 2) + 0xff620000)
+#define   PSCALE_MCMD_YSIZE                        (0x0924)
+#define P_PSCALE_MCMD_YSIZE                        (volatile unsigned int *)((0x0924  << 2) + 0xff620000)
+#define   PSCALE_RBUF_START_BLKX                   (0x0925)
+#define P_PSCALE_RBUF_START_BLKX                   (volatile unsigned int *)((0x0925  << 2) + 0xff620000)
+#define   PSCALE_RBUF_START_BLKY                   (0x0926)
+#define P_PSCALE_RBUF_START_BLKY                   (volatile unsigned int *)((0x0926  << 2) + 0xff620000)
+//`define PSCALE_RBUF_MB_WIDTH   8'h27
+#define   PSCALE_PICO_SHIFT_XY                     (0x0928)
+#define P_PSCALE_PICO_SHIFT_XY                     (volatile unsigned int *)((0x0928  << 2) + 0xff620000)
+#define   PSCALE_CTRL1                             (0x0929)
+#define P_PSCALE_CTRL1                             (volatile unsigned int *)((0x0929  << 2) + 0xff620000)
+//Bit 15, wmask enable
+//Bit 14:13, filt0 srckey_less,
+//Bit 12:11, filt1 srckey_less, in the case of the interpolated data is equal distance to
+//key data and normal data, 00: select normal data, 01: select right data, 10: select key data
+//Bit 10:9, srckey mode, 00: equal, 01: less than or equal, 10: great than or equal
+//Bit 8, src key enable
+//Bit 7:0, y src key
+#define   PSCALE_SRCKEY_CTRL0                      (0x092a)
+#define P_PSCALE_SRCKEY_CTRL0                      (volatile unsigned int *)((0x092a  << 2) + 0xff620000)
+//Bit 15:8, cb src key
+//Bit 7:0, cr src key
+#define   PSCALE_SRCKEY_CTRL1                      (0x092b)
+#define P_PSCALE_SRCKEY_CTRL1                      (volatile unsigned int *)((0x092b  << 2) + 0xff620000)
+//Bit 22:16 canvas_rd_addr2
+//Bit 14:8 canvas_rd_addr1
+//Bit 6:0 canvas_rd_addr1
+#define   PSCALE_CANVAS_RD_ADDR                    (0x092c)
+#define P_PSCALE_CANVAS_RD_ADDR                    (volatile unsigned int *)((0x092c  << 2) + 0xff620000)
+//Bit 22:16 canvas_wr_addr2
+//Bit 14:8 canvas_wr_addr1
+//Bit 6:0 canvas_wr_addr1
+#define   PSCALE_CANVAS_WR_ADDR                    (0x092d)
+#define P_PSCALE_CANVAS_WR_ADDR                    (volatile unsigned int *)((0x092d  << 2) + 0xff620000)
+//bit 13:8 pscale thread ID and token
+//bit 7 disable write response count adding to busy bit
+//bit 5:0  pscale prearbitor burst num
+#define   PSCALE_CTRL2                             (0x092e)
+#define P_PSCALE_CTRL2                             (volatile unsigned int *)((0x092e  << 2) + 0xff620000)
+//   31 - use_omem_mb_xy_auto
+//23:16 - omem_max_mb_x
+//15:8  - omem_mb_y_auto
+// 7:0  - omem_mb_x_auto
+#define   HDEC_MC_OMEM_AUTO                        (0x0930)
+#define P_HDEC_MC_OMEM_AUTO                        (volatile unsigned int *)((0x0930  << 2) + 0xff620000)
+#define   HDEC_MC_MBRIGHT_IDX                      (0x0931)
+#define P_HDEC_MC_MBRIGHT_IDX                      (volatile unsigned int *)((0x0931  << 2) + 0xff620000)
+#define   HDEC_MC_MBRIGHT_RD                       (0x0932)
+#define P_HDEC_MC_MBRIGHT_RD                       (volatile unsigned int *)((0x0932  << 2) + 0xff620000)
+#define   MC_MPORT_CTRL                            (0x0940)
+#define P_MC_MPORT_CTRL                            (volatile unsigned int *)((0x0940  << 2) + 0xff620000)
+#define   MC_MPORT_DAT                             (0x0941)
+#define P_MC_MPORT_DAT                             (volatile unsigned int *)((0x0941  << 2) + 0xff620000)
+#define   MC_WT_PRED_CTRL                          (0x0942)
+#define P_MC_WT_PRED_CTRL                          (volatile unsigned int *)((0x0942  << 2) + 0xff620000)
+#define   MC_MBBOT_ST_EVEN_ADDR                    (0x0944)
+#define P_MC_MBBOT_ST_EVEN_ADDR                    (volatile unsigned int *)((0x0944  << 2) + 0xff620000)
+#define   MC_MBBOT_ST_ODD_ADDR                     (0x0945)
+#define P_MC_MBBOT_ST_ODD_ADDR                     (volatile unsigned int *)((0x0945  << 2) + 0xff620000)
+#define   MC_DPDN_MB_XY                            (0x0946)
+#define P_MC_DPDN_MB_XY                            (volatile unsigned int *)((0x0946  << 2) + 0xff620000)
+#define   MC_OMDN_MB_XY                            (0x0947)
+#define P_MC_OMDN_MB_XY                            (volatile unsigned int *)((0x0947  << 2) + 0xff620000)
+#define   MC_HCMDBUF_H                             (0x0948)
+#define P_MC_HCMDBUF_H                             (volatile unsigned int *)((0x0948  << 2) + 0xff620000)
+#define   MC_HCMDBUF_L                             (0x0949)
+#define P_MC_HCMDBUF_L                             (volatile unsigned int *)((0x0949  << 2) + 0xff620000)
+#define   MC_HCMD_H                                (0x094a)
+#define P_MC_HCMD_H                                (volatile unsigned int *)((0x094a  << 2) + 0xff620000)
+#define   MC_HCMD_L                                (0x094b)
+#define P_MC_HCMD_L                                (volatile unsigned int *)((0x094b  << 2) + 0xff620000)
+#define   MC_IDCT_DAT                              (0x094c)
+#define P_MC_IDCT_DAT                              (volatile unsigned int *)((0x094c  << 2) + 0xff620000)
+#define   MC_CTRL_GCLK_CTRL                        (0x094d)
+#define P_MC_CTRL_GCLK_CTRL                        (volatile unsigned int *)((0x094d  << 2) + 0xff620000)
+#define   MC_OTHER_GCLK_CTRL                       (0x094e)
+#define P_MC_OTHER_GCLK_CTRL                       (volatile unsigned int *)((0x094e  << 2) + 0xff620000)
+//Bit 29:24, mbbot thread ID and token
+//Bit 21:16, mc read/write thread ID and token
+//Bit 13:8,  mbbot pre-arbitor burst number
+//Bit 5:0,   mc pre-arbitor burst number
+#define   MC_CTRL2                                 (0x094f)
+#define P_MC_CTRL2                                 (volatile unsigned int *)((0x094f  << 2) + 0xff620000)
+// `define DBLK_QUANT            8'h76 // ONLY for $ucode/real/amrisc/rv.s, reg value from apollo
+//`define ANC1_CANVAS_ADDR      8'h80
+//`define ANC2_CANVAS_ADDR      8'h81
+//`define REC_CANVAS_ADDR       8'h89
+//`define MDEC_PIC_W          8'h8c
+//`define MDEC_PIC_H          8'h8d
+// mdec_pic_dc_mux_ctrl[31]  -- mcr_hevc_mode
+#define   MDEC_PIC_DC_MUX_CTRL                     (0x098d)
+#define P_MDEC_PIC_DC_MUX_CTRL                     (volatile unsigned int *)((0x098d  << 2) + 0xff620000)
+#define   MDEC_PIC_DC_CTRL                         (0x098e)
+#define P_MDEC_PIC_DC_CTRL                         (volatile unsigned int *)((0x098e  << 2) + 0xff620000)
+#define   MDEC_PIC_DC_STATUS                       (0x098f)
+#define P_MDEC_PIC_DC_STATUS                       (volatile unsigned int *)((0x098f  << 2) + 0xff620000)
+#define   ANC0_CANVAS_ADDR                         (0x0990)
+#define P_ANC0_CANVAS_ADDR                         (volatile unsigned int *)((0x0990  << 2) + 0xff620000)
+#define   ANC1_CANVAS_ADDR                         (0x0991)
+#define P_ANC1_CANVAS_ADDR                         (volatile unsigned int *)((0x0991  << 2) + 0xff620000)
+#define   ANC2_CANVAS_ADDR                         (0x0992)
+#define P_ANC2_CANVAS_ADDR                         (volatile unsigned int *)((0x0992  << 2) + 0xff620000)
+#define   ANC3_CANVAS_ADDR                         (0x0993)
+#define P_ANC3_CANVAS_ADDR                         (volatile unsigned int *)((0x0993  << 2) + 0xff620000)
+#define   ANC4_CANVAS_ADDR                         (0x0994)
+#define P_ANC4_CANVAS_ADDR                         (volatile unsigned int *)((0x0994  << 2) + 0xff620000)
+#define   ANC5_CANVAS_ADDR                         (0x0995)
+#define P_ANC5_CANVAS_ADDR                         (volatile unsigned int *)((0x0995  << 2) + 0xff620000)
+#define   ANC6_CANVAS_ADDR                         (0x0996)
+#define P_ANC6_CANVAS_ADDR                         (volatile unsigned int *)((0x0996  << 2) + 0xff620000)
+#define   ANC7_CANVAS_ADDR                         (0x0997)
+#define P_ANC7_CANVAS_ADDR                         (volatile unsigned int *)((0x0997  << 2) + 0xff620000)
+#define   ANC8_CANVAS_ADDR                         (0x0998)
+#define P_ANC8_CANVAS_ADDR                         (volatile unsigned int *)((0x0998  << 2) + 0xff620000)
+#define   ANC9_CANVAS_ADDR                         (0x0999)
+#define P_ANC9_CANVAS_ADDR                         (volatile unsigned int *)((0x0999  << 2) + 0xff620000)
+#define   ANC10_CANVAS_ADDR                        (0x099a)
+#define P_ANC10_CANVAS_ADDR                        (volatile unsigned int *)((0x099a  << 2) + 0xff620000)
+#define   ANC11_CANVAS_ADDR                        (0x099b)
+#define P_ANC11_CANVAS_ADDR                        (volatile unsigned int *)((0x099b  << 2) + 0xff620000)
+#define   ANC12_CANVAS_ADDR                        (0x099c)
+#define P_ANC12_CANVAS_ADDR                        (volatile unsigned int *)((0x099c  << 2) + 0xff620000)
+#define   ANC13_CANVAS_ADDR                        (0x099d)
+#define P_ANC13_CANVAS_ADDR                        (volatile unsigned int *)((0x099d  << 2) + 0xff620000)
+#define   ANC14_CANVAS_ADDR                        (0x099e)
+#define P_ANC14_CANVAS_ADDR                        (volatile unsigned int *)((0x099e  << 2) + 0xff620000)
+#define   ANC15_CANVAS_ADDR                        (0x099f)
+#define P_ANC15_CANVAS_ADDR                        (volatile unsigned int *)((0x099f  << 2) + 0xff620000)
+#define   ANC16_CANVAS_ADDR                        (0x09a0)
+#define P_ANC16_CANVAS_ADDR                        (volatile unsigned int *)((0x09a0  << 2) + 0xff620000)
+#define   ANC17_CANVAS_ADDR                        (0x09a1)
+#define P_ANC17_CANVAS_ADDR                        (volatile unsigned int *)((0x09a1  << 2) + 0xff620000)
+#define   ANC18_CANVAS_ADDR                        (0x09a2)
+#define P_ANC18_CANVAS_ADDR                        (volatile unsigned int *)((0x09a2  << 2) + 0xff620000)
+#define   ANC19_CANVAS_ADDR                        (0x09a3)
+#define P_ANC19_CANVAS_ADDR                        (volatile unsigned int *)((0x09a3  << 2) + 0xff620000)
+#define   ANC20_CANVAS_ADDR                        (0x09a4)
+#define P_ANC20_CANVAS_ADDR                        (volatile unsigned int *)((0x09a4  << 2) + 0xff620000)
+#define   ANC21_CANVAS_ADDR                        (0x09a5)
+#define P_ANC21_CANVAS_ADDR                        (volatile unsigned int *)((0x09a5  << 2) + 0xff620000)
+#define   ANC22_CANVAS_ADDR                        (0x09a6)
+#define P_ANC22_CANVAS_ADDR                        (volatile unsigned int *)((0x09a6  << 2) + 0xff620000)
+#define   ANC23_CANVAS_ADDR                        (0x09a7)
+#define P_ANC23_CANVAS_ADDR                        (volatile unsigned int *)((0x09a7  << 2) + 0xff620000)
+#define   ANC24_CANVAS_ADDR                        (0x09a8)
+#define P_ANC24_CANVAS_ADDR                        (volatile unsigned int *)((0x09a8  << 2) + 0xff620000)
+#define   ANC25_CANVAS_ADDR                        (0x09a9)
+#define P_ANC25_CANVAS_ADDR                        (volatile unsigned int *)((0x09a9  << 2) + 0xff620000)
+#define   ANC26_CANVAS_ADDR                        (0x09aa)
+#define P_ANC26_CANVAS_ADDR                        (volatile unsigned int *)((0x09aa  << 2) + 0xff620000)
+#define   ANC27_CANVAS_ADDR                        (0x09ab)
+#define P_ANC27_CANVAS_ADDR                        (volatile unsigned int *)((0x09ab  << 2) + 0xff620000)
+#define   ANC28_CANVAS_ADDR                        (0x09ac)
+#define P_ANC28_CANVAS_ADDR                        (volatile unsigned int *)((0x09ac  << 2) + 0xff620000)
+#define   ANC29_CANVAS_ADDR                        (0x09ad)
+#define P_ANC29_CANVAS_ADDR                        (volatile unsigned int *)((0x09ad  << 2) + 0xff620000)
+#define   ANC30_CANVAS_ADDR                        (0x09ae)
+#define P_ANC30_CANVAS_ADDR                        (volatile unsigned int *)((0x09ae  << 2) + 0xff620000)
+#define   ANC31_CANVAS_ADDR                        (0x09af)
+#define P_ANC31_CANVAS_ADDR                        (volatile unsigned int *)((0x09af  << 2) + 0xff620000)
+#define   DBKR_CANVAS_ADDR                         (0x09b0)
+#define P_DBKR_CANVAS_ADDR                         (volatile unsigned int *)((0x09b0  << 2) + 0xff620000)
+#define   DBKW_CANVAS_ADDR                         (0x09b1)
+#define P_DBKW_CANVAS_ADDR                         (volatile unsigned int *)((0x09b1  << 2) + 0xff620000)
+#define   REC_CANVAS_ADDR                          (0x09b2)
+#define P_REC_CANVAS_ADDR                          (volatile unsigned int *)((0x09b2  << 2) + 0xff620000)
+//28:24, read/write, current canvas idx, used in h264 only now
+//23:0, read only, current canvas address, 23:16, Cr canvas addr, 15:8, Cb canvas addr, 7:0, Y  canvas addr
+#define   CURR_CANVAS_CTRL                         (0x09b3)
+#define P_CURR_CANVAS_CTRL                         (volatile unsigned int *)((0x09b3  << 2) + 0xff620000)
+#define   MDEC_PIC_DC_THRESH                       (0x09b8)
+#define P_MDEC_PIC_DC_THRESH                       (volatile unsigned int *)((0x09b8  << 2) + 0xff620000)
+#define   MDEC_PICR_BUF_STATUS                     (0x09b9)
+#define P_MDEC_PICR_BUF_STATUS                     (volatile unsigned int *)((0x09b9  << 2) + 0xff620000)
+#define   MDEC_PICW_BUF_STATUS                     (0x09ba)
+#define P_MDEC_PICW_BUF_STATUS                     (volatile unsigned int *)((0x09ba  << 2) + 0xff620000)
+#define   MCW_DBLK_WRRSP_CNT                       (0x09bb)
+#define P_MCW_DBLK_WRRSP_CNT                       (volatile unsigned int *)((0x09bb  << 2) + 0xff620000)
+#define   MC_MBBOT_WRRSP_CNT                       (0x09bc)
+#define P_MC_MBBOT_WRRSP_CNT                       (volatile unsigned int *)((0x09bc  << 2) + 0xff620000)
+#define   MDEC_PICW_BUF2_STATUS                    (0x09bd)
+#define P_MDEC_PICW_BUF2_STATUS                    (volatile unsigned int *)((0x09bd  << 2) + 0xff620000)
+#define   WRRSP_FIFO_PICW_DBK                      (0x09be)
+#define P_WRRSP_FIFO_PICW_DBK                      (volatile unsigned int *)((0x09be  << 2) + 0xff620000)
+#define   WRRSP_FIFO_PICW_MC                       (0x09bf)
+#define P_WRRSP_FIFO_PICW_MC                       (volatile unsigned int *)((0x09bf  << 2) + 0xff620000)
+#define   AV_SCRATCH_0                             (0x09c0)
+#define P_AV_SCRATCH_0                             (volatile unsigned int *)((0x09c0  << 2) + 0xff620000)
+#define   AV_SCRATCH_1                             (0x09c1)
+#define P_AV_SCRATCH_1                             (volatile unsigned int *)((0x09c1  << 2) + 0xff620000)
+#define   AV_SCRATCH_2                             (0x09c2)
+#define P_AV_SCRATCH_2                             (volatile unsigned int *)((0x09c2  << 2) + 0xff620000)
+#define   AV_SCRATCH_3                             (0x09c3)
+#define P_AV_SCRATCH_3                             (volatile unsigned int *)((0x09c3  << 2) + 0xff620000)
+#define   AV_SCRATCH_4                             (0x09c4)
+#define P_AV_SCRATCH_4                             (volatile unsigned int *)((0x09c4  << 2) + 0xff620000)
+#define   AV_SCRATCH_5                             (0x09c5)
+#define P_AV_SCRATCH_5                             (volatile unsigned int *)((0x09c5  << 2) + 0xff620000)
+#define   AV_SCRATCH_6                             (0x09c6)
+#define P_AV_SCRATCH_6                             (volatile unsigned int *)((0x09c6  << 2) + 0xff620000)
+#define   AV_SCRATCH_7                             (0x09c7)
+#define P_AV_SCRATCH_7                             (volatile unsigned int *)((0x09c7  << 2) + 0xff620000)
+#define   AV_SCRATCH_8                             (0x09c8)
+#define P_AV_SCRATCH_8                             (volatile unsigned int *)((0x09c8  << 2) + 0xff620000)
+#define   AV_SCRATCH_9                             (0x09c9)
+#define P_AV_SCRATCH_9                             (volatile unsigned int *)((0x09c9  << 2) + 0xff620000)
+#define   AV_SCRATCH_A                             (0x09ca)
+#define P_AV_SCRATCH_A                             (volatile unsigned int *)((0x09ca  << 2) + 0xff620000)
+#define   AV_SCRATCH_B                             (0x09cb)
+#define P_AV_SCRATCH_B                             (volatile unsigned int *)((0x09cb  << 2) + 0xff620000)
+#define   AV_SCRATCH_C                             (0x09cc)
+#define P_AV_SCRATCH_C                             (volatile unsigned int *)((0x09cc  << 2) + 0xff620000)
+#define   AV_SCRATCH_D                             (0x09cd)
+#define P_AV_SCRATCH_D                             (volatile unsigned int *)((0x09cd  << 2) + 0xff620000)
+#define   AV_SCRATCH_E                             (0x09ce)
+#define P_AV_SCRATCH_E                             (volatile unsigned int *)((0x09ce  << 2) + 0xff620000)
+#define   AV_SCRATCH_F                             (0x09cf)
+#define P_AV_SCRATCH_F                             (volatile unsigned int *)((0x09cf  << 2) + 0xff620000)
+#define   AV_SCRATCH_G                             (0x09d0)
+#define P_AV_SCRATCH_G                             (volatile unsigned int *)((0x09d0  << 2) + 0xff620000)
+#define   AV_SCRATCH_H                             (0x09d1)
+#define P_AV_SCRATCH_H                             (volatile unsigned int *)((0x09d1  << 2) + 0xff620000)
+#define   AV_SCRATCH_I                             (0x09d2)
+#define P_AV_SCRATCH_I                             (volatile unsigned int *)((0x09d2  << 2) + 0xff620000)
+#define   AV_SCRATCH_J                             (0x09d3)
+#define P_AV_SCRATCH_J                             (volatile unsigned int *)((0x09d3  << 2) + 0xff620000)
+#define   AV_SCRATCH_K                             (0x09d4)
+#define P_AV_SCRATCH_K                             (volatile unsigned int *)((0x09d4  << 2) + 0xff620000)
+#define   AV_SCRATCH_L                             (0x09d5)
+#define P_AV_SCRATCH_L                             (volatile unsigned int *)((0x09d5  << 2) + 0xff620000)
+#define   AV_SCRATCH_M                             (0x09d6)
+#define P_AV_SCRATCH_M                             (volatile unsigned int *)((0x09d6  << 2) + 0xff620000)
+#define   AV_SCRATCH_N                             (0x09d7)
+#define P_AV_SCRATCH_N                             (volatile unsigned int *)((0x09d7  << 2) + 0xff620000)
+// bit[29:24] A_brst_num_co_mb
+// bit[21:16] A_id_co_mb
+// bit[11:0] wrrsp_count_co_mb
+#define   WRRSP_CO_MB                              (0x09d8)
+#define P_WRRSP_CO_MB                              (volatile unsigned int *)((0x09d8  << 2) + 0xff620000)
+// bit[29:24] A_brst_num_dcac
+// bit[21:16] A_id_dcac
+// bit[11:0] wrrsp_count_dcac
+#define   WRRSP_DCAC                               (0x09d9)
+#define P_WRRSP_DCAC                               (volatile unsigned int *)((0x09d9  << 2) + 0xff620000)
+// bit[11:0] wrrsp_count_vld
+#define   WRRSP_VLD                                (0x09da)
+#define P_WRRSP_VLD                                (volatile unsigned int *)((0x09da  << 2) + 0xff620000)
+// doublew_cfg0[0];     //       Second Channel Enable, 1:Enable 0:Disable
+// doublew_cfg0[3:1];   // [2:0] Endian Control for Luma
+// doublew_cfg0[5:4];   // [1:0] Pixel sel by horizontal, 0x:1/2 10:left 11:right
+// doublew_cfg0[7:6];   // [1:0] Pixel sel by vertical,   0x:1/2 10:up 11:down
+// doublew_cfg0[8];     //       Size by horizontal, 0:original size 1: 1/2 shrunken size
+// doublew_cfg0[9];     //       Size by vertical,   0:original size 1: 1/2 shrunken size
+// doublew_cfg0[10];    //       1:Round 0:Truncation
+// doublew_cfg0[11];    //       DMA Urgent
+// doublew_cfg0[17:12]; // [5:0] DMA Burst Number
+// doublew_cfg0[23:18]; // [5:0] DMA ID
+// doublew_cfg0[26:24]; // [2:0] Endian Control for Chroma
+// doublew_cfg0[27];    //       Source from, 1:MCW 0:DBLK
+// doublew_cfg0[29:28]; // [1:0] 0x:select both top and bottom 10:select top 11:select bottom
+// doublew_cfg0[30];    //       0:no merge 1:automatic merge
+// doublew_cfg0[31];    //       0:Y addr no change 1:Y addr divided to half
+#define   MDEC_DOUBLEW_CFG0                        (0x09db)
+#define P_MDEC_DOUBLEW_CFG0                        (volatile unsigned int *)((0x09db  << 2) + 0xff620000)
+// doublew_cfg1[7:0];   // [7:0] DMA Canvas Address for Luma
+// doublew_cfg1[15:8];  // [7:0] DMA Canvas Address for Chroma
+// doublew_cfg1[16];    //       Disable 1st Write -
+// doublew_cfg1[17];    //       Reverse to original version -
+// doublew_cfg1[18];    //       DMA Address Mode - 0:Canvas Mode 1:Non-Canvas Mode
+#define   MDEC_DOUBLEW_CFG1                        (0x09dc)
+#define P_MDEC_DOUBLEW_CFG1                        (volatile unsigned int *)((0x09dc  << 2) + 0xff620000)
+// doublew_cfg2[11:0];  //[11:0] vertical flip initial value
+// doublew_cfg2[15];    //       vertical flip enable
+// doublew_cfg2[24:16]; // [8:0] horizontal flip initial value
+// doublew_cfg2[31];    //       horizontal flip enable
+#define   MDEC_DOUBLEW_CFG2                        (0x09dd)
+#define P_MDEC_DOUBLEW_CFG2                        (volatile unsigned int *)((0x09dd  << 2) + 0xff620000)
+// doublew_cfg3[31:0];  //[31:0] non-canvas start address for Luma -
+#define   MDEC_DOUBLEW_CFG3                        (0x09de)
+#define P_MDEC_DOUBLEW_CFG3                        (volatile unsigned int *)((0x09de  << 2) + 0xff620000)
+// doublew_cfg4[31:0];  //[31:0] non-canvas start address for Chroma -
+#define   MDEC_DOUBLEW_CFG4                        (0x09df)
+#define P_MDEC_DOUBLEW_CFG4                        (volatile unsigned int *)((0x09df  << 2) + 0xff620000)
+// doublew_cfg5[12:0];  //[12:0] non-canvas picture width for Luma -
+// doublew_cfg5[28:16]; //[12:0] non-canvas picture width for Chroma -
+#define   MDEC_DOUBLEW_CFG5                        (0x09e0)
+#define P_MDEC_DOUBLEW_CFG5                        (volatile unsigned int *)((0x09e0  << 2) + 0xff620000)
+// doublew_cfg6: reserved
+#define   MDEC_DOUBLEW_CFG6                        (0x09e1)
+#define P_MDEC_DOUBLEW_CFG6                        (volatile unsigned int *)((0x09e1  << 2) + 0xff620000)
+// doublew_cfg7: reserved
+#define   MDEC_DOUBLEW_CFG7                        (0x09e2)
+#define P_MDEC_DOUBLEW_CFG7                        (volatile unsigned int *)((0x09e2  << 2) + 0xff620000)
+// doublew_status[11:0];//[11:0] wrrsp_count_doublew
+// doublew_status[12];  //       doublew_status_busy
+// doublew_status[13];  //       doublew_status_error
+#define   MDEC_DOUBLEW_STATUS                      (0x09e3)
+#define P_MDEC_DOUBLEW_STATUS                      (volatile unsigned int *)((0x09e3  << 2) + 0xff620000)
+#define   MDEC_EXTIF_CFG0                          (0x09e4)
+#define P_MDEC_EXTIF_CFG0                          (volatile unsigned int *)((0x09e4  << 2) + 0xff620000)
+#define   MDEC_EXTIF_CFG1                          (0x09e5)
+#define P_MDEC_EXTIF_CFG1                          (volatile unsigned int *)((0x09e5  << 2) + 0xff620000)
+#define   MDEC_EXTIF_STS0                          (0x09e6)
+#define P_MDEC_EXTIF_STS0                          (volatile unsigned int *)((0x09e6  << 2) + 0xff620000)
+//======================================
+//  MC Control Register Bits
+//
+//======================================
+// For bits, just copy the defines...don't translate to addresses
+    #define MC_ENABLE	    0x0001
+    //`define MC_RESET	    16'h0002
+    #define SKIP_MB		    0x0004
+
+//======================================
+//  MB Info Register Bits
+//
+//======================================
+    #define INTRA_MB	    0x0001
+
+    #define BWD_PRED	    0x0004
+    #define FWD_PRED	    0x0008
+
+    #define FLD_MOT		    0x0100
+    #define FRM_16x8_MOT	0x0200
+    #define DUAL_PRM_MOT	0x0300
+
+    #define FRM_DCT		    0x0000	    // Bit 10
+    #define FLD_DCT		    0x0400
+
+//======================================
+//  MB Info Register Bits
+//
+//======================================
+    #define I_PIC		    0x0001
+    #define P_PIC		    0x0002
+    #define B_PIC		    0x0003
+
+    #define FLD_PIC		    0x0000	    // Bit 8
+    #define FRM_PIC		    0x0100
+//========================================================================
+// DBLK Register:  12'h950 - 12'h97f
+//========================================================================
+#define   DBLK_RST                                 (0x0950)
+#define P_DBLK_RST                                 (volatile unsigned int *)((0x0950  << 2) + 0xff620000)
+#define   DBLK_CTRL                                (0x0951)
+#define P_DBLK_CTRL                                (volatile unsigned int *)((0x0951  << 2) + 0xff620000)
+#define   DBLK_MB_WID_HEIGHT                       (0x0952)
+#define P_DBLK_MB_WID_HEIGHT                       (volatile unsigned int *)((0x0952  << 2) + 0xff620000)
+#define   DBLK_STATUS                              (0x0953)
+#define P_DBLK_STATUS                              (volatile unsigned int *)((0x0953  << 2) + 0xff620000)
+#define   DBLK_CMD_CTRL                            (0x0954)
+#define P_DBLK_CMD_CTRL                            (volatile unsigned int *)((0x0954  << 2) + 0xff620000)
+#define   DBLK_MB_XY                               (0x0955)
+#define P_DBLK_MB_XY                               (volatile unsigned int *)((0x0955  << 2) + 0xff620000)
+#define   DBLK_QP                                  (0x0956)
+#define P_DBLK_QP                                  (volatile unsigned int *)((0x0956  << 2) + 0xff620000)
+#define   DBLK_Y_BHFILT                            (0x0957)
+#define P_DBLK_Y_BHFILT                            (volatile unsigned int *)((0x0957  << 2) + 0xff620000)
+#define   DBLK_Y_BHFILT_HIGH                       (0x0958)
+#define P_DBLK_Y_BHFILT_HIGH                       (volatile unsigned int *)((0x0958  << 2) + 0xff620000)
+#define   DBLK_Y_BVFILT                            (0x0959)
+#define P_DBLK_Y_BVFILT                            (volatile unsigned int *)((0x0959  << 2) + 0xff620000)
+#define   DBLK_CB_BFILT                            (0x095a)
+#define P_DBLK_CB_BFILT                            (volatile unsigned int *)((0x095a  << 2) + 0xff620000)
+#define   DBLK_CR_BFILT                            (0x095b)
+#define P_DBLK_CR_BFILT                            (volatile unsigned int *)((0x095b  << 2) + 0xff620000)
+#define   DBLK_Y_HFILT                             (0x095c)
+#define P_DBLK_Y_HFILT                             (volatile unsigned int *)((0x095c  << 2) + 0xff620000)
+#define   DBLK_Y_HFILT_HIGH                        (0x095d)
+#define P_DBLK_Y_HFILT_HIGH                        (volatile unsigned int *)((0x095d  << 2) + 0xff620000)
+#define   DBLK_Y_VFILT                             (0x095e)
+#define P_DBLK_Y_VFILT                             (volatile unsigned int *)((0x095e  << 2) + 0xff620000)
+#define   DBLK_CB_FILT                             (0x095f)
+#define P_DBLK_CB_FILT                             (volatile unsigned int *)((0x095f  << 2) + 0xff620000)
+#define   DBLK_CR_FILT                             (0x0960)
+#define P_DBLK_CR_FILT                             (volatile unsigned int *)((0x0960  << 2) + 0xff620000)
+#define   DBLK_BETAX_QP_SEL                        (0x0961)
+#define P_DBLK_BETAX_QP_SEL                        (volatile unsigned int *)((0x0961  << 2) + 0xff620000)
+#define   DBLK_CLIP_CTRL0                          (0x0962)
+#define P_DBLK_CLIP_CTRL0                          (volatile unsigned int *)((0x0962  << 2) + 0xff620000)
+#define   DBLK_CLIP_CTRL1                          (0x0963)
+#define P_DBLK_CLIP_CTRL1                          (volatile unsigned int *)((0x0963  << 2) + 0xff620000)
+#define   DBLK_CLIP_CTRL2                          (0x0964)
+#define P_DBLK_CLIP_CTRL2                          (volatile unsigned int *)((0x0964  << 2) + 0xff620000)
+#define   DBLK_CLIP_CTRL3                          (0x0965)
+#define P_DBLK_CLIP_CTRL3                          (volatile unsigned int *)((0x0965  << 2) + 0xff620000)
+#define   DBLK_CLIP_CTRL4                          (0x0966)
+#define P_DBLK_CLIP_CTRL4                          (volatile unsigned int *)((0x0966  << 2) + 0xff620000)
+#define   DBLK_CLIP_CTRL5                          (0x0967)
+#define P_DBLK_CLIP_CTRL5                          (volatile unsigned int *)((0x0967  << 2) + 0xff620000)
+#define   DBLK_CLIP_CTRL6                          (0x0968)
+#define P_DBLK_CLIP_CTRL6                          (volatile unsigned int *)((0x0968  << 2) + 0xff620000)
+#define   DBLK_CLIP_CTRL7                          (0x0969)
+#define P_DBLK_CLIP_CTRL7                          (volatile unsigned int *)((0x0969  << 2) + 0xff620000)
+#define   DBLK_CLIP_CTRL8                          (0x096a)
+#define P_DBLK_CLIP_CTRL8                          (volatile unsigned int *)((0x096a  << 2) + 0xff620000)
+#define   DBLK_STATUS1                             (0x096b)
+#define P_DBLK_STATUS1                             (volatile unsigned int *)((0x096b  << 2) + 0xff620000)
+#define   DBLK_GCLK_FREE                           (0x096c)
+#define P_DBLK_GCLK_FREE                           (volatile unsigned int *)((0x096c  << 2) + 0xff620000)
+#define   DBLK_GCLK_OFF                            (0x096d)
+#define P_DBLK_GCLK_OFF                            (volatile unsigned int *)((0x096d  << 2) + 0xff620000)
+#define   DBLK_AVSFLAGS                            (0x096e)
+#define P_DBLK_AVSFLAGS                            (volatile unsigned int *)((0x096e  << 2) + 0xff620000)
+// bit 15:0
+#define   DBLK_CBPY                                (0x0970)
+#define P_DBLK_CBPY                                (volatile unsigned int *)((0x0970  << 2) + 0xff620000)
+// bit 11:8 -- deblk_cbpy_bottom
+// bit 7:4 -- deblk_cbpy_left
+// bit 3:0 -- deblk_cbpy_top
+#define   DBLK_CBPY_ADJ                            (0x0971)
+#define P_DBLK_CBPY_ADJ                            (volatile unsigned int *)((0x0971  << 2) + 0xff620000)
+// bit 7:0 -- deblk_cbpc
+#define   DBLK_CBPC                                (0x0972)
+#define P_DBLK_CBPC                                (volatile unsigned int *)((0x0972  << 2) + 0xff620000)
+// bit 15 -- bottom_mb
+// bit 14 -- left_mb
+// bit 13 -- top_mb
+// bit 12 -- reserved
+// bit 11:8 -- deblk_cbpc_bottom
+// bit 7:4 -- deblk_cbpc_left
+// bit 3:0 -- deblk_cbpc_top
+#define   DBLK_CBPC_ADJ                            (0x0973)
+#define P_DBLK_CBPC_ADJ                            (volatile unsigned int *)((0x0973  << 2) + 0xff620000)
+// bit 15:8 -- deblk_hmvd   -- {left_1, left_0, below_1, below_0, block3-0}
+// bit 7:0 -- deblk_vmvd    -- {top_1, top_0, below_1, below_0, block3-0}
+#define   DBLK_VHMVD                               (0x0974)
+#define P_DBLK_VHMVD                               (volatile unsigned int *)((0x0974  << 2) + 0xff620000)
+// bit 13:12 -- right_vmvd
+// bit 11 -- right_above_vmvd
+// bit 10 -- left_below_hmvd
+// bit 9 -- disable_dblk_luma
+// bit 8 -- disable_dblk_chroma
+// bit 7 -- bBelowRefDiff
+// bit 6 -- bLeftRefDiff
+// bit 5 -- bAboveRefDiff
+// bit 4 -- reserved
+// bit 3 -- s_below
+// bit 2 -- s_left
+// bit 1 -- s_above
+// bit 0 -- s
+#define   DBLK_STRONG                              (0x0975)
+#define P_DBLK_STRONG                              (volatile unsigned int *)((0x0975  << 2) + 0xff620000)
+// bit 14:10 -- PQUANT
+// bit 9:5 -- left_PQUANT
+// bit 4:0 -- top_PQUANT
+#define   DBLK_RV8_QUANT                           (0x0976)
+#define P_DBLK_RV8_QUANT                           (volatile unsigned int *)((0x0976  << 2) + 0xff620000)
+#define   DBLK_CBUS_HCMD2                          (0x0977)
+#define P_DBLK_CBUS_HCMD2                          (volatile unsigned int *)((0x0977  << 2) + 0xff620000)
+#define   DBLK_CBUS_HCMD1                          (0x0978)
+#define P_DBLK_CBUS_HCMD1                          (volatile unsigned int *)((0x0978  << 2) + 0xff620000)
+#define   DBLK_CBUS_HCMD0                          (0x0979)
+#define P_DBLK_CBUS_HCMD0                          (volatile unsigned int *)((0x0979  << 2) + 0xff620000)
+#define   DBLK_VLD_HCMD2                           (0x097a)
+#define P_DBLK_VLD_HCMD2                           (volatile unsigned int *)((0x097a  << 2) + 0xff620000)
+#define   DBLK_VLD_HCMD1                           (0x097b)
+#define P_DBLK_VLD_HCMD1                           (volatile unsigned int *)((0x097b  << 2) + 0xff620000)
+#define   DBLK_VLD_HCMD0                           (0x097c)
+#define P_DBLK_VLD_HCMD0                           (volatile unsigned int *)((0x097c  << 2) + 0xff620000)
+#define   DBLK_OST_YBASE                           (0x097d)
+#define P_DBLK_OST_YBASE                           (volatile unsigned int *)((0x097d  << 2) + 0xff620000)
+#define   DBLK_OST_CBCRDIFF                        (0x097e)
+#define P_DBLK_OST_CBCRDIFF                        (volatile unsigned int *)((0x097e  << 2) + 0xff620000)
+//13:8 dblk thread ID and token
+//5:0  dblk prearbitor burst num
+#define   DBLK_CTRL1                               (0x097f)
+#define P_DBLK_CTRL1                               (volatile unsigned int *)((0x097f  << 2) + 0xff620000)
+// MCRCC_CTL1
+// 31:3  <reserved[23:0]>
+// 2     <cfg_field_pic>
+// 1     <sw_rst>
+// 0     <bypass_en>
+#define   MCRCC_CTL1                               (0x0980)
+#define P_MCRCC_CTL1                               (volatile unsigned int *)((0x0980  << 2) + 0xff620000)
+// MCRCC_CTL2
+// 31:24    <cfg_cache_anc01_c[7:0]>
+// 23:16    <cfg_cache_anc01_y[7:0]>
+// 15:8     <cfg_cache_anc00_c[7:0]>
+// 7:0      <cfg_cache_anc00_y[7:0]>
+#define   MCRCC_CTL2                               (0x0981)
+#define P_MCRCC_CTL2                               (volatile unsigned int *)((0x0981  << 2) + 0xff620000)
+// MCRCC_CTL3
+// 31:24    <cfg_cache_anc11_c[7:0]>
+// 23:16    <cfg_cache_anc11_y[7:0]>
+// 15:8     <cfg_cache_anc10_c[7:0]>
+// 7:0      <cfg_cache_anc10_y[7:0]>
+#define   MCRCC_CTL3                               (0x0982)
+#define P_MCRCC_CTL3                               (volatile unsigned int *)((0x0982  << 2) + 0xff620000)
+// bit[31:10] reserved
+// bit[9:0] sw_clock_gating control
+// [9] vdec clk_en for assist and cbus.
+// [8] vdec clk_en for ddr
+// [7] vdec clk_en for vcpu
+// [6] vdec clk_en for assist
+// [5] vdec clk_en for dblk
+// [4] vdec clk_en for iqidct
+// [3] vdec clk_en for mc
+// [2] vdec clk_en for pic_dc
+// [1] vdec clk_en for psc
+// [0] vdec clk_en for vld
+#define   GCLK_EN                                  (0x0983)
+#define P_GCLK_EN                                  (volatile unsigned int *)((0x0983  << 2) + 0xff620000)
+// [0]  Reserved
+// [1]  Reserved
+// [2]  Reset assist, mdec's CBUS
+// [3]  Reset mdec's VLD
+// [4]  Reset mdec's VLD
+// [5]  Reset mdec's VLD
+// [6]  Reset mdec's IQIDCT
+// [7]  Reset mdec's MC
+// [8]  Reset mdec's DBLK
+// [9]  Reset mdec's PIC_DC
+// [10] Reset mdec's Pscale
+// [11] Reset vcpu's MCPU
+// [12] Reset vcpu's CCPU
+// [13] Reset mmc_pre_arb
+#define   MDEC_SW_RESET                            (0x0984)
+#define P_MDEC_SW_RESET                            (volatile unsigned int *)((0x0984  << 2) + 0xff620000)
+//DBLK last address 12'h97f
+//
+// Closing file:  mdec_regs.h
+//
+//------------------------------------------------------------------------------
+// VLD module level register offset
+//------------------------------------------------------------------------------
+//
+// Reading file:  vld_regs.h
+//
+//========================================================================
+//  VLD module level register offset
+//========================================================================
+// -----------------------------------------------
+// CBUS_BASE:  DOS_VDEC_VLD_CBUS_BASE = 0x0c
+// -----------------------------------------------
+#define   VLD_STATUS_CTRL                          (0x0c00)
+#define P_VLD_STATUS_CTRL                          (volatile unsigned int *)((0x0c00  << 2) + 0xff620000)
+//
+// bit 10 -- use_old_shift_en
+// bit 9 -- output_mv_not_pmv
+// bit 8:5 -- force_zigzag
+// bit 4 -- force_zigzag_en
+// bit 3 -- disable_viff_anempty_int
+// bit 2 -- disable_m2_ac_coeff_one_cycle
+// bit 1 -- forced_reset  force reset pmv
+// bit 0 -- mpeg_type  0:mpeg1 1: mpeg2
+#define   MPEG1_2_REG                              (0x0c01)
+#define P_MPEG1_2_REG                              (volatile unsigned int *)((0x0c01  << 2) + 0xff620000)
+#define   F_CODE_REG                               (0x0c02)
+#define P_F_CODE_REG                               (volatile unsigned int *)((0x0c02  << 2) + 0xff620000)
+#define   PIC_HEAD_INFO                            (0x0c03)
+#define P_PIC_HEAD_INFO                            (volatile unsigned int *)((0x0c03  << 2) + 0xff620000)
+#define   SLICE_VER_POS_PIC_TYPE                   (0x0c04)
+#define P_SLICE_VER_POS_PIC_TYPE                   (volatile unsigned int *)((0x0c04  << 2) + 0xff620000)
+#define   QP_VALUE_REG                             (0x0c05)
+#define P_QP_VALUE_REG                             (volatile unsigned int *)((0x0c05  << 2) + 0xff620000)
+#define   MBA_INC                                  (0x0c06)
+#define P_MBA_INC                                  (volatile unsigned int *)((0x0c06  << 2) + 0xff620000)
+#define   MB_MOTION_MODE                           (0x0c07)
+#define P_MB_MOTION_MODE                           (volatile unsigned int *)((0x0c07  << 2) + 0xff620000)
+//`define PACKET_BYTE_COUNT   8'h08
+// bit 15 -- force_search_startcode_en
+// bit 14 -- int_cpu_when_error (before do anything)
+// bit 13 -- vld_error_reset
+// bit 12 -- return_on_slice_header
+// bit 6 -- jpeg_ff00_en
+// bit 5:0 -- vld_power_ctl
+#define   POWER_CTL_VLD                            (0x0c08)
+#define P_POWER_CTL_VLD                            (volatile unsigned int *)((0x0c08  << 2) + 0xff620000)
+#define   MB_WIDTH                                 (0x0c09)
+#define P_MB_WIDTH                                 (volatile unsigned int *)((0x0c09  << 2) + 0xff620000)
+#define   SLICE_QP                                 (0x0c0a)
+#define P_SLICE_QP                                 (volatile unsigned int *)((0x0c0a  << 2) + 0xff620000)
+// `define MB_X_MB_Y           8'h0b   /* current MBX and MBY                  */
+#define   PRE_START_CODE                           (0x0c0b)
+#define P_PRE_START_CODE                           (volatile unsigned int *)((0x0c0b  << 2) + 0xff620000)
+#define   SLICE_START_BYTE_01                      (0x0c0c)
+#define P_SLICE_START_BYTE_01                      (volatile unsigned int *)((0x0c0c  << 2) + 0xff620000)
+#define   SLICE_START_BYTE_23                      (0x0c0d)
+#define P_SLICE_START_BYTE_23                      (volatile unsigned int *)((0x0c0d  << 2) + 0xff620000)
+#define   RESYNC_MARKER_LENGTH                     (0x0c0e)
+#define P_RESYNC_MARKER_LENGTH                     (volatile unsigned int *)((0x0c0e  << 2) + 0xff620000)
+// bit[6:5] - frame/field info, 01 - top, 10 - bottom, 11 - frame
+// bit[4:0] - buffer ID
+// L0_BUFF_ID_0, L0_BUFF_ID_1, L1_BUFF_ID_0, L1_BUFF_ID_1
+#define   DECODER_BUFFER_INFO                      (0x0c0f)
+#define P_DECODER_BUFFER_INFO                      (volatile unsigned int *)((0x0c0f  << 2) + 0xff620000)
+#define   FST_FOR_MV_X                             (0x0c10)
+#define P_FST_FOR_MV_X                             (volatile unsigned int *)((0x0c10  << 2) + 0xff620000)
+#define   FST_FOR_MV_Y                             (0x0c11)
+#define P_FST_FOR_MV_Y                             (volatile unsigned int *)((0x0c11  << 2) + 0xff620000)
+#define   SCD_FOR_MV_X                             (0x0c12)
+#define P_SCD_FOR_MV_X                             (volatile unsigned int *)((0x0c12  << 2) + 0xff620000)
+#define   SCD_FOR_MV_Y                             (0x0c13)
+#define P_SCD_FOR_MV_Y                             (volatile unsigned int *)((0x0c13  << 2) + 0xff620000)
+#define   FST_BAK_MV_X                             (0x0c14)
+#define P_FST_BAK_MV_X                             (volatile unsigned int *)((0x0c14  << 2) + 0xff620000)
+#define   FST_BAK_MV_Y                             (0x0c15)
+#define P_FST_BAK_MV_Y                             (volatile unsigned int *)((0x0c15  << 2) + 0xff620000)
+#define   SCD_BAK_MV_X                             (0x0c16)
+#define P_SCD_BAK_MV_X                             (volatile unsigned int *)((0x0c16  << 2) + 0xff620000)
+#define   SCD_BAK_MV_Y                             (0x0c17)
+#define P_SCD_BAK_MV_Y                             (volatile unsigned int *)((0x0c17  << 2) + 0xff620000)
+// Bit 7:4 -- read_buffer_interlace  0-progressive, 1-interlace, used in VC1
+// bit 3 -- disable_new_stcode_search_fix // From GXM
+// bit 2 -- weighting_prediction
+// bit 1 -- mb_weighting_flag
+// bit 0 -- slice_weighting_flag
+#define   VLD_DECODE_CONTROL                       (0x0c18)
+#define P_VLD_DECODE_CONTROL                       (volatile unsigned int *)((0x0c18  << 2) + 0xff620000)
+#define   VLD_REVERVED_19                          (0x0c19)
+#define P_VLD_REVERVED_19                          (volatile unsigned int *)((0x0c19  << 2) + 0xff620000)
+#define   VIFF_BIT_CNT                             (0x0c1a)
+#define P_VIFF_BIT_CNT                             (volatile unsigned int *)((0x0c1a  << 2) + 0xff620000)
+#define   BYTE_ALIGN_PEAK_HI                       (0x0c1b)
+#define P_BYTE_ALIGN_PEAK_HI                       (volatile unsigned int *)((0x0c1b  << 2) + 0xff620000)
+#define   BYTE_ALIGN_PEAK_LO                       (0x0c1c)
+#define P_BYTE_ALIGN_PEAK_LO                       (volatile unsigned int *)((0x0c1c  << 2) + 0xff620000)
+#define   NEXT_ALIGN_PEAK                          (0x0c1d)
+#define P_NEXT_ALIGN_PEAK                          (volatile unsigned int *)((0x0c1d  << 2) + 0xff620000)
+// bit 31    : byte_aligned_zero_23_from_org // From GXM
+// bit 30    : force_shift_out_drop_flag_zero // From GXM
+// bit 29    : en_st_protect_from_org // From GXM
+// bit 28    : enable_halt_decode_start_voff
+// bit 27    : disable_C_pred_check
+// bit 26    : disable_I4_pred_check
+// bit 25    : disable_I16_pred_check
+// bit 24    : check_avs_1st_drop
+// bit 23    : enable_cabac_protect // From GXM
+// bit 22    : enable_avs_drop_more
+// bit 21    : reset_avs_drop_ptr
+// bit 20    : reset_cabac_use_next_at_end_req
+// bit 19    : vc1_inv_intra_co_mb_ref_rd
+// bit 18    : vc1_inv_co_mb_ref_rd
+// bit 17    : vc1_inv_intra_co_mb_ref_wr
+// bit 16    : vc1_inv_co_mb_ref_wr
+// bit 15    : disable_mv_cal_begin_only
+// bit 14    : avs_drop_enable
+// bit 13:12 : avs_drop_ptr
+// bit 11:8  : avs_demu_ctl_reg
+// bit 7 : avs_enable
+// bit 6 : disable_dblk_hcmd
+// bit 5 : disable_mc_hcmd
+// bit 4 : first_mode3_set enable
+// bit 3 : first_mode3
+// bit 2:1 : vc1_profile  0-SP, 1-MP, 2-reserved, 3-AP
+// bit 0   : vc1_enable
+#define   VC1_CONTROL_REG                          (0x0c1e)
+#define P_VC1_CONTROL_REG                          (volatile unsigned int *)((0x0c1e  << 2) + 0xff620000)
+#define   PMV1_X                                   (0x0c20)
+#define P_PMV1_X                                   (volatile unsigned int *)((0x0c20  << 2) + 0xff620000)
+#define   PMV1_Y                                   (0x0c21)
+#define P_PMV1_Y                                   (volatile unsigned int *)((0x0c21  << 2) + 0xff620000)
+#define   PMV2_X                                   (0x0c22)
+#define P_PMV2_X                                   (volatile unsigned int *)((0x0c22  << 2) + 0xff620000)
+#define   PMV2_Y                                   (0x0c23)
+#define P_PMV2_Y                                   (volatile unsigned int *)((0x0c23  << 2) + 0xff620000)
+#define   PMV3_X                                   (0x0c24)
+#define P_PMV3_X                                   (volatile unsigned int *)((0x0c24  << 2) + 0xff620000)
+#define   PMV3_Y                                   (0x0c25)
+#define P_PMV3_Y                                   (volatile unsigned int *)((0x0c25  << 2) + 0xff620000)
+#define   PMV4_X                                   (0x0c26)
+#define P_PMV4_X                                   (volatile unsigned int *)((0x0c26  << 2) + 0xff620000)
+#define   PMV4_Y                                   (0x0c27)
+#define P_PMV4_Y                                   (volatile unsigned int *)((0x0c27  << 2) + 0xff620000)
+// Can't use the same address for different defines
+// Therefore, create a single define that covers both
+// Only appears to be used in micro-code since the VLD hardware is
+// hard coded.
+// `define M4_TABLE_SELECT     8'h28  // Does this exist in HW ? Added from register_mp2.h
+// `define M4_TABLE_OUTPUT     8'h28  // Does this exist in HW ? Added from register_mp2.h
+#define   M4_TABLE_SELECT                          (0x0c28)
+#define P_M4_TABLE_SELECT                          (volatile unsigned int *)((0x0c28  << 2) + 0xff620000)
+#define   M4_CONTROL_REG                           (0x0c29)
+#define P_M4_CONTROL_REG                           (volatile unsigned int *)((0x0c29  << 2) + 0xff620000)
+#define   BLOCK_NUM                                (0x0c2a)
+#define P_BLOCK_NUM                                (volatile unsigned int *)((0x0c2a  << 2) + 0xff620000)
+#define   PATTERN_CODE                             (0x0c2b)
+#define P_PATTERN_CODE                             (volatile unsigned int *)((0x0c2b  << 2) + 0xff620000)
+#define   MB_INFO                                  (0x0c2c)
+#define P_MB_INFO                                  (volatile unsigned int *)((0x0c2c  << 2) + 0xff620000)
+#define   VLD_DC_PRED                              (0x0c2d)
+#define P_VLD_DC_PRED                              (volatile unsigned int *)((0x0c2d  << 2) + 0xff620000)
+#define   VLD_ERROR_MASK                           (0x0c2e)
+#define P_VLD_ERROR_MASK                           (volatile unsigned int *)((0x0c2e  << 2) + 0xff620000)
+#define   VLD_DC_PRED_C                            (0x0c2f)
+#define P_VLD_DC_PRED_C                            (volatile unsigned int *)((0x0c2f  << 2) + 0xff620000)
+#define   LAST_SLICE_MV_ADDR                       (0x0c30)
+#define P_LAST_SLICE_MV_ADDR                       (volatile unsigned int *)((0x0c30  << 2) + 0xff620000)
+#define   LAST_MVX                                 (0x0c31)
+#define P_LAST_MVX                                 (volatile unsigned int *)((0x0c31  << 2) + 0xff620000)
+#define   LAST_MVY                                 (0x0c32)
+#define P_LAST_MVY                                 (volatile unsigned int *)((0x0c32  << 2) + 0xff620000)
+#define   VLD_C38                                  (0x0c38)
+#define P_VLD_C38                                  (volatile unsigned int *)((0x0c38  << 2) + 0xff620000)
+#define   VLD_C39                                  (0x0c39)
+#define P_VLD_C39                                  (volatile unsigned int *)((0x0c39  << 2) + 0xff620000)
+#define   VLD_STATUS                               (0x0c3a)
+#define P_VLD_STATUS                               (volatile unsigned int *)((0x0c3a  << 2) + 0xff620000)
+#define   VLD_SHIFT_STATUS                         (0x0c3b)
+#define P_VLD_SHIFT_STATUS                         (volatile unsigned int *)((0x0c3b  << 2) + 0xff620000)
+// `define VLD_SHIFT_INFO      8'h3b  // Does this exist in HW ? used in $ucode/mpeg4
+#define   VOFF_STATUS                              (0x0c3c)
+#define P_VOFF_STATUS                              (volatile unsigned int *)((0x0c3c  << 2) + 0xff620000)
+#define   VLD_C3D                                  (0x0c3d)
+#define P_VLD_C3D                                  (volatile unsigned int *)((0x0c3d  << 2) + 0xff620000)
+#define   VLD_DBG_INDEX                            (0x0c3e)
+#define P_VLD_DBG_INDEX                            (volatile unsigned int *)((0x0c3e  << 2) + 0xff620000)
+// vld_buff_info -- (index == 0)
+// Bit11]    halt_decode_start_voff
+// Bit10]    C_pred_error
+// Bit[9]    I4_pred_error
+// Bit[8]    I16_pred_error
+// Bit[7:6]  mv_UR_ready_cnt;
+// Bit[5]  vld_wr_idx
+// Bit[4]  iq_rd_idx
+// Bit[3]  vld_vi_block_rdy_1
+// Bit[2]  vld_vi_block_rdy_2
+// Bit[1]  voff_empty_1
+// Bit[0]  voff_empty_2
+// cabac_buff_info_0 -- (index == 1)
+// Bit[31] shift_data_ready
+// Bit[30:29] Reserved
+// Bit[28:24] cabac_buffer_ptr
+// Bit[23:0] cabac_buffer
+// cabac_buff_info_1 -- (index == 2)
+// Bit[31:29] Reserved
+// Bit[28:20] Drange
+// Bit[19:16] bin_count_4
+// Bit[15:13] Reserved
+// Bit[12:6] context_mem_do
+// Bit[5:3] coeff_state
+// Bit[2:0] mvd_state
+// h264_mv_present -- (index == 3)
+// Bit[31:16] mv_present_l0
+// Bit[15:0] mv_present_l1
+// h264_mv_cal_info_0 -- (index == 4)
+// [31:28] mv_cal_state
+// [27:24] direct_spatial_cnt
+// Bit[23:21] Reserved
+// Bit[20] mv_UR_ready_for_mv_cal
+// Bit[19] co_mb_mem_ready_for_mv_cal
+// Bit[18] mc_dblk_cmd_if_busy
+// Bit[17] h264_co_mb_wr_busy
+// Bit[16] H264_cbp_blk_ready
+// Bit[15] mc_hcmd_rrdy
+// Bit[14] mc_hcmd_srdy
+// Bit[13] mc_cmd_if_ready
+// Bit[12] mc_hcmd_mv_available
+// Bit[11:8] mc_cmd_if_state
+// Bit[7] dblk_hcmd_rrdy
+// Bit[6] dblk_hcmd_srdy
+// Bit[5] dblk_cmd_if_ready
+// Bit[4] dblk_hcmd_mv_available
+// Bit[3:0] dblk_cmd_if_state
+// h264_mv_cal_info_1 -- (index == 5)
+//  Bit[31:29] Reserved
+//  Bit[28:24] total_mvd_num_l0
+//  Bit[23:21] Reserved
+//  Bit[20:16] mv_cal_ptr_l0
+//  Bit[15:13] Reserved
+//  Bit[12:8] mc_hcmd_ptr_l0
+//  Bit[7:5] Reserved
+//  Bit[4:0] dblk_hcmd_ptr_l0
+// h264_mv_cal_info_2 -- (index == 6)
+//  Bit[31:29] Reserved
+//  Bit[28:24] total_mvd_num_l1
+//  Bit[23:21] Reserved
+//  Bit[20:16] mv_cal_ptr_l1
+//  Bit[15:13] Reserved
+//  Bit[12:8] mc_hcmd_ptr_l1
+//  Bit[7:5] Reserved
+//  Bit[4:0] dblk_hcmd_ptr_l1
+// h264_co_mb_info -- (index == 7)
+// Bit[31:26] Reserved
+// Bit[25] mv_scale_cal_busy
+// Bit[24:20] co_mv_count
+// Bit[19:16] co_mv_process_state
+// Bit[15] h264_co_mb_rd_busy
+// Bit[15] h264_co_mb_rd_ready
+// Bit[13:12] co_mv_transfer_block_cnt
+// Bit[11:8] co_mv_transfer_ptr
+// Bit[7] co_mv_POC_l1_busy
+// Bit[6] h264_weight_scale_cal_en
+// Bit[5] weight_cal_busy
+// Bit[4] weight_cal_not_finished
+// Bit[3:0] weight_process_state
+#define   VLD_DBG_DATA                             (0x0c3f)
+#define P_VLD_DBG_DATA                             (volatile unsigned int *)((0x0c3f  << 2) + 0xff620000)
+// --------------------------------------------
+// VIFIFO DDR Interface
+// --------------------------------------------
+// The VIFIFO start pointer into DDR memory is a 32-bit number
+// The Start pointer will automatically be truncated to land on
+// an 8-byte boundary.  That is, bits [2:0] = 0;
+#define   VLD_MEM_VIFIFO_START_PTR                 (0x0c40)
+#define P_VLD_MEM_VIFIFO_START_PTR                 (volatile unsigned int *)((0x0c40  << 2) + 0xff620000)
+// The current pointer points so some location between the START and END
+// pointers.  The current pointer is a BYTE pointer.  That is, you can
+// point to any BYTE address within the START/END range
+#define   VLD_MEM_VIFIFO_CURR_PTR                  (0x0c41)
+#define P_VLD_MEM_VIFIFO_CURR_PTR                  (volatile unsigned int *)((0x0c41  << 2) + 0xff620000)
+#define   VLD_MEM_VIFIFO_END_PTR                   (0x0c42)
+#define P_VLD_MEM_VIFIFO_END_PTR                   (volatile unsigned int *)((0x0c42  << 2) + 0xff620000)
+#define   VLD_MEM_VIFIFO_BYTES_AVAIL               (0x0c43)
+#define P_VLD_MEM_VIFIFO_BYTES_AVAIL               (volatile unsigned int *)((0x0c43  << 2) + 0xff620000)
+// VIFIFO FIFO Control
+// bit  [31:24] viff_empty_int_enable_cpu[7:0]
+// bit  [23:16] viff_empty_int_enable_amrisc[7:0]
+//   -bit 23 Video BUFFER < 0x400 Bytes
+//   -bit 22 Video BUFFER < 0x200 Bytes
+//   -bit 21 Video BUFFER < 0x100 Bytes
+//   -bit 20 Video BUFFER < 0x80 Bytes
+//   -bit 19 Video BUFFER < 0x40 Bytes
+//   -bit 18 Video BUFFER < 0x20 Bytes
+//   -bit 17 vififo  < 16 double words
+//   -bit 16 vififo  < 8 double words
+// bit  [15:13] unused
+// bit  [12]    A_urgent
+// bit  [11]    transfer_length 0 - 32x64 Bits per request, 1 - 16x64 Bits per request
+// bit  [10]    use_level       Set this bit to 1 to enable filling of the FIFO controlled by the buffer
+//                              level control.  If this bit is 0, then use bit[1] to control the enabling of filling
+// bit  [9]     Data Ready.     This bit is set when data can be popped
+// bit  [8]     fill busy       This bit will be high when we're fetching data from the DDR memory
+//                              To reset this module, set cntl_enable = 0, and then wait for busy = 0.
+//                              After that you can pulse cntl_init to start over
+// bit  [7]     init_with_cntl_init
+// bit  [6]     reserved
+// bits [5:3]   endian:         see $lib/rtl/ddr_endian.v
+// bit  [2]     cntl_empty_en   Set to 1 to enable reading the DDR memory FIFO
+//                              Set cntl_empty_en = cntl_fill_en = 0 when pulsing cntl_init
+// bit  [1]     cntl_fill_en    Set to 1 to enable reading data from DDR memory
+// bit  [0]     cntl_init:      After setting the read pointers, sizes, channel masks
+//                              and read masks, set this bit to 1 and then to 0
+//                              NOTE:  You don't need to pulse cntl_init if only the start address is
+//                              being changed
+#define   VLD_MEM_VIFIFO_CONTROL                   (0x0c44)
+#define P_VLD_MEM_VIFIFO_CONTROL                   (volatile unsigned int *)((0x0c44  << 2) + 0xff620000)
+// --------------------------------------------
+// VIFIFO Buffer Level Manager
+// --------------------------------------------
+#define   VLD_MEM_VIFIFO_WP                        (0x0c45)
+#define P_VLD_MEM_VIFIFO_WP                        (volatile unsigned int *)((0x0c45  << 2) + 0xff620000)
+#define   VLD_MEM_VIFIFO_RP                        (0x0c46)
+#define P_VLD_MEM_VIFIFO_RP                        (volatile unsigned int *)((0x0c46  << 2) + 0xff620000)
+#define   VLD_MEM_VIFIFO_LEVEL                     (0x0c47)
+#define P_VLD_MEM_VIFIFO_LEVEL                     (volatile unsigned int *)((0x0c47  << 2) + 0xff620000)
+//
+// bit  [8]     use_parser_video2_wp
+// bit  [7]     vbuf2_out_manual
+// bit  [6]     vbuf_out_manual
+// bit  [5]     empty (ReadOnly)
+// bit  [4]     full (ReadOnly)
+// bit  [3:2]   reserved
+// bit  [1]     manual mode     Set to 1 for manual write pointer mode
+// bit  [0]     Init            Set high then low after everything has been initialized
+#define   VLD_MEM_VIFIFO_BUF_CNTL                  (0x0c48)
+#define P_VLD_MEM_VIFIFO_BUF_CNTL                  (volatile unsigned int *)((0x0c48  << 2) + 0xff620000)
+// bit 31:16 -- drop_bytes
+// bit 15:14 -- drop_status (Read-Only)
+// bit 13:12 -- sync_match_position (Read-Only)
+// bit 11:6 -- reserved
+// bit 5:4 -- TIME_STAMP_NUMBER, 0-32bits, 1-64bits, 2-96bits, 3-128bits
+// bit 3 -- stamp_soft_reset
+// bit 2 -- TIME_STAMP_length_enable
+// bit 1 -- TIME_STAMP_sync64_enable
+// bit 0 -- TIME_STAMP_enable
+#define   VLD_TIME_STAMP_CNTL                      (0x0c49)
+#define P_VLD_TIME_STAMP_CNTL                      (volatile unsigned int *)((0x0c49  << 2) + 0xff620000)
+// bit 31:0 -- TIME_STAMP_SYNC_CODE_0
+#define   VLD_TIME_STAMP_SYNC_0                    (0x0c4a)
+#define P_VLD_TIME_STAMP_SYNC_0                    (volatile unsigned int *)((0x0c4a  << 2) + 0xff620000)
+// bit 31:0 -- TIME_STAMP_SYNC_CODE_1
+#define   VLD_TIME_STAMP_SYNC_1                    (0x0c4b)
+#define P_VLD_TIME_STAMP_SYNC_1                    (volatile unsigned int *)((0x0c4b  << 2) + 0xff620000)
+// bit 31:0 TIME_STAMP_0
+#define   VLD_TIME_STAMP_0                         (0x0c4c)
+#define P_VLD_TIME_STAMP_0                         (volatile unsigned int *)((0x0c4c  << 2) + 0xff620000)
+// bit 31:0 TIME_STAMP_1
+#define   VLD_TIME_STAMP_1                         (0x0c4d)
+#define P_VLD_TIME_STAMP_1                         (volatile unsigned int *)((0x0c4d  << 2) + 0xff620000)
+// bit 31:0 TIME_STAMP_2
+#define   VLD_TIME_STAMP_2                         (0x0c4e)
+#define P_VLD_TIME_STAMP_2                         (volatile unsigned int *)((0x0c4e  << 2) + 0xff620000)
+// bit 31:0 TIME_STAMP_3
+#define   VLD_TIME_STAMP_3                         (0x0c4f)
+#define P_VLD_TIME_STAMP_3                         (volatile unsigned int *)((0x0c4f  << 2) + 0xff620000)
+// bit 31:0 TIME_STAMP_LENGTH
+#define   VLD_TIME_STAMP_LENGTH                    (0x0c50)
+#define P_VLD_TIME_STAMP_LENGTH                    (volatile unsigned int *)((0x0c50  << 2) + 0xff620000)
+// bit 15:0 vififo_rd_count
+#define   VLD_MEM_VIFIFO_WRAP_COUNT                (0x0c51)
+#define P_VLD_MEM_VIFIFO_WRAP_COUNT                (volatile unsigned int *)((0x0c51  << 2) + 0xff620000)
+// bit 29:24 A_brst_num
+// bit 21:16 A_id
+// bit 15:0 level_hold
+#define   VLD_MEM_VIFIFO_MEM_CTL                   (0x0c52)
+#define P_VLD_MEM_VIFIFO_MEM_CTL                   (volatile unsigned int *)((0x0c52  << 2) + 0xff620000)
+#define   VLD_MEM_VBUF_RD_PTR                      (0x0c53)
+#define P_VLD_MEM_VBUF_RD_PTR                      (volatile unsigned int *)((0x0c53  << 2) + 0xff620000)
+#define   VLD_MEM_VBUF2_RD_PTR                     (0x0c54)
+#define P_VLD_MEM_VBUF2_RD_PTR                     (volatile unsigned int *)((0x0c54  << 2) + 0xff620000)
+#define   VLD_MEM_SWAP_ADDR                        (0x0c55)
+#define P_VLD_MEM_SWAP_ADDR                        (volatile unsigned int *)((0x0c55  << 2) + 0xff620000)
+// bit[23:16] - swap_d_count (Read Only)
+// bit[15:8]  - swap_a_count (Read Only)
+// bit [7] - swap busy (Read Only)
+// bit [6:2] - reserved
+// bit [1] - 1 - STORE to Memory, 0 - LOAD from Memory
+// bit [0] - swap active
+#define   VLD_MEM_SWAP_CTL                         (0x0c56)
+#define P_VLD_MEM_SWAP_CTL                         (volatile unsigned int *)((0x0c56  << 2) + 0xff620000)
+//
+// Closing file:  vld_regs.h
+//
+//------------------------------------------------------------------------------
+// IQ/IDCT module level register offset
+//------------------------------------------------------------------------------
+//
+// Reading file:  iqidct_regs.h
+//
+//========================================================================
+//  IQ/IDCT module level register offset
+//========================================================================
+// -----------------------------------------------
+// CBUS_BASE:  DOS_VDEC_IQIDCT_CBUS_BASE = 0x0e
+// -----------------------------------------------
+#define   VCOP_CTRL_REG                            (0x0e00)
+#define P_VCOP_CTRL_REG                            (volatile unsigned int *)((0x0e00  << 2) + 0xff620000)
+#define   QP_CTRL_REG                              (0x0e01)
+#define P_QP_CTRL_REG                              (volatile unsigned int *)((0x0e01  << 2) + 0xff620000)
+#define   INTRA_QUANT_MATRIX                       (0x0e02)
+#define P_INTRA_QUANT_MATRIX                       (volatile unsigned int *)((0x0e02  << 2) + 0xff620000)
+#define   NON_I_QUANT_MATRIX                       (0x0e03)
+#define P_NON_I_QUANT_MATRIX                       (volatile unsigned int *)((0x0e03  << 2) + 0xff620000)
+#define   DC_SCALER                                (0x0e04)
+#define P_DC_SCALER                                (volatile unsigned int *)((0x0e04  << 2) + 0xff620000)
+#define   DC_AC_CTRL                               (0x0e05)
+#define P_DC_AC_CTRL                               (volatile unsigned int *)((0x0e05  << 2) + 0xff620000)
+// `define RV_AI_CTRL          8'h05  // ONLY for $ucode/real/amrisc/rv.s reg value from apollo
+#define   DC_AC_SCALE_MUL                          (0x0e06)
+#define P_DC_AC_SCALE_MUL                          (volatile unsigned int *)((0x0e06  << 2) + 0xff620000)
+#define   DC_AC_SCALE_DIV                          (0x0e07)
+#define P_DC_AC_SCALE_DIV                          (volatile unsigned int *)((0x0e07  << 2) + 0xff620000)
+// `define DC_AC_SCALE_RESULT  8'h06
+// `define RESERVED_E07        8'h07
+#define   POWER_CTL_IQIDCT                         (0x0e08)
+#define P_POWER_CTL_IQIDCT                         (volatile unsigned int *)((0x0e08  << 2) + 0xff620000)
+#define   RV_AI_Y_X                                (0x0e09)
+#define P_RV_AI_Y_X                                (volatile unsigned int *)((0x0e09  << 2) + 0xff620000)
+#define   RV_AI_U_X                                (0x0e0a)
+#define P_RV_AI_U_X                                (volatile unsigned int *)((0x0e0a  << 2) + 0xff620000)
+#define   RV_AI_V_X                                (0x0e0b)
+#define P_RV_AI_V_X                                (volatile unsigned int *)((0x0e0b  << 2) + 0xff620000)
+// bit 15:0 will count up when rv_ai_mb finished when non zero
+// and rv_ai_mb_finished_int will be generate when this is not zero
+#define   RV_AI_MB_COUNT                           (0x0e0c)
+#define P_RV_AI_MB_COUNT                           (volatile unsigned int *)((0x0e0c  << 2) + 0xff620000)
+// For H264 I in PB picture Use -- dma type : h264_next_intra_dma
+#define   NEXT_INTRA_DMA_ADDRESS                   (0x0e0d)
+#define P_NEXT_INTRA_DMA_ADDRESS                   (volatile unsigned int *)((0x0e0d  << 2) + 0xff620000)
+// Bit 16 -- dcac_dma_read_cache_disable
+// Bit 15 -- dcac_dma_urgent
+// Bit 14 -- nv21_swap
+// Bit 13 -- nv21_top_dma
+// Bit 12 -- reset_rv_ai_wait_rd_data
+// Bit 11 -- set_rv_ai_wait_rd_data [12:11] = 3 means only dec 1 (For Skipped MB of MBAFF)
+// Bit 10 -- rv_ai_wait_rd_data (Read Only)
+// Bit 9 -- enable_rv_ai_wait_rd_data
+// Bit 8 -- disable_vc1_mv_update
+// Bit 7 -- pred_dc_signed
+// Bit 6 -- inc_vld_ready_count
+// Bit 5 -- dec_vld_ready_count
+// Bit 4 -- disable_ref_bidir_fix
+// Bit 3 -- disable_MV_UL_l1_bot_fix
+// Bit 2 -- disable_mb_aff_fix
+// Bit 1 -- canvas_addr_7
+// Bit 0 -- constrained_intra_pred_flag for H264
+#define   IQIDCT_CONTROL                           (0x0e0e)
+#define P_IQIDCT_CONTROL                           (volatile unsigned int *)((0x0e0e  << 2) + 0xff620000)
+// Bit[31:19] Reserved
+// Bit[18] iq_waiting
+// Bit[17] iq_om_wr_idx
+// Bit[16] iq_om_rd_idx
+// Bit[15] iq_om_busy
+// Bit[14] iq_om_2_busy
+// Bit[13] idx_fifo_0
+// Bit[12] idx_fifo_1
+// Bit[11] idx_fifo_2
+// Bit[10] idx_fifo_3
+// Bit[9] idx_fifo_4
+// Bit[8] idx_fifo_5
+// Bit[7] idx_fifo_6
+// Bit[6] idx_fifo_7
+// Bit[5:3] idx_fifo_wp
+// Bit[2:0] idx_fifo_rp
+#define   IQIDCT_DEBUG_INFO_0                      (0x0e0f)
+#define P_IQIDCT_DEBUG_INFO_0                      (volatile unsigned int *)((0x0e0f  << 2) + 0xff620000)
+// For RTL Simulation Only
+#define   DEBLK_CMD                                (0x0e10)
+#define P_DEBLK_CMD                                (volatile unsigned int *)((0x0e10  << 2) + 0xff620000)
+// Bit[15+16] ds_mc_valid_2
+// Bit[14+16] new_idct1_rd_idx_2
+// Bit[13+16] new_idct1_wr_idx_2
+// Bit[12+16] idct1_buff0_busy_2
+// Bit[11+16] idct1_buff1_busy_2
+// Bit[10+16] new_idct1_busy_2
+// Bit[9+16] iq_om_8val_2
+// Bit[8+16] idct1_pipe_busy_2
+// Bit[7+16] wait_mb_left_finish_hold_2
+// Bit[6+16] new_idct2_rd_idx_2
+// Bit[5+16] new_idct2_wr_idx_2
+// Bit[4+16] idct2_buff0_busy_2
+// Bit[3+16] idct2_buff1_busy_2
+// Bit[2+16] idct2_en_2
+// Bit[1+16] new_idct2_busy_2
+// Bit[0+16] new_idct1_ready_2
+// Bit[15] ds_mc_valid_1
+// Bit[14] new_idct1_rd_idx_1
+// Bit[13] new_idct1_wr_idx_1
+// Bit[12] idct1_buff0_busy_1
+// Bit[11] idct1_buff1_busy_1
+// Bit[10] new_idct1_busy_1
+// Bit[9] iq_om_8val_1
+// Bit[8] idct1_pipe_busy_1
+// Bit[7] wait_mb_left_finish_hold_1
+// Bit[6] new_idct2_rd_idx_1
+// Bit[5] new_idct2_wr_idx_1
+// Bit[4] idct2_buff0_busy_1
+// Bit[3] idct2_buff1_busy_1
+// Bit[2] idct2_en_1
+// Bit[1] new_idct2_busy_1
+// Bit[0] new_idct1_ready_1
+#define   IQIDCT_DEBUG_IDCT                        (0x0e11)
+#define P_IQIDCT_DEBUG_IDCT                        (volatile unsigned int *)((0x0e11  << 2) + 0xff620000)
+// bit 31 -- convas_enable
+// bit 30:24 -- convas_x_count ( 8 pixels / 64 bits )
+// bit 23:16 -- convas_y_count
+// bit 15   -- dcac_dma_busy
+// bit 14   -- dcac_dma_read_cache_active
+// bit 13:8 -- dcac_dma_count
+// bit 7    -- dcac_dma_rw
+// bit 6    -- dcac_skip_read_mode
+// bit 5:0  -- dcac_dma_offset
+#define   DCAC_DMA_CTRL                            (0x0e12)
+#define P_DCAC_DMA_CTRL                            (volatile unsigned int *)((0x0e12  << 2) + 0xff620000)
+// when (convas_enable == 0 )
+//   bit 31:0 dcac_dma_addr
+// when (convas_enable == 1 )
+//   bit 31:25 canvas_addr (7 bits)
+//   bit 24:12 convas_y_start ( 13 btis )
+//   bit 11:0  convas_x_start ( 12 btis )
+#define   DCAC_DMA_ADDRESS                         (0x0e13)
+#define P_DCAC_DMA_ADDRESS                         (volatile unsigned int *)((0x0e13  << 2) + 0xff620000)
+// bit 7:0 -- dcac_cpu_addr
+#define   DCAC_CPU_ADDRESS                         (0x0e14)
+#define P_DCAC_CPU_ADDRESS                         (volatile unsigned int *)((0x0e14  << 2) + 0xff620000)
+// bit 31:0 -- dcac_cpu_data
+#define   DCAC_CPU_DATA                            (0x0e15)
+#define P_DCAC_CPU_DATA                            (volatile unsigned int *)((0x0e15  << 2) + 0xff620000)
+// bit 31:19 -- reserved
+// bit 18:16 -- block_num_reg -- Read-Only
+// bit 15:0 -- dcac_mb_count
+#define   DCAC_MB_COUNT                            (0x0e16)
+#define P_DCAC_MB_COUNT                            (volatile unsigned int *)((0x0e16  << 2) + 0xff620000)
+// bit 31:18 -- reserved
+// For H264 :
+//   bit 17:2 -- h264_quant
+//   bit 11:6 -- h264_quant_c
+//   bit  5:0 -- h264_quant_c
+// For VC1 :
+//   bit    17 -- qindex_GT_8
+//   bit    16 -- HalfQPStep
+//   bit 15:12 -- eQuantMode
+//   bit 11:6  -- AltPQuant
+//   bit  5:0  -- PQuant
+//
+#define   IQ_QUANT                                 (0x0e17)
+#define P_IQ_QUANT                                 (volatile unsigned int *)((0x0e17  << 2) + 0xff620000)
+// bit 31:24  -- bitplane_width
+// bit 23:16  -- bitplane_height
+// bit 15:14  -- bitplane_start_x
+// bit 13:12  -- bitplane_start_y
+// bit 11:4   -- reserved
+// bit 3:1    -- bitplane_type
+// bit 0      -- bitplane_busy
+#define   VC1_BITPLANE_CTL                         (0x0e18)
+#define P_VC1_BITPLANE_CTL                         (volatile unsigned int *)((0x0e18  << 2) + 0xff620000)
+// bit 24:16  -- wq_param1
+// bit  8: 0  -- wq_param0
+#define   AVSP_IQ_WQ_PARAM_01                      (0x0e19)
+#define P_AVSP_IQ_WQ_PARAM_01                      (volatile unsigned int *)((0x0e19  << 2) + 0xff620000)
+// bit 24:16  -- wq_param3
+// bit  8: 0  -- wq_param2
+#define   AVSP_IQ_WQ_PARAM_23                      (0x0e1a)
+#define P_AVSP_IQ_WQ_PARAM_23                      (volatile unsigned int *)((0x0e1a  << 2) + 0xff620000)
+// bit 24:16  -- wq_param5
+// bit  8: 0  -- wq_param4
+#define   AVSP_IQ_WQ_PARAM_45                      (0x0e1b)
+#define P_AVSP_IQ_WQ_PARAM_45                      (volatile unsigned int *)((0x0e1b  << 2) + 0xff620000)
+// bit    31  -- weight_quant_en
+// bit 17:16  -- current_scene_model
+// bit 12: 8  -- chroma_qp_delta_cr
+// bit  4: 0  -- chroma_qp_delta_cb
+#define   AVSP_IQ_CTL                              (0x0e1c)
+#define P_AVSP_IQ_CTL                              (volatile unsigned int *)((0x0e1c  << 2) + 0xff620000)
+    #define RAM_TEST_CMD        0x002
+    #define RAM_TEST_ADDR       0x003
+    #define RAM_TEST_DATAH      0x004
+    #define RAM_TEST_DATAL      0x005
+
+    #define RAM_TEST_RD_CMD	    0x0000
+    #define RAM_TEST_WR_CMD	    0x8000
+    #define IDCT_TM2_PT0	    0x0001
+    #define IDCT_TM2_PT1	    0x0002
+    #define IDCT_TM1_PT0	    0x0004
+    #define IDCT_TM1_PT1	    0x0008
+    #define IQ_OMEM_PT0	        0x0010
+    #define IQ_OMEM_PT1	        0x0020
+    #define MC_IMEM_PT0	        0x0040
+    #define ALL_RAM_PTS	        0x007f
+//======================================
+//  VCOP Control Register Bits
+//
+//======================================
+    //`define IQIDCT_RESET	    16'h0001	    // Bit 0
+    #define QM_WEN		    0x0002	    // Bit 1
+    #define IQIDCT_ENABLE	    0x0004	    // Bit 2
+    #define INTRA_QM	    0x0008	    // Bit 3	0 = Use default; 1 = use loaded
+    #define NINTRA_QM	    0x0010	    // Bit 4	0 = Use default; 1 = use loaded
+//======================================
+//  QP Control Register Bits
+//
+//======================================
+    #define INTRA_MODE	    0x0080	    // Bit 7
+// Duplicate Address:  When actually used
+// please move to a different address
+// `define FLD_DCT_TYPE	    16'h0100	    // Bit 8	0 = Frame DCT; 1 = field DCT
+//
+// Closing file:  iqidct_regs.h
+//
+//------------------------------------------------------------------------------
+// VCPU module level register offset
+//------------------------------------------------------------------------------
+//
+// Reading file:  vcpu_regs.h
+//
+//========================================================================
+//  VCPU module level register offset
+//========================================================================
+// -----------------------------------------------
+// CBUS_BASE:  DOS_VDEC_VCPU_CBUS_BASE = 0x03
+// -----------------------------------------------
+#define   MSP                                      (0x0300)
+#define P_MSP                                      (volatile unsigned int *)((0x0300  << 2) + 0xff620000)
+#define   MPSR                                     (0x0301)
+#define P_MPSR                                     (volatile unsigned int *)((0x0301  << 2) + 0xff620000)
+#define   MINT_VEC_BASE                            (0x0302)
+#define P_MINT_VEC_BASE                            (volatile unsigned int *)((0x0302  << 2) + 0xff620000)
+#define   MCPU_INTR_GRP                            (0x0303)
+#define P_MCPU_INTR_GRP                            (volatile unsigned int *)((0x0303  << 2) + 0xff620000)
+#define   MCPU_INTR_MSK                            (0x0304)
+#define P_MCPU_INTR_MSK                            (volatile unsigned int *)((0x0304  << 2) + 0xff620000)
+#define   MCPU_INTR_REQ                            (0x0305)
+#define P_MCPU_INTR_REQ                            (volatile unsigned int *)((0x0305  << 2) + 0xff620000)
+#define   MPC_P                                    (0x0306)
+#define P_MPC_P                                    (volatile unsigned int *)((0x0306  << 2) + 0xff620000)
+#define   MPC_D                                    (0x0307)
+#define P_MPC_D                                    (volatile unsigned int *)((0x0307  << 2) + 0xff620000)
+#define   MPC_E                                    (0x0308)
+#define P_MPC_E                                    (volatile unsigned int *)((0x0308  << 2) + 0xff620000)
+#define   MPC_W                                    (0x0309)
+#define P_MPC_W                                    (volatile unsigned int *)((0x0309  << 2) + 0xff620000)
+#define   MINDEX0_REG                              (0x030a)
+#define P_MINDEX0_REG                              (volatile unsigned int *)((0x030a  << 2) + 0xff620000)
+#define   MINDEX1_REG                              (0x030b)
+#define P_MINDEX1_REG                              (volatile unsigned int *)((0x030b  << 2) + 0xff620000)
+#define   MINDEX2_REG                              (0x030c)
+#define P_MINDEX2_REG                              (volatile unsigned int *)((0x030c  << 2) + 0xff620000)
+#define   MINDEX3_REG                              (0x030d)
+#define P_MINDEX3_REG                              (volatile unsigned int *)((0x030d  << 2) + 0xff620000)
+#define   MINDEX4_REG                              (0x030e)
+#define P_MINDEX4_REG                              (volatile unsigned int *)((0x030e  << 2) + 0xff620000)
+#define   MINDEX5_REG                              (0x030f)
+#define P_MINDEX5_REG                              (volatile unsigned int *)((0x030f  << 2) + 0xff620000)
+#define   MINDEX6_REG                              (0x0310)
+#define P_MINDEX6_REG                              (volatile unsigned int *)((0x0310  << 2) + 0xff620000)
+#define   MINDEX7_REG                              (0x0311)
+#define P_MINDEX7_REG                              (volatile unsigned int *)((0x0311  << 2) + 0xff620000)
+#define   MMIN_REG                                 (0x0312)
+#define P_MMIN_REG                                 (volatile unsigned int *)((0x0312  << 2) + 0xff620000)
+#define   MMAX_REG                                 (0x0313)
+#define P_MMAX_REG                                 (volatile unsigned int *)((0x0313  << 2) + 0xff620000)
+#define   MBREAK0_REG                              (0x0314)
+#define P_MBREAK0_REG                              (volatile unsigned int *)((0x0314  << 2) + 0xff620000)
+#define   MBREAK1_REG                              (0x0315)
+#define P_MBREAK1_REG                              (volatile unsigned int *)((0x0315  << 2) + 0xff620000)
+#define   MBREAK2_REG                              (0x0316)
+#define P_MBREAK2_REG                              (volatile unsigned int *)((0x0316  << 2) + 0xff620000)
+#define   MBREAK3_REG                              (0x0317)
+#define P_MBREAK3_REG                              (volatile unsigned int *)((0x0317  << 2) + 0xff620000)
+#define   MBREAK_TYPE                              (0x0318)
+#define P_MBREAK_TYPE                              (volatile unsigned int *)((0x0318  << 2) + 0xff620000)
+#define   MBREAK_CTRL                              (0x0319)
+#define P_MBREAK_CTRL                              (volatile unsigned int *)((0x0319  << 2) + 0xff620000)
+#define   MBREAK_STAUTS                            (0x031a)
+#define P_MBREAK_STAUTS                            (volatile unsigned int *)((0x031a  << 2) + 0xff620000)
+#define   MDB_ADDR_REG                             (0x031b)
+#define P_MDB_ADDR_REG                             (volatile unsigned int *)((0x031b  << 2) + 0xff620000)
+#define   MDB_DATA_REG                             (0x031c)
+#define P_MDB_DATA_REG                             (volatile unsigned int *)((0x031c  << 2) + 0xff620000)
+#define   MDB_CTRL                                 (0x031d)
+#define P_MDB_CTRL                                 (volatile unsigned int *)((0x031d  << 2) + 0xff620000)
+#define   MSFTINT0                                 (0x031e)
+#define P_MSFTINT0                                 (volatile unsigned int *)((0x031e  << 2) + 0xff620000)
+#define   MSFTINT1                                 (0x031f)
+#define P_MSFTINT1                                 (volatile unsigned int *)((0x031f  << 2) + 0xff620000)
+#define   CSP                                      (0x0320)
+#define P_CSP                                      (volatile unsigned int *)((0x0320  << 2) + 0xff620000)
+#define   CPSR                                     (0x0321)
+#define P_CPSR                                     (volatile unsigned int *)((0x0321  << 2) + 0xff620000)
+#define   CINT_VEC_BASE                            (0x0322)
+#define P_CINT_VEC_BASE                            (volatile unsigned int *)((0x0322  << 2) + 0xff620000)
+#define   CCPU_INTR_GRP                            (0x0323)
+#define P_CCPU_INTR_GRP                            (volatile unsigned int *)((0x0323  << 2) + 0xff620000)
+#define   CCPU_INTR_MSK                            (0x0324)
+#define P_CCPU_INTR_MSK                            (volatile unsigned int *)((0x0324  << 2) + 0xff620000)
+#define   CCPU_INTR_REQ                            (0x0325)
+#define P_CCPU_INTR_REQ                            (volatile unsigned int *)((0x0325  << 2) + 0xff620000)
+#define   CPC_P                                    (0x0326)
+#define P_CPC_P                                    (volatile unsigned int *)((0x0326  << 2) + 0xff620000)
+#define   CPC_D                                    (0x0327)
+#define P_CPC_D                                    (volatile unsigned int *)((0x0327  << 2) + 0xff620000)
+#define   CPC_E                                    (0x0328)
+#define P_CPC_E                                    (volatile unsigned int *)((0x0328  << 2) + 0xff620000)
+#define   CPC_W                                    (0x0329)
+#define P_CPC_W                                    (volatile unsigned int *)((0x0329  << 2) + 0xff620000)
+#define   CINDEX0_REG                              (0x032a)
+#define P_CINDEX0_REG                              (volatile unsigned int *)((0x032a  << 2) + 0xff620000)
+#define   CINDEX1_REG                              (0x032b)
+#define P_CINDEX1_REG                              (volatile unsigned int *)((0x032b  << 2) + 0xff620000)
+#define   CINDEX2_REG                              (0x032c)
+#define P_CINDEX2_REG                              (volatile unsigned int *)((0x032c  << 2) + 0xff620000)
+#define   CINDEX3_REG                              (0x032d)
+#define P_CINDEX3_REG                              (volatile unsigned int *)((0x032d  << 2) + 0xff620000)
+#define   CINDEX4_REG                              (0x032e)
+#define P_CINDEX4_REG                              (volatile unsigned int *)((0x032e  << 2) + 0xff620000)
+#define   CINDEX5_REG                              (0x032f)
+#define P_CINDEX5_REG                              (volatile unsigned int *)((0x032f  << 2) + 0xff620000)
+#define   CINDEX6_REG                              (0x0330)
+#define P_CINDEX6_REG                              (volatile unsigned int *)((0x0330  << 2) + 0xff620000)
+#define   CINDEX7_REG                              (0x0331)
+#define P_CINDEX7_REG                              (volatile unsigned int *)((0x0331  << 2) + 0xff620000)
+#define   CMIN_REG                                 (0x0332)
+#define P_CMIN_REG                                 (volatile unsigned int *)((0x0332  << 2) + 0xff620000)
+#define   CMAX_REG                                 (0x0333)
+#define P_CMAX_REG                                 (volatile unsigned int *)((0x0333  << 2) + 0xff620000)
+#define   CBREAK0_REG                              (0x0334)
+#define P_CBREAK0_REG                              (volatile unsigned int *)((0x0334  << 2) + 0xff620000)
+#define   CBREAK1_REG                              (0x0335)
+#define P_CBREAK1_REG                              (volatile unsigned int *)((0x0335  << 2) + 0xff620000)
+#define   CBREAK2_REG                              (0x0336)
+#define P_CBREAK2_REG                              (volatile unsigned int *)((0x0336  << 2) + 0xff620000)
+#define   CBREAK3_REG                              (0x0337)
+#define P_CBREAK3_REG                              (volatile unsigned int *)((0x0337  << 2) + 0xff620000)
+#define   CBREAK_TYPE                              (0x0338)
+#define P_CBREAK_TYPE                              (volatile unsigned int *)((0x0338  << 2) + 0xff620000)
+#define   CBREAK_CTRL                              (0x0339)
+#define P_CBREAK_CTRL                              (volatile unsigned int *)((0x0339  << 2) + 0xff620000)
+#define   CBREAK_STAUTS                            (0x033a)
+#define P_CBREAK_STAUTS                            (volatile unsigned int *)((0x033a  << 2) + 0xff620000)
+#define   CDB_ADDR_REG                             (0x033b)
+#define P_CDB_ADDR_REG                             (volatile unsigned int *)((0x033b  << 2) + 0xff620000)
+#define   CDB_DATA_REG                             (0x033c)
+#define P_CDB_DATA_REG                             (volatile unsigned int *)((0x033c  << 2) + 0xff620000)
+#define   CDB_CTRL                                 (0x033d)
+#define P_CDB_CTRL                                 (volatile unsigned int *)((0x033d  << 2) + 0xff620000)
+#define   CSFTINT0                                 (0x033e)
+#define P_CSFTINT0                                 (volatile unsigned int *)((0x033e  << 2) + 0xff620000)
+#define   CSFTINT1                                 (0x033f)
+#define P_CSFTINT1                                 (volatile unsigned int *)((0x033f  << 2) + 0xff620000)
+#define   IMEM_DMA_CTRL                            (0x0340)
+#define P_IMEM_DMA_CTRL                            (volatile unsigned int *)((0x0340  << 2) + 0xff620000)
+#define   IMEM_DMA_ADR                             (0x0341)
+#define P_IMEM_DMA_ADR                             (volatile unsigned int *)((0x0341  << 2) + 0xff620000)
+#define   IMEM_DMA_COUNT                           (0x0342)
+#define P_IMEM_DMA_COUNT                           (volatile unsigned int *)((0x0342  << 2) + 0xff620000)
+// bit[29:24] A_brst_num_imem
+// bit[21:16] A_id_imem
+// bit[11:0] wrrsp_count_imem (reserved)
+#define   WRRSP_IMEM                               (0x0343)
+#define P_WRRSP_IMEM                               (volatile unsigned int *)((0x0343  << 2) + 0xff620000)
+#define   LMEM_DMA_CTRL                            (0x0350)
+#define P_LMEM_DMA_CTRL                            (volatile unsigned int *)((0x0350  << 2) + 0xff620000)
+#define   LMEM_DMA_ADR                             (0x0351)
+#define P_LMEM_DMA_ADR                             (volatile unsigned int *)((0x0351  << 2) + 0xff620000)
+#define   LMEM_DMA_COUNT                           (0x0352)
+#define P_LMEM_DMA_COUNT                           (volatile unsigned int *)((0x0352  << 2) + 0xff620000)
+// bit[29:24] A_brst_num_lmem
+// bit[21:16] A_id_lmem
+// bit[11:0] wrrsp_count_lmem
+#define   WRRSP_LMEM                               (0x0353)
+#define P_WRRSP_LMEM                               (volatile unsigned int *)((0x0353  << 2) + 0xff620000)
+#define   MAC_CTRL1                                (0x0360)
+#define P_MAC_CTRL1                                (volatile unsigned int *)((0x0360  << 2) + 0xff620000)
+#define   ACC0REG1                                 (0x0361)
+#define P_ACC0REG1                                 (volatile unsigned int *)((0x0361  << 2) + 0xff620000)
+#define   ACC1REG1                                 (0x0362)
+#define P_ACC1REG1                                 (volatile unsigned int *)((0x0362  << 2) + 0xff620000)
+#define   MAC_CTRL2                                (0x0370)
+#define P_MAC_CTRL2                                (volatile unsigned int *)((0x0370  << 2) + 0xff620000)
+#define   ACC0REG2                                 (0x0371)
+#define P_ACC0REG2                                 (volatile unsigned int *)((0x0371  << 2) + 0xff620000)
+#define   ACC1REG2                                 (0x0372)
+#define P_ACC1REG2                                 (volatile unsigned int *)((0x0372  << 2) + 0xff620000)
+#define   CPU_TRACE                                (0x0380)
+#define P_CPU_TRACE                                (volatile unsigned int *)((0x0380  << 2) + 0xff620000)
+//
+// Closing file:  vcpu_regs.h
+//
+//------------------------------------------------------------------------------
+// HENC module level register offset
+//------------------------------------------------------------------------------
+//
+// Reading file:  henc_regs.h
+//
+//========================================================================
+//  MDEC module level register offset
+//========================================================================
+// -----------------------------------------------
+// CBUS_BASE:  DOS_HCODEC_HENC_CBUS_BASE = 0x0a
+// -----------------------------------------------
+#define   HENC_SCRATCH_0                           (0x1ac0)
+#define P_HENC_SCRATCH_0                           (volatile unsigned int *)((0x1ac0  << 2) + 0xff620000)
+#define   HENC_SCRATCH_1                           (0x1ac1)
+#define P_HENC_SCRATCH_1                           (volatile unsigned int *)((0x1ac1  << 2) + 0xff620000)
+#define   HENC_SCRATCH_2                           (0x1ac2)
+#define P_HENC_SCRATCH_2                           (volatile unsigned int *)((0x1ac2  << 2) + 0xff620000)
+#define   HENC_SCRATCH_3                           (0x1ac3)
+#define P_HENC_SCRATCH_3                           (volatile unsigned int *)((0x1ac3  << 2) + 0xff620000)
+#define   HENC_SCRATCH_4                           (0x1ac4)
+#define P_HENC_SCRATCH_4                           (volatile unsigned int *)((0x1ac4  << 2) + 0xff620000)
+#define   HENC_SCRATCH_5                           (0x1ac5)
+#define P_HENC_SCRATCH_5                           (volatile unsigned int *)((0x1ac5  << 2) + 0xff620000)
+#define   HENC_SCRATCH_6                           (0x1ac6)
+#define P_HENC_SCRATCH_6                           (volatile unsigned int *)((0x1ac6  << 2) + 0xff620000)
+#define   HENC_SCRATCH_7                           (0x1ac7)
+#define P_HENC_SCRATCH_7                           (volatile unsigned int *)((0x1ac7  << 2) + 0xff620000)
+#define   HENC_SCRATCH_8                           (0x1ac8)
+#define P_HENC_SCRATCH_8                           (volatile unsigned int *)((0x1ac8  << 2) + 0xff620000)
+#define   HENC_SCRATCH_9                           (0x1ac9)
+#define P_HENC_SCRATCH_9                           (volatile unsigned int *)((0x1ac9  << 2) + 0xff620000)
+#define   HENC_SCRATCH_A                           (0x1aca)
+#define P_HENC_SCRATCH_A                           (volatile unsigned int *)((0x1aca  << 2) + 0xff620000)
+#define   HENC_SCRATCH_B                           (0x1acb)
+#define P_HENC_SCRATCH_B                           (volatile unsigned int *)((0x1acb  << 2) + 0xff620000)
+#define   HENC_SCRATCH_C                           (0x1acc)
+#define P_HENC_SCRATCH_C                           (volatile unsigned int *)((0x1acc  << 2) + 0xff620000)
+#define   HENC_SCRATCH_D                           (0x1acd)
+#define P_HENC_SCRATCH_D                           (volatile unsigned int *)((0x1acd  << 2) + 0xff620000)
+#define   HENC_SCRATCH_E                           (0x1ace)
+#define P_HENC_SCRATCH_E                           (volatile unsigned int *)((0x1ace  << 2) + 0xff620000)
+#define   HENC_SCRATCH_F                           (0x1acf)
+#define P_HENC_SCRATCH_F                           (volatile unsigned int *)((0x1acf  << 2) + 0xff620000)
+#define   HENC_SCRATCH_G                           (0x1ad0)
+#define P_HENC_SCRATCH_G                           (volatile unsigned int *)((0x1ad0  << 2) + 0xff620000)
+#define   HENC_SCRATCH_H                           (0x1ad1)
+#define P_HENC_SCRATCH_H                           (volatile unsigned int *)((0x1ad1  << 2) + 0xff620000)
+#define   HENC_SCRATCH_I                           (0x1ad2)
+#define P_HENC_SCRATCH_I                           (volatile unsigned int *)((0x1ad2  << 2) + 0xff620000)
+#define   HENC_SCRATCH_J                           (0x1ad3)
+#define P_HENC_SCRATCH_J                           (volatile unsigned int *)((0x1ad3  << 2) + 0xff620000)
+#define   HENC_SCRATCH_K                           (0x1ad4)
+#define P_HENC_SCRATCH_K                           (volatile unsigned int *)((0x1ad4  << 2) + 0xff620000)
+#define   HENC_SCRATCH_L                           (0x1ad5)
+#define P_HENC_SCRATCH_L                           (volatile unsigned int *)((0x1ad5  << 2) + 0xff620000)
+#define   HENC_SCRATCH_M                           (0x1ad6)
+#define P_HENC_SCRATCH_M                           (volatile unsigned int *)((0x1ad6  << 2) + 0xff620000)
+#define   HENC_SCRATCH_N                           (0x1ad7)
+#define P_HENC_SCRATCH_N                           (volatile unsigned int *)((0x1ad7  << 2) + 0xff620000)
+// bit [7:0] data_feed_buff_id
+#define   IE_DATA_FEED_BUFF_INFO                   (0x1ad8)
+#define P_IE_DATA_FEED_BUFF_INFO                   (volatile unsigned int *)((0x1ad8  << 2) + 0xff620000)
+//
+// Closing file:  henc_regs.h
+//
+//------------------------------------------------------------------------------
+// VLC module level register offset
+//------------------------------------------------------------------------------
+//
+// Reading file:  vlc_regs.h
+//
+//========================================================================
+//  VLC module level register offset
+//========================================================================
+// -----------------------------------------------
+// CBUS_BASE:  DOS_HCODEC_VLC_CBUS_BASE = 0x0d
+// -----------------------------------------------
+// Bit[31:28] - henc_status
+// Bit[27:8] - reserved
+// Bit[7]    mc_hcmd_buff_enable
+// Bit[6]    mc_hcmd_use_mc_hcmd_buff
+// Bit[5]    mc_hcmd_use_mc_hcmd_hw_start
+// Bit[4]    no_mc_out_null_non_skipped_mb
+// Bit[3]    mc_out_even_skipped_mb
+// Bit[2] - hcmd_enable
+// Bit[1] - vlc_control_enable (0 will treat as soft_reset)
+// Bit[0] - vlc_input_enable (enable input interface)
+#define   VLC_STATUS_CTRL                          (0x1d00)
+#define P_VLC_STATUS_CTRL                          (volatile unsigned int *)((0x1d00  << 2) + 0xff620000)
+// Bit [31]  - small_luma_ignore_chroma
+// Bit[30:16] - Reserved
+// Bit [15]  - enable_free_clk_mc_hcmd_buff
+// Bit [14]  - enable_free_clk_reg
+// Bit [13]  - enable_free_clk_stream
+// Bit [12]  - enable_free_clk_pre_buff
+// Bit [11]  - enable_free_clk_vb_buff
+// Bit [10]  - enable_free_clk_dc_input
+// Bit [9]   - enable_free_clk_input
+// Bit [8]   - enable_free_clk_mv_cal
+// Bit [7]   - enable_free_clk_status
+// Bit [6]   - enable_free_clk_mc_dblk_cmd_if
+// Bit [5]   - disable_mvd_enc_finished
+// Bit [4]   - I16MB_share_ipred_mode_with_I4MB
+// Bit [3]   - fixed_picture_qp
+// Bit [2]   - use_set_b8_mode ( not used now)
+// Bit [1]   - use_set_mb_skip_run
+// Bit [0]   - pop_coeff_even_all_zero
+#define   VLC_CONFIG                               (0x1d01)
+#define P_VLC_CONFIG                               (volatile unsigned int *)((0x1d01  << 2) + 0xff620000)
+// --------------------------------------------
+// Bitstream DDR Interface
+// --------------------------------------------
+#define   VLC_VB_START_PTR                         (0x1d10)
+#define P_VLC_VB_START_PTR                         (volatile unsigned int *)((0x1d10  << 2) + 0xff620000)
+#define   VLC_VB_END_PTR                           (0x1d11)
+#define P_VLC_VB_END_PTR                           (volatile unsigned int *)((0x1d11  << 2) + 0xff620000)
+#define   VLC_VB_WR_PTR                            (0x1d12)
+#define P_VLC_VB_WR_PTR                            (volatile unsigned int *)((0x1d12  << 2) + 0xff620000)
+// Read Only, VLC_VB_SW_RD_PTR or VLC_VB_HW_RD_PTR
+#define   VLC_VB_RD_PTR                            (0x1d13)
+#define P_VLC_VB_RD_PTR                            (volatile unsigned int *)((0x1d13  << 2) + 0xff620000)
+#define   VLC_VB_SW_RD_PTR                         (0x1d14)
+#define P_VLC_VB_SW_RD_PTR                         (volatile unsigned int *)((0x1d14  << 2) + 0xff620000)
+// Read Only
+#define   VLC_VB_LEFT                              (0x1d15)
+#define P_VLC_VB_LEFT                              (volatile unsigned int *)((0x1d15  << 2) + 0xff620000)
+// VB FIFO Control
+// bit  [31:24] vb_full_int_enable_cpu[7:0]
+// bit  [23:16] vb_full_int_enable_amrisc[7:0]
+//   -bit 23 Video BUFFER LEFT < 0x400 Bytes
+//   -bit 22 Video BUFFER LEFT < 0x200 Bytes
+//   -bit 21 Video BUFFER LEFT < 0x100 Bytes
+//   -bit 20 Video BUFFER LEFT < 0x80 Bytes
+//   -bit 19 Video BUFFER LEFT < 0x40 Bytes
+//   -bit 18 Video BUFFER LEFT < 0x20 Bytes
+//   -bit 17 vbfifo left  < 16 double words (8x64bits)
+//   -bit 16 vbfifo left  < 8 double words (4x64bits)
+// bit  [15]    wr_ptr_int_enable_cpu
+// bit  [14]    wr_ptr_int_enable_amrisc
+// bit  [13]    wr_ptr_int (Read Only, write 1 will clear)
+// bit  [12]    vb_full_int_enable_cpu(Read Only)
+// bit  [11]    vb_full_int_enable_amrisc(Read Only)
+// bit  [10]    reserved
+// bit  [9]     use_vb_hw_rd_ptr
+// bit  [8]     vb_always_ready Set to 1 to ignore vb_level blocking DDR write
+// bit  [7]     vb_ready_for_transfer (Read Only)
+// bit  [6]     data_ready_for_transfer (Read Only)
+// bits [5:3]   vb_endian       Set VB Endian inside DDR memory
+// bit  [2]     vb_write_busy   Read Only - indicate DDR write busy
+// bit  [1]     vb_write_en     Set to 1 to enable writing data to DDR memory
+// bit  [0]     vb_soft_reset   Soft reset
+#define   VLC_VB_CONTROL                           (0x1d16)
+#define P_VLC_VB_CONTROL                           (volatile unsigned int *)((0x1d16  << 2) + 0xff620000)
+// bit 31    transfer_length 0 - 32x64 Bits per request, 1 - 16x64 Bits per request  // default : 0
+// bit 30    A_urgent  // default : 0
+// bit 29:24 A_brst_num // default : 0x3f
+// bit 23:22 reserved
+// bit 21:16 A_id  // default : 0x20
+// bit 15:0  vb_left_hold // default : 0
+#define   VLC_VB_MEM_CTL                           (0x1d17)
+#define P_VLC_VB_MEM_CTL                           (volatile unsigned int *)((0x1d17  << 2) + 0xff620000)
+// vb_wr_ptr address to generate interrupt
+#define   VLC_VB_INT_PTR                           (0x1d18)
+#define P_VLC_VB_INT_PTR                           (volatile unsigned int *)((0x1d18  << 2) + 0xff620000)
+// bit[31:12] reserved
+// bit[11:0] vlc_wrrsp_count
+#define   VLC_WRRSP                                (0x1d19)
+#define P_VLC_WRRSP                                (volatile unsigned int *)((0x1d19  << 2) + 0xff620000)
+#define   VLC_TOTAL_BYTES                          (0x1d1a)
+#define P_VLC_TOTAL_BYTES                          (volatile unsigned int *)((0x1d1a  << 2) + 0xff620000)
+// bit  [31:26] reserved
+// bit  [25]    vb_flush
+// bit  [24]    vb_reg_ready
+// bit  [23:16] vb_buff_left     -- Read only
+// bit  [15:8]  vb_buff_wr_point -- RW
+// bit  [7:0]   vb_buff_rd_point -- RW
+#define   VLC_VB_BUFF                              (0x1d1b)
+#define P_VLC_VB_BUFF                              (volatile unsigned int *)((0x1d1b  << 2) + 0xff620000)
+// bit[31]    flush_vlc_pre_buff
+// bit[30:27] reserved
+// bit[26:24] vb_pre_buff_level
+// bit[23:0]  vb_pre_buff_data[55:32]
+#define   VLC_VB_PRE_BUFF_HI                       (0x1d1c)
+#define P_VLC_VB_PRE_BUFF_HI                       (volatile unsigned int *)((0x1d1c  << 2) + 0xff620000)
+// bit[31:0] vb_pre_buff_data[31:0]
+#define   VLC_VB_PRE_BUFF_LOW                      (0x1d1d)
+#define P_VLC_VB_PRE_BUFF_LOW                      (volatile unsigned int *)((0x1d1d  << 2) + 0xff620000)
+// bit[31]    stream_encap_enable  // 0x0000(00-03) will be changed to 0x000003(00-03) if enabled
+// bit[30:29] stream_encap_delay   // delay bytes for encap used
+// bit[28:24] stream_buff_point
+// bit[23:0]  stream_buff_data
+#define   VLC_STREAM_BUFF                          (0x1d1e)
+#define P_VLC_STREAM_BUFF                          (volatile unsigned int *)((0x1d1e  << 2) + 0xff620000)
+// bit[31]    push_stream_block - Read Only (Will set if vb_buff full)
+// bit[30]    push_stream_busy  - Read Only (busy when output one byte from stream_buf (max 2 clocks for 8 bits push)
+// bit[29:28] stream_encap_status - Read Only
+// bit[27:21] reserved
+// Long Mode : (Amrisc need movilo and mvihi high to set stream_info)
+//   bit[20:16] push_stream_long_length (0 or 31 : Mid or Short mode)
+//   bit[15:0]  push_stream_data
+// Mid Mode : (Amrisc need movi to set stream_info)
+//   bit[15:12]] push_stream_mid_length (1-12 : mid mode active, 0-short mode, 15 - byte align)
+//   bit[11:0]  push_stream_data
+// Short Mode : (Amrisc can use mtspi to push stream directely)
+//   bit[7:5] push_stream_short_length (0-5 : short length, else - invalid)
+//   bit[4:0]  push_stream_data
+#define   VLC_PUSH_STREAM                          (0x1d1f)
+#define P_VLC_PUSH_STREAM                          (volatile unsigned int *)((0x1d1f  << 2) + 0xff620000)
+// bit[15:8] ELEMENT_LENGTH
+// bit[7:1]  reserved
+// bit[0]  Write - push start, Read - Push Busy
+#define   VLC_PUSH_ELEMENT                         (0x1d20)
+#define P_VLC_PUSH_ELEMENT                         (volatile unsigned int *)((0x1d20  << 2) + 0xff620000)
+#define   VLC_ELEMENT_DATA                         (0x1d21)
+#define P_VLC_ELEMENT_DATA                         (volatile unsigned int *)((0x1d21  << 2) + 0xff620000)
+// bit[7] hcmd_intra_use_sw_info
+// bit[6] hcmd_use_sw_info
+// bit[5] always_use_info_0_cbp_blk
+// bit[4] always_update_info_0_cbp_blk
+// bit[3] reset_left_mb_wr
+// bit[2] reset_top_mb_wr
+// bit[1] set_left_mb_wr
+// bit[0] set_top_mb_wr
+#define   VLC_SPECIAL_CTL                          (0x1d22)
+#define P_VLC_SPECIAL_CTL                          (volatile unsigned int *)((0x1d22  << 2) + 0xff620000)
+// bit[28]    left_intra
+// bit[27:22] left_quant
+// bit[21:16] left_quant_c
+// bit[12]    top_intra
+// bit[11:6]  top_quant
+// bit[5:0]   top_quant_c
+#define   VLC_HCMD_T_L_INFO                        (0x1d23)
+#define P_VLC_HCMD_T_L_INFO                        (volatile unsigned int *)((0x1d23  << 2) + 0xff620000)
+// bit[12]    cur_intra
+// bit[11:6]  cur_quant
+// bit[5:0]   cur_quant_c
+#define   VLC_HCMD_CUR_INFO                        (0x1d24)
+#define P_VLC_HCMD_CUR_INFO                        (volatile unsigned int *)((0x1d24  << 2) + 0xff620000)
+// bit[13]    top_left_info_in_data_mv_cal
+// bit[12]    only_use_info_0_top_left_in_I
+// bit[11]    top_left_info_in_data
+// bit[10]    early_mix_mc_hcmd
+// bit[9]     update_top_left_mix
+// bit[8]     p_top_left_mix
+// bit[7]     mv_cal_mixed_type
+// bit[6]     mc_hcmd_mixed_type
+// bit[5]     use_seperate_int_control
+// bit[4]     hcmd_intra_use_q_info
+// bit[3]     hcmd_left_use_prev_info
+// bit[2]     hcmd_use_q_info
+// bit[1]     use_q_delta_quant
+// bit[0]     detect_I16_from_I4
+#define   VLC_ADV_CONFIG                           (0x1d25)
+#define P_VLC_ADV_CONFIG                           (volatile unsigned int *)((0x1d25  << 2) + 0xff620000)
+//   31 - use_hcmd_mb_xy_auto
+//23:16 - hcmd_max_mb_x
+//15:8  - hcmd_mb_y_auto
+// 7:0  - hcmd_mb_x_auto
+#define   VLC_HCMD_MBXY_AUTO                       (0x1d26)
+#define P_VLC_HCMD_MBXY_AUTO                       (volatile unsigned int *)((0x1d26  << 2) + 0xff620000)
+// bit[31:0] vlc_int_control_inter -- will be used when use_seperate_int_control is set
+#define   VLC_INT_CONTROL_INTER                    (0x1d2f)
+#define P_VLC_INT_CONTROL_INTER                    (volatile unsigned int *)((0x1d2f  << 2) + 0xff620000)
+// --------------------------------------------
+// Picture VLC
+// --------------------------------------------
+// (&(int|(~AND_enable))|(|(int&OR_enable)))
+// bit[31]    OR interrupt Enable Reserved
+// bit[30]    OR interrupt Enable for mv_busy
+// bit[29]    OR interrupt Enable for b8_mode_busy
+// bit[28]    OR interrupt Enable for mb_skip_run_busy
+// bit[27]    OR interrupt Enable for cbp_busy
+// bit[26]    OR interrupt Enable for Reserved
+// bit[25]    OR interrupt Enable for Reserved
+// bit[24]    OR interrupt Enable for mb_info_busy
+// bit[23]    AND interrupt Enable Reserved
+// bit[22]    AND interrupt Enable for mv_busy
+// bit[21]    AND interrupt Enable for b8_mode_busy
+// bit[20]    AND interrupt Enable for mb_skip_run_busy
+// bit[19]    AND interrupt Enable for cbp_busy
+// bit[18]    AND interrupt Enable for Reserved
+// bit[17]    AND interrupt Enable for Reserved
+// bit[16]    AND interrupt Enable for mb_info_busy
+// bit[15]    OR interrupt Enable Reserved
+// bit[14]    OR interrupt Enable for mvd
+// bit[13]    OR interrupt Enable for b8_mode
+// bit[12]    OR interrupt Enable for mb_skip_run
+// bit[11]    OR interrupt Enable for cbp_ready
+// bit[10]    OR interrupt Enable for c_ipred_mode_ready
+// bit[9]     OR interrupt Enable for ipred_mode_ready
+// bit[8]     OR interrupt Enable for mb_info_ready
+// bit[7]     AND interrupt Enable Reserved
+// bit[6]     AND interrupt Enable for mvd
+// bit[5]     AND interrupt Enable for b8_mode
+// bit[4]     AND interrupt Enable for mb_skip_run
+// bit[3]     AND interrupt Enable for cbp_ready
+// bit[2]     AND interrupt Enable for c_ipred_mode_ready
+// bit[1]     AND interrupt Enable for ipred_mode_ready
+// bit[0]     AND interrupt Enable for mb_info_ready
+#define   VLC_INT_CONTROL                          (0x1d30)
+#define P_VLC_INT_CONTROL                          (volatile unsigned int *)((0x1d30  << 2) + 0xff620000)
+// Bit[31:16] picture_height
+// Bit[15:0]  picture_width
+#define   VLC_PIC_SIZE                             (0x1d31)
+#define P_VLC_PIC_SIZE                             (volatile unsigned int *)((0x1d31  << 2) + 0xff620000)
+// [31:16] Reserved
+// [15:3] pic_width_in_mbs_minus1
+// [2:0]  picture_type
+#define   VLC_PIC_INFO                             (0x1d32)
+#define P_VLC_PIC_INFO                             (volatile unsigned int *)((0x1d32  << 2) + 0xff620000)
+// Bit[31:16] MB_NR
+// Bit[15:8] MBY
+// Bit[7:0] MBX
+#define   VLC_PIC_POSITION                         (0x1d33)
+#define P_VLC_PIC_POSITION                         (volatile unsigned int *)((0x1d33  << 2) + 0xff620000)
+// Bit[31] MV_busy
+// Bit[30:6] Reserved
+// Bit[15] Reserved
+// Bit[14] vlc_input_MV_busy
+// Bit[13] vlc_input_b8_mode_busy
+// Bit[12] vlc_input_mb_skip_run_busy
+// Bit[11] vlc_input_cbp_busy
+// Bit[10] Reserved
+// Bit[9]  Reserved
+// Bit[8] vlc_input_mb_info_busy
+// Bit[7] Reserved
+// Bit[6] mvd
+// Bit[5] b8_mode
+// Bit[4] mb_skip_run
+// Bit[3] cbp
+// Bit[2] c_ipred_mode
+// Bit[1] ipred_mode
+// Bit[0] mb_info ( mb_type, mb_x, mb_y)
+#define   VLC_INPUT_STATUS                         (0x1d34)
+#define P_VLC_INPUT_STATUS                         (volatile unsigned int *)((0x1d34  << 2) + 0xff620000)
+// Bit[31:28] detected_mb_type
+// Bit[27:16] mb_y
+// Bit[15:4]  mb_x
+// Bit[3:0]   mb_type
+#define   VLC_MB_INFO                              (0x1d35)
+#define P_VLC_MB_INFO                              (volatile unsigned int *)((0x1d35  << 2) + 0xff620000)
+// commnad 0 -- no pending
+// normal command + 1 is pending command
+//
+// bit 31:28 -- pending command 7
+// bit 27:24 -- pending command 6
+// bit 23:20 -- pending command 5
+// bit 19:16 -- pending command 4
+// bit 15:12 -- pending command 3
+// bit 11:8  -- pending command 2
+// bit  7:4  -- pending command 1
+// bit  3:0  -- pending command 0
+#define   VLC_ENC_PEND_CMD                         (0x1d36)
+#define P_VLC_ENC_PEND_CMD                         (volatile unsigned int *)((0x1d36  << 2) + 0xff620000)
+// For I Slice
+// Bit[31:16] Reserved
+// Bit[15:0] IntraType
+#define   HENC_TOP_INFO_0                          (0x1d37)
+#define P_HENC_TOP_INFO_0                          (volatile unsigned int *)((0x1d37  << 2) + 0xff620000)
+#define   HENC_LEFT_INFO_0                         (0x1d38)
+#define P_HENC_LEFT_INFO_0                         (volatile unsigned int *)((0x1d38  << 2) + 0xff620000)
+// For I Slice
+// Bit[31:24] V_nnz
+// Bit[23:16] U_nnz
+// Bit[15:0]  Y_nnz
+#define   HENC_TOP_INFO_1                          (0x1d39)
+#define P_HENC_TOP_INFO_1                          (volatile unsigned int *)((0x1d39  << 2) + 0xff620000)
+#define   HENC_LEFT_INFO_1                         (0x1d3a)
+#define P_HENC_LEFT_INFO_1                         (volatile unsigned int *)((0x1d3a  << 2) + 0xff620000)
+// bit[63:0] ipred_mode
+#define   VLC_IPRED_MODE_HI                        (0x1d3b)
+#define P_VLC_IPRED_MODE_HI                        (volatile unsigned int *)((0x1d3b  << 2) + 0xff620000)
+#define   VLC_IPRED_MODE_LO                        (0x1d3c)
+#define P_VLC_IPRED_MODE_LO                        (volatile unsigned int *)((0x1d3c  << 2) + 0xff620000)
+// bit[15:8] SE delta quant
+// bit[7:0]  UE delta quant
+#define   VLC_DELTA_QP                             (0x1d3d)
+#define P_VLC_DELTA_QP                             (volatile unsigned int *)((0x1d3d  << 2) + 0xff620000)
+// bit[31:16] Reserved
+// bit[15:12] Reserved
+// bit[11:8] c_ipred_mode
+// bit[7:0] cbp
+#define   VLC_MB_HEADER_INFO                       (0x1d3e)
+#define P_VLC_MB_HEADER_INFO                       (volatile unsigned int *)((0x1d3e  << 2) + 0xff620000)
+// bit[31:16] mb_skip_run
+// bit[15:0]  b8_mode
+#define   VLC_P_MB_HEADER_INFO                     (0x1d3f)
+#define P_VLC_P_MB_HEADER_INFO                     (volatile unsigned int *)((0x1d3f  << 2) + 0xff620000)
+// bit[31]    write_ptr_update
+// bit[30]    read_ptr_update
+// bit[29:20] coeff_buf_level
+// bit[19:10] coeff_buf_write_ptr
+// bit[9:0]   coeff_buf_read_ptr
+#define   VLC_COEFF_BUF_STATUS                     (0x1d40)
+#define P_VLC_COEFF_BUF_STATUS                     (volatile unsigned int *)((0x1d40  << 2) + 0xff620000)
+// bit[31:10] Reserved
+// bit[9:0] read_req_addr
+#define   VLC_COEFF_RD_REQ                         (0x1d41)
+#define P_VLC_COEFF_RD_REQ                         (volatile unsigned int *)((0x1d41  << 2) + 0xff620000)
+// bit[20]   - coeff_buf_read_finished
+// bit[19]   - coeff_first
+// bit[18:4] - coeff_level
+// bit[3:0]  - coeff_run
+#define   VLC_COEFF                                (0x1d42)
+#define P_VLC_COEFF                                (volatile unsigned int *)((0x1d42  << 2) + 0xff620000)
+// bit[31]    - coeff_info_ready
+// bit[30:25] - Reserved
+// bit[24:15] - block_begin_addr
+// bit[14:11] - trailing_one_sign
+// bit[10:6]  - total_coeff
+// bit[5:4]   - trailing_ones
+// bit[3:0]   - total_zeros
+#define   VLC_COEFF_INFO                           (0x1d43)
+#define P_VLC_COEFF_INFO                           (volatile unsigned int *)((0x1d43  << 2) + 0xff620000)
+// bit[31]    write_ptr_update
+// bit[30]    read_ptr_update
+// bit[29:25] Reserved
+// bit[24:20] dc_buf_level -- 0-16
+// bit[19:15] Reserved
+// bit[14:10] dc_buf_write_ptr
+// bit[9:5]   Reserved
+// bit[4:0]   dc_buf_read_ptr
+#define   VLC_DC_BUF_STATUS                        (0x1d44)
+#define P_VLC_DC_BUF_STATUS                        (volatile unsigned int *)((0x1d44  << 2) + 0xff620000)
+// bit[31:10] Reserved
+// bit[9:4]   Reserved
+// bit[3:0]   read_req_addr
+#define   VLC_DC_RD_REQ                            (0x1d45)
+#define P_VLC_DC_RD_REQ                            (volatile unsigned int *)((0x1d45  << 2) + 0xff620000)
+// bit[31:17] - Reserved
+// bit[16]   - dc_first
+// bit[15:1] - dc_level
+// bit[0]    - dc_type  0 - CDC, 1 - LDC
+#define   VLC_DC                                   (0x1d46)
+#define P_VLC_DC                                   (volatile unsigned int *)((0x1d46  << 2) + 0xff620000)
+// bit[31]    - dc_info_ready
+// bit[30:25] - Reserved
+// bit[24:20] - Reserved
+// bit[19:15] - dc_idx_begin_addr
+// bit[14:11] - dc_trailing_one_sign
+// bit[10:6]  - dc_total_coeff
+// bit[5:4]   - dc_trailing_ones
+// bit[3:0]   - dc_total_zeros
+#define   VLC_DC_INFO                              (0x1d47)
+#define P_VLC_DC_INFO                              (volatile unsigned int *)((0x1d47  << 2) + 0xff620000)
+// bit[31:4]  - Reserved
+// bit[3:0]   - mv_rw_idx  (auto increment when read/write VLC_MV)
+#define   VLC_MV_INDEX                             (0x1d48)
+#define P_VLC_MV_INDEX                             (volatile unsigned int *)((0x1d48  << 2) + 0xff620000)
+// bit[31:16] - MVY
+// bit[15:0]  - MVX
+#define   VLC_MV                                   (0x1d49)
+#define P_VLC_MV                                   (volatile unsigned int *)((0x1d49  << 2) + 0xff620000)
+// bit[31:16] - MVY
+// bitp15:0]  - MVX
+// Write to HENC_TOP_MV_0 will cause previous U->UL, UR->U, and UR write
+// Read will read U MV only
+#define   HENC_TOP_MV_0                            (0x1d4a)
+#define P_HENC_TOP_MV_0                            (volatile unsigned int *)((0x1d4a  << 2) + 0xff620000)
+#define   HENC_TOP_MV_1                            (0x1d4b)
+#define P_HENC_TOP_MV_1                            (volatile unsigned int *)((0x1d4b  << 2) + 0xff620000)
+#define   HENC_TOP_MV_2                            (0x1d4c)
+#define P_HENC_TOP_MV_2                            (volatile unsigned int *)((0x1d4c  << 2) + 0xff620000)
+#define   HENC_TOP_MV_3                            (0x1d4d)
+#define P_HENC_TOP_MV_3                            (volatile unsigned int *)((0x1d4d  << 2) + 0xff620000)
+#define   HENC_LEFT_MV_0                           (0x1d4e)
+#define P_HENC_LEFT_MV_0                           (volatile unsigned int *)((0x1d4e  << 2) + 0xff620000)
+#define   HENC_LEFT_MV_1                           (0x1d4f)
+#define P_HENC_LEFT_MV_1                           (volatile unsigned int *)((0x1d4f  << 2) + 0xff620000)
+#define   HENC_LEFT_MV_2                           (0x1d50)
+#define P_HENC_LEFT_MV_2                           (volatile unsigned int *)((0x1d50  << 2) + 0xff620000)
+#define   HENC_LEFT_MV_3                           (0x1d51)
+#define P_HENC_LEFT_MV_3                           (volatile unsigned int *)((0x1d51  << 2) + 0xff620000)
+// Bit[31:1] Reserved
+// Bit[0] top_left_mv_ready
+#define   TOP_LEFT_READY                           (0x1d52)
+#define P_TOP_LEFT_READY                           (volatile unsigned int *)((0x1d52  << 2) + 0xff620000)
+// Bit[31:16] Reserved
+// Bit[15:0] mb_skip_run
+#define   MB_SKIP_RUN                              (0x1d53)
+#define P_MB_SKIP_RUN                              (volatile unsigned int *)((0x1d53  << 2) + 0xff620000)
+// Bit[31:16] Reserved
+// Bit[15]    Reserved
+// Bit[14:13] rd_struct // 00 - frame, 10 - top field, 11 - bottom field
+// Bit[12:11] wr_struct // 00 - frame, 10 - top field, 11 - bottom field
+// Bit[10:5]  mv_buff_id
+// Bit[4:0]   mv_ref
+#define   VLC_HCMD_CONFIG                          (0x1d54)
+#define P_VLC_HCMD_CONFIG                          (volatile unsigned int *)((0x1d54  << 2) + 0xff620000)
+// Bit[9:0] h264_dblk_info
+#define   VLC_HCMD_DBLK_INFO                       (0x1d55)
+#define P_VLC_HCMD_DBLK_INFO                       (volatile unsigned int *)((0x1d55  << 2) + 0xff620000)
+// Bit[3:0] vlc_dbg_idx
+#define   VLC_DBG_IDX                              (0x1d56)
+#define P_VLC_DBG_IDX                              (volatile unsigned int *)((0x1d56  << 2) + 0xff620000)
+// Read Only
+#define   VLC_DBG_READ                             (0x1d57)
+#define P_VLC_DBG_READ                             (volatile unsigned int *)((0x1d57  << 2) + 0xff620000)
+// [   29] RW jpeg_comp2_ac_table_sel.                                                      Default 0.
+// [   28] RW jpeg_comp2_dc_table_sel.                                                      Default 0.
+// [26:25] RW jpeg_comp2_cnt_max.                                                           Default 0.
+// [   24] RW jpeg_comp2_en. Set 1 if the scan will include component 2 (Cr).               Default 0.
+// [   21] RW jpeg_comp1_ac_table_sel.                                                      Default 0.
+// [   20] RW jpeg_comp1_dc_table_sel.                                                      Default 0.
+// [18:17] RW jpeg_comp1_cnt_max.                                                           Default 0.
+// [   16] RW jpeg_comp1_en. Set 1 if the scan will include component 1 (Cb).               Default 0.
+// [   13] RW jpeg_comp0_ac_table_sel.                                                      Default 0.
+// [   12] RW jpeg_comp0_dc_table_sel.                                                      Default 0.
+// [10: 9] RW jpeg_comp0_cnt_max.                                                           Default 0.
+// [    8] RW jpeg_comp0_en. Set 1 if the scan will include component 0 (Y).                Default 0.
+// [    1] W  jpeg_coeff_init. Write 1 to this bit to initialize JPEG run length encoder.
+// [    0] RW jpeg_en. 0=Disable JPEG encoder; 1=Enable JPEG encoder.                       Default 0.
+#define   VLC_JPEG_CTRL                            (0x1d58)
+#define P_VLC_JPEG_CTRL                            (volatile unsigned int *)((0x1d58  << 2) + 0xff620000)
+// [   13] RW jpeg_coeff_buf_overfl. Write this bit to 1 to clear overfl.
+// [   12] RW jpeg_coeff_buf_undrfl. Write this bit to 1 to clear undrfl.
+// [   11] R  jpeg_coeff_buf_full.
+// [   10] R  jpeg_coeff_buf_empty.
+// [ 8: 0] R  jpeg_coeff_buf_level.
+#define   VLC_JPEG_COEFF_BUF_STAT                  (0x1d59)
+#define P_VLC_JPEG_COEFF_BUF_STAT                  (volatile unsigned int *)((0x1d59  << 2) + 0xff620000)
+// [   16] RW JPEG HUFFMAN table access mode. 0=Write; 1=Read.  Default 1.
+// [ 8: 0] RW JPEG HUFFMAN table addr.                          Default 0.
+#define   VLC_HUFFMAN_ADDR                         (0x1d5a)
+#define P_VLC_HUFFMAN_ADDR                         (volatile unsigned int *)((0x1d5a  << 2) + 0xff620000)
+// [19: 0] RW JPEG HUFFMAN table data.
+#define   VLC_HUFFMAN_DATA                         (0x1d5b)
+#define P_VLC_HUFFMAN_DATA                         (volatile unsigned int *)((0x1d5b  << 2) + 0xff620000)
+// bit[31:0] enc_mv_bits - including b8_mode and mvd
+#define   VLC_ENC_MV_BITS                          (0x1d5c)
+#define P_VLC_ENC_MV_BITS                          (volatile unsigned int *)((0x1d5c  << 2) + 0xff620000)
+// bit[31:0] enc_coeff_bits - including cbp, token, trailing_sign, coeff_enc, h264_totzeros, h264_run
+#define   VLC_ENC_COEFF_BITS                       (0x1d5d)
+#define P_VLC_ENC_COEFF_BITS                       (volatile unsigned int *)((0x1d5d  << 2) + 0xff620000)
+//
+// Closing file:  vlc_regs.h
+//
+//------------------------------------------------------------------------------
+// QDCT module level register offset
+//------------------------------------------------------------------------------
+//
+// Reading file:  qdct_regs.h
+//
+//========================================================================
+//  QDCT module level register offset
+//========================================================================
+// -----------------------------------------------
+// CBUS_BASE:  DOS_HCODEC_QDCT_CBUS_BASE = 0x0f
+// -----------------------------------------------
+// bit[31:28] - mb_info_state
+#define   QDCT_STATUS_CTRL                         (0x1f00)
+#define P_QDCT_STATUS_CTRL                         (volatile unsigned int *)((0x1f00  << 2) + 0xff620000)
+// bit[18]    - enable_free_clk_sad_top
+// bit[17]    - enable_free_clk_ie_top
+// bit[16]    - enable_free_clk_ie_sub
+// bit[15]    - enable_free_clk_mc_out
+// bit[14]    - enable_free_clk_i_pred_top
+// bit[13]    - enable_free_clk_idct_top
+// bit[12]    - enable_free_clk_iq_top
+// bit[11]    - enable_free_clk_q_top
+// bit[10]    - enable_free_clk_dc_buff_8
+// bit[9]     - enable_free_clk_dct_top
+// bit[8]     - enable_free_clk_mb_info
+// bit[7]     - enable_free_clk_mb_buff
+// bit[6]     - enable_free_clk_reg
+// bit[5]     - ignore_1_include_2nd_half_c
+// bit[4]     - ignore_1_include_2nd_half
+// bit[3]     - ignore_t_p8x8
+// bit[2]     - not_ignore_dc
+// bit[1]     - ignore_small_lac_intra
+// bit[0]     - disable_fast_zero_block
+#define   QDCT_CONFIG                              (0x1f01)
+#define P_QDCT_CONFIG                              (volatile unsigned int *)((0x1f01  << 2) + 0xff620000)
+// bit[31]    - ignore_lac_coeff_en
+// bit[30:26] - ignore_lac_coeff_else
+// bit[25:21] - ignore_lac_coeff_2
+// bit[20:16] - ignore_lac_coeff_1
+// bit[15]    - ignore_cac_coeff_en
+// bit[14:10] - ignore_cac_coeff_else
+// bit[9:5]   - ignore_cac_coeff_2
+// bit[4:0]   - ignore_cac_coeff_1
+#define   IGNORE_CONFIG                            (0x1f02)
+#define P_IGNORE_CONFIG                            (volatile unsigned int *)((0x1f02  << 2) + 0xff620000)
+// bit[31]    - ignore_t_lac_coeff_en
+// bit[30:26] - ignore_t_lac_coeff_else
+// bit[25:21] - ignore_t_lac_coeff_2
+// bit[20:16] - ignore_t_lac_coeff_1
+// bit[15]    - ignore_cdc_coeff_en
+// bit[14]    - ignore_t_lac_coeff_else_le_3
+// bit[13]    - ignore_t_lac_coeff_else_le_4
+// bit[12]    - ignore_cdc_only_when_empty_cac_inter
+// bit[11]    - ignore_cdc_only_when_one_empty_inter
+// bit[10:9]  - ignore_cdc_range_max_inter // 0-0, 1-1, 2,-2, 3-3
+// bit[8:7]   - ignore_cdc_abs_max_inter // 0-1, 1-2, 2,-3, 3-4
+// bit[6]     - reserved
+// bit[5]     - ignore_cdc_only_when_empty_cac_intra
+// bit[4]     - ignore_cdc_only_when_one_empty_intra
+// bit[3:2]   - ignore_cdc_range_max_intra // 0-0, 1-1, 2,-2, 3-3
+// bit[1:0]   - ignore_cdc_abs_max_intra // 0-1, 1-2, 2,-3, 3-4
+#define   IGNORE_CONFIG_2                          (0x1f03)
+#define P_IGNORE_CONFIG_2                          (volatile unsigned int *)((0x1f03  << 2) + 0xff620000)
+// --------------------------------------------
+// MB DATA DDR Interface
+// --------------------------------------------
+#define   QDCT_MB_START_PTR                        (0x1f10)
+#define P_QDCT_MB_START_PTR                        (volatile unsigned int *)((0x1f10  << 2) + 0xff620000)
+#define   QDCT_MB_END_PTR                          (0x1f11)
+#define P_QDCT_MB_END_PTR                          (volatile unsigned int *)((0x1f11  << 2) + 0xff620000)
+#define   QDCT_MB_WR_PTR                           (0x1f12)
+#define P_QDCT_MB_WR_PTR                           (volatile unsigned int *)((0x1f12  << 2) + 0xff620000)
+#define   QDCT_MB_RD_PTR                           (0x1f13)
+#define P_QDCT_MB_RD_PTR                           (volatile unsigned int *)((0x1f13  << 2) + 0xff620000)
+#define   QDCT_MB_LEVEL                            (0x1f14)
+#define P_QDCT_MB_LEVEL                            (volatile unsigned int *)((0x1f14  << 2) + 0xff620000)
+// bit  [31]    disable_mbxy_ie_save
+// bit  [30]    no_wait_after_q_cdc
+// bit  [29]    ie_start_int_enable
+// bit  [28]    ignore_t_p8x8
+// bit  [27]    zero_mc_out_null_non_skipped_mb
+// bit  [26]    no_mc_out_null_non_skipped_mb
+// bit  [25]    mc_out_even_skipped_mb
+// bit  [24]    mc_out_wait_cbp_ready
+// bit  [23]    mc_out_wait_mb_type_ready
+// bit  [22]    i_pred_int_enable
+// bit  [21]    intra_sat8_enable
+// bit  [20]    ie_sub_enable
+// bit  [19]    i_pred_enable
+// bit  [18]    iq_enable
+// bit  [17]    idct_enable
+// bit  [16]    no_zero_coeff_mb
+// bit  [15]    add_zero_coeff_block
+// bit  [14]    mb_pause_enable
+// bit  [13]    q_enable
+// bit  [12]    dct_enable
+// bit  [11]    ignore_magic_word
+// bit  [10]    mb_info_en
+// bit  [9]     mb_info_soft_reset
+// bit  [8]     mb_always_ready Set to 1 to ignore mb_level blocking DDR read
+// bit  [7]     mb_ready_for_transfer (Read Only)
+// bit  [6]     data_ready_for_transfer (Read Only)
+// bits [5:3]   mb_endian       Set MB Endian inside DDR memory
+// bit  [2]     mb_read_busy   Read Only - indicate DDR read busy
+// bit  [1]     mb_read_en     Set to 1 to enable reading data from DDR memory
+// bit  [0]     mb_soft_reset   Soft reset
+#define   QDCT_MB_CONTROL                          (0x1f15)
+#define P_QDCT_MB_CONTROL                          (volatile unsigned int *)((0x1f15  << 2) + 0xff620000)
+// bit 31    transfer_length 0 - 32x64 Bits per request, 1 - 16x64 Bits per request  // default : 0
+// bit 30    A_urgent  // default : 0
+// bit 29:24 A_brst_num // default : 0x3f
+// bit 23    reserved
+// bit 22    read_till_zero
+// bit 21:16 A_id  // default : 0x21
+// bit 15:0  mb_level_hold // default : 0
+#define   QDCT_MB_MEM_CTL                          (0x1f16)
+#define P_QDCT_MB_MEM_CTL                          (volatile unsigned int *)((0x1f16  << 2) + 0xff620000)
+// bit  [31:24] reserved
+// bit  [23:16] vb_buff_level     -- Read only
+// bit  [15:8]  vb_buff_wr_point -- RW
+// bit  [7:0]   vb_buff_rd_point -- RW
+#define   QDCT_MB_BUFF                             (0x1f17)
+#define P_QDCT_MB_BUFF                             (volatile unsigned int *)((0x1f17  << 2) + 0xff620000)
+// bit [31:0] mb infor data begin magic word - default : 0xa55aaa55
+#define   QDCT_MB_MAGIC_WORD                       (0x1f18)
+#define P_QDCT_MB_MAGIC_WORD                       (volatile unsigned int *)((0x1f18  << 2) + 0xff620000)
+// Read Only Register
+// bit[19]   dct_ready_1
+// bit[18]   dct_ready_0
+// bit[17]   dct_rd_idx
+// bit[16]   dct_wr_idx
+// bit[15]   dct_srdy
+// bit[14]   dct_rrdy
+// bit[13]   Reserved
+// bit[12:8] dct_block_number
+// bit[7:4]  dct_rw_addr
+// bit[3:0]  dct_status
+#define   QDCT_DCT_STATUS                          (0x1f19)
+#define P_QDCT_DCT_STATUS                          (volatile unsigned int *)((0x1f19  << 2) + 0xff620000)
+// bit[24:23]  vlc_quant_count
+// bit[22:16]  vlc_delta_quant_data
+// bit[15:10]  vlc_quant_data
+// bit[9:4]    vlc_prev_quant_data
+// bit[3:0]    q_status
+#define   QDCT_Q_STATUS                            (0x1f1a)
+#define P_QDCT_Q_STATUS                            (volatile unsigned int *)((0x1f1a  << 2) + 0xff620000)
+// bit[31:3] Reserved
+// bit[2:0]  picture_type
+#define   QDCT_PIC_INFO                            (0x1f1b)
+#define P_QDCT_PIC_INFO                            (volatile unsigned int *)((0x1f1b  << 2) + 0xff620000)
+// bit[31:28] Reserved
+// bit[27:22] I_pic_quant_c
+// bit[21:16] I_pic_quant
+// bit[15]    reserved
+// bit[14:12] quant_rem_c
+// bit[11:8]  quant_per_c
+// bit[7]     reserved
+// bit[6:4]   quant_rem
+// bit[3:0]   quant_per
+#define   QDCT_Q_QUANT_I                           (0x1f1c)
+#define P_QDCT_Q_QUANT_I                           (volatile unsigned int *)((0x1f1c  << 2) + 0xff620000)
+// bit[31:28] Reserved
+// bit[27:22] P_pic_quant_c
+// bit[21:16] P_pic_quant
+// bit[15]    reserved
+// bit[14:12] quant_rem_c
+// bit[11:8]  quant_per_c
+// bit[7]     reserved
+// bit[6:4]   quant_rem
+// bit[3:0]   quant_per
+#define   QDCT_Q_QUANT_P                           (0x1f1d)
+#define P_QDCT_Q_QUANT_P                           (volatile unsigned int *)((0x1f1d  << 2) + 0xff620000)
+// bit[31]    mb_info_pause
+// bit[30:16] pause_mby
+// bit[15:0]  pause_mbx
+#define   QDCT_MB_PAUSE_CTL                        (0x1f1e)
+#define P_QDCT_MB_PAUSE_CTL                        (volatile unsigned int *)((0x1f1e  << 2) + 0xff620000)
+// bit[31]   top_control_ready_i_pred
+// bit[30:28]top_dma_status
+// bit[27]   top_control_ready_ie
+// bit[26:24]Reserved
+// bit[23]   ul_mb
+// bit[22]   right_mb
+// bit[21]   top_mb
+// bit[20]   left_mb
+// bit[19:8] mb_x
+// bit[7:6]  i_pred_ref_idx_L
+// bit[5:4]  i_pred_ref_idx_UL
+// bit[3:2]  i_pred_ref_idx_U
+// bit[1:0]  i_pred_ref_idx_UR
+#define   QDCT_TOP_CONTROL                         (0x1f1f)
+#define P_QDCT_TOP_CONTROL                         (volatile unsigned int *)((0x1f1f  << 2) + 0xff620000)
+// bit[31:0] top_base_addr - DDR Memory start address for save top Pixel
+#define   QDCT_TOP_BASE_MEM                        (0x1f20)
+#define P_QDCT_TOP_BASE_MEM                        (volatile unsigned int *)((0x1f20  << 2) + 0xff620000)
+// bit 15:13 Reserved
+// bit 12    A_urgent  // default : 0
+// bit 11:6  A_brst_num // default : 0x3f
+// bit 5:0   A_id  // default : 0x22
+#define   QDCT_TOP_MEM_CTL                         (0x1f21)
+#define P_QDCT_TOP_MEM_CTL                         (volatile unsigned int *)((0x1f21  << 2) + 0xff620000)
+// bit [11:0] top_wrrsp_count
+#define   QDCT_TOP_WRRSP                           (0x1f22)
+#define P_QDCT_TOP_WRRSP                           (volatile unsigned int *)((0x1f22  << 2) + 0xff620000)
+// Bit[3:0] qdct_dbg_idx
+#define   QDCT_DBG_IDX                             (0x1f23)
+#define P_QDCT_DBG_IDX                             (volatile unsigned int *)((0x1f23  << 2) + 0xff620000)
+// Read Only
+#define   QDCT_DBG_READ                            (0x1f24)
+#define P_QDCT_DBG_READ                            (volatile unsigned int *)((0x1f24  << 2) + 0xff620000)
+// [19:18] RW jdct_inflow_ctrl. JPEG DCT input flow control.                                Default 0.
+//            0=No halt;
+//            1=DCT halts request at end of each 8x8 block;
+//            2=DCT halts request at end of each MCU.
+// [17:16] RW jpeg_coeff_last_sel.                                                          Default 0.
+//            Select at which point to finish processing, give update to AmRISC so it can control the next step.
+//            0=Mark last coeff at the end of an 8x8 block;
+//            1=Mark at the end of an MCU;
+//            2=Mark at the end of a scan.
+// [   15] RW jpeg_quant_sel_comp2. 0=Comp2 select Quantization table 0; 1=Select table 1.  Default 0.
+// [   14] RW jpeg_v_factor_comp2. Component 2's vertical sampling factor.                  Default 0.
+// [   13] RW jpeg_h_factor_comp2. Component 2's horizontal sampling factor.                Default 0.
+// [   12] RW jpeg_comp2_en. Set 1 if the scan will include component 2 (Cr).               Default 0.
+// [   11] RW jpeg_quant_sel_comp1. 0=Comp1 select Quantization table 0; 1=Select table 1.  Default 0.
+// [   10] RW jpeg_v_factor_comp1. Component 1's vertical sampling factor.                  Default 0.
+// [    9] RW jpeg_h_factor_comp1. Component 1's horizontal sampling factor.                Default 0.
+// [    8] RW jpeg_comp1_en. Set 1 if the scan will include component 1 (Cb).               Default 0.
+// [    7] RW jpeg_quant_sel_comp0. 0=Comp0 select Quantization table 0; 1=Select table 1.  Default 0.
+// [    6] RW jpeg_v_factor_comp0. Component 0's vertical sampling factor.                  Default 0.
+// [    5] RW jpeg_h_factor_comp0. Component 0's horizontal sampling factor.                Default 0.
+// [    4] RW jpeg_comp0_en. Set 1 if the scan will include component 0 (Y).                Default 0.
+// [ 3: 1] RW jdct_intr_sel. JPEG DCT interrupt select.                                     Default 0.
+//            0=Disable intr;
+//            1=Intr at end of each 8x8 block of DCT input;
+//            2=Intr at end of each MCU of DCT input;
+//            3=Intr at end of a scan of DCT input;
+//            4=Intr at end of each 8x8 block of DCT output;
+//            5=Intr at end of each MCU of DCT output;
+//            6=Intr at end of a scan of DCT output.
+// [    0] RW jpeg_en. 0=Disable JPEG QDCT; 1=Enable JPEG QDCT.                             Default 0.
+#define   QDCT_JPEG_CTRL                           (0x1f25)
+#define P_QDCT_JPEG_CTRL                           (volatile unsigned int *)((0x1f25  << 2) + 0xff620000)
+// [29:16] RW jpeg_x_end.   Picture X end.      Default 0.
+// [13: 0] RW jpeg_x_start. Picture X start.    Default 0.
+#define   QDCT_JPEG_X_START_END                    (0x1f26)
+#define P_QDCT_JPEG_X_START_END                    (volatile unsigned int *)((0x1f26  << 2) + 0xff620000)
+// [29:16] RW jpeg_y_end.   Picture Y end.      Default 0.
+// [13: 0] RW jpeg_y_start. Picture Y start.    Default 0.
+#define   QDCT_JPEG_Y_START_END                    (0x1f27)
+#define P_QDCT_JPEG_Y_START_END                    (volatile unsigned int *)((0x1f27  << 2) + 0xff620000)
+// [    8] RW JPEG QUANT table access mode. 0=Write; 1=Read.    Default 1.
+// [ 5: 0] RW JPEG QUANT table addr.                            Default 0.
+#define   QDCT_JPEG_QUANT_ADDR                     (0x1f28)
+#define P_QDCT_JPEG_QUANT_ADDR                     (volatile unsigned int *)((0x1f28  << 2) + 0xff620000)
+// [31: 0] RW JPEG QUANT table data.
+#define   QDCT_JPEG_QUANT_DATA                     (0x1f29)
+#define P_QDCT_JPEG_QUANT_DATA                     (volatile unsigned int *)((0x1f29  << 2) + 0xff620000)
+// [    1] W  resume_jdct.
+//            Write 1 to this bit will resume JPEG input engine when previously
+//            it is halted by QDCT_JPEG_CTRL.jdct_inflow_ctrl.
+// [    0] W  jpeg_sof.
+//            Write 1 to this bit will start JPEG input engine.
+#define   QDCT_JPEG_SOF_RESUME                     (0x1f2a)
+#define P_QDCT_JPEG_SOF_RESUME                     (volatile unsigned int *)((0x1f2a  << 2) + 0xff620000)
+// [31:30] R  dct_st.       jdct_ctrl state. 0=IDLE; 1=WAIT; 2=DCT_REQ.
+// [29:28] R  mfdin_comp.   Current component at pixel request to MFDIN.
+// [27:14] R  mfdin_y.      Current Y at pixel request to MFDIN.
+// [13: 0] R  mfdin_x.      Current X at pixel request to MFDIN.
+#define   QDCT_JPEG_DCT_STATUS0                    (0x1f2b)
+#define P_QDCT_JPEG_DCT_STATUS0                    (volatile unsigned int *)((0x1f2b  << 2) + 0xff620000)
+// [15:12] R  JPEG Quant read MEM select.
+// [11: 8] R  JPEG DCT2 write MEM select.
+// [ 7: 4] R  JPEG DCT2 read MEM select.
+// [ 3: 0] R  JPEG DCT1 write MEM select.
+#define   QDCT_JPEG_DCT_STATUS1                    (0x1f2c)
+#define P_QDCT_JPEG_DCT_STATUS1                    (volatile unsigned int *)((0x1f2c  << 2) + 0xff620000)
+// [28:16] RW jdct_coeff1.  Default 13'h1D90; // 7568 = 4096 * sqrt(2) * (cos(Pi/8) + sin(Pi/8)) // 7569
+// [12: 0] RW jdct_coeff0.  Default 13'h16A1; // 5793 = 4096 * sqrt(2)
+#define   QDCT_JPEG_DCT_COEFF01                    (0x1f2d)
+#define P_QDCT_JPEG_DCT_COEFF01                    (volatile unsigned int *)((0x1f2d  << 2) + 0xff620000)
+// [28:16] RW jdct_coeff3.  Default 13'h0C3F; // 3135 = 4096 * sqrt(2) * (cos(Pi/8) - sin(Pi/8))
+// [12: 0] RW jdct_coeff2.  Default 13'h08A9; // 2217 = 4096 * sqrt(2) * sin(Pi/8) // 2215
+#define   QDCT_JPEG_DCT_COEFF23                    (0x1f2e)
+#define P_QDCT_JPEG_DCT_COEFF23                    (volatile unsigned int *)((0x1f2e  << 2) + 0xff620000)
+// [28:16] RW jdct_coeff5.  Default 13'h046A; // 1130 = 4096 * (cos(3Pi/16) - sin(3Pi/16))
+// [12: 0] RW jdct_coeff4.  Default 13'h1631; // 5681 = 4096 * (cos(3Pi/16) + sin(3Pi/16)) // 5682
+#define   QDCT_JPEG_DCT_COEFF45                    (0x1f2f)
+#define P_QDCT_JPEG_DCT_COEFF45                    (volatile unsigned int *)((0x1f2f  << 2) + 0xff620000)
+// [28:16] RW jdct_coeff7.  Default 13'h0C92; // 3218 = 4096 * (cos(Pi/16) - sin(Pi/16))
+// [12: 0] RW jdct_coeff6.  Default 13'h12D0; // 4816 = 4096 * (cos(Pi/16) + sin(Pi/16))
+#define   QDCT_JPEG_DCT_COEFF67                    (0x1f30)
+#define P_QDCT_JPEG_DCT_COEFF67                    (volatile unsigned int *)((0x1f30  << 2) + 0xff620000)
+// [28:16] RW jdct_coeff9.  Default 13'h0FB1; // 4017 = 4096 * cos(Pi/16)
+// [12: 0] RW jdct_coeff8.  Default 13'h0D4E; // 3406 = 4096 * cos(3Pi/16)
+#define   QDCT_JPEG_DCT_COEFF89                    (0x1f31)
+#define P_QDCT_JPEG_DCT_COEFF89                    (volatile unsigned int *)((0x1f31  << 2) + 0xff620000)
+#define   QDCT_I_PRED_REF_WR_IDX                   (0x1f32)
+#define P_QDCT_I_PRED_REF_WR_IDX                   (volatile unsigned int *)((0x1f32  << 2) + 0xff620000)
+#define   QDCT_I_PRED_REF_WR_DATA                  (0x1f33)
+#define P_QDCT_I_PRED_REF_WR_DATA                  (volatile unsigned int *)((0x1f33  << 2) + 0xff620000)
+// bit[29]  mb_info_latch_no_I16_pred_mode
+// bit[28]  ie_dma_mbxy_use_i_pred
+// bit[27]  ie_dma_read_write_use_ip_idx
+// bit[26]  ie_start_use_top_dma_count
+// bit[25]  i_pred_top_dma_rd_mbbot
+// bit[24]  i_pred_top_dma_wr_disable
+// bit[23]  i_pred_mix
+// bit[22]  me_ab_rd_when_intra_in_p
+// bit[21]  force_mb_skip_run_when_intra
+// bit[20]  mc_out_mixed_type
+// bit[19]  ie_start_when_quant_not_full
+// bit[18]  mb_info_state_mix
+// bit[17]  mb_type_use_mix_result
+// bit[16]  me_cb_ie_read_enable
+// bit[15]  ie_cur_data_from_me
+// bit[14]  rem_per_use_table
+// bit[13]  q_latch_int_enable
+// bit[12]  q_use_table
+// bit[11]  q_start_wait
+// bit[10]  LUMA_16_LEFT_use_cur
+// bit[9]   DC_16_LEFT_SUM_use_cur
+// bit[8]   c_ref_ie_sel_cur
+// bit[7]   c_ipred_perfect_mode
+// bit[6]   ref_ie_ul_sel 0-old, 1-use next_set
+// bit[5]   mb_type_use_ie_result
+// bit[4]   detect_I16_from_I4
+// bit[3]   ie_not_wait_ref_busy
+// bit[2]   ie_I16_enable
+// bit[1:0] ie_done_sel (0, 1, 2, -1)
+#define   QDCT_ADV_CONFIG                          (0x1f34)
+#define P_QDCT_ADV_CONFIG                          (volatile unsigned int *)((0x1f34  << 2) + 0xff620000)
+// bit [31:16] I16x16_weight
+// bit [15:0]  I4x4_weight
+#define   IE_WEIGHT                                (0x1f35)
+#define P_IE_WEIGHT                                (volatile unsigned int *)((0x1f35  << 2) + 0xff620000)
+// bit [31]  reserved
+// bit [30] q_I16MB
+// bit [29]  reserved
+// bit [28]  reserved
+// bit [27:23] quant_table_addr I4MB:[0,7], I16MB:[8:15], INTER:[16:23], Reserved:[24:31]
+// bit [22]    quant_table_addr_update(when notupdate_rem_per) (read is arb_result : q_intra)
+// bit [21:19] quant_rem_c
+// bit [18:16] quant_rem_y
+// bit [15:12] quant_per_c
+// bit [11:8]  quant_per_y
+// bit [7:2] quant
+// bit [1] update_rem_per
+// bit [0] clear_wait_status
+#define   Q_QUANT_CONTROL                          (0x1f36)
+#define P_Q_QUANT_CONTROL                          (volatile unsigned int *)((0x1f36  << 2) + 0xff620000)
+#define   MBBOT_EVEN_ADDR                          (0x1f37)
+#define P_MBBOT_EVEN_ADDR                          (volatile unsigned int *)((0x1f37  << 2) + 0xff620000)
+#define   MBBOT_ODD_ADDR                           (0x1f38)
+#define P_MBBOT_ODD_ADDR                           (volatile unsigned int *)((0x1f38  << 2) + 0xff620000)
+// bit [29:24] quant_table_data_3
+// bit [21:16] quant_table_data_2
+// bit [13:8]  quant_table_data_1
+// bit [5:0]   quant_table_data_0
+#define   QUANT_TABLE_DATA                         (0x1f39)
+#define P_QUANT_TABLE_DATA                         (volatile unsigned int *)((0x1f39  << 2) + 0xff620000)
+// bit [31:16] ie_sad_offset_I16
+// bit [15:0] ie_sad_offset_I4
+#define   SAD_CONTROL_0                            (0x1f3a)
+#define P_SAD_CONTROL_0                            (volatile unsigned int *)((0x1f3a  << 2) + 0xff620000)
+// bit [31]     sad_soft_reset
+// bit [30:27]  reserved
+// bit [26:24]  ie_sad_shift_I16
+// bit [22:20]  ie_sad_shift_I4
+// bit [18:16]  me_sad_shift_INTER
+// bit [15:0]   me_sad_offset_INTER
+#define   SAD_CONTROL_1                            (0x1f3b)
+#define P_SAD_CONTROL_1                            (volatile unsigned int *)((0x1f3b  << 2) + 0xff620000)
+// bit [31]     vlc_quant_rd_ptr
+// bit [30]     vlc_quant_rd_ptr_update
+// bit [29]     vlc_quant_wr_ptr
+// bit [28]     vlc_quant_wr_ptr_update
+// bit [27:26]  reserved
+// bit [25:19]  vlc_delta_quant_1
+// bit [18:13]  vlc_quant_1
+// bit [12:6]   vlc_delta_quant_0
+// bit [5:0]    vlc_quant_0
+#define   QDCT_VLC_QUANT_CTL_0                     (0x1f3c)
+#define P_QDCT_VLC_QUANT_CTL_0                     (volatile unsigned int *)((0x1f3c  << 2) + 0xff620000)
+// bit [31:30]  me_sad_rd_idx
+// bit [29]     me_sad_rd_idx_update
+// bit [28:27]  me_sad_wr_idx
+// bit [26]     me_sad_wr_idx_update
+// bit [25:24]  ie_sad_rd_idx
+// bit [23]     ie_sad_rd_idx_update
+// bit [22:21]  ie_sad_wr_idx
+// bit [20]     ie_sad_wr_idx_update
+// bit [19:12]  Reserved
+// bit [11:6]   vlc_max_delta_q_neg
+// bit [5:0]    vlc_max_delta_q_pos
+#define   QDCT_VLC_QUANT_CTL_1                     (0x1f3d)
+#define P_QDCT_VLC_QUANT_CTL_1                     (volatile unsigned int *)((0x1f3d  << 2) + 0xff620000)
+// bit[4] jdct_int
+// bit[3] quant_latch
+// bit[2] me_done
+// bit[1] ie_start
+// bit[0] i_pred_start
+#define   QDCT_INT_STATUS                          (0x1f3e)
+#define P_QDCT_INT_STATUS                          (volatile unsigned int *)((0x1f3e  << 2) + 0xff620000)
+// bit[3]   mix_i_pred_wait_left_en
+// bit[2:0] mc_pending_mb_count
+#define   QDCT_MIX_I_PRED_STATUS                   (0x1f3f)
+#define P_QDCT_MIX_I_PRED_STATUS                   (volatile unsigned int *)((0x1f3f  << 2) + 0xff620000)
+// IE/ME share same cbus_base as QDCT
+//
+// bit[31]  active_ur_block
+// bit[30]  active_ul_block
+// bit[21]  disable_HENC_V_PRED_16
+// bit[20]  disable_HENC_H_PRED_16
+// bit[19]  disable_HENC_DC_PRED_16
+// bit[18]  disable_HENC_HENC_HOR_UP_PRED
+// bit[17]  disable_HENC_VERT_LEFT_PRED
+// bit[16]  disable_HENC_HENC_HOR_DOWN_PRED
+// bit[15]  disable_HENC_VERT_RIGHT_PRED
+// bit[14]  disable_HENC_DIAG_DOWN_RIGHT_PRED
+// bit[13]  disable_HENC_DIAG_DOWN_LEFT_PRED
+// bit[12]  disable_HENC_DC_PRED
+// bit[11]  disable_HENC_HOR_PRED
+// bit[10]  disable_HENC_VERT_PRED
+// bit[9]   ie_c_wait_ie_pause
+// bit[8:4] max_ie_result_buff_count
+// bit[3]   ie_wait_for_ie_result  // use for (max_ie_result_buff_count == 0) to wait every block
+// bit[2]   reserved
+// bit[1]   ie_enable
+// bit[0]   ie_soft_reset
+#define   IE_CONTROL                               (0x1f40)
+#define P_IE_CONTROL                               (volatile unsigned int *)((0x1f40  << 2) + 0xff620000)
+// bit[31:12] Reserved
+// bit[11:0]  mb_y
+#define   IE_MB_POSITION                           (0x1f41)
+#define P_IE_MB_POSITION                           (volatile unsigned int *)((0x1f41  << 2) + 0xff620000)
+// bit[31:16] me_skip_run
+// bit[15:8]  reserved
+// bit [7:4]  me_b8_mode
+// bit [3:0]  ie_me_mb_type
+#define   IE_ME_MB_INFO                            (0x1f42)
+#define P_IE_ME_MB_INFO                            (volatile unsigned int *)((0x1f42  << 2) + 0xff620000)
+// bit[3]   ie_result_buff_enable
+// bit[2]   ie_result_buff_soft_reset
+// bit[1]   sad_enable
+// bit[0]   ie_sad_soft_reset
+#define   SAD_CONTROL                              (0x1f43)
+#define P_SAD_CONTROL                              (volatile unsigned int *)((0x1f43  << 2) + 0xff620000)
+// bit[31:16] - ie_result_buff_count - read only
+// bit[14:12] -current_ie_result (pred_mode) - read only
+// bit[11]  top_control_data_buff_wr_ptr - rd/wr
+// bit[10]  top_control_data_buff_rd_ptr - rd/wr
+// bit[9:5] ie_result_buff_wr_ptr        - rd/wr
+// bit[4:0] ie_result_buff_rd_ptr        - rd/wr
+#define   IE_RESULT_BUFFER                         (0x1f44)
+#define P_IE_RESULT_BUFFER                         (volatile unsigned int *)((0x1f44  << 2) + 0xff620000)
+// bit[63:0] ie_i4_pred_mode
+#define   IE_I4_PRED_MODE_HI                       (0x1f45)
+#define P_IE_I4_PRED_MODE_HI                       (volatile unsigned int *)((0x1f45  << 2) + 0xff620000)
+#define   IE_I4_PRED_MODE_LO                       (0x1f46)
+#define P_IE_I4_PRED_MODE_LO                       (volatile unsigned int *)((0x1f46  << 2) + 0xff620000)
+// bit [31:9] reserved
+// bit [8:4] i_pred_block_number
+// bit [3:0] ie_c_pred_mode
+#define   IE_C_PRED_MODE                           (0x1f47)
+#define P_IE_C_PRED_MODE                           (volatile unsigned int *)((0x1f47  << 2) + 0xff620000)
+// 31:16 - Left, 0-select ie_pixel, 1-select mc_data_out
+// 15:0  - Top,  0-select ie_pixel, 1-select mc_data_out
+#define   IE_CUR_REF_SEL                           (0x1f48)
+#define P_IE_CUR_REF_SEL                           (volatile unsigned int *)((0x1f48  << 2) + 0xff620000)
+// bit[31]  enable_f_skip_1_step_3
+// bit[30]  enable_f_skip_1_step_2
+// bit[29]  enable_f_skip_1_step_1
+// bit[28]  step_3_enable
+// bit[27]  step_2_sub_pixel
+// bit[26]  always_f_skip_step_3
+// bit[25]  always_f_skip_step_2
+// bit[24]  always_f_skip_step_1
+// bit[23]  half_pixel_only
+// bit[22:13] reserved
+// bit[12]  adv_mv_enable
+// bit[11]  sad_short_valid
+// bit[10:9] mv_flexable_ctl 00:0x40, 01:0x80, 10:0xc0, 11 : 0x100
+// bit[8]   no_md_ab_rd
+// bit[7]   use_dct_state
+// bit[6]   enable_free_clk_me_ctl
+// bit[5]   enable_free_clk_me_ab
+// bit[4]   enable_free_clk_me_cb
+// bit[3]   reserved
+// bit[2]   me_done_int_enable
+// bit[1]   me_enable
+// bit[0]   me_soft_reset
+#define   ME_CONTROL                               (0x1f49)
+#define P_ME_CONTROL                               (volatile unsigned int *)((0x1f49  << 2) + 0xff620000)
+// bit[31:28] Reserved
+// bit[27:16] me_start_mby
+// bit[15:12] Reserved
+// bit[11:0]  me_start_mbx
+#define   ME_START_POSITION                        (0x1f4a)
+#define P_ME_START_POSITION                        (volatile unsigned int *)((0x1f4a  << 2) + 0xff620000)
+// bit [31:28] me_status - Read only
+// bit [27:24] me_cb_status  // current buffer
+// bit [23:20] me_ab_status  // anc buffer
+// bit [19]    Reserved
+// bit [18:16] me_ab_wr_ptr  // read only
+// bit [15:4]  me_last_mbx
+// bit [3:1]   me_ab_rd_ptr  // read only
+// bit [0]     me_action
+#define   ME_STATUS                                (0x1f4b)
+#define P_ME_STATUS                                (volatile unsigned int *)((0x1f4b  << 2) + 0xff620000)
+// all Read-only
+// bit [31:28] Reserved
+// bit [27:16] me_ab_mbx
+// bit [15:14] me_cb_wr_ptr
+// bit [13:12] me_cb_rd_ptr
+// bit [11:0]  me_cb_mbx
+#define   ME_DEBUG                                 (0x1f4c)
+#define P_ME_DEBUG                                 (volatile unsigned int *)((0x1f4c  << 2) + 0xff620000)
+// bit[29:24] step_3_skip_line
+// bit[23:18] step_2_skip_line
+// bit[17:12] step_1_skip_line
+// bit[11:6]  step_0_skip_line
+// bit[5:0]   read_skip_line
+#define   ME_SKIP_LINE                             (0x1f4d)
+#define P_ME_SKIP_LINE                             (volatile unsigned int *)((0x1f4d  << 2) + 0xff620000)
+// bit 15:13 Reserved
+// bit 12    A_urgent  // default : 0
+// bit 11:6  A_brst_num // default : 0x3f
+// bit 5:0   A_id  // default : 0x23
+#define   ME_AB_MEM_CTL                            (0x1f4e)
+#define P_ME_AB_MEM_CTL                            (volatile unsigned int *)((0x1f4e  << 2) + 0xff620000)
+// bit[31:24] anc_pic_canvas
+// bit[23:12] max_me_mby_num
+// bit[11:0]  max_me_mbx_num
+#define   ME_PIC_INFO                              (0x1f4f)
+#define P_ME_PIC_INFO                              (volatile unsigned int *)((0x1f4f  << 2) + 0xff620000)
+// bit [23:12] me_sad_enough_1
+// bit [11:0]  me_sad_enough_0
+#define   ME_SAD_ENOUGH_01                         (0x1f50)
+#define P_ME_SAD_ENOUGH_01                         (volatile unsigned int *)((0x1f50  << 2) + 0xff620000)
+// bit [25:12] adv_mv_8x8_enough
+// bit [11:0]  me_sad_enough_2
+#define   ME_SAD_ENOUGH_23                         (0x1f51)
+#define P_ME_SAD_ENOUGH_23                         (volatile unsigned int *)((0x1f51  << 2) + 0xff620000)
+// bit [21:10] me_step0_big_sad
+// bit [9:5] me_step0_close_mv_y
+// bit [4:0] me_step0_close_mv_x
+#define   ME_STEP0_CLOSE_MV                        (0x1f52)
+#define P_ME_STEP0_CLOSE_MV                        (volatile unsigned int *)((0x1f52  << 2) + 0xff620000)
+// bit[31:24] force_skip_sad_3
+// bit[23:16] force_skip_sad_2
+// bit[15:08] force_skip_sad_1
+// bit[07:00] force_skip_sad_0
+#define   ME_F_SKIP_SAD                            (0x1f53)
+#define P_ME_F_SKIP_SAD                            (volatile unsigned int *)((0x1f53  << 2) + 0xff620000)
+// bit[31:24] force_skip_weight_3
+// bit[23:16] force_skip_weight_2
+// bit[15:08] force_skip_weight_1
+// bit[07:00] force_skip_weight_0
+#define   ME_F_SKIP_WEIGHT                         (0x1f54)
+#define P_ME_F_SKIP_WEIGHT                         (volatile unsigned int *)((0x1f54  << 2) + 0xff620000)
+// Merge when (
+//              (flex & me_merge_flex_en) |
+//              (big_sad & me_merge_sad_en)|
+//              ((~me_merge_flex_en)&(~me_merge_sad_en))
+//            ) &
+//            ( small_mv_diff |(~me_merge_small_mv_en))
+//            & (me_merge_flex_en | me_merge_sad_en | me_merge_small_mv_en)
+// bit[31]   me_merge_mv_en_16
+// bit[30]   me_merge_small_mv_en_16
+// bit[29]   me_merge_flex_en_16
+// bit[28]   me_merge_sad_en_16
+// bit[27]   me_merge_mv_en_8
+// bit[26]   me_merge_small_mv_en_8
+// bit[25]   me_merge_flex_en_8
+// bit[24]   me_merge_sad_en_8
+// bit[23:18] me_merge_mv_diff_16
+// bit[17:12] me_merge_mv_diff_8
+// bit[11:0] me_merge_min_sad
+#define   ME_MV_MERGE_CTL                          (0x1f55)
+#define P_ME_MV_MERGE_CTL                          (volatile unsigned int *)((0x1f55  << 2) + 0xff620000)
+// bit[31:24] mv_step_weight_1
+// bit[23:16] mv_pre_weight_1
+// bit [15:0] mv_step_weight_0
+// bit[7:0]   mv_pre_weight_0
+#define   ME_MV_WEIGHT_01                          (0x1f56)
+#define P_ME_MV_WEIGHT_01                          (volatile unsigned int *)((0x1f56  << 2) + 0xff620000)
+// bit[31:24] mv_step_weight_3 (mv_step_weight_1_2nd)
+// bit[23:16] mv_pre_weight_3 (mv_pre_weight_1_2nd)
+// bit[15:8]  mv_step_weight_2
+// bit[7:0]   mv_pre_weight_2
+#define   ME_MV_WEIGHT_23                          (0x1f57)
+#define P_ME_MV_WEIGHT_23                          (volatile unsigned int *)((0x1f57  << 2) + 0xff620000)
+// bit[31:24] me_sad_range_inc_3
+// bit[23:16] me_sad_range_inc_2
+// bit[15:8] me_sad_range_inc_1
+// bit[7:0] me_sad_range_inc_0
+#define   ME_SAD_RANGE_INC                         (0x1f58)
+#define P_ME_SAD_RANGE_INC                         (volatile unsigned int *)((0x1f58  << 2) + 0xff620000)
+// bit[31:19]  reserved
+// bit[18]     sub_relative_any_1_en
+// bit[17]     sub_relative_any_2_en
+// bit[16]     sub_relative_any_3_en
+// bit[15]     sub_relative_any_4_en
+// bit[14]     sub_relative_any_h_en
+// bit[13]     sub_make_non_flex_fix
+// bit[12]     sub_make_big_non_flex_fix
+// bit[11:8]   sub_normal_mv_diff_16
+// bit[7:4]    sub_normal_mv_diff_8
+// bit[3:2]    Reserved
+// bit[1]      sub_merge_enable_16
+// bit[0]      sub_merge_enable_8
+#define   ME_SUB_MERGE_CTL                         (0x1f59)
+#define P_ME_SUB_MERGE_CTL                         (volatile unsigned int *)((0x1f59  << 2) + 0xff620000)
+// bit[31:28]  sub_ref_mv_diff_near
+// bit[27:24]  sub_ref_mv_diff_near_flex
+// bit[23:20]  sub_ref_mv_diff
+// bit[19:16]  sub_ref_mv_diff_flex
+// bit[15:8]   sub_ref_mv_near_weight
+// bit[7:0]    sub_ref_mv_weight
+#define   ME_SUB_REF_MV_CTL                        (0x1f5a)
+#define P_ME_SUB_REF_MV_CTL                        (volatile unsigned int *)((0x1f5a  << 2) + 0xff620000)
+// bit[31:24]  sub_weight_max_sad
+// bit[23:16]  sub_any_range_sad
+// bit[15:8]   sub_any_min_sad
+// bit[7:0]    sub_any_max_sad
+#define   ME_SUB_ANY_WEIGHT_SAD                    (0x1f5b)
+#define P_ME_SUB_ANY_WEIGHT_SAD                    (volatile unsigned int *)((0x1f5b  << 2) + 0xff620000)
+// bit[31:24]  sub_fix_sad
+// bit[23:16]  sub_fix_diff_sad
+// bit[15:8]   sub_sad_flex_adj
+// bit[7:0]    sub_big_non_flex_fix_sad
+#define   ME_SUB_FIX_SAD                           (0x1f5c)
+#define P_ME_SUB_FIX_SAD                           (volatile unsigned int *)((0x1f5c  << 2) + 0xff620000)
+// bit[31:24]  sub_fix_min_sad
+// bit[23:16]  sub_fix_min_diff_sad
+// bit[15:8]   sub_fix_min_sad_2
+// bit[7:0]    sub_fix_min_diff_sad_2
+#define   ME_SUB_FIX_MIN_SAD                       (0x1f5d)
+#define P_ME_SUB_FIX_MIN_SAD                       (volatile unsigned int *)((0x1f5d  << 2) + 0xff620000)
+// bit[31:24]  sub_snap_to_ref_max_sad
+// bit[23]     sub_snap_to_ref_non_flex
+// bit[22:16]  sub_snap_to_ref_mv_diff
+// bit[15:4]   sub_glitch_mv_sad
+// bit[3:0]    sub_glitch_mv_diff
+#define   ME_SUB_SNAP_GLITCH                       (0x1f5e)
+#define P_ME_SUB_SNAP_GLITCH                       (volatile unsigned int *)((0x1f5e  << 2) + 0xff620000)
+// bit[31:20]  sad_act_limit
+// bit[19:8]   s_a_any_sad
+// bit[7]      Reserved
+// bit[6:5]    sub_merge_method
+// bit[4]      use_sub_act_result
+// bit[3]      s_a_rnd
+// bit[2]      Reserved
+// bit[1]      sub_act_en_16
+// bit[0]      sub_act_en
+#define   ME_SUB_ACT_CTL                           (0x1f5f)
+#define P_ME_SUB_ACT_CTL                           (volatile unsigned int *)((0x1f5f  << 2) + 0xff620000)
+// bit[31:16]  reserved
+// bit[15:0]   me_weight
+#define   ME_WEIGHT                                (0x1f60)
+#define P_ME_WEIGHT                                (volatile unsigned int *)((0x1f60  << 2) + 0xff620000)
+// bit[31]  ready_update
+// bit[30]  data_update
+// bit[29:28] reserved
+// bit[27:22] me_quant_0
+// bit[21]  ie_sad_ready_0
+// bit[20:18]  Reserved
+// bit[17:16]  me_sad_mv_type_0
+// bit[15:0] me_sad_0
+#define   ME_SAD_0                                 (0x1f61)
+#define P_ME_SAD_0                                 (volatile unsigned int *)((0x1f61  << 2) + 0xff620000)
+// bit[31]  ready_update
+// bit[30]  data_update
+// bit[29:28] reserved
+// bit[27:22] me_quant_1
+// bit[21]  me_sad_ready_1
+// bit[20:18]  Reserved
+// bit[17:16]  me_sad_mv_type_1
+// bit[15:0] me_sad_1
+#define   ME_SAD_1                                 (0x1f62)
+#define P_ME_SAD_1                                 (volatile unsigned int *)((0x1f62  << 2) + 0xff620000)
+// bit[31]  ready_update
+// bit[30]  data_update
+// bit[29:28] reserved
+// bit[27:22] me_quant_2
+// bit[21]  me_sad_ready_2
+// bit[20:18]  Reserved
+// bit[17:16]  me_sad_mv_type_2
+// bit[15:0] me_sad_2
+#define   ME_SAD_2                                 (0x1f63)
+#define P_ME_SAD_2                                 (volatile unsigned int *)((0x1f63  << 2) + 0xff620000)
+// bit[31]  ready_update
+// bit[30]  data_update
+// bit[29:28] reserved
+// bit[27:22] me_quant_3
+// bit[21]  me_sad_ready_3
+// bit[20:18]  Reserved
+// bit[17:16]  me_sad_mv_type_3
+// bit[15:0] me_sad_3
+#define   ME_SAD_3                                 (0x1f64)
+#define P_ME_SAD_3                                 (volatile unsigned int *)((0x1f64  << 2) + 0xff620000)
+// bit[31]  ready_update
+// bit[30]  data_update
+// bit[29:28] reserved
+// bit[27:22] ie_quant_0
+// bit[21]  ie_sad_ready_0
+// bit[20]   I4/I16 (0-I4MB, 1-I16MB)
+// bit[19:0] ie_sad_0
+#define   IE_SAD_0                                 (0x1f65)
+#define P_IE_SAD_0                                 (volatile unsigned int *)((0x1f65  << 2) + 0xff620000)
+// bit[31]  ready_update
+// bit[30]  data_update
+// bit[29:28] reserved
+// bit[27:22] ie_quant_1
+// bit[21]  ie_sad_ready_1
+// bit[20]   I4/I16 (0-I4MB, 1-I16MB)
+// bit[19:0] ie_sad_1
+#define   IE_SAD_1                                 (0x1f66)
+#define P_IE_SAD_1                                 (volatile unsigned int *)((0x1f66  << 2) + 0xff620000)
+// bit[31]  ready_update
+// bit[30]  data_update
+// bit[29:28] reserved
+// bit[27:22] ie_quant_2
+// bit[21]  ie_sad_ready_2
+// bit[20]   I4/I16 (0-I4MB, 1-I16MB)
+// bit[19:0] ie_sad_2
+#define   IE_SAD_2                                 (0x1f67)
+#define P_IE_SAD_2                                 (volatile unsigned int *)((0x1f67  << 2) + 0xff620000)
+// bit[31]  ready_update
+// bit[30]  data_update
+// bit[29:28] reserved
+// bit[27:22] ie_quant_3
+// bit[21]  ie_sad_ready_3
+// bit[20]   I4/I16 (0-I4MB, 1-I16MB)
+// bit[19:0] ie_sad_3
+#define   IE_SAD_3                                 (0x1f68)
+#define P_IE_SAD_3                                 (volatile unsigned int *)((0x1f68  << 2) + 0xff620000)
+// bit[31]   enable_large_diff_16x8
+// bit[30]   enable_large_diff_8x16
+// bit[29:16] adv_mv_8x8_weight
+// bit[15:14] reserved
+// bit[13:0] adv_mv_4x4x4_weight
+#define   ADV_MV_CTL0                              (0x1f69)
+#define P_ADV_MV_CTL0                              (volatile unsigned int *)((0x1f69  << 2) + 0xff620000)
+// bit[31:16] adv_mv_16x16_weight
+// bit[15]   enable_large_diff_16x16
+// bit[14:0] adv_mv_16_8_weight
+#define   ADV_MV_CTL1                              (0x1f6a)
+#define P_ADV_MV_CTL1                              (volatile unsigned int *)((0x1f6a  << 2) + 0xff620000)
+#define   ADV_MV_CTL2                              (0x1f6b)
+#define P_ADV_MV_CTL2                              (volatile unsigned int *)((0x1f6b  << 2) + 0xff620000)
+// bit[31]    v3_skip_enable
+// bit[30]    v3_step_1_weight_enable // for step1, will only use pre_weight for block0, only step_weight for block 1,2,3
+// bit[29]    v3_l2_skip_only_use_l2_sad // set to 1 may allow l1 maybe not skip
+// bit[28]    v3_mv_sad_weight_enable
+// bit[27]    v3_ipred_type_enable
+// bit[25:12] force_skip_sad_1
+// bit[11:0]  force_skip_sad_0
+#define   V3_SKIP_CONTROL                          (0x1f6c)
+#define P_V3_SKIP_CONTROL                          (volatile unsigned int *)((0x1f6c  << 2) + 0xff620000)
+// bit[18:16] top_ipred_type_count
+// bit[15:14] Reserved
+// bit[13:12] top_ipred_type_rd_idx
+// bit[11:10] top_ipred_type_wr_idx
+// bit[9]   left_ipred_type_ready
+// bit[8]   top_ipred_type_ready
+// bit[7:6] left_mv_idx
+// bit[5:4] top_mv_idx
+// bit[3] - left_mv_ready
+// bit[2:0] top_mv_ready
+#define   V3_TOP_LEFT_CTL                          (0x1f6d)
+#define P_V3_TOP_LEFT_CTL                          (volatile unsigned int *)((0x1f6d  << 2) + 0xff620000)
+#define   V3_TOP_MV                                (0x1f6e)
+#define P_V3_TOP_MV                                (volatile unsigned int *)((0x1f6e  << 2) + 0xff620000)
+#define   V3_LEFT_MV                               (0x1f6f)
+#define P_V3_LEFT_MV                               (volatile unsigned int *)((0x1f6f  << 2) + 0xff620000)
+// bit[31:30] reserved
+// bit[29:16] v3_skip_weight_1
+// bit[15:12] reserved
+// bit[11:0]  v3_skip_weight_0
+#define   V3_SKIP_WEIGHT                           (0x1f70)
+#define P_V3_SKIP_WEIGHT                           (volatile unsigned int *)((0x1f70  << 2) + 0xff620000)
+// bit[31:28] reserved
+// bit[27:16] v3_l1_f_skip_max_sad
+// bit[15:12] reserved
+// bit[11:0]  v3_l1_skip_max_sad
+#define   V3_L1_SKIP_MAX_SAD                       (0x1f71)
+#define P_V3_L1_SKIP_MAX_SAD                       (volatile unsigned int *)((0x1f71  << 2) + 0xff620000)
+// bit[31:16] force_skip_sad_2
+// bit[15:0]  v3_skip_weight_2
+#define   V3_L2_SKIP_WEIGHT                        (0x1f72)
+#define P_V3_L2_SKIP_WEIGHT                        (volatile unsigned int *)((0x1f72  << 2) + 0xff620000)
+// bit[21:16] v3_mv_sad_table_addr 0-15 table_step_0
+// bit[11:0]  v3_mv_sad
+#define   V3_MV_SAD_TABLE                          (0x1f73)
+#define P_V3_MV_SAD_TABLE                          (volatile unsigned int *)((0x1f73  << 2) + 0xff620000)
+// [31:16] v3_ie_f_zero_sad_i16
+// [15:0]  v3_ie_f_zero_sad_i4
+#define   V3_F_ZERO_CTL_0                          (0x1f74)
+#define P_V3_F_ZERO_CTL_0                          (volatile unsigned int *)((0x1f74  << 2) + 0xff620000)
+// [25]    v3_no_ver_when_top_zero_en
+// [24]    v3_no_hor_when_left_zero_en
+// [23:16] v3_max_I16_H_num    // 0 means no break
+// [15:0]  v3_me_f_zero_sad
+#define   V3_F_ZERO_CTL_1                          (0x1f75)
+#define P_V3_F_ZERO_CTL_1                          (volatile unsigned int *)((0x1f75  << 2) + 0xff620000)
+#define   V3_TOP_INTRA_INFO                        (0x1f76)
+#define P_V3_TOP_INTRA_INFO                        (volatile unsigned int *)((0x1f76  << 2) + 0xff620000)
+#define   V3_LEFT_INTRA_INFO                       (0x1f77)
+#define P_V3_LEFT_INTRA_INFO                       (volatile unsigned int *)((0x1f77  << 2) + 0xff620000)
+// [31:24]  C_ipred_weight_H
+// [23:16]  C_ipred_weight_V
+// [15:8]   I4_ipred_weight_else
+// [7:0]    I4_ipred_weight_most
+#define   V3_IPRED_TYPE_WEIGHT_0                   (0x1f78)
+#define P_V3_IPRED_TYPE_WEIGHT_0                   (volatile unsigned int *)((0x1f78  << 2) + 0xff620000)
+// [31:24]  I16_ipred_weight_DC
+// [23:16]  I16_ipred_weight_H
+// [15:8]   I16_ipred_weight_V
+// [7:0]    C_ipred_weight_DC
+#define   V3_IPRED_TYPE_WEIGHT_1                   (0x1f79)
+#define P_V3_IPRED_TYPE_WEIGHT_1                   (volatile unsigned int *)((0x1f79  << 2) + 0xff620000)
+// [31:16]  v3_left_small_max_me_sad
+// [15:0]   v3_left_small_max_ie_sad
+#define   V3_LEFT_SMALL_MAX_SAD                    (0x1f7a)
+#define P_V3_LEFT_SMALL_MAX_SAD                    (volatile unsigned int *)((0x1f7a  << 2) + 0xff620000)
+// (qr==7) & (qp==15) means force zero block
+// [31:26]  v4_force_q_r_intra
+// [25:20]  v4_force_q_r_inter
+// [19]     v4_force_q_y_enable
+// [18:16]  v4_force_qr_y
+// [15:12]  v4_force_qp_y
+// [11:0]   v4_force_skip_sad
+#define   V4_FORCE_SKIP_CFG                        (0x1f7b)
+#define P_V4_FORCE_SKIP_CFG                        (volatile unsigned int *)((0x1f7b  << 2) + 0xff620000)
+// v5 Complexity // Y(256 pixel per MB) and C(128 pixel per MB)
+// For every 4x4 block, calculate average and Add abs(pixel-average) together
+// bit[31:16] v5_diff_sum_C
+// bit[15:0]  v5_diff_sum_Y
+#define   V5_MB_DIFF_SUM                           (0x1f7c)
+#define P_V5_MB_DIFF_SUM                           (volatile unsigned int *)((0x1f7c  << 2) + 0xff620000)
+// bit[31:24] v5_small_diff_cnt_C
+// bit[23:16] v5_small_diff_C
+// bit[15:8]  v5_small_diff_cnt_Y
+// bit[7:0]   v5_small_diff_Y
+#define   V5_SMALL_DIFF_CNT                        (0x1f7d)
+#define P_V5_SMALL_DIFF_CNT                        (volatile unsigned int *)((0x1f7d  << 2) + 0xff620000)
+// bit[31:29] Reserved
+// bit[28:24] v5_simple_block_cnt // 0 -15 Y 16-23 C
+// bit[23:20] v5_simple_pixel_cnt
+// bit[19:18] v5_simple_dq_wr_ptr
+// bit[17:16] v5_simple_dq_rd_ptr
+// bit[15:12] v5_simple_dq (Read Only)
+// bit[11:8]  v5_simple_me_weight(Read Only)
+// bit[7] v5_use_small_diff_cnt
+// bit[6] v5_simple_mb_inter_all_en
+// bit[5] v5_simple_mb_inter_8x8_en
+// bit[4] v5_simple_mb_inter_16_8_en
+// bit[3] v5_simple_mb_inter_16x16_en
+// bit[2] v5_simple_mb_intra_en
+// bit[1] v5_simple_mb_C_en
+// bit[0] v5_simple_mb_Y_en
+#define   V5_SIMPLE_MB_CTL                         (0x1f7e)
+#define P_V5_SIMPLE_MB_CTL                         (volatile unsigned int *)((0x1f7e  << 2) + 0xff620000)
+// bit[31:28] v5_simple_dq_shift
+// bit[27:24] v5_simple_dq_6(-7 to +7)
+// bit[23:20] v5_simple_dq_5(-7 to +7)
+// bit[19:16] v5_simple_dq_4(-7 to +7)
+// bit[15:12] v5_simple_dq_3(-7 to +7)
+// bit[11:08] v5_simple_dq_2(-7 to +7)
+// bit[07:04] v5_simple_dq_1(-7 to +7)
+// bit[03:00] v5_simple_dq_0(-7 to +7)
+#define   V5_SIMPLE_MB_DQUANT                      (0x1f7f)
+#define P_V5_SIMPLE_MB_DQUANT                      (volatile unsigned int *)((0x1f7f  << 2) + 0xff620000)
+// bit[31:28] v5_simple_me_weight_shift
+// bit[27:24] v5_simple_me_weight_6(-7 to +7)
+// bit[23:20] v5_simple_me_weight_5(-7 to +7)
+// bit[19:16] v5_simple_me_weight_4(-7 to +7)
+// bit[15:12] v5_simple_me_weight_3(-7 to +7)
+// bit[11:08] v5_simple_me_weight_2(-7 to +7)
+// bit[07:04] v5_simple_me_weight_1(-7 to +7)
+// bit[03:00] v5_simple_me_weight_0(-7 to +7)
+#define   V5_SIMPLE_MB_ME_WEIGHT                   (0x1f80)
+#define P_V5_SIMPLE_MB_ME_WEIGHT                   (volatile unsigned int *)((0x1f80  << 2) + 0xff620000)
+//
+// Closing file:  qdct_regs.h
+//
+//------------------------------------------------------------------------------
+// HCODEC MDEC module level register offset
+//------------------------------------------------------------------------------
+//
+// Reading file:  hcodec_mdec_regs.h
+//
+//========================================================================
+//  MDEC module level register offset
+//========================================================================
+// -----------------------------------------------
+// CBUS_BASE:  DOS_HCODEC_HDEC_CBUS_BASE = 0x09
+// -----------------------------------------------
+//`define HCODEC_MC_CTRL_REG         8'h00
+//`define HCODEC_MC_MB_INFO          8'h01
+//`define HCODEC_MC_PIC_INFO         8'h02
+//`define HCODEC_MC_HALF_PEL_ONE     8'h03
+//`define HCODEC_MC_HALF_PEL_TWO     8'h04
+//`define HCODEC_POWER_CTL_MC        8'h05
+//
+//`define HCODEC_MC_CMD			    8'h06
+//`define HCODEC_MC_CTRL0			8'h07
+//`define HCODEC_MC_PIC_W_H  	    8'h08
+//`define HCODEC_MC_STATUS0		    8'h09
+//`define HCODEC_MC_STATUS1		    8'h0a
+//`define HCODEC_MC_CTRL1			8'h0b
+//`define HCODEC_MC_MIX_RATIO0	    8'h0c
+//`define HCODEC_MC_MIX_RATIO1	    8'h0d
+//`define HCODEC_MC_DP_MB_XY  	    8'h0e     //read only
+//`define HCODEC_MC_OM_MB_XY  	    8'h0f     //read only
+//
+//`define HCODEC_MC_MPORT_CTRL  	    8'h40
+//`define HCODEC_MC_MPORT_DAT  	    8'h41
+//`define HCODEC_MC_WT_PRED_CTRL  	8'h42
+//`define HCODEC_MC_MBBOT_ST_EVEN_ADDR 8'h44
+//`define HCODEC_MC_MBBOT_ST_ODD_ADDR 8'h45
+//`define HCODEC_MC_DPDN_MB_XY        8'h46    //read only
+//`define HCODEC_MC_OMDN_MB_XY        8'h47    //read only
+//`define HCODEC_MC_HCMDBUF_H        8'h48
+//`define HCODEC_MC_HCMDBUF_L        8'h49
+//`define HCODEC_MC_HCMD_H           8'h4a     //read only
+//`define HCODEC_MC_HCMD_L           8'h4b     //read only
+//`define HCODEC_MC_IDCT_DAT         8'h4c
+//
+//`define HCODEC_MC_CTRL_GCLK_CTRL   8'h4d
+//`define HCODEC_MC_OTHER_GCLK_CTRL  8'h4e
+//
+////Bit 29:24, mbbot thread ID and token
+////Bit 21:16, mc read/write thread ID and token
+////Bit 13:8,  mbbot pre-arbitor burst number
+////Bit 5:0,   mc pre-arbitor burst number
+//`define HCODEC_MC_CTRL2            8'h4f
+//
+//// `define HCODEC_DBLK_QUANT            8'h76 // ONLY for $ucode/real/amrisc/rv.s, reg value from apollo
+//
+////`define HCODEC_ANC1_CANVAS_ADDR      8'h80
+////`define HCODEC_ANC2_CANVAS_ADDR      8'h81
+//
+////`define HCODEC_REC_CANVAS_ADDR       8'h89
+//
+////`define HCODEC_MDEC_PIC_W          8'h8c
+////`define HCODEC_MDEC_PIC_H          8'h8d
+//`define HCODEC_MDEC_PIC_DC_CTRL    8'h8e
+//`define HCODEC_MDEC_PIC_DC_STATUS  8'h8f
+//
+//`define HCODEC_ANC0_CANVAS_ADDR      8'h90
+//`define HCODEC_ANC1_CANVAS_ADDR      8'h91
+//`define HCODEC_ANC2_CANVAS_ADDR      8'h92
+//`define HCODEC_ANC3_CANVAS_ADDR      8'h93
+//`define HCODEC_ANC4_CANVAS_ADDR      8'h94
+//`define HCODEC_ANC5_CANVAS_ADDR      8'h95
+//`define HCODEC_ANC6_CANVAS_ADDR      8'h96
+//`define HCODEC_ANC7_CANVAS_ADDR      8'h97
+//`define HCODEC_ANC8_CANVAS_ADDR      8'h98
+//`define HCODEC_ANC9_CANVAS_ADDR      8'h99
+//`define HCODEC_ANC10_CANVAS_ADDR     8'h9a
+//`define HCODEC_ANC11_CANVAS_ADDR     8'h9b
+//`define HCODEC_ANC12_CANVAS_ADDR     8'h9c
+//`define HCODEC_ANC13_CANVAS_ADDR     8'h9d
+//`define HCODEC_ANC14_CANVAS_ADDR     8'h9e
+//`define HCODEC_ANC15_CANVAS_ADDR     8'h9f
+//`define HCODEC_ANC16_CANVAS_ADDR     8'ha0
+//`define HCODEC_ANC17_CANVAS_ADDR     8'ha1
+//`define HCODEC_ANC18_CANVAS_ADDR     8'ha2
+//`define HCODEC_ANC19_CANVAS_ADDR     8'ha3
+//`define HCODEC_ANC20_CANVAS_ADDR     8'ha4
+//`define HCODEC_ANC21_CANVAS_ADDR     8'ha5
+//`define HCODEC_ANC22_CANVAS_ADDR     8'ha6
+//`define HCODEC_ANC23_CANVAS_ADDR     8'ha7
+//`define HCODEC_ANC24_CANVAS_ADDR     8'ha8
+//`define HCODEC_ANC25_CANVAS_ADDR     8'ha9
+//`define HCODEC_ANC26_CANVAS_ADDR     8'haa
+//`define HCODEC_ANC27_CANVAS_ADDR     8'hab
+//`define HCODEC_ANC28_CANVAS_ADDR     8'hac
+//`define HCODEC_ANC29_CANVAS_ADDR     8'had
+//`define HCODEC_ANC30_CANVAS_ADDR     8'hae
+//`define HCODEC_ANC31_CANVAS_ADDR     8'haf
+//
+//`define HCODEC_DBKR_CANVAS_ADDR      8'hb0
+//`define HCODEC_DBKW_CANVAS_ADDR      8'hb1
+//`define HCODEC_REC_CANVAS_ADDR       8'hb2
+//
+////28:24, read/write, current canvas idx, used in h264 only now
+////23:0, read only, current canvas address, 23:16, Cr canvas addr, 15:8, Cb canvas addr, 7:0, Y  canvas addr
+//`define HCODEC_CURR_CANVAS_CTRL      8'hb3
+//
+//`define HCODEC_MDEC_PIC_DC_THRESH    8'hb8
+//`define HCODEC_MDEC_PICR_BUF_STATUS  8'hb9
+//`define HCODEC_MDEC_PICW_BUF_STATUS  8'hba
+//`define HCODEC_MCW_DBLK_WRRSP_CNT    8'hbb
+//
+//`define HCODEC_AV_SCRATCH_0          8'hc0
+//`define HCODEC_AV_SCRATCH_1          8'hc1
+//`define HCODEC_AV_SCRATCH_2          8'hc2
+//`define HCODEC_AV_SCRATCH_3          8'hc3
+//`define HCODEC_AV_SCRATCH_4          8'hc4
+//`define HCODEC_AV_SCRATCH_5          8'hc5
+//`define HCODEC_AV_SCRATCH_6          8'hc6
+//`define HCODEC_AV_SCRATCH_7          8'hc7
+//`define HCODEC_AV_SCRATCH_8          8'hc8
+//`define HCODEC_AV_SCRATCH_9          8'hc9
+//`define HCODEC_AV_SCRATCH_A          8'hca
+//`define HCODEC_AV_SCRATCH_B          8'hcb
+//`define HCODEC_AV_SCRATCH_C          8'hcc
+//`define HCODEC_AV_SCRATCH_D          8'hcd
+//`define HCODEC_AV_SCRATCH_E          8'hce
+//`define HCODEC_AV_SCRATCH_F          8'hcf
+//`define HCODEC_AV_SCRATCH_G          8'hd0
+//`define HCODEC_AV_SCRATCH_H          8'hd1
+//`define HCODEC_AV_SCRATCH_I          8'hd2
+//`define HCODEC_AV_SCRATCH_J          8'hd3
+//`define HCODEC_AV_SCRATCH_K          8'hd4
+//`define HCODEC_AV_SCRATCH_L          8'hd5
+//`define HCODEC_AV_SCRATCH_M          8'hd6
+//`define HCODEC_AV_SCRATCH_N          8'hd7
+//
+//// bit[29:24] A_brst_num_co_mb
+//// bit[21:16] A_id_co_mb
+//// bit[11:0] wrrsp_count_co_mb
+//`define HCODEC_WRRSP_CO_MB           8'hd8
+//// bit[29:24] A_brst_num_dcac
+//// bit[21:16] A_id_dcac
+//// bit[11:0] wrrsp_count_dcac
+//`define HCODEC_WRRSP_DCAC            8'hd9
+//
+////======================================
+////  MC Control Register Bits
+////
+////======================================
+//// For bits, just copy the defines...don't translate to addresses
+//    `define HCODEC_MC_ENABLE	    16'h0001
+//    //`define MC_RESET	    16'h0002
+//    `define HCODEC_SKIP_MB		    16'h0004
+//
+////======================================
+////  MB Info Register Bits
+////
+////======================================
+//    `define HCODEC_INTRA_MB	    16'h0001
+//
+//    `define HCODEC_BWD_PRED	    16'h0004
+//    `define HCODEC_FWD_PRED	    16'h0008
+//
+//    `define HCODEC_FLD_MOT		    16'h0100
+//    `define HCODEC_FRM_16x8_MOT	16'h0200
+//    `define HCODEC_DUAL_PRM_MOT	16'h0300
+//
+//    `define HCODEC_FRM_DCT		    16'h0000	    // Bit 10
+//    `define HCODEC_FLD_DCT		    16'h0400
+//
+////======================================
+////  MB Info Register Bits
+////
+////======================================
+//    `define HCODEC_I_PIC		    16'h0001
+//    `define HCODEC_P_PIC		    16'h0002
+//    `define HCODEC_B_PIC		    16'h0003
+//
+//    `define HCODEC_FLD_PIC		    16'h0000	    // Bit 8
+//    `define HCODEC_FRM_PIC		    16'h0100
+//
+////========================================================================
+//// DBLK Register:  12'h950 - 12'h97f
+////========================================================================
+//`define HCODEC_DBLK_RST                8'h50
+//`define HCODEC_DBLK_CTRL               8'h51
+//`define HCODEC_DBLK_MB_WID_HEIGHT      8'h52
+//`define HCODEC_DBLK_STATUS             8'h53
+//`define HCODEC_DBLK_CMD_CTRL           8'h54
+//`define HCODEC_DBLK_MB_XY              8'h55
+//`define HCODEC_DBLK_QP                 8'h56
+//`define HCODEC_DBLK_Y_BHFILT           8'h57
+//`define HCODEC_DBLK_Y_BHFILT_HIGH      8'h58
+//`define HCODEC_DBLK_Y_BVFILT           8'h59
+//`define HCODEC_DBLK_CB_BFILT           8'h5a
+//`define HCODEC_DBLK_CR_BFILT           8'h5b
+//`define HCODEC_DBLK_Y_HFILT            8'h5c
+//`define HCODEC_DBLK_Y_HFILT_HIGH       8'h5d
+//`define HCODEC_DBLK_Y_VFILT            8'h5e
+//`define HCODEC_DBLK_CB_FILT            8'h5f
+//`define HCODEC_DBLK_CR_FILT            8'h60
+//`define HCODEC_DBLK_BETAX_QP_SEL       8'h61
+//`define HCODEC_DBLK_CLIP_CTRL0         8'h62
+//`define HCODEC_DBLK_CLIP_CTRL1         8'h63
+//`define HCODEC_DBLK_CLIP_CTRL2         8'h64
+//`define HCODEC_DBLK_CLIP_CTRL3         8'h65
+//`define HCODEC_DBLK_CLIP_CTRL4         8'h66
+//`define HCODEC_DBLK_CLIP_CTRL5         8'h67
+//`define HCODEC_DBLK_CLIP_CTRL6         8'h68
+//`define HCODEC_DBLK_CLIP_CTRL7         8'h69
+//`define HCODEC_DBLK_CLIP_CTRL8         8'h6a
+//
+//`define HCODEC_DBLK_STATUS1            8'h6b
+//`define HCODEC_DBLK_GCLK_FREE          8'h6c
+//`define HCODEC_DBLK_GCLK_OFF           8'h6d
+//
+//`define HCODEC_DBLK_AVSFLAGS           8'h6e
+//
+//// bit 15:0
+//`define HCODEC_DBLK_CBPY               8'h70
+//// bit 11:8 -- deblk_cbpy_bottom
+//// bit 7:4 -- deblk_cbpy_left
+//// bit 3:0 -- deblk_cbpy_top
+//`define HCODEC_DBLK_CBPY_ADJ           8'h71
+//// bit 7:0 -- deblk_cbpc
+//`define HCODEC_DBLK_CBPC               8'h72
+//// bit 15 -- bottom_mb
+//// bit 14 -- left_mb
+//// bit 13 -- top_mb
+//// bit 12 -- reserved
+//// bit 11:8 -- deblk_cbpc_bottom
+//// bit 7:4 -- deblk_cbpc_left
+//// bit 3:0 -- deblk_cbpc_top
+//`define HCODEC_DBLK_CBPC_ADJ           8'h73
+//// bit 15:8 -- deblk_hmvd   -- {left_1, left_0, below_1, below_0, block3-0}
+//// bit 7:0 -- deblk_vmvd    -- {top_1, top_0, below_1, below_0, block3-0}
+//`define HCODEC_DBLK_VHMVD              8'h74
+//// bit 13:12 -- right_vmvd
+//// bit 11 -- right_above_vmvd
+//// bit 10 -- left_below_hmvd
+//// bit 9 -- disable_dblk_luma
+//// bit 8 -- disable_dblk_chroma
+//// bit 7 -- bBelowRefDiff
+//// bit 6 -- bLeftRefDiff
+//// bit 5 -- bAboveRefDiff
+//// bit 4 -- reserved
+//// bit 3 -- s_below
+//// bit 2 -- s_left
+//// bit 1 -- s_above
+//// bit 0 -- s
+//`define HCODEC_DBLK_STRONG             8'h75
+//// bit 14:10 -- PQUANT
+//// bit 9:5 -- left_PQUANT
+//// bit 4:0 -- top_PQUANT
+//`define HCODEC_DBLK_RV8_QUANT          8'h76
+//
+//`define HCODEC_DBLK_CBUS_HCMD2         8'h77
+//`define HCODEC_DBLK_CBUS_HCMD1         8'h78
+//`define HCODEC_DBLK_CBUS_HCMD0         8'h79
+//`define HCODEC_DBLK_VLD_HCMD2          8'h7a
+//`define HCODEC_DBLK_VLD_HCMD1          8'h7b
+//`define HCODEC_DBLK_VLD_HCMD0          8'h7c
+//
+//`define HCODEC_DBLK_OST_YBASE          8'h7d
+//`define HCODEC_DBLK_OST_CBCRDIFF       8'h7e
+//
+////13:8 dblk thread ID and token
+////5:0  dblk prearbitor burst num
+//`define HCODEC_DBLK_CTRL1              8'h7f
+//
+////DBLK last address 12'h97f
+//
+// Closing file:  hcodec_mdec_regs.h
+//
+//------------------------------------------------------------------------------
+// HCODEC VLD module level register offset
+//------------------------------------------------------------------------------
+//
+// Reading file:  hcodec_vld_regs.h
+//
+//========================================================================
+//  VLD module level register offset
+//========================================================================
+// -----------------------------------------------
+// CBUS_BASE:  DOS_HCODEC_VLD_CBUS_BASE = 0x0c
+// -----------------------------------------------
+//
+//`define HCODEC_VLD_STATUS_CTRL     8'h00
+////
+//// bit 10 -- use_old_shift_en
+//// bit 9 -- output_mv_not_pmv
+//// bit 8:5 -- force_zigzag
+//// bit 4 -- force_zigzag_en
+//// bit 3 -- disable_viff_anempty_int
+//// bit 2 -- disable_m2_ac_coeff_one_cycle
+//// bit 1 -- forced_reset  force reset pmv
+//// bit 0 -- mpeg_type  0:mpeg1 1: mpeg2
+//`define HCODEC_MPEG1_2_REG         8'h01
+//`define HCODEC_F_CODE_REG          8'h02
+//`define HCODEC_PIC_HEAD_INFO       8'h03
+//`define HCODEC_SLICE_VER_POS_PIC_TYPE  8'h04
+//`define HCODEC_QP_VALUE_REG        8'h05
+//`define HCODEC_MBA_INC             8'h06
+//`define HCODEC_MB_MOTION_MODE      8'h07
+////`define HCODEC_PACKET_BYTE_COUNT   8'h08
+//// bit 15 -- force_search_startcode_en
+//// bit 14 -- int_cpu_when_error (before do anything)
+//// bit 13 -- vld_error_reset
+//// bit 12 -- return_on_slice_header
+//// bit 6 -- jpeg_ff00_en
+//// bit 5:0 -- vld_power_ctl
+//`define HCODEC_POWER_CTL_VLD       8'h08
+//
+//`define HCODEC_MB_WIDTH	    8'h09
+//`define HCODEC_SLICE_QP            8'h0a
+//// `define HCODEC_MB_X_MB_Y           8'h0b   // current MBX and MBY
+//`define HCODEC_PRE_START_CODE      8'h0b  // ONLY for $ucode/real/amrisc/rv.s, reg value from apollo
+//`define HCODEC_SLICE_START_BYTE_01 8'h0c  // ONLY for $ucode/real/amrisc/rv.s, reg value from apollo
+//`define HCODEC_SLICE_START_BYTE_23 8'h0d  // ONLY for $ucode/real/amrisc/rv.s, reg value from apollo
+//`define HCODEC_RESYNC_MARKER_LENGTH 8'h0e  // Does this exist in HW ? used in $ucode/mpeg4
+//
+//// bit[6:5] - frame/field info, 01 - top, 10 - bottom, 11 - frame
+//// bit[4:0] - buffer ID
+//// L0_BUFF_ID_0, L0_BUFF_ID_1, L1_BUFF_ID_0, L1_BUFF_ID_1
+//`define HCODEC_DECODER_BUFFER_INFO  8'h0f  // Current Only Used for VC1 Interlace Field
+//
+//`define HCODEC_FST_FOR_MV_X        8'h10
+//`define HCODEC_FST_FOR_MV_Y        8'h11
+//`define HCODEC_SCD_FOR_MV_X        8'h12
+//`define HCODEC_SCD_FOR_MV_Y        8'h13
+//`define HCODEC_FST_BAK_MV_X        8'h14
+//`define HCODEC_FST_BAK_MV_Y        8'h15
+//`define HCODEC_SCD_BAK_MV_X        8'h16
+//`define HCODEC_SCD_BAK_MV_Y        8'h17
+//
+//// Bit 7:4 -- read_buffer_interlace  0-progressive, 1-interlace, used in VC1
+//// bit 3 -- reserved
+//// bit 2 -- weighting_prediction
+//// bit 1 -- mb_weighting_flag
+//// bit 0 -- slice_weighting_flag
+//`define HCODEC_VLD_DECODE_CONTROL  8'h18
+//`define HCODEC_VLD_REVERVED_19     8'h19
+//
+//`define HCODEC_VIFF_BIT_CNT        8'h1a
+//`define HCODEC_BYTE_ALIGN_PEAK_HI  8'h1b
+//`define HCODEC_BYTE_ALIGN_PEAK_LO  8'h1c
+//`define HCODEC_NEXT_ALIGN_PEAK     8'h1d  // Does this exist in HW ? used in $ucode/mpeg4
+//
+//// bit 19    : vc1_inv_intra_co_mb_ref_rd
+//// bit 18    : vc1_inv_co_mb_ref_rd
+//// bit 17    : vc1_inv_intra_co_mb_ref_wr
+//// bit 16    : vc1_inv_co_mb_ref_wr
+//// bit 15    : reserved
+//// bit 14    : avs_drop_enable
+//// bit 13:12 : avs_drop_ptr
+//// bit 11:8  : avs_demu_ctl_reg
+//// bit 7 : avs_enable
+//// bit 6 : disable_dblk_hcmd
+//// bit 5 : disable_mc_hcmd
+//// bit 4 : first_mode3_set enable
+//// bit 3 : first_mode3
+//// bit 2:1 : vc1_profile  0-SP, 1-MP, 2-reserved, 3-AP
+//// bit 0   : vc1_enable
+//`define HCODEC_VC1_CONTROL_REG     8'h1e
+//
+//`define HCODEC_PMV1_X              8'h20
+//`define HCODEC_PMV1_Y              8'h21
+//`define HCODEC_PMV2_X              8'h22
+//`define HCODEC_PMV2_Y              8'h23
+//`define HCODEC_PMV3_X              8'h24
+//`define HCODEC_PMV3_Y              8'h25
+//`define HCODEC_PMV4_X              8'h26
+//`define HCODEC_PMV4_Y              8'h27
+//// Can't use the same address for different defines
+//// Therefore, create a single define HCODEC_that covers both
+//// Only appears to be used in micro-code since the VLD hardware is
+//// hard coded.
+//// `define HCODEC_M4_TABLE_SELECT     8'h28  // Does this exist in HW ? Added from register_mp2.h
+//// `define HCODEC_M4_TABLE_OUTPUT     8'h28  // Does this exist in HW ? Added from register_mp2.h
+//`define HCODEC_M4_TABLE_SELECT     8'h28
+//`define HCODEC_M4_CONTROL_REG      8'h29
+//`define HCODEC_BLOCK_NUM           8'h2a  // Does this exist in HW ? Added from register_mp2.h
+//`define HCODEC_PATTERN_CODE        8'h2b  // Does this exist in HW ? Added from register_mp2.h
+//`define HCODEC_MB_INFO             8'h2c  // Does this exist in HW ? Added from register_mp2.h
+//`define HCODEC_VLD_DC_PRED         8'h2d  // Does this exist in HW ? Added from register_mp4.h
+//`define HCODEC_VLD_ERROR_MASK      8'h2e
+//`define HCODEC_VLD_DC_PRED_C       8'h2f  // Does this exist in HW ? Added from register_mp4.h
+//
+//`define HCODEC_LAST_SLICE_MV_ADDR  8'h30
+//`define HCODEC_LAST_MVX            8'h31
+//`define HCODEC_LAST_MVY            8'h32
+//
+//`define HCODEC_VLD_C38             8'h38
+//`define HCODEC_VLD_C39             8'h39
+//
+//`define HCODEC_VLD_STATUS          8'h3a  // Does this exist in HW ? used in $ucode/real/amrisc/rv.s
+//`define HCODEC_VLD_SHIFT_STATUS    8'h3b  // Does this exist in HW ? used in $ucode/real/amrisc/rv.s
+//// `define HCODEC_VLD_SHIFT_INFO      8'h3b  // Does this exist in HW ? used in $ucode/mpeg4
+//`define HCODEC_VOFF_STATUS         8'h3c  // Does this exist in HW ? used in $ucode/mpeg4
+//
+//`define HCODEC_VLD_C3D             8'h3d
+//
+//`define HCODEC_VLD_DBG_INDEX       8'h3e
+//
+//
+//// vld_buff_info -- (index == 0)
+//// Bit[7:6]  mv_UR_ready_cnt;
+//// Bit[5]  vld_wr_idx
+//// Bit[4]  iq_rd_idx
+//// Bit[3]  vld_vi_block_rdy_1
+//// Bit[2]  vld_vi_block_rdy_2
+//// Bit[1]  voff_empty_1
+//// Bit[0]  voff_empty_2
+//
+//// cabac_buff_info_0 -- (index == 1)
+//// Bit[31] shift_data_ready
+//// Bit[30:29] Reserved
+//// Bit[28:24] cabac_buffer_ptr
+//// Bit[23:0] cabac_buffer
+//
+//// cabac_buff_info_1 -- (index == 2)
+//// Bit[31:29] Reserved
+//// Bit[28:20] Drange
+//// Bit[19:16] bin_count_4
+//// Bit[15:13] Reserved
+//// Bit[12:6] context_mem_do
+//// Bit[5:3] coeff_state
+//// Bit[2:0] mvd_state
+//
+//// h264_mv_present -- (index == 3)
+//// Bit[31:16] mv_present_l0
+//// Bit[15:0] mv_present_l1
+//
+//// h264_mv_cal_info_0 -- (index == 4)
+//// [31:28] mv_cal_state
+//// [27:24] direct_spatial_cnt
+//// Bit[23:21] Reserved
+//// Bit[20] mv_UR_ready_for_mv_cal
+//// Bit[19] co_mb_mem_ready_for_mv_cal
+//// Bit[18] mc_dblk_cmd_if_busy
+//// Bit[17] h264_co_mb_wr_busy
+//// Bit[16] H264_cbp_blk_ready
+//// Bit[15] mc_hcmd_rrdy
+//// Bit[14] mc_hcmd_srdy
+//// Bit[13] mc_cmd_if_ready
+//// Bit[12] mc_hcmd_mv_available
+//// Bit[11:8] mc_cmd_if_state
+//// Bit[7] dblk_hcmd_rrdy
+//// Bit[6] dblk_hcmd_srdy
+//// Bit[5] dblk_cmd_if_ready
+//// Bit[4] dblk_hcmd_mv_available
+//// Bit[3:0] dblk_cmd_if_state
+//
+//// h264_mv_cal_info_1 -- (index == 5)
+////  Bit[31:29] Reserved
+////  Bit[28:24] total_mvd_num_l0
+////  Bit[23:21] Reserved
+////  Bit[20:16] mv_cal_ptr_l0
+////  Bit[15:13] Reserved
+////  Bit[12:8] mc_hcmd_ptr_l0
+////  Bit[7:5] Reserved
+////  Bit[4:0] dblk_hcmd_ptr_l0
+//
+//// h264_mv_cal_info_2 -- (index == 6)
+////  Bit[31:29] Reserved
+////  Bit[28:24] total_mvd_num_l1
+////  Bit[23:21] Reserved
+////  Bit[20:16] mv_cal_ptr_l1
+////  Bit[15:13] Reserved
+////  Bit[12:8] mc_hcmd_ptr_l1
+////  Bit[7:5] Reserved
+////  Bit[4:0] dblk_hcmd_ptr_l1
+//
+//// h264_co_mb_info -- (index == 7)
+//// Bit[31:26] Reserved
+//// Bit[25] mv_scale_cal_busy
+//// Bit[24:20] co_mv_count
+//// Bit[19:16] co_mv_process_state
+//// Bit[15] h264_co_mb_rd_busy
+//// Bit[15] h264_co_mb_rd_ready
+//// Bit[13:12] co_mv_transfer_block_cnt
+//// Bit[11:8] co_mv_transfer_ptr
+//// Bit[7] co_mv_POC_l1_busy
+//// Bit[6] h264_weight_scale_cal_en
+//// Bit[5] weight_cal_busy
+//// Bit[4] weight_cal_not_finished
+//// Bit[3:0] weight_process_state
+//
+//`define HCODEC_VLD_DBG_DATA        8'h3f
+//// --------------------------------------------
+//// VIFIFO DDR Interface
+//// --------------------------------------------
+//// The VIFIFO start pointer into DDR memory is a 32-bit number
+//// The Start pointer will automatically be truncated to land on
+//// an 8-byte boundary.  That is, bits [2:0] = 0;
+//`define HCODEC_VLD_MEM_VIFIFO_START_PTR        8'h40
+//// The current pointer points so some location between the START and END
+//// pointers.  The current pointer is a BYTE pointer.  That is, you can
+//// point to any BYTE address within the START/END range
+//`define HCODEC_VLD_MEM_VIFIFO_CURR_PTR         8'h41
+//`define HCODEC_VLD_MEM_VIFIFO_END_PTR          8'h42
+//`define HCODEC_VLD_MEM_VIFIFO_BYTES_AVAIL      8'h43
+//// VIFIFO FIFO Control
+//// bit  [31:24] viff_empty_int_enable_cpu[7:0]
+//// bit  [23:16] viff_empty_int_enable_amrisc[7:0]
+////   -bit 23 Video BUFFER < 0x400 Bytes
+////   -bit 22 Video BUFFER < 0x200 Bytes
+////   -bit 21 Video BUFFER < 0x100 Bytes
+////   -bit 20 Video BUFFER < 0x80 Bytes
+////   -bit 19 Video BUFFER < 0x40 Bytes
+////   -bit 18 Video BUFFER < 0x20 Bytes
+////   -bit 17 vififo  < 16 double words
+////   -bit 16 vififo  < 8 double words
+//// bit  [15:13] unused
+//// bit  [12]    A_urgent
+//// bit  [11]    transfer_length 0 - 32x64 Bits per request, 1 - 16x64 Bits per request
+//// bit  [10]    use_level       Set this bit to 1 to enable filling of the FIFO controlled by the buffer
+////                              level control.  If this bit is 0, then use bit[1] to control the enabling of filling
+//// bit  [9]     Data Ready.     This bit is set when data can be popped
+//// bit  [8]     fill busy       This bit will be high when we're fetching data from the DDR memory
+////                              To reset this module, set cntl_enable = 0, and then wait for busy = 0.
+////                              After that you can pulse cntl_init to start over
+//// bit  [7]     init_with_cntl_init
+//// bit  [6]     reserved
+//// bits [5:3]   endian:         see $lib/rtl/ddr_endian.v
+//// bit  [2]     cntl_empty_en   Set to 1 to enable reading the DDR memory FIFO
+////                              Set cntl_empty_en = cntl_fill_en = 0 when pulsing cntl_init
+//// bit  [1]     cntl_fill_en    Set to 1 to enable reading data from DDR memory
+//// bit  [0]     cntl_init:      After setting the read pointers, sizes, channel masks
+////                              and read masks, set this bit to 1 and then to 0
+////                              NOTE:  You don't need to pulse cntl_init if only the start address is
+////                              being changed
+//`define HCODEC_VLD_MEM_VIFIFO_CONTROL         8'h44
+//// --------------------------------------------
+//// VIFIFO Buffer Level Manager
+//// --------------------------------------------
+//`define HCODEC_VLD_MEM_VIFIFO_WP              8'h45 // Manual or Parser write pointer
+//`define HCODEC_VLD_MEM_VIFIFO_RP              8'h46
+//`define HCODEC_VLD_MEM_VIFIFO_LEVEL           8'h47 // must be low first to shadow low/high 16-bit words
+////
+//// bit  [8]     use_parser_video2_wp
+//// bit  [7]     vbuf2_out_manual
+//// bit  [6]     vbuf_out_manual
+//// bit  [5]     empty (ReadOnly)
+//// bit  [4]     full (ReadOnly)
+//// bit  [3:2]   reserved
+//// bit  [1]     manual mode     Set to 1 for manual write pointer mode
+//// bit  [0]     Init            Set high then low after everything has been initialized
+//`define HCODEC_VLD_MEM_VIFIFO_BUF_CNTL        8'h48
+//
+//// bit 31:16 -- drop_bytes
+//// bit 15:14 -- drop_status (Read-Only)
+//// bit 13:12 -- sync_match_position (Read-Only)
+//// bit 11:6 -- reserved
+//// bit 5:4 -- TIME_STAMP_NUMBER, 0-32bits, 1-64bits, 2-96bits, 3-128bits
+//// bit 3 -- stamp_soft_reset
+//// bit 2 -- TIME_STAMP_length_enable
+//// bit 1 -- TIME_STAMP_sync64_enable
+//// bit 0 -- TIME_STAMP_enable
+//`define HCODEC_VLD_TIME_STAMP_CNTL            8'h49
+//// bit 31:0 -- TIME_STAMP_SYNC_CODE_0
+//`define HCODEC_VLD_TIME_STAMP_SYNC_0          8'h4a
+//// bit 31:0 -- TIME_STAMP_SYNC_CODE_1
+//`define HCODEC_VLD_TIME_STAMP_SYNC_1          8'h4b
+//// bit 31:0 TIME_STAMP_0
+//`define HCODEC_VLD_TIME_STAMP_0               8'h4c
+//// bit 31:0 TIME_STAMP_1
+//`define HCODEC_VLD_TIME_STAMP_1               8'h4d
+//// bit 31:0 TIME_STAMP_2
+//`define HCODEC_VLD_TIME_STAMP_2               8'h4e
+//// bit 31:0 TIME_STAMP_3
+//`define HCODEC_VLD_TIME_STAMP_3               8'h4f
+//// bit 31:0 TIME_STAMP_LENGTH
+//`define HCODEC_VLD_TIME_STAMP_LENGTH          8'h50
+//
+//// bit 15:0 vififo_rd_count
+//`define HCODEC_VLD_MEM_VIFIFO_WRAP_COUNT      8'h51
+//
+//// bit 29:24 A_brst_num
+//// bit 21:16 A_id
+//// bit 15:0 level_hold
+//`define HCODEC_VLD_MEM_VIFIFO_MEM_CTL         8'h52
+//
+//`define HCODEC_VLD_MEM_VBUF_RD_PTR            8'h53 // manual read address for VBUF1
+//`define HCODEC_VLD_MEM_VBUF2_RD_PTR           8'h54 // manual read address for VBUF2
+//
+//`define HCODEC_VLD_MEM_SWAP_ADDR              8'h55
+//// bit[23:16] - swap_d_count (Read Only)
+//// bit[15:8]  - swap_a_count (Read Only)
+//// bit [7] - swap busy (Read Only)
+//// bit [6:2] - reserved
+//// bit [1] - 1 - STORE to Memory, 0 - LOAD from Memory
+//// bit [0] - swap active
+//`define HCODEC_VLD_MEM_SWAP_CTL               8'h56
+//
+// Closing file:  hcodec_vld_regs.h
+//
+//------------------------------------------------------------------------------
+// HCODEC IQIDCT module level register offset
+//------------------------------------------------------------------------------
+//
+// Reading file:  hcodec_iqidct_regs.h
+//
+//========================================================================
+//  IQ/IDCT module level register offset
+//========================================================================
+// -----------------------------------------------
+// CBUS_BASE:  DOS_HCODEC_IQIDCT_CBUS_BASE = 0x0e
+// -----------------------------------------------
+//
+//`define HCODEC_VCOP_CTRL_REG       8'h00
+//`define HCODEC_QP_CTRL_REG         8'h01
+//`define HCODEC_INTRA_QUANT_MATRIX  8'h02
+//`define HCODEC_NON_I_QUANT_MATRIX  8'h03
+//`define HCODEC_DC_SCALER           8'h04
+//`define HCODEC_DC_AC_CTRL          8'h05
+//// `define HCODEC_RV_AI_CTRL          8'h05  // ONLY for $ucode/real/amrisc/rv.s reg value from apollo
+//`define HCODEC_DC_AC_SCALE_MUL     8'h06
+//`define HCODEC_DC_AC_SCALE_DIV     8'h07
+//// `define HCODEC_DC_AC_SCALE_RESULT  8'h06
+//// `define HCODEC_RESERVED_E07        8'h07
+//`define HCODEC_POWER_CTL_IQIDCT    8'h08
+//`define HCODEC_RV_AI_Y_X           8'h09
+//`define HCODEC_RV_AI_U_X           8'h0a
+//`define HCODEC_RV_AI_V_X           8'h0b
+//// bit 15:0 will count up when rv_ai_mb finished when non zero
+//// and rv_ai_mb_finished_int will be generate when this is not zero
+//`define HCODEC_RV_AI_MB_COUNT      8'h0c
+//// For H264 I in PB picture Use -- dma type : h264_next_intra_dma
+//`define HCODEC_NEXT_INTRA_DMA_ADDRESS 8'h0d
+//// Bit 0 -- constrained_intra_pred_flag for H264
+//`define HCODEC_IQIDCT_CONTROL         8'h0e
+//
+//
+//// Bit[31:19] Reserved
+//// Bit[18] iq_waiting
+//// Bit[17] iq_om_wr_idx
+//// Bit[16] iq_om_rd_idx
+//// Bit[15] iq_om_busy
+//// Bit[14] iq_om_2_busy
+//// Bit[13] idx_fifo_0
+//// Bit[12] idx_fifo_1
+//// Bit[11] idx_fifo_2
+//// Bit[10] idx_fifo_3
+//// Bit[9] idx_fifo_4
+//// Bit[8] idx_fifo_5
+//// Bit[7] idx_fifo_6
+//// Bit[6] idx_fifo_7
+//// Bit[5:3] idx_fifo_wp
+//// Bit[2:0] idx_fifo_rp
+//
+//`define HCODEC_IQIDCT_DEBUG_INFO_0    8'h0f
+//
+//// For RTL Simulation Only
+//`define HCODEC_DEBLK_CMD              8'h10
+//
+//// Bit[15+16] ds_mc_valid_2
+//// Bit[14+16] new_idct1_rd_idx_2
+//// Bit[13+16] new_idct1_wr_idx_2
+//// Bit[12+16] idct1_buff0_busy_2
+//// Bit[11+16] idct1_buff1_busy_2
+//// Bit[10+16] new_idct1_busy_2
+//// Bit[9+16] iq_om_8val_2
+//// Bit[8+16] idct1_pipe_busy_2
+//
+//// Bit[7+16] wait_mb_left_finish_hold_2
+//// Bit[6+16] new_idct2_rd_idx_2
+//// Bit[5+16] new_idct2_wr_idx_2
+//// Bit[4+16] idct2_buff0_busy_2
+//// Bit[3+16] idct2_buff1_busy_2
+//// Bit[2+16] idct2_en_2
+//// Bit[1+16] new_idct2_busy_2
+//// Bit[0+16] new_idct1_ready_2
+//
+//// Bit[15] ds_mc_valid_1
+//// Bit[14] new_idct1_rd_idx_1
+//// Bit[13] new_idct1_wr_idx_1
+//// Bit[12] idct1_buff0_busy_1
+//// Bit[11] idct1_buff1_busy_1
+//// Bit[10] new_idct1_busy_1
+//// Bit[9] iq_om_8val_1
+//// Bit[8] idct1_pipe_busy_1
+//
+//// Bit[7] wait_mb_left_finish_hold_1
+//// Bit[6] new_idct2_rd_idx_1
+//// Bit[5] new_idct2_wr_idx_1
+//// Bit[4] idct2_buff0_busy_1
+//// Bit[3] idct2_buff1_busy_1
+//// Bit[2] idct2_en_1
+//// Bit[1] new_idct2_busy_1
+//// Bit[0] new_idct1_ready_1
+//
+//`define HCODEC_IQIDCT_DEBUG_IDCT      8'h11
+//
+//
+//
+//// bit 31 -- convas_enable
+//// bit 30:24 -- convas_x_count ( 8 pixels / 64 bits )
+//// bit 23:16 -- convas_y_count
+//// bit 15   -- dcac_dma_busy
+//// bit 14   -- dcac_dma_urgent
+//// bit 13:8 -- dcac_dma_count
+//// bit 7    -- dcac_dma_rw
+//// bit 6    -- dcac_skip_read_mode
+//// bit 5:0  -- dcac_dma_offset
+//`define HCODEC_DCAC_DMA_CTRL        8'h12
+//// when (convas_enable == 0 )
+////   bit 31:0 dcac_dma_addr
+//// when (convas_enable == 1 )
+////   bit 31:25 canvas_addr (7 bits)
+////   bit 24:12 convas_y_start ( 13 btis )
+////   bit 11:0  convas_x_start ( 12 btis )
+//`define HCODEC_DCAC_DMA_ADDRESS     8'h13
+//// bit 7:0 -- dcac_cpu_addr
+//`define HCODEC_DCAC_CPU_ADDRESS     8'h14
+//// bit 31:0 -- dcac_cpu_data
+//`define HCODEC_DCAC_CPU_DATA        8'h15
+//
+//// bit 31:19 -- reserved
+//// bit 18:16 -- block_num_reg -- Read-Only
+//// bit 15:0 -- dcac_mb_count
+//`define HCODEC_DCAC_MB_COUNT        8'h16
+//
+//// bit 31:18 -- reserved
+//// For H264 :
+////   bit 17:2 -- h264_quant
+////   bit 11:6 -- h264_quant_c
+////   bit  5:0 -- h264_quant_c
+//// For VC1 :
+////   bit    17 -- qindex_GT_8
+////   bit    16 -- HalfQPStep
+////   bit 15:12 -- eQuantMode
+////   bit 11:6  -- AltPQuant
+////   bit  5:0  -- PQuant
+////
+//`define HCODEC_IQ_QUANT             8'h17
+//
+//// bit 31:24  -- bitplane_width
+//// bit 23:16  -- bitplane_height
+//// bit 15:14  -- bitplane_start_x
+//// bit 13:12  -- bitplane_start_y
+//// bit 11:4   -- reserved
+//// bit 3:1    -- bitplane_type
+//// bit 0      -- bitplane_busy
+//`define HCODEC_VC1_BITPLANE_CTL     8'h18
+//
+//
+//
+//    `define HCODEC_RAM_TEST_CMD        12'h002
+//    `define HCODEC_RAM_TEST_ADDR       12'h003
+//    `define HCODEC_RAM_TEST_DATAH      12'h004
+//    `define HCODEC_RAM_TEST_DATAL      12'h005
+//
+//    `define HCODEC_RAM_TEST_RD_CMD	    16'h0000
+//    `define HCODEC_RAM_TEST_WR_CMD	    16'h8000
+//    `define HCODEC_IDCT_TM2_PT0	    16'h0001
+//    `define HCODEC_IDCT_TM2_PT1	    16'h0002
+//    `define HCODEC_IDCT_TM1_PT0	    16'h0004
+//    `define HCODEC_IDCT_TM1_PT1	    16'h0008
+//    `define HCODEC_IQ_OMEM_PT0	        16'h0010
+//    `define HCODEC_IQ_OMEM_PT1	        16'h0020
+//    `define HCODEC_MC_IMEM_PT0	        16'h0040
+//    `define HCODEC_ALL_RAM_PTS	        16'h007f
+//
+////======================================
+////  VCOP Control Register Bits
+////
+////======================================
+//    //`define HCODEC_IQIDCT_RESET	    16'h0001	    // Bit 0
+//    `define HCODEC_QM_WEN		    16'h0002	    // Bit 1
+//    `define HCODEC_IQIDCT_ENABLE	    16'h0004	    // Bit 2
+//    `define HCODEC_INTRA_QM	    16'h0008	    // Bit 3	0 = Use default; 1 = use loaded
+//    `define HCODEC_NINTRA_QM	    16'h0010	    // Bit 4	0 = Use default; 1 = use loaded
+//
+////======================================
+////  QP Control Register Bits
+////
+////======================================
+//    `define HCODEC_INTRA_MODE	    16'h0080	    // Bit 7
+//// Duplicate Address:  When actually used
+//// please move to a different address
+//// `define HCODEC_FLD_DCT_TYPE	    16'h0100	    // Bit 8	0 = Frame DCT; 1 = field DCT
+//
+//
+// Closing file:  hcodec_iqidct_regs.h
+//
+//------------------------------------------------------------------------------
+// HCODEC IQIDCT module level register offset
+//------------------------------------------------------------------------------
+//
+// Reading file:  hcodec_vcpu_regs.h
+//
+//========================================================================
+//  VCPU module level register offset
+//========================================================================
+// -----------------------------------------------
+// CBUS_BASE:  DOS_HCODEC_VCPU_CBUS_BASE = 0x03
+// -----------------------------------------------
+//`define HCODEC_MSP                 8'h00
+//`define HCODEC_MPSR                8'h01
+//`define HCODEC_MINT_VEC_BASE       8'h02
+//`define HCODEC_MCPU_INTR_GRP       8'h03
+//`define HCODEC_MCPU_INTR_MSK       8'h04
+//`define HCODEC_MCPU_INTR_REQ       8'h05
+//`define HCODEC_MPC_P               8'h06
+//`define HCODEC_MPC_D               8'h07
+//`define HCODEC_MPC_E			    8'h08
+//`define HCODEC_MPC_W			    8'h09
+//`define HCODEC_MINDEX0_REG			8'h0a
+//`define HCODEC_MINDEX1_REG			8'h0b
+//`define HCODEC_MINDEX2_REG			8'h0c
+//`define HCODEC_MINDEX3_REG			8'h0d
+//`define HCODEC_MINDEX4_REG			8'h0e
+//`define HCODEC_MINDEX5_REG			8'h0f
+//`define HCODEC_MINDEX6_REG			8'h10
+//`define HCODEC_MINDEX7_REG			8'h11
+//`define HCODEC_MMIN_REG			8'h12
+//`define HCODEC_MMAX_REG			8'h13
+//`define HCODEC_MBREAK0_REG			8'h14
+//`define HCODEC_MBREAK1_REG			8'h15
+//`define HCODEC_MBREAK2_REG			8'h16
+//`define HCODEC_MBREAK3_REG			8'h17
+//`define HCODEC_MBREAK_TYPE			8'h18
+//`define HCODEC_MBREAK_CTRL			8'h19
+//`define HCODEC_MBREAK_STAUTS		8'h1a
+//`define HCODEC_MDB_ADDR_REG		8'h1b
+//`define HCODEC_MDB_DATA_REG		8'h1c
+//`define HCODEC_MDB_CTRL			8'h1d
+//`define HCODEC_MSFTINT0            8'h1e
+//`define HCODEC_MSFTINT1            8'h1f
+//
+//`define HCODEC_CSP                 8'h20
+//`define HCODEC_CPSR                8'h21
+//`define HCODEC_CINT_VEC_BASE       8'h22
+//`define HCODEC_CCPU_INTR_GRP       8'h23
+//`define HCODEC_CCPU_INTR_MSK       8'h24
+//`define HCODEC_CCPU_INTR_REQ       8'h25
+//`define HCODEC_CPC_P               8'h26
+//`define HCODEC_CPC_D               8'h27
+//`define HCODEC_CPC_E			    8'h28
+//`define HCODEC_CPC_W			    8'h29
+//`define HCODEC_CINDEX0_REG			8'h2a
+//`define HCODEC_CINDEX1_REG			8'h2b
+//`define HCODEC_CINDEX2_REG			8'h2c
+//`define HCODEC_CINDEX3_REG			8'h2d
+//`define HCODEC_CINDEX4_REG			8'h2e
+//`define HCODEC_CINDEX5_REG			8'h2f
+//`define HCODEC_CINDEX6_REG			8'h30
+//`define HCODEC_CINDEX7_REG			8'h31
+//`define HCODEC_CMIN_REG			8'h32
+//`define HCODEC_CMAX_REG			8'h33
+//`define HCODEC_CBREAK0_REG			8'h34
+//`define HCODEC_CBREAK1_REG			8'h35
+//`define HCODEC_CBREAK2_REG			8'h36
+//`define HCODEC_CBREAK3_REG			8'h37
+//`define HCODEC_CBREAK_TYPE			8'h38
+//`define HCODEC_CBREAK_CTRL			8'h39
+//`define HCODEC_CBREAK_STAUTS		8'h3a
+//`define HCODEC_CDB_ADDR_REG		8'h3b
+//`define HCODEC_CDB_DATA_REG		8'h3c
+//`define HCODEC_CDB_CTRL			8'h3d
+//`define HCODEC_CSFTINT0            8'h3e
+//`define HCODEC_CSFTINT1            8'h3f
+//
+//`define HCODEC_IMEM_DMA_CTRL       8'h40
+//`define HCODEC_IMEM_DMA_ADR        8'h41
+//`define HCODEC_IMEM_DMA_COUNT      8'h42
+//// bit[29:24] A_brst_num_imem
+//// bit[21:16] A_id_imem
+//// bit[11:0] wrrsp_count_imem (reserved)
+//`define HCODEC_WRRSP_IMEM          8'h43
+//
+//`define HCODEC_LMEM_DMA_CTRL       8'h50
+//`define HCODEC_LMEM_DMA_ADR        8'h51
+//`define HCODEC_LMEM_DMA_COUNT      8'h52
+//// bit[29:24] A_brst_num_lmem
+//// bit[21:16] A_id_lmem
+//// bit[11:0] wrrsp_count_lmem
+//`define HCODEC_WRRSP_LMEM          8'h53
+//
+//`define HCODEC_MAC_CTRL1			8'h60
+//`define HCODEC_ACC0REG1			8'h61
+//`define HCODEC_ACC1REG1			8'h62
+//
+//`define HCODEC_MAC_CTRL2			8'h70
+//`define HCODEC_ACC0REG2			8'h71
+//`define HCODEC_ACC1REG2			8'h72
+//`define HCODEC_CPU_TRACE			8'h80
+//
+//
+// Closing file:  hcodec_vcpu_regs.h
+//
+//------------------------------------------------------------------------------
+// HEVC_ASSIST module level register offset
+//------------------------------------------------------------------------------
+// -----------------------------------------------
+// CBUS_BASE:  DOS_HEVC_ASSIST_CBUS_BASE = 0x00
+// -----------------------------------------------
+#define   HEVC_ASSIST_AFIFO_CTRL                   (0x3001)
+#define P_HEVC_ASSIST_AFIFO_CTRL                   (volatile unsigned int *)((0x3001  << 2) + 0xff620000)
+#define   HEVC_ASSIST_AFIFO_CTRL1                  (0x3002)
+#define P_HEVC_ASSIST_AFIFO_CTRL1                  (volatile unsigned int *)((0x3002  << 2) + 0xff620000)
+#define   HEVC_ASSIST_GCLK_EN                      (0x3003)
+#define P_HEVC_ASSIST_GCLK_EN                      (volatile unsigned int *)((0x3003  << 2) + 0xff620000)
+#define   HEVC_ASSIST_SW_RESET                     (0x3004)
+#define P_HEVC_ASSIST_SW_RESET                     (volatile unsigned int *)((0x3004  << 2) + 0xff620000)
+#define   HEVC_ASSIST_AMR1_INT0                    (0x3025)
+#define P_HEVC_ASSIST_AMR1_INT0                    (volatile unsigned int *)((0x3025  << 2) + 0xff620000)
+#define   HEVC_ASSIST_AMR1_INT1                    (0x3026)
+#define P_HEVC_ASSIST_AMR1_INT1                    (volatile unsigned int *)((0x3026  << 2) + 0xff620000)
+#define   HEVC_ASSIST_AMR1_INT2                    (0x3027)
+#define P_HEVC_ASSIST_AMR1_INT2                    (volatile unsigned int *)((0x3027  << 2) + 0xff620000)
+#define   HEVC_ASSIST_AMR1_INT3                    (0x3028)
+#define P_HEVC_ASSIST_AMR1_INT3                    (volatile unsigned int *)((0x3028  << 2) + 0xff620000)
+#define   HEVC_ASSIST_AMR1_INT4                    (0x3029)
+#define P_HEVC_ASSIST_AMR1_INT4                    (volatile unsigned int *)((0x3029  << 2) + 0xff620000)
+#define   HEVC_ASSIST_AMR1_INT5                    (0x302a)
+#define P_HEVC_ASSIST_AMR1_INT5                    (volatile unsigned int *)((0x302a  << 2) + 0xff620000)
+#define   HEVC_ASSIST_AMR1_INT6                    (0x302b)
+#define P_HEVC_ASSIST_AMR1_INT6                    (volatile unsigned int *)((0x302b  << 2) + 0xff620000)
+#define   HEVC_ASSIST_AMR1_INT7                    (0x302c)
+#define P_HEVC_ASSIST_AMR1_INT7                    (volatile unsigned int *)((0x302c  << 2) + 0xff620000)
+#define   HEVC_ASSIST_AMR1_INT8                    (0x302d)
+#define P_HEVC_ASSIST_AMR1_INT8                    (volatile unsigned int *)((0x302d  << 2) + 0xff620000)
+#define   HEVC_ASSIST_AMR1_INT9                    (0x302e)
+#define P_HEVC_ASSIST_AMR1_INT9                    (volatile unsigned int *)((0x302e  << 2) + 0xff620000)
+#define   HEVC_ASSIST_AMR1_INTA                    (0x302f)
+#define P_HEVC_ASSIST_AMR1_INTA                    (volatile unsigned int *)((0x302f  << 2) + 0xff620000)
+#define   HEVC_ASSIST_AMR1_INTB                    (0x3030)
+#define P_HEVC_ASSIST_AMR1_INTB                    (volatile unsigned int *)((0x3030  << 2) + 0xff620000)
+#define   HEVC_ASSIST_AMR1_INTC                    (0x3031)
+#define P_HEVC_ASSIST_AMR1_INTC                    (volatile unsigned int *)((0x3031  << 2) + 0xff620000)
+#define   HEVC_ASSIST_AMR1_INTD                    (0x3032)
+#define P_HEVC_ASSIST_AMR1_INTD                    (volatile unsigned int *)((0x3032  << 2) + 0xff620000)
+#define   HEVC_ASSIST_AMR1_INTE                    (0x3033)
+#define P_HEVC_ASSIST_AMR1_INTE                    (volatile unsigned int *)((0x3033  << 2) + 0xff620000)
+#define   HEVC_ASSIST_AMR1_INTF                    (0x3034)
+#define P_HEVC_ASSIST_AMR1_INTF                    (volatile unsigned int *)((0x3034  << 2) + 0xff620000)
+#define   HEVC_ASSIST_AMR2_INT0                    (0x3035)
+#define P_HEVC_ASSIST_AMR2_INT0                    (volatile unsigned int *)((0x3035  << 2) + 0xff620000)
+#define   HEVC_ASSIST_AMR2_INT1                    (0x3036)
+#define P_HEVC_ASSIST_AMR2_INT1                    (volatile unsigned int *)((0x3036  << 2) + 0xff620000)
+#define   HEVC_ASSIST_AMR2_INT2                    (0x3037)
+#define P_HEVC_ASSIST_AMR2_INT2                    (volatile unsigned int *)((0x3037  << 2) + 0xff620000)
+#define   HEVC_ASSIST_AMR2_INT3                    (0x3038)
+#define P_HEVC_ASSIST_AMR2_INT3                    (volatile unsigned int *)((0x3038  << 2) + 0xff620000)
+#define   HEVC_ASSIST_AMR2_INT4                    (0x3039)
+#define P_HEVC_ASSIST_AMR2_INT4                    (volatile unsigned int *)((0x3039  << 2) + 0xff620000)
+#define   HEVC_ASSIST_AMR2_INT5                    (0x303a)
+#define P_HEVC_ASSIST_AMR2_INT5                    (volatile unsigned int *)((0x303a  << 2) + 0xff620000)
+#define   HEVC_ASSIST_AMR2_INT6                    (0x303b)
+#define P_HEVC_ASSIST_AMR2_INT6                    (volatile unsigned int *)((0x303b  << 2) + 0xff620000)
+#define   HEVC_ASSIST_AMR2_INT7                    (0x303c)
+#define P_HEVC_ASSIST_AMR2_INT7                    (volatile unsigned int *)((0x303c  << 2) + 0xff620000)
+#define   HEVC_ASSIST_AMR2_INT8                    (0x303d)
+#define P_HEVC_ASSIST_AMR2_INT8                    (volatile unsigned int *)((0x303d  << 2) + 0xff620000)
+#define   HEVC_ASSIST_AMR2_INT9                    (0x303e)
+#define P_HEVC_ASSIST_AMR2_INT9                    (volatile unsigned int *)((0x303e  << 2) + 0xff620000)
+#define   HEVC_ASSIST_AMR2_INTA                    (0x303f)
+#define P_HEVC_ASSIST_AMR2_INTA                    (volatile unsigned int *)((0x303f  << 2) + 0xff620000)
+#define   HEVC_ASSIST_AMR2_INTB                    (0x3040)
+#define P_HEVC_ASSIST_AMR2_INTB                    (volatile unsigned int *)((0x3040  << 2) + 0xff620000)
+#define   HEVC_ASSIST_AMR2_INTC                    (0x3041)
+#define P_HEVC_ASSIST_AMR2_INTC                    (volatile unsigned int *)((0x3041  << 2) + 0xff620000)
+#define   HEVC_ASSIST_AMR2_INTD                    (0x3042)
+#define P_HEVC_ASSIST_AMR2_INTD                    (volatile unsigned int *)((0x3042  << 2) + 0xff620000)
+#define   HEVC_ASSIST_AMR2_INTE                    (0x3043)
+#define P_HEVC_ASSIST_AMR2_INTE                    (volatile unsigned int *)((0x3043  << 2) + 0xff620000)
+#define   HEVC_ASSIST_AMR2_INTF                    (0x3044)
+#define P_HEVC_ASSIST_AMR2_INTF                    (volatile unsigned int *)((0x3044  << 2) + 0xff620000)
+#define   HEVC_ASSIST_MBX_SSEL                     (0x3045)
+#define P_HEVC_ASSIST_MBX_SSEL                     (volatile unsigned int *)((0x3045  << 2) + 0xff620000)
+#define   HEVC_ASSIST_TIMER0_LO                    (0x3060)
+#define P_HEVC_ASSIST_TIMER0_LO                    (volatile unsigned int *)((0x3060  << 2) + 0xff620000)
+#define   HEVC_ASSIST_TIMER0_HI                    (0x3061)
+#define P_HEVC_ASSIST_TIMER0_HI                    (volatile unsigned int *)((0x3061  << 2) + 0xff620000)
+#define   HEVC_ASSIST_TIMER1_LO                    (0x3062)
+#define P_HEVC_ASSIST_TIMER1_LO                    (volatile unsigned int *)((0x3062  << 2) + 0xff620000)
+#define   HEVC_ASSIST_TIMER1_HI                    (0x3063)
+#define P_HEVC_ASSIST_TIMER1_HI                    (volatile unsigned int *)((0x3063  << 2) + 0xff620000)
+#define   HEVC_ASSIST_DMA_INT                      (0x3064)
+#define P_HEVC_ASSIST_DMA_INT                      (volatile unsigned int *)((0x3064  << 2) + 0xff620000)
+#define   HEVC_ASSIST_DMA_INT_MSK                  (0x3065)
+#define P_HEVC_ASSIST_DMA_INT_MSK                  (volatile unsigned int *)((0x3065  << 2) + 0xff620000)
+#define   HEVC_ASSIST_DMA_INT2                     (0x3066)
+#define P_HEVC_ASSIST_DMA_INT2                     (volatile unsigned int *)((0x3066  << 2) + 0xff620000)
+#define   HEVC_ASSIST_DMA_INT_MSK2                 (0x3067)
+#define P_HEVC_ASSIST_DMA_INT_MSK2                 (volatile unsigned int *)((0x3067  << 2) + 0xff620000)
+#define   HEVC_ASSIST_MBOX0_IRQ_REG                (0x3070)
+#define P_HEVC_ASSIST_MBOX0_IRQ_REG                (volatile unsigned int *)((0x3070  << 2) + 0xff620000)
+#define   HEVC_ASSIST_MBOX0_CLR_REG                (0x3071)
+#define P_HEVC_ASSIST_MBOX0_CLR_REG                (volatile unsigned int *)((0x3071  << 2) + 0xff620000)
+#define   HEVC_ASSIST_MBOX0_MASK                   (0x3072)
+#define P_HEVC_ASSIST_MBOX0_MASK                   (volatile unsigned int *)((0x3072  << 2) + 0xff620000)
+#define   HEVC_ASSIST_MBOX0_FIQ_SEL                (0x3073)
+#define P_HEVC_ASSIST_MBOX0_FIQ_SEL                (volatile unsigned int *)((0x3073  << 2) + 0xff620000)
+#define   HEVC_ASSIST_MBOX1_IRQ_REG                (0x3074)
+#define P_HEVC_ASSIST_MBOX1_IRQ_REG                (volatile unsigned int *)((0x3074  << 2) + 0xff620000)
+#define   HEVC_ASSIST_MBOX1_CLR_REG                (0x3075)
+#define P_HEVC_ASSIST_MBOX1_CLR_REG                (volatile unsigned int *)((0x3075  << 2) + 0xff620000)
+#define   HEVC_ASSIST_MBOX1_MASK                   (0x3076)
+#define P_HEVC_ASSIST_MBOX1_MASK                   (volatile unsigned int *)((0x3076  << 2) + 0xff620000)
+#define   HEVC_ASSIST_MBOX1_FIQ_SEL                (0x3077)
+#define P_HEVC_ASSIST_MBOX1_FIQ_SEL                (volatile unsigned int *)((0x3077  << 2) + 0xff620000)
+#define   HEVC_ASSIST_MBOX2_IRQ_REG                (0x3078)
+#define P_HEVC_ASSIST_MBOX2_IRQ_REG                (volatile unsigned int *)((0x3078  << 2) + 0xff620000)
+#define   HEVC_ASSIST_MBOX2_CLR_REG                (0x3079)
+#define P_HEVC_ASSIST_MBOX2_CLR_REG                (volatile unsigned int *)((0x3079  << 2) + 0xff620000)
+#define   HEVC_ASSIST_MBOX2_MASK                   (0x307a)
+#define P_HEVC_ASSIST_MBOX2_MASK                   (volatile unsigned int *)((0x307a  << 2) + 0xff620000)
+#define   HEVC_ASSIST_MBOX2_FIQ_SEL                (0x307b)
+#define P_HEVC_ASSIST_MBOX2_FIQ_SEL                (volatile unsigned int *)((0x307b  << 2) + 0xff620000)
+// bit[31:24] - read request
+// bit[23:16] - write request
+// bit[7] - disable_aml_axi_clk_gating
+// bit[3:0] - arb_switch_cnt
+#define   HEVC_ASSIST_AXI_CTRL                     (0x307c)
+#define P_HEVC_ASSIST_AXI_CTRL                     (volatile unsigned int *)((0x307c  << 2) + 0xff620000)
+// bit[31:24] - read arb result
+// bit[23:16] - write arb result
+// bit[15:12] - read_ar_cnt
+// bit[11:8] - write_aw_cnt
+// bit[7] - arvalid_axi_s0
+// bit[6] - arready_axi_s0
+// bit[5] - awvalid_axi_s0
+// bit[4] - awready_axi_s0
+// bit[3:0] - write_fifo_cnt
+#define   HEVC_ASSIST_AXI_STATUS                   (0x307d)
+#define P_HEVC_ASSIST_AXI_STATUS                   (volatile unsigned int *)((0x307d  << 2) + 0xff620000)
+#define   HEVC_ASSIST_SCRATCH_0                    (0x30c0)
+#define P_HEVC_ASSIST_SCRATCH_0                    (volatile unsigned int *)((0x30c0  << 2) + 0xff620000)
+#define   HEVC_ASSIST_SCRATCH_1                    (0x30c1)
+#define P_HEVC_ASSIST_SCRATCH_1                    (volatile unsigned int *)((0x30c1  << 2) + 0xff620000)
+#define   HEVC_ASSIST_SCRATCH_2                    (0x30c2)
+#define P_HEVC_ASSIST_SCRATCH_2                    (volatile unsigned int *)((0x30c2  << 2) + 0xff620000)
+#define   HEVC_ASSIST_SCRATCH_3                    (0x30c3)
+#define P_HEVC_ASSIST_SCRATCH_3                    (volatile unsigned int *)((0x30c3  << 2) + 0xff620000)
+#define   HEVC_ASSIST_SCRATCH_4                    (0x30c4)
+#define P_HEVC_ASSIST_SCRATCH_4                    (volatile unsigned int *)((0x30c4  << 2) + 0xff620000)
+#define   HEVC_ASSIST_SCRATCH_5                    (0x30c5)
+#define P_HEVC_ASSIST_SCRATCH_5                    (volatile unsigned int *)((0x30c5  << 2) + 0xff620000)
+#define   HEVC_ASSIST_SCRATCH_6                    (0x30c6)
+#define P_HEVC_ASSIST_SCRATCH_6                    (volatile unsigned int *)((0x30c6  << 2) + 0xff620000)
+#define   HEVC_ASSIST_SCRATCH_7                    (0x30c7)
+#define P_HEVC_ASSIST_SCRATCH_7                    (volatile unsigned int *)((0x30c7  << 2) + 0xff620000)
+#define   HEVC_ASSIST_SCRATCH_8                    (0x30c8)
+#define P_HEVC_ASSIST_SCRATCH_8                    (volatile unsigned int *)((0x30c8  << 2) + 0xff620000)
+#define   HEVC_ASSIST_SCRATCH_9                    (0x30c9)
+#define P_HEVC_ASSIST_SCRATCH_9                    (volatile unsigned int *)((0x30c9  << 2) + 0xff620000)
+#define   HEVC_ASSIST_SCRATCH_A                    (0x30ca)
+#define P_HEVC_ASSIST_SCRATCH_A                    (volatile unsigned int *)((0x30ca  << 2) + 0xff620000)
+#define   HEVC_ASSIST_SCRATCH_B                    (0x30cb)
+#define P_HEVC_ASSIST_SCRATCH_B                    (volatile unsigned int *)((0x30cb  << 2) + 0xff620000)
+#define   HEVC_ASSIST_SCRATCH_C                    (0x30cc)
+#define P_HEVC_ASSIST_SCRATCH_C                    (volatile unsigned int *)((0x30cc  << 2) + 0xff620000)
+#define   HEVC_ASSIST_SCRATCH_D                    (0x30cd)
+#define P_HEVC_ASSIST_SCRATCH_D                    (volatile unsigned int *)((0x30cd  << 2) + 0xff620000)
+#define   HEVC_ASSIST_SCRATCH_E                    (0x30ce)
+#define P_HEVC_ASSIST_SCRATCH_E                    (volatile unsigned int *)((0x30ce  << 2) + 0xff620000)
+#define   HEVC_ASSIST_SCRATCH_F                    (0x30cf)
+#define P_HEVC_ASSIST_SCRATCH_F                    (volatile unsigned int *)((0x30cf  << 2) + 0xff620000)
+#define   HEVC_ASSIST_SCRATCH_G                    (0x30d0)
+#define P_HEVC_ASSIST_SCRATCH_G                    (volatile unsigned int *)((0x30d0  << 2) + 0xff620000)
+#define   HEVC_ASSIST_SCRATCH_H                    (0x30d1)
+#define P_HEVC_ASSIST_SCRATCH_H                    (volatile unsigned int *)((0x30d1  << 2) + 0xff620000)
+#define   HEVC_ASSIST_SCRATCH_I                    (0x30d2)
+#define P_HEVC_ASSIST_SCRATCH_I                    (volatile unsigned int *)((0x30d2  << 2) + 0xff620000)
+#define   HEVC_ASSIST_SCRATCH_J                    (0x30d3)
+#define P_HEVC_ASSIST_SCRATCH_J                    (volatile unsigned int *)((0x30d3  << 2) + 0xff620000)
+#define   HEVC_ASSIST_SCRATCH_K                    (0x30d4)
+#define P_HEVC_ASSIST_SCRATCH_K                    (volatile unsigned int *)((0x30d4  << 2) + 0xff620000)
+#define   HEVC_ASSIST_SCRATCH_L                    (0x30d5)
+#define P_HEVC_ASSIST_SCRATCH_L                    (volatile unsigned int *)((0x30d5  << 2) + 0xff620000)
+#define   HEVC_ASSIST_SCRATCH_M                    (0x30d6)
+#define P_HEVC_ASSIST_SCRATCH_M                    (volatile unsigned int *)((0x30d6  << 2) + 0xff620000)
+#define   HEVC_ASSIST_SCRATCH_N                    (0x30d7)
+#define P_HEVC_ASSIST_SCRATCH_N                    (volatile unsigned int *)((0x30d7  << 2) + 0xff620000)
+//------------------------------------------------------------------------------
+// HEVC_ASSIST module level register offset
+// Same as VDEC/HCODEC to avoid confusing software guy
+//------------------------------------------------------------------------------
+// -----------------------------------------------
+// CBUS_BASE:  DOS_HEVC_VCPU_CBUS_BASE = 0x03
+// -----------------------------------------------
+//------------------------------------------------------------------------------
+// HEVC_PARSER module level register offset
+//------------------------------------------------------------------------------
+//
+// Reading file:  hevc_parser_regs.h
+//
+// -----------------------------------------------
+// CBUS_BASE:  DOS_HEVC_PARSER_CBUS_BASE = 0x01
+// -----------------------------------------------
+// [31:0] After reset version, can be used for test scratch register
+#define   HEVC_PARSER_VERSION                      (0x3100)
+#define P_HEVC_PARSER_VERSION                      (volatile unsigned int *)((0x3100  << 2) + 0xff620000)
+// [31:16] - axi_setting
+// [15]    - disable_stream_clock_gating
+// [14]    - wstrb_set
+// [13]    - stream_read_pause
+// [6:4]   - stream_fetch_endian
+// [3]     - use_parser_vbuf_wp
+// [2]     - use_parser_vbuf2_wp
+// [1]     - stream_fetch_busy - Read Only
+// [0]     - stream_fetch_enable
+#define   HEVC_STREAM_CONTROL                      (0x3101)
+#define P_HEVC_STREAM_CONTROL                      (volatile unsigned int *)((0x3101  << 2) + 0xff620000)
+#define   HEVC_STREAM_START_ADDR                   (0x3102)
+#define P_HEVC_STREAM_START_ADDR                   (volatile unsigned int *)((0x3102  << 2) + 0xff620000)
+#define   HEVC_STREAM_END_ADDR                     (0x3103)
+#define P_HEVC_STREAM_END_ADDR                     (volatile unsigned int *)((0x3103  << 2) + 0xff620000)
+// SW stream_buffer_wr_ptr
+#define   HEVC_STREAM_WR_PTR                       (0x3104)
+#define P_HEVC_STREAM_WR_PTR                       (volatile unsigned int *)((0x3104  << 2) + 0xff620000)
+#define   HEVC_STREAM_RD_PTR                       (0x3105)
+#define P_HEVC_STREAM_RD_PTR                       (volatile unsigned int *)((0x3105  << 2) + 0xff620000)
+//[31:0] stream_buffer_level - read only
+#define   HEVC_STREAM_LEVEL                        (0x3106)
+#define P_HEVC_STREAM_LEVEL                        (volatile unsigned int *)((0x3106  << 2) + 0xff620000)
+// [31:29] stream_buffer_hole 256*(4^0) bytes
+// [28:23] stream_fifo_hole
+// [22:16] stream_fifo_level
+// [15]    stream_fifo_wr_ptr_update_en
+// [14:8]  stream_fifo_wr_ptr
+// [7]     stream_fifo_rd_ptr_update_en
+// [6:0]   stream_fifo_rd_ptr
+#define   HEVC_STREAM_FIFO_CTL                     (0x3107)
+#define P_HEVC_STREAM_FIFO_CTL                     (volatile unsigned int *)((0x3107  << 2) + 0xff620000)
+// [31:16] - Reserved
+// [15]    - disable_shift_clock_gating
+// [14]    - disable_start_code_protect
+// [10]    - length_zero_startcode_en
+// [9]     - length_valid_startcode_en
+// [8:6]   - sft_valid_wr_position (default : 3 (at least 24 bits available))
+// [5:4]   - emulate_code_length_sub_1(Default : 2)
+// [3]     - emulation_auto_on_startcode(Default : 0)
+// [2:1]   - start_code_length_sub_1(Default : 2)
+// [0]     - stream_shift_enable(Default : 0)
+#define   HEVC_SHIFT_CONTROL                       (0x3108)
+#define P_HEVC_SHIFT_CONTROL                       (volatile unsigned int *)((0x3108  << 2) + 0xff620000)
+// [31:0]  - max 4-bytes start code (Default : 0x00000100)
+#define   HEVC_SHIFT_STARTCODE                     (0x3109)
+#define P_HEVC_SHIFT_STARTCODE                     (volatile unsigned int *)((0x3109  << 2) + 0xff620000)
+// [31:0]  - max 4-bytes emulate code (Default : 0x00000300)
+#define   HEVC_SHIFT_EMULATECODE                   (0x310a)
+#define P_HEVC_SHIFT_EMULATECODE                   (volatile unsigned int *)((0x310a  << 2) + 0xff620000)
+// [2]     - startcode_searching
+// [1]     - emulation_check_on
+// [0]     - startcode_check_on
+#define   HEVC_SHIFT_STATUS                        (0x310b)
+#define P_HEVC_SHIFT_STATUS                        (volatile unsigned int *)((0x310b  << 2) + 0xff620000)
+// [31:0] hevc_shifted_data - read only
+#define   HEVC_SHIFTED_DATA                        (0x310c)
+#define P_HEVC_SHIFTED_DATA                        (volatile unsigned int *)((0x310c  << 2) + 0xff620000)
+// [31:0] shift_byte_count[31:0]
+#define   HEVC_SHIFT_BYTE_COUNT                    (0x310d)
+#define P_HEVC_SHIFT_BYTE_COUNT                    (volatile unsigned int *)((0x310d  << 2) + 0xff620000)
+// [31:28] - shift_byte_count[35:32]
+// [27:20] - element_read_data[31:24]
+// [10]    - bytealign
+// [9]     - signed_element
+// [8]     - start_element_read
+// [7]     - shift_busy
+// [6:0]   - shift_bits
+#define   HEVC_SHIFT_COMMAND                       (0x310e)
+#define P_HEVC_SHIFT_COMMAND                       (volatile unsigned int *)((0x310e  << 2) + 0xff620000)
+// 31:8    - element_read_data[23:0]
+//  7:2    - element_read_length
+//  1:0    - element_read_state
+#define   HEVC_ELEMENT_RESULT                      (0x310f)
+#define P_HEVC_ELEMENT_RESULT                      (volatile unsigned int *)((0x310f  << 2) + 0xff620000)
+// [31:16] - cabac_buffer
+// [15]    - cabac_buffer_init
+// [14]    - cabac_context_init
+// [13]    - disable_cabac_clock_gating
+// [12]    - cabac_init_flag
+// [11]    - Reserved
+// [10]    - VP9_init_mv
+// [9]     - VP9_init_ref_mode
+// [8]     - VP9_init_if_y_mode
+// [7]     - VP9_init_intra_inter
+// [6]     - VP9_init_inter_mode
+// [5]     - VP9_init_coef
+// [4]     - VP9_init_tx_mode
+// [3]     - VP9_init_skip
+// [2]     - VP9_init_partition
+// [1]     - VP9_key_frame
+// [0]     - cabac_enable(Default : 0)
+#define   HEVC_CABAC_CONTROL                       (0x3110)
+#define P_HEVC_CABAC_CONTROL                       (volatile unsigned int *)((0x3110  << 2) + 0xff620000)
+// [31:25] - chromaQPOffset_U
+// [24:18] - chromaQPOffset_V
+// [17:16] - MaxTrSize 0-4x4, 1-8x8, 2-16x16, 3-32x32
+// [15:14] - MinTrSize 0-4x4, 1-8x8, 2-16x16, 3-32x32
+// HEVC
+// [13:12] - MaxCUSize 0-8x8, 1-16x16, 2-32x32, 3-64x64
+// [11:10] - MinCUSize 0-8x8, 1-16x16, 2-32x32, 3-64x64
+// [9]     - slice_sao_luma_flag
+// [8]     - slice_sao_chroma_flag
+// VP9 -- When vp9_enable
+// [13:11] - MaxCUSize 0-8x8, 1-16x16, 2-32x32, 3-64x64, 7-4x4
+// [10:8]  - MinCUSize 0-8x8, 1-16x16, 2-32x32, 3-64x64, 7-4x4
+// [7:2]   - slice_quant
+// [1:0]   - slice_type
+// AVS2
+// [13:12] - MaxCUSize 0-8x8, 1-16x16, 2-32x32, 3-64x64
+// [11:10] - MinCUSize 0-8x8, 1-16x16, 2-32x32, 3-64x64
+// [9]     - reserved
+// [8]     - slice_quant[6]
+// [7:2]   - slice_quant
+// [1:0]   - slice_type
+#define   HEVC_PARSER_SLICE_INFO                   (0x3111)
+#define P_HEVC_PARSER_SLICE_INFO                   (volatile unsigned int *)((0x3111  << 2) + 0xff620000)
+// bit[16]  - 0:command, 1:address(will auto increase when write command)
+// bit[15:0]- command or addr
+#define   HEVC_PARSER_CMD_WRITE                    (0x3112)
+#define P_HEVC_PARSER_CMD_WRITE                    (volatile unsigned int *)((0x3112  << 2) + 0xff620000)
+// [31:16] - reserved
+// [15]    - disable_parser_core_clock_gating
+// [14:1]  - Reserved
+// [0]     - parser_core_enable(Default : 0)
+#define   HEVC_PARSER_CORE_CONTROL                 (0x3113)
+#define P_HEVC_PARSER_CORE_CONTROL                 (volatile unsigned int *)((0x3113  << 2) + 0xff620000)
+// [31:16] - pre_parser_cmd
+// [15]    - start_cmd_fetch/fetch_busy
+// [14]    - parser_cmd_ready
+// [13]    - pre_parser_cmd_ready
+// [12]    - do_not_wait_if_busy
+// [11:8]  - cmd_fetch_status // Read-only
+// [7:0]   - cmd_fetch_addr
+#define   HEVC_PARSER_CMD_FETCH                    (0x3114)
+#define P_HEVC_PARSER_CMD_FETCH                    (volatile unsigned int *)((0x3114  << 2) + 0xff620000)
+// [31:16] - parser_cmd
+// [9:5]   - parser_function
+// [4:0]   - cmd_status
+#define   HEVC_PARSER_CMD_STATUS                   (0x3115)
+#define P_HEVC_PARSER_CMD_STATUS                   (volatile unsigned int *)((0x3115  << 2) + 0xff620000)
+// [31]    - end_of_picture
+// [30]    - uiLeft
+// [39]    - uiTop
+// [28]    - uiTopRight
+// [27:24] - Reserved
+// [23:12] - uiLin
+// [11:0]  - uiCol
+#define   HEVC_PARSER_LCU_INFO                     (0x3116)
+#define P_HEVC_PARSER_LCU_INFO                     (volatile unsigned int *)((0x3116  << 2) + 0xff620000)
+// 29:28 - min_cu_size_qp_delta
+// 27    - cu_qp_delta_enabled_flag
+// 26    - amp_enabled_flag
+// 25:23 - max_num_merge_cand
+// 22    - mvd_l1_zero_flag
+// 21:16 - num_ref_idx_l1_active
+// 15:10 - num_ref_idx_l0_active
+// 9:7   - max_transform_hierarchy_depth_inter
+// 6:4   - max_transform_hierarchy_depth_intra
+// 3     - transquant_bypass_enable_flag
+// 2     - constrained_intra_pred_flag
+// 1     - transform_skip_enabled_flag
+// 0     - sign_data_hiding_flag
+#define   HEVC_PARSER_HEADER_INFO                  (0x3117)
+#define P_HEVC_PARSER_HEADER_INFO                  (volatile unsigned int *)((0x3117  << 2) + 0xff620000)
+#define   HEVC_PARSER_RESULT_0                     (0x3118)
+#define P_HEVC_PARSER_RESULT_0                     (volatile unsigned int *)((0x3118  << 2) + 0xff620000)
+#define   HEVC_PARSER_RESULT_1                     (0x3119)
+#define P_HEVC_PARSER_RESULT_1                     (volatile unsigned int *)((0x3119  << 2) + 0xff620000)
+#define   HEVC_PARSER_RESULT_2                     (0x311a)
+#define P_HEVC_PARSER_RESULT_2                     (volatile unsigned int *)((0x311a  << 2) + 0xff620000)
+#define   HEVC_PARSER_RESULT_3                     (0x311b)
+#define P_HEVC_PARSER_RESULT_3                     (volatile unsigned int *)((0x311b  << 2) + 0xff620000)
+// For HEVC
+// bit[31:24] - quant[47:40]
+// bit[23:16] - quant[39:32]
+// For VP9
+// bit[31:24] - intra_flag
+// bit[23:16] - SplitFlag_4
+// bit[15:8]  - SkipFlag
+// bit[7]     - SliceEnd|end_of_picture
+// bit[6:3]   - SplitFlag_8
+// bit[2:1]   - SplitFlag_16
+// bit[0]     - SplitFlag_32
+#define   HEVC_CABAC_TOP_INFO                      (0x311c)
+#define P_HEVC_CABAC_TOP_INFO                      (volatile unsigned int *)((0x311c  << 2) + 0xff620000)
+// For HEVC
+// bit[31:0]  - quant[31:0]
+// For VP9
+// bit [31:24] - vp9_top_eob_v
+// bit [23:16] - vp9_top_eob_u
+// bit [15:0] - vp9_top_eob_y
+#define   HEVC_CABAC_TOP_INFO_2                    (0x311d)
+#define P_HEVC_CABAC_TOP_INFO_2                    (volatile unsigned int *)((0x311d  << 2) + 0xff620000)
+// For HEVC
+// bit[31:24] - quant[47:40]
+// bit[23:16] - quant[39:32]
+// For VP9
+// bit[31:24] - Reserved
+// bit[23:16] - SplitFlag_4
+// bit[15:8]  - SkipFlag
+// bit[7]     - Reserved
+// bit[6:3]   - SplitFlag_8
+// bit[2:1]   - SplitFlag_16
+// bit[0]     - SplitFlag_32
+#define   HEVC_CABAC_LEFT_INFO                     (0x311e)
+#define P_HEVC_CABAC_LEFT_INFO                     (volatile unsigned int *)((0x311e  << 2) + 0xff620000)
+// For HEVC
+// bit[31:0]  - quant[31:0]
+// For VP9
+// bit [31:24] - vp9_left_eob_v
+// bit [23:16] - vp9_left_eob_u
+// bit [15:0] - vp9_left_eob_y
+#define   HEVC_CABAC_LEFT_INFO_2                   (0x311f)
+#define P_HEVC_CABAC_LEFT_INFO_2                   (volatile unsigned int *)((0x311f  << 2) + 0xff620000)
+// [31:29] - stream_buffer_empty_int_ctl (32bytes - 4k bytes) (default : 4 : 512 bytes interrupt)
+// [28:26] - stream_fifo_empty_int_ctl (0 - 128)(default : 0 - 0 byte interrupt)
+// [25]    - stream_buffer_empty_int_cpu_enable
+// [24]    - stream_buffer_empty_int_amrisc_enable
+// [23]    - stream_fifo_empty_int_cpu_enable
+// [22]    - stream_fifo_empty_int_amrisc_enable
+// [15]    - disable_parser_clock_gating
+// [8]     - dec_done_int_cpu_enable
+// [7]     - dec_done_int_amrisc_enable
+// [6]     - cmd_done_int_cpu_enable
+// [5]     - cmd_done_int_amrisc_enable
+// [4]     - startcode_found_int_cpu_enable
+// [3]     - startcode_found_int_amrisc_enable
+// [2]     - parser_int_cpu_level (default : 0(pulse))
+// [1]     - parser_int_amrisc_level (default : 0(pulse))
+// [0]     - parser_int_enable(Default : 0)
+#define   HEVC_PARSER_INT_CONTROL                  (0x3120)
+#define P_HEVC_PARSER_INT_CONTROL                  (volatile unsigned int *)((0x3120  << 2) + 0xff620000)
+// [7]     - stream_empty_int_cpu
+// [6]     - stream_empty_int_amrisc
+// [2]     - dec_done_int
+// [1]     - cmd_done_int
+// [0]     - startcode_found_int
+#define   HEVC_PARSER_INT_STATUS                   (0x3121)
+#define P_HEVC_PARSER_INT_STATUS                   (volatile unsigned int *)((0x3121  << 2) + 0xff620000)
+// [31]    - parser_mpred_if_busy  -- Read Only
+// [8]     - sao_sw_pred_enable
+// [7]     - sao_top_save_even_no_sao
+// [6]     - disable_parser_sao_if_clock_gating
+// [5]     - parser_sao_if_en
+// [4]     - scaler_if_leave_one_more_space
+// [3]     - disable_parser_mpred_if_clock_gating
+// [2]     - parser_mpred_if_en
+// [1]     - disable_parser_scaler_if_clock_gating
+// [0]     - parser_scaler_if_en
+#define   HEVC_PARSER_IF_CONTROL                   (0x3122)
+#define P_HEVC_PARSER_IF_CONTROL                   (volatile unsigned int *)((0x3122  << 2) + 0xff620000)
+// [31:16] PicHeightInLumaSamples
+// [15:0]  PicWidthInLumaSamples
+#define   HEVC_PARSER_PICTURE_SIZE                 (0x3123)
+#define P_HEVC_PARSER_PICTURE_SIZE                 (volatile unsigned int *)((0x3123  << 2) + 0xff620000)
+// [31]    - start_lcu_mpred_cmd
+// [30]    - lcu_decoding_start
+// [29]    - do_not_wait_if_busy
+// [23:0]  - lcu_idx
+#define   HEVC_PARSER_LCU_START                    (0x3124)
+#define P_HEVC_PARSER_LCU_START                    (volatile unsigned int *)((0x3124  << 2) + 0xff620000)
+// [31:30] - bit_depth_chroma_minus8
+// [29:24] - MAX_QP
+// [23:20] - qpBdOffsetC
+// [19:16] - qpBdOffsetY
+// [15:12] - pcm_sample_bit_depth_chroma
+// [11:8]  - pcm_sample_bit_depth_luma
+// [7:6]   - max_pcm_luma_coding_block_size
+// [5:4]   - min_pcm_luma_coding_block_size
+// [3:2]   - bit_depth_luma_minus8
+// [1]     - enable_negtive_quant
+// [0]     - pcm_enabled_flag
+#define   HEVC_PARSER_HEADER_INFO2                 (0x3125)
+#define P_HEVC_PARSER_HEADER_INFO2                 (volatile unsigned int *)((0x3125  << 2) + 0xff620000)
+// Read Only
+// bit[23]    - 1'b1
+// bit[22]    - Reserved
+// bit[21:16] - quant_V
+// bit[15]    - 1'b1
+// bit[14]    - Reserved
+// bit[13:8]  - quant_U
+// bit[7]     - 1'b1
+// bit[6]     - Reserved
+// bit[5:0]   - quant_Y
+#define   HEVC_PARSER_QUANT_READ                   (0x3126)
+#define P_HEVC_PARSER_QUANT_READ                   (volatile unsigned int *)((0x3126  << 2) + 0xff620000)
+#define   HEVC_PARSER_RESERVED_27                  (0x3127)
+#define P_HEVC_PARSER_RESERVED_27                  (volatile unsigned int *)((0x3127  << 2) + 0xff620000)
+// bit[15:8]  - skip_addr_SaoOffData
+// bit[7:0]   - skip_addr_SaoMerge
+#define   HEVC_PARSER_CMD_SKIP_0                   (0x3128)
+#define P_HEVC_PARSER_CMD_SKIP_0                   (volatile unsigned int *)((0x3128  << 2) + 0xff620000)
+// bit[31:24] - skip_point_coding_unit_slice_type_RET
+// bit[23:16] - skip_point_coding_unit_slice_type_B
+// bit[15:8]  - skip_point_coding_unit_slice_type_P
+// bit[7:0]   - skip_point_coding_unit_slice_type_I
+#define   HEVC_PARSER_CMD_SKIP_1                   (0x3129)
+#define P_HEVC_PARSER_CMD_SKIP_1                   (volatile unsigned int *)((0x3129  << 2) + 0xff620000)
+// bit[31:24] - reserved
+// bit[23:16] - skip_point_coding_unit_pred_mode_RET
+// bit[15:8]  - skip_point_coding_unit_pred_mode_INTER
+// bit[7:0]   - skip_point_coding_unit_pred_mode_INTRA
+#define   HEVC_PARSER_CMD_SKIP_2                   (0x312a)
+#define P_HEVC_PARSER_CMD_SKIP_2                   (volatile unsigned int *)((0x312a  << 2) + 0xff620000)
+// Write :
+// [24:16] context_addr for dec_Bin
+// [15:0]  parser_cmd
+// Read result:
+// cabac_context_decodeBin,       // 31
+// cabac_context_decodeBinEP,     // 30
+// cabac_context_decodeBinTrm,    // 29
+// cabac_context_decodeBinBit,    // 28
+// parser_command,                // 27:22
+// cabac_context_ready,           // 21
+// cmd_status,                    // 20:16
+// cabac_manual_data              // 15:0
+//
+#define   HEVC_PARSER_MANUAL_CMD                   (0x312b)
+#define P_HEVC_PARSER_MANUAL_CMD                   (volatile unsigned int *)((0x312b  << 2) + 0xff620000)
+// bit [9:0] - Read adress :
+//          address 0-255 stream_fifo (128x64)
+//          address 256-319 context_mem (256x7)
+//          address 320-448 parser_cmd_mem (256x16)
+#define   HEVC_PARSER_MEM_RD_ADDR                  (0x312c)
+#define P_HEVC_PARSER_MEM_RD_ADDR                  (volatile unsigned int *)((0x312c  << 2) + 0xff620000)
+// bit [9:0] - Write adress :
+//          address 0-255 stream_fifo (128x64)
+//          address 256-319 context_mem (256x7)
+//          address 512-640 parser_cmd_mem (256x16)
+#define   HEVC_PARSER_MEM_WR_ADDR                  (0x312d)
+#define P_HEVC_PARSER_MEM_WR_ADDR                  (volatile unsigned int *)((0x312d  << 2) + 0xff620000)
+// bit[31:0] read/write data
+#define   HEVC_PARSER_MEM_RW_DATA                  (0x312e)
+#define P_HEVC_PARSER_MEM_RW_DATA                  (volatile unsigned int *)((0x312e  << 2) + 0xff620000)
+// [31:20] sao_lcu_x
+// [19:8]  sao_lcu_y
+// [7] sao_lcu_xy_update
+// [6:2] reserved
+// [1] sao_wait_up_read
+// [0] sao_wait_write
+#define   HEVC_SAO_IF_STATUS                       (0x3130)
+#define P_HEVC_SAO_IF_STATUS                       (volatile unsigned int *)((0x3130  << 2) + 0xff620000)
+// Y_offset_3,    // 31:26
+// Y_offset_2,    // 25:20
+// Y_offset_1,    // 19:14
+// Y_offset_0,    // 13:8
+// Y_typeAuxInfo[3:0], // 7:4
+// Y_typeIdc,     // 3:1 [0, 1, 2, 3]-EO, [4,5]-BO+Y_typeAuxInfo[4]
+// Y_modelIdc     // 0
+#define   HEVC_SAO_IF_DATA_Y                       (0x3131)
+#define P_HEVC_SAO_IF_DATA_Y                       (volatile unsigned int *)((0x3131  << 2) + 0xff620000)
+#define   HEVC_SAO_IF_DATA_U                       (0x3132)
+#define P_HEVC_SAO_IF_DATA_U                       (volatile unsigned int *)((0x3132  << 2) + 0xff620000)
+#define   HEVC_SAO_IF_DATA_V                       (0x3133)
+#define P_HEVC_SAO_IF_DATA_V                       (volatile unsigned int *)((0x3133  << 2) + 0xff620000)
+#define   HEVC_STREAM_SWAP_ADDR                    (0x3134)
+#define P_HEVC_STREAM_SWAP_ADDR                    (volatile unsigned int *)((0x3134  << 2) + 0xff620000)
+// bit[31:24] - swap_wrrsp_count
+// bit[23:16] - swap_d_count (Read Only)
+// bit[15:8]  - swap_a_count (Read Only) (7:0 or 9:2)
+// bit [7] - swap busy (Read Only)
+// bit [6:4] - swap_d_count[10:8] (Read Only)
+// bit [3] - swap_a_count[10] (Read Only)
+// bit [2] - swap_wrrsp_count_update
+// bit [1] - 1 - STORE to Memory, 0 - LOAD from Memory
+// bit [0] - swap active
+#define   HEVC_STREAM_SWAP_CTRL                    (0x3135)
+#define P_HEVC_STREAM_SWAP_CTRL                    (volatile unsigned int *)((0x3135  << 2) + 0xff620000)
+#define   HEVC_IQIT_IF_WAIT_CNT                    (0x3136)
+#define P_HEVC_IQIT_IF_WAIT_CNT                    (volatile unsigned int *)((0x3136  << 2) + 0xff620000)
+#define   HEVC_MPRED_IF_WAIT_CNT                   (0x3137)
+#define P_HEVC_MPRED_IF_WAIT_CNT                   (volatile unsigned int *)((0x3137  << 2) + 0xff620000)
+#define   HEVC_SAO_IF_WAIT_CNT                     (0x3138)
+#define P_HEVC_SAO_IF_WAIT_CNT                     (volatile unsigned int *)((0x3138  << 2) + 0xff620000)
+// [31:0] packet_length_count
+#define   HEVC_STREAM_PACKET_LENGTH                (0x3139)
+#define P_HEVC_STREAM_PACKET_LENGTH                (volatile unsigned int *)((0x3139  << 2) + 0xff620000)
+// [31]   data_length_protect_enable
+// [30]   data_protect_fill_00_enable
+// [29]   data_protect_fill_ff_enable
+// [28:19] Reserved
+// [18:0] data_length_protect_count
+#define   HEVC_SHIFT_LENGTH_PROTECT                (0x313a)
+#define P_HEVC_SHIFT_LENGTH_PROTECT                (volatile unsigned int *)((0x313a  << 2) + 0xff620000)
+// bit[3:0] parser_debug_idx
+#define   HEVC_PARSER_DEBUG_IDX                    (0x313e)
+#define P_HEVC_PARSER_DEBUG_IDX                    (volatile unsigned int *)((0x313e  << 2) + 0xff620000)
+// bit[31:0] parser_debug_dat -- read only
+#define   HEVC_PARSER_DEBUG_DAT                    (0x313f)
+#define P_HEVC_PARSER_DEBUG_DAT                    (volatile unsigned int *)((0x313f  << 2) + 0xff620000)
+// bit[22]    - vp9_second_pu_use_if_busy_2
+// bit[21]    - parser_mpred_if_busy_when_pu_mpred_busy
+// bit[20:9]  - Reserved
+// bit[8]   - force_skip_1 (SEG_LVL_SKIP)
+// bit[7:3] - vp9_status
+// bit[2] - change_vp9_status
+// bit[1] - vp9_decode_start(W)/vp9_decode_busy
+// bit[0] - vp9_enable
+#define   VP9_CONTROL                              (0x3140)
+#define P_VP9_CONTROL                              (volatile unsigned int *)((0x3140  << 2) + 0xff620000)
+// bit[15:8]- vp9_emd_cmd_parameter
+// bit[3]   - vp9_emd_cmd_busy
+// bit[2:0] - vp9_emd_command (bit[7]-start/busy)
+//            0 - vp9_read
+//                   (
+//                      input : bit[15:8] - prob,
+//                              bit[7:4] - vp9_read_literal_bits(1-16 bits)
+//                      output : bit[31:16] - result)
+//                   )
+//            1 - vp9_diff_update_prob
+//                   (
+//                      input : bit[7:4] - function:
+// `define vp9_read_tx_mode_prob     0
+// `define vp9_read_coef_prob        1
+// `define vp9_read_skip_prob        2
+// `define vp9_read_inter_mode_prob  3
+// `define vp9_read_interp_prob      4
+// `define vp9_read_intra_inter_prob 5
+// `define vp9_read_comp_inter_prob  6
+// `define vp9_read_comp_ref_prob    7
+// `define vp9_read_single_ref_prob  8
+// `define vp9_read_if_y_mode_prob   9
+// `define vp9_read_partition_prob  10
+// `define vp9_read_mv_prob         11
+//                              bit[29:16] - total loop times
+//                              bit[31:30] - probs_common
+//                      output : bit[15:8] - prob)
+//                   )
+#define   VP9_EMD_CMD                              (0x3141)
+#define P_VP9_EMD_CMD                              (volatile unsigned int *)((0x3141  << 2) + 0xff620000)
+// vp9_top_y_mode[31:0]
+#define   VP9_TOP_Y_MODE_0                         (0x3142)
+#define P_VP9_TOP_Y_MODE_0                         (volatile unsigned int *)((0x3142  << 2) + 0xff620000)
+// vp9_top_y_mode[63:32]
+#define   VP9_TOP_Y_MODE_1                         (0x3143)
+#define P_VP9_TOP_Y_MODE_1                         (volatile unsigned int *)((0x3143  << 2) + 0xff620000)
+// vp9_left_y_mode[31:0]
+#define   VP9_LEFT_Y_MODE_0                        (0x3144)
+#define P_VP9_LEFT_Y_MODE_0                        (volatile unsigned int *)((0x3144  << 2) + 0xff620000)
+// vp9_left_y_mode[63:32]
+#define   VP9_LEFT_Y_MODE_1                        (0x3145)
+#define P_VP9_LEFT_Y_MODE_1                        (volatile unsigned int *)((0x3145  << 2) + 0xff620000)
+// bit[31] - 0:write_vp9_quant, 1:write_vp9_seg_feature
+// For write_vp9_seg_feature:
+// bit[24:22] - seg_id
+// bit[21]    - seg_q_enable
+// bit[20]    - seg_q_sign
+// bit[19:12] - seg_q_abs
+// bit[11]    - seg_lf_enable
+// bit[10]    - seg_lf_sign
+// bit[9:4]   - seg_lf_abs
+// bit[3]     - seg_ref_enable
+// bit[2:1]   - seg_ref_abs
+// bit[0]     - seg_skip_enable
+// For write_vp9_quant:
+// bit[19:16] - Write index : Seg_0_Y-0, Seg_0_UV-1, ... Seq_7_Y-14, Seq_7_UV-15
+// bit[15:8] - AC quant
+// bit[7:0]  - DC quant
+#define   VP9_QUANT_WR                             (0x3146)
+#define P_VP9_QUANT_WR                             (volatile unsigned int *)((0x3146  << 2) + 0xff620000)
+// bit [31:16] - vp9_inter_mode_top/{8'h0, vp9_seg_pred_top}
+// bit [15:0] - vp9_top_tx_mode (odd/even mi has same tx_mode)
+#define   HEVC_CABAC_TOP_INFO_3                    (0x3147)
+#define P_HEVC_CABAC_TOP_INFO_3                    (volatile unsigned int *)((0x3147  << 2) + 0xff620000)
+// bit [31:16] - vp9_inter_mode_left/{8'h0, vp9_seg_pred_left}
+// bit [15:0] - vp9_left_tx_mode (odd/even mi has same tx_mode)
+#define   HEVC_CABAC_LEFT_INFO_3                   (0x3148)
+#define P_HEVC_CABAC_LEFT_INFO_3                   (volatile unsigned int *)((0x3148  << 2) + 0xff620000)
+// bit [31:16] - ref_frame[1]
+// bit [15:0]  - ref_frame[0]
+#define   HEVC_CABAC_TOP_INFO_4                    (0x3149)
+#define P_HEVC_CABAC_TOP_INFO_4                    (volatile unsigned int *)((0x3149  << 2) + 0xff620000)
+// bit [31:16] - ref_frame[1]
+// bit [15:0]  - ref_frame[0]
+#define   HEVC_CABAC_LEFT_INFO_4                   (0x314a)
+#define P_HEVC_CABAC_LEFT_INFO_4                   (volatile unsigned int *)((0x314a  << 2) + 0xff620000)
+// bit [31:16]  - interp_filter
+// bit [15:8]   - Reserved
+// bit [7:0]    - vp9_seg_pred_top
+#define   HEVC_CABAC_TOP_INFO_5                    (0x314b)
+#define P_HEVC_CABAC_TOP_INFO_5                    (volatile unsigned int *)((0x314b  << 2) + 0xff620000)
+// bit [31:16]  - interp_filter
+// bit [15:8]   - Reserved
+// bit [7:0]    - vp9_seg_pred_left
+#define   HEVC_CABAC_LEFT_INFO_5                   (0x314c)
+#define P_HEVC_CABAC_LEFT_INFO_5                   (volatile unsigned int *)((0x314c  << 2) + 0xff620000)
+// bit[31]    - operation start (read : busy)
+// bit[30:28] - operation_endian
+// bit[27:24] - Reserved
+// bit[23:22] - operation_mem 00:prob_mem, 01:count_mem
+// bit[21:20] - operation_cmd 0:clear, 1-store, 2-load
+// bit[19:10] - operation_end_addr
+// bit[9:0] - operation_start_addr
+#define   VP9_MEM_OPERATION                        (0x314d)
+#define P_VP9_MEM_OPERATION                        (volatile unsigned int *)((0x314d  << 2) + 0xff620000)
+// bit[27]    - vp9_seg_pred_info_3
+// bit[26]    - vp9_seg_abs_delta
+// bit[25]    - vp9_seg_temporal
+// bit[24]    - vp9_seg_update_map
+// bit[23]    - vp9_seg_enable
+// bit[22]    - vp9_lossless_use_set
+// bit[21]    - vp9_lossless_set_data
+// bit[20]    - vp9_swap_Y_MODE_with_INFO45
+// bit[19]    - vp9_allow_hp
+// bit[18:16] - vp9_interp_filter
+// bit[15]    - vp9_intra_frame
+// bit[14:12] - vp9_tx_mode
+// bit[11:10] - vp9_ref_mode // SINGLE_REFERENCE(0), COMPOUND_REFERENCE(1), REFERENCE_MODE_SELECT(2)
+// bit[9]   - VPX_BITS_10
+// bit[8] - ref_frame_bias[2]
+// bit[7] - ref_frame_bias[1]
+// bit[6] - ref_frame_bias[0]
+// [5:4] - comp_var_ref[1]
+// [3:2] - comp_var_ref[0]
+// [1:0] - comp_fixed_ref
+#define   VP9_DECODING_INFO                        (0x314f)
+#define P_VP9_DECODING_INFO                        (volatile unsigned int *)((0x314f  << 2) + 0xff620000)
+// [7]   -- segment_id_map_from_shadow
+// [6]   -- segment_id_map_to_shadow
+// [5]   -- shadow_rw_addr_update
+// [4:0] -- shadiw_rw_addr
+#define   VP9_SHADOW_CTRL                          (0x3150)
+#define P_VP9_SHADOW_CTRL                          (volatile unsigned int *)((0x3150  << 2) + 0xff620000)
+// [31:0] -- shadow_rw_data
+#define   VP9_SHADOW_DATA                          (0x3151)
+#define P_VP9_SHADOW_DATA                          (volatile unsigned int *)((0x3151  << 2) + 0xff620000)
+// bit[22]    - avs2_second_pu_use_if_busy_2
+// bit[21]    - parser_mpred_if_busy_when_pu_mpred_busy
+// bit[20:9]  - Reserved
+// bit[8]   - force_skip_1 (SEG_LVL_SKIP)
+// bit[7:3] - avs2_status
+// bit[2] - change_avs2_status
+// bit[1] - avs2_decode_start(W)/avs2_decode_busy
+// bit[0] - avs2_enable
+#define   AVS2_CONTROL                             (0x3152)
+#define P_AVS2_CONTROL                             (volatile unsigned int *)((0x3152  << 2) + 0xff620000)
+// bit[7] - useNSIP (nonsquare_intra_prediction_enable)
+// bit[6] - secT_enabled (secondary_transform_enable_flag)
+// bit[5] - slice_alf_enable_Y
+// bit[4] - slice_alf_enable_U
+// bit[3] - slice_alf_enable_V
+// bit[2] - slice_sao_enable_Y
+// bit[1] - slice_sao_enable_U
+// bit[0] - slice_sao_enable_V
+#define   AVS2_DEC_INFO                            (0x3153)
+#define P_AVS2_DEC_INFO                            (volatile unsigned int *)((0x3153  << 2) + 0xff620000)
+//
+// Closing file:  hevc_parser_regs.h
+//
+//------------------------------------------------------------------------------
+// HEVC_MPRED module level register offset
+//------------------------------------------------------------------------------
+//
+// Reading file:  hevc_mpred_regs.h
+//
+// -----------------------------------------------
+// CBUS_BASE:  DOS_HEVC_MPRED_CBUS_BASE = 0x02
+// -----------------------------------------------
+#define   HEVC_MPRED_VERSION                       (0x3200)
+#define P_HEVC_MPRED_VERSION                       (volatile unsigned int *)((0x3200  << 2) + 0xff620000)
+//  [31:0]  reversion               default:32'h00010001
+#define   HEVC_MPRED_CTRL0                         (0x3201)
+#define P_HEVC_MPRED_CTRL0                         (volatile unsigned int *)((0x3201  << 2) + 0xff620000)
+// [1:0]    slice_type[1:0]
+// [2]      new_pic
+// [3]      new_tile
+// [4]      SliceSegment
+// [5]      TMVPFlag_en
+// [6]      LDCFlag
+// [7]      ColFromL0Flag
+// [8]      reserved
+// [9]      above_en
+// [10]     mv_wr_en  :collocated MV write enable: 0=no-write,1=write;default:1'b1
+// [11]     mv_rd_en
+// [12]     col_isIntra
+// [13]     reserved
+// [14]     LongTerm_Curr
+// [15]     LongTerm_Col
+// [19:16]  lcu_size_log2[3:0]
+// [23:20]  cu_size_log2[3:0]
+// [26:24]  plevel[2:0]
+// [31:27]  reserved
+#define   HEVC_MPRED_CTRL1                         (0x3202)
+#define P_HEVC_MPRED_CTRL1                         (volatile unsigned int *)((0x3202  << 2) + 0xff620000)
+//  [3:0]   MERGE_MAX_NUM_CANDS[3:0]
+//  [7:4]   AMVP_MAX_NUM_CANDS[3:0]
+//  [23:8]  reserved
+//  [24]    clk_forceon
+//  [31:25] reserved
+#define   HEVC_MPRED_INT_EN                        (0x3203)
+#define P_HEVC_MPRED_INT_EN                        (volatile unsigned int *)((0x3203  << 2) + 0xff620000)
+//  [0]     mpred_int_enable
+//  [1]     mpred_int_amrisc_level
+//  [2]     mpred_int_cpu_level
+//  [3]     slice_done_int_amrisc_enable
+//  [4]     slice_done_int_cpu_enable
+//  [15]    disable_mpred_int_clock_gating
+#define   HEVC_MPRED_INT_STATUS                    (0x3204)
+#define P_HEVC_MPRED_INT_STATUS                    (volatile unsigned int *)((0x3204  << 2) + 0xff620000)
+//  [0]     slice_done IRQ
+//  [31]    write "1"=slice start(self clear,read always return "0")
+#define   HEVC_MPRED_PIC_SIZE                      (0x3205)
+#define P_HEVC_MPRED_PIC_SIZE                      (volatile unsigned int *)((0x3205  << 2) + 0xff620000)
+//  [15:0]  pic_width[15:0]
+//  [31:16] pic_height[15:0]
+#define   HEVC_MPRED_PIC_SIZE_LCU                  (0x3206)
+#define P_HEVC_MPRED_PIC_SIZE_LCU                  (volatile unsigned int *)((0x3206  << 2) + 0xff620000)
+//  [15:0]  lcu_x_num_1[15:0]   (=lcu_x_total-1)
+//  [31:16] lcu_y_num_1[15:0]   (=lcu_y_total-1)
+#define   HEVC_MPRED_TILE_START                    (0x3207)
+#define P_HEVC_MPRED_TILE_START                    (volatile unsigned int *)((0x3207  << 2) + 0xff620000)
+//  [15:0]  tile_start_lcu_x[15:0]
+//  [31:16] tile_start_lcu_y[15:0]
+#define   HEVC_MPRED_TILE_SIZE_LCU                 (0x3208)
+#define P_HEVC_MPRED_TILE_SIZE_LCU                 (volatile unsigned int *)((0x3208  << 2) + 0xff620000)
+//  [15:0]  tile_width_lcu[15:0]
+//  [31:16] tile_height_lcu[15:0]
+#define   HEVC_MPRED_REF_NUM                       (0x3209)
+#define P_HEVC_MPRED_REF_NUM                       (volatile unsigned int *)((0x3209  << 2) + 0xff620000)
+//  [3:0]   refNum_L0[3:0]
+//  [11:8]  refNum_L1[3:0]
+//  [19:16] col_refNum_L0[3:0]
+//  [27:24] col_refNum_L1[3:0]
+#define   HEVC_MPRED_LT_REF                        (0x320a)
+#define P_HEVC_MPRED_LT_REF                        (volatile unsigned int *)((0x320a  << 2) + 0xff620000)
+//  [00]    LongTerm_L0_Ref00
+//  [01]    LongTerm_L0_Ref01
+//  ......
+//  [15]    LongTerm_L0_Ref15
+//  [16]    LongTerm_L1_Ref00
+//  [17]    LongTerm_L1_Ref01
+//  ......
+//  [31]    LongTerm_L1_Ref15
+#define   HEVC_MPRED_LT_COLREF                     (0x320b)
+#define P_HEVC_MPRED_LT_COLREF                     (volatile unsigned int *)((0x320b  << 2) + 0xff620000)
+//  [00]    LongTerm_Col_L0_Ref00
+//  [01]    LongTerm_Col_L0_Ref01
+//  ......
+//  [15]    LongTerm_Col_L0_Ref15
+//  [16]    LongTerm_Col_L1_Ref00
+//  [17]    LongTerm_Col_L1_Ref01
+//  ......
+//  [31]    LongTerm_Col_L1_Ref15
+#define   HEVC_MPRED_REF_EN_L0                     (0x320c)
+#define P_HEVC_MPRED_REF_EN_L0                     (volatile unsigned int *)((0x320c  << 2) + 0xff620000)
+//  [00]    L0_ref00_en
+//  [01]    L0_ref01_en
+//  ......
+//  [15]    L0_ref15_en
+#define   HEVC_MPRED_REF_EN_L1                     (0x320d)
+#define P_HEVC_MPRED_REF_EN_L1                     (volatile unsigned int *)((0x320d  << 2) + 0xff620000)
+//  [00]    L1_ref00_en
+//  [01]    L1_ref01_en
+//  ......
+//  [15]    L1_ref15_en
+#define   HEVC_MPRED_COLREF_EN_L0                  (0x320e)
+#define P_HEVC_MPRED_COLREF_EN_L0                  (volatile unsigned int *)((0x320e  << 2) + 0xff620000)
+//  [00]    COL_L0_ref00_en
+//  [01]    COL_L0_ref01_en
+//  ......
+//  [15]    COL_L0_ref15_en
+#define   HEVC_MPRED_COLREF_EN_L1                  (0x320f)
+#define P_HEVC_MPRED_COLREF_EN_L1                  (volatile unsigned int *)((0x320f  << 2) + 0xff620000)
+//  [00]    COL_L1_ref00_en
+//  [01]    COL_L1_ref01_en
+//  ......
+//  [15]    COL_L1_ref15_en
+#define   HEVC_MPRED_AXI_WCTRL                     (0x3210)
+#define P_HEVC_MPRED_AXI_WCTRL                     (volatile unsigned int *)((0x3210  << 2) + 0xff620000)
+//  [11:8]  aw_id_set[3:0]
+#define   HEVC_MPRED_AXI_RCTRL                     (0x3211)
+#define P_HEVC_MPRED_AXI_RCTRL                     (volatile unsigned int *)((0x3211  << 2) + 0xff620000)
+//  [11:8]  ar_id_set[3:0]
+#define   HEVC_MPRED_ABV_START_ADDR                (0x3212)
+#define P_HEVC_MPRED_ABV_START_ADDR                (volatile unsigned int *)((0x3212  << 2) + 0xff620000)
+#define   HEVC_MPRED_MV_WR_START_ADDR              (0x3213)
+#define P_HEVC_MPRED_MV_WR_START_ADDR              (volatile unsigned int *)((0x3213  << 2) + 0xff620000)
+#define   HEVC_MPRED_MV_RD_START_ADDR              (0x3214)
+#define P_HEVC_MPRED_MV_RD_START_ADDR              (volatile unsigned int *)((0x3214  << 2) + 0xff620000)
+#define   HEVC_MPRED_MV_WPTR                       (0x3215)
+#define P_HEVC_MPRED_MV_WPTR                       (volatile unsigned int *)((0x3215  << 2) + 0xff620000)
+#define   HEVC_MPRED_MV_RPTR                       (0x3216)
+#define P_HEVC_MPRED_MV_RPTR                       (volatile unsigned int *)((0x3216  << 2) + 0xff620000)
+#define   HEVC_MPRED_MV_WR_ROW_JUMP                (0x3217)
+#define P_HEVC_MPRED_MV_WR_ROW_JUMP                (volatile unsigned int *)((0x3217  << 2) + 0xff620000)
+#define   HEVC_MPRED_MV_RD_ROW_JUMP                (0x3218)
+#define P_HEVC_MPRED_MV_RD_ROW_JUMP                (volatile unsigned int *)((0x3218  << 2) + 0xff620000)
+#define   HEVC_MPRED_CURR_LCU                      (0x3219)
+#define P_HEVC_MPRED_CURR_LCU                      (volatile unsigned int *)((0x3219  << 2) + 0xff620000)
+#define   HEVC_MPRED_ABV_WPTR                      (0x321a)
+#define P_HEVC_MPRED_ABV_WPTR                      (volatile unsigned int *)((0x321a  << 2) + 0xff620000)
+#define   HEVC_MPRED_ABV_RPTR                      (0x321b)
+#define P_HEVC_MPRED_ABV_RPTR                      (volatile unsigned int *)((0x321b  << 2) + 0xff620000)
+#define   HEVC_MPRED_CTRL2                         (0x321c)
+#define P_HEVC_MPRED_CTRL2                         (volatile unsigned int *)((0x321c  << 2) + 0xff620000)
+#define   HEVC_MPRED_CTRL3                         (0x321d)
+#define P_HEVC_MPRED_CTRL3                         (volatile unsigned int *)((0x321d  << 2) + 0xff620000)
+#define   HEVC_MPRED_MV_WLCUY                      (0x321e)
+#define P_HEVC_MPRED_MV_WLCUY                      (volatile unsigned int *)((0x321e  << 2) + 0xff620000)
+#define   HEVC_MPRED_MV_RLCUY                      (0x321f)
+#define P_HEVC_MPRED_MV_RLCUY                      (volatile unsigned int *)((0x321f  << 2) + 0xff620000)
+#define   HEVC_MPRED_L0_REF00_POC                  (0x3220)
+#define P_HEVC_MPRED_L0_REF00_POC                  (volatile unsigned int *)((0x3220  << 2) + 0xff620000)
+#define   HEVC_MPRED_L0_REF01_POC                  (0x3221)
+#define P_HEVC_MPRED_L0_REF01_POC                  (volatile unsigned int *)((0x3221  << 2) + 0xff620000)
+#define   HEVC_MPRED_L0_REF02_POC                  (0x3222)
+#define P_HEVC_MPRED_L0_REF02_POC                  (volatile unsigned int *)((0x3222  << 2) + 0xff620000)
+#define   HEVC_MPRED_L0_REF03_POC                  (0x3223)
+#define P_HEVC_MPRED_L0_REF03_POC                  (volatile unsigned int *)((0x3223  << 2) + 0xff620000)
+#define   HEVC_MPRED_L0_REF04_POC                  (0x3224)
+#define P_HEVC_MPRED_L0_REF04_POC                  (volatile unsigned int *)((0x3224  << 2) + 0xff620000)
+#define   HEVC_MPRED_L0_REF05_POC                  (0x3225)
+#define P_HEVC_MPRED_L0_REF05_POC                  (volatile unsigned int *)((0x3225  << 2) + 0xff620000)
+#define   HEVC_MPRED_L0_REF06_POC                  (0x3226)
+#define P_HEVC_MPRED_L0_REF06_POC                  (volatile unsigned int *)((0x3226  << 2) + 0xff620000)
+#define   HEVC_MPRED_L0_REF07_POC                  (0x3227)
+#define P_HEVC_MPRED_L0_REF07_POC                  (volatile unsigned int *)((0x3227  << 2) + 0xff620000)
+#define   HEVC_MPRED_L0_REF08_POC                  (0x3228)
+#define P_HEVC_MPRED_L0_REF08_POC                  (volatile unsigned int *)((0x3228  << 2) + 0xff620000)
+#define   HEVC_MPRED_L0_REF09_POC                  (0x3229)
+#define P_HEVC_MPRED_L0_REF09_POC                  (volatile unsigned int *)((0x3229  << 2) + 0xff620000)
+#define   HEVC_MPRED_L0_REF10_POC                  (0x322a)
+#define P_HEVC_MPRED_L0_REF10_POC                  (volatile unsigned int *)((0x322a  << 2) + 0xff620000)
+#define   HEVC_MPRED_L0_REF11_POC                  (0x322b)
+#define P_HEVC_MPRED_L0_REF11_POC                  (volatile unsigned int *)((0x322b  << 2) + 0xff620000)
+#define   HEVC_MPRED_L0_REF12_POC                  (0x322c)
+#define P_HEVC_MPRED_L0_REF12_POC                  (volatile unsigned int *)((0x322c  << 2) + 0xff620000)
+#define   HEVC_MPRED_L0_REF13_POC                  (0x322d)
+#define P_HEVC_MPRED_L0_REF13_POC                  (volatile unsigned int *)((0x322d  << 2) + 0xff620000)
+#define   HEVC_MPRED_L0_REF14_POC                  (0x322e)
+#define P_HEVC_MPRED_L0_REF14_POC                  (volatile unsigned int *)((0x322e  << 2) + 0xff620000)
+#define   HEVC_MPRED_L0_REF15_POC                  (0x322f)
+#define P_HEVC_MPRED_L0_REF15_POC                  (volatile unsigned int *)((0x322f  << 2) + 0xff620000)
+#define   HEVC_MPRED_L1_REF00_POC                  (0x3230)
+#define P_HEVC_MPRED_L1_REF00_POC                  (volatile unsigned int *)((0x3230  << 2) + 0xff620000)
+#define   HEVC_MPRED_L1_REF01_POC                  (0x3231)
+#define P_HEVC_MPRED_L1_REF01_POC                  (volatile unsigned int *)((0x3231  << 2) + 0xff620000)
+#define   HEVC_MPRED_L1_REF02_POC                  (0x3232)
+#define P_HEVC_MPRED_L1_REF02_POC                  (volatile unsigned int *)((0x3232  << 2) + 0xff620000)
+#define   HEVC_MPRED_L1_REF03_POC                  (0x3233)
+#define P_HEVC_MPRED_L1_REF03_POC                  (volatile unsigned int *)((0x3233  << 2) + 0xff620000)
+#define   HEVC_MPRED_L1_REF04_POC                  (0x3234)
+#define P_HEVC_MPRED_L1_REF04_POC                  (volatile unsigned int *)((0x3234  << 2) + 0xff620000)
+#define   HEVC_MPRED_L1_REF05_POC                  (0x3235)
+#define P_HEVC_MPRED_L1_REF05_POC                  (volatile unsigned int *)((0x3235  << 2) + 0xff620000)
+#define   HEVC_MPRED_L1_REF06_POC                  (0x3236)
+#define P_HEVC_MPRED_L1_REF06_POC                  (volatile unsigned int *)((0x3236  << 2) + 0xff620000)
+#define   HEVC_MPRED_L1_REF07_POC                  (0x3237)
+#define P_HEVC_MPRED_L1_REF07_POC                  (volatile unsigned int *)((0x3237  << 2) + 0xff620000)
+#define   HEVC_MPRED_L1_REF08_POC                  (0x3238)
+#define P_HEVC_MPRED_L1_REF08_POC                  (volatile unsigned int *)((0x3238  << 2) + 0xff620000)
+#define   HEVC_MPRED_L1_REF09_POC                  (0x3239)
+#define P_HEVC_MPRED_L1_REF09_POC                  (volatile unsigned int *)((0x3239  << 2) + 0xff620000)
+#define   HEVC_MPRED_L1_REF10_POC                  (0x323a)
+#define P_HEVC_MPRED_L1_REF10_POC                  (volatile unsigned int *)((0x323a  << 2) + 0xff620000)
+#define   HEVC_MPRED_L1_REF11_POC                  (0x323b)
+#define P_HEVC_MPRED_L1_REF11_POC                  (volatile unsigned int *)((0x323b  << 2) + 0xff620000)
+#define   HEVC_MPRED_L1_REF12_POC                  (0x323c)
+#define P_HEVC_MPRED_L1_REF12_POC                  (volatile unsigned int *)((0x323c  << 2) + 0xff620000)
+#define   HEVC_MPRED_L1_REF13_POC                  (0x323d)
+#define P_HEVC_MPRED_L1_REF13_POC                  (volatile unsigned int *)((0x323d  << 2) + 0xff620000)
+#define   HEVC_MPRED_L1_REF14_POC                  (0x323e)
+#define P_HEVC_MPRED_L1_REF14_POC                  (volatile unsigned int *)((0x323e  << 2) + 0xff620000)
+#define   HEVC_MPRED_L1_REF15_POC                  (0x323f)
+#define P_HEVC_MPRED_L1_REF15_POC                  (volatile unsigned int *)((0x323f  << 2) + 0xff620000)
+#define   HEVC_MPRED_PIC_SIZE_EXT                  (0x3240)
+#define P_HEVC_MPRED_PIC_SIZE_EXT                  (volatile unsigned int *)((0x3240  << 2) + 0xff620000)
+#define   HEVC_MPRED_DBG_MODE0                     (0x3241)
+#define P_HEVC_MPRED_DBG_MODE0                     (volatile unsigned int *)((0x3241  << 2) + 0xff620000)
+#define   HEVC_MPRED_DBG_MODE1                     (0x3242)
+#define P_HEVC_MPRED_DBG_MODE1                     (volatile unsigned int *)((0x3242  << 2) + 0xff620000)
+#define   HEVC_MPRED_DBG2_MODE                     (0x3243)
+#define P_HEVC_MPRED_DBG2_MODE                     (volatile unsigned int *)((0x3243  << 2) + 0xff620000)
+#define   HEVC_MPRED_IMP_CMD0                      (0x3244)
+#define P_HEVC_MPRED_IMP_CMD0                      (volatile unsigned int *)((0x3244  << 2) + 0xff620000)
+#define   HEVC_MPRED_IMP_CMD1                      (0x3245)
+#define P_HEVC_MPRED_IMP_CMD1                      (volatile unsigned int *)((0x3245  << 2) + 0xff620000)
+#define   HEVC_MPRED_IMP_CMD2                      (0x3246)
+#define P_HEVC_MPRED_IMP_CMD2                      (volatile unsigned int *)((0x3246  << 2) + 0xff620000)
+#define   HEVC_MPRED_IMP_CMD3                      (0x3247)
+#define P_HEVC_MPRED_IMP_CMD3                      (volatile unsigned int *)((0x3247  << 2) + 0xff620000)
+#define   HEVC_MPRED_DBG2_DATA_0                   (0x3248)
+#define P_HEVC_MPRED_DBG2_DATA_0                   (volatile unsigned int *)((0x3248  << 2) + 0xff620000)
+#define   HEVC_MPRED_DBG2_DATA_1                   (0x3249)
+#define P_HEVC_MPRED_DBG2_DATA_1                   (volatile unsigned int *)((0x3249  << 2) + 0xff620000)
+#define   HEVC_MPRED_DBG2_DATA_2                   (0x324a)
+#define P_HEVC_MPRED_DBG2_DATA_2                   (volatile unsigned int *)((0x324a  << 2) + 0xff620000)
+#define   HEVC_MPRED_DBG2_DATA_3                   (0x324b)
+#define P_HEVC_MPRED_DBG2_DATA_3                   (volatile unsigned int *)((0x324b  << 2) + 0xff620000)
+#define   HEVC_MPRED_CTRL4                         (0x324c)
+#define P_HEVC_MPRED_CTRL4                         (volatile unsigned int *)((0x324c  << 2) + 0xff620000)
+//  [0]     above intermedia data compress: 0=no-compress,1=compress;default:1'b0
+//  [1]     collocated MV intermedia data compress: 0=no-compress,1=compress;default:1'b0
+//  [2]     vp9_mode,0=hevc_mode,1=vp9_mode,default=0
+//  [6]     vp9_use_prev_frame_mvs  0=not allow vp9_use_prev_frame_mvs,1=allow vp9_use_prev_frame_mvs,default=0
+//  [8]     vp9_not_allow_hp    0=vp9_allow_hp,1=vp9_not_allow_hp,default=0
+//  [9]     vp9_is_compound     0=vp9_is_not_compound,1=vp9_is_compound,default=0
+//  [12]    vp9_ref_sign_bias[1]        ref1(last) ref_sign_bias, default=0
+//  [13]    vp9_ref_sign_bias[2]        ref2(golden) ref_sign_bias,default=0
+//  [14]    vp9_ref_sign_bias[3]        ref3(altref) ref_sign_bias,default=0
+#define   HEVC_MPRED_CTRL5                         (0x324d)
+#define P_HEVC_MPRED_CTRL5                         (volatile unsigned int *)((0x324d  << 2) + 0xff620000)
+#define   HEVC_MPRED_POC24_CTRL0                   (0x324e)
+#define P_HEVC_MPRED_POC24_CTRL0                   (volatile unsigned int *)((0x324e  << 2) + 0xff620000)
+#define   HEVC_MPRED_POC24_CTRL1                   (0x324f)
+#define P_HEVC_MPRED_POC24_CTRL1                   (volatile unsigned int *)((0x324f  << 2) + 0xff620000)
+#define   HEVC_MPRED_DBG_DATA_0                    (0x3250)
+#define P_HEVC_MPRED_DBG_DATA_0                    (volatile unsigned int *)((0x3250  << 2) + 0xff620000)
+#define   HEVC_MPRED_DBG_DATA_1                    (0x3251)
+#define P_HEVC_MPRED_DBG_DATA_1                    (volatile unsigned int *)((0x3251  << 2) + 0xff620000)
+#define   HEVC_MPRED_DBG_DATA_2                    (0x3252)
+#define P_HEVC_MPRED_DBG_DATA_2                    (volatile unsigned int *)((0x3252  << 2) + 0xff620000)
+#define   HEVC_MPRED_DBG_DATA_3                    (0x3253)
+#define P_HEVC_MPRED_DBG_DATA_3                    (volatile unsigned int *)((0x3253  << 2) + 0xff620000)
+#define   HEVC_MPRED_DBG_DATA_4                    (0x3254)
+#define P_HEVC_MPRED_DBG_DATA_4                    (volatile unsigned int *)((0x3254  << 2) + 0xff620000)
+#define   HEVC_MPRED_DBG_DATA_5                    (0x3255)
+#define P_HEVC_MPRED_DBG_DATA_5                    (volatile unsigned int *)((0x3255  << 2) + 0xff620000)
+#define   HEVC_MPRED_DBG_DATA_6                    (0x3256)
+#define P_HEVC_MPRED_DBG_DATA_6                    (volatile unsigned int *)((0x3256  << 2) + 0xff620000)
+#define   HEVC_MPRED_DBG_DATA_7                    (0x3257)
+#define P_HEVC_MPRED_DBG_DATA_7                    (volatile unsigned int *)((0x3257  << 2) + 0xff620000)
+#define   HEVC_MPRED_CTRL6                         (0x3258)
+#define P_HEVC_MPRED_CTRL6                         (volatile unsigned int *)((0x3258  << 2) + 0xff620000)
+#define   HEVC_MPRED_CTRL7                         (0x3259)
+#define P_HEVC_MPRED_CTRL7                         (volatile unsigned int *)((0x3259  << 2) + 0xff620000)
+#define   HEVC_MPRED_CTRL8                         (0x325a)
+#define P_HEVC_MPRED_CTRL8                         (volatile unsigned int *)((0x325a  << 2) + 0xff620000)
+#define   HEVC_MPRED_CTRL9                         (0x325b)
+#define P_HEVC_MPRED_CTRL9                         (volatile unsigned int *)((0x325b  << 2) + 0xff620000)
+#define   HEVC_MPRED_CUR_POC                       (0x3260)
+#define P_HEVC_MPRED_CUR_POC                       (volatile unsigned int *)((0x3260  << 2) + 0xff620000)
+#define   HEVC_MPRED_COL_POC                       (0x3261)
+#define P_HEVC_MPRED_COL_POC                       (volatile unsigned int *)((0x3261  << 2) + 0xff620000)
+#define   HEVC_MPRED_MV_RD_END_ADDR                (0x3262)
+#define P_HEVC_MPRED_MV_RD_END_ADDR                (volatile unsigned int *)((0x3262  << 2) + 0xff620000)
+//
+// Closing file:  hevc_mpred_regs.h
+//
+//------------------------------------------------------------------------------
+// HEVC_IPP module level register offset
+//------------------------------------------------------------------------------
+//
+// Reading file:  hevc_ipp_regs.h
+//
+// John A. Thodiyil
+// Register map for intra/inter/pcm pixel-prediction + MCRCC + DECOMP
+// August 14th, 2013
+// -----------------------------------------------
+// CBUS_BASE:  DOS_HEVC_IPP_CBUS_BASE = 0x04
+// -----------------------------------------------
+#define   HEVCD_IPP_TOP_CNTL                       (0x3400)
+#define P_HEVCD_IPP_TOP_CNTL                       (volatile unsigned int *)((0x3400  << 2) + 0xff620000)
+// [0]      -- software reset ipp and mpp
+// [1]      -- enable ipp
+// [3:2]    -- reserved
+// [5:4]    -- codec[1:0] 00:hevc 01:vp9 10:avs2 11:reserved
+// [31:6]   -- reserved
+#define   HEVCD_IPP_TOP_STATUS                     (0x3401)
+#define P_HEVCD_IPP_TOP_STATUS                     (volatile unsigned int *)((0x3401  << 2) + 0xff620000)
+// [0]      -- ready for next tile/frame
+// [1]      -- ready for next ctb
+// [2]      -- ready for next slice
+// [3]      -- reserved
+// [4]      -- ipp_axi_rd_idle
+// [5]      -- ipp_axi_wr_idle
+// [6]      -- mpp_axi_rd_idle
+// [31:7]   -- reserved
+#define   HEVCD_IPP_TOP_FRMCONFIG                  (0x3402)
+#define P_HEVCD_IPP_TOP_FRMCONFIG                  (volatile unsigned int *)((0x3402  << 2) + 0xff620000)
+// [14:0]   -- frame width in luma pixels
+// [30:16]  -- frame height in luma pixels
+#define   HEVCD_IPP_TOP_TILECONFIG1                (0x3403)
+#define P_HEVCD_IPP_TOP_TILECONFIG1                (volatile unsigned int *)((0x3403  << 2) + 0xff620000)
+// [11:0]   -- tile_width_in_lcu
+// [27:16]  -- tile_height_in_lcu
+#define   HEVCD_IPP_TOP_TILECONFIG2                (0x3404)
+#define P_HEVCD_IPP_TOP_TILECONFIG2                (volatile unsigned int *)((0x3404  << 2) + 0xff620000)
+// [11:0]   -- tile_offset_x_in_lcu
+// [27:16]  -- tile_offset_y_in_lcu
+#define   HEVCD_IPP_TOP_TILECONFIG3                (0x3405)
+#define P_HEVCD_IPP_TOP_TILECONFIG3                (volatile unsigned int *)((0x3405  << 2) + 0xff620000)
+// [0]      -- tiles_enabled_flag
+// [31:1]   -- reserved
+#define   HEVCD_IPP_TOP_LCUCONFIG                  (0x3406)
+#define P_HEVCD_IPP_TOP_LCUCONFIG                  (volatile unsigned int *)((0x3406  << 2) + 0xff620000)
+// [6:0]    -- lcu size in pixels
+#define   HEVCD_IPP_TOP_FRMCTL                     (0x3407)
+#define P_HEVCD_IPP_TOP_FRMCTL                     (volatile unsigned int *)((0x3407  << 2) + 0xff620000)
+// [x]      -- start ipp tile decode
+#define   HEVCD_IPP_CONFIG                         (0x3408)
+#define P_HEVCD_IPP_CONFIG                         (volatile unsigned int *)((0x3408  << 2) + 0xff620000)
+// [0]      -- ipp_strong_intra_smoothing_enable_flag
+// [1]      -- cfg_ipp_constrained_intra_pred_flag
+// [31:2]   -- reserved
+#define   HEVCD_IPP_LINEBUFF_BASE                  (0x3409)
+#define P_HEVCD_IPP_LINEBUFF_BASE                  (volatile unsigned int *)((0x3409  << 2) + 0xff620000)
+// [31:14]  -- intra-prediction line-buffer 16KByte axi address
+// [13:0]   -- reserved
+#define   HEVCD_IPP_INTR_MASK                      (0x340a)
+#define P_HEVCD_IPP_INTR_MASK                      (volatile unsigned int *)((0x340a  << 2) + 0xff620000)
+// [0]      -- tile/frame ready
+// [1]      -- ctb ready
+// [2]      -- slice ready
+// [31:3]   -- reserved
+#define   HEVCD_IPP_AXIIF_CONFIG                   (0x340b)
+#define P_HEVCD_IPP_AXIIF_CONFIG                   (volatile unsigned int *)((0x340b  << 2) + 0xff620000)
+// [3:0]    -- little_endian
+// [5:4]    -- address_format 00:linear 01:32x32 10:64x32
+// [7:6]    -- reserved
+// [9:8]    -- Linear_LineAlignment 00:16byte 01:32byte 10:64byte
+// [11:10]  -- reserved
+// [12]     -- CbCr_byte_swap
+// [31:13]  -- reserved
+#define   HEVCD_IPP_BITDEPTH_CONFIG                (0x340c)
+#define P_HEVCD_IPP_BITDEPTH_CONFIG                (volatile unsigned int *)((0x340c  << 2) + 0xff620000)
+// [1:0]    -- bit_depth_luma   00:8 01:9 10:10
+// [3:2]    -- bit_depth_chroma 00:8 01:9 10:10
+// [31:4]   -- reserved
+#define   HEVCD_IPP_SWMPREDIF_CONFIG               (0x3410)
+#define P_HEVCD_IPP_SWMPREDIF_CONFIG               (volatile unsigned int *)((0x3410  << 2) + 0xff620000)
+// [0]      -- swmpredif_enable
+// [31:1]   -- reserved
+#define   HEVCD_IPP_SWMPREDIF_STATUS               (0x3411)
+#define P_HEVCD_IPP_SWMPREDIF_STATUS               (volatile unsigned int *)((0x3411  << 2) + 0xff620000)
+// [0]      -- swmpredif_rdy
+// [7:1]    -- reserved
+// [14:8]   -- swmpredif_fifospace
+// [31:15]  -- reserved
+#define   HEVCD_IPP_SWMPREDIF_CTBINFO              (0x3412)
+#define P_HEVCD_IPP_SWMPREDIF_CTBINFO              (volatile unsigned int *)((0x3412  << 2) + 0xff620000)
+// [10:0]   -- swmpredif_ctb_x
+// [15:11]  -- reserved
+// [26:16]  -- swmpredif_ctb_y
+// [30:27]  -- reserved
+// [31]     -- swmpredif_newslice
+#define   HEVCD_IPP_SWMPREDIF_PUINFO0              (0x3413)
+#define P_HEVCD_IPP_SWMPREDIF_PUINFO0              (volatile unsigned int *)((0x3413  << 2) + 0xff620000)
+// [31:0]   -- swmpredif_imp_cmd[31:0]
+#define   HEVCD_IPP_SWMPREDIF_PUINFO1              (0x3414)
+#define P_HEVCD_IPP_SWMPREDIF_PUINFO1              (volatile unsigned int *)((0x3414  << 2) + 0xff620000)
+// [31:0]   -- swmpredif_imp_cmd[63:32]
+#define   HEVCD_IPP_SWMPREDIF_PUINFO2              (0x3415)
+#define P_HEVCD_IPP_SWMPREDIF_PUINFO2              (volatile unsigned int *)((0x3415  << 2) + 0xff620000)
+// [31:0]   -- swmpredif_imp_cmd[95:64]
+#define   HEVCD_IPP_SWMPREDIF_PUINFO3              (0x3416)
+#define P_HEVCD_IPP_SWMPREDIF_PUINFO3              (volatile unsigned int *)((0x3416  << 2) + 0xff620000)
+// [31:0]   -- swmpredif_imp_cmd[127:96]
+#define   HEVCD_IPP_SWMPREDIF_PUINFO4              (0x3417)
+#define P_HEVCD_IPP_SWMPREDIF_PUINFO4              (volatile unsigned int *)((0x3417  << 2) + 0xff620000)
+// [31:0]   -- swmpredif_imp_cmd[159:128]
+#define   HEVCD_IPP_SWMPREDIF_PUINFO5              (0x3418)
+#define P_HEVCD_IPP_SWMPREDIF_PUINFO5              (volatile unsigned int *)((0x3418  << 2) + 0xff620000)
+// [31:0]   -- swmpredif_imp_cmd[191:160]
+//          writing to HEVCD_IPP_SWMPREDIF_PUINFO5
+//          completes command, should be last to write.
+#define   HEVCD_IPP_DYNCLKGATE_CONFIG              (0x3420)
+#define P_HEVCD_IPP_DYNCLKGATE_CONFIG              (volatile unsigned int *)((0x3420  << 2) + 0xff620000)
+// [0]      -- mpp_wpredict_clkgate_disbl
+// [1]      -- mpp_ref_fetch_clkgate_disbl
+// [2]      -- mpp_interpol_top_clkgate_disbl
+// [3]      -- mpp_4x4mcr_clkgate_disbl
+// [4]      -- mpp_ref_pack_clkgate_disbl
+// [5]      -- mpp_mdec_if_clkgate_disbl
+// [7:6]    -- reserved
+// [8]      -- ipp_res_fetch_clkgate_disbl
+// [9]      -- ipp_iqitIf_clkgate_disbl
+// [10]     -- ipp_dblkCmdIf_clkgate_disbl
+// [11]     -- ipp_dblkIf_clkgate_disbl
+// [12]     -- ipp_cntl_clkgate_disbl
+// [13]     -- ipp_nsamples_proc_clkgate_disbl
+// [14]     -- ipp_refroute_clkgate_disbl
+// [15]     -- ipp_spred_clkgate_disbl
+// [16]     -- ipp_reg_clkgate_disbl
+// [17]     -- ipp_recon_clkgate_disbl
+// [19:18]  -- reserved
+// [20]     -- decomp_cntl_clkgate_disbl
+// [21]     -- decomp_axiIf_clkgate_disbl
+// [22]     -- decomp_dcache_clkgate_disbl
+// [23]     -- decomp_hcache_clkgate_disbl
+// [24]     -- decomp_gearup_clkgate_disbl
+// [25]     -- decomp_cores_clkgate_disbl
+// [26]     -- decomp_rdroute_clkgate_disbl
+// [27]     -- reserved
+// [28]     -- master_decomp_clkgate_disbl
+// [29]     -- master_mpp_clkgate_disbl
+// [30]     -- master_ipp_clkgate_disbl
+// [31]     -- master_ipp_mpp_decomp_clkgate_disbl
+#define   HEVCD_IPP_DYNCLKGATE_STATUS              (0x3421)
+#define P_HEVCD_IPP_DYNCLKGATE_STATUS              (volatile unsigned int *)((0x3421  << 2) + 0xff620000)
+// [0]      -- mpp_wpredict_clkgate
+// [1]      -- mpp_ref_fetch_clkgate
+// [2]      -- mpp_interpol_top_clkgate
+// [3]      -- mpp_4x4mcr_clkgate
+// [4]      -- mpp_ref_pack_clkgate
+// [5]      -- mpp_mdec_if_clkgate
+// [7:6]    -- reserved
+// [8]      -- ipp_res_fetch_clkgate
+// [9]      -- ipp_iqitIf_clkgate
+// [10]     -- ipp_dblkCmdIf_clkgate
+// [11]     -- ipp_dblkIf_clkgate
+// [12]     -- ipp_cntl_clkgate
+// [13]     -- ipp_nsamples_proc_clkgate
+// [14]     -- ipp_refroute_clkgate
+// [15]     -- ipp_spred_clkgate
+// [16]     -- ipp_reg_clkgate
+// [17]     -- ipp_recon_clkgate
+// [19:18]  -- reserved
+// [20]     -- decomp_cntl_clkgate
+// [21]     -- decomp_axiIf_clkgate
+// [22]     -- decomp_dcache_clkgate
+// [23]     -- decomp_hcache_clkgate
+// [24]     -- decomp_gearup_clkgate
+// [25]     -- decomp_cores_clkgate
+// [26]     -- decomp_rdroute_clkgate
+// [27]     -- reserved
+// [30:28]  -- reserved
+// [31]     -- mcrcc_axi_clkgate
+#define   HEVCD_IPP_DBG_SEL                        (0x3430)
+#define P_HEVCD_IPP_DBG_SEL                        (volatile unsigned int *)((0x3430  << 2) + 0xff620000)
+// [3:0]    -- module_level_sel
+// [7:4]    -- mpp_ipp_top_level
+// [8]      -- ipp_sel
+// [31:9]   -- reserved
+#define   HEVCD_IPP_DBG_DATA                       (0x3431)
+#define P_HEVCD_IPP_DBG_DATA                       (volatile unsigned int *)((0x3431  << 2) + 0xff620000)
+// [31:0]   -- Debug information
+//////////////////////////////////////////////////////////////////////////////
+///// MPP Registers                                       ////////////////////
+//////////////////////////////////////////////////////////////////////////////
+// Canvas Anchor to Axi-Address translation table
+#define   HEVCD_MPP_ANC2AXI_TBL_CONF_ADDR          (0x3460)
+#define P_HEVCD_MPP_ANC2AXI_TBL_CONF_ADDR          (volatile unsigned int *)((0x3460  << 2) + 0xff620000)
+// [0]      -- anc2axi canvas address translation table switch 0:sw 1:hw
+// [1]      -- access type 1:wr 0:rd
+// [2]      -- auto index increment
+// [7:3]    -- reserved
+// [15:8]   -- start index
+// [31:16]  -- reserved
+//`define     HEVCD_MPP_ANC2AXI_TBL_CMD_ADDR         8'h61
+// [0]      -- anc2axi canvas address translation table access type 1:wr 0:rd
+// [15:8]   -- anc2axi canvas address translation table access index
+// [31:16]  -- anc2axi canvas address translation table access write data, 16KByte axi address
+//          -- obsoleted
+//`define     HEVCD_MPP_ANC2AXI_TBL_WDATA_ADDR       8'h62   // NU
+// [x]      -- not used
+//`define     HEVCD_MPP_ANC2AXI_TBL_RDATA_ADDR       8'h63
+// [15:0]   -- anc2axi canvas address translation table access read data
+//          -- obsoleted
+#define   HEVCD_MPP_ANC2AXI_TBL_DATA               (0x3464)
+#define P_HEVCD_MPP_ANC2AXI_TBL_DATA               (volatile unsigned int *)((0x3464  << 2) + 0xff620000)
+// [26:0]   -- anc2axi address r/w  32byte aligned
+// [31:27]  -- reserved
+#define   HEVCD_MPP_WEIGHTPRED_CNTL_ADDR           (0x347b)
+#define P_HEVCD_MPP_WEIGHTPRED_CNTL_ADDR           (volatile unsigned int *)((0x347b  << 2) + 0xff620000)
+// [0]      -- weighted_pred_flag
+#define   HEVCD_MPP_L0_WEIGHT_FLAG_ADDR            (0x347c)
+#define P_HEVCD_MPP_L0_WEIGHT_FLAG_ADDR            (volatile unsigned int *)((0x347c  << 2) + 0xff620000)
+// [15:0]   -- luma_weght_flag0[15:0], indexed by refidx0
+// [31:16]  -- chroma_weght_flag0[15:0], indexed by refidx0
+#define   HEVCD_MPP_L1_WEIGHT_FLAG_ADDR            (0x347d)
+#define P_HEVCD_MPP_L1_WEIGHT_FLAG_ADDR            (volatile unsigned int *)((0x347d  << 2) + 0xff620000)
+// [15:0]   -- luma_weght_flag1[15:0], indexed by refidx1
+// [31:16]  -- chroma_weght_flag1[15:0], indexed by refidx1
+#define   HEVCD_MPP_YLOG2WGHTDENOM_ADDR            (0x347e)
+#define P_HEVCD_MPP_YLOG2WGHTDENOM_ADDR            (volatile unsigned int *)((0x347e  << 2) + 0xff620000)
+// [3:0]    -- luma_log2_weight_denom
+#define   HEVCD_MPP_DELTACLOG2WGHTDENOM_ADDR       (0x347f)
+#define P_HEVCD_MPP_DELTACLOG2WGHTDENOM_ADDR       (volatile unsigned int *)((0x347f  << 2) + 0xff620000)
+// [4:0]    -- delta_chroma_log2_weight_denom
+#define   HEVCD_MPP_WEIGHT_ADDR                    (0x3480)
+#define P_HEVCD_MPP_WEIGHT_ADDR                    (volatile unsigned int *)((0x3480  << 2) + 0xff620000)
+// [5:0]    -- weight_rw_addr
+// [0]      -- DELTA_WEIGHT0
+// [1]      -- OFFSET0
+// [2]      -- DELTA_WEIGHT1
+// [3]      -- OFFSET1
+// ......
+// [62]     -- DELTA_WEIGHT31
+// [63]     -- OFFSET31
+#define   HEVCD_MPP_WEIGHT_DATA                    (0x3481)
+#define P_HEVCD_MPP_WEIGHT_DATA                    (volatile unsigned int *)((0x3481  << 2) + 0xff620000)
+// For DELTA_WEIGHT :
+// [7:0]    -- delta_y_weight for refidx0:0
+// [15:8]   -- delta_cb_weight for refidx0:0
+// [23:16]  -- delta_cr_weight for refidx0:0
+// For OFFSET :
+// [7:0]    -- luma_offset for refidx0:0
+// [17:8]   -- delta_cb_offset for refidx0:0
+// [27:18]  -- delta_cr_offset for refidx0:0
+// ID to Anchor-Canvas-Address table
+// [31:13]  reserved
+// [12:8]   access_index
+// [7:2]    reserved
+// [1]      auto_inc_read
+// [0]      auto_inc_write
+#define   HEVCD_MPP_ANC_CANVAS_ACCCONFIG_ADDR      (0x34c0)
+#define P_HEVCD_MPP_ANC_CANVAS_ACCCONFIG_ADDR      (volatile unsigned int *)((0x34c0  << 2) + 0xff620000)
+// Id[4:0]  --> {AnchorAddrCr[7:0],AnchorAddrCb[7:0],AnchorAddrY[7:0]}
+#define   HEVCD_MPP_ANC_CANVAS_DATA_ADDR           (0x34c1)
+#define P_HEVCD_MPP_ANC_CANVAS_DATA_ADDR           (volatile unsigned int *)((0x34c1  << 2) + 0xff620000)
+// [0]       -- decomp_nocompress
+// [1]       -- decomp_dcache_bypass
+// [2]       -- reserved
+// [3]       -- decomp_smem_bdepth888
+// [4]       -- decomp_paged_mem_mode
+// [30:5]    -- reserved
+// [31]      -- decomp_axif_lbmode888
+#define   HEVCD_MPP_DECOMP_CTL1                    (0x34c2)
+#define P_HEVCD_MPP_DECOMP_CTL1                    (volatile unsigned int *)((0x34c2  << 2) + 0xff620000)
+// [23:0]    -- header1_offset : 32byte address from canvas base
+// [31:24]   -- reserved
+#define   HEVCD_MPP_DECOMP_CTL2                    (0x34c3)
+#define P_HEVCD_MPP_DECOMP_CTL2                    (volatile unsigned int *)((0x34c3  << 2) + 0xff620000)
+// [9:0]     -- decomp_default_Y
+// [19:10]   -- decomp_default_Cb
+// [29:20]   -- decomp_dafault_Cr
+// [31:30]   -- bitdepth_sel 00:8bit 01:9bit 10:10bit
+#define   HEVCD_MPP_DECOMP_CTL3                    (0x34c4)
+#define P_HEVCD_MPP_DECOMP_CTL3                    (volatile unsigned int *)((0x34c4  << 2) + 0xff620000)
+// HEVCD_MPP_DECOMP_PERFMON_CTL
+// [0]      percount_reset
+// [3:1]    perfcount_sel
+// [31:4]   reserved
+// {1'b0,perfcount_sel[1:0]}    perfcount
+//     0                        raw_hcache_cnt
+//     1                        hit_hcache_cnt
+//     2                        raw_dcache_cnt
+//     3                        hit_dcache_cnt
+// {1'b1,perfcount_sel[1:0]}    perfcount
+//     0                        fast_num_compburst
+//     1                        slow_num_compburst
+//     2,3                      raw_num_ncompburst
+#define   HEVCD_MPP_DECOMP_PERFMON_CTL             (0x34c5)
+#define P_HEVCD_MPP_DECOMP_PERFMON_CTL             (volatile unsigned int *)((0x34c5  << 2) + 0xff620000)
+// HEVCD_MPP_DECOMP_PERFMON_DATA
+// [31:0]   percount_data
+#define   HEVCD_MPP_DECOMP_PERFMON_DATA            (0x34c6)
+#define P_HEVCD_MPP_DECOMP_PERFMON_DATA            (volatile unsigned int *)((0x34c6  << 2) + 0xff620000)
+// HEVCD_MPP_DECOMP_AXIURG_CTL
+// [1:0]      -- decomp_hdrurg  00:Normal 01:Urgent 10:SuperUrgent
+// [2]        -- decomp_fpathurg_en 1->Urgent if below lo_thresh
+// [3]        -- decomp_spathurg_en 1->Urgent if below lo_thresh
+// [10:4]     -- decomp_fpathurg_lothresh [32byte steps : max 96]
+// [17:11]    -- decomp_fpathurg_hithresh [32byte steps : max 96]
+// [24:18]    -- decomp_spathurg_lothresh [32byte steps : max 64]
+// [31:25]    -- decomp_spathurg_hithresh [32byte steps : max 64]
+#define   HEVCD_MPP_DECOMP_AXIURG_CTL              (0x34c7)
+#define P_HEVCD_MPP_DECOMP_AXIURG_CTL              (volatile unsigned int *)((0x34c7  << 2) + 0xff620000)
+// HEVCD_MPP_VDEC_MCR_CTL
+// [0]        -- mcr_mdec_mode : 1:mcr fetch used by vdec:mdec
+// [3:1]      -- reserved
+// [4]        -- mcr_mdec_8byte_endianess : 1:big 0:little
+// [31:5]     -- reserved
+#define   HEVCD_MPP_VDEC_MCR_CTL                   (0x34c8)
+#define P_HEVCD_MPP_VDEC_MCR_CTL                   (volatile unsigned int *)((0x34c8  << 2) + 0xff620000)
+//////////////////////////////////////////////////////////////////////////////
+///// MCRCC_AXI Registers                                 ////////////////////
+//////////////////////////////////////////////////////////////////////////////
+// HEVCD_MCRCC_CTL1
+// 31:12 <reserved[20:0]>
+// 11:10 <cfg_anc11_tb>                           // 01: top 10:bot 11:frame
+// 9:8   <cfg_anc10_tb>
+// 7:6   <cfg_anc01_tb>
+// 5:4   <cfg_anc00_tb>
+// 3     <cfg_clkgate_disbl>
+// 2     <cfg_field_pic>                           // not used for hevc
+// 1     <sw_rst>
+// 0     <bypass_en>
+#define   HEVCD_MCRCC_CTL1                         (0x34f0)
+#define P_HEVCD_MCRCC_CTL1                         (volatile unsigned int *)((0x34f0  << 2) + 0xff620000)
+// HEVCD_MCRCC_CTL2
+// 31:24    <cfg_cache_anc01_c[7:0]>
+// 23:16    <cfg_cache_anc01_y[7:0]>
+// 15:8     <cfg_cache_anc00_c[7:0]>
+// 7:0      <cfg_cache_anc00_y[7:0]>
+#define   HEVCD_MCRCC_CTL2                         (0x34f1)
+#define P_HEVCD_MCRCC_CTL2                         (volatile unsigned int *)((0x34f1  << 2) + 0xff620000)
+// HEVCD_MCRCC_CTL3
+// 31:24    <cfg_cache_anc11_c[7:0]>
+// 23:16    <cfg_cache_anc11_y[7:0]>
+// 15:8     <cfg_cache_anc10_c[7:0]>
+// 7:0      <cfg_cache_anc10_y[7:0]>
+#define   HEVCD_MCRCC_CTL3                         (0x34f2)
+#define P_HEVCD_MCRCC_CTL3                         (volatile unsigned int *)((0x34f2  << 2) + 0xff620000)
+// HEVCD_MCRCC_PERFMON_CTL
+// [0]      percount_reset
+// [3:1]    perfcount_sel
+// [31:4]   reserved
+// perfcount_sel[2:0]     perfcount
+//     0                  raw_mcr_cnt
+//     1                  hit_mcr_cnt
+//     2                  byp_mcr_cnt_nchoutwin
+//     3                  byp_mcr_cnt_nchcanv
+//     4                  miss_mcr_cnt_0
+//     5                  miss_mcr_cnt_1
+//     6                  hit_mcr_cnt_0
+//     7                  hit_mcr_cnt_1
+#define   HEVCD_MCRCC_PERFMON_CTL                  (0x34f3)
+#define P_HEVCD_MCRCC_PERFMON_CTL                  (volatile unsigned int *)((0x34f3  << 2) + 0xff620000)
+// HEVCD_MCRCC_PERFMON_DATA
+// [31:0]   percount_data
+#define   HEVCD_MCRCC_PERFMON_DATA                 (0x34f4)
+#define P_HEVCD_MCRCC_PERFMON_DATA                 (volatile unsigned int *)((0x34f4  << 2) + 0xff620000)
+//////////////////////////////////////////////////////////////////////////////
+///// VP9 Decoder Registers                               ////////////////////
+//////////////////////////////////////////////////////////////////////////////
+// VP9D_MPP_INTERPOL_CFG0
+// [2:0]    VP9 MC Interpolation type
+            // 0-3:perframe type 4:per partition type
+// [3]      reserved
+// [4]      V99 MV precision
+            // 1:high precision else  mv=mv*2
+// [31:5]   reserved
+#define   VP9D_MPP_INTERPOL_CFG0                   (0x3440)
+#define P_VP9D_MPP_INTERPOL_CFG0                   (volatile unsigned int *)((0x3440  << 2) + 0xff620000)
+// VP9D_MPP_REF_SCALE_ENBL
+// [7:0]    VP9 MC reference scaled info
+// [15:0]   VP9 MC reference scaled dir 0:Dwn 1:Up
+// [31:16]  reserved
+#define   VP9D_MPP_REF_SCALE_ENBL                  (0x3441)
+#define P_VP9D_MPP_REF_SCALE_ENBL                  (volatile unsigned int *)((0x3441  << 2) + 0xff620000)
+// VP9D_MPP_REFINFO_TBL_ACCCONFIG
+// [1:0]    reserved
+// [2]      auto_inc_index/field
+// [5:3]    reference index   0:last 1:golden 2:altref
+// [8:6]    info field 0:<ref_width[14:0]> 1:<ref_height[14:0]>
+            //         2:<scale_x[26:0]  3:<scale_y[26:0]>
+            //         4:<decomp_header1_offset[23:0]> -- 32byte aligned
+// [31:9]   reserved
+#define   VP9D_MPP_REFINFO_TBL_ACCCONFIG           (0x3442)
+#define P_VP9D_MPP_REFINFO_TBL_ACCCONFIG           (volatile unsigned int *)((0x3442  << 2) + 0xff620000)
+// VP9D_MPP_REFINFO_DATA
+// [n:0]    refinfo_tbl[index]field]  wr_data/rd_data
+#define   VP9D_MPP_REFINFO_DATA                    (0x3443)
+#define P_VP9D_MPP_REFINFO_DATA                    (volatile unsigned int *)((0x3443  << 2) + 0xff620000)
+//
+// Closing file:  hevc_ipp_regs.h
+//
+//------------------------------------------------------------------------------
+// HEVC_DBLK module level register offset
+//------------------------------------------------------------------------------
+//
+// Reading file:  hevc_dblk_regs.h
+//
+// -----------------------------------------------
+// CBUS_BASE:  DOS_HEVC_DBLK_CBUS_BASE = 0x05
+// -----------------------------------------------
+//cfg0[0];        //software_reset
+//cfg0[1];        //status clear, only for axi error or pic_done
+//cfg0[2];        //clock_forced_on_all
+//cfg0[3];        //clock_forced_off_all
+//cfg0[11:8];     //PU FIFO Threshold   , 0:16 1:1 ... 1:15
+//cfg0[15:12];    //TU FIFO Threshold>>4, 0:16<<4 1:1<<4 ... 1:15<<4
+//cfg0[29:16];    //clock_forced_on_submodules
+#define   HEVC_DBLK_CFG0                           (0x3500)
+#define P_HEVC_DBLK_CFG0                           (volatile unsigned int *)((0x3500  << 2) + 0xff620000)
+//cfg1[1:0];      //ctb_size 0:64x64 1:32x32 2:16x16
+//cfg1[2];        //ignore_out_of_boundary
+//cfg1[3];        //pcm_loop_filter_disabled_flag
+//cfg1[8:4];      //pps_cb_qp_offset (-12~12,inclusive)
+//cfg1[13:9];     //pps_cr_qp_offset (-12~12,inclusive)
+//cfg1[14];       //ctbx,y swap in pu i/f
+//cfg1[15];       //sao_corner_45_degree_all_software_control
+#define   HEVC_DBLK_CFG1                           (0x3501)
+#define P_HEVC_DBLK_CFG1                           (volatile unsigned int *)((0x3501  << 2) + 0xff620000)
+//cfg2[15:0];     //picture_size_width
+//cfg2[31:16];    //picture_size_height
+#define   HEVC_DBLK_CFG2                           (0x3502)
+#define P_HEVC_DBLK_CFG2                           (volatile unsigned int *)((0x3502  << 2) + 0xff620000)
+//cfg3[3:0];      //parameter_axi_arid
+//cfg3[7:4];      //parameter_axi_awid
+//cfg3[11:8];     //parameter_axi_wid
+//cfg3[12];       //parameter_axi_not_check_write_response
+//cfg3[19:16];    //data_axi_arid
+//cfg3[23:20];    //data_axi_awid
+//cfg3[27:24];    //data_axi_wid
+//cfg3[28];       //data_axi_not_check_write_response
+#define   HEVC_DBLK_CFG3                           (0x3503)
+#define P_HEVC_DBLK_CFG3                           (volatile unsigned int *)((0x3503  << 2) + 0xff620000)
+//cfg4[31:0];     //parameter_axi_start_address
+#define   HEVC_DBLK_CFG4                           (0x3504)
+#define P_HEVC_DBLK_CFG4                           (volatile unsigned int *)((0x3504  << 2) + 0xff620000)
+//cfg5[31:0];     //data_axi_start_address
+#define   HEVC_DBLK_CFG5                           (0x3505)
+#define P_HEVC_DBLK_CFG5                           (volatile unsigned int *)((0x3505  << 2) + 0xff620000)
+//cfg6[9:0];      //tile_ctbx
+//cfg6[25:16];    //tile_ctby
+//cfg6[31];       //tile_enabled
+#define   HEVC_DBLK_CFG6                           (0x3506)
+#define P_HEVC_DBLK_CFG6                           (volatile unsigned int *)((0x3506  << 2) + 0xff620000)
+//cfg7[9:0];      //tile_ctbxsize
+//cfg7[25:16];    //tile_ctbysize
+#define   HEVC_DBLK_CFG7                           (0x3507)
+#define P_HEVC_DBLK_CFG7                           (volatile unsigned int *)((0x3507  << 2) + 0xff620000)
+//cfg8[9:0];      //start_ctbx, normally equals to tile_ctbx
+//cfg8[25:16];    //start_ctby, normally equals to tile_ctby
+//cfg8[31];       //start, self_cleared signal, normally set it at the begin of tile
+#define   HEVC_DBLK_CFG8                           (0x3508)
+#define P_HEVC_DBLK_CFG8                           (volatile unsigned int *)((0x3508  << 2) + 0xff620000)
+//cfg9[0]         //loop_filter_across_tiles_enabled_flag
+//cfg9[1]         //loop_filter_across_slices_enabled_flag
+//cfg9[2]         //deblocking_filter_disabled_flag
+//cfg9[6:3]       //beta_offset_div2 (-6~6,inclusive)
+//cfg9[10:7]      //tc_offset_div2 (-6~6,inclusive)
+#define   HEVC_DBLK_CFG9                           (0x3509)
+#define P_HEVC_DBLK_CFG9                           (volatile unsigned int *)((0x3509  << 2) + 0xff620000)
+//cfga[4:0]       //corner45degree{FIFO_CNT}
+//cfga[31:27]     //corner45degree{EN,FIFO_CLR,FIFO_PUSH,DATA,DATA_SEL}
+#define   HEVC_DBLK_CFGA                           (0x350a)
+#define P_HEVC_DBLK_CFGA                           (volatile unsigned int *)((0x350a  << 2) + 0xff620000)
+//cfgb[3:0]       //0:HEVC 1:VP9 ...
+#define   HEVC_DBLK_CFGB                           (0x350b)
+#define P_HEVC_DBLK_CFGB                           (volatile unsigned int *)((0x350b  << 2) + 0xff620000)
+//cfgc[31:0]      //cfg_addr_y1
+#define   HEVC_DBLK_CFGC                           (0x350c)
+#define P_HEVC_DBLK_CFGC                           (volatile unsigned int *)((0x350c  << 2) + 0xff620000)
+//TODO description
+#define   HEVC_DBLK_STS0                           (0x350d)
+#define P_HEVC_DBLK_STS0                           (volatile unsigned int *)((0x350d  << 2) + 0xff620000)
+//TODO description
+#define   HEVC_DBLK_STS1                           (0x350e)
+#define P_HEVC_DBLK_STS1                           (volatile unsigned int *)((0x350e  << 2) + 0xff620000)
+//
+// Closing file:  hevc_dblk_regs.h
+//
+//------------------------------------------------------------------------------
+// HEVC_SAO module level register offset
+//------------------------------------------------------------------------------
+//
+// Reading file:  hevc_sao_regs.h
+//
+// -----------------------------------------------
+// CBUS_BASE:  DOS_HEVC_SAO_CBUS_BASE = 0x06
+// -----------------------------------------------
+#define   HEVC_SAO_VERSION                         (0x3600)
+#define P_HEVC_SAO_VERSION                         (volatile unsigned int *)((0x3600  << 2) + 0xff620000)
+//  [31:0]  reversion               default:32'h00010001
+#define   HEVC_SAO_CTRL0                           (0x3601)
+#define P_HEVC_SAO_CTRL0                           (volatile unsigned int *)((0x3601  << 2) + 0xff620000)
+//  [3:0]   lcu_size_log2
+//  [31]    above intermedia data compress: 0=no-compress,1=compress;default:1'b0
+#define   HEVC_SAO_CTRL1                           (0x3602)
+#define P_HEVC_SAO_CTRL1                           (volatile unsigned int *)((0x3602  << 2) + 0xff620000)
+//  [31:24] ar_fifo1_axi_thred
+//  [23:16] ar_fifo0_axi_thred
+//  [15:14] axi_linealign, 0-16bytes, 1-32bytes, 2-64bytes
+//  [13:12] axi_aformat, 0-Linear, 1-32x32, 2-64x32
+//  [11:08] axi_lendian_C
+//  [07:04] axi_lendian_Y
+//  [3]     reserved
+//  [2]     clk_forceon
+//  [1]     dw_disable:disable double write output
+//  [0]     cm_disable:disable compress output
+#define   HEVC_SAO_INT_EN                          (0x3603)
+#define P_HEVC_SAO_INT_EN                          (volatile unsigned int *)((0x3603  << 2) + 0xff620000)
+//  [0]     sao_int_enable
+//  [1]     sao_int_amrisc_level
+//  [2]     sao_int_cpu_level
+//  [3]     slice_done_int_amrisc_enable
+//  [4]     slice_done_int_cpu_enable
+//  [15]    disable_sao_int_clock_gating
+#define   HEVC_SAO_INT_STATUS                      (0x3604)
+#define P_HEVC_SAO_INT_STATUS                      (volatile unsigned int *)((0x3604  << 2) + 0xff620000)
+//  [0]     slice_done IRQ
+//  [31]    write "1"=slice start(self clear,read always return "0")
+#define   HEVC_SAO_PIC_SIZE                        (0x3605)
+#define P_HEVC_SAO_PIC_SIZE                        (volatile unsigned int *)((0x3605  << 2) + 0xff620000)
+//  [15:0]  pic_width[15:0]
+//  [31:16] pic_height[15:0]
+#define   HEVC_SAO_PIC_SIZE_LCU                    (0x3606)
+#define P_HEVC_SAO_PIC_SIZE_LCU                    (volatile unsigned int *)((0x3606  << 2) + 0xff620000)
+//  [15:0]  lcu_x_num_1[15:0]   (=lcu_x_total-1)
+//  [31:16] lcu_y_num_1[15:0]   (=lcu_y_total-1)
+#define   HEVC_SAO_TILE_START                      (0x3607)
+#define P_HEVC_SAO_TILE_START                      (volatile unsigned int *)((0x3607  << 2) + 0xff620000)
+//  [15:0]  tile_start_lcu_x[15:0]
+//  [31:16] tile_start_lcu_y[15:0]
+#define   HEVC_SAO_TILE_SIZE_LCU                   (0x3608)
+#define P_HEVC_SAO_TILE_SIZE_LCU                   (volatile unsigned int *)((0x3608  << 2) + 0xff620000)
+//  [15:0]  tile_width_lcu[15:0]
+//  [31:16] tile_height_lcu[15:0]
+#define   HEVC_SAO_AXI_WCTRL                       (0x3609)
+#define P_HEVC_SAO_AXI_WCTRL                       (volatile unsigned int *)((0x3609  << 2) + 0xff620000)
+#define   HEVC_SAO_AXI_RCTRL                       (0x360a)
+#define P_HEVC_SAO_AXI_RCTRL                       (volatile unsigned int *)((0x360a  << 2) + 0xff620000)
+#define   HEVC_SAO_Y_START_ADDR                    (0x360b)
+#define P_HEVC_SAO_Y_START_ADDR                    (volatile unsigned int *)((0x360b  << 2) + 0xff620000)
+#define   HEVC_SAO_Y_LENGTH                        (0x360c)
+#define P_HEVC_SAO_Y_LENGTH                        (volatile unsigned int *)((0x360c  << 2) + 0xff620000)
+#define   HEVC_SAO_C_START_ADDR                    (0x360d)
+#define P_HEVC_SAO_C_START_ADDR                    (volatile unsigned int *)((0x360d  << 2) + 0xff620000)
+#define   HEVC_SAO_C_LENGTH                        (0x360e)
+#define P_HEVC_SAO_C_LENGTH                        (volatile unsigned int *)((0x360e  << 2) + 0xff620000)
+#define   HEVC_SAO_Y_WPTR                          (0x360f)
+#define P_HEVC_SAO_Y_WPTR                          (volatile unsigned int *)((0x360f  << 2) + 0xff620000)
+#define   HEVC_SAO_C_WPTR                          (0x3610)
+#define P_HEVC_SAO_C_WPTR                          (volatile unsigned int *)((0x3610  << 2) + 0xff620000)
+#define   HEVC_SAO_ABV_START_ADDR                  (0x3611)
+#define P_HEVC_SAO_ABV_START_ADDR                  (volatile unsigned int *)((0x3611  << 2) + 0xff620000)
+#define   HEVC_SAO_VB_WR_START_ADDR                (0x3612)
+#define P_HEVC_SAO_VB_WR_START_ADDR                (volatile unsigned int *)((0x3612  << 2) + 0xff620000)
+#define   HEVC_SAO_VB_RD_START_ADDR                (0x3613)
+#define P_HEVC_SAO_VB_RD_START_ADDR                (volatile unsigned int *)((0x3613  << 2) + 0xff620000)
+#define   HEVC_SAO_ABV_WPTR                        (0x3614)
+#define P_HEVC_SAO_ABV_WPTR                        (volatile unsigned int *)((0x3614  << 2) + 0xff620000)
+#define   HEVC_SAO_ABV_RPTR                        (0x3615)
+#define P_HEVC_SAO_ABV_RPTR                        (volatile unsigned int *)((0x3615  << 2) + 0xff620000)
+#define   HEVC_SAO_VB_WPTR                         (0x3616)
+#define P_HEVC_SAO_VB_WPTR                         (volatile unsigned int *)((0x3616  << 2) + 0xff620000)
+#define   HEVC_SAO_VB_RPTR                         (0x3617)
+#define P_HEVC_SAO_VB_RPTR                         (volatile unsigned int *)((0x3617  << 2) + 0xff620000)
+#define   HEVC_SAO_DBG_MODE0                       (0x361e)
+#define P_HEVC_SAO_DBG_MODE0                       (volatile unsigned int *)((0x361e  << 2) + 0xff620000)
+#define   HEVC_SAO_DBG_MODE1                       (0x361f)
+#define P_HEVC_SAO_DBG_MODE1                       (volatile unsigned int *)((0x361f  << 2) + 0xff620000)
+#define   HEVC_SAO_CTRL2                           (0x3620)
+#define P_HEVC_SAO_CTRL2                           (volatile unsigned int *)((0x3620  << 2) + 0xff620000)
+#define   HEVC_SAO_CTRL3                           (0x3621)
+#define P_HEVC_SAO_CTRL3                           (volatile unsigned int *)((0x3621  << 2) + 0xff620000)
+#define   HEVC_SAO_CTRL4                           (0x3622)
+#define P_HEVC_SAO_CTRL4                           (volatile unsigned int *)((0x3622  << 2) + 0xff620000)
+#define   HEVC_SAO_CTRL5                           (0x3623)
+#define P_HEVC_SAO_CTRL5                           (volatile unsigned int *)((0x3623  << 2) + 0xff620000)
+//[23:22]  dw_h1_ctrl   default:2'b11
+//[21:20]  dw_h0_ctrl   default:2'b11
+//[19:18]  dw_h1_ctrl   default:2'b11
+//[17:16]  dw_h0_ctrl   default:2'b11
+#define   HEVC_SAO_CTRL6                           (0x3624)
+#define P_HEVC_SAO_CTRL6                           (volatile unsigned int *)((0x3624  << 2) + 0xff620000)
+#define   HEVC_SAO_CTRL7                           (0x3625)
+#define P_HEVC_SAO_CTRL7                           (volatile unsigned int *)((0x3625  << 2) + 0xff620000)
+#define   HEVC_CM_BODY_START_ADDR                  (0x3626)
+#define P_HEVC_CM_BODY_START_ADDR                  (volatile unsigned int *)((0x3626  << 2) + 0xff620000)
+#define   HEVC_CM_BODY_LENGTH                      (0x3627)
+#define P_HEVC_CM_BODY_LENGTH                      (volatile unsigned int *)((0x3627  << 2) + 0xff620000)
+#define   HEVC_CM_HEADER_START_ADDR                (0x3628)
+#define P_HEVC_CM_HEADER_START_ADDR                (volatile unsigned int *)((0x3628  << 2) + 0xff620000)
+#define   HEVC_CM_HEADER_LENGTH                    (0x3629)
+#define P_HEVC_CM_HEADER_LENGTH                    (volatile unsigned int *)((0x3629  << 2) + 0xff620000)
+#define   HEVC_CM_COLOR                            (0x362a)
+#define P_HEVC_CM_COLOR                            (volatile unsigned int *)((0x362a  << 2) + 0xff620000)
+#define   HEVC_CM_HEADER_OFFSET                    (0x362b)
+#define P_HEVC_CM_HEADER_OFFSET                    (volatile unsigned int *)((0x362b  << 2) + 0xff620000)
+#define   HEVC_SAO_CTRL8                           (0x362c)
+#define P_HEVC_SAO_CTRL8                           (volatile unsigned int *)((0x362c  << 2) + 0xff620000)
+#define   HEVC_SAO_CTRL9                           (0x362d)
+#define P_HEVC_SAO_CTRL9                           (volatile unsigned int *)((0x362d  << 2) + 0xff620000)
+#define   HEVC_SAO_CTRL10                          (0x362e)
+#define P_HEVC_SAO_CTRL10                          (volatile unsigned int *)((0x362e  << 2) + 0xff620000)
+#define   HEVC_SAO_CTRL11                          (0x362f)
+#define P_HEVC_SAO_CTRL11                          (volatile unsigned int *)((0x362f  << 2) + 0xff620000)
+#define   HEVC_SAO_DBG_DATA_0                      (0x3630)
+#define P_HEVC_SAO_DBG_DATA_0                      (volatile unsigned int *)((0x3630  << 2) + 0xff620000)
+#define   HEVC_SAO_DBG_DATA_1                      (0x3631)
+#define P_HEVC_SAO_DBG_DATA_1                      (volatile unsigned int *)((0x3631  << 2) + 0xff620000)
+#define   HEVC_SAO_DBG_DATA_2                      (0x3632)
+#define P_HEVC_SAO_DBG_DATA_2                      (volatile unsigned int *)((0x3632  << 2) + 0xff620000)
+#define   HEVC_SAO_DBG_DATA_3                      (0x3633)
+#define P_HEVC_SAO_DBG_DATA_3                      (volatile unsigned int *)((0x3633  << 2) + 0xff620000)
+#define   HEVC_SAO_DBG_DATA_4                      (0x3634)
+#define P_HEVC_SAO_DBG_DATA_4                      (volatile unsigned int *)((0x3634  << 2) + 0xff620000)
+#define   HEVC_SAO_DBG_DATA_5                      (0x3635)
+#define P_HEVC_SAO_DBG_DATA_5                      (volatile unsigned int *)((0x3635  << 2) + 0xff620000)
+#define   HEVC_SAO_DBG_DATA_6                      (0x3636)
+#define P_HEVC_SAO_DBG_DATA_6                      (volatile unsigned int *)((0x3636  << 2) + 0xff620000)
+#define   HEVC_SAO_DBG_DATA_7                      (0x3637)
+#define P_HEVC_SAO_DBG_DATA_7                      (volatile unsigned int *)((0x3637  << 2) + 0xff620000)
+#define   HEVC_SAO_MMU_WR                          (0x3638)
+#define P_HEVC_SAO_MMU_WR                          (volatile unsigned int *)((0x3638  << 2) + 0xff620000)
+#define   HEVC_SAO_MMU_STATUS                      (0x3639)
+#define P_HEVC_SAO_MMU_STATUS                      (volatile unsigned int *)((0x3639  << 2) + 0xff620000)
+//Read Only
+//sao_mmu_fifo is 16(depth)x20(bits)
+//[0]   mmu_fifo_empty  1=empty,0=not-empty
+//[1]   mmu_fifo_full   1=full,0=not-full
+//[7:4] mmu_fifo_depth[3:0]
+//[11:8] mmu_fifo_room[3:0]
+#define   HEVC_SAO_MMU_VH0_ADDR                    (0x363a)
+#define P_HEVC_SAO_MMU_VH0_ADDR                    (volatile unsigned int *)((0x363a  << 2) + 0xff620000)
+#define   HEVC_SAO_MMU_VH1_ADDR                    (0x363b)
+#define P_HEVC_SAO_MMU_VH1_ADDR                    (volatile unsigned int *)((0x363b  << 2) + 0xff620000)
+#define   HEVC_SAO_MMU_WPTR                        (0x363c)
+#define P_HEVC_SAO_MMU_WPTR                        (volatile unsigned int *)((0x363c  << 2) + 0xff620000)
+#define   HEVC_SAO_MMU_RPTR                        (0x363d)
+#define P_HEVC_SAO_MMU_RPTR                        (volatile unsigned int *)((0x363d  << 2) + 0xff620000)
+//
+// Closing file:  hevc_sao_regs.h
+//
+//------------------------------------------------------------------------------
+// HEVC_IQIT module level register offset
+//------------------------------------------------------------------------------
+//
+// Reading file:  hevc_iqit_regs.h
+//
+// -----------------------------------------------
+// CBUS_BASE:  DOS_HEVC_IQIT_CBUS_BASE = 0x07
+// -----------------------------------------------
+// [    2] RW en_freeclk.   0=Auto-gated clock for saving power;
+//                          1=Free running clock if something wrong with auto-gating.
+//                          Default 0.
+// [    1] RW enable_clk.   0=Disable clock; 1=Enable clock.        Default 0.
+#define   HEVC_IQIT_CLK_RST_CTRL                   (0x3700)
+#define P_HEVC_IQIT_CLK_RST_CTRL                   (volatile unsigned int *)((0x3700  << 2) + 0xff620000)
+// [ 5: 4] RW ctb_size.     0=8x8; 1=16x16; 2=32x32; 3=64x64.                       Default 0.
+// [    3] RW itr_skip_mode. For dealing with discrepancy between Spec and C model for transform_skip.
+//                          0=Follow Spec; 1=Follow C model.                        Default 0.
+// [    2] RW scalelist_mode. Applicable only when scalelist_en=1.
+//                          0=Use default scaling factor list;
+//                          1=Use scaling factor list define in bit stream.
+//                          Default 0.
+// [    1] RW scalelist_en. 0=Use flat scale; 1=Use scaling factor list.            Default 0.
+// [    0] RW diagscan_en.  0=Linear lookup dQ table; 1=Diagonally lookup dQ table. Default 0.
+#define   HEVC_IQIT_DEQUANT_CTRL                   (0x3701)
+#define P_HEVC_IQIT_DEQUANT_CTRL                   (volatile unsigned int *)((0x3701  << 2) + 0xff620000)
+// [31:10] WR Reserved.                                 Default 0.
+// [ 9: 0] WR scalelut_addr.                            Default 0.
+#define   HEVC_IQIT_SCALELUT_WR_ADDR               (0x3702)
+#define P_HEVC_IQIT_SCALELUT_WR_ADDR               (volatile unsigned int *)((0x3702  << 2) + 0xff620000)
+// [31:10] RD Reserved.                                 Default 0.
+// [ 9: 0] RD scalelut_addr.                            Default 0.
+#define   HEVC_IQIT_SCALELUT_RD_ADDR               (0x3703)
+#define P_HEVC_IQIT_SCALELUT_RD_ADDR               (volatile unsigned int *)((0x3703  << 2) + 0xff620000)
+// [ 7: 0] RW LUT data.
+#define   HEVC_IQIT_SCALELUT_DATA                  (0x3704)
+#define P_HEVC_IQIT_SCALELUT_DATA                  (volatile unsigned int *)((0x3704  << 2) + 0xff620000)
+//---------------------------------------------------
+// tab_idx [2:0] -
+//    0-5 use custom table index
+//    6 - reserved
+//    7 - use default table
+//---------------------------------------------------
+// [22:20] 4x4 tab 5
+// [   19] reserved
+// [18:16] 4x4 tab 4
+// [   15] reserved
+// [14:12] 4x4 tab 3
+// [   11] reserved
+// [10: 8] 4x4 tab 2
+// [    7] reserved
+// [ 6: 4] 4x4 tab 1
+// [    3] reserved
+// [ 2: 0] 4x4 tab 0
+#define   HEVC_IQIT_SCALELUT_IDX_4                 (0x3705)
+#define P_HEVC_IQIT_SCALELUT_IDX_4                 (volatile unsigned int *)((0x3705  << 2) + 0xff620000)
+// [22:20] 8x8 tab 5
+// [   19] reserved
+// [18:16] 8x8 tab 4
+// [   15] reserved
+// [14:12] 8x8 tab 3
+// [   11] reserved
+// [10: 8] 8x8 tab 2
+// [    7] reserved
+// [ 6: 4] 8x8 tab 1
+// [    3] reserved
+// [ 2: 0] 8x8 tab 0
+#define   HEVC_IQIT_SCALELUT_IDX_8                 (0x3706)
+#define P_HEVC_IQIT_SCALELUT_IDX_8                 (volatile unsigned int *)((0x3706  << 2) + 0xff620000)
+// [   31] reserved
+// [30:28] 32x32 tab 1
+// [   27] reserved
+// [26:24] 32x32 tab 0
+// [   23] reserved
+// [22:20] 16x16 tab 5
+// [   19] reserved
+// [18:16] 16x16 tab 4
+// [   15] reserved
+// [14:12] 16x16 tab 3
+// [   11] reserved
+// [10: 8] 16x16 tab 2
+// [    7] reserved
+// [ 6: 4] 16x16 tab 1
+// [    3] reserved
+// [ 2: 0] 16x16 tab 0
+#define   HEVC_IQIT_SCALELUT_IDX_16_32             (0x3707)
+#define P_HEVC_IQIT_SCALELUT_IDX_16_32             (volatile unsigned int *)((0x3707  << 2) + 0xff620000)
+// [ 8: 2] R  tuinfo_fifo_cnt.
+// [    1] R  fifo_has_room.
+// [    0] R  mem_init_done.
+#define   HEVC_IQIT_STAT_GEN0                      (0x3708)
+#define P_HEVC_IQIT_STAT_GEN0                      (volatile unsigned int *)((0x3708  << 2) + 0xff620000)
+// [   23] RW cntl_qp_cr_valid.
+// [21:16] RW cntl_qp_cr.
+// [   15] RW cntl_qp_cb_valid.
+// [13: 8] RW cntl_qp_cb.
+// [    7] RW cntl_qp_y_valid.
+// [ 5: 0] RW cntl_qp_y.
+#define   HEVC_QP_WRITE                            (0x3709)
+#define P_HEVC_QP_WRITE                            (volatile unsigned int *)((0x3709  << 2) + 0xff620000)
+// [31:30] R  ipp_size.
+// [28:24] R  ipp_mem_ptr.
+// [23:22] R  itr2_size.
+// [20:16] R  itr2_mem_ptr.
+// [15:14] R  itr1_size.
+// [12: 8] R  itr1_mem_ptr.
+// [ 7: 6] R  iq_size.
+// [ 4: 0] R  iq_mem_ptr.
+#define   HEVC_IQIT_STAT_GEN1                      (0x370a)
+#define P_HEVC_IQIT_STAT_GEN1                      (volatile unsigned int *)((0x370a  << 2) + 0xff620000)
+// [ 5: 4] RW cntl_bitdepth_c. 0=8-bit; 1=9-bit; 2=10-bit.
+// [ 1: 0] RW cntl_bitdepth_y. 0=8-bit; 1=9-bit; 2=10-bit.
+#define   HEVC_IQIT_BITDEPTH                       (0x370b)
+#define P_HEVC_IQIT_BITDEPTH                       (volatile unsigned int *)((0x370b  << 2) + 0xff620000)
+// [   10] R  ipp_active.
+// [    9] R  itr2_active.
+// [    8] R  itr1_active.
+// [ 5: 0] R  mem_spare_num.
+#define   HEVC_IQIT_STAT_GEN2                      (0x370c)
+#define P_HEVC_IQIT_STAT_GEN2                      (volatile unsigned int *)((0x370c  << 2) + 0xff620000)
+#define   HEVC_IQIT_AVS2_WQP_0123                  (0x370d)
+#define P_HEVC_IQIT_AVS2_WQP_0123                  (volatile unsigned int *)((0x370d  << 2) + 0xff620000)
+#define   HEVC_IQIT_AVS2_WQP_45                    (0x370e)
+#define P_HEVC_IQIT_AVS2_WQP_45                    (volatile unsigned int *)((0x370e  << 2) + 0xff620000)
+#define   HEVC_IQIT_AVS2_QP_DELTA                  (0x370f)
+#define P_HEVC_IQIT_AVS2_QP_DELTA                  (volatile unsigned int *)((0x370f  << 2) + 0xff620000)
+//
+// Closing file:  hevc_iqit_regs.h
+//
+//------------------------------------------------------------------------------
+//  DOS top-level register offset
+//------------------------------------------------------------------------------
+// -----------------------------------------------
+// CBUS_BASE:  DOS_TOP_CBUS_BASE = 0x3f
+// -----------------------------------------------
+// [0]  reserved
+// [1]  Reset Dos top level registers, except sw_reset0/1/2 which is only reset by external reset_n.
+// [2]  VDEC1 Reset assist, mdec's CBUS
+// [3]  VDEC1 Reset mdec's VLD
+// [4]  VDEC1 Reset mdec's VLD
+// [5]  VDEC1 Reset mdec's VLD
+// [6]  VDEC1 Reset mdec's IQIDCT
+// [7]  VDEC1 Reset mdec's MC
+// [8]  VDEC1 Reset mdec's DBLK
+// [9]  VDEC1 Reset mdec's PIC_DC
+// [10] VDEC1 Reset mdec's Pscale
+// [11] VDEC1 Reset vcpu's MCPU
+// [12] VDEC1 Reset vcpu's CCPU
+// [13] VDEC1 Reset mmc_pre_arb
+#define   DOS_SW_RESET0                            (0x3f00)
+#define P_DOS_SW_RESET0                            (volatile unsigned int *)((0x3f00  << 2) + 0xff620000)
+// [31:27] reserved
+// [26] hcodec clk_en for henc assist
+// [25:22] reserved
+// [21] hcodec clk_en for henc qdct
+// [20] hcodec clk_en for henc vlc
+// [19] hcodec clk_en for assist and cbus
+// [18] hcodec clk_en for ddr
+// [17] hcodec clk_en for vcpu
+// [16] hcodec clk_en for hdec assist
+// [15] hcodec clk_en for hdec dblk
+// [14] reserved
+// [13] hcodec clk_en for hdec mc
+// [12] hcodec clk_en for hdec pic_dc
+// [11:10] reserved
+// [9] vdec clk_en for vdec assist and cbus
+// [8] vdec clk_en for ddr
+// [7] vdec clk_en for vcpu
+// [6] vdec clk_en for mdec vld
+// [5] vdec clk_en for mdec psc
+// [4] vdec clk_en for mdec pic_dc
+// [3] vdec clk_en for mdec mc
+// [2] vdec clk_en for mdec iqidct
+// [1] vdec clk_en for mdec dblk
+// [0] vdec clk_en for mdec assist
+#define   DOS_GCLK_EN0                             (0x3f01)
+#define P_DOS_GCLK_EN0                             (volatile unsigned int *)((0x3f01  << 2) + 0xff620000)
+#define   DOS_GEN_CTRL0                            (0x3f02)
+#define P_DOS_GEN_CTRL0                            (volatile unsigned int *)((0x3f02  << 2) + 0xff620000)
+#define   DOS_APB_ERR_CTRL                         (0x3f03)
+#define P_DOS_APB_ERR_CTRL                         (volatile unsigned int *)((0x3f03  << 2) + 0xff620000)
+#define   DOS_APB_ERR_STAT                         (0x3f04)
+#define P_DOS_APB_ERR_STAT                         (volatile unsigned int *)((0x3f04  << 2) + 0xff620000)
+#define   DOS_VDEC_INT_EN                          (0x3f05)
+#define P_DOS_VDEC_INT_EN                          (volatile unsigned int *)((0x3f05  << 2) + 0xff620000)
+#define   DOS_HCODEC_INT_EN                        (0x3f06)
+#define P_DOS_HCODEC_INT_EN                        (volatile unsigned int *)((0x3f06  << 2) + 0xff620000)
+// [0]  Reserved
+// [1]  Reserved
+// [2]  HCODEC Reset assist, hdec's CBUS
+// [3]  HCODEC Reset hdec's VLD
+// [4]  HCODEC Reset hdec's VLD
+// [5]  HCODEC Reset hdec's VLD
+// [6]  HCODEC Reset hdec's IQIDCT
+// [7]  HCODEC Reset hdec's MC
+// [8]  HCODEC Reset hdec's DBLK
+// [9]  HCODEC Reset hdec's PIC_DC
+// [10] HCODEC Reset hdec's Pscale
+// [11] HCODEC Reset vcpu's MCPU
+// [12] HCODEC Reset vcpu's CCPU
+// [13] HCODEC Reset mmc_pre_arb
+// [14] HCODEC Reserved
+// [15] HCODEC Reserved
+// [16] HCODEC Reset henc's VLC
+#define   DOS_SW_RESET1                            (0x3f07)
+#define P_DOS_SW_RESET1                            (volatile unsigned int *)((0x3f07  << 2) + 0xff620000)
+// [0]  Reserved
+// [1]  Reserved
+// [2]  VDEC2 Reset assist, mdec's CBUS
+// [3]  VDEC2 Reset mdec's VLD
+// [4]  VDEC2 Reset mdec's VLD
+// [5]  VDEC2 Reset mdec's VLD
+// [6]  VDEC2 Reset mdec's IQIDCT
+// [7]  VDEC2 Reset mdec's MC
+// [8]  VDEC2 Reset mdec's DBLK
+// [9]  VDEC2 Reset mdec's PIC_DC
+// [10] VDEC2 Reset mdec's Pscale
+// [11] VDEC2 Reset vcpu's MCPU
+// [12] VDEC2 Reset vcpu's CCPU
+// [13] VDEC2 Reset mmc_pre_arb
+#define   DOS_SW_RESET2                            (0x3f08)
+#define P_DOS_SW_RESET2                            (volatile unsigned int *)((0x3f08  << 2) + 0xff620000)
+// [31:10] Reserved
+// [9] vdec2 clk_en for assist and cbus.
+// [8] vdec2 clk_en for ddr;
+// [7] vdec2 clk_en for vcpu;
+// [6] vdec2 clk_en for mdec vld
+// [5] vdec2 clk_en for mdec psc
+// [4] vdec2 clk_en for mdec pic_dc
+// [3] vdec2 clk_en for mdec mc
+// [2] vdec2 clk_en for mdec iqidct
+// [1] vdec2 clk_en for mdec dblk
+// [0] vdec2 clk_en for mdec assist
+#define   DOS_GCLK_EN1                             (0x3f09)
+#define P_DOS_GCLK_EN1                             (volatile unsigned int *)((0x3f09  << 2) + 0xff620000)
+#define   DOS_VDEC2_INT_EN                         (0x3f0a)
+#define P_DOS_VDEC2_INT_EN                         (volatile unsigned int *)((0x3f0a  << 2) + 0xff620000)
+#define   DOS_VDIN_LCNT                            (0x3f0b)
+#define P_DOS_VDIN_LCNT                            (volatile unsigned int *)((0x3f0b  << 2) + 0xff620000)
+#define   DOS_VDIN_FCNT                            (0x3f0c)
+#define P_DOS_VDIN_FCNT                            (volatile unsigned int *)((0x3f0c  << 2) + 0xff620000)
+#define   DOS_VDIN_CCTL                            (0x3f0d)
+#define P_DOS_VDIN_CCTL                            (volatile unsigned int *)((0x3f0d  << 2) + 0xff620000)
+#define   DOS_SCRATCH0                             (0x3f10)
+#define P_DOS_SCRATCH0                             (volatile unsigned int *)((0x3f10  << 2) + 0xff620000)
+#define   DOS_SCRATCH1                             (0x3f11)
+#define P_DOS_SCRATCH1                             (volatile unsigned int *)((0x3f11  << 2) + 0xff620000)
+#define   DOS_SCRATCH2                             (0x3f12)
+#define P_DOS_SCRATCH2                             (volatile unsigned int *)((0x3f12  << 2) + 0xff620000)
+#define   DOS_SCRATCH3                             (0x3f13)
+#define P_DOS_SCRATCH3                             (volatile unsigned int *)((0x3f13  << 2) + 0xff620000)
+#define   DOS_SCRATCH4                             (0x3f14)
+#define P_DOS_SCRATCH4                             (volatile unsigned int *)((0x3f14  << 2) + 0xff620000)
+#define   DOS_SCRATCH5                             (0x3f15)
+#define P_DOS_SCRATCH5                             (volatile unsigned int *)((0x3f15  << 2) + 0xff620000)
+#define   DOS_SCRATCH6                             (0x3f16)
+#define P_DOS_SCRATCH6                             (volatile unsigned int *)((0x3f16  << 2) + 0xff620000)
+#define   DOS_SCRATCH7                             (0x3f17)
+#define P_DOS_SCRATCH7                             (volatile unsigned int *)((0x3f17  << 2) + 0xff620000)
+#define   DOS_SCRATCH8                             (0x3f18)
+#define P_DOS_SCRATCH8                             (volatile unsigned int *)((0x3f18  << 2) + 0xff620000)
+#define   DOS_SCRATCH9                             (0x3f19)
+#define P_DOS_SCRATCH9                             (volatile unsigned int *)((0x3f19  << 2) + 0xff620000)
+#define   DOS_SCRATCH10                            (0x3f1a)
+#define P_DOS_SCRATCH10                            (volatile unsigned int *)((0x3f1a  << 2) + 0xff620000)
+#define   DOS_SCRATCH11                            (0x3f1b)
+#define P_DOS_SCRATCH11                            (volatile unsigned int *)((0x3f1b  << 2) + 0xff620000)
+#define   DOS_SCRATCH12                            (0x3f1c)
+#define P_DOS_SCRATCH12                            (volatile unsigned int *)((0x3f1c  << 2) + 0xff620000)
+#define   DOS_SCRATCH13                            (0x3f1d)
+#define P_DOS_SCRATCH13                            (volatile unsigned int *)((0x3f1d  << 2) + 0xff620000)
+#define   DOS_SCRATCH14                            (0x3f1e)
+#define P_DOS_SCRATCH14                            (volatile unsigned int *)((0x3f1e  << 2) + 0xff620000)
+#define   DOS_SCRATCH15                            (0x3f1f)
+#define P_DOS_SCRATCH15                            (volatile unsigned int *)((0x3f1f  << 2) + 0xff620000)
+#define   DOS_SCRATCH16                            (0x3f20)
+#define P_DOS_SCRATCH16                            (volatile unsigned int *)((0x3f20  << 2) + 0xff620000)
+#define   DOS_SCRATCH17                            (0x3f21)
+#define P_DOS_SCRATCH17                            (volatile unsigned int *)((0x3f21  << 2) + 0xff620000)
+#define   DOS_SCRATCH18                            (0x3f22)
+#define P_DOS_SCRATCH18                            (volatile unsigned int *)((0x3f22  << 2) + 0xff620000)
+#define   DOS_SCRATCH19                            (0x3f23)
+#define P_DOS_SCRATCH19                            (volatile unsigned int *)((0x3f23  << 2) + 0xff620000)
+#define   DOS_SCRATCH20                            (0x3f24)
+#define P_DOS_SCRATCH20                            (volatile unsigned int *)((0x3f24  << 2) + 0xff620000)
+#define   DOS_SCRATCH21                            (0x3f25)
+#define P_DOS_SCRATCH21                            (volatile unsigned int *)((0x3f25  << 2) + 0xff620000)
+#define   DOS_SCRATCH22                            (0x3f26)
+#define P_DOS_SCRATCH22                            (volatile unsigned int *)((0x3f26  << 2) + 0xff620000)
+#define   DOS_SCRATCH23                            (0x3f27)
+#define P_DOS_SCRATCH23                            (volatile unsigned int *)((0x3f27  << 2) + 0xff620000)
+#define   DOS_SCRATCH24                            (0x3f28)
+#define P_DOS_SCRATCH24                            (volatile unsigned int *)((0x3f28  << 2) + 0xff620000)
+#define   DOS_SCRATCH25                            (0x3f29)
+#define P_DOS_SCRATCH25                            (volatile unsigned int *)((0x3f29  << 2) + 0xff620000)
+#define   DOS_SCRATCH26                            (0x3f2a)
+#define P_DOS_SCRATCH26                            (volatile unsigned int *)((0x3f2a  << 2) + 0xff620000)
+#define   DOS_SCRATCH27                            (0x3f2b)
+#define P_DOS_SCRATCH27                            (volatile unsigned int *)((0x3f2b  << 2) + 0xff620000)
+#define   DOS_SCRATCH28                            (0x3f2c)
+#define P_DOS_SCRATCH28                            (volatile unsigned int *)((0x3f2c  << 2) + 0xff620000)
+#define   DOS_SCRATCH29                            (0x3f2d)
+#define P_DOS_SCRATCH29                            (volatile unsigned int *)((0x3f2d  << 2) + 0xff620000)
+#define   DOS_SCRATCH30                            (0x3f2e)
+#define P_DOS_SCRATCH30                            (volatile unsigned int *)((0x3f2e  << 2) + 0xff620000)
+#define   DOS_SCRATCH31                            (0x3f2f)
+#define P_DOS_SCRATCH31                            (volatile unsigned int *)((0x3f2f  << 2) + 0xff620000)
+#define   DOS_MEM_PD_VDEC                          (0x3f30)
+#define P_DOS_MEM_PD_VDEC                          (volatile unsigned int *)((0x3f30  << 2) + 0xff620000)
+#define   DOS_MEM_PD_VDEC2                         (0x3f31)
+#define P_DOS_MEM_PD_VDEC2                         (volatile unsigned int *)((0x3f31  << 2) + 0xff620000)
+#define   DOS_MEM_PD_HCODEC                        (0x3f32)
+#define P_DOS_MEM_PD_HCODEC                        (volatile unsigned int *)((0x3f32  << 2) + 0xff620000)
+#define   DOS_MEM_PD_HEVC                          (0x3f33)
+#define P_DOS_MEM_PD_HEVC                          (volatile unsigned int *)((0x3f33  << 2) + 0xff620000)
+#define   DOS_SW_RESET3                            (0x3f34)
+#define P_DOS_SW_RESET3                            (volatile unsigned int *)((0x3f34  << 2) + 0xff620000)
+#define   DOS_GCLK_EN3                             (0x3f35)
+#define P_DOS_GCLK_EN3                             (volatile unsigned int *)((0x3f35  << 2) + 0xff620000)
+#define   DOS_HEVC_INT_EN                          (0x3f36)
+#define P_DOS_HEVC_INT_EN                          (volatile unsigned int *)((0x3f36  << 2) + 0xff620000)
+#define   DOS_SW_RESET4                            (0x3f37)
+#define P_DOS_SW_RESET4                            (volatile unsigned int *)((0x3f37  << 2) + 0xff620000)
+#define   DOS_GCLK_EN4                             (0x3f38)
+#define P_DOS_GCLK_EN4                             (volatile unsigned int *)((0x3f38  << 2) + 0xff620000)
+#define   DOS_MEM_PD_VP9DEC                        (0x3f39)
+#define P_DOS_MEM_PD_VP9DEC                        (volatile unsigned int *)((0x3f39  << 2) + 0xff620000)
+// bit[31]    mcrcc_stall_en
+// bit[30:28] Reserved
+// bit[27:20] target_canvas
+// bit[19:10] target_mby
+// bit[ 9: 0] target_mbx
+#define   DOS_VDEC_MCRCC_STALL_CTRL                (0x3f40)
+#define P_DOS_VDEC_MCRCC_STALL_CTRL                (volatile unsigned int *)((0x3f40  << 2) + 0xff620000)
+#define   DOS_VDEC_MCRCC_STALL2_CTRL               (0x3f42)
+#define P_DOS_VDEC_MCRCC_STALL2_CTRL               (volatile unsigned int *)((0x3f42  << 2) + 0xff620000)
+#define   DOS_VDEC2_MCRCC_STALL_CTRL               (0x3f41)
+#define P_DOS_VDEC2_MCRCC_STALL_CTRL               (volatile unsigned int *)((0x3f41  << 2) + 0xff620000)
+#define   DOS_VDEC2_MCRCC_STALL2_CTRL              (0x3f43)
+#define P_DOS_VDEC2_MCRCC_STALL2_CTRL              (volatile unsigned int *)((0x3f43  << 2) + 0xff620000)
+// bit[1] s_clk off
+// bit[0] m_clk off
+#define   DOS_CFG_CMPIF_BRIDGE                     (0x3f44)
+#define P_DOS_CFG_CMPIF_BRIDGE                     (volatile unsigned int *)((0x3f44  << 2) + 0xff620000)
+#define   DOS_SECURE_CTL_INDEX                     (0x3f80)
+#define P_DOS_SECURE_CTL_INDEX                     (volatile unsigned int *)((0x3f80  << 2) + 0xff620000)
+#define   DOS_SECURE_CTL_DATA                      (0x3f81)
+#define P_DOS_SECURE_CTL_DATA                      (volatile unsigned int *)((0x3f81  << 2) + 0xff620000)
+#define   DOS_SECURE_REG_NULL                      (0x3f82)
+#define P_DOS_SECURE_REG_NULL                      (volatile unsigned int *)((0x3f82  << 2) + 0xff620000)
+//
+// Closing file:  ./dos_param.h
+//
+//
+// Reading file:  mdec_regs.h
+//
+//========================================================================
+//  MDEC module level register offset
+//========================================================================
+// -----------------------------------------------
+// CBUS_BASE:  DOS_VDEC_MDEC_CBUS_BASE = 0x09
+// -----------------------------------------------
+#define   HCODEC_MC_CTRL_REG                       (0x1900)
+#define P_HCODEC_MC_CTRL_REG                       (volatile unsigned int *)((0x1900  << 2) + 0xff620000)
+#define   HCODEC_MC_MB_INFO                        (0x1901)
+#define P_HCODEC_MC_MB_INFO                        (volatile unsigned int *)((0x1901  << 2) + 0xff620000)
+#define   HCODEC_MC_PIC_INFO                       (0x1902)
+#define P_HCODEC_MC_PIC_INFO                       (volatile unsigned int *)((0x1902  << 2) + 0xff620000)
+#define   HCODEC_MC_HALF_PEL_ONE                   (0x1903)
+#define P_HCODEC_MC_HALF_PEL_ONE                   (volatile unsigned int *)((0x1903  << 2) + 0xff620000)
+#define   HCODEC_MC_HALF_PEL_TWO                   (0x1904)
+#define P_HCODEC_MC_HALF_PEL_TWO                   (volatile unsigned int *)((0x1904  << 2) + 0xff620000)
+#define   HCODEC_POWER_CTL_MC                      (0x1905)
+#define P_HCODEC_POWER_CTL_MC                      (volatile unsigned int *)((0x1905  << 2) + 0xff620000)
+#define   HCODEC_MC_CMD                            (0x1906)
+#define P_HCODEC_MC_CMD                            (volatile unsigned int *)((0x1906  << 2) + 0xff620000)
+#define   HCODEC_MC_CTRL0                          (0x1907)
+#define P_HCODEC_MC_CTRL0                          (volatile unsigned int *)((0x1907  << 2) + 0xff620000)
+#define   HCODEC_MC_PIC_W_H                        (0x1908)
+#define P_HCODEC_MC_PIC_W_H                        (volatile unsigned int *)((0x1908  << 2) + 0xff620000)
+#define   HCODEC_MC_STATUS0                        (0x1909)
+#define P_HCODEC_MC_STATUS0                        (volatile unsigned int *)((0x1909  << 2) + 0xff620000)
+#define   HCODEC_MC_STATUS1                        (0x190a)
+#define P_HCODEC_MC_STATUS1                        (volatile unsigned int *)((0x190a  << 2) + 0xff620000)
+#define   HCODEC_MC_CTRL1                          (0x190b)
+#define P_HCODEC_MC_CTRL1                          (volatile unsigned int *)((0x190b  << 2) + 0xff620000)
+#define   HCODEC_MC_MIX_RATIO0                     (0x190c)
+#define P_HCODEC_MC_MIX_RATIO0                     (volatile unsigned int *)((0x190c  << 2) + 0xff620000)
+#define   HCODEC_MC_MIX_RATIO1                     (0x190d)
+#define P_HCODEC_MC_MIX_RATIO1                     (volatile unsigned int *)((0x190d  << 2) + 0xff620000)
+#define   HCODEC_MC_DP_MB_XY                       (0x190e)
+#define P_HCODEC_MC_DP_MB_XY                       (volatile unsigned int *)((0x190e  << 2) + 0xff620000)
+#define   HCODEC_MC_OM_MB_XY                       (0x190f)
+#define P_HCODEC_MC_OM_MB_XY                       (volatile unsigned int *)((0x190f  << 2) + 0xff620000)
+#define   HCODEC_PSCALE_RST                        (0x1910)
+#define P_HCODEC_PSCALE_RST                        (volatile unsigned int *)((0x1910  << 2) + 0xff620000)
+#define   HCODEC_PSCALE_CTRL                       (0x1911)
+#define P_HCODEC_PSCALE_CTRL                       (volatile unsigned int *)((0x1911  << 2) + 0xff620000)
+#define   HCODEC_PSCALE_PICI_W                     (0x1912)
+#define P_HCODEC_PSCALE_PICI_W                     (volatile unsigned int *)((0x1912  << 2) + 0xff620000)
+#define   HCODEC_PSCALE_PICI_H                     (0x1913)
+#define P_HCODEC_PSCALE_PICI_H                     (volatile unsigned int *)((0x1913  << 2) + 0xff620000)
+#define   HCODEC_PSCALE_PICO_W                     (0x1914)
+#define P_HCODEC_PSCALE_PICO_W                     (volatile unsigned int *)((0x1914  << 2) + 0xff620000)
+#define   HCODEC_PSCALE_PICO_H                     (0x1915)
+#define P_HCODEC_PSCALE_PICO_H                     (volatile unsigned int *)((0x1915  << 2) + 0xff620000)
+#define   HCODEC_PSCALE_PICO_START_X               (0x1916)
+#define P_HCODEC_PSCALE_PICO_START_X               (volatile unsigned int *)((0x1916  << 2) + 0xff620000)
+#define   HCODEC_PSCALE_PICO_START_Y               (0x1917)
+#define P_HCODEC_PSCALE_PICO_START_Y               (volatile unsigned int *)((0x1917  << 2) + 0xff620000)
+#define   HCODEC_PSCALE_DUMMY                      (0x1918)
+#define P_HCODEC_PSCALE_DUMMY                      (volatile unsigned int *)((0x1918  << 2) + 0xff620000)
+#define   HCODEC_PSCALE_FILT0_COEF0                (0x1919)
+#define P_HCODEC_PSCALE_FILT0_COEF0                (volatile unsigned int *)((0x1919  << 2) + 0xff620000)
+#define   HCODEC_PSCALE_FILT0_COEF1                (0x191a)
+#define P_HCODEC_PSCALE_FILT0_COEF1                (volatile unsigned int *)((0x191a  << 2) + 0xff620000)
+#define   HCODEC_PSCALE_CMD_CTRL                   (0x191b)
+#define P_HCODEC_PSCALE_CMD_CTRL                   (volatile unsigned int *)((0x191b  << 2) + 0xff620000)
+#define   HCODEC_PSCALE_CMD_BLK_X                  (0x191c)
+#define P_HCODEC_PSCALE_CMD_BLK_X                  (volatile unsigned int *)((0x191c  << 2) + 0xff620000)
+#define   HCODEC_PSCALE_CMD_BLK_Y                  (0x191d)
+#define P_HCODEC_PSCALE_CMD_BLK_Y                  (volatile unsigned int *)((0x191d  << 2) + 0xff620000)
+#define   HCODEC_PSCALE_STATUS                     (0x191e)
+#define P_HCODEC_PSCALE_STATUS                     (volatile unsigned int *)((0x191e  << 2) + 0xff620000)
+#define   HCODEC_PSCALE_BMEM_ADDR                  (0x191f)
+#define P_HCODEC_PSCALE_BMEM_ADDR                  (volatile unsigned int *)((0x191f  << 2) + 0xff620000)
+#define   HCODEC_PSCALE_BMEM_DAT                   (0x1920)
+#define P_HCODEC_PSCALE_BMEM_DAT                   (volatile unsigned int *)((0x1920  << 2) + 0xff620000)
+#define   HCODEC_PSCALE_DRAM_BUF_CTRL              (0x1921)
+#define P_HCODEC_PSCALE_DRAM_BUF_CTRL              (volatile unsigned int *)((0x1921  << 2) + 0xff620000)
+#define   HCODEC_PSCALE_MCMD_CTRL                  (0x1922)
+#define P_HCODEC_PSCALE_MCMD_CTRL                  (volatile unsigned int *)((0x1922  << 2) + 0xff620000)
+#define   HCODEC_PSCALE_MCMD_XSIZE                 (0x1923)
+#define P_HCODEC_PSCALE_MCMD_XSIZE                 (volatile unsigned int *)((0x1923  << 2) + 0xff620000)
+#define   HCODEC_PSCALE_MCMD_YSIZE                 (0x1924)
+#define P_HCODEC_PSCALE_MCMD_YSIZE                 (volatile unsigned int *)((0x1924  << 2) + 0xff620000)
+#define   HCODEC_PSCALE_RBUF_START_BLKX            (0x1925)
+#define P_HCODEC_PSCALE_RBUF_START_BLKX            (volatile unsigned int *)((0x1925  << 2) + 0xff620000)
+#define   HCODEC_PSCALE_RBUF_START_BLKY            (0x1926)
+#define P_HCODEC_PSCALE_RBUF_START_BLKY            (volatile unsigned int *)((0x1926  << 2) + 0xff620000)
+//`define PSCALE_RBUF_MB_WIDTH   8'h27
+#define   HCODEC_PSCALE_PICO_SHIFT_XY              (0x1928)
+#define P_HCODEC_PSCALE_PICO_SHIFT_XY              (volatile unsigned int *)((0x1928  << 2) + 0xff620000)
+#define   HCODEC_PSCALE_CTRL1                      (0x1929)
+#define P_HCODEC_PSCALE_CTRL1                      (volatile unsigned int *)((0x1929  << 2) + 0xff620000)
+//Bit 15, wmask enable
+//Bit 14:13, filt0 srckey_less,
+//Bit 12:11, filt1 srckey_less, in the case of the interpolated data is equal distance to
+//key data and normal data, 00: select normal data, 01: select right data, 10: select key data
+//Bit 10:9, srckey mode, 00: equal, 01: less than or equal, 10: great than or equal
+//Bit 8, src key enable
+//Bit 7:0, y src key
+#define   HCODEC_PSCALE_SRCKEY_CTRL0               (0x192a)
+#define P_HCODEC_PSCALE_SRCKEY_CTRL0               (volatile unsigned int *)((0x192a  << 2) + 0xff620000)
+//Bit 15:8, cb src key
+//Bit 7:0, cr src key
+#define   HCODEC_PSCALE_SRCKEY_CTRL1               (0x192b)
+#define P_HCODEC_PSCALE_SRCKEY_CTRL1               (volatile unsigned int *)((0x192b  << 2) + 0xff620000)
+//Bit 22:16 canvas_rd_addr2
+//Bit 14:8 canvas_rd_addr1
+//Bit 6:0 canvas_rd_addr1
+#define   HCODEC_PSCALE_CANVAS_RD_ADDR             (0x192c)
+#define P_HCODEC_PSCALE_CANVAS_RD_ADDR             (volatile unsigned int *)((0x192c  << 2) + 0xff620000)
+//Bit 22:16 canvas_wr_addr2
+//Bit 14:8 canvas_wr_addr1
+//Bit 6:0 canvas_wr_addr1
+#define   HCODEC_PSCALE_CANVAS_WR_ADDR             (0x192d)
+#define P_HCODEC_PSCALE_CANVAS_WR_ADDR             (volatile unsigned int *)((0x192d  << 2) + 0xff620000)
+//bit 13:8 pscale thread ID and token
+//bit 7 disable write response count adding to busy bit
+//bit 5:0  pscale prearbitor burst num
+#define   HCODEC_PSCALE_CTRL2                      (0x192e)
+#define P_HCODEC_PSCALE_CTRL2                      (volatile unsigned int *)((0x192e  << 2) + 0xff620000)
+//   31 - use_omem_mb_xy_auto
+//23:16 - omem_max_mb_x
+//15:8  - omem_mb_y_auto
+// 7:0  - omem_mb_x_auto
+#define   HCODEC_HDEC_MC_OMEM_AUTO                 (0x1930)
+#define P_HCODEC_HDEC_MC_OMEM_AUTO                 (volatile unsigned int *)((0x1930  << 2) + 0xff620000)
+#define   HCODEC_HDEC_MC_MBRIGHT_IDX               (0x1931)
+#define P_HCODEC_HDEC_MC_MBRIGHT_IDX               (volatile unsigned int *)((0x1931  << 2) + 0xff620000)
+#define   HCODEC_HDEC_MC_MBRIGHT_RD                (0x1932)
+#define P_HCODEC_HDEC_MC_MBRIGHT_RD                (volatile unsigned int *)((0x1932  << 2) + 0xff620000)
+#define   HCODEC_MC_MPORT_CTRL                     (0x1940)
+#define P_HCODEC_MC_MPORT_CTRL                     (volatile unsigned int *)((0x1940  << 2) + 0xff620000)
+#define   HCODEC_MC_MPORT_DAT                      (0x1941)
+#define P_HCODEC_MC_MPORT_DAT                      (volatile unsigned int *)((0x1941  << 2) + 0xff620000)
+#define   HCODEC_MC_WT_PRED_CTRL                   (0x1942)
+#define P_HCODEC_MC_WT_PRED_CTRL                   (volatile unsigned int *)((0x1942  << 2) + 0xff620000)
+#define   HCODEC_MC_MBBOT_ST_EVEN_ADDR             (0x1944)
+#define P_HCODEC_MC_MBBOT_ST_EVEN_ADDR             (volatile unsigned int *)((0x1944  << 2) + 0xff620000)
+#define   HCODEC_MC_MBBOT_ST_ODD_ADDR              (0x1945)
+#define P_HCODEC_MC_MBBOT_ST_ODD_ADDR              (volatile unsigned int *)((0x1945  << 2) + 0xff620000)
+#define   HCODEC_MC_DPDN_MB_XY                     (0x1946)
+#define P_HCODEC_MC_DPDN_MB_XY                     (volatile unsigned int *)((0x1946  << 2) + 0xff620000)
+#define   HCODEC_MC_OMDN_MB_XY                     (0x1947)
+#define P_HCODEC_MC_OMDN_MB_XY                     (volatile unsigned int *)((0x1947  << 2) + 0xff620000)
+#define   HCODEC_MC_HCMDBUF_H                      (0x1948)
+#define P_HCODEC_MC_HCMDBUF_H                      (volatile unsigned int *)((0x1948  << 2) + 0xff620000)
+#define   HCODEC_MC_HCMDBUF_L                      (0x1949)
+#define P_HCODEC_MC_HCMDBUF_L                      (volatile unsigned int *)((0x1949  << 2) + 0xff620000)
+#define   HCODEC_MC_HCMD_H                         (0x194a)
+#define P_HCODEC_MC_HCMD_H                         (volatile unsigned int *)((0x194a  << 2) + 0xff620000)
+#define   HCODEC_MC_HCMD_L                         (0x194b)
+#define P_HCODEC_MC_HCMD_L                         (volatile unsigned int *)((0x194b  << 2) + 0xff620000)
+#define   HCODEC_MC_IDCT_DAT                       (0x194c)
+#define P_HCODEC_MC_IDCT_DAT                       (volatile unsigned int *)((0x194c  << 2) + 0xff620000)
+#define   HCODEC_MC_CTRL_GCLK_CTRL                 (0x194d)
+#define P_HCODEC_MC_CTRL_GCLK_CTRL                 (volatile unsigned int *)((0x194d  << 2) + 0xff620000)
+#define   HCODEC_MC_OTHER_GCLK_CTRL                (0x194e)
+#define P_HCODEC_MC_OTHER_GCLK_CTRL                (volatile unsigned int *)((0x194e  << 2) + 0xff620000)
+//Bit 29:24, mbbot thread ID and token
+//Bit 21:16, mc read/write thread ID and token
+//Bit 13:8,  mbbot pre-arbitor burst number
+//Bit 5:0,   mc pre-arbitor burst number
+#define   HCODEC_MC_CTRL2                          (0x194f)
+#define P_HCODEC_MC_CTRL2                          (volatile unsigned int *)((0x194f  << 2) + 0xff620000)
+// `define DBLK_QUANT            8'h76 // ONLY for $ucode/real/amrisc/rv.s, reg value from apollo
+//`define ANC1_CANVAS_ADDR      8'h80
+//`define ANC2_CANVAS_ADDR      8'h81
+//`define REC_CANVAS_ADDR       8'h89
+//`define MDEC_PIC_W          8'h8c
+//`define MDEC_PIC_H          8'h8d
+// mdec_pic_dc_mux_ctrl[31]  -- mcr_hevc_mode
+#define   HCODEC_MDEC_PIC_DC_MUX_CTRL              (0x198d)
+#define P_HCODEC_MDEC_PIC_DC_MUX_CTRL              (volatile unsigned int *)((0x198d  << 2) + 0xff620000)
+#define   HCODEC_MDEC_PIC_DC_CTRL                  (0x198e)
+#define P_HCODEC_MDEC_PIC_DC_CTRL                  (volatile unsigned int *)((0x198e  << 2) + 0xff620000)
+#define   HCODEC_MDEC_PIC_DC_STATUS                (0x198f)
+#define P_HCODEC_MDEC_PIC_DC_STATUS                (volatile unsigned int *)((0x198f  << 2) + 0xff620000)
+#define   HCODEC_ANC0_CANVAS_ADDR                  (0x1990)
+#define P_HCODEC_ANC0_CANVAS_ADDR                  (volatile unsigned int *)((0x1990  << 2) + 0xff620000)
+#define   HCODEC_ANC1_CANVAS_ADDR                  (0x1991)
+#define P_HCODEC_ANC1_CANVAS_ADDR                  (volatile unsigned int *)((0x1991  << 2) + 0xff620000)
+#define   HCODEC_ANC2_CANVAS_ADDR                  (0x1992)
+#define P_HCODEC_ANC2_CANVAS_ADDR                  (volatile unsigned int *)((0x1992  << 2) + 0xff620000)
+#define   HCODEC_ANC3_CANVAS_ADDR                  (0x1993)
+#define P_HCODEC_ANC3_CANVAS_ADDR                  (volatile unsigned int *)((0x1993  << 2) + 0xff620000)
+#define   HCODEC_ANC4_CANVAS_ADDR                  (0x1994)
+#define P_HCODEC_ANC4_CANVAS_ADDR                  (volatile unsigned int *)((0x1994  << 2) + 0xff620000)
+#define   HCODEC_ANC5_CANVAS_ADDR                  (0x1995)
+#define P_HCODEC_ANC5_CANVAS_ADDR                  (volatile unsigned int *)((0x1995  << 2) + 0xff620000)
+#define   HCODEC_ANC6_CANVAS_ADDR                  (0x1996)
+#define P_HCODEC_ANC6_CANVAS_ADDR                  (volatile unsigned int *)((0x1996  << 2) + 0xff620000)
+#define   HCODEC_ANC7_CANVAS_ADDR                  (0x1997)
+#define P_HCODEC_ANC7_CANVAS_ADDR                  (volatile unsigned int *)((0x1997  << 2) + 0xff620000)
+#define   HCODEC_ANC8_CANVAS_ADDR                  (0x1998)
+#define P_HCODEC_ANC8_CANVAS_ADDR                  (volatile unsigned int *)((0x1998  << 2) + 0xff620000)
+#define   HCODEC_ANC9_CANVAS_ADDR                  (0x1999)
+#define P_HCODEC_ANC9_CANVAS_ADDR                  (volatile unsigned int *)((0x1999  << 2) + 0xff620000)
+#define   HCODEC_ANC10_CANVAS_ADDR                 (0x199a)
+#define P_HCODEC_ANC10_CANVAS_ADDR                 (volatile unsigned int *)((0x199a  << 2) + 0xff620000)
+#define   HCODEC_ANC11_CANVAS_ADDR                 (0x199b)
+#define P_HCODEC_ANC11_CANVAS_ADDR                 (volatile unsigned int *)((0x199b  << 2) + 0xff620000)
+#define   HCODEC_ANC12_CANVAS_ADDR                 (0x199c)
+#define P_HCODEC_ANC12_CANVAS_ADDR                 (volatile unsigned int *)((0x199c  << 2) + 0xff620000)
+#define   HCODEC_ANC13_CANVAS_ADDR                 (0x199d)
+#define P_HCODEC_ANC13_CANVAS_ADDR                 (volatile unsigned int *)((0x199d  << 2) + 0xff620000)
+#define   HCODEC_ANC14_CANVAS_ADDR                 (0x199e)
+#define P_HCODEC_ANC14_CANVAS_ADDR                 (volatile unsigned int *)((0x199e  << 2) + 0xff620000)
+#define   HCODEC_ANC15_CANVAS_ADDR                 (0x199f)
+#define P_HCODEC_ANC15_CANVAS_ADDR                 (volatile unsigned int *)((0x199f  << 2) + 0xff620000)
+#define   HCODEC_ANC16_CANVAS_ADDR                 (0x19a0)
+#define P_HCODEC_ANC16_CANVAS_ADDR                 (volatile unsigned int *)((0x19a0  << 2) + 0xff620000)
+#define   HCODEC_ANC17_CANVAS_ADDR                 (0x19a1)
+#define P_HCODEC_ANC17_CANVAS_ADDR                 (volatile unsigned int *)((0x19a1  << 2) + 0xff620000)
+#define   HCODEC_ANC18_CANVAS_ADDR                 (0x19a2)
+#define P_HCODEC_ANC18_CANVAS_ADDR                 (volatile unsigned int *)((0x19a2  << 2) + 0xff620000)
+#define   HCODEC_ANC19_CANVAS_ADDR                 (0x19a3)
+#define P_HCODEC_ANC19_CANVAS_ADDR                 (volatile unsigned int *)((0x19a3  << 2) + 0xff620000)
+#define   HCODEC_ANC20_CANVAS_ADDR                 (0x19a4)
+#define P_HCODEC_ANC20_CANVAS_ADDR                 (volatile unsigned int *)((0x19a4  << 2) + 0xff620000)
+#define   HCODEC_ANC21_CANVAS_ADDR                 (0x19a5)
+#define P_HCODEC_ANC21_CANVAS_ADDR                 (volatile unsigned int *)((0x19a5  << 2) + 0xff620000)
+#define   HCODEC_ANC22_CANVAS_ADDR                 (0x19a6)
+#define P_HCODEC_ANC22_CANVAS_ADDR                 (volatile unsigned int *)((0x19a6  << 2) + 0xff620000)
+#define   HCODEC_ANC23_CANVAS_ADDR                 (0x19a7)
+#define P_HCODEC_ANC23_CANVAS_ADDR                 (volatile unsigned int *)((0x19a7  << 2) + 0xff620000)
+#define   HCODEC_ANC24_CANVAS_ADDR                 (0x19a8)
+#define P_HCODEC_ANC24_CANVAS_ADDR                 (volatile unsigned int *)((0x19a8  << 2) + 0xff620000)
+#define   HCODEC_ANC25_CANVAS_ADDR                 (0x19a9)
+#define P_HCODEC_ANC25_CANVAS_ADDR                 (volatile unsigned int *)((0x19a9  << 2) + 0xff620000)
+#define   HCODEC_ANC26_CANVAS_ADDR                 (0x19aa)
+#define P_HCODEC_ANC26_CANVAS_ADDR                 (volatile unsigned int *)((0x19aa  << 2) + 0xff620000)
+#define   HCODEC_ANC27_CANVAS_ADDR                 (0x19ab)
+#define P_HCODEC_ANC27_CANVAS_ADDR                 (volatile unsigned int *)((0x19ab  << 2) + 0xff620000)
+#define   HCODEC_ANC28_CANVAS_ADDR                 (0x19ac)
+#define P_HCODEC_ANC28_CANVAS_ADDR                 (volatile unsigned int *)((0x19ac  << 2) + 0xff620000)
+#define   HCODEC_ANC29_CANVAS_ADDR                 (0x19ad)
+#define P_HCODEC_ANC29_CANVAS_ADDR                 (volatile unsigned int *)((0x19ad  << 2) + 0xff620000)
+#define   HCODEC_ANC30_CANVAS_ADDR                 (0x19ae)
+#define P_HCODEC_ANC30_CANVAS_ADDR                 (volatile unsigned int *)((0x19ae  << 2) + 0xff620000)
+#define   HCODEC_ANC31_CANVAS_ADDR                 (0x19af)
+#define P_HCODEC_ANC31_CANVAS_ADDR                 (volatile unsigned int *)((0x19af  << 2) + 0xff620000)
+#define   HCODEC_DBKR_CANVAS_ADDR                  (0x19b0)
+#define P_HCODEC_DBKR_CANVAS_ADDR                  (volatile unsigned int *)((0x19b0  << 2) + 0xff620000)
+#define   HCODEC_DBKW_CANVAS_ADDR                  (0x19b1)
+#define P_HCODEC_DBKW_CANVAS_ADDR                  (volatile unsigned int *)((0x19b1  << 2) + 0xff620000)
+#define   HCODEC_REC_CANVAS_ADDR                   (0x19b2)
+#define P_HCODEC_REC_CANVAS_ADDR                   (volatile unsigned int *)((0x19b2  << 2) + 0xff620000)
+//28:24, read/write, current canvas idx, used in h264 only now
+//23:0, read only, current canvas address, 23:16, Cr canvas addr, 15:8, Cb canvas addr, 7:0, Y  canvas addr
+#define   HCODEC_CURR_CANVAS_CTRL                  (0x19b3)
+#define P_HCODEC_CURR_CANVAS_CTRL                  (volatile unsigned int *)((0x19b3  << 2) + 0xff620000)
+#define   HCODEC_MDEC_PIC_DC_THRESH                (0x19b8)
+#define P_HCODEC_MDEC_PIC_DC_THRESH                (volatile unsigned int *)((0x19b8  << 2) + 0xff620000)
+#define   HCODEC_MDEC_PICR_BUF_STATUS              (0x19b9)
+#define P_HCODEC_MDEC_PICR_BUF_STATUS              (volatile unsigned int *)((0x19b9  << 2) + 0xff620000)
+#define   HCODEC_MDEC_PICW_BUF_STATUS              (0x19ba)
+#define P_HCODEC_MDEC_PICW_BUF_STATUS              (volatile unsigned int *)((0x19ba  << 2) + 0xff620000)
+#define   HCODEC_MCW_DBLK_WRRSP_CNT                (0x19bb)
+#define P_HCODEC_MCW_DBLK_WRRSP_CNT                (volatile unsigned int *)((0x19bb  << 2) + 0xff620000)
+#define   HCODEC_MC_MBBOT_WRRSP_CNT                (0x19bc)
+#define P_HCODEC_MC_MBBOT_WRRSP_CNT                (volatile unsigned int *)((0x19bc  << 2) + 0xff620000)
+#define   HCODEC_MDEC_PICW_BUF2_STATUS             (0x19bd)
+#define P_HCODEC_MDEC_PICW_BUF2_STATUS             (volatile unsigned int *)((0x19bd  << 2) + 0xff620000)
+#define   HCODEC_WRRSP_FIFO_PICW_DBK               (0x19be)
+#define P_HCODEC_WRRSP_FIFO_PICW_DBK               (volatile unsigned int *)((0x19be  << 2) + 0xff620000)
+#define   HCODEC_WRRSP_FIFO_PICW_MC                (0x19bf)
+#define P_HCODEC_WRRSP_FIFO_PICW_MC                (volatile unsigned int *)((0x19bf  << 2) + 0xff620000)
+#define   HCODEC_AV_SCRATCH_0                      (0x19c0)
+#define P_HCODEC_AV_SCRATCH_0                      (volatile unsigned int *)((0x19c0  << 2) + 0xff620000)
+#define   HCODEC_AV_SCRATCH_1                      (0x19c1)
+#define P_HCODEC_AV_SCRATCH_1                      (volatile unsigned int *)((0x19c1  << 2) + 0xff620000)
+#define   HCODEC_AV_SCRATCH_2                      (0x19c2)
+#define P_HCODEC_AV_SCRATCH_2                      (volatile unsigned int *)((0x19c2  << 2) + 0xff620000)
+#define   HCODEC_AV_SCRATCH_3                      (0x19c3)
+#define P_HCODEC_AV_SCRATCH_3                      (volatile unsigned int *)((0x19c3  << 2) + 0xff620000)
+#define   HCODEC_AV_SCRATCH_4                      (0x19c4)
+#define P_HCODEC_AV_SCRATCH_4                      (volatile unsigned int *)((0x19c4  << 2) + 0xff620000)
+#define   HCODEC_AV_SCRATCH_5                      (0x19c5)
+#define P_HCODEC_AV_SCRATCH_5                      (volatile unsigned int *)((0x19c5  << 2) + 0xff620000)
+#define   HCODEC_AV_SCRATCH_6                      (0x19c6)
+#define P_HCODEC_AV_SCRATCH_6                      (volatile unsigned int *)((0x19c6  << 2) + 0xff620000)
+#define   HCODEC_AV_SCRATCH_7                      (0x19c7)
+#define P_HCODEC_AV_SCRATCH_7                      (volatile unsigned int *)((0x19c7  << 2) + 0xff620000)
+#define   HCODEC_AV_SCRATCH_8                      (0x19c8)
+#define P_HCODEC_AV_SCRATCH_8                      (volatile unsigned int *)((0x19c8  << 2) + 0xff620000)
+#define   HCODEC_AV_SCRATCH_9                      (0x19c9)
+#define P_HCODEC_AV_SCRATCH_9                      (volatile unsigned int *)((0x19c9  << 2) + 0xff620000)
+#define   HCODEC_AV_SCRATCH_A                      (0x19ca)
+#define P_HCODEC_AV_SCRATCH_A                      (volatile unsigned int *)((0x19ca  << 2) + 0xff620000)
+#define   HCODEC_AV_SCRATCH_B                      (0x19cb)
+#define P_HCODEC_AV_SCRATCH_B                      (volatile unsigned int *)((0x19cb  << 2) + 0xff620000)
+#define   HCODEC_AV_SCRATCH_C                      (0x19cc)
+#define P_HCODEC_AV_SCRATCH_C                      (volatile unsigned int *)((0x19cc  << 2) + 0xff620000)
+#define   HCODEC_AV_SCRATCH_D                      (0x19cd)
+#define P_HCODEC_AV_SCRATCH_D                      (volatile unsigned int *)((0x19cd  << 2) + 0xff620000)
+#define   HCODEC_AV_SCRATCH_E                      (0x19ce)
+#define P_HCODEC_AV_SCRATCH_E                      (volatile unsigned int *)((0x19ce  << 2) + 0xff620000)
+#define   HCODEC_AV_SCRATCH_F                      (0x19cf)
+#define P_HCODEC_AV_SCRATCH_F                      (volatile unsigned int *)((0x19cf  << 2) + 0xff620000)
+#define   HCODEC_AV_SCRATCH_G                      (0x19d0)
+#define P_HCODEC_AV_SCRATCH_G                      (volatile unsigned int *)((0x19d0  << 2) + 0xff620000)
+#define   HCODEC_AV_SCRATCH_H                      (0x19d1)
+#define P_HCODEC_AV_SCRATCH_H                      (volatile unsigned int *)((0x19d1  << 2) + 0xff620000)
+#define   HCODEC_AV_SCRATCH_I                      (0x19d2)
+#define P_HCODEC_AV_SCRATCH_I                      (volatile unsigned int *)((0x19d2  << 2) + 0xff620000)
+#define   HCODEC_AV_SCRATCH_J                      (0x19d3)
+#define P_HCODEC_AV_SCRATCH_J                      (volatile unsigned int *)((0x19d3  << 2) + 0xff620000)
+#define   HCODEC_AV_SCRATCH_K                      (0x19d4)
+#define P_HCODEC_AV_SCRATCH_K                      (volatile unsigned int *)((0x19d4  << 2) + 0xff620000)
+#define   HCODEC_AV_SCRATCH_L                      (0x19d5)
+#define P_HCODEC_AV_SCRATCH_L                      (volatile unsigned int *)((0x19d5  << 2) + 0xff620000)
+#define   HCODEC_AV_SCRATCH_M                      (0x19d6)
+#define P_HCODEC_AV_SCRATCH_M                      (volatile unsigned int *)((0x19d6  << 2) + 0xff620000)
+#define   HCODEC_AV_SCRATCH_N                      (0x19d7)
+#define P_HCODEC_AV_SCRATCH_N                      (volatile unsigned int *)((0x19d7  << 2) + 0xff620000)
+// bit[29:24] A_brst_num_co_mb
+// bit[21:16] A_id_co_mb
+// bit[11:0] wrrsp_count_co_mb
+#define   HCODEC_WRRSP_CO_MB                       (0x19d8)
+#define P_HCODEC_WRRSP_CO_MB                       (volatile unsigned int *)((0x19d8  << 2) + 0xff620000)
+// bit[29:24] A_brst_num_dcac
+// bit[21:16] A_id_dcac
+// bit[11:0] wrrsp_count_dcac
+#define   HCODEC_WRRSP_DCAC                        (0x19d9)
+#define P_HCODEC_WRRSP_DCAC                        (volatile unsigned int *)((0x19d9  << 2) + 0xff620000)
+// bit[11:0] wrrsp_count_vld
+#define   HCODEC_WRRSP_VLD                         (0x19da)
+#define P_HCODEC_WRRSP_VLD                         (volatile unsigned int *)((0x19da  << 2) + 0xff620000)
+// doublew_cfg0[0];     //       Second Channel Enable, 1:Enable 0:Disable
+// doublew_cfg0[3:1];   // [2:0] Endian Control for Luma
+// doublew_cfg0[5:4];   // [1:0] Pixel sel by horizontal, 0x:1/2 10:left 11:right
+// doublew_cfg0[7:6];   // [1:0] Pixel sel by vertical,   0x:1/2 10:up 11:down
+// doublew_cfg0[8];     //       Size by horizontal, 0:original size 1: 1/2 shrunken size
+// doublew_cfg0[9];     //       Size by vertical,   0:original size 1: 1/2 shrunken size
+// doublew_cfg0[10];    //       1:Round 0:Truncation
+// doublew_cfg0[11];    //       DMA Urgent
+// doublew_cfg0[17:12]; // [5:0] DMA Burst Number
+// doublew_cfg0[23:18]; // [5:0] DMA ID
+// doublew_cfg0[26:24]; // [2:0] Endian Control for Chroma
+// doublew_cfg0[27];    //       Source from, 1:MCW 0:DBLK
+// doublew_cfg0[29:28]; // [1:0] 0x:select both top and bottom 10:select top 11:select bottom
+// doublew_cfg0[30];    //       0:no merge 1:automatic merge
+// doublew_cfg0[31];    //       0:Y addr no change 1:Y addr divided to half
+#define   HCODEC_MDEC_DOUBLEW_CFG0                 (0x19db)
+#define P_HCODEC_MDEC_DOUBLEW_CFG0                 (volatile unsigned int *)((0x19db  << 2) + 0xff620000)
+// doublew_cfg1[7:0];   // [7:0] DMA Canvas Address for Luma
+// doublew_cfg1[15:8];  // [7:0] DMA Canvas Address for Chroma
+// doublew_cfg1[16];    //       Disable 1st Write -
+// doublew_cfg1[17];    //       Reverse to original version -
+// doublew_cfg1[18];    //       DMA Address Mode - 0:Canvas Mode 1:Non-Canvas Mode
+#define   HCODEC_MDEC_DOUBLEW_CFG1                 (0x19dc)
+#define P_HCODEC_MDEC_DOUBLEW_CFG1                 (volatile unsigned int *)((0x19dc  << 2) + 0xff620000)
+// doublew_cfg2[11:0];  //[11:0] vertical flip initial value
+// doublew_cfg2[15];    //       vertical flip enable
+// doublew_cfg2[24:16]; // [8:0] horizontal flip initial value
+// doublew_cfg2[31];    //       horizontal flip enable
+#define   HCODEC_MDEC_DOUBLEW_CFG2                 (0x19dd)
+#define P_HCODEC_MDEC_DOUBLEW_CFG2                 (volatile unsigned int *)((0x19dd  << 2) + 0xff620000)
+// doublew_cfg3[31:0];  //[31:0] non-canvas start address for Luma -
+#define   HCODEC_MDEC_DOUBLEW_CFG3                 (0x19de)
+#define P_HCODEC_MDEC_DOUBLEW_CFG3                 (volatile unsigned int *)((0x19de  << 2) + 0xff620000)
+// doublew_cfg4[31:0];  //[31:0] non-canvas start address for Chroma -
+#define   HCODEC_MDEC_DOUBLEW_CFG4                 (0x19df)
+#define P_HCODEC_MDEC_DOUBLEW_CFG4                 (volatile unsigned int *)((0x19df  << 2) + 0xff620000)
+// doublew_cfg5[12:0];  //[12:0] non-canvas picture width for Luma -
+// doublew_cfg5[28:16]; //[12:0] non-canvas picture width for Chroma -
+#define   HCODEC_MDEC_DOUBLEW_CFG5                 (0x19e0)
+#define P_HCODEC_MDEC_DOUBLEW_CFG5                 (volatile unsigned int *)((0x19e0  << 2) + 0xff620000)
+// doublew_cfg6: reserved
+#define   HCODEC_MDEC_DOUBLEW_CFG6                 (0x19e1)
+#define P_HCODEC_MDEC_DOUBLEW_CFG6                 (volatile unsigned int *)((0x19e1  << 2) + 0xff620000)
+// doublew_cfg7: reserved
+#define   HCODEC_MDEC_DOUBLEW_CFG7                 (0x19e2)
+#define P_HCODEC_MDEC_DOUBLEW_CFG7                 (volatile unsigned int *)((0x19e2  << 2) + 0xff620000)
+// doublew_status[11:0];//[11:0] wrrsp_count_doublew
+// doublew_status[12];  //       doublew_status_busy
+// doublew_status[13];  //       doublew_status_error
+#define   HCODEC_MDEC_DOUBLEW_STATUS               (0x19e3)
+#define P_HCODEC_MDEC_DOUBLEW_STATUS               (volatile unsigned int *)((0x19e3  << 2) + 0xff620000)
+#define   HCODEC_MDEC_EXTIF_CFG0                   (0x19e4)
+#define P_HCODEC_MDEC_EXTIF_CFG0                   (volatile unsigned int *)((0x19e4  << 2) + 0xff620000)
+#define   HCODEC_MDEC_EXTIF_CFG1                   (0x19e5)
+#define P_HCODEC_MDEC_EXTIF_CFG1                   (volatile unsigned int *)((0x19e5  << 2) + 0xff620000)
+#define   HCODEC_MDEC_EXTIF_STS0                   (0x19e6)
+#define P_HCODEC_MDEC_EXTIF_STS0                   (volatile unsigned int *)((0x19e6  << 2) + 0xff620000)
+//======================================
+//  MC Control Register Bits
+//
+//======================================
+// For bits, just copy the defines...don't translate to addresses
+    //`define MC_RESET	    16'h0002
+//======================================
+//  MB Info Register Bits
+//
+//======================================
+//======================================
+//  MB Info Register Bits
+//
+//======================================
+//========================================================================
+// DBLK Register:  12'h950 - 12'h97f
+//========================================================================
+#define   HCODEC_DBLK_RST                          (0x1950)
+#define P_HCODEC_DBLK_RST                          (volatile unsigned int *)((0x1950  << 2) + 0xff620000)
+#define   HCODEC_DBLK_CTRL                         (0x1951)
+#define P_HCODEC_DBLK_CTRL                         (volatile unsigned int *)((0x1951  << 2) + 0xff620000)
+#define   HCODEC_DBLK_MB_WID_HEIGHT                (0x1952)
+#define P_HCODEC_DBLK_MB_WID_HEIGHT                (volatile unsigned int *)((0x1952  << 2) + 0xff620000)
+#define   HCODEC_DBLK_STATUS                       (0x1953)
+#define P_HCODEC_DBLK_STATUS                       (volatile unsigned int *)((0x1953  << 2) + 0xff620000)
+#define   HCODEC_DBLK_CMD_CTRL                     (0x1954)
+#define P_HCODEC_DBLK_CMD_CTRL                     (volatile unsigned int *)((0x1954  << 2) + 0xff620000)
+#define   HCODEC_DBLK_MB_XY                        (0x1955)
+#define P_HCODEC_DBLK_MB_XY                        (volatile unsigned int *)((0x1955  << 2) + 0xff620000)
+#define   HCODEC_DBLK_QP                           (0x1956)
+#define P_HCODEC_DBLK_QP                           (volatile unsigned int *)((0x1956  << 2) + 0xff620000)
+#define   HCODEC_DBLK_Y_BHFILT                     (0x1957)
+#define P_HCODEC_DBLK_Y_BHFILT                     (volatile unsigned int *)((0x1957  << 2) + 0xff620000)
+#define   HCODEC_DBLK_Y_BHFILT_HIGH                (0x1958)
+#define P_HCODEC_DBLK_Y_BHFILT_HIGH                (volatile unsigned int *)((0x1958  << 2) + 0xff620000)
+#define   HCODEC_DBLK_Y_BVFILT                     (0x1959)
+#define P_HCODEC_DBLK_Y_BVFILT                     (volatile unsigned int *)((0x1959  << 2) + 0xff620000)
+#define   HCODEC_DBLK_CB_BFILT                     (0x195a)
+#define P_HCODEC_DBLK_CB_BFILT                     (volatile unsigned int *)((0x195a  << 2) + 0xff620000)
+#define   HCODEC_DBLK_CR_BFILT                     (0x195b)
+#define P_HCODEC_DBLK_CR_BFILT                     (volatile unsigned int *)((0x195b  << 2) + 0xff620000)
+#define   HCODEC_DBLK_Y_HFILT                      (0x195c)
+#define P_HCODEC_DBLK_Y_HFILT                      (volatile unsigned int *)((0x195c  << 2) + 0xff620000)
+#define   HCODEC_DBLK_Y_HFILT_HIGH                 (0x195d)
+#define P_HCODEC_DBLK_Y_HFILT_HIGH                 (volatile unsigned int *)((0x195d  << 2) + 0xff620000)
+#define   HCODEC_DBLK_Y_VFILT                      (0x195e)
+#define P_HCODEC_DBLK_Y_VFILT                      (volatile unsigned int *)((0x195e  << 2) + 0xff620000)
+#define   HCODEC_DBLK_CB_FILT                      (0x195f)
+#define P_HCODEC_DBLK_CB_FILT                      (volatile unsigned int *)((0x195f  << 2) + 0xff620000)
+#define   HCODEC_DBLK_CR_FILT                      (0x1960)
+#define P_HCODEC_DBLK_CR_FILT                      (volatile unsigned int *)((0x1960  << 2) + 0xff620000)
+#define   HCODEC_DBLK_BETAX_QP_SEL                 (0x1961)
+#define P_HCODEC_DBLK_BETAX_QP_SEL                 (volatile unsigned int *)((0x1961  << 2) + 0xff620000)
+#define   HCODEC_DBLK_CLIP_CTRL0                   (0x1962)
+#define P_HCODEC_DBLK_CLIP_CTRL0                   (volatile unsigned int *)((0x1962  << 2) + 0xff620000)
+#define   HCODEC_DBLK_CLIP_CTRL1                   (0x1963)
+#define P_HCODEC_DBLK_CLIP_CTRL1                   (volatile unsigned int *)((0x1963  << 2) + 0xff620000)
+#define   HCODEC_DBLK_CLIP_CTRL2                   (0x1964)
+#define P_HCODEC_DBLK_CLIP_CTRL2                   (volatile unsigned int *)((0x1964  << 2) + 0xff620000)
+#define   HCODEC_DBLK_CLIP_CTRL3                   (0x1965)
+#define P_HCODEC_DBLK_CLIP_CTRL3                   (volatile unsigned int *)((0x1965  << 2) + 0xff620000)
+#define   HCODEC_DBLK_CLIP_CTRL4                   (0x1966)
+#define P_HCODEC_DBLK_CLIP_CTRL4                   (volatile unsigned int *)((0x1966  << 2) + 0xff620000)
+#define   HCODEC_DBLK_CLIP_CTRL5                   (0x1967)
+#define P_HCODEC_DBLK_CLIP_CTRL5                   (volatile unsigned int *)((0x1967  << 2) + 0xff620000)
+#define   HCODEC_DBLK_CLIP_CTRL6                   (0x1968)
+#define P_HCODEC_DBLK_CLIP_CTRL6                   (volatile unsigned int *)((0x1968  << 2) + 0xff620000)
+#define   HCODEC_DBLK_CLIP_CTRL7                   (0x1969)
+#define P_HCODEC_DBLK_CLIP_CTRL7                   (volatile unsigned int *)((0x1969  << 2) + 0xff620000)
+#define   HCODEC_DBLK_CLIP_CTRL8                   (0x196a)
+#define P_HCODEC_DBLK_CLIP_CTRL8                   (volatile unsigned int *)((0x196a  << 2) + 0xff620000)
+#define   HCODEC_DBLK_STATUS1                      (0x196b)
+#define P_HCODEC_DBLK_STATUS1                      (volatile unsigned int *)((0x196b  << 2) + 0xff620000)
+#define   HCODEC_DBLK_GCLK_FREE                    (0x196c)
+#define P_HCODEC_DBLK_GCLK_FREE                    (volatile unsigned int *)((0x196c  << 2) + 0xff620000)
+#define   HCODEC_DBLK_GCLK_OFF                     (0x196d)
+#define P_HCODEC_DBLK_GCLK_OFF                     (volatile unsigned int *)((0x196d  << 2) + 0xff620000)
+#define   HCODEC_DBLK_AVSFLAGS                     (0x196e)
+#define P_HCODEC_DBLK_AVSFLAGS                     (volatile unsigned int *)((0x196e  << 2) + 0xff620000)
+// bit 15:0
+#define   HCODEC_DBLK_CBPY                         (0x1970)
+#define P_HCODEC_DBLK_CBPY                         (volatile unsigned int *)((0x1970  << 2) + 0xff620000)
+// bit 11:8 -- deblk_cbpy_bottom
+// bit 7:4 -- deblk_cbpy_left
+// bit 3:0 -- deblk_cbpy_top
+#define   HCODEC_DBLK_CBPY_ADJ                     (0x1971)
+#define P_HCODEC_DBLK_CBPY_ADJ                     (volatile unsigned int *)((0x1971  << 2) + 0xff620000)
+// bit 7:0 -- deblk_cbpc
+#define   HCODEC_DBLK_CBPC                         (0x1972)
+#define P_HCODEC_DBLK_CBPC                         (volatile unsigned int *)((0x1972  << 2) + 0xff620000)
+// bit 15 -- bottom_mb
+// bit 14 -- left_mb
+// bit 13 -- top_mb
+// bit 12 -- reserved
+// bit 11:8 -- deblk_cbpc_bottom
+// bit 7:4 -- deblk_cbpc_left
+// bit 3:0 -- deblk_cbpc_top
+#define   HCODEC_DBLK_CBPC_ADJ                     (0x1973)
+#define P_HCODEC_DBLK_CBPC_ADJ                     (volatile unsigned int *)((0x1973  << 2) + 0xff620000)
+// bit 15:8 -- deblk_hmvd   -- {left_1, left_0, below_1, below_0, block3-0}
+// bit 7:0 -- deblk_vmvd    -- {top_1, top_0, below_1, below_0, block3-0}
+#define   HCODEC_DBLK_VHMVD                        (0x1974)
+#define P_HCODEC_DBLK_VHMVD                        (volatile unsigned int *)((0x1974  << 2) + 0xff620000)
+// bit 13:12 -- right_vmvd
+// bit 11 -- right_above_vmvd
+// bit 10 -- left_below_hmvd
+// bit 9 -- disable_dblk_luma
+// bit 8 -- disable_dblk_chroma
+// bit 7 -- bBelowRefDiff
+// bit 6 -- bLeftRefDiff
+// bit 5 -- bAboveRefDiff
+// bit 4 -- reserved
+// bit 3 -- s_below
+// bit 2 -- s_left
+// bit 1 -- s_above
+// bit 0 -- s
+#define   HCODEC_DBLK_STRONG                       (0x1975)
+#define P_HCODEC_DBLK_STRONG                       (volatile unsigned int *)((0x1975  << 2) + 0xff620000)
+// bit 14:10 -- PQUANT
+// bit 9:5 -- left_PQUANT
+// bit 4:0 -- top_PQUANT
+#define   HCODEC_DBLK_RV8_QUANT                    (0x1976)
+#define P_HCODEC_DBLK_RV8_QUANT                    (volatile unsigned int *)((0x1976  << 2) + 0xff620000)
+#define   HCODEC_DBLK_CBUS_HCMD2                   (0x1977)
+#define P_HCODEC_DBLK_CBUS_HCMD2                   (volatile unsigned int *)((0x1977  << 2) + 0xff620000)
+#define   HCODEC_DBLK_CBUS_HCMD1                   (0x1978)
+#define P_HCODEC_DBLK_CBUS_HCMD1                   (volatile unsigned int *)((0x1978  << 2) + 0xff620000)
+#define   HCODEC_DBLK_CBUS_HCMD0                   (0x1979)
+#define P_HCODEC_DBLK_CBUS_HCMD0                   (volatile unsigned int *)((0x1979  << 2) + 0xff620000)
+#define   HCODEC_DBLK_VLD_HCMD2                    (0x197a)
+#define P_HCODEC_DBLK_VLD_HCMD2                    (volatile unsigned int *)((0x197a  << 2) + 0xff620000)
+#define   HCODEC_DBLK_VLD_HCMD1                    (0x197b)
+#define P_HCODEC_DBLK_VLD_HCMD1                    (volatile unsigned int *)((0x197b  << 2) + 0xff620000)
+#define   HCODEC_DBLK_VLD_HCMD0                    (0x197c)
+#define P_HCODEC_DBLK_VLD_HCMD0                    (volatile unsigned int *)((0x197c  << 2) + 0xff620000)
+#define   HCODEC_DBLK_OST_YBASE                    (0x197d)
+#define P_HCODEC_DBLK_OST_YBASE                    (volatile unsigned int *)((0x197d  << 2) + 0xff620000)
+#define   HCODEC_DBLK_OST_CBCRDIFF                 (0x197e)
+#define P_HCODEC_DBLK_OST_CBCRDIFF                 (volatile unsigned int *)((0x197e  << 2) + 0xff620000)
+//13:8 dblk thread ID and token
+//5:0  dblk prearbitor burst num
+#define   HCODEC_DBLK_CTRL1                        (0x197f)
+#define P_HCODEC_DBLK_CTRL1                        (volatile unsigned int *)((0x197f  << 2) + 0xff620000)
+// MCRCC_CTL1
+// 31:3  <reserved[23:0]>
+// 2     <cfg_field_pic>
+// 1     <sw_rst>
+// 0     <bypass_en>
+#define   HCODEC_MCRCC_CTL1                        (0x1980)
+#define P_HCODEC_MCRCC_CTL1                        (volatile unsigned int *)((0x1980  << 2) + 0xff620000)
+// MCRCC_CTL2
+// 31:24    <cfg_cache_anc01_c[7:0]>
+// 23:16    <cfg_cache_anc01_y[7:0]>
+// 15:8     <cfg_cache_anc00_c[7:0]>
+// 7:0      <cfg_cache_anc00_y[7:0]>
+#define   HCODEC_MCRCC_CTL2                        (0x1981)
+#define P_HCODEC_MCRCC_CTL2                        (volatile unsigned int *)((0x1981  << 2) + 0xff620000)
+// MCRCC_CTL3
+// 31:24    <cfg_cache_anc11_c[7:0]>
+// 23:16    <cfg_cache_anc11_y[7:0]>
+// 15:8     <cfg_cache_anc10_c[7:0]>
+// 7:0      <cfg_cache_anc10_y[7:0]>
+#define   HCODEC_MCRCC_CTL3                        (0x1982)
+#define P_HCODEC_MCRCC_CTL3                        (volatile unsigned int *)((0x1982  << 2) + 0xff620000)
+// bit[31:10] reserved
+// bit[9:0] sw_clock_gating control
+// [9] vdec clk_en for assist and cbus.
+// [8] vdec clk_en for ddr
+// [7] vdec clk_en for vcpu
+// [6] vdec clk_en for assist
+// [5] vdec clk_en for dblk
+// [4] vdec clk_en for iqidct
+// [3] vdec clk_en for mc
+// [2] vdec clk_en for pic_dc
+// [1] vdec clk_en for psc
+// [0] vdec clk_en for vld
+#define   HCODEC_GCLK_EN                           (0x1983)
+#define P_HCODEC_GCLK_EN                           (volatile unsigned int *)((0x1983  << 2) + 0xff620000)
+// [0]  Reserved
+// [1]  Reserved
+// [2]  Reset assist, mdec's CBUS
+// [3]  Reset mdec's VLD
+// [4]  Reset mdec's VLD
+// [5]  Reset mdec's VLD
+// [6]  Reset mdec's IQIDCT
+// [7]  Reset mdec's MC
+// [8]  Reset mdec's DBLK
+// [9]  Reset mdec's PIC_DC
+// [10] Reset mdec's Pscale
+// [11] Reset vcpu's MCPU
+// [12] Reset vcpu's CCPU
+// [13] Reset mmc_pre_arb
+#define   HCODEC_MDEC_SW_RESET                     (0x1984)
+#define P_HCODEC_MDEC_SW_RESET                     (volatile unsigned int *)((0x1984  << 2) + 0xff620000)
+//DBLK last address 12'h97f
+//
+// Closing file:  mdec_regs.h
+//
+//
+// Reading file:  mdec_regs.h
+//
+//========================================================================
+//  MDEC module level register offset
+//========================================================================
+// -----------------------------------------------
+// CBUS_BASE:  DOS_VDEC_MDEC_CBUS_BASE = 0x09
+// -----------------------------------------------
+#define   VDEC2_MC_CTRL_REG                        (0x2900)
+#define P_VDEC2_MC_CTRL_REG                        (volatile unsigned int *)((0x2900  << 2) + 0xff620000)
+#define   VDEC2_MC_MB_INFO                         (0x2901)
+#define P_VDEC2_MC_MB_INFO                         (volatile unsigned int *)((0x2901  << 2) + 0xff620000)
+#define   VDEC2_MC_PIC_INFO                        (0x2902)
+#define P_VDEC2_MC_PIC_INFO                        (volatile unsigned int *)((0x2902  << 2) + 0xff620000)
+#define   VDEC2_MC_HALF_PEL_ONE                    (0x2903)
+#define P_VDEC2_MC_HALF_PEL_ONE                    (volatile unsigned int *)((0x2903  << 2) + 0xff620000)
+#define   VDEC2_MC_HALF_PEL_TWO                    (0x2904)
+#define P_VDEC2_MC_HALF_PEL_TWO                    (volatile unsigned int *)((0x2904  << 2) + 0xff620000)
+#define   VDEC2_POWER_CTL_MC                       (0x2905)
+#define P_VDEC2_POWER_CTL_MC                       (volatile unsigned int *)((0x2905  << 2) + 0xff620000)
+#define   VDEC2_MC_CMD                             (0x2906)
+#define P_VDEC2_MC_CMD                             (volatile unsigned int *)((0x2906  << 2) + 0xff620000)
+#define   VDEC2_MC_CTRL0                           (0x2907)
+#define P_VDEC2_MC_CTRL0                           (volatile unsigned int *)((0x2907  << 2) + 0xff620000)
+#define   VDEC2_MC_PIC_W_H                         (0x2908)
+#define P_VDEC2_MC_PIC_W_H                         (volatile unsigned int *)((0x2908  << 2) + 0xff620000)
+#define   VDEC2_MC_STATUS0                         (0x2909)
+#define P_VDEC2_MC_STATUS0                         (volatile unsigned int *)((0x2909  << 2) + 0xff620000)
+#define   VDEC2_MC_STATUS1                         (0x290a)
+#define P_VDEC2_MC_STATUS1                         (volatile unsigned int *)((0x290a  << 2) + 0xff620000)
+#define   VDEC2_MC_CTRL1                           (0x290b)
+#define P_VDEC2_MC_CTRL1                           (volatile unsigned int *)((0x290b  << 2) + 0xff620000)
+#define   VDEC2_MC_MIX_RATIO0                      (0x290c)
+#define P_VDEC2_MC_MIX_RATIO0                      (volatile unsigned int *)((0x290c  << 2) + 0xff620000)
+#define   VDEC2_MC_MIX_RATIO1                      (0x290d)
+#define P_VDEC2_MC_MIX_RATIO1                      (volatile unsigned int *)((0x290d  << 2) + 0xff620000)
+#define   VDEC2_MC_DP_MB_XY                        (0x290e)
+#define P_VDEC2_MC_DP_MB_XY                        (volatile unsigned int *)((0x290e  << 2) + 0xff620000)
+#define   VDEC2_MC_OM_MB_XY                        (0x290f)
+#define P_VDEC2_MC_OM_MB_XY                        (volatile unsigned int *)((0x290f  << 2) + 0xff620000)
+#define   VDEC2_PSCALE_RST                         (0x2910)
+#define P_VDEC2_PSCALE_RST                         (volatile unsigned int *)((0x2910  << 2) + 0xff620000)
+#define   VDEC2_PSCALE_CTRL                        (0x2911)
+#define P_VDEC2_PSCALE_CTRL                        (volatile unsigned int *)((0x2911  << 2) + 0xff620000)
+#define   VDEC2_PSCALE_PICI_W                      (0x2912)
+#define P_VDEC2_PSCALE_PICI_W                      (volatile unsigned int *)((0x2912  << 2) + 0xff620000)
+#define   VDEC2_PSCALE_PICI_H                      (0x2913)
+#define P_VDEC2_PSCALE_PICI_H                      (volatile unsigned int *)((0x2913  << 2) + 0xff620000)
+#define   VDEC2_PSCALE_PICO_W                      (0x2914)
+#define P_VDEC2_PSCALE_PICO_W                      (volatile unsigned int *)((0x2914  << 2) + 0xff620000)
+#define   VDEC2_PSCALE_PICO_H                      (0x2915)
+#define P_VDEC2_PSCALE_PICO_H                      (volatile unsigned int *)((0x2915  << 2) + 0xff620000)
+#define   VDEC2_PSCALE_PICO_START_X                (0x2916)
+#define P_VDEC2_PSCALE_PICO_START_X                (volatile unsigned int *)((0x2916  << 2) + 0xff620000)
+#define   VDEC2_PSCALE_PICO_START_Y                (0x2917)
+#define P_VDEC2_PSCALE_PICO_START_Y                (volatile unsigned int *)((0x2917  << 2) + 0xff620000)
+#define   VDEC2_PSCALE_DUMMY                       (0x2918)
+#define P_VDEC2_PSCALE_DUMMY                       (volatile unsigned int *)((0x2918  << 2) + 0xff620000)
+#define   VDEC2_PSCALE_FILT0_COEF0                 (0x2919)
+#define P_VDEC2_PSCALE_FILT0_COEF0                 (volatile unsigned int *)((0x2919  << 2) + 0xff620000)
+#define   VDEC2_PSCALE_FILT0_COEF1                 (0x291a)
+#define P_VDEC2_PSCALE_FILT0_COEF1                 (volatile unsigned int *)((0x291a  << 2) + 0xff620000)
+#define   VDEC2_PSCALE_CMD_CTRL                    (0x291b)
+#define P_VDEC2_PSCALE_CMD_CTRL                    (volatile unsigned int *)((0x291b  << 2) + 0xff620000)
+#define   VDEC2_PSCALE_CMD_BLK_X                   (0x291c)
+#define P_VDEC2_PSCALE_CMD_BLK_X                   (volatile unsigned int *)((0x291c  << 2) + 0xff620000)
+#define   VDEC2_PSCALE_CMD_BLK_Y                   (0x291d)
+#define P_VDEC2_PSCALE_CMD_BLK_Y                   (volatile unsigned int *)((0x291d  << 2) + 0xff620000)
+#define   VDEC2_PSCALE_STATUS                      (0x291e)
+#define P_VDEC2_PSCALE_STATUS                      (volatile unsigned int *)((0x291e  << 2) + 0xff620000)
+#define   VDEC2_PSCALE_BMEM_ADDR                   (0x291f)
+#define P_VDEC2_PSCALE_BMEM_ADDR                   (volatile unsigned int *)((0x291f  << 2) + 0xff620000)
+#define   VDEC2_PSCALE_BMEM_DAT                    (0x2920)
+#define P_VDEC2_PSCALE_BMEM_DAT                    (volatile unsigned int *)((0x2920  << 2) + 0xff620000)
+#define   VDEC2_PSCALE_DRAM_BUF_CTRL               (0x2921)
+#define P_VDEC2_PSCALE_DRAM_BUF_CTRL               (volatile unsigned int *)((0x2921  << 2) + 0xff620000)
+#define   VDEC2_PSCALE_MCMD_CTRL                   (0x2922)
+#define P_VDEC2_PSCALE_MCMD_CTRL                   (volatile unsigned int *)((0x2922  << 2) + 0xff620000)
+#define   VDEC2_PSCALE_MCMD_XSIZE                  (0x2923)
+#define P_VDEC2_PSCALE_MCMD_XSIZE                  (volatile unsigned int *)((0x2923  << 2) + 0xff620000)
+#define   VDEC2_PSCALE_MCMD_YSIZE                  (0x2924)
+#define P_VDEC2_PSCALE_MCMD_YSIZE                  (volatile unsigned int *)((0x2924  << 2) + 0xff620000)
+#define   VDEC2_PSCALE_RBUF_START_BLKX             (0x2925)
+#define P_VDEC2_PSCALE_RBUF_START_BLKX             (volatile unsigned int *)((0x2925  << 2) + 0xff620000)
+#define   VDEC2_PSCALE_RBUF_START_BLKY             (0x2926)
+#define P_VDEC2_PSCALE_RBUF_START_BLKY             (volatile unsigned int *)((0x2926  << 2) + 0xff620000)
+//`define PSCALE_RBUF_MB_WIDTH   8'h27
+#define   VDEC2_PSCALE_PICO_SHIFT_XY               (0x2928)
+#define P_VDEC2_PSCALE_PICO_SHIFT_XY               (volatile unsigned int *)((0x2928  << 2) + 0xff620000)
+#define   VDEC2_PSCALE_CTRL1                       (0x2929)
+#define P_VDEC2_PSCALE_CTRL1                       (volatile unsigned int *)((0x2929  << 2) + 0xff620000)
+//Bit 15, wmask enable
+//Bit 14:13, filt0 srckey_less,
+//Bit 12:11, filt1 srckey_less, in the case of the interpolated data is equal distance to
+//key data and normal data, 00: select normal data, 01: select right data, 10: select key data
+//Bit 10:9, srckey mode, 00: equal, 01: less than or equal, 10: great than or equal
+//Bit 8, src key enable
+//Bit 7:0, y src key
+#define   VDEC2_PSCALE_SRCKEY_CTRL0                (0x292a)
+#define P_VDEC2_PSCALE_SRCKEY_CTRL0                (volatile unsigned int *)((0x292a  << 2) + 0xff620000)
+//Bit 15:8, cb src key
+//Bit 7:0, cr src key
+#define   VDEC2_PSCALE_SRCKEY_CTRL1                (0x292b)
+#define P_VDEC2_PSCALE_SRCKEY_CTRL1                (volatile unsigned int *)((0x292b  << 2) + 0xff620000)
+//Bit 22:16 canvas_rd_addr2
+//Bit 14:8 canvas_rd_addr1
+//Bit 6:0 canvas_rd_addr1
+#define   VDEC2_PSCALE_CANVAS_RD_ADDR              (0x292c)
+#define P_VDEC2_PSCALE_CANVAS_RD_ADDR              (volatile unsigned int *)((0x292c  << 2) + 0xff620000)
+//Bit 22:16 canvas_wr_addr2
+//Bit 14:8 canvas_wr_addr1
+//Bit 6:0 canvas_wr_addr1
+#define   VDEC2_PSCALE_CANVAS_WR_ADDR              (0x292d)
+#define P_VDEC2_PSCALE_CANVAS_WR_ADDR              (volatile unsigned int *)((0x292d  << 2) + 0xff620000)
+//bit 13:8 pscale thread ID and token
+//bit 7 disable write response count adding to busy bit
+//bit 5:0  pscale prearbitor burst num
+#define   VDEC2_PSCALE_CTRL2                       (0x292e)
+#define P_VDEC2_PSCALE_CTRL2                       (volatile unsigned int *)((0x292e  << 2) + 0xff620000)
+//   31 - use_omem_mb_xy_auto
+//23:16 - omem_max_mb_x
+//15:8  - omem_mb_y_auto
+// 7:0  - omem_mb_x_auto
+#define   VDEC2_HDEC_MC_OMEM_AUTO                  (0x2930)
+#define P_VDEC2_HDEC_MC_OMEM_AUTO                  (volatile unsigned int *)((0x2930  << 2) + 0xff620000)
+#define   VDEC2_HDEC_MC_MBRIGHT_IDX                (0x2931)
+#define P_VDEC2_HDEC_MC_MBRIGHT_IDX                (volatile unsigned int *)((0x2931  << 2) + 0xff620000)
+#define   VDEC2_HDEC_MC_MBRIGHT_RD                 (0x2932)
+#define P_VDEC2_HDEC_MC_MBRIGHT_RD                 (volatile unsigned int *)((0x2932  << 2) + 0xff620000)
+#define   VDEC2_MC_MPORT_CTRL                      (0x2940)
+#define P_VDEC2_MC_MPORT_CTRL                      (volatile unsigned int *)((0x2940  << 2) + 0xff620000)
+#define   VDEC2_MC_MPORT_DAT                       (0x2941)
+#define P_VDEC2_MC_MPORT_DAT                       (volatile unsigned int *)((0x2941  << 2) + 0xff620000)
+#define   VDEC2_MC_WT_PRED_CTRL                    (0x2942)
+#define P_VDEC2_MC_WT_PRED_CTRL                    (volatile unsigned int *)((0x2942  << 2) + 0xff620000)
+#define   VDEC2_MC_MBBOT_ST_EVEN_ADDR              (0x2944)
+#define P_VDEC2_MC_MBBOT_ST_EVEN_ADDR              (volatile unsigned int *)((0x2944  << 2) + 0xff620000)
+#define   VDEC2_MC_MBBOT_ST_ODD_ADDR               (0x2945)
+#define P_VDEC2_MC_MBBOT_ST_ODD_ADDR               (volatile unsigned int *)((0x2945  << 2) + 0xff620000)
+#define   VDEC2_MC_DPDN_MB_XY                      (0x2946)
+#define P_VDEC2_MC_DPDN_MB_XY                      (volatile unsigned int *)((0x2946  << 2) + 0xff620000)
+#define   VDEC2_MC_OMDN_MB_XY                      (0x2947)
+#define P_VDEC2_MC_OMDN_MB_XY                      (volatile unsigned int *)((0x2947  << 2) + 0xff620000)
+#define   VDEC2_MC_HCMDBUF_H                       (0x2948)
+#define P_VDEC2_MC_HCMDBUF_H                       (volatile unsigned int *)((0x2948  << 2) + 0xff620000)
+#define   VDEC2_MC_HCMDBUF_L                       (0x2949)
+#define P_VDEC2_MC_HCMDBUF_L                       (volatile unsigned int *)((0x2949  << 2) + 0xff620000)
+#define   VDEC2_MC_HCMD_H                          (0x294a)
+#define P_VDEC2_MC_HCMD_H                          (volatile unsigned int *)((0x294a  << 2) + 0xff620000)
+#define   VDEC2_MC_HCMD_L                          (0x294b)
+#define P_VDEC2_MC_HCMD_L                          (volatile unsigned int *)((0x294b  << 2) + 0xff620000)
+#define   VDEC2_MC_IDCT_DAT                        (0x294c)
+#define P_VDEC2_MC_IDCT_DAT                        (volatile unsigned int *)((0x294c  << 2) + 0xff620000)
+#define   VDEC2_MC_CTRL_GCLK_CTRL                  (0x294d)
+#define P_VDEC2_MC_CTRL_GCLK_CTRL                  (volatile unsigned int *)((0x294d  << 2) + 0xff620000)
+#define   VDEC2_MC_OTHER_GCLK_CTRL                 (0x294e)
+#define P_VDEC2_MC_OTHER_GCLK_CTRL                 (volatile unsigned int *)((0x294e  << 2) + 0xff620000)
+//Bit 29:24, mbbot thread ID and token
+//Bit 21:16, mc read/write thread ID and token
+//Bit 13:8,  mbbot pre-arbitor burst number
+//Bit 5:0,   mc pre-arbitor burst number
+#define   VDEC2_MC_CTRL2                           (0x294f)
+#define P_VDEC2_MC_CTRL2                           (volatile unsigned int *)((0x294f  << 2) + 0xff620000)
+// `define DBLK_QUANT            8'h76 // ONLY for $ucode/real/amrisc/rv.s, reg value from apollo
+//`define ANC1_CANVAS_ADDR      8'h80
+//`define ANC2_CANVAS_ADDR      8'h81
+//`define REC_CANVAS_ADDR       8'h89
+//`define MDEC_PIC_W          8'h8c
+//`define MDEC_PIC_H          8'h8d
+// mdec_pic_dc_mux_ctrl[31]  -- mcr_hevc_mode
+#define   VDEC2_MDEC_PIC_DC_MUX_CTRL               (0x298d)
+#define P_VDEC2_MDEC_PIC_DC_MUX_CTRL               (volatile unsigned int *)((0x298d  << 2) + 0xff620000)
+#define   VDEC2_MDEC_PIC_DC_CTRL                   (0x298e)
+#define P_VDEC2_MDEC_PIC_DC_CTRL                   (volatile unsigned int *)((0x298e  << 2) + 0xff620000)
+#define   VDEC2_MDEC_PIC_DC_STATUS                 (0x298f)
+#define P_VDEC2_MDEC_PIC_DC_STATUS                 (volatile unsigned int *)((0x298f  << 2) + 0xff620000)
+#define   VDEC2_ANC0_CANVAS_ADDR                   (0x2990)
+#define P_VDEC2_ANC0_CANVAS_ADDR                   (volatile unsigned int *)((0x2990  << 2) + 0xff620000)
+#define   VDEC2_ANC1_CANVAS_ADDR                   (0x2991)
+#define P_VDEC2_ANC1_CANVAS_ADDR                   (volatile unsigned int *)((0x2991  << 2) + 0xff620000)
+#define   VDEC2_ANC2_CANVAS_ADDR                   (0x2992)
+#define P_VDEC2_ANC2_CANVAS_ADDR                   (volatile unsigned int *)((0x2992  << 2) + 0xff620000)
+#define   VDEC2_ANC3_CANVAS_ADDR                   (0x2993)
+#define P_VDEC2_ANC3_CANVAS_ADDR                   (volatile unsigned int *)((0x2993  << 2) + 0xff620000)
+#define   VDEC2_ANC4_CANVAS_ADDR                   (0x2994)
+#define P_VDEC2_ANC4_CANVAS_ADDR                   (volatile unsigned int *)((0x2994  << 2) + 0xff620000)
+#define   VDEC2_ANC5_CANVAS_ADDR                   (0x2995)
+#define P_VDEC2_ANC5_CANVAS_ADDR                   (volatile unsigned int *)((0x2995  << 2) + 0xff620000)
+#define   VDEC2_ANC6_CANVAS_ADDR                   (0x2996)
+#define P_VDEC2_ANC6_CANVAS_ADDR                   (volatile unsigned int *)((0x2996  << 2) + 0xff620000)
+#define   VDEC2_ANC7_CANVAS_ADDR                   (0x2997)
+#define P_VDEC2_ANC7_CANVAS_ADDR                   (volatile unsigned int *)((0x2997  << 2) + 0xff620000)
+#define   VDEC2_ANC8_CANVAS_ADDR                   (0x2998)
+#define P_VDEC2_ANC8_CANVAS_ADDR                   (volatile unsigned int *)((0x2998  << 2) + 0xff620000)
+#define   VDEC2_ANC9_CANVAS_ADDR                   (0x2999)
+#define P_VDEC2_ANC9_CANVAS_ADDR                   (volatile unsigned int *)((0x2999  << 2) + 0xff620000)
+#define   VDEC2_ANC10_CANVAS_ADDR                  (0x299a)
+#define P_VDEC2_ANC10_CANVAS_ADDR                  (volatile unsigned int *)((0x299a  << 2) + 0xff620000)
+#define   VDEC2_ANC11_CANVAS_ADDR                  (0x299b)
+#define P_VDEC2_ANC11_CANVAS_ADDR                  (volatile unsigned int *)((0x299b  << 2) + 0xff620000)
+#define   VDEC2_ANC12_CANVAS_ADDR                  (0x299c)
+#define P_VDEC2_ANC12_CANVAS_ADDR                  (volatile unsigned int *)((0x299c  << 2) + 0xff620000)
+#define   VDEC2_ANC13_CANVAS_ADDR                  (0x299d)
+#define P_VDEC2_ANC13_CANVAS_ADDR                  (volatile unsigned int *)((0x299d  << 2) + 0xff620000)
+#define   VDEC2_ANC14_CANVAS_ADDR                  (0x299e)
+#define P_VDEC2_ANC14_CANVAS_ADDR                  (volatile unsigned int *)((0x299e  << 2) + 0xff620000)
+#define   VDEC2_ANC15_CANVAS_ADDR                  (0x299f)
+#define P_VDEC2_ANC15_CANVAS_ADDR                  (volatile unsigned int *)((0x299f  << 2) + 0xff620000)
+#define   VDEC2_ANC16_CANVAS_ADDR                  (0x29a0)
+#define P_VDEC2_ANC16_CANVAS_ADDR                  (volatile unsigned int *)((0x29a0  << 2) + 0xff620000)
+#define   VDEC2_ANC17_CANVAS_ADDR                  (0x29a1)
+#define P_VDEC2_ANC17_CANVAS_ADDR                  (volatile unsigned int *)((0x29a1  << 2) + 0xff620000)
+#define   VDEC2_ANC18_CANVAS_ADDR                  (0x29a2)
+#define P_VDEC2_ANC18_CANVAS_ADDR                  (volatile unsigned int *)((0x29a2  << 2) + 0xff620000)
+#define   VDEC2_ANC19_CANVAS_ADDR                  (0x29a3)
+#define P_VDEC2_ANC19_CANVAS_ADDR                  (volatile unsigned int *)((0x29a3  << 2) + 0xff620000)
+#define   VDEC2_ANC20_CANVAS_ADDR                  (0x29a4)
+#define P_VDEC2_ANC20_CANVAS_ADDR                  (volatile unsigned int *)((0x29a4  << 2) + 0xff620000)
+#define   VDEC2_ANC21_CANVAS_ADDR                  (0x29a5)
+#define P_VDEC2_ANC21_CANVAS_ADDR                  (volatile unsigned int *)((0x29a5  << 2) + 0xff620000)
+#define   VDEC2_ANC22_CANVAS_ADDR                  (0x29a6)
+#define P_VDEC2_ANC22_CANVAS_ADDR                  (volatile unsigned int *)((0x29a6  << 2) + 0xff620000)
+#define   VDEC2_ANC23_CANVAS_ADDR                  (0x29a7)
+#define P_VDEC2_ANC23_CANVAS_ADDR                  (volatile unsigned int *)((0x29a7  << 2) + 0xff620000)
+#define   VDEC2_ANC24_CANVAS_ADDR                  (0x29a8)
+#define P_VDEC2_ANC24_CANVAS_ADDR                  (volatile unsigned int *)((0x29a8  << 2) + 0xff620000)
+#define   VDEC2_ANC25_CANVAS_ADDR                  (0x29a9)
+#define P_VDEC2_ANC25_CANVAS_ADDR                  (volatile unsigned int *)((0x29a9  << 2) + 0xff620000)
+#define   VDEC2_ANC26_CANVAS_ADDR                  (0x29aa)
+#define P_VDEC2_ANC26_CANVAS_ADDR                  (volatile unsigned int *)((0x29aa  << 2) + 0xff620000)
+#define   VDEC2_ANC27_CANVAS_ADDR                  (0x29ab)
+#define P_VDEC2_ANC27_CANVAS_ADDR                  (volatile unsigned int *)((0x29ab  << 2) + 0xff620000)
+#define   VDEC2_ANC28_CANVAS_ADDR                  (0x29ac)
+#define P_VDEC2_ANC28_CANVAS_ADDR                  (volatile unsigned int *)((0x29ac  << 2) + 0xff620000)
+#define   VDEC2_ANC29_CANVAS_ADDR                  (0x29ad)
+#define P_VDEC2_ANC29_CANVAS_ADDR                  (volatile unsigned int *)((0x29ad  << 2) + 0xff620000)
+#define   VDEC2_ANC30_CANVAS_ADDR                  (0x29ae)
+#define P_VDEC2_ANC30_CANVAS_ADDR                  (volatile unsigned int *)((0x29ae  << 2) + 0xff620000)
+#define   VDEC2_ANC31_CANVAS_ADDR                  (0x29af)
+#define P_VDEC2_ANC31_CANVAS_ADDR                  (volatile unsigned int *)((0x29af  << 2) + 0xff620000)
+#define   VDEC2_DBKR_CANVAS_ADDR                   (0x29b0)
+#define P_VDEC2_DBKR_CANVAS_ADDR                   (volatile unsigned int *)((0x29b0  << 2) + 0xff620000)
+#define   VDEC2_DBKW_CANVAS_ADDR                   (0x29b1)
+#define P_VDEC2_DBKW_CANVAS_ADDR                   (volatile unsigned int *)((0x29b1  << 2) + 0xff620000)
+#define   VDEC2_REC_CANVAS_ADDR                    (0x29b2)
+#define P_VDEC2_REC_CANVAS_ADDR                    (volatile unsigned int *)((0x29b2  << 2) + 0xff620000)
+//28:24, read/write, current canvas idx, used in h264 only now
+//23:0, read only, current canvas address, 23:16, Cr canvas addr, 15:8, Cb canvas addr, 7:0, Y  canvas addr
+#define   VDEC2_CURR_CANVAS_CTRL                   (0x29b3)
+#define P_VDEC2_CURR_CANVAS_CTRL                   (volatile unsigned int *)((0x29b3  << 2) + 0xff620000)
+#define   VDEC2_MDEC_PIC_DC_THRESH                 (0x29b8)
+#define P_VDEC2_MDEC_PIC_DC_THRESH                 (volatile unsigned int *)((0x29b8  << 2) + 0xff620000)
+#define   VDEC2_MDEC_PICR_BUF_STATUS               (0x29b9)
+#define P_VDEC2_MDEC_PICR_BUF_STATUS               (volatile unsigned int *)((0x29b9  << 2) + 0xff620000)
+#define   VDEC2_MDEC_PICW_BUF_STATUS               (0x29ba)
+#define P_VDEC2_MDEC_PICW_BUF_STATUS               (volatile unsigned int *)((0x29ba  << 2) + 0xff620000)
+#define   VDEC2_MCW_DBLK_WRRSP_CNT                 (0x29bb)
+#define P_VDEC2_MCW_DBLK_WRRSP_CNT                 (volatile unsigned int *)((0x29bb  << 2) + 0xff620000)
+#define   VDEC2_MC_MBBOT_WRRSP_CNT                 (0x29bc)
+#define P_VDEC2_MC_MBBOT_WRRSP_CNT                 (volatile unsigned int *)((0x29bc  << 2) + 0xff620000)
+#define   VDEC2_MDEC_PICW_BUF2_STATUS              (0x29bd)
+#define P_VDEC2_MDEC_PICW_BUF2_STATUS              (volatile unsigned int *)((0x29bd  << 2) + 0xff620000)
+#define   VDEC2_WRRSP_FIFO_PICW_DBK                (0x29be)
+#define P_VDEC2_WRRSP_FIFO_PICW_DBK                (volatile unsigned int *)((0x29be  << 2) + 0xff620000)
+#define   VDEC2_WRRSP_FIFO_PICW_MC                 (0x29bf)
+#define P_VDEC2_WRRSP_FIFO_PICW_MC                 (volatile unsigned int *)((0x29bf  << 2) + 0xff620000)
+#define   VDEC2_AV_SCRATCH_0                       (0x29c0)
+#define P_VDEC2_AV_SCRATCH_0                       (volatile unsigned int *)((0x29c0  << 2) + 0xff620000)
+#define   VDEC2_AV_SCRATCH_1                       (0x29c1)
+#define P_VDEC2_AV_SCRATCH_1                       (volatile unsigned int *)((0x29c1  << 2) + 0xff620000)
+#define   VDEC2_AV_SCRATCH_2                       (0x29c2)
+#define P_VDEC2_AV_SCRATCH_2                       (volatile unsigned int *)((0x29c2  << 2) + 0xff620000)
+#define   VDEC2_AV_SCRATCH_3                       (0x29c3)
+#define P_VDEC2_AV_SCRATCH_3                       (volatile unsigned int *)((0x29c3  << 2) + 0xff620000)
+#define   VDEC2_AV_SCRATCH_4                       (0x29c4)
+#define P_VDEC2_AV_SCRATCH_4                       (volatile unsigned int *)((0x29c4  << 2) + 0xff620000)
+#define   VDEC2_AV_SCRATCH_5                       (0x29c5)
+#define P_VDEC2_AV_SCRATCH_5                       (volatile unsigned int *)((0x29c5  << 2) + 0xff620000)
+#define   VDEC2_AV_SCRATCH_6                       (0x29c6)
+#define P_VDEC2_AV_SCRATCH_6                       (volatile unsigned int *)((0x29c6  << 2) + 0xff620000)
+#define   VDEC2_AV_SCRATCH_7                       (0x29c7)
+#define P_VDEC2_AV_SCRATCH_7                       (volatile unsigned int *)((0x29c7  << 2) + 0xff620000)
+#define   VDEC2_AV_SCRATCH_8                       (0x29c8)
+#define P_VDEC2_AV_SCRATCH_8                       (volatile unsigned int *)((0x29c8  << 2) + 0xff620000)
+#define   VDEC2_AV_SCRATCH_9                       (0x29c9)
+#define P_VDEC2_AV_SCRATCH_9                       (volatile unsigned int *)((0x29c9  << 2) + 0xff620000)
+#define   VDEC2_AV_SCRATCH_A                       (0x29ca)
+#define P_VDEC2_AV_SCRATCH_A                       (volatile unsigned int *)((0x29ca  << 2) + 0xff620000)
+#define   VDEC2_AV_SCRATCH_B                       (0x29cb)
+#define P_VDEC2_AV_SCRATCH_B                       (volatile unsigned int *)((0x29cb  << 2) + 0xff620000)
+#define   VDEC2_AV_SCRATCH_C                       (0x29cc)
+#define P_VDEC2_AV_SCRATCH_C                       (volatile unsigned int *)((0x29cc  << 2) + 0xff620000)
+#define   VDEC2_AV_SCRATCH_D                       (0x29cd)
+#define P_VDEC2_AV_SCRATCH_D                       (volatile unsigned int *)((0x29cd  << 2) + 0xff620000)
+#define   VDEC2_AV_SCRATCH_E                       (0x29ce)
+#define P_VDEC2_AV_SCRATCH_E                       (volatile unsigned int *)((0x29ce  << 2) + 0xff620000)
+#define   VDEC2_AV_SCRATCH_F                       (0x29cf)
+#define P_VDEC2_AV_SCRATCH_F                       (volatile unsigned int *)((0x29cf  << 2) + 0xff620000)
+#define   VDEC2_AV_SCRATCH_G                       (0x29d0)
+#define P_VDEC2_AV_SCRATCH_G                       (volatile unsigned int *)((0x29d0  << 2) + 0xff620000)
+#define   VDEC2_AV_SCRATCH_H                       (0x29d1)
+#define P_VDEC2_AV_SCRATCH_H                       (volatile unsigned int *)((0x29d1  << 2) + 0xff620000)
+#define   VDEC2_AV_SCRATCH_I                       (0x29d2)
+#define P_VDEC2_AV_SCRATCH_I                       (volatile unsigned int *)((0x29d2  << 2) + 0xff620000)
+#define   VDEC2_AV_SCRATCH_J                       (0x29d3)
+#define P_VDEC2_AV_SCRATCH_J                       (volatile unsigned int *)((0x29d3  << 2) + 0xff620000)
+#define   VDEC2_AV_SCRATCH_K                       (0x29d4)
+#define P_VDEC2_AV_SCRATCH_K                       (volatile unsigned int *)((0x29d4  << 2) + 0xff620000)
+#define   VDEC2_AV_SCRATCH_L                       (0x29d5)
+#define P_VDEC2_AV_SCRATCH_L                       (volatile unsigned int *)((0x29d5  << 2) + 0xff620000)
+#define   VDEC2_AV_SCRATCH_M                       (0x29d6)
+#define P_VDEC2_AV_SCRATCH_M                       (volatile unsigned int *)((0x29d6  << 2) + 0xff620000)
+#define   VDEC2_AV_SCRATCH_N                       (0x29d7)
+#define P_VDEC2_AV_SCRATCH_N                       (volatile unsigned int *)((0x29d7  << 2) + 0xff620000)
+// bit[29:24] A_brst_num_co_mb
+// bit[21:16] A_id_co_mb
+// bit[11:0] wrrsp_count_co_mb
+#define   VDEC2_WRRSP_CO_MB                        (0x29d8)
+#define P_VDEC2_WRRSP_CO_MB                        (volatile unsigned int *)((0x29d8  << 2) + 0xff620000)
+// bit[29:24] A_brst_num_dcac
+// bit[21:16] A_id_dcac
+// bit[11:0] wrrsp_count_dcac
+#define   VDEC2_WRRSP_DCAC                         (0x29d9)
+#define P_VDEC2_WRRSP_DCAC                         (volatile unsigned int *)((0x29d9  << 2) + 0xff620000)
+// bit[11:0] wrrsp_count_vld
+#define   VDEC2_WRRSP_VLD                          (0x29da)
+#define P_VDEC2_WRRSP_VLD                          (volatile unsigned int *)((0x29da  << 2) + 0xff620000)
+// doublew_cfg0[0];     //       Second Channel Enable, 1:Enable 0:Disable
+// doublew_cfg0[3:1];   // [2:0] Endian Control for Luma
+// doublew_cfg0[5:4];   // [1:0] Pixel sel by horizontal, 0x:1/2 10:left 11:right
+// doublew_cfg0[7:6];   // [1:0] Pixel sel by vertical,   0x:1/2 10:up 11:down
+// doublew_cfg0[8];     //       Size by horizontal, 0:original size 1: 1/2 shrunken size
+// doublew_cfg0[9];     //       Size by vertical,   0:original size 1: 1/2 shrunken size
+// doublew_cfg0[10];    //       1:Round 0:Truncation
+// doublew_cfg0[11];    //       DMA Urgent
+// doublew_cfg0[17:12]; // [5:0] DMA Burst Number
+// doublew_cfg0[23:18]; // [5:0] DMA ID
+// doublew_cfg0[26:24]; // [2:0] Endian Control for Chroma
+// doublew_cfg0[27];    //       Source from, 1:MCW 0:DBLK
+// doublew_cfg0[29:28]; // [1:0] 0x:select both top and bottom 10:select top 11:select bottom
+// doublew_cfg0[30];    //       0:no merge 1:automatic merge
+// doublew_cfg0[31];    //       0:Y addr no change 1:Y addr divided to half
+#define   VDEC2_MDEC_DOUBLEW_CFG0                  (0x29db)
+#define P_VDEC2_MDEC_DOUBLEW_CFG0                  (volatile unsigned int *)((0x29db  << 2) + 0xff620000)
+// doublew_cfg1[7:0];   // [7:0] DMA Canvas Address for Luma
+// doublew_cfg1[15:8];  // [7:0] DMA Canvas Address for Chroma
+// doublew_cfg1[16];    //       Disable 1st Write -
+// doublew_cfg1[17];    //       Reverse to original version -
+// doublew_cfg1[18];    //       DMA Address Mode - 0:Canvas Mode 1:Non-Canvas Mode
+#define   VDEC2_MDEC_DOUBLEW_CFG1                  (0x29dc)
+#define P_VDEC2_MDEC_DOUBLEW_CFG1                  (volatile unsigned int *)((0x29dc  << 2) + 0xff620000)
+// doublew_cfg2[11:0];  //[11:0] vertical flip initial value
+// doublew_cfg2[15];    //       vertical flip enable
+// doublew_cfg2[24:16]; // [8:0] horizontal flip initial value
+// doublew_cfg2[31];    //       horizontal flip enable
+#define   VDEC2_MDEC_DOUBLEW_CFG2                  (0x29dd)
+#define P_VDEC2_MDEC_DOUBLEW_CFG2                  (volatile unsigned int *)((0x29dd  << 2) + 0xff620000)
+// doublew_cfg3[31:0];  //[31:0] non-canvas start address for Luma -
+#define   VDEC2_MDEC_DOUBLEW_CFG3                  (0x29de)
+#define P_VDEC2_MDEC_DOUBLEW_CFG3                  (volatile unsigned int *)((0x29de  << 2) + 0xff620000)
+// doublew_cfg4[31:0];  //[31:0] non-canvas start address for Chroma -
+#define   VDEC2_MDEC_DOUBLEW_CFG4                  (0x29df)
+#define P_VDEC2_MDEC_DOUBLEW_CFG4                  (volatile unsigned int *)((0x29df  << 2) + 0xff620000)
+// doublew_cfg5[12:0];  //[12:0] non-canvas picture width for Luma -
+// doublew_cfg5[28:16]; //[12:0] non-canvas picture width for Chroma -
+#define   VDEC2_MDEC_DOUBLEW_CFG5                  (0x29e0)
+#define P_VDEC2_MDEC_DOUBLEW_CFG5                  (volatile unsigned int *)((0x29e0  << 2) + 0xff620000)
+// doublew_cfg6: reserved
+#define   VDEC2_MDEC_DOUBLEW_CFG6                  (0x29e1)
+#define P_VDEC2_MDEC_DOUBLEW_CFG6                  (volatile unsigned int *)((0x29e1  << 2) + 0xff620000)
+// doublew_cfg7: reserved
+#define   VDEC2_MDEC_DOUBLEW_CFG7                  (0x29e2)
+#define P_VDEC2_MDEC_DOUBLEW_CFG7                  (volatile unsigned int *)((0x29e2  << 2) + 0xff620000)
+// doublew_status[11:0];//[11:0] wrrsp_count_doublew
+// doublew_status[12];  //       doublew_status_busy
+// doublew_status[13];  //       doublew_status_error
+#define   VDEC2_MDEC_DOUBLEW_STATUS                (0x29e3)
+#define P_VDEC2_MDEC_DOUBLEW_STATUS                (volatile unsigned int *)((0x29e3  << 2) + 0xff620000)
+#define   VDEC2_MDEC_EXTIF_CFG0                    (0x29e4)
+#define P_VDEC2_MDEC_EXTIF_CFG0                    (volatile unsigned int *)((0x29e4  << 2) + 0xff620000)
+#define   VDEC2_MDEC_EXTIF_CFG1                    (0x29e5)
+#define P_VDEC2_MDEC_EXTIF_CFG1                    (volatile unsigned int *)((0x29e5  << 2) + 0xff620000)
+#define   VDEC2_MDEC_EXTIF_STS0                    (0x29e6)
+#define P_VDEC2_MDEC_EXTIF_STS0                    (volatile unsigned int *)((0x29e6  << 2) + 0xff620000)
+//======================================
+//  MC Control Register Bits
+//
+//======================================
+// For bits, just copy the defines...don't translate to addresses
+    //`define MC_RESET	    16'h0002
+//======================================
+//  MB Info Register Bits
+//
+//======================================
+//======================================
+//  MB Info Register Bits
+//
+//======================================
+//========================================================================
+// DBLK Register:  12'h950 - 12'h97f
+//========================================================================
+#define   VDEC2_DBLK_RST                           (0x2950)
+#define P_VDEC2_DBLK_RST                           (volatile unsigned int *)((0x2950  << 2) + 0xff620000)
+#define   VDEC2_DBLK_CTRL                          (0x2951)
+#define P_VDEC2_DBLK_CTRL                          (volatile unsigned int *)((0x2951  << 2) + 0xff620000)
+#define   VDEC2_DBLK_MB_WID_HEIGHT                 (0x2952)
+#define P_VDEC2_DBLK_MB_WID_HEIGHT                 (volatile unsigned int *)((0x2952  << 2) + 0xff620000)
+#define   VDEC2_DBLK_STATUS                        (0x2953)
+#define P_VDEC2_DBLK_STATUS                        (volatile unsigned int *)((0x2953  << 2) + 0xff620000)
+#define   VDEC2_DBLK_CMD_CTRL                      (0x2954)
+#define P_VDEC2_DBLK_CMD_CTRL                      (volatile unsigned int *)((0x2954  << 2) + 0xff620000)
+#define   VDEC2_DBLK_MB_XY                         (0x2955)
+#define P_VDEC2_DBLK_MB_XY                         (volatile unsigned int *)((0x2955  << 2) + 0xff620000)
+#define   VDEC2_DBLK_QP                            (0x2956)
+#define P_VDEC2_DBLK_QP                            (volatile unsigned int *)((0x2956  << 2) + 0xff620000)
+#define   VDEC2_DBLK_Y_BHFILT                      (0x2957)
+#define P_VDEC2_DBLK_Y_BHFILT                      (volatile unsigned int *)((0x2957  << 2) + 0xff620000)
+#define   VDEC2_DBLK_Y_BHFILT_HIGH                 (0x2958)
+#define P_VDEC2_DBLK_Y_BHFILT_HIGH                 (volatile unsigned int *)((0x2958  << 2) + 0xff620000)
+#define   VDEC2_DBLK_Y_BVFILT                      (0x2959)
+#define P_VDEC2_DBLK_Y_BVFILT                      (volatile unsigned int *)((0x2959  << 2) + 0xff620000)
+#define   VDEC2_DBLK_CB_BFILT                      (0x295a)
+#define P_VDEC2_DBLK_CB_BFILT                      (volatile unsigned int *)((0x295a  << 2) + 0xff620000)
+#define   VDEC2_DBLK_CR_BFILT                      (0x295b)
+#define P_VDEC2_DBLK_CR_BFILT                      (volatile unsigned int *)((0x295b  << 2) + 0xff620000)
+#define   VDEC2_DBLK_Y_HFILT                       (0x295c)
+#define P_VDEC2_DBLK_Y_HFILT                       (volatile unsigned int *)((0x295c  << 2) + 0xff620000)
+#define   VDEC2_DBLK_Y_HFILT_HIGH                  (0x295d)
+#define P_VDEC2_DBLK_Y_HFILT_HIGH                  (volatile unsigned int *)((0x295d  << 2) + 0xff620000)
+#define   VDEC2_DBLK_Y_VFILT                       (0x295e)
+#define P_VDEC2_DBLK_Y_VFILT                       (volatile unsigned int *)((0x295e  << 2) + 0xff620000)
+#define   VDEC2_DBLK_CB_FILT                       (0x295f)
+#define P_VDEC2_DBLK_CB_FILT                       (volatile unsigned int *)((0x295f  << 2) + 0xff620000)
+#define   VDEC2_DBLK_CR_FILT                       (0x2960)
+#define P_VDEC2_DBLK_CR_FILT                       (volatile unsigned int *)((0x2960  << 2) + 0xff620000)
+#define   VDEC2_DBLK_BETAX_QP_SEL                  (0x2961)
+#define P_VDEC2_DBLK_BETAX_QP_SEL                  (volatile unsigned int *)((0x2961  << 2) + 0xff620000)
+#define   VDEC2_DBLK_CLIP_CTRL0                    (0x2962)
+#define P_VDEC2_DBLK_CLIP_CTRL0                    (volatile unsigned int *)((0x2962  << 2) + 0xff620000)
+#define   VDEC2_DBLK_CLIP_CTRL1                    (0x2963)
+#define P_VDEC2_DBLK_CLIP_CTRL1                    (volatile unsigned int *)((0x2963  << 2) + 0xff620000)
+#define   VDEC2_DBLK_CLIP_CTRL2                    (0x2964)
+#define P_VDEC2_DBLK_CLIP_CTRL2                    (volatile unsigned int *)((0x2964  << 2) + 0xff620000)
+#define   VDEC2_DBLK_CLIP_CTRL3                    (0x2965)
+#define P_VDEC2_DBLK_CLIP_CTRL3                    (volatile unsigned int *)((0x2965  << 2) + 0xff620000)
+#define   VDEC2_DBLK_CLIP_CTRL4                    (0x2966)
+#define P_VDEC2_DBLK_CLIP_CTRL4                    (volatile unsigned int *)((0x2966  << 2) + 0xff620000)
+#define   VDEC2_DBLK_CLIP_CTRL5                    (0x2967)
+#define P_VDEC2_DBLK_CLIP_CTRL5                    (volatile unsigned int *)((0x2967  << 2) + 0xff620000)
+#define   VDEC2_DBLK_CLIP_CTRL6                    (0x2968)
+#define P_VDEC2_DBLK_CLIP_CTRL6                    (volatile unsigned int *)((0x2968  << 2) + 0xff620000)
+#define   VDEC2_DBLK_CLIP_CTRL7                    (0x2969)
+#define P_VDEC2_DBLK_CLIP_CTRL7                    (volatile unsigned int *)((0x2969  << 2) + 0xff620000)
+#define   VDEC2_DBLK_CLIP_CTRL8                    (0x296a)
+#define P_VDEC2_DBLK_CLIP_CTRL8                    (volatile unsigned int *)((0x296a  << 2) + 0xff620000)
+#define   VDEC2_DBLK_STATUS1                       (0x296b)
+#define P_VDEC2_DBLK_STATUS1                       (volatile unsigned int *)((0x296b  << 2) + 0xff620000)
+#define   VDEC2_DBLK_GCLK_FREE                     (0x296c)
+#define P_VDEC2_DBLK_GCLK_FREE                     (volatile unsigned int *)((0x296c  << 2) + 0xff620000)
+#define   VDEC2_DBLK_GCLK_OFF                      (0x296d)
+#define P_VDEC2_DBLK_GCLK_OFF                      (volatile unsigned int *)((0x296d  << 2) + 0xff620000)
+#define   VDEC2_DBLK_AVSFLAGS                      (0x296e)
+#define P_VDEC2_DBLK_AVSFLAGS                      (volatile unsigned int *)((0x296e  << 2) + 0xff620000)
+// bit 15:0
+#define   VDEC2_DBLK_CBPY                          (0x2970)
+#define P_VDEC2_DBLK_CBPY                          (volatile unsigned int *)((0x2970  << 2) + 0xff620000)
+// bit 11:8 -- deblk_cbpy_bottom
+// bit 7:4 -- deblk_cbpy_left
+// bit 3:0 -- deblk_cbpy_top
+#define   VDEC2_DBLK_CBPY_ADJ                      (0x2971)
+#define P_VDEC2_DBLK_CBPY_ADJ                      (volatile unsigned int *)((0x2971  << 2) + 0xff620000)
+// bit 7:0 -- deblk_cbpc
+#define   VDEC2_DBLK_CBPC                          (0x2972)
+#define P_VDEC2_DBLK_CBPC                          (volatile unsigned int *)((0x2972  << 2) + 0xff620000)
+// bit 15 -- bottom_mb
+// bit 14 -- left_mb
+// bit 13 -- top_mb
+// bit 12 -- reserved
+// bit 11:8 -- deblk_cbpc_bottom
+// bit 7:4 -- deblk_cbpc_left
+// bit 3:0 -- deblk_cbpc_top
+#define   VDEC2_DBLK_CBPC_ADJ                      (0x2973)
+#define P_VDEC2_DBLK_CBPC_ADJ                      (volatile unsigned int *)((0x2973  << 2) + 0xff620000)
+// bit 15:8 -- deblk_hmvd   -- {left_1, left_0, below_1, below_0, block3-0}
+// bit 7:0 -- deblk_vmvd    -- {top_1, top_0, below_1, below_0, block3-0}
+#define   VDEC2_DBLK_VHMVD                         (0x2974)
+#define P_VDEC2_DBLK_VHMVD                         (volatile unsigned int *)((0x2974  << 2) + 0xff620000)
+// bit 13:12 -- right_vmvd
+// bit 11 -- right_above_vmvd
+// bit 10 -- left_below_hmvd
+// bit 9 -- disable_dblk_luma
+// bit 8 -- disable_dblk_chroma
+// bit 7 -- bBelowRefDiff
+// bit 6 -- bLeftRefDiff
+// bit 5 -- bAboveRefDiff
+// bit 4 -- reserved
+// bit 3 -- s_below
+// bit 2 -- s_left
+// bit 1 -- s_above
+// bit 0 -- s
+#define   VDEC2_DBLK_STRONG                        (0x2975)
+#define P_VDEC2_DBLK_STRONG                        (volatile unsigned int *)((0x2975  << 2) + 0xff620000)
+// bit 14:10 -- PQUANT
+// bit 9:5 -- left_PQUANT
+// bit 4:0 -- top_PQUANT
+#define   VDEC2_DBLK_RV8_QUANT                     (0x2976)
+#define P_VDEC2_DBLK_RV8_QUANT                     (volatile unsigned int *)((0x2976  << 2) + 0xff620000)
+#define   VDEC2_DBLK_CBUS_HCMD2                    (0x2977)
+#define P_VDEC2_DBLK_CBUS_HCMD2                    (volatile unsigned int *)((0x2977  << 2) + 0xff620000)
+#define   VDEC2_DBLK_CBUS_HCMD1                    (0x2978)
+#define P_VDEC2_DBLK_CBUS_HCMD1                    (volatile unsigned int *)((0x2978  << 2) + 0xff620000)
+#define   VDEC2_DBLK_CBUS_HCMD0                    (0x2979)
+#define P_VDEC2_DBLK_CBUS_HCMD0                    (volatile unsigned int *)((0x2979  << 2) + 0xff620000)
+#define   VDEC2_DBLK_VLD_HCMD2                     (0x297a)
+#define P_VDEC2_DBLK_VLD_HCMD2                     (volatile unsigned int *)((0x297a  << 2) + 0xff620000)
+#define   VDEC2_DBLK_VLD_HCMD1                     (0x297b)
+#define P_VDEC2_DBLK_VLD_HCMD1                     (volatile unsigned int *)((0x297b  << 2) + 0xff620000)
+#define   VDEC2_DBLK_VLD_HCMD0                     (0x297c)
+#define P_VDEC2_DBLK_VLD_HCMD0                     (volatile unsigned int *)((0x297c  << 2) + 0xff620000)
+#define   VDEC2_DBLK_OST_YBASE                     (0x297d)
+#define P_VDEC2_DBLK_OST_YBASE                     (volatile unsigned int *)((0x297d  << 2) + 0xff620000)
+#define   VDEC2_DBLK_OST_CBCRDIFF                  (0x297e)
+#define P_VDEC2_DBLK_OST_CBCRDIFF                  (volatile unsigned int *)((0x297e  << 2) + 0xff620000)
+//13:8 dblk thread ID and token
+//5:0  dblk prearbitor burst num
+#define   VDEC2_DBLK_CTRL1                         (0x297f)
+#define P_VDEC2_DBLK_CTRL1                         (volatile unsigned int *)((0x297f  << 2) + 0xff620000)
+// MCRCC_CTL1
+// 31:3  <reserved[23:0]>
+// 2     <cfg_field_pic>
+// 1     <sw_rst>
+// 0     <bypass_en>
+#define   VDEC2_MCRCC_CTL1                         (0x2980)
+#define P_VDEC2_MCRCC_CTL1                         (volatile unsigned int *)((0x2980  << 2) + 0xff620000)
+// MCRCC_CTL2
+// 31:24    <cfg_cache_anc01_c[7:0]>
+// 23:16    <cfg_cache_anc01_y[7:0]>
+// 15:8     <cfg_cache_anc00_c[7:0]>
+// 7:0      <cfg_cache_anc00_y[7:0]>
+#define   VDEC2_MCRCC_CTL2                         (0x2981)
+#define P_VDEC2_MCRCC_CTL2                         (volatile unsigned int *)((0x2981  << 2) + 0xff620000)
+// MCRCC_CTL3
+// 31:24    <cfg_cache_anc11_c[7:0]>
+// 23:16    <cfg_cache_anc11_y[7:0]>
+// 15:8     <cfg_cache_anc10_c[7:0]>
+// 7:0      <cfg_cache_anc10_y[7:0]>
+#define   VDEC2_MCRCC_CTL3                         (0x2982)
+#define P_VDEC2_MCRCC_CTL3                         (volatile unsigned int *)((0x2982  << 2) + 0xff620000)
+// bit[31:10] reserved
+// bit[9:0] sw_clock_gating control
+// [9] vdec clk_en for assist and cbus.
+// [8] vdec clk_en for ddr
+// [7] vdec clk_en for vcpu
+// [6] vdec clk_en for assist
+// [5] vdec clk_en for dblk
+// [4] vdec clk_en for iqidct
+// [3] vdec clk_en for mc
+// [2] vdec clk_en for pic_dc
+// [1] vdec clk_en for psc
+// [0] vdec clk_en for vld
+#define   VDEC2_GCLK_EN                            (0x2983)
+#define P_VDEC2_GCLK_EN                            (volatile unsigned int *)((0x2983  << 2) + 0xff620000)
+// [0]  Reserved
+// [1]  Reserved
+// [2]  Reset assist, mdec's CBUS
+// [3]  Reset mdec's VLD
+// [4]  Reset mdec's VLD
+// [5]  Reset mdec's VLD
+// [6]  Reset mdec's IQIDCT
+// [7]  Reset mdec's MC
+// [8]  Reset mdec's DBLK
+// [9]  Reset mdec's PIC_DC
+// [10] Reset mdec's Pscale
+// [11] Reset vcpu's MCPU
+// [12] Reset vcpu's CCPU
+// [13] Reset mmc_pre_arb
+#define   VDEC2_MDEC_SW_RESET                      (0x2984)
+#define P_VDEC2_MDEC_SW_RESET                      (volatile unsigned int *)((0x2984  << 2) + 0xff620000)
+//DBLK last address 12'h97f
+//
+// Closing file:  mdec_regs.h
+//
+//
+// Reading file:  mdec_regs.h
+//
+//========================================================================
+//  MDEC module level register offset
+//========================================================================
+// -----------------------------------------------
+// CBUS_BASE:  DOS_VDEC_MDEC_CBUS_BASE = 0x09
+// -----------------------------------------------
+#define   HEVC_MC_CTRL_REG                         (0x3900)
+#define P_HEVC_MC_CTRL_REG                         (volatile unsigned int *)((0x3900  << 2) + 0xff620000)
+#define   HEVC_MC_MB_INFO                          (0x3901)
+#define P_HEVC_MC_MB_INFO                          (volatile unsigned int *)((0x3901  << 2) + 0xff620000)
+#define   HEVC_MC_PIC_INFO                         (0x3902)
+#define P_HEVC_MC_PIC_INFO                         (volatile unsigned int *)((0x3902  << 2) + 0xff620000)
+#define   HEVC_MC_HALF_PEL_ONE                     (0x3903)
+#define P_HEVC_MC_HALF_PEL_ONE                     (volatile unsigned int *)((0x3903  << 2) + 0xff620000)
+#define   HEVC_MC_HALF_PEL_TWO                     (0x3904)
+#define P_HEVC_MC_HALF_PEL_TWO                     (volatile unsigned int *)((0x3904  << 2) + 0xff620000)
+#define   HEVC_POWER_CTL_MC                        (0x3905)
+#define P_HEVC_POWER_CTL_MC                        (volatile unsigned int *)((0x3905  << 2) + 0xff620000)
+#define   HEVC_MC_CMD                              (0x3906)
+#define P_HEVC_MC_CMD                              (volatile unsigned int *)((0x3906  << 2) + 0xff620000)
+#define   HEVC_MC_CTRL0                            (0x3907)
+#define P_HEVC_MC_CTRL0                            (volatile unsigned int *)((0x3907  << 2) + 0xff620000)
+#define   HEVC_MC_PIC_W_H                          (0x3908)
+#define P_HEVC_MC_PIC_W_H                          (volatile unsigned int *)((0x3908  << 2) + 0xff620000)
+#define   HEVC_MC_STATUS0                          (0x3909)
+#define P_HEVC_MC_STATUS0                          (volatile unsigned int *)((0x3909  << 2) + 0xff620000)
+#define   HEVC_MC_STATUS1                          (0x390a)
+#define P_HEVC_MC_STATUS1                          (volatile unsigned int *)((0x390a  << 2) + 0xff620000)
+#define   HEVC_MC_CTRL1                            (0x390b)
+#define P_HEVC_MC_CTRL1                            (volatile unsigned int *)((0x390b  << 2) + 0xff620000)
+#define   HEVC_MC_MIX_RATIO0                       (0x390c)
+#define P_HEVC_MC_MIX_RATIO0                       (volatile unsigned int *)((0x390c  << 2) + 0xff620000)
+#define   HEVC_MC_MIX_RATIO1                       (0x390d)
+#define P_HEVC_MC_MIX_RATIO1                       (volatile unsigned int *)((0x390d  << 2) + 0xff620000)
+#define   HEVC_MC_DP_MB_XY                         (0x390e)
+#define P_HEVC_MC_DP_MB_XY                         (volatile unsigned int *)((0x390e  << 2) + 0xff620000)
+#define   HEVC_MC_OM_MB_XY                         (0x390f)
+#define P_HEVC_MC_OM_MB_XY                         (volatile unsigned int *)((0x390f  << 2) + 0xff620000)
+#define   HEVC_PSCALE_RST                          (0x3910)
+#define P_HEVC_PSCALE_RST                          (volatile unsigned int *)((0x3910  << 2) + 0xff620000)
+#define   HEVC_PSCALE_CTRL                         (0x3911)
+#define P_HEVC_PSCALE_CTRL                         (volatile unsigned int *)((0x3911  << 2) + 0xff620000)
+#define   HEVC_PSCALE_PICI_W                       (0x3912)
+#define P_HEVC_PSCALE_PICI_W                       (volatile unsigned int *)((0x3912  << 2) + 0xff620000)
+#define   HEVC_PSCALE_PICI_H                       (0x3913)
+#define P_HEVC_PSCALE_PICI_H                       (volatile unsigned int *)((0x3913  << 2) + 0xff620000)
+#define   HEVC_PSCALE_PICO_W                       (0x3914)
+#define P_HEVC_PSCALE_PICO_W                       (volatile unsigned int *)((0x3914  << 2) + 0xff620000)
+#define   HEVC_PSCALE_PICO_H                       (0x3915)
+#define P_HEVC_PSCALE_PICO_H                       (volatile unsigned int *)((0x3915  << 2) + 0xff620000)
+#define   HEVC_PSCALE_PICO_START_X                 (0x3916)
+#define P_HEVC_PSCALE_PICO_START_X                 (volatile unsigned int *)((0x3916  << 2) + 0xff620000)
+#define   HEVC_PSCALE_PICO_START_Y                 (0x3917)
+#define P_HEVC_PSCALE_PICO_START_Y                 (volatile unsigned int *)((0x3917  << 2) + 0xff620000)
+#define   HEVC_PSCALE_DUMMY                        (0x3918)
+#define P_HEVC_PSCALE_DUMMY                        (volatile unsigned int *)((0x3918  << 2) + 0xff620000)
+#define   HEVC_PSCALE_FILT0_COEF0                  (0x3919)
+#define P_HEVC_PSCALE_FILT0_COEF0                  (volatile unsigned int *)((0x3919  << 2) + 0xff620000)
+#define   HEVC_PSCALE_FILT0_COEF1                  (0x391a)
+#define P_HEVC_PSCALE_FILT0_COEF1                  (volatile unsigned int *)((0x391a  << 2) + 0xff620000)
+#define   HEVC_PSCALE_CMD_CTRL                     (0x391b)
+#define P_HEVC_PSCALE_CMD_CTRL                     (volatile unsigned int *)((0x391b  << 2) + 0xff620000)
+#define   HEVC_PSCALE_CMD_BLK_X                    (0x391c)
+#define P_HEVC_PSCALE_CMD_BLK_X                    (volatile unsigned int *)((0x391c  << 2) + 0xff620000)
+#define   HEVC_PSCALE_CMD_BLK_Y                    (0x391d)
+#define P_HEVC_PSCALE_CMD_BLK_Y                    (volatile unsigned int *)((0x391d  << 2) + 0xff620000)
+#define   HEVC_PSCALE_STATUS                       (0x391e)
+#define P_HEVC_PSCALE_STATUS                       (volatile unsigned int *)((0x391e  << 2) + 0xff620000)
+#define   HEVC_PSCALE_BMEM_ADDR                    (0x391f)
+#define P_HEVC_PSCALE_BMEM_ADDR                    (volatile unsigned int *)((0x391f  << 2) + 0xff620000)
+#define   HEVC_PSCALE_BMEM_DAT                     (0x3920)
+#define P_HEVC_PSCALE_BMEM_DAT                     (volatile unsigned int *)((0x3920  << 2) + 0xff620000)
+#define   HEVC_PSCALE_DRAM_BUF_CTRL                (0x3921)
+#define P_HEVC_PSCALE_DRAM_BUF_CTRL                (volatile unsigned int *)((0x3921  << 2) + 0xff620000)
+#define   HEVC_PSCALE_MCMD_CTRL                    (0x3922)
+#define P_HEVC_PSCALE_MCMD_CTRL                    (volatile unsigned int *)((0x3922  << 2) + 0xff620000)
+#define   HEVC_PSCALE_MCMD_XSIZE                   (0x3923)
+#define P_HEVC_PSCALE_MCMD_XSIZE                   (volatile unsigned int *)((0x3923  << 2) + 0xff620000)
+#define   HEVC_PSCALE_MCMD_YSIZE                   (0x3924)
+#define P_HEVC_PSCALE_MCMD_YSIZE                   (volatile unsigned int *)((0x3924  << 2) + 0xff620000)
+#define   HEVC_PSCALE_RBUF_START_BLKX              (0x3925)
+#define P_HEVC_PSCALE_RBUF_START_BLKX              (volatile unsigned int *)((0x3925  << 2) + 0xff620000)
+#define   HEVC_PSCALE_RBUF_START_BLKY              (0x3926)
+#define P_HEVC_PSCALE_RBUF_START_BLKY              (volatile unsigned int *)((0x3926  << 2) + 0xff620000)
+//`define PSCALE_RBUF_MB_WIDTH   8'h27
+#define   HEVC_PSCALE_PICO_SHIFT_XY                (0x3928)
+#define P_HEVC_PSCALE_PICO_SHIFT_XY                (volatile unsigned int *)((0x3928  << 2) + 0xff620000)
+#define   HEVC_PSCALE_CTRL1                        (0x3929)
+#define P_HEVC_PSCALE_CTRL1                        (volatile unsigned int *)((0x3929  << 2) + 0xff620000)
+//Bit 15, wmask enable
+//Bit 14:13, filt0 srckey_less,
+//Bit 12:11, filt1 srckey_less, in the case of the interpolated data is equal distance to
+//key data and normal data, 00: select normal data, 01: select right data, 10: select key data
+//Bit 10:9, srckey mode, 00: equal, 01: less than or equal, 10: great than or equal
+//Bit 8, src key enable
+//Bit 7:0, y src key
+#define   HEVC_PSCALE_SRCKEY_CTRL0                 (0x392a)
+#define P_HEVC_PSCALE_SRCKEY_CTRL0                 (volatile unsigned int *)((0x392a  << 2) + 0xff620000)
+//Bit 15:8, cb src key
+//Bit 7:0, cr src key
+#define   HEVC_PSCALE_SRCKEY_CTRL1                 (0x392b)
+#define P_HEVC_PSCALE_SRCKEY_CTRL1                 (volatile unsigned int *)((0x392b  << 2) + 0xff620000)
+//Bit 22:16 canvas_rd_addr2
+//Bit 14:8 canvas_rd_addr1
+//Bit 6:0 canvas_rd_addr1
+#define   HEVC_PSCALE_CANVAS_RD_ADDR               (0x392c)
+#define P_HEVC_PSCALE_CANVAS_RD_ADDR               (volatile unsigned int *)((0x392c  << 2) + 0xff620000)
+//Bit 22:16 canvas_wr_addr2
+//Bit 14:8 canvas_wr_addr1
+//Bit 6:0 canvas_wr_addr1
+#define   HEVC_PSCALE_CANVAS_WR_ADDR               (0x392d)
+#define P_HEVC_PSCALE_CANVAS_WR_ADDR               (volatile unsigned int *)((0x392d  << 2) + 0xff620000)
+//bit 13:8 pscale thread ID and token
+//bit 7 disable write response count adding to busy bit
+//bit 5:0  pscale prearbitor burst num
+#define   HEVC_PSCALE_CTRL2                        (0x392e)
+#define P_HEVC_PSCALE_CTRL2                        (volatile unsigned int *)((0x392e  << 2) + 0xff620000)
+//   31 - use_omem_mb_xy_auto
+//23:16 - omem_max_mb_x
+//15:8  - omem_mb_y_auto
+// 7:0  - omem_mb_x_auto
+#define   HEVC_HDEC_MC_OMEM_AUTO                   (0x3930)
+#define P_HEVC_HDEC_MC_OMEM_AUTO                   (volatile unsigned int *)((0x3930  << 2) + 0xff620000)
+#define   HEVC_HDEC_MC_MBRIGHT_IDX                 (0x3931)
+#define P_HEVC_HDEC_MC_MBRIGHT_IDX                 (volatile unsigned int *)((0x3931  << 2) + 0xff620000)
+#define   HEVC_HDEC_MC_MBRIGHT_RD                  (0x3932)
+#define P_HEVC_HDEC_MC_MBRIGHT_RD                  (volatile unsigned int *)((0x3932  << 2) + 0xff620000)
+#define   HEVC_MC_MPORT_CTRL                       (0x3940)
+#define P_HEVC_MC_MPORT_CTRL                       (volatile unsigned int *)((0x3940  << 2) + 0xff620000)
+#define   HEVC_MC_MPORT_DAT                        (0x3941)
+#define P_HEVC_MC_MPORT_DAT                        (volatile unsigned int *)((0x3941  << 2) + 0xff620000)
+#define   HEVC_MC_WT_PRED_CTRL                     (0x3942)
+#define P_HEVC_MC_WT_PRED_CTRL                     (volatile unsigned int *)((0x3942  << 2) + 0xff620000)
+#define   HEVC_MC_MBBOT_ST_EVEN_ADDR               (0x3944)
+#define P_HEVC_MC_MBBOT_ST_EVEN_ADDR               (volatile unsigned int *)((0x3944  << 2) + 0xff620000)
+#define   HEVC_MC_MBBOT_ST_ODD_ADDR                (0x3945)
+#define P_HEVC_MC_MBBOT_ST_ODD_ADDR                (volatile unsigned int *)((0x3945  << 2) + 0xff620000)
+#define   HEVC_MC_DPDN_MB_XY                       (0x3946)
+#define P_HEVC_MC_DPDN_MB_XY                       (volatile unsigned int *)((0x3946  << 2) + 0xff620000)
+#define   HEVC_MC_OMDN_MB_XY                       (0x3947)
+#define P_HEVC_MC_OMDN_MB_XY                       (volatile unsigned int *)((0x3947  << 2) + 0xff620000)
+#define   HEVC_MC_HCMDBUF_H                        (0x3948)
+#define P_HEVC_MC_HCMDBUF_H                        (volatile unsigned int *)((0x3948  << 2) + 0xff620000)
+#define   HEVC_MC_HCMDBUF_L                        (0x3949)
+#define P_HEVC_MC_HCMDBUF_L                        (volatile unsigned int *)((0x3949  << 2) + 0xff620000)
+#define   HEVC_MC_HCMD_H                           (0x394a)
+#define P_HEVC_MC_HCMD_H                           (volatile unsigned int *)((0x394a  << 2) + 0xff620000)
+#define   HEVC_MC_HCMD_L                           (0x394b)
+#define P_HEVC_MC_HCMD_L                           (volatile unsigned int *)((0x394b  << 2) + 0xff620000)
+#define   HEVC_MC_IDCT_DAT                         (0x394c)
+#define P_HEVC_MC_IDCT_DAT                         (volatile unsigned int *)((0x394c  << 2) + 0xff620000)
+#define   HEVC_MC_CTRL_GCLK_CTRL                   (0x394d)
+#define P_HEVC_MC_CTRL_GCLK_CTRL                   (volatile unsigned int *)((0x394d  << 2) + 0xff620000)
+#define   HEVC_MC_OTHER_GCLK_CTRL                  (0x394e)
+#define P_HEVC_MC_OTHER_GCLK_CTRL                  (volatile unsigned int *)((0x394e  << 2) + 0xff620000)
+//Bit 29:24, mbbot thread ID and token
+//Bit 21:16, mc read/write thread ID and token
+//Bit 13:8,  mbbot pre-arbitor burst number
+//Bit 5:0,   mc pre-arbitor burst number
+#define   HEVC_MC_CTRL2                            (0x394f)
+#define P_HEVC_MC_CTRL2                            (volatile unsigned int *)((0x394f  << 2) + 0xff620000)
+// `define DBLK_QUANT            8'h76 // ONLY for $ucode/real/amrisc/rv.s, reg value from apollo
+//`define ANC1_CANVAS_ADDR      8'h80
+//`define ANC2_CANVAS_ADDR      8'h81
+//`define REC_CANVAS_ADDR       8'h89
+//`define MDEC_PIC_W          8'h8c
+//`define MDEC_PIC_H          8'h8d
+// mdec_pic_dc_mux_ctrl[31]  -- mcr_hevc_mode
+#define   HEVC_MDEC_PIC_DC_MUX_CTRL                (0x398d)
+#define P_HEVC_MDEC_PIC_DC_MUX_CTRL                (volatile unsigned int *)((0x398d  << 2) + 0xff620000)
+#define   HEVC_MDEC_PIC_DC_CTRL                    (0x398e)
+#define P_HEVC_MDEC_PIC_DC_CTRL                    (volatile unsigned int *)((0x398e  << 2) + 0xff620000)
+#define   HEVC_MDEC_PIC_DC_STATUS                  (0x398f)
+#define P_HEVC_MDEC_PIC_DC_STATUS                  (volatile unsigned int *)((0x398f  << 2) + 0xff620000)
+#define   HEVC_ANC0_CANVAS_ADDR                    (0x3990)
+#define P_HEVC_ANC0_CANVAS_ADDR                    (volatile unsigned int *)((0x3990  << 2) + 0xff620000)
+#define   HEVC_ANC1_CANVAS_ADDR                    (0x3991)
+#define P_HEVC_ANC1_CANVAS_ADDR                    (volatile unsigned int *)((0x3991  << 2) + 0xff620000)
+#define   HEVC_ANC2_CANVAS_ADDR                    (0x3992)
+#define P_HEVC_ANC2_CANVAS_ADDR                    (volatile unsigned int *)((0x3992  << 2) + 0xff620000)
+#define   HEVC_ANC3_CANVAS_ADDR                    (0x3993)
+#define P_HEVC_ANC3_CANVAS_ADDR                    (volatile unsigned int *)((0x3993  << 2) + 0xff620000)
+#define   HEVC_ANC4_CANVAS_ADDR                    (0x3994)
+#define P_HEVC_ANC4_CANVAS_ADDR                    (volatile unsigned int *)((0x3994  << 2) + 0xff620000)
+#define   HEVC_ANC5_CANVAS_ADDR                    (0x3995)
+#define P_HEVC_ANC5_CANVAS_ADDR                    (volatile unsigned int *)((0x3995  << 2) + 0xff620000)
+#define   HEVC_ANC6_CANVAS_ADDR                    (0x3996)
+#define P_HEVC_ANC6_CANVAS_ADDR                    (volatile unsigned int *)((0x3996  << 2) + 0xff620000)
+#define   HEVC_ANC7_CANVAS_ADDR                    (0x3997)
+#define P_HEVC_ANC7_CANVAS_ADDR                    (volatile unsigned int *)((0x3997  << 2) + 0xff620000)
+#define   HEVC_ANC8_CANVAS_ADDR                    (0x3998)
+#define P_HEVC_ANC8_CANVAS_ADDR                    (volatile unsigned int *)((0x3998  << 2) + 0xff620000)
+#define   HEVC_ANC9_CANVAS_ADDR                    (0x3999)
+#define P_HEVC_ANC9_CANVAS_ADDR                    (volatile unsigned int *)((0x3999  << 2) + 0xff620000)
+#define   HEVC_ANC10_CANVAS_ADDR                   (0x399a)
+#define P_HEVC_ANC10_CANVAS_ADDR                   (volatile unsigned int *)((0x399a  << 2) + 0xff620000)
+#define   HEVC_ANC11_CANVAS_ADDR                   (0x399b)
+#define P_HEVC_ANC11_CANVAS_ADDR                   (volatile unsigned int *)((0x399b  << 2) + 0xff620000)
+#define   HEVC_ANC12_CANVAS_ADDR                   (0x399c)
+#define P_HEVC_ANC12_CANVAS_ADDR                   (volatile unsigned int *)((0x399c  << 2) + 0xff620000)
+#define   HEVC_ANC13_CANVAS_ADDR                   (0x399d)
+#define P_HEVC_ANC13_CANVAS_ADDR                   (volatile unsigned int *)((0x399d  << 2) + 0xff620000)
+#define   HEVC_ANC14_CANVAS_ADDR                   (0x399e)
+#define P_HEVC_ANC14_CANVAS_ADDR                   (volatile unsigned int *)((0x399e  << 2) + 0xff620000)
+#define   HEVC_ANC15_CANVAS_ADDR                   (0x399f)
+#define P_HEVC_ANC15_CANVAS_ADDR                   (volatile unsigned int *)((0x399f  << 2) + 0xff620000)
+#define   HEVC_ANC16_CANVAS_ADDR                   (0x39a0)
+#define P_HEVC_ANC16_CANVAS_ADDR                   (volatile unsigned int *)((0x39a0  << 2) + 0xff620000)
+#define   HEVC_ANC17_CANVAS_ADDR                   (0x39a1)
+#define P_HEVC_ANC17_CANVAS_ADDR                   (volatile unsigned int *)((0x39a1  << 2) + 0xff620000)
+#define   HEVC_ANC18_CANVAS_ADDR                   (0x39a2)
+#define P_HEVC_ANC18_CANVAS_ADDR                   (volatile unsigned int *)((0x39a2  << 2) + 0xff620000)
+#define   HEVC_ANC19_CANVAS_ADDR                   (0x39a3)
+#define P_HEVC_ANC19_CANVAS_ADDR                   (volatile unsigned int *)((0x39a3  << 2) + 0xff620000)
+#define   HEVC_ANC20_CANVAS_ADDR                   (0x39a4)
+#define P_HEVC_ANC20_CANVAS_ADDR                   (volatile unsigned int *)((0x39a4  << 2) + 0xff620000)
+#define   HEVC_ANC21_CANVAS_ADDR                   (0x39a5)
+#define P_HEVC_ANC21_CANVAS_ADDR                   (volatile unsigned int *)((0x39a5  << 2) + 0xff620000)
+#define   HEVC_ANC22_CANVAS_ADDR                   (0x39a6)
+#define P_HEVC_ANC22_CANVAS_ADDR                   (volatile unsigned int *)((0x39a6  << 2) + 0xff620000)
+#define   HEVC_ANC23_CANVAS_ADDR                   (0x39a7)
+#define P_HEVC_ANC23_CANVAS_ADDR                   (volatile unsigned int *)((0x39a7  << 2) + 0xff620000)
+#define   HEVC_ANC24_CANVAS_ADDR                   (0x39a8)
+#define P_HEVC_ANC24_CANVAS_ADDR                   (volatile unsigned int *)((0x39a8  << 2) + 0xff620000)
+#define   HEVC_ANC25_CANVAS_ADDR                   (0x39a9)
+#define P_HEVC_ANC25_CANVAS_ADDR                   (volatile unsigned int *)((0x39a9  << 2) + 0xff620000)
+#define   HEVC_ANC26_CANVAS_ADDR                   (0x39aa)
+#define P_HEVC_ANC26_CANVAS_ADDR                   (volatile unsigned int *)((0x39aa  << 2) + 0xff620000)
+#define   HEVC_ANC27_CANVAS_ADDR                   (0x39ab)
+#define P_HEVC_ANC27_CANVAS_ADDR                   (volatile unsigned int *)((0x39ab  << 2) + 0xff620000)
+#define   HEVC_ANC28_CANVAS_ADDR                   (0x39ac)
+#define P_HEVC_ANC28_CANVAS_ADDR                   (volatile unsigned int *)((0x39ac  << 2) + 0xff620000)
+#define   HEVC_ANC29_CANVAS_ADDR                   (0x39ad)
+#define P_HEVC_ANC29_CANVAS_ADDR                   (volatile unsigned int *)((0x39ad  << 2) + 0xff620000)
+#define   HEVC_ANC30_CANVAS_ADDR                   (0x39ae)
+#define P_HEVC_ANC30_CANVAS_ADDR                   (volatile unsigned int *)((0x39ae  << 2) + 0xff620000)
+#define   HEVC_ANC31_CANVAS_ADDR                   (0x39af)
+#define P_HEVC_ANC31_CANVAS_ADDR                   (volatile unsigned int *)((0x39af  << 2) + 0xff620000)
+#define   HEVC_DBKR_CANVAS_ADDR                    (0x39b0)
+#define P_HEVC_DBKR_CANVAS_ADDR                    (volatile unsigned int *)((0x39b0  << 2) + 0xff620000)
+#define   HEVC_DBKW_CANVAS_ADDR                    (0x39b1)
+#define P_HEVC_DBKW_CANVAS_ADDR                    (volatile unsigned int *)((0x39b1  << 2) + 0xff620000)
+#define   HEVC_REC_CANVAS_ADDR                     (0x39b2)
+#define P_HEVC_REC_CANVAS_ADDR                     (volatile unsigned int *)((0x39b2  << 2) + 0xff620000)
+//28:24, read/write, current canvas idx, used in h264 only now
+//23:0, read only, current canvas address, 23:16, Cr canvas addr, 15:8, Cb canvas addr, 7:0, Y  canvas addr
+#define   HEVC_CURR_CANVAS_CTRL                    (0x39b3)
+#define P_HEVC_CURR_CANVAS_CTRL                    (volatile unsigned int *)((0x39b3  << 2) + 0xff620000)
+#define   HEVC_MDEC_PIC_DC_THRESH                  (0x39b8)
+#define P_HEVC_MDEC_PIC_DC_THRESH                  (volatile unsigned int *)((0x39b8  << 2) + 0xff620000)
+#define   HEVC_MDEC_PICR_BUF_STATUS                (0x39b9)
+#define P_HEVC_MDEC_PICR_BUF_STATUS                (volatile unsigned int *)((0x39b9  << 2) + 0xff620000)
+#define   HEVC_MDEC_PICW_BUF_STATUS                (0x39ba)
+#define P_HEVC_MDEC_PICW_BUF_STATUS                (volatile unsigned int *)((0x39ba  << 2) + 0xff620000)
+#define   HEVC_MCW_DBLK_WRRSP_CNT                  (0x39bb)
+#define P_HEVC_MCW_DBLK_WRRSP_CNT                  (volatile unsigned int *)((0x39bb  << 2) + 0xff620000)
+#define   HEVC_MC_MBBOT_WRRSP_CNT                  (0x39bc)
+#define P_HEVC_MC_MBBOT_WRRSP_CNT                  (volatile unsigned int *)((0x39bc  << 2) + 0xff620000)
+#define   HEVC_MDEC_PICW_BUF2_STATUS               (0x39bd)
+#define P_HEVC_MDEC_PICW_BUF2_STATUS               (volatile unsigned int *)((0x39bd  << 2) + 0xff620000)
+#define   HEVC_WRRSP_FIFO_PICW_DBK                 (0x39be)
+#define P_HEVC_WRRSP_FIFO_PICW_DBK                 (volatile unsigned int *)((0x39be  << 2) + 0xff620000)
+#define   HEVC_WRRSP_FIFO_PICW_MC                  (0x39bf)
+#define P_HEVC_WRRSP_FIFO_PICW_MC                  (volatile unsigned int *)((0x39bf  << 2) + 0xff620000)
+#define   HEVC_AV_SCRATCH_0                        (0x39c0)
+#define P_HEVC_AV_SCRATCH_0                        (volatile unsigned int *)((0x39c0  << 2) + 0xff620000)
+#define   HEVC_AV_SCRATCH_1                        (0x39c1)
+#define P_HEVC_AV_SCRATCH_1                        (volatile unsigned int *)((0x39c1  << 2) + 0xff620000)
+#define   HEVC_AV_SCRATCH_2                        (0x39c2)
+#define P_HEVC_AV_SCRATCH_2                        (volatile unsigned int *)((0x39c2  << 2) + 0xff620000)
+#define   HEVC_AV_SCRATCH_3                        (0x39c3)
+#define P_HEVC_AV_SCRATCH_3                        (volatile unsigned int *)((0x39c3  << 2) + 0xff620000)
+#define   HEVC_AV_SCRATCH_4                        (0x39c4)
+#define P_HEVC_AV_SCRATCH_4                        (volatile unsigned int *)((0x39c4  << 2) + 0xff620000)
+#define   HEVC_AV_SCRATCH_5                        (0x39c5)
+#define P_HEVC_AV_SCRATCH_5                        (volatile unsigned int *)((0x39c5  << 2) + 0xff620000)
+#define   HEVC_AV_SCRATCH_6                        (0x39c6)
+#define P_HEVC_AV_SCRATCH_6                        (volatile unsigned int *)((0x39c6  << 2) + 0xff620000)
+#define   HEVC_AV_SCRATCH_7                        (0x39c7)
+#define P_HEVC_AV_SCRATCH_7                        (volatile unsigned int *)((0x39c7  << 2) + 0xff620000)
+#define   HEVC_AV_SCRATCH_8                        (0x39c8)
+#define P_HEVC_AV_SCRATCH_8                        (volatile unsigned int *)((0x39c8  << 2) + 0xff620000)
+#define   HEVC_AV_SCRATCH_9                        (0x39c9)
+#define P_HEVC_AV_SCRATCH_9                        (volatile unsigned int *)((0x39c9  << 2) + 0xff620000)
+#define   HEVC_AV_SCRATCH_A                        (0x39ca)
+#define P_HEVC_AV_SCRATCH_A                        (volatile unsigned int *)((0x39ca  << 2) + 0xff620000)
+#define   HEVC_AV_SCRATCH_B                        (0x39cb)
+#define P_HEVC_AV_SCRATCH_B                        (volatile unsigned int *)((0x39cb  << 2) + 0xff620000)
+#define   HEVC_AV_SCRATCH_C                        (0x39cc)
+#define P_HEVC_AV_SCRATCH_C                        (volatile unsigned int *)((0x39cc  << 2) + 0xff620000)
+#define   HEVC_AV_SCRATCH_D                        (0x39cd)
+#define P_HEVC_AV_SCRATCH_D                        (volatile unsigned int *)((0x39cd  << 2) + 0xff620000)
+#define   HEVC_AV_SCRATCH_E                        (0x39ce)
+#define P_HEVC_AV_SCRATCH_E                        (volatile unsigned int *)((0x39ce  << 2) + 0xff620000)
+#define   HEVC_AV_SCRATCH_F                        (0x39cf)
+#define P_HEVC_AV_SCRATCH_F                        (volatile unsigned int *)((0x39cf  << 2) + 0xff620000)
+#define   HEVC_AV_SCRATCH_G                        (0x39d0)
+#define P_HEVC_AV_SCRATCH_G                        (volatile unsigned int *)((0x39d0  << 2) + 0xff620000)
+#define   HEVC_AV_SCRATCH_H                        (0x39d1)
+#define P_HEVC_AV_SCRATCH_H                        (volatile unsigned int *)((0x39d1  << 2) + 0xff620000)
+#define   HEVC_AV_SCRATCH_I                        (0x39d2)
+#define P_HEVC_AV_SCRATCH_I                        (volatile unsigned int *)((0x39d2  << 2) + 0xff620000)
+#define   HEVC_AV_SCRATCH_J                        (0x39d3)
+#define P_HEVC_AV_SCRATCH_J                        (volatile unsigned int *)((0x39d3  << 2) + 0xff620000)
+#define   HEVC_AV_SCRATCH_K                        (0x39d4)
+#define P_HEVC_AV_SCRATCH_K                        (volatile unsigned int *)((0x39d4  << 2) + 0xff620000)
+#define   HEVC_AV_SCRATCH_L                        (0x39d5)
+#define P_HEVC_AV_SCRATCH_L                        (volatile unsigned int *)((0x39d5  << 2) + 0xff620000)
+#define   HEVC_AV_SCRATCH_M                        (0x39d6)
+#define P_HEVC_AV_SCRATCH_M                        (volatile unsigned int *)((0x39d6  << 2) + 0xff620000)
+#define   HEVC_AV_SCRATCH_N                        (0x39d7)
+#define P_HEVC_AV_SCRATCH_N                        (volatile unsigned int *)((0x39d7  << 2) + 0xff620000)
+// bit[29:24] A_brst_num_co_mb
+// bit[21:16] A_id_co_mb
+// bit[11:0] wrrsp_count_co_mb
+#define   HEVC_WRRSP_CO_MB                         (0x39d8)
+#define P_HEVC_WRRSP_CO_MB                         (volatile unsigned int *)((0x39d8  << 2) + 0xff620000)
+// bit[29:24] A_brst_num_dcac
+// bit[21:16] A_id_dcac
+// bit[11:0] wrrsp_count_dcac
+#define   HEVC_WRRSP_DCAC                          (0x39d9)
+#define P_HEVC_WRRSP_DCAC                          (volatile unsigned int *)((0x39d9  << 2) + 0xff620000)
+// bit[11:0] wrrsp_count_vld
+#define   HEVC_WRRSP_VLD                           (0x39da)
+#define P_HEVC_WRRSP_VLD                           (volatile unsigned int *)((0x39da  << 2) + 0xff620000)
+// doublew_cfg0[0];     //       Second Channel Enable, 1:Enable 0:Disable
+// doublew_cfg0[3:1];   // [2:0] Endian Control for Luma
+// doublew_cfg0[5:4];   // [1:0] Pixel sel by horizontal, 0x:1/2 10:left 11:right
+// doublew_cfg0[7:6];   // [1:0] Pixel sel by vertical,   0x:1/2 10:up 11:down
+// doublew_cfg0[8];     //       Size by horizontal, 0:original size 1: 1/2 shrunken size
+// doublew_cfg0[9];     //       Size by vertical,   0:original size 1: 1/2 shrunken size
+// doublew_cfg0[10];    //       1:Round 0:Truncation
+// doublew_cfg0[11];    //       DMA Urgent
+// doublew_cfg0[17:12]; // [5:0] DMA Burst Number
+// doublew_cfg0[23:18]; // [5:0] DMA ID
+// doublew_cfg0[26:24]; // [2:0] Endian Control for Chroma
+// doublew_cfg0[27];    //       Source from, 1:MCW 0:DBLK
+// doublew_cfg0[29:28]; // [1:0] 0x:select both top and bottom 10:select top 11:select bottom
+// doublew_cfg0[30];    //       0:no merge 1:automatic merge
+// doublew_cfg0[31];    //       0:Y addr no change 1:Y addr divided to half
+#define   HEVC_MDEC_DOUBLEW_CFG0                   (0x39db)
+#define P_HEVC_MDEC_DOUBLEW_CFG0                   (volatile unsigned int *)((0x39db  << 2) + 0xff620000)
+// doublew_cfg1[7:0];   // [7:0] DMA Canvas Address for Luma
+// doublew_cfg1[15:8];  // [7:0] DMA Canvas Address for Chroma
+// doublew_cfg1[16];    //       Disable 1st Write -
+// doublew_cfg1[17];    //       Reverse to original version -
+// doublew_cfg1[18];    //       DMA Address Mode - 0:Canvas Mode 1:Non-Canvas Mode
+#define   HEVC_MDEC_DOUBLEW_CFG1                   (0x39dc)
+#define P_HEVC_MDEC_DOUBLEW_CFG1                   (volatile unsigned int *)((0x39dc  << 2) + 0xff620000)
+// doublew_cfg2[11:0];  //[11:0] vertical flip initial value
+// doublew_cfg2[15];    //       vertical flip enable
+// doublew_cfg2[24:16]; // [8:0] horizontal flip initial value
+// doublew_cfg2[31];    //       horizontal flip enable
+#define   HEVC_MDEC_DOUBLEW_CFG2                   (0x39dd)
+#define P_HEVC_MDEC_DOUBLEW_CFG2                   (volatile unsigned int *)((0x39dd  << 2) + 0xff620000)
+// doublew_cfg3[31:0];  //[31:0] non-canvas start address for Luma -
+#define   HEVC_MDEC_DOUBLEW_CFG3                   (0x39de)
+#define P_HEVC_MDEC_DOUBLEW_CFG3                   (volatile unsigned int *)((0x39de  << 2) + 0xff620000)
+// doublew_cfg4[31:0];  //[31:0] non-canvas start address for Chroma -
+#define   HEVC_MDEC_DOUBLEW_CFG4                   (0x39df)
+#define P_HEVC_MDEC_DOUBLEW_CFG4                   (volatile unsigned int *)((0x39df  << 2) + 0xff620000)
+// doublew_cfg5[12:0];  //[12:0] non-canvas picture width for Luma -
+// doublew_cfg5[28:16]; //[12:0] non-canvas picture width for Chroma -
+#define   HEVC_MDEC_DOUBLEW_CFG5                   (0x39e0)
+#define P_HEVC_MDEC_DOUBLEW_CFG5                   (volatile unsigned int *)((0x39e0  << 2) + 0xff620000)
+// doublew_cfg6: reserved
+#define   HEVC_MDEC_DOUBLEW_CFG6                   (0x39e1)
+#define P_HEVC_MDEC_DOUBLEW_CFG6                   (volatile unsigned int *)((0x39e1  << 2) + 0xff620000)
+// doublew_cfg7: reserved
+#define   HEVC_MDEC_DOUBLEW_CFG7                   (0x39e2)
+#define P_HEVC_MDEC_DOUBLEW_CFG7                   (volatile unsigned int *)((0x39e2  << 2) + 0xff620000)
+// doublew_status[11:0];//[11:0] wrrsp_count_doublew
+// doublew_status[12];  //       doublew_status_busy
+// doublew_status[13];  //       doublew_status_error
+#define   HEVC_MDEC_DOUBLEW_STATUS                 (0x39e3)
+#define P_HEVC_MDEC_DOUBLEW_STATUS                 (volatile unsigned int *)((0x39e3  << 2) + 0xff620000)
+#define   HEVC_MDEC_EXTIF_CFG0                     (0x39e4)
+#define P_HEVC_MDEC_EXTIF_CFG0                     (volatile unsigned int *)((0x39e4  << 2) + 0xff620000)
+#define   HEVC_MDEC_EXTIF_CFG1                     (0x39e5)
+#define P_HEVC_MDEC_EXTIF_CFG1                     (volatile unsigned int *)((0x39e5  << 2) + 0xff620000)
+#define   HEVC_MDEC_EXTIF_STS0                     (0x39e6)
+#define P_HEVC_MDEC_EXTIF_STS0                     (volatile unsigned int *)((0x39e6  << 2) + 0xff620000)
+//======================================
+//  MC Control Register Bits
+//
+//======================================
+// For bits, just copy the defines...don't translate to addresses
+    //`define MC_RESET	    16'h0002
+//======================================
+//  MB Info Register Bits
+//
+//======================================
+//======================================
+//  MB Info Register Bits
+//
+//======================================
+//========================================================================
+// DBLK Register:  12'h950 - 12'h97f
+//========================================================================
+#define   HEVC_DBLK_RST                            (0x3950)
+#define P_HEVC_DBLK_RST                            (volatile unsigned int *)((0x3950  << 2) + 0xff620000)
+#define   HEVC_DBLK_CTRL                           (0x3951)
+#define P_HEVC_DBLK_CTRL                           (volatile unsigned int *)((0x3951  << 2) + 0xff620000)
+#define   HEVC_DBLK_MB_WID_HEIGHT                  (0x3952)
+#define P_HEVC_DBLK_MB_WID_HEIGHT                  (volatile unsigned int *)((0x3952  << 2) + 0xff620000)
+#define   HEVC_DBLK_STATUS                         (0x3953)
+#define P_HEVC_DBLK_STATUS                         (volatile unsigned int *)((0x3953  << 2) + 0xff620000)
+#define   HEVC_DBLK_CMD_CTRL                       (0x3954)
+#define P_HEVC_DBLK_CMD_CTRL                       (volatile unsigned int *)((0x3954  << 2) + 0xff620000)
+#define   HEVC_DBLK_MB_XY                          (0x3955)
+#define P_HEVC_DBLK_MB_XY                          (volatile unsigned int *)((0x3955  << 2) + 0xff620000)
+#define   HEVC_DBLK_QP                             (0x3956)
+#define P_HEVC_DBLK_QP                             (volatile unsigned int *)((0x3956  << 2) + 0xff620000)
+#define   HEVC_DBLK_Y_BHFILT                       (0x3957)
+#define P_HEVC_DBLK_Y_BHFILT                       (volatile unsigned int *)((0x3957  << 2) + 0xff620000)
+#define   HEVC_DBLK_Y_BHFILT_HIGH                  (0x3958)
+#define P_HEVC_DBLK_Y_BHFILT_HIGH                  (volatile unsigned int *)((0x3958  << 2) + 0xff620000)
+#define   HEVC_DBLK_Y_BVFILT                       (0x3959)
+#define P_HEVC_DBLK_Y_BVFILT                       (volatile unsigned int *)((0x3959  << 2) + 0xff620000)
+#define   HEVC_DBLK_CB_BFILT                       (0x395a)
+#define P_HEVC_DBLK_CB_BFILT                       (volatile unsigned int *)((0x395a  << 2) + 0xff620000)
+#define   HEVC_DBLK_CR_BFILT                       (0x395b)
+#define P_HEVC_DBLK_CR_BFILT                       (volatile unsigned int *)((0x395b  << 2) + 0xff620000)
+#define   HEVC_DBLK_Y_HFILT                        (0x395c)
+#define P_HEVC_DBLK_Y_HFILT                        (volatile unsigned int *)((0x395c  << 2) + 0xff620000)
+#define   HEVC_DBLK_Y_HFILT_HIGH                   (0x395d)
+#define P_HEVC_DBLK_Y_HFILT_HIGH                   (volatile unsigned int *)((0x395d  << 2) + 0xff620000)
+#define   HEVC_DBLK_Y_VFILT                        (0x395e)
+#define P_HEVC_DBLK_Y_VFILT                        (volatile unsigned int *)((0x395e  << 2) + 0xff620000)
+#define   HEVC_DBLK_CB_FILT                        (0x395f)
+#define P_HEVC_DBLK_CB_FILT                        (volatile unsigned int *)((0x395f  << 2) + 0xff620000)
+#define   HEVC_DBLK_CR_FILT                        (0x3960)
+#define P_HEVC_DBLK_CR_FILT                        (volatile unsigned int *)((0x3960  << 2) + 0xff620000)
+#define   HEVC_DBLK_BETAX_QP_SEL                   (0x3961)
+#define P_HEVC_DBLK_BETAX_QP_SEL                   (volatile unsigned int *)((0x3961  << 2) + 0xff620000)
+#define   HEVC_DBLK_CLIP_CTRL0                     (0x3962)
+#define P_HEVC_DBLK_CLIP_CTRL0                     (volatile unsigned int *)((0x3962  << 2) + 0xff620000)
+#define   HEVC_DBLK_CLIP_CTRL1                     (0x3963)
+#define P_HEVC_DBLK_CLIP_CTRL1                     (volatile unsigned int *)((0x3963  << 2) + 0xff620000)
+#define   HEVC_DBLK_CLIP_CTRL2                     (0x3964)
+#define P_HEVC_DBLK_CLIP_CTRL2                     (volatile unsigned int *)((0x3964  << 2) + 0xff620000)
+#define   HEVC_DBLK_CLIP_CTRL3                     (0x3965)
+#define P_HEVC_DBLK_CLIP_CTRL3                     (volatile unsigned int *)((0x3965  << 2) + 0xff620000)
+#define   HEVC_DBLK_CLIP_CTRL4                     (0x3966)
+#define P_HEVC_DBLK_CLIP_CTRL4                     (volatile unsigned int *)((0x3966  << 2) + 0xff620000)
+#define   HEVC_DBLK_CLIP_CTRL5                     (0x3967)
+#define P_HEVC_DBLK_CLIP_CTRL5                     (volatile unsigned int *)((0x3967  << 2) + 0xff620000)
+#define   HEVC_DBLK_CLIP_CTRL6                     (0x3968)
+#define P_HEVC_DBLK_CLIP_CTRL6                     (volatile unsigned int *)((0x3968  << 2) + 0xff620000)
+#define   HEVC_DBLK_CLIP_CTRL7                     (0x3969)
+#define P_HEVC_DBLK_CLIP_CTRL7                     (volatile unsigned int *)((0x3969  << 2) + 0xff620000)
+#define   HEVC_DBLK_CLIP_CTRL8                     (0x396a)
+#define P_HEVC_DBLK_CLIP_CTRL8                     (volatile unsigned int *)((0x396a  << 2) + 0xff620000)
+#define   HEVC_DBLK_STATUS1                        (0x396b)
+#define P_HEVC_DBLK_STATUS1                        (volatile unsigned int *)((0x396b  << 2) + 0xff620000)
+#define   HEVC_DBLK_GCLK_FREE                      (0x396c)
+#define P_HEVC_DBLK_GCLK_FREE                      (volatile unsigned int *)((0x396c  << 2) + 0xff620000)
+#define   HEVC_DBLK_GCLK_OFF                       (0x396d)
+#define P_HEVC_DBLK_GCLK_OFF                       (volatile unsigned int *)((0x396d  << 2) + 0xff620000)
+#define   HEVC_DBLK_AVSFLAGS                       (0x396e)
+#define P_HEVC_DBLK_AVSFLAGS                       (volatile unsigned int *)((0x396e  << 2) + 0xff620000)
+// bit 15:0
+#define   HEVC_DBLK_CBPY                           (0x3970)
+#define P_HEVC_DBLK_CBPY                           (volatile unsigned int *)((0x3970  << 2) + 0xff620000)
+// bit 11:8 -- deblk_cbpy_bottom
+// bit 7:4 -- deblk_cbpy_left
+// bit 3:0 -- deblk_cbpy_top
+#define   HEVC_DBLK_CBPY_ADJ                       (0x3971)
+#define P_HEVC_DBLK_CBPY_ADJ                       (volatile unsigned int *)((0x3971  << 2) + 0xff620000)
+// bit 7:0 -- deblk_cbpc
+#define   HEVC_DBLK_CBPC                           (0x3972)
+#define P_HEVC_DBLK_CBPC                           (volatile unsigned int *)((0x3972  << 2) + 0xff620000)
+// bit 15 -- bottom_mb
+// bit 14 -- left_mb
+// bit 13 -- top_mb
+// bit 12 -- reserved
+// bit 11:8 -- deblk_cbpc_bottom
+// bit 7:4 -- deblk_cbpc_left
+// bit 3:0 -- deblk_cbpc_top
+#define   HEVC_DBLK_CBPC_ADJ                       (0x3973)
+#define P_HEVC_DBLK_CBPC_ADJ                       (volatile unsigned int *)((0x3973  << 2) + 0xff620000)
+// bit 15:8 -- deblk_hmvd   -- {left_1, left_0, below_1, below_0, block3-0}
+// bit 7:0 -- deblk_vmvd    -- {top_1, top_0, below_1, below_0, block3-0}
+#define   HEVC_DBLK_VHMVD                          (0x3974)
+#define P_HEVC_DBLK_VHMVD                          (volatile unsigned int *)((0x3974  << 2) + 0xff620000)
+// bit 13:12 -- right_vmvd
+// bit 11 -- right_above_vmvd
+// bit 10 -- left_below_hmvd
+// bit 9 -- disable_dblk_luma
+// bit 8 -- disable_dblk_chroma
+// bit 7 -- bBelowRefDiff
+// bit 6 -- bLeftRefDiff
+// bit 5 -- bAboveRefDiff
+// bit 4 -- reserved
+// bit 3 -- s_below
+// bit 2 -- s_left
+// bit 1 -- s_above
+// bit 0 -- s
+#define   HEVC_DBLK_STRONG                         (0x3975)
+#define P_HEVC_DBLK_STRONG                         (volatile unsigned int *)((0x3975  << 2) + 0xff620000)
+// bit 14:10 -- PQUANT
+// bit 9:5 -- left_PQUANT
+// bit 4:0 -- top_PQUANT
+#define   HEVC_DBLK_RV8_QUANT                      (0x3976)
+#define P_HEVC_DBLK_RV8_QUANT                      (volatile unsigned int *)((0x3976  << 2) + 0xff620000)
+#define   HEVC_DBLK_CBUS_HCMD2                     (0x3977)
+#define P_HEVC_DBLK_CBUS_HCMD2                     (volatile unsigned int *)((0x3977  << 2) + 0xff620000)
+#define   HEVC_DBLK_CBUS_HCMD1                     (0x3978)
+#define P_HEVC_DBLK_CBUS_HCMD1                     (volatile unsigned int *)((0x3978  << 2) + 0xff620000)
+#define   HEVC_DBLK_CBUS_HCMD0                     (0x3979)
+#define P_HEVC_DBLK_CBUS_HCMD0                     (volatile unsigned int *)((0x3979  << 2) + 0xff620000)
+#define   HEVC_DBLK_VLD_HCMD2                      (0x397a)
+#define P_HEVC_DBLK_VLD_HCMD2                      (volatile unsigned int *)((0x397a  << 2) + 0xff620000)
+#define   HEVC_DBLK_VLD_HCMD1                      (0x397b)
+#define P_HEVC_DBLK_VLD_HCMD1                      (volatile unsigned int *)((0x397b  << 2) + 0xff620000)
+#define   HEVC_DBLK_VLD_HCMD0                      (0x397c)
+#define P_HEVC_DBLK_VLD_HCMD0                      (volatile unsigned int *)((0x397c  << 2) + 0xff620000)
+#define   HEVC_DBLK_OST_YBASE                      (0x397d)
+#define P_HEVC_DBLK_OST_YBASE                      (volatile unsigned int *)((0x397d  << 2) + 0xff620000)
+#define   HEVC_DBLK_OST_CBCRDIFF                   (0x397e)
+#define P_HEVC_DBLK_OST_CBCRDIFF                   (volatile unsigned int *)((0x397e  << 2) + 0xff620000)
+//13:8 dblk thread ID and token
+//5:0  dblk prearbitor burst num
+#define   HEVC_DBLK_CTRL1                          (0x397f)
+#define P_HEVC_DBLK_CTRL1                          (volatile unsigned int *)((0x397f  << 2) + 0xff620000)
+// MCRCC_CTL1
+// 31:3  <reserved[23:0]>
+// 2     <cfg_field_pic>
+// 1     <sw_rst>
+// 0     <bypass_en>
+#define   HEVC_MCRCC_CTL1                          (0x3980)
+#define P_HEVC_MCRCC_CTL1                          (volatile unsigned int *)((0x3980  << 2) + 0xff620000)
+// MCRCC_CTL2
+// 31:24    <cfg_cache_anc01_c[7:0]>
+// 23:16    <cfg_cache_anc01_y[7:0]>
+// 15:8     <cfg_cache_anc00_c[7:0]>
+// 7:0      <cfg_cache_anc00_y[7:0]>
+#define   HEVC_MCRCC_CTL2                          (0x3981)
+#define P_HEVC_MCRCC_CTL2                          (volatile unsigned int *)((0x3981  << 2) + 0xff620000)
+// MCRCC_CTL3
+// 31:24    <cfg_cache_anc11_c[7:0]>
+// 23:16    <cfg_cache_anc11_y[7:0]>
+// 15:8     <cfg_cache_anc10_c[7:0]>
+// 7:0      <cfg_cache_anc10_y[7:0]>
+#define   HEVC_MCRCC_CTL3                          (0x3982)
+#define P_HEVC_MCRCC_CTL3                          (volatile unsigned int *)((0x3982  << 2) + 0xff620000)
+// bit[31:10] reserved
+// bit[9:0] sw_clock_gating control
+// [9] vdec clk_en for assist and cbus.
+// [8] vdec clk_en for ddr
+// [7] vdec clk_en for vcpu
+// [6] vdec clk_en for assist
+// [5] vdec clk_en for dblk
+// [4] vdec clk_en for iqidct
+// [3] vdec clk_en for mc
+// [2] vdec clk_en for pic_dc
+// [1] vdec clk_en for psc
+// [0] vdec clk_en for vld
+#define   HEVC_GCLK_EN                             (0x3983)
+#define P_HEVC_GCLK_EN                             (volatile unsigned int *)((0x3983  << 2) + 0xff620000)
+// [0]  Reserved
+// [1]  Reserved
+// [2]  Reset assist, mdec's CBUS
+// [3]  Reset mdec's VLD
+// [4]  Reset mdec's VLD
+// [5]  Reset mdec's VLD
+// [6]  Reset mdec's IQIDCT
+// [7]  Reset mdec's MC
+// [8]  Reset mdec's DBLK
+// [9]  Reset mdec's PIC_DC
+// [10] Reset mdec's Pscale
+// [11] Reset vcpu's MCPU
+// [12] Reset vcpu's CCPU
+// [13] Reset mmc_pre_arb
+#define   HEVC_MDEC_SW_RESET                       (0x3984)
+#define P_HEVC_MDEC_SW_RESET                       (volatile unsigned int *)((0x3984  << 2) + 0xff620000)
+//DBLK last address 12'h97f
+//
+// Closing file:  mdec_regs.h
+//
+//
+// Reading file:  vld_regs.h
+//
+//========================================================================
+//  VLD module level register offset
+//========================================================================
+// -----------------------------------------------
+// CBUS_BASE:  DOS_VDEC_VLD_CBUS_BASE = 0x0c
+// -----------------------------------------------
+#define   HCODEC_VLD_STATUS_CTRL                   (0x1c00)
+#define P_HCODEC_VLD_STATUS_CTRL                   (volatile unsigned int *)((0x1c00  << 2) + 0xff620000)
+//
+// bit 10 -- use_old_shift_en
+// bit 9 -- output_mv_not_pmv
+// bit 8:5 -- force_zigzag
+// bit 4 -- force_zigzag_en
+// bit 3 -- disable_viff_anempty_int
+// bit 2 -- disable_m2_ac_coeff_one_cycle
+// bit 1 -- forced_reset  force reset pmv
+// bit 0 -- mpeg_type  0:mpeg1 1: mpeg2
+#define   HCODEC_MPEG1_2_REG                       (0x1c01)
+#define P_HCODEC_MPEG1_2_REG                       (volatile unsigned int *)((0x1c01  << 2) + 0xff620000)
+#define   HCODEC_F_CODE_REG                        (0x1c02)
+#define P_HCODEC_F_CODE_REG                        (volatile unsigned int *)((0x1c02  << 2) + 0xff620000)
+#define   HCODEC_PIC_HEAD_INFO                     (0x1c03)
+#define P_HCODEC_PIC_HEAD_INFO                     (volatile unsigned int *)((0x1c03  << 2) + 0xff620000)
+#define   HCODEC_SLICE_VER_POS_PIC_TYPE            (0x1c04)
+#define P_HCODEC_SLICE_VER_POS_PIC_TYPE            (volatile unsigned int *)((0x1c04  << 2) + 0xff620000)
+#define   HCODEC_QP_VALUE_REG                      (0x1c05)
+#define P_HCODEC_QP_VALUE_REG                      (volatile unsigned int *)((0x1c05  << 2) + 0xff620000)
+#define   HCODEC_MBA_INC                           (0x1c06)
+#define P_HCODEC_MBA_INC                           (volatile unsigned int *)((0x1c06  << 2) + 0xff620000)
+#define   HCODEC_MB_MOTION_MODE                    (0x1c07)
+#define P_HCODEC_MB_MOTION_MODE                    (volatile unsigned int *)((0x1c07  << 2) + 0xff620000)
+//`define PACKET_BYTE_COUNT   8'h08
+// bit 15 -- force_search_startcode_en
+// bit 14 -- int_cpu_when_error (before do anything)
+// bit 13 -- vld_error_reset
+// bit 12 -- return_on_slice_header
+// bit 6 -- jpeg_ff00_en
+// bit 5:0 -- vld_power_ctl
+#define   HCODEC_POWER_CTL_VLD                     (0x1c08)
+#define P_HCODEC_POWER_CTL_VLD                     (volatile unsigned int *)((0x1c08  << 2) + 0xff620000)
+#define   HCODEC_MB_WIDTH                          (0x1c09)
+#define P_HCODEC_MB_WIDTH                          (volatile unsigned int *)((0x1c09  << 2) + 0xff620000)
+#define   HCODEC_SLICE_QP                          (0x1c0a)
+#define P_HCODEC_SLICE_QP                          (volatile unsigned int *)((0x1c0a  << 2) + 0xff620000)
+// `define MB_X_MB_Y           8'h0b   /* current MBX and MBY                  */
+#define   HCODEC_PRE_START_CODE                    (0x1c0b)
+#define P_HCODEC_PRE_START_CODE                    (volatile unsigned int *)((0x1c0b  << 2) + 0xff620000)
+#define   HCODEC_SLICE_START_BYTE_01               (0x1c0c)
+#define P_HCODEC_SLICE_START_BYTE_01               (volatile unsigned int *)((0x1c0c  << 2) + 0xff620000)
+#define   HCODEC_SLICE_START_BYTE_23               (0x1c0d)
+#define P_HCODEC_SLICE_START_BYTE_23               (volatile unsigned int *)((0x1c0d  << 2) + 0xff620000)
+#define   HCODEC_RESYNC_MARKER_LENGTH              (0x1c0e)
+#define P_HCODEC_RESYNC_MARKER_LENGTH              (volatile unsigned int *)((0x1c0e  << 2) + 0xff620000)
+// bit[6:5] - frame/field info, 01 - top, 10 - bottom, 11 - frame
+// bit[4:0] - buffer ID
+// L0_BUFF_ID_0, L0_BUFF_ID_1, L1_BUFF_ID_0, L1_BUFF_ID_1
+#define   HCODEC_DECODER_BUFFER_INFO               (0x1c0f)
+#define P_HCODEC_DECODER_BUFFER_INFO               (volatile unsigned int *)((0x1c0f  << 2) + 0xff620000)
+#define   HCODEC_FST_FOR_MV_X                      (0x1c10)
+#define P_HCODEC_FST_FOR_MV_X                      (volatile unsigned int *)((0x1c10  << 2) + 0xff620000)
+#define   HCODEC_FST_FOR_MV_Y                      (0x1c11)
+#define P_HCODEC_FST_FOR_MV_Y                      (volatile unsigned int *)((0x1c11  << 2) + 0xff620000)
+#define   HCODEC_SCD_FOR_MV_X                      (0x1c12)
+#define P_HCODEC_SCD_FOR_MV_X                      (volatile unsigned int *)((0x1c12  << 2) + 0xff620000)
+#define   HCODEC_SCD_FOR_MV_Y                      (0x1c13)
+#define P_HCODEC_SCD_FOR_MV_Y                      (volatile unsigned int *)((0x1c13  << 2) + 0xff620000)
+#define   HCODEC_FST_BAK_MV_X                      (0x1c14)
+#define P_HCODEC_FST_BAK_MV_X                      (volatile unsigned int *)((0x1c14  << 2) + 0xff620000)
+#define   HCODEC_FST_BAK_MV_Y                      (0x1c15)
+#define P_HCODEC_FST_BAK_MV_Y                      (volatile unsigned int *)((0x1c15  << 2) + 0xff620000)
+#define   HCODEC_SCD_BAK_MV_X                      (0x1c16)
+#define P_HCODEC_SCD_BAK_MV_X                      (volatile unsigned int *)((0x1c16  << 2) + 0xff620000)
+#define   HCODEC_SCD_BAK_MV_Y                      (0x1c17)
+#define P_HCODEC_SCD_BAK_MV_Y                      (volatile unsigned int *)((0x1c17  << 2) + 0xff620000)
+// Bit 7:4 -- read_buffer_interlace  0-progressive, 1-interlace, used in VC1
+// bit 3 -- disable_new_stcode_search_fix // From GXM
+// bit 2 -- weighting_prediction
+// bit 1 -- mb_weighting_flag
+// bit 0 -- slice_weighting_flag
+#define   HCODEC_VLD_DECODE_CONTROL                (0x1c18)
+#define P_HCODEC_VLD_DECODE_CONTROL                (volatile unsigned int *)((0x1c18  << 2) + 0xff620000)
+#define   HCODEC_VLD_REVERVED_19                   (0x1c19)
+#define P_HCODEC_VLD_REVERVED_19                   (volatile unsigned int *)((0x1c19  << 2) + 0xff620000)
+#define   HCODEC_VIFF_BIT_CNT                      (0x1c1a)
+#define P_HCODEC_VIFF_BIT_CNT                      (volatile unsigned int *)((0x1c1a  << 2) + 0xff620000)
+#define   HCODEC_BYTE_ALIGN_PEAK_HI                (0x1c1b)
+#define P_HCODEC_BYTE_ALIGN_PEAK_HI                (volatile unsigned int *)((0x1c1b  << 2) + 0xff620000)
+#define   HCODEC_BYTE_ALIGN_PEAK_LO                (0x1c1c)
+#define P_HCODEC_BYTE_ALIGN_PEAK_LO                (volatile unsigned int *)((0x1c1c  << 2) + 0xff620000)
+#define   HCODEC_NEXT_ALIGN_PEAK                   (0x1c1d)
+#define P_HCODEC_NEXT_ALIGN_PEAK                   (volatile unsigned int *)((0x1c1d  << 2) + 0xff620000)
+// bit 31    : byte_aligned_zero_23_from_org // From GXM
+// bit 30    : force_shift_out_drop_flag_zero // From GXM
+// bit 29    : en_st_protect_from_org // From GXM
+// bit 28    : enable_halt_decode_start_voff
+// bit 27    : disable_C_pred_check
+// bit 26    : disable_I4_pred_check
+// bit 25    : disable_I16_pred_check
+// bit 24    : check_avs_1st_drop
+// bit 23    : enable_cabac_protect // From GXM
+// bit 22    : enable_avs_drop_more
+// bit 21    : reset_avs_drop_ptr
+// bit 20    : reset_cabac_use_next_at_end_req
+// bit 19    : vc1_inv_intra_co_mb_ref_rd
+// bit 18    : vc1_inv_co_mb_ref_rd
+// bit 17    : vc1_inv_intra_co_mb_ref_wr
+// bit 16    : vc1_inv_co_mb_ref_wr
+// bit 15    : disable_mv_cal_begin_only
+// bit 14    : avs_drop_enable
+// bit 13:12 : avs_drop_ptr
+// bit 11:8  : avs_demu_ctl_reg
+// bit 7 : avs_enable
+// bit 6 : disable_dblk_hcmd
+// bit 5 : disable_mc_hcmd
+// bit 4 : first_mode3_set enable
+// bit 3 : first_mode3
+// bit 2:1 : vc1_profile  0-SP, 1-MP, 2-reserved, 3-AP
+// bit 0   : vc1_enable
+#define   HCODEC_VC1_CONTROL_REG                   (0x1c1e)
+#define P_HCODEC_VC1_CONTROL_REG                   (volatile unsigned int *)((0x1c1e  << 2) + 0xff620000)
+#define   HCODEC_PMV1_X                            (0x1c20)
+#define P_HCODEC_PMV1_X                            (volatile unsigned int *)((0x1c20  << 2) + 0xff620000)
+#define   HCODEC_PMV1_Y                            (0x1c21)
+#define P_HCODEC_PMV1_Y                            (volatile unsigned int *)((0x1c21  << 2) + 0xff620000)
+#define   HCODEC_PMV2_X                            (0x1c22)
+#define P_HCODEC_PMV2_X                            (volatile unsigned int *)((0x1c22  << 2) + 0xff620000)
+#define   HCODEC_PMV2_Y                            (0x1c23)
+#define P_HCODEC_PMV2_Y                            (volatile unsigned int *)((0x1c23  << 2) + 0xff620000)
+#define   HCODEC_PMV3_X                            (0x1c24)
+#define P_HCODEC_PMV3_X                            (volatile unsigned int *)((0x1c24  << 2) + 0xff620000)
+#define   HCODEC_PMV3_Y                            (0x1c25)
+#define P_HCODEC_PMV3_Y                            (volatile unsigned int *)((0x1c25  << 2) + 0xff620000)
+#define   HCODEC_PMV4_X                            (0x1c26)
+#define P_HCODEC_PMV4_X                            (volatile unsigned int *)((0x1c26  << 2) + 0xff620000)
+#define   HCODEC_PMV4_Y                            (0x1c27)
+#define P_HCODEC_PMV4_Y                            (volatile unsigned int *)((0x1c27  << 2) + 0xff620000)
+// Can't use the same address for different defines
+// Therefore, create a single define that covers both
+// Only appears to be used in micro-code since the VLD hardware is
+// hard coded.
+// `define M4_TABLE_SELECT     8'h28  // Does this exist in HW ? Added from register_mp2.h
+// `define M4_TABLE_OUTPUT     8'h28  // Does this exist in HW ? Added from register_mp2.h
+#define   HCODEC_M4_TABLE_SELECT                   (0x1c28)
+#define P_HCODEC_M4_TABLE_SELECT                   (volatile unsigned int *)((0x1c28  << 2) + 0xff620000)
+#define   HCODEC_M4_CONTROL_REG                    (0x1c29)
+#define P_HCODEC_M4_CONTROL_REG                    (volatile unsigned int *)((0x1c29  << 2) + 0xff620000)
+#define   HCODEC_BLOCK_NUM                         (0x1c2a)
+#define P_HCODEC_BLOCK_NUM                         (volatile unsigned int *)((0x1c2a  << 2) + 0xff620000)
+#define   HCODEC_PATTERN_CODE                      (0x1c2b)
+#define P_HCODEC_PATTERN_CODE                      (volatile unsigned int *)((0x1c2b  << 2) + 0xff620000)
+#define   HCODEC_MB_INFO                           (0x1c2c)
+#define P_HCODEC_MB_INFO                           (volatile unsigned int *)((0x1c2c  << 2) + 0xff620000)
+#define   HCODEC_VLD_DC_PRED                       (0x1c2d)
+#define P_HCODEC_VLD_DC_PRED                       (volatile unsigned int *)((0x1c2d  << 2) + 0xff620000)
+#define   HCODEC_VLD_ERROR_MASK                    (0x1c2e)
+#define P_HCODEC_VLD_ERROR_MASK                    (volatile unsigned int *)((0x1c2e  << 2) + 0xff620000)
+#define   HCODEC_VLD_DC_PRED_C                     (0x1c2f)
+#define P_HCODEC_VLD_DC_PRED_C                     (volatile unsigned int *)((0x1c2f  << 2) + 0xff620000)
+#define   HCODEC_LAST_SLICE_MV_ADDR                (0x1c30)
+#define P_HCODEC_LAST_SLICE_MV_ADDR                (volatile unsigned int *)((0x1c30  << 2) + 0xff620000)
+#define   HCODEC_LAST_MVX                          (0x1c31)
+#define P_HCODEC_LAST_MVX                          (volatile unsigned int *)((0x1c31  << 2) + 0xff620000)
+#define   HCODEC_LAST_MVY                          (0x1c32)
+#define P_HCODEC_LAST_MVY                          (volatile unsigned int *)((0x1c32  << 2) + 0xff620000)
+#define   HCODEC_VLD_C38                           (0x1c38)
+#define P_HCODEC_VLD_C38                           (volatile unsigned int *)((0x1c38  << 2) + 0xff620000)
+#define   HCODEC_VLD_C39                           (0x1c39)
+#define P_HCODEC_VLD_C39                           (volatile unsigned int *)((0x1c39  << 2) + 0xff620000)
+#define   HCODEC_VLD_STATUS                        (0x1c3a)
+#define P_HCODEC_VLD_STATUS                        (volatile unsigned int *)((0x1c3a  << 2) + 0xff620000)
+#define   HCODEC_VLD_SHIFT_STATUS                  (0x1c3b)
+#define P_HCODEC_VLD_SHIFT_STATUS                  (volatile unsigned int *)((0x1c3b  << 2) + 0xff620000)
+// `define VLD_SHIFT_INFO      8'h3b  // Does this exist in HW ? used in $ucode/mpeg4
+#define   HCODEC_VOFF_STATUS                       (0x1c3c)
+#define P_HCODEC_VOFF_STATUS                       (volatile unsigned int *)((0x1c3c  << 2) + 0xff620000)
+#define   HCODEC_VLD_C3D                           (0x1c3d)
+#define P_HCODEC_VLD_C3D                           (volatile unsigned int *)((0x1c3d  << 2) + 0xff620000)
+#define   HCODEC_VLD_DBG_INDEX                     (0x1c3e)
+#define P_HCODEC_VLD_DBG_INDEX                     (volatile unsigned int *)((0x1c3e  << 2) + 0xff620000)
+// vld_buff_info -- (index == 0)
+// Bit11]    halt_decode_start_voff
+// Bit10]    C_pred_error
+// Bit[9]    I4_pred_error
+// Bit[8]    I16_pred_error
+// Bit[7:6]  mv_UR_ready_cnt;
+// Bit[5]  vld_wr_idx
+// Bit[4]  iq_rd_idx
+// Bit[3]  vld_vi_block_rdy_1
+// Bit[2]  vld_vi_block_rdy_2
+// Bit[1]  voff_empty_1
+// Bit[0]  voff_empty_2
+// cabac_buff_info_0 -- (index == 1)
+// Bit[31] shift_data_ready
+// Bit[30:29] Reserved
+// Bit[28:24] cabac_buffer_ptr
+// Bit[23:0] cabac_buffer
+// cabac_buff_info_1 -- (index == 2)
+// Bit[31:29] Reserved
+// Bit[28:20] Drange
+// Bit[19:16] bin_count_4
+// Bit[15:13] Reserved
+// Bit[12:6] context_mem_do
+// Bit[5:3] coeff_state
+// Bit[2:0] mvd_state
+// h264_mv_present -- (index == 3)
+// Bit[31:16] mv_present_l0
+// Bit[15:0] mv_present_l1
+// h264_mv_cal_info_0 -- (index == 4)
+// [31:28] mv_cal_state
+// [27:24] direct_spatial_cnt
+// Bit[23:21] Reserved
+// Bit[20] mv_UR_ready_for_mv_cal
+// Bit[19] co_mb_mem_ready_for_mv_cal
+// Bit[18] mc_dblk_cmd_if_busy
+// Bit[17] h264_co_mb_wr_busy
+// Bit[16] H264_cbp_blk_ready
+// Bit[15] mc_hcmd_rrdy
+// Bit[14] mc_hcmd_srdy
+// Bit[13] mc_cmd_if_ready
+// Bit[12] mc_hcmd_mv_available
+// Bit[11:8] mc_cmd_if_state
+// Bit[7] dblk_hcmd_rrdy
+// Bit[6] dblk_hcmd_srdy
+// Bit[5] dblk_cmd_if_ready
+// Bit[4] dblk_hcmd_mv_available
+// Bit[3:0] dblk_cmd_if_state
+// h264_mv_cal_info_1 -- (index == 5)
+//  Bit[31:29] Reserved
+//  Bit[28:24] total_mvd_num_l0
+//  Bit[23:21] Reserved
+//  Bit[20:16] mv_cal_ptr_l0
+//  Bit[15:13] Reserved
+//  Bit[12:8] mc_hcmd_ptr_l0
+//  Bit[7:5] Reserved
+//  Bit[4:0] dblk_hcmd_ptr_l0
+// h264_mv_cal_info_2 -- (index == 6)
+//  Bit[31:29] Reserved
+//  Bit[28:24] total_mvd_num_l1
+//  Bit[23:21] Reserved
+//  Bit[20:16] mv_cal_ptr_l1
+//  Bit[15:13] Reserved
+//  Bit[12:8] mc_hcmd_ptr_l1
+//  Bit[7:5] Reserved
+//  Bit[4:0] dblk_hcmd_ptr_l1
+// h264_co_mb_info -- (index == 7)
+// Bit[31:26] Reserved
+// Bit[25] mv_scale_cal_busy
+// Bit[24:20] co_mv_count
+// Bit[19:16] co_mv_process_state
+// Bit[15] h264_co_mb_rd_busy
+// Bit[15] h264_co_mb_rd_ready
+// Bit[13:12] co_mv_transfer_block_cnt
+// Bit[11:8] co_mv_transfer_ptr
+// Bit[7] co_mv_POC_l1_busy
+// Bit[6] h264_weight_scale_cal_en
+// Bit[5] weight_cal_busy
+// Bit[4] weight_cal_not_finished
+// Bit[3:0] weight_process_state
+#define   HCODEC_VLD_DBG_DATA                      (0x1c3f)
+#define P_HCODEC_VLD_DBG_DATA                      (volatile unsigned int *)((0x1c3f  << 2) + 0xff620000)
+// --------------------------------------------
+// VIFIFO DDR Interface
+// --------------------------------------------
+// The VIFIFO start pointer into DDR memory is a 32-bit number
+// The Start pointer will automatically be truncated to land on
+// an 8-byte boundary.  That is, bits [2:0] = 0;
+#define   HCODEC_VLD_MEM_VIFIFO_START_PTR          (0x1c40)
+#define P_HCODEC_VLD_MEM_VIFIFO_START_PTR          (volatile unsigned int *)((0x1c40  << 2) + 0xff620000)
+// The current pointer points so some location between the START and END
+// pointers.  The current pointer is a BYTE pointer.  That is, you can
+// point to any BYTE address within the START/END range
+#define   HCODEC_VLD_MEM_VIFIFO_CURR_PTR           (0x1c41)
+#define P_HCODEC_VLD_MEM_VIFIFO_CURR_PTR           (volatile unsigned int *)((0x1c41  << 2) + 0xff620000)
+#define   HCODEC_VLD_MEM_VIFIFO_END_PTR            (0x1c42)
+#define P_HCODEC_VLD_MEM_VIFIFO_END_PTR            (volatile unsigned int *)((0x1c42  << 2) + 0xff620000)
+#define   HCODEC_VLD_MEM_VIFIFO_BYTES_AVAIL        (0x1c43)
+#define P_HCODEC_VLD_MEM_VIFIFO_BYTES_AVAIL        (volatile unsigned int *)((0x1c43  << 2) + 0xff620000)
+// VIFIFO FIFO Control
+// bit  [31:24] viff_empty_int_enable_cpu[7:0]
+// bit  [23:16] viff_empty_int_enable_amrisc[7:0]
+//   -bit 23 Video BUFFER < 0x400 Bytes
+//   -bit 22 Video BUFFER < 0x200 Bytes
+//   -bit 21 Video BUFFER < 0x100 Bytes
+//   -bit 20 Video BUFFER < 0x80 Bytes
+//   -bit 19 Video BUFFER < 0x40 Bytes
+//   -bit 18 Video BUFFER < 0x20 Bytes
+//   -bit 17 vififo  < 16 double words
+//   -bit 16 vififo  < 8 double words
+// bit  [15:13] unused
+// bit  [12]    A_urgent
+// bit  [11]    transfer_length 0 - 32x64 Bits per request, 1 - 16x64 Bits per request
+// bit  [10]    use_level       Set this bit to 1 to enable filling of the FIFO controlled by the buffer
+//                              level control.  If this bit is 0, then use bit[1] to control the enabling of filling
+// bit  [9]     Data Ready.     This bit is set when data can be popped
+// bit  [8]     fill busy       This bit will be high when we're fetching data from the DDR memory
+//                              To reset this module, set cntl_enable = 0, and then wait for busy = 0.
+//                              After that you can pulse cntl_init to start over
+// bit  [7]     init_with_cntl_init
+// bit  [6]     reserved
+// bits [5:3]   endian:         see $lib/rtl/ddr_endian.v
+// bit  [2]     cntl_empty_en   Set to 1 to enable reading the DDR memory FIFO
+//                              Set cntl_empty_en = cntl_fill_en = 0 when pulsing cntl_init
+// bit  [1]     cntl_fill_en    Set to 1 to enable reading data from DDR memory
+// bit  [0]     cntl_init:      After setting the read pointers, sizes, channel masks
+//                              and read masks, set this bit to 1 and then to 0
+//                              NOTE:  You don't need to pulse cntl_init if only the start address is
+//                              being changed
+#define   HCODEC_VLD_MEM_VIFIFO_CONTROL            (0x1c44)
+#define P_HCODEC_VLD_MEM_VIFIFO_CONTROL            (volatile unsigned int *)((0x1c44  << 2) + 0xff620000)
+// --------------------------------------------
+// VIFIFO Buffer Level Manager
+// --------------------------------------------
+#define   HCODEC_VLD_MEM_VIFIFO_WP                 (0x1c45)
+#define P_HCODEC_VLD_MEM_VIFIFO_WP                 (volatile unsigned int *)((0x1c45  << 2) + 0xff620000)
+#define   HCODEC_VLD_MEM_VIFIFO_RP                 (0x1c46)
+#define P_HCODEC_VLD_MEM_VIFIFO_RP                 (volatile unsigned int *)((0x1c46  << 2) + 0xff620000)
+#define   HCODEC_VLD_MEM_VIFIFO_LEVEL              (0x1c47)
+#define P_HCODEC_VLD_MEM_VIFIFO_LEVEL              (volatile unsigned int *)((0x1c47  << 2) + 0xff620000)
+//
+// bit  [8]     use_parser_video2_wp
+// bit  [7]     vbuf2_out_manual
+// bit  [6]     vbuf_out_manual
+// bit  [5]     empty (ReadOnly)
+// bit  [4]     full (ReadOnly)
+// bit  [3:2]   reserved
+// bit  [1]     manual mode     Set to 1 for manual write pointer mode
+// bit  [0]     Init            Set high then low after everything has been initialized
+#define   HCODEC_VLD_MEM_VIFIFO_BUF_CNTL           (0x1c48)
+#define P_HCODEC_VLD_MEM_VIFIFO_BUF_CNTL           (volatile unsigned int *)((0x1c48  << 2) + 0xff620000)
+// bit 31:16 -- drop_bytes
+// bit 15:14 -- drop_status (Read-Only)
+// bit 13:12 -- sync_match_position (Read-Only)
+// bit 11:6 -- reserved
+// bit 5:4 -- TIME_STAMP_NUMBER, 0-32bits, 1-64bits, 2-96bits, 3-128bits
+// bit 3 -- stamp_soft_reset
+// bit 2 -- TIME_STAMP_length_enable
+// bit 1 -- TIME_STAMP_sync64_enable
+// bit 0 -- TIME_STAMP_enable
+#define   HCODEC_VLD_TIME_STAMP_CNTL               (0x1c49)
+#define P_HCODEC_VLD_TIME_STAMP_CNTL               (volatile unsigned int *)((0x1c49  << 2) + 0xff620000)
+// bit 31:0 -- TIME_STAMP_SYNC_CODE_0
+#define   HCODEC_VLD_TIME_STAMP_SYNC_0             (0x1c4a)
+#define P_HCODEC_VLD_TIME_STAMP_SYNC_0             (volatile unsigned int *)((0x1c4a  << 2) + 0xff620000)
+// bit 31:0 -- TIME_STAMP_SYNC_CODE_1
+#define   HCODEC_VLD_TIME_STAMP_SYNC_1             (0x1c4b)
+#define P_HCODEC_VLD_TIME_STAMP_SYNC_1             (volatile unsigned int *)((0x1c4b  << 2) + 0xff620000)
+// bit 31:0 TIME_STAMP_0
+#define   HCODEC_VLD_TIME_STAMP_0                  (0x1c4c)
+#define P_HCODEC_VLD_TIME_STAMP_0                  (volatile unsigned int *)((0x1c4c  << 2) + 0xff620000)
+// bit 31:0 TIME_STAMP_1
+#define   HCODEC_VLD_TIME_STAMP_1                  (0x1c4d)
+#define P_HCODEC_VLD_TIME_STAMP_1                  (volatile unsigned int *)((0x1c4d  << 2) + 0xff620000)
+// bit 31:0 TIME_STAMP_2
+#define   HCODEC_VLD_TIME_STAMP_2                  (0x1c4e)
+#define P_HCODEC_VLD_TIME_STAMP_2                  (volatile unsigned int *)((0x1c4e  << 2) + 0xff620000)
+// bit 31:0 TIME_STAMP_3
+#define   HCODEC_VLD_TIME_STAMP_3                  (0x1c4f)
+#define P_HCODEC_VLD_TIME_STAMP_3                  (volatile unsigned int *)((0x1c4f  << 2) + 0xff620000)
+// bit 31:0 TIME_STAMP_LENGTH
+#define   HCODEC_VLD_TIME_STAMP_LENGTH             (0x1c50)
+#define P_HCODEC_VLD_TIME_STAMP_LENGTH             (volatile unsigned int *)((0x1c50  << 2) + 0xff620000)
+// bit 15:0 vififo_rd_count
+#define   HCODEC_VLD_MEM_VIFIFO_WRAP_COUNT         (0x1c51)
+#define P_HCODEC_VLD_MEM_VIFIFO_WRAP_COUNT         (volatile unsigned int *)((0x1c51  << 2) + 0xff620000)
+// bit 29:24 A_brst_num
+// bit 21:16 A_id
+// bit 15:0 level_hold
+#define   HCODEC_VLD_MEM_VIFIFO_MEM_CTL            (0x1c52)
+#define P_HCODEC_VLD_MEM_VIFIFO_MEM_CTL            (volatile unsigned int *)((0x1c52  << 2) + 0xff620000)
+#define   HCODEC_VLD_MEM_VBUF_RD_PTR               (0x1c53)
+#define P_HCODEC_VLD_MEM_VBUF_RD_PTR               (volatile unsigned int *)((0x1c53  << 2) + 0xff620000)
+#define   HCODEC_VLD_MEM_VBUF2_RD_PTR              (0x1c54)
+#define P_HCODEC_VLD_MEM_VBUF2_RD_PTR              (volatile unsigned int *)((0x1c54  << 2) + 0xff620000)
+#define   HCODEC_VLD_MEM_SWAP_ADDR                 (0x1c55)
+#define P_HCODEC_VLD_MEM_SWAP_ADDR                 (volatile unsigned int *)((0x1c55  << 2) + 0xff620000)
+// bit[23:16] - swap_d_count (Read Only)
+// bit[15:8]  - swap_a_count (Read Only)
+// bit [7] - swap busy (Read Only)
+// bit [6:2] - reserved
+// bit [1] - 1 - STORE to Memory, 0 - LOAD from Memory
+// bit [0] - swap active
+#define   HCODEC_VLD_MEM_SWAP_CTL                  (0x1c56)
+#define P_HCODEC_VLD_MEM_SWAP_CTL                  (volatile unsigned int *)((0x1c56  << 2) + 0xff620000)
+//
+// Closing file:  vld_regs.h
+//
+//
+// Reading file:  vld_regs.h
+//
+//========================================================================
+//  VLD module level register offset
+//========================================================================
+// -----------------------------------------------
+// CBUS_BASE:  DOS_VDEC_VLD_CBUS_BASE = 0x0c
+// -----------------------------------------------
+#define   VDEC2_VLD_STATUS_CTRL                    (0x2c00)
+#define P_VDEC2_VLD_STATUS_CTRL                    (volatile unsigned int *)((0x2c00  << 2) + 0xff620000)
+//
+// bit 10 -- use_old_shift_en
+// bit 9 -- output_mv_not_pmv
+// bit 8:5 -- force_zigzag
+// bit 4 -- force_zigzag_en
+// bit 3 -- disable_viff_anempty_int
+// bit 2 -- disable_m2_ac_coeff_one_cycle
+// bit 1 -- forced_reset  force reset pmv
+// bit 0 -- mpeg_type  0:mpeg1 1: mpeg2
+#define   VDEC2_MPEG1_2_REG                        (0x2c01)
+#define P_VDEC2_MPEG1_2_REG                        (volatile unsigned int *)((0x2c01  << 2) + 0xff620000)
+#define   VDEC2_F_CODE_REG                         (0x2c02)
+#define P_VDEC2_F_CODE_REG                         (volatile unsigned int *)((0x2c02  << 2) + 0xff620000)
+#define   VDEC2_PIC_HEAD_INFO                      (0x2c03)
+#define P_VDEC2_PIC_HEAD_INFO                      (volatile unsigned int *)((0x2c03  << 2) + 0xff620000)
+#define   VDEC2_SLICE_VER_POS_PIC_TYPE             (0x2c04)
+#define P_VDEC2_SLICE_VER_POS_PIC_TYPE             (volatile unsigned int *)((0x2c04  << 2) + 0xff620000)
+#define   VDEC2_QP_VALUE_REG                       (0x2c05)
+#define P_VDEC2_QP_VALUE_REG                       (volatile unsigned int *)((0x2c05  << 2) + 0xff620000)
+#define   VDEC2_MBA_INC                            (0x2c06)
+#define P_VDEC2_MBA_INC                            (volatile unsigned int *)((0x2c06  << 2) + 0xff620000)
+#define   VDEC2_MB_MOTION_MODE                     (0x2c07)
+#define P_VDEC2_MB_MOTION_MODE                     (volatile unsigned int *)((0x2c07  << 2) + 0xff620000)
+//`define PACKET_BYTE_COUNT   8'h08
+// bit 15 -- force_search_startcode_en
+// bit 14 -- int_cpu_when_error (before do anything)
+// bit 13 -- vld_error_reset
+// bit 12 -- return_on_slice_header
+// bit 6 -- jpeg_ff00_en
+// bit 5:0 -- vld_power_ctl
+#define   VDEC2_POWER_CTL_VLD                      (0x2c08)
+#define P_VDEC2_POWER_CTL_VLD                      (volatile unsigned int *)((0x2c08  << 2) + 0xff620000)
+#define   VDEC2_MB_WIDTH                           (0x2c09)
+#define P_VDEC2_MB_WIDTH                           (volatile unsigned int *)((0x2c09  << 2) + 0xff620000)
+#define   VDEC2_SLICE_QP                           (0x2c0a)
+#define P_VDEC2_SLICE_QP                           (volatile unsigned int *)((0x2c0a  << 2) + 0xff620000)
+// `define MB_X_MB_Y           8'h0b   /* current MBX and MBY                  */
+#define   VDEC2_PRE_START_CODE                     (0x2c0b)
+#define P_VDEC2_PRE_START_CODE                     (volatile unsigned int *)((0x2c0b  << 2) + 0xff620000)
+#define   VDEC2_SLICE_START_BYTE_01                (0x2c0c)
+#define P_VDEC2_SLICE_START_BYTE_01                (volatile unsigned int *)((0x2c0c  << 2) + 0xff620000)
+#define   VDEC2_SLICE_START_BYTE_23                (0x2c0d)
+#define P_VDEC2_SLICE_START_BYTE_23                (volatile unsigned int *)((0x2c0d  << 2) + 0xff620000)
+#define   VDEC2_RESYNC_MARKER_LENGTH               (0x2c0e)
+#define P_VDEC2_RESYNC_MARKER_LENGTH               (volatile unsigned int *)((0x2c0e  << 2) + 0xff620000)
+// bit[6:5] - frame/field info, 01 - top, 10 - bottom, 11 - frame
+// bit[4:0] - buffer ID
+// L0_BUFF_ID_0, L0_BUFF_ID_1, L1_BUFF_ID_0, L1_BUFF_ID_1
+#define   VDEC2_DECODER_BUFFER_INFO                (0x2c0f)
+#define P_VDEC2_DECODER_BUFFER_INFO                (volatile unsigned int *)((0x2c0f  << 2) + 0xff620000)
+#define   VDEC2_FST_FOR_MV_X                       (0x2c10)
+#define P_VDEC2_FST_FOR_MV_X                       (volatile unsigned int *)((0x2c10  << 2) + 0xff620000)
+#define   VDEC2_FST_FOR_MV_Y                       (0x2c11)
+#define P_VDEC2_FST_FOR_MV_Y                       (volatile unsigned int *)((0x2c11  << 2) + 0xff620000)
+#define   VDEC2_SCD_FOR_MV_X                       (0x2c12)
+#define P_VDEC2_SCD_FOR_MV_X                       (volatile unsigned int *)((0x2c12  << 2) + 0xff620000)
+#define   VDEC2_SCD_FOR_MV_Y                       (0x2c13)
+#define P_VDEC2_SCD_FOR_MV_Y                       (volatile unsigned int *)((0x2c13  << 2) + 0xff620000)
+#define   VDEC2_FST_BAK_MV_X                       (0x2c14)
+#define P_VDEC2_FST_BAK_MV_X                       (volatile unsigned int *)((0x2c14  << 2) + 0xff620000)
+#define   VDEC2_FST_BAK_MV_Y                       (0x2c15)
+#define P_VDEC2_FST_BAK_MV_Y                       (volatile unsigned int *)((0x2c15  << 2) + 0xff620000)
+#define   VDEC2_SCD_BAK_MV_X                       (0x2c16)
+#define P_VDEC2_SCD_BAK_MV_X                       (volatile unsigned int *)((0x2c16  << 2) + 0xff620000)
+#define   VDEC2_SCD_BAK_MV_Y                       (0x2c17)
+#define P_VDEC2_SCD_BAK_MV_Y                       (volatile unsigned int *)((0x2c17  << 2) + 0xff620000)
+// Bit 7:4 -- read_buffer_interlace  0-progressive, 1-interlace, used in VC1
+// bit 3 -- disable_new_stcode_search_fix // From GXM
+// bit 2 -- weighting_prediction
+// bit 1 -- mb_weighting_flag
+// bit 0 -- slice_weighting_flag
+#define   VDEC2_VLD_DECODE_CONTROL                 (0x2c18)
+#define P_VDEC2_VLD_DECODE_CONTROL                 (volatile unsigned int *)((0x2c18  << 2) + 0xff620000)
+#define   VDEC2_VLD_REVERVED_19                    (0x2c19)
+#define P_VDEC2_VLD_REVERVED_19                    (volatile unsigned int *)((0x2c19  << 2) + 0xff620000)
+#define   VDEC2_VIFF_BIT_CNT                       (0x2c1a)
+#define P_VDEC2_VIFF_BIT_CNT                       (volatile unsigned int *)((0x2c1a  << 2) + 0xff620000)
+#define   VDEC2_BYTE_ALIGN_PEAK_HI                 (0x2c1b)
+#define P_VDEC2_BYTE_ALIGN_PEAK_HI                 (volatile unsigned int *)((0x2c1b  << 2) + 0xff620000)
+#define   VDEC2_BYTE_ALIGN_PEAK_LO                 (0x2c1c)
+#define P_VDEC2_BYTE_ALIGN_PEAK_LO                 (volatile unsigned int *)((0x2c1c  << 2) + 0xff620000)
+#define   VDEC2_NEXT_ALIGN_PEAK                    (0x2c1d)
+#define P_VDEC2_NEXT_ALIGN_PEAK                    (volatile unsigned int *)((0x2c1d  << 2) + 0xff620000)
+// bit 31    : byte_aligned_zero_23_from_org // From GXM
+// bit 30    : force_shift_out_drop_flag_zero // From GXM
+// bit 29    : en_st_protect_from_org // From GXM
+// bit 28    : enable_halt_decode_start_voff
+// bit 27    : disable_C_pred_check
+// bit 26    : disable_I4_pred_check
+// bit 25    : disable_I16_pred_check
+// bit 24    : check_avs_1st_drop
+// bit 23    : enable_cabac_protect // From GXM
+// bit 22    : enable_avs_drop_more
+// bit 21    : reset_avs_drop_ptr
+// bit 20    : reset_cabac_use_next_at_end_req
+// bit 19    : vc1_inv_intra_co_mb_ref_rd
+// bit 18    : vc1_inv_co_mb_ref_rd
+// bit 17    : vc1_inv_intra_co_mb_ref_wr
+// bit 16    : vc1_inv_co_mb_ref_wr
+// bit 15    : disable_mv_cal_begin_only
+// bit 14    : avs_drop_enable
+// bit 13:12 : avs_drop_ptr
+// bit 11:8  : avs_demu_ctl_reg
+// bit 7 : avs_enable
+// bit 6 : disable_dblk_hcmd
+// bit 5 : disable_mc_hcmd
+// bit 4 : first_mode3_set enable
+// bit 3 : first_mode3
+// bit 2:1 : vc1_profile  0-SP, 1-MP, 2-reserved, 3-AP
+// bit 0   : vc1_enable
+#define   VDEC2_VC1_CONTROL_REG                    (0x2c1e)
+#define P_VDEC2_VC1_CONTROL_REG                    (volatile unsigned int *)((0x2c1e  << 2) + 0xff620000)
+#define   VDEC2_PMV1_X                             (0x2c20)
+#define P_VDEC2_PMV1_X                             (volatile unsigned int *)((0x2c20  << 2) + 0xff620000)
+#define   VDEC2_PMV1_Y                             (0x2c21)
+#define P_VDEC2_PMV1_Y                             (volatile unsigned int *)((0x2c21  << 2) + 0xff620000)
+#define   VDEC2_PMV2_X                             (0x2c22)
+#define P_VDEC2_PMV2_X                             (volatile unsigned int *)((0x2c22  << 2) + 0xff620000)
+#define   VDEC2_PMV2_Y                             (0x2c23)
+#define P_VDEC2_PMV2_Y                             (volatile unsigned int *)((0x2c23  << 2) + 0xff620000)
+#define   VDEC2_PMV3_X                             (0x2c24)
+#define P_VDEC2_PMV3_X                             (volatile unsigned int *)((0x2c24  << 2) + 0xff620000)
+#define   VDEC2_PMV3_Y                             (0x2c25)
+#define P_VDEC2_PMV3_Y                             (volatile unsigned int *)((0x2c25  << 2) + 0xff620000)
+#define   VDEC2_PMV4_X                             (0x2c26)
+#define P_VDEC2_PMV4_X                             (volatile unsigned int *)((0x2c26  << 2) + 0xff620000)
+#define   VDEC2_PMV4_Y                             (0x2c27)
+#define P_VDEC2_PMV4_Y                             (volatile unsigned int *)((0x2c27  << 2) + 0xff620000)
+// Can't use the same address for different defines
+// Therefore, create a single define that covers both
+// Only appears to be used in micro-code since the VLD hardware is
+// hard coded.
+// `define M4_TABLE_SELECT     8'h28  // Does this exist in HW ? Added from register_mp2.h
+// `define M4_TABLE_OUTPUT     8'h28  // Does this exist in HW ? Added from register_mp2.h
+#define   VDEC2_M4_TABLE_SELECT                    (0x2c28)
+#define P_VDEC2_M4_TABLE_SELECT                    (volatile unsigned int *)((0x2c28  << 2) + 0xff620000)
+#define   VDEC2_M4_CONTROL_REG                     (0x2c29)
+#define P_VDEC2_M4_CONTROL_REG                     (volatile unsigned int *)((0x2c29  << 2) + 0xff620000)
+#define   VDEC2_BLOCK_NUM                          (0x2c2a)
+#define P_VDEC2_BLOCK_NUM                          (volatile unsigned int *)((0x2c2a  << 2) + 0xff620000)
+#define   VDEC2_PATTERN_CODE                       (0x2c2b)
+#define P_VDEC2_PATTERN_CODE                       (volatile unsigned int *)((0x2c2b  << 2) + 0xff620000)
+#define   VDEC2_MB_INFO                            (0x2c2c)
+#define P_VDEC2_MB_INFO                            (volatile unsigned int *)((0x2c2c  << 2) + 0xff620000)
+#define   VDEC2_VLD_DC_PRED                        (0x2c2d)
+#define P_VDEC2_VLD_DC_PRED                        (volatile unsigned int *)((0x2c2d  << 2) + 0xff620000)
+#define   VDEC2_VLD_ERROR_MASK                     (0x2c2e)
+#define P_VDEC2_VLD_ERROR_MASK                     (volatile unsigned int *)((0x2c2e  << 2) + 0xff620000)
+#define   VDEC2_VLD_DC_PRED_C                      (0x2c2f)
+#define P_VDEC2_VLD_DC_PRED_C                      (volatile unsigned int *)((0x2c2f  << 2) + 0xff620000)
+#define   VDEC2_LAST_SLICE_MV_ADDR                 (0x2c30)
+#define P_VDEC2_LAST_SLICE_MV_ADDR                 (volatile unsigned int *)((0x2c30  << 2) + 0xff620000)
+#define   VDEC2_LAST_MVX                           (0x2c31)
+#define P_VDEC2_LAST_MVX                           (volatile unsigned int *)((0x2c31  << 2) + 0xff620000)
+#define   VDEC2_LAST_MVY                           (0x2c32)
+#define P_VDEC2_LAST_MVY                           (volatile unsigned int *)((0x2c32  << 2) + 0xff620000)
+#define   VDEC2_VLD_C38                            (0x2c38)
+#define P_VDEC2_VLD_C38                            (volatile unsigned int *)((0x2c38  << 2) + 0xff620000)
+#define   VDEC2_VLD_C39                            (0x2c39)
+#define P_VDEC2_VLD_C39                            (volatile unsigned int *)((0x2c39  << 2) + 0xff620000)
+#define   VDEC2_VLD_STATUS                         (0x2c3a)
+#define P_VDEC2_VLD_STATUS                         (volatile unsigned int *)((0x2c3a  << 2) + 0xff620000)
+#define   VDEC2_VLD_SHIFT_STATUS                   (0x2c3b)
+#define P_VDEC2_VLD_SHIFT_STATUS                   (volatile unsigned int *)((0x2c3b  << 2) + 0xff620000)
+// `define VLD_SHIFT_INFO      8'h3b  // Does this exist in HW ? used in $ucode/mpeg4
+#define   VDEC2_VOFF_STATUS                        (0x2c3c)
+#define P_VDEC2_VOFF_STATUS                        (volatile unsigned int *)((0x2c3c  << 2) + 0xff620000)
+#define   VDEC2_VLD_C3D                            (0x2c3d)
+#define P_VDEC2_VLD_C3D                            (volatile unsigned int *)((0x2c3d  << 2) + 0xff620000)
+#define   VDEC2_VLD_DBG_INDEX                      (0x2c3e)
+#define P_VDEC2_VLD_DBG_INDEX                      (volatile unsigned int *)((0x2c3e  << 2) + 0xff620000)
+// vld_buff_info -- (index == 0)
+// Bit11]    halt_decode_start_voff
+// Bit10]    C_pred_error
+// Bit[9]    I4_pred_error
+// Bit[8]    I16_pred_error
+// Bit[7:6]  mv_UR_ready_cnt;
+// Bit[5]  vld_wr_idx
+// Bit[4]  iq_rd_idx
+// Bit[3]  vld_vi_block_rdy_1
+// Bit[2]  vld_vi_block_rdy_2
+// Bit[1]  voff_empty_1
+// Bit[0]  voff_empty_2
+// cabac_buff_info_0 -- (index == 1)
+// Bit[31] shift_data_ready
+// Bit[30:29] Reserved
+// Bit[28:24] cabac_buffer_ptr
+// Bit[23:0] cabac_buffer
+// cabac_buff_info_1 -- (index == 2)
+// Bit[31:29] Reserved
+// Bit[28:20] Drange
+// Bit[19:16] bin_count_4
+// Bit[15:13] Reserved
+// Bit[12:6] context_mem_do
+// Bit[5:3] coeff_state
+// Bit[2:0] mvd_state
+// h264_mv_present -- (index == 3)
+// Bit[31:16] mv_present_l0
+// Bit[15:0] mv_present_l1
+// h264_mv_cal_info_0 -- (index == 4)
+// [31:28] mv_cal_state
+// [27:24] direct_spatial_cnt
+// Bit[23:21] Reserved
+// Bit[20] mv_UR_ready_for_mv_cal
+// Bit[19] co_mb_mem_ready_for_mv_cal
+// Bit[18] mc_dblk_cmd_if_busy
+// Bit[17] h264_co_mb_wr_busy
+// Bit[16] H264_cbp_blk_ready
+// Bit[15] mc_hcmd_rrdy
+// Bit[14] mc_hcmd_srdy
+// Bit[13] mc_cmd_if_ready
+// Bit[12] mc_hcmd_mv_available
+// Bit[11:8] mc_cmd_if_state
+// Bit[7] dblk_hcmd_rrdy
+// Bit[6] dblk_hcmd_srdy
+// Bit[5] dblk_cmd_if_ready
+// Bit[4] dblk_hcmd_mv_available
+// Bit[3:0] dblk_cmd_if_state
+// h264_mv_cal_info_1 -- (index == 5)
+//  Bit[31:29] Reserved
+//  Bit[28:24] total_mvd_num_l0
+//  Bit[23:21] Reserved
+//  Bit[20:16] mv_cal_ptr_l0
+//  Bit[15:13] Reserved
+//  Bit[12:8] mc_hcmd_ptr_l0
+//  Bit[7:5] Reserved
+//  Bit[4:0] dblk_hcmd_ptr_l0
+// h264_mv_cal_info_2 -- (index == 6)
+//  Bit[31:29] Reserved
+//  Bit[28:24] total_mvd_num_l1
+//  Bit[23:21] Reserved
+//  Bit[20:16] mv_cal_ptr_l1
+//  Bit[15:13] Reserved
+//  Bit[12:8] mc_hcmd_ptr_l1
+//  Bit[7:5] Reserved
+//  Bit[4:0] dblk_hcmd_ptr_l1
+// h264_co_mb_info -- (index == 7)
+// Bit[31:26] Reserved
+// Bit[25] mv_scale_cal_busy
+// Bit[24:20] co_mv_count
+// Bit[19:16] co_mv_process_state
+// Bit[15] h264_co_mb_rd_busy
+// Bit[15] h264_co_mb_rd_ready
+// Bit[13:12] co_mv_transfer_block_cnt
+// Bit[11:8] co_mv_transfer_ptr
+// Bit[7] co_mv_POC_l1_busy
+// Bit[6] h264_weight_scale_cal_en
+// Bit[5] weight_cal_busy
+// Bit[4] weight_cal_not_finished
+// Bit[3:0] weight_process_state
+#define   VDEC2_VLD_DBG_DATA                       (0x2c3f)
+#define P_VDEC2_VLD_DBG_DATA                       (volatile unsigned int *)((0x2c3f  << 2) + 0xff620000)
+// --------------------------------------------
+// VIFIFO DDR Interface
+// --------------------------------------------
+// The VIFIFO start pointer into DDR memory is a 32-bit number
+// The Start pointer will automatically be truncated to land on
+// an 8-byte boundary.  That is, bits [2:0] = 0;
+#define   VDEC2_VLD_MEM_VIFIFO_START_PTR           (0x2c40)
+#define P_VDEC2_VLD_MEM_VIFIFO_START_PTR           (volatile unsigned int *)((0x2c40  << 2) + 0xff620000)
+// The current pointer points so some location between the START and END
+// pointers.  The current pointer is a BYTE pointer.  That is, you can
+// point to any BYTE address within the START/END range
+#define   VDEC2_VLD_MEM_VIFIFO_CURR_PTR            (0x2c41)
+#define P_VDEC2_VLD_MEM_VIFIFO_CURR_PTR            (volatile unsigned int *)((0x2c41  << 2) + 0xff620000)
+#define   VDEC2_VLD_MEM_VIFIFO_END_PTR             (0x2c42)
+#define P_VDEC2_VLD_MEM_VIFIFO_END_PTR             (volatile unsigned int *)((0x2c42  << 2) + 0xff620000)
+#define   VDEC2_VLD_MEM_VIFIFO_BYTES_AVAIL         (0x2c43)
+#define P_VDEC2_VLD_MEM_VIFIFO_BYTES_AVAIL         (volatile unsigned int *)((0x2c43  << 2) + 0xff620000)
+// VIFIFO FIFO Control
+// bit  [31:24] viff_empty_int_enable_cpu[7:0]
+// bit  [23:16] viff_empty_int_enable_amrisc[7:0]
+//   -bit 23 Video BUFFER < 0x400 Bytes
+//   -bit 22 Video BUFFER < 0x200 Bytes
+//   -bit 21 Video BUFFER < 0x100 Bytes
+//   -bit 20 Video BUFFER < 0x80 Bytes
+//   -bit 19 Video BUFFER < 0x40 Bytes
+//   -bit 18 Video BUFFER < 0x20 Bytes
+//   -bit 17 vififo  < 16 double words
+//   -bit 16 vififo  < 8 double words
+// bit  [15:13] unused
+// bit  [12]    A_urgent
+// bit  [11]    transfer_length 0 - 32x64 Bits per request, 1 - 16x64 Bits per request
+// bit  [10]    use_level       Set this bit to 1 to enable filling of the FIFO controlled by the buffer
+//                              level control.  If this bit is 0, then use bit[1] to control the enabling of filling
+// bit  [9]     Data Ready.     This bit is set when data can be popped
+// bit  [8]     fill busy       This bit will be high when we're fetching data from the DDR memory
+//                              To reset this module, set cntl_enable = 0, and then wait for busy = 0.
+//                              After that you can pulse cntl_init to start over
+// bit  [7]     init_with_cntl_init
+// bit  [6]     reserved
+// bits [5:3]   endian:         see $lib/rtl/ddr_endian.v
+// bit  [2]     cntl_empty_en   Set to 1 to enable reading the DDR memory FIFO
+//                              Set cntl_empty_en = cntl_fill_en = 0 when pulsing cntl_init
+// bit  [1]     cntl_fill_en    Set to 1 to enable reading data from DDR memory
+// bit  [0]     cntl_init:      After setting the read pointers, sizes, channel masks
+//                              and read masks, set this bit to 1 and then to 0
+//                              NOTE:  You don't need to pulse cntl_init if only the start address is
+//                              being changed
+#define   VDEC2_VLD_MEM_VIFIFO_CONTROL             (0x2c44)
+#define P_VDEC2_VLD_MEM_VIFIFO_CONTROL             (volatile unsigned int *)((0x2c44  << 2) + 0xff620000)
+// --------------------------------------------
+// VIFIFO Buffer Level Manager
+// --------------------------------------------
+#define   VDEC2_VLD_MEM_VIFIFO_WP                  (0x2c45)
+#define P_VDEC2_VLD_MEM_VIFIFO_WP                  (volatile unsigned int *)((0x2c45  << 2) + 0xff620000)
+#define   VDEC2_VLD_MEM_VIFIFO_RP                  (0x2c46)
+#define P_VDEC2_VLD_MEM_VIFIFO_RP                  (volatile unsigned int *)((0x2c46  << 2) + 0xff620000)
+#define   VDEC2_VLD_MEM_VIFIFO_LEVEL               (0x2c47)
+#define P_VDEC2_VLD_MEM_VIFIFO_LEVEL               (volatile unsigned int *)((0x2c47  << 2) + 0xff620000)
+//
+// bit  [8]     use_parser_video2_wp
+// bit  [7]     vbuf2_out_manual
+// bit  [6]     vbuf_out_manual
+// bit  [5]     empty (ReadOnly)
+// bit  [4]     full (ReadOnly)
+// bit  [3:2]   reserved
+// bit  [1]     manual mode     Set to 1 for manual write pointer mode
+// bit  [0]     Init            Set high then low after everything has been initialized
+#define   VDEC2_VLD_MEM_VIFIFO_BUF_CNTL            (0x2c48)
+#define P_VDEC2_VLD_MEM_VIFIFO_BUF_CNTL            (volatile unsigned int *)((0x2c48  << 2) + 0xff620000)
+// bit 31:16 -- drop_bytes
+// bit 15:14 -- drop_status (Read-Only)
+// bit 13:12 -- sync_match_position (Read-Only)
+// bit 11:6 -- reserved
+// bit 5:4 -- TIME_STAMP_NUMBER, 0-32bits, 1-64bits, 2-96bits, 3-128bits
+// bit 3 -- stamp_soft_reset
+// bit 2 -- TIME_STAMP_length_enable
+// bit 1 -- TIME_STAMP_sync64_enable
+// bit 0 -- TIME_STAMP_enable
+#define   VDEC2_VLD_TIME_STAMP_CNTL                (0x2c49)
+#define P_VDEC2_VLD_TIME_STAMP_CNTL                (volatile unsigned int *)((0x2c49  << 2) + 0xff620000)
+// bit 31:0 -- TIME_STAMP_SYNC_CODE_0
+#define   VDEC2_VLD_TIME_STAMP_SYNC_0              (0x2c4a)
+#define P_VDEC2_VLD_TIME_STAMP_SYNC_0              (volatile unsigned int *)((0x2c4a  << 2) + 0xff620000)
+// bit 31:0 -- TIME_STAMP_SYNC_CODE_1
+#define   VDEC2_VLD_TIME_STAMP_SYNC_1              (0x2c4b)
+#define P_VDEC2_VLD_TIME_STAMP_SYNC_1              (volatile unsigned int *)((0x2c4b  << 2) + 0xff620000)
+// bit 31:0 TIME_STAMP_0
+#define   VDEC2_VLD_TIME_STAMP_0                   (0x2c4c)
+#define P_VDEC2_VLD_TIME_STAMP_0                   (volatile unsigned int *)((0x2c4c  << 2) + 0xff620000)
+// bit 31:0 TIME_STAMP_1
+#define   VDEC2_VLD_TIME_STAMP_1                   (0x2c4d)
+#define P_VDEC2_VLD_TIME_STAMP_1                   (volatile unsigned int *)((0x2c4d  << 2) + 0xff620000)
+// bit 31:0 TIME_STAMP_2
+#define   VDEC2_VLD_TIME_STAMP_2                   (0x2c4e)
+#define P_VDEC2_VLD_TIME_STAMP_2                   (volatile unsigned int *)((0x2c4e  << 2) + 0xff620000)
+// bit 31:0 TIME_STAMP_3
+#define   VDEC2_VLD_TIME_STAMP_3                   (0x2c4f)
+#define P_VDEC2_VLD_TIME_STAMP_3                   (volatile unsigned int *)((0x2c4f  << 2) + 0xff620000)
+// bit 31:0 TIME_STAMP_LENGTH
+#define   VDEC2_VLD_TIME_STAMP_LENGTH              (0x2c50)
+#define P_VDEC2_VLD_TIME_STAMP_LENGTH              (volatile unsigned int *)((0x2c50  << 2) + 0xff620000)
+// bit 15:0 vififo_rd_count
+#define   VDEC2_VLD_MEM_VIFIFO_WRAP_COUNT          (0x2c51)
+#define P_VDEC2_VLD_MEM_VIFIFO_WRAP_COUNT          (volatile unsigned int *)((0x2c51  << 2) + 0xff620000)
+// bit 29:24 A_brst_num
+// bit 21:16 A_id
+// bit 15:0 level_hold
+#define   VDEC2_VLD_MEM_VIFIFO_MEM_CTL             (0x2c52)
+#define P_VDEC2_VLD_MEM_VIFIFO_MEM_CTL             (volatile unsigned int *)((0x2c52  << 2) + 0xff620000)
+#define   VDEC2_VLD_MEM_VBUF_RD_PTR                (0x2c53)
+#define P_VDEC2_VLD_MEM_VBUF_RD_PTR                (volatile unsigned int *)((0x2c53  << 2) + 0xff620000)
+#define   VDEC2_VLD_MEM_VBUF2_RD_PTR               (0x2c54)
+#define P_VDEC2_VLD_MEM_VBUF2_RD_PTR               (volatile unsigned int *)((0x2c54  << 2) + 0xff620000)
+#define   VDEC2_VLD_MEM_SWAP_ADDR                  (0x2c55)
+#define P_VDEC2_VLD_MEM_SWAP_ADDR                  (volatile unsigned int *)((0x2c55  << 2) + 0xff620000)
+// bit[23:16] - swap_d_count (Read Only)
+// bit[15:8]  - swap_a_count (Read Only)
+// bit [7] - swap busy (Read Only)
+// bit [6:2] - reserved
+// bit [1] - 1 - STORE to Memory, 0 - LOAD from Memory
+// bit [0] - swap active
+#define   VDEC2_VLD_MEM_SWAP_CTL                   (0x2c56)
+#define P_VDEC2_VLD_MEM_SWAP_CTL                   (volatile unsigned int *)((0x2c56  << 2) + 0xff620000)
+//
+// Closing file:  vld_regs.h
+//
+//
+// Reading file:  vld_regs.h
+//
+//========================================================================
+//  VLD module level register offset
+//========================================================================
+// -----------------------------------------------
+// CBUS_BASE:  DOS_VDEC_VLD_CBUS_BASE = 0x0c
+// -----------------------------------------------
+#define   HEVC_VLD_STATUS_CTRL                     (0x3c00)
+#define P_HEVC_VLD_STATUS_CTRL                     (volatile unsigned int *)((0x3c00  << 2) + 0xff620000)
+//
+// bit 10 -- use_old_shift_en
+// bit 9 -- output_mv_not_pmv
+// bit 8:5 -- force_zigzag
+// bit 4 -- force_zigzag_en
+// bit 3 -- disable_viff_anempty_int
+// bit 2 -- disable_m2_ac_coeff_one_cycle
+// bit 1 -- forced_reset  force reset pmv
+// bit 0 -- mpeg_type  0:mpeg1 1: mpeg2
+#define   HEVC_MPEG1_2_REG                         (0x3c01)
+#define P_HEVC_MPEG1_2_REG                         (volatile unsigned int *)((0x3c01  << 2) + 0xff620000)
+#define   HEVC_F_CODE_REG                          (0x3c02)
+#define P_HEVC_F_CODE_REG                          (volatile unsigned int *)((0x3c02  << 2) + 0xff620000)
+#define   HEVC_PIC_HEAD_INFO                       (0x3c03)
+#define P_HEVC_PIC_HEAD_INFO                       (volatile unsigned int *)((0x3c03  << 2) + 0xff620000)
+#define   HEVC_SLICE_VER_POS_PIC_TYPE              (0x3c04)
+#define P_HEVC_SLICE_VER_POS_PIC_TYPE              (volatile unsigned int *)((0x3c04  << 2) + 0xff620000)
+#define   HEVC_QP_VALUE_REG                        (0x3c05)
+#define P_HEVC_QP_VALUE_REG                        (volatile unsigned int *)((0x3c05  << 2) + 0xff620000)
+#define   HEVC_MBA_INC                             (0x3c06)
+#define P_HEVC_MBA_INC                             (volatile unsigned int *)((0x3c06  << 2) + 0xff620000)
+#define   HEVC_MB_MOTION_MODE                      (0x3c07)
+#define P_HEVC_MB_MOTION_MODE                      (volatile unsigned int *)((0x3c07  << 2) + 0xff620000)
+//`define PACKET_BYTE_COUNT   8'h08
+// bit 15 -- force_search_startcode_en
+// bit 14 -- int_cpu_when_error (before do anything)
+// bit 13 -- vld_error_reset
+// bit 12 -- return_on_slice_header
+// bit 6 -- jpeg_ff00_en
+// bit 5:0 -- vld_power_ctl
+#define   HEVC_POWER_CTL_VLD                       (0x3c08)
+#define P_HEVC_POWER_CTL_VLD                       (volatile unsigned int *)((0x3c08  << 2) + 0xff620000)
+#define   HEVC_MB_WIDTH                            (0x3c09)
+#define P_HEVC_MB_WIDTH                            (volatile unsigned int *)((0x3c09  << 2) + 0xff620000)
+#define   HEVC_SLICE_QP                            (0x3c0a)
+#define P_HEVC_SLICE_QP                            (volatile unsigned int *)((0x3c0a  << 2) + 0xff620000)
+// `define MB_X_MB_Y           8'h0b   /* current MBX and MBY                  */
+#define   HEVC_PRE_START_CODE                      (0x3c0b)
+#define P_HEVC_PRE_START_CODE                      (volatile unsigned int *)((0x3c0b  << 2) + 0xff620000)
+#define   HEVC_SLICE_START_BYTE_01                 (0x3c0c)
+#define P_HEVC_SLICE_START_BYTE_01                 (volatile unsigned int *)((0x3c0c  << 2) + 0xff620000)
+#define   HEVC_SLICE_START_BYTE_23                 (0x3c0d)
+#define P_HEVC_SLICE_START_BYTE_23                 (volatile unsigned int *)((0x3c0d  << 2) + 0xff620000)
+#define   HEVC_RESYNC_MARKER_LENGTH                (0x3c0e)
+#define P_HEVC_RESYNC_MARKER_LENGTH                (volatile unsigned int *)((0x3c0e  << 2) + 0xff620000)
+// bit[6:5] - frame/field info, 01 - top, 10 - bottom, 11 - frame
+// bit[4:0] - buffer ID
+// L0_BUFF_ID_0, L0_BUFF_ID_1, L1_BUFF_ID_0, L1_BUFF_ID_1
+#define   HEVC_DECODER_BUFFER_INFO                 (0x3c0f)
+#define P_HEVC_DECODER_BUFFER_INFO                 (volatile unsigned int *)((0x3c0f  << 2) + 0xff620000)
+#define   HEVC_FST_FOR_MV_X                        (0x3c10)
+#define P_HEVC_FST_FOR_MV_X                        (volatile unsigned int *)((0x3c10  << 2) + 0xff620000)
+#define   HEVC_FST_FOR_MV_Y                        (0x3c11)
+#define P_HEVC_FST_FOR_MV_Y                        (volatile unsigned int *)((0x3c11  << 2) + 0xff620000)
+#define   HEVC_SCD_FOR_MV_X                        (0x3c12)
+#define P_HEVC_SCD_FOR_MV_X                        (volatile unsigned int *)((0x3c12  << 2) + 0xff620000)
+#define   HEVC_SCD_FOR_MV_Y                        (0x3c13)
+#define P_HEVC_SCD_FOR_MV_Y                        (volatile unsigned int *)((0x3c13  << 2) + 0xff620000)
+#define   HEVC_FST_BAK_MV_X                        (0x3c14)
+#define P_HEVC_FST_BAK_MV_X                        (volatile unsigned int *)((0x3c14  << 2) + 0xff620000)
+#define   HEVC_FST_BAK_MV_Y                        (0x3c15)
+#define P_HEVC_FST_BAK_MV_Y                        (volatile unsigned int *)((0x3c15  << 2) + 0xff620000)
+#define   HEVC_SCD_BAK_MV_X                        (0x3c16)
+#define P_HEVC_SCD_BAK_MV_X                        (volatile unsigned int *)((0x3c16  << 2) + 0xff620000)
+#define   HEVC_SCD_BAK_MV_Y                        (0x3c17)
+#define P_HEVC_SCD_BAK_MV_Y                        (volatile unsigned int *)((0x3c17  << 2) + 0xff620000)
+// Bit 7:4 -- read_buffer_interlace  0-progressive, 1-interlace, used in VC1
+// bit 3 -- disable_new_stcode_search_fix // From GXM
+// bit 2 -- weighting_prediction
+// bit 1 -- mb_weighting_flag
+// bit 0 -- slice_weighting_flag
+#define   HEVC_VLD_DECODE_CONTROL                  (0x3c18)
+#define P_HEVC_VLD_DECODE_CONTROL                  (volatile unsigned int *)((0x3c18  << 2) + 0xff620000)
+#define   HEVC_VLD_REVERVED_19                     (0x3c19)
+#define P_HEVC_VLD_REVERVED_19                     (volatile unsigned int *)((0x3c19  << 2) + 0xff620000)
+#define   HEVC_VIFF_BIT_CNT                        (0x3c1a)
+#define P_HEVC_VIFF_BIT_CNT                        (volatile unsigned int *)((0x3c1a  << 2) + 0xff620000)
+#define   HEVC_BYTE_ALIGN_PEAK_HI                  (0x3c1b)
+#define P_HEVC_BYTE_ALIGN_PEAK_HI                  (volatile unsigned int *)((0x3c1b  << 2) + 0xff620000)
+#define   HEVC_BYTE_ALIGN_PEAK_LO                  (0x3c1c)
+#define P_HEVC_BYTE_ALIGN_PEAK_LO                  (volatile unsigned int *)((0x3c1c  << 2) + 0xff620000)
+#define   HEVC_NEXT_ALIGN_PEAK                     (0x3c1d)
+#define P_HEVC_NEXT_ALIGN_PEAK                     (volatile unsigned int *)((0x3c1d  << 2) + 0xff620000)
+// bit 31    : byte_aligned_zero_23_from_org // From GXM
+// bit 30    : force_shift_out_drop_flag_zero // From GXM
+// bit 29    : en_st_protect_from_org // From GXM
+// bit 28    : enable_halt_decode_start_voff
+// bit 27    : disable_C_pred_check
+// bit 26    : disable_I4_pred_check
+// bit 25    : disable_I16_pred_check
+// bit 24    : check_avs_1st_drop
+// bit 23    : enable_cabac_protect // From GXM
+// bit 22    : enable_avs_drop_more
+// bit 21    : reset_avs_drop_ptr
+// bit 20    : reset_cabac_use_next_at_end_req
+// bit 19    : vc1_inv_intra_co_mb_ref_rd
+// bit 18    : vc1_inv_co_mb_ref_rd
+// bit 17    : vc1_inv_intra_co_mb_ref_wr
+// bit 16    : vc1_inv_co_mb_ref_wr
+// bit 15    : disable_mv_cal_begin_only
+// bit 14    : avs_drop_enable
+// bit 13:12 : avs_drop_ptr
+// bit 11:8  : avs_demu_ctl_reg
+// bit 7 : avs_enable
+// bit 6 : disable_dblk_hcmd
+// bit 5 : disable_mc_hcmd
+// bit 4 : first_mode3_set enable
+// bit 3 : first_mode3
+// bit 2:1 : vc1_profile  0-SP, 1-MP, 2-reserved, 3-AP
+// bit 0   : vc1_enable
+#define   HEVC_VC1_CONTROL_REG                     (0x3c1e)
+#define P_HEVC_VC1_CONTROL_REG                     (volatile unsigned int *)((0x3c1e  << 2) + 0xff620000)
+#define   HEVC_PMV1_X                              (0x3c20)
+#define P_HEVC_PMV1_X                              (volatile unsigned int *)((0x3c20  << 2) + 0xff620000)
+#define   HEVC_PMV1_Y                              (0x3c21)
+#define P_HEVC_PMV1_Y                              (volatile unsigned int *)((0x3c21  << 2) + 0xff620000)
+#define   HEVC_PMV2_X                              (0x3c22)
+#define P_HEVC_PMV2_X                              (volatile unsigned int *)((0x3c22  << 2) + 0xff620000)
+#define   HEVC_PMV2_Y                              (0x3c23)
+#define P_HEVC_PMV2_Y                              (volatile unsigned int *)((0x3c23  << 2) + 0xff620000)
+#define   HEVC_PMV3_X                              (0x3c24)
+#define P_HEVC_PMV3_X                              (volatile unsigned int *)((0x3c24  << 2) + 0xff620000)
+#define   HEVC_PMV3_Y                              (0x3c25)
+#define P_HEVC_PMV3_Y                              (volatile unsigned int *)((0x3c25  << 2) + 0xff620000)
+#define   HEVC_PMV4_X                              (0x3c26)
+#define P_HEVC_PMV4_X                              (volatile unsigned int *)((0x3c26  << 2) + 0xff620000)
+#define   HEVC_PMV4_Y                              (0x3c27)
+#define P_HEVC_PMV4_Y                              (volatile unsigned int *)((0x3c27  << 2) + 0xff620000)
+// Can't use the same address for different defines
+// Therefore, create a single define that covers both
+// Only appears to be used in micro-code since the VLD hardware is
+// hard coded.
+// `define M4_TABLE_SELECT     8'h28  // Does this exist in HW ? Added from register_mp2.h
+// `define M4_TABLE_OUTPUT     8'h28  // Does this exist in HW ? Added from register_mp2.h
+#define   HEVC_M4_TABLE_SELECT                     (0x3c28)
+#define P_HEVC_M4_TABLE_SELECT                     (volatile unsigned int *)((0x3c28  << 2) + 0xff620000)
+#define   HEVC_M4_CONTROL_REG                      (0x3c29)
+#define P_HEVC_M4_CONTROL_REG                      (volatile unsigned int *)((0x3c29  << 2) + 0xff620000)
+#define   HEVC_BLOCK_NUM                           (0x3c2a)
+#define P_HEVC_BLOCK_NUM                           (volatile unsigned int *)((0x3c2a  << 2) + 0xff620000)
+#define   HEVC_PATTERN_CODE                        (0x3c2b)
+#define P_HEVC_PATTERN_CODE                        (volatile unsigned int *)((0x3c2b  << 2) + 0xff620000)
+#define   HEVC_MB_INFO                             (0x3c2c)
+#define P_HEVC_MB_INFO                             (volatile unsigned int *)((0x3c2c  << 2) + 0xff620000)
+#define   HEVC_VLD_DC_PRED                         (0x3c2d)
+#define P_HEVC_VLD_DC_PRED                         (volatile unsigned int *)((0x3c2d  << 2) + 0xff620000)
+#define   HEVC_VLD_ERROR_MASK                      (0x3c2e)
+#define P_HEVC_VLD_ERROR_MASK                      (volatile unsigned int *)((0x3c2e  << 2) + 0xff620000)
+#define   HEVC_VLD_DC_PRED_C                       (0x3c2f)
+#define P_HEVC_VLD_DC_PRED_C                       (volatile unsigned int *)((0x3c2f  << 2) + 0xff620000)
+#define   HEVC_LAST_SLICE_MV_ADDR                  (0x3c30)
+#define P_HEVC_LAST_SLICE_MV_ADDR                  (volatile unsigned int *)((0x3c30  << 2) + 0xff620000)
+#define   HEVC_LAST_MVX                            (0x3c31)
+#define P_HEVC_LAST_MVX                            (volatile unsigned int *)((0x3c31  << 2) + 0xff620000)
+#define   HEVC_LAST_MVY                            (0x3c32)
+#define P_HEVC_LAST_MVY                            (volatile unsigned int *)((0x3c32  << 2) + 0xff620000)
+#define   HEVC_VLD_C38                             (0x3c38)
+#define P_HEVC_VLD_C38                             (volatile unsigned int *)((0x3c38  << 2) + 0xff620000)
+#define   HEVC_VLD_C39                             (0x3c39)
+#define P_HEVC_VLD_C39                             (volatile unsigned int *)((0x3c39  << 2) + 0xff620000)
+#define   HEVC_VLD_STATUS                          (0x3c3a)
+#define P_HEVC_VLD_STATUS                          (volatile unsigned int *)((0x3c3a  << 2) + 0xff620000)
+#define   HEVC_VLD_SHIFT_STATUS                    (0x3c3b)
+#define P_HEVC_VLD_SHIFT_STATUS                    (volatile unsigned int *)((0x3c3b  << 2) + 0xff620000)
+// `define VLD_SHIFT_INFO      8'h3b  // Does this exist in HW ? used in $ucode/mpeg4
+#define   HEVC_VOFF_STATUS                         (0x3c3c)
+#define P_HEVC_VOFF_STATUS                         (volatile unsigned int *)((0x3c3c  << 2) + 0xff620000)
+#define   HEVC_VLD_C3D                             (0x3c3d)
+#define P_HEVC_VLD_C3D                             (volatile unsigned int *)((0x3c3d  << 2) + 0xff620000)
+#define   HEVC_VLD_DBG_INDEX                       (0x3c3e)
+#define P_HEVC_VLD_DBG_INDEX                       (volatile unsigned int *)((0x3c3e  << 2) + 0xff620000)
+// vld_buff_info -- (index == 0)
+// Bit11]    halt_decode_start_voff
+// Bit10]    C_pred_error
+// Bit[9]    I4_pred_error
+// Bit[8]    I16_pred_error
+// Bit[7:6]  mv_UR_ready_cnt;
+// Bit[5]  vld_wr_idx
+// Bit[4]  iq_rd_idx
+// Bit[3]  vld_vi_block_rdy_1
+// Bit[2]  vld_vi_block_rdy_2
+// Bit[1]  voff_empty_1
+// Bit[0]  voff_empty_2
+// cabac_buff_info_0 -- (index == 1)
+// Bit[31] shift_data_ready
+// Bit[30:29] Reserved
+// Bit[28:24] cabac_buffer_ptr
+// Bit[23:0] cabac_buffer
+// cabac_buff_info_1 -- (index == 2)
+// Bit[31:29] Reserved
+// Bit[28:20] Drange
+// Bit[19:16] bin_count_4
+// Bit[15:13] Reserved
+// Bit[12:6] context_mem_do
+// Bit[5:3] coeff_state
+// Bit[2:0] mvd_state
+// h264_mv_present -- (index == 3)
+// Bit[31:16] mv_present_l0
+// Bit[15:0] mv_present_l1
+// h264_mv_cal_info_0 -- (index == 4)
+// [31:28] mv_cal_state
+// [27:24] direct_spatial_cnt
+// Bit[23:21] Reserved
+// Bit[20] mv_UR_ready_for_mv_cal
+// Bit[19] co_mb_mem_ready_for_mv_cal
+// Bit[18] mc_dblk_cmd_if_busy
+// Bit[17] h264_co_mb_wr_busy
+// Bit[16] H264_cbp_blk_ready
+// Bit[15] mc_hcmd_rrdy
+// Bit[14] mc_hcmd_srdy
+// Bit[13] mc_cmd_if_ready
+// Bit[12] mc_hcmd_mv_available
+// Bit[11:8] mc_cmd_if_state
+// Bit[7] dblk_hcmd_rrdy
+// Bit[6] dblk_hcmd_srdy
+// Bit[5] dblk_cmd_if_ready
+// Bit[4] dblk_hcmd_mv_available
+// Bit[3:0] dblk_cmd_if_state
+// h264_mv_cal_info_1 -- (index == 5)
+//  Bit[31:29] Reserved
+//  Bit[28:24] total_mvd_num_l0
+//  Bit[23:21] Reserved
+//  Bit[20:16] mv_cal_ptr_l0
+//  Bit[15:13] Reserved
+//  Bit[12:8] mc_hcmd_ptr_l0
+//  Bit[7:5] Reserved
+//  Bit[4:0] dblk_hcmd_ptr_l0
+// h264_mv_cal_info_2 -- (index == 6)
+//  Bit[31:29] Reserved
+//  Bit[28:24] total_mvd_num_l1
+//  Bit[23:21] Reserved
+//  Bit[20:16] mv_cal_ptr_l1
+//  Bit[15:13] Reserved
+//  Bit[12:8] mc_hcmd_ptr_l1
+//  Bit[7:5] Reserved
+//  Bit[4:0] dblk_hcmd_ptr_l1
+// h264_co_mb_info -- (index == 7)
+// Bit[31:26] Reserved
+// Bit[25] mv_scale_cal_busy
+// Bit[24:20] co_mv_count
+// Bit[19:16] co_mv_process_state
+// Bit[15] h264_co_mb_rd_busy
+// Bit[15] h264_co_mb_rd_ready
+// Bit[13:12] co_mv_transfer_block_cnt
+// Bit[11:8] co_mv_transfer_ptr
+// Bit[7] co_mv_POC_l1_busy
+// Bit[6] h264_weight_scale_cal_en
+// Bit[5] weight_cal_busy
+// Bit[4] weight_cal_not_finished
+// Bit[3:0] weight_process_state
+#define   HEVC_VLD_DBG_DATA                        (0x3c3f)
+#define P_HEVC_VLD_DBG_DATA                        (volatile unsigned int *)((0x3c3f  << 2) + 0xff620000)
+// --------------------------------------------
+// VIFIFO DDR Interface
+// --------------------------------------------
+// The VIFIFO start pointer into DDR memory is a 32-bit number
+// The Start pointer will automatically be truncated to land on
+// an 8-byte boundary.  That is, bits [2:0] = 0;
+#define   HEVC_VLD_MEM_VIFIFO_START_PTR            (0x3c40)
+#define P_HEVC_VLD_MEM_VIFIFO_START_PTR            (volatile unsigned int *)((0x3c40  << 2) + 0xff620000)
+// The current pointer points so some location between the START and END
+// pointers.  The current pointer is a BYTE pointer.  That is, you can
+// point to any BYTE address within the START/END range
+#define   HEVC_VLD_MEM_VIFIFO_CURR_PTR             (0x3c41)
+#define P_HEVC_VLD_MEM_VIFIFO_CURR_PTR             (volatile unsigned int *)((0x3c41  << 2) + 0xff620000)
+#define   HEVC_VLD_MEM_VIFIFO_END_PTR              (0x3c42)
+#define P_HEVC_VLD_MEM_VIFIFO_END_PTR              (volatile unsigned int *)((0x3c42  << 2) + 0xff620000)
+#define   HEVC_VLD_MEM_VIFIFO_BYTES_AVAIL          (0x3c43)
+#define P_HEVC_VLD_MEM_VIFIFO_BYTES_AVAIL          (volatile unsigned int *)((0x3c43  << 2) + 0xff620000)
+// VIFIFO FIFO Control
+// bit  [31:24] viff_empty_int_enable_cpu[7:0]
+// bit  [23:16] viff_empty_int_enable_amrisc[7:0]
+//   -bit 23 Video BUFFER < 0x400 Bytes
+//   -bit 22 Video BUFFER < 0x200 Bytes
+//   -bit 21 Video BUFFER < 0x100 Bytes
+//   -bit 20 Video BUFFER < 0x80 Bytes
+//   -bit 19 Video BUFFER < 0x40 Bytes
+//   -bit 18 Video BUFFER < 0x20 Bytes
+//   -bit 17 vififo  < 16 double words
+//   -bit 16 vififo  < 8 double words
+// bit  [15:13] unused
+// bit  [12]    A_urgent
+// bit  [11]    transfer_length 0 - 32x64 Bits per request, 1 - 16x64 Bits per request
+// bit  [10]    use_level       Set this bit to 1 to enable filling of the FIFO controlled by the buffer
+//                              level control.  If this bit is 0, then use bit[1] to control the enabling of filling
+// bit  [9]     Data Ready.     This bit is set when data can be popped
+// bit  [8]     fill busy       This bit will be high when we're fetching data from the DDR memory
+//                              To reset this module, set cntl_enable = 0, and then wait for busy = 0.
+//                              After that you can pulse cntl_init to start over
+// bit  [7]     init_with_cntl_init
+// bit  [6]     reserved
+// bits [5:3]   endian:         see $lib/rtl/ddr_endian.v
+// bit  [2]     cntl_empty_en   Set to 1 to enable reading the DDR memory FIFO
+//                              Set cntl_empty_en = cntl_fill_en = 0 when pulsing cntl_init
+// bit  [1]     cntl_fill_en    Set to 1 to enable reading data from DDR memory
+// bit  [0]     cntl_init:      After setting the read pointers, sizes, channel masks
+//                              and read masks, set this bit to 1 and then to 0
+//                              NOTE:  You don't need to pulse cntl_init if only the start address is
+//                              being changed
+#define   HEVC_VLD_MEM_VIFIFO_CONTROL              (0x3c44)
+#define P_HEVC_VLD_MEM_VIFIFO_CONTROL              (volatile unsigned int *)((0x3c44  << 2) + 0xff620000)
+// --------------------------------------------
+// VIFIFO Buffer Level Manager
+// --------------------------------------------
+#define   HEVC_VLD_MEM_VIFIFO_WP                   (0x3c45)
+#define P_HEVC_VLD_MEM_VIFIFO_WP                   (volatile unsigned int *)((0x3c45  << 2) + 0xff620000)
+#define   HEVC_VLD_MEM_VIFIFO_RP                   (0x3c46)
+#define P_HEVC_VLD_MEM_VIFIFO_RP                   (volatile unsigned int *)((0x3c46  << 2) + 0xff620000)
+#define   HEVC_VLD_MEM_VIFIFO_LEVEL                (0x3c47)
+#define P_HEVC_VLD_MEM_VIFIFO_LEVEL                (volatile unsigned int *)((0x3c47  << 2) + 0xff620000)
+//
+// bit  [8]     use_parser_video2_wp
+// bit  [7]     vbuf2_out_manual
+// bit  [6]     vbuf_out_manual
+// bit  [5]     empty (ReadOnly)
+// bit  [4]     full (ReadOnly)
+// bit  [3:2]   reserved
+// bit  [1]     manual mode     Set to 1 for manual write pointer mode
+// bit  [0]     Init            Set high then low after everything has been initialized
+#define   HEVC_VLD_MEM_VIFIFO_BUF_CNTL             (0x3c48)
+#define P_HEVC_VLD_MEM_VIFIFO_BUF_CNTL             (volatile unsigned int *)((0x3c48  << 2) + 0xff620000)
+// bit 31:16 -- drop_bytes
+// bit 15:14 -- drop_status (Read-Only)
+// bit 13:12 -- sync_match_position (Read-Only)
+// bit 11:6 -- reserved
+// bit 5:4 -- TIME_STAMP_NUMBER, 0-32bits, 1-64bits, 2-96bits, 3-128bits
+// bit 3 -- stamp_soft_reset
+// bit 2 -- TIME_STAMP_length_enable
+// bit 1 -- TIME_STAMP_sync64_enable
+// bit 0 -- TIME_STAMP_enable
+#define   HEVC_VLD_TIME_STAMP_CNTL                 (0x3c49)
+#define P_HEVC_VLD_TIME_STAMP_CNTL                 (volatile unsigned int *)((0x3c49  << 2) + 0xff620000)
+// bit 31:0 -- TIME_STAMP_SYNC_CODE_0
+#define   HEVC_VLD_TIME_STAMP_SYNC_0               (0x3c4a)
+#define P_HEVC_VLD_TIME_STAMP_SYNC_0               (volatile unsigned int *)((0x3c4a  << 2) + 0xff620000)
+// bit 31:0 -- TIME_STAMP_SYNC_CODE_1
+#define   HEVC_VLD_TIME_STAMP_SYNC_1               (0x3c4b)
+#define P_HEVC_VLD_TIME_STAMP_SYNC_1               (volatile unsigned int *)((0x3c4b  << 2) + 0xff620000)
+// bit 31:0 TIME_STAMP_0
+#define   HEVC_VLD_TIME_STAMP_0                    (0x3c4c)
+#define P_HEVC_VLD_TIME_STAMP_0                    (volatile unsigned int *)((0x3c4c  << 2) + 0xff620000)
+// bit 31:0 TIME_STAMP_1
+#define   HEVC_VLD_TIME_STAMP_1                    (0x3c4d)
+#define P_HEVC_VLD_TIME_STAMP_1                    (volatile unsigned int *)((0x3c4d  << 2) + 0xff620000)
+// bit 31:0 TIME_STAMP_2
+#define   HEVC_VLD_TIME_STAMP_2                    (0x3c4e)
+#define P_HEVC_VLD_TIME_STAMP_2                    (volatile unsigned int *)((0x3c4e  << 2) + 0xff620000)
+// bit 31:0 TIME_STAMP_3
+#define   HEVC_VLD_TIME_STAMP_3                    (0x3c4f)
+#define P_HEVC_VLD_TIME_STAMP_3                    (volatile unsigned int *)((0x3c4f  << 2) + 0xff620000)
+// bit 31:0 TIME_STAMP_LENGTH
+#define   HEVC_VLD_TIME_STAMP_LENGTH               (0x3c50)
+#define P_HEVC_VLD_TIME_STAMP_LENGTH               (volatile unsigned int *)((0x3c50  << 2) + 0xff620000)
+// bit 15:0 vififo_rd_count
+#define   HEVC_VLD_MEM_VIFIFO_WRAP_COUNT           (0x3c51)
+#define P_HEVC_VLD_MEM_VIFIFO_WRAP_COUNT           (volatile unsigned int *)((0x3c51  << 2) + 0xff620000)
+// bit 29:24 A_brst_num
+// bit 21:16 A_id
+// bit 15:0 level_hold
+#define   HEVC_VLD_MEM_VIFIFO_MEM_CTL              (0x3c52)
+#define P_HEVC_VLD_MEM_VIFIFO_MEM_CTL              (volatile unsigned int *)((0x3c52  << 2) + 0xff620000)
+#define   HEVC_VLD_MEM_VBUF_RD_PTR                 (0x3c53)
+#define P_HEVC_VLD_MEM_VBUF_RD_PTR                 (volatile unsigned int *)((0x3c53  << 2) + 0xff620000)
+#define   HEVC_VLD_MEM_VBUF2_RD_PTR                (0x3c54)
+#define P_HEVC_VLD_MEM_VBUF2_RD_PTR                (volatile unsigned int *)((0x3c54  << 2) + 0xff620000)
+#define   HEVC_VLD_MEM_SWAP_ADDR                   (0x3c55)
+#define P_HEVC_VLD_MEM_SWAP_ADDR                   (volatile unsigned int *)((0x3c55  << 2) + 0xff620000)
+// bit[23:16] - swap_d_count (Read Only)
+// bit[15:8]  - swap_a_count (Read Only)
+// bit [7] - swap busy (Read Only)
+// bit [6:2] - reserved
+// bit [1] - 1 - STORE to Memory, 0 - LOAD from Memory
+// bit [0] - swap active
+#define   HEVC_VLD_MEM_SWAP_CTL                    (0x3c56)
+#define P_HEVC_VLD_MEM_SWAP_CTL                    (volatile unsigned int *)((0x3c56  << 2) + 0xff620000)
+//
+// Closing file:  vld_regs.h
+//
+//
+// Reading file:  iqidct_regs.h
+//
+//========================================================================
+//  IQ/IDCT module level register offset
+//========================================================================
+// -----------------------------------------------
+// CBUS_BASE:  DOS_VDEC_IQIDCT_CBUS_BASE = 0x0e
+// -----------------------------------------------
+#define   HCODEC_VCOP_CTRL_REG                     (0x1e00)
+#define P_HCODEC_VCOP_CTRL_REG                     (volatile unsigned int *)((0x1e00  << 2) + 0xff620000)
+#define   HCODEC_QP_CTRL_REG                       (0x1e01)
+#define P_HCODEC_QP_CTRL_REG                       (volatile unsigned int *)((0x1e01  << 2) + 0xff620000)
+#define   HCODEC_INTRA_QUANT_MATRIX                (0x1e02)
+#define P_HCODEC_INTRA_QUANT_MATRIX                (volatile unsigned int *)((0x1e02  << 2) + 0xff620000)
+#define   HCODEC_NON_I_QUANT_MATRIX                (0x1e03)
+#define P_HCODEC_NON_I_QUANT_MATRIX                (volatile unsigned int *)((0x1e03  << 2) + 0xff620000)
+#define   HCODEC_DC_SCALER                         (0x1e04)
+#define P_HCODEC_DC_SCALER                         (volatile unsigned int *)((0x1e04  << 2) + 0xff620000)
+#define   HCODEC_DC_AC_CTRL                        (0x1e05)
+#define P_HCODEC_DC_AC_CTRL                        (volatile unsigned int *)((0x1e05  << 2) + 0xff620000)
+// `define RV_AI_CTRL          8'h05  // ONLY for $ucode/real/amrisc/rv.s reg value from apollo
+#define   HCODEC_DC_AC_SCALE_MUL                   (0x1e06)
+#define P_HCODEC_DC_AC_SCALE_MUL                   (volatile unsigned int *)((0x1e06  << 2) + 0xff620000)
+#define   HCODEC_DC_AC_SCALE_DIV                   (0x1e07)
+#define P_HCODEC_DC_AC_SCALE_DIV                   (volatile unsigned int *)((0x1e07  << 2) + 0xff620000)
+// `define DC_AC_SCALE_RESULT  8'h06
+// `define RESERVED_E07        8'h07
+#define   HCODEC_POWER_CTL_IQIDCT                  (0x1e08)
+#define P_HCODEC_POWER_CTL_IQIDCT                  (volatile unsigned int *)((0x1e08  << 2) + 0xff620000)
+#define   HCODEC_RV_AI_Y_X                         (0x1e09)
+#define P_HCODEC_RV_AI_Y_X                         (volatile unsigned int *)((0x1e09  << 2) + 0xff620000)
+#define   HCODEC_RV_AI_U_X                         (0x1e0a)
+#define P_HCODEC_RV_AI_U_X                         (volatile unsigned int *)((0x1e0a  << 2) + 0xff620000)
+#define   HCODEC_RV_AI_V_X                         (0x1e0b)
+#define P_HCODEC_RV_AI_V_X                         (volatile unsigned int *)((0x1e0b  << 2) + 0xff620000)
+// bit 15:0 will count up when rv_ai_mb finished when non zero
+// and rv_ai_mb_finished_int will be generate when this is not zero
+#define   HCODEC_RV_AI_MB_COUNT                    (0x1e0c)
+#define P_HCODEC_RV_AI_MB_COUNT                    (volatile unsigned int *)((0x1e0c  << 2) + 0xff620000)
+// For H264 I in PB picture Use -- dma type : h264_next_intra_dma
+#define   HCODEC_NEXT_INTRA_DMA_ADDRESS            (0x1e0d)
+#define P_HCODEC_NEXT_INTRA_DMA_ADDRESS            (volatile unsigned int *)((0x1e0d  << 2) + 0xff620000)
+// Bit 16 -- dcac_dma_read_cache_disable
+// Bit 15 -- dcac_dma_urgent
+// Bit 14 -- nv21_swap
+// Bit 13 -- nv21_top_dma
+// Bit 12 -- reset_rv_ai_wait_rd_data
+// Bit 11 -- set_rv_ai_wait_rd_data [12:11] = 3 means only dec 1 (For Skipped MB of MBAFF)
+// Bit 10 -- rv_ai_wait_rd_data (Read Only)
+// Bit 9 -- enable_rv_ai_wait_rd_data
+// Bit 8 -- disable_vc1_mv_update
+// Bit 7 -- pred_dc_signed
+// Bit 6 -- inc_vld_ready_count
+// Bit 5 -- dec_vld_ready_count
+// Bit 4 -- disable_ref_bidir_fix
+// Bit 3 -- disable_MV_UL_l1_bot_fix
+// Bit 2 -- disable_mb_aff_fix
+// Bit 1 -- canvas_addr_7
+// Bit 0 -- constrained_intra_pred_flag for H264
+#define   HCODEC_IQIDCT_CONTROL                    (0x1e0e)
+#define P_HCODEC_IQIDCT_CONTROL                    (volatile unsigned int *)((0x1e0e  << 2) + 0xff620000)
+// Bit[31:19] Reserved
+// Bit[18] iq_waiting
+// Bit[17] iq_om_wr_idx
+// Bit[16] iq_om_rd_idx
+// Bit[15] iq_om_busy
+// Bit[14] iq_om_2_busy
+// Bit[13] idx_fifo_0
+// Bit[12] idx_fifo_1
+// Bit[11] idx_fifo_2
+// Bit[10] idx_fifo_3
+// Bit[9] idx_fifo_4
+// Bit[8] idx_fifo_5
+// Bit[7] idx_fifo_6
+// Bit[6] idx_fifo_7
+// Bit[5:3] idx_fifo_wp
+// Bit[2:0] idx_fifo_rp
+#define   HCODEC_IQIDCT_DEBUG_INFO_0               (0x1e0f)
+#define P_HCODEC_IQIDCT_DEBUG_INFO_0               (volatile unsigned int *)((0x1e0f  << 2) + 0xff620000)
+// For RTL Simulation Only
+#define   HCODEC_DEBLK_CMD                         (0x1e10)
+#define P_HCODEC_DEBLK_CMD                         (volatile unsigned int *)((0x1e10  << 2) + 0xff620000)
+// Bit[15+16] ds_mc_valid_2
+// Bit[14+16] new_idct1_rd_idx_2
+// Bit[13+16] new_idct1_wr_idx_2
+// Bit[12+16] idct1_buff0_busy_2
+// Bit[11+16] idct1_buff1_busy_2
+// Bit[10+16] new_idct1_busy_2
+// Bit[9+16] iq_om_8val_2
+// Bit[8+16] idct1_pipe_busy_2
+// Bit[7+16] wait_mb_left_finish_hold_2
+// Bit[6+16] new_idct2_rd_idx_2
+// Bit[5+16] new_idct2_wr_idx_2
+// Bit[4+16] idct2_buff0_busy_2
+// Bit[3+16] idct2_buff1_busy_2
+// Bit[2+16] idct2_en_2
+// Bit[1+16] new_idct2_busy_2
+// Bit[0+16] new_idct1_ready_2
+// Bit[15] ds_mc_valid_1
+// Bit[14] new_idct1_rd_idx_1
+// Bit[13] new_idct1_wr_idx_1
+// Bit[12] idct1_buff0_busy_1
+// Bit[11] idct1_buff1_busy_1
+// Bit[10] new_idct1_busy_1
+// Bit[9] iq_om_8val_1
+// Bit[8] idct1_pipe_busy_1
+// Bit[7] wait_mb_left_finish_hold_1
+// Bit[6] new_idct2_rd_idx_1
+// Bit[5] new_idct2_wr_idx_1
+// Bit[4] idct2_buff0_busy_1
+// Bit[3] idct2_buff1_busy_1
+// Bit[2] idct2_en_1
+// Bit[1] new_idct2_busy_1
+// Bit[0] new_idct1_ready_1
+#define   HCODEC_IQIDCT_DEBUG_IDCT                 (0x1e11)
+#define P_HCODEC_IQIDCT_DEBUG_IDCT                 (volatile unsigned int *)((0x1e11  << 2) + 0xff620000)
+// bit 31 -- convas_enable
+// bit 30:24 -- convas_x_count ( 8 pixels / 64 bits )
+// bit 23:16 -- convas_y_count
+// bit 15   -- dcac_dma_busy
+// bit 14   -- dcac_dma_read_cache_active
+// bit 13:8 -- dcac_dma_count
+// bit 7    -- dcac_dma_rw
+// bit 6    -- dcac_skip_read_mode
+// bit 5:0  -- dcac_dma_offset
+#define   HCODEC_DCAC_DMA_CTRL                     (0x1e12)
+#define P_HCODEC_DCAC_DMA_CTRL                     (volatile unsigned int *)((0x1e12  << 2) + 0xff620000)
+// when (convas_enable == 0 )
+//   bit 31:0 dcac_dma_addr
+// when (convas_enable == 1 )
+//   bit 31:25 canvas_addr (7 bits)
+//   bit 24:12 convas_y_start ( 13 btis )
+//   bit 11:0  convas_x_start ( 12 btis )
+#define   HCODEC_DCAC_DMA_ADDRESS                  (0x1e13)
+#define P_HCODEC_DCAC_DMA_ADDRESS                  (volatile unsigned int *)((0x1e13  << 2) + 0xff620000)
+// bit 7:0 -- dcac_cpu_addr
+#define   HCODEC_DCAC_CPU_ADDRESS                  (0x1e14)
+#define P_HCODEC_DCAC_CPU_ADDRESS                  (volatile unsigned int *)((0x1e14  << 2) + 0xff620000)
+// bit 31:0 -- dcac_cpu_data
+#define   HCODEC_DCAC_CPU_DATA                     (0x1e15)
+#define P_HCODEC_DCAC_CPU_DATA                     (volatile unsigned int *)((0x1e15  << 2) + 0xff620000)
+// bit 31:19 -- reserved
+// bit 18:16 -- block_num_reg -- Read-Only
+// bit 15:0 -- dcac_mb_count
+#define   HCODEC_DCAC_MB_COUNT                     (0x1e16)
+#define P_HCODEC_DCAC_MB_COUNT                     (volatile unsigned int *)((0x1e16  << 2) + 0xff620000)
+// bit 31:18 -- reserved
+// For H264 :
+//   bit 17:2 -- h264_quant
+//   bit 11:6 -- h264_quant_c
+//   bit  5:0 -- h264_quant_c
+// For VC1 :
+//   bit    17 -- qindex_GT_8
+//   bit    16 -- HalfQPStep
+//   bit 15:12 -- eQuantMode
+//   bit 11:6  -- AltPQuant
+//   bit  5:0  -- PQuant
+//
+#define   HCODEC_IQ_QUANT                          (0x1e17)
+#define P_HCODEC_IQ_QUANT                          (volatile unsigned int *)((0x1e17  << 2) + 0xff620000)
+// bit 31:24  -- bitplane_width
+// bit 23:16  -- bitplane_height
+// bit 15:14  -- bitplane_start_x
+// bit 13:12  -- bitplane_start_y
+// bit 11:4   -- reserved
+// bit 3:1    -- bitplane_type
+// bit 0      -- bitplane_busy
+#define   HCODEC_VC1_BITPLANE_CTL                  (0x1e18)
+#define P_HCODEC_VC1_BITPLANE_CTL                  (volatile unsigned int *)((0x1e18  << 2) + 0xff620000)
+// bit 24:16  -- wq_param1
+// bit  8: 0  -- wq_param0
+#define   HCODEC_AVSP_IQ_WQ_PARAM_01               (0x1e19)
+#define P_HCODEC_AVSP_IQ_WQ_PARAM_01               (volatile unsigned int *)((0x1e19  << 2) + 0xff620000)
+// bit 24:16  -- wq_param3
+// bit  8: 0  -- wq_param2
+#define   HCODEC_AVSP_IQ_WQ_PARAM_23               (0x1e1a)
+#define P_HCODEC_AVSP_IQ_WQ_PARAM_23               (volatile unsigned int *)((0x1e1a  << 2) + 0xff620000)
+// bit 24:16  -- wq_param5
+// bit  8: 0  -- wq_param4
+#define   HCODEC_AVSP_IQ_WQ_PARAM_45               (0x1e1b)
+#define P_HCODEC_AVSP_IQ_WQ_PARAM_45               (volatile unsigned int *)((0x1e1b  << 2) + 0xff620000)
+// bit    31  -- weight_quant_en
+// bit 17:16  -- current_scene_model
+// bit 12: 8  -- chroma_qp_delta_cr
+// bit  4: 0  -- chroma_qp_delta_cb
+#define   HCODEC_AVSP_IQ_CTL                       (0x1e1c)
+#define P_HCODEC_AVSP_IQ_CTL                       (volatile unsigned int *)((0x1e1c  << 2) + 0xff620000)
+//======================================
+//  VCOP Control Register Bits
+//
+//======================================
+    //`define IQIDCT_RESET	    16'h0001	    // Bit 0
+//======================================
+//  QP Control Register Bits
+//
+//======================================
+// Duplicate Address:  When actually used
+// please move to a different address
+// `define FLD_DCT_TYPE	    16'h0100	    // Bit 8	0 = Frame DCT; 1 = field DCT
+//
+// Closing file:  iqidct_regs.h
+//
+//
+// Reading file:  iqidct_regs.h
+//
+//========================================================================
+//  IQ/IDCT module level register offset
+//========================================================================
+// -----------------------------------------------
+// CBUS_BASE:  DOS_VDEC_IQIDCT_CBUS_BASE = 0x0e
+// -----------------------------------------------
+#define   VDEC2_VCOP_CTRL_REG                      (0x2e00)
+#define P_VDEC2_VCOP_CTRL_REG                      (volatile unsigned int *)((0x2e00  << 2) + 0xff620000)
+#define   VDEC2_QP_CTRL_REG                        (0x2e01)
+#define P_VDEC2_QP_CTRL_REG                        (volatile unsigned int *)((0x2e01  << 2) + 0xff620000)
+#define   VDEC2_INTRA_QUANT_MATRIX                 (0x2e02)
+#define P_VDEC2_INTRA_QUANT_MATRIX                 (volatile unsigned int *)((0x2e02  << 2) + 0xff620000)
+#define   VDEC2_NON_I_QUANT_MATRIX                 (0x2e03)
+#define P_VDEC2_NON_I_QUANT_MATRIX                 (volatile unsigned int *)((0x2e03  << 2) + 0xff620000)
+#define   VDEC2_DC_SCALER                          (0x2e04)
+#define P_VDEC2_DC_SCALER                          (volatile unsigned int *)((0x2e04  << 2) + 0xff620000)
+#define   VDEC2_DC_AC_CTRL                         (0x2e05)
+#define P_VDEC2_DC_AC_CTRL                         (volatile unsigned int *)((0x2e05  << 2) + 0xff620000)
+// `define RV_AI_CTRL          8'h05  // ONLY for $ucode/real/amrisc/rv.s reg value from apollo
+#define   VDEC2_DC_AC_SCALE_MUL                    (0x2e06)
+#define P_VDEC2_DC_AC_SCALE_MUL                    (volatile unsigned int *)((0x2e06  << 2) + 0xff620000)
+#define   VDEC2_DC_AC_SCALE_DIV                    (0x2e07)
+#define P_VDEC2_DC_AC_SCALE_DIV                    (volatile unsigned int *)((0x2e07  << 2) + 0xff620000)
+// `define DC_AC_SCALE_RESULT  8'h06
+// `define RESERVED_E07        8'h07
+#define   VDEC2_POWER_CTL_IQIDCT                   (0x2e08)
+#define P_VDEC2_POWER_CTL_IQIDCT                   (volatile unsigned int *)((0x2e08  << 2) + 0xff620000)
+#define   VDEC2_RV_AI_Y_X                          (0x2e09)
+#define P_VDEC2_RV_AI_Y_X                          (volatile unsigned int *)((0x2e09  << 2) + 0xff620000)
+#define   VDEC2_RV_AI_U_X                          (0x2e0a)
+#define P_VDEC2_RV_AI_U_X                          (volatile unsigned int *)((0x2e0a  << 2) + 0xff620000)
+#define   VDEC2_RV_AI_V_X                          (0x2e0b)
+#define P_VDEC2_RV_AI_V_X                          (volatile unsigned int *)((0x2e0b  << 2) + 0xff620000)
+// bit 15:0 will count up when rv_ai_mb finished when non zero
+// and rv_ai_mb_finished_int will be generate when this is not zero
+#define   VDEC2_RV_AI_MB_COUNT                     (0x2e0c)
+#define P_VDEC2_RV_AI_MB_COUNT                     (volatile unsigned int *)((0x2e0c  << 2) + 0xff620000)
+// For H264 I in PB picture Use -- dma type : h264_next_intra_dma
+#define   VDEC2_NEXT_INTRA_DMA_ADDRESS             (0x2e0d)
+#define P_VDEC2_NEXT_INTRA_DMA_ADDRESS             (volatile unsigned int *)((0x2e0d  << 2) + 0xff620000)
+// Bit 16 -- dcac_dma_read_cache_disable
+// Bit 15 -- dcac_dma_urgent
+// Bit 14 -- nv21_swap
+// Bit 13 -- nv21_top_dma
+// Bit 12 -- reset_rv_ai_wait_rd_data
+// Bit 11 -- set_rv_ai_wait_rd_data [12:11] = 3 means only dec 1 (For Skipped MB of MBAFF)
+// Bit 10 -- rv_ai_wait_rd_data (Read Only)
+// Bit 9 -- enable_rv_ai_wait_rd_data
+// Bit 8 -- disable_vc1_mv_update
+// Bit 7 -- pred_dc_signed
+// Bit 6 -- inc_vld_ready_count
+// Bit 5 -- dec_vld_ready_count
+// Bit 4 -- disable_ref_bidir_fix
+// Bit 3 -- disable_MV_UL_l1_bot_fix
+// Bit 2 -- disable_mb_aff_fix
+// Bit 1 -- canvas_addr_7
+// Bit 0 -- constrained_intra_pred_flag for H264
+#define   VDEC2_IQIDCT_CONTROL                     (0x2e0e)
+#define P_VDEC2_IQIDCT_CONTROL                     (volatile unsigned int *)((0x2e0e  << 2) + 0xff620000)
+// Bit[31:19] Reserved
+// Bit[18] iq_waiting
+// Bit[17] iq_om_wr_idx
+// Bit[16] iq_om_rd_idx
+// Bit[15] iq_om_busy
+// Bit[14] iq_om_2_busy
+// Bit[13] idx_fifo_0
+// Bit[12] idx_fifo_1
+// Bit[11] idx_fifo_2
+// Bit[10] idx_fifo_3
+// Bit[9] idx_fifo_4
+// Bit[8] idx_fifo_5
+// Bit[7] idx_fifo_6
+// Bit[6] idx_fifo_7
+// Bit[5:3] idx_fifo_wp
+// Bit[2:0] idx_fifo_rp
+#define   VDEC2_IQIDCT_DEBUG_INFO_0                (0x2e0f)
+#define P_VDEC2_IQIDCT_DEBUG_INFO_0                (volatile unsigned int *)((0x2e0f  << 2) + 0xff620000)
+// For RTL Simulation Only
+#define   VDEC2_DEBLK_CMD                          (0x2e10)
+#define P_VDEC2_DEBLK_CMD                          (volatile unsigned int *)((0x2e10  << 2) + 0xff620000)
+// Bit[15+16] ds_mc_valid_2
+// Bit[14+16] new_idct1_rd_idx_2
+// Bit[13+16] new_idct1_wr_idx_2
+// Bit[12+16] idct1_buff0_busy_2
+// Bit[11+16] idct1_buff1_busy_2
+// Bit[10+16] new_idct1_busy_2
+// Bit[9+16] iq_om_8val_2
+// Bit[8+16] idct1_pipe_busy_2
+// Bit[7+16] wait_mb_left_finish_hold_2
+// Bit[6+16] new_idct2_rd_idx_2
+// Bit[5+16] new_idct2_wr_idx_2
+// Bit[4+16] idct2_buff0_busy_2
+// Bit[3+16] idct2_buff1_busy_2
+// Bit[2+16] idct2_en_2
+// Bit[1+16] new_idct2_busy_2
+// Bit[0+16] new_idct1_ready_2
+// Bit[15] ds_mc_valid_1
+// Bit[14] new_idct1_rd_idx_1
+// Bit[13] new_idct1_wr_idx_1
+// Bit[12] idct1_buff0_busy_1
+// Bit[11] idct1_buff1_busy_1
+// Bit[10] new_idct1_busy_1
+// Bit[9] iq_om_8val_1
+// Bit[8] idct1_pipe_busy_1
+// Bit[7] wait_mb_left_finish_hold_1
+// Bit[6] new_idct2_rd_idx_1
+// Bit[5] new_idct2_wr_idx_1
+// Bit[4] idct2_buff0_busy_1
+// Bit[3] idct2_buff1_busy_1
+// Bit[2] idct2_en_1
+// Bit[1] new_idct2_busy_1
+// Bit[0] new_idct1_ready_1
+#define   VDEC2_IQIDCT_DEBUG_IDCT                  (0x2e11)
+#define P_VDEC2_IQIDCT_DEBUG_IDCT                  (volatile unsigned int *)((0x2e11  << 2) + 0xff620000)
+// bit 31 -- convas_enable
+// bit 30:24 -- convas_x_count ( 8 pixels / 64 bits )
+// bit 23:16 -- convas_y_count
+// bit 15   -- dcac_dma_busy
+// bit 14   -- dcac_dma_read_cache_active
+// bit 13:8 -- dcac_dma_count
+// bit 7    -- dcac_dma_rw
+// bit 6    -- dcac_skip_read_mode
+// bit 5:0  -- dcac_dma_offset
+#define   VDEC2_DCAC_DMA_CTRL                      (0x2e12)
+#define P_VDEC2_DCAC_DMA_CTRL                      (volatile unsigned int *)((0x2e12  << 2) + 0xff620000)
+// when (convas_enable == 0 )
+//   bit 31:0 dcac_dma_addr
+// when (convas_enable == 1 )
+//   bit 31:25 canvas_addr (7 bits)
+//   bit 24:12 convas_y_start ( 13 btis )
+//   bit 11:0  convas_x_start ( 12 btis )
+#define   VDEC2_DCAC_DMA_ADDRESS                   (0x2e13)
+#define P_VDEC2_DCAC_DMA_ADDRESS                   (volatile unsigned int *)((0x2e13  << 2) + 0xff620000)
+// bit 7:0 -- dcac_cpu_addr
+#define   VDEC2_DCAC_CPU_ADDRESS                   (0x2e14)
+#define P_VDEC2_DCAC_CPU_ADDRESS                   (volatile unsigned int *)((0x2e14  << 2) + 0xff620000)
+// bit 31:0 -- dcac_cpu_data
+#define   VDEC2_DCAC_CPU_DATA                      (0x2e15)
+#define P_VDEC2_DCAC_CPU_DATA                      (volatile unsigned int *)((0x2e15  << 2) + 0xff620000)
+// bit 31:19 -- reserved
+// bit 18:16 -- block_num_reg -- Read-Only
+// bit 15:0 -- dcac_mb_count
+#define   VDEC2_DCAC_MB_COUNT                      (0x2e16)
+#define P_VDEC2_DCAC_MB_COUNT                      (volatile unsigned int *)((0x2e16  << 2) + 0xff620000)
+// bit 31:18 -- reserved
+// For H264 :
+//   bit 17:2 -- h264_quant
+//   bit 11:6 -- h264_quant_c
+//   bit  5:0 -- h264_quant_c
+// For VC1 :
+//   bit    17 -- qindex_GT_8
+//   bit    16 -- HalfQPStep
+//   bit 15:12 -- eQuantMode
+//   bit 11:6  -- AltPQuant
+//   bit  5:0  -- PQuant
+//
+#define   VDEC2_IQ_QUANT                           (0x2e17)
+#define P_VDEC2_IQ_QUANT                           (volatile unsigned int *)((0x2e17  << 2) + 0xff620000)
+// bit 31:24  -- bitplane_width
+// bit 23:16  -- bitplane_height
+// bit 15:14  -- bitplane_start_x
+// bit 13:12  -- bitplane_start_y
+// bit 11:4   -- reserved
+// bit 3:1    -- bitplane_type
+// bit 0      -- bitplane_busy
+#define   VDEC2_VC1_BITPLANE_CTL                   (0x2e18)
+#define P_VDEC2_VC1_BITPLANE_CTL                   (volatile unsigned int *)((0x2e18  << 2) + 0xff620000)
+// bit 24:16  -- wq_param1
+// bit  8: 0  -- wq_param0
+#define   VDEC2_AVSP_IQ_WQ_PARAM_01                (0x2e19)
+#define P_VDEC2_AVSP_IQ_WQ_PARAM_01                (volatile unsigned int *)((0x2e19  << 2) + 0xff620000)
+// bit 24:16  -- wq_param3
+// bit  8: 0  -- wq_param2
+#define   VDEC2_AVSP_IQ_WQ_PARAM_23                (0x2e1a)
+#define P_VDEC2_AVSP_IQ_WQ_PARAM_23                (volatile unsigned int *)((0x2e1a  << 2) + 0xff620000)
+// bit 24:16  -- wq_param5
+// bit  8: 0  -- wq_param4
+#define   VDEC2_AVSP_IQ_WQ_PARAM_45                (0x2e1b)
+#define P_VDEC2_AVSP_IQ_WQ_PARAM_45                (volatile unsigned int *)((0x2e1b  << 2) + 0xff620000)
+// bit    31  -- weight_quant_en
+// bit 17:16  -- current_scene_model
+// bit 12: 8  -- chroma_qp_delta_cr
+// bit  4: 0  -- chroma_qp_delta_cb
+#define   VDEC2_AVSP_IQ_CTL                        (0x2e1c)
+#define P_VDEC2_AVSP_IQ_CTL                        (volatile unsigned int *)((0x2e1c  << 2) + 0xff620000)
+//======================================
+//  VCOP Control Register Bits
+//
+//======================================
+    //`define IQIDCT_RESET	    16'h0001	    // Bit 0
+//======================================
+//  QP Control Register Bits
+//
+//======================================
+// Duplicate Address:  When actually used
+// please move to a different address
+// `define FLD_DCT_TYPE	    16'h0100	    // Bit 8	0 = Frame DCT; 1 = field DCT
+//
+// Closing file:  iqidct_regs.h
+//
+//
+// Reading file:  iqidct_regs.h
+//
+//========================================================================
+//  IQ/IDCT module level register offset
+//========================================================================
+// -----------------------------------------------
+// CBUS_BASE:  DOS_VDEC_IQIDCT_CBUS_BASE = 0x0e
+// -----------------------------------------------
+#define   HEVC_VCOP_CTRL_REG                       (0x3e00)
+#define P_HEVC_VCOP_CTRL_REG                       (volatile unsigned int *)((0x3e00  << 2) + 0xff620000)
+#define   HEVC_QP_CTRL_REG                         (0x3e01)
+#define P_HEVC_QP_CTRL_REG                         (volatile unsigned int *)((0x3e01  << 2) + 0xff620000)
+#define   HEVC_INTRA_QUANT_MATRIX                  (0x3e02)
+#define P_HEVC_INTRA_QUANT_MATRIX                  (volatile unsigned int *)((0x3e02  << 2) + 0xff620000)
+#define   HEVC_NON_I_QUANT_MATRIX                  (0x3e03)
+#define P_HEVC_NON_I_QUANT_MATRIX                  (volatile unsigned int *)((0x3e03  << 2) + 0xff620000)
+#define   HEVC_DC_SCALER                           (0x3e04)
+#define P_HEVC_DC_SCALER                           (volatile unsigned int *)((0x3e04  << 2) + 0xff620000)
+#define   HEVC_DC_AC_CTRL                          (0x3e05)
+#define P_HEVC_DC_AC_CTRL                          (volatile unsigned int *)((0x3e05  << 2) + 0xff620000)
+// `define RV_AI_CTRL          8'h05  // ONLY for $ucode/real/amrisc/rv.s reg value from apollo
+#define   HEVC_DC_AC_SCALE_MUL                     (0x3e06)
+#define P_HEVC_DC_AC_SCALE_MUL                     (volatile unsigned int *)((0x3e06  << 2) + 0xff620000)
+#define   HEVC_DC_AC_SCALE_DIV                     (0x3e07)
+#define P_HEVC_DC_AC_SCALE_DIV                     (volatile unsigned int *)((0x3e07  << 2) + 0xff620000)
+// `define DC_AC_SCALE_RESULT  8'h06
+// `define RESERVED_E07        8'h07
+#define   HEVC_POWER_CTL_IQIDCT                    (0x3e08)
+#define P_HEVC_POWER_CTL_IQIDCT                    (volatile unsigned int *)((0x3e08  << 2) + 0xff620000)
+#define   HEVC_RV_AI_Y_X                           (0x3e09)
+#define P_HEVC_RV_AI_Y_X                           (volatile unsigned int *)((0x3e09  << 2) + 0xff620000)
+#define   HEVC_RV_AI_U_X                           (0x3e0a)
+#define P_HEVC_RV_AI_U_X                           (volatile unsigned int *)((0x3e0a  << 2) + 0xff620000)
+#define   HEVC_RV_AI_V_X                           (0x3e0b)
+#define P_HEVC_RV_AI_V_X                           (volatile unsigned int *)((0x3e0b  << 2) + 0xff620000)
+// bit 15:0 will count up when rv_ai_mb finished when non zero
+// and rv_ai_mb_finished_int will be generate when this is not zero
+#define   HEVC_RV_AI_MB_COUNT                      (0x3e0c)
+#define P_HEVC_RV_AI_MB_COUNT                      (volatile unsigned int *)((0x3e0c  << 2) + 0xff620000)
+// For H264 I in PB picture Use -- dma type : h264_next_intra_dma
+#define   HEVC_NEXT_INTRA_DMA_ADDRESS              (0x3e0d)
+#define P_HEVC_NEXT_INTRA_DMA_ADDRESS              (volatile unsigned int *)((0x3e0d  << 2) + 0xff620000)
+// Bit 16 -- dcac_dma_read_cache_disable
+// Bit 15 -- dcac_dma_urgent
+// Bit 14 -- nv21_swap
+// Bit 13 -- nv21_top_dma
+// Bit 12 -- reset_rv_ai_wait_rd_data
+// Bit 11 -- set_rv_ai_wait_rd_data [12:11] = 3 means only dec 1 (For Skipped MB of MBAFF)
+// Bit 10 -- rv_ai_wait_rd_data (Read Only)
+// Bit 9 -- enable_rv_ai_wait_rd_data
+// Bit 8 -- disable_vc1_mv_update
+// Bit 7 -- pred_dc_signed
+// Bit 6 -- inc_vld_ready_count
+// Bit 5 -- dec_vld_ready_count
+// Bit 4 -- disable_ref_bidir_fix
+// Bit 3 -- disable_MV_UL_l1_bot_fix
+// Bit 2 -- disable_mb_aff_fix
+// Bit 1 -- canvas_addr_7
+// Bit 0 -- constrained_intra_pred_flag for H264
+#define   HEVC_IQIDCT_CONTROL                      (0x3e0e)
+#define P_HEVC_IQIDCT_CONTROL                      (volatile unsigned int *)((0x3e0e  << 2) + 0xff620000)
+// Bit[31:19] Reserved
+// Bit[18] iq_waiting
+// Bit[17] iq_om_wr_idx
+// Bit[16] iq_om_rd_idx
+// Bit[15] iq_om_busy
+// Bit[14] iq_om_2_busy
+// Bit[13] idx_fifo_0
+// Bit[12] idx_fifo_1
+// Bit[11] idx_fifo_2
+// Bit[10] idx_fifo_3
+// Bit[9] idx_fifo_4
+// Bit[8] idx_fifo_5
+// Bit[7] idx_fifo_6
+// Bit[6] idx_fifo_7
+// Bit[5:3] idx_fifo_wp
+// Bit[2:0] idx_fifo_rp
+#define   HEVC_IQIDCT_DEBUG_INFO_0                 (0x3e0f)
+#define P_HEVC_IQIDCT_DEBUG_INFO_0                 (volatile unsigned int *)((0x3e0f  << 2) + 0xff620000)
+// For RTL Simulation Only
+#define   HEVC_DEBLK_CMD                           (0x3e10)
+#define P_HEVC_DEBLK_CMD                           (volatile unsigned int *)((0x3e10  << 2) + 0xff620000)
+// Bit[15+16] ds_mc_valid_2
+// Bit[14+16] new_idct1_rd_idx_2
+// Bit[13+16] new_idct1_wr_idx_2
+// Bit[12+16] idct1_buff0_busy_2
+// Bit[11+16] idct1_buff1_busy_2
+// Bit[10+16] new_idct1_busy_2
+// Bit[9+16] iq_om_8val_2
+// Bit[8+16] idct1_pipe_busy_2
+// Bit[7+16] wait_mb_left_finish_hold_2
+// Bit[6+16] new_idct2_rd_idx_2
+// Bit[5+16] new_idct2_wr_idx_2
+// Bit[4+16] idct2_buff0_busy_2
+// Bit[3+16] idct2_buff1_busy_2
+// Bit[2+16] idct2_en_2
+// Bit[1+16] new_idct2_busy_2
+// Bit[0+16] new_idct1_ready_2
+// Bit[15] ds_mc_valid_1
+// Bit[14] new_idct1_rd_idx_1
+// Bit[13] new_idct1_wr_idx_1
+// Bit[12] idct1_buff0_busy_1
+// Bit[11] idct1_buff1_busy_1
+// Bit[10] new_idct1_busy_1
+// Bit[9] iq_om_8val_1
+// Bit[8] idct1_pipe_busy_1
+// Bit[7] wait_mb_left_finish_hold_1
+// Bit[6] new_idct2_rd_idx_1
+// Bit[5] new_idct2_wr_idx_1
+// Bit[4] idct2_buff0_busy_1
+// Bit[3] idct2_buff1_busy_1
+// Bit[2] idct2_en_1
+// Bit[1] new_idct2_busy_1
+// Bit[0] new_idct1_ready_1
+#define   HEVC_IQIDCT_DEBUG_IDCT                   (0x3e11)
+#define P_HEVC_IQIDCT_DEBUG_IDCT                   (volatile unsigned int *)((0x3e11  << 2) + 0xff620000)
+// bit 31 -- convas_enable
+// bit 30:24 -- convas_x_count ( 8 pixels / 64 bits )
+// bit 23:16 -- convas_y_count
+// bit 15   -- dcac_dma_busy
+// bit 14   -- dcac_dma_read_cache_active
+// bit 13:8 -- dcac_dma_count
+// bit 7    -- dcac_dma_rw
+// bit 6    -- dcac_skip_read_mode
+// bit 5:0  -- dcac_dma_offset
+#define   HEVC_DCAC_DMA_CTRL                       (0x3e12)
+#define P_HEVC_DCAC_DMA_CTRL                       (volatile unsigned int *)((0x3e12  << 2) + 0xff620000)
+// when (convas_enable == 0 )
+//   bit 31:0 dcac_dma_addr
+// when (convas_enable == 1 )
+//   bit 31:25 canvas_addr (7 bits)
+//   bit 24:12 convas_y_start ( 13 btis )
+//   bit 11:0  convas_x_start ( 12 btis )
+#define   HEVC_DCAC_DMA_ADDRESS                    (0x3e13)
+#define P_HEVC_DCAC_DMA_ADDRESS                    (volatile unsigned int *)((0x3e13  << 2) + 0xff620000)
+// bit 7:0 -- dcac_cpu_addr
+#define   HEVC_DCAC_CPU_ADDRESS                    (0x3e14)
+#define P_HEVC_DCAC_CPU_ADDRESS                    (volatile unsigned int *)((0x3e14  << 2) + 0xff620000)
+// bit 31:0 -- dcac_cpu_data
+#define   HEVC_DCAC_CPU_DATA                       (0x3e15)
+#define P_HEVC_DCAC_CPU_DATA                       (volatile unsigned int *)((0x3e15  << 2) + 0xff620000)
+// bit 31:19 -- reserved
+// bit 18:16 -- block_num_reg -- Read-Only
+// bit 15:0 -- dcac_mb_count
+#define   HEVC_DCAC_MB_COUNT                       (0x3e16)
+#define P_HEVC_DCAC_MB_COUNT                       (volatile unsigned int *)((0x3e16  << 2) + 0xff620000)
+// bit 31:18 -- reserved
+// For H264 :
+//   bit 17:2 -- h264_quant
+//   bit 11:6 -- h264_quant_c
+//   bit  5:0 -- h264_quant_c
+// For VC1 :
+//   bit    17 -- qindex_GT_8
+//   bit    16 -- HalfQPStep
+//   bit 15:12 -- eQuantMode
+//   bit 11:6  -- AltPQuant
+//   bit  5:0  -- PQuant
+//
+#define   HEVC_IQ_QUANT                            (0x3e17)
+#define P_HEVC_IQ_QUANT                            (volatile unsigned int *)((0x3e17  << 2) + 0xff620000)
+// bit 31:24  -- bitplane_width
+// bit 23:16  -- bitplane_height
+// bit 15:14  -- bitplane_start_x
+// bit 13:12  -- bitplane_start_y
+// bit 11:4   -- reserved
+// bit 3:1    -- bitplane_type
+// bit 0      -- bitplane_busy
+#define   HEVC_VC1_BITPLANE_CTL                    (0x3e18)
+#define P_HEVC_VC1_BITPLANE_CTL                    (volatile unsigned int *)((0x3e18  << 2) + 0xff620000)
+// bit 24:16  -- wq_param1
+// bit  8: 0  -- wq_param0
+#define   HEVC_AVSP_IQ_WQ_PARAM_01                 (0x3e19)
+#define P_HEVC_AVSP_IQ_WQ_PARAM_01                 (volatile unsigned int *)((0x3e19  << 2) + 0xff620000)
+// bit 24:16  -- wq_param3
+// bit  8: 0  -- wq_param2
+#define   HEVC_AVSP_IQ_WQ_PARAM_23                 (0x3e1a)
+#define P_HEVC_AVSP_IQ_WQ_PARAM_23                 (volatile unsigned int *)((0x3e1a  << 2) + 0xff620000)
+// bit 24:16  -- wq_param5
+// bit  8: 0  -- wq_param4
+#define   HEVC_AVSP_IQ_WQ_PARAM_45                 (0x3e1b)
+#define P_HEVC_AVSP_IQ_WQ_PARAM_45                 (volatile unsigned int *)((0x3e1b  << 2) + 0xff620000)
+// bit    31  -- weight_quant_en
+// bit 17:16  -- current_scene_model
+// bit 12: 8  -- chroma_qp_delta_cr
+// bit  4: 0  -- chroma_qp_delta_cb
+#define   HEVC_AVSP_IQ_CTL                         (0x3e1c)
+#define P_HEVC_AVSP_IQ_CTL                         (volatile unsigned int *)((0x3e1c  << 2) + 0xff620000)
+//======================================
+//  VCOP Control Register Bits
+//
+//======================================
+    //`define IQIDCT_RESET	    16'h0001	    // Bit 0
+//======================================
+//  QP Control Register Bits
+//
+//======================================
+// Duplicate Address:  When actually used
+// please move to a different address
+// `define FLD_DCT_TYPE	    16'h0100	    // Bit 8	0 = Frame DCT; 1 = field DCT
+//
+// Closing file:  iqidct_regs.h
+//
+//
+// Reading file:  vcpu_regs.h
+//
+//========================================================================
+//  VCPU module level register offset
+//========================================================================
+// -----------------------------------------------
+// CBUS_BASE:  DOS_VDEC_VCPU_CBUS_BASE = 0x03
+// -----------------------------------------------
+#define   HCODEC_MSP                               (0x1300)
+#define P_HCODEC_MSP                               (volatile unsigned int *)((0x1300  << 2) + 0xff620000)
+#define   HCODEC_MPSR                              (0x1301)
+#define P_HCODEC_MPSR                              (volatile unsigned int *)((0x1301  << 2) + 0xff620000)
+#define   HCODEC_MINT_VEC_BASE                     (0x1302)
+#define P_HCODEC_MINT_VEC_BASE                     (volatile unsigned int *)((0x1302  << 2) + 0xff620000)
+#define   HCODEC_MCPU_INTR_GRP                     (0x1303)
+#define P_HCODEC_MCPU_INTR_GRP                     (volatile unsigned int *)((0x1303  << 2) + 0xff620000)
+#define   HCODEC_MCPU_INTR_MSK                     (0x1304)
+#define P_HCODEC_MCPU_INTR_MSK                     (volatile unsigned int *)((0x1304  << 2) + 0xff620000)
+#define   HCODEC_MCPU_INTR_REQ                     (0x1305)
+#define P_HCODEC_MCPU_INTR_REQ                     (volatile unsigned int *)((0x1305  << 2) + 0xff620000)
+#define   HCODEC_MPC_P                             (0x1306)
+#define P_HCODEC_MPC_P                             (volatile unsigned int *)((0x1306  << 2) + 0xff620000)
+#define   HCODEC_MPC_D                             (0x1307)
+#define P_HCODEC_MPC_D                             (volatile unsigned int *)((0x1307  << 2) + 0xff620000)
+#define   HCODEC_MPC_E                             (0x1308)
+#define P_HCODEC_MPC_E                             (volatile unsigned int *)((0x1308  << 2) + 0xff620000)
+#define   HCODEC_MPC_W                             (0x1309)
+#define P_HCODEC_MPC_W                             (volatile unsigned int *)((0x1309  << 2) + 0xff620000)
+#define   HCODEC_MINDEX0_REG                       (0x130a)
+#define P_HCODEC_MINDEX0_REG                       (volatile unsigned int *)((0x130a  << 2) + 0xff620000)
+#define   HCODEC_MINDEX1_REG                       (0x130b)
+#define P_HCODEC_MINDEX1_REG                       (volatile unsigned int *)((0x130b  << 2) + 0xff620000)
+#define   HCODEC_MINDEX2_REG                       (0x130c)
+#define P_HCODEC_MINDEX2_REG                       (volatile unsigned int *)((0x130c  << 2) + 0xff620000)
+#define   HCODEC_MINDEX3_REG                       (0x130d)
+#define P_HCODEC_MINDEX3_REG                       (volatile unsigned int *)((0x130d  << 2) + 0xff620000)
+#define   HCODEC_MINDEX4_REG                       (0x130e)
+#define P_HCODEC_MINDEX4_REG                       (volatile unsigned int *)((0x130e  << 2) + 0xff620000)
+#define   HCODEC_MINDEX5_REG                       (0x130f)
+#define P_HCODEC_MINDEX5_REG                       (volatile unsigned int *)((0x130f  << 2) + 0xff620000)
+#define   HCODEC_MINDEX6_REG                       (0x1310)
+#define P_HCODEC_MINDEX6_REG                       (volatile unsigned int *)((0x1310  << 2) + 0xff620000)
+#define   HCODEC_MINDEX7_REG                       (0x1311)
+#define P_HCODEC_MINDEX7_REG                       (volatile unsigned int *)((0x1311  << 2) + 0xff620000)
+#define   HCODEC_MMIN_REG                          (0x1312)
+#define P_HCODEC_MMIN_REG                          (volatile unsigned int *)((0x1312  << 2) + 0xff620000)
+#define   HCODEC_MMAX_REG                          (0x1313)
+#define P_HCODEC_MMAX_REG                          (volatile unsigned int *)((0x1313  << 2) + 0xff620000)
+#define   HCODEC_MBREAK0_REG                       (0x1314)
+#define P_HCODEC_MBREAK0_REG                       (volatile unsigned int *)((0x1314  << 2) + 0xff620000)
+#define   HCODEC_MBREAK1_REG                       (0x1315)
+#define P_HCODEC_MBREAK1_REG                       (volatile unsigned int *)((0x1315  << 2) + 0xff620000)
+#define   HCODEC_MBREAK2_REG                       (0x1316)
+#define P_HCODEC_MBREAK2_REG                       (volatile unsigned int *)((0x1316  << 2) + 0xff620000)
+#define   HCODEC_MBREAK3_REG                       (0x1317)
+#define P_HCODEC_MBREAK3_REG                       (volatile unsigned int *)((0x1317  << 2) + 0xff620000)
+#define   HCODEC_MBREAK_TYPE                       (0x1318)
+#define P_HCODEC_MBREAK_TYPE                       (volatile unsigned int *)((0x1318  << 2) + 0xff620000)
+#define   HCODEC_MBREAK_CTRL                       (0x1319)
+#define P_HCODEC_MBREAK_CTRL                       (volatile unsigned int *)((0x1319  << 2) + 0xff620000)
+#define   HCODEC_MBREAK_STAUTS                     (0x131a)
+#define P_HCODEC_MBREAK_STAUTS                     (volatile unsigned int *)((0x131a  << 2) + 0xff620000)
+#define   HCODEC_MDB_ADDR_REG                      (0x131b)
+#define P_HCODEC_MDB_ADDR_REG                      (volatile unsigned int *)((0x131b  << 2) + 0xff620000)
+#define   HCODEC_MDB_DATA_REG                      (0x131c)
+#define P_HCODEC_MDB_DATA_REG                      (volatile unsigned int *)((0x131c  << 2) + 0xff620000)
+#define   HCODEC_MDB_CTRL                          (0x131d)
+#define P_HCODEC_MDB_CTRL                          (volatile unsigned int *)((0x131d  << 2) + 0xff620000)
+#define   HCODEC_MSFTINT0                          (0x131e)
+#define P_HCODEC_MSFTINT0                          (volatile unsigned int *)((0x131e  << 2) + 0xff620000)
+#define   HCODEC_MSFTINT1                          (0x131f)
+#define P_HCODEC_MSFTINT1                          (volatile unsigned int *)((0x131f  << 2) + 0xff620000)
+#define   HCODEC_CSP                               (0x1320)
+#define P_HCODEC_CSP                               (volatile unsigned int *)((0x1320  << 2) + 0xff620000)
+#define   HCODEC_CPSR                              (0x1321)
+#define P_HCODEC_CPSR                              (volatile unsigned int *)((0x1321  << 2) + 0xff620000)
+#define   HCODEC_CINT_VEC_BASE                     (0x1322)
+#define P_HCODEC_CINT_VEC_BASE                     (volatile unsigned int *)((0x1322  << 2) + 0xff620000)
+#define   HCODEC_CCPU_INTR_GRP                     (0x1323)
+#define P_HCODEC_CCPU_INTR_GRP                     (volatile unsigned int *)((0x1323  << 2) + 0xff620000)
+#define   HCODEC_CCPU_INTR_MSK                     (0x1324)
+#define P_HCODEC_CCPU_INTR_MSK                     (volatile unsigned int *)((0x1324  << 2) + 0xff620000)
+#define   HCODEC_CCPU_INTR_REQ                     (0x1325)
+#define P_HCODEC_CCPU_INTR_REQ                     (volatile unsigned int *)((0x1325  << 2) + 0xff620000)
+#define   HCODEC_CPC_P                             (0x1326)
+#define P_HCODEC_CPC_P                             (volatile unsigned int *)((0x1326  << 2) + 0xff620000)
+#define   HCODEC_CPC_D                             (0x1327)
+#define P_HCODEC_CPC_D                             (volatile unsigned int *)((0x1327  << 2) + 0xff620000)
+#define   HCODEC_CPC_E                             (0x1328)
+#define P_HCODEC_CPC_E                             (volatile unsigned int *)((0x1328  << 2) + 0xff620000)
+#define   HCODEC_CPC_W                             (0x1329)
+#define P_HCODEC_CPC_W                             (volatile unsigned int *)((0x1329  << 2) + 0xff620000)
+#define   HCODEC_CINDEX0_REG                       (0x132a)
+#define P_HCODEC_CINDEX0_REG                       (volatile unsigned int *)((0x132a  << 2) + 0xff620000)
+#define   HCODEC_CINDEX1_REG                       (0x132b)
+#define P_HCODEC_CINDEX1_REG                       (volatile unsigned int *)((0x132b  << 2) + 0xff620000)
+#define   HCODEC_CINDEX2_REG                       (0x132c)
+#define P_HCODEC_CINDEX2_REG                       (volatile unsigned int *)((0x132c  << 2) + 0xff620000)
+#define   HCODEC_CINDEX3_REG                       (0x132d)
+#define P_HCODEC_CINDEX3_REG                       (volatile unsigned int *)((0x132d  << 2) + 0xff620000)
+#define   HCODEC_CINDEX4_REG                       (0x132e)
+#define P_HCODEC_CINDEX4_REG                       (volatile unsigned int *)((0x132e  << 2) + 0xff620000)
+#define   HCODEC_CINDEX5_REG                       (0x132f)
+#define P_HCODEC_CINDEX5_REG                       (volatile unsigned int *)((0x132f  << 2) + 0xff620000)
+#define   HCODEC_CINDEX6_REG                       (0x1330)
+#define P_HCODEC_CINDEX6_REG                       (volatile unsigned int *)((0x1330  << 2) + 0xff620000)
+#define   HCODEC_CINDEX7_REG                       (0x1331)
+#define P_HCODEC_CINDEX7_REG                       (volatile unsigned int *)((0x1331  << 2) + 0xff620000)
+#define   HCODEC_CMIN_REG                          (0x1332)
+#define P_HCODEC_CMIN_REG                          (volatile unsigned int *)((0x1332  << 2) + 0xff620000)
+#define   HCODEC_CMAX_REG                          (0x1333)
+#define P_HCODEC_CMAX_REG                          (volatile unsigned int *)((0x1333  << 2) + 0xff620000)
+#define   HCODEC_CBREAK0_REG                       (0x1334)
+#define P_HCODEC_CBREAK0_REG                       (volatile unsigned int *)((0x1334  << 2) + 0xff620000)
+#define   HCODEC_CBREAK1_REG                       (0x1335)
+#define P_HCODEC_CBREAK1_REG                       (volatile unsigned int *)((0x1335  << 2) + 0xff620000)
+#define   HCODEC_CBREAK2_REG                       (0x1336)
+#define P_HCODEC_CBREAK2_REG                       (volatile unsigned int *)((0x1336  << 2) + 0xff620000)
+#define   HCODEC_CBREAK3_REG                       (0x1337)
+#define P_HCODEC_CBREAK3_REG                       (volatile unsigned int *)((0x1337  << 2) + 0xff620000)
+#define   HCODEC_CBREAK_TYPE                       (0x1338)
+#define P_HCODEC_CBREAK_TYPE                       (volatile unsigned int *)((0x1338  << 2) + 0xff620000)
+#define   HCODEC_CBREAK_CTRL                       (0x1339)
+#define P_HCODEC_CBREAK_CTRL                       (volatile unsigned int *)((0x1339  << 2) + 0xff620000)
+#define   HCODEC_CBREAK_STAUTS                     (0x133a)
+#define P_HCODEC_CBREAK_STAUTS                     (volatile unsigned int *)((0x133a  << 2) + 0xff620000)
+#define   HCODEC_CDB_ADDR_REG                      (0x133b)
+#define P_HCODEC_CDB_ADDR_REG                      (volatile unsigned int *)((0x133b  << 2) + 0xff620000)
+#define   HCODEC_CDB_DATA_REG                      (0x133c)
+#define P_HCODEC_CDB_DATA_REG                      (volatile unsigned int *)((0x133c  << 2) + 0xff620000)
+#define   HCODEC_CDB_CTRL                          (0x133d)
+#define P_HCODEC_CDB_CTRL                          (volatile unsigned int *)((0x133d  << 2) + 0xff620000)
+#define   HCODEC_CSFTINT0                          (0x133e)
+#define P_HCODEC_CSFTINT0                          (volatile unsigned int *)((0x133e  << 2) + 0xff620000)
+#define   HCODEC_CSFTINT1                          (0x133f)
+#define P_HCODEC_CSFTINT1                          (volatile unsigned int *)((0x133f  << 2) + 0xff620000)
+#define   HCODEC_IMEM_DMA_CTRL                     (0x1340)
+#define P_HCODEC_IMEM_DMA_CTRL                     (volatile unsigned int *)((0x1340  << 2) + 0xff620000)
+#define   HCODEC_IMEM_DMA_ADR                      (0x1341)
+#define P_HCODEC_IMEM_DMA_ADR                      (volatile unsigned int *)((0x1341  << 2) + 0xff620000)
+#define   HCODEC_IMEM_DMA_COUNT                    (0x1342)
+#define P_HCODEC_IMEM_DMA_COUNT                    (volatile unsigned int *)((0x1342  << 2) + 0xff620000)
+// bit[29:24] A_brst_num_imem
+// bit[21:16] A_id_imem
+// bit[11:0] wrrsp_count_imem (reserved)
+#define   HCODEC_WRRSP_IMEM                        (0x1343)
+#define P_HCODEC_WRRSP_IMEM                        (volatile unsigned int *)((0x1343  << 2) + 0xff620000)
+#define   HCODEC_LMEM_DMA_CTRL                     (0x1350)
+#define P_HCODEC_LMEM_DMA_CTRL                     (volatile unsigned int *)((0x1350  << 2) + 0xff620000)
+#define   HCODEC_LMEM_DMA_ADR                      (0x1351)
+#define P_HCODEC_LMEM_DMA_ADR                      (volatile unsigned int *)((0x1351  << 2) + 0xff620000)
+#define   HCODEC_LMEM_DMA_COUNT                    (0x1352)
+#define P_HCODEC_LMEM_DMA_COUNT                    (volatile unsigned int *)((0x1352  << 2) + 0xff620000)
+// bit[29:24] A_brst_num_lmem
+// bit[21:16] A_id_lmem
+// bit[11:0] wrrsp_count_lmem
+#define   HCODEC_WRRSP_LMEM                        (0x1353)
+#define P_HCODEC_WRRSP_LMEM                        (volatile unsigned int *)((0x1353  << 2) + 0xff620000)
+#define   HCODEC_MAC_CTRL1                         (0x1360)
+#define P_HCODEC_MAC_CTRL1                         (volatile unsigned int *)((0x1360  << 2) + 0xff620000)
+#define   HCODEC_ACC0REG1                          (0x1361)
+#define P_HCODEC_ACC0REG1                          (volatile unsigned int *)((0x1361  << 2) + 0xff620000)
+#define   HCODEC_ACC1REG1                          (0x1362)
+#define P_HCODEC_ACC1REG1                          (volatile unsigned int *)((0x1362  << 2) + 0xff620000)
+#define   HCODEC_MAC_CTRL2                         (0x1370)
+#define P_HCODEC_MAC_CTRL2                         (volatile unsigned int *)((0x1370  << 2) + 0xff620000)
+#define   HCODEC_ACC0REG2                          (0x1371)
+#define P_HCODEC_ACC0REG2                          (volatile unsigned int *)((0x1371  << 2) + 0xff620000)
+#define   HCODEC_ACC1REG2                          (0x1372)
+#define P_HCODEC_ACC1REG2                          (volatile unsigned int *)((0x1372  << 2) + 0xff620000)
+#define   HCODEC_CPU_TRACE                         (0x1380)
+#define P_HCODEC_CPU_TRACE                         (volatile unsigned int *)((0x1380  << 2) + 0xff620000)
+//
+// Closing file:  vcpu_regs.h
+//
+//
+// Reading file:  vcpu_regs.h
+//
+//========================================================================
+//  VCPU module level register offset
+//========================================================================
+// -----------------------------------------------
+// CBUS_BASE:  DOS_VDEC_VCPU_CBUS_BASE = 0x03
+// -----------------------------------------------
+#define   VDEC2_MSP                                (0x2300)
+#define P_VDEC2_MSP                                (volatile unsigned int *)((0x2300  << 2) + 0xff620000)
+#define   VDEC2_MPSR                               (0x2301)
+#define P_VDEC2_MPSR                               (volatile unsigned int *)((0x2301  << 2) + 0xff620000)
+#define   VDEC2_MINT_VEC_BASE                      (0x2302)
+#define P_VDEC2_MINT_VEC_BASE                      (volatile unsigned int *)((0x2302  << 2) + 0xff620000)
+#define   VDEC2_MCPU_INTR_GRP                      (0x2303)
+#define P_VDEC2_MCPU_INTR_GRP                      (volatile unsigned int *)((0x2303  << 2) + 0xff620000)
+#define   VDEC2_MCPU_INTR_MSK                      (0x2304)
+#define P_VDEC2_MCPU_INTR_MSK                      (volatile unsigned int *)((0x2304  << 2) + 0xff620000)
+#define   VDEC2_MCPU_INTR_REQ                      (0x2305)
+#define P_VDEC2_MCPU_INTR_REQ                      (volatile unsigned int *)((0x2305  << 2) + 0xff620000)
+#define   VDEC2_MPC_P                              (0x2306)
+#define P_VDEC2_MPC_P                              (volatile unsigned int *)((0x2306  << 2) + 0xff620000)
+#define   VDEC2_MPC_D                              (0x2307)
+#define P_VDEC2_MPC_D                              (volatile unsigned int *)((0x2307  << 2) + 0xff620000)
+#define   VDEC2_MPC_E                              (0x2308)
+#define P_VDEC2_MPC_E                              (volatile unsigned int *)((0x2308  << 2) + 0xff620000)
+#define   VDEC2_MPC_W                              (0x2309)
+#define P_VDEC2_MPC_W                              (volatile unsigned int *)((0x2309  << 2) + 0xff620000)
+#define   VDEC2_MINDEX0_REG                        (0x230a)
+#define P_VDEC2_MINDEX0_REG                        (volatile unsigned int *)((0x230a  << 2) + 0xff620000)
+#define   VDEC2_MINDEX1_REG                        (0x230b)
+#define P_VDEC2_MINDEX1_REG                        (volatile unsigned int *)((0x230b  << 2) + 0xff620000)
+#define   VDEC2_MINDEX2_REG                        (0x230c)
+#define P_VDEC2_MINDEX2_REG                        (volatile unsigned int *)((0x230c  << 2) + 0xff620000)
+#define   VDEC2_MINDEX3_REG                        (0x230d)
+#define P_VDEC2_MINDEX3_REG                        (volatile unsigned int *)((0x230d  << 2) + 0xff620000)
+#define   VDEC2_MINDEX4_REG                        (0x230e)
+#define P_VDEC2_MINDEX4_REG                        (volatile unsigned int *)((0x230e  << 2) + 0xff620000)
+#define   VDEC2_MINDEX5_REG                        (0x230f)
+#define P_VDEC2_MINDEX5_REG                        (volatile unsigned int *)((0x230f  << 2) + 0xff620000)
+#define   VDEC2_MINDEX6_REG                        (0x2310)
+#define P_VDEC2_MINDEX6_REG                        (volatile unsigned int *)((0x2310  << 2) + 0xff620000)
+#define   VDEC2_MINDEX7_REG                        (0x2311)
+#define P_VDEC2_MINDEX7_REG                        (volatile unsigned int *)((0x2311  << 2) + 0xff620000)
+#define   VDEC2_MMIN_REG                           (0x2312)
+#define P_VDEC2_MMIN_REG                           (volatile unsigned int *)((0x2312  << 2) + 0xff620000)
+#define   VDEC2_MMAX_REG                           (0x2313)
+#define P_VDEC2_MMAX_REG                           (volatile unsigned int *)((0x2313  << 2) + 0xff620000)
+#define   VDEC2_MBREAK0_REG                        (0x2314)
+#define P_VDEC2_MBREAK0_REG                        (volatile unsigned int *)((0x2314  << 2) + 0xff620000)
+#define   VDEC2_MBREAK1_REG                        (0x2315)
+#define P_VDEC2_MBREAK1_REG                        (volatile unsigned int *)((0x2315  << 2) + 0xff620000)
+#define   VDEC2_MBREAK2_REG                        (0x2316)
+#define P_VDEC2_MBREAK2_REG                        (volatile unsigned int *)((0x2316  << 2) + 0xff620000)
+#define   VDEC2_MBREAK3_REG                        (0x2317)
+#define P_VDEC2_MBREAK3_REG                        (volatile unsigned int *)((0x2317  << 2) + 0xff620000)
+#define   VDEC2_MBREAK_TYPE                        (0x2318)
+#define P_VDEC2_MBREAK_TYPE                        (volatile unsigned int *)((0x2318  << 2) + 0xff620000)
+#define   VDEC2_MBREAK_CTRL                        (0x2319)
+#define P_VDEC2_MBREAK_CTRL                        (volatile unsigned int *)((0x2319  << 2) + 0xff620000)
+#define   VDEC2_MBREAK_STAUTS                      (0x231a)
+#define P_VDEC2_MBREAK_STAUTS                      (volatile unsigned int *)((0x231a  << 2) + 0xff620000)
+#define   VDEC2_MDB_ADDR_REG                       (0x231b)
+#define P_VDEC2_MDB_ADDR_REG                       (volatile unsigned int *)((0x231b  << 2) + 0xff620000)
+#define   VDEC2_MDB_DATA_REG                       (0x231c)
+#define P_VDEC2_MDB_DATA_REG                       (volatile unsigned int *)((0x231c  << 2) + 0xff620000)
+#define   VDEC2_MDB_CTRL                           (0x231d)
+#define P_VDEC2_MDB_CTRL                           (volatile unsigned int *)((0x231d  << 2) + 0xff620000)
+#define   VDEC2_MSFTINT0                           (0x231e)
+#define P_VDEC2_MSFTINT0                           (volatile unsigned int *)((0x231e  << 2) + 0xff620000)
+#define   VDEC2_MSFTINT1                           (0x231f)
+#define P_VDEC2_MSFTINT1                           (volatile unsigned int *)((0x231f  << 2) + 0xff620000)
+#define   VDEC2_CSP                                (0x2320)
+#define P_VDEC2_CSP                                (volatile unsigned int *)((0x2320  << 2) + 0xff620000)
+#define   VDEC2_CPSR                               (0x2321)
+#define P_VDEC2_CPSR                               (volatile unsigned int *)((0x2321  << 2) + 0xff620000)
+#define   VDEC2_CINT_VEC_BASE                      (0x2322)
+#define P_VDEC2_CINT_VEC_BASE                      (volatile unsigned int *)((0x2322  << 2) + 0xff620000)
+#define   VDEC2_CCPU_INTR_GRP                      (0x2323)
+#define P_VDEC2_CCPU_INTR_GRP                      (volatile unsigned int *)((0x2323  << 2) + 0xff620000)
+#define   VDEC2_CCPU_INTR_MSK                      (0x2324)
+#define P_VDEC2_CCPU_INTR_MSK                      (volatile unsigned int *)((0x2324  << 2) + 0xff620000)
+#define   VDEC2_CCPU_INTR_REQ                      (0x2325)
+#define P_VDEC2_CCPU_INTR_REQ                      (volatile unsigned int *)((0x2325  << 2) + 0xff620000)
+#define   VDEC2_CPC_P                              (0x2326)
+#define P_VDEC2_CPC_P                              (volatile unsigned int *)((0x2326  << 2) + 0xff620000)
+#define   VDEC2_CPC_D                              (0x2327)
+#define P_VDEC2_CPC_D                              (volatile unsigned int *)((0x2327  << 2) + 0xff620000)
+#define   VDEC2_CPC_E                              (0x2328)
+#define P_VDEC2_CPC_E                              (volatile unsigned int *)((0x2328  << 2) + 0xff620000)
+#define   VDEC2_CPC_W                              (0x2329)
+#define P_VDEC2_CPC_W                              (volatile unsigned int *)((0x2329  << 2) + 0xff620000)
+#define   VDEC2_CINDEX0_REG                        (0x232a)
+#define P_VDEC2_CINDEX0_REG                        (volatile unsigned int *)((0x232a  << 2) + 0xff620000)
+#define   VDEC2_CINDEX1_REG                        (0x232b)
+#define P_VDEC2_CINDEX1_REG                        (volatile unsigned int *)((0x232b  << 2) + 0xff620000)
+#define   VDEC2_CINDEX2_REG                        (0x232c)
+#define P_VDEC2_CINDEX2_REG                        (volatile unsigned int *)((0x232c  << 2) + 0xff620000)
+#define   VDEC2_CINDEX3_REG                        (0x232d)
+#define P_VDEC2_CINDEX3_REG                        (volatile unsigned int *)((0x232d  << 2) + 0xff620000)
+#define   VDEC2_CINDEX4_REG                        (0x232e)
+#define P_VDEC2_CINDEX4_REG                        (volatile unsigned int *)((0x232e  << 2) + 0xff620000)
+#define   VDEC2_CINDEX5_REG                        (0x232f)
+#define P_VDEC2_CINDEX5_REG                        (volatile unsigned int *)((0x232f  << 2) + 0xff620000)
+#define   VDEC2_CINDEX6_REG                        (0x2330)
+#define P_VDEC2_CINDEX6_REG                        (volatile unsigned int *)((0x2330  << 2) + 0xff620000)
+#define   VDEC2_CINDEX7_REG                        (0x2331)
+#define P_VDEC2_CINDEX7_REG                        (volatile unsigned int *)((0x2331  << 2) + 0xff620000)
+#define   VDEC2_CMIN_REG                           (0x2332)
+#define P_VDEC2_CMIN_REG                           (volatile unsigned int *)((0x2332  << 2) + 0xff620000)
+#define   VDEC2_CMAX_REG                           (0x2333)
+#define P_VDEC2_CMAX_REG                           (volatile unsigned int *)((0x2333  << 2) + 0xff620000)
+#define   VDEC2_CBREAK0_REG                        (0x2334)
+#define P_VDEC2_CBREAK0_REG                        (volatile unsigned int *)((0x2334  << 2) + 0xff620000)
+#define   VDEC2_CBREAK1_REG                        (0x2335)
+#define P_VDEC2_CBREAK1_REG                        (volatile unsigned int *)((0x2335  << 2) + 0xff620000)
+#define   VDEC2_CBREAK2_REG                        (0x2336)
+#define P_VDEC2_CBREAK2_REG                        (volatile unsigned int *)((0x2336  << 2) + 0xff620000)
+#define   VDEC2_CBREAK3_REG                        (0x2337)
+#define P_VDEC2_CBREAK3_REG                        (volatile unsigned int *)((0x2337  << 2) + 0xff620000)
+#define   VDEC2_CBREAK_TYPE                        (0x2338)
+#define P_VDEC2_CBREAK_TYPE                        (volatile unsigned int *)((0x2338  << 2) + 0xff620000)
+#define   VDEC2_CBREAK_CTRL                        (0x2339)
+#define P_VDEC2_CBREAK_CTRL                        (volatile unsigned int *)((0x2339  << 2) + 0xff620000)
+#define   VDEC2_CBREAK_STAUTS                      (0x233a)
+#define P_VDEC2_CBREAK_STAUTS                      (volatile unsigned int *)((0x233a  << 2) + 0xff620000)
+#define   VDEC2_CDB_ADDR_REG                       (0x233b)
+#define P_VDEC2_CDB_ADDR_REG                       (volatile unsigned int *)((0x233b  << 2) + 0xff620000)
+#define   VDEC2_CDB_DATA_REG                       (0x233c)
+#define P_VDEC2_CDB_DATA_REG                       (volatile unsigned int *)((0x233c  << 2) + 0xff620000)
+#define   VDEC2_CDB_CTRL                           (0x233d)
+#define P_VDEC2_CDB_CTRL                           (volatile unsigned int *)((0x233d  << 2) + 0xff620000)
+#define   VDEC2_CSFTINT0                           (0x233e)
+#define P_VDEC2_CSFTINT0                           (volatile unsigned int *)((0x233e  << 2) + 0xff620000)
+#define   VDEC2_CSFTINT1                           (0x233f)
+#define P_VDEC2_CSFTINT1                           (volatile unsigned int *)((0x233f  << 2) + 0xff620000)
+#define   VDEC2_IMEM_DMA_CTRL                      (0x2340)
+#define P_VDEC2_IMEM_DMA_CTRL                      (volatile unsigned int *)((0x2340  << 2) + 0xff620000)
+#define   VDEC2_IMEM_DMA_ADR                       (0x2341)
+#define P_VDEC2_IMEM_DMA_ADR                       (volatile unsigned int *)((0x2341  << 2) + 0xff620000)
+#define   VDEC2_IMEM_DMA_COUNT                     (0x2342)
+#define P_VDEC2_IMEM_DMA_COUNT                     (volatile unsigned int *)((0x2342  << 2) + 0xff620000)
+// bit[29:24] A_brst_num_imem
+// bit[21:16] A_id_imem
+// bit[11:0] wrrsp_count_imem (reserved)
+#define   VDEC2_WRRSP_IMEM                         (0x2343)
+#define P_VDEC2_WRRSP_IMEM                         (volatile unsigned int *)((0x2343  << 2) + 0xff620000)
+#define   VDEC2_LMEM_DMA_CTRL                      (0x2350)
+#define P_VDEC2_LMEM_DMA_CTRL                      (volatile unsigned int *)((0x2350  << 2) + 0xff620000)
+#define   VDEC2_LMEM_DMA_ADR                       (0x2351)
+#define P_VDEC2_LMEM_DMA_ADR                       (volatile unsigned int *)((0x2351  << 2) + 0xff620000)
+#define   VDEC2_LMEM_DMA_COUNT                     (0x2352)
+#define P_VDEC2_LMEM_DMA_COUNT                     (volatile unsigned int *)((0x2352  << 2) + 0xff620000)
+// bit[29:24] A_brst_num_lmem
+// bit[21:16] A_id_lmem
+// bit[11:0] wrrsp_count_lmem
+#define   VDEC2_WRRSP_LMEM                         (0x2353)
+#define P_VDEC2_WRRSP_LMEM                         (volatile unsigned int *)((0x2353  << 2) + 0xff620000)
+#define   VDEC2_MAC_CTRL1                          (0x2360)
+#define P_VDEC2_MAC_CTRL1                          (volatile unsigned int *)((0x2360  << 2) + 0xff620000)
+#define   VDEC2_ACC0REG1                           (0x2361)
+#define P_VDEC2_ACC0REG1                           (volatile unsigned int *)((0x2361  << 2) + 0xff620000)
+#define   VDEC2_ACC1REG1                           (0x2362)
+#define P_VDEC2_ACC1REG1                           (volatile unsigned int *)((0x2362  << 2) + 0xff620000)
+#define   VDEC2_MAC_CTRL2                          (0x2370)
+#define P_VDEC2_MAC_CTRL2                          (volatile unsigned int *)((0x2370  << 2) + 0xff620000)
+#define   VDEC2_ACC0REG2                           (0x2371)
+#define P_VDEC2_ACC0REG2                           (volatile unsigned int *)((0x2371  << 2) + 0xff620000)
+#define   VDEC2_ACC1REG2                           (0x2372)
+#define P_VDEC2_ACC1REG2                           (volatile unsigned int *)((0x2372  << 2) + 0xff620000)
+#define   VDEC2_CPU_TRACE                          (0x2380)
+#define P_VDEC2_CPU_TRACE                          (volatile unsigned int *)((0x2380  << 2) + 0xff620000)
+//
+// Closing file:  vcpu_regs.h
+//
+//
+// Reading file:  vcpu_regs.h
+//
+//========================================================================
+//  VCPU module level register offset
+//========================================================================
+// -----------------------------------------------
+// CBUS_BASE:  DOS_VDEC_VCPU_CBUS_BASE = 0x03
+// -----------------------------------------------
+#define   HEVC_MSP                                 (0x3300)
+#define P_HEVC_MSP                                 (volatile unsigned int *)((0x3300  << 2) + 0xff620000)
+#define   HEVC_MPSR                                (0x3301)
+#define P_HEVC_MPSR                                (volatile unsigned int *)((0x3301  << 2) + 0xff620000)
+#define   HEVC_MINT_VEC_BASE                       (0x3302)
+#define P_HEVC_MINT_VEC_BASE                       (volatile unsigned int *)((0x3302  << 2) + 0xff620000)
+#define   HEVC_MCPU_INTR_GRP                       (0x3303)
+#define P_HEVC_MCPU_INTR_GRP                       (volatile unsigned int *)((0x3303  << 2) + 0xff620000)
+#define   HEVC_MCPU_INTR_MSK                       (0x3304)
+#define P_HEVC_MCPU_INTR_MSK                       (volatile unsigned int *)((0x3304  << 2) + 0xff620000)
+#define   HEVC_MCPU_INTR_REQ                       (0x3305)
+#define P_HEVC_MCPU_INTR_REQ                       (volatile unsigned int *)((0x3305  << 2) + 0xff620000)
+#define   HEVC_MPC_P                               (0x3306)
+#define P_HEVC_MPC_P                               (volatile unsigned int *)((0x3306  << 2) + 0xff620000)
+#define   HEVC_MPC_D                               (0x3307)
+#define P_HEVC_MPC_D                               (volatile unsigned int *)((0x3307  << 2) + 0xff620000)
+#define   HEVC_MPC_E                               (0x3308)
+#define P_HEVC_MPC_E                               (volatile unsigned int *)((0x3308  << 2) + 0xff620000)
+#define   HEVC_MPC_W                               (0x3309)
+#define P_HEVC_MPC_W                               (volatile unsigned int *)((0x3309  << 2) + 0xff620000)
+#define   HEVC_MINDEX0_REG                         (0x330a)
+#define P_HEVC_MINDEX0_REG                         (volatile unsigned int *)((0x330a  << 2) + 0xff620000)
+#define   HEVC_MINDEX1_REG                         (0x330b)
+#define P_HEVC_MINDEX1_REG                         (volatile unsigned int *)((0x330b  << 2) + 0xff620000)
+#define   HEVC_MINDEX2_REG                         (0x330c)
+#define P_HEVC_MINDEX2_REG                         (volatile unsigned int *)((0x330c  << 2) + 0xff620000)
+#define   HEVC_MINDEX3_REG                         (0x330d)
+#define P_HEVC_MINDEX3_REG                         (volatile unsigned int *)((0x330d  << 2) + 0xff620000)
+#define   HEVC_MINDEX4_REG                         (0x330e)
+#define P_HEVC_MINDEX4_REG                         (volatile unsigned int *)((0x330e  << 2) + 0xff620000)
+#define   HEVC_MINDEX5_REG                         (0x330f)
+#define P_HEVC_MINDEX5_REG                         (volatile unsigned int *)((0x330f  << 2) + 0xff620000)
+#define   HEVC_MINDEX6_REG                         (0x3310)
+#define P_HEVC_MINDEX6_REG                         (volatile unsigned int *)((0x3310  << 2) + 0xff620000)
+#define   HEVC_MINDEX7_REG                         (0x3311)
+#define P_HEVC_MINDEX7_REG                         (volatile unsigned int *)((0x3311  << 2) + 0xff620000)
+#define   HEVC_MMIN_REG                            (0x3312)
+#define P_HEVC_MMIN_REG                            (volatile unsigned int *)((0x3312  << 2) + 0xff620000)
+#define   HEVC_MMAX_REG                            (0x3313)
+#define P_HEVC_MMAX_REG                            (volatile unsigned int *)((0x3313  << 2) + 0xff620000)
+#define   HEVC_MBREAK0_REG                         (0x3314)
+#define P_HEVC_MBREAK0_REG                         (volatile unsigned int *)((0x3314  << 2) + 0xff620000)
+#define   HEVC_MBREAK1_REG                         (0x3315)
+#define P_HEVC_MBREAK1_REG                         (volatile unsigned int *)((0x3315  << 2) + 0xff620000)
+#define   HEVC_MBREAK2_REG                         (0x3316)
+#define P_HEVC_MBREAK2_REG                         (volatile unsigned int *)((0x3316  << 2) + 0xff620000)
+#define   HEVC_MBREAK3_REG                         (0x3317)
+#define P_HEVC_MBREAK3_REG                         (volatile unsigned int *)((0x3317  << 2) + 0xff620000)
+#define   HEVC_MBREAK_TYPE                         (0x3318)
+#define P_HEVC_MBREAK_TYPE                         (volatile unsigned int *)((0x3318  << 2) + 0xff620000)
+#define   HEVC_MBREAK_CTRL                         (0x3319)
+#define P_HEVC_MBREAK_CTRL                         (volatile unsigned int *)((0x3319  << 2) + 0xff620000)
+#define   HEVC_MBREAK_STAUTS                       (0x331a)
+#define P_HEVC_MBREAK_STAUTS                       (volatile unsigned int *)((0x331a  << 2) + 0xff620000)
+#define   HEVC_MDB_ADDR_REG                        (0x331b)
+#define P_HEVC_MDB_ADDR_REG                        (volatile unsigned int *)((0x331b  << 2) + 0xff620000)
+#define   HEVC_MDB_DATA_REG                        (0x331c)
+#define P_HEVC_MDB_DATA_REG                        (volatile unsigned int *)((0x331c  << 2) + 0xff620000)
+#define   HEVC_MDB_CTRL                            (0x331d)
+#define P_HEVC_MDB_CTRL                            (volatile unsigned int *)((0x331d  << 2) + 0xff620000)
+#define   HEVC_MSFTINT0                            (0x331e)
+#define P_HEVC_MSFTINT0                            (volatile unsigned int *)((0x331e  << 2) + 0xff620000)
+#define   HEVC_MSFTINT1                            (0x331f)
+#define P_HEVC_MSFTINT1                            (volatile unsigned int *)((0x331f  << 2) + 0xff620000)
+#define   HEVC_CSP                                 (0x3320)
+#define P_HEVC_CSP                                 (volatile unsigned int *)((0x3320  << 2) + 0xff620000)
+#define   HEVC_CPSR                                (0x3321)
+#define P_HEVC_CPSR                                (volatile unsigned int *)((0x3321  << 2) + 0xff620000)
+#define   HEVC_CINT_VEC_BASE                       (0x3322)
+#define P_HEVC_CINT_VEC_BASE                       (volatile unsigned int *)((0x3322  << 2) + 0xff620000)
+#define   HEVC_CCPU_INTR_GRP                       (0x3323)
+#define P_HEVC_CCPU_INTR_GRP                       (volatile unsigned int *)((0x3323  << 2) + 0xff620000)
+#define   HEVC_CCPU_INTR_MSK                       (0x3324)
+#define P_HEVC_CCPU_INTR_MSK                       (volatile unsigned int *)((0x3324  << 2) + 0xff620000)
+#define   HEVC_CCPU_INTR_REQ                       (0x3325)
+#define P_HEVC_CCPU_INTR_REQ                       (volatile unsigned int *)((0x3325  << 2) + 0xff620000)
+#define   HEVC_CPC_P                               (0x3326)
+#define P_HEVC_CPC_P                               (volatile unsigned int *)((0x3326  << 2) + 0xff620000)
+#define   HEVC_CPC_D                               (0x3327)
+#define P_HEVC_CPC_D                               (volatile unsigned int *)((0x3327  << 2) + 0xff620000)
+#define   HEVC_CPC_E                               (0x3328)
+#define P_HEVC_CPC_E                               (volatile unsigned int *)((0x3328  << 2) + 0xff620000)
+#define   HEVC_CPC_W                               (0x3329)
+#define P_HEVC_CPC_W                               (volatile unsigned int *)((0x3329  << 2) + 0xff620000)
+#define   HEVC_CINDEX0_REG                         (0x332a)
+#define P_HEVC_CINDEX0_REG                         (volatile unsigned int *)((0x332a  << 2) + 0xff620000)
+#define   HEVC_CINDEX1_REG                         (0x332b)
+#define P_HEVC_CINDEX1_REG                         (volatile unsigned int *)((0x332b  << 2) + 0xff620000)
+#define   HEVC_CINDEX2_REG                         (0x332c)
+#define P_HEVC_CINDEX2_REG                         (volatile unsigned int *)((0x332c  << 2) + 0xff620000)
+#define   HEVC_CINDEX3_REG                         (0x332d)
+#define P_HEVC_CINDEX3_REG                         (volatile unsigned int *)((0x332d  << 2) + 0xff620000)
+#define   HEVC_CINDEX4_REG                         (0x332e)
+#define P_HEVC_CINDEX4_REG                         (volatile unsigned int *)((0x332e  << 2) + 0xff620000)
+#define   HEVC_CINDEX5_REG                         (0x332f)
+#define P_HEVC_CINDEX5_REG                         (volatile unsigned int *)((0x332f  << 2) + 0xff620000)
+#define   HEVC_CINDEX6_REG                         (0x3330)
+#define P_HEVC_CINDEX6_REG                         (volatile unsigned int *)((0x3330  << 2) + 0xff620000)
+#define   HEVC_CINDEX7_REG                         (0x3331)
+#define P_HEVC_CINDEX7_REG                         (volatile unsigned int *)((0x3331  << 2) + 0xff620000)
+#define   HEVC_CMIN_REG                            (0x3332)
+#define P_HEVC_CMIN_REG                            (volatile unsigned int *)((0x3332  << 2) + 0xff620000)
+#define   HEVC_CMAX_REG                            (0x3333)
+#define P_HEVC_CMAX_REG                            (volatile unsigned int *)((0x3333  << 2) + 0xff620000)
+#define   HEVC_CBREAK0_REG                         (0x3334)
+#define P_HEVC_CBREAK0_REG                         (volatile unsigned int *)((0x3334  << 2) + 0xff620000)
+#define   HEVC_CBREAK1_REG                         (0x3335)
+#define P_HEVC_CBREAK1_REG                         (volatile unsigned int *)((0x3335  << 2) + 0xff620000)
+#define   HEVC_CBREAK2_REG                         (0x3336)
+#define P_HEVC_CBREAK2_REG                         (volatile unsigned int *)((0x3336  << 2) + 0xff620000)
+#define   HEVC_CBREAK3_REG                         (0x3337)
+#define P_HEVC_CBREAK3_REG                         (volatile unsigned int *)((0x3337  << 2) + 0xff620000)
+#define   HEVC_CBREAK_TYPE                         (0x3338)
+#define P_HEVC_CBREAK_TYPE                         (volatile unsigned int *)((0x3338  << 2) + 0xff620000)
+#define   HEVC_CBREAK_CTRL                         (0x3339)
+#define P_HEVC_CBREAK_CTRL                         (volatile unsigned int *)((0x3339  << 2) + 0xff620000)
+#define   HEVC_CBREAK_STAUTS                       (0x333a)
+#define P_HEVC_CBREAK_STAUTS                       (volatile unsigned int *)((0x333a  << 2) + 0xff620000)
+#define   HEVC_CDB_ADDR_REG                        (0x333b)
+#define P_HEVC_CDB_ADDR_REG                        (volatile unsigned int *)((0x333b  << 2) + 0xff620000)
+#define   HEVC_CDB_DATA_REG                        (0x333c)
+#define P_HEVC_CDB_DATA_REG                        (volatile unsigned int *)((0x333c  << 2) + 0xff620000)
+#define   HEVC_CDB_CTRL                            (0x333d)
+#define P_HEVC_CDB_CTRL                            (volatile unsigned int *)((0x333d  << 2) + 0xff620000)
+#define   HEVC_CSFTINT0                            (0x333e)
+#define P_HEVC_CSFTINT0                            (volatile unsigned int *)((0x333e  << 2) + 0xff620000)
+#define   HEVC_CSFTINT1                            (0x333f)
+#define P_HEVC_CSFTINT1                            (volatile unsigned int *)((0x333f  << 2) + 0xff620000)
+#define   HEVC_IMEM_DMA_CTRL                       (0x3340)
+#define P_HEVC_IMEM_DMA_CTRL                       (volatile unsigned int *)((0x3340  << 2) + 0xff620000)
+#define   HEVC_IMEM_DMA_ADR                        (0x3341)
+#define P_HEVC_IMEM_DMA_ADR                        (volatile unsigned int *)((0x3341  << 2) + 0xff620000)
+#define   HEVC_IMEM_DMA_COUNT                      (0x3342)
+#define P_HEVC_IMEM_DMA_COUNT                      (volatile unsigned int *)((0x3342  << 2) + 0xff620000)
+// bit[29:24] A_brst_num_imem
+// bit[21:16] A_id_imem
+// bit[11:0] wrrsp_count_imem (reserved)
+#define   HEVC_WRRSP_IMEM                          (0x3343)
+#define P_HEVC_WRRSP_IMEM                          (volatile unsigned int *)((0x3343  << 2) + 0xff620000)
+#define   HEVC_LMEM_DMA_CTRL                       (0x3350)
+#define P_HEVC_LMEM_DMA_CTRL                       (volatile unsigned int *)((0x3350  << 2) + 0xff620000)
+#define   HEVC_LMEM_DMA_ADR                        (0x3351)
+#define P_HEVC_LMEM_DMA_ADR                        (volatile unsigned int *)((0x3351  << 2) + 0xff620000)
+#define   HEVC_LMEM_DMA_COUNT                      (0x3352)
+#define P_HEVC_LMEM_DMA_COUNT                      (volatile unsigned int *)((0x3352  << 2) + 0xff620000)
+// bit[29:24] A_brst_num_lmem
+// bit[21:16] A_id_lmem
+// bit[11:0] wrrsp_count_lmem
+#define   HEVC_WRRSP_LMEM                          (0x3353)
+#define P_HEVC_WRRSP_LMEM                          (volatile unsigned int *)((0x3353  << 2) + 0xff620000)
+#define   HEVC_MAC_CTRL1                           (0x3360)
+#define P_HEVC_MAC_CTRL1                           (volatile unsigned int *)((0x3360  << 2) + 0xff620000)
+#define   HEVC_ACC0REG1                            (0x3361)
+#define P_HEVC_ACC0REG1                            (volatile unsigned int *)((0x3361  << 2) + 0xff620000)
+#define   HEVC_ACC1REG1                            (0x3362)
+#define P_HEVC_ACC1REG1                            (volatile unsigned int *)((0x3362  << 2) + 0xff620000)
+#define   HEVC_MAC_CTRL2                           (0x3370)
+#define P_HEVC_MAC_CTRL2                           (volatile unsigned int *)((0x3370  << 2) + 0xff620000)
+#define   HEVC_ACC0REG2                            (0x3371)
+#define P_HEVC_ACC0REG2                            (volatile unsigned int *)((0x3371  << 2) + 0xff620000)
+#define   HEVC_ACC1REG2                            (0x3372)
+#define P_HEVC_ACC1REG2                            (volatile unsigned int *)((0x3372  << 2) + 0xff620000)
+#define   HEVC_CPU_TRACE                           (0x3380)
+#define P_HEVC_CPU_TRACE                           (volatile unsigned int *)((0x3380  << 2) + 0xff620000)
+//
+// Closing file:  vcpu_regs.h
+//
+//
+// Reading file:  henc_regs.h
+//
+//========================================================================
+//  MDEC module level register offset
+//========================================================================
+// -----------------------------------------------
+// CBUS_BASE:  DOS_HCODEC_HENC_CBUS_BASE = 0x0a
+// -----------------------------------------------
+#define   HCODEC_HENC_SCRATCH_0                    (0x1ac0)
+#define P_HCODEC_HENC_SCRATCH_0                    (volatile unsigned int *)((0x1ac0  << 2) + 0xff620000)
+#define   HCODEC_HENC_SCRATCH_1                    (0x1ac1)
+#define P_HCODEC_HENC_SCRATCH_1                    (volatile unsigned int *)((0x1ac1  << 2) + 0xff620000)
+#define   HCODEC_HENC_SCRATCH_2                    (0x1ac2)
+#define P_HCODEC_HENC_SCRATCH_2                    (volatile unsigned int *)((0x1ac2  << 2) + 0xff620000)
+#define   HCODEC_HENC_SCRATCH_3                    (0x1ac3)
+#define P_HCODEC_HENC_SCRATCH_3                    (volatile unsigned int *)((0x1ac3  << 2) + 0xff620000)
+#define   HCODEC_HENC_SCRATCH_4                    (0x1ac4)
+#define P_HCODEC_HENC_SCRATCH_4                    (volatile unsigned int *)((0x1ac4  << 2) + 0xff620000)
+#define   HCODEC_HENC_SCRATCH_5                    (0x1ac5)
+#define P_HCODEC_HENC_SCRATCH_5                    (volatile unsigned int *)((0x1ac5  << 2) + 0xff620000)
+#define   HCODEC_HENC_SCRATCH_6                    (0x1ac6)
+#define P_HCODEC_HENC_SCRATCH_6                    (volatile unsigned int *)((0x1ac6  << 2) + 0xff620000)
+#define   HCODEC_HENC_SCRATCH_7                    (0x1ac7)
+#define P_HCODEC_HENC_SCRATCH_7                    (volatile unsigned int *)((0x1ac7  << 2) + 0xff620000)
+#define   HCODEC_HENC_SCRATCH_8                    (0x1ac8)
+#define P_HCODEC_HENC_SCRATCH_8                    (volatile unsigned int *)((0x1ac8  << 2) + 0xff620000)
+#define   HCODEC_HENC_SCRATCH_9                    (0x1ac9)
+#define P_HCODEC_HENC_SCRATCH_9                    (volatile unsigned int *)((0x1ac9  << 2) + 0xff620000)
+#define   HCODEC_HENC_SCRATCH_A                    (0x1aca)
+#define P_HCODEC_HENC_SCRATCH_A                    (volatile unsigned int *)((0x1aca  << 2) + 0xff620000)
+#define   HCODEC_HENC_SCRATCH_B                    (0x1acb)
+#define P_HCODEC_HENC_SCRATCH_B                    (volatile unsigned int *)((0x1acb  << 2) + 0xff620000)
+#define   HCODEC_HENC_SCRATCH_C                    (0x1acc)
+#define P_HCODEC_HENC_SCRATCH_C                    (volatile unsigned int *)((0x1acc  << 2) + 0xff620000)
+#define   HCODEC_HENC_SCRATCH_D                    (0x1acd)
+#define P_HCODEC_HENC_SCRATCH_D                    (volatile unsigned int *)((0x1acd  << 2) + 0xff620000)
+#define   HCODEC_HENC_SCRATCH_E                    (0x1ace)
+#define P_HCODEC_HENC_SCRATCH_E                    (volatile unsigned int *)((0x1ace  << 2) + 0xff620000)
+#define   HCODEC_HENC_SCRATCH_F                    (0x1acf)
+#define P_HCODEC_HENC_SCRATCH_F                    (volatile unsigned int *)((0x1acf  << 2) + 0xff620000)
+#define   HCODEC_HENC_SCRATCH_G                    (0x1ad0)
+#define P_HCODEC_HENC_SCRATCH_G                    (volatile unsigned int *)((0x1ad0  << 2) + 0xff620000)
+#define   HCODEC_HENC_SCRATCH_H                    (0x1ad1)
+#define P_HCODEC_HENC_SCRATCH_H                    (volatile unsigned int *)((0x1ad1  << 2) + 0xff620000)
+#define   HCODEC_HENC_SCRATCH_I                    (0x1ad2)
+#define P_HCODEC_HENC_SCRATCH_I                    (volatile unsigned int *)((0x1ad2  << 2) + 0xff620000)
+#define   HCODEC_HENC_SCRATCH_J                    (0x1ad3)
+#define P_HCODEC_HENC_SCRATCH_J                    (volatile unsigned int *)((0x1ad3  << 2) + 0xff620000)
+#define   HCODEC_HENC_SCRATCH_K                    (0x1ad4)
+#define P_HCODEC_HENC_SCRATCH_K                    (volatile unsigned int *)((0x1ad4  << 2) + 0xff620000)
+#define   HCODEC_HENC_SCRATCH_L                    (0x1ad5)
+#define P_HCODEC_HENC_SCRATCH_L                    (volatile unsigned int *)((0x1ad5  << 2) + 0xff620000)
+#define   HCODEC_HENC_SCRATCH_M                    (0x1ad6)
+#define P_HCODEC_HENC_SCRATCH_M                    (volatile unsigned int *)((0x1ad6  << 2) + 0xff620000)
+#define   HCODEC_HENC_SCRATCH_N                    (0x1ad7)
+#define P_HCODEC_HENC_SCRATCH_N                    (volatile unsigned int *)((0x1ad7  << 2) + 0xff620000)
+// bit [7:0] data_feed_buff_id
+#define   HCODEC_IE_DATA_FEED_BUFF_INFO            (0x1ad8)
+#define P_HCODEC_IE_DATA_FEED_BUFF_INFO            (volatile unsigned int *)((0x1ad8  << 2) + 0xff620000)
+//
+// Closing file:  henc_regs.h
+//
+//
+// Reading file:  vlc_regs.h
+//
+//========================================================================
+//  VLC module level register offset
+//========================================================================
+// -----------------------------------------------
+// CBUS_BASE:  DOS_HCODEC_VLC_CBUS_BASE = 0x0d
+// -----------------------------------------------
+// Bit[31:28] - henc_status
+// Bit[27:8] - reserved
+// Bit[7]    mc_hcmd_buff_enable
+// Bit[6]    mc_hcmd_use_mc_hcmd_buff
+// Bit[5]    mc_hcmd_use_mc_hcmd_hw_start
+// Bit[4]    no_mc_out_null_non_skipped_mb
+// Bit[3]    mc_out_even_skipped_mb
+// Bit[2] - hcmd_enable
+// Bit[1] - vlc_control_enable (0 will treat as soft_reset)
+// Bit[0] - vlc_input_enable (enable input interface)
+#define   HCODEC_VLC_STATUS_CTRL                   (0x1d00)
+#define P_HCODEC_VLC_STATUS_CTRL                   (volatile unsigned int *)((0x1d00  << 2) + 0xff620000)
+// Bit [31]  - small_luma_ignore_chroma
+// Bit[30:16] - Reserved
+// Bit [15]  - enable_free_clk_mc_hcmd_buff
+// Bit [14]  - enable_free_clk_reg
+// Bit [13]  - enable_free_clk_stream
+// Bit [12]  - enable_free_clk_pre_buff
+// Bit [11]  - enable_free_clk_vb_buff
+// Bit [10]  - enable_free_clk_dc_input
+// Bit [9]   - enable_free_clk_input
+// Bit [8]   - enable_free_clk_mv_cal
+// Bit [7]   - enable_free_clk_status
+// Bit [6]   - enable_free_clk_mc_dblk_cmd_if
+// Bit [5]   - disable_mvd_enc_finished
+// Bit [4]   - I16MB_share_ipred_mode_with_I4MB
+// Bit [3]   - fixed_picture_qp
+// Bit [2]   - use_set_b8_mode ( not used now)
+// Bit [1]   - use_set_mb_skip_run
+// Bit [0]   - pop_coeff_even_all_zero
+#define   HCODEC_VLC_CONFIG                        (0x1d01)
+#define P_HCODEC_VLC_CONFIG                        (volatile unsigned int *)((0x1d01  << 2) + 0xff620000)
+// --------------------------------------------
+// Bitstream DDR Interface
+// --------------------------------------------
+#define   HCODEC_VLC_VB_START_PTR                  (0x1d10)
+#define P_HCODEC_VLC_VB_START_PTR                  (volatile unsigned int *)((0x1d10  << 2) + 0xff620000)
+#define   HCODEC_VLC_VB_END_PTR                    (0x1d11)
+#define P_HCODEC_VLC_VB_END_PTR                    (volatile unsigned int *)((0x1d11  << 2) + 0xff620000)
+#define   HCODEC_VLC_VB_WR_PTR                     (0x1d12)
+#define P_HCODEC_VLC_VB_WR_PTR                     (volatile unsigned int *)((0x1d12  << 2) + 0xff620000)
+// Read Only, VLC_VB_SW_RD_PTR or VLC_VB_HW_RD_PTR
+#define   HCODEC_VLC_VB_RD_PTR                     (0x1d13)
+#define P_HCODEC_VLC_VB_RD_PTR                     (volatile unsigned int *)((0x1d13  << 2) + 0xff620000)
+#define   HCODEC_VLC_VB_SW_RD_PTR                  (0x1d14)
+#define P_HCODEC_VLC_VB_SW_RD_PTR                  (volatile unsigned int *)((0x1d14  << 2) + 0xff620000)
+// Read Only
+#define   HCODEC_VLC_VB_LEFT                       (0x1d15)
+#define P_HCODEC_VLC_VB_LEFT                       (volatile unsigned int *)((0x1d15  << 2) + 0xff620000)
+// VB FIFO Control
+// bit  [31:24] vb_full_int_enable_cpu[7:0]
+// bit  [23:16] vb_full_int_enable_amrisc[7:0]
+//   -bit 23 Video BUFFER LEFT < 0x400 Bytes
+//   -bit 22 Video BUFFER LEFT < 0x200 Bytes
+//   -bit 21 Video BUFFER LEFT < 0x100 Bytes
+//   -bit 20 Video BUFFER LEFT < 0x80 Bytes
+//   -bit 19 Video BUFFER LEFT < 0x40 Bytes
+//   -bit 18 Video BUFFER LEFT < 0x20 Bytes
+//   -bit 17 vbfifo left  < 16 double words (8x64bits)
+//   -bit 16 vbfifo left  < 8 double words (4x64bits)
+// bit  [15]    wr_ptr_int_enable_cpu
+// bit  [14]    wr_ptr_int_enable_amrisc
+// bit  [13]    wr_ptr_int (Read Only, write 1 will clear)
+// bit  [12]    vb_full_int_enable_cpu(Read Only)
+// bit  [11]    vb_full_int_enable_amrisc(Read Only)
+// bit  [10]    reserved
+// bit  [9]     use_vb_hw_rd_ptr
+// bit  [8]     vb_always_ready Set to 1 to ignore vb_level blocking DDR write
+// bit  [7]     vb_ready_for_transfer (Read Only)
+// bit  [6]     data_ready_for_transfer (Read Only)
+// bits [5:3]   vb_endian       Set VB Endian inside DDR memory
+// bit  [2]     vb_write_busy   Read Only - indicate DDR write busy
+// bit  [1]     vb_write_en     Set to 1 to enable writing data to DDR memory
+// bit  [0]     vb_soft_reset   Soft reset
+#define   HCODEC_VLC_VB_CONTROL                    (0x1d16)
+#define P_HCODEC_VLC_VB_CONTROL                    (volatile unsigned int *)((0x1d16  << 2) + 0xff620000)
+// bit 31    transfer_length 0 - 32x64 Bits per request, 1 - 16x64 Bits per request  // default : 0
+// bit 30    A_urgent  // default : 0
+// bit 29:24 A_brst_num // default : 0x3f
+// bit 23:22 reserved
+// bit 21:16 A_id  // default : 0x20
+// bit 15:0  vb_left_hold // default : 0
+#define   HCODEC_VLC_VB_MEM_CTL                    (0x1d17)
+#define P_HCODEC_VLC_VB_MEM_CTL                    (volatile unsigned int *)((0x1d17  << 2) + 0xff620000)
+// vb_wr_ptr address to generate interrupt
+#define   HCODEC_VLC_VB_INT_PTR                    (0x1d18)
+#define P_HCODEC_VLC_VB_INT_PTR                    (volatile unsigned int *)((0x1d18  << 2) + 0xff620000)
+// bit[31:12] reserved
+// bit[11:0] vlc_wrrsp_count
+#define   HCODEC_VLC_WRRSP                         (0x1d19)
+#define P_HCODEC_VLC_WRRSP                         (volatile unsigned int *)((0x1d19  << 2) + 0xff620000)
+#define   HCODEC_VLC_TOTAL_BYTES                   (0x1d1a)
+#define P_HCODEC_VLC_TOTAL_BYTES                   (volatile unsigned int *)((0x1d1a  << 2) + 0xff620000)
+// bit  [31:26] reserved
+// bit  [25]    vb_flush
+// bit  [24]    vb_reg_ready
+// bit  [23:16] vb_buff_left     -- Read only
+// bit  [15:8]  vb_buff_wr_point -- RW
+// bit  [7:0]   vb_buff_rd_point -- RW
+#define   HCODEC_VLC_VB_BUFF                       (0x1d1b)
+#define P_HCODEC_VLC_VB_BUFF                       (volatile unsigned int *)((0x1d1b  << 2) + 0xff620000)
+// bit[31]    flush_vlc_pre_buff
+// bit[30:27] reserved
+// bit[26:24] vb_pre_buff_level
+// bit[23:0]  vb_pre_buff_data[55:32]
+#define   HCODEC_VLC_VB_PRE_BUFF_HI                (0x1d1c)
+#define P_HCODEC_VLC_VB_PRE_BUFF_HI                (volatile unsigned int *)((0x1d1c  << 2) + 0xff620000)
+// bit[31:0] vb_pre_buff_data[31:0]
+#define   HCODEC_VLC_VB_PRE_BUFF_LOW               (0x1d1d)
+#define P_HCODEC_VLC_VB_PRE_BUFF_LOW               (volatile unsigned int *)((0x1d1d  << 2) + 0xff620000)
+// bit[31]    stream_encap_enable  // 0x0000(00-03) will be changed to 0x000003(00-03) if enabled
+// bit[30:29] stream_encap_delay   // delay bytes for encap used
+// bit[28:24] stream_buff_point
+// bit[23:0]  stream_buff_data
+#define   HCODEC_VLC_STREAM_BUFF                   (0x1d1e)
+#define P_HCODEC_VLC_STREAM_BUFF                   (volatile unsigned int *)((0x1d1e  << 2) + 0xff620000)
+// bit[31]    push_stream_block - Read Only (Will set if vb_buff full)
+// bit[30]    push_stream_busy  - Read Only (busy when output one byte from stream_buf (max 2 clocks for 8 bits push)
+// bit[29:28] stream_encap_status - Read Only
+// bit[27:21] reserved
+// Long Mode : (Amrisc need movilo and mvihi high to set stream_info)
+//   bit[20:16] push_stream_long_length (0 or 31 : Mid or Short mode)
+//   bit[15:0]  push_stream_data
+// Mid Mode : (Amrisc need movi to set stream_info)
+//   bit[15:12]] push_stream_mid_length (1-12 : mid mode active, 0-short mode, 15 - byte align)
+//   bit[11:0]  push_stream_data
+// Short Mode : (Amrisc can use mtspi to push stream directely)
+//   bit[7:5] push_stream_short_length (0-5 : short length, else - invalid)
+//   bit[4:0]  push_stream_data
+#define   HCODEC_VLC_PUSH_STREAM                   (0x1d1f)
+#define P_HCODEC_VLC_PUSH_STREAM                   (volatile unsigned int *)((0x1d1f  << 2) + 0xff620000)
+// bit[15:8] ELEMENT_LENGTH
+// bit[7:1]  reserved
+// bit[0]  Write - push start, Read - Push Busy
+#define   HCODEC_VLC_PUSH_ELEMENT                  (0x1d20)
+#define P_HCODEC_VLC_PUSH_ELEMENT                  (volatile unsigned int *)((0x1d20  << 2) + 0xff620000)
+#define   HCODEC_VLC_ELEMENT_DATA                  (0x1d21)
+#define P_HCODEC_VLC_ELEMENT_DATA                  (volatile unsigned int *)((0x1d21  << 2) + 0xff620000)
+// bit[7] hcmd_intra_use_sw_info
+// bit[6] hcmd_use_sw_info
+// bit[5] always_use_info_0_cbp_blk
+// bit[4] always_update_info_0_cbp_blk
+// bit[3] reset_left_mb_wr
+// bit[2] reset_top_mb_wr
+// bit[1] set_left_mb_wr
+// bit[0] set_top_mb_wr
+#define   HCODEC_VLC_SPECIAL_CTL                   (0x1d22)
+#define P_HCODEC_VLC_SPECIAL_CTL                   (volatile unsigned int *)((0x1d22  << 2) + 0xff620000)
+// bit[28]    left_intra
+// bit[27:22] left_quant
+// bit[21:16] left_quant_c
+// bit[12]    top_intra
+// bit[11:6]  top_quant
+// bit[5:0]   top_quant_c
+#define   HCODEC_VLC_HCMD_T_L_INFO                 (0x1d23)
+#define P_HCODEC_VLC_HCMD_T_L_INFO                 (volatile unsigned int *)((0x1d23  << 2) + 0xff620000)
+// bit[12]    cur_intra
+// bit[11:6]  cur_quant
+// bit[5:0]   cur_quant_c
+#define   HCODEC_VLC_HCMD_CUR_INFO                 (0x1d24)
+#define P_HCODEC_VLC_HCMD_CUR_INFO                 (volatile unsigned int *)((0x1d24  << 2) + 0xff620000)
+// bit[13]    top_left_info_in_data_mv_cal
+// bit[12]    only_use_info_0_top_left_in_I
+// bit[11]    top_left_info_in_data
+// bit[10]    early_mix_mc_hcmd
+// bit[9]     update_top_left_mix
+// bit[8]     p_top_left_mix
+// bit[7]     mv_cal_mixed_type
+// bit[6]     mc_hcmd_mixed_type
+// bit[5]     use_seperate_int_control
+// bit[4]     hcmd_intra_use_q_info
+// bit[3]     hcmd_left_use_prev_info
+// bit[2]     hcmd_use_q_info
+// bit[1]     use_q_delta_quant
+// bit[0]     detect_I16_from_I4
+#define   HCODEC_VLC_ADV_CONFIG                    (0x1d25)
+#define P_HCODEC_VLC_ADV_CONFIG                    (volatile unsigned int *)((0x1d25  << 2) + 0xff620000)
+//   31 - use_hcmd_mb_xy_auto
+//23:16 - hcmd_max_mb_x
+//15:8  - hcmd_mb_y_auto
+// 7:0  - hcmd_mb_x_auto
+#define   HCODEC_VLC_HCMD_MBXY_AUTO                (0x1d26)
+#define P_HCODEC_VLC_HCMD_MBXY_AUTO                (volatile unsigned int *)((0x1d26  << 2) + 0xff620000)
+// bit[31:0] vlc_int_control_inter -- will be used when use_seperate_int_control is set
+#define   HCODEC_VLC_INT_CONTROL_INTER             (0x1d2f)
+#define P_HCODEC_VLC_INT_CONTROL_INTER             (volatile unsigned int *)((0x1d2f  << 2) + 0xff620000)
+// --------------------------------------------
+// Picture VLC
+// --------------------------------------------
+// (&(int|(~AND_enable))|(|(int&OR_enable)))
+// bit[31]    OR interrupt Enable Reserved
+// bit[30]    OR interrupt Enable for mv_busy
+// bit[29]    OR interrupt Enable for b8_mode_busy
+// bit[28]    OR interrupt Enable for mb_skip_run_busy
+// bit[27]    OR interrupt Enable for cbp_busy
+// bit[26]    OR interrupt Enable for Reserved
+// bit[25]    OR interrupt Enable for Reserved
+// bit[24]    OR interrupt Enable for mb_info_busy
+// bit[23]    AND interrupt Enable Reserved
+// bit[22]    AND interrupt Enable for mv_busy
+// bit[21]    AND interrupt Enable for b8_mode_busy
+// bit[20]    AND interrupt Enable for mb_skip_run_busy
+// bit[19]    AND interrupt Enable for cbp_busy
+// bit[18]    AND interrupt Enable for Reserved
+// bit[17]    AND interrupt Enable for Reserved
+// bit[16]    AND interrupt Enable for mb_info_busy
+// bit[15]    OR interrupt Enable Reserved
+// bit[14]    OR interrupt Enable for mvd
+// bit[13]    OR interrupt Enable for b8_mode
+// bit[12]    OR interrupt Enable for mb_skip_run
+// bit[11]    OR interrupt Enable for cbp_ready
+// bit[10]    OR interrupt Enable for c_ipred_mode_ready
+// bit[9]     OR interrupt Enable for ipred_mode_ready
+// bit[8]     OR interrupt Enable for mb_info_ready
+// bit[7]     AND interrupt Enable Reserved
+// bit[6]     AND interrupt Enable for mvd
+// bit[5]     AND interrupt Enable for b8_mode
+// bit[4]     AND interrupt Enable for mb_skip_run
+// bit[3]     AND interrupt Enable for cbp_ready
+// bit[2]     AND interrupt Enable for c_ipred_mode_ready
+// bit[1]     AND interrupt Enable for ipred_mode_ready
+// bit[0]     AND interrupt Enable for mb_info_ready
+#define   HCODEC_VLC_INT_CONTROL                   (0x1d30)
+#define P_HCODEC_VLC_INT_CONTROL                   (volatile unsigned int *)((0x1d30  << 2) + 0xff620000)
+// Bit[31:16] picture_height
+// Bit[15:0]  picture_width
+#define   HCODEC_VLC_PIC_SIZE                      (0x1d31)
+#define P_HCODEC_VLC_PIC_SIZE                      (volatile unsigned int *)((0x1d31  << 2) + 0xff620000)
+// [31:16] Reserved
+// [15:3] pic_width_in_mbs_minus1
+// [2:0]  picture_type
+#define   HCODEC_VLC_PIC_INFO                      (0x1d32)
+#define P_HCODEC_VLC_PIC_INFO                      (volatile unsigned int *)((0x1d32  << 2) + 0xff620000)
+// Bit[31:16] MB_NR
+// Bit[15:8] MBY
+// Bit[7:0] MBX
+#define   HCODEC_VLC_PIC_POSITION                  (0x1d33)
+#define P_HCODEC_VLC_PIC_POSITION                  (volatile unsigned int *)((0x1d33  << 2) + 0xff620000)
+// Bit[31] MV_busy
+// Bit[30:6] Reserved
+// Bit[15] Reserved
+// Bit[14] vlc_input_MV_busy
+// Bit[13] vlc_input_b8_mode_busy
+// Bit[12] vlc_input_mb_skip_run_busy
+// Bit[11] vlc_input_cbp_busy
+// Bit[10] Reserved
+// Bit[9]  Reserved
+// Bit[8] vlc_input_mb_info_busy
+// Bit[7] Reserved
+// Bit[6] mvd
+// Bit[5] b8_mode
+// Bit[4] mb_skip_run
+// Bit[3] cbp
+// Bit[2] c_ipred_mode
+// Bit[1] ipred_mode
+// Bit[0] mb_info ( mb_type, mb_x, mb_y)
+#define   HCODEC_VLC_INPUT_STATUS                  (0x1d34)
+#define P_HCODEC_VLC_INPUT_STATUS                  (volatile unsigned int *)((0x1d34  << 2) + 0xff620000)
+// Bit[31:28] detected_mb_type
+// Bit[27:16] mb_y
+// Bit[15:4]  mb_x
+// Bit[3:0]   mb_type
+#define   HCODEC_VLC_MB_INFO                       (0x1d35)
+#define P_HCODEC_VLC_MB_INFO                       (volatile unsigned int *)((0x1d35  << 2) + 0xff620000)
+// commnad 0 -- no pending
+// normal command + 1 is pending command
+//
+// bit 31:28 -- pending command 7
+// bit 27:24 -- pending command 6
+// bit 23:20 -- pending command 5
+// bit 19:16 -- pending command 4
+// bit 15:12 -- pending command 3
+// bit 11:8  -- pending command 2
+// bit  7:4  -- pending command 1
+// bit  3:0  -- pending command 0
+#define   HCODEC_VLC_ENC_PEND_CMD                  (0x1d36)
+#define P_HCODEC_VLC_ENC_PEND_CMD                  (volatile unsigned int *)((0x1d36  << 2) + 0xff620000)
+// For I Slice
+// Bit[31:16] Reserved
+// Bit[15:0] IntraType
+#define   HCODEC_HENC_TOP_INFO_0                   (0x1d37)
+#define P_HCODEC_HENC_TOP_INFO_0                   (volatile unsigned int *)((0x1d37  << 2) + 0xff620000)
+#define   HCODEC_HENC_LEFT_INFO_0                  (0x1d38)
+#define P_HCODEC_HENC_LEFT_INFO_0                  (volatile unsigned int *)((0x1d38  << 2) + 0xff620000)
+// For I Slice
+// Bit[31:24] V_nnz
+// Bit[23:16] U_nnz
+// Bit[15:0]  Y_nnz
+#define   HCODEC_HENC_TOP_INFO_1                   (0x1d39)
+#define P_HCODEC_HENC_TOP_INFO_1                   (volatile unsigned int *)((0x1d39  << 2) + 0xff620000)
+#define   HCODEC_HENC_LEFT_INFO_1                  (0x1d3a)
+#define P_HCODEC_HENC_LEFT_INFO_1                  (volatile unsigned int *)((0x1d3a  << 2) + 0xff620000)
+// bit[63:0] ipred_mode
+#define   HCODEC_VLC_IPRED_MODE_HI                 (0x1d3b)
+#define P_HCODEC_VLC_IPRED_MODE_HI                 (volatile unsigned int *)((0x1d3b  << 2) + 0xff620000)
+#define   HCODEC_VLC_IPRED_MODE_LO                 (0x1d3c)
+#define P_HCODEC_VLC_IPRED_MODE_LO                 (volatile unsigned int *)((0x1d3c  << 2) + 0xff620000)
+// bit[15:8] SE delta quant
+// bit[7:0]  UE delta quant
+#define   HCODEC_VLC_DELTA_QP                      (0x1d3d)
+#define P_HCODEC_VLC_DELTA_QP                      (volatile unsigned int *)((0x1d3d  << 2) + 0xff620000)
+// bit[31:16] Reserved
+// bit[15:12] Reserved
+// bit[11:8] c_ipred_mode
+// bit[7:0] cbp
+#define   HCODEC_VLC_MB_HEADER_INFO                (0x1d3e)
+#define P_HCODEC_VLC_MB_HEADER_INFO                (volatile unsigned int *)((0x1d3e  << 2) + 0xff620000)
+// bit[31:16] mb_skip_run
+// bit[15:0]  b8_mode
+#define   HCODEC_VLC_P_MB_HEADER_INFO              (0x1d3f)
+#define P_HCODEC_VLC_P_MB_HEADER_INFO              (volatile unsigned int *)((0x1d3f  << 2) + 0xff620000)
+// bit[31]    write_ptr_update
+// bit[30]    read_ptr_update
+// bit[29:20] coeff_buf_level
+// bit[19:10] coeff_buf_write_ptr
+// bit[9:0]   coeff_buf_read_ptr
+#define   HCODEC_VLC_COEFF_BUF_STATUS              (0x1d40)
+#define P_HCODEC_VLC_COEFF_BUF_STATUS              (volatile unsigned int *)((0x1d40  << 2) + 0xff620000)
+// bit[31:10] Reserved
+// bit[9:0] read_req_addr
+#define   HCODEC_VLC_COEFF_RD_REQ                  (0x1d41)
+#define P_HCODEC_VLC_COEFF_RD_REQ                  (volatile unsigned int *)((0x1d41  << 2) + 0xff620000)
+// bit[20]   - coeff_buf_read_finished
+// bit[19]   - coeff_first
+// bit[18:4] - coeff_level
+// bit[3:0]  - coeff_run
+#define   HCODEC_VLC_COEFF                         (0x1d42)
+#define P_HCODEC_VLC_COEFF                         (volatile unsigned int *)((0x1d42  << 2) + 0xff620000)
+// bit[31]    - coeff_info_ready
+// bit[30:25] - Reserved
+// bit[24:15] - block_begin_addr
+// bit[14:11] - trailing_one_sign
+// bit[10:6]  - total_coeff
+// bit[5:4]   - trailing_ones
+// bit[3:0]   - total_zeros
+#define   HCODEC_VLC_COEFF_INFO                    (0x1d43)
+#define P_HCODEC_VLC_COEFF_INFO                    (volatile unsigned int *)((0x1d43  << 2) + 0xff620000)
+// bit[31]    write_ptr_update
+// bit[30]    read_ptr_update
+// bit[29:25] Reserved
+// bit[24:20] dc_buf_level -- 0-16
+// bit[19:15] Reserved
+// bit[14:10] dc_buf_write_ptr
+// bit[9:5]   Reserved
+// bit[4:0]   dc_buf_read_ptr
+#define   HCODEC_VLC_DC_BUF_STATUS                 (0x1d44)
+#define P_HCODEC_VLC_DC_BUF_STATUS                 (volatile unsigned int *)((0x1d44  << 2) + 0xff620000)
+// bit[31:10] Reserved
+// bit[9:4]   Reserved
+// bit[3:0]   read_req_addr
+#define   HCODEC_VLC_DC_RD_REQ                     (0x1d45)
+#define P_HCODEC_VLC_DC_RD_REQ                     (volatile unsigned int *)((0x1d45  << 2) + 0xff620000)
+// bit[31:17] - Reserved
+// bit[16]   - dc_first
+// bit[15:1] - dc_level
+// bit[0]    - dc_type  0 - CDC, 1 - LDC
+#define   HCODEC_VLC_DC                            (0x1d46)
+#define P_HCODEC_VLC_DC                            (volatile unsigned int *)((0x1d46  << 2) + 0xff620000)
+// bit[31]    - dc_info_ready
+// bit[30:25] - Reserved
+// bit[24:20] - Reserved
+// bit[19:15] - dc_idx_begin_addr
+// bit[14:11] - dc_trailing_one_sign
+// bit[10:6]  - dc_total_coeff
+// bit[5:4]   - dc_trailing_ones
+// bit[3:0]   - dc_total_zeros
+#define   HCODEC_VLC_DC_INFO                       (0x1d47)
+#define P_HCODEC_VLC_DC_INFO                       (volatile unsigned int *)((0x1d47  << 2) + 0xff620000)
+// bit[31:4]  - Reserved
+// bit[3:0]   - mv_rw_idx  (auto increment when read/write VLC_MV)
+#define   HCODEC_VLC_MV_INDEX                      (0x1d48)
+#define P_HCODEC_VLC_MV_INDEX                      (volatile unsigned int *)((0x1d48  << 2) + 0xff620000)
+// bit[31:16] - MVY
+// bit[15:0]  - MVX
+#define   HCODEC_VLC_MV                            (0x1d49)
+#define P_HCODEC_VLC_MV                            (volatile unsigned int *)((0x1d49  << 2) + 0xff620000)
+// bit[31:16] - MVY
+// bitp15:0]  - MVX
+// Write to HENC_TOP_MV_0 will cause previous U->UL, UR->U, and UR write
+// Read will read U MV only
+#define   HCODEC_HENC_TOP_MV_0                     (0x1d4a)
+#define P_HCODEC_HENC_TOP_MV_0                     (volatile unsigned int *)((0x1d4a  << 2) + 0xff620000)
+#define   HCODEC_HENC_TOP_MV_1                     (0x1d4b)
+#define P_HCODEC_HENC_TOP_MV_1                     (volatile unsigned int *)((0x1d4b  << 2) + 0xff620000)
+#define   HCODEC_HENC_TOP_MV_2                     (0x1d4c)
+#define P_HCODEC_HENC_TOP_MV_2                     (volatile unsigned int *)((0x1d4c  << 2) + 0xff620000)
+#define   HCODEC_HENC_TOP_MV_3                     (0x1d4d)
+#define P_HCODEC_HENC_TOP_MV_3                     (volatile unsigned int *)((0x1d4d  << 2) + 0xff620000)
+#define   HCODEC_HENC_LEFT_MV_0                    (0x1d4e)
+#define P_HCODEC_HENC_LEFT_MV_0                    (volatile unsigned int *)((0x1d4e  << 2) + 0xff620000)
+#define   HCODEC_HENC_LEFT_MV_1                    (0x1d4f)
+#define P_HCODEC_HENC_LEFT_MV_1                    (volatile unsigned int *)((0x1d4f  << 2) + 0xff620000)
+#define   HCODEC_HENC_LEFT_MV_2                    (0x1d50)
+#define P_HCODEC_HENC_LEFT_MV_2                    (volatile unsigned int *)((0x1d50  << 2) + 0xff620000)
+#define   HCODEC_HENC_LEFT_MV_3                    (0x1d51)
+#define P_HCODEC_HENC_LEFT_MV_3                    (volatile unsigned int *)((0x1d51  << 2) + 0xff620000)
+// Bit[31:1] Reserved
+// Bit[0] top_left_mv_ready
+#define   HCODEC_TOP_LEFT_READY                    (0x1d52)
+#define P_HCODEC_TOP_LEFT_READY                    (volatile unsigned int *)((0x1d52  << 2) + 0xff620000)
+// Bit[31:16] Reserved
+// Bit[15:0] mb_skip_run
+#define   HCODEC_MB_SKIP_RUN                       (0x1d53)
+#define P_HCODEC_MB_SKIP_RUN                       (volatile unsigned int *)((0x1d53  << 2) + 0xff620000)
+// Bit[31:16] Reserved
+// Bit[15]    Reserved
+// Bit[14:13] rd_struct // 00 - frame, 10 - top field, 11 - bottom field
+// Bit[12:11] wr_struct // 00 - frame, 10 - top field, 11 - bottom field
+// Bit[10:5]  mv_buff_id
+// Bit[4:0]   mv_ref
+#define   HCODEC_VLC_HCMD_CONFIG                   (0x1d54)
+#define P_HCODEC_VLC_HCMD_CONFIG                   (volatile unsigned int *)((0x1d54  << 2) + 0xff620000)
+// Bit[9:0] h264_dblk_info
+#define   HCODEC_VLC_HCMD_DBLK_INFO                (0x1d55)
+#define P_HCODEC_VLC_HCMD_DBLK_INFO                (volatile unsigned int *)((0x1d55  << 2) + 0xff620000)
+// Bit[3:0] vlc_dbg_idx
+#define   HCODEC_VLC_DBG_IDX                       (0x1d56)
+#define P_HCODEC_VLC_DBG_IDX                       (volatile unsigned int *)((0x1d56  << 2) + 0xff620000)
+// Read Only
+#define   HCODEC_VLC_DBG_READ                      (0x1d57)
+#define P_HCODEC_VLC_DBG_READ                      (volatile unsigned int *)((0x1d57  << 2) + 0xff620000)
+// [   29] RW jpeg_comp2_ac_table_sel.                                                      Default 0.
+// [   28] RW jpeg_comp2_dc_table_sel.                                                      Default 0.
+// [26:25] RW jpeg_comp2_cnt_max.                                                           Default 0.
+// [   24] RW jpeg_comp2_en. Set 1 if the scan will include component 2 (Cr).               Default 0.
+// [   21] RW jpeg_comp1_ac_table_sel.                                                      Default 0.
+// [   20] RW jpeg_comp1_dc_table_sel.                                                      Default 0.
+// [18:17] RW jpeg_comp1_cnt_max.                                                           Default 0.
+// [   16] RW jpeg_comp1_en. Set 1 if the scan will include component 1 (Cb).               Default 0.
+// [   13] RW jpeg_comp0_ac_table_sel.                                                      Default 0.
+// [   12] RW jpeg_comp0_dc_table_sel.                                                      Default 0.
+// [10: 9] RW jpeg_comp0_cnt_max.                                                           Default 0.
+// [    8] RW jpeg_comp0_en. Set 1 if the scan will include component 0 (Y).                Default 0.
+// [    1] W  jpeg_coeff_init. Write 1 to this bit to initialize JPEG run length encoder.
+// [    0] RW jpeg_en. 0=Disable JPEG encoder; 1=Enable JPEG encoder.                       Default 0.
+#define   HCODEC_VLC_JPEG_CTRL                     (0x1d58)
+#define P_HCODEC_VLC_JPEG_CTRL                     (volatile unsigned int *)((0x1d58  << 2) + 0xff620000)
+// [   13] RW jpeg_coeff_buf_overfl. Write this bit to 1 to clear overfl.
+// [   12] RW jpeg_coeff_buf_undrfl. Write this bit to 1 to clear undrfl.
+// [   11] R  jpeg_coeff_buf_full.
+// [   10] R  jpeg_coeff_buf_empty.
+// [ 8: 0] R  jpeg_coeff_buf_level.
+#define   HCODEC_VLC_JPEG_COEFF_BUF_STAT           (0x1d59)
+#define P_HCODEC_VLC_JPEG_COEFF_BUF_STAT           (volatile unsigned int *)((0x1d59  << 2) + 0xff620000)
+// [   16] RW JPEG HUFFMAN table access mode. 0=Write; 1=Read.  Default 1.
+// [ 8: 0] RW JPEG HUFFMAN table addr.                          Default 0.
+#define   HCODEC_VLC_HUFFMAN_ADDR                  (0x1d5a)
+#define P_HCODEC_VLC_HUFFMAN_ADDR                  (volatile unsigned int *)((0x1d5a  << 2) + 0xff620000)
+// [19: 0] RW JPEG HUFFMAN table data.
+#define   HCODEC_VLC_HUFFMAN_DATA                  (0x1d5b)
+#define P_HCODEC_VLC_HUFFMAN_DATA                  (volatile unsigned int *)((0x1d5b  << 2) + 0xff620000)
+// bit[31:0] enc_mv_bits - including b8_mode and mvd
+#define   HCODEC_VLC_ENC_MV_BITS                   (0x1d5c)
+#define P_HCODEC_VLC_ENC_MV_BITS                   (volatile unsigned int *)((0x1d5c  << 2) + 0xff620000)
+// bit[31:0] enc_coeff_bits - including cbp, token, trailing_sign, coeff_enc, h264_totzeros, h264_run
+#define   HCODEC_VLC_ENC_COEFF_BITS                (0x1d5d)
+#define P_HCODEC_VLC_ENC_COEFF_BITS                (volatile unsigned int *)((0x1d5d  << 2) + 0xff620000)
+//
+// Closing file:  vlc_regs.h
+//
+//
+// Reading file:  qdct_regs.h
+//
+//========================================================================
+//  QDCT module level register offset
+//========================================================================
+// -----------------------------------------------
+// CBUS_BASE:  DOS_HCODEC_QDCT_CBUS_BASE = 0x0f
+// -----------------------------------------------
+// bit[31:28] - mb_info_state
+#define   HCODEC_QDCT_STATUS_CTRL                  (0x1f00)
+#define P_HCODEC_QDCT_STATUS_CTRL                  (volatile unsigned int *)((0x1f00  << 2) + 0xff620000)
+// bit[18]    - enable_free_clk_sad_top
+// bit[17]    - enable_free_clk_ie_top
+// bit[16]    - enable_free_clk_ie_sub
+// bit[15]    - enable_free_clk_mc_out
+// bit[14]    - enable_free_clk_i_pred_top
+// bit[13]    - enable_free_clk_idct_top
+// bit[12]    - enable_free_clk_iq_top
+// bit[11]    - enable_free_clk_q_top
+// bit[10]    - enable_free_clk_dc_buff_8
+// bit[9]     - enable_free_clk_dct_top
+// bit[8]     - enable_free_clk_mb_info
+// bit[7]     - enable_free_clk_mb_buff
+// bit[6]     - enable_free_clk_reg
+// bit[5]     - ignore_1_include_2nd_half_c
+// bit[4]     - ignore_1_include_2nd_half
+// bit[3]     - ignore_t_p8x8
+// bit[2]     - not_ignore_dc
+// bit[1]     - ignore_small_lac_intra
+// bit[0]     - disable_fast_zero_block
+#define   HCODEC_QDCT_CONFIG                       (0x1f01)
+#define P_HCODEC_QDCT_CONFIG                       (volatile unsigned int *)((0x1f01  << 2) + 0xff620000)
+// bit[31]    - ignore_lac_coeff_en
+// bit[30:26] - ignore_lac_coeff_else
+// bit[25:21] - ignore_lac_coeff_2
+// bit[20:16] - ignore_lac_coeff_1
+// bit[15]    - ignore_cac_coeff_en
+// bit[14:10] - ignore_cac_coeff_else
+// bit[9:5]   - ignore_cac_coeff_2
+// bit[4:0]   - ignore_cac_coeff_1
+#define   HCODEC_IGNORE_CONFIG                     (0x1f02)
+#define P_HCODEC_IGNORE_CONFIG                     (volatile unsigned int *)((0x1f02  << 2) + 0xff620000)
+// bit[31]    - ignore_t_lac_coeff_en
+// bit[30:26] - ignore_t_lac_coeff_else
+// bit[25:21] - ignore_t_lac_coeff_2
+// bit[20:16] - ignore_t_lac_coeff_1
+// bit[15]    - ignore_cdc_coeff_en
+// bit[14]    - ignore_t_lac_coeff_else_le_3
+// bit[13]    - ignore_t_lac_coeff_else_le_4
+// bit[12]    - ignore_cdc_only_when_empty_cac_inter
+// bit[11]    - ignore_cdc_only_when_one_empty_inter
+// bit[10:9]  - ignore_cdc_range_max_inter // 0-0, 1-1, 2,-2, 3-3
+// bit[8:7]   - ignore_cdc_abs_max_inter // 0-1, 1-2, 2,-3, 3-4
+// bit[6]     - reserved
+// bit[5]     - ignore_cdc_only_when_empty_cac_intra
+// bit[4]     - ignore_cdc_only_when_one_empty_intra
+// bit[3:2]   - ignore_cdc_range_max_intra // 0-0, 1-1, 2,-2, 3-3
+// bit[1:0]   - ignore_cdc_abs_max_intra // 0-1, 1-2, 2,-3, 3-4
+#define   HCODEC_IGNORE_CONFIG_2                   (0x1f03)
+#define P_HCODEC_IGNORE_CONFIG_2                   (volatile unsigned int *)((0x1f03  << 2) + 0xff620000)
+// --------------------------------------------
+// MB DATA DDR Interface
+// --------------------------------------------
+#define   HCODEC_QDCT_MB_START_PTR                 (0x1f10)
+#define P_HCODEC_QDCT_MB_START_PTR                 (volatile unsigned int *)((0x1f10  << 2) + 0xff620000)
+#define   HCODEC_QDCT_MB_END_PTR                   (0x1f11)
+#define P_HCODEC_QDCT_MB_END_PTR                   (volatile unsigned int *)((0x1f11  << 2) + 0xff620000)
+#define   HCODEC_QDCT_MB_WR_PTR                    (0x1f12)
+#define P_HCODEC_QDCT_MB_WR_PTR                    (volatile unsigned int *)((0x1f12  << 2) + 0xff620000)
+#define   HCODEC_QDCT_MB_RD_PTR                    (0x1f13)
+#define P_HCODEC_QDCT_MB_RD_PTR                    (volatile unsigned int *)((0x1f13  << 2) + 0xff620000)
+#define   HCODEC_QDCT_MB_LEVEL                     (0x1f14)
+#define P_HCODEC_QDCT_MB_LEVEL                     (volatile unsigned int *)((0x1f14  << 2) + 0xff620000)
+// bit  [31]    disable_mbxy_ie_save
+// bit  [30]    no_wait_after_q_cdc
+// bit  [29]    ie_start_int_enable
+// bit  [28]    ignore_t_p8x8
+// bit  [27]    zero_mc_out_null_non_skipped_mb
+// bit  [26]    no_mc_out_null_non_skipped_mb
+// bit  [25]    mc_out_even_skipped_mb
+// bit  [24]    mc_out_wait_cbp_ready
+// bit  [23]    mc_out_wait_mb_type_ready
+// bit  [22]    i_pred_int_enable
+// bit  [21]    intra_sat8_enable
+// bit  [20]    ie_sub_enable
+// bit  [19]    i_pred_enable
+// bit  [18]    iq_enable
+// bit  [17]    idct_enable
+// bit  [16]    no_zero_coeff_mb
+// bit  [15]    add_zero_coeff_block
+// bit  [14]    mb_pause_enable
+// bit  [13]    q_enable
+// bit  [12]    dct_enable
+// bit  [11]    ignore_magic_word
+// bit  [10]    mb_info_en
+// bit  [9]     mb_info_soft_reset
+// bit  [8]     mb_always_ready Set to 1 to ignore mb_level blocking DDR read
+// bit  [7]     mb_ready_for_transfer (Read Only)
+// bit  [6]     data_ready_for_transfer (Read Only)
+// bits [5:3]   mb_endian       Set MB Endian inside DDR memory
+// bit  [2]     mb_read_busy   Read Only - indicate DDR read busy
+// bit  [1]     mb_read_en     Set to 1 to enable reading data from DDR memory
+// bit  [0]     mb_soft_reset   Soft reset
+#define   HCODEC_QDCT_MB_CONTROL                   (0x1f15)
+#define P_HCODEC_QDCT_MB_CONTROL                   (volatile unsigned int *)((0x1f15  << 2) + 0xff620000)
+// bit 31    transfer_length 0 - 32x64 Bits per request, 1 - 16x64 Bits per request  // default : 0
+// bit 30    A_urgent  // default : 0
+// bit 29:24 A_brst_num // default : 0x3f
+// bit 23    reserved
+// bit 22    read_till_zero
+// bit 21:16 A_id  // default : 0x21
+// bit 15:0  mb_level_hold // default : 0
+#define   HCODEC_QDCT_MB_MEM_CTL                   (0x1f16)
+#define P_HCODEC_QDCT_MB_MEM_CTL                   (volatile unsigned int *)((0x1f16  << 2) + 0xff620000)
+// bit  [31:24] reserved
+// bit  [23:16] vb_buff_level     -- Read only
+// bit  [15:8]  vb_buff_wr_point -- RW
+// bit  [7:0]   vb_buff_rd_point -- RW
+#define   HCODEC_QDCT_MB_BUFF                      (0x1f17)
+#define P_HCODEC_QDCT_MB_BUFF                      (volatile unsigned int *)((0x1f17  << 2) + 0xff620000)
+// bit [31:0] mb infor data begin magic word - default : 0xa55aaa55
+#define   HCODEC_QDCT_MB_MAGIC_WORD                (0x1f18)
+#define P_HCODEC_QDCT_MB_MAGIC_WORD                (volatile unsigned int *)((0x1f18  << 2) + 0xff620000)
+// Read Only Register
+// bit[19]   dct_ready_1
+// bit[18]   dct_ready_0
+// bit[17]   dct_rd_idx
+// bit[16]   dct_wr_idx
+// bit[15]   dct_srdy
+// bit[14]   dct_rrdy
+// bit[13]   Reserved
+// bit[12:8] dct_block_number
+// bit[7:4]  dct_rw_addr
+// bit[3:0]  dct_status
+#define   HCODEC_QDCT_DCT_STATUS                   (0x1f19)
+#define P_HCODEC_QDCT_DCT_STATUS                   (volatile unsigned int *)((0x1f19  << 2) + 0xff620000)
+// bit[24:23]  vlc_quant_count
+// bit[22:16]  vlc_delta_quant_data
+// bit[15:10]  vlc_quant_data
+// bit[9:4]    vlc_prev_quant_data
+// bit[3:0]    q_status
+#define   HCODEC_QDCT_Q_STATUS                     (0x1f1a)
+#define P_HCODEC_QDCT_Q_STATUS                     (volatile unsigned int *)((0x1f1a  << 2) + 0xff620000)
+// bit[31:3] Reserved
+// bit[2:0]  picture_type
+#define   HCODEC_QDCT_PIC_INFO                     (0x1f1b)
+#define P_HCODEC_QDCT_PIC_INFO                     (volatile unsigned int *)((0x1f1b  << 2) + 0xff620000)
+// bit[31:28] Reserved
+// bit[27:22] I_pic_quant_c
+// bit[21:16] I_pic_quant
+// bit[15]    reserved
+// bit[14:12] quant_rem_c
+// bit[11:8]  quant_per_c
+// bit[7]     reserved
+// bit[6:4]   quant_rem
+// bit[3:0]   quant_per
+#define   HCODEC_QDCT_Q_QUANT_I                    (0x1f1c)
+#define P_HCODEC_QDCT_Q_QUANT_I                    (volatile unsigned int *)((0x1f1c  << 2) + 0xff620000)
+// bit[31:28] Reserved
+// bit[27:22] P_pic_quant_c
+// bit[21:16] P_pic_quant
+// bit[15]    reserved
+// bit[14:12] quant_rem_c
+// bit[11:8]  quant_per_c
+// bit[7]     reserved
+// bit[6:4]   quant_rem
+// bit[3:0]   quant_per
+#define   HCODEC_QDCT_Q_QUANT_P                    (0x1f1d)
+#define P_HCODEC_QDCT_Q_QUANT_P                    (volatile unsigned int *)((0x1f1d  << 2) + 0xff620000)
+// bit[31]    mb_info_pause
+// bit[30:16] pause_mby
+// bit[15:0]  pause_mbx
+#define   HCODEC_QDCT_MB_PAUSE_CTL                 (0x1f1e)
+#define P_HCODEC_QDCT_MB_PAUSE_CTL                 (volatile unsigned int *)((0x1f1e  << 2) + 0xff620000)
+// bit[31]   top_control_ready_i_pred
+// bit[30:28]top_dma_status
+// bit[27]   top_control_ready_ie
+// bit[26:24]Reserved
+// bit[23]   ul_mb
+// bit[22]   right_mb
+// bit[21]   top_mb
+// bit[20]   left_mb
+// bit[19:8] mb_x
+// bit[7:6]  i_pred_ref_idx_L
+// bit[5:4]  i_pred_ref_idx_UL
+// bit[3:2]  i_pred_ref_idx_U
+// bit[1:0]  i_pred_ref_idx_UR
+#define   HCODEC_QDCT_TOP_CONTROL                  (0x1f1f)
+#define P_HCODEC_QDCT_TOP_CONTROL                  (volatile unsigned int *)((0x1f1f  << 2) + 0xff620000)
+// bit[31:0] top_base_addr - DDR Memory start address for save top Pixel
+#define   HCODEC_QDCT_TOP_BASE_MEM                 (0x1f20)
+#define P_HCODEC_QDCT_TOP_BASE_MEM                 (volatile unsigned int *)((0x1f20  << 2) + 0xff620000)
+// bit 15:13 Reserved
+// bit 12    A_urgent  // default : 0
+// bit 11:6  A_brst_num // default : 0x3f
+// bit 5:0   A_id  // default : 0x22
+#define   HCODEC_QDCT_TOP_MEM_CTL                  (0x1f21)
+#define P_HCODEC_QDCT_TOP_MEM_CTL                  (volatile unsigned int *)((0x1f21  << 2) + 0xff620000)
+// bit [11:0] top_wrrsp_count
+#define   HCODEC_QDCT_TOP_WRRSP                    (0x1f22)
+#define P_HCODEC_QDCT_TOP_WRRSP                    (volatile unsigned int *)((0x1f22  << 2) + 0xff620000)
+// Bit[3:0] qdct_dbg_idx
+#define   HCODEC_QDCT_DBG_IDX                      (0x1f23)
+#define P_HCODEC_QDCT_DBG_IDX                      (volatile unsigned int *)((0x1f23  << 2) + 0xff620000)
+// Read Only
+#define   HCODEC_QDCT_DBG_READ                     (0x1f24)
+#define P_HCODEC_QDCT_DBG_READ                     (volatile unsigned int *)((0x1f24  << 2) + 0xff620000)
+// [19:18] RW jdct_inflow_ctrl. JPEG DCT input flow control.                                Default 0.
+//            0=No halt;
+//            1=DCT halts request at end of each 8x8 block;
+//            2=DCT halts request at end of each MCU.
+// [17:16] RW jpeg_coeff_last_sel.                                                          Default 0.
+//            Select at which point to finish processing, give update to AmRISC so it can control the next step.
+//            0=Mark last coeff at the end of an 8x8 block;
+//            1=Mark at the end of an MCU;
+//            2=Mark at the end of a scan.
+// [   15] RW jpeg_quant_sel_comp2. 0=Comp2 select Quantization table 0; 1=Select table 1.  Default 0.
+// [   14] RW jpeg_v_factor_comp2. Component 2's vertical sampling factor.                  Default 0.
+// [   13] RW jpeg_h_factor_comp2. Component 2's horizontal sampling factor.                Default 0.
+// [   12] RW jpeg_comp2_en. Set 1 if the scan will include component 2 (Cr).               Default 0.
+// [   11] RW jpeg_quant_sel_comp1. 0=Comp1 select Quantization table 0; 1=Select table 1.  Default 0.
+// [   10] RW jpeg_v_factor_comp1. Component 1's vertical sampling factor.                  Default 0.
+// [    9] RW jpeg_h_factor_comp1. Component 1's horizontal sampling factor.                Default 0.
+// [    8] RW jpeg_comp1_en. Set 1 if the scan will include component 1 (Cb).               Default 0.
+// [    7] RW jpeg_quant_sel_comp0. 0=Comp0 select Quantization table 0; 1=Select table 1.  Default 0.
+// [    6] RW jpeg_v_factor_comp0. Component 0's vertical sampling factor.                  Default 0.
+// [    5] RW jpeg_h_factor_comp0. Component 0's horizontal sampling factor.                Default 0.
+// [    4] RW jpeg_comp0_en. Set 1 if the scan will include component 0 (Y).                Default 0.
+// [ 3: 1] RW jdct_intr_sel. JPEG DCT interrupt select.                                     Default 0.
+//            0=Disable intr;
+//            1=Intr at end of each 8x8 block of DCT input;
+//            2=Intr at end of each MCU of DCT input;
+//            3=Intr at end of a scan of DCT input;
+//            4=Intr at end of each 8x8 block of DCT output;
+//            5=Intr at end of each MCU of DCT output;
+//            6=Intr at end of a scan of DCT output.
+// [    0] RW jpeg_en. 0=Disable JPEG QDCT; 1=Enable JPEG QDCT.                             Default 0.
+#define   HCODEC_QDCT_JPEG_CTRL                    (0x1f25)
+#define P_HCODEC_QDCT_JPEG_CTRL                    (volatile unsigned int *)((0x1f25  << 2) + 0xff620000)
+// [29:16] RW jpeg_x_end.   Picture X end.      Default 0.
+// [13: 0] RW jpeg_x_start. Picture X start.    Default 0.
+#define   HCODEC_QDCT_JPEG_X_START_END             (0x1f26)
+#define P_HCODEC_QDCT_JPEG_X_START_END             (volatile unsigned int *)((0x1f26  << 2) + 0xff620000)
+// [29:16] RW jpeg_y_end.   Picture Y end.      Default 0.
+// [13: 0] RW jpeg_y_start. Picture Y start.    Default 0.
+#define   HCODEC_QDCT_JPEG_Y_START_END             (0x1f27)
+#define P_HCODEC_QDCT_JPEG_Y_START_END             (volatile unsigned int *)((0x1f27  << 2) + 0xff620000)
+// [    8] RW JPEG QUANT table access mode. 0=Write; 1=Read.    Default 1.
+// [ 5: 0] RW JPEG QUANT table addr.                            Default 0.
+#define   HCODEC_QDCT_JPEG_QUANT_ADDR              (0x1f28)
+#define P_HCODEC_QDCT_JPEG_QUANT_ADDR              (volatile unsigned int *)((0x1f28  << 2) + 0xff620000)
+// [31: 0] RW JPEG QUANT table data.
+#define   HCODEC_QDCT_JPEG_QUANT_DATA              (0x1f29)
+#define P_HCODEC_QDCT_JPEG_QUANT_DATA              (volatile unsigned int *)((0x1f29  << 2) + 0xff620000)
+// [    1] W  resume_jdct.
+//            Write 1 to this bit will resume JPEG input engine when previously
+//            it is halted by QDCT_JPEG_CTRL.jdct_inflow_ctrl.
+// [    0] W  jpeg_sof.
+//            Write 1 to this bit will start JPEG input engine.
+#define   HCODEC_QDCT_JPEG_SOF_RESUME              (0x1f2a)
+#define P_HCODEC_QDCT_JPEG_SOF_RESUME              (volatile unsigned int *)((0x1f2a  << 2) + 0xff620000)
+// [31:30] R  dct_st.       jdct_ctrl state. 0=IDLE; 1=WAIT; 2=DCT_REQ.
+// [29:28] R  mfdin_comp.   Current component at pixel request to MFDIN.
+// [27:14] R  mfdin_y.      Current Y at pixel request to MFDIN.
+// [13: 0] R  mfdin_x.      Current X at pixel request to MFDIN.
+#define   HCODEC_QDCT_JPEG_DCT_STATUS0             (0x1f2b)
+#define P_HCODEC_QDCT_JPEG_DCT_STATUS0             (volatile unsigned int *)((0x1f2b  << 2) + 0xff620000)
+// [15:12] R  JPEG Quant read MEM select.
+// [11: 8] R  JPEG DCT2 write MEM select.
+// [ 7: 4] R  JPEG DCT2 read MEM select.
+// [ 3: 0] R  JPEG DCT1 write MEM select.
+#define   HCODEC_QDCT_JPEG_DCT_STATUS1             (0x1f2c)
+#define P_HCODEC_QDCT_JPEG_DCT_STATUS1             (volatile unsigned int *)((0x1f2c  << 2) + 0xff620000)
+// [28:16] RW jdct_coeff1.  Default 13'h1D90; // 7568 = 4096 * sqrt(2) * (cos(Pi/8) + sin(Pi/8)) // 7569
+// [12: 0] RW jdct_coeff0.  Default 13'h16A1; // 5793 = 4096 * sqrt(2)
+#define   HCODEC_QDCT_JPEG_DCT_COEFF01             (0x1f2d)
+#define P_HCODEC_QDCT_JPEG_DCT_COEFF01             (volatile unsigned int *)((0x1f2d  << 2) + 0xff620000)
+// [28:16] RW jdct_coeff3.  Default 13'h0C3F; // 3135 = 4096 * sqrt(2) * (cos(Pi/8) - sin(Pi/8))
+// [12: 0] RW jdct_coeff2.  Default 13'h08A9; // 2217 = 4096 * sqrt(2) * sin(Pi/8) // 2215
+#define   HCODEC_QDCT_JPEG_DCT_COEFF23             (0x1f2e)
+#define P_HCODEC_QDCT_JPEG_DCT_COEFF23             (volatile unsigned int *)((0x1f2e  << 2) + 0xff620000)
+// [28:16] RW jdct_coeff5.  Default 13'h046A; // 1130 = 4096 * (cos(3Pi/16) - sin(3Pi/16))
+// [12: 0] RW jdct_coeff4.  Default 13'h1631; // 5681 = 4096 * (cos(3Pi/16) + sin(3Pi/16)) // 5682
+#define   HCODEC_QDCT_JPEG_DCT_COEFF45             (0x1f2f)
+#define P_HCODEC_QDCT_JPEG_DCT_COEFF45             (volatile unsigned int *)((0x1f2f  << 2) + 0xff620000)
+// [28:16] RW jdct_coeff7.  Default 13'h0C92; // 3218 = 4096 * (cos(Pi/16) - sin(Pi/16))
+// [12: 0] RW jdct_coeff6.  Default 13'h12D0; // 4816 = 4096 * (cos(Pi/16) + sin(Pi/16))
+#define   HCODEC_QDCT_JPEG_DCT_COEFF67             (0x1f30)
+#define P_HCODEC_QDCT_JPEG_DCT_COEFF67             (volatile unsigned int *)((0x1f30  << 2) + 0xff620000)
+// [28:16] RW jdct_coeff9.  Default 13'h0FB1; // 4017 = 4096 * cos(Pi/16)
+// [12: 0] RW jdct_coeff8.  Default 13'h0D4E; // 3406 = 4096 * cos(3Pi/16)
+#define   HCODEC_QDCT_JPEG_DCT_COEFF89             (0x1f31)
+#define P_HCODEC_QDCT_JPEG_DCT_COEFF89             (volatile unsigned int *)((0x1f31  << 2) + 0xff620000)
+#define   HCODEC_QDCT_I_PRED_REF_WR_IDX            (0x1f32)
+#define P_HCODEC_QDCT_I_PRED_REF_WR_IDX            (volatile unsigned int *)((0x1f32  << 2) + 0xff620000)
+#define   HCODEC_QDCT_I_PRED_REF_WR_DATA           (0x1f33)
+#define P_HCODEC_QDCT_I_PRED_REF_WR_DATA           (volatile unsigned int *)((0x1f33  << 2) + 0xff620000)
+// bit[29]  mb_info_latch_no_I16_pred_mode
+// bit[28]  ie_dma_mbxy_use_i_pred
+// bit[27]  ie_dma_read_write_use_ip_idx
+// bit[26]  ie_start_use_top_dma_count
+// bit[25]  i_pred_top_dma_rd_mbbot
+// bit[24]  i_pred_top_dma_wr_disable
+// bit[23]  i_pred_mix
+// bit[22]  me_ab_rd_when_intra_in_p
+// bit[21]  force_mb_skip_run_when_intra
+// bit[20]  mc_out_mixed_type
+// bit[19]  ie_start_when_quant_not_full
+// bit[18]  mb_info_state_mix
+// bit[17]  mb_type_use_mix_result
+// bit[16]  me_cb_ie_read_enable
+// bit[15]  ie_cur_data_from_me
+// bit[14]  rem_per_use_table
+// bit[13]  q_latch_int_enable
+// bit[12]  q_use_table
+// bit[11]  q_start_wait
+// bit[10]  LUMA_16_LEFT_use_cur
+// bit[9]   DC_16_LEFT_SUM_use_cur
+// bit[8]   c_ref_ie_sel_cur
+// bit[7]   c_ipred_perfect_mode
+// bit[6]   ref_ie_ul_sel 0-old, 1-use next_set
+// bit[5]   mb_type_use_ie_result
+// bit[4]   detect_I16_from_I4
+// bit[3]   ie_not_wait_ref_busy
+// bit[2]   ie_I16_enable
+// bit[1:0] ie_done_sel (0, 1, 2, -1)
+#define   HCODEC_QDCT_ADV_CONFIG                   (0x1f34)
+#define P_HCODEC_QDCT_ADV_CONFIG                   (volatile unsigned int *)((0x1f34  << 2) + 0xff620000)
+// bit [31:16] I16x16_weight
+// bit [15:0]  I4x4_weight
+#define   HCODEC_IE_WEIGHT                         (0x1f35)
+#define P_HCODEC_IE_WEIGHT                         (volatile unsigned int *)((0x1f35  << 2) + 0xff620000)
+// bit [31]  reserved
+// bit [30] q_I16MB
+// bit [29]  reserved
+// bit [28]  reserved
+// bit [27:23] quant_table_addr I4MB:[0,7], I16MB:[8:15], INTER:[16:23], Reserved:[24:31]
+// bit [22]    quant_table_addr_update(when notupdate_rem_per) (read is arb_result : q_intra)
+// bit [21:19] quant_rem_c
+// bit [18:16] quant_rem_y
+// bit [15:12] quant_per_c
+// bit [11:8]  quant_per_y
+// bit [7:2] quant
+// bit [1] update_rem_per
+// bit [0] clear_wait_status
+#define   HCODEC_Q_QUANT_CONTROL                   (0x1f36)
+#define P_HCODEC_Q_QUANT_CONTROL                   (volatile unsigned int *)((0x1f36  << 2) + 0xff620000)
+#define   HCODEC_MBBOT_EVEN_ADDR                   (0x1f37)
+#define P_HCODEC_MBBOT_EVEN_ADDR                   (volatile unsigned int *)((0x1f37  << 2) + 0xff620000)
+#define   HCODEC_MBBOT_ODD_ADDR                    (0x1f38)
+#define P_HCODEC_MBBOT_ODD_ADDR                    (volatile unsigned int *)((0x1f38  << 2) + 0xff620000)
+// bit [29:24] quant_table_data_3
+// bit [21:16] quant_table_data_2
+// bit [13:8]  quant_table_data_1
+// bit [5:0]   quant_table_data_0
+#define   HCODEC_QUANT_TABLE_DATA                  (0x1f39)
+#define P_HCODEC_QUANT_TABLE_DATA                  (volatile unsigned int *)((0x1f39  << 2) + 0xff620000)
+// bit [31:16] ie_sad_offset_I16
+// bit [15:0] ie_sad_offset_I4
+#define   HCODEC_SAD_CONTROL_0                     (0x1f3a)
+#define P_HCODEC_SAD_CONTROL_0                     (volatile unsigned int *)((0x1f3a  << 2) + 0xff620000)
+// bit [31]     sad_soft_reset
+// bit [30:27]  reserved
+// bit [26:24]  ie_sad_shift_I16
+// bit [22:20]  ie_sad_shift_I4
+// bit [18:16]  me_sad_shift_INTER
+// bit [15:0]   me_sad_offset_INTER
+#define   HCODEC_SAD_CONTROL_1                     (0x1f3b)
+#define P_HCODEC_SAD_CONTROL_1                     (volatile unsigned int *)((0x1f3b  << 2) + 0xff620000)
+// bit [31]     vlc_quant_rd_ptr
+// bit [30]     vlc_quant_rd_ptr_update
+// bit [29]     vlc_quant_wr_ptr
+// bit [28]     vlc_quant_wr_ptr_update
+// bit [27:26]  reserved
+// bit [25:19]  vlc_delta_quant_1
+// bit [18:13]  vlc_quant_1
+// bit [12:6]   vlc_delta_quant_0
+// bit [5:0]    vlc_quant_0
+#define   HCODEC_QDCT_VLC_QUANT_CTL_0              (0x1f3c)
+#define P_HCODEC_QDCT_VLC_QUANT_CTL_0              (volatile unsigned int *)((0x1f3c  << 2) + 0xff620000)
+// bit [31:30]  me_sad_rd_idx
+// bit [29]     me_sad_rd_idx_update
+// bit [28:27]  me_sad_wr_idx
+// bit [26]     me_sad_wr_idx_update
+// bit [25:24]  ie_sad_rd_idx
+// bit [23]     ie_sad_rd_idx_update
+// bit [22:21]  ie_sad_wr_idx
+// bit [20]     ie_sad_wr_idx_update
+// bit [19:12]  Reserved
+// bit [11:6]   vlc_max_delta_q_neg
+// bit [5:0]    vlc_max_delta_q_pos
+#define   HCODEC_QDCT_VLC_QUANT_CTL_1              (0x1f3d)
+#define P_HCODEC_QDCT_VLC_QUANT_CTL_1              (volatile unsigned int *)((0x1f3d  << 2) + 0xff620000)
+// bit[4] jdct_int
+// bit[3] quant_latch
+// bit[2] me_done
+// bit[1] ie_start
+// bit[0] i_pred_start
+#define   HCODEC_QDCT_INT_STATUS                   (0x1f3e)
+#define P_HCODEC_QDCT_INT_STATUS                   (volatile unsigned int *)((0x1f3e  << 2) + 0xff620000)
+// bit[3]   mix_i_pred_wait_left_en
+// bit[2:0] mc_pending_mb_count
+#define   HCODEC_QDCT_MIX_I_PRED_STATUS            (0x1f3f)
+#define P_HCODEC_QDCT_MIX_I_PRED_STATUS            (volatile unsigned int *)((0x1f3f  << 2) + 0xff620000)
+// IE/ME share same cbus_base as QDCT
+//
+// bit[31]  active_ur_block
+// bit[30]  active_ul_block
+// bit[21]  disable_HENC_V_PRED_16
+// bit[20]  disable_HENC_H_PRED_16
+// bit[19]  disable_HENC_DC_PRED_16
+// bit[18]  disable_HENC_HENC_HOR_UP_PRED
+// bit[17]  disable_HENC_VERT_LEFT_PRED
+// bit[16]  disable_HENC_HENC_HOR_DOWN_PRED
+// bit[15]  disable_HENC_VERT_RIGHT_PRED
+// bit[14]  disable_HENC_DIAG_DOWN_RIGHT_PRED
+// bit[13]  disable_HENC_DIAG_DOWN_LEFT_PRED
+// bit[12]  disable_HENC_DC_PRED
+// bit[11]  disable_HENC_HOR_PRED
+// bit[10]  disable_HENC_VERT_PRED
+// bit[9]   ie_c_wait_ie_pause
+// bit[8:4] max_ie_result_buff_count
+// bit[3]   ie_wait_for_ie_result  // use for (max_ie_result_buff_count == 0) to wait every block
+// bit[2]   reserved
+// bit[1]   ie_enable
+// bit[0]   ie_soft_reset
+#define   HCODEC_IE_CONTROL                        (0x1f40)
+#define P_HCODEC_IE_CONTROL                        (volatile unsigned int *)((0x1f40  << 2) + 0xff620000)
+// bit[31:12] Reserved
+// bit[11:0]  mb_y
+#define   HCODEC_IE_MB_POSITION                    (0x1f41)
+#define P_HCODEC_IE_MB_POSITION                    (volatile unsigned int *)((0x1f41  << 2) + 0xff620000)
+// bit[31:16] me_skip_run
+// bit[15:8]  reserved
+// bit [7:4]  me_b8_mode
+// bit [3:0]  ie_me_mb_type
+#define   HCODEC_IE_ME_MB_INFO                     (0x1f42)
+#define P_HCODEC_IE_ME_MB_INFO                     (volatile unsigned int *)((0x1f42  << 2) + 0xff620000)
+// bit[3]   ie_result_buff_enable
+// bit[2]   ie_result_buff_soft_reset
+// bit[1]   sad_enable
+// bit[0]   ie_sad_soft_reset
+#define   HCODEC_SAD_CONTROL                       (0x1f43)
+#define P_HCODEC_SAD_CONTROL                       (volatile unsigned int *)((0x1f43  << 2) + 0xff620000)
+// bit[31:16] - ie_result_buff_count - read only
+// bit[14:12] -current_ie_result (pred_mode) - read only
+// bit[11]  top_control_data_buff_wr_ptr - rd/wr
+// bit[10]  top_control_data_buff_rd_ptr - rd/wr
+// bit[9:5] ie_result_buff_wr_ptr        - rd/wr
+// bit[4:0] ie_result_buff_rd_ptr        - rd/wr
+#define   HCODEC_IE_RESULT_BUFFER                  (0x1f44)
+#define P_HCODEC_IE_RESULT_BUFFER                  (volatile unsigned int *)((0x1f44  << 2) + 0xff620000)
+// bit[63:0] ie_i4_pred_mode
+#define   HCODEC_IE_I4_PRED_MODE_HI                (0x1f45)
+#define P_HCODEC_IE_I4_PRED_MODE_HI                (volatile unsigned int *)((0x1f45  << 2) + 0xff620000)
+#define   HCODEC_IE_I4_PRED_MODE_LO                (0x1f46)
+#define P_HCODEC_IE_I4_PRED_MODE_LO                (volatile unsigned int *)((0x1f46  << 2) + 0xff620000)
+// bit [31:9] reserved
+// bit [8:4] i_pred_block_number
+// bit [3:0] ie_c_pred_mode
+#define   HCODEC_IE_C_PRED_MODE                    (0x1f47)
+#define P_HCODEC_IE_C_PRED_MODE                    (volatile unsigned int *)((0x1f47  << 2) + 0xff620000)
+// 31:16 - Left, 0-select ie_pixel, 1-select mc_data_out
+// 15:0  - Top,  0-select ie_pixel, 1-select mc_data_out
+#define   HCODEC_IE_CUR_REF_SEL                    (0x1f48)
+#define P_HCODEC_IE_CUR_REF_SEL                    (volatile unsigned int *)((0x1f48  << 2) + 0xff620000)
+// bit[31]  enable_f_skip_1_step_3
+// bit[30]  enable_f_skip_1_step_2
+// bit[29]  enable_f_skip_1_step_1
+// bit[28]  step_3_enable
+// bit[27]  step_2_sub_pixel
+// bit[26]  always_f_skip_step_3
+// bit[25]  always_f_skip_step_2
+// bit[24]  always_f_skip_step_1
+// bit[23]  half_pixel_only
+// bit[22:13] reserved
+// bit[12]  adv_mv_enable
+// bit[11]  sad_short_valid
+// bit[10:9] mv_flexable_ctl 00:0x40, 01:0x80, 10:0xc0, 11 : 0x100
+// bit[8]   no_md_ab_rd
+// bit[7]   use_dct_state
+// bit[6]   enable_free_clk_me_ctl
+// bit[5]   enable_free_clk_me_ab
+// bit[4]   enable_free_clk_me_cb
+// bit[3]   reserved
+// bit[2]   me_done_int_enable
+// bit[1]   me_enable
+// bit[0]   me_soft_reset
+#define   HCODEC_ME_CONTROL                        (0x1f49)
+#define P_HCODEC_ME_CONTROL                        (volatile unsigned int *)((0x1f49  << 2) + 0xff620000)
+// bit[31:28] Reserved
+// bit[27:16] me_start_mby
+// bit[15:12] Reserved
+// bit[11:0]  me_start_mbx
+#define   HCODEC_ME_START_POSITION                 (0x1f4a)
+#define P_HCODEC_ME_START_POSITION                 (volatile unsigned int *)((0x1f4a  << 2) + 0xff620000)
+// bit [31:28] me_status - Read only
+// bit [27:24] me_cb_status  // current buffer
+// bit [23:20] me_ab_status  // anc buffer
+// bit [19]    Reserved
+// bit [18:16] me_ab_wr_ptr  // read only
+// bit [15:4]  me_last_mbx
+// bit [3:1]   me_ab_rd_ptr  // read only
+// bit [0]     me_action
+#define   HCODEC_ME_STATUS                         (0x1f4b)
+#define P_HCODEC_ME_STATUS                         (volatile unsigned int *)((0x1f4b  << 2) + 0xff620000)
+// all Read-only
+// bit [31:28] Reserved
+// bit [27:16] me_ab_mbx
+// bit [15:14] me_cb_wr_ptr
+// bit [13:12] me_cb_rd_ptr
+// bit [11:0]  me_cb_mbx
+#define   HCODEC_ME_DEBUG                          (0x1f4c)
+#define P_HCODEC_ME_DEBUG                          (volatile unsigned int *)((0x1f4c  << 2) + 0xff620000)
+// bit[29:24] step_3_skip_line
+// bit[23:18] step_2_skip_line
+// bit[17:12] step_1_skip_line
+// bit[11:6]  step_0_skip_line
+// bit[5:0]   read_skip_line
+#define   HCODEC_ME_SKIP_LINE                      (0x1f4d)
+#define P_HCODEC_ME_SKIP_LINE                      (volatile unsigned int *)((0x1f4d  << 2) + 0xff620000)
+// bit 15:13 Reserved
+// bit 12    A_urgent  // default : 0
+// bit 11:6  A_brst_num // default : 0x3f
+// bit 5:0   A_id  // default : 0x23
+#define   HCODEC_ME_AB_MEM_CTL                     (0x1f4e)
+#define P_HCODEC_ME_AB_MEM_CTL                     (volatile unsigned int *)((0x1f4e  << 2) + 0xff620000)
+// bit[31:24] anc_pic_canvas
+// bit[23:12] max_me_mby_num
+// bit[11:0]  max_me_mbx_num
+#define   HCODEC_ME_PIC_INFO                       (0x1f4f)
+#define P_HCODEC_ME_PIC_INFO                       (volatile unsigned int *)((0x1f4f  << 2) + 0xff620000)
+// bit [23:12] me_sad_enough_1
+// bit [11:0]  me_sad_enough_0
+#define   HCODEC_ME_SAD_ENOUGH_01                  (0x1f50)
+#define P_HCODEC_ME_SAD_ENOUGH_01                  (volatile unsigned int *)((0x1f50  << 2) + 0xff620000)
+// bit [25:12] adv_mv_8x8_enough
+// bit [11:0]  me_sad_enough_2
+#define   HCODEC_ME_SAD_ENOUGH_23                  (0x1f51)
+#define P_HCODEC_ME_SAD_ENOUGH_23                  (volatile unsigned int *)((0x1f51  << 2) + 0xff620000)
+// bit [21:10] me_step0_big_sad
+// bit [9:5] me_step0_close_mv_y
+// bit [4:0] me_step0_close_mv_x
+#define   HCODEC_ME_STEP0_CLOSE_MV                 (0x1f52)
+#define P_HCODEC_ME_STEP0_CLOSE_MV                 (volatile unsigned int *)((0x1f52  << 2) + 0xff620000)
+// bit[31:24] force_skip_sad_3
+// bit[23:16] force_skip_sad_2
+// bit[15:08] force_skip_sad_1
+// bit[07:00] force_skip_sad_0
+#define   HCODEC_ME_F_SKIP_SAD                     (0x1f53)
+#define P_HCODEC_ME_F_SKIP_SAD                     (volatile unsigned int *)((0x1f53  << 2) + 0xff620000)
+// bit[31:24] force_skip_weight_3
+// bit[23:16] force_skip_weight_2
+// bit[15:08] force_skip_weight_1
+// bit[07:00] force_skip_weight_0
+#define   HCODEC_ME_F_SKIP_WEIGHT                  (0x1f54)
+#define P_HCODEC_ME_F_SKIP_WEIGHT                  (volatile unsigned int *)((0x1f54  << 2) + 0xff620000)
+// Merge when (
+//              (flex & me_merge_flex_en) |
+//              (big_sad & me_merge_sad_en)|
+//              ((~me_merge_flex_en)&(~me_merge_sad_en))
+//            ) &
+//            ( small_mv_diff |(~me_merge_small_mv_en))
+//            & (me_merge_flex_en | me_merge_sad_en | me_merge_small_mv_en)
+// bit[31]   me_merge_mv_en_16
+// bit[30]   me_merge_small_mv_en_16
+// bit[29]   me_merge_flex_en_16
+// bit[28]   me_merge_sad_en_16
+// bit[27]   me_merge_mv_en_8
+// bit[26]   me_merge_small_mv_en_8
+// bit[25]   me_merge_flex_en_8
+// bit[24]   me_merge_sad_en_8
+// bit[23:18] me_merge_mv_diff_16
+// bit[17:12] me_merge_mv_diff_8
+// bit[11:0] me_merge_min_sad
+#define   HCODEC_ME_MV_MERGE_CTL                   (0x1f55)
+#define P_HCODEC_ME_MV_MERGE_CTL                   (volatile unsigned int *)((0x1f55  << 2) + 0xff620000)
+// bit[31:24] mv_step_weight_1
+// bit[23:16] mv_pre_weight_1
+// bit [15:0] mv_step_weight_0
+// bit[7:0]   mv_pre_weight_0
+#define   HCODEC_ME_MV_WEIGHT_01                   (0x1f56)
+#define P_HCODEC_ME_MV_WEIGHT_01                   (volatile unsigned int *)((0x1f56  << 2) + 0xff620000)
+// bit[31:24] mv_step_weight_3 (mv_step_weight_1_2nd)
+// bit[23:16] mv_pre_weight_3 (mv_pre_weight_1_2nd)
+// bit[15:8]  mv_step_weight_2
+// bit[7:0]   mv_pre_weight_2
+#define   HCODEC_ME_MV_WEIGHT_23                   (0x1f57)
+#define P_HCODEC_ME_MV_WEIGHT_23                   (volatile unsigned int *)((0x1f57  << 2) + 0xff620000)
+// bit[31:24] me_sad_range_inc_3
+// bit[23:16] me_sad_range_inc_2
+// bit[15:8] me_sad_range_inc_1
+// bit[7:0] me_sad_range_inc_0
+#define   HCODEC_ME_SAD_RANGE_INC                  (0x1f58)
+#define P_HCODEC_ME_SAD_RANGE_INC                  (volatile unsigned int *)((0x1f58  << 2) + 0xff620000)
+// bit[31:19]  reserved
+// bit[18]     sub_relative_any_1_en
+// bit[17]     sub_relative_any_2_en
+// bit[16]     sub_relative_any_3_en
+// bit[15]     sub_relative_any_4_en
+// bit[14]     sub_relative_any_h_en
+// bit[13]     sub_make_non_flex_fix
+// bit[12]     sub_make_big_non_flex_fix
+// bit[11:8]   sub_normal_mv_diff_16
+// bit[7:4]    sub_normal_mv_diff_8
+// bit[3:2]    Reserved
+// bit[1]      sub_merge_enable_16
+// bit[0]      sub_merge_enable_8
+#define   HCODEC_ME_SUB_MERGE_CTL                  (0x1f59)
+#define P_HCODEC_ME_SUB_MERGE_CTL                  (volatile unsigned int *)((0x1f59  << 2) + 0xff620000)
+// bit[31:28]  sub_ref_mv_diff_near
+// bit[27:24]  sub_ref_mv_diff_near_flex
+// bit[23:20]  sub_ref_mv_diff
+// bit[19:16]  sub_ref_mv_diff_flex
+// bit[15:8]   sub_ref_mv_near_weight
+// bit[7:0]    sub_ref_mv_weight
+#define   HCODEC_ME_SUB_REF_MV_CTL                 (0x1f5a)
+#define P_HCODEC_ME_SUB_REF_MV_CTL                 (volatile unsigned int *)((0x1f5a  << 2) + 0xff620000)
+// bit[31:24]  sub_weight_max_sad
+// bit[23:16]  sub_any_range_sad
+// bit[15:8]   sub_any_min_sad
+// bit[7:0]    sub_any_max_sad
+#define   HCODEC_ME_SUB_ANY_WEIGHT_SAD             (0x1f5b)
+#define P_HCODEC_ME_SUB_ANY_WEIGHT_SAD             (volatile unsigned int *)((0x1f5b  << 2) + 0xff620000)
+// bit[31:24]  sub_fix_sad
+// bit[23:16]  sub_fix_diff_sad
+// bit[15:8]   sub_sad_flex_adj
+// bit[7:0]    sub_big_non_flex_fix_sad
+#define   HCODEC_ME_SUB_FIX_SAD                    (0x1f5c)
+#define P_HCODEC_ME_SUB_FIX_SAD                    (volatile unsigned int *)((0x1f5c  << 2) + 0xff620000)
+// bit[31:24]  sub_fix_min_sad
+// bit[23:16]  sub_fix_min_diff_sad
+// bit[15:8]   sub_fix_min_sad_2
+// bit[7:0]    sub_fix_min_diff_sad_2
+#define   HCODEC_ME_SUB_FIX_MIN_SAD                (0x1f5d)
+#define P_HCODEC_ME_SUB_FIX_MIN_SAD                (volatile unsigned int *)((0x1f5d  << 2) + 0xff620000)
+// bit[31:24]  sub_snap_to_ref_max_sad
+// bit[23]     sub_snap_to_ref_non_flex
+// bit[22:16]  sub_snap_to_ref_mv_diff
+// bit[15:4]   sub_glitch_mv_sad
+// bit[3:0]    sub_glitch_mv_diff
+#define   HCODEC_ME_SUB_SNAP_GLITCH                (0x1f5e)
+#define P_HCODEC_ME_SUB_SNAP_GLITCH                (volatile unsigned int *)((0x1f5e  << 2) + 0xff620000)
+// bit[31:20]  sad_act_limit
+// bit[19:8]   s_a_any_sad
+// bit[7]      Reserved
+// bit[6:5]    sub_merge_method
+// bit[4]      use_sub_act_result
+// bit[3]      s_a_rnd
+// bit[2]      Reserved
+// bit[1]      sub_act_en_16
+// bit[0]      sub_act_en
+#define   HCODEC_ME_SUB_ACT_CTL                    (0x1f5f)
+#define P_HCODEC_ME_SUB_ACT_CTL                    (volatile unsigned int *)((0x1f5f  << 2) + 0xff620000)
+// bit[31:16]  reserved
+// bit[15:0]   me_weight
+#define   HCODEC_ME_WEIGHT                         (0x1f60)
+#define P_HCODEC_ME_WEIGHT                         (volatile unsigned int *)((0x1f60  << 2) + 0xff620000)
+// bit[31]  ready_update
+// bit[30]  data_update
+// bit[29:28] reserved
+// bit[27:22] me_quant_0
+// bit[21]  ie_sad_ready_0
+// bit[20:18]  Reserved
+// bit[17:16]  me_sad_mv_type_0
+// bit[15:0] me_sad_0
+#define   HCODEC_ME_SAD_0                          (0x1f61)
+#define P_HCODEC_ME_SAD_0                          (volatile unsigned int *)((0x1f61  << 2) + 0xff620000)
+// bit[31]  ready_update
+// bit[30]  data_update
+// bit[29:28] reserved
+// bit[27:22] me_quant_1
+// bit[21]  me_sad_ready_1
+// bit[20:18]  Reserved
+// bit[17:16]  me_sad_mv_type_1
+// bit[15:0] me_sad_1
+#define   HCODEC_ME_SAD_1                          (0x1f62)
+#define P_HCODEC_ME_SAD_1                          (volatile unsigned int *)((0x1f62  << 2) + 0xff620000)
+// bit[31]  ready_update
+// bit[30]  data_update
+// bit[29:28] reserved
+// bit[27:22] me_quant_2
+// bit[21]  me_sad_ready_2
+// bit[20:18]  Reserved
+// bit[17:16]  me_sad_mv_type_2
+// bit[15:0] me_sad_2
+#define   HCODEC_ME_SAD_2                          (0x1f63)
+#define P_HCODEC_ME_SAD_2                          (volatile unsigned int *)((0x1f63  << 2) + 0xff620000)
+// bit[31]  ready_update
+// bit[30]  data_update
+// bit[29:28] reserved
+// bit[27:22] me_quant_3
+// bit[21]  me_sad_ready_3
+// bit[20:18]  Reserved
+// bit[17:16]  me_sad_mv_type_3
+// bit[15:0] me_sad_3
+#define   HCODEC_ME_SAD_3                          (0x1f64)
+#define P_HCODEC_ME_SAD_3                          (volatile unsigned int *)((0x1f64  << 2) + 0xff620000)
+// bit[31]  ready_update
+// bit[30]  data_update
+// bit[29:28] reserved
+// bit[27:22] ie_quant_0
+// bit[21]  ie_sad_ready_0
+// bit[20]   I4/I16 (0-I4MB, 1-I16MB)
+// bit[19:0] ie_sad_0
+#define   HCODEC_IE_SAD_0                          (0x1f65)
+#define P_HCODEC_IE_SAD_0                          (volatile unsigned int *)((0x1f65  << 2) + 0xff620000)
+// bit[31]  ready_update
+// bit[30]  data_update
+// bit[29:28] reserved
+// bit[27:22] ie_quant_1
+// bit[21]  ie_sad_ready_1
+// bit[20]   I4/I16 (0-I4MB, 1-I16MB)
+// bit[19:0] ie_sad_1
+#define   HCODEC_IE_SAD_1                          (0x1f66)
+#define P_HCODEC_IE_SAD_1                          (volatile unsigned int *)((0x1f66  << 2) + 0xff620000)
+// bit[31]  ready_update
+// bit[30]  data_update
+// bit[29:28] reserved
+// bit[27:22] ie_quant_2
+// bit[21]  ie_sad_ready_2
+// bit[20]   I4/I16 (0-I4MB, 1-I16MB)
+// bit[19:0] ie_sad_2
+#define   HCODEC_IE_SAD_2                          (0x1f67)
+#define P_HCODEC_IE_SAD_2                          (volatile unsigned int *)((0x1f67  << 2) + 0xff620000)
+// bit[31]  ready_update
+// bit[30]  data_update
+// bit[29:28] reserved
+// bit[27:22] ie_quant_3
+// bit[21]  ie_sad_ready_3
+// bit[20]   I4/I16 (0-I4MB, 1-I16MB)
+// bit[19:0] ie_sad_3
+#define   HCODEC_IE_SAD_3                          (0x1f68)
+#define P_HCODEC_IE_SAD_3                          (volatile unsigned int *)((0x1f68  << 2) + 0xff620000)
+// bit[31]   enable_large_diff_16x8
+// bit[30]   enable_large_diff_8x16
+// bit[29:16] adv_mv_8x8_weight
+// bit[15:14] reserved
+// bit[13:0] adv_mv_4x4x4_weight
+#define   HCODEC_ADV_MV_CTL0                       (0x1f69)
+#define P_HCODEC_ADV_MV_CTL0                       (volatile unsigned int *)((0x1f69  << 2) + 0xff620000)
+// bit[31:16] adv_mv_16x16_weight
+// bit[15]   enable_large_diff_16x16
+// bit[14:0] adv_mv_16_8_weight
+#define   HCODEC_ADV_MV_CTL1                       (0x1f6a)
+#define P_HCODEC_ADV_MV_CTL1                       (volatile unsigned int *)((0x1f6a  << 2) + 0xff620000)
+#define   HCODEC_ADV_MV_CTL2                       (0x1f6b)
+#define P_HCODEC_ADV_MV_CTL2                       (volatile unsigned int *)((0x1f6b  << 2) + 0xff620000)
+// bit[31]    v3_skip_enable
+// bit[30]    v3_step_1_weight_enable // for step1, will only use pre_weight for block0, only step_weight for block 1,2,3
+// bit[29]    v3_l2_skip_only_use_l2_sad // set to 1 may allow l1 maybe not skip
+// bit[28]    v3_mv_sad_weight_enable
+// bit[27]    v3_ipred_type_enable
+// bit[25:12] force_skip_sad_1
+// bit[11:0]  force_skip_sad_0
+#define   HCODEC_V3_SKIP_CONTROL                   (0x1f6c)
+#define P_HCODEC_V3_SKIP_CONTROL                   (volatile unsigned int *)((0x1f6c  << 2) + 0xff620000)
+// bit[18:16] top_ipred_type_count
+// bit[15:14] Reserved
+// bit[13:12] top_ipred_type_rd_idx
+// bit[11:10] top_ipred_type_wr_idx
+// bit[9]   left_ipred_type_ready
+// bit[8]   top_ipred_type_ready
+// bit[7:6] left_mv_idx
+// bit[5:4] top_mv_idx
+// bit[3] - left_mv_ready
+// bit[2:0] top_mv_ready
+#define   HCODEC_V3_TOP_LEFT_CTL                   (0x1f6d)
+#define P_HCODEC_V3_TOP_LEFT_CTL                   (volatile unsigned int *)((0x1f6d  << 2) + 0xff620000)
+#define   HCODEC_V3_TOP_MV                         (0x1f6e)
+#define P_HCODEC_V3_TOP_MV                         (volatile unsigned int *)((0x1f6e  << 2) + 0xff620000)
+#define   HCODEC_V3_LEFT_MV                        (0x1f6f)
+#define P_HCODEC_V3_LEFT_MV                        (volatile unsigned int *)((0x1f6f  << 2) + 0xff620000)
+// bit[31:30] reserved
+// bit[29:16] v3_skip_weight_1
+// bit[15:12] reserved
+// bit[11:0]  v3_skip_weight_0
+#define   HCODEC_V3_SKIP_WEIGHT                    (0x1f70)
+#define P_HCODEC_V3_SKIP_WEIGHT                    (volatile unsigned int *)((0x1f70  << 2) + 0xff620000)
+// bit[31:28] reserved
+// bit[27:16] v3_l1_f_skip_max_sad
+// bit[15:12] reserved
+// bit[11:0]  v3_l1_skip_max_sad
+#define   HCODEC_V3_L1_SKIP_MAX_SAD                (0x1f71)
+#define P_HCODEC_V3_L1_SKIP_MAX_SAD                (volatile unsigned int *)((0x1f71  << 2) + 0xff620000)
+// bit[31:16] force_skip_sad_2
+// bit[15:0]  v3_skip_weight_2
+#define   HCODEC_V3_L2_SKIP_WEIGHT                 (0x1f72)
+#define P_HCODEC_V3_L2_SKIP_WEIGHT                 (volatile unsigned int *)((0x1f72  << 2) + 0xff620000)
+// bit[21:16] v3_mv_sad_table_addr 0-15 table_step_0
+// bit[11:0]  v3_mv_sad
+#define   HCODEC_V3_MV_SAD_TABLE                   (0x1f73)
+#define P_HCODEC_V3_MV_SAD_TABLE                   (volatile unsigned int *)((0x1f73  << 2) + 0xff620000)
+// [31:16] v3_ie_f_zero_sad_i16
+// [15:0]  v3_ie_f_zero_sad_i4
+#define   HCODEC_V3_F_ZERO_CTL_0                   (0x1f74)
+#define P_HCODEC_V3_F_ZERO_CTL_0                   (volatile unsigned int *)((0x1f74  << 2) + 0xff620000)
+// [25]    v3_no_ver_when_top_zero_en
+// [24]    v3_no_hor_when_left_zero_en
+// [23:16] v3_max_I16_H_num    // 0 means no break
+// [15:0]  v3_me_f_zero_sad
+#define   HCODEC_V3_F_ZERO_CTL_1                   (0x1f75)
+#define P_HCODEC_V3_F_ZERO_CTL_1                   (volatile unsigned int *)((0x1f75  << 2) + 0xff620000)
+#define   HCODEC_V3_TOP_INTRA_INFO                 (0x1f76)
+#define P_HCODEC_V3_TOP_INTRA_INFO                 (volatile unsigned int *)((0x1f76  << 2) + 0xff620000)
+#define   HCODEC_V3_LEFT_INTRA_INFO                (0x1f77)
+#define P_HCODEC_V3_LEFT_INTRA_INFO                (volatile unsigned int *)((0x1f77  << 2) + 0xff620000)
+// [31:24]  C_ipred_weight_H
+// [23:16]  C_ipred_weight_V
+// [15:8]   I4_ipred_weight_else
+// [7:0]    I4_ipred_weight_most
+#define   HCODEC_V3_IPRED_TYPE_WEIGHT_0            (0x1f78)
+#define P_HCODEC_V3_IPRED_TYPE_WEIGHT_0            (volatile unsigned int *)((0x1f78  << 2) + 0xff620000)
+// [31:24]  I16_ipred_weight_DC
+// [23:16]  I16_ipred_weight_H
+// [15:8]   I16_ipred_weight_V
+// [7:0]    C_ipred_weight_DC
+#define   HCODEC_V3_IPRED_TYPE_WEIGHT_1            (0x1f79)
+#define P_HCODEC_V3_IPRED_TYPE_WEIGHT_1            (volatile unsigned int *)((0x1f79  << 2) + 0xff620000)
+// [31:16]  v3_left_small_max_me_sad
+// [15:0]   v3_left_small_max_ie_sad
+#define   HCODEC_V3_LEFT_SMALL_MAX_SAD             (0x1f7a)
+#define P_HCODEC_V3_LEFT_SMALL_MAX_SAD             (volatile unsigned int *)((0x1f7a  << 2) + 0xff620000)
+// (qr==7) & (qp==15) means force zero block
+// [31:26]  v4_force_q_r_intra
+// [25:20]  v4_force_q_r_inter
+// [19]     v4_force_q_y_enable
+// [18:16]  v4_force_qr_y
+// [15:12]  v4_force_qp_y
+// [11:0]   v4_force_skip_sad
+#define   HCODEC_V4_FORCE_SKIP_CFG                 (0x1f7b)
+#define P_HCODEC_V4_FORCE_SKIP_CFG                 (volatile unsigned int *)((0x1f7b  << 2) + 0xff620000)
+// v5 Complexity // Y(256 pixel per MB) and C(128 pixel per MB)
+// For every 4x4 block, calculate average and Add abs(pixel-average) together
+// bit[31:16] v5_diff_sum_C
+// bit[15:0]  v5_diff_sum_Y
+#define   HCODEC_V5_MB_DIFF_SUM                    (0x1f7c)
+#define P_HCODEC_V5_MB_DIFF_SUM                    (volatile unsigned int *)((0x1f7c  << 2) + 0xff620000)
+// bit[31:24] v5_small_diff_cnt_C
+// bit[23:16] v5_small_diff_C
+// bit[15:8]  v5_small_diff_cnt_Y
+// bit[7:0]   v5_small_diff_Y
+#define   HCODEC_V5_SMALL_DIFF_CNT                 (0x1f7d)
+#define P_HCODEC_V5_SMALL_DIFF_CNT                 (volatile unsigned int *)((0x1f7d  << 2) + 0xff620000)
+// bit[31:29] Reserved
+// bit[28:24] v5_simple_block_cnt // 0 -15 Y 16-23 C
+// bit[23:20] v5_simple_pixel_cnt
+// bit[19:18] v5_simple_dq_wr_ptr
+// bit[17:16] v5_simple_dq_rd_ptr
+// bit[15:12] v5_simple_dq (Read Only)
+// bit[11:8]  v5_simple_me_weight(Read Only)
+// bit[7] v5_use_small_diff_cnt
+// bit[6] v5_simple_mb_inter_all_en
+// bit[5] v5_simple_mb_inter_8x8_en
+// bit[4] v5_simple_mb_inter_16_8_en
+// bit[3] v5_simple_mb_inter_16x16_en
+// bit[2] v5_simple_mb_intra_en
+// bit[1] v5_simple_mb_C_en
+// bit[0] v5_simple_mb_Y_en
+#define   HCODEC_V5_SIMPLE_MB_CTL                  (0x1f7e)
+#define P_HCODEC_V5_SIMPLE_MB_CTL                  (volatile unsigned int *)((0x1f7e  << 2) + 0xff620000)
+// bit[31:28] v5_simple_dq_shift
+// bit[27:24] v5_simple_dq_6(-7 to +7)
+// bit[23:20] v5_simple_dq_5(-7 to +7)
+// bit[19:16] v5_simple_dq_4(-7 to +7)
+// bit[15:12] v5_simple_dq_3(-7 to +7)
+// bit[11:08] v5_simple_dq_2(-7 to +7)
+// bit[07:04] v5_simple_dq_1(-7 to +7)
+// bit[03:00] v5_simple_dq_0(-7 to +7)
+#define   HCODEC_V5_SIMPLE_MB_DQUANT               (0x1f7f)
+#define P_HCODEC_V5_SIMPLE_MB_DQUANT               (volatile unsigned int *)((0x1f7f  << 2) + 0xff620000)
+// bit[31:28] v5_simple_me_weight_shift
+// bit[27:24] v5_simple_me_weight_6(-7 to +7)
+// bit[23:20] v5_simple_me_weight_5(-7 to +7)
+// bit[19:16] v5_simple_me_weight_4(-7 to +7)
+// bit[15:12] v5_simple_me_weight_3(-7 to +7)
+// bit[11:08] v5_simple_me_weight_2(-7 to +7)
+// bit[07:04] v5_simple_me_weight_1(-7 to +7)
+// bit[03:00] v5_simple_me_weight_0(-7 to +7)
+#define   HCODEC_V5_SIMPLE_MB_ME_WEIGHT            (0x1f80)
+#define P_HCODEC_V5_SIMPLE_MB_ME_WEIGHT            (volatile unsigned int *)((0x1f80  << 2) + 0xff620000)
+//
+// Closing file:  qdct_regs.h
+//
+
+#endif // DOS_REGISTER_H
+
+#if 0
+#define Wr(addr, data) *(volatile uint32_t *)(addr)=(data)
+#define Rd(addr) *(volatile uint32_t *)(addr)
+#define Wr_reg_bits(reg, val, start, len) \
+  Wr(reg, ((Rd(reg) & ~(((1L<<(len))-1)<<(start))) | ((uint32_t)(val) << (start))))
+#endif
+
+//
+// Reading file:  ./register_map.h
+//
+// synopsys translate_off
+// synopsys translate_on
+//
+// Reading file:  stb_define.h
+//
+// synopsys translate_off
+// synopsys translate_on
+// -----------------------------------------------
+// CBUS_BASE:  STB_CBUS_BASE = 0x18
+// -----------------------------------------------
+// There are two instantiations under one CBUS slave.  Each CBUS slave can support
+// 256 registers.  Each demux is allocated 128 registers so set the offset in
+// the middle
+// Copy this define but don't add a base address
+#define SECOND_DEMUX_OFFSET_0  0x50
+#define THIRD_DEMUX_OFFSET_0   0xa0
+//========================================================================
+//  STB TOP Registers				    (8'hf0 - 8'hf7)
+//========================================================================
+// bit 30:28 -- ciplus_o_sel
+// bit 27:26 -- ciplus_i_sel
+// bit 25 -- use FAIL fro TS2
+// bit 24 -- use FAIL fro TS1
+// bit 23 -- use FAIL fro TS0
+// bit 22 -- invert fec_error for S2P1
+// bit 21 -- invert fec_data for S2P1
+// bit 20 -- invert fec_sync for S2P1
+// bit 19 -- invert fec_valid for S2P1
+// bit 18 -- invert fec_clk for S2P1
+// bit 17:16 -- fec_s_sel for S2P1  00 - select TS0, 01 -- select TS1, 10 -- select TS2, 11 - reserved
+// Bit 15 -- enable_des_pl_clk
+// Bit 14:13 -- reserved
+// Bit 12:10 -- ts_out_select, 0-TS0, 1-TS1, 2-TS2, 3,4-Reserved, 5-S2P1, 6-S2P0, 7-File
+// bit 9:8 -- des_i_sel 00 -- select_fec_0, 01 -- select_fec_1, 10 -- select_fec_2, 11 - reserved
+// bit 7 -- enable_des_pl
+// bit 6 -- invert fec_error for S2P0
+// bit 5 -- invert fec_data for S2P0
+// bit 4 -- invert fec_sync for S2P0
+// bit 3 -- invert fec_valid for S2P0
+// bit 2 -- invert fec_clk for S2P0
+// bit 1:0 -- fec_s_sel for S2P0  00 - select TS0, 01 -- select TS1, 10 -- select TS2, 11 - reserved
+#define   STB_TOP_CONFIG                           (0x18f0)
+#define P_STB_TOP_CONFIG                           (volatile unsigned int *)((0x18f0  << 2) + 0xffd00000)
+// 31:28 - s2p1_clk_div
+// 27:24 - s2p0_clk_div
+// 23    - s2p1_disable
+// 22    - s2p0_disable
+// 21    - Reserved
+// 20 -- TS_OUT_error_INVERT
+// 19 -- TS_OUT_data_INVERT
+// 18 -- TS_OUT_sync_INVERT
+// 17 -- TS_OUT_valid_INVERT
+// 16 -- TS_OUT_clk_INVERT
+// 15:8 -- TS_package_length_sub_1 (default : 187)
+//  7:0 -- fec_sync_byte (default : 0x47)
+#define   TS_TOP_CONFIG                            (0x18f1)
+#define P_TS_TOP_CONFIG                            (volatile unsigned int *)((0x18f1  << 2) + 0xffd00000)
+// Bit 25:24 -- transport_scrambling_control_odd_2 // should be 3
+// Bit 23:16 -- file_m2ts_skip_bytes
+// Bit 15:8 -- des_out_dly
+// Bit 7:6 -- transport_scrambling_control_odd // should be 3
+// Bit 5 -- ts_hiu_enable
+// Bit 4:0 -- fec_clk_div
+#define   TS_FILE_CONFIG                           (0x18f2)
+#define P_TS_FILE_CONFIG                           (volatile unsigned int *)((0x18f2  << 2) + 0xffd00000)
+// Bit 19:14 -- des_2 ts pl state   -- Read Only
+// Bit 13:8 -- des ts pl state   -- Read Only
+// Bit 3:0 PID index to 8 PID to get key-set
+// auto increse after TS_PL_PID_DATA read/write
+#define   TS_PL_PID_INDEX                          (0x18f3)
+#define P_TS_PL_PID_INDEX                          (volatile unsigned int *)((0x18f3  << 2) + 0xffd00000)
+// Bit 13 -- PID match disble
+// Bit 12:0 -- PID
+#define   TS_PL_PID_DATA                           (0x18f4)
+#define P_TS_PL_PID_DATA                           (volatile unsigned int *)((0x18f4  << 2) + 0xffd00000)
+#define   COMM_DESC_KEY0                           (0x18f5)
+#define P_COMM_DESC_KEY0                           (volatile unsigned int *)((0x18f5  << 2) + 0xffd00000)
+#define   COMM_DESC_KEY1                           (0x18f6)
+#define P_COMM_DESC_KEY1                           (volatile unsigned int *)((0x18f6  << 2) + 0xffd00000)
+#define   COMM_DESC_KEY_RW                         (0x18f7)
+#define P_COMM_DESC_KEY_RW                         (volatile unsigned int *)((0x18f7  << 2) + 0xffd00000)
+// CI+ Register defines
+// Bits[31:0] of the key
+#define   CIPLUS_KEY0                              (0x18f8)
+#define P_CIPLUS_KEY0                              (volatile unsigned int *)((0x18f8  << 2) + 0xffd00000)
+// Bits[63:32] of the key
+#define   CIPLUS_KEY1                              (0x18f9)
+#define P_CIPLUS_KEY1                              (volatile unsigned int *)((0x18f9  << 2) + 0xffd00000)
+// Bits[95:64] of the key
+#define   CIPLUS_KEY2                              (0x18fa)
+#define P_CIPLUS_KEY2                              (volatile unsigned int *)((0x18fa  << 2) + 0xffd00000)
+// Bits[127:96] of the key
+#define   CIPLUS_KEY3                              (0x18fb)
+#define P_CIPLUS_KEY3                              (volatile unsigned int *)((0x18fb  << 2) + 0xffd00000)
+// bit[5] write AES IV B value
+// bit[4] write AES IV A value
+// bit[3] write AES B key
+// bit[2] write AES A key
+// bit[1] write DES B key
+// bit[0] write DES A key
+#define   CIPLUS_KEY_WR                            (0x18fc)
+#define P_CIPLUS_KEY_WR                            (volatile unsigned int *)((0x18fc  << 2) + 0xffd00000)
+// [15:8]   TS out delay.  This controls the rate at which the CIplus module drives TS out
+// [3]      General enable for the ciplus module
+// [2]      AES CBC disable (default should be 0 to enable AES CBC)
+// [1]      AES Enable
+// [0]      DES Eanble
+#define   CIPLUS_CONFIG                            (0x18fd)
+#define P_CIPLUS_CONFIG                            (volatile unsigned int *)((0x18fd  << 2) + 0xffd00000)
+// bit[31:28] AES IV endian
+// bit[27:24] AES message out endian
+// bit[23:20] AES message in endian
+// bit[19:16] AES key endian
+// bit[15:11]  unused
+// bit[10:8]  DES message out endian
+// bit[6:4]   DES message in endian
+// bit[2:0]   DES key endian
+#define   CIPLUS_ENDIAN                            (0x18fe)
+#define P_CIPLUS_ENDIAN                            (volatile unsigned int *)((0x18fe  << 2) + 0xffd00000)
+// bit 15:8 - des_out_dly_2
+// bit   7 - reserved
+// Bit   6-- enable_des_pl_clk_2
+// bit   5 - enable_des_pl_2
+// bit 4:2 -- use_des_2  bit[2] -- demux0, bit[3] -- demux1, bit[4] -- demux2
+// bit 1:0 -- des_i_sel_2 00 -- select_fec_0, 01 -- select_fec_1, 10 -- select_fec_2, 11 - reserved
+#define   COMM_DESC_2_CTL                          (0x18ff)
+#define P_COMM_DESC_2_CTL                          (volatile unsigned int *)((0x18ff  << 2) + 0xffd00000)
+//
+// NOTE:  Don't process the demux registers using the standard create_headers.... perl script.
+//        Instead, since the demux has multiple instances (and many registers) use a separate
+//        script to create a separate stb_define.h for C-code.
+//========================================================================
+//  STB Registers				    (8'h00 - 8'h4f)
+//
+//========================================================================
+// STB registers are 8'h0x
+// Bit 15:0 -- version number : 0x0002  (v0.01)
+// Bit 15 -- fec_core_select 1 - select descramble output
+// Bit 14:12 -  fec_select 0-TS0, 1-TS1, 2-TS2, 3,4-Reserved, 5-S2P1, 6-S2P0, 7-File
+// Bit 11 -- FEC_CLK
+// Bit 10 -- SOP
+// Bit 9 -- D_VALID
+// Bit 8 -- D_FAIL
+// Bit 7:0 -- D_DATA 7:0
+// bit 31 -- enable_free_clk_fec_data_valid
+// bit 30 -- enable_free_clk_stb_reg
+// bit 29 -- always_use_pes_package_length
+// bit 28 -- disable_pre_incomplete_section_fix
+// bit 27 -- pointer_field_multi_pre_en
+// bit 26 -- ignore_pre_incomplete_section
+// bit 25 -- video2_enable
+// bit 24:22 -- video2_type
+// bit 21 -- do_not_trust_pes_package_length
+// bit 20 (bit 4) -- Bypass use recoder path
+// bit 19 (bit 3) -- clear_PID_continuity_counter_valid
+// bit 18 (bit 2) -- Disable Splicing
+// bit 17 (bit 1) -- Insert PES_STRONG_SYNC in Audio PES
+// bit 16 (bit 0) -- Insert PES_STRONG_SYNC in Video PES
+// Bit 15 - do not trust section length
+// Bit 14 - om cmd push even zero
+// Bit 13 - set_buff_ready_even_not_busy
+// Bit 12 - SUB, OTHER PES interrupt at beginning of PES
+// Bit 11 - discard_av_package -- for ts_recorder use only
+// Bit 10 - ts_recorder_select  0:after PID filter 1:before PID filter
+// Bit 9 - ts_recorder_enable
+// Bit 8 - (table_id == 0xff) means section_end
+// Bit 7 - do not send uncomplete section
+// Bit 6 - do not discard duplicate package
+// Bit 5 - search SOP when trasport_error_indicator
+// Bit 4 - stb demux enable
+// Bit 3 - do not reset state machine on SOP
+// Bit 2 - search SOP when error happened ( when ignore_fail_n_sop, will have this case)
+// Bit 1 - do not use SOP input ( check FEC sync byte instead )
+// Bit 0 - ignore fec_error bit when non sop ( check error on SOP only)
+// bit 15:8 demux package length - 1 ( default : 187 )
+// bit 7:0 default is 0x47
+// bit 31:16 -- filter memory write data hi[31:16]
+// bit 15:0 -- filter memory write data low [15:0]
+// bit 31:24 -- advanced setting hi
+// bit 23:16 -- advanced setting low
+// bit 15 -- filter memory write data request
+// bit 7:0 -- filter memory write addr
+// bit 13:8 demux state  -- read only
+// bit 7:4 -- maxnum section filter compare address
+// bit 3:0 -- maxnum PID filter compare address
+// bit 15 - transport_error_indicator
+// bit 14 - payload_unit_start_indicator
+// bit 13 - transport_priority
+// bit 12:0 - PID
+// bit 7:6 transport_scrambling_control
+// bit 5:4 adaptation_field_control
+// bit 3:0 continuity_counter
+// bit 15:12 -- om_cmd_count (read only)
+// bit  11:9 -- overflow_count // bit  11:9 -- om_cmd_wr_ptr (read only)
+// bit   8:6 -- om_overwrite_count // bit   8:6 -- om_cmd_rd_ptr (read only)
+// bit   5:3 -- type_stb_om_w_rd (read only)
+// bit     2 -- unit_start_stb_om_w_rd (read only)
+// bit     1 -- om_cmd_overflow (read only)
+// bit     0 -- om_cmd_pending (read)
+// bit     0 -- om_cmd_read_finished (write)
+// bit 15:9 // bit 14:8 -- count_stb_om_w_rd  (read only)
+// bit 8:0  // bit  7:0 -- start_stb_om_wa_rd (read only)
+// bit 11:0 -- offset for section data
+// bit 31:16 -- base address for section buffer group 0 (*0x400 to get real address)
+// bit 15:0 -- base address for section buffer group 1 (*0x400 to get real address)
+// bit 31:16 -- ba2e address for section buffer group 2 (*0x400 to get real address)
+// bit 15:0 -- base address for section buffer group 3 (*0x400 to get real address)
+// bit 3:0 -- section buffer size for group 0 (bit used,  for example, 10 means 1K)
+// bit 7:4 -- section buffer size for group 1
+// bit 11:8 -- section buffer size for group 2
+// bit 15:12 -- section buffer size for group 3
+// section buffer busy status for buff 31:0 ( Read Only )
+// section buffer write status for buff 31:0 -- Read
+// clear buffer status ( buff READY and BUSY ) -- write
+// bit 4:0 -- SEC_BUFFER_INDEX   RW
+// bit 12:8 -- SEC_BUFFER_NUMBER for the INDEX buffer  Read_Only
+// bit 14 -- output_section_buffer_valid
+// bit 15 -- section_reset_busy (Read Only)
+// bit 9:5 -- BYPASS PID number
+// bit 4:0 -- PCR PID number
+// bit 15:0 -- stream_id filter bit enable
+// bit 7:0 -- stream_id filter target
+// bit 12 -- PCR_EN
+// bit 11:0 -- PCR90K_DIV
+// bit 31:0 -- PCR[31:0] R/W
+// bit 31:0 -- VPTS[31:0] R/W
+// bit 31:0 -- VDTS[31:0] R/W
+// bit 31:0 -- APTS[31:0] R/W
+// bit 31:0 -- SPTS[31:0] R/W
+// read -- status, write 1 clear status
+// bit 15 -- SUB_PTS[32]
+// bit 14 -- AUDIO_PTS[32]
+// bit 13 -- VIDEO_DTS[32]
+// bit 12 -- VIDEO_PTS[32]
+// bit 3 -- sub_pts_ready
+// bit 2 -- audio_pts_ready
+// bit 1 -- video_dts_ready
+// bit 0 -- video_pts_ready
+// bit 3:0 --
+//  0 -- adaptation_field_length[7:0], adaption_field_byte_1[7:0]
+//  1 -- stream_id[7:0], pes_header_bytes_left[7:0]
+//  2 -- pes_package_bytes_left[15:0]
+//  3 -- pes_ctr_byte[7:0], pes_flag_byte[7:0]
+//
+// read only
+// bit[31] -- no_match_record_en
+// bit[30:16] - reserved
+// default : 0x807f
+// bit 15:9  -- MAX OM DMA COUNT  (default: 0x40)
+// bit 8:0   -- LAST ADDR OF OM ADDR (default: 127)
+// 15:0  WRITE 1 CLEAR to clear interrupt source
+//12 -- INPUT_TIME_OUT
+//11 -- PCR_ready
+//10 -- audio_splicing_point
+// 9 -- video_splicing_point
+// 8 -- other_PES_int
+// 7 -- sub_PES_int
+// 6 -- discontinuity
+// 5 -- duplicated_pack_found
+// 4 -- New PDTS ready
+// 3 -- om_cmd_buffer ready for access
+// 2 -- section buffer ready
+// 1 -- transport_error_indicator
+// 0 -- TS ERROR PIN
+// Bit 5:3 - demux om write endian control for bypass
+// Bit 2:0 - demux om write endian control for section
+// When Bit 31 - 1 write will indicate all type use sepertate endian (Write Only)
+// Bit 23:21 - demux om write endian control for OTHER_PES_PACKET
+// Bit 20:18 - demux om write endian control for SCR_ONLY_PACKET
+// Bit 17:15 - demux om write endian control for SUB_PACKET
+// Bit 14:12 - demux om write endian control for AUDIO_PACKET
+// Bit 11:9  - demux om write endian control for VIDEO_PACKET
+//
+// When Bit 31 - 0 write will indicate all type else use Bit 8:6
+// Bit 8:6 - demux om write endian control for else
+// Bit 15:8 -- last_burst_threshold
+// Bit 7 -- use hi_bsf interface
+// Bit 6:2 - fec_clk_div
+// Bit 1 ts_source_sel
+// Bit 0 - Hiu TS generate enable
+// bit 15:0 -- base address for section buffer start (*0x10000 to get real base)
+// bit 11 -- mask bit for OTHER_PES_AHB_DMA_EN
+// bit 10 -- mask bit for SUB_AHB_DMA_EN
+// bit 9 -- mask bit for BYPASS_AHB_DMA_EN
+// bit 8 -- mask bit for SECTION_AHB_DMA_EN
+// bit 7 -- mask bit for recoder stream
+// bit 6:0 -- mask bit for each type
+// bit 31:0 -- vb_wr_ptr for video PDTS
+// bit 31:0 -- ab_wr_ptr for audio PDTS
+// bit 20:0 -- SB_WRITE_PTR (sb_wr_ptr << 3 == byte write position)
+// bit 19:0 -- SB_START (sb_start << 12 == byte address);
+// bit 20:0 -- SB_SIZE (sb_size << 3 == byte size, 16M maximun)
+// bit 31:0 -- sb_wr_ptr for sub PES
+// bit 31:16 -- ob_wr_ptr for other PES
+// bit 20:0 -- OB_WRITE_PTR (ob_wr_ptr << 3 == byte write position)
+// bit 19:0 -- OB_START (ob_start << 12 == byte address);
+// bit 20:0 -- OB_SIZE (ob_size << 3 == byte size, 16M maximun)
+// bit 31:0 -- ob_wr_ptr for sub PES
+// 15:0  DEMUX interrupt MASK
+// 9 -- splicing_point
+// 8 -- other_PES_int
+// 7 -- sub_PES_int
+// 6 -- discontinuity
+// 5 -- duplicated_pack_found
+// 4 -- New PDTS ready
+// 3 -- om_cmd_buffer ready for access
+// 2 -- section buffer ready
+// 1 -- transport_error_indicator
+// 0 -- TS ERROR PIN
+// 31:16 VIDEO PID filter data
+//15 -- splicing VIDEO PID change enable
+//14:10 -- VIDEO PID FILTER ADDRESS
+// 9 -- PES splicing active (Read Only)
+// 8 -- splicing active (Read Only)
+// 7:0  splicing countdown (Read Only)
+// 31:16 AUDIO PID filter data
+//15 -- splicing AUDIO PID change enable
+//14:10 -- AUDIO PID FILTER ADDRESS
+// 9 -- PES splicing active (Read Only)
+// 8 -- splicing active (Read Only)
+// 7:0  splicing countdown (Read Only)
+// 23:16 M2TS_SKIP_BYTES
+// 15:8 LAST TS PACKAGE BYTE COUNT (Read Only)
+// 7:0  PACKAGE BYTE COUNT (Read Only)
+// 15:0 2 bytes strong sync add to PES
+// bit 15 -- stb_om_ren
+// bit 14:11 -- reserved
+// bit  10:0 -- OM_DATA_RD_ADDR
+// bit 15:0 -- OM_DATA_RD
+// AUTO STOP SETTING for 32 channels
+// 4-nbits per channel
+// when write
+// bit 3 -- set section active
+// bit 2:0 -- auto stop after count (0 means never stop)
+// when read
+// bit 3 -- current active status (1 - active, 0 - stopped )
+// bit 2:0 -- count down to auto stop
+// section 31:24
+// section 23:16
+// section 15:8
+// section 7:0
+// bit 31:0 reset channel status - each bit reset each channel
+// read -- 32 channel status
+// bit 4 -- video_stamp_use_dts
+// bit 3 -- audio_stamp_sync_1_en
+// bit 2 -- audio_stamp_insert_en
+// bit 1 -- video_stamp_sync_1_en
+// bit 0 -- video_stamp_insert_en
+// Write : Bit[4:0] secter filter number for reset
+// Read  : select according to output_section_buffer_valid :
+//         per bit per section buffer valid status
+//         or section_buffer_ignore
+// bit[31:0] - channel_reset_timeout_disable
+// bit[31] - no_match_reset_timeout_disable
+// bit[30:0] input_time_out_int_cnt (0 -- means disable) Wr-setting, Rd-count
+// bit[31:0] - channel_packet_count_disable
+// bit[31] - no_match_packet_count_disable
+// bit[30:0] input_packet_count
+// bit[31:0] channel_record_enable
+// bit[31:0] channel_process_enable
+// bit[31:24] small_sec_size ((n+1) * 256 Bytes)
+// bit[23:16] small_sec_rd_ptr
+// bit[15:8]  small_sec_wr_ptr
+// bit[7:2]   reserved
+// bit[1] small_sec_wr_ptr_wr_enable
+// bit[0] small_section_enable
+// bit[31:0] small_sec_start_addr
+// synopsys translate_off
+// synopsys translate_on
+//
+// Closing file:  stb_define.h
+//
+//
+// Reading file:  periphs_reg.h
+//
+// $periphs/rtl/periphs_core register defines for the
+// APB bus
+// ------------------------------------------------------------------------------------
+// -----------------------------------------------
+// CBUS_BASE:  SC_CBUS_BASE = 0x94
+// -----------------------------------------------
+#define   SMARTCARD_REG0                           (0x9400)
+#define P_SMARTCARD_REG0                           (volatile unsigned int *)((0x9400  << 2) + 0xffd00000)
+#define   SMARTCARD_REG1                           (0x9401)
+#define P_SMARTCARD_REG1                           (volatile unsigned int *)((0x9401  << 2) + 0xffd00000)
+#define   SMARTCARD_REG2                           (0x9402)
+#define P_SMARTCARD_REG2                           (volatile unsigned int *)((0x9402  << 2) + 0xffd00000)
+#define   SMARTCARD_STATUS                         (0x9403)
+#define P_SMARTCARD_STATUS                         (volatile unsigned int *)((0x9403  << 2) + 0xffd00000)
+#define   SMARTCARD_INTR                           (0x9404)
+#define P_SMARTCARD_INTR                           (volatile unsigned int *)((0x9404  << 2) + 0xffd00000)
+#define   SMARTCARD_REG5                           (0x9405)
+#define P_SMARTCARD_REG5                           (volatile unsigned int *)((0x9405  << 2) + 0xffd00000)
+#define   SMARTCARD_REG6                           (0x9406)
+#define P_SMARTCARD_REG6                           (volatile unsigned int *)((0x9406  << 2) + 0xffd00000)
+#define   SMARTCARD_FIFO                           (0x9407)
+#define P_SMARTCARD_FIFO                           (volatile unsigned int *)((0x9407  << 2) + 0xffd00000)
+#define   SMARTCARD_REG8                           (0x9408)
+#define P_SMARTCARD_REG8                           (volatile unsigned int *)((0x9408  << 2) + 0xffd00000)
+// ------------------------------------------------------------------------------------
+// -----------------------------------------------
+// CBUS_BASE:  UART0_CBUS_BASE = 0x90
+// -----------------------------------------------
+#define   UART0_WFIFO                              (0x9000)
+#define P_UART0_WFIFO                              (volatile unsigned int *)((0x9000  << 2) + 0xffd00000)
+#define   UART0_RFIFO                              (0x9001)
+#define P_UART0_RFIFO                              (volatile unsigned int *)((0x9001  << 2) + 0xffd00000)
+#define   UART0_CONTROL                            (0x9002)
+#define P_UART0_CONTROL                            (volatile unsigned int *)((0x9002  << 2) + 0xffd00000)
+#define   UART0_STATUS                             (0x9003)
+#define P_UART0_STATUS                             (volatile unsigned int *)((0x9003  << 2) + 0xffd00000)
+#define   UART0_MISC                               (0x9004)
+#define P_UART0_MISC                               (volatile unsigned int *)((0x9004  << 2) + 0xffd00000)
+#define   UART0_REG5                               (0x9005)
+#define P_UART0_REG5                               (volatile unsigned int *)((0x9005  << 2) + 0xffd00000)
+// ------------------------------------------------------------------------------------
+// -----------------------------------------------
+// CBUS_BASE:  UART1_CBUS_BASE = 0x8c
+// -----------------------------------------------
+#define   UART1_WFIFO                              (0x8c00)
+#define P_UART1_WFIFO                              (volatile unsigned int *)((0x8c00  << 2) + 0xffd00000)
+#define   UART1_RFIFO                              (0x8c01)
+#define P_UART1_RFIFO                              (volatile unsigned int *)((0x8c01  << 2) + 0xffd00000)
+#define   UART1_CONTROL                            (0x8c02)
+#define P_UART1_CONTROL                            (volatile unsigned int *)((0x8c02  << 2) + 0xffd00000)
+#define   UART1_STATUS                             (0x8c03)
+#define P_UART1_STATUS                             (volatile unsigned int *)((0x8c03  << 2) + 0xffd00000)
+#define   UART1_MISC                               (0x8c04)
+#define P_UART1_MISC                               (volatile unsigned int *)((0x8c04  << 2) + 0xffd00000)
+#define   UART1_REG5                               (0x8c05)
+#define P_UART1_REG5                               (volatile unsigned int *)((0x8c05  << 2) + 0xffd00000)
+// ------------------------------------------------------------------------------------
+// -----------------------------------------------
+// CBUS_BASE:  UART2_CBUS_BASE = 0x88
+// -----------------------------------------------
+#define   UART2_WFIFO                              (0x8800)
+#define P_UART2_WFIFO                              (volatile unsigned int *)((0x8800  << 2) + 0xffd00000)
+#define   UART2_RFIFO                              (0x8801)
+#define P_UART2_RFIFO                              (volatile unsigned int *)((0x8801  << 2) + 0xffd00000)
+#define   UART2_CONTROL                            (0x8802)
+#define P_UART2_CONTROL                            (volatile unsigned int *)((0x8802  << 2) + 0xffd00000)
+#define   UART2_STATUS                             (0x8803)
+#define P_UART2_STATUS                             (volatile unsigned int *)((0x8803  << 2) + 0xffd00000)
+#define   UART2_MISC                               (0x8804)
+#define P_UART2_MISC                               (volatile unsigned int *)((0x8804  << 2) + 0xffd00000)
+#define   UART2_REG5                               (0x8805)
+#define P_UART2_REG5                               (volatile unsigned int *)((0x8805  << 2) + 0xffd00000)
+// ------------------------------------------------------------------------------------
+// -----------------------------------------------
+// CBUS_BASE:  UART3_CBUS_BASE = 0x84
+// -----------------------------------------------
+#define   UART3_DF_REG_A73                         (0x8400)
+#define P_UART3_DF_REG_A73                         (volatile unsigned int *)((0x8400  << 2) + 0xffd00000)
+#define   UART3_DF_REG_A74                         (0x8401)
+#define P_UART3_DF_REG_A74                         (volatile unsigned int *)((0x8401  << 2) + 0xffd00000)
+#define   UART3_DF_REG_A75                         (0x8402)
+#define P_UART3_DF_REG_A75                         (volatile unsigned int *)((0x8402  << 2) + 0xffd00000)
+#define   UART3_DF_REG_A76                         (0x8403)
+#define P_UART3_DF_REG_A76                         (volatile unsigned int *)((0x8403  << 2) + 0xffd00000)
+#define   UART3_DF_REG_A77                         (0x8404)
+#define P_UART3_DF_REG_A77                         (volatile unsigned int *)((0x8404  << 2) + 0xffd00000)
+#define   UART3_DF_REG_A78                         (0x8405)
+#define P_UART3_DF_REG_A78                         (volatile unsigned int *)((0x8405  << 2) + 0xffd00000)
+#define   UART3_DF_REG_A79                         (0x8406)
+#define P_UART3_DF_REG_A79                         (volatile unsigned int *)((0x8406  << 2) + 0xffd00000)
+#define   UART3_DF_REG_A80                         (0x8407)
+#define P_UART3_DF_REG_A80                         (volatile unsigned int *)((0x8407  << 2) + 0xffd00000)
+#define   UART3_DF_REG_A81                         (0x8408)
+#define P_UART3_DF_REG_A81                         (volatile unsigned int *)((0x8408  << 2) + 0xffd00000)
+#define   UART3_DF_REG_A82                         (0x8409)
+#define P_UART3_DF_REG_A82                         (volatile unsigned int *)((0x8409  << 2) + 0xffd00000)
+#define   UART3_DF_REG_A83                         (0x8410)
+#define P_UART3_DF_REG_A83                         (volatile unsigned int *)((0x8410  << 2) + 0xffd00000)
+#define   UART3_DF_REG_A84                         (0x8411)
+#define P_UART3_DF_REG_A84                         (volatile unsigned int *)((0x8411  << 2) + 0xffd00000)
+#define   UART3_DF_REG_A85                         (0x8412)
+#define P_UART3_DF_REG_A85                         (volatile unsigned int *)((0x8412  << 2) + 0xffd00000)
+#define   UART3_DF_REG_A86                         (0x8413)
+#define P_UART3_DF_REG_A86                         (volatile unsigned int *)((0x8413  << 2) + 0xffd00000)
+#define   UART3_DF_REG_A87                         (0x8414)
+#define P_UART3_DF_REG_A87                         (volatile unsigned int *)((0x8414  << 2) + 0xffd00000)
+#define   UART3_DF_REG_A88                         (0x8415)
+#define P_UART3_DF_REG_A88                         (volatile unsigned int *)((0x8415  << 2) + 0xffd00000)
+#define   UART3_DF_REG_A89                         (0x8416)
+#define P_UART3_DF_REG_A89                         (volatile unsigned int *)((0x8416  << 2) + 0xffd00000)
+#define   UART3_DF_REG_A96                         (0x8417)
+#define P_UART3_DF_REG_A96                         (volatile unsigned int *)((0x8417  << 2) + 0xffd00000)
+#define   UART3_DF_REG_A97                         (0x8418)
+#define P_UART3_DF_REG_A97                         (volatile unsigned int *)((0x8418  << 2) + 0xffd00000)
+#define   UART3_DF_REG_A128                        (0x8420)
+#define P_UART3_DF_REG_A128                        (volatile unsigned int *)((0x8420  << 2) + 0xffd00000)
+#define   UART3_DF_REG_A129                        (0x8421)
+#define P_UART3_DF_REG_A129                        (volatile unsigned int *)((0x8421  << 2) + 0xffd00000)
+#define   UART3_DF_REG_A130                        (0x8422)
+#define P_UART3_DF_REG_A130                        (volatile unsigned int *)((0x8422  << 2) + 0xffd00000)
+#define   UART3_DF_REG_A131                        (0x8423)
+#define P_UART3_DF_REG_A131                        (volatile unsigned int *)((0x8423  << 2) + 0xffd00000)
+#define   UART3_DF_REG_A132                        (0x8424)
+#define P_UART3_DF_REG_A132                        (volatile unsigned int *)((0x8424  << 2) + 0xffd00000)
+#define   UART3_DF_REG_A133                        (0x8425)
+#define P_UART3_DF_REG_A133                        (volatile unsigned int *)((0x8425  << 2) + 0xffd00000)
+#define   UART3_DF_REG_A134                        (0x8426)
+#define P_UART3_DF_REG_A134                        (volatile unsigned int *)((0x8426  << 2) + 0xffd00000)
+#define   UART3_DF_REG_A135                        (0x8427)
+#define P_UART3_DF_REG_A135                        (volatile unsigned int *)((0x8427  << 2) + 0xffd00000)
+#define   UART3_DF_REG_A136                        (0x8428)
+#define P_UART3_DF_REG_A136                        (volatile unsigned int *)((0x8428  << 2) + 0xffd00000)
+// ----------------------------
+// SANA (Stream Analyzer)
+// ----------------------------
+// ------------------------------------------------------------------------------------
+// -----------------------------------------------
+// CBUS_BASE:  SANA_CBUS_BASE = 0x30
+// -----------------------------------------------
+// [31:16] - ddr_setting
+// [15]    - disable_stream_clock_gating
+// [14:13] - mem_pd_ctl_sana
+// [6:4]   - stream_fetch_endian
+// [3]     - use_parser_vbuf_wp
+// [2]     - use_parser_vbuf2_wp
+// [1]     - stream_fetch_busy - Read Only
+// [0]     - stream_fetch_enable
+#define   SANA_STREAM_CONTROL                      (0x3020)
+#define P_SANA_STREAM_CONTROL                      (volatile unsigned int *)((0x3020  << 2) + 0xffd00000)
+#define   SANA_STREAM_START_ADDR                   (0x3021)
+#define P_SANA_STREAM_START_ADDR                   (volatile unsigned int *)((0x3021  << 2) + 0xffd00000)
+#define   SANA_STREAM_END_ADDR                     (0x3022)
+#define P_SANA_STREAM_END_ADDR                     (volatile unsigned int *)((0x3022  << 2) + 0xffd00000)
+// SW stream_buffer_wr_ptr
+#define   SANA_STREAM_WR_PTR                       (0x3023)
+#define P_SANA_STREAM_WR_PTR                       (volatile unsigned int *)((0x3023  << 2) + 0xffd00000)
+#define   SANA_STREAM_RD_PTR                       (0x3024)
+#define P_SANA_STREAM_RD_PTR                       (volatile unsigned int *)((0x3024  << 2) + 0xffd00000)
+//[31:0] stream_buffer_level - read only
+#define   SANA_STREAM_LEVEL                        (0x3025)
+#define P_SANA_STREAM_LEVEL                        (volatile unsigned int *)((0x3025  << 2) + 0xffd00000)
+// [31:29] stream_buffer_hole 256*(4^0) bytes
+// [28:23] stream_fifo_hole
+// [22:16] stream_fifo_level
+// [15]    stream_fifo_wr_ptr_update_en
+// [14:8]  stream_fifo_wr_ptr
+// [7]     stream_fifo_rd_ptr_update_en
+// [6:0]   stream_fifo_rd_ptr
+#define   SANA_STREAM_FIFO_CTL                     (0x3026)
+#define P_SANA_STREAM_FIFO_CTL                     (volatile unsigned int *)((0x3026  << 2) + 0xffd00000)
+// [31:18] - Reserved
+// [17]    - sana_int_enable
+// [16]    - sana_int_level (default : 0(pulse))
+// [15]    - disable_shift_clock_gating
+// [14]    - startcode_protect -- TODO
+// [8:6]   - sft_valid_wr_position (default : 3 (at least 24 bits available))
+// [5:4]   - emulate_code_length_sub_1(Default : 2)
+// [3]     - emulation_auto_on_startcode(Default : 0)
+// [2:1]   - start_code_length_sub_1(Default : 2)
+// [0]     - stream_shift_enable(Default : 0)
+#define   SANA_SHIFT_CONTROL                       (0x3027)
+#define P_SANA_SHIFT_CONTROL                       (volatile unsigned int *)((0x3027  << 2) + 0xffd00000)
+// [31:0]  - max 4-bytes start code (Default : 0x00000100)
+#define   SANA_SHIFT_STARTCODE                     (0x3028)
+#define P_SANA_SHIFT_STARTCODE                     (volatile unsigned int *)((0x3028  << 2) + 0xffd00000)
+// [31:0]  - max 4-bytes emulate code (Default : 0x00000300)
+#define   SANA_SHIFT_EMULATECODE                   (0x3029)
+#define P_SANA_SHIFT_EMULATECODE                   (volatile unsigned int *)((0x3029  << 2) + 0xffd00000)
+// [3]     - sana_int
+// [2]     - startcode_searching
+// [1]     - emulation_check_on
+// [0]     - startcode_check_on
+#define   SANA_SHIFT_STATUS                        (0x302a)
+#define P_SANA_SHIFT_STATUS                        (volatile unsigned int *)((0x302a  << 2) + 0xffd00000)
+// [31:0] sana_shifted_data - read only
+#define   SANA_SHIFTED_DATA                        (0x302b)
+#define P_SANA_SHIFTED_DATA                        (volatile unsigned int *)((0x302b  << 2) + 0xffd00000)
+// [31:0] shift_byte_count[31:0]
+#define   SANA_SHIFT_BYTE_COUNT                    (0x302c)
+#define P_SANA_SHIFT_BYTE_COUNT                    (volatile unsigned int *)((0x302c  << 2) + 0xffd00000)
+// [31:28] - shift_byte_count[35:32]
+// [27:20] - element_read_data[31:24]
+// [10]    - bytealign
+// [9]     - signed_element
+// [8]     - start_element_read
+// [7]     - shift_busy
+// [6:0]   - shift_bits
+#define   SANA_SHIFT_COMMAND                       (0x302d)
+#define P_SANA_SHIFT_COMMAND                       (volatile unsigned int *)((0x302d  << 2) + 0xffd00000)
+// 31:8    - element_read_data[23:0]
+//  7:2    - element_read_length
+//  1:0    - element_read_state
+#define   SANA_ELEMENT_RESULT                      (0x302e)
+#define P_SANA_ELEMENT_RESULT                      (volatile unsigned int *)((0x302e  << 2) + 0xffd00000)
+// support up to 8 masters, one bit per master
+// 23:16   - lock_release (Write 1 to release)
+// 15:8    - lock_req (write 1 to request)
+//  7:0    - lock_result (Read Only)
+#define   ATOM_LOCK                                (0x302f)
+#define P_ATOM_LOCK                                (volatile unsigned int *)((0x302f  << 2) + 0xffd00000)
+// ------------------------------------------------------------------------------------
+// -----------------------------------------------
+// CBUS_BASE:  I2C_M_0_CBUS_BASE = 0x7c
+// -----------------------------------------------
+#define   I2C_M_0_CONTROL_REG                      (0x7c00)
+#define P_I2C_M_0_CONTROL_REG                      (volatile unsigned int *)((0x7c00  << 2) + 0xffd00000)
+    #define     I2C_M_MANUAL_SDA_I        26
+    #define     I2C_M_MANUAL_SCL_I        25
+    #define     I2C_M_MANUAL_SDA_O        24
+    #define     I2C_M_MANUAL_SCL_O        23
+    #define     I2C_M_MANUAL_EN           22
+    #define     I2C_M_DELAY_MSB           21
+    #define     I2C_M_DELAY_LSB           12
+    #define     I2C_M_DATA_CNT_MSB        11
+    #define     I2C_M_DATA_CNT_LSB        8
+    #define     I2C_M_CURR_TOKEN_MSB      7
+    #define     I2C_M_CURR_TOKEN_LSB      4
+    #define     I2C_M_ERROR               3
+    #define     I2C_M_STATUS              2
+    #define     I2C_M_ACK_IGNORE          1
+    #define     I2C_M_START               0
+#define   I2C_M_0_SLAVE_ADDR                       (0x7c01)
+#define P_I2C_M_0_SLAVE_ADDR                       (volatile unsigned int *)((0x7c01  << 2) + 0xffd00000)
+#define   I2C_M_0_TOKEN_LIST0                      (0x7c02)
+#define P_I2C_M_0_TOKEN_LIST0                      (volatile unsigned int *)((0x7c02  << 2) + 0xffd00000)
+#define   I2C_M_0_TOKEN_LIST1                      (0x7c03)
+#define P_I2C_M_0_TOKEN_LIST1                      (volatile unsigned int *)((0x7c03  << 2) + 0xffd00000)
+#define   I2C_M_0_WDATA_REG0                       (0x7c04)
+#define P_I2C_M_0_WDATA_REG0                       (volatile unsigned int *)((0x7c04  << 2) + 0xffd00000)
+#define   I2C_M_0_WDATA_REG1                       (0x7c05)
+#define P_I2C_M_0_WDATA_REG1                       (volatile unsigned int *)((0x7c05  << 2) + 0xffd00000)
+#define   I2C_M_0_RDATA_REG0                       (0x7c06)
+#define P_I2C_M_0_RDATA_REG0                       (volatile unsigned int *)((0x7c06  << 2) + 0xffd00000)
+#define   I2C_M_0_RDATA_REG1                       (0x7c07)
+#define P_I2C_M_0_RDATA_REG1                       (volatile unsigned int *)((0x7c07  << 2) + 0xffd00000)
+// -----------------------------------------------
+// CBUS_BASE:  I2C_M_1_CBUS_BASE = 0x78
+// -----------------------------------------------
+#define   I2C_M_1_CONTROL_REG                      (0x7800)
+#define P_I2C_M_1_CONTROL_REG                      (volatile unsigned int *)((0x7800  << 2) + 0xffd00000)
+#define   I2C_M_1_SLAVE_ADDR                       (0x7801)
+#define P_I2C_M_1_SLAVE_ADDR                       (volatile unsigned int *)((0x7801  << 2) + 0xffd00000)
+#define   I2C_M_1_TOKEN_LIST0                      (0x7802)
+#define P_I2C_M_1_TOKEN_LIST0                      (volatile unsigned int *)((0x7802  << 2) + 0xffd00000)
+#define   I2C_M_1_TOKEN_LIST1                      (0x7803)
+#define P_I2C_M_1_TOKEN_LIST1                      (volatile unsigned int *)((0x7803  << 2) + 0xffd00000)
+#define   I2C_M_1_WDATA_REG0                       (0x7804)
+#define P_I2C_M_1_WDATA_REG0                       (volatile unsigned int *)((0x7804  << 2) + 0xffd00000)
+#define   I2C_M_1_WDATA_REG1                       (0x7805)
+#define P_I2C_M_1_WDATA_REG1                       (volatile unsigned int *)((0x7805  << 2) + 0xffd00000)
+#define   I2C_M_1_RDATA_REG0                       (0x7806)
+#define P_I2C_M_1_RDATA_REG0                       (volatile unsigned int *)((0x7806  << 2) + 0xffd00000)
+#define   I2C_M_1_RDATA_REG1                       (0x7807)
+#define P_I2C_M_1_RDATA_REG1                       (volatile unsigned int *)((0x7807  << 2) + 0xffd00000)
+// ------------------------------------------------------------------------------------
+// -----------------------------------------------
+// CBUS_BASE:  I2C_M_2_CBUS_BASE = 0x74
+// -----------------------------------------------
+#define   I2C_M_2_CONTROL_REG                      (0x7400)
+#define P_I2C_M_2_CONTROL_REG                      (volatile unsigned int *)((0x7400  << 2) + 0xffd00000)
+#define   I2C_M_2_SLAVE_ADDR                       (0x7401)
+#define P_I2C_M_2_SLAVE_ADDR                       (volatile unsigned int *)((0x7401  << 2) + 0xffd00000)
+#define   I2C_M_2_TOKEN_LIST0                      (0x7402)
+#define P_I2C_M_2_TOKEN_LIST0                      (volatile unsigned int *)((0x7402  << 2) + 0xffd00000)
+#define   I2C_M_2_TOKEN_LIST1                      (0x7403)
+#define P_I2C_M_2_TOKEN_LIST1                      (volatile unsigned int *)((0x7403  << 2) + 0xffd00000)
+#define   I2C_M_2_WDATA_REG0                       (0x7404)
+#define P_I2C_M_2_WDATA_REG0                       (volatile unsigned int *)((0x7404  << 2) + 0xffd00000)
+#define   I2C_M_2_WDATA_REG1                       (0x7405)
+#define P_I2C_M_2_WDATA_REG1                       (volatile unsigned int *)((0x7405  << 2) + 0xffd00000)
+#define   I2C_M_2_RDATA_REG0                       (0x7406)
+#define P_I2C_M_2_RDATA_REG0                       (volatile unsigned int *)((0x7406  << 2) + 0xffd00000)
+#define   I2C_M_2_RDATA_REG1                       (0x7407)
+#define P_I2C_M_2_RDATA_REG1                       (volatile unsigned int *)((0x7407  << 2) + 0xffd00000)
+// ------------------------------------------------------------------------------------
+// -----------------------------------------------
+// CBUS_BASE:  I2C_M_3_CBUS_BASE = 0x70
+// -----------------------------------------------
+#define   I2C_M_3_CONTROL_REG                      (0x7000)
+#define P_I2C_M_3_CONTROL_REG                      (volatile unsigned int *)((0x7000  << 2) + 0xffd00000)
+#define   I2C_M_3_SLAVE_ADDR                       (0x7001)
+#define P_I2C_M_3_SLAVE_ADDR                       (volatile unsigned int *)((0x7001  << 2) + 0xffd00000)
+#define   I2C_M_3_TOKEN_LIST0                      (0x7002)
+#define P_I2C_M_3_TOKEN_LIST0                      (volatile unsigned int *)((0x7002  << 2) + 0xffd00000)
+#define   I2C_M_3_TOKEN_LIST1                      (0x7003)
+#define P_I2C_M_3_TOKEN_LIST1                      (volatile unsigned int *)((0x7003  << 2) + 0xffd00000)
+#define   I2C_M_3_WDATA_REG0                       (0x7004)
+#define P_I2C_M_3_WDATA_REG0                       (volatile unsigned int *)((0x7004  << 2) + 0xffd00000)
+#define   I2C_M_3_WDATA_REG1                       (0x7005)
+#define P_I2C_M_3_WDATA_REG1                       (volatile unsigned int *)((0x7005  << 2) + 0xffd00000)
+#define   I2C_M_3_RDATA_REG0                       (0x7006)
+#define P_I2C_M_3_RDATA_REG0                       (volatile unsigned int *)((0x7006  << 2) + 0xffd00000)
+#define   I2C_M_3_RDATA_REG1                       (0x7007)
+#define P_I2C_M_3_RDATA_REG1                       (volatile unsigned int *)((0x7007  << 2) + 0xffd00000)
+// ------------------------------------------------------------------------------------
+// -----------------------------------------------
+// CBUS_BASE:  PWM_AB_CBUS_BASE = 0x6c
+// -----------------------------------------------
+#define   PWM_PWM_A                                (0x6c00)
+#define P_PWM_PWM_A                                (volatile unsigned int *)((0x6c00  << 2) + 0xffd00000)
+#define   PWM_PWM_B                                (0x6c01)
+#define P_PWM_PWM_B                                (volatile unsigned int *)((0x6c01  << 2) + 0xffd00000)
+#define   PWM_MISC_REG_AB                          (0x6c02)
+#define P_PWM_MISC_REG_AB                          (volatile unsigned int *)((0x6c02  << 2) + 0xffd00000)
+#define   PWM_DELTA_SIGMA_AB                       (0x6c03)
+#define P_PWM_DELTA_SIGMA_AB                       (volatile unsigned int *)((0x6c03  << 2) + 0xffd00000)
+#define   PWM_TIME_AB                              (0x6c04)
+#define P_PWM_TIME_AB                              (volatile unsigned int *)((0x6c04  << 2) + 0xffd00000)
+#define   PWM_A2                                   (0x6c05)
+#define P_PWM_A2                                   (volatile unsigned int *)((0x6c05  << 2) + 0xffd00000)
+#define   PWM_B2                                   (0x6c06)
+#define P_PWM_B2                                   (volatile unsigned int *)((0x6c06  << 2) + 0xffd00000)
+#define   PWM_BLINK_AB                             (0x6c07)
+#define P_PWM_BLINK_AB                             (volatile unsigned int *)((0x6c07  << 2) + 0xffd00000)
+// ------------------------------------------------------------------------------------
+// -----------------------------------------------
+// CBUS_BASE:  PWM_CD_CBUS_BASE = 0x68
+// -----------------------------------------------
+#define   PWM_PWM_C                                (0x6800)
+#define P_PWM_PWM_C                                (volatile unsigned int *)((0x6800  << 2) + 0xffd00000)
+#define   PWM_PWM_D                                (0x6801)
+#define P_PWM_PWM_D                                (volatile unsigned int *)((0x6801  << 2) + 0xffd00000)
+#define   PWM_MISC_REG_CD                          (0x6802)
+#define P_PWM_MISC_REG_CD                          (volatile unsigned int *)((0x6802  << 2) + 0xffd00000)
+#define   PWM_DELTA_SIGMA_CD                       (0x6803)
+#define P_PWM_DELTA_SIGMA_CD                       (volatile unsigned int *)((0x6803  << 2) + 0xffd00000)
+#define   PWM_TIME_CD                              (0x6804)
+#define P_PWM_TIME_CD                              (volatile unsigned int *)((0x6804  << 2) + 0xffd00000)
+#define   PWM_C2                                   (0x6805)
+#define P_PWM_C2                                   (volatile unsigned int *)((0x6805  << 2) + 0xffd00000)
+#define   PWM_D2                                   (0x6806)
+#define P_PWM_D2                                   (volatile unsigned int *)((0x6806  << 2) + 0xffd00000)
+#define   PWM_BLINK_CD                             (0x6807)
+#define P_PWM_BLINK_CD                             (volatile unsigned int *)((0x6807  << 2) + 0xffd00000)
+// ------------------------------------------------------------------------------------
+// -----------------------------------------------
+// CBUS_BASE:  PWM_EF_CBUS_BASE = 0x64
+// -----------------------------------------------
+#define   PWM_PWM_E                                (0x6400)
+#define P_PWM_PWM_E                                (volatile unsigned int *)((0x6400  << 2) + 0xffd00000)
+#define   PWM_PWM_F                                (0x6401)
+#define P_PWM_PWM_F                                (volatile unsigned int *)((0x6401  << 2) + 0xffd00000)
+#define   PWM_MISC_REG_EF                          (0x6402)
+#define P_PWM_MISC_REG_EF                          (volatile unsigned int *)((0x6402  << 2) + 0xffd00000)
+#define   PWM_DELTA_SIGMA_EF                       (0x6403)
+#define P_PWM_DELTA_SIGMA_EF                       (volatile unsigned int *)((0x6403  << 2) + 0xffd00000)
+#define   PWM_TIME_EF                              (0x6404)
+#define P_PWM_TIME_EF                              (volatile unsigned int *)((0x6404  << 2) + 0xffd00000)
+#define   PWM_E2                                   (0x6405)
+#define P_PWM_E2                                   (volatile unsigned int *)((0x6405  << 2) + 0xffd00000)
+#define   PWM_F2                                   (0x6406)
+#define P_PWM_F2                                   (volatile unsigned int *)((0x6406  << 2) + 0xffd00000)
+#define   PWM_BLINK_EF                             (0x6407)
+#define P_PWM_BLINK_EF                             (volatile unsigned int *)((0x6407  << 2) + 0xffd00000)
+// ------------------------------------------------------------------------------------
+// -----------------------------------------------
+// CBUS_BASE:  MSR_CLK_CBUS_BASE = 0x60
+// -----------------------------------------------
+#define   MSR_CLK_DUTY                             (0x6000)
+#define P_MSR_CLK_DUTY                             (volatile unsigned int *)((0x6000  << 2) + 0xffd00000)
+#define   MSR_CLK_REG0                             (0x6001)
+#define P_MSR_CLK_REG0                             (volatile unsigned int *)((0x6001  << 2) + 0xffd00000)
+#define   MSR_CLK_REG1                             (0x6002)
+#define P_MSR_CLK_REG1                             (volatile unsigned int *)((0x6002  << 2) + 0xffd00000)
+#define   MSR_CLK_REG2                             (0x6003)
+#define P_MSR_CLK_REG2                             (volatile unsigned int *)((0x6003  << 2) + 0xffd00000)
+#define   MSR_CLK_REG3                             (0x6004)
+#define P_MSR_CLK_REG3                             (volatile unsigned int *)((0x6004  << 2) + 0xffd00000)
+#define   MSR_CLK_REG4                             (0x6005)
+#define P_MSR_CLK_REG4                             (volatile unsigned int *)((0x6005  << 2) + 0xffd00000)
+#define   MSR_CLK_REG5                             (0x6006)
+#define P_MSR_CLK_REG5                             (volatile unsigned int *)((0x6006  << 2) + 0xffd00000)
+// ------------------------------------------------------------------------------------
+// -----------------------------------------------
+// CBUS_BASE:  STEAM_CBUS_BASE = 0x2c
+// -----------------------------------------------
+// bit 31:24 -- event_length
+// bit 23:22 -- bus_1st_sel_1  //00-gpio, 01-reserved, 10-addr, 11-data
+// bit 21:20 -- bus_2nd_sel_1
+// bit 19:18 -- bus_1st_sel_0
+// bit 17:16 -- bus_2nd_sel_0
+// bit 15:0 -- set output value (output 1 will read according to external input)
+#define   STREAM_EVENT_INFO                        (0x2c00)
+#define P_STREAM_EVENT_INFO                        (volatile unsigned int *)((0x2c00  << 2) + 0xffd00000)
+// bit 31    -- force_parity_1
+// bit 30    -- LSB_first
+// bit 31:20 -- reserved
+// bit 19:16 -- toggle point index
+// bit 15:8  -- output togle point1
+// bit 7:0   -- output togle point0 (0xff means input)
+#define   STREAM_OUTPUT_CONFIG                     (0x2c01)
+#define P_STREAM_OUTPUT_CONFIG                     (volatile unsigned int *)((0x2c01  << 2) + 0xffd00000)
+// bit 31:24 -- clock_divide_ext
+// bit 23:20 -- s_bus_start ( sclk, sdataout, sdatain)  // 0 means no s_bus used
+// bit 19    -- no_sclk_on_pin // will use internal write clock and read clock (like RS232)
+// bit 18    -- invert_sclk_in
+// bit 17    -- sdata_send_busy  // indicate one data is sending -- read only
+// bit 16    -- one_sdata_received // set when one sdata is received, can write 0 to clear
+// bit 15    -- sdata_parity  // (write -- 0-even, 1-odd) (read -- received parity check)
+// bit 14    -- sdata_send_type  // 0 -- 8 bits  1 -- 32 bits ( for fujitsu only )
+// bit 13    -- sdata_receive_type // 0 -- 8 bits only  1 -- 8/32 bits
+// bit 12    -- invert_request_out
+// bit 11:8  -- request_out_sel  // 0 means disable output
+// bit 7:0   --  stop_request_count
+#define   C_D_BUS_CONTROL                          (0x2c02)
+#define P_C_D_BUS_CONTROL                          (volatile unsigned int *)((0x2c02  << 2) + 0xffd00000)
+// bit 31:0  -- serial data (write: output one data, read: input data)
+#define   C_DATA                                   (0x2c03)
+#define P_C_DATA                                   (volatile unsigned int *)((0x2c03  << 2) + 0xffd00000)
+// bit 31:28 bus_width_1
+// bit 27:24 bus_start_pin_1
+// bit 23:16 bus_sel_chang_point_1
+// bit 15:12 bus_width_0
+// bit 11:08 bus_start_pin_0
+// bit 07:00 bus_sel_chang_point_0
+#define   STREAM_BUS_CONFIG                        (0x2c04)
+#define P_STREAM_BUS_CONFIG                        (volatile unsigned int *)((0x2c04  << 2) + 0xffd00000)
+// bit 31:24 clock_divide
+// bit 23:20 clock_output_sel  -- 0 means disable clock output
+// bit 19 -- inc_event_addr
+// bit 18 -- async_fifo_endian
+// bit 17 -- send_to_async_fifo
+// bit 16 -- data_in_serial_lsb
+// bit 15 -- invert_no_wait_condition_0
+// bit 14 -- invert_no_wait_condition_1
+// bit 13 -- invert_no_wait_condition_2
+// bit 12 -- invert_data_bus
+// bit 11 -- invert_clock_in
+// bit 10 -- event_wait_clk_en
+// bit 9 -- data_in_serial
+// bit 8 -- invert_data_in_clk
+// bit 7:4  -- data_in_begin
+// bit 3:0  -- data_in_clk_sel
+#define   STREAM_DATA_IN_CONFIG                    (0x2c05)
+#define P_STREAM_DATA_IN_CONFIG                    (volatile unsigned int *)((0x2c05  << 2) + 0xffd00000)
+// wait condition and irq should not be connected to 0, 0 means disable)
+// bit 31:28 -- no_wait_condition_0   (0 means disable this condition)
+// bit 27:24 -- no_wait_condition_1   (0 means disable this condition)
+// bit 23:20 -- no_wait_condition_2   (0 means disable this condition)
+// bit 19:16 -- irq_input_sel         (0 means disable this interrupt)
+// bit 15:13 -- interrupt_status (read) clear status (write) (ext 0, ext 1, transfer end)
+// bit 12 -- enable_sdata_irq
+// bit 11 -- invert_irq_0
+// bit 10 -- invert_irq_1
+// bit  9 -- enable_transfer_end_irq
+// bit  8 -- enable_second_ext_irq
+// bit 7:0 -- no_wait_condition_check_point (0xff means no check)
+#define   STREAM_WAIT_IRQ_CONFIG                   (0x2c06)
+#define P_STREAM_WAIT_IRQ_CONFIG                   (volatile unsigned int *)((0x2c06  << 2) + 0xffd00000)
+// bit 31:24 -- event address
+// bit 23:16 -- event data
+// bit 15:1 -- event repeat times  (0 means one time event)
+// bit 0  -- Start Event (write) event_busy (read)
+#define   STREAM_EVENT_CTL                         (0x2c07)
+#define P_STREAM_EVENT_CTL                         (volatile unsigned int *)((0x2c07  << 2) + 0xffd00000)
+// ------------------------------------------------------------------------------------
+// -----------------------------------------------
+// CBUS_BASE:  SYNC_FIFO_CBUS_BASE = 0x28
+// -----------------------------------------------
+#define   ASYNC_FIFO_REG0                          (0x2800)
+#define P_ASYNC_FIFO_REG0                          (volatile unsigned int *)((0x2800  << 2) + 0xffd00000)
+#define   ASYNC_FIFO_REG1                          (0x2801)
+#define P_ASYNC_FIFO_REG1                          (volatile unsigned int *)((0x2801  << 2) + 0xffd00000)
+    #define ASYNC_FIFO_FLUSH_STATUS     31
+    #define ASYNC_FIFO_ERR              30
+    #define ASYNC_FIFO_FIFO_EMPTY       29
+    #define ASYNC_FIFO_TO_HIU           24
+    #define ASYNC_FIFO_FLUSH            23
+    #define ASYNC_FIFO_RESET            22
+    #define ASYNC_FIFO_WRAP_EN          21
+    #define ASYNC_FIFO_FLUSH_EN         20
+    #define ASYNC_FIFO_RESIDUAL_MSB     19
+    #define ASYNC_FIFO_RESIDUAL_LSB     15
+    #define ASYNC_FIFO_FLUSH_CNT_MSB    14
+    #define ASYNC_FIFO_FLUSH_CNT_LSB    0
+#define   ASYNC_FIFO_REG2                          (0x2802)
+#define P_ASYNC_FIFO_REG2                          (volatile unsigned int *)((0x2802  << 2) + 0xffd00000)
+    #define ASYNC_FIFO_FIFO_FULL        26
+    #define ASYNC_FIFO_FILL_STATUS      25
+    #define ASYNC_FIFO_SOURCE_MSB       24
+    #define ASYNC_FIFO_SOURCE_LSB       23
+    #define ASYNC_FIFO_ENDIAN_MSB       22
+    #define ASYNC_FIFO_ENDIAN_LSB       21
+    #define ASYNC_FIFO_FILL_EN          20
+    #define ASYNC_FIFO_FILL_CNT_MSB     19
+    #define ASYNC_FIFO_FILL_CNT_LSB     0
+#define   ASYNC_FIFO_REG3                          (0x2803)
+#define P_ASYNC_FIFO_REG3                          (volatile unsigned int *)((0x2803  << 2) + 0xffd00000)
+    #define ASYNC_FLUSH_SIZE_IRQ_MSB    15
+    #define ASYNC_FLUSH_SIZE_IRQ_LSB    0
+#define   ASYNC_FIFO_REG4                          (0x2804)
+#define P_ASYNC_FIFO_REG4                          (volatile unsigned int *)((0x2804  << 2) + 0xffd00000)
+#define   ASYNC_FIFO_REG5                          (0x2805)
+#define P_ASYNC_FIFO_REG5                          (volatile unsigned int *)((0x2805  << 2) + 0xffd00000)
+// ------------------------------------------------------------------------------------
+// -----------------------------------------------
+// CBUS_BASE:  SYNC_FIFO2_CBUS_BASE = 0x24
+// -----------------------------------------------
+#define   ASYNC_FIFO2_REG0                         (0x2400)
+#define P_ASYNC_FIFO2_REG0                         (volatile unsigned int *)((0x2400  << 2) + 0xffd00000)
+#define   ASYNC_FIFO2_REG1                         (0x2401)
+#define P_ASYNC_FIFO2_REG1                         (volatile unsigned int *)((0x2401  << 2) + 0xffd00000)
+#define   ASYNC_FIFO2_REG2                         (0x2402)
+#define P_ASYNC_FIFO2_REG2                         (volatile unsigned int *)((0x2402  << 2) + 0xffd00000)
+#define   ASYNC_FIFO2_REG3                         (0x2403)
+#define P_ASYNC_FIFO2_REG3                         (volatile unsigned int *)((0x2403  << 2) + 0xffd00000)
+#define   ASYNC_FIFO2_REG4                         (0x2404)
+#define P_ASYNC_FIFO2_REG4                         (volatile unsigned int *)((0x2404  << 2) + 0xffd00000)
+#define   ASYNC_FIFO2_REG5                         (0x2405)
+#define P_ASYNC_FIFO2_REG5                         (volatile unsigned int *)((0x2405  << 2) + 0xffd00000)
+// ------------------------------------------------------------------------------------
+// -----------------------------------------------
+// CBUS_BASE:  SPIFC_CBUS_BASE = 0x50
+// -----------------------------------------------
+#define   SPI_FLASH_CMD                            (0x5000)
+#define P_SPI_FLASH_CMD                            (volatile unsigned int *)((0x5000  << 2) + 0xffd00000)
+    #define SPI_FLASH_READ    31
+    #define SPI_FLASH_WREN    30
+    #define SPI_FLASH_WRDI    29
+    #define SPI_FLASH_RDID    28
+    #define SPI_FLASH_RDSR    27
+    #define SPI_FLASH_WRSR    26
+    #define SPI_FLASH_PP      25
+    #define SPI_FLASH_SE      24
+    #define SPI_FLASH_BE      23
+    #define SPI_FLASH_CE      22
+    #define SPI_FLASH_DP      21
+    #define SPI_FLASH_RES     20
+    #define SPI_HPM           19
+    #define SPI_FLASH_USR     18
+    #define SPI_FLASH_USR_ADDR 15
+    #define SPI_FLASH_USR_DUMMY 14
+    #define SPI_FLASH_USR_DIN   13
+    #define SPI_FLASH_USR_DOUT   12
+    #define SPI_FLASH_USR_DUMMY_BLEN   10
+    #define SPI_FLASH_USR_CMD     0
+#define   SPI_FLASH_ADDR                           (0x5001)
+#define P_SPI_FLASH_ADDR                           (volatile unsigned int *)((0x5001  << 2) + 0xffd00000)
+    #define SPI_FLASH_BYTES_LEN 24
+    #define SPI_FLASH_ADDR_START 0
+#define   SPI_FLASH_CTRL                           (0x5002)
+#define P_SPI_FLASH_CTRL                           (volatile unsigned int *)((0x5002  << 2) + 0xffd00000)
+    #define SPI_ENABLE_AHB    17
+    #define SPI_SST_AAI       16
+    #define SPI_RES_RID       15
+    #define SPI_FREAD_DUAL    14
+    #define SPI_READ_READ_EN  13
+    #define SPI_CLK_DIV0      12
+    #define SPI_CLKCNT_N      8
+    #define SPI_CLKCNT_H      4
+    #define SPI_CLKCNT_L      0
+#define   SPI_FLASH_CTRL1                          (0x5003)
+#define P_SPI_FLASH_CTRL1                          (volatile unsigned int *)((0x5003  << 2) + 0xffd00000)
+#define   SPI_FLASH_STATUS                         (0x5004)
+#define P_SPI_FLASH_STATUS                         (volatile unsigned int *)((0x5004  << 2) + 0xffd00000)
+#define   SPI_FLASH_CTRL2                          (0x5005)
+#define P_SPI_FLASH_CTRL2                          (volatile unsigned int *)((0x5005  << 2) + 0xffd00000)
+#define   SPI_FLASH_CLOCK                          (0x5006)
+#define P_SPI_FLASH_CLOCK                          (volatile unsigned int *)((0x5006  << 2) + 0xffd00000)
+#define   SPI_FLASH_USER                           (0x5007)
+#define P_SPI_FLASH_USER                           (volatile unsigned int *)((0x5007  << 2) + 0xffd00000)
+#define   SPI_FLASH_USER1                          (0x5008)
+#define P_SPI_FLASH_USER1                          (volatile unsigned int *)((0x5008  << 2) + 0xffd00000)
+#define   SPI_FLASH_USER2                          (0x5009)
+#define P_SPI_FLASH_USER2                          (volatile unsigned int *)((0x5009  << 2) + 0xffd00000)
+#define   SPI_FLASH_USER3                          (0x500a)
+#define P_SPI_FLASH_USER3                          (volatile unsigned int *)((0x500a  << 2) + 0xffd00000)
+#define   SPI_FLASH_USER4                          (0x500b)
+#define P_SPI_FLASH_USER4                          (volatile unsigned int *)((0x500b  << 2) + 0xffd00000)
+#define   SPI_FLASH_SLAVE                          (0x500c)
+#define P_SPI_FLASH_SLAVE                          (volatile unsigned int *)((0x500c  << 2) + 0xffd00000)
+#define   SPI_FLASH_SLAVE1                         (0x500d)
+#define P_SPI_FLASH_SLAVE1                         (volatile unsigned int *)((0x500d  << 2) + 0xffd00000)
+#define   SPI_FLASH_SLAVE2                         (0x500e)
+#define P_SPI_FLASH_SLAVE2                         (volatile unsigned int *)((0x500e  << 2) + 0xffd00000)
+#define   SPI_FLASH_SLAVE3                         (0x500f)
+#define P_SPI_FLASH_SLAVE3                         (volatile unsigned int *)((0x500f  << 2) + 0xffd00000)
+#define   SPI_FLASH_C0                             (0x5010)
+#define P_SPI_FLASH_C0                             (volatile unsigned int *)((0x5010  << 2) + 0xffd00000)
+#define   SPI_FLASH_C1                             (0x5011)
+#define P_SPI_FLASH_C1                             (volatile unsigned int *)((0x5011  << 2) + 0xffd00000)
+#define   SPI_FLASH_C2                             (0x5012)
+#define P_SPI_FLASH_C2                             (volatile unsigned int *)((0x5012  << 2) + 0xffd00000)
+#define   SPI_FLASH_C3                             (0x5013)
+#define P_SPI_FLASH_C3                             (volatile unsigned int *)((0x5013  << 2) + 0xffd00000)
+#define   SPI_FLASH_C4                             (0x5014)
+#define P_SPI_FLASH_C4                             (volatile unsigned int *)((0x5014  << 2) + 0xffd00000)
+#define   SPI_FLASH_C5                             (0x5015)
+#define P_SPI_FLASH_C5                             (volatile unsigned int *)((0x5015  << 2) + 0xffd00000)
+#define   SPI_FLASH_C6                             (0x5016)
+#define P_SPI_FLASH_C6                             (volatile unsigned int *)((0x5016  << 2) + 0xffd00000)
+#define   SPI_FLASH_C7                             (0x5017)
+#define P_SPI_FLASH_C7                             (volatile unsigned int *)((0x5017  << 2) + 0xffd00000)
+#define   SPI_FLASH_B8                             (0x5018)
+#define P_SPI_FLASH_B8                             (volatile unsigned int *)((0x5018  << 2) + 0xffd00000)
+#define   SPI_FLASH_B9                             (0x5019)
+#define P_SPI_FLASH_B9                             (volatile unsigned int *)((0x5019  << 2) + 0xffd00000)
+#define   SPI_FLASH_B10                            (0x501a)
+#define P_SPI_FLASH_B10                            (volatile unsigned int *)((0x501a  << 2) + 0xffd00000)
+#define   SPI_FLASH_B11                            (0x501b)
+#define P_SPI_FLASH_B11                            (volatile unsigned int *)((0x501b  << 2) + 0xffd00000)
+#define   SPI_FLASH_B12                            (0x501c)
+#define P_SPI_FLASH_B12                            (volatile unsigned int *)((0x501c  << 2) + 0xffd00000)
+#define   SPI_FLASH_B13                            (0x501d)
+#define P_SPI_FLASH_B13                            (volatile unsigned int *)((0x501d  << 2) + 0xffd00000)
+#define   SPI_FLASH_B14                            (0x501e)
+#define P_SPI_FLASH_B14                            (volatile unsigned int *)((0x501e  << 2) + 0xffd00000)
+#define   SPI_FLASH_B15                            (0x501f)
+#define P_SPI_FLASH_B15                            (volatile unsigned int *)((0x501f  << 2) + 0xffd00000)
+// ------------------------------------------------------------------------------------
+//spicc 0
+// -----------------------------------------------
+// CBUS_BASE:  SPICC0_CBUS_BASE = 0x4c
+// -----------------------------------------------
+#define   SPICC0_RXDATA                            (0x4c00)
+#define P_SPICC0_RXDATA                            (volatile unsigned int *)((0x4c00  << 2) + 0xffd00000)
+#define   SPICC0_TXDATA                            (0x4c01)
+#define P_SPICC0_TXDATA                            (volatile unsigned int *)((0x4c01  << 2) + 0xffd00000)
+#define   SPICC0_CONREG                            (0x4c02)
+#define P_SPICC0_CONREG                            (volatile unsigned int *)((0x4c02  << 2) + 0xffd00000)
+#define   SPICC0_INTREG                            (0x4c03)
+#define P_SPICC0_INTREG                            (volatile unsigned int *)((0x4c03  << 2) + 0xffd00000)
+#define   SPICC0_DMAREG                            (0x4c04)
+#define P_SPICC0_DMAREG                            (volatile unsigned int *)((0x4c04  << 2) + 0xffd00000)
+#define   SPICC0_STATREG                           (0x4c05)
+#define P_SPICC0_STATREG                           (volatile unsigned int *)((0x4c05  << 2) + 0xffd00000)
+#define   SPICC0_PERIODREG                         (0x4c06)
+#define P_SPICC0_PERIODREG                         (volatile unsigned int *)((0x4c06  << 2) + 0xffd00000)
+#define   SPICC0_TESTREG                           (0x4c07)
+#define P_SPICC0_TESTREG                           (volatile unsigned int *)((0x4c07  << 2) + 0xffd00000)
+#define   SPICC0_DRADDR                            (0x4c08)
+#define P_SPICC0_DRADDR                            (volatile unsigned int *)((0x4c08  << 2) + 0xffd00000)
+#define   SPICC0_DWADDR                            (0x4c09)
+#define P_SPICC0_DWADDR                            (volatile unsigned int *)((0x4c09  << 2) + 0xffd00000)
+#define   SPICC0_LD_CNTL0                          (0x4c0a)
+#define P_SPICC0_LD_CNTL0                          (volatile unsigned int *)((0x4c0a  << 2) + 0xffd00000)
+#define   SPICC0_LD_CNTL1                          (0x4c0b)
+#define P_SPICC0_LD_CNTL1                          (volatile unsigned int *)((0x4c0b  << 2) + 0xffd00000)
+#define   SPICC0_LD_RADDR                          (0x4c0c)
+#define P_SPICC0_LD_RADDR                          (volatile unsigned int *)((0x4c0c  << 2) + 0xffd00000)
+#define   SPICC0_LD_WADDR                          (0x4c0d)
+#define P_SPICC0_LD_WADDR                          (volatile unsigned int *)((0x4c0d  << 2) + 0xffd00000)
+#define   SPICC0_ENHANCE_CNTL                      (0x4c0e)
+#define P_SPICC0_ENHANCE_CNTL                      (volatile unsigned int *)((0x4c0e  << 2) + 0xffd00000)
+// ------------------------------------------------------------------------------------
+//spicc 1
+// -----------------------------------------------
+// CBUS_BASE:  SPICC1_CBUS_BASE = 0x54
+// -----------------------------------------------
+#define   SPICC1_RXDATA                            (0x5400)
+#define P_SPICC1_RXDATA                            (volatile unsigned int *)((0x5400  << 2) + 0xffd00000)
+#define   SPICC1_TXDATA                            (0x5401)
+#define P_SPICC1_TXDATA                            (volatile unsigned int *)((0x5401  << 2) + 0xffd00000)
+#define   SPICC1_CONREG                            (0x5402)
+#define P_SPICC1_CONREG                            (volatile unsigned int *)((0x5402  << 2) + 0xffd00000)
+#define   SPICC1_INTREG                            (0x5403)
+#define P_SPICC1_INTREG                            (volatile unsigned int *)((0x5403  << 2) + 0xffd00000)
+#define   SPICC1_DMAREG                            (0x5404)
+#define P_SPICC1_DMAREG                            (volatile unsigned int *)((0x5404  << 2) + 0xffd00000)
+#define   SPICC1_STATREG                           (0x5405)
+#define P_SPICC1_STATREG                           (volatile unsigned int *)((0x5405  << 2) + 0xffd00000)
+#define   SPICC1_PERIODREG                         (0x5406)
+#define P_SPICC1_PERIODREG                         (volatile unsigned int *)((0x5406  << 2) + 0xffd00000)
+#define   SPICC1_TESTREG                           (0x5407)
+#define P_SPICC1_TESTREG                           (volatile unsigned int *)((0x5407  << 2) + 0xffd00000)
+#define   SPICC1_DRADDR                            (0x5408)
+#define P_SPICC1_DRADDR                            (volatile unsigned int *)((0x5408  << 2) + 0xffd00000)
+#define   SPICC1_DWADDR                            (0x5409)
+#define P_SPICC1_DWADDR                            (volatile unsigned int *)((0x5409  << 2) + 0xffd00000)
+#define   SPICC1_LD_CNTL0                          (0x540a)
+#define P_SPICC1_LD_CNTL0                          (volatile unsigned int *)((0x540a  << 2) + 0xffd00000)
+#define   SPICC1_LD_CNTL1                          (0x540b)
+#define P_SPICC1_LD_CNTL1                          (volatile unsigned int *)((0x540b  << 2) + 0xffd00000)
+#define   SPICC1_LD_RADDR                          (0x540c)
+#define P_SPICC1_LD_RADDR                          (volatile unsigned int *)((0x540c  << 2) + 0xffd00000)
+#define   SPICC1_LD_WADDR                          (0x540d)
+#define P_SPICC1_LD_WADDR                          (volatile unsigned int *)((0x540d  << 2) + 0xffd00000)
+#define   SPICC1_ENHANCE_CNTL                      (0x540e)
+#define P_SPICC1_ENHANCE_CNTL                      (volatile unsigned int *)((0x540e  << 2) + 0xffd00000)
+//
+//// -------------------------------------------------------------------
+//// PSEL Group #1:  0x400 ~ 0x7FF
+//// -------------------------------------------------------------------
+//`define  PERIPHS1_CBUS_BASE   8'h28
+//
+//
+//
+//// ----------------------------
+//// IR Remote (8)
+//// ----------------------------
+//`define IR_DEC_LDR_ACTIVE               8'h20
+//`define IR_DEC_LDR_IDLE                 8'h21
+//`define IR_DEC_LDR_REPEAT               8'h22
+//`define IR_DEC_BIT_0                    8'h23
+//`define IR_DEC_REG0                     8'h24
+//`define IR_DEC_FRAME                    8'h25
+//`define IR_DEC_STATUS                   8'h26
+//`define IR_DEC_REG1                     8'h27
+//
+//// ----------------------------
+//// Demod Sampling
+//// ----------------------------
+//`define DEMOD_ADC_SAMPLING               8'h2d
+//// ----------------------------
+//// WIFI
+//// ----------------------------
+//// `define WIFI_ADC_SAMPLING               8'h2e
+//// `define WIFI_ADC_READBACK               8'h2f
+//
+//
+//// ---------------------------
+//// EFUSE (4)
+//// ----------------------------
+//// Moved to the Secure APB3 bus
+//// `define EFUSE_CNTL0                     8'h58
+//// `define EFUSE_CNTL1                     8'h59
+//// `define EFUSE_CNTL2                     8'h5a
+//// `define EFUSE_CNTL3                     8'h5b
+//// `define EFUSE_CNTL4                     8'h5c
+//
+//// ---------------------------------------------
+//// Separate APB slave that shares the CBUS/APB
+//// register space of the static registers
+//// ---------------------------------------------
+//
+//`define ATAPI_IDEREG0                   8'h60
+//   `define IDE_UDMA_PIO_STATE         15
+//   `define IDE_BUSY                   14
+//   `define IDE_ERROR_BIT              13
+//   `define IDE_DMARQ_BIT              12
+//   `define IDE_IORDY_BIT              11
+//   `define IDE_IORDY_EN_BIT           10
+//   `define IDE_DIS_CSEL_BIT            9
+//   `define IDE_CSEL_BIT                8
+//   `define IDE_IRQ14                   2
+//   `define IDE_ATAPI_GPIO_EN           3
+//   `define IDE_DMARQ_FULL              1
+//   `define IDE_ENABLE                  0
+//`define ATAPI_IDEREG1                   8'h61
+//`define ATAPI_IDEREG2                   8'h62
+//    `define IDE_XFER_CNT_MSB_BIT      18
+//    `define IDE_XFER_CNT_LSB_BIT       0
+//`define ATAPI_CYCTIME                   8'h63
+//`define ATAPI_IDETIME                   8'h64
+//`define ATAPI_PIO_TIMING                8'h65
+//`define ATAPI_TABLE_ADD_REG             8'h66
+//`define ATAPI_IDEREG3                   8'h67
+//`define ATAPI_UDMA_REG0                 8'h68
+//`define ATAPI_UDMA_REG1                 8'h69
+//
+//// Room for registers here
+//
+//`define TRANS_PWMA_REG0                 8'h70
+//`define TRANS_PWMA_REG1                 8'h71
+//`define TRANS_PWMA_MUX0                 8'h72
+//`define TRANS_PWMA_MUX1                 8'h73
+//`define TRANS_PWMA_MUX2                 8'h74
+//`define TRANS_PWMA_MUX3                 8'h75
+//`define TRANS_PWMA_MUX4                 8'h76
+//`define TRANS_PWMA_MUX5                 8'h77
+//
+//`define TRANS_PWMB_REG0                 8'h78
+//`define TRANS_PWMB_REG1                 8'h79
+//`define TRANS_PWMB_MUX0                 8'h7a
+//`define TRANS_PWMB_MUX1                 8'h7b
+//`define TRANS_PWMB_MUX2                 8'h7c
+//`define TRANS_PWMB_MUX3                 8'h7d
+//`define TRANS_PWMB_MUX4                 8'h7e
+//`define TRANS_PWMB_MUX5                 8'h7f
+//
+//
+//
+//// ----------------------------
+//// NAND (21)
+//// ----------------------------
+//`define NAND_START                      8'h80
+//`define NAND_ADR_CMD                    8'h8a
+//`define NAND_ADR_STS                    8'h8b
+//`define NAND_END                        8'h8f
+//
+//// ----------------------------
+//// ISP_FLASH_LED_CTRL
+//// ----------------------------
+////bit 31, reg_led_en //rising pulse start, falling pulse stop for torch mode
+////bit 30, reg_inc_i_st_lat //for as3685, dynamic increase current during st_latch
+////bit 29:28, reg_inv_en_pol //bit[29], invert en1, bit [28], invert en2
+////bit 27, reg_switch_en1en2  //switch output en1 and en2. For IS3231: en1 is EN, en2 is mode.
+////bit 26, reg_force_off_mode //1: reset state machine at the falling edge no matter which state it is in
+////bit 25, reg_hold_nonstd_off_mode //hold the non-std led_off signal input before state "OFF"
+////bit 24, reg_flash_mode_timeout_en  //force to exit the Tlat state when time out, for flash mode protection
+////bit 23, reg_en1_st_ini_level //en1 level during state ST_INI
+////bit 22, reg_en2_st_set_mp_level //en2 level during state ST_SET_MP_HI, ST_SET_MP_LO
+////bit 21, reg_en1_st_off_level //en1 level during state ST_OFF
+////bit 20, reg_en2_st_off_level //en2 level during state ST_OFF
+////bit 19:12, reg_en1_mp_num  //en1 multi pulse number, up to 256 step current control
+////bit 10:0, reg_t_st_ini //Max: 85.2 us under 24M clock input
+//`define ISP_LED_CTRL                    8'h98
+//
+////bit 31:21, reg_t_en1_inc_i_st_lat_cnt //Max: 85.2us under 24M. for as3685, dynamic increase current during st_latch
+////bit 20:10, reg_t_en2_lo_st_ini //Max: 85.2 us under 24M clock input
+////bit 9:0, reg_t_en2_hi1_st_lat_cnt //42.62us @24M, EN2 can output hi-lo-hi during ST_LATCH, this is the first lo -duration
+//`define ISP_LED_TIMING1                 8'h99
+//
+////bit 31:21, reg_t_en1_mp_hi_cnt //Max: 85.2 us under 24M clock input, mp means multi pulse
+////bit 20:10, reg_t_en1_mp_lo_cnt //Max: 85.2 us under 24M clock input, mp means multi pulse
+////bit 9:0, reg_t_en2_lo1_st_lat_cnt //42.62us @24M, EN2 can output hi-lo-hi during ST_LATCH, this is the first lo -duration
+//`define ISP_LED_TIMING2                 8'h9a
+//
+////bit 30:28, RO state
+////bit 25:0, reg_flash_mode_timeout_cnt //up to 2.79s at 24Mhz clk input
+//`define ISP_LED_TIMING3                 8'h9b
+//
+////bit 25:0, reg_t_st_lat_cnt //up to 2.79s, keep the led on if it's 26'h3ffffff under torch mode
+//`define ISP_LED_TIMING4                 8'h9c
+//
+////bit 31:26, reg_t_st_off_cnt[5:0] //up to 85.2us OFF state.
+////bit 25:0, reg_t_en2_hi2_st_lat_cnt //EN2 can output hi-lo-hi during ST_LATCH, this is the second hi -duration
+//`define ISP_LED_TIMING5                 8'h9d
+//
+////bit 30:26, reg_t_st_off_cnt[10:6] //up to 85.2us OFF state.
+////bit 25:0, reg_t_en1_st_lat_hold_cnt //to make sure Tlat to meat it's minimum request 500us (since non-std led_off signal may comes in anytime)
+//`define ISP_LED_TIMING6                 8'h9e
+//// ----------------------------
+//// SAR ADC (16)
+//// ----------------------------
+////`define SAR_ADC_REG0                    8'ha0
+////`define SAR_ADC_CHAN_LIST               8'ha1
+////`define SAR_ADC_AVG_CNTL                8'ha2
+////`define SAR_ADC_REG3                    8'ha3
+////`define SAR_ADC_DELAY                   8'ha4
+////`define SAR_ADC_LAST_RD                 8'ha5
+////`define SAR_ADC_FIFO_RD                 8'ha6
+////`define SAR_ADC_AUX_SW                  8'ha7
+////`define SAR_ADC_CHAN_10_SW              8'ha8
+////`define SAR_ADC_DETECT_IDLE_SW          8'ha9
+////`define SAR_ADC_DELTA_10                8'haa
+////`define SAR_ADC_REG11                   8'hab
+////`define SAR_ADC_REG12                   8'hac
+////`define SAR_ADC_REG13                   8'had
+//
+//// ----------------------------
+//// CTouch (16)
+//// ----------------------------
+//
+//
+//// ---------------------------
+//// RTC (4)
+//// ---------------------------
+//`define RTC_ADDR0                      8'hd0
+//`define RTC_ADDR1                      8'hd1
+//`define RTC_ADDR2                      8'hd2
+//`define RTC_ADDR3                      8'hd3
+//`define RTC_ADDR4                      8'hd4
+//// ----------------------------
+//// clock measure (4)
+//// ----------------------------
+//
+//
+//
+//// -------------------------------------------------------------------
+//// PSEL Group #2:  0x800 ~ 0xbFF
+//// -------------------------------------------------------------------
+//`define  PERIPHS2_CBUS_BASE   8'h2c
+//
+//`define USB_ADDR0                      8'h00
+//`define USB_ADDR1                      8'h01
+//`define USB_ADDR2                      8'h02
+//`define USB_ADDR3                      8'h03
+//`define USB_ADDR4                      8'h04
+//`define USB_ADDR5                      8'h05
+//`define USB_ADDR6                      8'h06
+//`define USB_ADDR7                      8'h07
+//`define USB_ADDR8                      8'h08
+//`define USB_ADDR9                      8'h09
+//`define USB_ADDR10                     8'h0a
+//`define USB_ADDR11                     8'h0b
+//`define USB_ADDR12                     8'h0c
+//`define USB_ADDR13                     8'h0d
+//`define USB_ADDR14                     8'h0e
+//`define USB_ADDR15                     8'h0f
+//
+//`define USB_ADDR16                     8'h10
+//`define USB_ADDR17                     8'h11
+//`define USB_ADDR18                     8'h12
+//`define USB_ADDR19                     8'h13
+//`define USB_ADDR20                     8'h14
+//`define USB_ADDR21                     8'h15
+//`define USB_ADDR22                     8'h16
+//`define USB_ADDR23                     8'h17
+//`define USB_ADDR24                     8'h18
+//`define USB_ADDR25                     8'h19
+//`define USB_ADDR26                     8'h1a
+//`define USB_ADDR27                     8'h1b
+//`define USB_ADDR28                     8'h1c
+//`define USB_ADDR29                     8'h1d
+//`define USB_ADDR30                     8'h1e
+//`define USB_ADDR31                     8'h1f
+//
+//
+//
+//
+//
+//// -------------------------------------------------------------------
+//// PSEL Group #3:  0xc00 ~ 0xFFF
+//// -------------------------------------------------------------------
+//`define  PERIPHS3_CBUS_BASE   8'h30
+//
+//// ---------------------------
+//// SDIO (8)
+//// ---------------------------
+//// `define C_SDIO_HIGH16                   8'h00
+//// bit 31:0 -- cmd_argument/MS_SHORT_DATA_WRITE
+//`define CMD_ARGUMENT                    8'h08
+//// bit 31:24 -- repeat_package_times/MS_SHORT_DATA_WRITE_NUMBER
+//// bit 21   -- use_int_window
+//// bit 20   -- cmd_send_data/MS_HAVE_LONG_DATA_WRITE
+//// bit 19   -- check_busy_on_dat0 (used for R1b response)
+//// bit 18   -- response_crc7_from_8
+//// bit 17   -- response_have_data/MS_HAVE_LONG_DATA_READ
+//// bit 16   -- response_do_not_have_crc7/MS_SHORT_DATA_DO_NOT_HAVE_CRC16
+//// bit 15:8 -- cmd_response_bits (00 means no response) /MS_SHORT_DATA_READ_NUMBER
+//// bit 7:0 -- cmd_command/MS_TPC
+//`define CMD_SEND                        8'h09
+//// bit 31:29 -- sdio_write_CRC_ok_status
+//// bit 28:23 -- sdio_write_Nwr
+//// bit 22:21 -- m_endian
+//// bit 20    -- bus_width
+//// bit 19    -- data_latch_at_negedge (normally at posedge)
+//// bit 18    -- do_not_delay_data (normally delay one clock)
+//// bit 17:12 -- cmd_argument_bits (before CRC, normally : 39)
+//// bit 11 -- cmd_out_at_posedge (normally at negedge)
+//// bit 10 -- cmd_disable_CRC
+//// bit 9:0 -- cmd_clk_divide
+//`define SDIO_CONFIG                     8'h0a
+//// bit 31:19 -- sdio_timing_out_count
+//// bit 18 -- arc_timing_out_int_en
+//// bit 17 -- amrisc_timing_out_int_en
+//// bit 16 -- sdio_timig_out_int   -- write 1 clear this int bit
+//// bit 15:12 -- sdio_status_info  -- used for change infor between ARC and Amrisc
+//// bit 11 -- sdio_set_soft_int -- write 1 to this bit will set sdio_soft_int , read out is m_req_sdio
+//// bit 10 -- sdio_soft_int   -- write 1 clear this int bit
+//// bit 9 -- sdio_cmd_int   -- write 1 clear this int bit
+//// bit 8 -- sdio_if_int   -- write 1 clear this int bit
+//// bit 7 -- sdio_data_write_crc16_ok -- Read-Only
+//// bit 6 -- sdio_data_read_crc16_ok  -- Read-Only
+//// bit 5 -- sdio_response_crc7_ok    -- Read-Only
+//// bit 4 -- sdio_cmd_busy            -- Read-Only
+//// bit 3:0 -- sdio_status            -- Read-Only
+//`define SDIO_STATUS_IRQ                 8'h0b
+//// bit 31 -- halt_hole 0 -- 8 bits 1 -- 16 bits
+//// bit 30 -- force_halt
+//// bit 29:24 -- sdio_force_data_read (read_only)
+//// bit 23:22 -- disable_mem_halt (write and read)
+//// bit 21:16 -- sdio_force_output_en
+//// bit 15 -- soft_reset
+//// bit 14 -- sdio_force_enable
+//// bit 13:8 -- sdio_force_data/sdio_read_data
+//// bit 7:6 -- sdio_if_int_config
+//// bit 5 -- arc_soft_int_en
+//// bit 4 -- arc_cmd_int_en
+//// bit 3 -- arc_if_int_en
+//// bit 2 -- amrisc_soft_int_en
+//// bit 1 -- amrisc_cmd_int_en
+//// bit 0 -- amrisc_if_int_en
+//`define SDIO_IRQ_CONFIG                 8'h0c
+//// bit 27:16 -- data_catch_finish_point
+//// (
+//// bit 15:12 -- response_read_index
+//// bit 9 -- data_catch_readout_en
+//// bit 8 -- write_read_out_index
+//// ) this bits only write when write_read_out_index = 1
+//// bit 11 -- sdio_1_data_swap01
+//// bit 10 -- sdio_0_data_on_1
+//// bit 7:6 -- data_catch_level
+//// bit 5 -- stream_8_bits_mode
+//// bit 4 -- stream_enable
+//// bit 3 -- ms_sclk_always
+//// bit 2 -- ms_enable
+//// bit 1:0 -- SDIO_port_sel //00-sdio1, 01-sdio2, 02-sdio3
+//`define SDIO_MULT_CONFIG                8'h0d
+//// bit 31:0 -- m_addr_sdio
+//`define SDIO_M_ADDR                     8'h0e
+//// bit 31    -- CRC_status_4line
+//// bit 30    -- data_rw_do_not_have_crc16/MS_LONG_DATA_DO_NOT_HAVE_CRC16
+//// bit 29:16 -- data_rw_number/MS_LONG_DATA_NUMBER
+//// bit 15:0 -- cmd_argument_ext/MS_SHORT_DATA_EXTENSION
+//`define SDIO_EXTENSION                  8'h0f
+//// ----------------------------
+//// SDIO_AHB_CBUS (2)
+//// ----------------------------
+//// bit   17    -- arc_ahb_cbus_int_en
+//// bit   16    -- amrisc_ahb_cbus_int_en
+//// bit 15:8    -- SDIO_FIFO_count
+//// bit  7:4    -- m_req_count
+//// bit    3    -- reserved
+//// bit    2    -- m_write_cbus
+//// bit    1    -- m_req_cbus
+//// bit    0    -- sdio_ahb_cbus_enable
+//`define SDIO_AHB_CBUS_CTRL             8'h18
+//// m_rd_data[31:0] when (m_write_cbus == 0)  CBUS write
+//// m_wr_data[31:0] when (m_write_cbus == 1)  CBUS read
+//`define SDIO_AHB_CBUS_M_DATA           8'h19
+//
+//
+//// ----------------------------
+//// SDHC (SDIO #2)
+//// ----------------------------
+//`define SD_REG0_ARGU    8'h80
+//`define SD_REG1_SEND    8'h81
+//`define SD_REG2_CNTL    8'h82
+//`define SD_REG3_STAT    8'h83
+//`define SD_REG4_CLKC    8'h84
+//`define SD_REG5_ADDR    8'h85
+//`define SD_REG6_PDMA    8'h86
+//`define SD_REG7_MISC    8'h87
+//`define SD_REG8_DATA    8'h88
+//`define SD_REG9_ICTL    8'h89
+//`define SD_REGA_ISTA    8'h8a
+//`define SD_REGB_SRST    8'h8b
+//`define SD_REGC_ESTA    8'h8c
+//`define SD_REGD_ENHC    8'h8d
+//`define SD_REGE_CLK2    8'h8e
+//
+//
+// Closing file:  periphs_reg.h
+//
+//
+// Reading file:  isa_reg.h
+//
+// $isa/rtl/isa_core register defines for the APB bus
+// CBUS base slave address
+// -----------------------------------------------
+// CBUS_BASE:  ISA_CBUS_BASE = 0x3c
+// -----------------------------------------------
+// Up to 256 registers for this base
+#define   ISA_DEBUG_REG0                           (0x3c00)
+#define P_ISA_DEBUG_REG0                           (volatile unsigned int *)((0x3c00  << 2) + 0xffd00000)
+#define   ISA_DEBUG_REG1                           (0x3c01)
+#define P_ISA_DEBUG_REG1                           (volatile unsigned int *)((0x3c01  << 2) + 0xffd00000)
+#define   ISA_DEBUG_REG2                           (0x3c02)
+#define P_ISA_DEBUG_REG2                           (volatile unsigned int *)((0x3c02  << 2) + 0xffd00000)
+#define   ISA_DEBUG_REG3                           (0x3c03)
+#define P_ISA_DEBUG_REG3                           (volatile unsigned int *)((0x3c03  << 2) + 0xffd00000)
+#define   ISA_PLL_CLK_SIM0                         (0x3c08)
+#define P_ISA_PLL_CLK_SIM0                         (volatile unsigned int *)((0x3c08  << 2) + 0xffd00000)
+#define   ISA_CNTL_REG0                            (0x3c09)
+#define P_ISA_CNTL_REG0                            (volatile unsigned int *)((0x3c09  << 2) + 0xffd00000)
+// -----------------------------------------------------------
+#define   AO_CPU_IRQ_IN0_INTR_STAT                 (0x3c10)
+#define P_AO_CPU_IRQ_IN0_INTR_STAT                 (volatile unsigned int *)((0x3c10  << 2) + 0xffd00000)
+#define   AO_CPU_IRQ_IN0_INTR_STAT_CLR             (0x3c11)
+#define P_AO_CPU_IRQ_IN0_INTR_STAT_CLR             (volatile unsigned int *)((0x3c11  << 2) + 0xffd00000)
+#define   AO_CPU_IRQ_IN0_INTR_MASK                 (0x3c12)
+#define P_AO_CPU_IRQ_IN0_INTR_MASK                 (volatile unsigned int *)((0x3c12  << 2) + 0xffd00000)
+#define   AO_CPU_IRQ_IN0_INTR_FIRQ_SEL             (0x3c13)
+#define P_AO_CPU_IRQ_IN0_INTR_FIRQ_SEL             (volatile unsigned int *)((0x3c13  << 2) + 0xffd00000)
+// define MEDIA_CPU_IRQ_IN1_INTR_STAT           8'h14
+// define MEDIA_CPU_IRQ_IN1_INTR_STAT_CLR       8'h15
+// define MEDIA_CPU_IRQ_IN1_INTR_MASK           8'h16
+// define MEDIA_CPU_IRQ_IN1_INTR_FIRQ_SEL       8'h17
+//
+// define MEDIA_CPU_IRQ_IN2_INTR_STAT              8'h18
+// define MEDIA_CPU_IRQ_IN2_INTR_STAT_CLR          8'h19
+// define MEDIA_CPU_IRQ_IN2_INTR_MASK              8'h1a
+// define MEDIA_CPU_IRQ_IN2_INTR_FIRQ_SEL          8'h1b
+//
+// define MEDIA_CPU_IRQ_IN3_INTR_STAT            8'h1c
+// define MEDIA_CPU_IRQ_IN3_INTR_STAT_CLR        8'h1d
+// define MEDIA_CPU_IRQ_IN3_INTR_MASK            8'h1e
+// define MEDIA_CPU_IRQ_IN3_INTR_FIRQ_SEL        8'h1f
+#define   GPIO_INTR_EDGE_POL                       (0x3c20)
+#define P_GPIO_INTR_EDGE_POL                       (volatile unsigned int *)((0x3c20  << 2) + 0xffd00000)
+#define   GPIO_INTR_GPIO_SEL0                      (0x3c21)
+#define P_GPIO_INTR_GPIO_SEL0                      (volatile unsigned int *)((0x3c21  << 2) + 0xffd00000)
+#define   GPIO_INTR_GPIO_SEL1                      (0x3c22)
+#define P_GPIO_INTR_GPIO_SEL1                      (volatile unsigned int *)((0x3c22  << 2) + 0xffd00000)
+#define   GPIO_INTR_FILTER_SEL0                    (0x3c23)
+#define P_GPIO_INTR_FILTER_SEL0                    (volatile unsigned int *)((0x3c23  << 2) + 0xffd00000)
+// `define GLOBAL_INTR_DISABLE                 8'h24    never used
+#define   CVBS_IRQ0_CNTL                           (0x3c24)
+#define P_CVBS_IRQ0_CNTL                           (volatile unsigned int *)((0x3c24  << 2) + 0xffd00000)
+#define   CVBS_IRQ1_CNTL                           (0x3c25)
+#define P_CVBS_IRQ1_CNTL                           (volatile unsigned int *)((0x3c25  << 2) + 0xffd00000)
+#define   CVBS_IRQ0_COUNTER                        (0x3c26)
+#define P_CVBS_IRQ0_COUNTER                        (volatile unsigned int *)((0x3c26  << 2) + 0xffd00000)
+#define   CVBS_IRQ1_COUNTER                        (0x3c27)
+#define P_CVBS_IRQ1_COUNTER                        (volatile unsigned int *)((0x3c27  << 2) + 0xffd00000)
+#define   MEDIA_CPU_INTR_STAT                      (0x3c28)
+#define P_MEDIA_CPU_INTR_STAT                      (volatile unsigned int *)((0x3c28  << 2) + 0xffd00000)
+#define   MEDIA_CPU_INTR_STAT_CLR                  (0x3c29)
+#define P_MEDIA_CPU_INTR_STAT_CLR                  (volatile unsigned int *)((0x3c29  << 2) + 0xffd00000)
+#define   MEDIA_CPU_INTR_MASK                      (0x3c2a)
+#define P_MEDIA_CPU_INTR_MASK                      (volatile unsigned int *)((0x3c2a  << 2) + 0xffd00000)
+#define   MEDIA_CPU_INTR_FIRQ_SEL                  (0x3c2b)
+#define P_MEDIA_CPU_INTR_FIRQ_SEL                  (volatile unsigned int *)((0x3c2b  << 2) + 0xffd00000)
+// -----------------------------------------------------------
+#define   ISA_BIST_REG0                            (0x3c30)
+#define P_ISA_BIST_REG0                            (volatile unsigned int *)((0x3c30  << 2) + 0xffd00000)
+#define   ISA_BIST_REG1                            (0x3c31)
+#define P_ISA_BIST_REG1                            (volatile unsigned int *)((0x3c31  << 2) + 0xffd00000)
+// -----------------------------------------------------------
+#define   WATCHDOG_CNTL                            (0x3c34)
+#define P_WATCHDOG_CNTL                            (volatile unsigned int *)((0x3c34  << 2) + 0xffd00000)
+#define   WATCHDOG_CNTL1                           (0x3c35)
+#define P_WATCHDOG_CNTL1                           (volatile unsigned int *)((0x3c35  << 2) + 0xffd00000)
+#define   WATCHDOG_TCNT                            (0x3c36)
+#define P_WATCHDOG_TCNT                            (volatile unsigned int *)((0x3c36  << 2) + 0xffd00000)
+#define   WATCHDOG_RST                             (0x3c37)
+#define P_WATCHDOG_RST                             (volatile unsigned int *)((0x3c37  << 2) + 0xffd00000)
+// -----------------------------------------------------------
+#define   AHB_ARBITER_REG                          (0x3c42)
+#define P_AHB_ARBITER_REG                          (volatile unsigned int *)((0x3c42  << 2) + 0xffd00000)
+#define   AHB_ARBDEC_REG                           (0x3c43)
+#define P_AHB_ARBDEC_REG                           (volatile unsigned int *)((0x3c43  << 2) + 0xffd00000)
+#define   AHB_ARBITER2_REG                         (0x3c4a)
+#define P_AHB_ARBITER2_REG                         (volatile unsigned int *)((0x3c4a  << 2) + 0xffd00000)
+#define   DEVICE_MMCP_CNTL                         (0x3c4b)
+#define P_DEVICE_MMCP_CNTL                         (volatile unsigned int *)((0x3c4b  << 2) + 0xffd00000)
+#define   AUDIO_MMCP_CNTL                          (0x3c4c)
+#define P_AUDIO_MMCP_CNTL                          (volatile unsigned int *)((0x3c4c  << 2) + 0xffd00000)
+// -----------------------------------------------------------
+#define   ISA_TIMER_MUX                            (0x3c50)
+#define P_ISA_TIMER_MUX                            (volatile unsigned int *)((0x3c50  << 2) + 0xffd00000)
+#define   ISA_TIMERA                               (0x3c51)
+#define P_ISA_TIMERA                               (volatile unsigned int *)((0x3c51  << 2) + 0xffd00000)
+#define   ISA_TIMERB                               (0x3c52)
+#define P_ISA_TIMERB                               (volatile unsigned int *)((0x3c52  << 2) + 0xffd00000)
+#define   ISA_TIMERC                               (0x3c53)
+#define P_ISA_TIMERC                               (volatile unsigned int *)((0x3c53  << 2) + 0xffd00000)
+#define   ISA_TIMERD                               (0x3c54)
+#define P_ISA_TIMERD                               (volatile unsigned int *)((0x3c54  << 2) + 0xffd00000)
+#define   FBUF_ADDR                                (0x3c56)
+#define P_FBUF_ADDR                                (volatile unsigned int *)((0x3c56  << 2) + 0xffd00000)
+    #define VIDEO_FRM_BUF_MSB_BIT      23
+    #define VIDEO_FRM_BUF_LSB_BIT       2
+#define   SDRAM_CTL0                               (0x3c57)
+#define P_SDRAM_CTL0                               (volatile unsigned int *)((0x3c57  << 2) + 0xffd00000)
+#define   SDRAM_CTL2                               (0x3c58)
+#define P_SDRAM_CTL2                               (volatile unsigned int *)((0x3c58  << 2) + 0xffd00000)
+//`define AO_CPU_CTL                          8'h59
+#define   SDRAM_CTL4                               (0x3c5a)
+#define P_SDRAM_CTL4                               (volatile unsigned int *)((0x3c5a  << 2) + 0xffd00000)
+#define   SDRAM_CTL5                               (0x3c5b)
+#define P_SDRAM_CTL5                               (volatile unsigned int *)((0x3c5b  << 2) + 0xffd00000)
+#define   SDRAM_CTL6                               (0x3c5c)
+#define P_SDRAM_CTL6                               (volatile unsigned int *)((0x3c5c  << 2) + 0xffd00000)
+#define   SDRAM_CTL7                               (0x3c5d)
+#define P_SDRAM_CTL7                               (volatile unsigned int *)((0x3c5d  << 2) + 0xffd00000)
+#define   SDRAM_CTL8                               (0x3c5e)
+#define P_SDRAM_CTL8                               (volatile unsigned int *)((0x3c5e  << 2) + 0xffd00000)
+#define   AHB_MP4_MC_CTL                           (0x3c5f)
+#define P_AHB_MP4_MC_CTL                           (volatile unsigned int *)((0x3c5f  << 2) + 0xffd00000)
+#define   MEDIA_CPU_PCR                            (0x3c60)
+#define P_MEDIA_CPU_PCR                            (volatile unsigned int *)((0x3c60  << 2) + 0xffd00000)
+#define   MEDIA_CPU_CTL                            (0x3c61)
+#define P_MEDIA_CPU_CTL                            (volatile unsigned int *)((0x3c61  << 2) + 0xffd00000)
+#define   ISA_TIMERE                               (0x3c62)
+#define P_ISA_TIMERE                               (volatile unsigned int *)((0x3c62  << 2) + 0xffd00000)
+#define   ISA_TIMERE_HI                            (0x3c63)
+#define P_ISA_TIMERE_HI                            (volatile unsigned int *)((0x3c63  << 2) + 0xffd00000)
+#define   ISA_TIMER_MUX1                           (0x3c64)
+#define P_ISA_TIMER_MUX1                           (volatile unsigned int *)((0x3c64  << 2) + 0xffd00000)
+#define   ISA_TIMERF                               (0x3c65)
+#define P_ISA_TIMERF                               (volatile unsigned int *)((0x3c65  << 2) + 0xffd00000)
+#define   ISA_TIMERG                               (0x3c66)
+#define P_ISA_TIMERG                               (volatile unsigned int *)((0x3c66  << 2) + 0xffd00000)
+#define   ISA_TIMERH                               (0x3c67)
+#define P_ISA_TIMERH                               (volatile unsigned int *)((0x3c67  << 2) + 0xffd00000)
+#define   ISA_TIMERI                               (0x3c68)
+#define P_ISA_TIMERI                               (volatile unsigned int *)((0x3c68  << 2) + 0xffd00000)
+// ---------------------------------------------
+#define   ABUF_WR_CTL0                             (0x3c70)
+#define P_ABUF_WR_CTL0                             (volatile unsigned int *)((0x3c70  << 2) + 0xffd00000)
+    #define ABUF_WR_INT_EN	    31
+    #define ABUF_WR_INT_POS_MSB      30
+    #define ABUF_WR_INT_POS_LSB      16
+    #define ABUF_WR_BLK_SIZE_MSB     14
+    #define ABUF_WR_BLK_SIZE_LSB      0
+#define   ABUF_WR_CTL1                             (0x3c71)
+#define P_ABUF_WR_CTL1                             (volatile unsigned int *)((0x3c71  << 2) + 0xffd00000)
+    #define ABUF_WR_INT_EN	    31
+    #define ABUF_WR_INT_POS_MSB      30
+    #define ABUF_WR_INT_POS_LSB      16
+    #define ABUF_WR_BLK_SIZE_MSB     14
+    #define ABUF_WR_BLK_SIZE_LSB      0
+#define   ABUF_WR_CTL2                             (0x3c72)
+#define P_ABUF_WR_CTL2                             (volatile unsigned int *)((0x3c72  << 2) + 0xffd00000)
+    #define ABUF_WR_CUR_FF_CNT_MSB   21
+    #define ABUF_WR_CUR_FF_CNT_LSB   16
+    #define ABUF_WR_CUR_BLK_MSB      14
+    #define ABUF_WR_CUR_BLK_LSB       0
+#define   ABUF_WR_CTL3                             (0x3c73)
+#define P_ABUF_WR_CTL3                             (volatile unsigned int *)((0x3c73  << 2) + 0xffd00000)
+    #define ABUF_WR_AHB_RST_PLS       3
+    #define ABUF_WR_FF_CLR_PLS        2
+    #define ABUF_WR_PLY_RPT_LVL	     1
+    #define ABUF_WR_FF_PAUSE_LVL      0
+#define   ABUF_RD_CTL0                             (0x3c74)
+#define P_ABUF_RD_CTL0                             (volatile unsigned int *)((0x3c74  << 2) + 0xffd00000)
+#define   ABUF_RD_CTL1                             (0x3c75)
+#define P_ABUF_RD_CTL1                             (volatile unsigned int *)((0x3c75  << 2) + 0xffd00000)
+    #define ABUF_RD_INT_EN	    31
+    #define ABUF_RD_INT_POS_MSB      30
+    #define ABUF_RD_INT_POS_LSB      16
+    #define ABUF_RD_BLK_SIZE_MSB     14
+    #define ABUF_RD_BLK_SIZE_LSB      0
+#define   ABUF_RD_CTL2                             (0x3c76)
+#define P_ABUF_RD_CTL2                             (volatile unsigned int *)((0x3c76  << 2) + 0xffd00000)
+    #define ABUF_RD_CUR_FF_CNT_MSB   21
+    #define ABUF_RD_CUR_FF_CNT_LSB   16
+    #define ABUF_RD_CUR_BLK_MSB      14
+    #define ABUF_RD_CUR_BLK_LSB       0
+#define   ABUF_RD_CTL3                             (0x3c77)
+#define P_ABUF_RD_CTL3                             (volatile unsigned int *)((0x3c77  << 2) + 0xffd00000)
+    #define ABUF_RD_PLY_ONCE_PLS      4
+    #define ABUF_RD_AHB_RST_PLS       3
+    #define ABUF_RD_FF_CLR_PLS        2
+    #define ABUF_RD_PLY_RPT_LVL	     1
+    #define ABUF_RD_FF_PAUSE_LVL      0
+#define   ABUF_ARB_CTL0                            (0x3c78)
+#define P_ABUF_ARB_CTL0                            (volatile unsigned int *)((0x3c78  << 2) + 0xffd00000)
+#define   ABUF_FIFO_CTL0                           (0x3c79)
+#define P_ABUF_FIFO_CTL0                           (volatile unsigned int *)((0x3c79  << 2) + 0xffd00000)
+    #define AIUout_FIFO_THRESHOLD_MSB 11
+    #define AIUout_FIFO_THRESHOLD_LSB 6
+    #define AIUin_FIFO_THRESHOLD_MSB  5
+    #define AIUin_FIFO_THRESHOLD_LSB  0
+// ---------------------------------------------
+#define   AHB_BRIDGE_CNTL_WR                       (0x3c80)
+#define P_AHB_BRIDGE_CNTL_WR                       (volatile unsigned int *)((0x3c80  << 2) + 0xffd00000)
+#define   AHB_BRIDGE_REMAP0                        (0x3c81)
+#define P_AHB_BRIDGE_REMAP0                        (volatile unsigned int *)((0x3c81  << 2) + 0xffd00000)
+#define   AHB_BRIDGE_REMAP1                        (0x3c82)
+#define P_AHB_BRIDGE_REMAP1                        (volatile unsigned int *)((0x3c82  << 2) + 0xffd00000)
+#define   AHB_BRIDGE_REMAP2                        (0x3c83)
+#define P_AHB_BRIDGE_REMAP2                        (volatile unsigned int *)((0x3c83  << 2) + 0xffd00000)
+#define   AHB_BRIDGE_REMAP3                        (0x3c84)
+#define P_AHB_BRIDGE_REMAP3                        (volatile unsigned int *)((0x3c84  << 2) + 0xffd00000)
+#define   AHB_BRIDGE_CNTL_REG1                     (0x3c85)
+#define P_AHB_BRIDGE_CNTL_REG1                     (volatile unsigned int *)((0x3c85  << 2) + 0xffd00000)
+#define   AHB_BRIDGE_CNTL_REG2                     (0x3c86)
+#define P_AHB_BRIDGE_CNTL_REG2                     (volatile unsigned int *)((0x3c86  << 2) + 0xffd00000)
+// ---------------------------------------------
+// ----------------------------------------------
+// `define SYS_CPU_0_IRQ_IN0_INTR_STAT         8'h90
+// `define SYS_CPU_0_IRQ_IN0_INTR_STAT_CLR     8'h91
+// `define SYS_CPU_0_IRQ_IN0_INTR_MASK         8'h92
+// `define SYS_CPU_0_IRQ_IN0_INTR_FIRQ_SEL     8'h93
+// `define SYS_CPU_0_IRQ_IN1_INTR_STAT         8'h94
+// `define SYS_CPU_0_IRQ_IN1_INTR_STAT_CLR     8'h95
+// `define SYS_CPU_0_IRQ_IN1_INTR_MASK         8'h96
+// `define SYS_CPU_0_IRQ_IN1_INTR_FIRQ_SEL     8'h97
+// `define SYS_CPU_0_IRQ_IN2_INTR_STAT         8'h98
+// `define SYS_CPU_0_IRQ_IN2_INTR_STAT_CLR     8'h99
+// `define SYS_CPU_0_IRQ_IN2_INTR_MASK         8'h9a
+// `define SYS_CPU_0_IRQ_IN2_INTR_FIRQ_SEL     8'h9b
+// `define SYS_CPU_0_IRQ_IN3_INTR_STAT         8'h9c
+// `define SYS_CPU_0_IRQ_IN3_INTR_STAT_CLR     8'h9d
+// `define SYS_CPU_0_IRQ_IN3_INTR_MASK         8'h9e
+// `define SYS_CPU_0_IRQ_IN3_INTR_FIRQ_SEL     8'h9f
+// ----------------------------------------------
+// `define SYS_CPU_1_IRQ_IN0_INTR_STAT         8'ha0
+// `define SYS_CPU_1_IRQ_IN0_INTR_STAT_CLR     8'ha1
+// `define SYS_CPU_1_IRQ_IN0_INTR_MASK         8'ha2
+// `define SYS_CPU_1_IRQ_IN0_INTR_FIRQ_SEL     8'ha3
+//
+// `define SYS_CPU_1_IRQ_IN1_INTR_STAT         8'ha4
+// `define SYS_CPU_1_IRQ_IN1_INTR_STAT_CLR     8'ha5
+// `define SYS_CPU_1_IRQ_IN1_INTR_MASK         8'ha6
+// `define SYS_CPU_1_IRQ_IN1_INTR_FIRQ_SEL     8'ha7
+//
+// `define SYS_CPU_1_IRQ_IN2_INTR_STAT         8'ha8
+// `define SYS_CPU_1_IRQ_IN2_INTR_STAT_CLR     8'ha9
+// `define SYS_CPU_1_IRQ_IN2_INTR_MASK         8'haa
+// `define SYS_CPU_1_IRQ_IN2_INTR_FIRQ_SEL     8'hab
+//
+// `define SYS_CPU_1_IRQ_IN3_INTR_STAT         8'hac
+// `define SYS_CPU_1_IRQ_IN3_INTR_STAT_CLR     8'had
+// `define SYS_CPU_1_IRQ_IN3_INTR_MASK         8'hae
+// `define SYS_CPU_1_IRQ_IN3_INTR_FIRQ_SEL     8'haf
+// ----------------------------------------------
+// `define MEDIA_CPU_IRQ_IN4_INTR_STAT         8'hb0
+// `define MEDIA_CPU_IRQ_IN4_INTR_STAT_CLR     8'hb1
+// `define MEDIA_CPU_IRQ_IN4_INTR_MASK         8'hb2
+// `define MEDIA_CPU_IRQ_IN4_INTR_FIRQ_SEL     8'hb3
+// `define SYS_CPU_0_IRQ_IN4_INTR_STAT         8'hb4
+// `define SYS_CPU_0_IRQ_IN4_INTR_STAT_CLR     8'hb5
+// `define SYS_CPU_0_IRQ_IN4_INTR_MASK         8'hb6
+// `define SYS_CPU_0_IRQ_IN4_INTR_FIRQ_SEL     8'hb7
+// `define SYS_CPU_1_IRQ_IN4_INTR_STAT         8'hb8
+// `define SYS_CPU_1_IRQ_IN4_INTR_STAT_CLR     8'hb9
+// `define SYS_CPU_1_IRQ_IN4_INTR_MASK         8'hba
+// `define SYS_CPU_1_IRQ_IN4_INTR_FIRQ_SEL     8'hbb
+// `define SYS_CPU_2_IRQ_IN4_INTR_STAT         8'hbc
+// `define SYS_CPU_2_IRQ_IN4_INTR_STAT_CLR     8'hbd
+// `define SYS_CPU_2_IRQ_IN4_INTR_MASK         8'hbe
+// `define SYS_CPU_2_IRQ_IN4_INTR_FIRQ_SEL     8'hbf
+// ----------------------------------------------
+// `define SYS_CPU_2_IRQ_IN0_INTR_STAT         8'hc0
+// `define SYS_CPU_2_IRQ_IN0_INTR_STAT_CLR     8'hc1
+// `define SYS_CPU_2_IRQ_IN0_INTR_MASK         8'hc2
+// `define SYS_CPU_2_IRQ_IN0_INTR_FIRQ_SEL     8'hc3
+// `define SYS_CPU_2_IRQ_IN1_INTR_STAT         8'hc4
+// `define SYS_CPU_2_IRQ_IN1_INTR_STAT_CLR     8'hc5
+// `define SYS_CPU_2_IRQ_IN1_INTR_MASK         8'hc6
+// `define SYS_CPU_2_IRQ_IN1_INTR_FIRQ_SEL     8'hc7
+// `define SYS_CPU_2_IRQ_IN2_INTR_STAT         8'hc8
+// `define SYS_CPU_2_IRQ_IN2_INTR_STAT_CLR     8'hc9
+// `define SYS_CPU_2_IRQ_IN2_INTR_MASK         8'hca
+// `define SYS_CPU_2_IRQ_IN2_INTR_FIRQ_SEL     8'hcb
+// `define SYS_CPU_2_IRQ_IN3_INTR_STAT         8'hcc
+// `define SYS_CPU_2_IRQ_IN3_INTR_STAT_CLR     8'hcd
+// `define SYS_CPU_2_IRQ_IN3_INTR_MASK         8'hce
+// `define SYS_CPU_2_IRQ_IN3_INTR_FIRQ_SEL     8'hcf
+// ----------------------------------------------
+// `define SYS_CPU_3_IRQ_IN0_INTR_STAT         8'hd0
+// `define SYS_CPU_3_IRQ_IN0_INTR_STAT_CLR     8'hd1
+// `define SYS_CPU_3_IRQ_IN0_INTR_MASK         8'hd2
+// `define SYS_CPU_3_IRQ_IN0_INTR_FIRQ_SEL     8'hd3
+// `define SYS_CPU_3_IRQ_IN1_INTR_STAT         8'hd4
+// `define SYS_CPU_3_IRQ_IN1_INTR_STAT_CLR     8'hd5
+// `define SYS_CPU_3_IRQ_IN1_INTR_MASK         8'hd6
+// `define SYS_CPU_3_IRQ_IN1_INTR_FIRQ_SEL     8'hd7
+// `define SYS_CPU_3_IRQ_IN2_INTR_STAT         8'hd8
+// `define SYS_CPU_3_IRQ_IN2_INTR_STAT_CLR     8'hd9
+// `define SYS_CPU_3_IRQ_IN2_INTR_MASK         8'hda
+// `define SYS_CPU_3_IRQ_IN2_INTR_FIRQ_SEL     8'hdb
+// `define SYS_CPU_3_IRQ_IN3_INTR_STAT         8'hdc
+// `define SYS_CPU_3_IRQ_IN3_INTR_STAT_CLR     8'hdd
+// `define SYS_CPU_3_IRQ_IN3_INTR_MASK         8'hde
+// `define SYS_CPU_3_IRQ_IN3_INTR_FIRQ_SEL     8'hdf
+// ----------------------------------------------
+// `define SYS_CPU_3_IRQ_IN4_INTR_STAT         8'he0
+// `define SYS_CPU_3_IRQ_IN4_INTR_STAT_CLR     8'he1
+// `define SYS_CPU_3_IRQ_IN4_INTR_MASK         8'he2
+// `define SYS_CPU_3_IRQ_IN4_INTR_FIRQ_SEL     8'he3
+// `define MEDIA_CPU_IRQ_IN5_INTR_STAT         8'he4
+// `define MEDIA_CPU_IRQ_IN5_INTR_STAT_CLR     8'he5
+// `define MEDIA_CPU_IRQ_IN5_INTR_MASK         8'he6
+// `define MEDIA_CPU_IRQ_IN5_INTR_FIRQ_SEL     8'he7
+// `define SYS_CPU_0_IRQ_IN5_INTR_STAT         8'he8
+// `define SYS_CPU_0_IRQ_IN5_INTR_STAT_CLR     8'he9
+// `define SYS_CPU_0_IRQ_IN5_INTR_MASK         8'hea
+// `define SYS_CPU_0_IRQ_IN5_INTR_FIRQ_SEL     8'heb
+//
+// Closing file:  isa_reg.h
+//
+//`include "bt656_reg.h"
+//`include "pdm_reg.h"
+//========================================================================
+//  Global Control Registers			    (12'h000 - 12'h0ff)
+//
+//========================================================================
+// -----------------------------------------------
+// CBUS_BASE:  RESET_CBUS_BASE = 0x04
+// -----------------------------------------------
+#define   VERSION_CTRL                             (0x0400)
+#define P_VERSION_CTRL                             (volatile unsigned int *)((0x0400  << 2) + 0xffd00000)
+#define   RESET0_REGISTER                          (0x0401)
+#define P_RESET0_REGISTER                          (volatile unsigned int *)((0x0401  << 2) + 0xffd00000)
+#define   RESET1_REGISTER                          (0x0402)
+#define P_RESET1_REGISTER                          (volatile unsigned int *)((0x0402  << 2) + 0xffd00000)
+#define   RESET2_REGISTER                          (0x0403)
+#define P_RESET2_REGISTER                          (volatile unsigned int *)((0x0403  << 2) + 0xffd00000)
+#define   RESET3_REGISTER                          (0x0404)
+#define P_RESET3_REGISTER                          (volatile unsigned int *)((0x0404  << 2) + 0xffd00000)
+#define   RESET4_REGISTER                          (0x0405)
+#define P_RESET4_REGISTER                          (volatile unsigned int *)((0x0405  << 2) + 0xffd00000)
+#define   RESET5_REGISTER                          (0x0406)
+#define P_RESET5_REGISTER                          (volatile unsigned int *)((0x0406  << 2) + 0xffd00000)
+#define   RESET6_REGISTER                          (0x0407)
+#define P_RESET6_REGISTER                          (volatile unsigned int *)((0x0407  << 2) + 0xffd00000)
+#define   RESET7_REGISTER                          (0x0408)
+#define P_RESET7_REGISTER                          (volatile unsigned int *)((0x0408  << 2) + 0xffd00000)
+#define   RESET0_MASK                              (0x0410)
+#define P_RESET0_MASK                              (volatile unsigned int *)((0x0410  << 2) + 0xffd00000)
+#define   RESET1_MASK                              (0x0411)
+#define P_RESET1_MASK                              (volatile unsigned int *)((0x0411  << 2) + 0xffd00000)
+#define   RESET2_MASK                              (0x0412)
+#define P_RESET2_MASK                              (volatile unsigned int *)((0x0412  << 2) + 0xffd00000)
+#define   RESET3_MASK                              (0x0413)
+#define P_RESET3_MASK                              (volatile unsigned int *)((0x0413  << 2) + 0xffd00000)
+#define   RESET4_MASK                              (0x0414)
+#define P_RESET4_MASK                              (volatile unsigned int *)((0x0414  << 2) + 0xffd00000)
+#define   RESET5_MASK                              (0x0415)
+#define P_RESET5_MASK                              (volatile unsigned int *)((0x0415  << 2) + 0xffd00000)
+#define   RESET6_MASK                              (0x0416)
+#define P_RESET6_MASK                              (volatile unsigned int *)((0x0416  << 2) + 0xffd00000)
+#define   CRT_MASK                                 (0x0417)
+#define P_CRT_MASK                                 (volatile unsigned int *)((0x0417  << 2) + 0xffd00000)
+#define   RESET7_MASK                              (0x0418)
+#define P_RESET7_MASK                              (volatile unsigned int *)((0x0418  << 2) + 0xffd00000)
+#define   RESET0_LEVEL                             (0x0420)
+#define P_RESET0_LEVEL                             (volatile unsigned int *)((0x0420  << 2) + 0xffd00000)
+#define   RESET1_LEVEL                             (0x0421)
+#define P_RESET1_LEVEL                             (volatile unsigned int *)((0x0421  << 2) + 0xffd00000)
+#define   RESET2_LEVEL                             (0x0422)
+#define P_RESET2_LEVEL                             (volatile unsigned int *)((0x0422  << 2) + 0xffd00000)
+#define   RESET3_LEVEL                             (0x0423)
+#define P_RESET3_LEVEL                             (volatile unsigned int *)((0x0423  << 2) + 0xffd00000)
+#define   RESET4_LEVEL                             (0x0424)
+#define P_RESET4_LEVEL                             (volatile unsigned int *)((0x0424  << 2) + 0xffd00000)
+#define   RESET5_LEVEL                             (0x0425)
+#define P_RESET5_LEVEL                             (volatile unsigned int *)((0x0425  << 2) + 0xffd00000)
+#define   RESET6_LEVEL                             (0x0426)
+#define P_RESET6_LEVEL                             (volatile unsigned int *)((0x0426  << 2) + 0xffd00000)
+#define   RESET7_LEVEL                             (0x0427)
+#define P_RESET7_LEVEL                             (volatile unsigned int *)((0x0427  << 2) + 0xffd00000)
+//======================================
+//  Reset Register Bits
+//
+//======================================
+    #define HIU_RESET	    0x0001
+    #define VLD_RESET	    0x0002
+    #define IQIDCT_RESET	0x0004
+    #define MC_RESET	    0x0008
+    #define DCU_RESET	    0x0010
+    #define VIU_RESET	    0x0020
+    #define AIU_RESET	    0x0040
+    #define CPU_RESET	    0x0080
+    #define AC3_RESET	    0x0100
+    #define MPEG_RESET	    0x0200
+//-----------------------------------------------------------
+// PARSER
+//-----------------------------------------------------------
+// -----------------------------------------------
+// CBUS_BASE:  PARSER_CBUS_BASE = 0x38
+// -----------------------------------------------
+// bit 31:8 -- es_pack_size
+// bit 7:6 -- es_type     00-Video, 01-Audio, 10-Subtitle
+// bit 5 -- es_write
+// bit 4 -- es_passthrough
+// bit 3 -- insert_before_es_write
+// bit 2 -- discard_cmd
+// bit 1 -- search_cmd
+// bit 0 -- Parser Busy
+#define   PARSER_CONTROL                           (0x3860)
+#define P_PARSER_CONTROL                           (volatile unsigned int *)((0x3860  << 2) + 0xffd00000)
+// Write
+//   bit 31:0 begin address for parser fetch
+// Read
+//   32 bit current fetch address
+#define   PARSER_FETCH_ADDR                        (0x3861)
+#define P_PARSER_FETCH_ADDR                        (volatile unsigned int *)((0x3861  << 2) + 0xffd00000)
+// Write
+//   bit 31 circle buffer indicator
+//   bit 30 check_buffer_stop_addr
+//   bit 29:27 fetch endian
+//   bit 26:0 buffer size ( Bytes )
+// Special command:
+//   when bit 26:0 == 27'h0
+//     then bit 29    -- stream_passthrough_enable
+//          bit 28:27 -- stream_passthrough_type
+// Read
+//   6:5 cmd_rd_ptr
+//   4:3 cmd_wr_ptr
+//   2:0 cmd_number
+#define   PARSER_FETCH_CMD                         (0x3862)
+#define P_PARSER_FETCH_CMD                         (volatile unsigned int *)((0x3862  << 2) + 0xffd00000)
+// 31:0 stop_fetch_addr
+#define   PARSER_FETCH_STOP_ADDR                   (0x3863)
+#define P_PARSER_FETCH_STOP_ADDR                   (volatile unsigned int *)((0x3863  << 2) + 0xffd00000)
+// 31:0 stop_fetch_addr - current_write_addr  // read only
+#define   PARSER_FETCH_LEVEL                       (0x3864)
+#define P_PARSER_FETCH_LEVEL                       (volatile unsigned int *)((0x3864  << 2) + 0xffd00000)
+// bit 31 - fetch_dma_urgent
+// bit 30 - stream_dma_urgent
+// bit 29 - force_pfifo_ren
+// bit 28 - pfifo_peak_enable
+// bit 27 - enable_free_clk_parser_reg
+// bit 26 -
+// bit 25:24 - parser_src_sel (00 - fetch, 01 - aux1, 10 - aux2 11 - aux3)
+// bit 23:16 - pfifo_empty_count
+// bit 15:12 - max_es_write_cycle (x16x64bits)
+// 11:10 - start code width ( 00-8bits, 01-16bits, 10-24bits, 11-32bits )
+// 9:8 - pfifo data access width ( 00-8bits, 01-16bits, 10-24bits, 11-32bits )
+// 7:0 - empty room for fetch data ( max_fetch_cycle ) x64 bits
+#define   PARSER_CONFIG                            (0x3865)
+#define P_PARSER_CONFIG                            (volatile unsigned int *)((0x3865  << 2) + 0xffd00000)
+// bit 24:16 -- pfifo_level
+// bit 9:0 -- point to byte address
+#define   PFIFO_WR_PTR                             (0x3866)
+#define P_PFIFO_WR_PTR                             (volatile unsigned int *)((0x3866  << 2) + 0xffd00000)
+// bit 9:0 -- point to byte address
+#define   PFIFO_RD_PTR                             (0x3867)
+#define P_PFIFO_RD_PTR                             (volatile unsigned int *)((0x3867  << 2) + 0xffd00000)
+// bit 31:0 -- 8/16/24/32 bits data acording to pfifo_data_width
+#define   PFIFO_DATA                               (0x3868)
+#define P_PFIFO_DATA                               (volatile unsigned int *)((0x3868  << 2) + 0xffd00000)
+// bit 31:0 -- parser search pattern
+#define   PARSER_SEARCH_PATTERN                    (0x3869)
+#define P_PARSER_SEARCH_PATTERN                    (volatile unsigned int *)((0x3869  << 2) + 0xffd00000)
+// bit 31:0 -- parser search mask ( 0 - disable bit match test )
+#define   PARSER_SEARCH_MASK                       (0x386a)
+#define P_PARSER_SEARCH_MASK                       (volatile unsigned int *)((0x386a  << 2) + 0xffd00000)
+// bit 31:16 -- parser_int_disable_count
+// bit 15:8 -- Parser interrupt enable for host cpu
+// bit 7:0 -- Parser interrupt enable for Amrisc
+#define   PARSER_INT_ENABLE                        (0x386b)
+#define P_PARSER_INT_ENABLE                        (volatile unsigned int *)((0x386b  << 2) + 0xffd00000)
+// Bit 7 -- fetch_cmd_finished
+// Bit 6:5 -- reserved
+// Bit 4 -- parse finished
+// Bit 3 -- discard finished
+// Bit 2 -- insert zero finished
+// Bit 1 -- Action Finished Except Search Start Code
+// Bit 0 -- Search match interrupt (StartCode found)
+// Read 7:0 int status
+// Write will clear (bit based)
+#define   PARSER_INT_STATUS                        (0x386c)
+#define P_PARSER_INT_STATUS                        (volatile unsigned int *)((0x386c  << 2) + 0xffd00000)
+// 15    - SCR_32_READ_OUT (Read Only)
+// 14    - SCR_32_data_valid
+// 13    - SCR_32_data
+// 12    - SCR_count_en
+// 11:0  - SCR90K_DIV
+#define   PARSER_SCR_CTL                           (0x386d)
+#define P_PARSER_SCR_CTL                           (volatile unsigned int *)((0x386d  << 2) + 0xffd00000)
+// bit 31:0 SCR value
+#define   PARSER_SCR                               (0x386e)
+#define P_PARSER_SCR                               (volatile unsigned int *)((0x386e  << 2) + 0xffd00000)
+// bit 31:24 -- insert_loop_number
+// bit 23:21 --
+// bit 20:16 -- insert_byte_number
+// bit 15:0 -- discard number
+#define   PARSER_PARAMETER                         (0x386f)
+#define P_PARSER_PARAMETER                         (volatile unsigned int *)((0x386f  << 2) + 0xffd00000)
+// bit 31:0 -- insert data // write only
+// write to PARSER_CONTROL will reset the write position
+// continous write to this address can write upto 16 bytes
+#define   PARSER_INSERT_DATA                       (0x3870)
+#define P_PARSER_INSERT_DATA                       (volatile unsigned int *)((0x3870  << 2) + 0xffd00000)
+// Bit 31:24 -- Reserved Stream_ID
+// Bit 23:16 -- Sub Stream_ID
+// Bit 15:8  -- Audio Stream_ID
+// Bit 7:0   -- Video Stream_ID
+#define   VAS_STREAM_ID                            (0x3871)
+#define P_VAS_STREAM_ID                            (volatile unsigned int *)((0x3871  << 2) + 0xffd00000)
+// Bit 31:0 -- VIDEO_DTS
+#define   VIDEO_DTS                                (0x3872)
+#define P_VIDEO_DTS                                (volatile unsigned int *)((0x3872  << 2) + 0xffd00000)
+// Bit 31:0 -- VIDEO_PTS
+#define   VIDEO_PTS                                (0x3873)
+#define P_VIDEO_PTS                                (volatile unsigned int *)((0x3873  << 2) + 0xffd00000)
+// Bit 31:0 -- VIDEO_PTS_DTS_WR_PTR
+#define   VIDEO_PTS_DTS_WR_PTR                     (0x3874)
+#define P_VIDEO_PTS_DTS_WR_PTR                     (volatile unsigned int *)((0x3874  << 2) + 0xffd00000)
+// Bit 31:0 -- AUDIO_PTS
+#define   AUDIO_PTS                                (0x3875)
+#define P_AUDIO_PTS                                (volatile unsigned int *)((0x3875  << 2) + 0xffd00000)
+// Bit 31:0 -- AUDIO_PTS_WR_PTR
+#define   AUDIO_PTS_WR_PTR                         (0x3876)
+#define P_AUDIO_PTS_WR_PTR                         (volatile unsigned int *)((0x3876  << 2) + 0xffd00000)
+// bit 31:20 -- stream_es_count ( Read Only)
+// bit 19 -- req_pending ( parser ddr_A_fifo ) (Read Only)
+// bit 18 -- stream_es_passthrough_enable
+// bit 17:16 -- stream_es_passthrough_type
+// bit 15:13 -- VIDEO2 Ees_write Endian
+// bit 12 -- VIDEO2 using manual read point
+// bit 11:9 -- SUB Ees_write Endian
+// bit 8 -- SUB using manual read point
+// bit 7:5 -- AUDIO Ees_write Endian
+// bit 4 -- AUDIO using manual read point
+// bit 3:1 -- VIDEO Ees_write Endian
+// bit 0 -- VIDEO using manual read point
+#define   PARSER_ES_CONTROL                        (0x3877)
+#define P_PARSER_ES_CONTROL                        (volatile unsigned int *)((0x3877  << 2) + 0xffd00000)
+// Bit 31:0 PFIFO_MONITOR
+#define   PFIFO_MONITOR                            (0x3878)
+#define P_PFIFO_MONITOR                            (volatile unsigned int *)((0x3878  << 2) + 0xffd00000)
+// --------------------------------------------
+// PARSER_VIDEO DDR Interface
+// --------------------------------------------
+// The PARSER_VIDEO start pointer into DDR memory is a 32-bit number
+// The Start pointer will automatically be truncated to land on
+// an 8-byte boundary.  That is, bits [2:0] = 0;
+#define   PARSER_VIDEO_START_PTR                   (0x3880)
+#define P_PARSER_VIDEO_START_PTR                   (volatile unsigned int *)((0x3880  << 2) + 0xffd00000)
+#define   PARSER_VIDEO_END_PTR                     (0x3881)
+#define P_PARSER_VIDEO_END_PTR                     (volatile unsigned int *)((0x3881  << 2) + 0xffd00000)
+// --------------------------------------------
+// PARSER_VIDEO Buffer Level Manager
+// --------------------------------------------
+#define   PARSER_VIDEO_WP                          (0x3882)
+#define P_PARSER_VIDEO_WP                          (volatile unsigned int *)((0x3882  << 2) + 0xffd00000)
+#define   PARSER_VIDEO_RP                          (0x3883)
+#define P_PARSER_VIDEO_RP                          (volatile unsigned int *)((0x3883  << 2) + 0xffd00000)
+#define   PARSER_VIDEO_HOLE                        (0x3884)
+#define P_PARSER_VIDEO_HOLE                        (volatile unsigned int *)((0x3884  << 2) + 0xffd00000)
+// --------------------------------------------
+// PARSER_AUDIO DDR Interface
+// --------------------------------------------
+// The PARSER_AUDIO start pointer into DDR memory is a 32-bit number
+// The Start pointer will automatically be truncated to land on
+// an 8-byte boundary.  That is, bits [2:0] = 0;
+#define   PARSER_AUDIO_START_PTR                   (0x3885)
+#define P_PARSER_AUDIO_START_PTR                   (volatile unsigned int *)((0x3885  << 2) + 0xffd00000)
+#define   PARSER_AUDIO_END_PTR                     (0x3886)
+#define P_PARSER_AUDIO_END_PTR                     (volatile unsigned int *)((0x3886  << 2) + 0xffd00000)
+// --------------------------------------------
+// PARSER_AUDIO Buffer Level Manager
+// --------------------------------------------
+#define   PARSER_AUDIO_WP                          (0x3887)
+#define P_PARSER_AUDIO_WP                          (volatile unsigned int *)((0x3887  << 2) + 0xffd00000)
+#define   PARSER_AUDIO_RP                          (0x3888)
+#define P_PARSER_AUDIO_RP                          (volatile unsigned int *)((0x3888  << 2) + 0xffd00000)
+#define   PARSER_AUDIO_HOLE                        (0x3889)
+#define P_PARSER_AUDIO_HOLE                        (volatile unsigned int *)((0x3889  << 2) + 0xffd00000)
+// --------------------------------------------
+// PARSER_SUB DDR Interface
+// --------------------------------------------
+// The PARSER_SUB start pointer into DDR memory is a 32-bit number
+// The Start pointer will automatically be truncated to land on
+// an 8-byte boundary.  That is, bits [2:0] = 0;
+#define   PARSER_SUB_START_PTR                     (0x388a)
+#define P_PARSER_SUB_START_PTR                     (volatile unsigned int *)((0x388a  << 2) + 0xffd00000)
+#define   PARSER_SUB_END_PTR                       (0x388b)
+#define P_PARSER_SUB_END_PTR                       (volatile unsigned int *)((0x388b  << 2) + 0xffd00000)
+// --------------------------------------------
+// PARSER_SUB Buffer Level Manager
+// --------------------------------------------
+#define   PARSER_SUB_WP                            (0x388c)
+#define P_PARSER_SUB_WP                            (volatile unsigned int *)((0x388c  << 2) + 0xffd00000)
+#define   PARSER_SUB_RP                            (0x388d)
+#define P_PARSER_SUB_RP                            (volatile unsigned int *)((0x388d  << 2) + 0xffd00000)
+#define   PARSER_SUB_HOLE                          (0x388e)
+#define P_PARSER_SUB_HOLE                          (volatile unsigned int *)((0x388e  << 2) + 0xffd00000)
+// Bit[31] dma_busy
+// Bit[30] cur_fetch_or_es_write
+// Bit[29:28] reserved
+// Bit[27:24] fetch_status
+// Bit[23:0] buffer_cycles_left
+#define   PARSER_FETCH_INFO                        (0x388f)
+#define P_PARSER_FETCH_INFO                        (volatile unsigned int *)((0x388f  << 2) + 0xffd00000)
+// Bit[31:28] ctl_status
+// Bit[27:24] insert_byte_offset
+// Bit[23:0] es_pack_left_cycle
+#define   PARSER_STATUS                            (0x3890)
+#define P_PARSER_STATUS                            (volatile unsigned int *)((0x3890  << 2) + 0xffd00000)
+// Bit [31:16] AUDIO_wrap_count
+// Bit  [15:0] VIDEO_wrap_count
+#define   PARSER_AV_WRAP_COUNT                     (0x3891)
+#define P_PARSER_AV_WRAP_COUNT                     (volatile unsigned int *)((0x3891  << 2) + 0xffd00000)
+// bit[29:24] A_brst_num_parser
+// bit[21:16] A_id_parser
+// bit[11:0] wrrsp_count_parser
+#define   WRRSP_PARSER                             (0x3892)
+#define P_WRRSP_PARSER                             (volatile unsigned int *)((0x3892  << 2) + 0xffd00000)
+// `define CSS_cmd             12'h200   // address of css command and indirect register
+// `define CSS_cntl            12'h201   // css control register
+// `define CSS_data            12'h202   // indirect register
+// `define CSS_id1_data  	    12'h203   // ID data for the first and second bytes
+// `define CSS_id2_data  	    12'h204   // ID data for the third and fourth bytes
+//CPPM registers
+// `define CPPM_IFIFO_CTRL		12'h210	  //CPPM input FIFO control
+// `define CPPM_C2BC_KEY		12'h211	  //CPPM C2 Block Cipher Key register
+// `define CPPM_C2BC_DIN		12'h212	  //CPPM C2 Block Cipher data input register
+// `define CPPM_C2BC_DOUT		12'h213   //CPPM C2 Block Cipher data result register
+// `define CPPM_CMD			12'h214   //CPPM command and control register
+// `define CPPM_CTRL_STATUS	12'h215   //CPPM control status, mainly for debug
+// `define CPPM_IFIFO_DATA		12'h216   //CPPM input FIFO data pop port, just for debug
+// --------------------------------------------
+// PARSER_VIDEO2 DDR Interface
+// --------------------------------------------
+// The PARSER_VIDEO2 start pointer into DDR memory is a 32-bit number
+// The Start pointer will automatically be truncated to land on
+// an 8-byte boundary.  That is, bits [2:0] = 0;
+#define   PARSER_VIDEO2_START_PTR                  (0x3893)
+#define P_PARSER_VIDEO2_START_PTR                  (volatile unsigned int *)((0x3893  << 2) + 0xffd00000)
+#define   PARSER_VIDEO2_END_PTR                    (0x3894)
+#define P_PARSER_VIDEO2_END_PTR                    (volatile unsigned int *)((0x3894  << 2) + 0xffd00000)
+// --------------------------------------------
+// PARSER_VIDEO2 Buffer Level Manager
+// --------------------------------------------
+#define   PARSER_VIDEO2_WP                         (0x3895)
+#define P_PARSER_VIDEO2_WP                         (volatile unsigned int *)((0x3895  << 2) + 0xffd00000)
+#define   PARSER_VIDEO2_RP                         (0x3896)
+#define P_PARSER_VIDEO2_RP                         (volatile unsigned int *)((0x3896  << 2) + 0xffd00000)
+#define   PARSER_VIDEO2_HOLE                       (0x3897)
+#define P_PARSER_VIDEO2_HOLE                       (volatile unsigned int *)((0x3897  << 2) + 0xffd00000)
+// Bit [31:16] AUDIO_wrap_count
+// Bit  [15:0] VIDEO2_wrap_count
+#define   PARSER_AV2_WRAP_COUNT                    (0x3898)
+#define P_PARSER_AV2_WRAP_COUNT                    (volatile unsigned int *)((0x3898  << 2) + 0xffd00000)
+// DDR registers
+//`define USE_DDR2
+//========================================================================
+//  DVIN Registers				    (12'h2e0 - 12'h2ef)
+//
+//========================================================================
+// -----------------------------------------------
+// CBUS_BASE:  DVIN_CBUS_BASE = 0x08
+// -----------------------------------------------
+// Bit 31:12 Rsrv
+// Bit 11:10 RW, vs_hs_tim_ctrl: Controls which edge of HS/VS the active pixel/line is related:
+//                               bit[0]=0: start of active pixel is counted from the rising edge of HS;
+//                               bit[0]=1: start of active pixel is counted from the falling edge of HS;
+//                               bit[1]=0: start of active line is counted from the rising edge of VS;
+//                               bit[1]=1: start of active line is counted from the falling edge of VS.
+// Bit     9 RW, sample_clk_neg: 1=invert input dvin_clk
+// Bit  8: 7 RW, mode_422to444: 0=No convertion; 1=Rsrv; 2=Convert 422 to 444, use previous C value; 3=Convert 422 to 444, use average C value.
+// Bit  6: 5 RW, de_mode: 0x=ignore input DE signal, use internal detection to to determine active pixel;
+//                        10=during active pixel, if DE is low, replace input data with the last good data before DE goes low;
+//                        11=Active pixel is determined by DE, no internal detection.
+// Bit     4 RW, ext_field_sel: 1=Select external input Field, 0=Use internal detected Field.
+// Bit     3 RW, field_pol_inv: set to 1 if input Field is low active and ext_field_sel=1
+// Bit     2 RW, de_pol_inv: set to 1 if input DE is low active
+// Bit     1 RW, vs_pol_inv: set to 1 if input VS is low active
+// Bit     0 RW, hs_pol_inv: set to 1 if input HS is low active
+#define   DVIN_FRONT_END_CTRL                      (0x08e0)
+#define P_DVIN_FRONT_END_CTRL                      (volatile unsigned int *)((0x08e0  << 2) + 0xffd00000)
+// Bit 31:28 Reserved
+// Bit 27:16 RW, hs_lead_vs_odd_max: Criteria for HW detecting odd/even Field internally: max clock cycles allowed for HS
+//                                   active edge to lead before VS active edge, in odd field. Failing it the field is even.
+// Bit 15:12 Reserved
+// Bit 11: 0 RW, hs_lead_vs_odd_min: Criteria for HW detecting odd/even Field internally -- min clock cycles allowed for HS
+//                                   active edge to lead before VS active edge, in odd field. Failing it the field is even.
+#define   DVIN_HS_LEAD_VS_ODD                      (0x08e1)
+#define P_DVIN_HS_LEAD_VS_ODD                      (volatile unsigned int *)((0x08e1  << 2) + 0xffd00000)
+// Bit 31:28 Reserved
+// Bit 27:16 RW, active_start_pix_fo
+// Bit 15:12 Reserved
+// Bit 11: 0 RW, active_start_pix_fe
+#define   DVIN_ACTIVE_START_PIX                    (0x08e2)
+#define P_DVIN_ACTIVE_START_PIX                    (volatile unsigned int *)((0x08e2  << 2) + 0xffd00000)
+// Bit 31:28 Reserved
+// Bit 27:16 RW, active_start_line_fo
+// Bit 15:12 Reserved
+// Bit 11: 0 RW, active_start_line_fe
+#define   DVIN_ACTIVE_START_LINE                   (0x08e3)
+#define P_DVIN_ACTIVE_START_LINE                   (volatile unsigned int *)((0x08e3  << 2) + 0xffd00000)
+// Bit 31:28 Reserved
+// Bit 27:16 RW, field_height_m1
+// Bit 15:12 Reserved
+// Bit 11: 0 RW, line_width_m1
+#define   DVIN_DISPLAY_SIZE                        (0x08e4)
+#define P_DVIN_DISPLAY_SIZE                        (volatile unsigned int *)((0x08e4  << 2) + 0xffd00000)
+// Bit    31 Rsrv
+// Bit    30 R,  vs_in_polarity: 0=active high; 1=active low.
+// Bit    29 R,  hs_in_polarity: 0=active high; 1=active low.
+// Bit    28 R,  field_odd
+// Bit 27:16 R,  hs_lead_vs_cnt
+// Bit 15: 4 Rsrv
+// Bit  3: 1 RW, data_comp_map: Re-map input data to form YCbCr.
+//                              0=YCbCr is {[29:20], [19:10], [ 9: 0]};
+//                              1=YCbCr is {[29:20], [ 9: 0], [19:10]};
+//                              2=YCbCr is {[ 9: 0], [29:20], [19:10]};
+//                              3=YCbCr is {[19:10], [29:20], [ 9: 0]};
+//                              4=YCbCr is {[19:10], [ 9: 0], [29:20]};
+//                              5=YCbCr is {[ 9: 0], [19:10], [29:20]};
+//                              6,7=Rsrv
+// Bit     0 RW, dvin_enable
+#define   DVIN_CTRL_STAT                           (0x08e5)
+#define P_DVIN_CTRL_STAT                           (volatile unsigned int *)((0x08e5  << 2) + 0xffd00000)
+//========================================================================
+//  DOS registers				    APB allocation from 32'hd0050000
+//
+//========================================================================
+//=======================================================================
+// XIF module
+// `include "xregs.h"
+    #define X_INT_ADR           0x400
+    #define GPIO_ADR            0x401
+    #define GPIO_ADR_H8         0x402
+    #define WFIFO_DEPTH         8
+    #define WFIFO_PointerWidth  3
+    #define WFIFO_WORDSIZE      32
+// MAC module
+// move them to cpu domain.
+//`define CLR_ACC_MAC         12'h410
+//`define CLR_ACC_MAC2        12'h411
+//`define ACC_0               12'h412
+//`define ACC_1               12'h413
+//`define ACC_2               12'h414
+//`define ACC_3               12'h415
+//========================================================================
+//  Audio EQ DRC Interface				    (15'h1400 - 15'h14ff)
+//
+//========================================================================
+//
+// Reading file:  audio_eq_drc.h
+//
+// -----------------------------------------------
+// CBUS_BASE:  AED_CBUS_BASE = 0x10
+// -----------------------------------------------
+
+/* defined in g12a secure_apb.h */
+#if 0
+#define   AED_EQ_CH1_COEF00                        (0x1000)
+#define P_AED_EQ_CH1_COEF00                        (volatile unsigned int *)((0x1000  << 2) + 0xffd00000)
+#define   AED_EQ_CH1_COEF01                        (0x1001)
+#define P_AED_EQ_CH1_COEF01                        (volatile unsigned int *)((0x1001  << 2) + 0xffd00000)
+#define   AED_EQ_CH1_COEF02                        (0x1002)
+#define P_AED_EQ_CH1_COEF02                        (volatile unsigned int *)((0x1002  << 2) + 0xffd00000)
+#define   AED_EQ_CH1_COEF03                        (0x1003)
+#define P_AED_EQ_CH1_COEF03                        (volatile unsigned int *)((0x1003  << 2) + 0xffd00000)
+#define   AED_EQ_CH1_COEF04                        (0x1004)
+#define P_AED_EQ_CH1_COEF04                        (volatile unsigned int *)((0x1004  << 2) + 0xffd00000)
+#define   AED_EQ_CH1_COEF10                        (0x1005)
+#define P_AED_EQ_CH1_COEF10                        (volatile unsigned int *)((0x1005  << 2) + 0xffd00000)
+#define   AED_EQ_CH1_COEF11                        (0x1006)
+#define P_AED_EQ_CH1_COEF11                        (volatile unsigned int *)((0x1006  << 2) + 0xffd00000)
+#define   AED_EQ_CH1_COEF12                        (0x1007)
+#define P_AED_EQ_CH1_COEF12                        (volatile unsigned int *)((0x1007  << 2) + 0xffd00000)
+#define   AED_EQ_CH1_COEF13                        (0x1008)
+#define P_AED_EQ_CH1_COEF13                        (volatile unsigned int *)((0x1008  << 2) + 0xffd00000)
+#define   AED_EQ_CH1_COEF14                        (0x1009)
+#define P_AED_EQ_CH1_COEF14                        (volatile unsigned int *)((0x1009  << 2) + 0xffd00000)
+#define   AED_EQ_CH1_COEF20                        (0x100a)
+#define P_AED_EQ_CH1_COEF20                        (volatile unsigned int *)((0x100a  << 2) + 0xffd00000)
+#define   AED_EQ_CH1_COEF21                        (0x100b)
+#define P_AED_EQ_CH1_COEF21                        (volatile unsigned int *)((0x100b  << 2) + 0xffd00000)
+#define   AED_EQ_CH1_COEF22                        (0x100c)
+#define P_AED_EQ_CH1_COEF22                        (volatile unsigned int *)((0x100c  << 2) + 0xffd00000)
+#define   AED_EQ_CH1_COEF23                        (0x100d)
+#define P_AED_EQ_CH1_COEF23                        (volatile unsigned int *)((0x100d  << 2) + 0xffd00000)
+#define   AED_EQ_CH1_COEF24                        (0x100e)
+#define P_AED_EQ_CH1_COEF24                        (volatile unsigned int *)((0x100e  << 2) + 0xffd00000)
+#define   AED_EQ_CH1_COEF30                        (0x100f)
+#define P_AED_EQ_CH1_COEF30                        (volatile unsigned int *)((0x100f  << 2) + 0xffd00000)
+#define   AED_EQ_CH1_COEF31                        (0x1010)
+#define P_AED_EQ_CH1_COEF31                        (volatile unsigned int *)((0x1010  << 2) + 0xffd00000)
+#define   AED_EQ_CH1_COEF32                        (0x1011)
+#define P_AED_EQ_CH1_COEF32                        (volatile unsigned int *)((0x1011  << 2) + 0xffd00000)
+#define   AED_EQ_CH1_COEF33                        (0x1012)
+#define P_AED_EQ_CH1_COEF33                        (volatile unsigned int *)((0x1012  << 2) + 0xffd00000)
+#define   AED_EQ_CH1_COEF34                        (0x1013)
+#define P_AED_EQ_CH1_COEF34                        (volatile unsigned int *)((0x1013  << 2) + 0xffd00000)
+#define   AED_EQ_CH1_COEF40                        (0x1014)
+#define P_AED_EQ_CH1_COEF40                        (volatile unsigned int *)((0x1014  << 2) + 0xffd00000)
+#define   AED_EQ_CH1_COEF41                        (0x1015)
+#define P_AED_EQ_CH1_COEF41                        (volatile unsigned int *)((0x1015  << 2) + 0xffd00000)
+#define   AED_EQ_CH1_COEF42                        (0x1016)
+#define P_AED_EQ_CH1_COEF42                        (volatile unsigned int *)((0x1016  << 2) + 0xffd00000)
+#define   AED_EQ_CH1_COEF43                        (0x1017)
+#define P_AED_EQ_CH1_COEF43                        (volatile unsigned int *)((0x1017  << 2) + 0xffd00000)
+#define   AED_EQ_CH1_COEF44                        (0x1018)
+#define P_AED_EQ_CH1_COEF44                        (volatile unsigned int *)((0x1018  << 2) + 0xffd00000)
+#define   AED_EQ_CH1_COEF50                        (0x1019)
+#define P_AED_EQ_CH1_COEF50                        (volatile unsigned int *)((0x1019  << 2) + 0xffd00000)
+#define   AED_EQ_CH1_COEF51                        (0x101a)
+#define P_AED_EQ_CH1_COEF51                        (volatile unsigned int *)((0x101a  << 2) + 0xffd00000)
+#define   AED_EQ_CH1_COEF52                        (0x101b)
+#define P_AED_EQ_CH1_COEF52                        (volatile unsigned int *)((0x101b  << 2) + 0xffd00000)
+#define   AED_EQ_CH1_COEF53                        (0x101c)
+#define P_AED_EQ_CH1_COEF53                        (volatile unsigned int *)((0x101c  << 2) + 0xffd00000)
+#define   AED_EQ_CH1_COEF54                        (0x101d)
+#define P_AED_EQ_CH1_COEF54                        (volatile unsigned int *)((0x101d  << 2) + 0xffd00000)
+#define   AED_EQ_CH1_COEF60                        (0x101e)
+#define P_AED_EQ_CH1_COEF60                        (volatile unsigned int *)((0x101e  << 2) + 0xffd00000)
+#define   AED_EQ_CH1_COEF61                        (0x101f)
+#define P_AED_EQ_CH1_COEF61                        (volatile unsigned int *)((0x101f  << 2) + 0xffd00000)
+#define   AED_EQ_CH1_COEF62                        (0x1020)
+#define P_AED_EQ_CH1_COEF62                        (volatile unsigned int *)((0x1020  << 2) + 0xffd00000)
+#define   AED_EQ_CH1_COEF63                        (0x1021)
+#define P_AED_EQ_CH1_COEF63                        (volatile unsigned int *)((0x1021  << 2) + 0xffd00000)
+#define   AED_EQ_CH1_COEF64                        (0x1022)
+#define P_AED_EQ_CH1_COEF64                        (volatile unsigned int *)((0x1022  << 2) + 0xffd00000)
+#define   AED_EQ_CH1_COEF70                        (0x1023)
+#define P_AED_EQ_CH1_COEF70                        (volatile unsigned int *)((0x1023  << 2) + 0xffd00000)
+#define   AED_EQ_CH1_COEF71                        (0x1024)
+#define P_AED_EQ_CH1_COEF71                        (volatile unsigned int *)((0x1024  << 2) + 0xffd00000)
+#define   AED_EQ_CH1_COEF72                        (0x1025)
+#define P_AED_EQ_CH1_COEF72                        (volatile unsigned int *)((0x1025  << 2) + 0xffd00000)
+#define   AED_EQ_CH1_COEF73                        (0x1026)
+#define P_AED_EQ_CH1_COEF73                        (volatile unsigned int *)((0x1026  << 2) + 0xffd00000)
+#define   AED_EQ_CH1_COEF74                        (0x1027)
+#define P_AED_EQ_CH1_COEF74                        (volatile unsigned int *)((0x1027  << 2) + 0xffd00000)
+#define   AED_EQ_CH1_COEF80                        (0x1028)
+#define P_AED_EQ_CH1_COEF80                        (volatile unsigned int *)((0x1028  << 2) + 0xffd00000)
+#define   AED_EQ_CH1_COEF81                        (0x1029)
+#define P_AED_EQ_CH1_COEF81                        (volatile unsigned int *)((0x1029  << 2) + 0xffd00000)
+#define   AED_EQ_CH1_COEF82                        (0x102a)
+#define P_AED_EQ_CH1_COEF82                        (volatile unsigned int *)((0x102a  << 2) + 0xffd00000)
+#define   AED_EQ_CH1_COEF83                        (0x102b)
+#define P_AED_EQ_CH1_COEF83                        (volatile unsigned int *)((0x102b  << 2) + 0xffd00000)
+#define   AED_EQ_CH1_COEF84                        (0x102c)
+#define P_AED_EQ_CH1_COEF84                        (volatile unsigned int *)((0x102c  << 2) + 0xffd00000)
+#define   AED_EQ_CH1_COEF90                        (0x102d)
+#define P_AED_EQ_CH1_COEF90                        (volatile unsigned int *)((0x102d  << 2) + 0xffd00000)
+#define   AED_EQ_CH1_COEF91                        (0x102e)
+#define P_AED_EQ_CH1_COEF91                        (volatile unsigned int *)((0x102e  << 2) + 0xffd00000)
+#define   AED_EQ_CH1_COEF92                        (0x102f)
+#define P_AED_EQ_CH1_COEF92                        (volatile unsigned int *)((0x102f  << 2) + 0xffd00000)
+#define   AED_EQ_CH1_COEF93                        (0x1030)
+#define P_AED_EQ_CH1_COEF93                        (volatile unsigned int *)((0x1030  << 2) + 0xffd00000)
+#define   AED_EQ_CH1_COEF94                        (0x1031)
+#define P_AED_EQ_CH1_COEF94                        (volatile unsigned int *)((0x1031  << 2) + 0xffd00000)
+#define   AED_EQ_CH2_COEF00                        (0x1032)
+#define P_AED_EQ_CH2_COEF00                        (volatile unsigned int *)((0x1032  << 2) + 0xffd00000)
+#define   AED_EQ_CH2_COEF01                        (0x1033)
+#define P_AED_EQ_CH2_COEF01                        (volatile unsigned int *)((0x1033  << 2) + 0xffd00000)
+#define   AED_EQ_CH2_COEF02                        (0x1034)
+#define P_AED_EQ_CH2_COEF02                        (volatile unsigned int *)((0x1034  << 2) + 0xffd00000)
+#define   AED_EQ_CH2_COEF03                        (0x1035)
+#define P_AED_EQ_CH2_COEF03                        (volatile unsigned int *)((0x1035  << 2) + 0xffd00000)
+#define   AED_EQ_CH2_COEF04                        (0x1036)
+#define P_AED_EQ_CH2_COEF04                        (volatile unsigned int *)((0x1036  << 2) + 0xffd00000)
+#define   AED_EQ_CH2_COEF10                        (0x1037)
+#define P_AED_EQ_CH2_COEF10                        (volatile unsigned int *)((0x1037  << 2) + 0xffd00000)
+#define   AED_EQ_CH2_COEF11                        (0x1038)
+#define P_AED_EQ_CH2_COEF11                        (volatile unsigned int *)((0x1038  << 2) + 0xffd00000)
+#define   AED_EQ_CH2_COEF12                        (0x1039)
+#define P_AED_EQ_CH2_COEF12                        (volatile unsigned int *)((0x1039  << 2) + 0xffd00000)
+#define   AED_EQ_CH2_COEF13                        (0x103a)
+#define P_AED_EQ_CH2_COEF13                        (volatile unsigned int *)((0x103a  << 2) + 0xffd00000)
+#define   AED_EQ_CH2_COEF14                        (0x103b)
+#define P_AED_EQ_CH2_COEF14                        (volatile unsigned int *)((0x103b  << 2) + 0xffd00000)
+#define   AED_EQ_CH2_COEF20                        (0x103c)
+#define P_AED_EQ_CH2_COEF20                        (volatile unsigned int *)((0x103c  << 2) + 0xffd00000)
+#define   AED_EQ_CH2_COEF21                        (0x103d)
+#define P_AED_EQ_CH2_COEF21                        (volatile unsigned int *)((0x103d  << 2) + 0xffd00000)
+#define   AED_EQ_CH2_COEF22                        (0x103e)
+#define P_AED_EQ_CH2_COEF22                        (volatile unsigned int *)((0x103e  << 2) + 0xffd00000)
+#define   AED_EQ_CH2_COEF23                        (0x103f)
+#define P_AED_EQ_CH2_COEF23                        (volatile unsigned int *)((0x103f  << 2) + 0xffd00000)
+#define   AED_EQ_CH2_COEF24                        (0x1040)
+#define P_AED_EQ_CH2_COEF24                        (volatile unsigned int *)((0x1040  << 2) + 0xffd00000)
+#define   AED_EQ_CH2_COEF30                        (0x1041)
+#define P_AED_EQ_CH2_COEF30                        (volatile unsigned int *)((0x1041  << 2) + 0xffd00000)
+#define   AED_EQ_CH2_COEF31                        (0x1042)
+#define P_AED_EQ_CH2_COEF31                        (volatile unsigned int *)((0x1042  << 2) + 0xffd00000)
+#define   AED_EQ_CH2_COEF32                        (0x1043)
+#define P_AED_EQ_CH2_COEF32                        (volatile unsigned int *)((0x1043  << 2) + 0xffd00000)
+#define   AED_EQ_CH2_COEF33                        (0x1044)
+#define P_AED_EQ_CH2_COEF33                        (volatile unsigned int *)((0x1044  << 2) + 0xffd00000)
+#define   AED_EQ_CH2_COEF34                        (0x1045)
+#define P_AED_EQ_CH2_COEF34                        (volatile unsigned int *)((0x1045  << 2) + 0xffd00000)
+#define   AED_EQ_CH2_COEF40                        (0x1046)
+#define P_AED_EQ_CH2_COEF40                        (volatile unsigned int *)((0x1046  << 2) + 0xffd00000)
+#define   AED_EQ_CH2_COEF41                        (0x1047)
+#define P_AED_EQ_CH2_COEF41                        (volatile unsigned int *)((0x1047  << 2) + 0xffd00000)
+#define   AED_EQ_CH2_COEF42                        (0x1048)
+#define P_AED_EQ_CH2_COEF42                        (volatile unsigned int *)((0x1048  << 2) + 0xffd00000)
+#define   AED_EQ_CH2_COEF43                        (0x1049)
+#define P_AED_EQ_CH2_COEF43                        (volatile unsigned int *)((0x1049  << 2) + 0xffd00000)
+#define   AED_EQ_CH2_COEF44                        (0x104a)
+#define P_AED_EQ_CH2_COEF44                        (volatile unsigned int *)((0x104a  << 2) + 0xffd00000)
+#define   AED_EQ_CH2_COEF50                        (0x104b)
+#define P_AED_EQ_CH2_COEF50                        (volatile unsigned int *)((0x104b  << 2) + 0xffd00000)
+#define   AED_EQ_CH2_COEF51                        (0x104c)
+#define P_AED_EQ_CH2_COEF51                        (volatile unsigned int *)((0x104c  << 2) + 0xffd00000)
+#define   AED_EQ_CH2_COEF52                        (0x104d)
+#define P_AED_EQ_CH2_COEF52                        (volatile unsigned int *)((0x104d  << 2) + 0xffd00000)
+#define   AED_EQ_CH2_COEF53                        (0x104e)
+#define P_AED_EQ_CH2_COEF53                        (volatile unsigned int *)((0x104e  << 2) + 0xffd00000)
+#define   AED_EQ_CH2_COEF54                        (0x104f)
+#define P_AED_EQ_CH2_COEF54                        (volatile unsigned int *)((0x104f  << 2) + 0xffd00000)
+#define   AED_EQ_CH2_COEF60                        (0x1050)
+#define P_AED_EQ_CH2_COEF60                        (volatile unsigned int *)((0x1050  << 2) + 0xffd00000)
+#define   AED_EQ_CH2_COEF61                        (0x1051)
+#define P_AED_EQ_CH2_COEF61                        (volatile unsigned int *)((0x1051  << 2) + 0xffd00000)
+#define   AED_EQ_CH2_COEF62                        (0x1052)
+#define P_AED_EQ_CH2_COEF62                        (volatile unsigned int *)((0x1052  << 2) + 0xffd00000)
+#define   AED_EQ_CH2_COEF63                        (0x1053)
+#define P_AED_EQ_CH2_COEF63                        (volatile unsigned int *)((0x1053  << 2) + 0xffd00000)
+#define   AED_EQ_CH2_COEF64                        (0x1054)
+#define P_AED_EQ_CH2_COEF64                        (volatile unsigned int *)((0x1054  << 2) + 0xffd00000)
+#define   AED_EQ_CH2_COEF70                        (0x1055)
+#define P_AED_EQ_CH2_COEF70                        (volatile unsigned int *)((0x1055  << 2) + 0xffd00000)
+#define   AED_EQ_CH2_COEF71                        (0x1056)
+#define P_AED_EQ_CH2_COEF71                        (volatile unsigned int *)((0x1056  << 2) + 0xffd00000)
+#define   AED_EQ_CH2_COEF72                        (0x1057)
+#define P_AED_EQ_CH2_COEF72                        (volatile unsigned int *)((0x1057  << 2) + 0xffd00000)
+#define   AED_EQ_CH2_COEF73                        (0x1058)
+#define P_AED_EQ_CH2_COEF73                        (volatile unsigned int *)((0x1058  << 2) + 0xffd00000)
+#define   AED_EQ_CH2_COEF74                        (0x1059)
+#define P_AED_EQ_CH2_COEF74                        (volatile unsigned int *)((0x1059  << 2) + 0xffd00000)
+#define   AED_EQ_CH2_COEF80                        (0x105a)
+#define P_AED_EQ_CH2_COEF80                        (volatile unsigned int *)((0x105a  << 2) + 0xffd00000)
+#define   AED_EQ_CH2_COEF81                        (0x105b)
+#define P_AED_EQ_CH2_COEF81                        (volatile unsigned int *)((0x105b  << 2) + 0xffd00000)
+#define   AED_EQ_CH2_COEF82                        (0x105c)
+#define P_AED_EQ_CH2_COEF82                        (volatile unsigned int *)((0x105c  << 2) + 0xffd00000)
+#define   AED_EQ_CH2_COEF83                        (0x105d)
+#define P_AED_EQ_CH2_COEF83                        (volatile unsigned int *)((0x105d  << 2) + 0xffd00000)
+#define   AED_EQ_CH2_COEF84                        (0x105e)
+#define P_AED_EQ_CH2_COEF84                        (volatile unsigned int *)((0x105e  << 2) + 0xffd00000)
+#define   AED_EQ_CH2_COEF90                        (0x105f)
+#define P_AED_EQ_CH2_COEF90                        (volatile unsigned int *)((0x105f  << 2) + 0xffd00000)
+#define   AED_EQ_CH2_COEF91                        (0x1060)
+#define P_AED_EQ_CH2_COEF91                        (volatile unsigned int *)((0x1060  << 2) + 0xffd00000)
+#define   AED_EQ_CH2_COEF92                        (0x1061)
+#define P_AED_EQ_CH2_COEF92                        (volatile unsigned int *)((0x1061  << 2) + 0xffd00000)
+#define   AED_EQ_CH2_COEF93                        (0x1062)
+#define P_AED_EQ_CH2_COEF93                        (volatile unsigned int *)((0x1062  << 2) + 0xffd00000)
+#define   AED_EQ_CH2_COEF94                        (0x1063)
+#define P_AED_EQ_CH2_COEF94                        (volatile unsigned int *)((0x1063  << 2) + 0xffd00000)
+#define   AED_EQ_EN                                (0x1064)
+#define P_AED_EQ_EN                                (volatile unsigned int *)((0x1064  << 2) + 0xffd00000)
+#define   AED_EQ_VOLUME                            (0x1065)
+#define P_AED_EQ_VOLUME                            (volatile unsigned int *)((0x1065  << 2) + 0xffd00000)
+#define   AED_EQ_VOLUME_SLEW_CNT                   (0x1066)
+#define P_AED_EQ_VOLUME_SLEW_CNT                   (volatile unsigned int *)((0x1066  << 2) + 0xffd00000)
+#define   AED_MUTE                                 (0x1067)
+#define P_AED_MUTE                                 (volatile unsigned int *)((0x1067  << 2) + 0xffd00000)
+#define   AED_DRC_EN                               (0x1070)
+#define P_AED_DRC_EN                               (volatile unsigned int *)((0x1070  << 2) + 0xffd00000)
+#define   AED_DRC_AE                               (0x1071)
+#define P_AED_DRC_AE                               (volatile unsigned int *)((0x1071  << 2) + 0xffd00000)
+#define   AED_DRC_AA                               (0x1072)
+#define P_AED_DRC_AA                               (volatile unsigned int *)((0x1072  << 2) + 0xffd00000)
+#define   AED_DRC_AD                               (0x1073)
+#define P_AED_DRC_AD                               (volatile unsigned int *)((0x1073  << 2) + 0xffd00000)
+#define   AED_DRC_AE_1M                            (0x1074)
+#define P_AED_DRC_AE_1M                            (volatile unsigned int *)((0x1074  << 2) + 0xffd00000)
+#define   AED_DRC_AA_1M                            (0x1075)
+#define P_AED_DRC_AA_1M                            (volatile unsigned int *)((0x1075  << 2) + 0xffd00000)
+#define   AED_DRC_AD_1M                            (0x1076)
+#define P_AED_DRC_AD_1M                            (volatile unsigned int *)((0x1076  << 2) + 0xffd00000)
+#define   AED_DRC_OFFSET0                          (0x1077)
+#define P_AED_DRC_OFFSET0                          (volatile unsigned int *)((0x1077  << 2) + 0xffd00000)
+#define   AED_DRC_OFFSET1                          (0x1078)
+#define P_AED_DRC_OFFSET1                          (volatile unsigned int *)((0x1078  << 2) + 0xffd00000)
+#define   AED_DRC_THD0                             (0x1079)
+#define P_AED_DRC_THD0                             (volatile unsigned int *)((0x1079  << 2) + 0xffd00000)
+#define   AED_DRC_THD1                             (0x107a)
+#define P_AED_DRC_THD1                             (volatile unsigned int *)((0x107a  << 2) + 0xffd00000)
+#define   AED_DRC_K0                               (0x107b)
+#define P_AED_DRC_K0                               (volatile unsigned int *)((0x107b  << 2) + 0xffd00000)
+#define   AED_DRC_K1                               (0x107c)
+#define P_AED_DRC_K1                               (volatile unsigned int *)((0x107c  << 2) + 0xffd00000)
+#define   AED_CLIP_THD                             (0x107d)
+#define P_AED_CLIP_THD                             (volatile unsigned int *)((0x107d  << 2) + 0xffd00000)
+#define   AED_NG_THD0                              (0x107e)
+#define P_AED_NG_THD0                              (volatile unsigned int *)((0x107e  << 2) + 0xffd00000)
+#define   AED_NG_THD1                              (0x107f)
+#define P_AED_NG_THD1                              (volatile unsigned int *)((0x107f  << 2) + 0xffd00000)
+#define   AED_NG_CNT_THD                           (0x1080)
+#define P_AED_NG_CNT_THD                           (volatile unsigned int *)((0x1080  << 2) + 0xffd00000)
+#define   AED_NG_CTL                               (0x1081)
+#define P_AED_NG_CTL                               (volatile unsigned int *)((0x1081  << 2) + 0xffd00000)
+#define   AED_ED_CTL                               (0x1082)
+#define P_AED_ED_CTL                               (volatile unsigned int *)((0x1082  << 2) + 0xffd00000)
+#define   AED_DEBUG0                               (0x1083)
+#define P_AED_DEBUG0                               (volatile unsigned int *)((0x1083  << 2) + 0xffd00000)
+#define   AED_DEBUG1                               (0x1084)
+#define P_AED_DEBUG1                               (volatile unsigned int *)((0x1084  << 2) + 0xffd00000)
+#define   AED_DEBUG2                               (0x1085)
+#define P_AED_DEBUG2                               (volatile unsigned int *)((0x1085  << 2) + 0xffd00000)
+#define   AED_DEBUG3                               (0x1086)
+#define P_AED_DEBUG3                               (volatile unsigned int *)((0x1086  << 2) + 0xffd00000)
+#define   AED_DEBUG4                               (0x1087)
+#define P_AED_DEBUG4                               (volatile unsigned int *)((0x1087  << 2) + 0xffd00000)
+#define   AED_DEBUG5                               (0x1088)
+#define P_AED_DEBUG5                               (volatile unsigned int *)((0x1088  << 2) + 0xffd00000)
+#define   AED_DEBUG6                               (0x1089)
+#define P_AED_DEBUG6                               (volatile unsigned int *)((0x1089  << 2) + 0xffd00000)
+#define   AED_TOP_CTL                              (0x1090)
+#define P_AED_TOP_CTL                              (volatile unsigned int *)((0x1090  << 2) + 0xffd00000)
+#endif
+
+//
+// Closing file:  audio_eq_drc.h
+//
+//========================================================================
+//  Audio Interface				    (12'h500 - 12'h5ff)
+//
+//========================================================================
+//
+// Reading file:  aregs.h
+//
+//========================================================================
+//  Audio Interface                                 (8'h00 - 8'hff)
+//  Modified : Xuyun Chen Jan 2001
+//========================================================================
+// Number of bytes expected per NON-PCM frame, including the header.
+// 16 bits.
+// -----------------------------------------------
+// CBUS_BASE:  AIU_CBUS_BASE = 0x14
+// -----------------------------------------------
+#define   AIU_958_BPF                              (0x1400)
+#define P_AIU_958_BPF                              (volatile unsigned int *)((0x1400  << 2) + 0xffd00000)
+// Value of burst_info used in IEC958 preamble for a NON-PCM frame. See
+// ATSC AC-3 spec Annex B. 16 bits.
+#define   AIU_958_BRST                             (0x1401)
+#define P_AIU_958_BRST                             (volatile unsigned int *)((0x1401  << 2) + 0xffd00000)
+// Value of length_code used in IEC958 preamble for an NON-PCM frame. See
+// ATSC AC-3 spec Annex B. 16 bits.
+#define   AIU_958_LENGTH                           (0x1402)
+#define P_AIU_958_LENGTH                           (volatile unsigned int *)((0x1402  << 2) + 0xffd00000)
+// How many subframes to padd around the NON-PCM frame. This will
+// be set to 'd3072 if it is a AC-3 audio stream.
+// 16 bits
+#define   AIU_958_PADDSIZE                         (0x1403)
+#define P_AIU_958_PADDSIZE                         (volatile unsigned int *)((0x1403  << 2) + 0xffd00000)
+// 16'd3072
+// Misc. control settings for IEC958 interface
+// Bit 15:14 pcm_sample_ctl, 00-pcm_no_sample, 01-pcm_sample_up, 10-pcm_sample_down, 11-pcm_sample_down_drop
+// Bit 13: if true, force each audio data to left or right according to the bit attached with the audio data
+//         This bit should be used with Register AIU_958_force_left(0x505) together
+// Bit 12: if true, the U(user data) is from the stream otherwise it is filled by
+//                   zero while encoding iec958 frame
+// Bit 11   : if true big endian(highword,lowword) otherwise little endian(lowword,highword)
+//            for 32bit mode
+// Bit 10:8 : shift number for 32 bit mode
+// Bit 7  : 32 bit mode turn on while This bit is true and Bit 1 is true
+// Bit 6:5 : Specifies output alignment for 16 bit pcm data.
+//          00 : dout = {8'b0, din};
+//          01 : dout = {4'b0, din, 4'b0};
+//          10 : dout = {      din, 8'b0};
+// Bit 4  : True if data should be sent out MSB first. LSB first is the
+//          default in the spec.
+// Bit 3  : True if msb should be extended (only used with 16 bit pcm data.)
+// Bit 2  : True if msb of PCM data should be inverted.
+// Bit 1  : True if PCM data is 16 bits wide. False if 24 bit or 32bit mode.
+// Bit 0  : True if source data is non-PCM data. False if it is PCM data.
+#define   AIU_958_MISC                             (0x1404)
+#define P_AIU_958_MISC                             (volatile unsigned int *)((0x1404  << 2) + 0xffd00000)
+// 14'b0_0_0_000_0_0000001
+// A write to this register specifies that the next pcm sample sent out
+// of the iec958 interface should go into the _left_ channel.
+#define   AIU_958_FORCE_LEFT                       (0x1405)
+#define P_AIU_958_FORCE_LEFT                       (volatile unsigned int *)((0x1405  << 2) + 0xffd00000)
+//Read Only
+//bit 6:0  how many data discarded in the last dma after one frame data finish transfering to AIU
+// should used together with register AIU_958_dcu_ff_ctrl
+#define   AIU_958_DISCARD_NUM                      (0x1406)
+#define P_AIU_958_DISCARD_NUM                      (volatile unsigned int *)((0x1406  << 2) + 0xffd00000)
+//bit 15:8  : A read from this register indicates the IEC958 FIFO count value
+//bit 7 :  ai_958_req_size if ture, set to 8 bits interface, used to handle odd frame continous read
+//bit 6 :  continue seeking and dont discard the rest data in one dma after frame end
+//bit 5 :  if true, byte by byte seeking, otherwise word by word seeking
+//bit 4 :  if true, the function for sync head seeking is enabled
+//bit 3:2 :	IEC958 interrupt mode
+// There are two conditions to generate interrupt. The First condition is that one frame data
+// have been finished writing into FIFO. The second condition is at least some data of the current
+// frame have been read out(refer to Register AIU_958_ffrdout_thd)
+//			00: interrupt is not generated
+//			10:	interrupt is generated if the first condition is true
+//			01:	interrupt is generated if the second condition is true
+//			11:	interrupt is generated if both of the conditions are true
+//bit 1: fifo auto disable, High means after one frame data put into the FIFO, the FIFO
+//					will automatically disabled
+//bit 0: fifo enable
+#define   AIU_958_DCU_FF_CTRL                      (0x1407)
+#define P_AIU_958_DCU_FF_CTRL                      (volatile unsigned int *)((0x1407  << 2) + 0xffd00000)
+// 'b0_0_1_11_1_0
+// channel status registers for Left channel
+// chstat_l0[15:0] contains bits 15:0 of the channel status word. Note
+// that bit zero of the channel status word is sent out first.
+// chstat_l1[15:0] contains bits 31:16 of the channel status word.
+#define   AIU_958_CHSTAT_L0                        (0x1408)
+#define P_AIU_958_CHSTAT_L0                        (volatile unsigned int *)((0x1408  << 2) + 0xffd00000)
+#define   AIU_958_CHSTAT_L1                        (0x1409)
+#define P_AIU_958_CHSTAT_L1                        (volatile unsigned int *)((0x1409  << 2) + 0xffd00000)
+// Control register for IEC958 interface
+// Bit 9:8 what to do if there is a fifo underrun
+//         00 => insert 24'h000000
+//         01 => insert mute constant as defined below
+//         10 => repeat last l/r samples
+// Bit 7:5 mute constant
+//         000 => 24'h000000
+//         001 => 24'h800000
+//         010 => 24'h080000
+//         011 => 24'h008000
+//         100 => 24'h000001
+//         101 => 24'h000010
+//         110 => 24'h000100
+// Bit 4   mute left speaker
+// Bit 3   mute right speaker
+// Bit 2:1 swap channels
+//         00 : L R => L R
+//         01 : L R => L L
+//         10 : L R => R R
+//         11 : L R => R L
+// Bit 0   Set this bit to hold iec958 interface after the current
+//         subframe has been completely transmitted.
+#define   AIU_958_CTRL                             (0x140a)
+#define P_AIU_958_CTRL                             (volatile unsigned int *)((0x140a  << 2) + 0xffd00000)
+// 10'b00_000_00_00_0
+// A write operation to this register will cause one of the output samples
+// to be repeated. This can be used to switch the left and the right
+// channels.
+#define   AIU_958_RPT                              (0x140b)
+#define P_AIU_958_RPT                              (volatile unsigned int *)((0x140b  << 2) + 0xffd00000)
+// Channel swap and mute control register.
+// Bit 15: Mute extra left channel
+// Bit 14: Mute extra right channel
+// Bit 13: Mute center
+// Bit 12: Mute subwoofer
+// Bit 11: Mute surround left
+// Bit 10: Mute surround right
+// Bit  9: Mute left
+// Bit  8: Mute right
+// Bit 7:6 Channel swap for xtra dac
+// Bit 5:4 Channel swap for sub/center dac
+// Bit 3:2 Channel swap for surround dac
+// Bit 1:0 Channel swap for main l/r dac
+// Channel swap possibilities:
+// 00 : L R => L R
+// 01 : L R => L L
+// 10 : L R => R R
+// 11 : L R => R L
+#define   AIU_I2S_MUTE_SWAP                        (0x140c)
+#define P_AIU_I2S_MUTE_SWAP                        (volatile unsigned int *)((0x140c  << 2) + 0xffd00000)
+// 16'b0
+// Bit 0 : 0=> single two channel stream
+//         1=> four two channel streams
+#define   AIU_I2S_SOURCE_DESC                      (0x140d)
+#define P_AIU_I2S_SOURCE_DESC                      (volatile unsigned int *)((0x140d  << 2) + 0xffd00000)
+// Median filter control register
+// Bit 1:  0=> data is offset binary
+//         1=> data is signed
+// Bit 0:  enable median filter
+#define   AIU_I2S_MED_CTRL                         (0x140e)
+#define P_AIU_I2S_MED_CTRL                         (volatile unsigned int *)((0x140e  << 2) + 0xffd00000)
+// 2'b10
+// Median filter threshold constant
+// 16 bits
+#define   AIU_I2S_MED_THRESH                       (0x140f)
+#define P_AIU_I2S_MED_THRESH                       (volatile unsigned int *)((0x140f  << 2) + 0xffd00000)
+// 16'h8000
+// Describes dac's connected to I2S interface
+// Bit 7:  sign extend sample before downshift.
+// Bit 6:4 payload downshift constant
+// Bit 3:  mute constant
+//         0 => 'h0000000
+//         1 => 'h800000
+// Bit 2:  send msb first
+// Bit 1:0 Size of payload
+//         Note that this parameter used to be called "size of dacs"
+//         It is now called the payload size since a 24 bit payload can
+//         actually be connected to any size of dac. The dac will simply
+//         disregard the extra bits.
+//         00 => 16 bit, alrclk = aoclk/32
+//         01 => 20 bit, alrclk = aoclk/40
+//         10 => 24 bit, alrclk = aoclk/48
+//		   11 => 24 bit, but alrclk = aoclk/64
+#define   AIU_I2S_DAC_CFG                          (0x1410)
+#define P_AIU_I2S_DAC_CFG                          (volatile unsigned int *)((0x1410  << 2) + 0xffd00000)
+// 8'b0_000_1_1_10
+// A write to this register will cause the interface to repeat the current
+// sample. Can be used to regain synchronization.
+// A read from this register indicates that the next sample to be sent
+// out of the interface should go into the _left_ channel of the dac.
+#define   AIU_I2S_SYNC                             (0x1411)
+#define P_AIU_I2S_SYNC                             (volatile unsigned int *)((0x1411  << 2) + 0xffd00000)
+// Misc regs
+// Bit 4 if true, force each audio data to left or right according to the bit attached with the audio data
+//         This bit should be used with Register AIU_i2s_sync(0x511) together
+// Bit 3:  Same Audio source for IEC958 and I2s stream 0, both from i2s buffer
+// Bit 2:  Set this bit to put i2s interface in hold mode
+// Bit 1:0 How to handle underruns
+//         00 => send zeros
+//         01 => send 'h800000
+//         10 => repeat last samples
+#define   AIU_I2S_MISC                             (0x1412)
+#define P_AIU_I2S_MISC                             (volatile unsigned int *)((0x1412  << 2) + 0xffd00000)
+// 5'b0
+// Bit 7:0 Audio output config.
+//			2 bits for each dac, 7:6 for dac3, 5:4 for dac2,
+//								 3:2 for dac1, 1:0 for dac0
+//			For each 2bits: 00: connect channel0-1 to the dac
+//							01: connect channel2-3 to the dac
+//							10: connect channel4-5 to the dac
+//							11: connect channel6-7 to the dac
+#define   AIU_I2S_OUT_CFG                          (0x1413)
+#define P_AIU_I2S_OUT_CFG                          (volatile unsigned int *)((0x1413  << 2) + 0xffd00000)
+// 8'b0_000000_0
+#define   AIU_I2S_FF_CTRL                          (0x1414)
+#define P_AIU_I2S_FF_CTRL                          (volatile unsigned int *)((0x1414  << 2) + 0xffd00000)
+// A write to this register resets the AIU
+//Bit 3 reset slow domain iec958
+//Bit 2 soft reset iec958 fast domain
+//Bit 1 reset slow domain i2s
+//Bit 0 soft reset i2s fast domain
+#define   AIU_RST_SOFT                             (0x1415)
+#define P_AIU_RST_SOFT                             (volatile unsigned int *)((0x1415  << 2) + 0xffd00000)
+// Clock generation control register
+// Bit 15: enable_ddr_arb, set low to reset
+// Bit 14:13 parser_A_addr_sel  00-A_addr_aififo2, 01-A_addr_iec958, 10-A_addr_aififo, 11-A_addr_i2s
+// Bit 12: 958 divisor more, if true, divided by 2, 4, 6, 8
+// Bit 11: amclk output divisor
+//			0 => dont divide
+//			1 => divide by 2
+// Bit 10: clock source selection
+//        0 => aiclk from pin
+//        1 => ai_pll_clk from pll
+// Bit 9:8 alrclk skew
+//         00 => alrclk transitions at the same time msb is sent
+//         01 => alrclk transitions on the cycle before msb is sent
+//         10 => alrclk transitions on the cycle after msb is sent
+// Bit 7: invert alrclk
+// Bit 6: invert aoclk
+// Bit 5:4 958 divisor
+//        00 => divide by 1
+//        01 => divide by 2
+//		  10 => divide by 3
+//		  11 => divide by 4
+// Bit 3:2 i2s divisor. NOTE: this value is ignored if AIU_clk_ctrl_more[5:0] != 0
+//         00 => divide by 1
+//         01 => divide by 2
+//         10 => divide by 4
+//         11 => divide by 8
+// Bit 1: enable 958 divider
+// Bit 0: enable i2s divider
+#define   AIU_CLK_CTRL                             (0x1416)
+#define P_AIU_CLK_CTRL                             (volatile unsigned int *)((0x1416  << 2) + 0xffd00000)
+// 13'b0_0_1_01_1_1_10_11_0_0
+// Misc settings that determine the type of adc that is
+// connected to the AIU. Reverb mode is deleted.
+// Bit 12:  selects adc input
+// Bit 11:10 adc size
+//           00 => 16 bits
+//           01 => 18 bits
+//           10 => 20 bits
+//           11 => 24 bits
+// Bit 9:8   adc l/r swap mode
+//           00 => stereo
+//           01 => send the right adc input to both l and r speakers
+//           01 => send the left adc input to both l and r speakers
+//           11 => sum the left and right inputs and forward to
+//                both speakers
+// Bit 7:5 adata/lrclk skew mode
+// Bit 4   1=>invert the adc's lrclk (This is the lrclk going _out_
+//         of the chip.
+// Bit 3   1=>Latch the data on the positive edge of the _internal_
+//         aoclk.
+// Bit 2   1=>adc data is in signed 2's complement mode
+#define   AIU_MIX_ADCCFG                           (0x1417)
+#define P_AIU_MIX_ADCCFG                           (volatile unsigned int *)((0x1417  << 2) + 0xffd00000)
+// 12'b01_00_001_1_0_1_00
+// Control register that can be changed dynamically. These control
+// signals are synchronized internally.
+// Bit 12:  if true, toggle each mixed audio data to left or right channel
+// Bit 11:  abuf din left selection, if true, select bit 24 of the data from abuf
+//		    otherwise select bit 25 of the data from abuf
+// Bit 10:9  mix sync select, when music, mic and abuf are mixed togather, the main
+//			 sync source can be selected
+//     00: not sync source
+//	   01: music data is the main sync source
+//	   10: abuf input data is the main sync source
+//	   11: music and abuf togather as the sync source
+// Bit 8:  0=> data from abuf is offset binary
+//         1=> data from abuf is signed
+// Bit 7:6 the source for data from aiu to abuf
+//           00 => mic
+//           01 => mic saled + abuf scaled
+//           10 => mic scaled + abuf scaled + music scaled
+//			 11 => music
+// Bit 5   channel from aiu to abuf is on
+// Bit 4   channel from abuf to aiu is on
+// Bit 3   mic is on
+// Bit 2   music is on
+// Bit 1   if true the mixed data are outputed to i2s dac channel,
+//			otherwise the mixed data are outputed to IEC958 output
+// Bit 0   if true music source for mixing is from i2s buffer,
+//			otherwise music source is from iec958 buffer
+#define   AIU_MIX_CTRL                             (0x1418)
+#define P_AIU_MIX_CTRL                             (volatile unsigned int *)((0x1418  << 2) + 0xffd00000)
+// 11'b01_1_01_0_0_0_1_1_1
+// Bit    15 invert_audin_sclk.
+// Bit    14 enable_adc_sclk.
+// Bit 13: 8 divisor_adc_sclk.
+// Bit     7 invert_acodec_adc_sclk.
+// Bit     6 hdmitx_sel_aoclkx2: 0=Select cts_clk_i958 as AIU clk to hdmi_tx_audio_master_clk; 1=Select cts_aoclkx2_int as AIU clk to hdmi_tx_audio_master_clk;
+// Bit  5: 0 More control on i2s divisor. For backward compatiblity, this value is ignored if is 0,
+//           if non-zero, it takes effect over AIU_clk_ctrl[3:2].
+//           0=i2s divisor will use the old value in AIU_clk_ctrl[3:2] (divide by 1/2/4/8)
+//           1=divide by 2;
+//           2=divide by 3;
+//           3=divide by 4;
+//           ... and so on ...
+//           63=divide by 64.
+#define   AIU_CLK_CTRL_MORE                        (0x1419)
+#define P_AIU_CLK_CTRL_MORE                        (volatile unsigned int *)((0x1419  << 2) + 0xffd00000)
+// A read from this register pops 16 bits of data off the 958
+// fifo. A write has no effect.
+#define   AIU_958_POP                              (0x141a)
+#define P_AIU_958_POP                              (volatile unsigned int *)((0x141a  << 2) + 0xffd00000)
+//gain register for mixing
+// for each gain,
+//			 00000: x 0
+//			 00001: x 1
+//			 00010: x 2
+//           00011: x 3
+//			 00100: x 4
+//			 00101: x 5
+//			 00110: x 6
+//			......
+//           01110: x14
+//           01111: x15
+//           10000: x 0
+//           10001: x 1/16
+//           10010: x 2/16
+//           10011: x 3/16
+//           10100: x 4/16
+//			......
+//           11110: x 14/16
+//           11111: x 15/16
+//Bit 14:10 mic gain
+//Bit 9:5 	abuf gain
+//Bit 4:0 music gain
+#define   AIU_MIX_GAIN                             (0x141b)
+#define P_AIU_MIX_GAIN                             (volatile unsigned int *)((0x141b  << 2) + 0xffd00000)
+// 15'b00001_00001_00001
+//sync head seeking is supported. The  maxinium length of sync head is
+//48-bit-wide.(in byte by byte seeking mode, the maximium is 44-bit-wide).
+//It is consisted of 3 words (synword1_synword2_syncword3).
+//You can configure the sync head pattern by using sync mask(mask1_mask2_mask3).
+//For example. AC-3 sync head is a 16-bit word(0b77), so syncword1 is set as 0b77,
+//mask1 is 0000(not set), mask2 and mask3 is all masked.
+#define   AIU_958_SYNWORD1                         (0x141c)
+#define P_AIU_958_SYNWORD1                         (volatile unsigned int *)((0x141c  << 2) + 0xffd00000)
+//16'h0b77  //ac-3 sync head
+#define   AIU_958_SYNWORD2                         (0x141d)
+#define P_AIU_958_SYNWORD2                         (volatile unsigned int *)((0x141d  << 2) + 0xffd00000)
+//16'h0000
+#define   AIU_958_SYNWORD3                         (0x141e)
+#define P_AIU_958_SYNWORD3                         (volatile unsigned int *)((0x141e  << 2) + 0xffd00000)
+//16'h0000
+#define   AIU_958_SYNWORD1_MASK                    (0x141f)
+#define P_AIU_958_SYNWORD1_MASK                    (volatile unsigned int *)((0x141f  << 2) + 0xffd00000)
+//16'h0000 //16-bit ac-3 sync_head
+#define   AIU_958_SYNWORD2_MASK                    (0x1420)
+#define P_AIU_958_SYNWORD2_MASK                    (volatile unsigned int *)((0x1420  << 2) + 0xffd00000)
+//16'hffff
+#define   AIU_958_SYNWORD3_MASK                    (0x1421)
+#define P_AIU_958_SYNWORD3_MASK                    (volatile unsigned int *)((0x1421  << 2) + 0xffd00000)
+//16'hffff
+//fifo read-out threshold, one condition to generate interrupt is met after fifo readout counter
+//reach this value in a frame, please refer to register AIU_958_dcu_ff_ctrl
+#define   AIU_958_FFRDOUT_THD                      (0x1422)
+#define P_AIU_958_FFRDOUT_THD                      (volatile unsigned int *)((0x1422  << 2) + 0xffd00000)
+//'h0004
+//For pause burst sequence adding, one pause burst sequence is consist of a serious
+// pause burst.
+//This register defines the length of each pause burst in a pause burst sequence. The size of the
+//preamble(Pa, Pb, Pc, Pd) is not counted, but the size of stuff data is counted.
+#define   AIU_958_LENGTH_PER_PAUSE                 (0x1423)
+#define P_AIU_958_LENGTH_PER_PAUSE                 (volatile unsigned int *)((0x1423  << 2) + 0xffd00000)
+//'h0000
+//This reigster defines the number of pause burst in a pause burst sequence.
+//Bit 15  if true, one pause burst sequence will be added
+//Bit 14:0 the number of pause burst in a pause burst sequence
+#define   AIU_958_PAUSE_NUM                        (0x1424)
+#define P_AIU_958_PAUSE_NUM                        (volatile unsigned int *)((0x1424  << 2) + 0xffd00000)
+//'h0000
+//The first 16-bit in the payload of pause burst sequence (gap_length)
+#define   AIU_958_PAUSE_PAYLOAD                    (0x1425)
+#define P_AIU_958_PAUSE_PAYLOAD                    (volatile unsigned int *)((0x1425  << 2) + 0xffd00000)
+//'h0000
+//For auto pause function, when enabled, pause burst sequence will be automatically added if the data in
+// 958 fifo is less than auto_pause threshold and if fifo is disabled.
+//Bit 15   if true, auto pause function enable
+//Bit 14   pause pack option, just for debugging and adding one option
+//Bit 7:0  auto_pause threshold
+#define   AIU_958_AUTO_PAUSE                       (0x1426)
+#define P_AIU_958_AUTO_PAUSE                       (volatile unsigned int *)((0x1426  << 2) + 0xffd00000)
+//'h0000
+//pause burst sequence payload length( = AIU_958_pause_num * AIU_958_length_per_pause)
+#define   AIU_958_PAUSE_PD_LENGTH                  (0x1427)
+#define P_AIU_958_PAUSE_PD_LENGTH                  (volatile unsigned int *)((0x1427  << 2) + 0xffd00000)
+//'h0000
+// Bit 15:12 Rsrv.
+// Bit 11: 0 dac_lrclk_div: Default is 48-1=47, which means lrclk is sclk divide by 48.
+#define   AIU_CODEC_DAC_LRCLK_CTRL                 (0x1428)
+#define P_AIU_CODEC_DAC_LRCLK_CTRL                 (volatile unsigned int *)((0x1428  << 2) + 0xffd00000)
+//'h002f
+// Bit 15:14 Rsrv.
+// Bit    13 inv_audin_lrclk: whether to invert lrclk before output to Audin
+// Bit    12 inv_acodec_adc_lrclk: whether to invert lrclk before output to Audio Codec
+// Bit 11: 0 adc_lrclk_div: Default is 48-1=47, which means lrclk is sclk divide by 48.
+#define   AIU_CODEC_ADC_LRCLK_CTRL                 (0x1429)
+#define P_AIU_CODEC_ADC_LRCLK_CTRL                 (volatile unsigned int *)((0x1429  << 2) + 0xffd00000)
+//'h002f
+// Bit 15:6 Rsrv.
+// Bit  5: 4 hdmi_data_sel: 00=output 0, disable hdmi data; 01=Select pcm data; 10=Select AIU I2S data; 11=Not allowed.
+// Bit  3: 2 Rsrv.
+// Bit  1: 0 hdmi_clk_sel: 00=Disable output hdmi clock; 01=Select pcm clock; 10=Select AIU clk; 11=Not allowed.
+#define   AIU_HDMI_CLK_DATA_CTRL                   (0x142a)
+#define P_AIU_HDMI_CLK_DATA_CTRL                   (volatile unsigned int *)((0x142a  << 2) + 0xffd00000)
+//'h0000
+// Bit 15:6 Rsrv.
+// Bit  5: 4 acodec_data_sel: 00=output 0, disable acodec_sdin; 01=Select pcm data; 10=Select AIU I2S data; 11=Not allowed.
+// Bit  3: 2 Rsrv.
+// Bit  1: 0 acodec_clk_sel: 00=Disable output acodec_sclk; 01=Select pcm clock; 10=Select AIU aoclk; 11=Not allowed.
+#define   AIU_CODEC_CLK_DATA_CTRL                  (0x142b)
+#define P_AIU_CODEC_CLK_DATA_CTRL                  (volatile unsigned int *)((0x142b  << 2) + 0xffd00000)
+//'h0000
+#define   AIU_ACODEC_CTRL                          (0x142c)
+#define P_AIU_ACODEC_CTRL                          (volatile unsigned int *)((0x142c  << 2) + 0xffd00000)
+// channel status registers for right channel
+// chstat_r0[15:0] contains bits 15:0 of the channel status word. Note
+// that bit zero of the channel status word is sent out first.
+// chstat_r1[15:0] contains bits 31:16 of the channel status word.
+#define   AIU_958_CHSTAT_R0                        (0x1430)
+#define P_AIU_958_CHSTAT_R0                        (volatile unsigned int *)((0x1430  << 2) + 0xffd00000)
+#define   AIU_958_CHSTAT_R1                        (0x1431)
+#define P_AIU_958_CHSTAT_R1                        (volatile unsigned int *)((0x1431  << 2) + 0xffd00000)
+//Bit 1 	if true, turn on Digital output Valid control
+//Bit 0		0: output 0, 1: output 1 to the valid bit in audio digital output when Bit 1 is true
+#define   AIU_958_VALID_CTRL                       (0x1432)
+#define P_AIU_958_VALID_CTRL                       (volatile unsigned int *)((0x1432  << 2) + 0xffd00000)
+//-----------------------------------------------------------------------------
+// Audio Amplifier controls
+//-----------------------------------------------------------------------------
+#define   AIU_AUDIO_AMP_REG0                       (0x143c)
+#define P_AIU_AUDIO_AMP_REG0                       (volatile unsigned int *)((0x143c  << 2) + 0xffd00000)
+#define   AIU_AUDIO_AMP_REG1                       (0x143d)
+#define P_AIU_AUDIO_AMP_REG1                       (volatile unsigned int *)((0x143d  << 2) + 0xffd00000)
+#define   AIU_AUDIO_AMP_REG2                       (0x143e)
+#define P_AIU_AUDIO_AMP_REG2                       (volatile unsigned int *)((0x143e  << 2) + 0xffd00000)
+#define   AIU_AUDIO_AMP_REG3                       (0x143f)
+#define P_AIU_AUDIO_AMP_REG3                       (volatile unsigned int *)((0x143f  << 2) + 0xffd00000)
+//-----------------------------------------------------------------------------
+//add for AIFIFO2 channel
+//-----------------------------------------------------------------------------
+//Bit 3 	CRC pop aififo2 enable
+//Bit 2		writing to this bit to 1 causes CRC module reset
+//Bit 1		unused
+//Bit 0		writing to this bit to 1 causes AIFIFO2 soft reset
+#define   AIU_AIFIFO2_CTRL                         (0x1440)
+#define P_AIU_AIFIFO2_CTRL                         (volatile unsigned int *)((0x1440  << 2) + 0xffd00000)
+//'h0000
+//AIFIFO2 status register
+//Bit 4:0		//how many bits left in the first pop register
+#define   AIU_AIFIFO2_STATUS                       (0x1441)
+#define P_AIU_AIFIFO2_STATUS                       (volatile unsigned int *)((0x1441  << 2) + 0xffd00000)
+//Same fucntion as the AIGBIT of AIFIFO in CDROM module
+//write to this register how many bits wanna pop,
+//and reading this register gets the corresponding bits data
+#define   AIU_AIFIFO2_GBIT                         (0x1442)
+#define P_AIU_AIFIFO2_GBIT                         (volatile unsigned int *)((0x1442  << 2) + 0xffd00000)
+//Same function as the AICLB of AIFIFO in CDROM module
+//return the leading zeros by reading this registers
+#define   AIU_AIFIFO2_CLB                          (0x1443)
+#define P_AIU_AIFIFO2_CLB                          (volatile unsigned int *)((0x1443  << 2) + 0xffd00000)
+//CRC control register, read/write
+//Bit 0		CRC caculation start
+//Bit 1		CRC core soft reset
+//Bit 2		CRC input register clear
+//Bit 3		CRC pop data from FIFO enable
+//Bit 13:8	CRC polynomial equation order, between 1 to 32
+#define   AIU_CRC_CTRL                             (0x1444)
+#define P_AIU_CRC_CTRL                             (volatile unsigned int *)((0x1444  << 2) + 0xffd00000)
+//16'h1000
+//CRC status register, read only
+//Bit 7:4	CRC internal shift register bit select, just for debug purpose
+//Bit 3		CRC internal shift register data valid, just for debug purpose
+//Bit 2		CRC input register data valid
+//Bit 1		CRC result, 1: CRC not correct, 0: CRC correct
+//Bit 0		CRC state,  1: CRC busy, 0: CRC idle
+#define   AIU_CRC_STATUS                           (0x1445)
+#define P_AIU_CRC_STATUS                           (volatile unsigned int *)((0x1445  << 2) + 0xffd00000)
+//CRC internal shift register, read only, for debug purpose
+#define   AIU_CRC_SHIFT_REG                        (0x1446)
+#define P_AIU_CRC_SHIFT_REG                        (volatile unsigned int *)((0x1446  << 2) + 0xffd00000)
+//CRC data input register, read/write
+#define   AIU_CRC_IREG                             (0x1447)
+#define P_AIU_CRC_IREG                             (volatile unsigned int *)((0x1447  << 2) + 0xffd00000)
+//16'h0000
+//CRC calculation register high-bit part [31:16], read/write
+#define   AIU_CRC_CAL_REG1                         (0x1448)
+#define P_AIU_CRC_CAL_REG1                         (volatile unsigned int *)((0x1448  << 2) + 0xffd00000)
+//CRC calculation register low-bit part [15:0], read/write
+#define   AIU_CRC_CAL_REG0                         (0x1449)
+#define P_AIU_CRC_CAL_REG0                         (volatile unsigned int *)((0x1449  << 2) + 0xffd00000)
+//32'h00000000
+//CRC polynomial coefficient high-bit part [31:16], read/write
+#define   AIU_CRC_POLY_COEF1                       (0x144a)
+#define P_AIU_CRC_POLY_COEF1                       (volatile unsigned int *)((0x144a  << 2) + 0xffd00000)
+//CRC polynomial coefficient low-bit part [15:0], read/write
+#define   AIU_CRC_POLY_COEF0                       (0x144b)
+#define P_AIU_CRC_POLY_COEF0                       (volatile unsigned int *)((0x144b  << 2) + 0xffd00000)
+//32'h80050000			default CRC-16
+//CRC frame size, high-bit part [19:16], read/write
+#define   AIU_CRC_BIT_SIZE1                        (0x144c)
+#define P_AIU_CRC_BIT_SIZE1                        (volatile unsigned int *)((0x144c  << 2) + 0xffd00000)
+//CRC frame size, low-bit part [15:0],	 read/write
+#define   AIU_CRC_BIT_SIZE0                        (0x144d)
+#define P_AIU_CRC_BIT_SIZE0                        (volatile unsigned int *)((0x144d  << 2) + 0xffd00000)
+//20'hfffff
+//how many bits have been processed right now in the current frame, read only
+//high-bit part [19:16]
+#define   AIU_CRC_BIT_CNT1                         (0x144e)
+#define P_AIU_CRC_BIT_CNT1                         (volatile unsigned int *)((0x144e  << 2) + 0xffd00000)
+//low-bit part [15:0]
+#define   AIU_CRC_BIT_CNT0                         (0x144f)
+#define P_AIU_CRC_BIT_CNT0                         (volatile unsigned int *)((0x144f  << 2) + 0xffd00000)
+// -------------------------------------
+// AMCLK Measurement
+// -------------------------------------
+// Used to measure the amclk frequency
+#define   AIU_AMCLK_GATE_HI                        (0x1450)
+#define P_AIU_AMCLK_GATE_HI                        (volatile unsigned int *)((0x1450  << 2) + 0xffd00000)
+#define   AIU_AMCLK_GATE_LO                        (0x1451)
+#define P_AIU_AMCLK_GATE_LO                        (volatile unsigned int *)((0x1451  << 2) + 0xffd00000)
+#define   AIU_AMCLK_MSR                            (0x1452)
+#define P_AIU_AMCLK_MSR                            (volatile unsigned int *)((0x1452  << 2) + 0xffd00000)
+#define   AIU_AUDAC_CTRL0                          (0x1453)
+#define P_AIU_AUDAC_CTRL0                          (volatile unsigned int *)((0x1453  << 2) + 0xffd00000)
+// -------------------------------------
+// Super Simple Delta Sigma DAC
+// -------------------------------------
+// bit 15   1 = invert the clock to the analog filter
+// bit 14   1 = digital mute
+// bit 13   1 = enable analog mute (in the analog block)
+// bit 12   1 = enable Right channel 3 in the analog block
+// bit 11   1 = enable Left  channel 3 in the analog block
+// bit 10   1 = enable Right channel 2 in the analog block
+// bit  9   1 = enable Left  channel 2 in the analog block
+// bit  8   1 = enable Right channel 1 in the analog block
+// bit  7   1 = enable Left  channel 1 in the analog block
+// bit  6   1 = enable Right channel 0 in the analog block
+// bit  5   1 = enable Left  channel 0 in the analog block
+// bit  4:  bit select for serial input data
+// bit  3:  invert alrclk used by the delta-sigma DAC
+// bit  2:  1 = use serial I2S data.  0 = use parallel audio data
+// bits 1:0 Which data to send to the delta-sigma DAC
+//              11 = use channel 3 data
+//              10 = use channel 2 data
+//              01 = use channel 1 data
+//              00 = use channel 0 data
+#define   AIU_DELTA_SIGMA0                         (0x1455)
+#define P_AIU_DELTA_SIGMA0                         (volatile unsigned int *)((0x1455  << 2) + 0xffd00000)
+// Delta Sigma MUTE Value
+#define   AIU_DELTA_SIGMA1                         (0x1456)
+#define P_AIU_DELTA_SIGMA1                         (volatile unsigned int *)((0x1456  << 2) + 0xffd00000)
+// Additional Audio filter controls
+#define   AIU_DELTA_SIGMA2                         (0x1457)
+#define P_AIU_DELTA_SIGMA2                         (volatile unsigned int *)((0x1457  << 2) + 0xffd00000)
+//Bit 14, left channel Delta Sigma modulator soft reset
+//Bit 13, right channel Delta Sigma modulator soft reset
+//Bit 12, left channel Delta Sigma modulator internal state clear enable when it is unstable
+//Bit 11, right channel Delta Sigma modulator internal state clear enable when it is unstable
+//Bit 10, left channel Delta Sigma detect unstable state enable
+//Bit  9, right channel Delta Sigma detect unstable state enable
+//Bit  8, dither high pass filter enable in the Delta Sigma loop
+//Bit 7:6, reserved
+//Bit 5:0, Delta Sigma input data gain  0/32 ~ 63/32
+//default: 16'h3
+#define   AIU_DELTA_SIGMA3                         (0x1458)
+#define P_AIU_DELTA_SIGMA3                         (volatile unsigned int *)((0x1458  << 2) + 0xffd00000)
+//15:8, Added Delta Sigma DC level, range:+-1/2, minimium: +-1/128 (assume max is -1 ~ +1)
+//7:0, max same sequence number, used for unstable detection
+//default: 16'h0
+#define   AIU_DELTA_SIGMA4                         (0x1459)
+#define P_AIU_DELTA_SIGMA4                         (volatile unsigned int *)((0x1459  << 2) + 0xffd00000)
+//Bit 15:8, square wave divide num
+//Bit 7:0, square wave amplitude, -1/4 ~ 1/4, minimium: +-1/1024
+//default: 16'h0
+#define   AIU_DELTA_SIGMA5                         (0x145a)
+#define P_AIU_DELTA_SIGMA5                         (volatile unsigned int *)((0x145a  << 2) + 0xffd00000)
+//Bit 11:8, loop dither amplitude2, 0/32 ~ 15/32
+//Bit 7:4,  loop dither amplitude1, 0/32 ~ 15/32
+//Bit 3:0,  loop dither amplitude0, 0/32 ~ 15/32
+//default: 16'h0
+#define   AIU_DELTA_SIGMA6                         (0x145b)
+#define P_AIU_DELTA_SIGMA6                         (volatile unsigned int *)((0x145b  << 2) + 0xffd00000)
+//Bit 15:8, loop dithering threshold1   0, 1/512, 2/512 ... 1/2
+//Bit 7:0,  loop dithering threshold0   0, 1/512, 2/512 ... 1/2
+//default: 16'h0
+#define   AIU_DELTA_SIGMA7                         (0x145c)
+#define P_AIU_DELTA_SIGMA7                         (volatile unsigned int *)((0x145c  << 2) + 0xffd00000)
+//read only
+//Bit 15:8  left channel Delta Sigma clear counter number, how many times Delta Sigma has been reseted
+//          It will saturate to 255, if more than 255 time
+//Bit 7:0   left channel max same sequence number
+#define   AIU_DELTA_SIGMA_LCNTS                    (0x145d)
+#define P_AIU_DELTA_SIGMA_LCNTS                    (volatile unsigned int *)((0x145d  << 2) + 0xffd00000)
+//read only
+//Bit 15:8  right channel Delta Sigma clear counter number, how many times Delta Sigma has been reseted
+//          It will saturate to 255, if more than 255 time
+//Bit 7:0   right channel max same sequence number
+#define   AIU_DELTA_SIGMA_RCNTS                    (0x145e)
+#define P_AIU_DELTA_SIGMA_RCNTS                    (volatile unsigned int *)((0x145e  << 2) + 0xffd00000)
+// --------------------------------------------
+// I2S DDR Interface
+// --------------------------------------------
+// The I2S start pointer into DDR memory is a 32-bit number
+#define   AIU_MEM_I2S_START_PTR                    (0x1460)
+#define P_AIU_MEM_I2S_START_PTR                    (volatile unsigned int *)((0x1460  << 2) + 0xffd00000)
+#define   AIU_MEM_I2S_RD_PTR                       (0x1461)
+#define P_AIU_MEM_I2S_RD_PTR                       (volatile unsigned int *)((0x1461  << 2) + 0xffd00000)
+#define   AIU_MEM_I2S_END_PTR                      (0x1462)
+#define P_AIU_MEM_I2S_END_PTR                      (volatile unsigned int *)((0x1462  << 2) + 0xffd00000)
+// There are two masks that control how data is read:
+// [31:16] IRQ block.
+// [15:8] chan_mem_mask.  Each bit indicates which channels exist in memory
+// [7:0]  chan_rd_mask.   Each bit indicates which channels are READ from memory
+#define   AIU_MEM_I2S_MASKS                        (0x1463)
+#define P_AIU_MEM_I2S_MASKS                        (volatile unsigned int *)((0x1463  << 2) + 0xffd00000)
+// I2S FIFO Control
+// bits [11:10] Select which hardware pointer to use to control the buffer
+//              level:
+//                  00 = parser
+//                  01 = audin_fifo0_wrpt
+//                  1x = audin_fifo1_wrpt
+// bit  [9]     Use level control: 1 = use buffer level control
+// bit  [8]     Read Only.  This bit is 1 when there is data available for reading
+// bit  [7]     Read only.  This bit will be high when we're fetching data from the DDR memory
+//              To reset this module, set cntl_enable = 0, and then wait for busy = 0.
+//              After that you can pulse cntl_init to start over
+// bit  [6]     cntl_mode_16bit:Set to 1 for 16 bit storage format in DDR
+// bits [5:3]   endian:  see $lib/rtl/ddr_endian.v
+// bit  [2]     cntl_empty_en   Set to 1 to enable reading data from the FIFO
+// bit  [1]     cntl_fill_en    Set to 1 to enable reading data from DDR memory
+// bit  [0]     cntl_init:      After setting the read pointers, sizes, channel masks
+//                              and read masks, set this bit to 1 and then to 0
+#define   AIU_MEM_I2S_CONTROL                      (0x1464)
+#define P_AIU_MEM_I2S_CONTROL                      (volatile unsigned int *)((0x1464  << 2) + 0xffd00000)
+// --------------------------------------------
+// IEC958 DDR Interface
+// --------------------------------------------
+// The IEC958 start pointer into DDR memory is a 32-bit number
+#define   AIU_MEM_IEC958_START_PTR                 (0x1465)
+#define P_AIU_MEM_IEC958_START_PTR                 (volatile unsigned int *)((0x1465  << 2) + 0xffd00000)
+#define   AIU_MEM_IEC958_RD_PTR                    (0x1466)
+#define P_AIU_MEM_IEC958_RD_PTR                    (volatile unsigned int *)((0x1466  << 2) + 0xffd00000)
+#define   AIU_MEM_IEC958_END_PTR                   (0x1467)
+#define P_AIU_MEM_IEC958_END_PTR                   (volatile unsigned int *)((0x1467  << 2) + 0xffd00000)
+// There are two masks that control how data is read:
+// [15:8] chan_mem_mask.  Each bit indicates which channels exist in memory
+// [7:0]  chan_rd_mask.   Each bit indicates which channels are READ from memory
+#define   AIU_MEM_IEC958_MASKS                     (0x1468)
+#define P_AIU_MEM_IEC958_MASKS                     (volatile unsigned int *)((0x1468  << 2) + 0xffd00000)
+// IEC958 FIFO Control
+// bit  [31]    A_urgent
+// bit  [30]    ch_always_8
+// bit  [29:24] rdata_rd_base_begin ( used for select from different channel )
+// bit  [23:14] reserved
+// bit  [13]    cntl_sim_en
+// bit  [12]    cntl_use_level
+// bit  [11]    Read only.      This bit will be set to 1 when there is data in the FIFO to process
+// bit  [10]    Read only.  This bit will be high when we're fetching data from the DDR memory
+//              To reset this module, set cntl_enable = 0, and then wait for busy = 0.
+//              After that you can pulse cntl_init to start over
+// bit  [9]     cntl_endian_jic Just in case endian.  last minute byte swap of the data out of
+//                              the FIFO to the rest of the IEC958 logic
+// bit  [8]     mode_raw:       Set this bit to 1 to tell the IEC958 FIFO to read
+//                              and process data linearly for raw data.
+// bit  [7]     cntl_mode_16bit:Set to 1 for 16 bit storage format in DDR.  Only valid when mode_raw = 0
+// bit  [6]     cntl_rd_ddr     Set this bit to read if you want AIU_MEM_IEC958_RD_PTR and
+//                              AIU_MEM_IEC958_RD_PTR_HIGH to refer to the pointer into DDR memory.
+//                              Otherwise, the curr_ptr registers refer to the byte address of the data
+//                              at the output of the FIFO to the rest of the IEC958 logic
+// bits [5:3]   endian:         see $lib/rtl/ddr_endian.v
+// bit  [2]     cntl_empty_en   Set to 1 to enable reading the DDR memory FIFO and filling the pipeline to get-bit
+//                              Set cntl_empty_en = cntl_fill_en = 0 when pulsing cntl_init
+// bit  [1]     cntl_fill_en    Set to 1 to enable reading data from DDR memory
+// bit  [0]     cntl_init:      After setting the read pointers, sizes, channel masks
+//                              and read masks, set this bit to 1 and then to 0
+#define   AIU_MEM_IEC958_CONTROL                   (0x1469)
+#define P_AIU_MEM_IEC958_CONTROL                   (volatile unsigned int *)((0x1469  << 2) + 0xffd00000)
+// --------------------------------------------
+// AIFIFO2 DDR Interface
+// --------------------------------------------
+// The AIFIFO2 start pointer into DDR memory is a 32-bit number
+// The Start pointer will automatically be truncated to land on
+// an 8-byte boundary.  That is, bits [2:0] = 0;
+#define   AIU_MEM_AIFIFO2_START_PTR                (0x146a)
+#define P_AIU_MEM_AIFIFO2_START_PTR                (volatile unsigned int *)((0x146a  << 2) + 0xffd00000)
+// The current pointer points so some location between the START and END
+// pointers.  The current pointer is a BYTE pointer.  That is, you can
+// point to any BYTE address within the START/END range
+#define   AIU_MEM_AIFIFO2_CURR_PTR                 (0x146b)
+#define P_AIU_MEM_AIFIFO2_CURR_PTR                 (volatile unsigned int *)((0x146b  << 2) + 0xffd00000)
+#define   AIU_MEM_AIFIFO2_END_PTR                  (0x146c)
+#define P_AIU_MEM_AIFIFO2_END_PTR                  (volatile unsigned int *)((0x146c  << 2) + 0xffd00000)
+#define   AIU_MEM_AIFIFO2_BYTES_AVAIL              (0x146d)
+#define P_AIU_MEM_AIFIFO2_BYTES_AVAIL              (volatile unsigned int *)((0x146d  << 2) + 0xffd00000)
+// AIFIFO2 FIFO Control
+// bit  [15:11] unused
+// bit  [10]    use_level       Set this bit to 1 to enable filling of the FIFO controlled by the buffer
+//                              level control.  If this bit is 0, then use bit[1] to control the enabling of filling
+// bit  [9]     Data Ready.     This bit is set when data can be popped
+// bit  [8]     fill busy       This bit will be high when we're fetching data from the DDR memory
+//                              To reset this module, set cntl_enable = 0, and then wait for busy = 0.
+//                              After that you can pulse cntl_init to start over
+// bit  [7]     cntl_endian_jic Just in case endian.  last minute byte swap of the data out of
+//                              the FIFO to getbit
+// bit  [6]     unused
+// bits [5:3]   endian:         see $lib/rtl/ddr_endian.v
+// bit  [2]     cntl_empty_en   Set to 1 to enable reading the DDR memory FIFO and filling the pipeline to get-bit
+//                              Set cntl_empty_en = cntl_fill_en = 0 when pulsing cntl_init
+// bit  [1]     cntl_fill_en    Set to 1 to enable reading data from DDR memory
+// bit  [0]     cntl_init:      After setting the read pointers, sizes, channel masks
+//                              and read masks, set this bit to 1 and then to 0
+//                              NOTE:  You don't need to pulse cntl_init if only the start address is
+//                              being changed
+#define   AIU_MEM_AIFIFO2_CONTROL                  (0x146e)
+#define P_AIU_MEM_AIFIFO2_CONTROL                  (volatile unsigned int *)((0x146e  << 2) + 0xffd00000)
+// --------------------------------------------
+// AIFIFO2 Buffer Level Manager
+// --------------------------------------------
+#define   AIU_MEM_AIFIFO2_MAN_WP                   (0x146f)
+#define P_AIU_MEM_AIFIFO2_MAN_WP                   (volatile unsigned int *)((0x146f  << 2) + 0xffd00000)
+#define   AIU_MEM_AIFIFO2_MAN_RP                   (0x1470)
+#define P_AIU_MEM_AIFIFO2_MAN_RP                   (volatile unsigned int *)((0x1470  << 2) + 0xffd00000)
+#define   AIU_MEM_AIFIFO2_LEVEL                    (0x1471)
+#define P_AIU_MEM_AIFIFO2_LEVEL                    (volatile unsigned int *)((0x1471  << 2) + 0xffd00000)
+//
+// bit  [1]     manual mode     Set to 1 for manual write pointer mode
+// bit  [0]     Init            Set high then low after everything has been initialized
+#define   AIU_MEM_AIFIFO2_BUF_CNTL                 (0x1472)
+#define P_AIU_MEM_AIFIFO2_BUF_CNTL                 (volatile unsigned int *)((0x1472  << 2) + 0xffd00000)
+// --------------------------------------------
+// I2S Buffer Level Manager
+// --------------------------------------------
+#define   AIU_MEM_I2S_MAN_WP                       (0x1473)
+#define P_AIU_MEM_I2S_MAN_WP                       (volatile unsigned int *)((0x1473  << 2) + 0xffd00000)
+#define   AIU_MEM_I2S_MAN_RP                       (0x1474)
+#define P_AIU_MEM_I2S_MAN_RP                       (volatile unsigned int *)((0x1474  << 2) + 0xffd00000)
+#define   AIU_MEM_I2S_LEVEL                        (0x1475)
+#define P_AIU_MEM_I2S_LEVEL                        (volatile unsigned int *)((0x1475  << 2) + 0xffd00000)
+//
+// bit  [1]     mode            0 = parser (or audin_fifo0 or audin_fifo1),
+//                              1 for manual write pointer
+// bit  [0]     Init            Set high then low after everything has been initialized
+#define   AIU_MEM_I2S_BUF_CNTL                     (0x1476)
+#define P_AIU_MEM_I2S_BUF_CNTL                     (volatile unsigned int *)((0x1476  << 2) + 0xffd00000)
+#define   AIU_MEM_I2S_BUF_WRAP_COUNT               (0x1477)
+#define P_AIU_MEM_I2S_BUF_WRAP_COUNT               (volatile unsigned int *)((0x1477  << 2) + 0xffd00000)
+// bit 29:24 A_brst_num
+// bit 21:16 A_id
+// bit 15:0 level_hold
+#define   AIU_MEM_I2S_MEM_CTL                      (0x1478)
+#define P_AIU_MEM_I2S_MEM_CTL                      (volatile unsigned int *)((0x1478  << 2) + 0xffd00000)
+//-----------------------------------------------------------------------------
+// Additional IEC958 registers (new feature)
+//-----------------------------------------------------------------------------
+// bit 29:24 A_brst_num
+// bit 21:16 A_id
+// bit 15:0 level_hold
+#define   AIU_MEM_IEC958_MEM_CTL                   (0x1479)
+#define P_AIU_MEM_IEC958_MEM_CTL                   (volatile unsigned int *)((0x1479  << 2) + 0xffd00000)
+#define   AIU_MEM_IEC958_WRAP_COUNT                (0x147a)
+#define P_AIU_MEM_IEC958_WRAP_COUNT                (volatile unsigned int *)((0x147a  << 2) + 0xffd00000)
+#define   AIU_MEM_IEC958_IRQ_LEVEL                 (0x147b)
+#define P_AIU_MEM_IEC958_IRQ_LEVEL                 (volatile unsigned int *)((0x147b  << 2) + 0xffd00000)
+#define   AIU_MEM_IEC958_MAN_WP                    (0x147c)
+#define P_AIU_MEM_IEC958_MAN_WP                    (volatile unsigned int *)((0x147c  << 2) + 0xffd00000)
+#define   AIU_MEM_IEC958_MAN_RP                    (0x147d)
+#define P_AIU_MEM_IEC958_MAN_RP                    (volatile unsigned int *)((0x147d  << 2) + 0xffd00000)
+#define   AIU_MEM_IEC958_LEVEL                     (0x147e)
+#define P_AIU_MEM_IEC958_LEVEL                     (volatile unsigned int *)((0x147e  << 2) + 0xffd00000)
+#define   AIU_MEM_IEC958_BUF_CNTL                  (0x147f)
+#define P_AIU_MEM_IEC958_BUF_CNTL                  (volatile unsigned int *)((0x147f  << 2) + 0xffd00000)
+//-----------------------------------------------------------------------------
+// add for AIFIFO channel (old $cdrom/rtl/cdr_top/getbit)
+//-----------------------------------------------------------------------------
+// Bit 3 	CRC pop aififo enable
+// Bit 2		writing to this bit to 1 causes CRC module reset
+// Bit 1		enable aififo
+// Bit 0		writing to this bit to 1 causes aififo soft reset
+#define   AIU_AIFIFO_CTRL                          (0x1480)
+#define P_AIU_AIFIFO_CTRL                          (volatile unsigned int *)((0x1480  << 2) + 0xffd00000)
+//'h0000
+// AIFIFO status register
+// Bit 13		//aififo request to dcu status
+// Bit 12		//dcu select status
+// Bit 11:5		//aififo word counter number
+// Bit 4:0		//how many bits left in the first pop register
+#define   AIU_AIFIFO_STATUS                        (0x1481)
+#define P_AIU_AIFIFO_STATUS                        (volatile unsigned int *)((0x1481  << 2) + 0xffd00000)
+// Same fucntion as the AIGBIT of AIFIFO in CDROM module
+// write to this register how many bits wanna pop,
+// and reading this register gets the corresponding bits data
+#define   AIU_AIFIFO_GBIT                          (0x1482)
+#define P_AIU_AIFIFO_GBIT                          (volatile unsigned int *)((0x1482  << 2) + 0xffd00000)
+// Same function as the AICLB of AIFIFO in CDROM module
+// return the leading zeros by reading this registers
+#define   AIU_AIFIFO_CLB                           (0x1483)
+#define P_AIU_AIFIFO_CLB                           (volatile unsigned int *)((0x1483  << 2) + 0xffd00000)
+// --------------------------------------------
+// AIFIFO DDR Interface
+// --------------------------------------------
+// The AIFIFO start pointer into DDR memory is a 32-bit number
+// The Start pointer will automatically be truncated to land on
+// an 8-byte boundary.  That is, bits [2:0] = 0;
+#define   AIU_MEM_AIFIFO_START_PTR                 (0x1484)
+#define P_AIU_MEM_AIFIFO_START_PTR                 (volatile unsigned int *)((0x1484  << 2) + 0xffd00000)
+// The current pointer points so some location between the START and END
+// pointers.  The current pointer is a BYTE pointer.  That is, you can
+// point to any BYTE address within the START/END range
+#define   AIU_MEM_AIFIFO_CURR_PTR                  (0x1485)
+#define P_AIU_MEM_AIFIFO_CURR_PTR                  (volatile unsigned int *)((0x1485  << 2) + 0xffd00000)
+#define   AIU_MEM_AIFIFO_END_PTR                   (0x1486)
+#define P_AIU_MEM_AIFIFO_END_PTR                   (volatile unsigned int *)((0x1486  << 2) + 0xffd00000)
+#define   AIU_MEM_AIFIFO_BYTES_AVAIL               (0x1487)
+#define P_AIU_MEM_AIFIFO_BYTES_AVAIL               (volatile unsigned int *)((0x1487  << 2) + 0xffd00000)
+// AIFIFO FIFO Control
+// bit  [15:11] unused
+// bit  [10]    use_level       Set this bit to 1 to enable filling of the FIFO controlled by the buffer
+//                              level control.  If this bit is 0, then use bit[1] to control the enabling of filling
+// bit  [9]     Data Ready.     This bit is set when data can be popped
+// bit  [8]     fill busy       This bit will be high when we're fetching data from the DDR memory
+//                              To reset this module, set cntl_enable = 0, and then wait for busy = 0.
+//                              After that you can pulse cntl_init to start over
+// bit  [7]     cntl_endian_jic Just in case endian.  last minute byte swap of the data out of
+//                              the FIFO to getbit
+// bit  [6]     unused
+// bits [5:3]   endian:         see $lib/rtl/ddr_endian.v
+// bit  [2]     cntl_empty_en   Set to 1 to enable reading the DDR memory FIFO and filling the pipeline to get-bit
+//                              Set cntl_empty_en = cntl_fill_en = 0 when pulsing cntl_init
+// bit  [1]     cntl_fill_en    Set to 1 to enable reading data from DDR memory
+// bit  [0]     cntl_init:      After setting the read pointers, sizes, channel masks
+//                              and read masks, set this bit to 1 and then to 0
+//                              NOTE:  You don't need to pulse cntl_init if only the start address is
+//                              being changed
+#define   AIU_MEM_AIFIFO_CONTROL                   (0x1488)
+#define P_AIU_MEM_AIFIFO_CONTROL                   (volatile unsigned int *)((0x1488  << 2) + 0xffd00000)
+// --------------------------------------------
+// AIFIFO Buffer Level Manager
+// --------------------------------------------
+#define   AIU_MEM_AIFIFO_MAN_WP                    (0x1489)
+#define P_AIU_MEM_AIFIFO_MAN_WP                    (volatile unsigned int *)((0x1489  << 2) + 0xffd00000)
+#define   AIU_MEM_AIFIFO_MAN_RP                    (0x148a)
+#define P_AIU_MEM_AIFIFO_MAN_RP                    (volatile unsigned int *)((0x148a  << 2) + 0xffd00000)
+#define   AIU_MEM_AIFIFO_LEVEL                     (0x148b)
+#define P_AIU_MEM_AIFIFO_LEVEL                     (volatile unsigned int *)((0x148b  << 2) + 0xffd00000)
+//
+// bit  [1]     manual mode     Set to 1 for manual write pointer mode
+// bit  [0]     Init            Set high then low after everything has been initialized
+#define   AIU_MEM_AIFIFO_BUF_CNTL                  (0x148c)
+#define P_AIU_MEM_AIFIFO_BUF_CNTL                  (volatile unsigned int *)((0x148c  << 2) + 0xffd00000)
+#define   AIU_MEM_AIFIFO_BUF_WRAP_COUNT            (0x148d)
+#define P_AIU_MEM_AIFIFO_BUF_WRAP_COUNT            (volatile unsigned int *)((0x148d  << 2) + 0xffd00000)
+#define   AIU_MEM_AIFIFO2_BUF_WRAP_COUNT           (0x148e)
+#define P_AIU_MEM_AIFIFO2_BUF_WRAP_COUNT           (volatile unsigned int *)((0x148e  << 2) + 0xffd00000)
+// bit 29:24 A_brst_num
+// bit 21:16 A_id
+// bit 15:0 level_hold
+#define   AIU_MEM_AIFIFO_MEM_CTL                   (0x148f)
+#define P_AIU_MEM_AIFIFO_MEM_CTL                   (volatile unsigned int *)((0x148f  << 2) + 0xffd00000)
+// bit 31:16 -- drop_bytes
+// bit 15:14 -- drop_status (Read-Only)
+// bit 13:12 -- sync_match_position (Read-Only)
+// bit 11:6 -- reserved
+// bit 5:4 -- TIME_STAMP_NUMBER, 0-32bits, 1-64bits, 2-96bits, 3-128bits
+// bit 3 -- stamp_soft_reset
+// bit 2 -- TIME_STAMP_length_enable
+// bit 1 -- TIME_STAMP_sync64_enable
+// bit 0 -- TIME_STAMP_enable
+#define   AIFIFO_TIME_STAMP_CNTL                   (0x1490)
+#define P_AIFIFO_TIME_STAMP_CNTL                   (volatile unsigned int *)((0x1490  << 2) + 0xffd00000)
+// bit 31:0 -- TIME_STAMP_SYNC_CODE_0
+#define   AIFIFO_TIME_STAMP_SYNC_0                 (0x1491)
+#define P_AIFIFO_TIME_STAMP_SYNC_0                 (volatile unsigned int *)((0x1491  << 2) + 0xffd00000)
+// bit 31:0 -- TIME_STAMP_SYNC_CODE_1
+#define   AIFIFO_TIME_STAMP_SYNC_1                 (0x1492)
+#define P_AIFIFO_TIME_STAMP_SYNC_1                 (volatile unsigned int *)((0x1492  << 2) + 0xffd00000)
+// bit 31:0 TIME_STAMP_0
+#define   AIFIFO_TIME_STAMP_0                      (0x1493)
+#define P_AIFIFO_TIME_STAMP_0                      (volatile unsigned int *)((0x1493  << 2) + 0xffd00000)
+// bit 31:0 TIME_STAMP_1
+#define   AIFIFO_TIME_STAMP_1                      (0x1494)
+#define P_AIFIFO_TIME_STAMP_1                      (volatile unsigned int *)((0x1494  << 2) + 0xffd00000)
+// bit 31:0 TIME_STAMP_2
+#define   AIFIFO_TIME_STAMP_2                      (0x1495)
+#define P_AIFIFO_TIME_STAMP_2                      (volatile unsigned int *)((0x1495  << 2) + 0xffd00000)
+// bit 31:0 TIME_STAMP_3
+#define   AIFIFO_TIME_STAMP_3                      (0x1496)
+#define P_AIFIFO_TIME_STAMP_3                      (volatile unsigned int *)((0x1496  << 2) + 0xffd00000)
+// bit 31:0 TIME_STAMP_LENGTH
+#define   AIFIFO_TIME_STAMP_LENGTH                 (0x1497)
+#define P_AIFIFO_TIME_STAMP_LENGTH                 (volatile unsigned int *)((0x1497  << 2) + 0xffd00000)
+// bit 31:16 -- drop_bytes
+// bit 15:14 -- drop_status (Read-Only)
+// bit 13:12 -- sync_match_position (Read-Only)
+// bit 11:6 -- reserved
+// bit 5:4 -- TIME_STAMP_NUMBER, 0-32bits, 1-64bits, 2-96bits, 3-128bits
+// bit 3 -- stamp_soft_reset
+// bit 2 -- TIME_STAMP_length_enable
+// bit 1 -- TIME_STAMP_sync64_enable
+// bit 0 -- TIME_STAMP_enable
+#define   AIFIFO2_TIME_STAMP_CNTL                  (0x1498)
+#define P_AIFIFO2_TIME_STAMP_CNTL                  (volatile unsigned int *)((0x1498  << 2) + 0xffd00000)
+// bit 31:0 -- TIME_STAMP_SYNC_CODE_0
+#define   AIFIFO2_TIME_STAMP_SYNC_0                (0x1499)
+#define P_AIFIFO2_TIME_STAMP_SYNC_0                (volatile unsigned int *)((0x1499  << 2) + 0xffd00000)
+// bit 31:0 -- TIME_STAMP_SYNC_CODE_1
+#define   AIFIFO2_TIME_STAMP_SYNC_1                (0x149a)
+#define P_AIFIFO2_TIME_STAMP_SYNC_1                (volatile unsigned int *)((0x149a  << 2) + 0xffd00000)
+// bit 31:0 TIME_STAMP_0
+#define   AIFIFO2_TIME_STAMP_0                     (0x149b)
+#define P_AIFIFO2_TIME_STAMP_0                     (volatile unsigned int *)((0x149b  << 2) + 0xffd00000)
+// bit 31:0 TIME_STAMP_1
+#define   AIFIFO2_TIME_STAMP_1                     (0x149c)
+#define P_AIFIFO2_TIME_STAMP_1                     (volatile unsigned int *)((0x149c  << 2) + 0xffd00000)
+// bit 31:0 TIME_STAMP_2
+#define   AIFIFO2_TIME_STAMP_2                     (0x149d)
+#define P_AIFIFO2_TIME_STAMP_2                     (volatile unsigned int *)((0x149d  << 2) + 0xffd00000)
+// bit 31:0 TIME_STAMP_3
+#define   AIFIFO2_TIME_STAMP_3                     (0x149e)
+#define P_AIFIFO2_TIME_STAMP_3                     (volatile unsigned int *)((0x149e  << 2) + 0xffd00000)
+// bit 31:0 TIME_STAMP_LENGTH
+#define   AIFIFO2_TIME_STAMP_LENGTH                (0x149f)
+#define P_AIFIFO2_TIME_STAMP_LENGTH                (volatile unsigned int *)((0x149f  << 2) + 0xffd00000)
+// bit 31:16 -- drop_bytes
+// bit 15:14 -- drop_status (Read-Only)
+// bit 13:12 -- sync_match_position (Read-Only)
+// bit 11:6 -- reserved
+// bit 5:4 -- TIME_STAMP_NUMBER, 0-32bits, 1-64bits, 2-96bits, 3-128bits
+// bit 3 -- stamp_soft_reset
+// bit 2 -- TIME_STAMP_length_enable
+// bit 1 -- TIME_STAMP_sync64_enable
+// bit 0 -- TIME_STAMP_enable
+#define   IEC958_TIME_STAMP_CNTL                   (0x14a0)
+#define P_IEC958_TIME_STAMP_CNTL                   (volatile unsigned int *)((0x14a0  << 2) + 0xffd00000)
+// bit 31:0 -- TIME_STAMP_SYNC_CODE_0
+#define   IEC958_TIME_STAMP_SYNC_0                 (0x14a1)
+#define P_IEC958_TIME_STAMP_SYNC_0                 (volatile unsigned int *)((0x14a1  << 2) + 0xffd00000)
+// bit 31:0 -- TIME_STAMP_SYNC_CODE_1
+#define   IEC958_TIME_STAMP_SYNC_1                 (0x14a2)
+#define P_IEC958_TIME_STAMP_SYNC_1                 (volatile unsigned int *)((0x14a2  << 2) + 0xffd00000)
+// bit 31:0 TIME_STAMP_0
+#define   IEC958_TIME_STAMP_0                      (0x14a3)
+#define P_IEC958_TIME_STAMP_0                      (volatile unsigned int *)((0x14a3  << 2) + 0xffd00000)
+// bit 31:0 TIME_STAMP_1
+#define   IEC958_TIME_STAMP_1                      (0x14a4)
+#define P_IEC958_TIME_STAMP_1                      (volatile unsigned int *)((0x14a4  << 2) + 0xffd00000)
+// bit 31:0 TIME_STAMP_2
+#define   IEC958_TIME_STAMP_2                      (0x14a5)
+#define P_IEC958_TIME_STAMP_2                      (volatile unsigned int *)((0x14a5  << 2) + 0xffd00000)
+// bit 31:0 TIME_STAMP_3
+#define   IEC958_TIME_STAMP_3                      (0x14a6)
+#define P_IEC958_TIME_STAMP_3                      (volatile unsigned int *)((0x14a6  << 2) + 0xffd00000)
+// bit 31:0 TIME_STAMP_LENGTH
+#define   IEC958_TIME_STAMP_LENGTH                 (0x14a7)
+#define P_IEC958_TIME_STAMP_LENGTH                 (volatile unsigned int *)((0x14a7  << 2) + 0xffd00000)
+// bit 29:24 A_brst_num
+// bit 21:16 A_id
+// bit 15:0 level_hold
+#define   AIU_MEM_AIFIFO2_MEM_CTL                  (0x14a8)
+#define P_AIU_MEM_AIFIFO2_MEM_CTL                  (volatile unsigned int *)((0x14a8  << 2) + 0xffd00000)
+// --------------------------------------------
+// CBUS_DDR interface for I2S_FAST
+// --------------------------------------------
+// bit[31:26] unused
+// bit[25]      A_req       level
+// bit[24]      data_req    If this bit is 1, then (a_req_cnt != 'h0)
+// bit[23:16]   a_req_cnt   This value corresponds to the number of 32-bit words
+//                          requested by the i2s_fast() module
+// bit[15:7]    unused
+// bit[6]                   Set this bit to mux in the cbus_ddr_interface
+// bit[5]                   Set this bit to allow back to back A_req's to be serviced
+// bit[4]                   Set this bit to generate an IRQ on the first A_req
+//                          If this bit is 0, then an IRQ is generated after all requests
+//                          are completed and how many 32-bit words to send is calculated.
+// bit[3:1]                 Endian
+// bit[0]                   Set this bit enable the cbus_ddr_interface
+#define   AIU_I2S_CBUS_DDR_CNTL                    (0x14a9)
+#define P_AIU_I2S_CBUS_DDR_CNTL                    (volatile unsigned int *)((0x14a9  << 2) + 0xffd00000)
+// 32-bit data to write to the cbus_ddr interface
+#define   AIU_I2S_CBUS_DDR_WDATA                   (0x14aa)
+#define P_AIU_I2S_CBUS_DDR_WDATA                   (volatile unsigned int *)((0x14aa  << 2) + 0xffd00000)
+// First address associated with the first request by the i2s_fast() to read DDR data
+#define   AIU_I2S_CBUS_DDR_ADDR                    (0x14ab)
+#define P_AIU_I2S_CBUS_DDR_ADDR                    (volatile unsigned int *)((0x14ab  << 2) + 0xffd00000)
+//
+// Closing file:  aregs.h
+//
+//========================================================================
+//  CDROM Interface                                 (12'h600 - 12'h6ff)
+//
+//========================================================================
+//========================================================================
+//	registers for ge2d (12'h8a0 - 12'h8ff)
+//========================================================================
+////`include "ge2d_regs.h" //  not in cbus domain any more, it is located in vapb3 bus now
+//========================================================================
+//  DSP Co-Processor Registers			    ( 8'he00 - 12'hfff)
+//
+//========================================================================
+// Duplicate Address:  When actually used
+// please move to a different address
+// `define AUDIO_COP_CTL1      12'hf00  // r & w; r-> 6'h00,bsmod[2:0],acmod[2:0],lfeon,nfchans[2:0]
+//
+// Incorrect format....should be 8'bits only
+//
+// Removed by Chris Maslyar       `define AUDIO_COP_CTL2      12'hf01  // r & w; r-> frame_size[12:0],dsurmod[1:0]
+// Removed by Chris Maslyar
+// Removed by Chris Maslyar       //  f02 -f0d are special regs , not in ac3_reg.h, but used by CPU for AC3 operations
+// Removed by Chris Maslyar
+// Removed by Chris Maslyar       `define OPERAND_M_CTL       12'hf02
+// Removed by Chris Maslyar       `define OPERAND1_ADDR       12'hf03
+// Removed by Chris Maslyar       `define OPERAND2_ADDR       12'hf04
+// Removed by Chris Maslyar       `define RESULT_M_CTL        12'hf05
+// Removed by Chris Maslyar       `define RESULT1_ADDR        12'hf06
+// Removed by Chris Maslyar       `define RESULT2_ADDR        12'hf07
+// Removed by Chris Maslyar       `define ADD_SHFT_CTL        12'hf08
+// Removed by Chris Maslyar       `define OPERAND_ONE_H       12'hf09
+// Removed by Chris Maslyar       `define OPERAND_ONE_L       12'hf0a
+// Removed by Chris Maslyar       `define OPERAND_TWO_H       12'hf0b
+// Removed by Chris Maslyar       `define OPERAND_TWO_L       12'hf0c
+// Removed by Chris Maslyar       `define RESULT_H            12'hf0d
+// Removed by Chris Maslyar
+// Removed by Chris Maslyar
+// Removed by Chris Maslyar       `define RESULT_M            12'hf0e   // r & w; ac3_reg_14
+// Removed by Chris Maslyar
+// Removed by Chris Maslyar       // special reg
+// Removed by Chris Maslyar       `define RESULT_L            12'hf0f
+// Removed by Chris Maslyar
+// Removed by Chris Maslyar       //
+// Removed by Chris Maslyar       `define WMEM_R_PTR          12'hf10   // r & w ; endmant0 &1
+// Removed by Chris Maslyar
+// Removed by Chris Maslyar       `define WMEM_W_PTR          12'hf11
+// Removed by Chris Maslyar       `define AUDIO_LAYER         12'hf20
+// Removed by Chris Maslyar       `define AC3_DECODING        12'hf21
+// Removed by Chris Maslyar       `define AC3_DYNAMIC         12'hf22
+// Removed by Chris Maslyar       `define AC3_MELODY          12'hf23
+// Removed by Chris Maslyar       `define AC3_VOCAL           12'hf24
+//======================================
+//  CPU Assist module
+//
+//======================================
+// -----------------------------------------------
+// CBUS_BASE:  ASSIST_CBUS_BASE = 0x20
+// -----------------------------------------------
+//`define ASSIST_AMR_MBOX1_INT          8'h4d
+//`define ASSIST_AMR_MBOX2_INT          8'h4e
+#define   ASSIST_AMR_SCRATCH0                      (0x204f)
+#define P_ASSIST_AMR_SCRATCH0                      (volatile unsigned int *)((0x204f  << 2) + 0xffd00000)
+#define   ASSIST_AMR_SCRATCH1                      (0x2050)
+#define P_ASSIST_AMR_SCRATCH1                      (volatile unsigned int *)((0x2050  << 2) + 0xffd00000)
+#define   ASSIST_AMR_SCRATCH2                      (0x2051)
+#define P_ASSIST_AMR_SCRATCH2                      (volatile unsigned int *)((0x2051  << 2) + 0xffd00000)
+#define   ASSIST_AMR_SCRATCH3                      (0x2052)
+#define P_ASSIST_AMR_SCRATCH3                      (volatile unsigned int *)((0x2052  << 2) + 0xffd00000)
+#define   ASSIST_HW_REV                            (0x2053)
+#define P_ASSIST_HW_REV                            (volatile unsigned int *)((0x2053  << 2) + 0xffd00000)
+//`define ASSIST_CBUS_ARB               8'h54
+#define   ASSIST_POR_CONFIG                        (0x2055)
+#define P_ASSIST_POR_CONFIG                        (volatile unsigned int *)((0x2055  << 2) + 0xffd00000)
+#define   ASSIST_SPARE16_REG1                      (0x2056)
+#define P_ASSIST_SPARE16_REG1                      (volatile unsigned int *)((0x2056  << 2) + 0xffd00000)
+#define   ASSIST_SPARE16_REG2                      (0x2057)
+#define P_ASSIST_SPARE16_REG2                      (volatile unsigned int *)((0x2057  << 2) + 0xffd00000)
+#define   ASSIST_SPARE8_REG1                       (0x2058)
+#define P_ASSIST_SPARE8_REG1                       (volatile unsigned int *)((0x2058  << 2) + 0xffd00000)
+#define   ASSIST_SPARE8_REG2                       (0x2059)
+#define P_ASSIST_SPARE8_REG2                       (volatile unsigned int *)((0x2059  << 2) + 0xffd00000)
+// Duplicate Address...when used please move to a new address
+// `define TO_AMRISC_REG                 8'h59 // for amrisc
+#define   ASSIST_SPARE8_REG3                       (0x205a)
+#define P_ASSIST_SPARE8_REG3                       (volatile unsigned int *)((0x205a  << 2) + 0xffd00000)
+// Duplicate Address...when used please move to a new address
+// `define FROM_AMRISC_REG               8'h5a // for amrisc
+// Duplicate Address...when used please move to a new address
+// `define MPEG2_DECODER_CONTROL         8'h5b // for amrisc
+#define   AC3_CTRL_REG1                            (0x205b)
+#define P_AC3_CTRL_REG1                            (volatile unsigned int *)((0x205b  << 2) + 0xffd00000)
+#define   AC3_CTRL_REG2                            (0x205c)
+#define P_AC3_CTRL_REG2                            (volatile unsigned int *)((0x205c  << 2) + 0xffd00000)
+#define   AC3_CTRL_REG3                            (0x205d)
+#define P_AC3_CTRL_REG3                            (volatile unsigned int *)((0x205d  << 2) + 0xffd00000)
+#define   AC3_CTRL_REG4                            (0x205e)
+#define P_AC3_CTRL_REG4                            (volatile unsigned int *)((0x205e  << 2) + 0xffd00000)
+//`define ASSIST_PMEM_SPLIT             8'h5f
+#define   ASSIST_GEN_CNTL                          (0x2068)
+#define P_ASSIST_GEN_CNTL                          (volatile unsigned int *)((0x2068  << 2) + 0xffd00000)
+#define   EE_ASSIST_MBOX0_IRQ_REG                  (0x2070)
+#define P_EE_ASSIST_MBOX0_IRQ_REG                  (volatile unsigned int *)((0x2070  << 2) + 0xffd00000)
+#define   EE_ASSIST_MBOX0_CLR_REG                  (0x2071)
+#define P_EE_ASSIST_MBOX0_CLR_REG                  (volatile unsigned int *)((0x2071  << 2) + 0xffd00000)
+#define   EE_ASSIST_MBOX0_MASK                     (0x2072)
+#define P_EE_ASSIST_MBOX0_MASK                     (volatile unsigned int *)((0x2072  << 2) + 0xffd00000)
+#define   EE_ASSIST_MBOX0_FIQ_SEL                  (0x2073)
+#define P_EE_ASSIST_MBOX0_FIQ_SEL                  (volatile unsigned int *)((0x2073  << 2) + 0xffd00000)
+#define   EE_ASSIST_MBOX1_IRQ_REG                  (0x2074)
+#define P_EE_ASSIST_MBOX1_IRQ_REG                  (volatile unsigned int *)((0x2074  << 2) + 0xffd00000)
+#define   EE_ASSIST_MBOX1_CLR_REG                  (0x2075)
+#define P_EE_ASSIST_MBOX1_CLR_REG                  (volatile unsigned int *)((0x2075  << 2) + 0xffd00000)
+#define   EE_ASSIST_MBOX1_MASK                     (0x2076)
+#define P_EE_ASSIST_MBOX1_MASK                     (volatile unsigned int *)((0x2076  << 2) + 0xffd00000)
+#define   EE_ASSIST_MBOX1_FIQ_SEL                  (0x2077)
+#define P_EE_ASSIST_MBOX1_FIQ_SEL                  (volatile unsigned int *)((0x2077  << 2) + 0xffd00000)
+#define   EE_ASSIST_MBOX2_IRQ_REG                  (0x2078)
+#define P_EE_ASSIST_MBOX2_IRQ_REG                  (volatile unsigned int *)((0x2078  << 2) + 0xffd00000)
+#define   EE_ASSIST_MBOX2_CLR_REG                  (0x2079)
+#define P_EE_ASSIST_MBOX2_CLR_REG                  (volatile unsigned int *)((0x2079  << 2) + 0xffd00000)
+#define   EE_ASSIST_MBOX2_MASK                     (0x207a)
+#define P_EE_ASSIST_MBOX2_MASK                     (volatile unsigned int *)((0x207a  << 2) + 0xffd00000)
+#define   EE_ASSIST_MBOX2_FIQ_SEL                  (0x207b)
+#define P_EE_ASSIST_MBOX2_FIQ_SEL                  (volatile unsigned int *)((0x207b  << 2) + 0xffd00000)
+#define   EE_ASSIST_MBOX3_IRQ_REG                  (0x207c)
+#define P_EE_ASSIST_MBOX3_IRQ_REG                  (volatile unsigned int *)((0x207c  << 2) + 0xffd00000)
+#define   EE_ASSIST_MBOX3_CLR_REG                  (0x207d)
+#define P_EE_ASSIST_MBOX3_CLR_REG                  (volatile unsigned int *)((0x207d  << 2) + 0xffd00000)
+#define   EE_ASSIST_MBOX3_MASK                     (0x207e)
+#define P_EE_ASSIST_MBOX3_MASK                     (volatile unsigned int *)((0x207e  << 2) + 0xffd00000)
+#define   EE_ASSIST_MBOX3_FIQ_SEL                  (0x207f)
+#define P_EE_ASSIST_MBOX3_FIQ_SEL                  (volatile unsigned int *)((0x207f  << 2) + 0xffd00000)
+// -----------------------------------------------
+// CBUS_BASE:  AUD_CBUS_BASE = 0x34
+// -----------------------------------------------
+// ----------------------------
+// AUDIN (64)
+// ----------------------------
+#define   AUDIN_SPDIF_MODE                         (0x3400)
+#define P_AUDIN_SPDIF_MODE                         (volatile unsigned int *)((0x3400  << 2) + 0xffd00000)
+    #define SPDIF_EN                31
+    #define SPDIF_INT_EN            30
+    #define SPDIF_BURST_PRE_INT_EN  29
+    #define SPDIF_TIE_0             24
+    #define SPDIF_SAMPLE_SEL        23
+    #define SPDIF_REVERSE_EN        22
+    #define SPDIF_BIT_ORDER         20
+    #define SPDIF_CHNL_ORDER        19
+    #define SPDIF_DATA_TYPE_SEL     18
+    #define SPDIF_XTDCLK_UPD_ITVL   14   //16:14
+    #define SPDIF_CLKNUM_54U        0     //13:0
+#define   AUDIN_SPDIF_FS_CLK_RLTN                  (0x3401)
+#define P_AUDIN_SPDIF_FS_CLK_RLTN                  (volatile unsigned int *)((0x3401  << 2) + 0xffd00000)
+    #define SPDIF_CLKNUM_192K  24     //29:24
+    #define SPDIF_CLKNUM_96K   18     //23:18
+    #define SPDIF_CLKNUM_48K   12     //17:12
+    #define SPDIF_CLKNUM_44K   6     // 11:6
+    #define SPDIF_CLKNUM_32K   0     // 5:0
+#define   AUDIN_SPDIF_CHNL_STS_A                   (0x3402)
+#define P_AUDIN_SPDIF_CHNL_STS_A                   (volatile unsigned int *)((0x3402  << 2) + 0xffd00000)
+#define   AUDIN_SPDIF_CHNL_STS_B                   (0x3403)
+#define P_AUDIN_SPDIF_CHNL_STS_B                   (volatile unsigned int *)((0x3403  << 2) + 0xffd00000)
+#define   AUDIN_SPDIF_MISC                         (0x3404)
+#define P_AUDIN_SPDIF_MISC                         (volatile unsigned int *)((0x3404  << 2) + 0xffd00000)
+#define   AUDIN_SPDIF_NPCM_PCPD                    (0x3405)
+#define P_AUDIN_SPDIF_NPCM_PCPD                    (volatile unsigned int *)((0x3405  << 2) + 0xffd00000)
+#define   AUDIN_SPDIF_END                          (0x340f)
+#define P_AUDIN_SPDIF_END                          (volatile unsigned int *)((0x340f  << 2) + 0xffd00000)
+#define   AUDIN_I2SIN_CTRL                         (0x3410)
+#define P_AUDIN_I2SIN_CTRL                         (volatile unsigned int *)((0x3410  << 2) + 0xffd00000)
+    #define I2SIN_DIR       0    // I2S CLK and LRCLK direction. 0 : input 1 : output.
+    #define I2SIN_CLK_SEL    1    // I2S clk selection : 0 : from pad input. 1 : from AIU.
+    #define I2SIN_LRCLK_SEL 2
+    #define I2SIN_POS_SYNC  3
+    #define I2SIN_LRCLK_SKEW 4    // 6:4
+    #define I2SIN_LRCLK_INVT 7
+    #define I2SIN_SIZE       8    //9:8 : 0 16 bit. 1 : 18 bits 2 : 20 bits 3 : 24bits.
+    #define I2SIN_CHAN_EN   10    //13:10.
+    #define I2SIN_EN        15
+// Bit 31:15    Rsrv.
+// Bit 14:12 RW HDMI-RX SPDIF channel status select to report on AUDIN_DECODE_CHANNEL_STATUS_A_*: 0=select channel 1; 1=channel 2; ...; 7=channel 8.
+// Bit 11: 8 RW HDMI-RX SPDIF channel status extraction enable, 1-bit per channel pair. To enable, SPDIF input source also must select 1.
+// Bit  7: 6    Rsrv.
+// Bit  5: 4 RW SPDIF input source select. 0=Default, select chip external; 1=select HDMI RX output; 2/3=Rsrv.
+// Bit  3: 2    Rsrv.
+// Bit  1: 0 RW I2S input source select. 0=Default, select chip external; 1=select audio codec output; 2=select HDMI RX output; 3=Rsrv.
+#define   AUDIN_SOURCE_SEL                         (0x3411)
+#define P_AUDIN_SOURCE_SEL                         (volatile unsigned int *)((0x3411  << 2) + 0xffd00000)
+// The following registers control the new alternative decoder -- hdmi_tx_audio_decoder, in audin module
+// Bit 31:25    Rsrv.
+// Bit    24 RW SPDIF enable.
+// Bit 23:22    Rsrv.
+// Bit 21:20 RW i2s_block_start_src: 0=left channel 0 is approved as block start generator, ..., 3=left channel 3 is the block start generator.
+// Bit 19:17    Rsrv.
+// Bit    16 RW I2S enable.
+// Bit 15: 8 RW audio_channel_alloc: Usage indication of up to 8 channels. If the correspoinding bit is 1, then this channel is used.
+//                                   E.g.: In 2-channel audio, it is 00000011
+// Bit     7 RW hdmi_tx_audio_decoder input sel: 0=SPDIF; 1=I2S.
+// Bit     6 RW i2s_channel_config: 0=2-channel; 1=8-channel.
+// Bit  5: 4 RW i2s_format_select: 0=left-justify; 1=right-justify; 2=I2S format; 3=DSP format.
+// Bit  3: 2 RW i2s_bit_width: 0=16-bit; 1=18-bit; 2=20-bit; 3=24-bit.
+// Bit     1 RW ws polarity: 0=0 is left, 1 is right; 1=1 is left, 0 is right.
+// Bit     0 RW For SPDIF mode, 0=use channel status from input data; 1=use channel status from registers;
+//              For I2S mode, 0=one-bit audio; 1=I2S.
+#define   AUDIN_DECODE_FORMAT                      (0x3412)
+#define P_AUDIN_DECODE_FORMAT                      (volatile unsigned int *)((0x3412  << 2) + 0xffd00000)
+// Bit 31:25    Rsrv.
+// Bit    24 R  channel_status stablility indicator.
+// Bit 23:16 RW Valid bits for audio sample packet. [7] for valid_sp3_right, [6] for valid_sp3_left, ..., [1] for valid_sp0_right, [0] for valid_sp0_left.
+// Bit 15: 8 RW User bits for audio sample packet. [7] for user_sp3_right, [6] for user_sp3_left, ..., [1] for user_sp0_right, [0] for user_sp0_left.
+// Bit  7: 4 RW cntl_init_discard: Number of initial hdmi_tx_audio_decoder samples to discard from reset.
+// Bit     3 RW cntl_invert_i2s_lrclk: Invert WS before input to hdmi_tx_audio_decoder.
+// Bit     2 RW audio_valid_overwrite: Valid bit selection in audio packet. 0=use input data; 1=use
+// Bit     1 RW audio_user_overwrite: User bit selection in audio packet. 0=use input data; 1=use
+// Bit     0 RW audio_sample_valid: sample non-flat indication. 0=flat, non-valid; 1=non-flat, valid.
+#define   AUDIN_DECODE_CONTROL_STATUS              (0x3413)
+#define P_AUDIN_DECODE_CONTROL_STATUS              (volatile unsigned int *)((0x3413  << 2) + 0xffd00000)
+// IEC958 192-bit channel status: muxed between 8 channels, channel selection by AUDIN_SOURCE_SEL[14:12]
+#define   AUDIN_DECODE_CHANNEL_STATUS_A_0          (0x3414)
+#define P_AUDIN_DECODE_CHANNEL_STATUS_A_0          (volatile unsigned int *)((0x3414  << 2) + 0xffd00000)
+#define   AUDIN_DECODE_CHANNEL_STATUS_A_1          (0x3415)
+#define P_AUDIN_DECODE_CHANNEL_STATUS_A_1          (volatile unsigned int *)((0x3415  << 2) + 0xffd00000)
+#define   AUDIN_DECODE_CHANNEL_STATUS_A_2          (0x3416)
+#define P_AUDIN_DECODE_CHANNEL_STATUS_A_2          (volatile unsigned int *)((0x3416  << 2) + 0xffd00000)
+#define   AUDIN_DECODE_CHANNEL_STATUS_A_3          (0x3417)
+#define P_AUDIN_DECODE_CHANNEL_STATUS_A_3          (volatile unsigned int *)((0x3417  << 2) + 0xffd00000)
+#define   AUDIN_DECODE_CHANNEL_STATUS_A_4          (0x3418)
+#define P_AUDIN_DECODE_CHANNEL_STATUS_A_4          (volatile unsigned int *)((0x3418  << 2) + 0xffd00000)
+#define   AUDIN_DECODE_CHANNEL_STATUS_A_5          (0x3419)
+#define P_AUDIN_DECODE_CHANNEL_STATUS_A_5          (volatile unsigned int *)((0x3419  << 2) + 0xffd00000)
+#define   AUDIN_FIFO0_START                        (0x3420)
+#define P_AUDIN_FIFO0_START                        (volatile unsigned int *)((0x3420  << 2) + 0xffd00000)
+#define   AUDIN_FIFO0_END                          (0x3421)
+#define P_AUDIN_FIFO0_END                          (volatile unsigned int *)((0x3421  << 2) + 0xffd00000)
+#define   AUDIN_FIFO0_PTR                          (0x3422)
+#define P_AUDIN_FIFO0_PTR                          (volatile unsigned int *)((0x3422  << 2) + 0xffd00000)
+#define   AUDIN_FIFO0_INTR                         (0x3423)
+#define P_AUDIN_FIFO0_INTR                         (volatile unsigned int *)((0x3423  << 2) + 0xffd00000)
+#define   AUDIN_FIFO0_RDPTR                        (0x3424)
+#define P_AUDIN_FIFO0_RDPTR                        (volatile unsigned int *)((0x3424  << 2) + 0xffd00000)
+#define   AUDIN_FIFO0_CTRL                         (0x3425)
+#define P_AUDIN_FIFO0_CTRL                         (volatile unsigned int *)((0x3425  << 2) + 0xffd00000)
+    #define AUDIN_FIFO0_EN       0
+    #define AUDIN_FIFO0_RST      1
+    #define AUDIN_FIFO0_LOAD     2    //write 1 to load address to AUDIN_FIFO0.
+
+    #define AUDIN_FIFO0_DIN_SEL  3
+            // 0     spdifIN
+            // 1     i2Sin
+            // 2     PCMIN
+            // 3     HDMI in
+            // 4     DEMODULATOR IN
+    #define AUDIN_FIFO0_ENDIAN   8    //10:8   data endian control.
+    #define AUDIN_FIFO0_CHAN     11    //14:11   channel number.  in M1 suppose there's only 1 channel and 2 channel.
+    #define AUDIN_FIFO0_UG       15    // urgent request enable.
+    #define AUDIN_FIFO0_HOLD0_EN  19
+    #define AUDIN_FIFO0_HOLD1_EN  20
+    #define AUDIN_FIFO0_HOLD2_EN  21
+    #define AUDIN_FIFO0_HOLD0_SEL 22   // 23:22
+    #define AUDIN_FIFO0_HOLD1_SEL 24   // 25:24
+    #define AUDIN_FIFO0_HOLD2_SEL 26   // 27:26
+    #define AUDIN_FIFO0_HOLD_LVL  28   // 27:26
+
+
+#define   AUDIN_FIFO0_CTRL1                        (0x3426)
+#define P_AUDIN_FIFO0_CTRL1                        (volatile unsigned int *)((0x3426  << 2) + 0xffd00000)
+#define   AUDIN_FIFO0_LVL0                         (0x3427)
+#define P_AUDIN_FIFO0_LVL0                         (volatile unsigned int *)((0x3427  << 2) + 0xffd00000)
+#define   AUDIN_FIFO0_LVL1                         (0x3428)
+#define P_AUDIN_FIFO0_LVL1                         (volatile unsigned int *)((0x3428  << 2) + 0xffd00000)
+#define   AUDIN_FIFO0_LVL2                         (0x3429)
+#define P_AUDIN_FIFO0_LVL2                         (volatile unsigned int *)((0x3429  << 2) + 0xffd00000)
+#define   AUDIN_FIFO0_REQID                        (0x3430)
+#define P_AUDIN_FIFO0_REQID                        (volatile unsigned int *)((0x3430  << 2) + 0xffd00000)
+#define   AUDIN_FIFO0_WRAP                         (0x3431)
+#define P_AUDIN_FIFO0_WRAP                         (volatile unsigned int *)((0x3431  << 2) + 0xffd00000)
+#define   AUDIN_FIFO1_START                        (0x3433)
+#define P_AUDIN_FIFO1_START                        (volatile unsigned int *)((0x3433  << 2) + 0xffd00000)
+#define   AUDIN_FIFO1_END                          (0x3434)
+#define P_AUDIN_FIFO1_END                          (volatile unsigned int *)((0x3434  << 2) + 0xffd00000)
+#define   AUDIN_FIFO1_PTR                          (0x3435)
+#define P_AUDIN_FIFO1_PTR                          (volatile unsigned int *)((0x3435  << 2) + 0xffd00000)
+#define   AUDIN_FIFO1_INTR                         (0x3436)
+#define P_AUDIN_FIFO1_INTR                         (volatile unsigned int *)((0x3436  << 2) + 0xffd00000)
+#define   AUDIN_FIFO1_RDPTR                        (0x3437)
+#define P_AUDIN_FIFO1_RDPTR                        (volatile unsigned int *)((0x3437  << 2) + 0xffd00000)
+#define   AUDIN_FIFO1_CTRL                         (0x3438)
+#define P_AUDIN_FIFO1_CTRL                         (volatile unsigned int *)((0x3438  << 2) + 0xffd00000)
+    #define AUDIN_FIFO1_EN       0
+    #define AUDIN_FIFO1_RST      1
+    #define AUDIN_FIFO1_LOAD     2    //write 1 to load address to AUDIN_FIFO0.
+
+    #define AUDIN_FIFO1_DIN_SEL  3
+            // 0     spdifIN
+            // 1     i2Sin
+            // 2     PCMIN
+            // 3     HDMI in
+            // 4     DEMODULATOR IN
+    #define AUDIN_FIFO1_ENDIAN   8    //10:8   data endian control.
+    #define AUDIN_FIFO1_CHAN     11    //14:11   channel number.  in M1 suppose there's only 1 channel and 2 channel.
+    #define AUDIN_FIFO1_UG       15    // urgent request enable.
+    #define AUDIN_FIFO1_HOLD0_EN  19
+    #define AUDIN_FIFO1_HOLD1_EN  20
+    #define AUDIN_FIFO1_HOLD2_EN  21
+    #define AUDIN_FIFO1_HOLD0_SEL 22   // 23:22
+    #define AUDIN_FIFO1_HOLD1_SEL 24   // 25:24
+    #define AUDIN_FIFO1_HOLD2_SEL 26   // 27:26
+    #define AUDIN_FIFO1_HOLD_LVL  28   // 27:26
+#define   AUDIN_FIFO1_CTRL1                        (0x3439)
+#define P_AUDIN_FIFO1_CTRL1                        (volatile unsigned int *)((0x3439  << 2) + 0xffd00000)
+#define   AUDIN_FIFO1_LVL0                         (0x3440)
+#define P_AUDIN_FIFO1_LVL0                         (volatile unsigned int *)((0x3440  << 2) + 0xffd00000)
+#define   AUDIN_FIFO1_LVL1                         (0x3441)
+#define P_AUDIN_FIFO1_LVL1                         (volatile unsigned int *)((0x3441  << 2) + 0xffd00000)
+#define   AUDIN_FIFO1_LVL2                         (0x3442)
+#define P_AUDIN_FIFO1_LVL2                         (volatile unsigned int *)((0x3442  << 2) + 0xffd00000)
+#define   AUDIN_FIFO1_REQID                        (0x3443)
+#define P_AUDIN_FIFO1_REQID                        (volatile unsigned int *)((0x3443  << 2) + 0xffd00000)
+#define   AUDIN_FIFO1_WRAP                         (0x3444)
+#define P_AUDIN_FIFO1_WRAP                         (volatile unsigned int *)((0x3444  << 2) + 0xffd00000)
+#define   AUDIN_FIFO2_START                        (0x3445)
+#define P_AUDIN_FIFO2_START                        (volatile unsigned int *)((0x3445  << 2) + 0xffd00000)
+#define   AUDIN_FIFO2_END                          (0x3446)
+#define P_AUDIN_FIFO2_END                          (volatile unsigned int *)((0x3446  << 2) + 0xffd00000)
+#define   AUDIN_FIFO2_PTR                          (0x3447)
+#define P_AUDIN_FIFO2_PTR                          (volatile unsigned int *)((0x3447  << 2) + 0xffd00000)
+#define   AUDIN_FIFO2_INTR                         (0x3448)
+#define P_AUDIN_FIFO2_INTR                         (volatile unsigned int *)((0x3448  << 2) + 0xffd00000)
+#define   AUDIN_FIFO2_RDPTR                        (0x3449)
+#define P_AUDIN_FIFO2_RDPTR                        (volatile unsigned int *)((0x3449  << 2) + 0xffd00000)
+#define   AUDIN_FIFO2_CTRL                         (0x344a)
+#define P_AUDIN_FIFO2_CTRL                         (volatile unsigned int *)((0x344a  << 2) + 0xffd00000)
+#define   AUDIN_FIFO2_CTRL1                        (0x344b)
+#define P_AUDIN_FIFO2_CTRL1                        (volatile unsigned int *)((0x344b  << 2) + 0xffd00000)
+#define   AUDIN_FIFO2_LVL0                         (0x344c)
+#define P_AUDIN_FIFO2_LVL0                         (volatile unsigned int *)((0x344c  << 2) + 0xffd00000)
+#define   AUDIN_FIFO2_LVL1                         (0x344d)
+#define P_AUDIN_FIFO2_LVL1                         (volatile unsigned int *)((0x344d  << 2) + 0xffd00000)
+#define   AUDIN_FIFO2_LVL2                         (0x344e)
+#define P_AUDIN_FIFO2_LVL2                         (volatile unsigned int *)((0x344e  << 2) + 0xffd00000)
+#define   AUDIN_FIFO2_REQID                        (0x344f)
+#define P_AUDIN_FIFO2_REQID                        (volatile unsigned int *)((0x344f  << 2) + 0xffd00000)
+#define   AUDIN_FIFO2_WRAP                         (0x3450)
+#define P_AUDIN_FIFO2_WRAP                         (volatile unsigned int *)((0x3450  << 2) + 0xffd00000)
+#define   AUDIN_INT_CTRL                           (0x3451)
+#define P_AUDIN_INT_CTRL                           (volatile unsigned int *)((0x3451  << 2) + 0xffd00000)
+#define   AUDIN_FIFO_INT                           (0x3452)
+#define P_AUDIN_FIFO_INT                           (volatile unsigned int *)((0x3452  << 2) + 0xffd00000)
+#define   PCMIN_CTRL0                              (0x3460)
+#define P_PCMIN_CTRL0                              (volatile unsigned int *)((0x3460  << 2) + 0xffd00000)
+#define   PCMIN_CTRL1                              (0x3461)
+#define P_PCMIN_CTRL1                              (volatile unsigned int *)((0x3461  << 2) + 0xffd00000)
+#define   PCMIN_CTRL2                              (0x3462)
+#define P_PCMIN_CTRL2                              (volatile unsigned int *)((0x3462  << 2) + 0xffd00000)
+//`define PCMIN1_CTRL0                     8'h62
+//`define PCMIN1_CTRL1                     8'h63
+#define   PCMOUT_CTRL0                             (0x3470)
+#define P_PCMOUT_CTRL0                             (volatile unsigned int *)((0x3470  << 2) + 0xffd00000)
+#define   PCMOUT_CTRL1                             (0x3471)
+#define P_PCMOUT_CTRL1                             (volatile unsigned int *)((0x3471  << 2) + 0xffd00000)
+#define   PCMOUT_CTRL2                             (0x3472)
+#define P_PCMOUT_CTRL2                             (volatile unsigned int *)((0x3472  << 2) + 0xffd00000)
+#define   PCMOUT_CTRL3                             (0x3473)
+#define P_PCMOUT_CTRL3                             (volatile unsigned int *)((0x3473  << 2) + 0xffd00000)
+#define   PCMOUT_CTRL4                             (0x3474)
+#define P_PCMOUT_CTRL4                             (volatile unsigned int *)((0x3474  << 2) + 0xffd00000)
+//`define PCMOUT1_CTRL0                    8'h74
+//`define PCMOUT1_CTRL1                    8'h75
+//`define PCMOUT1_CTRL2                    8'h76
+//`define PCMOUT1_CTRL3                    8'h77
+#define   AUDOUT_CTRL                              (0x3480)
+#define P_AUDOUT_CTRL                              (volatile unsigned int *)((0x3480  << 2) + 0xffd00000)
+#define   AUDOUT_CTRL1                             (0x3481)
+#define P_AUDOUT_CTRL1                             (volatile unsigned int *)((0x3481  << 2) + 0xffd00000)
+#define   AUDOUT_BUF0_STA                          (0x3482)
+#define P_AUDOUT_BUF0_STA                          (volatile unsigned int *)((0x3482  << 2) + 0xffd00000)
+#define   AUDOUT_BUF0_EDA                          (0x3483)
+#define P_AUDOUT_BUF0_EDA                          (volatile unsigned int *)((0x3483  << 2) + 0xffd00000)
+#define   AUDOUT_BUF0_WPTR                         (0x3484)
+#define P_AUDOUT_BUF0_WPTR                         (volatile unsigned int *)((0x3484  << 2) + 0xffd00000)
+#define   AUDOUT_BUF1_STA                          (0x3485)
+#define P_AUDOUT_BUF1_STA                          (volatile unsigned int *)((0x3485  << 2) + 0xffd00000)
+#define   AUDOUT_BUF1_EDA                          (0x3486)
+#define P_AUDOUT_BUF1_EDA                          (volatile unsigned int *)((0x3486  << 2) + 0xffd00000)
+#define   AUDOUT_BUF1_WPTR                         (0x3487)
+#define P_AUDOUT_BUF1_WPTR                         (volatile unsigned int *)((0x3487  << 2) + 0xffd00000)
+#define   AUDOUT_FIFO_RPTR                         (0x3488)
+#define P_AUDOUT_FIFO_RPTR                         (volatile unsigned int *)((0x3488  << 2) + 0xffd00000)
+#define   AUDOUT_INTR_PTR                          (0x3489)
+#define P_AUDOUT_INTR_PTR                          (volatile unsigned int *)((0x3489  << 2) + 0xffd00000)
+#define   AUDOUT_FIFO_STS                          (0x348a)
+#define P_AUDOUT_FIFO_STS                          (volatile unsigned int *)((0x348a  << 2) + 0xffd00000)
+//`define AUDOUT1_CTRL                     8'h90
+//`define AUDOUT1_CTRL1                    8'h91
+//`define AUDOUT1_BUF0_STA                 8'h92
+//`define AUDOUT1_BUF0_EDA                 8'h93
+//`define AUDOUT1_BUF0_WPTR                8'h94
+//`define AUDOUT1_BUF1_STA                 8'h95
+//`define AUDOUT1_BUF1_EDA                 8'h96
+//`define AUDOUT1_BUF1_WPTR                8'h97
+//`define AUDOUT1_FIFO_RPTR                8'h98
+//`define AUDOUT1_INTR_PTR                 8'h99
+//`define AUDOUT1_FIFO_STS                 8'h9a
+//// Bit 31: 0 RW cntl_mute_val: Use this value during mute, if cntl_mute_mode=2.
+//`define AUDIN_MUTE_VAL                 8'h35
+#define   AUDIN_HDMI_MEAS_CTRL                     (0x34a0)
+#define P_AUDIN_HDMI_MEAS_CTRL                     (volatile unsigned int *)((0x34a0  << 2) + 0xffd00000)
+#define   AUDIN_HDMI_MEAS_CYCLES_M1                (0x34a1)
+#define P_AUDIN_HDMI_MEAS_CYCLES_M1                (volatile unsigned int *)((0x34a1  << 2) + 0xffd00000)
+#define   AUDIN_HDMI_MEAS_INTR_MASKN               (0x34a2)
+#define P_AUDIN_HDMI_MEAS_INTR_MASKN               (volatile unsigned int *)((0x34a2  << 2) + 0xffd00000)
+#define   AUDIN_HDMI_MEAS_INTR_STAT                (0x34a3)
+#define P_AUDIN_HDMI_MEAS_INTR_STAT                (volatile unsigned int *)((0x34a3  << 2) + 0xffd00000)
+#define   AUDIN_HDMI_REF_CYCLES_STAT_0             (0x34a4)
+#define P_AUDIN_HDMI_REF_CYCLES_STAT_0             (volatile unsigned int *)((0x34a4  << 2) + 0xffd00000)
+#define   AUDIN_HDMI_REF_CYCLES_STAT_1             (0x34a5)
+#define P_AUDIN_HDMI_REF_CYCLES_STAT_1             (volatile unsigned int *)((0x34a5  << 2) + 0xffd00000)
+#define   AUDIN_HDMIRX_AFIFO_STAT                  (0x34a6)
+#define P_AUDIN_HDMIRX_AFIFO_STAT                  (volatile unsigned int *)((0x34a6  << 2) + 0xffd00000)
+#define   AUDIN_MEM_PD                             (0x34aa)
+#define P_AUDIN_MEM_PD                             (volatile unsigned int *)((0x34aa  << 2) + 0xffd00000)
+#define   AUDIN_FIFO0_PIO_STS                      (0x34b0)
+#define P_AUDIN_FIFO0_PIO_STS                      (volatile unsigned int *)((0x34b0  << 2) + 0xffd00000)
+#define   AUDIN_FIFO0_PIO_RDL                      (0x34b1)
+#define P_AUDIN_FIFO0_PIO_RDL                      (volatile unsigned int *)((0x34b1  << 2) + 0xffd00000)
+#define   AUDIN_FIFO0_PIO_RDH                      (0x34b2)
+#define P_AUDIN_FIFO0_PIO_RDH                      (volatile unsigned int *)((0x34b2  << 2) + 0xffd00000)
+#define   AUDIN_FIFO1_PIO_STS                      (0x34b3)
+#define P_AUDIN_FIFO1_PIO_STS                      (volatile unsigned int *)((0x34b3  << 2) + 0xffd00000)
+#define   AUDIN_FIFO1_PIO_RDL                      (0x34b4)
+#define P_AUDIN_FIFO1_PIO_RDL                      (volatile unsigned int *)((0x34b4  << 2) + 0xffd00000)
+#define   AUDIN_FIFO1_PIO_RDH                      (0x34b5)
+#define P_AUDIN_FIFO1_PIO_RDH                      (volatile unsigned int *)((0x34b5  << 2) + 0xffd00000)
+#define   AUDIN_FIFO2_PIO_STS                      (0x34b6)
+#define P_AUDIN_FIFO2_PIO_STS                      (volatile unsigned int *)((0x34b6  << 2) + 0xffd00000)
+#define   AUDIN_FIFO2_PIO_RDL                      (0x34b7)
+#define P_AUDIN_FIFO2_PIO_RDL                      (volatile unsigned int *)((0x34b7  << 2) + 0xffd00000)
+#define   AUDIN_FIFO2_PIO_RDH                      (0x34b8)
+#define P_AUDIN_FIFO2_PIO_RDH                      (volatile unsigned int *)((0x34b8  << 2) + 0xffd00000)
+#define   AUDOUT_FIFO_PIO_STS                      (0x34b9)
+#define P_AUDOUT_FIFO_PIO_STS                      (volatile unsigned int *)((0x34b9  << 2) + 0xffd00000)
+#define   AUDOUT_FIFO_PIO_WRL                      (0x34ba)
+#define P_AUDOUT_FIFO_PIO_WRL                      (volatile unsigned int *)((0x34ba  << 2) + 0xffd00000)
+#define   AUDOUT_FIFO_PIO_WRH                      (0x34bb)
+#define P_AUDOUT_FIFO_PIO_WRH                      (volatile unsigned int *)((0x34bb  << 2) + 0xffd00000)
+//`define AUDOUT1_FIFO_PIO_STS		8'hbc
+//`define AUDOUT1_FIFO_PIO_WRL        	8'hbd
+//`define AUDOUT1_FIFO_PIO_WRH        	8'hbe
+#define   AUD_RESAMPLE_CTRL0                       (0x34bf)
+#define P_AUD_RESAMPLE_CTRL0                       (volatile unsigned int *)((0x34bf  << 2) + 0xffd00000)
+#define   AUD_RESAMPLE_CTRL1                       (0x34c0)
+#define P_AUD_RESAMPLE_CTRL1                       (volatile unsigned int *)((0x34c0  << 2) + 0xffd00000)
+#define   AUD_RESAMPLE_STATUS                      (0x34c1)
+#define P_AUD_RESAMPLE_STATUS                      (volatile unsigned int *)((0x34c1  << 2) + 0xffd00000)
+#define   AUD_RESAMPLE_CTRL2                       (0x34c2)
+#define P_AUD_RESAMPLE_CTRL2                       (volatile unsigned int *)((0x34c2  << 2) + 0xffd00000)
+#define   AUD_RESAMPLE_COEF0                       (0x34c3)
+#define P_AUD_RESAMPLE_COEF0                       (volatile unsigned int *)((0x34c3  << 2) + 0xffd00000)
+#define   AUD_RESAMPLE_COEF1                       (0x34c4)
+#define P_AUD_RESAMPLE_COEF1                       (volatile unsigned int *)((0x34c4  << 2) + 0xffd00000)
+#define   AUD_RESAMPLE_COEF2                       (0x34c5)
+#define P_AUD_RESAMPLE_COEF2                       (volatile unsigned int *)((0x34c5  << 2) + 0xffd00000)
+#define   AUD_RESAMPLE_COEF3                       (0x34c6)
+#define P_AUD_RESAMPLE_COEF3                       (volatile unsigned int *)((0x34c6  << 2) + 0xffd00000)
+#define   AUD_RESAMPLE_COEF4                       (0x34c7)
+#define P_AUD_RESAMPLE_COEF4                       (volatile unsigned int *)((0x34c7  << 2) + 0xffd00000)
+#define   AUDIN_ADDR_END                           (0x34c8)
+#define P_AUDIN_ADDR_END                           (volatile unsigned int *)((0x34c8  << 2) + 0xffd00000)
+#define   AUDIN_ATV_DEMOD_CTRL                     (0x34d0)
+#define P_AUDIN_ATV_DEMOD_CTRL                     (volatile unsigned int *)((0x34d0  << 2) + 0xffd00000)
+// synopsys translate_off
+// synopsys translate_on
+//
+// Closing file:  ./register_map.h
+//
+//
+// Reading file:  ./vcbus_regs.h
+//
+// synopsys translate_off
+// synopsys translate_on
+//===========================================================================
+//`define RDMA_VCBUS_BASE       8'h11
+//===========================================================================
+//
+// Reading file:  rdma_regs.h
+//
+//===========================================================================
+// RDMA registers 0x00 - 0xff
+//===========================================================================
+// -----------------------------------------------
+// CBUS_BASE:  RDMA_VCBUS_BASE = 0x11
+// -----------------------------------------------
+// Bit 31: 0 RW AHB start address for manual start DMA
+#define   RDMA_AHB_START_ADDR_MAN                  (0x1100)
+#define P_RDMA_AHB_START_ADDR_MAN                  (volatile unsigned int *)((0x1100  << 2) + 0xff900000)
+// Bit 31: 0 RW AHB end address for manual start DMA
+#define   RDMA_AHB_END_ADDR_MAN                    (0x1101)
+#define P_RDMA_AHB_END_ADDR_MAN                    (volatile unsigned int *)((0x1101  << 2) + 0xff900000)
+// Bit 31: 0 RW AHB start address for auto start source 1
+#define   RDMA_AHB_START_ADDR_1                    (0x1102)
+#define P_RDMA_AHB_START_ADDR_1                    (volatile unsigned int *)((0x1102  << 2) + 0xff900000)
+// Bit 31: 0 RW AHB end address for auto start source 1
+#define   RDMA_AHB_END_ADDR_1                      (0x1103)
+#define P_RDMA_AHB_END_ADDR_1                      (volatile unsigned int *)((0x1103  << 2) + 0xff900000)
+// Bit 31: 0 RW AHB start address for auto start source 2
+#define   RDMA_AHB_START_ADDR_2                    (0x1104)
+#define P_RDMA_AHB_START_ADDR_2                    (volatile unsigned int *)((0x1104  << 2) + 0xff900000)
+// Bit 31: 0 RW AHB end address for auto start source 2
+#define   RDMA_AHB_END_ADDR_2                      (0x1105)
+#define P_RDMA_AHB_END_ADDR_2                      (volatile unsigned int *)((0x1105  << 2) + 0xff900000)
+// Bit 31: 0 RW AHB start address for auto start source 3
+#define   RDMA_AHB_START_ADDR_3                    (0x1106)
+#define P_RDMA_AHB_START_ADDR_3                    (volatile unsigned int *)((0x1106  << 2) + 0xff900000)
+// Bit 31: 0 RW AHB end address for auto start source 3
+#define   RDMA_AHB_END_ADDR_3                      (0x1107)
+#define P_RDMA_AHB_END_ADDR_3                      (volatile unsigned int *)((0x1107  << 2) + 0xff900000)
+// Bit 31: 0 RW AHB start address for auto start source 4
+#define   RDMA_AHB_START_ADDR_4                    (0x1108)
+#define P_RDMA_AHB_START_ADDR_4                    (volatile unsigned int *)((0x1108  << 2) + 0xff900000)
+// Bit 31: 0 RW AHB end address for auto start source 4
+#define   RDMA_AHB_END_ADDR_4                      (0x1109)
+#define P_RDMA_AHB_END_ADDR_4                      (volatile unsigned int *)((0x1109  << 2) + 0xff900000)
+// Bit 31: 0 RW AHB start address for auto start source 5
+#define   RDMA_AHB_START_ADDR_5                    (0x110a)
+#define P_RDMA_AHB_START_ADDR_5                    (volatile unsigned int *)((0x110a  << 2) + 0xff900000)
+// Bit 31: 0 RW AHB end address for auto start source 5
+#define   RDMA_AHB_END_ADDR_5                      (0x110b)
+#define P_RDMA_AHB_END_ADDR_5                      (volatile unsigned int *)((0x110b  << 2) + 0xff900000)
+// Bit 31: 0 RW AHB start address for auto start source 6
+#define   RDMA_AHB_START_ADDR_6                    (0x110c)
+#define P_RDMA_AHB_START_ADDR_6                    (volatile unsigned int *)((0x110c  << 2) + 0xff900000)
+// Bit 31: 0 RW AHB end address for auto start source 6
+#define   RDMA_AHB_END_ADDR_6                      (0x110d)
+#define P_RDMA_AHB_END_ADDR_6                      (volatile unsigned int *)((0x110d  << 2) + 0xff900000)
+// Bit 31: 0 RW AHB start address for auto start source 7
+#define   RDMA_AHB_START_ADDR_7                    (0x110e)
+#define P_RDMA_AHB_START_ADDR_7                    (volatile unsigned int *)((0x110e  << 2) + 0xff900000)
+// Bit 31: 0 RW AHB end address for auto start source 7
+#define   RDMA_AHB_END_ADDR_7                      (0x110f)
+#define P_RDMA_AHB_END_ADDR_7                      (volatile unsigned int *)((0x110f  << 2) + 0xff900000)
+// Auto start DMA control:
+// Bit 31:24 RW ctrl_enable_int_3. Interrupt inputs enable mask for source 3.
+// Bit 23:16 RW ctrl_enable_int_2. Interrupt inputs enable mask for source 2.
+// Bit 15: 8 RW ctrl_enable_int_1. Interrupt inputs enable mask for source 1.
+// Bit     7 RW ctrl_cbus_write_3. Register read/write mode for auto-start 3. 1=Register write; 0=Register read.
+// Bit     6 RW ctrl_cbus_write_3. Register read/write mode for auto-start 2. 1=Register write; 0=Register read.
+// Bit     5 RW ctrl_cbus_write_3. Register read/write mode for auto-start 1. 1=Register write; 0=Register read.
+// Bit     4 R  Rsrv.
+// Bit     3 RW ctrl_cbus_addr_incr_3. 1=Incremental register access for auto-start 3; 0=Non-incremental (individual) register access.
+// Bit     2 RW ctrl_cbus_addr_incr_2. 1=Incremental register access for auto-start 2; 0=Non-incremental (individual) register access.
+// Bit     1 RW ctrl_cbus_addr_incr_1. 1=Incremental register access for auto-start 1; 0=Non-incremental (individual) register access.
+// Bit     0 R  Rsrv.
+#define   RDMA_ACCESS_AUTO                         (0x1110)
+#define P_RDMA_ACCESS_AUTO                         (volatile unsigned int *)((0x1110  << 2) + 0xff900000)
+#define   RDMA_ACCESS_AUTO2                        (0x1111)
+#define P_RDMA_ACCESS_AUTO2                        (volatile unsigned int *)((0x1111  << 2) + 0xff900000)
+#define   RDMA_ACCESS_AUTO3                        (0x1112)
+#define P_RDMA_ACCESS_AUTO3                        (volatile unsigned int *)((0x1112  << 2) + 0xff900000)
+// Manual start DMA control:
+// Bit 31: 3 R  Rsrv.
+// Bit     2 RW ctrl_cbus_write_man. Register read/write mode for manual-start. 1=Register write; 0=Register read.
+// Bit     1 RW ctrl_cbus_addr_incr_man. 1=Incremental register access for manual-start; 0=Non-incremental (individual) register access.
+// Bit     0 W  ctrl_start_man. Write 1 to this bit to manual-start DMA. This bit always read back 0.
+#define   RDMA_ACCESS_MAN                          (0x1113)
+#define P_RDMA_ACCESS_MAN                          (volatile unsigned int *)((0x1113  << 2) + 0xff900000)
+// RDMA general control:
+// Bit 31:25 R  Rsrv.
+// Bit    24 W  ctrl_clr_rdma_done_int. Write 1 to reset rdma_int level to 0. No need to clear this bit.
+// Bit 23:19 R  Rsrv.
+// Bit 18:13 R  Rsrv.
+// Bit 12: 7 R  Rsrv.
+// Bit     6 RW ctrl_ddr_urgent.
+// Bit  5: 4 RW ctrl_ahb_wr_burst_size. 0=ABH write request burst size 16;
+//                                      1=ABH write request burst size 24;
+//                                      2=ABH write request burst size 32;
+//                                      3=ABH write request burst size 48.
+// Bit  3: 2 RW ctrl_ahb_rd_burst_size. 0=ABH read request burst size 16;
+//                                      1=ABH read request burst size 24;
+//                                      2=ABH read request burst size 32;
+//                                      3=ABH read request burst size 48.
+// Bit     1 RW ctrl_sw_reset. 1=Reset RDMA logics except register.
+// Bit     0 RW ctrl_free_clk_enable. 0=Default, Enable clock gating. 1=No clock gating, enable free clock.
+#define   RDMA_CTRL                                (0x1114)
+#define P_RDMA_CTRL                                (volatile unsigned int *)((0x1114  << 2) + 0xff900000)
+// Read only.
+// Bit 31:29 R  Rsrv.
+// Bit    28 R  rdma_done_int.
+// Bit 27:25 R  Rsrv.
+// Bit 24:18 R  ahb_wrfifo_cnt. FIFO for buffering CBus read data to be sent to AHB
+// Bit 17:11 R  ahb_rdfifo_cnt. FIFO for buffering data read from AHB.
+// Bit 10: 8 R  ddr_req_st. =0 -- Idle; !=0 -- AHB interfacing ongoing.
+// Bit  7: 4 R  curr_req. Latest requests that is being/been serviced. E.g. 0000=Idle; 0010=Latest serviced request is Req 1.
+// Bit  3: 0 R  req_latch. Requests that are yet to be serviced. E.g. 0000=No request; 0001=Req 0 waiting; 1100=Req 2 and 3 waiting.
+#define   RDMA_STATUS                              (0x1115)
+#define P_RDMA_STATUS                              (volatile unsigned int *)((0x1115  << 2) + 0xff900000)
+#define   RDMA_STATUS2                             (0x1116)
+#define P_RDMA_STATUS2                             (volatile unsigned int *)((0x1116  << 2) + 0xff900000)
+#define   RDMA_STATUS3                             (0x1117)
+#define P_RDMA_STATUS3                             (volatile unsigned int *)((0x1117  << 2) + 0xff900000)
+#define   RDMA_ACCESS_AUTO4                        (0x1118)
+#define P_RDMA_ACCESS_AUTO4                        (volatile unsigned int *)((0x1118  << 2) + 0xff900000)
+#define   RDMA_SRAM_CNTL                           (0x1120)
+#define P_RDMA_SRAM_CNTL                           (volatile unsigned int *)((0x1120  << 2) + 0xff900000)
+#define   RDMA_SRAM_REGADDR                        (0x1121)
+#define P_RDMA_SRAM_REGADDR                        (volatile unsigned int *)((0x1121  << 2) + 0xff900000)
+#define   RDMA_SRAM_REGDATA                        (0x1122)
+#define P_RDMA_SRAM_REGDATA                        (volatile unsigned int *)((0x1122  << 2) + 0xff900000)
+//
+// Closing file:  rdma_regs.h
+//
+//===========================================================================
+// VDIN
+//===========================================================================
+// -----------------------------------------------
+// CBUS_BASE:  VDIN_VCBUS_BASE = 0x12
+// -----------------------------------------------
+//VDIN0        8'h00 - 8'h7f
+//VDIN1        8'h80 - 8'hef
+#define VDIN0_OFFSET            0x00
+#define VDIN1_OFFSET            0x80
+
+#define   VDIN_SCALE_COEF_IDX                      (0x1200)
+#define P_VDIN_SCALE_COEF_IDX                      (volatile unsigned int *)((0x1200  << 2) + 0xff900000)
+#define   VDIN_SCALE_COEF                          (0x1201)
+#define P_VDIN_SCALE_COEF                          (volatile unsigned int *)((0x1201  << 2) + 0xff900000)
+//bit 31,   mpeg_to_vdin_sel, 0: mpeg source to NR directly, 1: mpeg source pass through here
+//bit 30,   mpeg_field info which can be written by software
+//Bit 29,   force go_field, pulse signal
+//Bit 28,   force go_line, pulse signal
+//Bit 27,   enable mpeg_go_field input signal
+//Bit 26:20, hold lines
+//Bit 19,   delay go_field function enable
+//Bit 18:12, delay go_field line number
+//Bit 11:10, component2 output switch, 00: select component0 in, 01: select component1 in, 10: select component2 in
+//Bit 9:8, component1 output switch, 00: select component0 in, 01: select component1 in, 10: select component2 in
+//Bit 7:6, component0 output switch, 00: select component0 in, 01: select component1 in, 10: select component2 in
+//Bit 5,   input window selection function enable
+//Bit 4, enable VDIN common data input, otherwise there will be no video data input
+//Bit 3:0 vdin selection, 1: mpeg_in from dram, 2: bt656 input, 3: component input, 4: tvdecoder input, 5: hdmi rx input, 6: digtial video input, 7: loopback from Viu1, 8: MIPI.
+#define   VDIN_COM_CTRL0                           (0x1202)
+#define P_VDIN_COM_CTRL0                           (volatile unsigned int *)((0x1202  << 2) + 0xff900000)
+//Bit 28:16 active_max_pix_cnt, readonly
+//Bit 12:0  active_max_pix_cnt_shadow, readonly
+#define   VDIN_ACTIVE_MAX_PIX_CNT_STATUS           (0x1203)
+#define P_VDIN_ACTIVE_MAX_PIX_CNT_STATUS           (volatile unsigned int *)((0x1203  << 2) + 0xff900000)
+//Bit 28:16 go_line_cnt, readonly
+//Bit 12:0  active_line_cnt, readonly
+#define   VDIN_LCNT_STATUS                         (0x1204)
+#define P_VDIN_LCNT_STATUS                         (volatile unsigned int *)((0x1204  << 2) + 0xff900000)
+//Readonly
+//Bit [14:3] lfifo_buf_cnt
+//Bit 2, vdin_direct_done status
+//Bit 1, vdin_nr_done status
+//Bit 0, field
+#define   VDIN_COM_STATUS0                         (0x1205)
+#define P_VDIN_COM_STATUS0                         (volatile unsigned int *)((0x1205  << 2) + 0xff900000)
+//Readonly
+//Bit 31, vdi4 fifo overflow
+//Bit 29:24, vdi3_asfifo_cnt
+//Bit 23, vdi3 fifo overflow
+//Bit 21:16, vdi3_asfifo_cnt
+//Bit 15, vdi2 fifo overflow
+//Bit 13:8, vdi2_asfifo_cnt
+//Bit 7, vdi1 fifo overflow
+//Bit 5:0, vdi1_asfifo_cnt
+#define   VDIN_COM_STATUS1                         (0x1206)
+#define P_VDIN_COM_STATUS1                         (volatile unsigned int *)((0x1206  << 2) + 0xff900000)
+//Bit 28:16 go_line_cnt_shadow, readonly
+//Bit 12:0  active_line_cnt_shadow, readonly
+#define   VDIN_LCNT_SHADOW_STATUS                  (0x1207)
+#define P_VDIN_LCNT_SHADOW_STATUS                  (volatile unsigned int *)((0x1207  << 2) + 0xff900000)
+//each 8bit asfifo_ctrl is following:
+//Bit 7, DE  enable
+//Bit 6, go field enable
+//Bit 5, go line enable
+//Bit 4, if true, negative active input vsync
+//Bit 3, if true, negative active input hsync
+//Bit 2, vsync soft reset fifo enable
+//Bit 1, overflow status clear
+//Bit 0 asfifo soft reset, level signal
+//Bit 7:0 vdi1 asfifo_ctrl
+//Bit 23:16 vdi2 asfifo_ctrl
+#define   VDIN_ASFIFO_CTRL0                        (0x1208)
+#define P_VDIN_ASFIFO_CTRL0                        (volatile unsigned int *)((0x1208  << 2) + 0xff900000)
+//Bit 7:0 vdi3 asfifo_ctrl
+//Bit 23:16 vdi4 asfifo_ctrl
+#define   VDIN_ASFIFO_CTRL1                        (0x1209)
+#define P_VDIN_ASFIFO_CTRL1                        (volatile unsigned int *)((0x1209  << 2) + 0xff900000)
+//Bit 28:16 input width minus 1, after the window function
+//Bit 12:0  output width minus 1
+#define   VDIN_WIDTHM1I_WIDTHM1O                   (0x120a)
+#define P_VDIN_WIDTHM1I_WIDTHM1O                   (volatile unsigned int *)((0x120a  << 2) + 0xff900000)
+//Bit 20:17 prehsc_mode, bit 3:2, prehsc odd line interp mode, bit 1:0, prehsc even line interp mode,
+//           each 2bit, 00: pix0+pix1/2, average, 01: pix1, 10: pix0
+//Bit 16:15 sp422_mode, special mode for the component1 and component2, 00: normal case, 01: 32 64 32, 10: 0 64 64 0, 11: 16 96 16
+//Bit 14:8, hsc_ini_pixi_ptr, signed data, only useful when short_lineo_en is true
+//Bit 7, prehsc_en
+//Bit 6, hsc_en,
+//Bit 5, hsc_short_lineo_en, short line output enable
+//Bit 4, hsc_nearest_en
+//Bit 3, hsc_phase0_always_en
+//Bit 2:0, hsc_bank_length
+#define   VDIN_SC_MISC_CTRL                        (0x120b)
+#define P_VDIN_SC_MISC_CTRL                        (volatile unsigned int *)((0x120b  << 2) + 0xff900000)
+//Bit 28:24, integer portion
+//Bit 23:0, fraction portion
+#define   VDIN_HSC_PHASE_STEP                      (0x120c)
+#define P_VDIN_HSC_PHASE_STEP                      (volatile unsigned int *)((0x120c  << 2) + 0xff900000)
+//Bit 30:29    hscale rpt_p0_num
+//Bit 28:24    hscale ini_rcv_num
+//Bit 23:0     hscale ini_phase
+#define   VDIN_HSC_INI_CTRL                        (0x120d)
+#define P_VDIN_HSC_INI_CTRL                        (volatile unsigned int *)((0x120d  << 2) + 0xff900000)
+//Read only
+//Bit 23, vdi7 fifo overflow
+//Bit 21:16, vdi7_asfifo_cnt
+//Bit 15, vdi6 fifo overflow
+//Bit 13:8, vdi6_asfifo_cnt
+//Bit 7, vdi5 fifo overflow
+//Bit 5:0, vdi5_asfifo_cnt
+#define   VDIN_COM_STATUS2                         (0x120e)
+#define P_VDIN_COM_STATUS2                         (volatile unsigned int *)((0x120e  << 2) + 0xff900000)
+//Bit 25:16 asfifo decimate control
+//Bit 25, if true, decimation counter sync with first valid DE in the field,
+//otherwise the decimation counter is not sync with external signal
+//Bit 24, decimation de enable
+//Bit 23:20, decimation phase, which counter value use to decimate,
+//Bit 19:16, decimation number, 0: not decimation, 1: decimation 2, 2: decimation 3 ....
+//Bit 7:0 vdi5 asfifo_ctrl
+#define   VDIN_ASFIFO_CTRL2                        (0x120f)
+#define P_VDIN_ASFIFO_CTRL2                        (volatile unsigned int *)((0x120f  << 2) + 0xff900000)
+//Bit 7,  highlight_en
+//Bit 6   probe_post, if true, probe pixel data after matrix, otherwise probe pixel data before matrix
+//Bit 5:4  probe_sel, 00: select matrix 0, 01: select matrix 1,  otherwise select nothing
+//Bit 3:2, matrix coef idx selection, 00: select mat0, 01: select mat1, otherwise slect nothing
+//Bit 1   mat1 conversion matrix enable
+//Bit 0   mat0 conversion matrix enable
+#define   VDIN_MATRIX_CTRL                         (0x1210)
+#define P_VDIN_MATRIX_CTRL                         (volatile unsigned int *)((0x1210  << 2) + 0xff900000)
+//Bit 28:16 coef00
+//Bit 12:0  coef01
+#define   VDIN_MATRIX_COEF00_01                    (0x1211)
+#define P_VDIN_MATRIX_COEF00_01                    (volatile unsigned int *)((0x1211  << 2) + 0xff900000)
+//Bit 28:16 coef02
+//Bit 12:0  coef10
+#define   VDIN_MATRIX_COEF02_10                    (0x1212)
+#define P_VDIN_MATRIX_COEF02_10                    (volatile unsigned int *)((0x1212  << 2) + 0xff900000)
+//Bit 28:16 coef11
+//Bit 12:0  coef12
+#define   VDIN_MATRIX_COEF11_12                    (0x1213)
+#define P_VDIN_MATRIX_COEF11_12                    (volatile unsigned int *)((0x1213  << 2) + 0xff900000)
+//Bit 28:16 coef20
+//Bit 12:0  coef21
+#define   VDIN_MATRIX_COEF20_21                    (0x1214)
+#define P_VDIN_MATRIX_COEF20_21                    (volatile unsigned int *)((0x1214  << 2) + 0xff900000)
+//BIt 18:16 conv_rs
+//Bit 12:0  coef22
+#define   VDIN_MATRIX_COEF22                       (0x1215)
+#define P_VDIN_MATRIX_COEF22                       (volatile unsigned int *)((0x1215  << 2) + 0xff900000)
+//Bit 26:16 offset0
+//Bit 10:0  offset1
+#define   VDIN_MATRIX_OFFSET0_1                    (0x1216)
+#define P_VDIN_MATRIX_OFFSET0_1                    (volatile unsigned int *)((0x1216  << 2) + 0xff900000)
+//Bit 10:0  offset2
+#define   VDIN_MATRIX_OFFSET2                      (0x1217)
+#define P_VDIN_MATRIX_OFFSET2                      (volatile unsigned int *)((0x1217  << 2) + 0xff900000)
+//Bit 26:16 pre_offset0
+//Bit 10:0  pre_offset1
+#define   VDIN_MATRIX_PRE_OFFSET0_1                (0x1218)
+#define P_VDIN_MATRIX_PRE_OFFSET0_1                (volatile unsigned int *)((0x1218  << 2) + 0xff900000)
+//Bit 10:0  pre_offset2
+#define   VDIN_MATRIX_PRE_OFFSET2                  (0x1219)
+#define P_VDIN_MATRIX_PRE_OFFSET2                  (volatile unsigned int *)((0x1219  << 2) + 0xff900000)
+//12:0 lfifo_buf_size
+#define   VDIN_LFIFO_CTRL                          (0x121a)
+#define P_VDIN_LFIFO_CTRL                          (volatile unsigned int *)((0x121a  << 2) + 0xff900000)
+#define   VDIN_COM_GCLK_CTRL                       (0x121b)
+#define P_VDIN_COM_GCLK_CTRL                       (volatile unsigned int *)((0x121b  << 2) + 0xff900000)
+//12:0 VDIN input interface width minus 1, before the window function, after the de decimation
+#define   VDIN_INTF_WIDTHM1                        (0x121c)
+#define P_VDIN_INTF_WIDTHM1                        (volatile unsigned int *)((0x121c  << 2) + 0xff900000)
+//Bit 15          //default== 0, urgent_ctrl_en
+//Bit 14          //default== 0, urgent_wr, if true for write buffer
+//Bit 13          //default== 0, out_inv_en
+//Bit 12          //default == 0, urgent_ini_value
+//Bit 11:6        //default == 0, up_th  up threshold
+//Bit 5:0         //default == 0, dn_th  dn threshold
+#define   VDIN_LFIFO_URG_CTRL                      (0x121e)
+#define P_VDIN_LFIFO_URG_CTRL                      (volatile unsigned int *)((0x121e  << 2) + 0xff900000)
+//Bit 8, 1: discard data before line fifo, 0: normal mode
+//Bit 7:0 Write chroma canvas address
+#define   VDIN_WR_CTRL2                            (0x121f)
+#define P_VDIN_WR_CTRL2                            (volatile unsigned int *)((0x121f  << 2) + 0xff900000)
+//Bit 31:30 hconv_mode, Applicable only to bit[13:12]=0 or 2. 0: Output every even pixels' CbCr;
+//                                                            1: Output every odd pixels' CbCr;
+//                                                            2: Output an average value per even&odd pair of pixels;
+//                                                            3: Output all CbCr. (This does NOT apply to bit[13:12]=0 -- 4:2:2 mode.)
+//Bit 29 no_clk_gate: disable vid_wr_mif clock gating function.
+//Bit 28 clear write response counter in the vdin write memory interface
+//Bit 27 eol_sel, 1: use eol as the line end indication, 0: use width as line end indication in the vdin write memory interface
+//Bit 26 vcp_nr_en. Only used in VDIN0. NOT used in VDIN1.
+//Bit 25 vcp_wr_en. Only used in VDIN0. NOT used in VDIN1.
+//Bit 24 vcp_in_en. Only used in VDIN0. NOT used in VDIN1.
+//Bit 23 vdin frame reset enble, if true, it will provide frame reset during go_field(vsync) to the modules after that
+//Bit 22 vdin line fifo soft reset enable, meaning, if true line fifo will reset during go_field (vsync)
+//Bit 21 vdin direct write done status clear bit
+//Bit 20 vdin NR write done status clear bit
+//Bit 18 swap_cbcr. Applicable only to bit[13:12]=2. 0: Output CbCr (NV12); 1: Output CrCb (NV21).
+//Bit 17:16 vconv_mode, Applicable only to bit[13:12]=2. 0: Output every even lines' CbCr;
+//                                                       1: Output every odd lines' CbCr;
+//                                                       2: Reserved;
+//                                                       3: Output all CbCr.
+//Bit 13:12 vdin write format, 0: 4:2:2 to luma canvas, 1: 4:4:4 to luma canvas,
+//                             2: Y to luma canvas, CbCr to chroma canvas. For NV12/21, also define Bit 31:30, 17:16, and bit 18.
+//Bit 11 vdin write canvas double buffer enable, means the canvas address will be latched by vsync before using
+//Bit 10 1: disable ctrl_reg write pulse which will reset internal counter. when bit 11 is 1, this bit should be 1.
+//Bit 9 vdin write request urgent
+//Bit 8 vdin write request enable
+//Bit 7:0 Write luma canvas address
+#define   VDIN_WR_CTRL                             (0x1220)
+#define P_VDIN_WR_CTRL                             (volatile unsigned int *)((0x1220  << 2) + 0xff900000)
+//Bit 29, if true, horizontal reverse
+//Bit 28:16 start
+//Bit 12:0  end
+#define   VDIN_WR_H_START_END                      (0x1221)
+#define P_VDIN_WR_H_START_END                      (volatile unsigned int *)((0x1221  << 2) + 0xff900000)
+//Bit 29, if true, vertical reverse
+//Bit 28:16 start
+//Bit 12:0  end
+#define   VDIN_WR_V_START_END                      (0x1222)
+#define P_VDIN_WR_V_START_END                      (volatile unsigned int *)((0x1222  << 2) + 0xff900000)
+//Bit 24:20, integer portion
+//Bit 19:0, fraction portion
+#define   VDIN_VSC_PHASE_STEP                      (0x1223)
+#define P_VDIN_VSC_PHASE_STEP                      (volatile unsigned int *)((0x1223  << 2) + 0xff900000)
+//Bit 23, vsc_en, vertical scaler enable
+//Bit 21 vsc_phase0_always_en, when scale up, you have to set it to 1
+//Bit 20:16 ini skip_line_num
+//Bit 15:0 vscaler ini_phase
+#define   VDIN_VSC_INI_CTRL                        (0x1224)
+#define P_VDIN_VSC_INI_CTRL                        (volatile unsigned int *)((0x1224  << 2) + 0xff900000)
+//Bit 28:16, vshrink input height minus 1
+//Bit 12:0, scaler input height minus 1
+#define   VDIN_SCIN_HEIGHTM1                       (0x1225)
+#define P_VDIN_SCIN_HEIGHTM1                       (volatile unsigned int *)((0x1225  << 2) + 0xff900000)
+//Bit 23:16, dummy component 0
+//Bit 15:8, dummy component 1
+//Bit 7:0, dummy component 2
+#define   VDIN_DUMMY_DATA                          (0x1226)
+#define P_VDIN_DUMMY_DATA                          (volatile unsigned int *)((0x1226  << 2) + 0xff900000)
+//Read only
+//Bit 29:20 component 0
+//Bit 19:10 component 1
+//Bit 9:0 component 2
+#define   VDIN_MATRIX_PROBE_COLOR                  (0x1228)
+#define P_VDIN_MATRIX_PROBE_COLOR                  (volatile unsigned int *)((0x1228  << 2) + 0xff900000)
+//Bit 23:16 component 0
+//Bit 15:8  component 1
+//Bit 7:0 component 2
+#define   VDIN_MATRIX_HL_COLOR                     (0x1229)
+#define P_VDIN_MATRIX_HL_COLOR                     (volatile unsigned int *)((0x1229  << 2) + 0xff900000)
+//28:16 probe x, postion
+//12:0  probe y, position
+#define   VDIN_MATRIX_PROBE_POS                    (0x122a)
+#define P_VDIN_MATRIX_PROBE_POS                    (volatile unsigned int *)((0x122a  << 2) + 0xff900000)
+#define   VDIN_CHROMA_ADDR_PORT                    (0x122b)
+#define P_VDIN_CHROMA_ADDR_PORT                    (volatile unsigned int *)((0x122b  << 2) + 0xff900000)
+#define   VDIN_CHROMA_DATA_PORT                    (0x122c)
+#define P_VDIN_CHROMA_DATA_PORT                    (volatile unsigned int *)((0x122c  << 2) + 0xff900000)
+//
+#define   VDIN_CM_BRI_CON_CTRL                     (0x122d)
+#define P_VDIN_CM_BRI_CON_CTRL                     (volatile unsigned int *)((0x122d  << 2) + 0xff900000)
+//Bit 17  clk_cyc_cnt_clr, if true, clear this register
+//Bit 16 if true, use vpu clock to count one line, otherwise use actually hsync to count line_cnt
+//Bit 15:0   line width using vpu clk
+#define   VDIN_GO_LINE_CTRL                        (0x122f)
+#define P_VDIN_GO_LINE_CTRL                        (volatile unsigned int *)((0x122f  << 2) + 0xff900000)
+//Bit 31:24 hist_pix_white_th, larger than this th is counted as white pixel
+//Bit 23:16 hist_pix_black_th, less than this th is counted as black pixel
+//Bit 11    hist_34bin_only,   34 bin only mode, including white/black
+//Bit 10:9  ldim_stts_din_sel, 00: from matrix0 dout,  01: from vsc_dout, 10: from matrix1 dout, 11: form matrix1 din
+//Bit 8     ldim_stts_en
+//Bit 6:5   hist_dnlp_low   the real pixels in each bins got by VDIN_DNLP_HISTXX should multiple with 2^(dnlp_low+3)
+//Bit 3:2   hist_din_sel    the source used for hist statistics.  00: from matrix0 dout,  01: from vsc_dout, 10: from matrix1 dout, 11: form matrix1 din
+//Bit 1     hist_win_en     1'b0: hist used for full picture; 1'b1: hist used for pixels within hist window
+//Bit 0     hist_spl_en     1'b0: disable hist readback; 1'b1: enable hist readback
+#define   VDIN_HIST_CTRL                           (0x1230)
+#define P_VDIN_HIST_CTRL                           (volatile unsigned int *)((0x1230  << 2) + 0xff900000)
+//Bit 28:16 hist_hstart  horizontal start value to define hist window
+//Bit 12:0  hist_hend    horizontal end value to define hist window
+#define   VDIN_HIST_H_START_END                    (0x1231)
+#define P_VDIN_HIST_H_START_END                    (volatile unsigned int *)((0x1231  << 2) + 0xff900000)
+//Bit 28:16 hist_vstart  vertical start value to define hist window
+//Bit 12:0  hist_vend    vertical end value to define hist window
+#define   VDIN_HIST_V_START_END                    (0x1232)
+#define P_VDIN_HIST_V_START_END                    (volatile unsigned int *)((0x1232  << 2) + 0xff900000)
+//Bit 15:8  hist_max    maximum value
+//Bit 7:0   hist_min    minimum value
+//read only
+#define   VDIN_HIST_MAX_MIN                        (0x1233)
+#define P_VDIN_HIST_MAX_MIN                        (volatile unsigned int *)((0x1233  << 2) + 0xff900000)
+//Bit 31:0  hist_spl_rd
+//counts for the total luma value
+//read only
+#define   VDIN_HIST_SPL_VAL                        (0x1234)
+#define P_VDIN_HIST_SPL_VAL                        (volatile unsigned int *)((0x1234  << 2) + 0xff900000)
+//Bit 21:0  hist_spl_pixel_count
+//counts for the total calculated pixels
+//read only
+#define   VDIN_HIST_SPL_PIX_CNT                    (0x1235)
+#define P_VDIN_HIST_SPL_PIX_CNT                    (volatile unsigned int *)((0x1235  << 2) + 0xff900000)
+//Bit 31:0  hist_chroma_sum
+//counts for the total chroma value
+//read only
+#define   VDIN_HIST_CHROMA_SUM                     (0x1236)
+#define P_VDIN_HIST_CHROMA_SUM                     (volatile unsigned int *)((0x1236  << 2) + 0xff900000)
+//Bit 31:16 higher hist bin
+//Bit 15:0  lower hist bin
+//0-255 are splited to 64 bins evenly, and VDIN_DNLP_HISTXX
+//are the statistic number of pixels that within each bin.
+//VDIN_DNLP_HIST00[15:0]  counts for the first  bin
+//VDIN_DNLP_HIST00[31:16] counts for the second bin
+//VDIN_DNLP_HIST01[15:0]  counts for the third  bin
+//VDIN_DNLP_HIST01[31:16] counts for the fourth bin
+//etc...
+//read only
+#define   VDIN_DNLP_HIST00                         (0x1237)
+#define P_VDIN_DNLP_HIST00                         (volatile unsigned int *)((0x1237  << 2) + 0xff900000)
+#define   VDIN_DNLP_HIST01                         (0x1238)
+#define P_VDIN_DNLP_HIST01                         (volatile unsigned int *)((0x1238  << 2) + 0xff900000)
+#define   VDIN_DNLP_HIST02                         (0x1239)
+#define P_VDIN_DNLP_HIST02                         (volatile unsigned int *)((0x1239  << 2) + 0xff900000)
+#define   VDIN_DNLP_HIST03                         (0x123a)
+#define P_VDIN_DNLP_HIST03                         (volatile unsigned int *)((0x123a  << 2) + 0xff900000)
+#define   VDIN_DNLP_HIST04                         (0x123b)
+#define P_VDIN_DNLP_HIST04                         (volatile unsigned int *)((0x123b  << 2) + 0xff900000)
+#define   VDIN_DNLP_HIST05                         (0x123c)
+#define P_VDIN_DNLP_HIST05                         (volatile unsigned int *)((0x123c  << 2) + 0xff900000)
+#define   VDIN_DNLP_HIST06                         (0x123d)
+#define P_VDIN_DNLP_HIST06                         (volatile unsigned int *)((0x123d  << 2) + 0xff900000)
+#define   VDIN_DNLP_HIST07                         (0x123e)
+#define P_VDIN_DNLP_HIST07                         (volatile unsigned int *)((0x123e  << 2) + 0xff900000)
+#define   VDIN_DNLP_HIST08                         (0x123f)
+#define P_VDIN_DNLP_HIST08                         (volatile unsigned int *)((0x123f  << 2) + 0xff900000)
+#define   VDIN_DNLP_HIST09                         (0x1240)
+#define P_VDIN_DNLP_HIST09                         (volatile unsigned int *)((0x1240  << 2) + 0xff900000)
+#define   VDIN_DNLP_HIST10                         (0x1241)
+#define P_VDIN_DNLP_HIST10                         (volatile unsigned int *)((0x1241  << 2) + 0xff900000)
+#define   VDIN_DNLP_HIST11                         (0x1242)
+#define P_VDIN_DNLP_HIST11                         (volatile unsigned int *)((0x1242  << 2) + 0xff900000)
+#define   VDIN_DNLP_HIST12                         (0x1243)
+#define P_VDIN_DNLP_HIST12                         (volatile unsigned int *)((0x1243  << 2) + 0xff900000)
+#define   VDIN_DNLP_HIST13                         (0x1244)
+#define P_VDIN_DNLP_HIST13                         (volatile unsigned int *)((0x1244  << 2) + 0xff900000)
+#define   VDIN_DNLP_HIST14                         (0x1245)
+#define P_VDIN_DNLP_HIST14                         (volatile unsigned int *)((0x1245  << 2) + 0xff900000)
+#define   VDIN_DNLP_HIST15                         (0x1246)
+#define P_VDIN_DNLP_HIST15                         (volatile unsigned int *)((0x1246  << 2) + 0xff900000)
+#define   VDIN_DNLP_HIST16                         (0x1247)
+#define P_VDIN_DNLP_HIST16                         (volatile unsigned int *)((0x1247  << 2) + 0xff900000)
+#define   VDIN_DNLP_HIST17                         (0x1248)
+#define P_VDIN_DNLP_HIST17                         (volatile unsigned int *)((0x1248  << 2) + 0xff900000)
+#define   VDIN_DNLP_HIST18                         (0x1249)
+#define P_VDIN_DNLP_HIST18                         (volatile unsigned int *)((0x1249  << 2) + 0xff900000)
+#define   VDIN_DNLP_HIST19                         (0x124a)
+#define P_VDIN_DNLP_HIST19                         (volatile unsigned int *)((0x124a  << 2) + 0xff900000)
+#define   VDIN_DNLP_HIST20                         (0x124b)
+#define P_VDIN_DNLP_HIST20                         (volatile unsigned int *)((0x124b  << 2) + 0xff900000)
+#define   VDIN_DNLP_HIST21                         (0x124c)
+#define P_VDIN_DNLP_HIST21                         (volatile unsigned int *)((0x124c  << 2) + 0xff900000)
+#define   VDIN_DNLP_HIST22                         (0x124d)
+#define P_VDIN_DNLP_HIST22                         (volatile unsigned int *)((0x124d  << 2) + 0xff900000)
+#define   VDIN_DNLP_HIST23                         (0x124e)
+#define P_VDIN_DNLP_HIST23                         (volatile unsigned int *)((0x124e  << 2) + 0xff900000)
+#define   VDIN_DNLP_HIST24                         (0x124f)
+#define P_VDIN_DNLP_HIST24                         (volatile unsigned int *)((0x124f  << 2) + 0xff900000)
+#define   VDIN_DNLP_HIST25                         (0x1250)
+#define P_VDIN_DNLP_HIST25                         (volatile unsigned int *)((0x1250  << 2) + 0xff900000)
+#define   VDIN_DNLP_HIST26                         (0x1251)
+#define P_VDIN_DNLP_HIST26                         (volatile unsigned int *)((0x1251  << 2) + 0xff900000)
+#define   VDIN_DNLP_HIST27                         (0x1252)
+#define P_VDIN_DNLP_HIST27                         (volatile unsigned int *)((0x1252  << 2) + 0xff900000)
+#define   VDIN_DNLP_HIST28                         (0x1253)
+#define P_VDIN_DNLP_HIST28                         (volatile unsigned int *)((0x1253  << 2) + 0xff900000)
+#define   VDIN_DNLP_HIST29                         (0x1254)
+#define P_VDIN_DNLP_HIST29                         (volatile unsigned int *)((0x1254  << 2) + 0xff900000)
+#define   VDIN_DNLP_HIST30                         (0x1255)
+#define P_VDIN_DNLP_HIST30                         (volatile unsigned int *)((0x1255  << 2) + 0xff900000)
+#define   VDIN_DNLP_HIST31                         (0x1256)
+#define P_VDIN_DNLP_HIST31                         (volatile unsigned int *)((0x1256  << 2) + 0xff900000)
+//Bit 31, local dimming statistic enable
+//Bit 28, eol enable
+//Bit 27:25, vertical line overlap number for max finding
+//Bit 24:22, horizontal pixel overlap number, 0: 17 pix, 1: 9 pix, 2: 5 pix, 3: 3 pix, 4: 0 pix
+//Bit 20, 1,2,1 low pass filter enable before max/hist statistic
+//Bit 19:16, region H/V position index, refer to VDIN_LDIM_STTS_HIST_SET_REGION
+//Bit 15, 1: region read index auto increase per read to VDIN_LDIM_STTS_HIST_READ_REGION
+//Bit 6:0, region read index
+#define   VDIN_LDIM_STTS_HIST_REGION_IDX           (0x1257)
+#define P_VDIN_LDIM_STTS_HIST_REGION_IDX           (volatile unsigned int *)((0x1257  << 2) + 0xff900000)
+//Bit 28:0, if VDIN_LDIM_STTS_HIST_REGION_IDX[19:16] == 5'h0: read/write hvstart0
+//			if VDIN_LDIM_STTS_HIST_REGION_IDX[19:16] == 5'h1: read/write hend01
+//			if VDIN_LDIM_STTS_HIST_REGION_IDX[19:16] == 5'h2: read/write vend01
+//			if VDIN_LDIM_STTS_HIST_REGION_IDX[19:16] == 5'h3: read/write hend23
+//			if VDIN_LDIM_STTS_HIST_REGION_IDX[19:16] == 5'h4: read/write vend23
+//			if VDIN_LDIM_STTS_HIST_REGION_IDX[19:16] == 5'h5: read/write hend45
+//			if VDIN_LDIM_STTS_HIST_REGION_IDX[19:16] == 5'h6: read/write vend45
+//			if VDIN_LDIM_STTS_HIST_REGION_IDX[19:16] == 5'd7: read/write hend67
+//			if VDIN_LDIM_STTS_HIST_REGION_IDX[19:16] == 5'h8: read/write vend67
+//			if VDIN_LDIM_STTS_HIST_REGION_IDX[19:16] == 5'h9: read/write hend89
+//			if VDIN_LDIM_STTS_HIST_REGION_IDX[19:16] == 5'ha: read/write vend89
+//hvstart0, Bit 28:16 row0 vstart, Bit 12:0 col0 hstart
+//hend01, Bit 28:16 col1 hend, Bit 12:0 col0 hend
+//vend01, Bit 28:16 row1 vend, Bit 12:0 row0 vend
+//hend23, Bit 28:16 col3 hend, Bit 12:0 col2 hend
+//vend23, Bit 28:16 row3 vend, Bit 12:0 row2 vend
+//hend45, Bit 28:16 col5 hend, Bit 12:0 col4 hend
+//vend45, Bit 28:16 row5 vend, Bit 12:0 row4 vend
+//hend67, Bit 28:16 col7 hend, Bit 12:0 col6 hend
+//vend67, Bit 28:16 row7 vend, Bit 12:0 row6 vend
+//hend89, Bit 28:16 col9 hend, Bit 12:0 col8 hend
+//vend89, Bit 28:16 row9 vend, Bit 12:0 row8 vend
+#define   VDIN_LDIM_STTS_HIST_SET_REGION           (0x1258)
+#define P_VDIN_LDIM_STTS_HIST_SET_REGION           (volatile unsigned int *)((0x1258  << 2) + 0xff900000)
+//REGION STATISTIC DATA READ OUT PORT, bit 29:20 max_comp2, bit 19:10 max_comp1, bit 9:0 max_comp0
+#define   VDIN_LDIM_STTS_HIST_READ_REGION          (0x1259)
+#define P_VDIN_LDIM_STTS_HIST_READ_REGION          (volatile unsigned int *)((0x1259  << 2) + 0xff900000)
+//Bit 18, reset bit, high active
+//Bit 17, if true, widen hs/vs pulse
+//Bit 16  vsync total counter always accumulating enable
+//Bit 14:12, select hs/vs of video input channel to measure, 0: no selection, 1: vdi1, 2: vid2, 3: vid3, 4:vid4, 5:vdi5, 6:vid6, 7:vdi7, 8: vdi8
+//Bit 11:4, vsync_span, define how many vsync span need to measure
+//Bit 2:0  meas_hs_index, index to select which HS counter/range
+#define   VDIN_MEAS_CTRL0                          (0x125a)
+#define P_VDIN_MEAS_CTRL0                          (volatile unsigned int *)((0x125a  << 2) + 0xff900000)
+//Read only
+//19:16     meas_ind_total_count_n, every number of sync_span vsyncs, this count add 1
+//15:0      high bit portion of vsync total counter
+#define   VDIN_MEAS_VS_COUNT_HI                    (0x125b)
+#define P_VDIN_MEAS_VS_COUNT_HI                    (volatile unsigned int *)((0x125b  << 2) + 0xff900000)
+//Read only
+//31:0, low bit portion of vsync total counter
+#define   VDIN_MEAS_VS_COUNT_LO                    (0x125c)
+#define P_VDIN_MEAS_VS_COUNT_LO                    (volatile unsigned int *)((0x125c  << 2) + 0xff900000)
+//according to the meas_hs_index in register VDIN_MEAS_CTRL0
+//meas_hs_index == 0, first hs range
+//meas_hs_index == 1, second hs range
+//meas_hs_index == 2, third hs range
+//meas_hs_index == 3, fourth hs range
+//bit 28:16 count_start
+//bit 12:0 count_end
+#define   VDIN_MEAS_HS_RANGE                       (0x125d)
+#define P_VDIN_MEAS_HS_RANGE                       (volatile unsigned int *)((0x125d  << 2) + 0xff900000)
+//Read only
+//according to the meas_hs_index in register VDIN_MEAS_CTRL0,
+//meas_hs_index == 0, first range hs counter,
+//meas_hs_index == 1, second range hs coutner
+//meas_hs_index == 2, third range hs coutner
+//meas_hs_index == 3, fourth range hs coutner
+//23:0
+#define   VDIN_MEAS_HS_COUNT                       (0x125e)
+#define P_VDIN_MEAS_HS_COUNT                       (volatile unsigned int *)((0x125e  << 2) + 0xff900000)
+//Bit 8      white_enable
+//Bit 7:0    blkbar_white_level
+#define   VDIN_BLKBAR_CTRL1                        (0x125f)
+#define P_VDIN_BLKBAR_CTRL1                        (volatile unsigned int *)((0x125f  << 2) + 0xff900000)
+// Bit 31:24 blkbar_black_level    threshold to judge a black point
+// Bit 23:21 Reserved
+// Bit 20:8  blkbar_hwidth         left and right region width
+// Bit 7:5   blkbar_comp_sel       select yin or uin or vin to be the valid input
+// Bit 4     blkbar_sw_statistic_en enable software statistic of each block black points number
+// Bit 3     blkbar_det_en
+// Bit 2:1   blkbar_din_sel
+// bit blkbar_det_top_en
+#define   VDIN_BLKBAR_CTRL0                        (0x1260)
+#define P_VDIN_BLKBAR_CTRL0                        (volatile unsigned int *)((0x1260  << 2) + 0xff900000)
+// Bit 31:29 Reserved
+// Bit 28:16 blkbar_hstart.        Left region start
+// Bit 15:13 Reserved
+// Bit 12:0  blkbar_hend.          Right region end
+#define   VDIN_BLKBAR_H_START_END                  (0x1261)
+#define P_VDIN_BLKBAR_H_START_END                  (volatile unsigned int *)((0x1261  << 2) + 0xff900000)
+// Bit 31:29 Reserved
+// Bit 28:16 blkbar_vstart
+// Bit 15:13 Reserved
+// Bit 12:0  blkbar_vend
+#define   VDIN_BLKBAR_V_START_END                  (0x1262)
+#define P_VDIN_BLKBAR_V_START_END                  (volatile unsigned int *)((0x1262  << 2) + 0xff900000)
+// Bit 31:20 Reserved
+// Bit 19:0  blkbar_cnt_threshold. threshold to judge whether a block is totally black
+#define   VDIN_BLKBAR_CNT_THRESHOLD                (0x1263)
+#define P_VDIN_BLKBAR_CNT_THRESHOLD                (volatile unsigned int *)((0x1263  << 2) + 0xff900000)
+// Bit 31:29 Reserved
+// Bit 28:16 blkbar_row_th1.       //threshold of the top blackbar
+// Bit 15:13 Reserved
+// bit 12:0  blkbar_row_th2        //threshold of the bottom blackbar
+#define   VDIN_BLKBAR_ROW_TH1_TH2                  (0x1264)
+#define P_VDIN_BLKBAR_ROW_TH1_TH2                  (volatile unsigned int *)((0x1264  << 2) + 0xff900000)
+//Readonly
+// Bit 31:29 Reserved
+// Bit 28:16 blkbar_ind_left_start. horizontal start of the left region in the current searching
+// Bit 15:13 Reserved
+// Bit 12:0  blkbar_ind_left_end.   horizontal end of the left region in the current searching
+#define   VDIN_BLKBAR_IND_LEFT_START_END           (0x1265)
+#define P_VDIN_BLKBAR_IND_LEFT_START_END           (volatile unsigned int *)((0x1265  << 2) + 0xff900000)
+//Readonly
+// Bit 31:29 Reserved
+// Bit 28:16 blkbar_ind_right_start.horizontal start of the right region in the current searching
+// Bit 15:13 Reserved
+// Bit 12:0  blkbar_ind_right_end.  horizontal end of the right region in the current searching
+#define   VDIN_BLKBAR_IND_RIGHT_START_END          (0x1266)
+#define P_VDIN_BLKBAR_IND_RIGHT_START_END          (volatile unsigned int *)((0x1266  << 2) + 0xff900000)
+//Readonly
+// Bit 31:20 Reserved
+// Bit 19:0  blkbar_ind_left1_cnt.  Black pixel counter. left part of the left region
+#define   VDIN_BLKBAR_IND_LEFT1_CNT                (0x1267)
+#define P_VDIN_BLKBAR_IND_LEFT1_CNT                (volatile unsigned int *)((0x1267  << 2) + 0xff900000)
+//Readonly
+// Bit 31:20 Reserved
+// Bit 19:0  blkbar_ind_left2_cnt.  Black pixel counter. right part of the left region
+#define   VDIN_BLKBAR_IND_LEFT2_CNT                (0x1268)
+#define P_VDIN_BLKBAR_IND_LEFT2_CNT                (volatile unsigned int *)((0x1268  << 2) + 0xff900000)
+//Readonly
+// Bit 31:20 Reserved
+// Bit 19:0  blkbar_ind_right1_cnt. Black pixel counter. left part of the right region
+#define   VDIN_BLKBAR_IND_RIGHT1_CNT               (0x1269)
+#define P_VDIN_BLKBAR_IND_RIGHT1_CNT               (volatile unsigned int *)((0x1269  << 2) + 0xff900000)
+//Readonly
+// Bit 31:20 Reserved
+// Bit 19:0  blkbar_ind_right2_cnt. Black pixel counter. right part of the right region
+#define   VDIN_BLKBAR_IND_RIGHT2_CNT               (0x126a)
+#define P_VDIN_BLKBAR_IND_RIGHT2_CNT               (volatile unsigned int *)((0x126a  << 2) + 0xff900000)
+//Readonly
+// Bit 31:30 Resersed
+// Bit 29    blkbar_ind_black_det_done. LEFT/RIGHT Black detection done
+// Bit 28:16 blkbar_top_pos.            Top black bar position
+// Bit 15:13 Reserved.
+// Bit 12:0  blkbar_bot_pos.            Bottom black bar position
+#define   VDIN_BLKBAR_STATUS0                      (0x126b)
+#define P_VDIN_BLKBAR_STATUS0                      (volatile unsigned int *)((0x126b  << 2) + 0xff900000)
+//Readonly
+// Bit 31:29 Reserved
+// Bit 28:16 blkbar_left_pos.       Left black bar posiont
+// Bit 15:13 Reserved
+// Bit 12:0  blkbar_right_pos.      Right black bar position
+#define   VDIN_BLKBAR_STATUS1                      (0x126c)
+#define P_VDIN_BLKBAR_STATUS1                      (volatile unsigned int *)((0x126c  << 2) + 0xff900000)
+//Bit 28:16 input window H start
+//Bit 12:0  input window H end
+#define   VDIN_WIN_H_START_END                     (0x126d)
+#define P_VDIN_WIN_H_START_END                     (volatile unsigned int *)((0x126d  << 2) + 0xff900000)
+//Bit 28:16 input window H start
+//Bit 12:0  input window V start
+#define   VDIN_WIN_V_START_END                     (0x126e)
+#define P_VDIN_WIN_V_START_END                     (volatile unsigned int *)((0x126e  << 2) + 0xff900000)
+//Bit 23:16 vdi8 asfifo_ctrl
+//Bit 15:8 vdi7 asfifo_ctrl
+//Bit 7:0 vdi6 asfifo_ctrl
+#define   VDIN_ASFIFO_CTRL3                        (0x126f)
+#define P_VDIN_ASFIFO_CTRL3                        (volatile unsigned int *)((0x126f  << 2) + 0xff900000)
+//Bit 3:2 vshrk_clk2_ctrl
+//Bit 1:0 vshrk_clk1_ctrl
+#define   VDIN_COM_GCLK_CTRL2                      (0x1270)
+#define P_VDIN_COM_GCLK_CTRL2                      (volatile unsigned int *)((0x1270  << 2) + 0xff900000)
+//Bit 27 vshrk_en
+//Bit 26:25 vshrk_mode
+//Bit 24 vshrk_lpf_mode
+//Bit 23:0 vshrk_dummy
+#define   VDIN_VSHRK_CTRL                          (0x1271)
+#define P_VDIN_VSHRK_CTRL                          (volatile unsigned int *)((0x1271  << 2) + 0xff900000)
+#define   VDIN_DNLP_HIST32                         (0x1272)
+#define P_VDIN_DNLP_HIST32                         (volatile unsigned int *)((0x1272  << 2) + 0xff900000)
+//Read only
+//Bit 7, vdi9 fifo overflow
+//Bit 5:0, vdi9_asfifo_cnt
+#define   VDIN_COM_STATUS3                         (0x1273)
+#define P_VDIN_COM_STATUS3                         (volatile unsigned int *)((0x1273  << 2) + 0xff900000)
+#define   VDIN_SYNC_MASK                           (0x1274)
+#define P_VDIN_SYNC_MASK                           (volatile unsigned int *)((0x1274  << 2) + 0xff900000)
+//Bit 7:0,  hsync_mask_num
+//Bit 15:8, vsync_mask_num
+//Bit 16,   hsync_mask_enable
+//Bit 17,   vsync_mask_num
+//dolby vdin
+#define   VDIN_DOLBY_DSC_CTRL0                     (0x1275)
+#define P_VDIN_DOLBY_DSC_CTRL0                     (volatile unsigned int *)((0x1275  << 2) + 0xff900000)
+#define   VDIN_DOLBY_DSC_CTRL1                     (0x1276)
+#define P_VDIN_DOLBY_DSC_CTRL1                     (volatile unsigned int *)((0x1276  << 2) + 0xff900000)
+#define   VDIN_DOLBY_DSC_CTRL2                     (0x1277)
+#define P_VDIN_DOLBY_DSC_CTRL2                     (volatile unsigned int *)((0x1277  << 2) + 0xff900000)
+#define   VDIN_DOLBY_DSC_CTRL3                     (0x1278)
+#define P_VDIN_DOLBY_DSC_CTRL3                     (volatile unsigned int *)((0x1278  << 2) + 0xff900000)
+#define   VDIN_DOLBY_AXI_CTRL0                     (0x1279)
+#define P_VDIN_DOLBY_AXI_CTRL0                     (volatile unsigned int *)((0x1279  << 2) + 0xff900000)
+#define   VDIN_DOLBY_AXI_CTRL1                     (0x127a)
+#define P_VDIN_DOLBY_AXI_CTRL1                     (volatile unsigned int *)((0x127a  << 2) + 0xff900000)
+#define   VDIN_DOLBY_AXI_CTRL2                     (0x127b)
+#define P_VDIN_DOLBY_AXI_CTRL2                     (volatile unsigned int *)((0x127b  << 2) + 0xff900000)
+#define   VDIN_DOLBY_AXI_CTRL3                     (0x127c)
+#define P_VDIN_DOLBY_AXI_CTRL3                     (volatile unsigned int *)((0x127c  << 2) + 0xff900000)
+#define   VDIN_DOLBY_DSC_STATUS0                   (0x127d)
+#define P_VDIN_DOLBY_DSC_STATUS0                   (volatile unsigned int *)((0x127d  << 2) + 0xff900000)
+#define   VDIN_DOLBY_DSC_STATUS1                   (0x127e)
+#define P_VDIN_DOLBY_DSC_STATUS1                   (volatile unsigned int *)((0x127e  << 2) + 0xff900000)
+#define   VDIN_DOLBY_DSC_STATUS2                   (0x127f)
+#define P_VDIN_DOLBY_DSC_STATUS2                   (volatile unsigned int *)((0x127f  << 2) + 0xff900000)
+#define   VDIN_DOLBY_DSC_STATUS3                   (0x121d)
+#define P_VDIN_DOLBY_DSC_STATUS3                   (volatile unsigned int *)((0x121d  << 2) + 0xff900000)
+
+//8'h72 occupied by histogram 32
+//VDIN0        8'h00 - 8'h7f
+#define VDIN0_SCALE_COEF_IDX                    ((VDIN0_OFFSET << 2) + VDIN_SCALE_COEF_IDX               )
+#define VDIN0_SCALE_COEF                        ((VDIN0_OFFSET << 2) + VDIN_SCALE_COEF                   )
+#define VDIN0_COM_CTRL0                         ((VDIN0_OFFSET << 2) + VDIN_COM_CTRL0                    )
+#define VDIN0_ACTIVE_MAX_PIX_CNT_STATUS         ((VDIN0_OFFSET << 2) + VDIN_ACTIVE_MAX_PIX_CNT_STATUS    )
+#define VDIN0_LCNT_STATUS                       ((VDIN0_OFFSET << 2) + VDIN_LCNT_STATUS                  )
+#define VDIN0_COM_STATUS0                       ((VDIN0_OFFSET << 2) + VDIN_COM_STATUS0                  )
+#define VDIN0_COM_STATUS1                       ((VDIN0_OFFSET << 2) + VDIN_COM_STATUS1                  )
+#define VDIN0_LCNT_SHADOW_STATUS                ((VDIN0_OFFSET << 2) + VDIN_LCNT_SHADOW_STATUS           )
+#define VDIN0_ASFIFO_CTRL0                      ((VDIN0_OFFSET << 2) + VDIN_ASFIFO_CTRL0                 )
+#define VDIN0_ASFIFO_CTRL1                      ((VDIN0_OFFSET << 2) + VDIN_ASFIFO_CTRL1                 )
+#define VDIN0_WIDTHM1I_WIDTHM1O                 ((VDIN0_OFFSET << 2) + VDIN_WIDTHM1I_WIDTHM1O            )
+#define VDIN0_SC_MISC_CTRL                      ((VDIN0_OFFSET << 2) + VDIN_SC_MISC_CTRL                 )
+#define VDIN0_HSC_PHASE_STEP                    ((VDIN0_OFFSET << 2) + VDIN_HSC_PHASE_STEP               )
+#define VDIN0_HSC_INI_CTRL                      ((VDIN0_OFFSET << 2) + VDIN_HSC_INI_CTRL                 )
+#define VDIN0_COM_STATUS2                       ((VDIN0_OFFSET << 2) + VDIN_COM_STATUS2                  )
+#define VDIN0_COM_STATUS3                       ((VDIN0_OFFSET << 2) + VDIN_COM_STATUS3                  )
+#define VDIN0_ASFIFO_CTRL2                      ((VDIN0_OFFSET << 2) + VDIN_ASFIFO_CTRL2                 )
+#define VDIN0_MATRIX_CTRL                       ((VDIN0_OFFSET << 2) + VDIN_MATRIX_CTRL                  )
+#define VDIN0_MATRIX_COEF00_01                  ((VDIN0_OFFSET << 2) + VDIN_MATRIX_COEF00_01             )
+#define VDIN0_MATRIX_COEF02_10                  ((VDIN0_OFFSET << 2) + VDIN_MATRIX_COEF02_10             )
+#define VDIN0_MATRIX_COEF11_12                  ((VDIN0_OFFSET << 2) + VDIN_MATRIX_COEF11_12             )
+#define VDIN0_MATRIX_COEF20_21                  ((VDIN0_OFFSET << 2) + VDIN_MATRIX_COEF20_21             )
+#define VDIN0_MATRIX_COEF22                     ((VDIN0_OFFSET << 2) + VDIN_MATRIX_COEF22                )
+#define VDIN0_MATRIX_OFFSET0_1                  ((VDIN0_OFFSET << 2) + VDIN_MATRIX_OFFSET0_1             )
+#define VDIN0_MATRIX_OFFSET2                    ((VDIN0_OFFSET << 2) + VDIN_MATRIX_OFFSET2               )
+#define VDIN0_MATRIX_PRE_OFFSET0_1              ((VDIN0_OFFSET << 2) + VDIN_MATRIX_PRE_OFFSET0_1         )
+#define VDIN0_MATRIX_PRE_OFFSET2                ((VDIN0_OFFSET << 2) + VDIN_MATRIX_PRE_OFFSET2           )
+#define VDIN0_LFIFO_CTRL                        ((VDIN0_OFFSET << 2) + VDIN_LFIFO_CTRL                   )
+#define VDIN0_COM_GCLK_CTRL                     ((VDIN0_OFFSET << 2) + VDIN_COM_GCLK_CTRL                )
+#define VDIN0_INTF_WIDTHM1                      ((VDIN0_OFFSET << 2) + VDIN_INTF_WIDTHM1                 )
+#define VDIN0_WR_CTRL2                          ((VDIN0_OFFSET << 2) + VDIN_WR_CTRL2                     )
+#define VDIN0_WR_CTRL                           ((VDIN0_OFFSET << 2) + VDIN_WR_CTRL                      )
+#define VDIN0_WR_H_START_END                    ((VDIN0_OFFSET << 2) + VDIN_WR_H_START_END               )
+#define VDIN0_WR_V_START_END                    ((VDIN0_OFFSET << 2) + VDIN_WR_V_START_END               )
+#define VDIN0_VSC_PHASE_STEP                    ((VDIN0_OFFSET << 2) + VDIN_VSC_PHASE_STEP               )
+#define VDIN0_VSC_INI_CTRL                      ((VDIN0_OFFSET << 2) + VDIN_VSC_INI_CTRL                 )
+#define VDIN0_SCIN_HEIGHTM1                     ((VDIN0_OFFSET << 2) + VDIN_SCIN_HEIGHTM1                )
+#define VDIN0_DUMMY_DATA                        ((VDIN0_OFFSET << 2) + VDIN_DUMMY_DATA                   )
+#define VDIN0_MATRIX_PROBE_COLOR                ((VDIN0_OFFSET << 2) + VDIN_MATRIX_PROBE_COLOR           )
+#define VDIN0_MATRIX_HL_COLOR                   ((VDIN0_OFFSET << 2) + VDIN_MATRIX_HL_COLOR              )
+#define VDIN0_MATRIX_PROBE_POS                  ((VDIN0_OFFSET << 2) + VDIN_MATRIX_PROBE_POS             )
+#define VDIN0_CHROMA_ADDR_PORT                  ((VDIN0_OFFSET << 2) + VDIN_CHROMA_ADDR_PORT             )
+#define VDIN0_CHROMA_DATA_PORT                  ((VDIN0_OFFSET << 2) + VDIN_CHROMA_DATA_PORT             )
+#define VDIN0_CM_BRI_CON_CTRL                   ((VDIN0_OFFSET << 2) + VDIN_CM_BRI_CON_CTRL              )
+#define VDIN0_HIST_CTRL                         ((VDIN0_OFFSET << 2) + VDIN_HIST_CTRL                    )
+#define VDIN0_HIST_H_START_END                  ((VDIN0_OFFSET << 2) + VDIN_HIST_H_START_END             )
+#define VDIN0_HIST_V_START_END                  ((VDIN0_OFFSET << 2) + VDIN_HIST_V_START_END             )
+#define VDIN0_HIST_MAX_MIN                      ((VDIN0_OFFSET << 2) + VDIN_HIST_MAX_MIN                 )
+#define VDIN0_HIST_SPL_VAL                      ((VDIN0_OFFSET << 2) + VDIN_HIST_SPL_VAL                 )
+#define VDIN0_HIST_SPL_PIX_CNT                  ((VDIN0_OFFSET << 2) + VDIN_HIST_SPL_PIX_CNT             )
+#define VDIN0_HIST_CHROMA_SUM                   ((VDIN0_OFFSET << 2) + VDIN_HIST_CHROMA_SUM              )
+#define VDIN0_DNLP_HIST00                       ((VDIN0_OFFSET << 2) + VDIN_DNLP_HIST00                  )
+#define VDIN0_DNLP_HIST01                       ((VDIN0_OFFSET << 2) + VDIN_DNLP_HIST01                  )
+#define VDIN0_DNLP_HIST02                       ((VDIN0_OFFSET << 2) + VDIN_DNLP_HIST02                  )
+#define VDIN0_DNLP_HIST03                       ((VDIN0_OFFSET << 2) + VDIN_DNLP_HIST03                  )
+#define VDIN0_DNLP_HIST04                       ((VDIN0_OFFSET << 2) + VDIN_DNLP_HIST04                  )
+#define VDIN0_DNLP_HIST05                       ((VDIN0_OFFSET << 2) + VDIN_DNLP_HIST05                  )
+#define VDIN0_DNLP_HIST06                       ((VDIN0_OFFSET << 2) + VDIN_DNLP_HIST06                  )
+#define VDIN0_DNLP_HIST07                       ((VDIN0_OFFSET << 2) + VDIN_DNLP_HIST07                  )
+#define VDIN0_DNLP_HIST08                       ((VDIN0_OFFSET << 2) + VDIN_DNLP_HIST08                  )
+#define VDIN0_DNLP_HIST09                       ((VDIN0_OFFSET << 2) + VDIN_DNLP_HIST09                  )
+#define VDIN0_DNLP_HIST10                       ((VDIN0_OFFSET << 2) + VDIN_DNLP_HIST10                  )
+#define VDIN0_DNLP_HIST11                       ((VDIN0_OFFSET << 2) + VDIN_DNLP_HIST11                  )
+#define VDIN0_DNLP_HIST12                       ((VDIN0_OFFSET << 2) + VDIN_DNLP_HIST12                  )
+#define VDIN0_DNLP_HIST13                       ((VDIN0_OFFSET << 2) + VDIN_DNLP_HIST13                  )
+#define VDIN0_DNLP_HIST14                       ((VDIN0_OFFSET << 2) + VDIN_DNLP_HIST14                  )
+#define VDIN0_DNLP_HIST15                       ((VDIN0_OFFSET << 2) + VDIN_DNLP_HIST15                  )
+#define VDIN0_DNLP_HIST16                       ((VDIN0_OFFSET << 2) + VDIN_DNLP_HIST16                  )
+#define VDIN0_DNLP_HIST17                       ((VDIN0_OFFSET << 2) + VDIN_DNLP_HIST17                  )
+#define VDIN0_DNLP_HIST18                       ((VDIN0_OFFSET << 2) + VDIN_DNLP_HIST18                  )
+#define VDIN0_DNLP_HIST19                       ((VDIN0_OFFSET << 2) + VDIN_DNLP_HIST19                  )
+#define VDIN0_DNLP_HIST20                       ((VDIN0_OFFSET << 2) + VDIN_DNLP_HIST20                  )
+#define VDIN0_DNLP_HIST21                       ((VDIN0_OFFSET << 2) + VDIN_DNLP_HIST21                  )
+#define VDIN0_DNLP_HIST22                       ((VDIN0_OFFSET << 2) + VDIN_DNLP_HIST22                  )
+#define VDIN0_DNLP_HIST23                       ((VDIN0_OFFSET << 2) + VDIN_DNLP_HIST23                  )
+#define VDIN0_DNLP_HIST24                       ((VDIN0_OFFSET << 2) + VDIN_DNLP_HIST24                  )
+#define VDIN0_DNLP_HIST25                       ((VDIN0_OFFSET << 2) + VDIN_DNLP_HIST25                  )
+#define VDIN0_DNLP_HIST26                       ((VDIN0_OFFSET << 2) + VDIN_DNLP_HIST26                  )
+#define VDIN0_DNLP_HIST27                       ((VDIN0_OFFSET << 2) + VDIN_DNLP_HIST27                  )
+#define VDIN0_DNLP_HIST28                       ((VDIN0_OFFSET << 2) + VDIN_DNLP_HIST28                  )
+#define VDIN0_DNLP_HIST29                       ((VDIN0_OFFSET << 2) + VDIN_DNLP_HIST29                  )
+#define VDIN0_DNLP_HIST30                       ((VDIN0_OFFSET << 2) + VDIN_DNLP_HIST30                  )
+#define VDIN0_DNLP_HIST31                       ((VDIN0_OFFSET << 2) + VDIN_DNLP_HIST31                  )
+#define VDIN0_DNLP_HIST32                       ((VDIN0_OFFSET << 2) + VDIN_DNLP_HIST32                  )
+#define VDIN0_LDIM_STTS_HIST_REGION_IDX         ((VDIN0_OFFSET << 2) + VDIN_LDIM_STTS_HIST_REGION_IDX    )
+#define VDIN0_LDIM_STTS_HIST_SET_REGION         ((VDIN0_OFFSET << 2) + VDIN_LDIM_STTS_HIST_SET_REGION    )
+#define VDIN0_LDIM_STTS_HIST_READ_REGION        ((VDIN0_OFFSET << 2) + VDIN_LDIM_STTS_HIST_READ_REGION   )
+#define VDIN0_MEAS_CTRL0                        ((VDIN0_OFFSET << 2) + VDIN_MEAS_CTRL0                   )
+#define VDIN0_MEAS_VS_COUNT_HI                  ((VDIN0_OFFSET << 2) + VDIN_MEAS_VS_COUNT_HI             )
+#define VDIN0_MEAS_VS_COUNT_LO                  ((VDIN0_OFFSET << 2) + VDIN_MEAS_VS_COUNT_LO             )
+#define VDIN0_MEAS_HS_RANGE                     ((VDIN0_OFFSET << 2) + VDIN_MEAS_HS_RANGE                )
+#define VDIN0_MEAS_HS_COUNT                     ((VDIN0_OFFSET << 2) + VDIN_MEAS_HS_COUNT                )
+#define VDIN0_BLKBAR_CTRL1                      ((VDIN0_OFFSET << 2) + VDIN_BLKBAR_CTRL1                 )
+#define VDIN0_BLKBAR_CTRL0                      ((VDIN0_OFFSET << 2) + VDIN_BLKBAR_CTRL0                 )
+#define VDIN0_BLKBAR_H_START_END                ((VDIN0_OFFSET << 2) + VDIN_BLKBAR_H_START_END           )
+#define VDIN0_BLKBAR_V_START_END                ((VDIN0_OFFSET << 2) + VDIN_BLKBAR_V_START_END           )
+#define VDIN0_BLKBAR_CNT_THRESHOLD              ((VDIN0_OFFSET << 2) + VDIN_BLKBAR_CNT_THRESHOLD         )
+#define VDIN0_BLKBAR_ROW_TH1_TH2                ((VDIN0_OFFSET << 2) + VDIN_BLKBAR_ROW_TH1_TH2           )
+#define VDIN0_BLKBAR_IND_LEFT_START_END         ((VDIN0_OFFSET << 2) + VDIN_BLKBAR_IND_LEFT_START_END    )
+#define VDIN0_BLKBAR_IND_RIGHT_START_END        ((VDIN0_OFFSET << 2) + VDIN_BLKBAR_IND_RIGHT_START_END   )
+#define VDIN0_BLKBAR_IND_LEFT1_CNT              ((VDIN0_OFFSET << 2) + VDIN_BLKBAR_IND_LEFT1_CNT         )
+#define VDIN0_BLKBAR_IND_LEFT2_CNT              ((VDIN0_OFFSET << 2) + VDIN_BLKBAR_IND_LEFT2_CNT         )
+#define VDIN0_BLKBAR_IND_RIGHT1_CNT             ((VDIN0_OFFSET << 2) + VDIN_BLKBAR_IND_RIGHT1_CNT        )
+#define VDIN0_BLKBAR_IND_RIGHT2_CNT             ((VDIN0_OFFSET << 2) + VDIN_BLKBAR_IND_RIGHT2_CNT        )
+#define VDIN0_BLKBAR_STATUS0                    ((VDIN0_OFFSET << 2) + VDIN_BLKBAR_STATUS0               )
+#define VDIN0_BLKBAR_STATUS1                    ((VDIN0_OFFSET << 2) + VDIN_BLKBAR_STATUS1               )
+#define VDIN0_WIN_H_START_END                   ((VDIN0_OFFSET << 2) + VDIN_WIN_H_START_END              )
+#define VDIN0_WIN_V_START_END                   ((VDIN0_OFFSET << 2) + VDIN_WIN_V_START_END              )
+#define VDIN0_ASFIFO_CTRL3                      ((VDIN0_OFFSET << 2) + VDIN_ASFIFO_CTRL3                 )
+#define VDIN0_COM_GCLK_CTRL2                    ((VDIN0_OFFSET << 2) + VDIN_COM_GCLK_CTRL2               )
+#define VDIN0_VSHRK_CTRL                        ((VDIN0_OFFSET << 2) + VDIN_VSHRK_CTRL                   )
+#define VDIN0_SYNC_MASK                         ((VDIN0_OFFSET << 2) + VDIN_SYNC_MASK                    )
+#define VDIN0_DOLBY_DSC_CTRL0                    ((VDIN0_OFFSET << 2) + VDIN_DOLBY_DSC_CTRL0  )
+#define VDIN0_DOLBY_DSC_CTRL1                    ((VDIN0_OFFSET << 2) + VDIN_DOLBY_DSC_CTRL1  )
+#define VDIN0_DOLBY_DSC_CTRL2                    ((VDIN0_OFFSET << 2) + VDIN_DOLBY_DSC_CTRL2  )
+#define VDIN0_DOLBY_DSC_CTRL3                    ((VDIN0_OFFSET << 2) + VDIN_DOLBY_DSC_CTRL3  )
+#define VDIN0_DOLBY_AXI_CTRL0                    ((VDIN0_OFFSET << 2) + VDIN_DOLBY_AXI_CTRL0  )
+#define VDIN0_DOLBY_AXI_CTRL1                    ((VDIN0_OFFSET << 2) + VDIN_DOLBY_AXI_CTRL1  )
+#define VDIN0_DOLBY_AXI_CTRL2                    ((VDIN0_OFFSET << 2) + VDIN_DOLBY_AXI_CTRL2  )
+#define VDIN0_DOLBY_AXI_CTRL3                    ((VDIN0_OFFSET << 2) + VDIN_DOLBY_AXI_CTRL3  )
+#define VDIN0_DOLBY_DSC_STATUS0                  ((VDIN0_OFFSET << 2) + VDIN_DOLBY_DSC_STATUS0)
+#define VDIN0_DOLBY_DSC_STATUS1                  ((VDIN0_OFFSET << 2) + VDIN_DOLBY_DSC_STATUS1)
+#define VDIN0_DOLBY_DSC_STATUS2                  ((VDIN0_OFFSET << 2) + VDIN_DOLBY_DSC_STATUS2)
+#define VDIN0_DOLBY_DSC_STATUS3                  ((VDIN0_OFFSET << 2) + VDIN_DOLBY_DSC_STATUS3)
+
+
+//VDIN1        8'h80 - 8'hef
+#define VDIN1_SCALE_COEF_IDX                    ((VDIN1_OFFSET << 2) + VDIN_SCALE_COEF_IDX               )
+#define VDIN1_SCALE_COEF                        ((VDIN1_OFFSET << 2) + VDIN_SCALE_COEF                   )
+#define VDIN1_COM_CTRL0                         ((VDIN1_OFFSET << 2) + VDIN_COM_CTRL0                    )
+#define VDIN1_ACTIVE_MAX_PIX_CNT_STATUS         ((VDIN1_OFFSET << 2) + VDIN_ACTIVE_MAX_PIX_CNT_STATUS    )
+#define VDIN1_LCNT_STATUS                       ((VDIN1_OFFSET << 2) + VDIN_LCNT_STATUS                  )
+#define VDIN1_COM_STATUS0                       ((VDIN1_OFFSET << 2) + VDIN_COM_STATUS0                  )
+#define VDIN1_COM_STATUS1                       ((VDIN1_OFFSET << 2) + VDIN_COM_STATUS1                  )
+#define VDIN1_LCNT_SHADOW_STATUS                ((VDIN1_OFFSET << 2) + VDIN_LCNT_SHADOW_STATUS           )
+#define VDIN1_ASFIFO_CTRL0                      ((VDIN1_OFFSET << 2) + VDIN_ASFIFO_CTRL0                 )
+#define VDIN1_ASFIFO_CTRL1                      ((VDIN1_OFFSET << 2) + VDIN_ASFIFO_CTRL1                 )
+#define VDIN1_WIDTHM1I_WIDTHM1O                 ((VDIN1_OFFSET << 2) + VDIN_WIDTHM1I_WIDTHM1O            )
+#define VDIN1_SC_MISC_CTRL                      ((VDIN1_OFFSET << 2) + VDIN_SC_MISC_CTRL                 )
+#define VDIN1_HSC_PHASE_STEP                    ((VDIN1_OFFSET << 2) + VDIN_HSC_PHASE_STEP               )
+#define VDIN1_HSC_INI_CTRL                      ((VDIN1_OFFSET << 2) + VDIN_HSC_INI_CTRL                 )
+#define VDIN1_COM_STATUS2                       ((VDIN1_OFFSET << 2) + VDIN_COM_STATUS2                  )
+#define VDIN1_COM_STATUS3                       ((VDIN1_OFFSET << 2) + VDIN_COM_STATUS3                  )
+#define VDIN1_ASFIFO_CTRL2                      ((VDIN1_OFFSET << 2) + VDIN_ASFIFO_CTRL2                 )
+#define VDIN1_MATRIX_CTRL                       ((VDIN1_OFFSET << 2) + VDIN_MATRIX_CTRL                  )
+#define VDIN1_MATRIX_COEF00_01                  ((VDIN1_OFFSET << 2) + VDIN_MATRIX_COEF00_01             )
+#define VDIN1_MATRIX_COEF02_10                  ((VDIN1_OFFSET << 2) + VDIN_MATRIX_COEF02_10             )
+#define VDIN1_MATRIX_COEF11_12                  ((VDIN1_OFFSET << 2) + VDIN_MATRIX_COEF11_12             )
+#define VDIN1_MATRIX_COEF20_21                  ((VDIN1_OFFSET << 2) + VDIN_MATRIX_COEF20_21             )
+#define VDIN1_MATRIX_COEF22                     ((VDIN1_OFFSET << 2) + VDIN_MATRIX_COEF22                )
+#define VDIN1_MATRIX_OFFSET0_1                  ((VDIN1_OFFSET << 2) + VDIN_MATRIX_OFFSET0_1             )
+#define VDIN1_MATRIX_OFFSET2                    ((VDIN1_OFFSET << 2) + VDIN_MATRIX_OFFSET2               )
+#define VDIN1_MATRIX_PRE_OFFSET0_1              ((VDIN1_OFFSET << 2) + VDIN_MATRIX_PRE_OFFSET0_1         )
+#define VDIN1_MATRIX_PRE_OFFSET2                ((VDIN1_OFFSET << 2) + VDIN_MATRIX_PRE_OFFSET2           )
+#define VDIN1_LFIFO_CTRL                        ((VDIN1_OFFSET << 2) + VDIN_LFIFO_CTRL                   )
+#define VDIN1_COM_GCLK_CTRL                     ((VDIN1_OFFSET << 2) + VDIN_COM_GCLK_CTRL                )
+#define VDIN1_INTF_WIDTHM1                      ((VDIN1_OFFSET << 2) + VDIN_INTF_WIDTHM1                 )
+#define VDIN1_WR_CTRL2                          ((VDIN1_OFFSET << 2) + VDIN_WR_CTRL2                     )
+#define VDIN1_WR_CTRL                           ((VDIN1_OFFSET << 2) + VDIN_WR_CTRL                      )
+#define VDIN1_WR_H_START_END                    ((VDIN1_OFFSET << 2) + VDIN_WR_H_START_END               )
+#define VDIN1_WR_V_START_END                    ((VDIN1_OFFSET << 2) + VDIN_WR_V_START_END               )
+#define VDIN1_VSC_PHASE_STEP                    ((VDIN1_OFFSET << 2) + VDIN_VSC_PHASE_STEP               )
+#define VDIN1_VSC_INI_CTRL                      ((VDIN1_OFFSET << 2) + VDIN_VSC_INI_CTRL                 )
+#define VDIN1_SCIN_HEIGHTM1                     ((VDIN1_OFFSET << 2) + VDIN_SCIN_HEIGHTM1                )
+#define VDIN1_DUMMY_DATA                        ((VDIN1_OFFSET << 2) + VDIN_DUMMY_DATA                   )
+#define VDIN1_MATRIX_PROBE_COLOR                ((VDIN1_OFFSET << 2) + VDIN_MATRIX_PROBE_COLOR           )
+#define VDIN1_MATRIX_HL_COLOR                   ((VDIN1_OFFSET << 2) + VDIN_MATRIX_HL_COLOR              )
+#define VDIN1_MATRIX_PROBE_POS                  ((VDIN1_OFFSET << 2) + VDIN_MATRIX_PROBE_POS             )
+#define VDIN1_CHROMA_ADDR_PORT                  ((VDIN1_OFFSET << 2) + VDIN_CHROMA_ADDR_PORT             )
+#define VDIN1_CHROMA_DATA_PORT                  ((VDIN1_OFFSET << 2) + VDIN_CHROMA_DATA_PORT             )
+#define VDIN1_CM_BRI_CON_CTRL                   ((VDIN1_OFFSET << 2) + VDIN_CM_BRI_CON_CTRL              )
+#define VDIN1_HIST_CTRL                         ((VDIN1_OFFSET << 2) + VDIN_HIST_CTRL                    )
+#define VDIN1_HIST_H_START_END                  ((VDIN1_OFFSET << 2) + VDIN_HIST_H_START_END             )
+#define VDIN1_HIST_V_START_END                  ((VDIN1_OFFSET << 2) + VDIN_HIST_V_START_END             )
+#define VDIN1_HIST_MAX_MIN                      ((VDIN1_OFFSET << 2) + VDIN_HIST_MAX_MIN                 )
+#define VDIN1_HIST_SPL_VAL                      ((VDIN1_OFFSET << 2) + VDIN_HIST_SPL_VAL                 )
+#define VDIN1_HIST_SPL_PIX_CNT                  ((VDIN1_OFFSET << 2) + VDIN_HIST_SPL_PIX_CNT             )
+#define VDIN1_HIST_CHROMA_SUM                   ((VDIN1_OFFSET << 2) + VDIN_HIST_CHROMA_SUM              )
+#define VDIN1_DNLP_HIST00                       ((VDIN1_OFFSET << 2) + VDIN_DNLP_HIST00                  )
+#define VDIN1_DNLP_HIST01                       ((VDIN1_OFFSET << 2) + VDIN_DNLP_HIST01                  )
+#define VDIN1_DNLP_HIST02                       ((VDIN1_OFFSET << 2) + VDIN_DNLP_HIST02                  )
+#define VDIN1_DNLP_HIST03                       ((VDIN1_OFFSET << 2) + VDIN_DNLP_HIST03                  )
+#define VDIN1_DNLP_HIST04                       ((VDIN1_OFFSET << 2) + VDIN_DNLP_HIST04                  )
+#define VDIN1_DNLP_HIST05                       ((VDIN1_OFFSET << 2) + VDIN_DNLP_HIST05                  )
+#define VDIN1_DNLP_HIST06                       ((VDIN1_OFFSET << 2) + VDIN_DNLP_HIST06                  )
+#define VDIN1_DNLP_HIST07                       ((VDIN1_OFFSET << 2) + VDIN_DNLP_HIST07                  )
+#define VDIN1_DNLP_HIST08                       ((VDIN1_OFFSET << 2) + VDIN_DNLP_HIST08                  )
+#define VDIN1_DNLP_HIST09                       ((VDIN1_OFFSET << 2) + VDIN_DNLP_HIST09                  )
+#define VDIN1_DNLP_HIST10                       ((VDIN1_OFFSET << 2) + VDIN_DNLP_HIST10                  )
+#define VDIN1_DNLP_HIST11                       ((VDIN1_OFFSET << 2) + VDIN_DNLP_HIST11                  )
+#define VDIN1_DNLP_HIST12                       ((VDIN1_OFFSET << 2) + VDIN_DNLP_HIST12                  )
+#define VDIN1_DNLP_HIST13                       ((VDIN1_OFFSET << 2) + VDIN_DNLP_HIST13                  )
+#define VDIN1_DNLP_HIST14                       ((VDIN1_OFFSET << 2) + VDIN_DNLP_HIST14                  )
+#define VDIN1_DNLP_HIST15                       ((VDIN1_OFFSET << 2) + VDIN_DNLP_HIST15                  )
+#define VDIN1_DNLP_HIST16                       ((VDIN1_OFFSET << 2) + VDIN_DNLP_HIST16                  )
+#define VDIN1_DNLP_HIST17                       ((VDIN1_OFFSET << 2) + VDIN_DNLP_HIST17                  )
+#define VDIN1_DNLP_HIST18                       ((VDIN1_OFFSET << 2) + VDIN_DNLP_HIST18                  )
+#define VDIN1_DNLP_HIST19                       ((VDIN1_OFFSET << 2) + VDIN_DNLP_HIST19                  )
+#define VDIN1_DNLP_HIST20                       ((VDIN1_OFFSET << 2) + VDIN_DNLP_HIST20                  )
+#define VDIN1_DNLP_HIST21                       ((VDIN1_OFFSET << 2) + VDIN_DNLP_HIST21                  )
+#define VDIN1_DNLP_HIST22                       ((VDIN1_OFFSET << 2) + VDIN_DNLP_HIST22                  )
+#define VDIN1_DNLP_HIST23                       ((VDIN1_OFFSET << 2) + VDIN_DNLP_HIST23                  )
+#define VDIN1_DNLP_HIST24                       ((VDIN1_OFFSET << 2) + VDIN_DNLP_HIST24                  )
+#define VDIN1_DNLP_HIST25                       ((VDIN1_OFFSET << 2) + VDIN_DNLP_HIST25                  )
+#define VDIN1_DNLP_HIST26                       ((VDIN1_OFFSET << 2) + VDIN_DNLP_HIST26                  )
+#define VDIN1_DNLP_HIST27                       ((VDIN1_OFFSET << 2) + VDIN_DNLP_HIST27                  )
+#define VDIN1_DNLP_HIST28                       ((VDIN1_OFFSET << 2) + VDIN_DNLP_HIST28                  )
+#define VDIN1_DNLP_HIST29                       ((VDIN1_OFFSET << 2) + VDIN_DNLP_HIST29                  )
+#define VDIN1_DNLP_HIST30                       ((VDIN1_OFFSET << 2) + VDIN_DNLP_HIST30                  )
+#define VDIN1_DNLP_HIST31                       ((VDIN1_OFFSET << 2) + VDIN_DNLP_HIST31                  )
+#define VDIN1_DNLP_HIST32                       ((VDIN1_OFFSET << 2) + VDIN_DNLP_HIST32                  )
+#define VDIN1_LDIM_STTS_HIST_REGION_IDX         ((VDIN1_OFFSET << 2) + VDIN_LDIM_STTS_HIST_REGION_IDX    )
+#define VDIN1_LDIM_STTS_HIST_SET_REGION         ((VDIN1_OFFSET << 2) + VDIN_LDIM_STTS_HIST_SET_REGION    )
+#define VDIN1_LDIM_STTS_HIST_READ_REGION        ((VDIN1_OFFSET << 2) + VDIN_LDIM_STTS_HIST_READ_REGION   )
+#define VDIN1_MEAS_CTRL0                        ((VDIN1_OFFSET << 2) + VDIN_MEAS_CTRL0                   )
+#define VDIN1_MEAS_VS_COUNT_HI                  ((VDIN1_OFFSET << 2) + VDIN_MEAS_VS_COUNT_HI             )
+#define VDIN1_MEAS_VS_COUNT_LO                  ((VDIN1_OFFSET << 2) + VDIN_MEAS_VS_COUNT_LO             )
+#define VDIN1_MEAS_HS_RANGE                     ((VDIN1_OFFSET << 2) + VDIN_MEAS_HS_RANGE                )
+#define VDIN1_MEAS_HS_COUNT                     ((VDIN1_OFFSET << 2) + VDIN_MEAS_HS_COUNT                )
+#define VDIN1_BLKBAR_CTRL1                      ((VDIN1_OFFSET << 2) + VDIN_BLKBAR_CTRL1                 )
+#define VDIN1_BLKBAR_CTRL0                      ((VDIN1_OFFSET << 2) + VDIN_BLKBAR_CTRL0                 )
+#define VDIN1_BLKBAR_H_START_END                ((VDIN1_OFFSET << 2) + VDIN_BLKBAR_H_START_END           )
+#define VDIN1_BLKBAR_V_START_END                ((VDIN1_OFFSET << 2) + VDIN_BLKBAR_V_START_END           )
+#define VDIN1_BLKBAR_CNT_THRESHOLD              ((VDIN1_OFFSET << 2) + VDIN_BLKBAR_CNT_THRESHOLD         )
+#define VDIN1_BLKBAR_ROW_TH1_TH2                ((VDIN1_OFFSET << 2) + VDIN_BLKBAR_ROW_TH1_TH2           )
+#define VDIN1_BLKBAR_IND_LEFT_START_END         ((VDIN1_OFFSET << 2) + VDIN_BLKBAR_IND_LEFT_START_END    )
+#define VDIN1_BLKBAR_IND_RIGHT_START_END        ((VDIN1_OFFSET << 2) + VDIN_BLKBAR_IND_RIGHT_START_END   )
+#define VDIN1_BLKBAR_IND_LEFT1_CNT              ((VDIN1_OFFSET << 2) + VDIN_BLKBAR_IND_LEFT1_CNT         )
+#define VDIN1_BLKBAR_IND_LEFT2_CNT              ((VDIN1_OFFSET << 2) + VDIN_BLKBAR_IND_LEFT2_CNT         )
+#define VDIN1_BLKBAR_IND_RIGHT1_CNT             ((VDIN1_OFFSET << 2) + VDIN_BLKBAR_IND_RIGHT1_CNT        )
+#define VDIN1_BLKBAR_IND_RIGHT2_CNT             ((VDIN1_OFFSET << 2) + VDIN_BLKBAR_IND_RIGHT2_CNT        )
+#define VDIN1_BLKBAR_STATUS0                    ((VDIN1_OFFSET << 2) + VDIN_BLKBAR_STATUS0               )
+#define VDIN1_BLKBAR_STATUS1                    ((VDIN1_OFFSET << 2) + VDIN_BLKBAR_STATUS1               )
+#define VDIN1_WIN_H_START_END                   ((VDIN1_OFFSET << 2) + VDIN_WIN_H_START_END              )
+#define VDIN1_WIN_V_START_END                   ((VDIN1_OFFSET << 2) + VDIN_WIN_V_START_END              )
+#define VDIN1_ASFIFO_CTRL3                      ((VDIN1_OFFSET << 2) + VDIN_ASFIFO_CTRL3                 )
+#define VDIN1_COM_GCLK_CTRL2                    ((VDIN1_OFFSET << 2) + VDIN_COM_GCLK_CTRL2               )
+#define VDIN1_VSHRK_CTRL                        ((VDIN1_OFFSET << 2) + VDIN_VSHRK_CTRL                   )
+#define VDIN1_SYNC_MASK                         ((VDIN1_OFFSET << 2) + VDIN_SYNC_MASK                    )
+#define VDIN1_DOLBY_DSC_CTRL0                    ((VDIN1_OFFSET << 2) + VDIN_DOLBY_DSC_CTRL0  )
+#define VDIN1_DOLBY_DSC_CTRL1                    ((VDIN1_OFFSET << 2) + VDIN_DOLBY_DSC_CTRL1  )
+#define VDIN1_DOLBY_DSC_CTRL2                    ((VDIN1_OFFSET << 2) + VDIN_DOLBY_DSC_CTRL2  )
+#define VDIN1_DOLBY_DSC_CTRL3                    ((VDIN1_OFFSET << 2) + VDIN_DOLBY_DSC_CTRL3  )
+#define VDIN1_DOLBY_AXI_CTRL0                    ((VDIN1_OFFSET << 2) + VDIN_DOLBY_AXI_CTRL0  )
+#define VDIN1_DOLBY_AXI_CTRL1                    ((VDIN1_OFFSET << 2) + VDIN_DOLBY_AXI_CTRL1  )
+#define VDIN1_DOLBY_AXI_CTRL2                    ((VDIN1_OFFSET << 2) + VDIN_DOLBY_AXI_CTRL2  )
+#define VDIN1_DOLBY_AXI_CTRL3                    ((VDIN1_OFFSET << 2) + VDIN_DOLBY_AXI_CTRL3  )
+#define VDIN1_DOLBY_DSC_STATUS0                  ((VDIN1_OFFSET << 2) + VDIN_DOLBY_DSC_STATUS0)
+#define VDIN1_DOLBY_DSC_STATUS1                  ((VDIN1_OFFSET << 2) + VDIN_DOLBY_DSC_STATUS1)
+#define VDIN1_DOLBY_DSC_STATUS2                  ((VDIN1_OFFSET << 2) + VDIN_DOLBY_DSC_STATUS2)
+#define VDIN1_DOLBY_DSC_STATUS3                  ((VDIN1_OFFSET << 2) + VDIN_DOLBY_DSC_STATUS3)
+
+//`define LCD_VCBUS_BASE               8'h14
+//
+// Reading file:  lcd_regs.h
+//
+// -----------------------------------------------
+// CBUS_BASE:  LCD_VCBUS_BASE = 0x14
+// -----------------------------------------------
+//========================================================================
+//LCD DRV     12'h480~12'h4ef
+//=======================================================================
+#define   L_GAMMA_CNTL_PORT                        (0x1400)
+#define P_L_GAMMA_CNTL_PORT                        (volatile unsigned int *)((0x1400  << 2) + 0xff900000)
+#define   L_GAMMA_DATA_PORT                        (0x1401)
+#define P_L_GAMMA_DATA_PORT                        (volatile unsigned int *)((0x1401  << 2) + 0xff900000)
+#define   L_GAMMA_ADDR_PORT                        (0x1402)
+#define P_L_GAMMA_ADDR_PORT                        (volatile unsigned int *)((0x1402  << 2) + 0xff900000)
+#define   L_GAMMA_VCOM_HSWITCH_ADDR                (0x1403)
+#define P_L_GAMMA_VCOM_HSWITCH_ADDR                (volatile unsigned int *)((0x1403  << 2) + 0xff900000)
+#define   L_RGB_BASE_ADDR                          (0x1405)
+#define P_L_RGB_BASE_ADDR                          (volatile unsigned int *)((0x1405  << 2) + 0xff900000)
+#define   L_RGB_COEFF_ADDR                         (0x1406)
+#define P_L_RGB_COEFF_ADDR                         (volatile unsigned int *)((0x1406  << 2) + 0xff900000)
+#define   L_POL_CNTL_ADDR                          (0x1407)
+#define P_L_POL_CNTL_ADDR                          (volatile unsigned int *)((0x1407  << 2) + 0xff900000)
+#define   L_DITH_CNTL_ADDR                         (0x1408)
+#define P_L_DITH_CNTL_ADDR                         (volatile unsigned int *)((0x1408  << 2) + 0xff900000)
+#define   L_GAMMA_PROBE_CTRL                       (0x1409)
+#define P_L_GAMMA_PROBE_CTRL                       (volatile unsigned int *)((0x1409  << 2) + 0xff900000)
+//read only
+#define   L_GAMMA_PROBE_COLOR_L                    (0x140a)
+#define P_L_GAMMA_PROBE_COLOR_L                    (volatile unsigned int *)((0x140a  << 2) + 0xff900000)
+#define   L_GAMMA_PROBE_COLOR_H                    (0x140b)
+#define P_L_GAMMA_PROBE_COLOR_H                    (volatile unsigned int *)((0x140b  << 2) + 0xff900000)
+#define   L_GAMMA_PROBE_HL_COLOR                   (0x140c)
+#define P_L_GAMMA_PROBE_HL_COLOR                   (volatile unsigned int *)((0x140c  << 2) + 0xff900000)
+#define   L_GAMMA_PROBE_POS_X                      (0x140d)
+#define P_L_GAMMA_PROBE_POS_X                      (volatile unsigned int *)((0x140d  << 2) + 0xff900000)
+#define   L_GAMMA_PROBE_POS_Y                      (0x140e)
+#define P_L_GAMMA_PROBE_POS_Y                      (volatile unsigned int *)((0x140e  << 2) + 0xff900000)
+#define   L_STH1_HS_ADDR                           (0x1410)
+#define P_L_STH1_HS_ADDR                           (volatile unsigned int *)((0x1410  << 2) + 0xff900000)
+#define   L_STH1_HE_ADDR                           (0x1411)
+#define P_L_STH1_HE_ADDR                           (volatile unsigned int *)((0x1411  << 2) + 0xff900000)
+#define   L_STH1_VS_ADDR                           (0x1412)
+#define P_L_STH1_VS_ADDR                           (volatile unsigned int *)((0x1412  << 2) + 0xff900000)
+#define   L_STH1_VE_ADDR                           (0x1413)
+#define P_L_STH1_VE_ADDR                           (volatile unsigned int *)((0x1413  << 2) + 0xff900000)
+#define   L_STH2_HS_ADDR                           (0x1414)
+#define P_L_STH2_HS_ADDR                           (volatile unsigned int *)((0x1414  << 2) + 0xff900000)
+#define   L_STH2_HE_ADDR                           (0x1415)
+#define P_L_STH2_HE_ADDR                           (volatile unsigned int *)((0x1415  << 2) + 0xff900000)
+#define   L_STH2_VS_ADDR                           (0x1416)
+#define P_L_STH2_VS_ADDR                           (volatile unsigned int *)((0x1416  << 2) + 0xff900000)
+#define   L_STH2_VE_ADDR                           (0x1417)
+#define P_L_STH2_VE_ADDR                           (volatile unsigned int *)((0x1417  << 2) + 0xff900000)
+#define   L_OEH_HS_ADDR                            (0x1418)
+#define P_L_OEH_HS_ADDR                            (volatile unsigned int *)((0x1418  << 2) + 0xff900000)
+#define   L_OEH_HE_ADDR                            (0x1419)
+#define P_L_OEH_HE_ADDR                            (volatile unsigned int *)((0x1419  << 2) + 0xff900000)
+#define   L_OEH_VS_ADDR                            (0x141a)
+#define P_L_OEH_VS_ADDR                            (volatile unsigned int *)((0x141a  << 2) + 0xff900000)
+#define   L_OEH_VE_ADDR                            (0x141b)
+#define P_L_OEH_VE_ADDR                            (volatile unsigned int *)((0x141b  << 2) + 0xff900000)
+#define   L_VCOM_HSWITCH_ADDR                      (0x141c)
+#define P_L_VCOM_HSWITCH_ADDR                      (volatile unsigned int *)((0x141c  << 2) + 0xff900000)
+#define   L_VCOM_VS_ADDR                           (0x141d)
+#define P_L_VCOM_VS_ADDR                           (volatile unsigned int *)((0x141d  << 2) + 0xff900000)
+#define   L_VCOM_VE_ADDR                           (0x141e)
+#define P_L_VCOM_VE_ADDR                           (volatile unsigned int *)((0x141e  << 2) + 0xff900000)
+#define   L_CPV1_HS_ADDR                           (0x141f)
+#define P_L_CPV1_HS_ADDR                           (volatile unsigned int *)((0x141f  << 2) + 0xff900000)
+#define   L_CPV1_HE_ADDR                           (0x1420)
+#define P_L_CPV1_HE_ADDR                           (volatile unsigned int *)((0x1420  << 2) + 0xff900000)
+#define   L_CPV1_VS_ADDR                           (0x1421)
+#define P_L_CPV1_VS_ADDR                           (volatile unsigned int *)((0x1421  << 2) + 0xff900000)
+#define   L_CPV1_VE_ADDR                           (0x1422)
+#define P_L_CPV1_VE_ADDR                           (volatile unsigned int *)((0x1422  << 2) + 0xff900000)
+#define   L_CPV2_HS_ADDR                           (0x1423)
+#define P_L_CPV2_HS_ADDR                           (volatile unsigned int *)((0x1423  << 2) + 0xff900000)
+#define   L_CPV2_HE_ADDR                           (0x1424)
+#define P_L_CPV2_HE_ADDR                           (volatile unsigned int *)((0x1424  << 2) + 0xff900000)
+#define   L_CPV2_VS_ADDR                           (0x1425)
+#define P_L_CPV2_VS_ADDR                           (volatile unsigned int *)((0x1425  << 2) + 0xff900000)
+#define   L_CPV2_VE_ADDR                           (0x1426)
+#define P_L_CPV2_VE_ADDR                           (volatile unsigned int *)((0x1426  << 2) + 0xff900000)
+#define   L_STV1_HS_ADDR                           (0x1427)
+#define P_L_STV1_HS_ADDR                           (volatile unsigned int *)((0x1427  << 2) + 0xff900000)
+#define   L_STV1_HE_ADDR                           (0x1428)
+#define P_L_STV1_HE_ADDR                           (volatile unsigned int *)((0x1428  << 2) + 0xff900000)
+#define   L_STV1_VS_ADDR                           (0x1429)
+#define P_L_STV1_VS_ADDR                           (volatile unsigned int *)((0x1429  << 2) + 0xff900000)
+#define   L_STV1_VE_ADDR                           (0x142a)
+#define P_L_STV1_VE_ADDR                           (volatile unsigned int *)((0x142a  << 2) + 0xff900000)
+#define   L_STV2_HS_ADDR                           (0x142b)
+#define P_L_STV2_HS_ADDR                           (volatile unsigned int *)((0x142b  << 2) + 0xff900000)
+#define   L_STV2_HE_ADDR                           (0x142c)
+#define P_L_STV2_HE_ADDR                           (volatile unsigned int *)((0x142c  << 2) + 0xff900000)
+#define   L_STV2_VS_ADDR                           (0x142d)
+#define P_L_STV2_VS_ADDR                           (volatile unsigned int *)((0x142d  << 2) + 0xff900000)
+#define   L_STV2_VE_ADDR                           (0x142e)
+#define P_L_STV2_VE_ADDR                           (volatile unsigned int *)((0x142e  << 2) + 0xff900000)
+#define   L_OEV1_HS_ADDR                           (0x142f)
+#define P_L_OEV1_HS_ADDR                           (volatile unsigned int *)((0x142f  << 2) + 0xff900000)
+#define   L_OEV1_HE_ADDR                           (0x1430)
+#define P_L_OEV1_HE_ADDR                           (volatile unsigned int *)((0x1430  << 2) + 0xff900000)
+#define   L_OEV1_VS_ADDR                           (0x1431)
+#define P_L_OEV1_VS_ADDR                           (volatile unsigned int *)((0x1431  << 2) + 0xff900000)
+#define   L_OEV1_VE_ADDR                           (0x1432)
+#define P_L_OEV1_VE_ADDR                           (volatile unsigned int *)((0x1432  << 2) + 0xff900000)
+#define   L_OEV2_HS_ADDR                           (0x1433)
+#define P_L_OEV2_HS_ADDR                           (volatile unsigned int *)((0x1433  << 2) + 0xff900000)
+#define   L_OEV2_HE_ADDR                           (0x1434)
+#define P_L_OEV2_HE_ADDR                           (volatile unsigned int *)((0x1434  << 2) + 0xff900000)
+#define   L_OEV2_VS_ADDR                           (0x1435)
+#define P_L_OEV2_VS_ADDR                           (volatile unsigned int *)((0x1435  << 2) + 0xff900000)
+#define   L_OEV2_VE_ADDR                           (0x1436)
+#define P_L_OEV2_VE_ADDR                           (volatile unsigned int *)((0x1436  << 2) + 0xff900000)
+#define   L_OEV3_HS_ADDR                           (0x1437)
+#define P_L_OEV3_HS_ADDR                           (volatile unsigned int *)((0x1437  << 2) + 0xff900000)
+#define   L_OEV3_HE_ADDR                           (0x1438)
+#define P_L_OEV3_HE_ADDR                           (volatile unsigned int *)((0x1438  << 2) + 0xff900000)
+#define   L_OEV3_VS_ADDR                           (0x1439)
+#define P_L_OEV3_VS_ADDR                           (volatile unsigned int *)((0x1439  << 2) + 0xff900000)
+#define   L_OEV3_VE_ADDR                           (0x143a)
+#define P_L_OEV3_VE_ADDR                           (volatile unsigned int *)((0x143a  << 2) + 0xff900000)
+#define   L_LCD_PWR_ADDR                           (0x143b)
+#define P_L_LCD_PWR_ADDR                           (volatile unsigned int *)((0x143b  << 2) + 0xff900000)
+#define   L_LCD_PWM0_LO_ADDR                       (0x143c)
+#define P_L_LCD_PWM0_LO_ADDR                       (volatile unsigned int *)((0x143c  << 2) + 0xff900000)
+#define   L_LCD_PWM0_HI_ADDR                       (0x143d)
+#define P_L_LCD_PWM0_HI_ADDR                       (volatile unsigned int *)((0x143d  << 2) + 0xff900000)
+#define   L_LCD_PWM1_LO_ADDR                       (0x143e)
+#define P_L_LCD_PWM1_LO_ADDR                       (volatile unsigned int *)((0x143e  << 2) + 0xff900000)
+#define   L_LCD_PWM1_HI_ADDR                       (0x143f)
+#define P_L_LCD_PWM1_HI_ADDR                       (volatile unsigned int *)((0x143f  << 2) + 0xff900000)
+#define   L_INV_CNT_ADDR                           (0x1440)
+#define P_L_INV_CNT_ADDR                           (volatile unsigned int *)((0x1440  << 2) + 0xff900000)
+#define   L_TCON_MISC_SEL_ADDR                     (0x1441)
+#define P_L_TCON_MISC_SEL_ADDR                     (volatile unsigned int *)((0x1441  << 2) + 0xff900000)
+#define   L_DUAL_PORT_CNTL_ADDR                    (0x1442)
+#define P_L_DUAL_PORT_CNTL_ADDR                    (volatile unsigned int *)((0x1442  << 2) + 0xff900000)
+#define   MLVDS_CLK_CTL1_HI                        (0x1443)
+#define P_MLVDS_CLK_CTL1_HI                        (volatile unsigned int *)((0x1443  << 2) + 0xff900000)
+#define   MLVDS_CLK_CTL1_LO                        (0x1444)
+#define P_MLVDS_CLK_CTL1_LO                        (volatile unsigned int *)((0x1444  << 2) + 0xff900000)
+//  [31:30] enable mlvds clocks
+//  [24]    mlvds_clk_half_delay       24 // Bit 0
+//  [23:0]  mlvds_clk_pattern           0 // Bit 23:0
+#define   L_TCON_DOUBLE_CTL                        (0x1449)
+#define P_L_TCON_DOUBLE_CTL                        (volatile unsigned int *)((0x1449  << 2) + 0xff900000)
+#define   L_TCON_PATTERN_HI                        (0x144a)
+#define P_L_TCON_PATTERN_HI                        (volatile unsigned int *)((0x144a  << 2) + 0xff900000)
+#define   L_TCON_PATTERN_LO                        (0x144b)
+#define P_L_TCON_PATTERN_LO                        (volatile unsigned int *)((0x144b  << 2) + 0xff900000)
+#define   LDIM_BL_ADDR_PORT                        (0x144e)
+#define P_LDIM_BL_ADDR_PORT                        (volatile unsigned int *)((0x144e  << 2) + 0xff900000)
+#define   LDIM_BL_DATA_PORT                        (0x144f)
+#define P_LDIM_BL_DATA_PORT                        (volatile unsigned int *)((0x144f  << 2) + 0xff900000)
+#define   L_DE_HS_ADDR                             (0x1451)
+#define P_L_DE_HS_ADDR                             (volatile unsigned int *)((0x1451  << 2) + 0xff900000)
+#define   L_DE_HE_ADDR                             (0x1452)
+#define P_L_DE_HE_ADDR                             (volatile unsigned int *)((0x1452  << 2) + 0xff900000)
+#define   L_DE_VS_ADDR                             (0x1453)
+#define P_L_DE_VS_ADDR                             (volatile unsigned int *)((0x1453  << 2) + 0xff900000)
+#define   L_DE_VE_ADDR                             (0x1454)
+#define P_L_DE_VE_ADDR                             (volatile unsigned int *)((0x1454  << 2) + 0xff900000)
+#define   L_HSYNC_HS_ADDR                          (0x1455)
+#define P_L_HSYNC_HS_ADDR                          (volatile unsigned int *)((0x1455  << 2) + 0xff900000)
+#define   L_HSYNC_HE_ADDR                          (0x1456)
+#define P_L_HSYNC_HE_ADDR                          (volatile unsigned int *)((0x1456  << 2) + 0xff900000)
+#define   L_HSYNC_VS_ADDR                          (0x1457)
+#define P_L_HSYNC_VS_ADDR                          (volatile unsigned int *)((0x1457  << 2) + 0xff900000)
+#define   L_HSYNC_VE_ADDR                          (0x1458)
+#define P_L_HSYNC_VE_ADDR                          (volatile unsigned int *)((0x1458  << 2) + 0xff900000)
+#define   L_VSYNC_HS_ADDR                          (0x1459)
+#define P_L_VSYNC_HS_ADDR                          (volatile unsigned int *)((0x1459  << 2) + 0xff900000)
+#define   L_VSYNC_HE_ADDR                          (0x145a)
+#define P_L_VSYNC_HE_ADDR                          (volatile unsigned int *)((0x145a  << 2) + 0xff900000)
+#define   L_VSYNC_VS_ADDR                          (0x145b)
+#define P_L_VSYNC_VS_ADDR                          (volatile unsigned int *)((0x145b  << 2) + 0xff900000)
+#define   L_VSYNC_VE_ADDR                          (0x145c)
+#define P_L_VSYNC_VE_ADDR                          (volatile unsigned int *)((0x145c  << 2) + 0xff900000)
+// bit 8 -- vfifo_mcu_enable
+// bit 7 -- halt_vs_de
+// bit 6 -- R8G8B8_format
+// bit 5 -- R6G6B6_format (round to 6 bits)
+// bit 4 -- R5G6B5_format
+// bit 3 -- dac_dith_sel
+// bit 2 -- lcd_mcu_enable_de     -- ReadOnly
+// bit 1 -- lcd_mcu_enable_vsync  -- ReadOnly
+// bit 0 -- lcd_mcu_enable
+#define   L_LCD_MCU_CTL                            (0x145d)
+#define P_L_LCD_MCU_CTL                            (volatile unsigned int *)((0x145d  << 2) + 0xff900000)
+//**************************************************************************
+//*  Dual port mLVDS registers
+//**************************************************************************
+// bit 3 - enable_u_dual_mlvds_dp_clk
+// bit 2 - enable_u_map_mlvds_r_clk
+// bit 1 - enable_u_map_mlvds_l_clk
+// bit 0 - dual_mlvds_en
+//`define DUAL_MLVDS_CTL                8'h60
+// bit[12:0] - dual_mlvds_line_start
+//`define DUAL_MLVDS_LINE_START         8'h61
+// bit[12:0] - dual_mlvds_line_end
+//`define DUAL_MLVDS_LINE_END           8'h62
+// bit[12:0] - dual_mlvds_w_pixel_start_l
+//`define DUAL_MLVDS_PIXEL_W_START_L    8'h63
+// bit[12:0] - dual_mlvds_w_pixel_end_l
+//`define DUAL_MLVDS_PIXEL_W_END_L      8'h64
+// bit[12:0] - dual_mlvds_w_pixel_start_r
+//`define DUAL_MLVDS_PIXEL_W_START_R    8'h65
+// bit[12:0] - dual_mlvds_w_pixel_end_r
+//`define DUAL_MLVDS_PIXEL_W_END_R      8'h66
+// bit[12:0] - dual_mlvds_r_pixel_start_l
+//`define DUAL_MLVDS_PIXEL_R_START_L    8'h67
+// bit[12:0] - dual_mlvds_r_pixel_cnt_l
+//`define DUAL_MLVDS_PIXEL_R_CNT_L      8'h68
+// bit[12:0] - dual_mlvds_r_pixel_start_r
+//`define DUAL_MLVDS_PIXEL_R_START_R    8'h69
+// bit[12:0] - dual_mlvds_r_pixel_cnt_r
+//`define DUAL_MLVDS_PIXEL_R_CNT_R      8'h6a
+// bit[15]   - v_inversion_en
+// bit[12:0] - v_inversion_pixel
+//`define V_INVERSION_PIXEL             8'h70
+// bit[15]   - v_inversion_sync_en
+// bit[12:0] - v_inversion_line
+//`define V_INVERSION_LINE              8'h71
+// bit[15:12]  - v_loop_r
+// bit[11:10]  - v_pattern_1_r
+// bit[9:8]    - v_pattern_0_r
+// bit[7:4]    - v_loop_l
+// bit[3:2]    - v_pattern_1_l
+// bit[1:0]    - v_pattern_0_l
+//`define V_INVERSION_CONTROL           8'h72
+//`define MLVDS2_CONTROL           8'h74
+   #define     mLVDS2_RESERVED  15    // 15
+   #define     mLVDS2_double_pattern  14    // 14
+   #define     mLVDS2_ins_reset  8    // 13:8  // each channel has one bit
+   #define     mLVDS2_dual_gate  7
+   #define     mLVDS2_bit_num    6    // 0-6Bits, 1-8Bits
+   #define     mLVDS2_pair_num   5    // 0-3Pairs, 1-6Pairs
+   #define     mLVDS2_msb_first  4
+   #define     mLVDS2_PORT_SWAP  3
+   #define     mLVDS2_MLSB_SWAP  2
+   #define     mLVDS2_PN_SWAP    1
+   #define     mLVDS2_en         0
+//`define MLVDS2_CONFIG_HI         8'h75
+//`define MLVDS2_CONFIG_LO         8'h76
+   #define     mLVDS2_reset_offset         29 // Bit 31:29
+   #define     mLVDS2_reset_length         23 // Bit 28:23
+   #define     mLVDS2_config_reserved      20 // Bit 22:20
+   #define     mLVDS2_reset_start_bit12    19 // Bit 19
+   #define     mLVDS2_data_write_toggle    18
+   #define     mLVDS2_data_write_ini       17
+   #define     mLVDS2_data_latch_1_toggle  16
+   #define     mLVDS2_data_latch_1_ini     15
+   #define     mLVDS2_data_latch_0_toggle  14
+   #define     mLVDS2_data_latch_0_ini     13
+   #define     mLVDS2_reset_1_select       12 // 0 - same as reset_0, 1 - 1 clock delay of reset_0
+   #define     mLVDS2_reset_start           0 // Bit 11:0
+//`define MLVDS2_DUAL_GATE_WR_START        8'h77
+//   `define     mlvds2_dual_gate_wr_start    0 // Bit 12:0
+//`define MLVDS2_DUAL_GATE_WR_END          8'h78
+//   `define     mlvds2_dual_gate_wr_end      0 // Bit 12:0
+//
+//`define MLVDS2_DUAL_GATE_RD_START        8'h79
+//   `define     mlvds2_dual_gate_rd_start    0 // Bit 12:0
+//`define MLVDS2_DUAL_GATE_RD_END          8'h7a
+//   `define     mlvds2_dual_gate_rd_end      0 // Bit 12:0
+//`define MLVDS2_SECOND_RESET_CTL          8'h7b
+//   `define     mLVDS2_2nd_reset_start       0 // Bit 12:0
+//
+//`define MLVDS2_DUAL_GATE_CTL_HI        8'h7c
+//`define MLVDS2_DUAL_GATE_CTL_LO        8'h7d
+//   `define     mlvds2_tcon_field_en        24 // Bit 7:0
+//   `define     mlvds2_dual_gate_reserved   21 // Bit 2:0
+//   `define     mlvds2_scan_mode_start_line_bit12 20 // Bit 0
+//   `define     mlvds2_scan_mode_odd        16 // Bit 3:0
+//   `define     mlvds2_scan_mode_even       12 // Bit 3:0
+//   `define     mlvds2_scan_mode_start_line  0 // Bit 11:0
+//
+//`define MLVDS2_RESET_CONFIG_HI         8'h7e
+//`define MLVDS2_RESET_CONFIG_LO         8'h7f
+//   `define     mLVDS2_reset_range_enable   31 // Bit 0
+//   `define     mLVDS2_reset_range_inv      30 // Bit 0
+//   `define     mLVDS2_reset_config_res1    29 // Bit 0
+//   `define     mLVDS2_reset_range_line_0   16 // Bit 11:0
+//   `define     mLVDS2_reset_config_res3    13 // Bit 2:0
+//   `define     mLVDS2_reset_range_line_1    0 // Bit 11:0
+//
+//**************************************************************************
+//*  Vbyone registers  (Note: no MinLVDS in G9tv, share the register)
+//**************************************************************************
+#define   VBO_CTRL_L                               (0x1460)
+#define P_VBO_CTRL_L                               (volatile unsigned int *)((0x1460  << 2) + 0xff900000)
+#define   VBO_CTRL_H                               (0x1461)
+#define P_VBO_CTRL_H                               (volatile unsigned int *)((0x1461  << 2) + 0xff900000)
+#define   VBO_SOFT_RST                             (0x1462)
+#define P_VBO_SOFT_RST                             (volatile unsigned int *)((0x1462  << 2) + 0xff900000)
+#define   VBO_LANES                                (0x1463)
+#define P_VBO_LANES                                (volatile unsigned int *)((0x1463  << 2) + 0xff900000)
+#define   VBO_VIN_CTRL                             (0x1464)
+#define P_VBO_VIN_CTRL                             (volatile unsigned int *)((0x1464  << 2) + 0xff900000)
+#define   VBO_ACT_VSIZE                            (0x1465)
+#define P_VBO_ACT_VSIZE                            (volatile unsigned int *)((0x1465  << 2) + 0xff900000)
+#define   VBO_REGION_00                            (0x1466)
+#define P_VBO_REGION_00                            (volatile unsigned int *)((0x1466  << 2) + 0xff900000)
+#define   VBO_REGION_01                            (0x1467)
+#define P_VBO_REGION_01                            (volatile unsigned int *)((0x1467  << 2) + 0xff900000)
+#define   VBO_REGION_02                            (0x1468)
+#define P_VBO_REGION_02                            (volatile unsigned int *)((0x1468  << 2) + 0xff900000)
+#define   VBO_REGION_03                            (0x1469)
+#define P_VBO_REGION_03                            (volatile unsigned int *)((0x1469  << 2) + 0xff900000)
+#define   VBO_VBK_CTRL_0                           (0x146a)
+#define P_VBO_VBK_CTRL_0                           (volatile unsigned int *)((0x146a  << 2) + 0xff900000)
+#define   VBO_VBK_CTRL_1                           (0x146b)
+#define P_VBO_VBK_CTRL_1                           (volatile unsigned int *)((0x146b  << 2) + 0xff900000)
+#define   VBO_HBK_CTRL                             (0x146c)
+#define P_VBO_HBK_CTRL                             (volatile unsigned int *)((0x146c  << 2) + 0xff900000)
+#define   VBO_PXL_CTRL                             (0x146d)
+#define P_VBO_PXL_CTRL                             (volatile unsigned int *)((0x146d  << 2) + 0xff900000)
+#define   VBO_LANE_SKEW_L                          (0x146e)
+#define P_VBO_LANE_SKEW_L                          (volatile unsigned int *)((0x146e  << 2) + 0xff900000)
+#define   VBO_LANE_SKEW_H                          (0x146f)
+#define P_VBO_LANE_SKEW_H                          (volatile unsigned int *)((0x146f  << 2) + 0xff900000)
+#define   VBO_GCLK_LANE_L                          (0x1470)
+#define P_VBO_GCLK_LANE_L                          (volatile unsigned int *)((0x1470  << 2) + 0xff900000)
+#define   VBO_GCLK_LANE_H                          (0x1471)
+#define P_VBO_GCLK_LANE_H                          (volatile unsigned int *)((0x1471  << 2) + 0xff900000)
+#define   VBO_GCLK_MAIN                            (0x1472)
+#define P_VBO_GCLK_MAIN                            (volatile unsigned int *)((0x1472  << 2) + 0xff900000)
+#define   VBO_STATUS_L                             (0x1473)
+#define P_VBO_STATUS_L                             (volatile unsigned int *)((0x1473  << 2) + 0xff900000)
+#define   VBO_STATUS_H                             (0x1474)
+#define P_VBO_STATUS_H                             (volatile unsigned int *)((0x1474  << 2) + 0xff900000)
+#define   VBO_LANE_OUTPUT                          (0x1475)
+#define P_VBO_LANE_OUTPUT                          (volatile unsigned int *)((0x1475  << 2) + 0xff900000)
+#define   LCD_PORT_SWAP                            (0x1476)
+#define P_LCD_PORT_SWAP                            (volatile unsigned int *)((0x1476  << 2) + 0xff900000)
+#define   VBO_TMCHK_THRD_L                         (0x1478)
+#define P_VBO_TMCHK_THRD_L                         (volatile unsigned int *)((0x1478  << 2) + 0xff900000)
+#define   VBO_TMCHK_THRD_H                         (0x1479)
+#define P_VBO_TMCHK_THRD_H                         (volatile unsigned int *)((0x1479  << 2) + 0xff900000)
+#define   VBO_FSM_HOLDER_L                         (0x147a)
+#define P_VBO_FSM_HOLDER_L                         (volatile unsigned int *)((0x147a  << 2) + 0xff900000)
+#define   VBO_FSM_HOLDER_H                         (0x147b)
+#define P_VBO_FSM_HOLDER_H                         (volatile unsigned int *)((0x147b  << 2) + 0xff900000)
+#define   VBO_INTR_STATE_CTRL                      (0x147c)
+#define P_VBO_INTR_STATE_CTRL                      (volatile unsigned int *)((0x147c  << 2) + 0xff900000)
+#define   VBO_INTR_UNMASK                          (0x147d)
+#define P_VBO_INTR_UNMASK                          (volatile unsigned int *)((0x147d  << 2) + 0xff900000)
+#define   VBO_TMCHK_HSYNC_STATE_L                  (0x147e)
+#define P_VBO_TMCHK_HSYNC_STATE_L                  (volatile unsigned int *)((0x147e  << 2) + 0xff900000)
+#define   VBO_TMCHK_HSYNC_STATE_H                  (0x147f)
+#define P_VBO_TMCHK_HSYNC_STATE_H                  (volatile unsigned int *)((0x147f  << 2) + 0xff900000)
+#define   VBO_TMCHK_VSYNC_STATE_L                  (0x14f4)
+#define P_VBO_TMCHK_VSYNC_STATE_L                  (volatile unsigned int *)((0x14f4  << 2) + 0xff900000)
+#define   VBO_TMCHK_VSYNC_STATE_H                  (0x14f5)
+#define P_VBO_TMCHK_VSYNC_STATE_H                  (volatile unsigned int *)((0x14f5  << 2) + 0xff900000)
+#define   VBO_TMCHK_VDE_STATE_L                    (0x14f6)
+#define P_VBO_TMCHK_VDE_STATE_L                    (volatile unsigned int *)((0x14f6  << 2) + 0xff900000)
+#define   VBO_TMCHK_VDE_STATE_H                    (0x14f7)
+#define P_VBO_TMCHK_VDE_STATE_H                    (volatile unsigned int *)((0x14f7  << 2) + 0xff900000)
+#define   VBO_INTR_STATE                           (0x14f8)
+#define P_VBO_INTR_STATE                           (volatile unsigned int *)((0x14f8  << 2) + 0xff900000)
+#define   VBO_INFILTER_CTRL                        (0x14f9)
+#define P_VBO_INFILTER_CTRL                        (volatile unsigned int *)((0x14f9  << 2) + 0xff900000)
+#define   VBO_INSGN_CTRL                           (0x14fa)
+#define P_VBO_INSGN_CTRL                           (volatile unsigned int *)((0x14fa  << 2) + 0xff900000)
+//**************************************************************************
+//*  NOTE::    When Programming the Gamma, please turn off the IRQ service *
+//**************************************************************************
+#define   GAMMA_CNTL_PORT                          (0x1480)
+#define P_GAMMA_CNTL_PORT                          (volatile unsigned int *)((0x1480  << 2) + 0xff900000)
+   #define  GAMMA_VCOM_POL    7     //RW
+   #define  GAMMA_RVS_OUT     6     //RW
+   #define  ADR_RDY           5     //Read Only
+   #define  WR_RDY            4     //Read Only
+   #define  RD_RDY            3     //Read Only
+   #define  GAMMA_TR          2     //RW
+   #define  GAMMA_SET         1     //RW
+   #define  GAMMA_EN          0     //RW
+#define   GAMMA_DATA_PORT                          (0x1481)
+#define P_GAMMA_DATA_PORT                          (volatile unsigned int *)((0x1481  << 2) + 0xff900000)
+#define   GAMMA_ADDR_PORT                          (0x1482)
+#define P_GAMMA_ADDR_PORT                          (volatile unsigned int *)((0x1482  << 2) + 0xff900000)
+   #define  H_RD              12
+   #define  H_AUTO_INC        11
+   #define  H_SEL_R           10
+   #define  H_SEL_G           9
+   #define  H_SEL_B           8
+   #define  HADR_MSB          7            //7:0
+   #define  HADR              0            //7:0
+#define   GAMMA_VCOM_HSWITCH_ADDR                  (0x1483)
+#define P_GAMMA_VCOM_HSWITCH_ADDR                  (volatile unsigned int *)((0x1483  << 2) + 0xff900000)
+#define   RGB_BASE_ADDR                            (0x1485)
+#define P_RGB_BASE_ADDR                            (volatile unsigned int *)((0x1485  << 2) + 0xff900000)
+#define   RGB_COEFF_ADDR                           (0x1486)
+#define P_RGB_COEFF_ADDR                           (volatile unsigned int *)((0x1486  << 2) + 0xff900000)
+#define   POL_CNTL_ADDR                            (0x1487)
+#define P_POL_CNTL_ADDR                            (volatile unsigned int *)((0x1487  << 2) + 0xff900000)
+   #define   DCLK_SEL             14    //FOR DCLK OUTPUT
+   #define   TCON_VSYNC_SEL_DVI   11    //FOR RGB format DVI output
+   #define   TCON_HSYNC_SEL_DVI   10    //FOR RGB format DVI output
+   #define   TCON_DE_SEL_DVI      9     //FOR RGB format DVI output
+   #define   CPH3_POL         8
+   #define   CPH2_POL         7
+   #define   CPH1_POL         6
+   #define   TCON_DE_SEL      5
+   #define   TCON_VS_SEL      4
+   #define   TCON_HS_SEL      3
+   #define   DE_POL           2
+   #define   VS_POL           1
+   #define   HS_POL           0
+#define   DITH_CNTL_ADDR                           (0x1488)
+#define P_DITH_CNTL_ADDR                           (volatile unsigned int *)((0x1488  << 2) + 0xff900000)
+   #define  DITH10_EN         10
+   #define  DITH8_EN          9
+   #define  DITH_MD           8
+   #define  DITH10_CNTL_MSB   7          //7:4
+   #define  DITH10_CNTL       4          //7:4
+   #define  DITH8_CNTL_MSB    3          //3:0
+   #define  DITH8_CNTL        0          //3:0
+//Bit 1 highlight_en
+//Bit 0 probe_en
+#define   GAMMA_PROBE_CTRL                         (0x1489)
+#define P_GAMMA_PROBE_CTRL                         (volatile unsigned int *)((0x1489  << 2) + 0xff900000)
+//read only
+//Bit [15:0]  probe_color[15:0]
+#define   GAMMA_PROBE_COLOR_L                      (0x148a)
+#define P_GAMMA_PROBE_COLOR_L                      (volatile unsigned int *)((0x148a  << 2) + 0xff900000)
+//Read only
+//Bit 15: if true valid probed color
+//Bit [13:0]  probe_color[29:16]
+#define   GAMMA_PROBE_COLOR_H                      (0x148b)
+#define P_GAMMA_PROBE_COLOR_H                      (volatile unsigned int *)((0x148b  << 2) + 0xff900000)
+//bit 15:0, 5:6:5 color
+#define   GAMMA_PROBE_HL_COLOR                     (0x148c)
+#define P_GAMMA_PROBE_HL_COLOR                     (volatile unsigned int *)((0x148c  << 2) + 0xff900000)
+//12:0 pos_x
+#define   GAMMA_PROBE_POS_X                        (0x148d)
+#define P_GAMMA_PROBE_POS_X                        (volatile unsigned int *)((0x148d  << 2) + 0xff900000)
+//12:0 pos_y
+#define   GAMMA_PROBE_POS_Y                        (0x148e)
+#define P_GAMMA_PROBE_POS_Y                        (volatile unsigned int *)((0x148e  << 2) + 0xff900000)
+#define   STH1_HS_ADDR                             (0x1490)
+#define P_STH1_HS_ADDR                             (volatile unsigned int *)((0x1490  << 2) + 0xff900000)
+#define   STH1_HE_ADDR                             (0x1491)
+#define P_STH1_HE_ADDR                             (volatile unsigned int *)((0x1491  << 2) + 0xff900000)
+#define   STH1_VS_ADDR                             (0x1492)
+#define P_STH1_VS_ADDR                             (volatile unsigned int *)((0x1492  << 2) + 0xff900000)
+#define   STH1_VE_ADDR                             (0x1493)
+#define P_STH1_VE_ADDR                             (volatile unsigned int *)((0x1493  << 2) + 0xff900000)
+#define   STH2_HS_ADDR                             (0x1494)
+#define P_STH2_HS_ADDR                             (volatile unsigned int *)((0x1494  << 2) + 0xff900000)
+#define   STH2_HE_ADDR                             (0x1495)
+#define P_STH2_HE_ADDR                             (volatile unsigned int *)((0x1495  << 2) + 0xff900000)
+#define   STH2_VS_ADDR                             (0x1496)
+#define P_STH2_VS_ADDR                             (volatile unsigned int *)((0x1496  << 2) + 0xff900000)
+#define   STH2_VE_ADDR                             (0x1497)
+#define P_STH2_VE_ADDR                             (volatile unsigned int *)((0x1497  << 2) + 0xff900000)
+#define   OEH_HS_ADDR                              (0x1498)
+#define P_OEH_HS_ADDR                              (volatile unsigned int *)((0x1498  << 2) + 0xff900000)
+#define   OEH_HE_ADDR                              (0x1499)
+#define P_OEH_HE_ADDR                              (volatile unsigned int *)((0x1499  << 2) + 0xff900000)
+#define   OEH_VS_ADDR                              (0x149a)
+#define P_OEH_VS_ADDR                              (volatile unsigned int *)((0x149a  << 2) + 0xff900000)
+#define   OEH_VE_ADDR                              (0x149b)
+#define P_OEH_VE_ADDR                              (volatile unsigned int *)((0x149b  << 2) + 0xff900000)
+#define   VCOM_HSWITCH_ADDR                        (0x149c)
+#define P_VCOM_HSWITCH_ADDR                        (volatile unsigned int *)((0x149c  << 2) + 0xff900000)
+#define   VCOM_VS_ADDR                             (0x149d)
+#define P_VCOM_VS_ADDR                             (volatile unsigned int *)((0x149d  << 2) + 0xff900000)
+#define   VCOM_VE_ADDR                             (0x149e)
+#define P_VCOM_VE_ADDR                             (volatile unsigned int *)((0x149e  << 2) + 0xff900000)
+#define   CPV1_HS_ADDR                             (0x149f)
+#define P_CPV1_HS_ADDR                             (volatile unsigned int *)((0x149f  << 2) + 0xff900000)
+#define   CPV1_HE_ADDR                             (0x14a0)
+#define P_CPV1_HE_ADDR                             (volatile unsigned int *)((0x14a0  << 2) + 0xff900000)
+#define   CPV1_VS_ADDR                             (0x14a1)
+#define P_CPV1_VS_ADDR                             (volatile unsigned int *)((0x14a1  << 2) + 0xff900000)
+#define   CPV1_VE_ADDR                             (0x14a2)
+#define P_CPV1_VE_ADDR                             (volatile unsigned int *)((0x14a2  << 2) + 0xff900000)
+#define   CPV2_HS_ADDR                             (0x14a3)
+#define P_CPV2_HS_ADDR                             (volatile unsigned int *)((0x14a3  << 2) + 0xff900000)
+#define   CPV2_HE_ADDR                             (0x14a4)
+#define P_CPV2_HE_ADDR                             (volatile unsigned int *)((0x14a4  << 2) + 0xff900000)
+#define   CPV2_VS_ADDR                             (0x14a5)
+#define P_CPV2_VS_ADDR                             (volatile unsigned int *)((0x14a5  << 2) + 0xff900000)
+#define   CPV2_VE_ADDR                             (0x14a6)
+#define P_CPV2_VE_ADDR                             (volatile unsigned int *)((0x14a6  << 2) + 0xff900000)
+#define   STV1_HS_ADDR                             (0x14a7)
+#define P_STV1_HS_ADDR                             (volatile unsigned int *)((0x14a7  << 2) + 0xff900000)
+#define   STV1_HE_ADDR                             (0x14a8)
+#define P_STV1_HE_ADDR                             (volatile unsigned int *)((0x14a8  << 2) + 0xff900000)
+#define   STV1_VS_ADDR                             (0x14a9)
+#define P_STV1_VS_ADDR                             (volatile unsigned int *)((0x14a9  << 2) + 0xff900000)
+#define   STV1_VE_ADDR                             (0x14aa)
+#define P_STV1_VE_ADDR                             (volatile unsigned int *)((0x14aa  << 2) + 0xff900000)
+#define   STV2_HS_ADDR                             (0x14ab)
+#define P_STV2_HS_ADDR                             (volatile unsigned int *)((0x14ab  << 2) + 0xff900000)
+#define   STV2_HE_ADDR                             (0x14ac)
+#define P_STV2_HE_ADDR                             (volatile unsigned int *)((0x14ac  << 2) + 0xff900000)
+#define   STV2_VS_ADDR                             (0x14ad)
+#define P_STV2_VS_ADDR                             (volatile unsigned int *)((0x14ad  << 2) + 0xff900000)
+#define   STV2_VE_ADDR                             (0x14ae)
+#define P_STV2_VE_ADDR                             (volatile unsigned int *)((0x14ae  << 2) + 0xff900000)
+#define   OEV1_HS_ADDR                             (0x14af)
+#define P_OEV1_HS_ADDR                             (volatile unsigned int *)((0x14af  << 2) + 0xff900000)
+#define   OEV1_HE_ADDR                             (0x14b0)
+#define P_OEV1_HE_ADDR                             (volatile unsigned int *)((0x14b0  << 2) + 0xff900000)
+#define   OEV1_VS_ADDR                             (0x14b1)
+#define P_OEV1_VS_ADDR                             (volatile unsigned int *)((0x14b1  << 2) + 0xff900000)
+#define   OEV1_VE_ADDR                             (0x14b2)
+#define P_OEV1_VE_ADDR                             (volatile unsigned int *)((0x14b2  << 2) + 0xff900000)
+#define   OEV2_HS_ADDR                             (0x14b3)
+#define P_OEV2_HS_ADDR                             (volatile unsigned int *)((0x14b3  << 2) + 0xff900000)
+#define   OEV2_HE_ADDR                             (0x14b4)
+#define P_OEV2_HE_ADDR                             (volatile unsigned int *)((0x14b4  << 2) + 0xff900000)
+#define   OEV2_VS_ADDR                             (0x14b5)
+#define P_OEV2_VS_ADDR                             (volatile unsigned int *)((0x14b5  << 2) + 0xff900000)
+#define   OEV2_VE_ADDR                             (0x14b6)
+#define P_OEV2_VE_ADDR                             (volatile unsigned int *)((0x14b6  << 2) + 0xff900000)
+#define   OEV3_HS_ADDR                             (0x14b7)
+#define P_OEV3_HS_ADDR                             (volatile unsigned int *)((0x14b7  << 2) + 0xff900000)
+#define   OEV3_HE_ADDR                             (0x14b8)
+#define P_OEV3_HE_ADDR                             (volatile unsigned int *)((0x14b8  << 2) + 0xff900000)
+#define   OEV3_VS_ADDR                             (0x14b9)
+#define P_OEV3_VS_ADDR                             (volatile unsigned int *)((0x14b9  << 2) + 0xff900000)
+#define   OEV3_VE_ADDR                             (0x14ba)
+#define P_OEV3_VE_ADDR                             (volatile unsigned int *)((0x14ba  << 2) + 0xff900000)
+#define   LCD_PWR_ADDR                             (0x14bb)
+#define P_LCD_PWR_ADDR                             (volatile unsigned int *)((0x14bb  << 2) + 0xff900000)
+   #define      LCD_VDD        5
+   #define      LCD_VBL        4
+   #define      LCD_GPI_MSB    3
+   #define      LCD_GPIO       0
+#define   LCD_PWM0_LO_ADDR                         (0x14bc)
+#define P_LCD_PWM0_LO_ADDR                         (volatile unsigned int *)((0x14bc  << 2) + 0xff900000)
+#define   LCD_PWM0_HI_ADDR                         (0x14bd)
+#define P_LCD_PWM0_HI_ADDR                         (volatile unsigned int *)((0x14bd  << 2) + 0xff900000)
+#define   LCD_PWM1_LO_ADDR                         (0x14be)
+#define P_LCD_PWM1_LO_ADDR                         (volatile unsigned int *)((0x14be  << 2) + 0xff900000)
+#define   LCD_PWM1_HI_ADDR                         (0x14bf)
+#define P_LCD_PWM1_HI_ADDR                         (volatile unsigned int *)((0x14bf  << 2) + 0xff900000)
+#define   INV_CNT_ADDR                             (0x14c0)
+#define P_INV_CNT_ADDR                             (volatile unsigned int *)((0x14c0  << 2) + 0xff900000)
+   #define     INV_EN          4
+   #define     INV_CNT_MSB     3
+   #define     INV_CNT         0
+#define   TCON_MISC_SEL_ADDR                       (0x14c1)
+#define P_TCON_MISC_SEL_ADDR                       (volatile unsigned int *)((0x14c1  << 2) + 0xff900000)
+   #define     STH2_SEL        12
+   #define     STH1_SEL        11
+   #define     OEH_SEL         10
+   #define     VCOM_SEL         9
+   #define     DB_LINE_SW       8
+   #define     CPV2_SEL         7
+   #define     CPV1_SEL         6
+   #define     STV2_SEL         5
+   #define     STV1_SEL         4
+   #define     OEV_UNITE        3
+   #define     OEV3_SEL         2
+   #define     OEV2_SEL         1
+   #define     OEV1_SEL         0
+#define   DUAL_PORT_CNTL_ADDR                      (0x14c2)
+#define P_DUAL_PORT_CNTL_ADDR                      (volatile unsigned int *)((0x14c2  << 2) + 0xff900000)
+   #define     OUTPUT_YUV       15
+   #define     DUAL_IDF         12   // 14:12
+   #define     DUAL_ISF         9    // 11:9
+   #define     LCD_ANALOG_SEL_CPH3   8
+   #define     LCD_ANALOG_3PHI_CLK_SEL   7
+   #define     LCD_LVDS_SEL54   6
+   #define     LCD_LVDS_SEL27   5
+   #define     LCD_TTL_SEL      4
+   #define     DUAL_LVDC_EN     3
+   #define     PORT_SWP         2
+   #define     RGB_SWP          1
+   #define     BIT_SWP          0
+#define   MLVDS_CONTROL                            (0x14c3)
+#define P_MLVDS_CONTROL                            (volatile unsigned int *)((0x14c3  << 2) + 0xff900000)
+   #define     mLVDS_RESERVED  15    // 15
+   #define     mLVDS_double_pattern  14    // 14
+   #define     mLVDS_ins_reset  8    // 13:8  // each channel has one bit
+   #define     mLVDS_dual_gate  7
+   #define     mLVDS_bit_num    6    // 0-6Bits, 1-8Bits
+   #define     mLVDS_pair_num   5    // 0-3Pairs, 1-6Pairs
+   #define     mLVDS_msb_first  4
+   #define     mLVDS_PORT_SWAP  3
+   #define     mLVDS_MLSB_SWAP  2
+   #define     mLVDS_PN_SWAP    1
+   #define     mLVDS_en         0
+#define   MLVDS_RESET_PATTERN_HI                   (0x14c4)
+#define P_MLVDS_RESET_PATTERN_HI                   (volatile unsigned int *)((0x14c4  << 2) + 0xff900000)
+#define   MLVDS_RESET_PATTERN_LO                   (0x14c5)
+#define P_MLVDS_RESET_PATTERN_LO                   (volatile unsigned int *)((0x14c5  << 2) + 0xff900000)
+   #define     mLVDS_reset_pattern  0 // Bit 47:16
+#define   MLVDS_RESET_PATTERN_EXT                  (0x14c6)
+#define P_MLVDS_RESET_PATTERN_EXT                  (volatile unsigned int *)((0x14c6  << 2) + 0xff900000)
+   #define     mLVDS_reset_pattern_ext  0 // Bit 15:0
+#define   MLVDS_CONFIG_HI                          (0x14c7)
+#define P_MLVDS_CONFIG_HI                          (volatile unsigned int *)((0x14c7  << 2) + 0xff900000)
+#define   MLVDS_CONFIG_LO                          (0x14c8)
+#define P_MLVDS_CONFIG_LO                          (volatile unsigned int *)((0x14c8  << 2) + 0xff900000)
+   #define     mLVDS_reset_offset         29 // Bit 31:29
+   #define     mLVDS_reset_length         23 // Bit 28:23
+   #define     mLVDS_config_reserved      20 // Bit 22:20
+   #define     mLVDS_reset_start_bit12    19 // Bit 19
+   #define     mLVDS_data_write_toggle    18
+   #define     mLVDS_data_write_ini       17
+   #define     mLVDS_data_latch_1_toggle  16
+   #define     mLVDS_data_latch_1_ini     15
+   #define     mLVDS_data_latch_0_toggle  14
+   #define     mLVDS_data_latch_0_ini     13
+   #define     mLVDS_reset_1_select       12 // 0 - same as reset_0, 1 - 1 clock delay of reset_0
+   #define     mLVDS_reset_start           0 // Bit 11:0
+#define   TCON_DOUBLE_CTL                          (0x14c9)
+#define P_TCON_DOUBLE_CTL                          (volatile unsigned int *)((0x14c9  << 2) + 0xff900000)
+   #define     tcon_double_ini          8 // Bit 7:0
+   #define     tcon_double_inv          0 // Bit 7:0
+#define   TCON_PATTERN_HI                          (0x14ca)
+#define P_TCON_PATTERN_HI                          (volatile unsigned int *)((0x14ca  << 2) + 0xff900000)
+#define   TCON_PATTERN_LO                          (0x14cb)
+#define P_TCON_PATTERN_LO                          (volatile unsigned int *)((0x14cb  << 2) + 0xff900000)
+   #define     tcon_pattern_loop_data     16 // Bit 15:0
+   #define     tcon_pattern_loop_start    12 // Bit 3:0
+   #define     tcon_pattern_loop_end       8 // Bit 3:0
+   #define     tcon_pattern_enable         0 // Bit 7:0
+#define   TCON_CONTROL_HI                          (0x14cc)
+#define P_TCON_CONTROL_HI                          (volatile unsigned int *)((0x14cc  << 2) + 0xff900000)
+#define   TCON_CONTROL_LO                          (0x14cd)
+#define P_TCON_CONTROL_LO                          (volatile unsigned int *)((0x14cd  << 2) + 0xff900000)
+   #define     tcon_pclk_enable           26 // Bit 5:0 (enable pclk on TCON channel 7 to 2)
+   #define     tcon_pclk_div              24 // Bit 1:0 (control phy clok divide 2,4,6,8)
+   #define     tcon_delay                  0 // Bit 23:0 (3 bit for each channel)
+#define   LVDS_BLANK_DATA_HI                       (0x14ce)
+#define P_LVDS_BLANK_DATA_HI                       (volatile unsigned int *)((0x14ce  << 2) + 0xff900000)
+#define   LVDS_BLANK_DATA_LO                       (0x14cf)
+#define P_LVDS_BLANK_DATA_LO                       (volatile unsigned int *)((0x14cf  << 2) + 0xff900000)
+   #define     LVDS_blank_data_reserved 30  // 31:30
+   #define     LVDS_blank_data_r        20  // 29:20
+   #define     LVDS_blank_data_g        10  // 19:10
+   #define     LVDS_blank_data_b         0  //  9:0
+#define   LVDS_PACK_CNTL_ADDR                      (0x14d0)
+#define P_LVDS_PACK_CNTL_ADDR                      (volatile unsigned int *)((0x14d0  << 2) + 0xff900000)
+   #define     LVDS_USE_TCON    7
+   #define     LVDS_DUAL        6
+   #define     PN_SWP           5
+   #define     LSB_FIRST        4
+   #define     LVDS_RESV        3
+   #define     ODD_EVEN_SWP     2
+   #define     LVDS_REPACK      0
+// New from M3 :
+// Bit 15:12 -- Enable OFFSET Double Generate(TOCN7-TCON4)
+// Bit 11:0 -- de_hs(old tcon) second offset_hs (new tcon)
+#define   DE_HS_ADDR                               (0x14d1)
+#define P_DE_HS_ADDR                               (volatile unsigned int *)((0x14d1  << 2) + 0xff900000)
+// New from M3 :
+// Bit 15:12 -- Enable OFFSET Double Generate(TOCN3-TCON0)
+#define   DE_HE_ADDR                               (0x14d2)
+#define P_DE_HE_ADDR                               (volatile unsigned int *)((0x14d2  << 2) + 0xff900000)
+#define   DE_VS_ADDR                               (0x14d3)
+#define P_DE_VS_ADDR                               (volatile unsigned int *)((0x14d3  << 2) + 0xff900000)
+#define   DE_VE_ADDR                               (0x14d4)
+#define P_DE_VE_ADDR                               (volatile unsigned int *)((0x14d4  << 2) + 0xff900000)
+#define   HSYNC_HS_ADDR                            (0x14d5)
+#define P_HSYNC_HS_ADDR                            (volatile unsigned int *)((0x14d5  << 2) + 0xff900000)
+#define   HSYNC_HE_ADDR                            (0x14d6)
+#define P_HSYNC_HE_ADDR                            (volatile unsigned int *)((0x14d6  << 2) + 0xff900000)
+#define   HSYNC_VS_ADDR                            (0x14d7)
+#define P_HSYNC_VS_ADDR                            (volatile unsigned int *)((0x14d7  << 2) + 0xff900000)
+#define   HSYNC_VE_ADDR                            (0x14d8)
+#define P_HSYNC_VE_ADDR                            (volatile unsigned int *)((0x14d8  << 2) + 0xff900000)
+#define   VSYNC_HS_ADDR                            (0x14d9)
+#define P_VSYNC_HS_ADDR                            (volatile unsigned int *)((0x14d9  << 2) + 0xff900000)
+#define   VSYNC_HE_ADDR                            (0x14da)
+#define P_VSYNC_HE_ADDR                            (volatile unsigned int *)((0x14da  << 2) + 0xff900000)
+#define   VSYNC_VS_ADDR                            (0x14db)
+#define P_VSYNC_VS_ADDR                            (volatile unsigned int *)((0x14db  << 2) + 0xff900000)
+#define   VSYNC_VE_ADDR                            (0x14dc)
+#define P_VSYNC_VE_ADDR                            (volatile unsigned int *)((0x14dc  << 2) + 0xff900000)
+// bit 8 -- vfifo_mcu_enable
+// bit 7 -- halt_vs_de
+// bit 6 -- R8G8B8_format
+// bit 5 -- R6G6B6_format (round to 6 bits)
+// bit 4 -- R5G6B5_format
+// bit 3 -- dac_dith_sel
+// bit 2 -- lcd_mcu_enable_de     -- ReadOnly
+// bit 1 -- lcd_mcu_enable_vsync  -- ReadOnly
+// bit 0 -- lcd_mcu_enable
+#define   LCD_MCU_CTL                              (0x14dd)
+#define P_LCD_MCU_CTL                              (volatile unsigned int *)((0x14dd  << 2) + 0xff900000)
+// ReadOnly
+//   R5G6B5 when R5G6B5_format
+//   G8R8   when R8G8B8_format
+//   G5R10  Other
+#define   LCD_MCU_DATA_0                           (0x14de)
+#define P_LCD_MCU_DATA_0                           (volatile unsigned int *)((0x14de  << 2) + 0xff900000)
+// ReadOnly
+//   G8B8   when R8G8B8_format
+//   G5B10  Other
+#define   LCD_MCU_DATA_1                           (0x14df)
+#define P_LCD_MCU_DATA_1                           (volatile unsigned int *)((0x14df  << 2) + 0xff900000)
+// LVDS
+#define   LVDS_GEN_CNTL                            (0x14e0)
+#define P_LVDS_GEN_CNTL                            (volatile unsigned int *)((0x14e0  << 2) + 0xff900000)
+#define   LVDS_PHY_CNTL0                           (0x14e1)
+#define P_LVDS_PHY_CNTL0                           (volatile unsigned int *)((0x14e1  << 2) + 0xff900000)
+#define   LVDS_PHY_CNTL1                           (0x14e2)
+#define P_LVDS_PHY_CNTL1                           (volatile unsigned int *)((0x14e2  << 2) + 0xff900000)
+#define   LVDS_PHY_CNTL2                           (0x14e3)
+#define P_LVDS_PHY_CNTL2                           (volatile unsigned int *)((0x14e3  << 2) + 0xff900000)
+#define   LVDS_PHY_CNTL3                           (0x14e4)
+#define P_LVDS_PHY_CNTL3                           (volatile unsigned int *)((0x14e4  << 2) + 0xff900000)
+#define   LVDS_PHY_CNTL4                           (0x14e5)
+#define P_LVDS_PHY_CNTL4                           (volatile unsigned int *)((0x14e5  << 2) + 0xff900000)
+#define   LVDS_PHY_CNTL5                           (0x14e6)
+#define P_LVDS_PHY_CNTL5                           (volatile unsigned int *)((0x14e6  << 2) + 0xff900000)
+#define   LVDS_SRG_TEST                            (0x14e8)
+#define P_LVDS_SRG_TEST                            (volatile unsigned int *)((0x14e8  << 2) + 0xff900000)
+#define   LVDS_BIST_MUX0                           (0x14e9)
+#define P_LVDS_BIST_MUX0                           (volatile unsigned int *)((0x14e9  << 2) + 0xff900000)
+#define   LVDS_BIST_MUX1                           (0x14ea)
+#define P_LVDS_BIST_MUX1                           (volatile unsigned int *)((0x14ea  << 2) + 0xff900000)
+#define   LVDS_BIST_FIXED0                         (0x14eb)
+#define P_LVDS_BIST_FIXED0                         (volatile unsigned int *)((0x14eb  << 2) + 0xff900000)
+#define   LVDS_BIST_FIXED1                         (0x14ec)
+#define P_LVDS_BIST_FIXED1                         (volatile unsigned int *)((0x14ec  << 2) + 0xff900000)
+#define   LVDS_BIST_CNTL0                          (0x14ed)
+#define P_LVDS_BIST_CNTL0                          (volatile unsigned int *)((0x14ed  << 2) + 0xff900000)
+#define   LVDS_CLKB_CLKA                           (0x14ee)
+#define P_LVDS_CLKB_CLKA                           (volatile unsigned int *)((0x14ee  << 2) + 0xff900000)
+#define   LVDS_PHY_CLK_CNTL                        (0x14ef)
+#define P_LVDS_PHY_CLK_CNTL                        (volatile unsigned int *)((0x14ef  << 2) + 0xff900000)
+#define   LVDS_SER_EN                              (0x14f0)
+#define P_LVDS_SER_EN                              (volatile unsigned int *)((0x14f0  << 2) + 0xff900000)
+#define   LVDS_PHY_CNTL6                           (0x14f1)
+#define P_LVDS_PHY_CNTL6                           (volatile unsigned int *)((0x14f1  << 2) + 0xff900000)
+#define   LVDS_PHY_CNTL7                           (0x14f2)
+#define P_LVDS_PHY_CNTL7                           (volatile unsigned int *)((0x14f2  << 2) + 0xff900000)
+#define   LVDS_PHY_CNTL8                           (0x14f3)
+#define P_LVDS_PHY_CNTL8                           (volatile unsigned int *)((0x14f3  << 2) + 0xff900000)
+//`define MLVDS_CLK_CTL0_HI        8'hf4
+//`define MLVDS_CLK_CTL0_LO        8'hf5
+//   `define     mlvds_clk_pattern_reserved 31 // Bit 31
+//   `define     mpclk_dly                  28 // Bit 2:0
+//   `define     mpclk_div                  26 // Bit 1:0 (control phy clok divide 2,4,6,8)
+//   `define     use_mpclk                  25 // Bit 0
+//   `define     mlvds_clk_half_delay       24 // Bit 0
+//   `define     mlvds_clk_pattern           0 // Bit 23:0
+//`define MLVDS_DUAL_GATE_WR_START        8'hf6
+//   `define     mlvds_dual_gate_wr_start    0 // Bit 12:0
+//`define MLVDS_DUAL_GATE_WR_END          8'hf7
+//   `define     mlvds_dual_gate_wr_end      0 // Bit 12:0
+//
+//`define MLVDS_DUAL_GATE_RD_START        8'hf8
+//   `define     mlvds_dual_gate_rd_start    0 // Bit 12:0
+//`define MLVDS_DUAL_GATE_RD_END          8'hf9
+//   `define     mlvds_dual_gate_rd_end      0 // Bit 12:0
+//`define MLVDS_SECOND_RESET_CTL          8'hfa
+//   `define     mLVDS_2nd_reset_start       0 // Bit 12:0
+//
+#define   MLVDS_DUAL_GATE_CTL_HI                   (0x14fb)
+#define P_MLVDS_DUAL_GATE_CTL_HI                   (volatile unsigned int *)((0x14fb  << 2) + 0xff900000)
+#define   MLVDS_DUAL_GATE_CTL_LO                   (0x14fc)
+#define P_MLVDS_DUAL_GATE_CTL_LO                   (volatile unsigned int *)((0x14fc  << 2) + 0xff900000)
+//   `define     mlvds_tcon_field_en        24 // Bit 7:0
+//   `define     mlvds_dual_gate_reserved   21 // Bit 2:0
+//   `define     mlvds_scan_mode_start_line_bit12 20 // Bit 0
+//   `define     mlvds_scan_mode_odd        16 // Bit 3:0
+//   `define     mlvds_scan_mode_even       12 // Bit 3:0
+//   `define     mlvds_scan_mode_start_line  0 // Bit 11:0
+//
+//`define MLVDS_RESET_CONFIG_HI         8'hfd
+//`define MLVDS_RESET_CONFIG_LO         8'hfe
+//   `define     mLVDS_reset_range_enable   31 // Bit 0
+//   `define     mLVDS_reset_range_inv      30 // Bit 0
+//   `define     mLVDS_reset_config_res1    29 // Bit 0
+//   `define     mLVDS_reset_range_line_0   16 // Bit 11:0
+//   `define     mLVDS_reset_config_res3    13 // Bit 2:0
+//   `define     mLVDS_reset_range_line_1    0 // Bit 11:0
+//===============================================================
+//LCD DRIVER BASE   END
+//===============================================================
+//
+// Closing file:  lcd_regs.h
+//
+//`define MAD_VCBUS_BASE               8'h17
+//
+// Reading file:  mad_regs.h
+//
+//DEINTERLACE module start from 8'h90 end to 8'hff
+// -----------------------------------------------
+// CBUS_BASE:  MAD_VCBUS_BASE = 0x17
+// -----------------------------------------------
+#define   DI_PRE_CTRL                              (0x1700)
+#define P_DI_PRE_CTRL                              (volatile unsigned int *)((0x1700  << 2) + 0xff900000)
+// bit 31,      cbus_pre_frame_rst
+// bit 30,      cbus_pre_soft_rst
+// bit 29,      pre_field_num
+// bit 27:26,   mode_444c422
+// bit 25,      di_cont_read_en
+// bit 24:23,   mode_422c444
+// bit 22,      mtn_after_nr
+// bit 21:16,   pre_hold_fifo_lines
+// bit 15,      nr_wr_by
+// bit 14,      use_vdin_go_line
+// bit 13,      di_prevdin_en
+// bit 12,      di_pre_viu_link
+// bit 11,      di_pre_repeat
+// bit 10,      di_pre_drop_1st
+// bit  9,      di_buf2_en
+// bit  8,      di_chan2_en
+// bit  7,      prenr_hist_en
+// bit  6,      chan2_hist_en
+// bit  5,      hist_check_en
+// bit  4,      check_after_nr
+// bit  3,      check222p_en
+// bit  2,      check322p_en
+// bit  1,      mtn_en
+// bit  0,      nr_en
+#define   DI_POST_CTRL                             (0x1701)
+#define P_DI_POST_CTRL                             (volatile unsigned int *)((0x1701  << 2) + 0xff900000)
+// bit 31,      cbus_post_frame_rst
+// bit 30,      cbus_post_soft_rst
+// bit 29,      post_field_num
+// bit 21:16,   post_hold_fifo_lines
+// bit 13,      prepost_link
+// bit 12,      di_post_viu_link
+// bit 11,      di_post_repeat
+// bit 10,      di_post_drop_1st
+// bit  9,      mif0_to_vpp_en
+// bit  8,      di_vpp_out_en
+// bit  7,      di_wr_bk_en
+// bit  6,      di_mux_en
+// bit  5,      di_blend_en
+// bit  4,      di_mtnp_read_en
+// bit  3,      di_mtn_buf_en
+// bit  2,      di_ei_en
+// bit  1,      di_buf1_en
+// bit  0,      di_buf0_en
+#define   DI_POST_SIZE                             (0x1702)
+#define P_DI_POST_SIZE                             (volatile unsigned int *)((0x1702  << 2) + 0xff900000)
+//bit 28:16,    vsize1post
+//bit 12:0,     hsize1post
+#define   DI_PRE_SIZE                              (0x1703)
+#define P_DI_PRE_SIZE                              (volatile unsigned int *)((0x1703  << 2) + 0xff900000)
+//bit 28:16,    vsize1pre
+//bit 12:0,     hsize1pre
+#define   DI_EI_CTRL0                              (0x1704)
+#define P_DI_EI_CTRL0                              (volatile unsigned int *)((0x1704  << 2) + 0xff900000)
+//bit 23:16,    ei0_filter[2:+]  abs_diff_left>filter && ...right>filter && ...top>filter && ...bot>filter -> filter
+//bit 15:8,     ei0_threshold[2:+]
+//bit 3,        ei0_vertical
+//bit 2,        ei0_bpscf2
+//bit 1,        ei0_bpsfar1
+#define   DI_EI_CTRL1                              (0x1705)
+#define P_DI_EI_CTRL1                              (volatile unsigned int *)((0x1705  << 2) + 0xff900000)
+//bit 31:24,    ei0_diff
+//bit 23:16,    ei0_angle45
+//bit 15:8,     ei0_peak
+//bit 7:0,      ei0_cross
+#define   DI_EI_CTRL2                              (0x1706)
+#define P_DI_EI_CTRL2                              (volatile unsigned int *)((0x1706  << 2) + 0xff900000)
+//bit 31:24,    ei0_close2
+//bit 23:16,    ei0_close1
+//bit 15:8,     ei0_far2
+//bit 7:0,      ei0_far1
+#define   DI_NR_CTRL0                              (0x1707)
+#define P_DI_NR_CTRL0                              (volatile unsigned int *)((0x1707  << 2) + 0xff900000)
+//bit 26,       nr_cue_en
+//bit 25,       nr2_en
+#define   DI_NR_CTRL1                              (0x1708)
+#define P_DI_NR_CTRL1                              (volatile unsigned int *)((0x1708  << 2) + 0xff900000)
+//bit 31:30,    mot_p1txtcore_mode
+//bit 29:24,    mot_p1txtcore_clmt
+//bit 21:16,    mot_p1txtcore_ylmt
+//bit 15:8,     mot_p1txtcore_crate
+//bit 7:0,      mot_p1txtcore_yrate
+#define   DI_NR_CTRL2                              (0x1709)
+#define P_DI_NR_CTRL2                              (volatile unsigned int *)((0x1709  << 2) + 0xff900000)
+//bit 29:24,    mot_curtxtcore_clmt
+//bit 21:16,    mot_curtxtcore_ylmt
+//bit 15:8,     mot_curtxtcore_crate
+//bit 7:0,      mot_curtxtcore_yrate
+//`define DI_NR_CTRL3               8'h0a
+//no use
+//`define DI_MTN_CTRL               8'h0b
+//no use
+#define   DI_CANVAS_URGENT0                        (0x170a)
+#define P_DI_CANVAS_URGENT0                        (volatile unsigned int *)((0x170a  << 2) + 0xff900000)
+#define   DI_CANVAS_URGENT1                        (0x170b)
+#define P_DI_CANVAS_URGENT1                        (volatile unsigned int *)((0x170b  << 2) + 0xff900000)
+#define   DI_MTN_CTRL1                             (0x170c)
+#define P_DI_MTN_CTRL1                             (volatile unsigned int *)((0x170c  << 2) + 0xff900000)
+//bit 13 ,      me enable
+//bit 12 ,      me autoenable
+//bit 11:8,		mtn_paramtnthd
+//bit 7:0,      mtn_parafltthd
+#define   DI_BLEND_CTRL                            (0x170d)
+#define P_DI_BLEND_CTRL                            (volatile unsigned int *)((0x170d  << 2) + 0xff900000)
+//bit 31,      blend_1_en
+//bit 30,      blend_mtn_lpf
+//bit 28,      post_mb_en
+//bit 27,      blend_mtn3p_max
+//bit 26,      blend_mtn3p_min
+//bit 25,      blend_mtn3p_ave
+//bit 24,      blend_mtn3p_maxtb
+//bit 23,      blend_mtn_flt_en
+//bit 22,      blend_data_flt_en
+//bit 21:20,   blend_top_mode
+//bit 19,      blend_reg3_enable
+//bit 18,      blend_reg2_enable
+//bit 17,      blend_reg1_enable
+//bit 16,      blend_reg0_enable
+//bit 15:14,   blend_reg3_mode
+//bit 13:12,   blend_reg2_mode
+//bit 11:10,   blend_reg1_mode
+//bit 9:8,     blend_reg0_mode
+//bit 7:0,     kdeint
+//`define DI_BLEND_CTRL1            8'h0e
+//no use
+#define   DI_CANVAS_URGENT2                        (0x170e)
+#define P_DI_CANVAS_URGENT2                        (volatile unsigned int *)((0x170e  << 2) + 0xff900000)
+//`define DI_BLEND_CTRL2            8'h0f
+//no use
+#define   DI_ARB_CTRL                              (0x170f)
+#define P_DI_ARB_CTRL                              (volatile unsigned int *)((0x170f  << 2) + 0xff900000)
+//bit 31:26,			di_arb_thd1
+//bit 25:20,			di_arb_thd0
+//bit 19,			di_arb_tid_mode
+//bit 18,			di_arb_arb_mode
+//bit 17,			di_arb_acq_en
+//bit 16,			di_arb_disable_clk
+//bit 15:0,			di_arb_req_en
+#define   DI_BLEND_REG0_X                          (0x1710)
+#define P_DI_BLEND_REG0_X                          (volatile unsigned int *)((0x1710  << 2) + 0xff900000)
+//bit 27:16,   blend_reg0_startx
+//bit 11:0,    blend_reg0_endx
+#define   DI_BLEND_REG0_Y                          (0x1711)
+#define P_DI_BLEND_REG0_Y                          (volatile unsigned int *)((0x1711  << 2) + 0xff900000)
+#define   DI_BLEND_REG1_X                          (0x1712)
+#define P_DI_BLEND_REG1_X                          (volatile unsigned int *)((0x1712  << 2) + 0xff900000)
+#define   DI_BLEND_REG1_Y                          (0x1713)
+#define P_DI_BLEND_REG1_Y                          (volatile unsigned int *)((0x1713  << 2) + 0xff900000)
+#define   DI_BLEND_REG2_X                          (0x1714)
+#define P_DI_BLEND_REG2_X                          (volatile unsigned int *)((0x1714  << 2) + 0xff900000)
+#define   DI_BLEND_REG2_Y                          (0x1715)
+#define P_DI_BLEND_REG2_Y                          (volatile unsigned int *)((0x1715  << 2) + 0xff900000)
+#define   DI_BLEND_REG3_X                          (0x1716)
+#define P_DI_BLEND_REG3_X                          (volatile unsigned int *)((0x1716  << 2) + 0xff900000)
+#define   DI_BLEND_REG3_Y                          (0x1717)
+#define P_DI_BLEND_REG3_Y                          (volatile unsigned int *)((0x1717  << 2) + 0xff900000)
+#define   DI_CLKG_CTRL                             (0x1718)
+#define P_DI_CLKG_CTRL                             (volatile unsigned int *)((0x1718  << 2) + 0xff900000)
+//bit 31:24,   pre_gclk_ctrl     no clk gate control. if ==1, module clk is not gated (always on). [3] for pulldown,[2] for mtn_1,[1] for mtn_0,[0] for nr
+//bit 23:16,   post_gclk_ctrl    no clk gate control. [4] for ei_1, [3] for ei_0,[2] for ei_top, [1] for blend_1, [0] for blend_0
+//bit 1,       di_gate_all       clk shut down. if ==1 , all di clock shut down
+//bit 0,       di_no_clk_gate    no clk gate control.     if di_gated_all==0 and di_no_clk_gate ==1, all di clock is always working.
+#define   DI_EI_CTRL3                              (0x1719)
+#define P_DI_EI_CTRL3                              (volatile unsigned int *)((0x1719  << 2) + 0xff900000)
+//bit 31,      reg_ei_1
+//bit 30,      reg_demon_en
+//bit 26:24,   reg_demon_mux
+//bit 23:20,   reg_right_win
+//bit 19:16,   reg_left_win
+//bit 7:4,     reg_ei_sadm_quatize_margin
+//bit 1:0,     reg_ei_sad_relative_mode
+#define   DI_EI_CTRL4                              (0x171a)
+#define P_DI_EI_CTRL4                              (volatile unsigned int *)((0x171a  << 2) + 0xff900000)
+//bit 29,      reg_ei_caldrt_ambliike2_biasvertical
+//bit 28:24,   reg_ei_caldrt_addxla2list_drtmax
+//bit 22:20,   reg_ei_caldrt_addxla2list_signm0th
+//bit 19,      reg_ei_caldrt_addxla2list_mode
+//bit 18:16,   reg_ei_signm_sad_cor_rate
+//bit 15:12,   reg_ei_signm_sadi_cor_rate
+//bit 11:6,    reg_ei_signm_sadi_cor_ofst
+//bit 5:0,     reg_ei_signm_sad_ofst
+#define   DI_EI_CTRL5                              (0x171b)
+#define P_DI_EI_CTRL5                              (volatile unsigned int *)((0x171b  << 2) + 0xff900000)
+//bit 30:28,   reg_ei_caldrt_cnflcctchk_frcverthrd
+//bit 26:24,   reg_ei_caldrt_cnflctchk_mg
+//bit 23:22,   reg_ei_caldrt_cnflctchk_ws
+//bit 21,      reg_ei_caldrt_cnflctchk_en
+//bit 20,      reg_ei_caldrt_verfrc_final_en
+//bit 19,      reg_ei_caldrt_verfrc_retimflt_en
+//bit 18:16,   reg_ei_caldrt_verftc_eithratemth
+//bit 15,      reg_ei_caldrt_verfrc_retiming_en
+//bit 14:12,   reg_ei_caldrt_verfrc_bothratemth
+//bit 11:9,    reg_ei_caldrt_ver_thrd
+//bit 8:4,     reg_ei_caldrt_addxla2list_drtmin
+//bit 3:0,     reg_ei_caldrt_addxla2list_drtlimit
+#define   DI_EI_CTRL6                              (0x171c)
+#define P_DI_EI_CTRL6                              (volatile unsigned int *)((0x171c  << 2) + 0xff900000)
+//bit 31:24,   reg_ei_caldrt_abext_sad12thhig
+//bit 23:16,   reg_ei_caldrt_abext_sad00thlow
+//bit 15:8,    reg_ei_caldrt_abext_sad12thlow
+//bit 6:4,     reg_ei_caldrt_abext_ratemth
+//bit 2:0,     reg_ei_caldrt_abext_drtthrd
+#define   DI_EI_CTRL7                              (0x171d)
+#define P_DI_EI_CTRL7                              (volatile unsigned int *)((0x171d  << 2) + 0xff900000)
+//bit 29,      reg_ei_caldrt_xlanopeak_codien
+//bit 28:24,   reg_ei_caldrt_xlanopeak_drtmax
+//bit 23,      reg_ei_caldrt_xlanopeak_en
+//bit 28:24,   reg_ei_caldrt_abext_monotrnd_alpha
+//bit 28:24,   reg_ei_caldrt_abext_mononum12_thrd
+//bit 28:24,   reg_ei_caldrt_abext_mononum00_thrd
+//bit 28:24,   reg_ei_caldrt_abext_sad00rate
+//bit 28:24,   reg_ei_caldrt_abext_sad12rate
+//bit 28:24,   reg_ei_caldrt_abext_sad00thhig
+#define   DI_EI_CTRL8                              (0x171e)
+#define P_DI_EI_CTRL8                              (volatile unsigned int *)((0x171e  << 2) + 0xff900000)
+//bit 30:28,   reg_ei_assign_headtail_magin
+//bit 26:24,   reg_ei_retime_lastcurpncnfltchk_mode
+//bit 22:21,   reg_ei_retime_lastcurpncnfltchk_drtth
+//bit 20,      reg_ei_caldrt_histchk_cnfid
+//bit 19:16,   reg_ei_caldrt_histchk_thrd
+//bit 15,      reg_ei_caldrt_histchk_abext
+//bit 14,      reg_ei_caldrt_histchk_npen
+//bit 13:11,   reg_ei_caldrt_amblike2_drtmg
+//bit 10:8,    reg_ei_caldrt_amblike2_valmg
+//bit 7:4,     reg_ei_caldrt_amblike2_alpha
+//bit 3:0,     reg_ei_caldrt_amblike2_drtth
+#define   DI_EI_CTRL9                              (0x171f)
+#define P_DI_EI_CTRL9                              (volatile unsigned int *)((0x171f  << 2) + 0xff900000)
+//bit 31:28,   reg_ei_caldrt_hcnfcheck_frcvert_xla_th3
+//bit 27,      reg_ei_caldrt_hcnfcheck_frcvert_xla_en
+//bit 26:24,   reg_ei_caldrt_conf_drtth
+//bit 23:20,   reg_ei_caldrt_conf_absdrtth
+//bit 19:18,   reg_ei_caldrt_abcheck_mode1
+//bit 17:16,   reg_ei_caldrt_abcheck_mode0
+//bit 15:12,   reg_ei_caldrt_abcheck_drth1
+//bit 11:8,    reg_ei_caldrt_abcheck_drth0
+//bit 6:4,     reg_ei_caldrt_abpnchk1_th
+//bit 1,       reg_ei_caldrt_abpnchk1_en
+//bit 0,       reg_ei_caldrt_abpnchk0_en
+// DEINTERLACE mode check.
+#define   DI_MC_REG0_X                             (0x1720)
+#define P_DI_MC_REG0_X                             (volatile unsigned int *)((0x1720  << 2) + 0xff900000)
+//bit 27:16,   mc_reg0_start_x
+//bit 11:0,    mc_reg0_end_x
+#define   DI_MC_REG0_Y                             (0x1721)
+#define P_DI_MC_REG0_Y                             (volatile unsigned int *)((0x1721  << 2) + 0xff900000)
+#define   DI_MC_REG1_X                             (0x1722)
+#define P_DI_MC_REG1_X                             (volatile unsigned int *)((0x1722  << 2) + 0xff900000)
+#define   DI_MC_REG1_Y                             (0x1723)
+#define P_DI_MC_REG1_Y                             (volatile unsigned int *)((0x1723  << 2) + 0xff900000)
+#define   DI_MC_REG2_X                             (0x1724)
+#define P_DI_MC_REG2_X                             (volatile unsigned int *)((0x1724  << 2) + 0xff900000)
+#define   DI_MC_REG2_Y                             (0x1725)
+#define P_DI_MC_REG2_Y                             (volatile unsigned int *)((0x1725  << 2) + 0xff900000)
+#define   DI_MC_REG3_X                             (0x1726)
+#define P_DI_MC_REG3_X                             (volatile unsigned int *)((0x1726  << 2) + 0xff900000)
+#define   DI_MC_REG3_Y                             (0x1727)
+#define P_DI_MC_REG3_Y                             (volatile unsigned int *)((0x1727  << 2) + 0xff900000)
+#define   DI_MC_REG4_X                             (0x1728)
+#define P_DI_MC_REG4_X                             (volatile unsigned int *)((0x1728  << 2) + 0xff900000)
+#define   DI_MC_REG4_Y                             (0x1729)
+#define P_DI_MC_REG4_Y                             (volatile unsigned int *)((0x1729  << 2) + 0xff900000)
+#define   DI_MC_32LVL0                             (0x172a)
+#define P_DI_MC_32LVL0                             (volatile unsigned int *)((0x172a  << 2) + 0xff900000)
+//bit 31:24,   mc_reg2_32lvl
+//bit 23:16,   mc_reg1_32lvl
+//bit 15:8,    mc_reg0_32lvl
+//bit 7:0,     field_32lvl
+#define   DI_MC_32LVL1                             (0x172b)
+#define P_DI_MC_32LVL1                             (volatile unsigned int *)((0x172b  << 2) + 0xff900000)
+//bit 15:8,    mc_reg3_32lvl
+//bit 7:0,     mc_reg4_32lvl
+#define   DI_MC_22LVL0                             (0x172c)
+#define P_DI_MC_22LVL0                             (volatile unsigned int *)((0x172c  << 2) + 0xff900000)
+//bit 31:16,   mc_reg0_22lvl
+//bit 15:0,    field_22lvl
+#define   DI_MC_22LVL1                             (0x172d)
+#define P_DI_MC_22LVL1                             (volatile unsigned int *)((0x172d  << 2) + 0xff900000)
+//bit 31:16,   mc_reg2_22lvl
+//bit 15:0,    mc_reg1_22lvl
+#define   DI_MC_22LVL2                             (0x172e)
+#define P_DI_MC_22LVL2                             (volatile unsigned int *)((0x172e  << 2) + 0xff900000)
+//bit 31:16,   mc_reg4_22lvl
+//bit 15:0,    mc_reg3_22lvl
+#define   DI_MC_CTRL                               (0x172f)
+#define P_DI_MC_CTRL                               (volatile unsigned int *)((0x172f  << 2) + 0xff900000)
+//bit 4,       mc_reg4_en
+//bit 3,       mc_reg3_en
+//bit 2,       mc_reg2_en
+//bit 1,       mc_reg1_en
+//bit 0,       mc_reg0_en
+#define   DI_INTR_CTRL                             (0x1730)
+#define P_DI_INTR_CTRL                             (volatile unsigned int *)((0x1730  << 2) + 0xff900000)
+#define   DI_INFO_ADDR                             (0x1731)
+#define P_DI_INFO_ADDR                             (volatile unsigned int *)((0x1731  << 2) + 0xff900000)
+#define   DI_INFO_DATA                             (0x1732)
+#define P_DI_INFO_DATA                             (volatile unsigned int *)((0x1732  << 2) + 0xff900000)
+#define   DI_PRE_HOLD                              (0x1733)
+#define P_DI_PRE_HOLD                              (volatile unsigned int *)((0x1733  << 2) + 0xff900000)
+//// DET 3D REG DEFINE BEGIN ////
+//// 8'h34~8'h3f
+//     `define DET3D_MOTN_CFG                8'h34
+//     //Bit 16,	reg_det3d_intr_en	        Det3d interrupt enable
+//     //Bit 9:8,	reg_Det3D_Motion_Mode	    U2  Different mode for Motion Calculation of Luma and Chroma:
+//     //                                      0: MotY, 1: (2*MotY + (MotU + MotV))/4; 2: Max(MotY, MotU,MotV); 3:Max(MotY, (MotU+MotV)/2)
+//     //Bit 7:4,	reg_Det3D_Motion_Core_Rate	U4  K Rate to Edge (HV) details for coring of Motion Calculations, normalized to 32
+//     //Bit 3:0,	reg_Det3D_Motion_Core_Thrd	U4  2X: static coring value for Motion Detection.
+//
+//     `define DET3D_CB_CFG                  8'h35
+//     //Bit 7:4,	reg_Det3D_ChessBd_NHV_ofst	U4,  Noise immune offset for NON-Horizotnal or vertical combing detection.
+//     //Bit 3:0,	reg_Det3D_ChessBd_HV_ofst	U4,  Noise immune offset for Horizotnal or vertical combing detection.
+//
+//     `define DET3D_SPLT_CFG                8'h36
+//     //Bit 7:4,	reg_Det3D_SplitValid_ratio	U4,  Ratio between max_value and the avg_value of the edge mapping for split line valid detection.
+//     //                                      The smaller of this value, the easier of the split line detected.
+//     //Bit 3:0,	reg_Det3D_AvgIdx_ratio	    U4,  Ratio to the avg_value of the edge mapping for split line position estimation.
+//     //                                      The smaller of this value, the more samples will be added to the estimation.
+//
+//     `define DET3D_HV_MUTE                 8'h37
+//     //Bit 23:20, reg_Det3D_Edge_Ver_Mute	U4  X2: Horizontal pixels to be mute from H/V Edge calculation Top and Bottom border part.
+//     //Bit 19:16, reg_Det3D_Edge_Hor_Mute	U4  X2: Horizontal pixels to be mute from H/V Edge calculation Left and right border part.
+//     //Bit 15:12, reg_Det3D_ChessBd_Ver_Mute	U4  X2: Horizontal pixels to be mute from ChessBoard statistics calculation in middle part
+//     //Bit 11:8,	 reg_Det3D_ChessBd_Hor_Mute	U4  X2: Horizontal pixels to be mute from ChessBoard statistics calculation in middle part
+//     //Bit 7:4,	 reg_Det3D_STA8X8_Ver_Mute	U4  1X: Vertical pixels to be mute from 8x8 statistics calculation in each block.
+//     //Bit 3:0,	 reg_Det3D_STA8X8_Hor_Mute	U4  1X: Horizontal pixels to be mute from 8x8 statistics calculation in each block.
+//
+//     `define DET3D_MAT_STA_P1M1            8'h38
+//     //Bit 31:24, reg_Det3D_STA8X8_P1_K0_R8	U8  SAD to SAI ratio to decide P1, normalized to 256 (0.8)
+//     //Bit 23:16, reg_Det3D_STA8X8_P1_K1_R7	U8  SAD to ENG ratio to decide P1, normalized to 128 (0.5)
+//     //Bit 15:8,	 reg_Det3D_STA8X8_M1_K0_R6	U8  SAD to SAI ratio to decide M1, normalized to 64  (1.1)
+//     //Bit 7:0,	 reg_Det3D_STA8X8_M1_K1_R6	U8  SAD to ENG ratio to decide M1, normalized to 64  (0.8)
+//
+//     `define DET3D_MAT_STA_P1TH            8'h39
+//     //Bit 23:16, reg_Det3D_STAYUV_P1_TH_L4	U8  SAD to ENG Thrd offset to decide P1, X16         (100)
+//     //Bit 15:8,	 reg_Det3D_STAEDG_P1_TH_L4	U8  SAD to ENG Thrd offset to decide P1, X16         (80)
+//     //Bit 7:0,	 reg_Det3D_STAMOT_P1_TH_L4	U8  SAD to ENG Thrd offset to decide P1, X16         (48)
+//
+//     `define DET3D_MAT_STA_M1TH            8'h3a
+//     //Bit 23:16, reg_Det3D_STAYUV_M1_TH_L4	U8  SAD to ENG Thrd offset to decide M1, X16         (100)
+//     //Bit 15:8,	 reg_Det3D_STAEDG_M1_TH_L4	U8  SAD to ENG Thrd offset to decide M1, X16         (80)
+//     //Bit 7:0,	 reg_Det3D_STAMOT_M1_TH_L4	U8  SAD to ENG Thrd offset to decide M1, X16         (64)
+//
+//     `define DET3D_MAT_STA_RSFT            8'h3b
+//     //Bit 5:4,	 reg_Det3D_STAYUV_RSHFT	    U2  YUV statistics SAD and SAI calculation result right shift bits to accommodate the 12bits clipping:
+//     //                                      0: mainly for images <=720x480: 1: mainly for images <=1366x768: 2: mainly for images <=1920X1080: 2; 3: other higher resolutions
+//     //Bit 3:2,	 reg_Det3D_STAEDG_RSHFT	    U2  Horizontal and Vertical Edge Statistics SAD and SAI calculation result right shift bits to accommodate the 12bits clipping:
+//     //                                      0: mainly for images <=720x480: 1: mainly for images <=1366x768: 2: mainly for images <=1920X1080: 2; 3: other higher resolutions
+//     //Bit 1:0,	 reg_Det3D_STAMOT_RSHFT	    U2  Motion SAD and SAI calculation result right shift bits to accommodate the 12bits clipping:
+//     //                                      0: mainly for images <=720x480: 1: mainly for images <=1366x768: 2: mainly for images <=1920X1080: 2; 3: other higher resolutions
+//
+//     `define DET3D_MAT_SYMTC_TH            8'h3c
+//     //Bit 31:24, reg_Det3D_STALUM_symtc_Th	  U8  threshold to decide if the Luma statistics is TB or LR symmetric.
+//     //Bit 23:16, reg_Det3D_STACHR_symtc_Th	  U8  threshold to decide if the Chroma (UV) statistics is TB or LR symmetric.
+//     //Bit 15:8,	 reg_Det3D_STAEDG_symtc_Th	  U8  threshold to decide if the Horizontal and Vertical Edge statistics is TB or LR symmetric.
+//     //Bit 7:0,	 reg_Det3D_STAMOT_symtc_Th	  U8  threshold to decide if the Motion statistics is TB or LR symmetric.
+//
+//     `define DET3D_RO_DET_CB_HOR           8'h3d
+//     //Bit 31:16, RO_Det3D_ChessBd_NHor_value    U16  X64: number of Pixels of Horizontally Surely NOT matching Chessboard pattern.
+//     //Bit 15:0,	 RO_Det3D_ChessBd_Hor_value	    U16  X64: number of Pixels of Horizontally Surely matching Chessboard pattern.
+//
+//     `define DET3D_RO_DET_CB_VER           8'h3e
+//     //Bit 31:16, RO_Det3D_ChessBd_NVer_value	U16  X64: number of Pixels of Vertically Surely NOT matching Chessboard pattern.
+//     //Bit 15:0,	 RO_Det3D_ChessBd_Ver_value	    U16  X64: number of Pixels of Vertically Surely matching Chessboard pattern.
+//
+//     `define DET3D_RO_SPLT_HT              8'h3f
+//     //Bit 24,	 RO_Det3D_Split_HT_valid	U1  horizontal LR split border detected valid signal for top half picture
+//     //Bit 20:16, RO_Det3D_Split_HT_pxnum	U5  number of pixels included for the LR split position estimation for top half picture
+//     //Bit 9:0,	 RO_Det3D_Split_HT_idxX4	S10  X4: horizontal pixel shifts of LR split position to the (ColMax/2) for top half picture
+//
+//     //// DET 3D REG DEFINE END ////
+#define   DI_MTN_1_CTRL1                           (0x1740)
+#define P_DI_MTN_1_CTRL1                           (volatile unsigned int *)((0x1740  << 2) + 0xff900000)
+//bit 31,      mtn_1_en
+//bit 30,      mtn_init
+//bit 29,      di2nr_txt_en
+//bit 28,      reserved
+//bit 27:24,   mtn_def
+//bit 23:16,   mtn_adp_yc
+//bit 15:8,    mtn_adp_2c
+//bit 7:0,     mtn_adp_2y
+#define   DI_MTN_1_CTRL2                           (0x1741)
+#define P_DI_MTN_1_CTRL2                           (volatile unsigned int *)((0x1741  << 2) + 0xff900000)
+//bit 31:24,   mtn_ykinter
+//bit 23:16,   mtn_ckinter
+//bit 15:8,    mtn_ykintra
+//bit  7:0,    mtn_ckintra
+#define   DI_MTN_1_CTRL3                           (0x1742)
+#define P_DI_MTN_1_CTRL3                           (volatile unsigned int *)((0x1742  << 2) + 0xff900000)
+//bit 31:24,   mtn_tyrate
+//bit 23:16,   mtn_tcrate
+//bit 15: 8,   mtn_mxcmby
+//bit  7: 0,   mtn_mxcmbc
+#define   DI_MTN_1_CTRL4                           (0x1743)
+#define P_DI_MTN_1_CTRL4                           (volatile unsigned int *)((0x1743  << 2) + 0xff900000)
+//bit 31:24,   mtn_tcorey
+//bit 23:16,   mtn_tcorec
+//bit 15: 8,   mtn_minth
+//bit  7: 0,   mtn_maxth
+#define   DI_MTN_1_CTRL5                           (0x1744)
+#define P_DI_MTN_1_CTRL5                           (volatile unsigned int *)((0x1744  << 2) + 0xff900000)
+//bit 31:28,   mtn_m1b_extnd
+//bit 27:24,   mtn_m1b_errod
+//bit 21:20,   mtn_mot_txt_mode
+//bit 19:18,   mtn_replace_cbyy
+//bit 17:16,   mtn_replace_ybyc
+//bit 15: 8,   mtn_core_ykinter
+//bit  7: 0,   mtn_core_ckinter
+//// NR2 REG DEFINE BEGIN////
+#define   NR2_MET_NM_CTRL                          (0x1745)
+#define P_NR2_MET_NM_CTRL                          (volatile unsigned int *)((0x1745  << 2) + 0xff900000)
+//Bit 28,	   reg_NM_reset	          Reset to the status of the Loop filter.
+//Bit 27:24,   reg_NM_calc_length	  Length mode of the Noise measurement sample number for statistics.
+//                                    0:  256 samples;    1: 512 samples;    2: 1024 samples;   éš†é¢…X: 2^(8+x) samples
+//Bit 23:20,   reg_NM_inc_step	      Loop filter input gain increase step.
+//Bit 19:16,   reg_NM_dec_step	      Loop filter input gain decrease step.
+//Bit 15:8,	   reg_NM_YHPmot_thrd	  Luma channel HP portion motion for condition of pixels included in Luma Noise measurement.
+//Bit 7:0,	   reg_NM_CHPmot_thrd	  Chroma channel HP portion motion for condition of pixels included in Chroma Noise measurement.
+#define   NR2_MET_NM_YCTRL                         (0x1746)
+#define P_NR2_MET_NM_YCTRL                         (volatile unsigned int *)((0x1746  << 2) + 0xff900000)
+//Bit 31:28,   reg_NM_YPLL_target	      Target rate of NM_Ynoise_thrd to mean of the Luma Noise
+//Bit 27:24,   reg_NM_YLPmot_thrd	      Luma channel LP portion motion for condition of pixels included in Luma Noise measurement.
+//Bit 23:16,   reg_NM_YHPmot_thrd_min	  Minimum threshold for Luma channel HP portion motion to decide whether the pixel will be included in Luma noise measurement.
+//Bit 15:8,	   reg_NM_YHPmot_thrd_max	  Maximum threshold for Luma channel HP portion motion to decide whether the pixel will be included in Luma noise measurement.
+//Bit 7:0,	   reg_NM_Ylock_rate	      Rate to decide whether the Luma noise measurement is lock or not.
+#define   NR2_MET_NM_CCTRL                         (0x1747)
+#define P_NR2_MET_NM_CCTRL                         (volatile unsigned int *)((0x1747  << 2) + 0xff900000)
+//Bit 31:28,	reg_NM_CPLL_target	     Target rate of NM_Cnoise_thrd to mean of the Chroma Noise
+//Bit 27:24,	reg_NM_CLPmot_thrd	     Chroma channel LP portion motion for condition of pixels included in Chroma Noise measurement.
+//Bit 23:16,	reg_NM_CHPmot_thrd_min	 Minimum threshold for Chroma channel HP portion motion to decide whether the pixel will be included in Chroma noise measurement.
+//Bit 15:8,	    reg_NM_CHPmot_thrd_max	 Maximum threshold for Chroma channel HP portion motion to decide whether the pixel will be included in Chroma noise measurement.
+//Bit 7:0,	    reg_NM_Clock_rate	     Rate to decide whether the Chroma noise measurement is lock or not;
+#define   NR2_MET_NM_TNR                           (0x1748)
+#define P_NR2_MET_NM_TNR                           (volatile unsigned int *)((0x1748  << 2) + 0xff900000)
+//Bit 25,	    ro_NM_TNR_Ylock	         Read-only register to tell ifLuma channel noise measurement is locked or not.
+//Bit 24,	    ro_NM_TNR_Clock	         Read-only register to tell if Chroma channel noise measurement is locked or not.
+//Bit 23:12,	ro_NM_TNR_Ylevel	     Read-only register to give Luma channel noise level. It was 16x of pixel difference in 8 bits of YHPmot.
+//Bit 11:0,	ro_NM_TNR_Clevel	         Read-only register to give Chroma channel noise level. It was 16x of pixel difference in 8 bits of CHPmot.
+#define   NR2_MET_NMFRM_TNR_YLEV                   (0x1749)
+#define P_NR2_MET_NMFRM_TNR_YLEV                   (volatile unsigned int *)((0x1749  << 2) + 0xff900000)
+//Bit 28:0,	ro_NMFrm_TNR_Ylevel	         Frame based Read-only register to give Luma channel noise level within one frame/field.
+#define   NR2_MET_NMFRM_TNR_YCNT                   (0x174a)
+#define P_NR2_MET_NMFRM_TNR_YCNT                   (volatile unsigned int *)((0x174a  << 2) + 0xff900000)
+//Bit 23:0,	ro_NMFrm_TNR_Ycount	         Number ofLuma channel pixels included in Frame/Field based noise level measurement.
+#define   NR2_MET_NMFRM_TNR_CLEV                   (0x174b)
+#define P_NR2_MET_NMFRM_TNR_CLEV                   (volatile unsigned int *)((0x174b  << 2) + 0xff900000)
+//Bit 28:0,	ro_NMFrm_TNR_Clevel	         Frame based Read-only register to give Chroma channel noise level within one frame/field.
+#define   NR2_MET_NMFRM_TNR_CCNT                   (0x174c)
+#define P_NR2_MET_NMFRM_TNR_CCNT                   (volatile unsigned int *)((0x174c  << 2) + 0xff900000)
+//Bit 23:0,	ro_NMFrm_TNR_Ccount	         Number of Chroma channel pixels included in Frame/Field based noise level measurement.
+#define   NR2_3DEN_MODE                            (0x174d)
+#define P_NR2_3DEN_MODE                            (volatile unsigned int *)((0x174d  << 2) + 0xff900000)
+//Bit 6:4,	Blend_3dnr_en_r
+//Bit 2:0,	Blend_3dnr_en_l
+//   `define NR2_IIR_CTRL                8'h4e
+//   //Bit 15:14, reg_LP_IIR_8bit_mode	LP IIR membitwidth mode:0: 10bits will be store in memory;1: 9bits will be store in memory;
+//   //                                  2: 8bits will be store in memory;3: 7bits will be store in memory;
+//   //Bit 13:12, reg_LP_IIR_mute_mode	Mode for the LP IIR mute,
+//   //Bit 11:8,	 reg_LP_IIR_mute_thrd	Threshold of LP IIR mute to avoid ghost:
+//   //Bit 7:6,	 reg_HP_IIR_8bit_mode	IIR membitwidth mode:0: 10bits will be store in memory;1: 9bits will be store in memory;
+//   //                                  2: 8bits will be store in memory;3: 7bits will be store in memory;
+//   //Bit 5:4,	reg_HP_IIR_mute_mode	Mode for theLP IIR mute
+//   //Bit 3:0,	reg_HP_IIR_mute_thrd	Threshold of HP IIR mute to avoid ghost
+//   //
+#define   NR2_SW_EN                                (0x174f)
+#define P_NR2_SW_EN                                (volatile unsigned int *)((0x174f  << 2) + 0xff900000)
+//Bit 17:8,	Clk_gate_ctrl
+//Bit 7,	Cfr_enable
+//Bit 5,	Det3d_en
+//Bit 4,	Nr2_proc_en
+//Bit 0,	Nr2_sw_en
+#define   NR2_FRM_SIZE                             (0x1750)
+#define P_NR2_FRM_SIZE                             (volatile unsigned int *)((0x1750  << 2) + 0xff900000)
+//Bit 27:16,  Frm_heigh	Frame/field height
+//Bit 11: 0,  Frm_width	Frame/field width
+//   `define NR2_SNR_SAD_CFG             8'h51
+//   //Bit 12,	reg_MATNR_SNR_SAD_CenRPL	U1, Enable signal for Current pixel position SAD to be replaced by SAD_min.0: do not replace Current pixel position SAD by SAD_min;1: do replacements
+//   //Bit 11:8,	reg_MATNR_SNR_SAD_coring	Coring value of the intra-frame SAD. sum = (sum - reg_MATNR_SNR_SAD_coring);sum = (sum<0) ? 0: (sum>255)? 255: sum;
+//   //Bit 6:5,	reg_MATNR_SNR_SAD_WinMod	Unsigned, Intra-frame SAD matching window mode:0: 1x1; 1: [1 1 1] 2: [1 2 1]; 3: [1 2 2 2 1];
+//   //Bit 4:0,	Sad_coef_num	            Sad coeffient
+//
+//   `define NR2_MATNR_SNR_OS            8'h52
+//   //Bit 7:4,	reg_MATNR_SNR_COS	    SNR Filter overshoot control margin for UV channel (X2 to u10 scale)
+//   //Bit 3:0,	reg_MATNR_SNR_YOS	    SNR Filter overshoot control margin for luma channel (X2 to u10 scale)
+//
+//   `define NR2_MATNR_SNR_NRM_CFG       8'h53
+//   //Bit 23:16,	reg_MATNR_SNR_NRM_ofst	Edge based SNR boosting normalization offset to SAD_max ;
+//   //Bit 15:8,	    reg_MATNR_SNR_NRM_max	Edge based SNR boosting normalization Max value
+//   //Bit 7:0,	    reg_MATNR_SNR_NRM_min	Edge based SNR boosting normalization Min value
+//
+//   `define NR2_MATNR_SNR_NRM_GAIN      8'h54
+//   //Bit 15:8,	reg_MATNR_SNR_NRM_Cgain	Edge based SNR boosting normalization Gain for Chrm channel (norm 32 as 1)
+//   //Bit 7:0,	reg_MATNR_SNR_NRM_Ygain	Edge based SNR boosting normalization Gain for Luma channel (norm 32 as 1)
+//
+//   `define NR2_MATNR_SNR_LPF_CFG       8'h55
+//   //Bit 23:16,reg_MATNR_SNRLPF_SADmaxTH	U8,  Threshold to SADmax to use TNRLPF to replace SNRLPF. i.e.if (SAD_max<reg_MATNR_SNRLPF_SADmaxTH) SNRLPF_yuv[k] = TNRLPF_yuv[k];
+//   //Bit 13:11,reg_MATNR_SNRLPF_Cmode	    LPF based SNR filtering mode on CHRM channel:
+//   //                                      0: gradient LPF [1 1]/2, 1: gradient LPF [2 1 1]/4; 2: gradient LPF [3 3 2]/8; 3: gradient LPF [5 4 4 3]/16;
+//   //                                      4: TNRLPF;  5 : CurLPF3x3_yuv[];  6: CurLPF3o3_yuv[]  7: CurLPF3x5_yuv[]
+//   //Bit 10:8,	reg_MATNR_SNRLPF_Ymode	    LPF based SNR filtering mode on LUMA channel:
+//   //                                      0: gradient LPF //Bit [1 1]/2, 1: gradient LPF [2 1 1]/4; 2: gradient LPF [3 3 2]/8;3: gradient LPF [5 4 4 3]/16;
+//   //                                      4: TNRLPF;               5 : CurLPF3x3_yuv[];       6: CurLPF3o3_yuv[]         7: CurLPF3x5_yuv[]
+//   //Bit 7:4,	reg_MATNR_SNRLPF_SADmin3TH	Offset threshold to SAD_min to Discard SAD_min3 corresponding pixel in LPF SNR filtering. (X8 to u8 scale)
+//   //Bit 3:0,	reg_MATNR_SNRLPF_SADmin2TH	Offset threshold to SAD_min to Discard SAD_min2 corresponding pixel in LPF SNR filtering. (X8 to u8 scale)
+//
+//   `define NR2_MATNR_SNR_USF_GAIN      8'h56
+//   //Bit 15:8,	reg_MATNR_SNR_USF_Cgain	    Un-sharp (HP) compensate back Chrm portion gain, (norm 64 as 1)
+//   //Bit 7:0,	reg_MATNR_SNR_USF_Ygain	    Un-sharp (HP) compensate back Luma portion gain, (norm 64 as 1)
+//
+//   `define NR2_MATNR_SNR_EDGE2B        8'h57
+//   //Bit 15:8,	reg_MATNR_SNR_Edge2Beta_ofst	U8,  Offset for Beta based on Edge.
+//   //Bit 7:0,	reg_MATNR_SNR_Edge2Beta_gain	U8.  Gain to SAD_min for Beta based on Edge. (norm 16 as 1)
+//
+//   `define NR2_MATNR_BETA_EGAIN        8'h58
+//   //Bit 15:8,	reg_MATNR_CBeta_Egain	U8,  Gain to Edge based Beta for Chrm channel. (normalized to 32 as 1)
+//   //Bit 7:0,	reg_MATNR_YBeta_Egain	U8,  Gain to Edge based Beta for Luma channel. (normalized to 32 as 1)
+//
+//   `define NR2_MATNR_BETA_BRT          8'h59
+//   //Bit 31:28,	reg_MATNR_beta_BRT_limt_hi	U4,  Beta adjustment based on Brightness high side Limit. (X16 to u8 scale)
+//   //Bit 27:24,	reg_MATNR_beta_BRT_slop_hi	U4,  Beta adjustment based on Brightness high side slope. Normalized to 16 as 1
+//   //Bit 23:16,	reg_MATNR_beta_BRT_thrd_hi	U8,  Beta adjustment based on Brightness high threshold.(u8 scale)
+//   //Bit 15:12,	reg_MATNR_beta_BRT_limt_lo	U4,  Beta adjustment based on Brightness low side Limit. (X16 to u8 scale)
+//   //Bit 11:8,	    reg_MATNR_beta_BRT_slop_lo	U4,  Beta adjustment based on Brightness low side slope. Normalized to 16 as 1
+//   //Bit 7:0,	    reg_MATNR_beta_BRT_thrd_lo	U8,  Beta adjustment based on Brightness low threshold.(u8 scale)
+//   `define NR2_MATNR_XBETA_CFG         8'h5a
+//   //Bit 19:18,	reg_MATNR_CBeta_use_mode	U2,  Beta options (mux) from beta_motion and beta_edge for Chrm channel;
+//   //Bit 17:16,	reg_MATNR_YBeta_use_mode	U2,  Beta options (mux) from beta_motion and beta_edge for Luma channel;
+//   //Bit 15: 8,	reg_MATNR_CBeta_Ofst	    U8,  Offset to Beta for Chrm channel.(after beta_edge and beta_motion mux)
+//   //Bit  7: 0,	reg_MATNR_YBeta_Ofst	    U8,  Offset to Beta for Luma channel.(after beta_edge and beta_motion mux)
+//   `define NR2_MATNR_YBETA_SCL         8'h5b
+//   //Bit 31:24,	reg_MATNR_YBeta_scale_min	U8,  Final step Beta scale low limit for Luma channel;
+//   //Bit 23:16,	reg_MATNR_YBeta_scale_max	U8,  Final step Beta scale high limit for Luma channe;
+//   //Bit 15: 8,	reg_MATNR_YBeta_scale_gain	U8,  Final step Beta scale Gain for Luma channel (normalized 32 to 1);
+//   //Bit 7 : 0,	reg_MATNR_YBeta_scale_ofst	S8,  Final step Beta scale offset for Luma channel ;
+//   `define NR2_MATNR_CBETA_SCL         8'h5c
+//   //Bit 31:24,	reg_MATNR_CBeta_scale_min	Final step Beta scale low limit for Chrm channel.Similar to Y
+//   //Bit 23:16,	reg_MATNR_CBeta_scale_max	U8,  Final step Beta scale high limit for Chrm channel.Similar to Y
+//   //Bit 15: 8,	reg_MATNR_CBeta_scale_gain	U8,  Final step Beta scale Gain for Chrm channel Similar to Y
+//   //Bit  7: 0,	reg_MATNR_CBeta_scale_ofst	S8,  Final step Beta scale offset for Chrm channel Similar to Y
+//   `define NR2_SNR_MASK                8'h5d
+//   //Bit 20:0, 	SAD_MSK	                    Valid signal in the 3x7 SAD surface
+//   `define NR2_SAD2NORM_LUT0           8'h5e
+//   //Bit 31:24,	reg_MATNR_SAD2Norm_LUT_3	SAD convert normal LUT node 3
+//   //Bit 23:16,	reg_MATNR_SAD2Norm_LUT_2	SAD convert normal LUT node 2
+//   //Bit 15: 8,	reg_MATNR_SAD2Norm_LUT_1	SAD convert normal LUT node 1
+//   //Bit  7: 0,	reg_MATNR_SAD2Norm_LUT_0	SAD convert normal LUT node 0
+//   `define NR2_SAD2NORM_LUT1           8'h5f
+//   //Bit 31:24,	reg_MATNR_SAD2Norm_LUT_7	SAD convert normal LUT node 7
+//   //Bit 23:16,	reg_MATNR_SAD2Norm_LUT_6	SAD convert normal LUT node 6
+//   //Bit 15: 8,	reg_MATNR_SAD2Norm_LUT_5	SAD convert normal LUT node 5
+//   //Bit  7: 0,	reg_MATNR_SAD2Norm_LUT_4	SAD convert normal LUT node 4
+//   `define NR2_SAD2NORM_LUT2           8'h60
+//   //Bit 31:24,	reg_MATNR_SAD2Norm_LUT_11	SAD convert normal LUT node 11
+//   //Bit 23:16,	reg_MATNR_SAD2Norm_LUT_10	SAD convert normal LUT node 10
+//   //Bit 15: 8,	reg_MATNR_SAD2Norm_LUT_9	SAD convert normal LUT node 9
+//   //Bit  7: 0,	reg_MATNR_SAD2Norm_LUT_8	SAD convert normal LUT node 8
+//   `define NR2_SAD2NORM_LUT3           8'h61
+//   //Bit 31:24,	reg_MATNR_SAD2Norm_LUT_15	SAD convert normal LUT node 15
+//   //Bit 23:16,	reg_MATNR_SAD2Norm_LUT_14	SAD convert normal LUT node 14
+//   //Bit 15:8,	reg_MATNR_SAD2Norm_LUT_13	SAD convert normal LUT node 13
+//   //Bit 7:0,	reg_MATNR_SAD2Norm_LUT_12	SAD convert normal LUT node 12
+//   `define NR2_EDGE2BETA_LUT0          8'h62
+//   //Bit 31:24,	reg_MATNR_Edge2Beta_LUT_3	Edge convert beta LUT node 3
+//   //Bit 23:16,	reg_MATNR_Edge2Beta_LUT_2	Edge convert beta LUT node 2
+//   //Bit 15: 8,	reg_MATNR_Edge2Beta_LUT_1	Edge convert beta LUT node 1
+//   //Bit  7: 0,	reg_MATNR_Edge2Beta_LUT_0	Edge convert beta LUT node 0
+//   `define NR2_EDGE2BETA_LUT1          8'h63
+//   //Bit 31:24,	reg_MATNR_Edge2Beta_LUT_7	Edge convert beta LUT node 7
+//   //Bit 23:16,	reg_MATNR_Edge2Beta_LUT_6	Edge convert beta LUT node 6
+//   //Bit 15: 8,	reg_MATNR_Edge2Beta_LUT_5	Edge convert beta LUT node 5
+//   //Bit  7: 0,	reg_MATNR_Edge2Beta_LUT_4	Edge convert beta LUT node 4
+//   `define NR2_EDGE2BETA_LUT2          8'h64
+//   //Bit 31:24,	reg_MATNR_Edge2Beta_LUT_11	Edge convert beta LUT node 11
+//   //Bit 23:16,	reg_MATNR_Edge2Beta_LUT_10	Edge convert beta LUT node 10
+//   //Bit 15: 8,	reg_MATNR_Edge2Beta_LUT_9	Edge convert beta LUT node 9
+//   //Bit  7: 0,	reg_MATNR_Edge2Beta_LUT_8	Edge convert beta LUT node 8
+//   `define NR2_EDGE2BETA_LUT3          8'h65
+//   //Bit 31:24,	reg_MATNR_Edge2Beta_LUT_15	Edge convert beta LUT node 15
+//   //Bit 23:16,	reg_MATNR_Edge2Beta_LUT_14	Edge convert beta LUT node 14
+//   //Bit 15: 8,	reg_MATNR_Edge2Beta_LUT_13	Edge convert beta LUT node 13
+//   //Bit  7: 0,	reg_MATNR_Edge2Beta_LUT_12	Edge convert beta LUT node 12
+//   `define NR2_MOTION2BETA_LUT0        8'h66
+//   //Bit 31:24,	reg_MATNR_Mot2Beta_LUT_3	Motion convert beta LUT node 3
+//   //Bit 23:16,	reg_MATNR_Mot2Beta_LUT_2	Motion convert beta LUT node 2
+//   //Bit 15: 8,	reg_MATNR_Mot2Beta_LUT_1	Motion convert beta LUT node 1
+//   //Bit  7: 0,	reg_MATNR_Mot2Beta_LUT_0	Motion convert beta LUT node 0
+//   `define NR2_MOTION2BETA_LUT1        8'h67
+//   //Bit 31:24,	reg_MATNR_Mot2Beta_LUT_7	Motion convert beta LUT node 7
+//   //Bit 23:16,	reg_MATNR_Mot2Beta_LUT_6	Motion convert beta LUT node 6
+//   //Bit 15: 8,	reg_MATNR_Mot2Beta_LUT_5	Motion convert beta LUT node 5
+//   //Bit  7: 0,	reg_MATNR_Mot2Beta_LUT_4	Motion convert beta LUT node 4
+//   `define NR2_MOTION2BETA_LUT2        8'h68
+//   //Bit 31:24,	reg_MATNR_Mot2Beta_LUT_11	Motion convert beta LUT node 11
+//   //Bit 23:16,	reg_MATNR_Mot2Beta_LUT_10	Motion convert beta LUT node 10
+//   //Bit 15: 8,	reg_MATNR_Mot2Beta_LUT_9	Motion convert beta LUT node 9
+//   //Bit  7: 0,	reg_MATNR_Mot2Beta_LUT_8	Motion convert beta LUT node 8
+//   `define NR2_MOTION2BETA_LUT3        8'h69
+//   //Bit 31:24,	reg_MATNR_Mot2Beta_LUT_15	Motion convert beta LUT node 15
+//   //Bit 23:16,	reg_MATNR_Mot2Beta_LUT_14	Motion convert beta LUT node 14
+//   //Bit 15: 8,	reg_MATNR_Mot2Beta_LUT_13	Motion convert beta LUT node 13
+//   //Bit  7: 0,	reg_MATNR_Mot2Beta_LUT_12	Motion convert beta LUT node 12
+//    `define NR2_MATNR_MTN_CRTL          8'h6a
+//    //Bit 25:24,	reg_MATNR_Vmtn_use_mode	    Motion_yuvV channel motion selection mode:0: Vmot;1:Ymot/2 + (Umot+Vmot)/4; 2:Ymot/2 + max(Umot,Vmot)/2; 3: max(Ymot,Umot, Vmot)
+//    //Bit 21:20,	reg_MATNR_Umtn_use_mode	    Motion_yuvU channel motion selection mode:0:Umot;1:Ymot/2 + (Umot+Vmot)/4; 2:Ymot/2 + max(Umot,Vmot)/2; 3: max(Ymot,Umot, Vmot)
+//    //Bit 17:16,	reg_MATNR_Ymtn_use_mode	    Motion_yuvLuma channel motion selection mode:0:  Ymot, 1: Ymot/2 + (Umot+Vmot)/4; 2: Ymot/2 + max(Umot,Vmot)/2; 3:  max(Ymot,Umot, Vmot)
+//    //Bit 13:12,	reg_MATNR_mtn_txt_mode	    Texture detection mode for adaptive coring of HP motion
+//    //Bit  9: 8,	reg_MATNR_mtn_cor_mode	    Coring selection mode based on texture detection;
+//    //Bit  6: 4,	reg_MATNR_mtn_hpf_mode	    video mode of current and previous frame/field for MotHPF_yuv[k] calculation:
+//    //Bit  2: 0,	reg_MATNR_mtn_lpf_mode	    LPF video mode of current and previous frame/field for MotLPF_yuv[k] calculation:
+//    `define NR2_MATNR_MTN_CRTL2         8'h6b
+//    //Bit 18:16,	reg_MATNR_iir_BS_Ymode	    IIR TNR filter Band split filter mode for Luma LPF result generation (Cur and Prev);
+//    //Bit 15: 8,	reg_MATNR_mtnb_alpLP_Cgain	Scale of motion_brthp_uv to motion_brtlp_uv, normalized to 32 as 1
+//    //Bit  7: 0,	reg_MATNR_mtnb_alpLP_Ygain	Scale of motion_brthp_y to motion_brtlp_y, normalized to 32 as 1
+//    `define NR2_MATNR_MTN_COR           8'h6c
+//    //Bit 15:12,	reg_MATNR_mtn_cor_Cofst	    Coring Offset for Chroma Motion.
+//    //Bit 11: 8,	reg_MATNR_mtn_cor_Cgain	    Gain to texture based coring for Chroma Motion. Normalized to 16 as 1
+//    //Bit  7: 4,	reg_MATNR_mtn_cor_Yofst	    Coring Offset for Luma Motion.
+//    //Bit  3: 0,	reg_MATNR_mtn_cor_Ygain	    Gain to texture based coring for Luma Motion. Normalized to 16 as 1
+//    `define NR2_MATNR_MTN_GAIN          8'h6d
+//    //Bit 31:24,	reg_MATNR_mtn_hp_Cgain	Gain to MotHPF_yuv[k] Chrm channel for motion calculation, normalized to 64 as 1
+//    //Bit 23:16,	reg_MATNR_mtn_hp_Ygain	Gain to MotHPF_yuv[k] Luma channel for motion calculation, normalized to 64 as 1
+//    //Bit 15: 8,	reg_MATNR_mtn_lp_Cgain	Gain to MotLPF_yuv[k] Chrm channel for motion calculation, normalized to 32 as 1
+//    //Bit  7: 0,	reg_MATNR_mtn_lp_Ygain	Gain to MotLPF_yuv[k] Luma channel for motion calculation, normalized to 32 as 1
+//    `define NR2_MATNR_DEGHOST           8'h6e
+//    //Bit 8,	reg_MATNR_DeGhost_En	Enable signal for DeGhost function:0: disable; 1: enable
+//    //Bit 7:4,	reg_MATNR_DeGhost_COS	DeGhost Overshoot margin for UV channel, (X2 to u10 scale)
+//    //Bit 3:0,	reg_MATNR_DeGhost_YOS	DeGhost Overshoot margin for Luma channel, (X2 to u10 scale)
+//
+//    `define NR2_MATNR_ALPHALP_LUT0      8'h6f
+//    //Bit 31:24,	reg_MATNR_AlphaLP_LUT_3	    Matnr low-pass filter alpha LUT node 3
+//    //Bit 23:16,	reg_MATNR_AlphaLP_LUT_2	    Matnr low-pass filter alpha LUT node 2
+//    //Bit 15: 8,	reg_MATNR_AlphaLP_LUT_1	    Matnr low-pass filter alpha LUT node 1
+//    //Bit  7: 0,	reg_MATNR_AlphaLP_LUT_0	    Matnr low-pass filter alpha LUT node 0
+//    `define NR2_MATNR_ALPHALP_LUT1      8'h70
+//    //Bit 31:24,	reg_MATNR_AlphaLP_LUT_7	    Matnr low-pass filter alpha LUT node 7
+//    //Bit 23:16,	reg_MATNR_AlphaLP_LUT_6	    Matnr low-pass filter alpha LUT node 6
+//    //Bit 15: 8,	reg_MATNR_AlphaLP_LUT_5	    Matnr low-pass filter alpha LUT node 5
+//    //Bit  7: 0,	reg_MATNR_AlphaLP_LUT_4	    Matnr low-pass filter alpha LUT node 4
+//    `define NR2_MATNR_ALPHALP_LUT2      8'h71
+//    //Bit 31:24,	reg_MATNR_AlphaLP_LUT_11	Matnr low-pass filter alpha LUT node 11
+//    //Bit 23:16,	reg_MATNR_AlphaLP_LUT_10	Matnr low-pass filter alpha LUT node 10
+//    //Bit 15: 8,	reg_MATNR_AlphaLP_LUT_9	    Matnr low-pass filter alpha LUT node 9
+//    //Bit  7: 0,	reg_MATNR_AlphaLP_LUT_8	    Matnr low-pass filter alpha LUT node 8
+//    `define NR2_MATNR_ALPHALP_LUT3      8'h72
+//    //Bit 31:24,	reg_MATNR_AlphaLP_LUT_15	Matnr low-pass filter alpha LUT node 15
+//    //Bit 23:16,	reg_MATNR_AlphaLP_LUT_14	Matnr low-pass filter alpha LUT node 14
+//    //Bit 15: 8,	reg_MATNR_AlphaLP_LUT_13	Matnr low-pass filter alpha LUT node 13
+//    //Bit  7: 0,	reg_MATNR_AlphaLP_LUT_12	Matnr low-pass filter alpha LUT node 12
+//    `define NR2_MATNR_ALPHAHP_LUT0      8'h73
+//    //Bit 31:24,	reg_MATNR_AlphaHP_LUT_3	    Matnr high-pass filter alpha LUT node 3
+//    //Bit 23:16,	reg_MATNR_AlphaHP_LUT_2	    Matnr high-pass filter alpha LUT node 2
+//    //Bit 15: 8,	reg_MATNR_AlphaHP_LUT_1	    Matnr high-pass filter alpha LUT node 1
+//    //Bit  7: 0,	reg_MATNR_AlphaHP_LUT_0	    Matnr high-pass filter alpha LUT node 0
+//    `define NR2_MATNR_ALPHAHP_LUT1      8'h74
+//    //Bit 31:24,	reg_MATNR_AlphaHP_LUT_7	    Matnr high-pass filter alpha LUT node 7
+//    //Bit 23:16,	reg_MATNR_AlphaHP_LUT_6	    Matnr high-pass filter alpha LUT node 6
+//    //Bit 15: 8,	reg_MATNR_AlphaHP_LUT_5	    Matnr high-pass filter alpha LUT node 5
+//    //Bit  7: 0,	reg_MATNR_AlphaHP_LUT_4	    Matnr high-pass filter alpha LUT node 4
+//    `define NR2_MATNR_ALPHAHP_LUT2      8'h75
+//    //Bit 31:24,	reg_MATNR_AlphaHP_LUT_11	Matnr high-pass filter alpha LUT node 11
+//    //Bit 23:16,	reg_MATNR_AlphaHP_LUT_10	Matnr high-pass filter alpha LUT node 10
+//    //Bit 15: 8,	reg_MATNR_AlphaHP_LUT_9	    Matnr high-pass filter alpha LUT node 9
+//    //Bit  7: 0,	reg_MATNR_AlphaHP_LUT_8	    Matnr high-pass filter alpha LUT node 8
+//    `define NR2_MATNR_ALPHAHP_LUT3      8'h76
+//    //Bit 31:24,	reg_MATNR_AlphaHP_LUT_15	Matnr high-pass filter alpha LUT node 15
+//    //Bit 23:16,	reg_MATNR_AlphaHP_LUT_14	Matnr high-pass filter alpha LUT node 14
+//    //Bit 15: 8,	reg_MATNR_AlphaHP_LUT_13	Matnr high-pass filter alpha LUT node 13
+//    //Bit  7: 0,	reg_MATNR_AlphaHP_LUT_12	Matnr high-pass filter alpha LUT node 12
+//
+//    `define NR2_MATNR_MTNB_BRT          8'h77
+//    //Bit 31:28,	reg_MATNR_mtnb_BRT_limt_hi	Motion adjustment based on Brightness high side Limit. (X16 to u8 scale)
+//    //Bit 27:24,	reg_MATNR_mtnb_BRT_slop_hi	Motion adjustment based on Brightness high side slope. Normalized to 16 as 1
+//    //Bit 23:16,	reg_MATNR_mtnb_BRT_thrd_hi	Motion adjustment based on Brightness high threshold.(u8 scale)
+//    //Bit 15:12,	reg_MATNR_mtnb_BRT_limt_lo	Motion adjustment based on Brightness low side Limit. (X16 to u8 scale)
+//    //Bit 11: 8,	reg_MATNR_mtnb_BRT_slop_lo	Motion adjustment based on Brightness low side slope. Normalized to 16 as 1
+//    //Bit  7: 0,	reg_MATNR_mtnb_BRT_thrd_lo	Motion adjustment based on Brightness low threshold.(u8 scale)
+// 0x51 - 0x69 | 0x4e | 0x6a - 0x77
+//
+// Reading file:  nr2_regs.h
+//
+// synopsys translate_off
+// synopsys translate_on
+//========== nr2_snr_regs register begin ==========//
+#define   NR2_SNR_SAD_CFG                          (0x1751)
+#define P_NR2_SNR_SAD_CFG                          (volatile unsigned int *)((0x1751  << 2) + 0xff900000)
+//Bit 31:13        reserved
+//Bit 12           reg_matnr_snr_sad_cenrpl       // unsigned , default = 1
+//Bit 11: 8        reg_matnr_snr_sad_coring       // unsigned , default = 3
+//Bit  7            reserved
+//Bit  6: 5        reg_matnr_snr_sad_winmod       // unsigned , default = 1     0: 1x1; 1: [1 1 1] 2: [1 2 1]; 3: [1 2 2 2 1];
+//Bit  4: 0        sad_coef_num                      // unsigned , default = 1     0: 1x1; 1: [1 1 1] 2: [1 2 1]; 3: [1 2 2 2 1];
+#define   NR2_MATNR_SNR_OS                         (0x1752)
+#define P_NR2_MATNR_SNR_OS                         (volatile unsigned int *)((0x1752  << 2) + 0xff900000)
+//Bit 31: 8        reserved
+//Bit  7: 4        reg_matnr_snr_cos              // unsigned , default = 8
+//Bit  3: 0        reg_matnr_snr_yos              // unsigned , default = 13
+#define   NR2_MATNR_SNR_NRM_CFG                    (0x1753)
+#define P_NR2_MATNR_SNR_NRM_CFG                    (volatile unsigned int *)((0x1753  << 2) + 0xff900000)
+//Bit 31:24        reserved
+//Bit 23:16        reg_matnr_snr_nrm_ofst         // signed , default = 64
+//Bit 15: 8        reg_matnr_snr_nrm_max          // unsigned , default = 255
+//Bit  7: 0        reg_matnr_snr_nrm_min          // unsigned , default = 0
+#define   NR2_MATNR_SNR_NRM_GAIN                   (0x1754)
+#define P_NR2_MATNR_SNR_NRM_GAIN                   (volatile unsigned int *)((0x1754  << 2) + 0xff900000)
+//Bit 31:16        reserved
+//Bit 15: 8        reg_matnr_snr_nrm_cgain        // unsigned , default = 0     norm 32
+//Bit  7: 0        reg_matnr_snr_nrm_ygain        // unsigned , default = 32    norm 32
+#define   NR2_MATNR_SNR_LPF_CFG                    (0x1755)
+#define P_NR2_MATNR_SNR_LPF_CFG                    (volatile unsigned int *)((0x1755  << 2) + 0xff900000)
+//Bit 31:24        reserved
+//Bit 23:16        reg_matnr_snrlpf_sadmaxth      // unsigned , default = 12
+//Bit 15:14        reserved
+//Bit 13:11        reg_matnr_snrlpf_cmode         // unsigned , default = 2     0: gradient LPF [1 1]/2, 1: gradient LPF [2 1 1]/4; 2: gradient LPF [3 3 2]/8; 3: gradient LPF [5 5 4 3]/16;
+//Bit 10: 8        reg_matnr_snrlpf_ymode         // unsigned , default = 2     0: gradient LPF [1 1]/2, 1: gradient LPF [2 1 1]/4; 2: gradient LPF [3 3 2]/8; 3: gradient LPF [5 5 4 3]/16;
+//Bit  7: 4        reg_matnr_snrlpf_sadmin3th     // unsigned , default = 6     X8
+//Bit  3: 0        reg_matnr_snrlpf_sadmin2th     // unsigned , default = 4     X8
+#define   NR2_MATNR_SNR_USF_GAIN                   (0x1756)
+#define P_NR2_MATNR_SNR_USF_GAIN                   (volatile unsigned int *)((0x1756  << 2) + 0xff900000)
+//Bit 31:16        reserved
+//Bit 15: 8        reg_matnr_snr_usf_cgain        // unsigned , default = 0     norm 64
+//Bit  7: 0        reg_matnr_snr_usf_ygain        // unsigned , default = 0     norm 64
+#define   NR2_MATNR_SNR_EDGE2B                     (0x1757)
+#define P_NR2_MATNR_SNR_EDGE2B                     (volatile unsigned int *)((0x1757  << 2) + 0xff900000)
+//Bit 31:16        reserved
+//Bit 15: 8        reg_matnr_snr_edge2beta_ofst   // unsigned , default = 128
+//Bit  7: 0        reg_matnr_snr_edge2beta_gain   // unsigned , default = 16
+#define   NR2_MATNR_BETA_EGAIN                     (0x1758)
+#define P_NR2_MATNR_BETA_EGAIN                     (volatile unsigned int *)((0x1758  << 2) + 0xff900000)
+//Bit 31:16        reserved
+//Bit 15: 8        reg_matnr_cbeta_egain          // unsigned , default = 32    normalized to 32
+//Bit  7: 0        reg_matnr_ybeta_egain          // unsigned , default = 32    normalized to 32
+#define   NR2_MATNR_BETA_BRT                       (0x1759)
+#define P_NR2_MATNR_BETA_BRT                       (volatile unsigned int *)((0x1759  << 2) + 0xff900000)
+//Bit 31:28        reg_matnr_beta_brt_limt_hi     // unsigned , default = 0
+//Bit 27:24        reg_matnr_beta_brt_slop_hi     // unsigned , default = 0
+//Bit 23:16        reg_matnr_beta_brt_thrd_hi     // unsigned , default = 160
+//Bit 15:12        reg_matnr_beta_brt_limt_lo     // unsigned , default = 6
+//Bit 11: 8        reg_matnr_beta_brt_slop_lo     // unsigned , default = 6
+//Bit  7: 0        reg_matnr_beta_brt_thrd_lo     // unsigned , default = 100
+#define   NR2_MATNR_XBETA_CFG                      (0x175a)
+#define P_NR2_MATNR_XBETA_CFG                      (volatile unsigned int *)((0x175a  << 2) + 0xff900000)
+//Bit 31:20        reserved
+//Bit 19:18        reg_matnr_cbeta_use_mode       // unsigned , default = 0     0: beta_motion; 1: beta_edge; 2: min(beta_mot,beta_edge); 3: (beta_mot + beta_edge)/2
+//Bit 17:16        reg_matnr_ybeta_use_mode       // unsigned , default = 0     0: beta_motion; 1: beta_edge; 2: min(beta_mot,beta_edge); 3: (beta_mot + beta_edge)/2;
+//Bit 15: 8        reg_matnr_cbeta_ofst           // unsigned , default = 0
+//Bit  7: 0        reg_matnr_ybeta_ofst           // unsigned , default = 0
+#define   NR2_MATNR_YBETA_SCL                      (0x175b)
+#define P_NR2_MATNR_YBETA_SCL                      (volatile unsigned int *)((0x175b  << 2) + 0xff900000)
+//Bit 31:24        reg_matnr_ybeta_scale_min      // unsigned , default = 60
+//Bit 23:16        reg_matnr_ybeta_scale_max      // unsigned , default = 255
+//Bit 15: 8        reg_matnr_ybeta_scale_gain     // unsigned , default = 32    normalized 32 to 1.0
+//Bit  7: 0        reg_matnr_ybeta_scale_ofst     // signed , default = 0
+#define   NR2_MATNR_CBETA_SCL                      (0x175c)
+#define P_NR2_MATNR_CBETA_SCL                      (volatile unsigned int *)((0x175c  << 2) + 0xff900000)
+//Bit 31:24        reg_matnr_cbeta_scale_min      // unsigned , default = 0
+//Bit 23:16        reg_matnr_cbeta_scale_max      // unsigned , default = 255
+//Bit 15: 8        reg_matnr_cbeta_scale_gain     // unsigned , default = 32    normalized 32 to 1.0
+//Bit  7: 0        reg_matnr_cbeta_scale_ofst     // signed , default = 0
+#define   NR2_SNR_MASK                             (0x175d)
+#define P_NR2_SNR_MASK                             (volatile unsigned int *)((0x175d  << 2) + 0xff900000)
+//Bit 31:21        reserved
+//Bit 20: 0        sad_msk                        // unsigned , default = 0x0f9f3e
+#define   NR2_SAD2NORM_LUT0                        (0x175e)
+#define P_NR2_SAD2NORM_LUT0                        (volatile unsigned int *)((0x175e  << 2) + 0xff900000)
+//Bit 31:24        reg_matnr_sad2norm_lut3      // unsigned , default = 114
+//Bit 23:16        reg_matnr_sad2norm_lut2      // unsigned , default = 146
+//Bit 15: 8        reg_matnr_sad2norm_lut1      // unsigned , default = 171
+//Bit  7: 0        reg_matnr_sad2norm_lut0      // unsigned , default = 205
+#define   NR2_SAD2NORM_LUT1                        (0x175f)
+#define P_NR2_SAD2NORM_LUT1                        (volatile unsigned int *)((0x175f  << 2) + 0xff900000)
+//Bit 31:24        reg_matnr_sad2norm_lut7      // unsigned , default = 28
+//Bit 23:16        reg_matnr_sad2norm_lut6      // unsigned , default = 35
+//Bit 15: 8        reg_matnr_sad2norm_lut5      // unsigned , default = 49
+//Bit  7: 0        reg_matnr_sad2norm_lut4      // unsigned , default = 79
+#define   NR2_SAD2NORM_LUT2                        (0x1760)
+#define P_NR2_SAD2NORM_LUT2                        (volatile unsigned int *)((0x1760  << 2) + 0xff900000)
+//Bit 31:24        reg_matnr_sad2norm_lut11     // unsigned , default = 15
+//Bit 23:16        reg_matnr_sad2norm_lut10     // unsigned , default = 17
+//Bit 15: 8        reg_matnr_sad2norm_lut9      // unsigned , default = 19
+//Bit  7: 0        reg_matnr_sad2norm_lut8      // unsigned , default = 23
+#define   NR2_SAD2NORM_LUT3                        (0x1761)
+#define P_NR2_SAD2NORM_LUT3                        (volatile unsigned int *)((0x1761  << 2) + 0xff900000)
+//Bit 31:24        reg_matnr_sad2norm_lut15     // unsigned , default = 8
+//Bit 23:16        reg_matnr_sad2norm_lut14     // unsigned , default = 9
+//Bit 15: 8        reg_matnr_sad2norm_lut13     // unsigned , default = 10
+//Bit  7: 0        reg_matnr_sad2norm_lut12     // unsigned , default = 12
+#define   NR2_EDGE2BETA_LUT0                       (0x1762)
+#define P_NR2_EDGE2BETA_LUT0                       (volatile unsigned int *)((0x1762  << 2) + 0xff900000)
+//Bit 31:24        reg_matnr_edge2beta_lut3    // unsigned , default = 128
+//Bit 23:16        reg_matnr_edge2beta_lut2    // unsigned , default = 160
+//Bit 15: 8        reg_matnr_edge2beta_lut1    // unsigned , default = 224
+//Bit  7: 0        reg_matnr_edge2beta_lut0    // unsigned , default = 255
+#define   NR2_EDGE2BETA_LUT1                       (0x1763)
+#define P_NR2_EDGE2BETA_LUT1                       (volatile unsigned int *)((0x1763  << 2) + 0xff900000)
+//Bit 31:24        reg_matnr_edge2beta_lut7    // unsigned , default = 4
+//Bit 23:16        reg_matnr_edge2beta_lut6    // unsigned , default = 16
+//Bit 15: 8        reg_matnr_edge2beta_lut5    // unsigned , default = 32
+//Bit  7: 0        reg_matnr_edge2beta_lut4    // unsigned , default = 80
+#define   NR2_EDGE2BETA_LUT2                       (0x1764)
+#define P_NR2_EDGE2BETA_LUT2                       (volatile unsigned int *)((0x1764  << 2) + 0xff900000)
+//Bit 31:24        reg_matnr_edge2beta_lut11    // unsigned , default = 0
+//Bit 23:16        reg_matnr_edge2beta_lut10    // unsigned , default = 0
+//Bit 15: 8        reg_matnr_edge2beta_lut9    // unsigned , default = 0
+//Bit  7: 0        reg_matnr_edge2beta_lut8    // unsigned , default = 2
+#define   NR2_EDGE2BETA_LUT3                       (0x1765)
+#define P_NR2_EDGE2BETA_LUT3                       (volatile unsigned int *)((0x1765  << 2) + 0xff900000)
+//Bit 31:24        reg_matnr_edge2beta_lut15    // unsigned , default = 0
+//Bit 23:16        reg_matnr_edge2beta_lut14    // unsigned , default = 0
+//Bit 15: 8        reg_matnr_edge2beta_lut13    // unsigned , default = 0
+//Bit  7: 0        reg_matnr_edge2beta_lut12    // unsigned , default = 0
+#define   NR2_MOTION2BETA_LUT0                     (0x1766)
+#define P_NR2_MOTION2BETA_LUT0                     (volatile unsigned int *)((0x1766  << 2) + 0xff900000)
+//Bit 31:24        reg_matnr_mot2beta_lut3     // unsigned , default = 32
+//Bit 23:16        reg_matnr_mot2beta_lut2     // unsigned , default = 16
+//Bit 15: 8        reg_matnr_mot2beta_lut1     // unsigned , default = 4
+//Bit  7: 0        reg_matnr_mot2beta_lut0     // unsigned , default = 0
+#define   NR2_MOTION2BETA_LUT1                     (0x1767)
+#define P_NR2_MOTION2BETA_LUT1                     (volatile unsigned int *)((0x1767  << 2) + 0xff900000)
+//Bit 31:24        reg_matnr_mot2beta_lut7     // unsigned , default = 196
+//Bit 23:16        reg_matnr_mot2beta_lut6     // unsigned , default = 128
+//Bit 15: 8        reg_matnr_mot2beta_lut5     // unsigned , default = 64
+//Bit  7: 0        reg_matnr_mot2beta_lut4     // unsigned , default = 48
+#define   NR2_MOTION2BETA_LUT2                     (0x1768)
+#define P_NR2_MOTION2BETA_LUT2                     (volatile unsigned int *)((0x1768  << 2) + 0xff900000)
+//Bit 31:24        reg_matnr_mot2beta_lut11     // unsigned , default = 255
+//Bit 23:16        reg_matnr_mot2beta_lut10     // unsigned , default = 255
+//Bit 15: 8        reg_matnr_mot2beta_lut9     // unsigned , default = 240
+//Bit  7: 0        reg_matnr_mot2beta_lut8     // unsigned , default = 224
+#define   NR2_MOTION2BETA_LUT3                     (0x1769)
+#define P_NR2_MOTION2BETA_LUT3                     (volatile unsigned int *)((0x1769  << 2) + 0xff900000)
+//Bit 31:24        reg_matnr_mot2beta_lut15     // unsigned , default = 255
+//Bit 23:16        reg_matnr_mot2beta_lut14     // unsigned , default = 255
+//Bit 15: 8        reg_matnr_mot2beta_lut13     // unsigned , default = 255
+//Bit  7: 0        reg_matnr_mot2beta_lut12     // unsigned , default = 255
+//========== nr2_snr_regs register end ==========//
+//========== nr2_tnr_regs register begin ==========//
+#define   NR2_IIR_CTRL                             (0x174e)
+#define P_NR2_IIR_CTRL                             (volatile unsigned int *)((0x174e  << 2) + 0xff900000)
+//Bit 31:16        reserved
+//Bit 15:14        reg_lp_iir_8bit_mode      // unsigned , default = 0  10bits; 1: 9bits; 2: 8bits 3: 7bits
+//Bit 13:12        reg_hp_iir_mute_mode      // unsigned , default = 0
+//Bit 11: 8        reg_hp_iir_mute_thrd      // unsigned , default = 0
+//Bit  7: 6        reg_hp_iir_8bit_mode      // unsigned , default = 0
+//Bit  5: 4        reg_lp_iir_mute_mode      // unsigned , default = 0
+//Bit  3: 0        reg_lp_iir_mute_thrd      // unsigned , default = 0
+#define   NR2_MATNR_MTN_CRTL                       (0x176a)
+#define P_NR2_MATNR_MTN_CRTL                       (volatile unsigned int *)((0x176a  << 2) + 0xff900000)
+//Bit 31:20        reserved
+//Bit 19:18        reg_matnr_vmtn_use_mode   // unsigned , default = 0  0- Vmot, 1- Ymot/2 + (Umot+Vmot)/4; 2- Ymot/2 + max(Umot,Vmot)/2; 3- max(Ymot,Umot, Vmot)
+//Bit 17:16        reg_matnr_umtn_use_mode   // unsigned , default = 0  0- Umot, 1- Ymot/2 + (Umot+Vmot)/4; 2- Ymot/2 + max(Umot,Vmot)/2; 3- max(Ymot,Umot, Vmot)
+//Bit 15:14        reg_matnr_ymtn_use_mode   // unsigned , default = 0  0- Ymot, 1- Ymot/2 + (Umot+Vmot)/4; 2- Ymot/2 + max(Umot,Vmot)/2; 3- max(Ymot,Umot, Vmot)
+//Bit 13:12        reg_matnr_mtn_txt_mode    // unsigned , default = 1
+//Bit 11            reserved
+//Bit 10: 8        reg_matnr_mtn_cor_mode    // unsigned , default = 1  changes)
+//Bit  7: 4        reg_matnr_mtn_hpf_mode    // unsigned , default = 8  extend to u4 for nr4, 0- 1x1; 1: 1x3; 2: 1x5; 3: 3x3; 4: 3o3; 5: 3x5, 6:3x3 SAD, 7: 5x3 SAD, 8-15: drt adaptive
+//Bit  3            reserved
+//Bit  2: 0        reg_matnr_mtn_lpf_mode    // unsigned , default = 6  0- 1x1; 1: 1x3; 2: 1x5; 3: 3x3; 4: 3o3; 5: 3x5, 6,7: drt adaptive
+#define   NR2_MATNR_MTN_CRTL2                      (0x176b)
+#define P_NR2_MATNR_MTN_CRTL2                      (volatile unsigned int *)((0x176b  << 2) + 0xff900000)
+//Bit 31:19        reserved
+//Bit 18:16        reg_matnr_iir_bs_ymode      // unsigned , default = 6  LPF~~ 0- 1x1; 1: 1x3; 2: 1x5; 3: 3x3; 4: 3o3; 5: 3x5; 6/7: 0
+//Bit 15: 8        reg_matnr_mtnb_alplp_cgain  // unsigned , default = 64  to 32
+//Bit  7: 0        reg_matnr_mtnb_alplp_ygain  // unsigned , default = 64  to 32
+#define   NR2_MATNR_MTN_COR                        (0x176c)
+#define P_NR2_MATNR_MTN_COR                        (volatile unsigned int *)((0x176c  << 2) + 0xff900000)
+//Bit 31:16        reserved
+//Bit 15:12        reg_matnr_mtn_cor_cofst   // unsigned , default = 3  Offset for Chroma Motion.
+//Bit 11: 8        reg_matnr_mtn_cor_cgain   // unsigned , default = 3  to texture based coring for Chroma Motion. Normalized to 16 as 1
+//Bit  7: 4        reg_matnr_mtn_cor_yofst   // unsigned , default = 3  Offset for Luma Motion.
+//Bit  3: 0        reg_matnr_mtn_cor_ygain   // unsigned , default = 3  to texture based coring for Luma Motion. Normalized to 16 as 1
+#define   NR2_MATNR_MTN_GAIN                       (0x176d)
+#define P_NR2_MATNR_MTN_GAIN                       (volatile unsigned int *)((0x176d  << 2) + 0xff900000)
+//Bit 31:24        reg_matnr_mtn_hp_cgain    // unsigned , default = 64  to MotHPF_yuv[k] Chrm channel for motion calculation, normalized to 64 as 1
+//Bit 23:16        reg_matnr_mtn_hp_ygain    // unsigned , default = 64  to MotHPF_yuv[k] Luma channel for motion calculation, normalized to 64 as 1
+//Bit 15: 8        reg_matnr_mtn_lp_cgain    // unsigned , default = 64  to MotLPF_yuv[k] Chrm channel for motion calculation, normalized to 32 as 1
+//Bit  7: 0        reg_matnr_mtn_lp_ygain    // unsigned , default = 64  to MotLPF_yuv[k] Luma channel for motion calculation, normalized to 32 as 1
+#define   NR2_MATNR_DEGHOST                        (0x176e)
+#define P_NR2_MATNR_DEGHOST                        (volatile unsigned int *)((0x176e  << 2) + 0xff900000)
+//Bit 31            reserved
+//Bit 30:28        reg_matnr_deghost_mode    // unsigned , default = 0  0:old_deghost; 1:soft_denoise & strong_deghost; 2:strong_denoise & soft_deghost; 3:strong_denoise & strong_deghost
+//Bit 27:25        reserved
+//Bit 24:20        reg_matnr_deghost_ygain   // unsigned , default = 4
+//Bit 19:17        reserved
+//Bit 16:12        reg_matnr_deghost_cgain   // unsigned , default = 4
+//Bit 11: 9        reserved
+//Bit  8           reg_matnr_deghost_en      // unsigned , default = 1  0: disable; 1: enable Enable signal for DeGhost function:0: disable; 1: enable
+//Bit  7: 4        reg_matnr_deghost_cos     // unsigned , default = 3  DeGhost Overshoot margin for UV channel, (X2 to u10 scale)
+//Bit  3: 0        reg_matnr_deghost_yos     // unsigned , default = 3  DeGhost Overshoot margin for Luma channel, (X2 to u10 scale)
+#define   NR2_MATNR_ALPHALP_LUT0                   (0x176f)
+#define P_NR2_MATNR_ALPHALP_LUT0                   (volatile unsigned int *)((0x176f  << 2) + 0xff900000)
+//Bit 31:24        reg_matnr_alphalp_lut3    // unsigned , default = 64  low-pass filter alpha LUT
+//Bit 23:16        reg_matnr_alphalp_lut2    // unsigned , default = 128  low-pass filter alpha LUT
+//Bit 15: 8        reg_matnr_alphalp_lut1    // unsigned , default = 128  low-pass filter alpha LUT
+//Bit  7: 0        reg_matnr_alphalp_lut0    // unsigned , default = 128  low-pass filter alpha LUT
+#define   NR2_MATNR_ALPHALP_LUT1                   (0x1770)
+#define P_NR2_MATNR_ALPHALP_LUT1                   (volatile unsigned int *)((0x1770  << 2) + 0xff900000)
+//Bit 31:24        reg_matnr_alphalp_lut7    // unsigned , default = 255  low-pass filter alpha LUT
+//Bit 23:16        reg_matnr_alphalp_lut6    // unsigned , default = 128  low-pass filter alpha LUT
+//Bit 15: 8        reg_matnr_alphalp_lut5    // unsigned , default = 80  low-pass filter alpha LUT
+//Bit  7: 0        reg_matnr_alphalp_lut4    // unsigned , default = 64  low-pass filter alpha LUT
+#define   NR2_MATNR_ALPHALP_LUT2                   (0x1771)
+#define P_NR2_MATNR_ALPHALP_LUT2                   (volatile unsigned int *)((0x1771  << 2) + 0xff900000)
+//Bit 31:24        reg_matnr_alphalp_lut11   // unsigned , default = 255  low-pass filter alpha LUT
+//Bit 23:16        reg_matnr_alphalp_lut10   // unsigned , default = 255  low-pass filter alpha LUT
+//Bit 15: 8        reg_matnr_alphalp_lut9    // unsigned , default = 255  low-pass filter alpha LUT
+//Bit  7: 0        reg_matnr_alphalp_lut8    // unsigned , default = 255  low-pass filter alpha LUT
+#define   NR2_MATNR_ALPHALP_LUT3                   (0x1772)
+#define P_NR2_MATNR_ALPHALP_LUT3                   (volatile unsigned int *)((0x1772  << 2) + 0xff900000)
+//Bit 31:24        reg_matnr_alphalp_lut15   // unsigned , default = 255  low-pass filter alpha LUT
+//Bit 23:16        reg_matnr_alphalp_lut14   // unsigned , default = 255  low-pass filter alpha LUT
+//Bit 15: 8        reg_matnr_alphalp_lut13   // unsigned , default = 255  low-pass filter alpha LUT
+//Bit  7: 0        reg_matnr_alphalp_lut12   // unsigned , default = 255  low-pass filter alpha LUT
+#define   NR2_MATNR_ALPHAHP_LUT0                   (0x1773)
+#define P_NR2_MATNR_ALPHAHP_LUT0                   (volatile unsigned int *)((0x1773  << 2) + 0xff900000)
+//Bit 31:24        reg_matnr_alphahp_lut3    // unsigned , default = 64  high-pass filter alpha LUT
+//Bit 23:16        reg_matnr_alphahp_lut2    // unsigned , default = 128  high-pass filter alpha LUT
+//Bit 15: 8        reg_matnr_alphahp_lut1    // unsigned , default = 128  high-pass filter alpha LUT
+//Bit  7: 0        reg_matnr_alphahp_lut0    // unsigned , default = 128  high-pass filter alpha LUT
+#define   NR2_MATNR_ALPHAHP_LUT1                   (0x1774)
+#define P_NR2_MATNR_ALPHAHP_LUT1                   (volatile unsigned int *)((0x1774  << 2) + 0xff900000)
+//Bit 31:24        reg_matnr_alphahp_lut7    // unsigned , default = 255  high-pass filter alpha LUT
+//Bit 23:16        reg_matnr_alphahp_lut6    // unsigned , default = 128  high-pass filter alpha LUT
+//Bit 15: 8        reg_matnr_alphahp_lut5    // unsigned , default = 80  high-pass filter alpha LUT
+//Bit  7: 0        reg_matnr_alphahp_lut4    // unsigned , default = 64  high-pass filter alpha LUT
+#define   NR2_MATNR_ALPHAHP_LUT2                   (0x1775)
+#define P_NR2_MATNR_ALPHAHP_LUT2                   (volatile unsigned int *)((0x1775  << 2) + 0xff900000)
+//Bit 31:24        reg_matnr_alphahp_lut11   // unsigned , default = 255  high-pass filter alpha LUT
+//Bit 23:16        reg_matnr_alphahp_lut10   // unsigned , default = 255  high-pass filter alpha LUT
+//Bit 15: 8        reg_matnr_alphahp_lut9    // unsigned , default = 255  high-pass filter alpha LUT
+//Bit  7: 0        reg_matnr_alphahp_lut8    // unsigned , default = 255  high-pass filter alpha LUT
+#define   NR2_MATNR_ALPHAHP_LUT3                   (0x1776)
+#define P_NR2_MATNR_ALPHAHP_LUT3                   (volatile unsigned int *)((0x1776  << 2) + 0xff900000)
+//Bit 31:24        reg_matnr_alphahp_lut15   // unsigned , default = 255  high-pass filter alpha LUT
+//Bit 23:16        reg_matnr_alphahp_lut14   // unsigned , default = 255  high-pass filter alpha LUT
+//Bit 15: 8        reg_matnr_alphahp_lut13   // unsigned , default = 255  high-pass filter alpha LUT
+//Bit  7: 0        reg_matnr_alphahp_lut12   // unsigned , default = 255  high-pass filter alpha LUT
+#define   NR2_MATNR_MTNB_BRT                       (0x1777)
+#define P_NR2_MATNR_MTNB_BRT                       (volatile unsigned int *)((0x1777  << 2) + 0xff900000)
+//Bit 31:28        reg_matnr_mtnb_brt_limt_hi  // unsigned , default = 0
+//Bit 27:24        reg_matnr_mtnb_brt_slop_hi  // unsigned , default = 0
+//Bit 23:16        reg_matnr_mtnb_brt_thrd_hi  // unsigned , default = 160
+//Bit 15:12        reg_matnr_mtnb_brt_limt_lo  // unsigned , default = 6
+//Bit 11: 8        reg_matnr_mtnb_brt_slop_lo  // unsigned , default = 6
+//Bit  7: 0        reg_matnr_mtnb_brt_thrd_lo  // unsigned , default = 100
+//========== nr2_tnr_regs register end ==========//
+// synopsys translate_off
+// synopsys translate_on
+//
+// Closing file:  nr2_regs.h
+//
+#define   DI_EI_DRT_CTRL                           (0x1778)
+#define P_DI_EI_DRT_CTRL                           (volatile unsigned int *)((0x1778  << 2) + 0xff900000)
+//Bit 31,     reg_rectg_en      ;u1
+//Bit 30,     reg_recbld_en     ;u1
+//Bit 29:28,  reg_rectg_ws      ;u2
+//Bit 27,     reserved
+//Bit 26:24,  reg_abq_margin    ;u3
+//Bit 23,     reserved
+//Bit 22:20,  reg_trend_mg      ;u3
+//Bit 19:16,  reg_int_d16xc1    ;u4
+//Bit 15:14,  reserved
+//Bit 13: 8,  reg_int_chlmt1    ;u6
+//Bit  7,     reserved
+//Bit  6: 4,  reg_nscheck_thrd  ;u3
+//Bit  3,     reserved
+//Bit  2: 0,  reg_horsl_ws      ;u3
+#define   DI_EI_DRT_PIXTH                          (0x1779)
+#define P_DI_EI_DRT_PIXTH                          (volatile unsigned int *)((0x1779  << 2) + 0xff900000)
+//Bit 31:24,  reg_min_pix        ;u8
+//Bit 23:16,  reg_max_pix        ;u8
+//Bit 15: 8,  reg_dmaxmin_thrdma ;u8
+//Bit  7: 0,  reg_dmaxmin_thrdmi ;u8
+#define   DI_EI_DRT_CORRPIXTH                      (0x177a)
+#define P_DI_EI_DRT_CORRPIXTH                      (volatile unsigned int *)((0x177a  << 2) + 0xff900000)
+//Bit 31:24,  reg_newcorrpix_maxthrd ;u8
+//Bit 23:16,  reg_corrpix_diffthrd   ;u8
+//Bit 15: 8,  reg_corrpix_minthrd    ;u8
+//Bit  7: 0,  reg_corrpix_maxthrd    ;u8
+#define   DI_EI_DRT_RECTG_WAVE                     (0x177b)
+#define P_DI_EI_DRT_RECTG_WAVE                     (volatile unsigned int *)((0x177b  << 2) + 0xff900000)
+//Bit 31:29,  reserved
+//Bit 28:24,  reg_max_pixwave  ;u5
+//Bit 23:21,  reserved
+//Bit 20:16,  reg_pix_wave     ;u5
+//Bit 15:14,  reserved
+//Bit 13: 8,  reg_maxdrt_thrd  ;u6
+//Bit  7: 0,  reg_wave_thrd    ;u8
+#define   DI_EI_DRT_PIX_DIFFTH                     (0x177c)
+#define P_DI_EI_DRT_PIX_DIFFTH                     (volatile unsigned int *)((0x177c  << 2) + 0xff900000)
+//Bit 31:24,  reg_newraw_thrd    ;u8
+//Bit 23:16,  reg_tb_max_thrd    ;u8
+//Bit 15: 8,  reg_diffpix_thrd   ;u8
+//Bit  7: 6,  reserved
+//Bit  5: 0,  reg_bilt_trendnumt ;u8
+#define   DI_EI_DRT_UNBITREND_TH                   (0x177d)
+#define P_DI_EI_DRT_UNBITREND_TH                   (volatile unsigned int *)((0x177d  << 2) + 0xff900000)
+//Bit 31:29,  reserved
+//Bit 28:24,  reg_trend_numb     ;u5
+//Bit 23:21,  reserved
+//Bit 20:16,  reg_bilt_trendnum  ;u5
+//Bit 15:13,  reserved
+//Bit 12: 8,  reg_unil_trendnumt ;u5
+//Bit  7: 5,  reserved
+//Bit  4: 0,  reg_trend_num      ;u5
+#define   NR2_CONV_MODE                            (0x177f)
+#define P_NR2_CONV_MODE                            (volatile unsigned int *)((0x177f  << 2) + 0xff900000)
+//Bit 3:2,	Conv_c444_mode	The format convert mode about 422 to 444 when data read out line buffer
+//Bit 1:0,	Conv_c422_mode	the format convert mode about 444 to 422 when data write to line buffer
+//// NR2 REG DEFINE END ////
+//// DET 3D REG DEFINE BEGIN ////
+//// 8'h34~8'h3f | 8'h80~8'h8f | 0x9a-0x9b
+//
+// Reading file:  det3d_regs.h
+//
+//// DET 3D REG DEFINE BEGIN ////
+//// 8'h34~8'h3f
+//// DET 3D REG DEFINE END ////
+#define   DET3D_MOTN_CFG                           (0x1734)
+#define P_DET3D_MOTN_CFG                           (volatile unsigned int *)((0x1734  << 2) + 0xff900000)
+//Bit 16,	reg_det3d_intr_en	        Det3d interrupt enable
+//Bit 9:8,	reg_Det3D_Motion_Mode	    U2  Different mode for Motion Calculation of Luma and Chroma:
+//                                      0: MotY, 1: (2*MotY + (MotU + MotV))/4; 2: Max(MotY, MotU,MotV); 3:Max(MotY, (MotU+MotV)/2)
+//Bit 7:4,	reg_Det3D_Motion_Core_Rate	U4  K Rate to Edge (HV) details for coring of Motion Calculations, normalized to 32
+//Bit 3:0,	reg_Det3D_Motion_Core_Thrd	U4  2X: static coring value for Motion Detection.
+#define   DET3D_CB_CFG                             (0x1735)
+#define P_DET3D_CB_CFG                             (volatile unsigned int *)((0x1735  << 2) + 0xff900000)
+//Bit 7:4,	reg_Det3D_ChessBd_HV_ofst	U4,  Noise immune offset for Horizotnal or vertical combing detection.
+//Bit 3:0,	reg_Det3D_ChessBd_NHV_ofst	U4,  Noise immune offset for NON-Horizotnal or vertical combing detection.
+#define   DET3D_SPLT_CFG                           (0x1736)
+#define P_DET3D_SPLT_CFG                           (volatile unsigned int *)((0x1736  << 2) + 0xff900000)
+//Bit 7:4,	reg_Det3D_SplitValid_ratio	U4,  Ratio between max_value and the avg_value of the edge mapping for split line valid detection.
+//                                      The smaller of this value, the easier of the split line detected.
+//Bit 3:0,	reg_Det3D_AvgIdx_ratio	    U4,  Ratio to the avg_value of the edge mapping for split line position estimation.
+//                                      The smaller of this value, the more samples will be added to the estimation.
+#define   DET3D_HV_MUTE                            (0x1737)
+#define P_DET3D_HV_MUTE                            (volatile unsigned int *)((0x1737  << 2) + 0xff900000)
+//Bit 23:20, reg_Det3D_Edge_Ver_Mute	U4  X2: Horizontal pixels to be mute from H/V Edge calculation Top and Bottom border part.
+//Bit 19:16, reg_Det3D_Edge_Hor_Mute	U4  X2: Horizontal pixels to be mute from H/V Edge calculation Left and right border part.
+//Bit 15:12, reg_Det3D_ChessBd_Ver_Mute	U4  X2: Horizontal pixels to be mute from ChessBoard statistics calculation in middle part
+//Bit 11:8,	 reg_Det3D_ChessBd_Hor_Mute	U4  X2: Horizontal pixels to be mute from ChessBoard statistics calculation in middle part
+//Bit 7:4,	 reg_Det3D_STA8X8_Ver_Mute	U4  1X: Vertical pixels to be mute from 8x8 statistics calculation in each block.
+//Bit 3:0,	 reg_Det3D_STA8X8_Hor_Mute	U4  1X: Horizontal pixels to be mute from 8x8 statistics calculation in each block.
+#define   DET3D_MAT_STA_P1M1                       (0x1738)
+#define P_DET3D_MAT_STA_P1M1                       (volatile unsigned int *)((0x1738  << 2) + 0xff900000)
+//Bit 31:24, reg_Det3D_STA8X8_P1_K0_R8	U8  SAD to SAI ratio to decide P1, normalized to 256 (0.8)
+//Bit 23:16, reg_Det3D_STA8X8_P1_K1_R7	U8  SAD to ENG ratio to decide P1, normalized to 128 (0.5)
+//Bit 15:8,	 reg_Det3D_STA8X8_M1_K0_R6	U8  SAD to SAI ratio to decide M1, normalized to 64  (1.1)
+//Bit 7:0,	 reg_Det3D_STA8X8_M1_K1_R6	U8  SAD to ENG ratio to decide M1, normalized to 64  (0.8)
+#define   DET3D_MAT_STA_P1TH                       (0x1739)
+#define P_DET3D_MAT_STA_P1TH                       (volatile unsigned int *)((0x1739  << 2) + 0xff900000)
+//Bit 23:16, reg_Det3D_STAYUV_P1_TH_L4	U8  SAD to ENG Thrd offset to decide P1, X16         (100)
+//Bit 15:8,	 reg_Det3D_STAEDG_P1_TH_L4	U8  SAD to ENG Thrd offset to decide P1, X16         (80)
+//Bit 7:0,	 reg_Det3D_STAMOT_P1_TH_L4	U8  SAD to ENG Thrd offset to decide P1, X16         (48)
+#define   DET3D_MAT_STA_M1TH                       (0x173a)
+#define P_DET3D_MAT_STA_M1TH                       (volatile unsigned int *)((0x173a  << 2) + 0xff900000)
+//Bit 23:16, reg_Det3D_STAYUV_M1_TH_L4	U8  SAD to ENG Thrd offset to decide M1, X16         (100)
+//Bit 15:8,	 reg_Det3D_STAEDG_M1_TH_L4	U8  SAD to ENG Thrd offset to decide M1, X16         (80)
+//Bit 7:0,	 reg_Det3D_STAMOT_M1_TH_L4	U8  SAD to ENG Thrd offset to decide M1, X16         (64)
+#define   DET3D_MAT_STA_RSFT                       (0x173b)
+#define P_DET3D_MAT_STA_RSFT                       (volatile unsigned int *)((0x173b  << 2) + 0xff900000)
+//Bit 5:4,	 reg_Det3D_STAYUV_RSHFT	    U2  YUV statistics SAD and SAI calculation result right shift bits to accommodate the 12bits clipping:
+//                                      0: mainly for images <=720x480: 1: mainly for images <=1366x768: 2: mainly for images <=1920X1080: 2; 3: other higher resolutions
+//Bit 3:2,	 reg_Det3D_STAEDG_RSHFT	    U2  Horizontal and Vertical Edge Statistics SAD and SAI calculation result right shift bits to accommodate the 12bits clipping:
+//                                      0: mainly for images <=720x480: 1: mainly for images <=1366x768: 2: mainly for images <=1920X1080: 2; 3: other higher resolutions
+//Bit 1:0,	 reg_Det3D_STAMOT_RSHFT	    U2  Motion SAD and SAI calculation result right shift bits to accommodate the 12bits clipping:
+//                                      0: mainly for images <=720x480: 1: mainly for images <=1366x768: 2: mainly for images <=1920X1080: 2; 3: other higher resolutions
+#define   DET3D_MAT_SYMTC_TH                       (0x173c)
+#define P_DET3D_MAT_SYMTC_TH                       (volatile unsigned int *)((0x173c  << 2) + 0xff900000)
+//Bit 31:24, reg_Det3D_STALUM_symtc_Th	  U8  threshold to decide if the Luma statistics is TB or LR symmetric.
+//Bit 23:16, reg_Det3D_STACHR_symtc_Th	  U8  threshold to decide if the Chroma (UV) statistics is TB or LR symmetric.
+//Bit 15:8,	 reg_Det3D_STAEDG_symtc_Th	  U8  threshold to decide if the Horizontal and Vertical Edge statistics is TB or LR symmetric.
+//Bit 7:0,	 reg_Det3D_STAMOT_symtc_Th	  U8  threshold to decide if the Motion statistics is TB or LR symmetric.
+#define   DET3D_RO_DET_CB_HOR                      (0x173d)
+#define P_DET3D_RO_DET_CB_HOR                      (volatile unsigned int *)((0x173d  << 2) + 0xff900000)
+//Bit 31:16, RO_Det3D_ChessBd_NHor_value    U16  X64: number of Pixels of Horizontally Surely NOT matching Chessboard pattern.
+//Bit 15:0,	 RO_Det3D_ChessBd_Hor_value	    U16  X64: number of Pixels of Horizontally Surely matching Chessboard pattern.
+#define   DET3D_RO_DET_CB_VER                      (0x173e)
+#define P_DET3D_RO_DET_CB_VER                      (volatile unsigned int *)((0x173e  << 2) + 0xff900000)
+//Bit 31:16, RO_Det3D_ChessBd_NVer_value	U16  X64: number of Pixels of Vertically Surely NOT matching Chessboard pattern.
+//Bit 15:0,	 RO_Det3D_ChessBd_Ver_value	    U16  X64: number of Pixels of Vertically Surely matching Chessboard pattern.
+#define   DET3D_RO_SPLT_HT                         (0x173f)
+#define P_DET3D_RO_SPLT_HT                         (volatile unsigned int *)((0x173f  << 2) + 0xff900000)
+//Bit 24,	 RO_Det3D_Split_HT_valid	U1  horizontal LR split border detected valid signal for top half picture
+//Bit 20:16, RO_Det3D_Split_HT_pxnum	U5  number of pixels included for the LR split position estimation for top half picture
+//Bit 9:0,	 RO_Det3D_Split_HT_idxX4	S10  X4: horizontal pixel shifts of LR split position to the (ColMax/2) for top half picture
+//// DET 3D REG DEFINE BEGIN ////
+////  8'h80~8'h8f
+#define   DET3D_RO_SPLT_HB                         (0x1780)
+#define P_DET3D_RO_SPLT_HB                         (volatile unsigned int *)((0x1780  << 2) + 0xff900000)
+//Bit 24,	    RO_Det3D_Split_HB_valid	    U1   horizontal LR split border detected valid signal for top half picture
+//Bit 20:16,	RO_Det3D_Split_HB_pxnum	    U5   number of pixels included for the LR split position estimation for top half picture
+//Bit  9: 0,	RO_Det3D_Split_HB_idxX4	    S10  X4: horizontal pixel shifts of LR split position to the (ColMax/2) for top half picture
+#define   DET3D_RO_SPLT_VL                         (0x1781)
+#define P_DET3D_RO_SPLT_VL                         (volatile unsigned int *)((0x1781  << 2) + 0xff900000)
+//Bit 24,	    RO_Det3D_Split_VL_valid	    U1   horizontal LR split border detected valid signal for top half picture
+//Bit 20:16,	RO_Det3D_Split_VL_pxnum	    U5   number of pixels included for the LR split position estimation for top half picture
+//Bit  9: 0,	RO_Det3D_Split_VL_idxX4	    S10  X4: horizontal pixel shifts of LR split position to the (ColMax/2) for top half picture
+#define   DET3D_RO_SPLT_VR                         (0x1782)
+#define P_DET3D_RO_SPLT_VR                         (volatile unsigned int *)((0x1782  << 2) + 0xff900000)
+//Bit 24   ,	RO_Det3D_Split_VR_valid	    U1   horizontal LR split border detected valid signal for top half picture
+//Bit 20:16,	RO_Det3D_Split_VR_pxnum	    U5   number of pixels included for the LR split position estimation for top half picture
+//Bit  9: 0,	RO_Det3D_Split_VR_idxX4	    S10  X4: horizontal pixel shifts of LR split position to the (ColMax/2) for top half picture
+#define   DET3D_RO_MAT_LUMA_LR                     (0x1783)
+#define P_DET3D_RO_MAT_LUMA_LR                     (volatile unsigned int *)((0x1783  << 2) + 0xff900000)
+//Bit 15:0,	RO_Luma_LR_score	 S2*8  LUMA statistics left right decision score for each band (8bands vertically),
+//                               it can be -1/0/1:-1: most likely not LR symmetric 0: not sure 1: most likely LR symmetric
+//Bit 7:0,	RO_Luma_LR_symtc	 U1*8  Luma statistics left right pure symmetric for each band (8bands vertically),
+//                               it can be 0/1: 0: not sure 1: most likely LR is pure symmetric
+//Bit 4:0,	RO_Luma_LR_sum	     S5  Total score of 8x8 Luma statistics for LR like decision,
+//                               the larger this score, the more confidence that this is a LR 3D video. It is sum of  RO_Luma_LR_score[0~7]
+#define   DET3D_RO_MAT_LUMA_TB                     (0x1784)
+#define P_DET3D_RO_MAT_LUMA_TB                     (volatile unsigned int *)((0x1784  << 2) + 0xff900000)
+//Bit 15:0,	RO_Luma_TB_score	 S2*8  LUMA statistics Top/Bottom decision score for each band (8bands Horizontally),
+//Bit 7:0,	RO_Luma_TB_symtc	 Luma statistics Top/Bottompure symmetric for each band (8bands Horizontally),
+//Bit 4:0,	RO_Luma_TB_sum	     Total score of 8x8 Luma statistics for TB like decision,
+#define   DET3D_RO_MAT_CHRU_LR                     (0x1785)
+#define P_DET3D_RO_MAT_CHRU_LR                     (volatile unsigned int *)((0x1785  << 2) + 0xff900000)
+//Bit 15:0,	RO_ChrU_LR_score	S2*8  LUMA statistics left right decision score for each band (8bands vertically),
+//Bit 7:0,	RO_ChrU_LR_symtc	CHRU statistics left right pure symmetric for each band (8bands vertically),
+//Bit 4:0,	RO_ChrU_LR_sum	    Total score of 8x8 ChrU statistics for LR like decision,
+#define   DET3D_RO_MAT_CHRU_TB                     (0x1786)
+#define P_DET3D_RO_MAT_CHRU_TB                     (volatile unsigned int *)((0x1786  << 2) + 0xff900000)
+//Bit 15:0,	RO_ChrU_TB_score	S2*8  CHRU statistics Top/Bottom decision score for each band (8bands Horizontally)
+//Bit 7:0,	RO_ChrU_TB_symtc	CHRU statistics Top/Bottompure symmetric for each band (8bands Horizontally)
+//Bit 4:0,	RO_ChrU_TB_sum	    Total score of 8x8 ChrU statistics for TB like decision
+#define   DET3D_RO_MAT_CHRV_LR                     (0x1787)
+#define P_DET3D_RO_MAT_CHRV_LR                     (volatile unsigned int *)((0x1787  << 2) + 0xff900000)
+//Bit 15:0,	RO_ChrV_LR_score	S2*8  CHRUstatistics left right decision score for each band (8bands vertically)
+//Bit 7:0,	RO_ChrV_LR_symtc	CHRV statistics left right pure symmetric for each band (8bands vertically)
+//Bit 4:0,	RO_ChrV_LR_sum	    Total score of 8x8 ChrV statistics for LR like decision
+#define   DET3D_RO_MAT_CHRV_TB                     (0x1788)
+#define P_DET3D_RO_MAT_CHRV_TB                     (volatile unsigned int *)((0x1788  << 2) + 0xff900000)
+//Bit 15:0,	RO_ChrV_TB_score	CHRV statistics Top/Bottom decision score for each band (8bands Horizontally)
+//Bit 7:0,	RO_ChrV_TB_symtc	CHRV statistics Top/Bottompure symmetric for each band (8bands Horizontally)
+//Bit 4:0,	RO_ChrV_TB_sum	    Total score of 8x8 ChrV statistics for TB like decision
+#define   DET3D_RO_MAT_HEDG_LR                     (0x1789)
+#define P_DET3D_RO_MAT_HEDG_LR                     (volatile unsigned int *)((0x1789  << 2) + 0xff900000)
+//Bit 15:0,	RO_Hedg_LR_score	Horizontal Edge statistics left right decision score for each band (8bands vertically)
+//Bit 7:0,	RO_Hedg_LR_symtc	Horizontal Edge statistics left right pure symmetric for each band (8bands vertically)
+//Bit 4:0,	RO_Hedg_LR_sum	    Total score of 8x8 Hedg statistics for LR like decision
+#define   DET3D_RO_MAT_HEDG_TB                     (0x178a)
+#define P_DET3D_RO_MAT_HEDG_TB                     (volatile unsigned int *)((0x178a  << 2) + 0xff900000)
+//Bit 15:0,	RO_Hedg_TB_score	Horizontal Edge statistics Top/Bottom decision score for each band (8bands Horizontally)
+//Bit 7:0,	RO_Hedg_TB_symtc	Horizontal Edge statistics Top/Bottompure symmetric for each band (8bands Horizontally)
+//Bit 4:0,	RO_Hedg_TB_sum	    Total score of 8x8 Hedg statistics for TB like decision
+#define   DET3D_RO_MAT_VEDG_LR                     (0x178b)
+#define P_DET3D_RO_MAT_VEDG_LR                     (volatile unsigned int *)((0x178b  << 2) + 0xff900000)
+//Bit 15:0,	RO_Vedg_LR_score	Vertical Edge statistics left right decision score for each band (8bands vertically)
+//Bit 7:0,	RO_Vedg_LR_symtc	Vertical Edge statistics left right pure symmetric for each band (8bands vertically)
+//Bit 4:0,	RO_Vedg_LR_sum	    Total score of 8x8 Vedg statistics for LR like decision
+#define   DET3D_RO_MAT_VEDG_TB                     (0x178c)
+#define P_DET3D_RO_MAT_VEDG_TB                     (volatile unsigned int *)((0x178c  << 2) + 0xff900000)
+//Bit 15:0,	RO_Vedg_TB_score	Vertical Edge statistics Top/Bottom decision score for each band (8bands Horizontally)
+//Bit 7:0,	RO_Vedg_TB_symtc	Vertical Edge statistics Top/Bottompure symmetric for each band (8bands Horizontally)
+//Bit 4:0,	RO_Vedg_TB_sum	    Total score of 8x8 Vedg statistics for TB like decision
+#define   DET3D_RO_MAT_MOTN_LR                     (0x178d)
+#define P_DET3D_RO_MAT_MOTN_LR                     (volatile unsigned int *)((0x178d  << 2) + 0xff900000)
+//Bit 15:0,	RO_Motn_LR_score	Motion statistics left right decision score for each band (8bands vertically)
+//Bit 7:0,	RO_Motn_LR_symtc	Motion statistics left right pure symmetric for each band (8bands vertically)
+//Bit 4:0,	RO_Motn_LR_sum	    Total score of 8x8 Motion statistics for LR like decision
+#define   DET3D_RO_MAT_MOTN_TB                     (0x178e)
+#define P_DET3D_RO_MAT_MOTN_TB                     (volatile unsigned int *)((0x178e  << 2) + 0xff900000)
+//Bit 15:0,	RO_Motn_TB_score	Motion statistics Top/Bottom decision score for each band (8bands Horizontally)
+//Bit 7:0,	RO_Motn_TB_symtc	Motion statistics Top/Bottompure symmetric for each band (8bands Horizontally)
+//Bit 4:0,	RO_Motn_TB_sum	    Total score of 8x8 Motion statistics for TB like decision
+#define   DET3D_RO_FRM_MOTN                        (0x178f)
+#define P_DET3D_RO_FRM_MOTN                        (volatile unsigned int *)((0x178f  << 2) + 0xff900000)
+//Bit 15:0,	RO_Det3D_Frame_Motion	U16  frame based motion value sum for still image decision in FW.
+/// mat ram read enter addr
+#define   DET3D_RAMRD_ADDR_PORT                    (0x179a)
+#define P_DET3D_RAMRD_ADDR_PORT                    (volatile unsigned int *)((0x179a  << 2) + 0xff900000)
+#define   DET3D_RAMRD_DATA_PORT                    (0x179b)
+#define P_DET3D_RAMRD_DATA_PORT                    (volatile unsigned int *)((0x179b  << 2) + 0xff900000)
+//
+// Closing file:  det3d_regs.h
+//
+//   `define DET3D_RO_SPLT_HB            8'h80
+//   //Bit 24,	    RO_Det3D_Split_HB_valid	    U1   horizontal LR split border detected valid signal for top half picture
+//   //Bit 20:16,	RO_Det3D_Split_HB_pxnum	    U5   number of pixels included for the LR split position estimation for top half picture
+//   //Bit  9: 0,	RO_Det3D_Split_HB_idxX4	    S10  X4: horizontal pixel shifts of LR split position to the (ColMax/2) for top half picture
+//   `define DET3D_RO_SPLT_VL            8'h81
+//   //Bit 24,	    RO_Det3D_Split_VL_valid	    U1   horizontal LR split border detected valid signal for top half picture
+//   //Bit 20:16,	RO_Det3D_Split_VL_pxnum	    U5   number of pixels included for the LR split position estimation for top half picture
+//   //Bit  9: 0,	RO_Det3D_Split_VL_idxX4	    S10  X4: horizontal pixel shifts of LR split position to the (ColMax/2) for top half picture
+//   `define DET3D_RO_SPLT_VR            8'h82
+//   //Bit 24   ,	RO_Det3D_Split_VR_valid	    U1   horizontal LR split border detected valid signal for top half picture
+//   //Bit 20:16,	RO_Det3D_Split_VR_pxnum	    U5   number of pixels included for the LR split position estimation for top half picture
+//   //Bit  9: 0,	RO_Det3D_Split_VR_idxX4	    S10  X4: horizontal pixel shifts of LR split position to the (ColMax/2) for top half picture
+//   `define DET3D_RO_MAT_LUMA_LR        8'h83
+//   //Bit 15:0,	RO_Luma_LR_score	 S2*8  LUMA statistics left right decision score for each band (8bands vertically),
+//   //                               it can be -1/0/1:-1: most likely not LR symmetric 0: not sure 1: most likely LR symmetric
+//   //Bit 7:0,	RO_Luma_LR_symtc	 U1*8  Luma statistics left right pure symmetric for each band (8bands vertically),
+//   //                               it can be 0/1: 0: not sure 1: most likely LR is pure symmetric
+//   //Bit 4:0,	RO_Luma_LR_sum	     S5  Total score of 8x8 Luma statistics for LR like decision,
+//   //                               the larger this score, the more confidence that this is a LR 3D video. It is sum of  RO_Luma_LR_score[0~7]
+//   `define DET3D_RO_MAT_LUMA_TB        8'h84
+//   //Bit 15:0,	RO_Luma_TB_score	 S2*8  LUMA statistics Top/Bottom decision score for each band (8bands Horizontally),
+//   //Bit 7:0,	RO_Luma_TB_symtc	 Luma statistics Top/Bottompure symmetric for each band (8bands Horizontally),
+//   //Bit 4:0,	RO_Luma_TB_sum	     Total score of 8x8 Luma statistics for TB like decision,
+//   `define DET3D_RO_MAT_CHRU_LR        8'h85
+//   //Bit 15:0,	RO_ChrU_LR_score	S2*8  LUMA statistics left right decision score for each band (8bands vertically),
+//   //Bit 7:0,	RO_ChrU_LR_symtc	CHRU statistics left right pure symmetric for each band (8bands vertically),
+//   //Bit 4:0,	RO_ChrU_LR_sum	    Total score of 8x8 ChrU statistics for LR like decision,
+//   `define DET3D_RO_MAT_CHRU_TB        8'h86
+//   //Bit 15:0,	RO_ChrU_TB_score	S2*8  CHRU statistics Top/Bottom decision score for each band (8bands Horizontally)
+//   //Bit 7:0,	RO_ChrU_TB_symtc	CHRU statistics Top/Bottompure symmetric for each band (8bands Horizontally)
+//   //Bit 4:0,	RO_ChrU_TB_sum	    Total score of 8x8 ChrU statistics for TB like decision
+//   `define DET3D_RO_MAT_CHRV_LR        8'h87
+//   //Bit 15:0,	RO_ChrV_LR_score	S2*8  CHRUstatistics left right decision score for each band (8bands vertically)
+//   //Bit 7:0,	RO_ChrV_LR_symtc	CHRV statistics left right pure symmetric for each band (8bands vertically)
+//   //Bit 4:0,	RO_ChrV_LR_sum	    Total score of 8x8 ChrV statistics for LR like decision
+//   `define DET3D_RO_MAT_CHRV_TB        8'h88
+//   //Bit 15:0,	RO_ChrV_TB_score	CHRV statistics Top/Bottom decision score for each band (8bands Horizontally)
+//   //Bit 7:0,	RO_ChrV_TB_symtc	CHRV statistics Top/Bottompure symmetric for each band (8bands Horizontally)
+//   //Bit 4:0,	RO_ChrV_TB_sum	    Total score of 8x8 ChrV statistics for TB like decision
+//   `define DET3D_RO_MAT_HEDG_LR        8'h89
+//   //Bit 15:0,	RO_Hedg_LR_score	Horizontal Edge statistics left right decision score for each band (8bands vertically)
+//   //Bit 7:0,	RO_Hedg_LR_symtc	Horizontal Edge statistics left right pure symmetric for each band (8bands vertically)
+//   //Bit 4:0,	RO_Hedg_LR_sum	    Total score of 8x8 Hedg statistics for LR like decision
+//   `define DET3D_RO_MAT_HEDG_TB        8'h8a
+//   //Bit 15:0,	RO_Hedg_TB_score	Horizontal Edge statistics Top/Bottom decision score for each band (8bands Horizontally)
+//   //Bit 7:0,	RO_Hedg_TB_symtc	Horizontal Edge statistics Top/Bottompure symmetric for each band (8bands Horizontally)
+//   //Bit 4:0,	RO_Hedg_TB_sum	    Total score of 8x8 Hedg statistics for TB like decision
+//   `define DET3D_RO_MAT_VEDG_LR        8'h8b
+//   //Bit 15:0,	RO_Vedg_LR_score	Vertical Edge statistics left right decision score for each band (8bands vertically)
+//   //Bit 7:0,	RO_Vedg_LR_symtc	Vertical Edge statistics left right pure symmetric for each band (8bands vertically)
+//   //Bit 4:0,	RO_Vedg_LR_sum	    Total score of 8x8 Vedg statistics for LR like decision
+//   `define DET3D_RO_MAT_VEDG_TB        8'h8c
+//   //Bit 15:0,	RO_Vedg_TB_score	Vertical Edge statistics Top/Bottom decision score for each band (8bands Horizontally)
+//   //Bit 7:0,	RO_Vedg_TB_symtc	Vertical Edge statistics Top/Bottompure symmetric for each band (8bands Horizontally)
+//   //Bit 4:0,	RO_Vedg_TB_sum	    Total score of 8x8 Vedg statistics for TB like decision
+//   `define DET3D_RO_MAT_MOTN_LR        8'h8d
+//   //Bit 15:0,	RO_Motn_LR_score	Motion statistics left right decision score for each band (8bands vertically)
+//   //Bit 7:0,	RO_Motn_LR_symtc	Motion statistics left right pure symmetric for each band (8bands vertically)
+//   //Bit 4:0,	RO_Motn_LR_sum	    Total score of 8x8 Motion statistics for LR like decision
+//   `define DET3D_RO_MAT_MOTN_TB        8'h8e
+//   //Bit 15:0,	RO_Motn_TB_score	Motion statistics Top/Bottom decision score for each band (8bands Horizontally)
+//   //Bit 7:0,	RO_Motn_TB_symtc	Motion statistics Top/Bottompure symmetric for each band (8bands Horizontally)
+//   //Bit 4:0,	RO_Motn_TB_sum	    Total score of 8x8 Motion statistics for TB like decision
+//   `define DET3D_RO_FRM_MOTN           8'h8f
+//   //Bit 15:0,	RO_Det3D_Frame_Motion	U16  frame based motion value sum for still image decision in FW.
+#define   DI_EI_CTRL10                             (0x1793)
+#define P_DI_EI_CTRL10                             (volatile unsigned int *)((0x1793  << 2) + 0xff900000)
+//bit 31:28,   reg_ei_caldrt_hstrrgchk_drtth
+//bit 27:24,   reg_ei_caldrt_hstrrgchk_frcverthrd
+//bit 23:20,   reg_ei_caldrt_hstrrgchk_mg
+//bit 19,      reg_ei_caldrt_hstrrgchk_1sidnul
+//bit 18,      reg_ei_caldrt_hstrrgchk_excpcnf
+//bit 17:16,   reg_ei_caldrt_hstrrgchk_ws
+//bit 15,      reg_ei_caldrt_hstrrgchk_en
+//bit 14:13,   reg_ei_caldrt_hpncheck_mode
+//bit 12,      reg_ei_caldrt_hpncheck_mute
+//bit 11:9,    reg_ei_caldrt_hcnfcheck_mg2
+//bit 8:6,     reg_ei_caldrt_hcnfcheck_mg1
+//bit 5:4,     reg_ei_caldrt_hcnfcheck_mode
+//bit 3:0,     reg_ei_caldrt_hcnfcheck_mg2
+#define   DI_NR_1_CTRL0                            (0x1794)
+#define P_DI_NR_1_CTRL0                            (volatile unsigned int *)((0x1794  << 2) + 0xff900000)
+#define   DI_NR_1_CTRL1                            (0x1795)
+#define P_DI_NR_1_CTRL1                            (volatile unsigned int *)((0x1795  << 2) + 0xff900000)
+#define   DI_NR_1_CTRL2                            (0x1796)
+#define P_DI_NR_1_CTRL2                            (volatile unsigned int *)((0x1796  << 2) + 0xff900000)
+#define   DI_NR_1_CTRL3                            (0x1797)
+#define P_DI_NR_1_CTRL3                            (volatile unsigned int *)((0x1797  << 2) + 0xff900000)
+#define   DI_EI_XWIN0                              (0x1798)
+#define P_DI_EI_XWIN0                              (volatile unsigned int *)((0x1798  << 2) + 0xff900000)
+//bit 27:16,   ei_xend0
+//bit 11:0,    ei_xstart0
+#define   DI_EI_XWIN1                              (0x1799)
+#define P_DI_EI_XWIN1                              (volatile unsigned int *)((0x1799  << 2) + 0xff900000)
+/// mat ram read enter addr
+//   `define DET3D_RAMRD_ADDR_PORT       8'h9a
+//   `define DET3D_RAMRD_DATA_PORT       8'h9b
+#define   NR2_CFR_PARA_CFG0                        (0x179c)
+#define P_NR2_CFR_PARA_CFG0                        (volatile unsigned int *)((0x179c  << 2) + 0xff900000)
+//Bit 8,	reg_CFR_CurDif_luma_mode	Current Field Top/Bot line Luma difference calculation mode
+//Bit 7:6,	reg_MACFR_frm_phase	        U2  This will be a field based phase register that need to be set by FW phase to phase:
+//                                      this will be calculated based on dbdr_phase of the specific line of this frame.
+//                                      u1: dbdr_phase=1, center line is DB in current line;  dbdr_phase=2, center line is Dr in current line;
+//Bit 5:4,	reg_CFR_CurDif_tran_mode	U2  Current Field Top/Bot line Luma/Chroma transition level calculation mode,
+//Bit 3:2,	reg_CFR_alpha_mode	        U2  Alpha selection mode for CFR block from curAlp and motAlp i.e. 0: motAlp; 1: (motAlp+curAlp)/2; 2: min(motAlp,curAlp); 3: max(motAlp,curAlp);
+//Bit 1:0,	reg_CFR_Motion_Luma_mode	U2  LumaMotion Calculation mode for MA-CFR. 0: top/bot Lumma motion;   1: middle Luma Motion 2: top/bot + middle motion; 3: max(top/tot motion, middle motion)
+#define   NR2_CFR_PARA_CFG1                        (0x179d)
+#define P_NR2_CFR_PARA_CFG1                        (volatile unsigned int *)((0x179d  << 2) + 0xff900000)
+//Bit 23:16,	reg_CFR_alpha_gain	    gain to map muxed curAlp and motAlp to alpha that will be used for final blending.
+//Bit 15: 8,	reg_CFR_Motion_ofst	    Offset to Motion to calculate the motAlp, e,g:motAlp= reg_CFR_Motion_ofst- Motion;This register can be seen as the level of motion that we consider it at moving.
+//Bit  7: 0,	reg_CFR_CurDif_gain	    gain to CurDif to map to alpha, normalized to 32;
+//// DET 3D REG DEFINE END ////
+#define   DI_EI_CTRL11                             (0x179e)
+#define P_DI_EI_CTRL11                             (volatile unsigned int *)((0x179e  << 2) + 0xff900000)
+//bit 30:29,   reg_ei_amb_detect_mode
+//bit 28:24,   reg_ei_amb_detect_winth
+//bit 23:21,   reg_ei_amb_decide_rppth
+//bit 20:19,   reg_ei_retime_lastmappncnfltchk_drtth
+//bit 18:16,   reg_ei_retime_lastmappncnfltchk_mode
+//bit 15:14,   reg_ei_retime_lastmapvertfrcchk_mode
+//bit 13:12,   reg_ei_retime_lastvertfrcchk_mode
+//bit 11:8,    reg_ei_retime_lastpnchk_drtth
+//bit 6,       reg_ei_retime_lastpnchk_en
+//bit 5:4,     reg_ei_retime_mode
+//bit 3,       reg_ei_retime_last_en
+//bit 2,       reg_ei_retime_ab_en
+//bit 1,       reg_ei_caldrt_hstrvertfrcchk_en
+//bit 0,       reg_ei_caldrt_hstrrgchk_mode
+#define   DI_EI_CTRL12                             (0x179f)
+#define P_DI_EI_CTRL12                             (volatile unsigned int *)((0x179f  << 2) + 0xff900000)
+//bit 31:28,   reg_ei_drtdelay2_lmt
+//bit 27:26,   reg_ei_drtdelay2_notver_lrwin
+//bit 25:24,   reg_ei_drtdelay_mode
+//bit 23,      reg_ei_drtdelay2_mode
+//bit 22:20,   reg_ei_assign_xla_signm0th
+//bit 19,      reg_ei_assign_pkbiasvert_en
+//bit 18,      reg_ei_assign_xla_en
+//bit 17:16,   reg_ei_assign_xla_mode
+//bit 15:12,   reg_ei_assign_nlfilter_magin
+//bit 11:8,    reg_ei_localsearch_maxrange
+//bit 7:4,     reg_ei_xla_drtth
+//bit 3:0,     reg_ei_flatmsad_thrd
+#define   DI_CONTWR_X                              (0x17a0)
+#define P_DI_CONTWR_X                              (volatile unsigned int *)((0x17a0  << 2) + 0xff900000)
+#define   DI_CONTWR_Y                              (0x17a1)
+#define P_DI_CONTWR_Y                              (volatile unsigned int *)((0x17a1  << 2) + 0xff900000)
+#define   DI_CONTWR_CTRL                           (0x17a2)
+#define P_DI_CONTWR_CTRL                           (volatile unsigned int *)((0x17a2  << 2) + 0xff900000)
+#define   DI_CONTPRD_X                             (0x17a3)
+#define P_DI_CONTPRD_X                             (volatile unsigned int *)((0x17a3  << 2) + 0xff900000)
+#define   DI_CONTPRD_Y                             (0x17a4)
+#define P_DI_CONTPRD_Y                             (volatile unsigned int *)((0x17a4  << 2) + 0xff900000)
+#define   DI_CONTP2RD_X                            (0x17a5)
+#define P_DI_CONTP2RD_X                            (volatile unsigned int *)((0x17a5  << 2) + 0xff900000)
+#define   DI_CONTP2RD_Y                            (0x17a6)
+#define P_DI_CONTP2RD_Y                            (volatile unsigned int *)((0x17a6  << 2) + 0xff900000)
+#define   DI_CONTRD_CTRL                           (0x17a7)
+#define P_DI_CONTRD_CTRL                           (volatile unsigned int *)((0x17a7  << 2) + 0xff900000)
+#define   DI_EI_CTRL13                             (0x17a8)
+#define P_DI_EI_CTRL13                             (volatile unsigned int *)((0x17a8  << 2) + 0xff900000)
+//bit 27:24,   reg_ei_int_drt2x_chrdrt_limit
+//bit 23:20,   reg_ei_int_drt16x_core
+//bit 19:16,   reg_ei_int_drtdelay2_notver_cancv
+//bit 15:8,    reg_ei_int_drtdelay2_notver_sadth
+//bit 7:0,     reg_ei_int_drtdelay2_vlddrt_sadth
+#define   DI_MTN_1_CTRL6                           (0x17a9)
+#define P_DI_MTN_1_CTRL6                           (volatile unsigned int *)((0x17a9  << 2) + 0xff900000)
+//bit 31:24,   mtn_m1b_extnd
+//bit 23:16,   mtn_m1b_errod
+//bit 15: 8,   mtn_core_ykinter
+//bit  7: 0,   mtn_core_ckinter
+#define   DI_MTN_1_CTRL7                           (0x17aa)
+#define P_DI_MTN_1_CTRL7                           (volatile unsigned int *)((0x17aa  << 2) + 0xff900000)
+//bit 31:24,   mtn_core_mxcmby
+//bit 23:16,   mtn_core_mxcmbc
+//bit 15: 8,   mtn_core_y
+//bit  7: 0,   mtn_core_c
+#define   DI_MTN_1_CTRL8                           (0x17ab)
+#define P_DI_MTN_1_CTRL8                           (volatile unsigned int *)((0x17ab  << 2) + 0xff900000)
+//bit 31:24,   mtn_fcore_ykinter
+//bit 23:16,   mtn_fcore_ckinter
+//bit 15: 8,   mtn_fcore_ykintra
+//bit  7: 0,   mtn_fcore_ckintra
+#define   DI_MTN_1_CTRL9                           (0x17ac)
+#define P_DI_MTN_1_CTRL9                           (volatile unsigned int *)((0x17ac  << 2) + 0xff900000)
+//bit 31:24,   mtn_fcore_2yrate
+//bit 23:16,   mtn_fcore_2crate
+//bit 15: 8,   mtn_fcore_y
+//bit  7: 0,   mtn_fcore_c
+#define   DI_MTN_1_CTRL10                          (0x17ad)
+#define P_DI_MTN_1_CTRL10                          (volatile unsigned int *)((0x17ad  << 2) + 0xff900000)
+//bit 27:24,   mtn_motfld0
+//bit 19:16,   mtn_stlfld0
+//bit 11: 8,   mtn_motfld1
+//bit  3: 0,   mtn_stlfld1
+#define   DI_MTN_1_CTRL11                          (0x17ae)
+#define P_DI_MTN_1_CTRL11                          (volatile unsigned int *)((0x17ae  << 2) + 0xff900000)
+//bit 27:24,   mtn_smotevn
+//bit 20:16,   mtn_smotodd
+//bit 11: 8,   mtn_sstlevn
+//bit  4: 0,   mtn_sstlodd
+#define   DI_MTN_1_CTRL12                          (0x17af)
+#define P_DI_MTN_1_CTRL12                          (volatile unsigned int *)((0x17af  << 2) + 0xff900000)
+//bit 31:24,   mtn_mgain
+//bit 17:16,   mtn_mmode
+//bit 15: 8,   mtn_sthrd
+//bit  4: 0,   mtn_sgain
+#define   DI_NRWR_X                                (0x17c0)
+#define P_DI_NRWR_X                                (volatile unsigned int *)((0x17c0  << 2) + 0xff900000)
+#define   DI_NRWR_Y                                (0x17c1)
+#define P_DI_NRWR_Y                                (volatile unsigned int *)((0x17c1  << 2) + 0xff900000)
+//bit 31:30				nrwr_words_lim
+//bit 29				nrwr_rev_y
+//bit 28:16				nrwr_start_y
+//bit 15				nrwr_ext_en
+//bit 12:0				nrwr_end_y
+#define   DI_NRWR_CTRL                             (0x17c2)
+#define P_DI_NRWR_CTRL                             (volatile unsigned int *)((0x17c2  << 2) + 0xff900000)
+//bit 31				pending_ddr_wrrsp_diwr
+//bit 30				nrwr_reg_swap
+//bit 29:26				nrwr_burst_lim
+//bit 25				nrwr_canvas_syncen
+//bit 24				nrwr_no_clk_gate
+//bit 23:22				nrwr_rgb_mode  0:422 to one canvas;1:4:4:4 to one canvas;
+//bit 21:20				nrwr_hconv_mode
+//bit 19:18				nrwr_vconv_mode
+//bit 17				nrwr_swap_cbcr
+//bit 16				nrwr_urgent
+//bit 15:8				nrwr_canvas_index_chroma
+//bit 7:0				nrwr_canvas_index_luma
+#define   DI_MTNWR_X                               (0x17c3)
+#define P_DI_MTNWR_X                               (volatile unsigned int *)((0x17c3  << 2) + 0xff900000)
+#define   DI_MTNWR_Y                               (0x17c4)
+#define P_DI_MTNWR_Y                               (volatile unsigned int *)((0x17c4  << 2) + 0xff900000)
+#define   DI_MTNWR_CTRL                            (0x17c5)
+#define P_DI_MTNWR_CTRL                            (volatile unsigned int *)((0x17c5  << 2) + 0xff900000)
+#define   DI_DIWR_X                                (0x17c6)
+#define P_DI_DIWR_X                                (volatile unsigned int *)((0x17c6  << 2) + 0xff900000)
+#define   DI_DIWR_Y                                (0x17c7)
+#define P_DI_DIWR_Y                                (volatile unsigned int *)((0x17c7  << 2) + 0xff900000)
+//bit 31:30				diwr_words_lim
+//bit 29				diwr_rev_y
+//bit 28:16				diwr_start_y
+//bit 15				diwr_ext_en
+//bit 12:0				diwr_end_y
+#define   DI_DIWR_CTRL                             (0x17c8)
+#define P_DI_DIWR_CTRL                             (volatile unsigned int *)((0x17c8  << 2) + 0xff900000)
+//bit 31				pending_ddr_wrrsp_diwr
+//bit 30				diwr_reg_swap
+//bit 29:26				diwr_burst_lim
+//bit 25				diwr_canvas_syncen
+//bit 24				diwr_no_clk_gate
+//bit 23:22				diwr_rgb_mode  0:422 to one canvas;1:4:4:4 to one canvas;
+//bit 21:20				diwr_hconv_mode
+//bit 19:18				diwr_vconv_mode
+//bit 17				diwr_swap_cbcr
+//bit 16				diwr_urgent
+//bit 15:8				diwr_canvas_index_chroma
+//bit 7:0				diwr_canvas_index_luma
+//`define DI_MTNCRD_X               8'hc9
+//`define DI_MTNCRD_Y               8'hca
+#define   DI_MTNPRD_X                              (0x17cb)
+#define P_DI_MTNPRD_X                              (volatile unsigned int *)((0x17cb  << 2) + 0xff900000)
+#define   DI_MTNPRD_Y                              (0x17cc)
+#define P_DI_MTNPRD_Y                              (volatile unsigned int *)((0x17cc  << 2) + 0xff900000)
+#define   DI_MTNRD_CTRL                            (0x17cd)
+#define P_DI_MTNRD_CTRL                            (volatile unsigned int *)((0x17cd  << 2) + 0xff900000)
+#define   DI_INP_GEN_REG                           (0x17ce)
+#define P_DI_INP_GEN_REG                           (volatile unsigned int *)((0x17ce  << 2) + 0xff900000)
+#define   DI_INP_CANVAS0                           (0x17cf)
+#define P_DI_INP_CANVAS0                           (volatile unsigned int *)((0x17cf  << 2) + 0xff900000)
+#define   DI_INP_LUMA_X0                           (0x17d0)
+#define P_DI_INP_LUMA_X0                           (volatile unsigned int *)((0x17d0  << 2) + 0xff900000)
+#define   DI_INP_LUMA_Y0                           (0x17d1)
+#define P_DI_INP_LUMA_Y0                           (volatile unsigned int *)((0x17d1  << 2) + 0xff900000)
+#define   DI_INP_CHROMA_X0                         (0x17d2)
+#define P_DI_INP_CHROMA_X0                         (volatile unsigned int *)((0x17d2  << 2) + 0xff900000)
+#define   DI_INP_CHROMA_Y0                         (0x17d3)
+#define P_DI_INP_CHROMA_Y0                         (volatile unsigned int *)((0x17d3  << 2) + 0xff900000)
+#define   DI_INP_RPT_LOOP                          (0x17d4)
+#define P_DI_INP_RPT_LOOP                          (volatile unsigned int *)((0x17d4  << 2) + 0xff900000)
+#define   DI_INP_LUMA0_RPT_PAT                     (0x17d5)
+#define P_DI_INP_LUMA0_RPT_PAT                     (volatile unsigned int *)((0x17d5  << 2) + 0xff900000)
+#define   DI_INP_CHROMA0_RPT_PAT                   (0x17d6)
+#define P_DI_INP_CHROMA0_RPT_PAT                   (volatile unsigned int *)((0x17d6  << 2) + 0xff900000)
+#define   DI_INP_DUMMY_PIXEL                       (0x17d7)
+#define P_DI_INP_DUMMY_PIXEL                       (volatile unsigned int *)((0x17d7  << 2) + 0xff900000)
+#define   DI_INP_LUMA_FIFO_SIZE                    (0x17d8)
+#define P_DI_INP_LUMA_FIFO_SIZE                    (volatile unsigned int *)((0x17d8  << 2) + 0xff900000)
+#define   DI_INP_RANGE_MAP_Y                       (0x17ba)
+#define P_DI_INP_RANGE_MAP_Y                       (volatile unsigned int *)((0x17ba  << 2) + 0xff900000)
+#define   DI_INP_RANGE_MAP_CB                      (0x17bb)
+#define P_DI_INP_RANGE_MAP_CB                      (volatile unsigned int *)((0x17bb  << 2) + 0xff900000)
+#define   DI_INP_RANGE_MAP_CR                      (0x17bc)
+#define P_DI_INP_RANGE_MAP_CR                      (volatile unsigned int *)((0x17bc  << 2) + 0xff900000)
+#define   DI_INP_GEN_REG2                          (0x1791)
+#define P_DI_INP_GEN_REG2                          (volatile unsigned int *)((0x1791  << 2) + 0xff900000)
+#define   DI_INP_FMT_CTRL                          (0x17d9)
+#define P_DI_INP_FMT_CTRL                          (volatile unsigned int *)((0x17d9  << 2) + 0xff900000)
+#define   DI_INP_FMT_W                             (0x17da)
+#define P_DI_INP_FMT_W                             (volatile unsigned int *)((0x17da  << 2) + 0xff900000)
+#define   DI_MEM_GEN_REG                           (0x17db)
+#define P_DI_MEM_GEN_REG                           (volatile unsigned int *)((0x17db  << 2) + 0xff900000)
+#define   DI_MEM_CANVAS0                           (0x17dc)
+#define P_DI_MEM_CANVAS0                           (volatile unsigned int *)((0x17dc  << 2) + 0xff900000)
+#define   DI_MEM_LUMA_X0                           (0x17dd)
+#define P_DI_MEM_LUMA_X0                           (volatile unsigned int *)((0x17dd  << 2) + 0xff900000)
+#define   DI_MEM_LUMA_Y0                           (0x17de)
+#define P_DI_MEM_LUMA_Y0                           (volatile unsigned int *)((0x17de  << 2) + 0xff900000)
+#define   DI_MEM_CHROMA_X0                         (0x17df)
+#define P_DI_MEM_CHROMA_X0                         (volatile unsigned int *)((0x17df  << 2) + 0xff900000)
+#define   DI_MEM_CHROMA_Y0                         (0x17e0)
+#define P_DI_MEM_CHROMA_Y0                         (volatile unsigned int *)((0x17e0  << 2) + 0xff900000)
+#define   DI_MEM_RPT_LOOP                          (0x17e1)
+#define P_DI_MEM_RPT_LOOP                          (volatile unsigned int *)((0x17e1  << 2) + 0xff900000)
+#define   DI_MEM_LUMA0_RPT_PAT                     (0x17e2)
+#define P_DI_MEM_LUMA0_RPT_PAT                     (volatile unsigned int *)((0x17e2  << 2) + 0xff900000)
+#define   DI_MEM_CHROMA0_RPT_PAT                   (0x17e3)
+#define P_DI_MEM_CHROMA0_RPT_PAT                   (volatile unsigned int *)((0x17e3  << 2) + 0xff900000)
+#define   DI_MEM_DUMMY_PIXEL                       (0x17e4)
+#define P_DI_MEM_DUMMY_PIXEL                       (volatile unsigned int *)((0x17e4  << 2) + 0xff900000)
+#define   DI_MEM_LUMA_FIFO_SIZE                    (0x17e5)
+#define P_DI_MEM_LUMA_FIFO_SIZE                    (volatile unsigned int *)((0x17e5  << 2) + 0xff900000)
+#define   DI_MEM_RANGE_MAP_Y                       (0x17bd)
+#define P_DI_MEM_RANGE_MAP_Y                       (volatile unsigned int *)((0x17bd  << 2) + 0xff900000)
+#define   DI_MEM_RANGE_MAP_CB                      (0x17be)
+#define P_DI_MEM_RANGE_MAP_CB                      (volatile unsigned int *)((0x17be  << 2) + 0xff900000)
+#define   DI_MEM_RANGE_MAP_CR                      (0x17bf)
+#define P_DI_MEM_RANGE_MAP_CR                      (volatile unsigned int *)((0x17bf  << 2) + 0xff900000)
+#define   DI_MEM_GEN_REG2                          (0x1792)
+#define P_DI_MEM_GEN_REG2                          (volatile unsigned int *)((0x1792  << 2) + 0xff900000)
+#define   DI_MEM_FMT_CTRL                          (0x17e6)
+#define P_DI_MEM_FMT_CTRL                          (volatile unsigned int *)((0x17e6  << 2) + 0xff900000)
+#define   DI_MEM_FMT_W                             (0x17e7)
+#define P_DI_MEM_FMT_W                             (volatile unsigned int *)((0x17e7  << 2) + 0xff900000)
+#define   DI_IF1_GEN_REG                           (0x17e8)
+#define P_DI_IF1_GEN_REG                           (volatile unsigned int *)((0x17e8  << 2) + 0xff900000)
+#define   DI_IF1_CANVAS0                           (0x17e9)
+#define P_DI_IF1_CANVAS0                           (volatile unsigned int *)((0x17e9  << 2) + 0xff900000)
+#define   DI_IF1_LUMA_X0                           (0x17ea)
+#define P_DI_IF1_LUMA_X0                           (volatile unsigned int *)((0x17ea  << 2) + 0xff900000)
+#define   DI_IF1_LUMA_Y0                           (0x17eb)
+#define P_DI_IF1_LUMA_Y0                           (volatile unsigned int *)((0x17eb  << 2) + 0xff900000)
+#define   DI_IF1_CHROMA_X0                         (0x17ec)
+#define P_DI_IF1_CHROMA_X0                         (volatile unsigned int *)((0x17ec  << 2) + 0xff900000)
+#define   DI_IF1_CHROMA_Y0                         (0x17ed)
+#define P_DI_IF1_CHROMA_Y0                         (volatile unsigned int *)((0x17ed  << 2) + 0xff900000)
+#define   DI_IF1_RPT_LOOP                          (0x17ee)
+#define P_DI_IF1_RPT_LOOP                          (volatile unsigned int *)((0x17ee  << 2) + 0xff900000)
+#define   DI_IF1_LUMA0_RPT_PAT                     (0x17ef)
+#define P_DI_IF1_LUMA0_RPT_PAT                     (volatile unsigned int *)((0x17ef  << 2) + 0xff900000)
+#define   DI_IF1_CHROMA0_RPT_PAT                   (0x17f0)
+#define P_DI_IF1_CHROMA0_RPT_PAT                   (volatile unsigned int *)((0x17f0  << 2) + 0xff900000)
+#define   DI_IF1_DUMMY_PIXEL                       (0x17f1)
+#define P_DI_IF1_DUMMY_PIXEL                       (volatile unsigned int *)((0x17f1  << 2) + 0xff900000)
+#define   DI_IF1_LUMA_FIFO_SIZE                    (0x17f2)
+#define P_DI_IF1_LUMA_FIFO_SIZE                    (volatile unsigned int *)((0x17f2  << 2) + 0xff900000)
+#define   DI_IF1_RANGE_MAP_Y                       (0x17fc)
+#define P_DI_IF1_RANGE_MAP_Y                       (volatile unsigned int *)((0x17fc  << 2) + 0xff900000)
+#define   DI_IF1_RANGE_MAP_CB                      (0x17fd)
+#define P_DI_IF1_RANGE_MAP_CB                      (volatile unsigned int *)((0x17fd  << 2) + 0xff900000)
+#define   DI_IF1_RANGE_MAP_CR                      (0x17fe)
+#define P_DI_IF1_RANGE_MAP_CR                      (volatile unsigned int *)((0x17fe  << 2) + 0xff900000)
+#define   DI_IF1_GEN_REG2                          (0x1790)
+#define P_DI_IF1_GEN_REG2                          (volatile unsigned int *)((0x1790  << 2) + 0xff900000)
+#define   DI_IF1_FMT_CTRL                          (0x17f3)
+#define P_DI_IF1_FMT_CTRL                          (volatile unsigned int *)((0x17f3  << 2) + 0xff900000)
+#define   DI_IF1_FMT_W                             (0x17f4)
+#define P_DI_IF1_FMT_W                             (volatile unsigned int *)((0x17f4  << 2) + 0xff900000)
+#define   DI_CHAN2_GEN_REG                         (0x17f5)
+#define P_DI_CHAN2_GEN_REG                         (volatile unsigned int *)((0x17f5  << 2) + 0xff900000)
+#define   DI_CHAN2_CANVAS0                         (0x17f6)
+#define P_DI_CHAN2_CANVAS0                         (volatile unsigned int *)((0x17f6  << 2) + 0xff900000)
+#define   DI_CHAN2_LUMA_X0                         (0x17f7)
+#define P_DI_CHAN2_LUMA_X0                         (volatile unsigned int *)((0x17f7  << 2) + 0xff900000)
+#define   DI_CHAN2_LUMA_Y0                         (0x17f8)
+#define P_DI_CHAN2_LUMA_Y0                         (volatile unsigned int *)((0x17f8  << 2) + 0xff900000)
+#define   DI_CHAN2_CHROMA_X0                       (0x17f9)
+#define P_DI_CHAN2_CHROMA_X0                       (volatile unsigned int *)((0x17f9  << 2) + 0xff900000)
+#define   DI_CHAN2_CHROMA_Y0                       (0x17fa)
+#define P_DI_CHAN2_CHROMA_Y0                       (volatile unsigned int *)((0x17fa  << 2) + 0xff900000)
+#define   DI_CHAN2_RPT_LOOP                        (0x17fb)
+#define P_DI_CHAN2_RPT_LOOP                        (volatile unsigned int *)((0x17fb  << 2) + 0xff900000)
+#define   DI_CHAN2_LUMA0_RPT_PAT                   (0x17b0)
+#define P_DI_CHAN2_LUMA0_RPT_PAT                   (volatile unsigned int *)((0x17b0  << 2) + 0xff900000)
+#define   DI_CHAN2_CHROMA0_RPT_PAT                 (0x17b1)
+#define P_DI_CHAN2_CHROMA0_RPT_PAT                 (volatile unsigned int *)((0x17b1  << 2) + 0xff900000)
+#define   DI_CHAN2_DUMMY_PIXEL                     (0x17b2)
+#define P_DI_CHAN2_DUMMY_PIXEL                     (volatile unsigned int *)((0x17b2  << 2) + 0xff900000)
+#define   DI_CHAN2_LUMA_FIFO_SIZE                  (0x17b3)
+#define P_DI_CHAN2_LUMA_FIFO_SIZE                  (volatile unsigned int *)((0x17b3  << 2) + 0xff900000)
+#define   DI_CHAN2_RANGE_MAP_Y                     (0x17b4)
+#define P_DI_CHAN2_RANGE_MAP_Y                     (volatile unsigned int *)((0x17b4  << 2) + 0xff900000)
+#define   DI_CHAN2_RANGE_MAP_CB                    (0x17b5)
+#define P_DI_CHAN2_RANGE_MAP_CB                    (volatile unsigned int *)((0x17b5  << 2) + 0xff900000)
+#define   DI_CHAN2_RANGE_MAP_CR                    (0x17b6)
+#define P_DI_CHAN2_RANGE_MAP_CR                    (volatile unsigned int *)((0x17b6  << 2) + 0xff900000)
+#define   DI_CHAN2_GEN_REG2                        (0x17b7)
+#define P_DI_CHAN2_GEN_REG2                        (volatile unsigned int *)((0x17b7  << 2) + 0xff900000)
+#define   DI_CHAN2_FMT_CTRL                        (0x17b8)
+#define P_DI_CHAN2_FMT_CTRL                        (volatile unsigned int *)((0x17b8  << 2) + 0xff900000)
+#define   DI_CHAN2_FMT_W                           (0x17b9)
+#define P_DI_CHAN2_FMT_W                           (volatile unsigned int *)((0x17b9  << 2) + 0xff900000)
+//
+#define DOLBY_PATH_CTRL                            0x1a0c
+#define OSD_PATH_MISC_CTRL                         0x1a0e
+#define MALI_AFBCD_TOP_CTRL                        0x1a0f
+
+#define VPP_VD2_HDR_IN_SIZE                        0x1df0
+#define VPP_OSD1_IN_SIZE                           0x1df1
+#define VPP_GCLK_CTRL2                             0x1df2
+#define VD2_PPS_DUMMY_DATA                         0x1df4
+#define VPP_OSD1_BLD_H_SCOPE                       0x1df5
+#define VPP_OSD1_BLD_V_SCOPE                       0x1df6
+#define VPP_OSD2_BLD_H_SCOPE                       0x1df7
+#define VPP_OSD2_BLD_V_SCOPE                       0x1df8
+#define VPP_WRBAK_CTRL                             0x1df9
+#define VPP_SLEEP_CTRL                             0x1dfa
+#define VD1_BLEND_SRC_CTRL                         0x1dfb
+#define VD2_BLEND_SRC_CTRL                         0x1dfc
+#define OSD1_BLEND_SRC_CTRL                        0x1dfd
+#define OSD2_BLEND_SRC_CTRL                        0x1dfe
+
+#define VIU_OSD_BLEND_CTRL                         0x39b0
+#define VIU_OSD_BLEND_CTRL1                        0x39c0
+#define VIU_OSD_BLEND_DIN0_SCOPE_H                 0x39b1
+#define VIU_OSD_BLEND_DIN0_SCOPE_V                 0x39b2
+#define VIU_OSD_BLEND_DIN1_SCOPE_H                 0x39b3
+#define VIU_OSD_BLEND_DIN1_SCOPE_V                 0x39b4
+#define VIU_OSD_BLEND_DIN2_SCOPE_H                 0x39b5
+#define VIU_OSD_BLEND_DIN2_SCOPE_V                 0x39b6
+#define VIU_OSD_BLEND_DIN3_SCOPE_H                 0x39b7
+#define VIU_OSD_BLEND_DIN3_SCOPE_V                 0x39b8
+#define VIU_OSD_BLEND_DUMMY_DATA0                  0x39b9
+#define VIU_OSD_BLEND_DUMMY_ALPHA                  0x39ba
+#define VIU_OSD_BLEND_BLEND0_SIZE                  0x39bb
+#define VIU_OSD_BLEND_BLEND1_SIZE                  0x39bc
+#define VIU_OSD_BLEND_RO_CURRENT_XY                0x39bf
+#define VPP_POST_BLEND_BLEND_DUMMY_DATA            0x3968
+#define VPP_POST_BLEND_DUMMY_ALPHA                 0x3969
+
+
+#define VPP_POST2_MATRIX_COEF00_01                 0x39a0
+#define VPP_POST2_MATRIX_COEF02_10                 0x39a1
+#define VPP_POST2_MATRIX_COEF11_12                 0x39a2
+#define VPP_POST2_MATRIX_COEF20_21                 0x39a3
+#define VPP_POST2_MATRIX_COEF22                    0x39a4
+#define VPP_POST2_MATRIX_COEF13_14                 0x39a5
+#define VPP_POST2_MATRIX_COEF23_24                 0x39a6
+#define VPP_POST2_MATRIX_COEF15_25                 0x39a7
+#define VPP_POST2_MATRIX_CLIP                      0x39a8
+#define VPP_POST2_MATRIX_OFFSET0_1                 0x39a9
+#define VPP_POST2_MATRIX_OFFSET2                   0x39aa
+#define VPP_POST2_MATRIX_PRE_OFFSET0_1             0x39ab
+#define VPP_POST2_MATRIX_PRE_OFFSET2               0x39ac
+#define VPP_POST2_MATRIX_EN_CTRL                   0x39ad
+
+#define VPP_WRAP_OSD1_MATRIX_COEF00_01             0x3d60
+#define VPP_WRAP_OSD1_MATRIX_COEF02_10             0x3d61
+#define VPP_WRAP_OSD1_MATRIX_COEF11_12             0x3d62
+#define VPP_WRAP_OSD1_MATRIX_COEF20_21             0x3d63
+#define VPP_WRAP_OSD1_MATRIX_COEF22                0x3d64
+#define VPP_WRAP_OSD1_MATRIX_COEF13_14             0x3d65
+#define VPP_WRAP_OSD1_MATRIX_COEF23_24             0x3d66
+#define VPP_WRAP_OSD1_MATRIX_COEF15_25             0x3d67
+#define VPP_WRAP_OSD1_MATRIX_CLIP                  0x3d68
+#define VPP_WRAP_OSD1_MATRIX_OFFSET0_1             0x3d69
+#define VPP_WRAP_OSD1_MATRIX_OFFSET2               0x3d6a
+#define VPP_WRAP_OSD1_MATRIX_PRE_OFFSET0_1         0x3d6b
+#define VPP_WRAP_OSD1_MATRIX_PRE_OFFSET2           0x3d6c
+#define VPP_WRAP_OSD1_MATRIX_EN_CTRL               0x3d6d
+
+#define VPP_WRAP_OSD2_MATRIX_COEF00_01             0x3d70
+#define VPP_WRAP_OSD2_MATRIX_COEF02_10             0x3d71
+#define VPP_WRAP_OSD2_MATRIX_COEF11_12             0x3d72
+#define VPP_WRAP_OSD2_MATRIX_COEF20_21             0x3d73
+#define VPP_WRAP_OSD2_MATRIX_COEF22                0x3d74
+#define VPP_WRAP_OSD2_MATRIX_COEF13_14             0x3d75
+#define VPP_WRAP_OSD2_MATRIX_COEF23_24             0x3d76
+#define VPP_WRAP_OSD2_MATRIX_COEF15_25             0x3d77
+#define VPP_WRAP_OSD2_MATRIX_CLIP                  0x3d78
+#define VPP_WRAP_OSD2_MATRIX_OFFSET0_1             0x3d79
+#define VPP_WRAP_OSD2_MATRIX_OFFSET2               0x3d7a
+#define VPP_WRAP_OSD2_MATRIX_PRE_OFFSET0_1         0x3d7b
+#define VPP_WRAP_OSD2_MATRIX_PRE_OFFSET2           0x3d7c
+#define VPP_WRAP_OSD2_MATRIX_EN_CTRL               0x3d7d
+
+#define VPP_WRAP_OSD3_MATRIX_COEF00_01             0x3db0
+#define VPP_WRAP_OSD3_MATRIX_COEF02_10             0x3db1
+#define VPP_WRAP_OSD3_MATRIX_COEF11_12             0x3db2
+#define VPP_WRAP_OSD3_MATRIX_COEF20_21             0x3db3
+#define VPP_WRAP_OSD3_MATRIX_COEF22                0x3db4
+#define VPP_WRAP_OSD3_MATRIX_COEF13_14             0x3db5
+#define VPP_WRAP_OSD3_MATRIX_COEF23_24             0x3db6
+#define VPP_WRAP_OSD3_MATRIX_COEF15_25             0x3db7
+#define VPP_WRAP_OSD3_MATRIX_CLIP                  0x3db8
+#define VPP_WRAP_OSD3_MATRIX_OFFSET0_1             0x3db9
+#define VPP_WRAP_OSD3_MATRIX_OFFSET2               0x3dba
+#define VPP_WRAP_OSD3_MATRIX_PRE_OFFSET0_1         0x3dbb
+#define VPP_WRAP_OSD3_MATRIX_PRE_OFFSET2           0x3dbc
+#define VPP_WRAP_OSD3_MATRIX_EN_CTRL               0x3dbd
+
+// Closing file:  mad_regs.h
+//
+//`define VPP2_VCBUS_BASE              8'h19
+//
+// Reading file:  vpp2_regs.h
+//
+// synopsys translate_off
+// synopsys translate_on
+// -----------------------------------------------
+// CBUS_BASE:  VPP2_VCBUS_BASE = 0x19
+// -----------------------------------------------
+//===========================================================================
+// Video postprocesing Registers
+//===========================================================================
+// dummy data used in the VPP preblend and scaler
+// Bit 23:16
+// Bit 15:8     CB
+// Bit 7:0      CR
+#define   VPP2_DUMMY_DATA                          (0x1900)
+#define P_VPP2_DUMMY_DATA                          (volatile unsigned int *)((0x1900  << 2) + 0xff900000)
+//input line length used in VPP
+#define   VPP2_LINE_IN_LENGTH                      (0x1901)
+#define P_VPP2_LINE_IN_LENGTH                      (volatile unsigned int *)((0x1901  << 2) + 0xff900000)
+//input Picture height used in VPP
+#define   VPP2_PIC_IN_HEIGHT                       (0x1902)
+#define P_VPP2_PIC_IN_HEIGHT                       (volatile unsigned int *)((0x1902  << 2) + 0xff900000)
+//Because there are many coefficients used in the vertical filter and horizontal filters,
+//indirect access the coefficients of vertical filter and horizontal filter is used.
+//For vertical filter, there are 33x4 coefficients
+//For horizontal filter, there are 33x4 coefficients
+//Bit 15    index increment, if bit9 == 1  then (0: index increase 1, 1: index increase 2) else (index increase 2)
+//Bit 14    1: read coef through cbus enable, just for debug purpose in case when we wanna check the coef in ram in correct or not
+//Bit 13    if true, vertical separated coef enable
+//Bit 9     if true, use 9bit resolution coef, other use 8bit resolution coef
+//Bit 8:7   type of index, 00: vertical coef, 01: vertical chroma coef: 10: horizontal coef, 11: resevered
+//Bit 6:0   coef index
+#define   VPP2_SCALE_COEF_IDX                      (0x1903)
+#define P_VPP2_SCALE_COEF_IDX                      (volatile unsigned int *)((0x1903  << 2) + 0xff900000)
+//coefficients for vertical filter and horizontal filter
+#define   VPP2_SCALE_COEF                          (0x1904)
+#define P_VPP2_SCALE_COEF                          (volatile unsigned int *)((0x1904  << 2) + 0xff900000)
+//these following registers are the absolute line address pointer for output divided screen
+//The output divided screen is shown in the following:
+//
+//  --------------------------   <------ line zero
+//      .
+//      .
+//      .           region0        <---------- nonlinear region or nonscaling region
+//      .
+//  ---------------------------
+//  ---------------------------  <------ region1_startp
+//      .
+//      .           region1         <---------- nonlinear region
+//      .
+//      .
+//  ---------------------------
+//  ---------------------------  <------ region2_startp
+//      .
+//      .           region2         <---------- linear region
+//      .
+//      .
+//  ---------------------------
+//  ---------------------------  <------ region3_startp
+//      .
+//      .           region3         <---------- nonlinear region
+//      .
+//      .
+//  ---------------------------
+//  ---------------------------  <------ region4_startp
+//      .
+//      .           region4         <---------- nonlinear region or nonoscaling region
+//      .
+//      .
+//  ---------------------------  <------ region4_endp
+//Bit 28:16 region1 startp
+//Bit 12:0 region2 startp
+#define   VPP2_VSC_REGION12_STARTP                 (0x1905)
+#define P_VPP2_VSC_REGION12_STARTP                 (volatile unsigned int *)((0x1905  << 2) + 0xff900000)
+//Bit 28:16 region3 startp
+//Bit 12:0 region4 startp
+#define   VPP2_VSC_REGION34_STARTP                 (0x1906)
+#define P_VPP2_VSC_REGION34_STARTP                 (volatile unsigned int *)((0x1906  << 2) + 0xff900000)
+#define   VPP2_VSC_REGION4_ENDP                    (0x1907)
+#define P_VPP2_VSC_REGION4_ENDP                    (volatile unsigned int *)((0x1907  << 2) + 0xff900000)
+//vertical start phase step, (source/dest)*(2^24)
+//Bit 27:24 integer part
+//Bit 23:0  fraction part
+#define   VPP2_VSC_START_PHASE_STEP                (0x1908)
+#define P_VPP2_VSC_START_PHASE_STEP                (volatile unsigned int *)((0x1908  << 2) + 0xff900000)
+//vertical scaler region0 phase slope, Bit24 signed bit
+#define   VPP2_VSC_REGION0_PHASE_SLOPE             (0x1909)
+#define P_VPP2_VSC_REGION0_PHASE_SLOPE             (volatile unsigned int *)((0x1909  << 2) + 0xff900000)
+//vertical scaler region1 phase slope, Bit24 signed bit
+#define   VPP2_VSC_REGION1_PHASE_SLOPE             (0x190a)
+#define P_VPP2_VSC_REGION1_PHASE_SLOPE             (volatile unsigned int *)((0x190a  << 2) + 0xff900000)
+//vertical scaler region3 phase slope, Bit24 signed bit
+#define   VPP2_VSC_REGION3_PHASE_SLOPE             (0x190b)
+#define P_VPP2_VSC_REGION3_PHASE_SLOPE             (volatile unsigned int *)((0x190b  << 2) + 0xff900000)
+//vertical scaler region4 phase slope, Bit24 signed bit
+#define   VPP2_VSC_REGION4_PHASE_SLOPE             (0x190c)
+#define P_VPP2_VSC_REGION4_PHASE_SLOPE             (volatile unsigned int *)((0x190c  << 2) + 0xff900000)
+//Bit 18:17     double line mode, input/output line width of vscaler becomes 2X,
+//           so only 2 line buffer in this case, use for 3D line by line interleave scaling
+//           bit1 true, double the input width and half input height, bit0 true, change line buffer 2 lines instead of 4 lines
+//Bit 16     0: progressive output, 1: interlace output
+//Bit 15     vertical scaler output line0 in advance or not for bottom field
+//Bit 14:13  vertical scaler initial repeat line0 number for bottom field
+//Bit 11:8   vertical scaler initial receiving  number for bottom field
+//Bit 7      vertical scaler output line0 in advance or not for top field
+//Bit 6:5    vertical scaler initial repeat line0 number for top field
+//Bit 3:0    vertical scaler initial receiving  number for top field
+#define   VPP2_VSC_PHASE_CTRL                      (0x190d)
+#define P_VPP2_VSC_PHASE_CTRL                      (volatile unsigned int *)((0x190d  << 2) + 0xff900000)
+//Bit 31:16  vertical scaler field initial phase for bottom field
+//Bit 15:0  vertical scaler field initial phase for top field
+#define   VPP2_VSC_INI_PHASE                       (0x190e)
+#define P_VPP2_VSC_INI_PHASE                       (volatile unsigned int *)((0x190e  << 2) + 0xff900000)
+//Bit 28:16 region1 startp
+//Bit 12:0 region2 startp
+#define   VPP2_HSC_REGION12_STARTP                 (0x1910)
+#define P_VPP2_HSC_REGION12_STARTP                 (volatile unsigned int *)((0x1910  << 2) + 0xff900000)
+//Bit 28:16 region3 startp
+//Bit 12:0 region4 startp
+#define   VPP2_HSC_REGION34_STARTP                 (0x1911)
+#define P_VPP2_HSC_REGION34_STARTP                 (volatile unsigned int *)((0x1911  << 2) + 0xff900000)
+#define   VPP2_HSC_REGION4_ENDP                    (0x1912)
+#define P_VPP2_HSC_REGION4_ENDP                    (volatile unsigned int *)((0x1912  << 2) + 0xff900000)
+//horizontal start phase step, (source/dest)*(2^24)
+//Bit 27:24 integer part
+//Bit 23:0  fraction part
+#define   VPP2_HSC_START_PHASE_STEP                (0x1913)
+#define P_VPP2_HSC_START_PHASE_STEP                (volatile unsigned int *)((0x1913  << 2) + 0xff900000)
+//horizontal scaler region0 phase slope, Bit24 signed bit
+#define   VPP2_HSC_REGION0_PHASE_SLOPE             (0x1914)
+#define P_VPP2_HSC_REGION0_PHASE_SLOPE             (volatile unsigned int *)((0x1914  << 2) + 0xff900000)
+//horizontal scaler region1 phase slope, Bit24 signed bit
+#define   VPP2_HSC_REGION1_PHASE_SLOPE             (0x1915)
+#define P_VPP2_HSC_REGION1_PHASE_SLOPE             (volatile unsigned int *)((0x1915  << 2) + 0xff900000)
+//horizontal scaler region3 phase slope, Bit24 signed bit
+#define   VPP2_HSC_REGION3_PHASE_SLOPE             (0x1916)
+#define P_VPP2_HSC_REGION3_PHASE_SLOPE             (volatile unsigned int *)((0x1916  << 2) + 0xff900000)
+//horizontal scaler region4 phase slope, Bit24 signed bit
+#define   VPP2_HSC_REGION4_PHASE_SLOPE             (0x1917)
+#define P_VPP2_HSC_REGION4_PHASE_SLOPE             (volatile unsigned int *)((0x1917  << 2) + 0xff900000)
+//Bit 22:21   horizontal scaler initial repeat pixel0 number
+//Bit 19:16   horizontal scaler initial receiving number
+//Bit 15:0    horizontal scaler top field initial phase
+#define   VPP2_HSC_PHASE_CTRL                      (0x1918)
+#define P_VPP2_HSC_PHASE_CTRL                      (volatile unsigned int *)((0x1918  << 2) + 0xff900000)
+// Bit 22 if true, divide VSC line length 2 as the HSC input length, othwise VSC length length is the same as the VSC line length,
+//                 just for special usage, more flexibility
+// Bit 21 if true, prevsc uses lin buffer, otherwise prevsc does not use line buffer, it should be same as prevsc_en
+// Bit 20 prehsc_en
+// Bit 19 prevsc_en
+// Bit 18 vsc_en
+// Bit 17 hsc_en
+// Bit 16 scale_top_en
+// Bit 15 video1 scale out enable
+// Bit 12 if true, region0,region4 are nonlinear regions, otherwise they are not scaling regions, for horizontal scaler
+// Bit 10:8 horizontal scaler bank length
+// Bit 5, vertical scaler phase field mode, if true, disable the opposite parity line output, more bandwith needed if output 1080i
+// Bit 4 if true, region0,region4 are nonlinear regions, otherwise they are not scaling regions, for vertical scaler
+// Bit 2:0 vertical scaler bank length
+#define   VPP2_SC_MISC                             (0x1919)
+#define P_VPP2_SC_MISC                             (volatile unsigned int *)((0x1919  << 2) + 0xff900000)
+// preblend video1 horizontal start and end
+//Bit 28:16 start
+//Bit 12:0 end
+#define   VPP2_PREBLEND_VD1_H_START_END            (0x191a)
+#define P_VPP2_PREBLEND_VD1_H_START_END            (volatile unsigned int *)((0x191a  << 2) + 0xff900000)
+// preblend video1 vertical start and end
+//Bit 28:16 start
+//Bit 12:0 end
+#define   VPP2_PREBLEND_VD1_V_START_END            (0x191b)
+#define P_VPP2_PREBLEND_VD1_V_START_END            (volatile unsigned int *)((0x191b  << 2) + 0xff900000)
+// postblend video1 horizontal start and end
+//Bit 28:16 start
+//Bit 12:0 end
+#define   VPP2_POSTBLEND_VD1_H_START_END           (0x191c)
+#define P_VPP2_POSTBLEND_VD1_H_START_END           (volatile unsigned int *)((0x191c  << 2) + 0xff900000)
+// postblend video1 vertical start and end
+//Bit 28:16 start
+//Bit 12:0 end
+#define   VPP2_POSTBLEND_VD1_V_START_END           (0x191d)
+#define P_VPP2_POSTBLEND_VD1_V_START_END           (volatile unsigned int *)((0x191d  << 2) + 0xff900000)
+// preblend horizontal size
+#define   VPP2_PREBLEND_H_SIZE                     (0x1920)
+#define P_VPP2_PREBLEND_H_SIZE                     (volatile unsigned int *)((0x1920  << 2) + 0xff900000)
+// postblend horizontal size
+#define   VPP2_POSTBLEND_H_SIZE                    (0x1921)
+#define P_VPP2_POSTBLEND_H_SIZE                    (volatile unsigned int *)((0x1921  << 2) + 0xff900000)
+//VPP hold lines
+//Bit 29:24
+//Bit 21:16
+//Bit 15:8     preblend hold lines
+//Bit 7:0      postblend hold lines
+#define   VPP2_HOLD_LINES                          (0x1922)
+#define P_VPP2_HOLD_LINES                          (volatile unsigned int *)((0x1922  << 2) + 0xff900000)
+//Bit 25   if true, change screen to one color value for preblender
+//Bit 24   if true, change screen to one color value for postblender
+// Bit 23:16 one color Y
+// Bit 15:8 one color Cb
+// Bit  7:0 one color  Cr
+#define   VPP2_BLEND_ONECOLOR_CTRL                 (0x1923)
+#define P_VPP2_BLEND_ONECOLOR_CTRL                 (volatile unsigned int *)((0x1923  << 2) + 0xff900000)
+//Read Only, VPP preblend current_x, current_y
+//Bit 28:16 current_x
+//Bit 12:0 current_y
+#define   VPP2_PREBLEND_CURRENT_XY                 (0x1924)
+#define P_VPP2_PREBLEND_CURRENT_XY                 (volatile unsigned int *)((0x1924  << 2) + 0xff900000)
+//Read Only, VPP postblend current_x, current_y
+//Bit 28:16 current_x
+//Bit 12:0 current_y
+#define   VPP2_POSTBLEND_CURRENT_XY                (0x1925)
+#define P_VPP2_POSTBLEND_CURRENT_XY                (volatile unsigned int *)((0x1925  << 2) + 0xff900000)
+// Bit 31  vd1_bgosd_exchange_en for preblend
+// Bit 30  vd1_bgosd_exchange_en for postblend
+// bit 28   color management enable
+// Bit 27,  reserved
+// Bit 26:18, reserved
+// Bit 17, osd2 enable for preblend
+// Bit 16, osd1 enable for preblend
+// Bit 15, reserved
+// Bit 14, vd1 enable for preblend
+// Bit 13, osd2 enable for postblend
+// Bit 12, osd1 enable for postblend
+// Bit 11, reserved
+// Bit 10, vd1 enable for postblend
+// Bit 9,  if true, osd1 is alpha premultipiled
+// Bit 8,  if true, osd2 is alpha premultipiled
+// Bit 7,  postblend module enable
+// Bit 6,  preblend module enable
+// Bit 5,  if true, osd2 foreground compared with osd1 in preblend
+// Bit 4,  if true, osd2 foreground compared with osd1 in postblend
+// Bit 3,
+// Bit 2,  if true, disable resetting async fifo every vsync, otherwise every vsync
+//           the aync fifo will be reseted.
+// Bit 1,
+// Bit 0    if true, the output result of VPP is saturated
+#define   VPP2_MISC                                (0x1926)
+#define P_VPP2_MISC                                (volatile unsigned int *)((0x1926  << 2) + 0xff900000)
+//Bit 31:20 ofifo line length minus 1
+//Bit 19  if true invert input vs
+//Bit 18  if true invert input hs
+//Bit 17  force top/bottom field, enable
+//Bit 16  force top/bottom field, 0: top, 1: bottom
+//Bit 15  force one go_field, one pluse, write only
+//Bit 14  force one go_line, one pluse, write only
+//Bit 12:0 ofifo size (actually only bit 10:1 is valid), always even number
+#define   VPP2_OFIFO_SIZE                          (0x1927)
+#define P_VPP2_OFIFO_SIZE                          (volatile unsigned int *)((0x1927  << 2) + 0xff900000)
+//Read only
+//Bit 28:17 current scale out fifo counter
+//Bit 16:12 current afifo counter
+//Bit 11:0 current ofifo counter
+#define   VPP2_FIFO_STATUS                         (0x1928)
+#define P_VPP2_FIFO_STATUS                         (volatile unsigned int *)((0x1928  << 2) + 0xff900000)
+// Bit 3 SMOKE2 postblend enable only when postblend osd2 is not enable
+// Bit 2 SMOKE2 preblend enable only when preblend osd2 is not enable
+// Bit 1 SMOKE1 postblend enable only when postblend osd1 is not enable
+// Bit 0 SMOKE1 preblend enable only when preblend osd1 is not enable
+#define   VPP2_SMOKE_CTRL                          (0x1929)
+#define P_VPP2_SMOKE_CTRL                          (volatile unsigned int *)((0x1929  << 2) + 0xff900000)
+//smoke can be used only when that blending is disable and then be used as smoke function
+//smoke1 for OSD1 chanel
+//smoke2 for OSD2 chanel
+//31:24 Y
+//23:16 Cb
+//15:8 Cr
+//7:0 Alpha
+#define   VPP2_SMOKE1_VAL                          (0x192a)
+#define P_VPP2_SMOKE1_VAL                          (volatile unsigned int *)((0x192a  << 2) + 0xff900000)
+#define   VPP2_SMOKE2_VAL                          (0x192b)
+#define P_VPP2_SMOKE2_VAL                          (volatile unsigned int *)((0x192b  << 2) + 0xff900000)
+//Bit 28:16 start
+//Bit 12:0 end
+#define   VPP2_SMOKE1_H_START_END                  (0x192d)
+#define P_VPP2_SMOKE1_H_START_END                  (volatile unsigned int *)((0x192d  << 2) + 0xff900000)
+//Bit 28:16 start
+//Bit 12:0 end
+#define   VPP2_SMOKE1_V_START_END                  (0x192e)
+#define P_VPP2_SMOKE1_V_START_END                  (volatile unsigned int *)((0x192e  << 2) + 0xff900000)
+//Bit 28:16 start
+//Bit 12:0 end
+#define   VPP2_SMOKE2_H_START_END                  (0x192f)
+#define P_VPP2_SMOKE2_H_START_END                  (volatile unsigned int *)((0x192f  << 2) + 0xff900000)
+//Bit 28:16 start
+//Bit 12:0 end
+#define   VPP2_SMOKE2_V_START_END                  (0x1930)
+#define P_VPP2_SMOKE2_V_START_END                  (volatile unsigned int *)((0x1930  << 2) + 0xff900000)
+//Bit 27:16 scale out fifo line length minus 1
+//Bit 12:0 scale out fifo size (actually only bit 11:1 is valid, 11:1, max 1024), always even number
+#define   VPP2_SCO_FIFO_CTRL                       (0x1933)
+#define P_VPP2_SCO_FIFO_CTRL                       (volatile unsigned int *)((0x1933  << 2) + 0xff900000)
+//for 3D quincunx sub-sampling and horizontal pixel by pixel 3D interleaving
+//Bit 27:24, prehsc_mode, bit 3:2, prehsc odd line interp mode, bit 1:0, prehsc even line interp mode,
+//           each 2bit, 00: pix0+pix1/2, average, 01: pix1, 10: pix0
+//Bit 23 horizontal scaler double pixel mode
+//Bit 22:21   horizontal scaler initial repeat pixel0 number1
+//Bit 19:16   horizontal scaler initial receiving number1
+//Bit 15:0    horizontal scaler top field initial phase1
+#define   VPP2_HSC_PHASE_CTRL1                     (0x1934)
+#define P_VPP2_HSC_PHASE_CTRL1                     (volatile unsigned int *)((0x1934  << 2) + 0xff900000)
+//for 3D quincunx sub-sampling
+//31:24  prehsc pattern, each patten 1 bit, from lsb -> msb
+//22:20  prehsc pattern start
+//18:16 prehsc pattern end
+//15:8 pattern, each patten 1 bit, from lsb -> msb
+//6:4  pattern start
+//2:0  pattern end
+#define   VPP2_HSC_INI_PAT_CTRL                    (0x1935)
+#define P_VPP2_HSC_INI_PAT_CTRL                    (volatile unsigned int *)((0x1935  << 2) + 0xff900000)
+//Bit 3         minus black level enable for vadj2
+//Bit 2         Video adjustment enable for vadj2
+//Bit 1         minus black level enable for vadj1
+//Bit 0         Video adjustment enable for vadj1
+#define   VPP2_VADJ_CTRL                           (0x1940)
+#define P_VPP2_VADJ_CTRL                           (volatile unsigned int *)((0x1940  << 2) + 0xff900000)
+//Bit 16:8  brightness, signed value
+//Bit 7:0   contrast, unsigned value, contrast from  0 <= contrast <2
+#define   VPP2_VADJ1_Y                             (0x1941)
+#define P_VPP2_VADJ1_Y                             (volatile unsigned int *)((0x1941  << 2) + 0xff900000)
+//cb' = cb*ma + cr*mb
+//cr' = cb*mc + cr*md
+//all are bit 9:0, signed value, -2 < ma/mb/mc/md < 2
+#define   VPP2_VADJ1_MA_MB                         (0x1942)
+#define P_VPP2_VADJ1_MA_MB                         (volatile unsigned int *)((0x1942  << 2) + 0xff900000)
+#define   VPP2_VADJ1_MC_MD                         (0x1943)
+#define P_VPP2_VADJ1_MC_MD                         (volatile unsigned int *)((0x1943  << 2) + 0xff900000)
+//Bit 16:8  brightness, signed value
+//Bit 7:0   contrast, unsigned value, contrast from  0 <= contrast <2
+#define   VPP2_VADJ2_Y                             (0x1944)
+#define P_VPP2_VADJ2_Y                             (volatile unsigned int *)((0x1944  << 2) + 0xff900000)
+//cb' = cb*ma + cr*mb
+//cr' = cb*mc + cr*md
+//all are bit 9:0, signed value, -2 < ma/mb/mc/md < 2
+#define   VPP2_VADJ2_MA_MB                         (0x1945)
+#define P_VPP2_VADJ2_MA_MB                         (volatile unsigned int *)((0x1945  << 2) + 0xff900000)
+#define   VPP2_VADJ2_MC_MD                         (0x1946)
+#define P_VPP2_VADJ2_MC_MD                         (volatile unsigned int *)((0x1946  << 2) + 0xff900000)
+//Read only
+//Bit 31, if it is true, it means this probe is valid in the last field/frame
+//Bit 29:20 component 0
+//Bit 19:10 component 1
+//Bit 9:0 component 2
+#define   VPP2_MATRIX_PROBE_COLOR                  (0x195c)
+#define P_VPP2_MATRIX_PROBE_COLOR                  (volatile unsigned int *)((0x195c  << 2) + 0xff900000)
+//Bit 23:16 component 0
+//Bit 15:8  component 1
+//Bit 7:0 component 2
+#define   VPP2_MATRIX_HL_COLOR                     (0x195d)
+#define P_VPP2_MATRIX_HL_COLOR                     (volatile unsigned int *)((0x195d  << 2) + 0xff900000)
+//28:16 probe x, postion
+//12:0  probe y, position
+#define   VPP2_MATRIX_PROBE_POS                    (0x195e)
+#define P_VPP2_MATRIX_PROBE_POS                    (volatile unsigned int *)((0x195e  << 2) + 0xff900000)
+//Bit 16,  highlight_en
+//Bit 15   probe_post, if true, probe pixel data after matrix, otherwise probe pixel data before matrix
+//Bit 14:12 probe_sel, 000: select post matrix, 001: select vd1 matrix,
+//Bit 9:8  matrix coef idx selection, 00: select post matrix, 01: select vd1 matrix
+//Bit 5    vd1 conversion matrix enable
+//Bit 4    reserved
+//Bit 2    output y/cb/cr saturation enable, only for post matrix (y saturate to 16-235, cb/cr saturate to 16-240)
+//Bit 1    input y/cb/cr saturation enable, only for post matrix (y saturate to 16-235, cb/cr saturate to 16-240)
+//Bit 0    post conversion matrix enable
+#define   VPP2_MATRIX_CTRL                         (0x195f)
+#define P_VPP2_MATRIX_CTRL                         (volatile unsigned int *)((0x195f  << 2) + 0xff900000)
+//Bit 28:16 coef00
+//Bit 12:0  coef01
+#define   VPP2_MATRIX_COEF00_01                    (0x1960)
+#define P_VPP2_MATRIX_COEF00_01                    (volatile unsigned int *)((0x1960  << 2) + 0xff900000)
+//Bit 28:16 coef02
+//Bit 12:0  coef10
+#define   VPP2_MATRIX_COEF02_10                    (0x1961)
+#define P_VPP2_MATRIX_COEF02_10                    (volatile unsigned int *)((0x1961  << 2) + 0xff900000)
+//Bit 28:16 coef11
+//Bit 12:0  coef12
+#define   VPP2_MATRIX_COEF11_12                    (0x1962)
+#define P_VPP2_MATRIX_COEF11_12                    (volatile unsigned int *)((0x1962  << 2) + 0xff900000)
+//Bit 28:16 coef20
+//Bit 12:0  coef21
+#define   VPP2_MATRIX_COEF20_21                    (0x1963)
+#define P_VPP2_MATRIX_COEF20_21                    (volatile unsigned int *)((0x1963  << 2) + 0xff900000)
+#define   VPP2_MATRIX_COEF22                       (0x1964)
+#define P_VPP2_MATRIX_COEF22                       (volatile unsigned int *)((0x1964  << 2) + 0xff900000)
+//Bit 26:16 offset0
+//Bit 10:0  offset1
+#define   VPP2_MATRIX_OFFSET0_1                    (0x1965)
+#define P_VPP2_MATRIX_OFFSET0_1                    (volatile unsigned int *)((0x1965  << 2) + 0xff900000)
+//Bit 10:0  offset2
+#define   VPP2_MATRIX_OFFSET2                      (0x1966)
+#define P_VPP2_MATRIX_OFFSET2                      (volatile unsigned int *)((0x1966  << 2) + 0xff900000)
+//Bit 26:16 pre_offset0
+//Bit 10:0  pre_offset1
+#define   VPP2_MATRIX_PRE_OFFSET0_1                (0x1967)
+#define P_VPP2_MATRIX_PRE_OFFSET0_1                (volatile unsigned int *)((0x1967  << 2) + 0xff900000)
+//Bit 10:0  pre_offset2
+#define   VPP2_MATRIX_PRE_OFFSET2                  (0x1968)
+#define P_VPP2_MATRIX_PRE_OFFSET2                  (volatile unsigned int *)((0x1968  << 2) + 0xff900000)
+// dummy data used in the VPP postblend
+// Bit 23:16    Y
+// Bit 15:8     CB
+// Bit 7:0      CR
+#define   VPP2_DUMMY_DATA1                         (0x1969)
+#define P_VPP2_DUMMY_DATA1                         (volatile unsigned int *)((0x1969  << 2) + 0xff900000)
+//Bit 31 gainoff module enable
+//Bit 26:16 gain0, 1.10 unsigned data
+//Bit 10:0  gain1, 1.10 unsigned dat
+#define   VPP2_GAINOFF_CTRL0                       (0x196a)
+#define P_VPP2_GAINOFF_CTRL0                       (volatile unsigned int *)((0x196a  << 2) + 0xff900000)
+//Bit 26:16 gain2, 1.10 unsigned data
+//Bit 10:0, offset0, signed data
+#define   VPP2_GAINOFF_CTRL1                       (0x196b)
+#define P_VPP2_GAINOFF_CTRL1                       (volatile unsigned int *)((0x196b  << 2) + 0xff900000)
+//Bit 26:16, offset1, signed data
+//Bit 10:0, offset2, signed data
+#define   VPP2_GAINOFF_CTRL2                       (0x196c)
+#define P_VPP2_GAINOFF_CTRL2                       (volatile unsigned int *)((0x196c  << 2) + 0xff900000)
+//Bit 26:16, pre_offset0, signed data
+//Bit 10:0, pre_offset1, signed data
+#define   VPP2_GAINOFF_CTRL3                       (0x196d)
+#define P_VPP2_GAINOFF_CTRL3                       (volatile unsigned int *)((0x196d  << 2) + 0xff900000)
+//Bit 10:0, pre_offset2, signed data
+#define   VPP2_GAINOFF_CTRL4                       (0x196e)
+#define P_VPP2_GAINOFF_CTRL4                       (volatile unsigned int *)((0x196e  << 2) + 0xff900000)
+//only two registers used in the color management, which are defined in the chroma_reg.h
+#define   VPP2_CHROMA_ADDR_PORT                    (0x1970)
+#define P_VPP2_CHROMA_ADDR_PORT                    (volatile unsigned int *)((0x1970  << 2) + 0xff900000)
+#define   VPP2_CHROMA_DATA_PORT                    (0x1971)
+#define P_VPP2_CHROMA_DATA_PORT                    (volatile unsigned int *)((0x1971  << 2) + 0xff900000)
+//`include "chroma_reg.h"       //defined inside is the indirect addressed registers
+//(hsvsharp), (blue), gainoff, mat_vd1,mat_vd2, mat_post, prebld, postbld,(hsharp),sco_ff, vadj1, vadj2, ofifo, (chroma1), clk0(free_clk) vpp_reg
+//each item 2bits, for each 2bits, if bit 2*i+1 == 1, free clk, else if bit 2*i == 1 no clk, else auto gated clock
+//bit1 is not used, because I can not turn off vpp_reg clk because I can not turn on again
+//because the register itself canot be set again without clk
+//Bit 31:0
+#define   VPP2_GCLK_CTRL0                          (0x1972)
+#define P_VPP2_GCLK_CTRL0                          (volatile unsigned int *)((0x1972  << 2) + 0xff900000)
+//Chroma2_filter, Chroma2, (Ccoring), (blackext), dnlp
+//Bit 9:0
+#define   VPP2_GCLK_CTRL1                          (0x1973)
+#define P_VPP2_GCLK_CTRL1                          (volatile unsigned int *)((0x1973  << 2) + 0xff900000)
+//prehsc_clk, line_buf, prevsc, vsc, hsc_clk, clk0(free_clk)
+//Bit 11:0
+#define   VPP2_SC_GCLK_CTRL                        (0x1974)
+#define P_VPP2_SC_GCLK_CTRL                        (volatile unsigned int *)((0x1974  << 2) + 0xff900000)
+//Bit 17:9 VD1 alpha for preblend
+//Bit 8:0 VD1 alpha for postblend
+#define   VPP2_MISC1                               (0x1976)
+#define P_VPP2_MISC1                               (volatile unsigned int *)((0x1976  << 2) + 0xff900000)
+//Bit 31:24     bottom of region03 output value
+//Bit 23:16     bottom of region02 output value
+//Bit 15:8      bottom of region01 output value
+//Bit 7:0       bottom of region00 output value
+#define   VPP2_DNLP_CTRL_00                        (0x1981)
+#define P_VPP2_DNLP_CTRL_00                        (volatile unsigned int *)((0x1981  << 2) + 0xff900000)
+//Bit 31:24     bottom of region07 output value
+//Bit 23:16     bottom of region06 output value
+//Bit 15:8      bottom of region05 output value
+//Bit 7:0       bottom of region04 output value
+#define   VPP2_DNLP_CTRL_01                        (0x1982)
+#define P_VPP2_DNLP_CTRL_01                        (volatile unsigned int *)((0x1982  << 2) + 0xff900000)
+//Bit 31:24     bottom of region11 output value
+//Bit 23:16     bottom of region10 output value
+//Bit 15:8      bottom of region09 output value
+//Bit 7:0       bottom of region08 output value
+#define   VPP2_DNLP_CTRL_02                        (0x1983)
+#define P_VPP2_DNLP_CTRL_02                        (volatile unsigned int *)((0x1983  << 2) + 0xff900000)
+//Bit 31:24     bottom of region15 output value
+//Bit 23:16     bottom of region14 output value
+//Bit 15:8      bottom of region13 output value
+//Bit 7:0       bottom of region12 output value
+#define   VPP2_DNLP_CTRL_03                        (0x1984)
+#define P_VPP2_DNLP_CTRL_03                        (volatile unsigned int *)((0x1984  << 2) + 0xff900000)
+//Bit 31:24     bottom of region19 output value
+//Bit 23:16     bottom of region18 output value
+//Bit 15:8      bottom of region17 output value
+//Bit 7:0       bottom of region16 output value
+#define   VPP2_DNLP_CTRL_04                        (0x1985)
+#define P_VPP2_DNLP_CTRL_04                        (volatile unsigned int *)((0x1985  << 2) + 0xff900000)
+//Bit 31:24     bottom of region23 output value
+//Bit 23:16     bottom of region22 output value
+//Bit 15:8      bottom of region21 output value
+//Bit 7:0       bottom of region20 output value
+#define   VPP2_DNLP_CTRL_05                        (0x1986)
+#define P_VPP2_DNLP_CTRL_05                        (volatile unsigned int *)((0x1986  << 2) + 0xff900000)
+//Bit 31:24     bottom of region27 output value
+//Bit 23:16     bottom of region26 output value
+//Bit 15:8      bottom of region25 output value
+//Bit 7:0       bottom of region24 output value
+#define   VPP2_DNLP_CTRL_06                        (0x1987)
+#define P_VPP2_DNLP_CTRL_06                        (volatile unsigned int *)((0x1987  << 2) + 0xff900000)
+//Bit 31:24     bottom of region31 output value
+//Bit 23:16     bottom of region30 output value
+//Bit 15:8      bottom of region29 output value
+//Bit 7:0       bottom of region28 output value
+#define   VPP2_DNLP_CTRL_07                        (0x1988)
+#define P_VPP2_DNLP_CTRL_07                        (volatile unsigned int *)((0x1988  << 2) + 0xff900000)
+//Bit 31:24     bottom of region35 output value
+//Bit 23:16     bottom of region34 output value
+//Bit 15:8      bottom of region33 output value
+//Bit 7:0       bottom of region32 output value
+#define   VPP2_DNLP_CTRL_08                        (0x1989)
+#define P_VPP2_DNLP_CTRL_08                        (volatile unsigned int *)((0x1989  << 2) + 0xff900000)
+//Bit 31:24     bottom of region39 output value
+//Bit 23:16     bottom of region38 output value
+//Bit 15:8      bottom of region37 output value
+//Bit 7:0       bottom of region36 output value
+#define   VPP2_DNLP_CTRL_09                        (0x198a)
+#define P_VPP2_DNLP_CTRL_09                        (volatile unsigned int *)((0x198a  << 2) + 0xff900000)
+//Bit 31:24     bottom of region43 output value
+//Bit 23:16     bottom of region42 output value
+//Bit 15:8      bottom of region41 output value
+//Bit 7:0       bottom of region40 output value
+#define   VPP2_DNLP_CTRL_10                        (0x198b)
+#define P_VPP2_DNLP_CTRL_10                        (volatile unsigned int *)((0x198b  << 2) + 0xff900000)
+//Bit 31:24     bottom of region47 output value
+//Bit 23:16     bottom of region46 output value
+//Bit 15:8      bottom of region45 output value
+//Bit 7:0       bottom of region44 output value
+#define   VPP2_DNLP_CTRL_11                        (0x198c)
+#define P_VPP2_DNLP_CTRL_11                        (volatile unsigned int *)((0x198c  << 2) + 0xff900000)
+//Bit 31:24     bottom of region51 output value
+//Bit 23:16     bottom of region50 output value
+//Bit 15:8      bottom of region49 output value
+//Bit 7:0       bottom of region48 output value
+#define   VPP2_DNLP_CTRL_12                        (0x198d)
+#define P_VPP2_DNLP_CTRL_12                        (volatile unsigned int *)((0x198d  << 2) + 0xff900000)
+//Bit 31:24     bottom of region55 output value
+//Bit 23:16     bottom of region54 output value
+//Bit 15:8      bottom of region53 output value
+//Bit 7:0       bottom of region52 output value
+#define   VPP2_DNLP_CTRL_13                        (0x198e)
+#define P_VPP2_DNLP_CTRL_13                        (volatile unsigned int *)((0x198e  << 2) + 0xff900000)
+//Bit 31:24     bottom of region59 output value
+//Bit 23:16     bottom of region58 output value
+//Bit 15:8      bottom of region57 output value
+//Bit 7:0       bottom of region56 output value
+#define   VPP2_DNLP_CTRL_14                        (0x198f)
+#define P_VPP2_DNLP_CTRL_14                        (volatile unsigned int *)((0x198f  << 2) + 0xff900000)
+//Bit 31:24     bottom of region63 output value
+//Bit 23:16     bottom of region62 output value
+//Bit 15:8      bottom of region61 output value
+//Bit 7:0       bottom of region60 output value
+#define   VPP2_DNLP_CTRL_15                        (0x1990)
+#define P_VPP2_DNLP_CTRL_15                        (volatile unsigned int *)((0x1990  << 2) + 0xff900000)
+//Bit 20 reserved
+//Bit 19 reserved
+//Bit 18 demo dynamic nonlinear luma processing enable
+//Bit 17 reserved
+//Bit 16 reserved
+//Bit 15:14, 2'b00: demo adjust on top, 2'b01: demo adjust on bottom, 2'b10: demo adjust on left, 2'b11: demo adjust on right
+//Bit 4 reserved
+//Bit 3 reserved
+//Bit 2 dynamic nonlinear luma processing enable
+//Bit 1 reserved
+//Bit 0 reserved
+#define   VPP2_VE_ENABLE_CTRL                      (0x19a1)
+#define P_VPP2_VE_ENABLE_CTRL                      (volatile unsigned int *)((0x19a1  << 2) + 0xff900000)
+//Bit 12:0, demo left or top screen width
+#define   VPP2_VE_DEMO_LEFT_TOP_SCREEN_WIDTH       (0x19a2)
+#define P_VPP2_VE_DEMO_LEFT_TOP_SCREEN_WIDTH       (volatile unsigned int *)((0x19a2  << 2) + 0xff900000)
+#define   VPP2_VE_DEMO_CENTER_BAR                  (0x19a3)
+#define P_VPP2_VE_DEMO_CENTER_BAR                  (volatile unsigned int *)((0x19a3  << 2) + 0xff900000)
+//28:16  ve_line_length
+//12:0   ve_pic_height
+#define   VPP2_VE_H_V_SIZE                         (0x19a4)
+#define P_VPP2_VE_H_V_SIZE                         (volatile unsigned int *)((0x19a4  << 2) + 0xff900000)
+//Bit 10   reset bit, high active
+//Bit 9    0: measuring rising edge, 1: measuring falling edge
+//Bit 8    if true, accumulate the counter number, otherwise not
+//Bit 7:0  vsync_span, define how many vsync span need to measure
+#define   VPP2_VDO_MEAS_CTRL                       (0x19a8)
+#define P_VPP2_VDO_MEAS_CTRL                       (volatile unsigned int *)((0x19a8  << 2) + 0xff900000)
+//Read only
+//19:16  ind_meas_count_n, every number of sync_span vsyncs, this counter add 1
+//15:0, high bit portion of counter
+#define   VPP2_VDO_MEAS_VS_COUNT_HI                (0x19a9)
+#define P_VPP2_VDO_MEAS_VS_COUNT_HI                (volatile unsigned int *)((0x19a9  << 2) + 0xff900000)
+//Read only
+//31:0, low bit portion of counter
+#define   VPP2_VDO_MEAS_VS_COUNT_LO                (0x19aa)
+#define P_VPP2_VDO_MEAS_VS_COUNT_LO                (volatile unsigned int *)((0x19aa  << 2) + 0xff900000)
+//vertical scaler phase step
+//Bit 27:0,  4.24 format
+#define   VPP2_OSD_VSC_PHASE_STEP                  (0x19c0)
+#define P_VPP2_OSD_VSC_PHASE_STEP                  (volatile unsigned int *)((0x19c0  << 2) + 0xff900000)
+//Bit 31:16, botttom vertical scaler initial phase
+//Bit 15:0, top vertical scaler initial phase
+#define   VPP2_OSD_VSC_INI_PHASE                   (0x19c1)
+#define P_VPP2_OSD_VSC_INI_PHASE                   (volatile unsigned int *)((0x19c1  << 2) + 0xff900000)
+//Bit 24    osd vertical Scaler enable
+//Bit 23    osd_prog_interlace 0: current field is progressive, 1: current field is interlace
+//Bit 22:21 osd_vsc_double_line_mode, bit1, double input width and half input height, bit0, change line buffer becomes 2 lines
+//Bit 20    osd_vsc_phase0_always_en
+//Bit 19    osd_vsc_nearest_en
+//Bit 17:16 osd_vsc_bot_rpt_l0_num
+//Bit 14:11 osd_vsc_bot_ini_rcv_num
+//Bit 9:8   osd_vsc_top_rpt_l0_num
+//Bit 6:3   osd_vsc_top_ini_rcv_num
+//Bit 2:0   osd_vsc_bank_length
+#define   VPP2_OSD_VSC_CTRL0                       (0x19c2)
+#define P_VPP2_OSD_VSC_CTRL0                       (volatile unsigned int *)((0x19c2  << 2) + 0xff900000)
+//horizontal scaler phase step
+//Bit 27:0,  4.24 format
+#define   VPP2_OSD_HSC_PHASE_STEP                  (0x19c3)
+#define P_VPP2_OSD_HSC_PHASE_STEP                  (volatile unsigned int *)((0x19c3  << 2) + 0xff900000)
+//Bit 31:16, horizontal scaler initial phase1
+//Bit 15:0, horizontal scaler initial phase0
+#define   VPP2_OSD_HSC_INI_PHASE                   (0x19c4)
+#define P_VPP2_OSD_HSC_INI_PHASE                   (volatile unsigned int *)((0x19c4  << 2) + 0xff900000)
+//Bit 22   osd horizontal scaler enable
+//Bit 21   osd_hsc_double_pix_mode
+//Bit 20   osd_hsc_phase0_always_en
+//Bit 19   osd_hsc_nearest_en
+//Bit 17:16 osd_hsc_rpt_p0_num1
+//Bit 14:11 osd_hsc_ini_rcv_num1
+//Bit 9:8   osd_hsc_rpt_p0_num0
+//Bit 6:3   osd_hsc_ini_rcv_num0
+//Bit 2:0   osd_hsc_bank_length
+#define   VPP2_OSD_HSC_CTRL0                       (0x19c5)
+#define P_VPP2_OSD_HSC_CTRL0                       (volatile unsigned int *)((0x19c5  << 2) + 0xff900000)
+//for 3D quincunx sub-sampling
+//bit 15:8 pattern, each patten 1 bit, from lsb -> msb
+//bit 6:4  pattern start
+//bit 2:0  pattern end
+#define   VPP2_OSD_HSC_INI_PAT_CTRL                (0x19c6)
+#define P_VPP2_OSD_HSC_INI_PAT_CTRL                (volatile unsigned int *)((0x19c6  << 2) + 0xff900000)
+//bit 31:24, componet 0
+//bit 23:16, component 1
+//bit 15:8, component 2
+//bit 7:0 component 3, alpha
+#define   VPP2_OSD_SC_DUMMY_DATA                   (0x19c7)
+#define P_VPP2_OSD_SC_DUMMY_DATA                   (volatile unsigned int *)((0x19c7  << 2) + 0xff900000)
+//Bit 14 osc_sc_din_osd1_alpha_mode, 1: (alpha >= 128) ? alpha -1: alpha,  0: (alpha >=1) ? alpha - 1: alpha.
+//Bit 13 osc_sc_din_osd2_alpha_mode, 1: (alpha >= 128) ? alpha -1: alpha,  0: (alpha >=1) ? alpha - 1: alpha.
+//Bit 12 osc_sc_dout_alpha_mode, 1: (alpha >= 128) ? alpha + 1: alpha, 0: (alpha >=1) ? alpha + 1: alpha.
+//Bit 12 osc_sc_alpha_mode, 1: (alpha >= 128) ? alpha + 1: alpha, 0: (alpha >=1) ? alpha + 1: alpha.
+//Bit 11:4 default alpha for vd1 or vd2 if they are selected as the source
+//Bit 3 osd scaler path enable
+//Bit 1:0 osd_sc_sel, 00: select osd1 input, 01: select osd2 input, 10: select vd1 input, 11: select vd2 input after matrix
+#define   VPP2_OSD_SC_CTRL0                        (0x19c8)
+#define P_VPP2_OSD_SC_CTRL0                        (volatile unsigned int *)((0x19c8  << 2) + 0xff900000)
+//Bit 28:16 OSD scaler input width minus 1
+//Bit 12:0 OSD scaler input height minus 1
+#define   VPP2_OSD_SCI_WH_M1                       (0x19c9)
+#define P_VPP2_OSD_SCI_WH_M1                       (volatile unsigned int *)((0x19c9  << 2) + 0xff900000)
+//Bit 28:16 OSD scaler output horizontal start
+//Bit 12:0 OSD scaler output horizontal end
+#define   VPP2_OSD_SCO_H_START_END                 (0x19ca)
+#define P_VPP2_OSD_SCO_H_START_END                 (volatile unsigned int *)((0x19ca  << 2) + 0xff900000)
+//Bit 28:16 OSD scaler output vertical start
+//Bit 12:0 OSD scaler output vertical end
+#define   VPP2_OSD_SCO_V_START_END                 (0x19cb)
+#define P_VPP2_OSD_SCO_V_START_END                 (volatile unsigned int *)((0x19cb  << 2) + 0xff900000)
+//Because there are many coefficients used in the vertical filter and horizontal filters,
+//indirect access the coefficients of vertical filter and horizontal filter is used.
+//For vertical filter, there are 33x4 coefficients
+//For horizontal filter, there are 33x4 coefficients
+//Bit 15	index increment, if bit9 == 1  then (0: index increase 1, 1: index increase 2) else (index increase 2)
+//Bit 14	1: read coef through cbus enable, just for debug purpose in case when we wanna check the coef in ram in correct or not
+//Bit 9     if true, use 9bit resolution coef, other use 8bit resolution coef
+//Bit 8   type of index, 0: vertical coef,  1: horizontal coef
+//Bit 6:0 	coef index
+#define   VPP2_OSD_SCALE_COEF_IDX                  (0x19cc)
+#define P_VPP2_OSD_SCALE_COEF_IDX                  (volatile unsigned int *)((0x19cc  << 2) + 0xff900000)
+//coefficients for vertical filter and horizontal filter
+#define   VPP2_OSD_SCALE_COEF                      (0x19cd)
+#define P_VPP2_OSD_SCALE_COEF                      (volatile unsigned int *)((0x19cd  << 2) + 0xff900000)
+//Bit 12:0 line number use to generate interrupt when line == this number
+#define   VPP2_INT_LINE_NUM                        (0x19ce)
+#define P_VPP2_INT_LINE_NUM                        (volatile unsigned int *)((0x19ce  << 2) + 0xff900000)
+// synopsys translate_off
+// synopsys translate_on
+//
+// Closing file:  vpp2_regs.h
+//
+//`define VIU_VCBUS_BASE                8'h1a
+//
+// Reading file:  vregs_clk2.h
+//
+//===========================================================================
+// Video Interface Registers    0xa00 - 0xaff
+//===========================================================================
+// -----------------------------------------------
+// CBUS_BASE:  VIU_VCBUS_BASE = 0x1a
+// -----------------------------------------------
+#define   VIU_ADDR_START                           (0x1a00)
+#define P_VIU_ADDR_START                           (volatile unsigned int *)((0x1a00  << 2) + 0xff900000)
+#define   VIU_ADDR_END                             (0x1aff)
+#define P_VIU_ADDR_END                             (volatile unsigned int *)((0x1aff  << 2) + 0xff900000)
+//`define TRACE_REG 8'ff
+//------------------------------------------------------------------------------
+// VIU top-level registers
+//------------------------------------------------------------------------------
+// Bit  0 RW, osd1_reset
+// Bit  1 RW, osd2_reset
+// Bit  2 RW, vd1_reset
+// Bit  3 RW, vd1_fmt_reset
+// Bit  4 RW, vd2_reset
+// Bit  5 RW, vd2_fmt_reset
+// Bit  6 RW, di_dsr1to2_reset
+// Bit  7 RW, vpp_reset
+// Bit  8 RW, di_if1_reset
+// Bit  9 RW, di_if1_fmt_reset
+// Bit 10 RW, di_inp_reset
+// Bit 11 RW, di_inp_fmt_reset
+// Bit 12 RW, di_mem_reset
+// Bit 13 RW, di_mem_fmt_reset
+// Bit 14 RW, di_nr_wr_mif_reset
+// Bit 15 RW, dein_wr_mif_reset
+// Bit 16 RW, di_chan2_mif_reset
+// Bit 17 RW, di_mtn_wr_mif_reset
+// Bit 18 RW, di_mtn_rd_mif_reset
+// Bit 19 RW, di_mad_reset
+// Bit 20 RW, vdin0_reset
+// Bit 21 RW, vdin1_reset
+// Bit 22 RW, nrin_mux_reset
+// Bit 23 RW, vdin0_wr_reset
+// Bit 24 RW, vdin1_wr_reset
+// Bit 25 RW, reserved
+// Bit 26 RW, d2d3_reset
+// Bit 27 RW, di_cont_wr_mif_reset
+// Bit 28 RW, di_cont_rd_mif_reset
+#define   VIU_SW_RESET                             (0x1a01)
+#define P_VIU_SW_RESET                             (volatile unsigned int *)((0x1a01  << 2) + 0xff900000)
+#define   VIU_SW_RESET0                            (0x1a02)
+#define P_VIU_SW_RESET0                            (volatile unsigned int *)((0x1a02  << 2) + 0xff900000)
+// Bit 0 RW, software reset for mcvecrd_mif
+// Bit 1 RW, software reset for mcinfowr_mif
+// Bit 2 RW, software reset for mcinford_mif
+#define   VIU_SECURE_REG                           (0x1a04)
+#define P_VIU_SECURE_REG                           (volatile unsigned int *)((0x1a04  << 2) + 0xff900000)
+// Bit 0 RW, dolby core1_tv secure w and r
+// Bit 1 RW, dolby core2 secure w and r
+// Bit 2 RW, dolby core3 secure w and r
+// Bit 3 RW, for osd1 secure read
+// Bit 4 RW, for osd2 secure read
+#define   DOLBY_INT_STAT                           (0x1a05)
+#define P_DOLBY_INT_STAT                           (volatile unsigned int *)((0x1a05  << 2) + 0xff900000)
+// todo
+//bit 15:12 osdbld_gclk_ctrl 3:2 regclk ctrl 1:0 blending clk control
+//bit 8 if true, vsync interrup is generate only field == 0
+//bit 7:0 fix_disable
+#define   VIU_MISC_CTRL0                           (0x1a06)
+#define P_VIU_MISC_CTRL0                           (volatile unsigned int *)((0x1a06  << 2) + 0xff900000)
+#define   VIU_MISC_CTRL1                           (0x1a07)
+#define P_VIU_MISC_CTRL1                           (volatile unsigned int *)((0x1a07  << 2) + 0xff900000)
+// Bit 15:14  mali_afbcd_gclk_ctrl      mali_afbcd clock gate control[5:4]
+// Bit 12     osd1_afbcd_axi_mux        0 : use the osd mif as input; 1 : use afbcd as input
+// Bit 11:8   mali_afbcd_gclk_ctrl      mali_afbcd clock gate control[3:0]
+// Bit  7:2   vd2_afbcd_gclk_ctrl       vd2_afbcd clock gate control
+// Bit  1     vpp_vd2_din_sel           0: vpp vd2 sel the mif input; 1: vpp vd2 sel the dos afbcd
+// Bit  0     vd2_afbcd_out_sel         0: vd2_afbcd output to vpp; 1 : vd2_afbcd output to di inp
+#define   D2D3_INTF_LENGTH                         (0x1a08)
+#define P_D2D3_INTF_LENGTH                         (volatile unsigned int *)((0x1a08  << 2) + 0xff900000)
+// Bit 31:30 vdin0 dout splitter, bit 0 turns on vdin0 to old path, bit 1 turns on vdin0 to d2d3_intf vdin0 input path
+// Bit 29:28 vdin1 dout splitter, bit 0 turns on vdin1 to old path, bit 1 turns on vdin1 to d2d3_intf vdin1 input path
+// Bit 27:26 NR write dout splitter, bit 0 turns on NR write to old path, bit 1 turns on NR WR to d2d3_intf NR WR input path
+// Bit 23 if true, turn on clk_d2d3_reg (register clock)
+// Bit 22 if true, turn on clk_d2d3
+// Bit 21 reg_v1_go_line
+// Bit 20 reg_v1_go_field
+// Bit 19 reg_v0_go_field
+// Bit 18:16 v1_gofld_sel, 000: display go_field/go_line, 001: DI pre_frame_rst/go_line, 010: vdin0 go_field/go_line,
+//011: vdin1 go_field/go_line, otherwise: force go_field by reg_v1_go_field(bit20), force go_line by reg_v1_go_line(bit21)
+// Bit 15:13 v0_gofld_sel, 000: display go_field, 001: DI pre_frame_rst, 010: vdin0 go_field, 011: vdin1 go_field, otherwise: force go_field by
+// reg_v0_go_field(bit19)
+// Bit 12:6 hole_lines for d2d3 depth read interface
+// Bit 5:4 d2d3_v1_sel, 2'b01: video display read interface(DI or vd1 fomart output), 2'b10: scale output, otherwise nothing as v1
+// Bit 3 use_vdin_eol, if true, use vdin eol as the v0_eol, otherwise using length to get the v0_eol
+// Bit 2:0  d2d3_v0_sel  001: vdin0, 010: vdin1, 011: NRW, 100: video display read interface(DI or vd1 fomart output), 101: vpp scale output
+//
+#define   D2D3_INTF_CTRL0                          (0x1a09)
+#define P_D2D3_INTF_CTRL0                          (volatile unsigned int *)((0x1a09  << 2) + 0xff900000)
+//------------------------------------------------------------------------------
+// OSD1 registers
+//------------------------------------------------------------------------------
+// Bit    31 Reserved
+// Bit    30 RW, enable_free_clk: 1=use free-running clock to drive logics;
+//                                0=use gated clock for low power.
+// Bit    29 R, test_rd_dsr
+// Bit    28 R, osd_done
+// Bit 27:24 R, osd_blk_mode
+// Bit 23:22 R, osd_blk_ptr
+// Bit    21 R, osd_enable
+//
+// Bit 20:12 RW, global_alpha
+// Bit    11 RW, test_rd_en
+// Bit 10: 9 Reserved for control signals
+// Bit  8: 5 RW, ctrl_mtch_y
+// Bit     4 RW, ctrl_422to444
+// Bit  3: 0 RW, osd_blk_enable. Bit 0 to enable block 0: 1=enable, 0=disable;
+//                               Bit 1 to enable block 1, and so on.
+#define   VIU_OSD1_CTRL_STAT                       (0x1a10)
+#define P_VIU_OSD1_CTRL_STAT                       (volatile unsigned int *)((0x1a10  << 2) + 0xff900000)
+// Bit 31:26 Reserved
+// Bit 25:16 R, fifo_count
+// Bit 15    RW, osd_dpath_sel   0-osd1 mif 1-vpu mali afbcd
+// Bit 14    RW, replaced_alpha_en
+// Bit 13: 6 RW, replaced_alpha
+// Bit  5: 4 RW, hold_fifo_lines[6:5]
+// Bit     3 RW, rgb2yuv_full_range
+// Bit     2 RW, alpha_9b_mode
+// Bit     1 RW, reserved
+// Bit     0 RW, color_expand_mode
+#define   VIU_OSD1_CTRL_STAT2                      (0x1a2d)
+#define P_VIU_OSD1_CTRL_STAT2                      (volatile unsigned int *)((0x1a2d  << 2) + 0xff900000)
+// Bit 31: 9 Reserved
+// Bit     8 RW, 0 = Write LUT, 1 = Read LUT
+// Bit  7: 0 RW, lut_addr
+#define   VIU_OSD1_COLOR_ADDR                      (0x1a11)
+#define P_VIU_OSD1_COLOR_ADDR                      (volatile unsigned int *)((0x1a11  << 2) + 0xff900000)
+// Bit 31:24 RW, Y or R
+// Bit 23:16 RW, Cb or G
+// Bit 15: 8 RW, Cr or B
+// Bit  7: 0 RW, Alpha
+#define   VIU_OSD1_COLOR                           (0x1a12)
+#define P_VIU_OSD1_COLOR                           (volatile unsigned int *)((0x1a12  << 2) + 0xff900000)
+// Bit 31:24 RW, Y or R
+// Bit 23:16 RW, Cb or G
+// Bit 15: 8 RW, Cr or B
+// Bit  7: 0 RW, Alpha
+#define   VIU_OSD1_TCOLOR_AG0                      (0x1a17)
+#define P_VIU_OSD1_TCOLOR_AG0                      (volatile unsigned int *)((0x1a17  << 2) + 0xff900000)
+#define   VIU_OSD1_TCOLOR_AG1                      (0x1a18)
+#define P_VIU_OSD1_TCOLOR_AG1                      (volatile unsigned int *)((0x1a18  << 2) + 0xff900000)
+#define   VIU_OSD1_TCOLOR_AG2                      (0x1a19)
+#define P_VIU_OSD1_TCOLOR_AG2                      (volatile unsigned int *)((0x1a19  << 2) + 0xff900000)
+#define   VIU_OSD1_TCOLOR_AG3                      (0x1a1a)
+#define P_VIU_OSD1_TCOLOR_AG3                      (volatile unsigned int *)((0x1a1a  << 2) + 0xff900000)
+// Bit 31:30 Reserved
+// Bit    29 RW, y_rev: 0=normal read, 1=reverse read in Y direction
+// Bit    28 RW, x_rev: 0=normal read, 1=reverse read in X direction
+// Bit 27:24 Reserved
+// Bit 23:16 RW, tbl_addr
+// Bit    15 RW, little_endian: 0=big endian, 1=little endian
+// Bit    14 RW, rpt_y
+// Bit 13:12 RW, interp_ctrl. 0x=No interpolation; 10=Interpolate with previous
+//                            pixel; 11=Interpolate with the average value
+//                            between previous and next pixel.
+// Bit 11: 8 RW, osd_blk_mode
+// Bit     7 RW, rgb_en
+// Bit     6 RW, tc_alpha_en
+// Bit  5: 2 RW, color_matrix
+// Bit     1 RW, interlace_en
+// Bit     0 RW, interlace_sel_odd
+#define   VIU_OSD1_BLK0_CFG_W0                     (0x1a1b)
+#define P_VIU_OSD1_BLK0_CFG_W0                     (volatile unsigned int *)((0x1a1b  << 2) + 0xff900000)
+#define   VIU_OSD1_BLK1_CFG_W0                     (0x1a1f)
+#define P_VIU_OSD1_BLK1_CFG_W0                     (volatile unsigned int *)((0x1a1f  << 2) + 0xff900000)
+#define   VIU_OSD1_BLK2_CFG_W0                     (0x1a23)
+#define P_VIU_OSD1_BLK2_CFG_W0                     (volatile unsigned int *)((0x1a23  << 2) + 0xff900000)
+#define   VIU_OSD1_BLK3_CFG_W0                     (0x1a27)
+#define P_VIU_OSD1_BLK3_CFG_W0                     (volatile unsigned int *)((0x1a27  << 2) + 0xff900000)
+// Bit 31:29 Reserved
+// Bit 28:16 RW, x_end
+// Bit 15:13 Reserved
+// Bit 12: 0 RW, x_start
+#define   VIU_OSD1_BLK0_CFG_W1                     (0x1a1c)
+#define P_VIU_OSD1_BLK0_CFG_W1                     (volatile unsigned int *)((0x1a1c  << 2) + 0xff900000)
+#define   VIU_OSD1_BLK1_CFG_W1                     (0x1a20)
+#define P_VIU_OSD1_BLK1_CFG_W1                     (volatile unsigned int *)((0x1a20  << 2) + 0xff900000)
+#define   VIU_OSD1_BLK2_CFG_W1                     (0x1a24)
+#define P_VIU_OSD1_BLK2_CFG_W1                     (volatile unsigned int *)((0x1a24  << 2) + 0xff900000)
+#define   VIU_OSD1_BLK3_CFG_W1                     (0x1a28)
+#define P_VIU_OSD1_BLK3_CFG_W1                     (volatile unsigned int *)((0x1a28  << 2) + 0xff900000)
+// Bit 31:29 Reserved
+// Bit 28:16 RW, y_end
+// Bit 15:13 Reserved
+// Bit 12: 0 RW, y_start
+#define   VIU_OSD1_BLK0_CFG_W2                     (0x1a1d)
+#define P_VIU_OSD1_BLK0_CFG_W2                     (volatile unsigned int *)((0x1a1d  << 2) + 0xff900000)
+#define   VIU_OSD1_BLK1_CFG_W2                     (0x1a21)
+#define P_VIU_OSD1_BLK1_CFG_W2                     (volatile unsigned int *)((0x1a21  << 2) + 0xff900000)
+#define   VIU_OSD1_BLK2_CFG_W2                     (0x1a25)
+#define P_VIU_OSD1_BLK2_CFG_W2                     (volatile unsigned int *)((0x1a25  << 2) + 0xff900000)
+#define   VIU_OSD1_BLK3_CFG_W2                     (0x1a29)
+#define P_VIU_OSD1_BLK3_CFG_W2                     (volatile unsigned int *)((0x1a29  << 2) + 0xff900000)
+// Bit 31:28 Reserved
+// Bit 27:16 RW, h_end
+// Bit 15:12 Reserved
+// Bit 11: 0 RW, h_start
+#define   VIU_OSD1_BLK0_CFG_W3                     (0x1a1e)
+#define P_VIU_OSD1_BLK0_CFG_W3                     (volatile unsigned int *)((0x1a1e  << 2) + 0xff900000)
+#define   VIU_OSD1_BLK1_CFG_W3                     (0x1a22)
+#define P_VIU_OSD1_BLK1_CFG_W3                     (volatile unsigned int *)((0x1a22  << 2) + 0xff900000)
+#define   VIU_OSD1_BLK2_CFG_W3                     (0x1a26)
+#define P_VIU_OSD1_BLK2_CFG_W3                     (volatile unsigned int *)((0x1a26  << 2) + 0xff900000)
+#define   VIU_OSD1_BLK3_CFG_W3                     (0x1a2a)
+#define P_VIU_OSD1_BLK3_CFG_W3                     (volatile unsigned int *)((0x1a2a  << 2) + 0xff900000)
+// Bit 31:28 Reserved
+// Bit 27:16 RW, v_end
+// Bit 15:12 Reserved
+// Bit 11: 0 RW, v_start
+#define   VIU_OSD1_BLK0_CFG_W4                     (0x1a13)
+#define P_VIU_OSD1_BLK0_CFG_W4                     (volatile unsigned int *)((0x1a13  << 2) + 0xff900000)
+#define   VIU_OSD1_BLK1_CFG_W4                     (0x1a14)
+#define P_VIU_OSD1_BLK1_CFG_W4                     (volatile unsigned int *)((0x1a14  << 2) + 0xff900000)
+#define   VIU_OSD1_BLK2_CFG_W4                     (0x1a15)
+#define P_VIU_OSD1_BLK2_CFG_W4                     (volatile unsigned int *)((0x1a15  << 2) + 0xff900000)
+#define   VIU_OSD1_BLK3_CFG_W4                     (0x1a16)
+#define P_VIU_OSD1_BLK3_CFG_W4                     (volatile unsigned int *)((0x1a16  << 2) + 0xff900000)
+// Bit    31 RW, burst_len_sel[2] of [2:0]
+// Bit    30 RW, byte_swap: In addition to endian control, further define
+//               whether to swap upper and lower byte within a 16-bit mem word.
+//               0=No swap; 1=Swap data[15:0] to be {data[7:0], data[15:8]}
+// Bit    29 RW, div_swap : swap the 2 64bits words in 128 bit word
+// Bit 28:24 RW, fifo_lim : when osd fifo is small than the fifo_lim*16, closed the rq port of osd_rd_mif
+// Bit 23:22 RW, fifo_ctrl: 00 : for 1 word in 1 burst , 01 : for  2words in 1burst, 10: for 4words in 1burst, 11: reserved
+// Bit 21:20 R,  fifo_st. 0=IDLE, 1=FILL, 2=ABORT
+// Bit    19 R,  fifo_overflow
+// Bit 18:12 RW, fifo_depth_val, max value=64: set actual fifo depth to fifo_depth_val*8.
+// Bit 11:10 RW, burst_len_sel[1:0] of [2:0]. 0=24(default), 1=32, 2=48, 3=64, 4=96, 5=128.
+// Bit  9: 5 RW, hold_fifo_lines[4:0]
+// Bit     4 RW, clear_err: one pulse to clear fifo_overflow
+// Bit     3 RW, fifo_sync_rst
+// Bit  2: 1 RW, endian
+// Bit     0 RW, urgent
+#define   VIU_OSD1_FIFO_CTRL_STAT                  (0x1a2b)
+#define P_VIU_OSD1_FIFO_CTRL_STAT                  (volatile unsigned int *)((0x1a2b  << 2) + 0xff900000)
+// Bit 31:24 R, Y or R
+// Bit 23:16 R, Cb or G
+// Bit 15: 8 R, Cr or B
+// Bit  7: 0 R, Output Alpha[8:1]
+#define   VIU_OSD1_TEST_RDDATA                     (0x1a2c)
+#define P_VIU_OSD1_TEST_RDDATA                     (volatile unsigned int *)((0x1a2c  << 2) + 0xff900000)
+// Bit    15 RW, prot_en: 1=Borrow PROT's FIFO storage, either for rotate or non-rotate.
+// Bit 12: 0 RW, effective FIFO size when prot_en=1.
+#define   VIU_OSD1_PROT_CTRL                       (0x1a2e)
+#define P_VIU_OSD1_PROT_CTRL                       (volatile unsigned int *)((0x1a2e  << 2) + 0xff900000)
+//Bit 7,  highlight_en
+//Bit 6   probe_post, if true, probe pixel data after matrix, otherwise probe pixel data before matrix
+//Bit 5:4  probe_sel, 00: select matrix 0, 01: select matrix 1,  otherwise select nothing
+//Bit 3:2, matrix coef idx selection, 00: select mat0, 01: select mat1, otherwise slect nothing
+//Bit 1   mat1 conversion matrix enable
+//Bit 0   mat0 conversion matrix enable
+#define   VIU_OSD1_MATRIX_CTRL                     (0x1a90)
+#define P_VIU_OSD1_MATRIX_CTRL                     (volatile unsigned int *)((0x1a90  << 2) + 0xff900000)
+//Bit 28:16 coef00
+//Bit 12:0  coef01
+#define   VIU_OSD1_MATRIX_COEF00_01                (0x1a91)
+#define P_VIU_OSD1_MATRIX_COEF00_01                (volatile unsigned int *)((0x1a91  << 2) + 0xff900000)
+//Bit 28:16 coef02
+//Bit 12:0  coef10
+#define   VIU_OSD1_MATRIX_COEF02_10                (0x1a92)
+#define P_VIU_OSD1_MATRIX_COEF02_10                (volatile unsigned int *)((0x1a92  << 2) + 0xff900000)
+//Bit 28:16 coef11
+//Bit 12:0  coef12
+#define   VIU_OSD1_MATRIX_COEF11_12                (0x1a93)
+#define P_VIU_OSD1_MATRIX_COEF11_12                (volatile unsigned int *)((0x1a93  << 2) + 0xff900000)
+//Bit 28:16 coef20
+//Bit 12:0  coef21
+#define   VIU_OSD1_MATRIX_COEF20_21                (0x1a94)
+#define P_VIU_OSD1_MATRIX_COEF20_21                (volatile unsigned int *)((0x1a94  << 2) + 0xff900000)
+//Bit 31:30    mat_clmod
+//Bit 18:16    mat_convrs
+//Bit 12:0     mat_coef42
+#define   VIU_OSD1_MATRIX_COLMOD_COEF42            (0x1a95)
+#define P_VIU_OSD1_MATRIX_COLMOD_COEF42            (volatile unsigned int *)((0x1a95  << 2) + 0xff900000)
+//Bit 26:16 offset0
+//Bit 10:0  offset1
+#define   VIU_OSD1_MATRIX_OFFSET0_1                (0x1a96)
+#define P_VIU_OSD1_MATRIX_OFFSET0_1                (volatile unsigned int *)((0x1a96  << 2) + 0xff900000)
+//Bit 10:0  offset2
+#define   VIU_OSD1_MATRIX_OFFSET2                  (0x1a97)
+#define P_VIU_OSD1_MATRIX_OFFSET2                  (volatile unsigned int *)((0x1a97  << 2) + 0xff900000)
+//Bit 26:16 pre_offset0
+//Bit 10:0  pre_offset1
+#define   VIU_OSD1_MATRIX_PRE_OFFSET0_1            (0x1a98)
+#define P_VIU_OSD1_MATRIX_PRE_OFFSET0_1            (volatile unsigned int *)((0x1a98  << 2) + 0xff900000)
+//Bit 10:0  pre_offset2
+#define   VIU_OSD1_MATRIX_PRE_OFFSET2              (0x1a99)
+#define P_VIU_OSD1_MATRIX_PRE_OFFSET2              (volatile unsigned int *)((0x1a99  << 2) + 0xff900000)
+//Read only
+//Bit 29:20 component 0
+//Bit 19:10 component 1
+//Bit 9:0 component 2
+#define   VIU_OSD1_MATRIX_PROBE_COLOR              (0x1a9a)
+#define P_VIU_OSD1_MATRIX_PROBE_COLOR              (volatile unsigned int *)((0x1a9a  << 2) + 0xff900000)
+//Bit 23:16 component 0
+//Bit 15:8  component 1
+//Bit 7:0 component 2
+#define   VIU_OSD1_MATRIX_HL_COLOR                 (0x1a9b)
+#define P_VIU_OSD1_MATRIX_HL_COLOR                 (volatile unsigned int *)((0x1a9b  << 2) + 0xff900000)
+//28:16 probe x, postion
+//12:0  probe y, position
+#define   VIU_OSD1_MATRIX_PROBE_POS                (0x1a9c)
+#define P_VIU_OSD1_MATRIX_PROBE_POS                (volatile unsigned int *)((0x1a9c  << 2) + 0xff900000)
+//Bit 28:16 coef22
+//Bit 12:0  coef30
+#define   VIU_OSD1_MATRIX_COEF22_30                (0x1a9d)
+#define P_VIU_OSD1_MATRIX_COEF22_30                (volatile unsigned int *)((0x1a9d  << 2) + 0xff900000)
+//Bit 28:16 coef31
+//Bit 12:0  coef32
+#define   VIU_OSD1_MATRIX_COEF31_32                (0x1a9e)
+#define P_VIU_OSD1_MATRIX_COEF31_32                (volatile unsigned int *)((0x1a9e  << 2) + 0xff900000)
+//Bit 28:16 coef40
+//Bit 12:0  coef41
+#define   VIU_OSD1_MATRIX_COEF40_41                (0x1a9f)
+#define P_VIU_OSD1_MATRIX_COEF40_41                (volatile unsigned int *)((0x1a9f  << 2) + 0xff900000)
+//Bit 31:27 for all [31] for all eotf enable,[30] for matrix3x3 enable, [29:27] for eotf_ch0~3
+//Bit 17:6  for clock gating
+//Bit 5:4   pscale_mode ch2
+//Bit 3:2   pscale_mode ch1
+//Bit 1:0   pscale_mode ch0
+#define   VIU_OSD1_EOTF_CTL                        (0x1ad4)
+#define P_VIU_OSD1_EOTF_CTL                        (volatile unsigned int *)((0x1ad4  << 2) + 0xff900000)
+//Bit 28:16 coef00
+//Bit 12:0  coef01
+#define   VIU_OSD1_EOTF_COEF00_01                  (0x1ad5)
+#define P_VIU_OSD1_EOTF_COEF00_01                  (volatile unsigned int *)((0x1ad5  << 2) + 0xff900000)
+//Bit 28:16 coef02
+//Bit 12:0  coef10
+#define   VIU_OSD1_EOTF_COEF02_10                  (0x1ad6)
+#define P_VIU_OSD1_EOTF_COEF02_10                  (volatile unsigned int *)((0x1ad6  << 2) + 0xff900000)
+//Bit 28:16 coef11
+//Bit 12:0  coef12
+#define   VIU_OSD1_EOTF_COEF11_12                  (0x1ad7)
+#define P_VIU_OSD1_EOTF_COEF11_12                  (volatile unsigned int *)((0x1ad7  << 2) + 0xff900000)
+//Bit 28:16 coef20
+//Bit 12:0  coef21
+#define   VIU_OSD1_EOTF_COEF20_21                  (0x1ad8)
+#define P_VIU_OSD1_EOTF_COEF20_21                  (volatile unsigned int *)((0x1ad8  << 2) + 0xff900000)
+//Bit 28:16 coef22
+//Bit   2:0 coef_rs
+#define   VIU_OSD1_EOTF_COEF22_RS                  (0x1ad9)
+#define P_VIU_OSD1_EOTF_COEF22_RS                  (volatile unsigned int *)((0x1ad9  << 2) + 0xff900000)
+#define   VIU_OSD1_EOTF_LUT_ADDR_PORT              (0x1ada)
+#define P_VIU_OSD1_EOTF_LUT_ADDR_PORT              (volatile unsigned int *)((0x1ada  << 2) + 0xff900000)
+#define   VIU_OSD1_EOTF_LUT_DATA_PORT              (0x1adb)
+#define P_VIU_OSD1_EOTF_LUT_DATA_PORT              (volatile unsigned int *)((0x1adb  << 2) + 0xff900000)
+//Bit 31:29  for OETF ch0~ch2
+//Bit 21:12  for clock gating
+//Bit 11:8   for oetf_scl_ch2
+//Bit  7:4   for oetf_scl_ch1
+//Bit  3:0   for oetf_scl_ch0
+#define   VIU_OSD1_OETF_CTL                        (0x1adc)
+#define P_VIU_OSD1_OETF_CTL                        (volatile unsigned int *)((0x1adc  << 2) + 0xff900000)
+#define   VIU_OSD1_OETF_LUT_ADDR_PORT              (0x1add)
+#define P_VIU_OSD1_OETF_LUT_ADDR_PORT              (volatile unsigned int *)((0x1add  << 2) + 0xff900000)
+#define   VIU_OSD1_OETF_LUT_DATA_PORT              (0x1ade)
+#define P_VIU_OSD1_OETF_LUT_DATA_PORT              (volatile unsigned int *)((0x1ade  << 2) + 0xff900000)
+#define   VIU_OSD1_OETF_3X3_OFST_0                 (0x1aa0)
+#define P_VIU_OSD1_OETF_3X3_OFST_0                 (volatile unsigned int *)((0x1aa0  << 2) + 0xff900000)
+#define   VIU_OSD1_OETF_3X3_OFST_1                 (0x1aa1)
+#define P_VIU_OSD1_OETF_3X3_OFST_1                 (volatile unsigned int *)((0x1aa1  << 2) + 0xff900000)
+//------------------------------------------------------------------------------
+// OSD2 registers
+//------------------------------------------------------------------------------
+// Bit    31 Reserved
+// Bit    30 RW, enable_free_clk: 1=use free-running clock to drive logics;
+//                                0=use gated clock for low power.
+// Bit    29 R, test_rd_dsr
+// Bit    28 R, osd_done
+// Bit 27:24 R, osd_blk_mode
+// Bit 23:22 R, osd_blk_ptr
+// Bit    21 R, osd_enable
+//
+// Bit 20:12 RW, global_alpha
+// Bit    11 RW, test_rd_en
+// Bit    10 RW, hl2_en
+// Bit     9 RW, hl1_en
+// Bit  8: 5 RW, ctrl_mtch_y
+// Bit     4 RW, ctrl_422to444
+// Bit  3: 0 RW, osd_blk_enable. Bit 0 to enable block 0: 1=enable, 0=disable;
+//                               Bit 1 to enable block 1, and so on.
+#define   VIU_OSD2_CTRL_STAT                       (0x1a30)
+#define P_VIU_OSD2_CTRL_STAT                       (volatile unsigned int *)((0x1a30  << 2) + 0xff900000)
+// Bit 31:26 Reserved
+// Bit 25:16 R, fifo_count
+// Bit 15    Reserved
+// Bit 14    RW, replaced_alpha_en
+// Bit 13: 6 RW, replaced_alpha
+// Bit  5: 4 RW, hold_fifo_lines[6:5]
+// Bit     3 RW, rgb2yuv_full_range
+// Bit     2 RW, alpha_9b_mode
+// Bit     1 RW, reserved
+// Bit     0 RW, color_expand_mode
+#define   VIU_OSD2_CTRL_STAT2                      (0x1a4d)
+#define P_VIU_OSD2_CTRL_STAT2                      (volatile unsigned int *)((0x1a4d  << 2) + 0xff900000)
+// Bit 31: 9 Reserved
+// Bit     8 RW, 0 = Write LUT, 1 = Read LUT
+// Bit  7: 0 RW, lut_addr
+#define   VIU_OSD2_COLOR_ADDR                      (0x1a31)
+#define P_VIU_OSD2_COLOR_ADDR                      (volatile unsigned int *)((0x1a31  << 2) + 0xff900000)
+// Bit 31:24 RW, Y or R
+// Bit 23:16 RW, Cb or G
+// Bit 15: 8 RW, Cr or B
+// Bit  7: 0 RW, Alpha
+#define   VIU_OSD2_COLOR                           (0x1a32)
+#define P_VIU_OSD2_COLOR                           (volatile unsigned int *)((0x1a32  << 2) + 0xff900000)
+// Bit 31:28 Reserved
+// Bit 27:16 RW, hl[1-2]_h/v_start
+// Bit 15:12 Reserved
+// Bit 11: 0 RW, hl[1-2]_h/v_end
+#define   VIU_OSD2_HL1_H_START_END                 (0x1a33)
+#define P_VIU_OSD2_HL1_H_START_END                 (volatile unsigned int *)((0x1a33  << 2) + 0xff900000)
+#define   VIU_OSD2_HL1_V_START_END                 (0x1a34)
+#define P_VIU_OSD2_HL1_V_START_END                 (volatile unsigned int *)((0x1a34  << 2) + 0xff900000)
+#define   VIU_OSD2_HL2_H_START_END                 (0x1a35)
+#define P_VIU_OSD2_HL2_H_START_END                 (volatile unsigned int *)((0x1a35  << 2) + 0xff900000)
+#define   VIU_OSD2_HL2_V_START_END                 (0x1a36)
+#define P_VIU_OSD2_HL2_V_START_END                 (volatile unsigned int *)((0x1a36  << 2) + 0xff900000)
+// Bit 31:24 RW, Y or R
+// Bit 23:16 RW, Cb or G
+// Bit 15: 8 RW, Cr or B
+// Bit  7: 0 RW, Alpha
+#define   VIU_OSD2_TCOLOR_AG0                      (0x1a37)
+#define P_VIU_OSD2_TCOLOR_AG0                      (volatile unsigned int *)((0x1a37  << 2) + 0xff900000)
+#define   VIU_OSD2_TCOLOR_AG1                      (0x1a38)
+#define P_VIU_OSD2_TCOLOR_AG1                      (volatile unsigned int *)((0x1a38  << 2) + 0xff900000)
+#define   VIU_OSD2_TCOLOR_AG2                      (0x1a39)
+#define P_VIU_OSD2_TCOLOR_AG2                      (volatile unsigned int *)((0x1a39  << 2) + 0xff900000)
+#define   VIU_OSD2_TCOLOR_AG3                      (0x1a3a)
+#define P_VIU_OSD2_TCOLOR_AG3                      (volatile unsigned int *)((0x1a3a  << 2) + 0xff900000)
+// Bit 31:24 Reserved
+// Bit 23:16 RW, tbl_addr
+// Bit    15 RW, little_endian: 0=big endian, 1=little endian
+// Bit    14 RW, rpt_y
+// Bit 13:12 RW, interp_ctrl. 0x=No interpolation; 10=Interpolate with previous
+//                            pixel; 11=Interpolate with the average value
+//                            between previous and next pixel.
+// Bit 11: 8 RW, osd_blk_mode
+// Bit     7 RW, rgb_en
+// Bit     6 RW, tc_alpha_en
+// Bit  5: 2 RW, color_matrix
+// Bit     1 RW, interlace_en
+// Bit     0 RW, interlace_sel_odd
+#define   VIU_OSD2_BLK0_CFG_W0                     (0x1a3b)
+#define P_VIU_OSD2_BLK0_CFG_W0                     (volatile unsigned int *)((0x1a3b  << 2) + 0xff900000)
+#define   VIU_OSD2_BLK1_CFG_W0                     (0x1a3f)
+#define P_VIU_OSD2_BLK1_CFG_W0                     (volatile unsigned int *)((0x1a3f  << 2) + 0xff900000)
+#define   VIU_OSD2_BLK2_CFG_W0                     (0x1a43)
+#define P_VIU_OSD2_BLK2_CFG_W0                     (volatile unsigned int *)((0x1a43  << 2) + 0xff900000)
+#define   VIU_OSD2_BLK3_CFG_W0                     (0x1a47)
+#define P_VIU_OSD2_BLK3_CFG_W0                     (volatile unsigned int *)((0x1a47  << 2) + 0xff900000)
+// Bit 31:29 Reserved
+// Bit 28:16 RW, x_end
+// Bit 15:13 Reserved
+// Bit 12: 0 RW, x_start
+#define   VIU_OSD2_BLK0_CFG_W1                     (0x1a3c)
+#define P_VIU_OSD2_BLK0_CFG_W1                     (volatile unsigned int *)((0x1a3c  << 2) + 0xff900000)
+#define   VIU_OSD2_BLK1_CFG_W1                     (0x1a40)
+#define P_VIU_OSD2_BLK1_CFG_W1                     (volatile unsigned int *)((0x1a40  << 2) + 0xff900000)
+#define   VIU_OSD2_BLK2_CFG_W1                     (0x1a44)
+#define P_VIU_OSD2_BLK2_CFG_W1                     (volatile unsigned int *)((0x1a44  << 2) + 0xff900000)
+#define   VIU_OSD2_BLK3_CFG_W1                     (0x1a48)
+#define P_VIU_OSD2_BLK3_CFG_W1                     (volatile unsigned int *)((0x1a48  << 2) + 0xff900000)
+// Bit 31:29 Reserved
+// Bit 28:16 RW, y_end
+// Bit 15:13 Reserved
+// Bit 12: 0 RW, y_start
+#define   VIU_OSD2_BLK0_CFG_W2                     (0x1a3d)
+#define P_VIU_OSD2_BLK0_CFG_W2                     (volatile unsigned int *)((0x1a3d  << 2) + 0xff900000)
+#define   VIU_OSD2_BLK1_CFG_W2                     (0x1a41)
+#define P_VIU_OSD2_BLK1_CFG_W2                     (volatile unsigned int *)((0x1a41  << 2) + 0xff900000)
+#define   VIU_OSD2_BLK2_CFG_W2                     (0x1a45)
+#define P_VIU_OSD2_BLK2_CFG_W2                     (volatile unsigned int *)((0x1a45  << 2) + 0xff900000)
+#define   VIU_OSD2_BLK3_CFG_W2                     (0x1a49)
+#define P_VIU_OSD2_BLK3_CFG_W2                     (volatile unsigned int *)((0x1a49  << 2) + 0xff900000)
+// Bit 31:28 Reserved
+// Bit 27:16 RW, h_end
+// Bit 15:12 Reserved
+// Bit 11: 0 RW, h_start
+#define   VIU_OSD2_BLK0_CFG_W3                     (0x1a3e)
+#define P_VIU_OSD2_BLK0_CFG_W3                     (volatile unsigned int *)((0x1a3e  << 2) + 0xff900000)
+#define   VIU_OSD2_BLK1_CFG_W3                     (0x1a42)
+#define P_VIU_OSD2_BLK1_CFG_W3                     (volatile unsigned int *)((0x1a42  << 2) + 0xff900000)
+#define   VIU_OSD2_BLK2_CFG_W3                     (0x1a46)
+#define P_VIU_OSD2_BLK2_CFG_W3                     (volatile unsigned int *)((0x1a46  << 2) + 0xff900000)
+#define   VIU_OSD2_BLK3_CFG_W3                     (0x1a4a)
+#define P_VIU_OSD2_BLK3_CFG_W3                     (volatile unsigned int *)((0x1a4a  << 2) + 0xff900000)
+// Bit 31:28 Reserved
+// Bit 27:16 RW, v_end
+// Bit 15:12 Reserved
+// Bit 11: 0 RW, v_start
+#define   VIU_OSD2_BLK0_CFG_W4                     (0x1a64)
+#define P_VIU_OSD2_BLK0_CFG_W4                     (volatile unsigned int *)((0x1a64  << 2) + 0xff900000)
+#define   VIU_OSD2_BLK1_CFG_W4                     (0x1a65)
+#define P_VIU_OSD2_BLK1_CFG_W4                     (volatile unsigned int *)((0x1a65  << 2) + 0xff900000)
+#define   VIU_OSD2_BLK2_CFG_W4                     (0x1a66)
+#define P_VIU_OSD2_BLK2_CFG_W4                     (volatile unsigned int *)((0x1a66  << 2) + 0xff900000)
+#define   VIU_OSD2_BLK3_CFG_W4                     (0x1a67)
+#define P_VIU_OSD2_BLK3_CFG_W4                     (volatile unsigned int *)((0x1a67  << 2) + 0xff900000)
+// Bit    31 RW, burst_len_sel[2] of [2:0]
+// Bit    30 RW, byte_swap: In addition to endian control, further define
+//               whether to swap upper and lower byte within a 16-bit mem word.
+//               0=No swap; 1=Swap data[15:0] to be {data[7:0], data[15:8]}
+// Bit    29 RW, div_swap : swap the 2 64bits words in 128 bit word
+// Bit 28:24 RW, fifo_lim : when osd fifo is small than the fifo_lim*16, closed the rq port of osd_rd_mif
+// Bit 23:22 RW, fifo_ctrl: 00 : for 1 word in 1 burst , 01 : for  2words in 1burst, 10: for 4words in 1burst, 11: reserved
+// Bit 21:20 R,  fifo_st. 0=IDLE, 1=FILL, 2=ABORT
+// Bit    19 R,  fifo_overflow
+//
+// Bit 18:12 RW, fifo_depth_val, max value=64: set actual fifo depth to fifo_depth_val*8.
+// Bit 11:10 RW, burst_len_sel[1:0] of [2:0]. 0=24(default), 1=32, 2=48, 3=64, 4=96, 5=128.
+// Bit  9: 5 RW, hold_fifo_lines[4:0]
+// Bit     4 RW, clear_err: one pulse to clear fifo_overflow
+// Bit     3 RW, fifo_sync_rst
+// Bit  2: 1 RW, endian
+// Bit     0 RW, urgent
+#define   VIU_OSD2_FIFO_CTRL_STAT                  (0x1a4b)
+#define P_VIU_OSD2_FIFO_CTRL_STAT                  (volatile unsigned int *)((0x1a4b  << 2) + 0xff900000)
+// Bit 31:24 R, Y or R
+// Bit 23:16 R, Cb or G
+// Bit 15: 8 R, Cr or B
+// Bit  7: 0 R, Output Alpha[8:1]
+#define   VIU_OSD2_TEST_RDDATA                     (0x1a4c)
+#define P_VIU_OSD2_TEST_RDDATA                     (volatile unsigned int *)((0x1a4c  << 2) + 0xff900000)
+// Bit    15 RW, prot_en: 1=Borrow PROT's FIFO storage, either for rotate or non-rotate.
+// Bit 12: 0 RW, effective FIFO size when prot_en=1.
+#define   VIU_OSD2_PROT_CTRL                       (0x1a4e)
+#define P_VIU_OSD2_PROT_CTRL                       (volatile unsigned int *)((0x1a4e  << 2) + 0xff900000)
+//------------------------------------------------------------------------------
+// VD1 path
+//------------------------------------------------------------------------------
+#define   VD1_IF0_GEN_REG                          (0x1a50)
+#define P_VD1_IF0_GEN_REG                          (volatile unsigned int *)((0x1a50  << 2) + 0xff900000)
+#define   VD1_IF0_CANVAS0                          (0x1a51)
+#define P_VD1_IF0_CANVAS0                          (volatile unsigned int *)((0x1a51  << 2) + 0xff900000)
+#define   VD1_IF0_CANVAS1                          (0x1a52)
+#define P_VD1_IF0_CANVAS1                          (volatile unsigned int *)((0x1a52  << 2) + 0xff900000)
+#define   VD1_IF0_LUMA_X0                          (0x1a53)
+#define P_VD1_IF0_LUMA_X0                          (volatile unsigned int *)((0x1a53  << 2) + 0xff900000)
+#define   VD1_IF0_LUMA_Y0                          (0x1a54)
+#define P_VD1_IF0_LUMA_Y0                          (volatile unsigned int *)((0x1a54  << 2) + 0xff900000)
+#define   VD1_IF0_CHROMA_X0                        (0x1a55)
+#define P_VD1_IF0_CHROMA_X0                        (volatile unsigned int *)((0x1a55  << 2) + 0xff900000)
+#define   VD1_IF0_CHROMA_Y0                        (0x1a56)
+#define P_VD1_IF0_CHROMA_Y0                        (volatile unsigned int *)((0x1a56  << 2) + 0xff900000)
+#define   VD1_IF0_LUMA_X1                          (0x1a57)
+#define P_VD1_IF0_LUMA_X1                          (volatile unsigned int *)((0x1a57  << 2) + 0xff900000)
+#define   VD1_IF0_LUMA_Y1                          (0x1a58)
+#define P_VD1_IF0_LUMA_Y1                          (volatile unsigned int *)((0x1a58  << 2) + 0xff900000)
+#define   VD1_IF0_CHROMA_X1                        (0x1a59)
+#define P_VD1_IF0_CHROMA_X1                        (volatile unsigned int *)((0x1a59  << 2) + 0xff900000)
+#define   VD1_IF0_CHROMA_Y1                        (0x1a5a)
+#define P_VD1_IF0_CHROMA_Y1                        (volatile unsigned int *)((0x1a5a  << 2) + 0xff900000)
+#define   VD1_IF0_RPT_LOOP                         (0x1a5b)
+#define P_VD1_IF0_RPT_LOOP                         (volatile unsigned int *)((0x1a5b  << 2) + 0xff900000)
+#define   VD1_IF0_LUMA0_RPT_PAT                    (0x1a5c)
+#define P_VD1_IF0_LUMA0_RPT_PAT                    (volatile unsigned int *)((0x1a5c  << 2) + 0xff900000)
+#define   VD1_IF0_CHROMA0_RPT_PAT                  (0x1a5d)
+#define P_VD1_IF0_CHROMA0_RPT_PAT                  (volatile unsigned int *)((0x1a5d  << 2) + 0xff900000)
+#define   VD1_IF0_LUMA1_RPT_PAT                    (0x1a5e)
+#define P_VD1_IF0_LUMA1_RPT_PAT                    (volatile unsigned int *)((0x1a5e  << 2) + 0xff900000)
+#define   VD1_IF0_CHROMA1_RPT_PAT                  (0x1a5f)
+#define P_VD1_IF0_CHROMA1_RPT_PAT                  (volatile unsigned int *)((0x1a5f  << 2) + 0xff900000)
+#define   VD1_IF0_LUMA_PSEL                        (0x1a60)
+#define P_VD1_IF0_LUMA_PSEL                        (volatile unsigned int *)((0x1a60  << 2) + 0xff900000)
+#define   VD1_IF0_CHROMA_PSEL                      (0x1a61)
+#define P_VD1_IF0_CHROMA_PSEL                      (volatile unsigned int *)((0x1a61  << 2) + 0xff900000)
+#define   VD1_IF0_DUMMY_PIXEL                      (0x1a62)
+#define P_VD1_IF0_DUMMY_PIXEL                      (volatile unsigned int *)((0x1a62  << 2) + 0xff900000)
+#define   VD1_IF0_LUMA_FIFO_SIZE                   (0x1a63)
+#define P_VD1_IF0_LUMA_FIFO_SIZE                   (volatile unsigned int *)((0x1a63  << 2) + 0xff900000)
+#define   VD1_IF0_RANGE_MAP_Y                      (0x1a6a)
+#define P_VD1_IF0_RANGE_MAP_Y                      (volatile unsigned int *)((0x1a6a  << 2) + 0xff900000)
+#define   VD1_IF0_RANGE_MAP_CB                     (0x1a6b)
+#define P_VD1_IF0_RANGE_MAP_CB                     (volatile unsigned int *)((0x1a6b  << 2) + 0xff900000)
+#define   VD1_IF0_RANGE_MAP_CR                     (0x1a6c)
+#define P_VD1_IF0_RANGE_MAP_CR                     (volatile unsigned int *)((0x1a6c  << 2) + 0xff900000)
+#define   VD1_IF0_GEN_REG2                         (0x1a6d)
+#define P_VD1_IF0_GEN_REG2                         (volatile unsigned int *)((0x1a6d  << 2) + 0xff900000)
+#define   VD1_IF0_PROT_CNTL                        (0x1a6e)
+#define P_VD1_IF0_PROT_CNTL                        (volatile unsigned int *)((0x1a6e  << 2) + 0xff900000)
+#define   VD1_IF0_URGENT_CTRL                      (0x1a6f)
+#define P_VD1_IF0_URGENT_CTRL                      (volatile unsigned int *)((0x1a6f  << 2) + 0xff900000)
+//Bit 31    it true, disable clock, otherwise enable clock
+//Bit 30    soft rst bit
+//Bit 28    if true, horizontal formatter use repeating to generete pixel, otherwise use bilinear interpolation
+//Bit 27:24 horizontal formatter initial phase
+//Bit 23    horizontal formatter repeat pixel 0 enable
+//Bit 22:21 horizontal Y/C ratio, 00: 1:1, 01: 2:1, 10: 4:1
+//Bit 20    horizontal formatter enable
+//Bit 19    if true, always use phase0 while vertical formater, meaning always
+//          repeat data, no interpolation
+//Bit 18    if true, disable vertical formatter chroma repeat last line
+//Bit 17    veritcal formatter dont need repeat line on phase0, 1: enable, 0: disable
+//Bit 16    veritcal formatter repeat line 0 enable
+//Bit 15:12 vertical formatter skip line num at the beginning
+//Bit 11:8  vertical formatter initial phase
+//Bit 7:1   vertical formatter phase step (3.4)
+//Bit 0     vertical formatter enable
+#define   VIU_VD1_FMT_CTRL                         (0x1a68)
+#define P_VIU_VD1_FMT_CTRL                         (volatile unsigned int *)((0x1a68  << 2) + 0xff900000)
+//Bit 27:16  horizontal formatter width
+//Bit 11:0   vertical formatter width
+#define   VIU_VD1_FMT_W                            (0x1a69)
+#define P_VIU_VD1_FMT_W                            (volatile unsigned int *)((0x1a69  << 2) + 0xff900000)
+//------------------------------------------------------------------------------
+// VD2 path
+//------------------------------------------------------------------------------
+#define   VD2_IF0_GEN_REG                          (0x1a70)
+#define P_VD2_IF0_GEN_REG                          (volatile unsigned int *)((0x1a70  << 2) + 0xff900000)
+#define   VD2_IF0_CANVAS0                          (0x1a71)
+#define P_VD2_IF0_CANVAS0                          (volatile unsigned int *)((0x1a71  << 2) + 0xff900000)
+#define   VD2_IF0_CANVAS1                          (0x1a72)
+#define P_VD2_IF0_CANVAS1                          (volatile unsigned int *)((0x1a72  << 2) + 0xff900000)
+#define   VD2_IF0_LUMA_X0                          (0x1a73)
+#define P_VD2_IF0_LUMA_X0                          (volatile unsigned int *)((0x1a73  << 2) + 0xff900000)
+#define   VD2_IF0_LUMA_Y0                          (0x1a74)
+#define P_VD2_IF0_LUMA_Y0                          (volatile unsigned int *)((0x1a74  << 2) + 0xff900000)
+#define   VD2_IF0_CHROMA_X0                        (0x1a75)
+#define P_VD2_IF0_CHROMA_X0                        (volatile unsigned int *)((0x1a75  << 2) + 0xff900000)
+#define   VD2_IF0_CHROMA_Y0                        (0x1a76)
+#define P_VD2_IF0_CHROMA_Y0                        (volatile unsigned int *)((0x1a76  << 2) + 0xff900000)
+#define   VD2_IF0_LUMA_X1                          (0x1a77)
+#define P_VD2_IF0_LUMA_X1                          (volatile unsigned int *)((0x1a77  << 2) + 0xff900000)
+#define   VD2_IF0_LUMA_Y1                          (0x1a78)
+#define P_VD2_IF0_LUMA_Y1                          (volatile unsigned int *)((0x1a78  << 2) + 0xff900000)
+#define   VD2_IF0_CHROMA_X1                        (0x1a79)
+#define P_VD2_IF0_CHROMA_X1                        (volatile unsigned int *)((0x1a79  << 2) + 0xff900000)
+#define   VD2_IF0_CHROMA_Y1                        (0x1a7a)
+#define P_VD2_IF0_CHROMA_Y1                        (volatile unsigned int *)((0x1a7a  << 2) + 0xff900000)
+#define   VD2_IF0_RPT_LOOP                         (0x1a7b)
+#define P_VD2_IF0_RPT_LOOP                         (volatile unsigned int *)((0x1a7b  << 2) + 0xff900000)
+#define   VD2_IF0_LUMA0_RPT_PAT                    (0x1a7c)
+#define P_VD2_IF0_LUMA0_RPT_PAT                    (volatile unsigned int *)((0x1a7c  << 2) + 0xff900000)
+#define   VD2_IF0_CHROMA0_RPT_PAT                  (0x1a7d)
+#define P_VD2_IF0_CHROMA0_RPT_PAT                  (volatile unsigned int *)((0x1a7d  << 2) + 0xff900000)
+#define   VD2_IF0_LUMA1_RPT_PAT                    (0x1a7e)
+#define P_VD2_IF0_LUMA1_RPT_PAT                    (volatile unsigned int *)((0x1a7e  << 2) + 0xff900000)
+#define   VD2_IF0_CHROMA1_RPT_PAT                  (0x1a7f)
+#define P_VD2_IF0_CHROMA1_RPT_PAT                  (volatile unsigned int *)((0x1a7f  << 2) + 0xff900000)
+#define   VD2_IF0_LUMA_PSEL                        (0x1a80)
+#define P_VD2_IF0_LUMA_PSEL                        (volatile unsigned int *)((0x1a80  << 2) + 0xff900000)
+#define   VD2_IF0_CHROMA_PSEL                      (0x1a81)
+#define P_VD2_IF0_CHROMA_PSEL                      (volatile unsigned int *)((0x1a81  << 2) + 0xff900000)
+#define   VD2_IF0_DUMMY_PIXEL                      (0x1a82)
+#define P_VD2_IF0_DUMMY_PIXEL                      (volatile unsigned int *)((0x1a82  << 2) + 0xff900000)
+#define   VD2_IF0_LUMA_FIFO_SIZE                   (0x1a83)
+#define P_VD2_IF0_LUMA_FIFO_SIZE                   (volatile unsigned int *)((0x1a83  << 2) + 0xff900000)
+#define   VD2_IF0_RANGE_MAP_Y                      (0x1a8a)
+#define P_VD2_IF0_RANGE_MAP_Y                      (volatile unsigned int *)((0x1a8a  << 2) + 0xff900000)
+#define   VD2_IF0_RANGE_MAP_CB                     (0x1a8b)
+#define P_VD2_IF0_RANGE_MAP_CB                     (volatile unsigned int *)((0x1a8b  << 2) + 0xff900000)
+#define   VD2_IF0_RANGE_MAP_CR                     (0x1a8c)
+#define P_VD2_IF0_RANGE_MAP_CR                     (volatile unsigned int *)((0x1a8c  << 2) + 0xff900000)
+#define   VD2_IF0_GEN_REG2                         (0x1a8d)
+#define P_VD2_IF0_GEN_REG2                         (volatile unsigned int *)((0x1a8d  << 2) + 0xff900000)
+#define   VD2_IF0_PROT_CNTL                        (0x1a8e)
+#define P_VD2_IF0_PROT_CNTL                        (volatile unsigned int *)((0x1a8e  << 2) + 0xff900000)
+#define   VD2_IF0_URGENT_CTRL                      (0x1a8f)
+#define P_VD2_IF0_URGENT_CTRL                      (volatile unsigned int *)((0x1a8f  << 2) + 0xff900000)
+//Bit 31    it true, disable clock, otherwise enable clock
+//Bit 30    soft rst bit
+//Bit 28    if true, horizontal formatter use repeating to generete pixel, otherwise use bilinear interpolation
+//Bit 27:24 horizontal formatter initial phase
+//Bit 23    horizontal formatter repeat pixel 0 enable
+//Bit 22:21 horizontal Y/C ratio, 00: 1:1, 01: 2:1, 10: 4:1
+//Bit 20    horizontal formatter enable
+//Bit 17    veritcal formatter dont need repeat line on phase0, 1: enable, 0: disable
+//Bit 16    veritcal formatter repeat line 0 enable
+//Bit 15:12 vertical formatter skip line num at the beginning
+//Bit 11:8  vertical formatter initial phase
+//Bit 7:1   vertical formatter phase step (3.4)
+//Bit 0     vertical formatter enable
+#define   VIU_VD2_FMT_CTRL                         (0x1a88)
+#define P_VIU_VD2_FMT_CTRL                         (volatile unsigned int *)((0x1a88  << 2) + 0xff900000)
+//Bit 27:16  horizontal formatter width
+//Bit 11:0   vertical formatter width
+#define   VIU_VD2_FMT_W                            (0x1a89)
+#define P_VIU_VD2_FMT_W                            (volatile unsigned int *)((0x1a89  << 2) + 0xff900000)
+//     //todo add comment
+#define   LDIM_STTS_GCLK_CTRL0                     (0x1ac0)
+#define P_LDIM_STTS_GCLK_CTRL0                     (volatile unsigned int *)((0x1ac0  << 2) + 0xff900000)
+#define   LDIM_STTS_CTRL0                          (0x1ac1)
+#define P_LDIM_STTS_CTRL0                          (volatile unsigned int *)((0x1ac1  << 2) + 0xff900000)
+#define   LDIM_STTS_WIDTHM1_HEIGHTM1               (0x1ac2)
+#define P_LDIM_STTS_WIDTHM1_HEIGHTM1               (volatile unsigned int *)((0x1ac2  << 2) + 0xff900000)
+#define   LDIM_STTS_MATRIX_COEF00_01               (0x1ac3)
+#define P_LDIM_STTS_MATRIX_COEF00_01               (volatile unsigned int *)((0x1ac3  << 2) + 0xff900000)
+#define   LDIM_STTS_MATRIX_COEF02_10               (0x1ac4)
+#define P_LDIM_STTS_MATRIX_COEF02_10               (volatile unsigned int *)((0x1ac4  << 2) + 0xff900000)
+#define   LDIM_STTS_MATRIX_COEF11_12               (0x1ac5)
+#define P_LDIM_STTS_MATRIX_COEF11_12               (volatile unsigned int *)((0x1ac5  << 2) + 0xff900000)
+#define   LDIM_STTS_MATRIX_COEF20_21               (0x1ac6)
+#define P_LDIM_STTS_MATRIX_COEF20_21               (volatile unsigned int *)((0x1ac6  << 2) + 0xff900000)
+#define   LDIM_STTS_MATRIX_COEF22                  (0x1ac7)
+#define P_LDIM_STTS_MATRIX_COEF22                  (volatile unsigned int *)((0x1ac7  << 2) + 0xff900000)
+#define   LDIM_STTS_MATRIX_OFFSET0_1               (0x1ac8)
+#define P_LDIM_STTS_MATRIX_OFFSET0_1               (volatile unsigned int *)((0x1ac8  << 2) + 0xff900000)
+#define   LDIM_STTS_MATRIX_OFFSET2                 (0x1ac9)
+#define P_LDIM_STTS_MATRIX_OFFSET2                 (volatile unsigned int *)((0x1ac9  << 2) + 0xff900000)
+#define   LDIM_STTS_MATRIX_PRE_OFFSET0_1           (0x1aca)
+#define P_LDIM_STTS_MATRIX_PRE_OFFSET0_1           (volatile unsigned int *)((0x1aca  << 2) + 0xff900000)
+#define   LDIM_STTS_MATRIX_PRE_OFFSET2             (0x1acb)
+#define P_LDIM_STTS_MATRIX_PRE_OFFSET2             (volatile unsigned int *)((0x1acb  << 2) + 0xff900000)
+#define   LDIM_STTS_MATRIX_HL_COLOR                (0x1acc)
+#define P_LDIM_STTS_MATRIX_HL_COLOR                (volatile unsigned int *)((0x1acc  << 2) + 0xff900000)
+#define   LDIM_STTS_MATRIX_PROBE_POS               (0x1acd)
+#define P_LDIM_STTS_MATRIX_PROBE_POS               (volatile unsigned int *)((0x1acd  << 2) + 0xff900000)
+//
+//     //read only
+#define   LDIM_STTS_MATRIX_PROBE_COLOR             (0x1ace)
+#define P_LDIM_STTS_MATRIX_PROBE_COLOR             (volatile unsigned int *)((0x1ace  << 2) + 0xff900000)
+//
+//     //Bit 31, local dimming statistic enable
+//     //Bit 29, 1: output region histogram 16bit 0:output region histogram 20bit
+//     //Bit 28, eol enable
+//     //Bit 27:25, vertical line overlap number for max finding
+//     //Bit 24:22, horizontal pixel overlap number, 0: 17 pix, 1: 9 pix, 2: 5 pix, 3: 3 pix, 4: 0 pix
+//     //Bit 20, 1,2,1 low pass filter enable before max/hist statistic
+//     //Bit 19:16, region H/V position index, refer to VDIN_LDIM_STTS_HIST_SET_REGION
+//     //Bit 15:14, 1: region read index auto increase per block read finished to VDIN_LDIM_STTS_HIST_READ_REGION
+//     //			 2: region read index auto increase per read finished to VDIN_LDIM_STTS_HIST_READ_REGION
+//     //			 0/3: disable read index self increase
+//     //Bit 13:8, region read sub index, which mux the hist & max-finding result to cbus port, refer to LDIM_STTS_HIST_READ_REGION
+//     //Bit 6:0, region read index
+#define   LDIM_STTS_HIST_REGION_IDX                (0x1ad0)
+#define P_LDIM_STTS_HIST_REGION_IDX                (volatile unsigned int *)((0x1ad0  << 2) + 0xff900000)
+//Bit 28:0, if VDIN_LDIM_STTS_HIST_REGION_IDX[19:16] == 5'h0: read/write hvstart0
+//			if VDIN_LDIM_STTS_HIST_REGION_IDX[19:16] == 5'h1: read/write hend01
+//			if VDIN_LDIM_STTS_HIST_REGION_IDX[19:16] == 5'h2: read/write vend01
+//			if VDIN_LDIM_STTS_HIST_REGION_IDX[19:16] == 5'h3: read/write hend23
+//			if VDIN_LDIM_STTS_HIST_REGION_IDX[19:16] == 5'h4: read/write vend23
+//			if VDIN_LDIM_STTS_HIST_REGION_IDX[19:16] == 5'h5: read/write hend45
+//			if VDIN_LDIM_STTS_HIST_REGION_IDX[19:16] == 5'h6: read/write vend45
+//			if VDIN_LDIM_STTS_HIST_REGION_IDX[19:16] == 5'd7: read/write hend67
+//			if VDIN_LDIM_STTS_HIST_REGION_IDX[19:16] == 5'h8: read/write vend67
+//			if VDIN_LDIM_STTS_HIST_REGION_IDX[19:16] == 5'h9: read/write hend89
+//			if VDIN_LDIM_STTS_HIST_REGION_IDX[19:16] == 5'ha: read/write vend89
+//     //hvstart0, Bit 28:16 row0 vstart, Bit 12:0 col0 hstart
+//     //hend01, Bit 28:16 col1 hend, Bit 12:0 col0 hend
+//     //vend01, Bit 28:16 row1 vend, Bit 12:0 row0 vend
+//     //hend23, Bit 28:16 col3 hend, Bit 12:0 col2 hend
+//     //vend23, Bit 28:16 row3 vend, Bit 12:0 row2 vend
+//     //hend45, Bit 28:16 col5 hend, Bit 12:0 col4 hend
+//     //vend45, Bit 28:16 row5 vend, Bit 12:0 row4 vend
+//     //hend67, Bit 28:16 col7 hend, Bit 12:0 col6 hend
+//     //vend67, Bit 28:16 row7 vend, Bit 12:0 row6 vend
+//     //hend89, Bit 28:16 col9 hend, Bit 12:0 col8 hend
+//     //vend89, Bit 28:16 row9 vend, Bit 12:0 row8 vend
+#define   LDIM_STTS_HIST_SET_REGION                (0x1ad1)
+#define P_LDIM_STTS_HIST_SET_REGION                (volatile unsigned int *)((0x1ad1  << 2) + 0xff900000)
+//
+//     //if LDIM_STTS_HIST_REGION_IDX[29] == 0, that is output hist with 20bit data.
+//     //if LDIM_STTS_HIST_REGION_IDX[21] == 0, that is output 16hist bins in comp 0.
+//     //output sequence as rd_sub_idx from 0~47: {max_comp2, comp0_hist0}, {max_comp1, comp0_hist1}, {max_comp0, comp0_hist2},
+//     //										   comp0_hist3 ... comp2_hist16
+//     //if LDIM_STTS_HIST_REGION_IDX[29] == 1, that is output hist with 16bit data.
+//     //if LDIM_STTS_HIST_REGION_IDX[21] == 0, that is output 16hist bins in comp 0.
+//     //output sequence as rd_sub_idx from 0~47: {max_comp2, max_comp1, max_comp0}, comp0_hist0, comp0_hist1, comp0_hist2
+//     //										   comp0_hist3 ... comp2_hist16
+//     //if LDIM_STTS_HIST_REGION_IDX[29] == 0, that is output hist with 20bit data.
+//     //if LDIM_STTS_HIST_REGION_IDX[21] == 1, that is output 32hist bins in comp 0.
+//     //output sequence as rd_sub_idx from 0~47: {max_comp2, max_comp1, max_comp0}, comp0_hist0, comp0_hist1, comp0_hist2
+//     //										   comp0_hist3 ...comp0_hist31 ... comp1_hist16
+//
+#define   LDIM_STTS_HIST_READ_REGION               (0x1ad2)
+#define P_LDIM_STTS_HIST_READ_REGION               (volatile unsigned int *)((0x1ad2  << 2) + 0xff900000)
+#define   LDIM_STTS_HIST_START_RD_REGION           (0x1ad3)
+#define P_LDIM_STTS_HIST_START_RD_REGION           (volatile unsigned int *)((0x1ad3  << 2) + 0xff900000)
+//     //bit15, auto enable; bit14, canvas write mode ;7:4, high threshold ;3:0 , low threshold  for di if1 chroma path
+//     //bit31, auto enable; bit30, canvas write mode ;23:20, high threshold ;19:16 , low threshold  for di if1 luma path
+//     `define DI_IF1_URGENT_CTRL						8'ha3
+//     //bit15, auto enable; bit14, canvas write mode ;7:4, high threshold ;3:0 , low threshold  for di inp chroma path
+//     //bit31, auto enable; bit30, canvas write mode ;23:20, high threshold ;19:16 , low threshold  for di inp luma path
+//     `define DI_INP_URGENT_CTRL						8'ha4
+//     //bit15, auto enable; bit14, canvas write mode ;7:4, high threshold ;3:0 , low threshold  for di mem chroma path
+//     //bit31, auto enable; bit30, canvas write mode ;23:20, high threshold ;19:16 , low threshold  for di mem luma path
+//     `define DI_MEM_URGENT_CTRL						8'ha5
+//     //bit15, auto enable; bit14, canvas write mode ;7:4, high threshold ;3:0 , low threshold  for di chan2 chroma path
+//     //bit31, auto enable; bit30, canvas write mode ;23:20, high threshold ;19:16 , low threshold  for di chan2 luma path
+//     `define DI_CHAN2_URGENT_CTRL					8'ha6
+#define   VD1_IF0_GEN_REG3                         (0x1aa7)
+#define P_VD1_IF0_GEN_REG3                         (volatile unsigned int *)((0x1aa7  << 2) + 0xff900000)
+//bit 31:1,  reversed
+//bit 0,     cntl_64bit_rev
+#define   VD2_IF0_GEN_REG3                         (0x1aa8)
+#define P_VD2_IF0_GEN_REG3                         (volatile unsigned int *)((0x1aa8  << 2) + 0xff900000)
+//bit 31:1,  reversed
+//bit 0,     cntl_64bit_rev
+#define   OSD_BLENDO_H_START_END                   (0x1aa9)
+#define P_OSD_BLENDO_H_START_END                   (volatile unsigned int *)((0x1aa9  << 2) + 0xff900000)
+//OSD blending output horizontal start and end
+//Bit 28:16 start
+//Bit 12:0 end
+#define   OSD_BLENDO_V_START_END                   (0x1aaa)
+#define P_OSD_BLENDO_V_START_END                   (volatile unsigned int *)((0x1aaa  << 2) + 0xff900000)
+//OSD blending output vertical start and end
+//Bit 28:16 start
+//Bit 12:0 end
+#define   OSD_BLEND_GEN_CTRL0                      (0x1aab)
+#define P_OSD_BLEND_GEN_CTRL0                      (volatile unsigned int *)((0x1aab  << 2) + 0xff900000)
+//Bit 31:23 const_out_alpha
+//Bit 22:14 const_op_alpha
+//Bit 13 if true, OSD2 foreground otherwise OSD1 foreground
+//Bit 12  OSD BLENDing enable
+//Bit 9:8 alpha_op_sel 00: output alpha use osd1_alpha, 01: use osd2_alpha, else use const_out_alpha
+//Bit 5:4 color_op_sel 00: use osd1_alpha, 01: use osd2_alpha, else use const_op_alpha
+//Bit 1  OSD2 enable
+//Bit 0  OSD1 enable
+#define   OSD_BLEND_GEN_CTRL1                      (0x1aac)
+#define P_OSD_BLEND_GEN_CTRL1                      (volatile unsigned int *)((0x1aac  << 2) + 0xff900000)
+//Bit 31    osd1_alpha_premult, if true, osd1 alpha is premultipiled
+//Bit 30    osd2_alpha_premult, if true, osd2 alpha is premultipiled
+//Bit 23:16 osd blending hold lines
+//Bit 13:0  osd blending h_size
+#define   OSD_BLEND_DUMMY_DATA                     (0x1aad)
+#define P_OSD_BLEND_DUMMY_DATA                     (volatile unsigned int *)((0x1aad  << 2) + 0xff900000)
+//Bit 29:20   Y/R
+//Bit 19:10   CB/G
+//Bit 9:0     Cr/B
+#define   OSD_BLEND_CURRENT_XY                     (0x1aae)
+#define P_OSD_BLEND_CURRENT_XY                     (volatile unsigned int *)((0x1aae  << 2) + 0xff900000)
+//Bit 28:16 current_x
+//Bit 12:0 current_y
+//Bit 7,  highlight_en
+//Bit 6   probe_post, if true, probe pixel data after matrix, otherwise probe pixel data before matrix
+//Bit 5:4  probe_sel, 00: select matrix 0, 01: select matrix 1,  otherwise select nothing
+//Bit 3:2, matrix coef idx selection, 00: select mat0, 01: select mat1, otherwise slect nothing
+//Bit 1   mat1 conversion matrix enable
+//Bit 0   mat0 conversion matrix enable
+#define   VIU_OSD2_MATRIX_CTRL                     (0x1ab0)
+#define P_VIU_OSD2_MATRIX_CTRL                     (volatile unsigned int *)((0x1ab0  << 2) + 0xff900000)
+//Bit 28:16 coef00
+//Bit 12:0  coef01
+#define   VIU_OSD2_MATRIX_COEF00_01                (0x1ab1)
+#define P_VIU_OSD2_MATRIX_COEF00_01                (volatile unsigned int *)((0x1ab1  << 2) + 0xff900000)
+//Bit 28:16 coef02
+//Bit 12:0  coef10
+#define   VIU_OSD2_MATRIX_COEF02_10                (0x1ab2)
+#define P_VIU_OSD2_MATRIX_COEF02_10                (volatile unsigned int *)((0x1ab2  << 2) + 0xff900000)
+//Bit 28:16 coef11
+//Bit 12:0  coef12
+#define   VIU_OSD2_MATRIX_COEF11_12                (0x1ab3)
+#define P_VIU_OSD2_MATRIX_COEF11_12                (volatile unsigned int *)((0x1ab3  << 2) + 0xff900000)
+//Bit 28:16 coef20
+//Bit 12:0  coef21
+#define   VIU_OSD2_MATRIX_COEF20_21                (0x1ab4)
+#define P_VIU_OSD2_MATRIX_COEF20_21                (volatile unsigned int *)((0x1ab4  << 2) + 0xff900000)
+#define   VIU_OSD2_MATRIX_COEF22                   (0x1ab5)
+#define P_VIU_OSD2_MATRIX_COEF22                   (volatile unsigned int *)((0x1ab5  << 2) + 0xff900000)
+//Bit 26:16 offset0
+//Bit 10:0  offset1
+#define   VIU_OSD2_MATRIX_OFFSET0_1                (0x1ab6)
+#define P_VIU_OSD2_MATRIX_OFFSET0_1                (volatile unsigned int *)((0x1ab6  << 2) + 0xff900000)
+//Bit 10:0  offset2
+#define   VIU_OSD2_MATRIX_OFFSET2                  (0x1ab7)
+#define P_VIU_OSD2_MATRIX_OFFSET2                  (volatile unsigned int *)((0x1ab7  << 2) + 0xff900000)
+//Bit 26:16 pre_offset0
+//Bit 10:0  pre_offset1
+#define   VIU_OSD2_MATRIX_PRE_OFFSET0_1            (0x1ab8)
+#define P_VIU_OSD2_MATRIX_PRE_OFFSET0_1            (volatile unsigned int *)((0x1ab8  << 2) + 0xff900000)
+//Bit 10:0  pre_offset2
+#define   VIU_OSD2_MATRIX_PRE_OFFSET2              (0x1ab9)
+#define P_VIU_OSD2_MATRIX_PRE_OFFSET2              (volatile unsigned int *)((0x1ab9  << 2) + 0xff900000)
+//Read only
+//Bit 29:20 component 0
+//Bit 19:10 component 1
+//Bit 9:0 component 2
+#define   VIU_OSD2_MATRIX_PROBE_COLOR              (0x1aba)
+#define P_VIU_OSD2_MATRIX_PROBE_COLOR              (volatile unsigned int *)((0x1aba  << 2) + 0xff900000)
+//Bit 23:16 component 0
+//Bit 15:8  component 1
+//Bit 7:0 component 2
+#define   VIU_OSD2_MATRIX_HL_COLOR                 (0x1abb)
+#define P_VIU_OSD2_MATRIX_HL_COLOR                 (volatile unsigned int *)((0x1abb  << 2) + 0xff900000)
+//28:16 probe x, postion
+//12:0  probe y, position
+#define   VIU_OSD2_MATRIX_PROBE_POS                (0x1abc)
+#define P_VIU_OSD2_MATRIX_PROBE_POS                (volatile unsigned int *)((0x1abc  << 2) + 0xff900000)
+//the segment of afbc dec is 8'he0-8'hfe
+//`define AFBC_DEC_OFFSET   8'he0
+//
+// Reading file:  afbc_dec_regs.h
+//
+// synopsys translate_off
+// synopsys translate_on
+////===============================////
+//// reg
+////===============================////
+#define   AFBC_ENABLE                              (0x1ae0)
+#define P_AFBC_ENABLE                              (volatile unsigned int *)((0x1ae0  << 2) + 0xff900000)
+//Bit   31:1,     reserved
+//Bit   8,        dec_enable        unsigned  , default = 0
+//Bit   7:1,      reserved
+//Bit   0,        frm_start         unsigned  , default = 0
+#define   AFBC_MODE                                (0x1ae1)
+#define P_AFBC_MODE                                (volatile unsigned int *)((0x1ae1  << 2) + 0xff900000)
+//Bit   31,       soft_reset        the use as go_field
+//Bit   30,       reserved
+//Bit   29,       ddr_sz_mode       uns, default = 0 , 0: fixed block ddr size 1 : unfixed block ddr size;
+//Bit   28,       blk_mem_mode      uns, default = 0 , 0: fixed 16x128 size; 1 : fixed 12x128 size
+//Bit   27:26,    rev_mode          uns, default = 0 , reverse mode
+//Bit   25:24,    mif_urgent        uns, default = 3 , info mif and data mif urgent
+//Bit   22:16,    hold_line_num
+//Bit   15:14,    burst_len         uns, default = 1, 0: burst1 1:burst2 2:burst4
+//Bit   13:8,     compbits_yuv      uns, default = 0 ,
+//                                  bit 1:0,: y  component bitwidth : 00-8bit 01-9bit 10-10bit
+//                                  bit 3:2,: u  component bitwidth : 00-8bit 01-9bit 10-10bit
+//                                  bit 5:4,: v  component bitwidth : 00-8bit 01-9bit 10-10bit
+//Bit   7:6,      vert_skip_y       uns, default = 0 , luma vert skip mode : 00-y0y1, 01-y0, 10-y1, 11-(y0+y1)/2
+//Bit   5:4,      horz_skip_y       uns, default = 0 , luma horz skip mode : 00-y0y1, 01-y0, 10-y1, 11-(y0+y1)/2
+//Bit   3:2,      vert_skip_uv      uns, default = 0 , chroma vert skip mode : 00-y0y1, 01-y0, 10-y1, 11-(y0+y1)/2
+//Bit   1:0,      horz_skip_uv      uns, default = 0 , chroma horz skip mode : 00-y0y1, 01-y0, 10-y1, 11-(y0+y1)/2
+#define   AFBC_SIZE_IN                             (0x1ae2)
+#define P_AFBC_SIZE_IN                             (volatile unsigned int *)((0x1ae2  << 2) + 0xff900000)
+//Bit   31:29,    reserved
+//Bit   28:16     hsize_in          uns, default = 1920 , pic horz size in  unit: pixel
+//Bit   15:13,    reserved
+//Bit   12:0,     vsize_in          uns, default = 1080 , pic vert size in  unit: pixel
+#define   AFBC_DEC_DEF_COLOR                       (0x1ae3)
+#define P_AFBC_DEC_DEF_COLOR                       (volatile unsigned int *)((0x1ae3  << 2) + 0xff900000)
+//Bit   31:29,    reserved
+//Bit   29:20,   def_color_y        uns, default = 0, afbc dec y default setting value
+//Bit   19:10,   def_color_u        uns, default = 0, afbc dec u default setting value
+//Bit    9: 0,   def_color_v        uns, default = 0, afbc dec v default setting value
+#define   AFBC_CONV_CTRL                           (0x1ae4)
+#define P_AFBC_CONV_CTRL                           (volatile unsigned int *)((0x1ae4  << 2) + 0xff900000)
+//Bit   31:12,   reserved
+//Bit   11: 0,   conv_lbuf_len       uns, default = 256, unit=16 pixel need to set = 2^n
+#define   AFBC_LBUF_DEPTH                          (0x1ae5)
+#define P_AFBC_LBUF_DEPTH                          (volatile unsigned int *)((0x1ae5  << 2) + 0xff900000)
+//Bit   31:28,   reserved
+//Bit   27:16,   dec_lbuf_depth      uns, default = 128; // unit= 8 pixel
+//Bit   15:12,   reserved
+//Bit   11:0,    mif_lbuf_depth      uns, default = 128;
+#define   AFBC_HEAD_BADDR                          (0x1ae6)
+#define P_AFBC_HEAD_BADDR                          (volatile unsigned int *)((0x1ae6  << 2) + 0xff900000)
+//Bit   31:0,   mif_info_baddr      uns, default = 32'h0;
+#define   AFBC_BODY_BADDR                          (0x1ae7)
+#define P_AFBC_BODY_BADDR                          (volatile unsigned int *)((0x1ae7  << 2) + 0xff900000)
+//Bit   31:0,   mif_data_baddr      uns, default = 32'h0001_0000;
+#define   AFBC_SIZE_OUT                            (0x1ae8)
+#define P_AFBC_SIZE_OUT                            (volatile unsigned int *)((0x1ae8  << 2) + 0xff900000)
+//Bit   31:29,   reserved
+//Bit   28:16,   hsize_out           uns, default = 1920    ; // unit: 1 pixel
+//Bit   15:13,   reserved
+//Bit    12:0,   vsize_out           uns, default = 1080 ; // unit: 1 pixel
+#define   AFBC_OUT_YSCOPE                          (0x1ae9)
+#define P_AFBC_OUT_YSCOPE                          (volatile unsigned int *)((0x1ae9  << 2) + 0xff900000)
+//Bit   31:29,   reserved
+//Bit   28:16,   out_vert_bgn        uns, default = 0    ; // unit: 1 pixel
+//Bit   15:13,   reserved
+//Bit    12:0,   out_vert_end        uns, default = 1079 ; // unit: 1 pixel
+#define   AFBC_STAT                                (0x1aea)
+#define P_AFBC_STAT                                (volatile unsigned int *)((0x1aea  << 2) + 0xff900000)
+//Bit   31:1,   reserved
+//Bit      0,   frm_end_stat         uns, frame end status
+#define   AFBC_VD_CFMT_CTRL                        (0x1aeb)
+#define P_AFBC_VD_CFMT_CTRL                        (volatile unsigned int *)((0x1aeb  << 2) + 0xff900000)
+//Bit 31    it true, disable clock, otherwise enable clock
+//Bit 30    soft rst bit
+//Bit 28    if true, horizontal formatter use repeating to generete pixel, otherwise use bilinear interpolation
+//Bit 27:24 horizontal formatter initial phase
+//Bit 23    horizontal formatter repeat pixel 0 enable
+//Bit 22:21 horizontal Y/C ratio, 00: 1:1, 01: 2:1, 10: 4:1
+//Bit 20    horizontal formatter enable
+//Bit 19    if true, always use phase0 while vertical formater, meaning always
+//          repeat data, no interpolation
+//Bit 18    if true, disable vertical formatter chroma repeat last line
+//Bit 17    veritcal formatter dont need repeat line on phase0, 1: enable, 0: disable
+//Bit 16    veritcal formatter repeat line 0 enable
+//Bit 15:12 vertical formatter skip line num at the beginning
+//Bit 11:8  vertical formatter initial phase
+//Bit 7:1   vertical formatter phase step (3.4)
+//Bit 0     vertical formatter enable
+#define   AFBC_VD_CFMT_W                           (0x1aec)
+#define P_AFBC_VD_CFMT_W                           (volatile unsigned int *)((0x1aec  << 2) + 0xff900000)
+//Bit 27:16  horizontal formatter width
+//Bit 11:0   vertical formatter width
+#define   AFBC_MIF_HOR_SCOPE                       (0x1aed)
+#define P_AFBC_MIF_HOR_SCOPE                       (volatile unsigned int *)((0x1aed  << 2) + 0xff900000)
+//Bit   31:26,   reserved
+//Bit   25:16,   mif_blk_bgn_h        uns, default = 0  ; // unit: 32 pixel/block hor
+//Bit   15:10,   reserved
+//Bit    9: 0,   mif_blk_end_h        uns, default = 59 ; // unit: 32 pixel/block hor
+#define   AFBC_MIF_VER_SCOPE                       (0x1aee)
+#define P_AFBC_MIF_VER_SCOPE                       (volatile unsigned int *)((0x1aee  << 2) + 0xff900000)
+//Bit   31:28,   reserved
+//Bit   27:16,   mif_blk_bgn_v        uns, default = 0  ; // unit: 32 pixel/block ver
+//Bit   15:12,   reserved
+//Bit   11: 0,   mif_blk_end_v        uns, default = 269; // unit: 32 pixel/block ver
+#define   AFBC_PIXEL_HOR_SCOPE                     (0x1aef)
+#define P_AFBC_PIXEL_HOR_SCOPE                     (volatile unsigned int *)((0x1aef  << 2) + 0xff900000)
+//Bit   31:29,   reserved
+//Bit   28:16,   dec_pixel_bgn_h        uns, default = 0  ; // unit: pixel
+//Bit   15:13,   reserved
+//Bit   12: 0,   dec_pixel_end_h        uns, default = 1919 ; // unit: pixel
+#define   AFBC_PIXEL_VER_SCOPE                     (0x1af0)
+#define P_AFBC_PIXEL_VER_SCOPE                     (volatile unsigned int *)((0x1af0  << 2) + 0xff900000)
+//Bit   31:29,   reserved
+//Bit   28:16,   dec_pixel_bgn_v        uns, default = 0  ; // unit: pixel
+//Bit   15:13,   reserved
+//Bit   12: 0,   dec_pixel_end_v        uns, default = 1079 ; // unit: pixel
+#define   AFBC_VD_CFMT_H                           (0x1af1)
+#define P_AFBC_VD_CFMT_H                           (volatile unsigned int *)((0x1af1  << 2) + 0xff900000)
+//Bit 12:0   vertical formatter height
+// synopsys translate_off
+// synopsys translate_on
+//
+// Closing file:  afbc_dec_regs.h
+//
+//
+// Closing file:  vregs_clk2.h
+//
+//`define  VENC_VCBUS_BASE              8'h1b
+//
+// Reading file:  venc_regs.h
+//
+//===========================================================================
+// Video Interface Registers    0xa00 - 0xbff
+//===========================================================================
+// -----------------------------------------------
+// CBUS_BASE:  VENC_VCBUS_BASE = 0x1b
+// -----------------------------------------------
+// bit 15:8 -- vfifo2vd_vd_sel
+// bit 0 -- vfifo2vd_en
+#define   ENCP_VFIFO2VD_CTL                        (0x1b58)
+#define P_ENCP_VFIFO2VD_CTL                        (volatile unsigned int *)((0x1b58  << 2) + 0xff900000)
+// bit 12:0 -- vfifo2vd_pixel_start
+#define   ENCP_VFIFO2VD_PIXEL_START                (0x1b59)
+#define P_ENCP_VFIFO2VD_PIXEL_START                (volatile unsigned int *)((0x1b59  << 2) + 0xff900000)
+// bit 12:00 -- vfifo2vd_pixel_end
+#define   ENCP_VFIFO2VD_PIXEL_END                  (0x1b5a)
+#define P_ENCP_VFIFO2VD_PIXEL_END                  (volatile unsigned int *)((0x1b5a  << 2) + 0xff900000)
+// bit 10:0 -- vfifo2vd_line_top_start
+#define   ENCP_VFIFO2VD_LINE_TOP_START             (0x1b5b)
+#define P_ENCP_VFIFO2VD_LINE_TOP_START             (volatile unsigned int *)((0x1b5b  << 2) + 0xff900000)
+// bit 10:00 -- vfifo2vd_line_top_end
+#define   ENCP_VFIFO2VD_LINE_TOP_END               (0x1b5c)
+#define P_ENCP_VFIFO2VD_LINE_TOP_END               (volatile unsigned int *)((0x1b5c  << 2) + 0xff900000)
+// bit 10:00 -- vfifo2vd_line_bot_start
+#define   ENCP_VFIFO2VD_LINE_BOT_START             (0x1b5d)
+#define P_ENCP_VFIFO2VD_LINE_BOT_START             (volatile unsigned int *)((0x1b5d  << 2) + 0xff900000)
+// bit 10:00 -- vfifo2vd_line_bot_end
+#define   ENCP_VFIFO2VD_LINE_BOT_END               (0x1b5e)
+#define P_ENCP_VFIFO2VD_LINE_BOT_END               (volatile unsigned int *)((0x1b5e  << 2) + 0xff900000)
+// Route the hsync and vsync signals round the chip. There are three
+// sources and users of these signals: VIU, internal video encoder, and
+// the pins on the chip. Some muxing is still being done in the VIU. It
+// was not moved to the venc module so that the same exact VIU code could
+// be used both in Twister and Twister2000.
+// Bit 2: venc_sync_source (1=>pins, 0=>viu)
+// Bit 1: viu_sync_source (1=>pins, 0=>venc)
+// Bit 0: vpins_sync_source (1=>venc, 0=>viu)
+#define   VENC_SYNC_ROUTE                          (0x1b60)
+#define P_VENC_SYNC_ROUTE                          (volatile unsigned int *)((0x1b60  << 2) + 0xff900000)
+#define   VENC_VIDEO_EXSRC                         (0x1b61)
+#define P_VENC_VIDEO_EXSRC                         (volatile unsigned int *)((0x1b61  << 2) + 0xff900000)
+#define   VENC_DVI_SETTING                         (0x1b62)
+#define P_VENC_DVI_SETTING                         (volatile unsigned int *)((0x1b62  << 2) + 0xff900000)
+#define   VENC_C656_CTRL                           (0x1b63)
+#define P_VENC_C656_CTRL                           (volatile unsigned int *)((0x1b63  << 2) + 0xff900000)
+#define   VENC_UPSAMPLE_CTRL0                      (0x1b64)
+#define P_VENC_UPSAMPLE_CTRL0                      (volatile unsigned int *)((0x1b64  << 2) + 0xff900000)
+#define   VENC_UPSAMPLE_CTRL1                      (0x1b65)
+#define P_VENC_UPSAMPLE_CTRL1                      (volatile unsigned int *)((0x1b65  << 2) + 0xff900000)
+#define   VENC_UPSAMPLE_CTRL2                      (0x1b66)
+#define P_VENC_UPSAMPLE_CTRL2                      (volatile unsigned int *)((0x1b66  << 2) + 0xff900000)
+// Invert control for tcon output
+// bit[15:14] -- vsync, hsync,
+// bit[13:0] --  oev3, oev2, cpv2, cph3, cph2, cph1, oeh, vcom, stv2, stv1, cpv1, oev1, sth1, sth2
+#define   TCON_INVERT_CTL                          (0x1b67)
+#define P_TCON_INVERT_CTL                          (volatile unsigned int *)((0x1b67  << 2) + 0xff900000)
+#define   VENC_VIDEO_PROG_MODE                     (0x1b68)
+#define P_VENC_VIDEO_PROG_MODE                     (volatile unsigned int *)((0x1b68  << 2) + 0xff900000)
+//---- Venc pixel/line info
+#define   VENC_ENCI_LINE                           (0x1b69)
+#define P_VENC_ENCI_LINE                           (volatile unsigned int *)((0x1b69  << 2) + 0xff900000)
+#define   VENC_ENCI_PIXEL                          (0x1b6a)
+#define P_VENC_ENCI_PIXEL                          (volatile unsigned int *)((0x1b6a  << 2) + 0xff900000)
+#define   VENC_ENCP_LINE                           (0x1b6b)
+#define P_VENC_ENCP_LINE                           (volatile unsigned int *)((0x1b6b  << 2) + 0xff900000)
+#define   VENC_ENCP_PIXEL                          (0x1b6c)
+#define P_VENC_ENCP_PIXEL                          (volatile unsigned int *)((0x1b6c  << 2) + 0xff900000)
+//---- Status
+#define   VENC_STATA                               (0x1b6d)
+#define P_VENC_STATA                               (volatile unsigned int *)((0x1b6d  << 2) + 0xff900000)
+//---- Interrupt setting
+#define   VENC_INTCTRL                             (0x1b6e)
+#define P_VENC_INTCTRL                             (volatile unsigned int *)((0x1b6e  << 2) + 0xff900000)
+#define   VENC_INTFLAG                             (0x1b6f)
+#define P_VENC_INTFLAG                             (volatile unsigned int *)((0x1b6f  << 2) + 0xff900000)
+//--------- Video test configuration
+#define   VENC_VIDEO_TST_EN                        (0x1b70)
+#define P_VENC_VIDEO_TST_EN                        (volatile unsigned int *)((0x1b70  << 2) + 0xff900000)
+#define   VENC_VIDEO_TST_MDSEL                     (0x1b71)
+#define P_VENC_VIDEO_TST_MDSEL                     (volatile unsigned int *)((0x1b71  << 2) + 0xff900000)
+#define   VENC_VIDEO_TST_Y                         (0x1b72)
+#define P_VENC_VIDEO_TST_Y                         (volatile unsigned int *)((0x1b72  << 2) + 0xff900000)
+#define   VENC_VIDEO_TST_CB                        (0x1b73)
+#define P_VENC_VIDEO_TST_CB                        (volatile unsigned int *)((0x1b73  << 2) + 0xff900000)
+#define   VENC_VIDEO_TST_CR                        (0x1b74)
+#define P_VENC_VIDEO_TST_CR                        (volatile unsigned int *)((0x1b74  << 2) + 0xff900000)
+#define   VENC_VIDEO_TST_CLRBAR_STRT               (0x1b75)
+#define P_VENC_VIDEO_TST_CLRBAR_STRT               (volatile unsigned int *)((0x1b75  << 2) + 0xff900000)
+#define   VENC_VIDEO_TST_CLRBAR_WIDTH              (0x1b76)
+#define P_VENC_VIDEO_TST_CLRBAR_WIDTH              (volatile unsigned int *)((0x1b76  << 2) + 0xff900000)
+#define   VENC_VIDEO_TST_VDCNT_STSET               (0x1b77)
+#define P_VENC_VIDEO_TST_VDCNT_STSET               (volatile unsigned int *)((0x1b77  << 2) + 0xff900000)
+//----- Video dac setting
+#define   VENC_VDAC_DACSEL0                        (0x1b78)
+#define P_VENC_VDAC_DACSEL0                        (volatile unsigned int *)((0x1b78  << 2) + 0xff900000)
+#define   VENC_VDAC_DACSEL1                        (0x1b79)
+#define P_VENC_VDAC_DACSEL1                        (volatile unsigned int *)((0x1b79  << 2) + 0xff900000)
+#define   VENC_VDAC_DACSEL2                        (0x1b7a)
+#define P_VENC_VDAC_DACSEL2                        (volatile unsigned int *)((0x1b7a  << 2) + 0xff900000)
+#define   VENC_VDAC_DACSEL3                        (0x1b7b)
+#define P_VENC_VDAC_DACSEL3                        (volatile unsigned int *)((0x1b7b  << 2) + 0xff900000)
+#define   VENC_VDAC_DACSEL4                        (0x1b7c)
+#define P_VENC_VDAC_DACSEL4                        (volatile unsigned int *)((0x1b7c  << 2) + 0xff900000)
+#define   VENC_VDAC_DACSEL5                        (0x1b7d)
+#define P_VENC_VDAC_DACSEL5                        (volatile unsigned int *)((0x1b7d  << 2) + 0xff900000)
+#define   VENC_VDAC_SETTING                        (0x1b7e)
+#define P_VENC_VDAC_SETTING                        (volatile unsigned int *)((0x1b7e  << 2) + 0xff900000)
+#define   VENC_VDAC_TST_VAL                        (0x1b7f)
+#define P_VENC_VDAC_TST_VAL                        (volatile unsigned int *)((0x1b7f  << 2) + 0xff900000)
+#define   VENC_VDAC_DAC0_GAINCTRL                  (0x1bf0)
+#define P_VENC_VDAC_DAC0_GAINCTRL                  (volatile unsigned int *)((0x1bf0  << 2) + 0xff900000)
+#define   VENC_VDAC_DAC0_OFFSET                    (0x1bf1)
+#define P_VENC_VDAC_DAC0_OFFSET                    (volatile unsigned int *)((0x1bf1  << 2) + 0xff900000)
+#define   VENC_VDAC_DAC1_GAINCTRL                  (0x1bf2)
+#define P_VENC_VDAC_DAC1_GAINCTRL                  (volatile unsigned int *)((0x1bf2  << 2) + 0xff900000)
+#define   VENC_VDAC_DAC1_OFFSET                    (0x1bf3)
+#define P_VENC_VDAC_DAC1_OFFSET                    (volatile unsigned int *)((0x1bf3  << 2) + 0xff900000)
+#define   VENC_VDAC_DAC2_GAINCTRL                  (0x1bf4)
+#define P_VENC_VDAC_DAC2_GAINCTRL                  (volatile unsigned int *)((0x1bf4  << 2) + 0xff900000)
+#define   VENC_VDAC_DAC2_OFFSET                    (0x1bf5)
+#define P_VENC_VDAC_DAC2_OFFSET                    (volatile unsigned int *)((0x1bf5  << 2) + 0xff900000)
+#define   VENC_VDAC_DAC3_GAINCTRL                  (0x1bf6)
+#define P_VENC_VDAC_DAC3_GAINCTRL                  (volatile unsigned int *)((0x1bf6  << 2) + 0xff900000)
+#define   VENC_VDAC_DAC3_OFFSET                    (0x1bf7)
+#define P_VENC_VDAC_DAC3_OFFSET                    (volatile unsigned int *)((0x1bf7  << 2) + 0xff900000)
+#define   VENC_VDAC_DAC4_GAINCTRL                  (0x1bf8)
+#define P_VENC_VDAC_DAC4_GAINCTRL                  (volatile unsigned int *)((0x1bf8  << 2) + 0xff900000)
+#define   VENC_VDAC_DAC4_OFFSET                    (0x1bf9)
+#define P_VENC_VDAC_DAC4_OFFSET                    (volatile unsigned int *)((0x1bf9  << 2) + 0xff900000)
+#define   VENC_VDAC_DAC5_GAINCTRL                  (0x1bfa)
+#define P_VENC_VDAC_DAC5_GAINCTRL                  (volatile unsigned int *)((0x1bfa  << 2) + 0xff900000)
+#define   VENC_VDAC_DAC5_OFFSET                    (0x1bfb)
+#define P_VENC_VDAC_DAC5_OFFSET                    (volatile unsigned int *)((0x1bfb  << 2) + 0xff900000)
+#define   VENC_VDAC_FIFO_CTRL                      (0x1bfc)
+#define P_VENC_VDAC_FIFO_CTRL                      (volatile unsigned int *)((0x1bfc  << 2) + 0xff900000)
+#define   ENCL_TCON_INVERT_CTL                     (0x1bfd)
+#define P_ENCL_TCON_INVERT_CTL                     (volatile unsigned int *)((0x1bfd  << 2) + 0xff900000)
+//
+// Closing file:  venc_regs.h
+//
+//
+// Reading file:  enc480p_regs.h
+//
+// synopsys translate_off
+// synopsys translate_on
+//===========================================================================
+// Video Encoder 480p Registers    0xb80 - 0xbef
+//===========================================================================
+//-------- Video basic setting
+#define   ENCP_VIDEO_EN                            (0x1b80)
+#define P_ENCP_VIDEO_EN                            (volatile unsigned int *)((0x1b80  << 2) + 0xff900000)
+#define   ENCP_VIDEO_SYNC_MODE                     (0x1b81)
+#define P_ENCP_VIDEO_SYNC_MODE                     (volatile unsigned int *)((0x1b81  << 2) + 0xff900000)
+#define   ENCP_MACV_EN                             (0x1b82)
+#define P_ENCP_MACV_EN                             (volatile unsigned int *)((0x1b82  << 2) + 0xff900000)
+#define   ENCP_VIDEO_Y_SCL                         (0x1b83)
+#define P_ENCP_VIDEO_Y_SCL                         (volatile unsigned int *)((0x1b83  << 2) + 0xff900000)
+#define   ENCP_VIDEO_PB_SCL                        (0x1b84)
+#define P_ENCP_VIDEO_PB_SCL                        (volatile unsigned int *)((0x1b84  << 2) + 0xff900000)
+#define   ENCP_VIDEO_PR_SCL                        (0x1b85)
+#define P_ENCP_VIDEO_PR_SCL                        (volatile unsigned int *)((0x1b85  << 2) + 0xff900000)
+#define   ENCP_VIDEO_SYNC_SCL                      (0x1b86)
+#define P_ENCP_VIDEO_SYNC_SCL                      (volatile unsigned int *)((0x1b86  << 2) + 0xff900000)
+#define   ENCP_VIDEO_MACV_SCL                      (0x1b87)
+#define P_ENCP_VIDEO_MACV_SCL                      (volatile unsigned int *)((0x1b87  << 2) + 0xff900000)
+#define   ENCP_VIDEO_Y_OFFST                       (0x1b88)
+#define P_ENCP_VIDEO_Y_OFFST                       (volatile unsigned int *)((0x1b88  << 2) + 0xff900000)
+#define   ENCP_VIDEO_PB_OFFST                      (0x1b89)
+#define P_ENCP_VIDEO_PB_OFFST                      (volatile unsigned int *)((0x1b89  << 2) + 0xff900000)
+#define   ENCP_VIDEO_PR_OFFST                      (0x1b8a)
+#define P_ENCP_VIDEO_PR_OFFST                      (volatile unsigned int *)((0x1b8a  << 2) + 0xff900000)
+#define   ENCP_VIDEO_SYNC_OFFST                    (0x1b8b)
+#define P_ENCP_VIDEO_SYNC_OFFST                    (volatile unsigned int *)((0x1b8b  << 2) + 0xff900000)
+#define   ENCP_VIDEO_MACV_OFFST                    (0x1b8c)
+#define P_ENCP_VIDEO_MACV_OFFST                    (volatile unsigned int *)((0x1b8c  << 2) + 0xff900000)
+//----- Video mode
+#define   ENCP_VIDEO_MODE                          (0x1b8d)
+#define P_ENCP_VIDEO_MODE                          (volatile unsigned int *)((0x1b8d  << 2) + 0xff900000)
+#define   ENCP_VIDEO_MODE_ADV                      (0x1b8e)
+#define P_ENCP_VIDEO_MODE_ADV                      (volatile unsigned int *)((0x1b8e  << 2) + 0xff900000)
+//--------------- Debug pins
+#define   ENCP_DBG_PX_RST                          (0x1b90)
+#define P_ENCP_DBG_PX_RST                          (volatile unsigned int *)((0x1b90  << 2) + 0xff900000)
+#define   ENCP_DBG_LN_RST                          (0x1b91)
+#define P_ENCP_DBG_LN_RST                          (volatile unsigned int *)((0x1b91  << 2) + 0xff900000)
+#define   ENCP_DBG_PX_INT                          (0x1b92)
+#define P_ENCP_DBG_PX_INT                          (volatile unsigned int *)((0x1b92  << 2) + 0xff900000)
+#define   ENCP_DBG_LN_INT                          (0x1b93)
+#define P_ENCP_DBG_LN_INT                          (volatile unsigned int *)((0x1b93  << 2) + 0xff900000)
+//----------- Video Advanced setting
+#define   ENCP_VIDEO_YFP1_HTIME                    (0x1b94)
+#define P_ENCP_VIDEO_YFP1_HTIME                    (volatile unsigned int *)((0x1b94  << 2) + 0xff900000)
+#define   ENCP_VIDEO_YFP2_HTIME                    (0x1b95)
+#define P_ENCP_VIDEO_YFP2_HTIME                    (volatile unsigned int *)((0x1b95  << 2) + 0xff900000)
+#define   ENCP_VIDEO_YC_DLY                        (0x1b96)
+#define P_ENCP_VIDEO_YC_DLY                        (volatile unsigned int *)((0x1b96  << 2) + 0xff900000)
+#define   ENCP_VIDEO_MAX_PXCNT                     (0x1b97)
+#define P_ENCP_VIDEO_MAX_PXCNT                     (volatile unsigned int *)((0x1b97  << 2) + 0xff900000)
+#define   ENCP_VIDEO_HSPULS_BEGIN                  (0x1b98)
+#define P_ENCP_VIDEO_HSPULS_BEGIN                  (volatile unsigned int *)((0x1b98  << 2) + 0xff900000)
+#define   ENCP_VIDEO_HSPULS_END                    (0x1b99)
+#define P_ENCP_VIDEO_HSPULS_END                    (volatile unsigned int *)((0x1b99  << 2) + 0xff900000)
+#define   ENCP_VIDEO_HSPULS_SWITCH                 (0x1b9a)
+#define P_ENCP_VIDEO_HSPULS_SWITCH                 (volatile unsigned int *)((0x1b9a  << 2) + 0xff900000)
+#define   ENCP_VIDEO_VSPULS_BEGIN                  (0x1b9b)
+#define P_ENCP_VIDEO_VSPULS_BEGIN                  (volatile unsigned int *)((0x1b9b  << 2) + 0xff900000)
+#define   ENCP_VIDEO_VSPULS_END                    (0x1b9c)
+#define P_ENCP_VIDEO_VSPULS_END                    (volatile unsigned int *)((0x1b9c  << 2) + 0xff900000)
+#define   ENCP_VIDEO_VSPULS_BLINE                  (0x1b9d)
+#define P_ENCP_VIDEO_VSPULS_BLINE                  (volatile unsigned int *)((0x1b9d  << 2) + 0xff900000)
+#define   ENCP_VIDEO_VSPULS_ELINE                  (0x1b9e)
+#define P_ENCP_VIDEO_VSPULS_ELINE                  (volatile unsigned int *)((0x1b9e  << 2) + 0xff900000)
+#define   ENCP_VIDEO_EQPULS_BEGIN                  (0x1b9f)
+#define P_ENCP_VIDEO_EQPULS_BEGIN                  (volatile unsigned int *)((0x1b9f  << 2) + 0xff900000)
+#define   ENCP_VIDEO_EQPULS_END                    (0x1ba0)
+#define P_ENCP_VIDEO_EQPULS_END                    (volatile unsigned int *)((0x1ba0  << 2) + 0xff900000)
+#define   ENCP_VIDEO_EQPULS_BLINE                  (0x1ba1)
+#define P_ENCP_VIDEO_EQPULS_BLINE                  (volatile unsigned int *)((0x1ba1  << 2) + 0xff900000)
+#define   ENCP_VIDEO_EQPULS_ELINE                  (0x1ba2)
+#define P_ENCP_VIDEO_EQPULS_ELINE                  (volatile unsigned int *)((0x1ba2  << 2) + 0xff900000)
+#define   ENCP_VIDEO_HAVON_END                     (0x1ba3)
+#define P_ENCP_VIDEO_HAVON_END                     (volatile unsigned int *)((0x1ba3  << 2) + 0xff900000)
+#define   ENCP_VIDEO_HAVON_BEGIN                   (0x1ba4)
+#define P_ENCP_VIDEO_HAVON_BEGIN                   (volatile unsigned int *)((0x1ba4  << 2) + 0xff900000)
+#define   ENCP_VIDEO_VAVON_ELINE                   (0x1baf)
+#define P_ENCP_VIDEO_VAVON_ELINE                   (volatile unsigned int *)((0x1baf  << 2) + 0xff900000)
+#define   ENCP_VIDEO_VAVON_BLINE                   (0x1ba6)
+#define P_ENCP_VIDEO_VAVON_BLINE                   (volatile unsigned int *)((0x1ba6  << 2) + 0xff900000)
+#define   ENCP_VIDEO_HSO_BEGIN                     (0x1ba7)
+#define P_ENCP_VIDEO_HSO_BEGIN                     (volatile unsigned int *)((0x1ba7  << 2) + 0xff900000)
+#define   ENCP_VIDEO_HSO_END                       (0x1ba8)
+#define P_ENCP_VIDEO_HSO_END                       (volatile unsigned int *)((0x1ba8  << 2) + 0xff900000)
+#define   ENCP_VIDEO_VSO_BEGIN                     (0x1ba9)
+#define P_ENCP_VIDEO_VSO_BEGIN                     (volatile unsigned int *)((0x1ba9  << 2) + 0xff900000)
+#define   ENCP_VIDEO_VSO_END                       (0x1baa)
+#define P_ENCP_VIDEO_VSO_END                       (volatile unsigned int *)((0x1baa  << 2) + 0xff900000)
+#define   ENCP_VIDEO_VSO_BLINE                     (0x1bab)
+#define P_ENCP_VIDEO_VSO_BLINE                     (volatile unsigned int *)((0x1bab  << 2) + 0xff900000)
+#define   ENCP_VIDEO_VSO_ELINE                     (0x1bac)
+#define P_ENCP_VIDEO_VSO_ELINE                     (volatile unsigned int *)((0x1bac  << 2) + 0xff900000)
+#define   ENCP_VIDEO_SYNC_WAVE_CURVE               (0x1bad)
+#define P_ENCP_VIDEO_SYNC_WAVE_CURVE               (volatile unsigned int *)((0x1bad  << 2) + 0xff900000)
+#define   ENCP_VIDEO_MAX_LNCNT                     (0x1bae)
+#define P_ENCP_VIDEO_MAX_LNCNT                     (volatile unsigned int *)((0x1bae  << 2) + 0xff900000)
+#define   ENCP_VIDEO_SY_VAL                        (0x1bb0)
+#define P_ENCP_VIDEO_SY_VAL                        (volatile unsigned int *)((0x1bb0  << 2) + 0xff900000)
+#define   ENCP_VIDEO_SY2_VAL                       (0x1bb1)
+#define P_ENCP_VIDEO_SY2_VAL                       (volatile unsigned int *)((0x1bb1  << 2) + 0xff900000)
+#define   ENCP_VIDEO_BLANKY_VAL                    (0x1bb2)
+#define P_ENCP_VIDEO_BLANKY_VAL                    (volatile unsigned int *)((0x1bb2  << 2) + 0xff900000)
+#define   ENCP_VIDEO_BLANKPB_VAL                   (0x1bb3)
+#define P_ENCP_VIDEO_BLANKPB_VAL                   (volatile unsigned int *)((0x1bb3  << 2) + 0xff900000)
+#define   ENCP_VIDEO_BLANKPR_VAL                   (0x1bb4)
+#define P_ENCP_VIDEO_BLANKPR_VAL                   (volatile unsigned int *)((0x1bb4  << 2) + 0xff900000)
+#define   ENCP_VIDEO_HOFFST                        (0x1bb5)
+#define P_ENCP_VIDEO_HOFFST                        (volatile unsigned int *)((0x1bb5  << 2) + 0xff900000)
+#define   ENCP_VIDEO_VOFFST                        (0x1bb6)
+#define P_ENCP_VIDEO_VOFFST                        (volatile unsigned int *)((0x1bb6  << 2) + 0xff900000)
+#define   ENCP_VIDEO_RGB_CTRL                      (0x1bb7)
+#define P_ENCP_VIDEO_RGB_CTRL                      (volatile unsigned int *)((0x1bb7  << 2) + 0xff900000)
+#define   ENCP_VIDEO_FILT_CTRL                     (0x1bb8)
+#define P_ENCP_VIDEO_FILT_CTRL                     (volatile unsigned int *)((0x1bb8  << 2) + 0xff900000)
+#define   ENCP_VIDEO_OFLD_VPEQ_OFST                (0x1bb9)
+#define P_ENCP_VIDEO_OFLD_VPEQ_OFST                (volatile unsigned int *)((0x1bb9  << 2) + 0xff900000)
+#define   ENCP_VIDEO_OFLD_VOAV_OFST                (0x1bba)
+#define P_ENCP_VIDEO_OFLD_VOAV_OFST                (volatile unsigned int *)((0x1bba  << 2) + 0xff900000)
+#define   ENCP_VIDEO_MATRIX_CB                     (0x1bbb)
+#define P_ENCP_VIDEO_MATRIX_CB                     (volatile unsigned int *)((0x1bbb  << 2) + 0xff900000)
+#define   ENCP_VIDEO_MATRIX_CR                     (0x1bbc)
+#define P_ENCP_VIDEO_MATRIX_CR                     (volatile unsigned int *)((0x1bbc  << 2) + 0xff900000)
+#define   ENCP_VIDEO_RGBIN_CTRL                    (0x1bbd)
+#define P_ENCP_VIDEO_RGBIN_CTRL                    (volatile unsigned int *)((0x1bbd  << 2) + 0xff900000)
+//------------------Macrovision advanced setting
+#define   ENCP_MACV_BLANKY_VAL                     (0x1bc0)
+#define P_ENCP_MACV_BLANKY_VAL                     (volatile unsigned int *)((0x1bc0  << 2) + 0xff900000)
+#define   ENCP_MACV_MAXY_VAL                       (0x1bc1)
+#define P_ENCP_MACV_MAXY_VAL                       (volatile unsigned int *)((0x1bc1  << 2) + 0xff900000)
+#define   ENCP_MACV_1ST_PSSYNC_STRT                (0x1bc2)
+#define P_ENCP_MACV_1ST_PSSYNC_STRT                (volatile unsigned int *)((0x1bc2  << 2) + 0xff900000)
+#define   ENCP_MACV_PSSYNC_STRT                    (0x1bc3)
+#define P_ENCP_MACV_PSSYNC_STRT                    (volatile unsigned int *)((0x1bc3  << 2) + 0xff900000)
+#define   ENCP_MACV_AGC_STRT                       (0x1bc4)
+#define P_ENCP_MACV_AGC_STRT                       (volatile unsigned int *)((0x1bc4  << 2) + 0xff900000)
+#define   ENCP_MACV_AGC_END                        (0x1bc5)
+#define P_ENCP_MACV_AGC_END                        (volatile unsigned int *)((0x1bc5  << 2) + 0xff900000)
+#define   ENCP_MACV_WAVE_END                       (0x1bc6)
+#define P_ENCP_MACV_WAVE_END                       (volatile unsigned int *)((0x1bc6  << 2) + 0xff900000)
+#define   ENCP_MACV_STRTLINE                       (0x1bc7)
+#define P_ENCP_MACV_STRTLINE                       (volatile unsigned int *)((0x1bc7  << 2) + 0xff900000)
+#define   ENCP_MACV_ENDLINE                        (0x1bc8)
+#define P_ENCP_MACV_ENDLINE                        (volatile unsigned int *)((0x1bc8  << 2) + 0xff900000)
+#define   ENCP_MACV_TS_CNT_MAX_L                   (0x1bc9)
+#define P_ENCP_MACV_TS_CNT_MAX_L                   (volatile unsigned int *)((0x1bc9  << 2) + 0xff900000)
+#define   ENCP_MACV_TS_CNT_MAX_H                   (0x1bca)
+#define P_ENCP_MACV_TS_CNT_MAX_H                   (volatile unsigned int *)((0x1bca  << 2) + 0xff900000)
+#define   ENCP_MACV_TIME_DOWN                      (0x1bcb)
+#define P_ENCP_MACV_TIME_DOWN                      (volatile unsigned int *)((0x1bcb  << 2) + 0xff900000)
+#define   ENCP_MACV_TIME_LO                        (0x1bcc)
+#define P_ENCP_MACV_TIME_LO                        (volatile unsigned int *)((0x1bcc  << 2) + 0xff900000)
+#define   ENCP_MACV_TIME_UP                        (0x1bcd)
+#define P_ENCP_MACV_TIME_UP                        (volatile unsigned int *)((0x1bcd  << 2) + 0xff900000)
+#define   ENCP_MACV_TIME_RST                       (0x1bce)
+#define P_ENCP_MACV_TIME_RST                       (volatile unsigned int *)((0x1bce  << 2) + 0xff900000)
+//---------------- VBI control -------------------
+#define   ENCP_VBI_CTRL                            (0x1bd0)
+#define P_ENCP_VBI_CTRL                            (volatile unsigned int *)((0x1bd0  << 2) + 0xff900000)
+#define   ENCP_VBI_SETTING                         (0x1bd1)
+#define P_ENCP_VBI_SETTING                         (volatile unsigned int *)((0x1bd1  << 2) + 0xff900000)
+#define   ENCP_VBI_BEGIN                           (0x1bd2)
+#define P_ENCP_VBI_BEGIN                           (volatile unsigned int *)((0x1bd2  << 2) + 0xff900000)
+#define   ENCP_VBI_WIDTH                           (0x1bd3)
+#define P_ENCP_VBI_WIDTH                           (volatile unsigned int *)((0x1bd3  << 2) + 0xff900000)
+#define   ENCP_VBI_HVAL                            (0x1bd4)
+#define P_ENCP_VBI_HVAL                            (volatile unsigned int *)((0x1bd4  << 2) + 0xff900000)
+#define   ENCP_VBI_DATA0                           (0x1bd5)
+#define P_ENCP_VBI_DATA0                           (volatile unsigned int *)((0x1bd5  << 2) + 0xff900000)
+#define   ENCP_VBI_DATA1                           (0x1bd6)
+#define P_ENCP_VBI_DATA1                           (volatile unsigned int *)((0x1bd6  << 2) + 0xff900000)
+//----------------C656 OUT Control------------- Grant
+#define   C656_HS_ST                               (0x1be0)
+#define P_C656_HS_ST                               (volatile unsigned int *)((0x1be0  << 2) + 0xff900000)
+#define   C656_HS_ED                               (0x1be1)
+#define P_C656_HS_ED                               (volatile unsigned int *)((0x1be1  << 2) + 0xff900000)
+#define   C656_VS_LNST_E                           (0x1be2)
+#define P_C656_VS_LNST_E                           (volatile unsigned int *)((0x1be2  << 2) + 0xff900000)
+#define   C656_VS_LNST_O                           (0x1be3)
+#define P_C656_VS_LNST_O                           (volatile unsigned int *)((0x1be3  << 2) + 0xff900000)
+#define   C656_VS_LNED_E                           (0x1be4)
+#define P_C656_VS_LNED_E                           (volatile unsigned int *)((0x1be4  << 2) + 0xff900000)
+#define   C656_VS_LNED_O                           (0x1be5)
+#define P_C656_VS_LNED_O                           (volatile unsigned int *)((0x1be5  << 2) + 0xff900000)
+#define   C656_FS_LNST                             (0x1be6)
+#define P_C656_FS_LNST                             (volatile unsigned int *)((0x1be6  << 2) + 0xff900000)
+#define   C656_FS_LNED                             (0x1be7)
+#define P_C656_FS_LNED                             (volatile unsigned int *)((0x1be7  << 2) + 0xff900000)
+// synopsys translate_off
+// synopsys translate_on
+//
+// Closing file:  enc480p_regs.h
+//
+//
+// Reading file:  enci_regs.h
+//
+//===========================================================================
+// Video Interface Registers    0xb00 - 0xb57
+//===========================================================================
+#define   ENCI_VIDEO_MODE                          (0x1b00)
+#define P_ENCI_VIDEO_MODE                          (volatile unsigned int *)((0x1b00  << 2) + 0xff900000)
+#define   ENCI_VIDEO_MODE_ADV                      (0x1b01)
+#define P_ENCI_VIDEO_MODE_ADV                      (volatile unsigned int *)((0x1b01  << 2) + 0xff900000)
+#define   ENCI_VIDEO_FSC_ADJ                       (0x1b02)
+#define P_ENCI_VIDEO_FSC_ADJ                       (volatile unsigned int *)((0x1b02  << 2) + 0xff900000)
+#define   ENCI_VIDEO_BRIGHT                        (0x1b03)
+#define P_ENCI_VIDEO_BRIGHT                        (volatile unsigned int *)((0x1b03  << 2) + 0xff900000)
+#define   ENCI_VIDEO_CONT                          (0x1b04)
+#define P_ENCI_VIDEO_CONT                          (volatile unsigned int *)((0x1b04  << 2) + 0xff900000)
+#define   ENCI_VIDEO_SAT                           (0x1b05)
+#define P_ENCI_VIDEO_SAT                           (volatile unsigned int *)((0x1b05  << 2) + 0xff900000)
+#define   ENCI_VIDEO_HUE                           (0x1b06)
+#define P_ENCI_VIDEO_HUE                           (volatile unsigned int *)((0x1b06  << 2) + 0xff900000)
+#define   ENCI_VIDEO_SCH                           (0x1b07)
+#define P_ENCI_VIDEO_SCH                           (volatile unsigned int *)((0x1b07  << 2) + 0xff900000)
+#define   ENCI_SYNC_MODE                           (0x1b08)
+#define P_ENCI_SYNC_MODE                           (volatile unsigned int *)((0x1b08  << 2) + 0xff900000)
+#define   ENCI_SYNC_CTRL                           (0x1b09)
+#define P_ENCI_SYNC_CTRL                           (volatile unsigned int *)((0x1b09  << 2) + 0xff900000)
+#define   ENCI_SYNC_HSO_BEGIN                      (0x1b0a)
+#define P_ENCI_SYNC_HSO_BEGIN                      (volatile unsigned int *)((0x1b0a  << 2) + 0xff900000)
+#define   ENCI_SYNC_HSO_END                        (0x1b0b)
+#define P_ENCI_SYNC_HSO_END                        (volatile unsigned int *)((0x1b0b  << 2) + 0xff900000)
+#define   ENCI_SYNC_VSO_EVN                        (0x1b0c)
+#define P_ENCI_SYNC_VSO_EVN                        (volatile unsigned int *)((0x1b0c  << 2) + 0xff900000)
+#define   ENCI_SYNC_VSO_ODD                        (0x1b0d)
+#define P_ENCI_SYNC_VSO_ODD                        (volatile unsigned int *)((0x1b0d  << 2) + 0xff900000)
+#define   ENCI_SYNC_VSO_EVNLN                      (0x1b0e)
+#define P_ENCI_SYNC_VSO_EVNLN                      (volatile unsigned int *)((0x1b0e  << 2) + 0xff900000)
+#define   ENCI_SYNC_VSO_ODDLN                      (0x1b0f)
+#define P_ENCI_SYNC_VSO_ODDLN                      (volatile unsigned int *)((0x1b0f  << 2) + 0xff900000)
+#define   ENCI_SYNC_HOFFST                         (0x1b10)
+#define P_ENCI_SYNC_HOFFST                         (volatile unsigned int *)((0x1b10  << 2) + 0xff900000)
+#define   ENCI_SYNC_VOFFST                         (0x1b11)
+#define P_ENCI_SYNC_VOFFST                         (volatile unsigned int *)((0x1b11  << 2) + 0xff900000)
+#define   ENCI_SYNC_ADJ                            (0x1b12)
+#define P_ENCI_SYNC_ADJ                            (volatile unsigned int *)((0x1b12  << 2) + 0xff900000)
+#define   ENCI_RGB_SETTING                         (0x1b13)
+#define P_ENCI_RGB_SETTING                         (volatile unsigned int *)((0x1b13  << 2) + 0xff900000)
+//`define	ENCI_CMPN_MATRIX_CB		8'h14
+//`define	ENCI_CMPN_MATRIX_CR		8'h15
+#define   ENCI_DE_H_BEGIN                          (0x1b16)
+#define P_ENCI_DE_H_BEGIN                          (volatile unsigned int *)((0x1b16  << 2) + 0xff900000)
+#define   ENCI_DE_H_END                            (0x1b17)
+#define P_ENCI_DE_H_END                            (volatile unsigned int *)((0x1b17  << 2) + 0xff900000)
+#define   ENCI_DE_V_BEGIN_EVEN                     (0x1b18)
+#define P_ENCI_DE_V_BEGIN_EVEN                     (volatile unsigned int *)((0x1b18  << 2) + 0xff900000)
+#define   ENCI_DE_V_END_EVEN                       (0x1b19)
+#define P_ENCI_DE_V_END_EVEN                       (volatile unsigned int *)((0x1b19  << 2) + 0xff900000)
+#define   ENCI_DE_V_BEGIN_ODD                      (0x1b1a)
+#define P_ENCI_DE_V_BEGIN_ODD                      (volatile unsigned int *)((0x1b1a  << 2) + 0xff900000)
+#define   ENCI_DE_V_END_ODD                        (0x1b1b)
+#define P_ENCI_DE_V_END_ODD                        (volatile unsigned int *)((0x1b1b  << 2) + 0xff900000)
+#define   ENCI_VBI_SETTING                         (0x1b20)
+#define P_ENCI_VBI_SETTING                         (volatile unsigned int *)((0x1b20  << 2) + 0xff900000)
+#define   ENCI_VBI_CCDT_EVN                        (0x1b21)
+#define P_ENCI_VBI_CCDT_EVN                        (volatile unsigned int *)((0x1b21  << 2) + 0xff900000)
+#define   ENCI_VBI_CCDT_ODD                        (0x1b22)
+#define P_ENCI_VBI_CCDT_ODD                        (volatile unsigned int *)((0x1b22  << 2) + 0xff900000)
+#define   ENCI_VBI_CC525_LN                        (0x1b23)
+#define P_ENCI_VBI_CC525_LN                        (volatile unsigned int *)((0x1b23  << 2) + 0xff900000)
+#define   ENCI_VBI_CC625_LN                        (0x1b24)
+#define P_ENCI_VBI_CC625_LN                        (volatile unsigned int *)((0x1b24  << 2) + 0xff900000)
+#define   ENCI_VBI_WSSDT                           (0x1b25)
+#define P_ENCI_VBI_WSSDT                           (volatile unsigned int *)((0x1b25  << 2) + 0xff900000)
+#define   ENCI_VBI_WSS_LN                          (0x1b26)
+#define P_ENCI_VBI_WSS_LN                          (volatile unsigned int *)((0x1b26  << 2) + 0xff900000)
+#define   ENCI_VBI_CGMSDT_L                        (0x1b27)
+#define P_ENCI_VBI_CGMSDT_L                        (volatile unsigned int *)((0x1b27  << 2) + 0xff900000)
+#define   ENCI_VBI_CGMSDT_H                        (0x1b28)
+#define P_ENCI_VBI_CGMSDT_H                        (volatile unsigned int *)((0x1b28  << 2) + 0xff900000)
+#define   ENCI_VBI_CGMS_LN                         (0x1b29)
+#define P_ENCI_VBI_CGMS_LN                         (volatile unsigned int *)((0x1b29  << 2) + 0xff900000)
+#define   ENCI_VBI_TTX_HTIME                       (0x1b2a)
+#define P_ENCI_VBI_TTX_HTIME                       (volatile unsigned int *)((0x1b2a  << 2) + 0xff900000)
+#define   ENCI_VBI_TTX_LN                          (0x1b2b)
+#define P_ENCI_VBI_TTX_LN                          (volatile unsigned int *)((0x1b2b  << 2) + 0xff900000)
+#define   ENCI_VBI_TTXDT0                          (0x1b2c)
+#define P_ENCI_VBI_TTXDT0                          (volatile unsigned int *)((0x1b2c  << 2) + 0xff900000)
+#define   ENCI_VBI_TTXDT1                          (0x1b2d)
+#define P_ENCI_VBI_TTXDT1                          (volatile unsigned int *)((0x1b2d  << 2) + 0xff900000)
+#define   ENCI_VBI_TTXDT2                          (0x1b2e)
+#define P_ENCI_VBI_TTXDT2                          (volatile unsigned int *)((0x1b2e  << 2) + 0xff900000)
+#define   ENCI_VBI_TTXDT3                          (0x1b2f)
+#define P_ENCI_VBI_TTXDT3                          (volatile unsigned int *)((0x1b2f  << 2) + 0xff900000)
+#define   ENCI_MACV_N0                             (0x1b30)
+#define P_ENCI_MACV_N0                             (volatile unsigned int *)((0x1b30  << 2) + 0xff900000)
+#define   ENCI_MACV_N1                             (0x1b31)
+#define P_ENCI_MACV_N1                             (volatile unsigned int *)((0x1b31  << 2) + 0xff900000)
+#define   ENCI_MACV_N2                             (0x1b32)
+#define P_ENCI_MACV_N2                             (volatile unsigned int *)((0x1b32  << 2) + 0xff900000)
+#define   ENCI_MACV_N3                             (0x1b33)
+#define P_ENCI_MACV_N3                             (volatile unsigned int *)((0x1b33  << 2) + 0xff900000)
+#define   ENCI_MACV_N4                             (0x1b34)
+#define P_ENCI_MACV_N4                             (volatile unsigned int *)((0x1b34  << 2) + 0xff900000)
+#define   ENCI_MACV_N5                             (0x1b35)
+#define P_ENCI_MACV_N5                             (volatile unsigned int *)((0x1b35  << 2) + 0xff900000)
+#define   ENCI_MACV_N6                             (0x1b36)
+#define P_ENCI_MACV_N6                             (volatile unsigned int *)((0x1b36  << 2) + 0xff900000)
+#define   ENCI_MACV_N7                             (0x1b37)
+#define P_ENCI_MACV_N7                             (volatile unsigned int *)((0x1b37  << 2) + 0xff900000)
+#define   ENCI_MACV_N8                             (0x1b38)
+#define P_ENCI_MACV_N8                             (volatile unsigned int *)((0x1b38  << 2) + 0xff900000)
+#define   ENCI_MACV_N9                             (0x1b39)
+#define P_ENCI_MACV_N9                             (volatile unsigned int *)((0x1b39  << 2) + 0xff900000)
+#define   ENCI_MACV_N10                            (0x1b3a)
+#define P_ENCI_MACV_N10                            (volatile unsigned int *)((0x1b3a  << 2) + 0xff900000)
+#define   ENCI_MACV_N11                            (0x1b3b)
+#define P_ENCI_MACV_N11                            (volatile unsigned int *)((0x1b3b  << 2) + 0xff900000)
+#define   ENCI_MACV_N12                            (0x1b3c)
+#define P_ENCI_MACV_N12                            (volatile unsigned int *)((0x1b3c  << 2) + 0xff900000)
+#define   ENCI_MACV_N13                            (0x1b3d)
+#define P_ENCI_MACV_N13                            (volatile unsigned int *)((0x1b3d  << 2) + 0xff900000)
+#define   ENCI_MACV_N14                            (0x1b3e)
+#define P_ENCI_MACV_N14                            (volatile unsigned int *)((0x1b3e  << 2) + 0xff900000)
+#define   ENCI_MACV_N15                            (0x1b3f)
+#define P_ENCI_MACV_N15                            (volatile unsigned int *)((0x1b3f  << 2) + 0xff900000)
+#define   ENCI_MACV_N16                            (0x1b40)
+#define P_ENCI_MACV_N16                            (volatile unsigned int *)((0x1b40  << 2) + 0xff900000)
+#define   ENCI_MACV_N17                            (0x1b41)
+#define P_ENCI_MACV_N17                            (volatile unsigned int *)((0x1b41  << 2) + 0xff900000)
+#define   ENCI_MACV_N18                            (0x1b42)
+#define P_ENCI_MACV_N18                            (volatile unsigned int *)((0x1b42  << 2) + 0xff900000)
+#define   ENCI_MACV_N19                            (0x1b43)
+#define P_ENCI_MACV_N19                            (volatile unsigned int *)((0x1b43  << 2) + 0xff900000)
+#define   ENCI_MACV_N20                            (0x1b44)
+#define P_ENCI_MACV_N20                            (volatile unsigned int *)((0x1b44  << 2) + 0xff900000)
+#define   ENCI_MACV_N21                            (0x1b45)
+#define P_ENCI_MACV_N21                            (volatile unsigned int *)((0x1b45  << 2) + 0xff900000)
+#define   ENCI_MACV_N22                            (0x1b46)
+#define P_ENCI_MACV_N22                            (volatile unsigned int *)((0x1b46  << 2) + 0xff900000)
+//`define	ENCI_MACV_P_AGC			8'h47
+#define   ENCI_DBG_PX_RST                          (0x1b48)
+#define P_ENCI_DBG_PX_RST                          (volatile unsigned int *)((0x1b48  << 2) + 0xff900000)
+#define   ENCI_DBG_FLDLN_RST                       (0x1b49)
+#define P_ENCI_DBG_FLDLN_RST                       (volatile unsigned int *)((0x1b49  << 2) + 0xff900000)
+#define   ENCI_DBG_PX_INT                          (0x1b4a)
+#define P_ENCI_DBG_PX_INT                          (volatile unsigned int *)((0x1b4a  << 2) + 0xff900000)
+#define   ENCI_DBG_FLDLN_INT                       (0x1b4b)
+#define P_ENCI_DBG_FLDLN_INT                       (volatile unsigned int *)((0x1b4b  << 2) + 0xff900000)
+#define   ENCI_DBG_MAXPX                           (0x1b4c)
+#define P_ENCI_DBG_MAXPX                           (volatile unsigned int *)((0x1b4c  << 2) + 0xff900000)
+#define   ENCI_DBG_MAXLN                           (0x1b4d)
+#define P_ENCI_DBG_MAXLN                           (volatile unsigned int *)((0x1b4d  << 2) + 0xff900000)
+#define   ENCI_MACV_MAX_AMP                        (0x1b50)
+#define P_ENCI_MACV_MAX_AMP                        (volatile unsigned int *)((0x1b50  << 2) + 0xff900000)
+#define   ENCI_MACV_PULSE_LO                       (0x1b51)
+#define P_ENCI_MACV_PULSE_LO                       (volatile unsigned int *)((0x1b51  << 2) + 0xff900000)
+#define   ENCI_MACV_PULSE_HI                       (0x1b52)
+#define P_ENCI_MACV_PULSE_HI                       (volatile unsigned int *)((0x1b52  << 2) + 0xff900000)
+#define   ENCI_MACV_BKP_MAX                        (0x1b53)
+#define P_ENCI_MACV_BKP_MAX                        (volatile unsigned int *)((0x1b53  << 2) + 0xff900000)
+#define   ENCI_CFILT_CTRL                          (0x1b54)
+#define P_ENCI_CFILT_CTRL                          (volatile unsigned int *)((0x1b54  << 2) + 0xff900000)
+#define   ENCI_CFILT7                              (0x1b55)
+#define P_ENCI_CFILT7                              (volatile unsigned int *)((0x1b55  << 2) + 0xff900000)
+#define   ENCI_YC_DELAY                            (0x1b56)
+#define P_ENCI_YC_DELAY                            (volatile unsigned int *)((0x1b56  << 2) + 0xff900000)
+#define   ENCI_VIDEO_EN                            (0x1b57)
+#define P_ENCI_VIDEO_EN                            (volatile unsigned int *)((0x1b57  << 2) + 0xff900000)
+//
+// Closing file:  enci_regs.h
+//
+//`define  VENC2_VCBUS_BASE             8'h1c
+//
+// Reading file:  venc2_regs.h
+//
+//===========================================================================
+// Venc Registers (Cont.)    0xc00 - 0xcff (VENC registers 0xc00 - 0xcef)
+//===========================================================================
+// -----------------------------------------------
+// CBUS_BASE:  VENC2_VCBUS_BASE = 0x1c
+// -----------------------------------------------
+// Program video control signals from ENCI core to DVI/HDMI interface
+#define   ENCI_DVI_HSO_BEGIN                       (0x1c00)
+#define P_ENCI_DVI_HSO_BEGIN                       (volatile unsigned int *)((0x1c00  << 2) + 0xff900000)
+#define   ENCI_DVI_HSO_END                         (0x1c01)
+#define P_ENCI_DVI_HSO_END                         (volatile unsigned int *)((0x1c01  << 2) + 0xff900000)
+#define   ENCI_DVI_VSO_BLINE_EVN                   (0x1c02)
+#define P_ENCI_DVI_VSO_BLINE_EVN                   (volatile unsigned int *)((0x1c02  << 2) + 0xff900000)
+#define   ENCI_DVI_VSO_BLINE_ODD                   (0x1c03)
+#define P_ENCI_DVI_VSO_BLINE_ODD                   (volatile unsigned int *)((0x1c03  << 2) + 0xff900000)
+#define   ENCI_DVI_VSO_ELINE_EVN                   (0x1c04)
+#define P_ENCI_DVI_VSO_ELINE_EVN                   (volatile unsigned int *)((0x1c04  << 2) + 0xff900000)
+#define   ENCI_DVI_VSO_ELINE_ODD                   (0x1c05)
+#define P_ENCI_DVI_VSO_ELINE_ODD                   (volatile unsigned int *)((0x1c05  << 2) + 0xff900000)
+#define   ENCI_DVI_VSO_BEGIN_EVN                   (0x1c06)
+#define P_ENCI_DVI_VSO_BEGIN_EVN                   (volatile unsigned int *)((0x1c06  << 2) + 0xff900000)
+#define   ENCI_DVI_VSO_BEGIN_ODD                   (0x1c07)
+#define P_ENCI_DVI_VSO_BEGIN_ODD                   (volatile unsigned int *)((0x1c07  << 2) + 0xff900000)
+#define   ENCI_DVI_VSO_END_EVN                     (0x1c08)
+#define P_ENCI_DVI_VSO_END_EVN                     (volatile unsigned int *)((0x1c08  << 2) + 0xff900000)
+#define   ENCI_DVI_VSO_END_ODD                     (0x1c09)
+#define P_ENCI_DVI_VSO_END_ODD                     (volatile unsigned int *)((0x1c09  << 2) + 0xff900000)
+// Define cmpt and cvbs cb/cr delay after ENCI chroma filters
+// Bit 15:12 RW, enci_cb_cvbs_dly_sel. 0=no delay; 1~6=delay by 1~6 clk; 7~15 reserved.
+// Bit 11: 8 RW, enci_cr_cvbs_dly_sel. 0=no delay; 1~6=delay by 1~6 clk; 7~15 reserved.
+// Bit  7: 4 RW, enci_cb_cmpt_dly_sel. 0=no delay; 1~6=delay by 1~6 clk; 7~15 reserved.
+// Bit  3: 0 RW, enci_cr_cmpt_dly_sel. 0=no delay; 1~6=delay by 1~6 clk; 7~15 reserved.
+#define   ENCI_CFILT_CTRL2                         (0x1c0a)
+#define P_ENCI_CFILT_CTRL2                         (volatile unsigned int *)((0x1c0a  << 2) + 0xff900000)
+#define   ENCI_DACSEL_0                            (0x1c0b)
+#define P_ENCI_DACSEL_0                            (volatile unsigned int *)((0x1c0b  << 2) + 0xff900000)
+#define   ENCI_DACSEL_1                            (0x1c0c)
+#define P_ENCI_DACSEL_1                            (volatile unsigned int *)((0x1c0c  << 2) + 0xff900000)
+#define   ENCP_DACSEL_0                            (0x1c0d)
+#define P_ENCP_DACSEL_0                            (volatile unsigned int *)((0x1c0d  << 2) + 0xff900000)
+#define   ENCP_DACSEL_1                            (0x1c0e)
+#define P_ENCP_DACSEL_1                            (volatile unsigned int *)((0x1c0e  << 2) + 0xff900000)
+#define   ENCP_MAX_LINE_SWITCH_POINT               (0x1c0f)
+#define P_ENCP_MAX_LINE_SWITCH_POINT               (volatile unsigned int *)((0x1c0f  << 2) + 0xff900000)
+#define   ENCI_TST_EN                              (0x1c10)
+#define P_ENCI_TST_EN                              (volatile unsigned int *)((0x1c10  << 2) + 0xff900000)
+#define   ENCI_TST_MDSEL                           (0x1c11)
+#define P_ENCI_TST_MDSEL                           (volatile unsigned int *)((0x1c11  << 2) + 0xff900000)
+#define   ENCI_TST_Y                               (0x1c12)
+#define P_ENCI_TST_Y                               (volatile unsigned int *)((0x1c12  << 2) + 0xff900000)
+#define   ENCI_TST_CB                              (0x1c13)
+#define P_ENCI_TST_CB                              (volatile unsigned int *)((0x1c13  << 2) + 0xff900000)
+#define   ENCI_TST_CR                              (0x1c14)
+#define P_ENCI_TST_CR                              (volatile unsigned int *)((0x1c14  << 2) + 0xff900000)
+#define   ENCI_TST_CLRBAR_STRT                     (0x1c15)
+#define P_ENCI_TST_CLRBAR_STRT                     (volatile unsigned int *)((0x1c15  << 2) + 0xff900000)
+#define   ENCI_TST_CLRBAR_WIDTH                    (0x1c16)
+#define P_ENCI_TST_CLRBAR_WIDTH                    (volatile unsigned int *)((0x1c16  << 2) + 0xff900000)
+#define   ENCI_TST_VDCNT_STSET                     (0x1c17)
+#define P_ENCI_TST_VDCNT_STSET                     (volatile unsigned int *)((0x1c17  << 2) + 0xff900000)
+// bit 15:8 -- vfifo2vd_vd_sel
+// bit 7 -- vfifo2vd_drop
+// bit 6:1 -- vfifo2vd_delay
+// bit 0 -- vfifo2vd_en
+#define   ENCI_VFIFO2VD_CTL                        (0x1c18)
+#define P_ENCI_VFIFO2VD_CTL                        (volatile unsigned int *)((0x1c18  << 2) + 0xff900000)
+// bit 12:0 -- vfifo2vd_pixel_start
+#define   ENCI_VFIFO2VD_PIXEL_START                (0x1c19)
+#define P_ENCI_VFIFO2VD_PIXEL_START                (volatile unsigned int *)((0x1c19  << 2) + 0xff900000)
+// bit 12:00 -- vfifo2vd_pixel_end
+#define   ENCI_VFIFO2VD_PIXEL_END                  (0x1c1a)
+#define P_ENCI_VFIFO2VD_PIXEL_END                  (volatile unsigned int *)((0x1c1a  << 2) + 0xff900000)
+// bit 10:0 -- vfifo2vd_line_top_start
+#define   ENCI_VFIFO2VD_LINE_TOP_START             (0x1c1b)
+#define P_ENCI_VFIFO2VD_LINE_TOP_START             (volatile unsigned int *)((0x1c1b  << 2) + 0xff900000)
+// bit 10:00 -- vfifo2vd_line_top_end
+#define   ENCI_VFIFO2VD_LINE_TOP_END               (0x1c1c)
+#define P_ENCI_VFIFO2VD_LINE_TOP_END               (volatile unsigned int *)((0x1c1c  << 2) + 0xff900000)
+// bit 10:00 -- vfifo2vd_line_bot_start
+#define   ENCI_VFIFO2VD_LINE_BOT_START             (0x1c1d)
+#define P_ENCI_VFIFO2VD_LINE_BOT_START             (volatile unsigned int *)((0x1c1d  << 2) + 0xff900000)
+// bit 10:00 -- vfifo2vd_line_bot_end
+#define   ENCI_VFIFO2VD_LINE_BOT_END               (0x1c1e)
+#define P_ENCI_VFIFO2VD_LINE_BOT_END               (volatile unsigned int *)((0x1c1e  << 2) + 0xff900000)
+#define   ENCI_VFIFO2VD_CTL2                       (0x1c1f)
+#define P_ENCI_VFIFO2VD_CTL2                       (volatile unsigned int *)((0x1c1f  << 2) + 0xff900000)
+// bit 15:8 -- vfifo2vd_vd_sel
+// bit 7 -- vfifo2vd_drop
+// bit 6:1 -- vfifo2vd_delay
+// bit 0 -- vfifo2vd_en
+#define   ENCT_VFIFO2VD_CTL                        (0x1c20)
+#define P_ENCT_VFIFO2VD_CTL                        (volatile unsigned int *)((0x1c20  << 2) + 0xff900000)
+// bit 12:0 -- vfifo2vd_pixel_start
+#define   ENCT_VFIFO2VD_PIXEL_START                (0x1c21)
+#define P_ENCT_VFIFO2VD_PIXEL_START                (volatile unsigned int *)((0x1c21  << 2) + 0xff900000)
+// bit 12:00 -- vfifo2vd_pixel_end
+#define   ENCT_VFIFO2VD_PIXEL_END                  (0x1c22)
+#define P_ENCT_VFIFO2VD_PIXEL_END                  (volatile unsigned int *)((0x1c22  << 2) + 0xff900000)
+// bit 10:0 -- vfifo2vd_line_top_start
+#define   ENCT_VFIFO2VD_LINE_TOP_START             (0x1c23)
+#define P_ENCT_VFIFO2VD_LINE_TOP_START             (volatile unsigned int *)((0x1c23  << 2) + 0xff900000)
+// bit 10:00 -- vfifo2vd_line_top_end
+#define   ENCT_VFIFO2VD_LINE_TOP_END               (0x1c24)
+#define P_ENCT_VFIFO2VD_LINE_TOP_END               (volatile unsigned int *)((0x1c24  << 2) + 0xff900000)
+// bit 10:00 -- vfifo2vd_line_bot_start
+#define   ENCT_VFIFO2VD_LINE_BOT_START             (0x1c25)
+#define P_ENCT_VFIFO2VD_LINE_BOT_START             (volatile unsigned int *)((0x1c25  << 2) + 0xff900000)
+// bit 10:00 -- vfifo2vd_line_bot_end
+#define   ENCT_VFIFO2VD_LINE_BOT_END               (0x1c26)
+#define P_ENCT_VFIFO2VD_LINE_BOT_END               (volatile unsigned int *)((0x1c26  << 2) + 0xff900000)
+#define   ENCT_VFIFO2VD_CTL2                       (0x1c27)
+#define P_ENCT_VFIFO2VD_CTL2                       (volatile unsigned int *)((0x1c27  << 2) + 0xff900000)
+#define   ENCT_TST_EN                              (0x1c28)
+#define P_ENCT_TST_EN                              (volatile unsigned int *)((0x1c28  << 2) + 0xff900000)
+#define   ENCT_TST_MDSEL                           (0x1c29)
+#define P_ENCT_TST_MDSEL                           (volatile unsigned int *)((0x1c29  << 2) + 0xff900000)
+#define   ENCT_TST_Y                               (0x1c2a)
+#define P_ENCT_TST_Y                               (volatile unsigned int *)((0x1c2a  << 2) + 0xff900000)
+#define   ENCT_TST_CB                              (0x1c2b)
+#define P_ENCT_TST_CB                              (volatile unsigned int *)((0x1c2b  << 2) + 0xff900000)
+#define   ENCT_TST_CR                              (0x1c2c)
+#define P_ENCT_TST_CR                              (volatile unsigned int *)((0x1c2c  << 2) + 0xff900000)
+#define   ENCT_TST_CLRBAR_STRT                     (0x1c2d)
+#define P_ENCT_TST_CLRBAR_STRT                     (volatile unsigned int *)((0x1c2d  << 2) + 0xff900000)
+#define   ENCT_TST_CLRBAR_WIDTH                    (0x1c2e)
+#define P_ENCT_TST_CLRBAR_WIDTH                    (volatile unsigned int *)((0x1c2e  << 2) + 0xff900000)
+#define   ENCT_TST_VDCNT_STSET                     (0x1c2f)
+#define P_ENCT_TST_VDCNT_STSET                     (volatile unsigned int *)((0x1c2f  << 2) + 0xff900000)
+// Program video control signals from ENCP core to DVI/HDMI interface
+#define   ENCP_DVI_HSO_BEGIN                       (0x1c30)
+#define P_ENCP_DVI_HSO_BEGIN                       (volatile unsigned int *)((0x1c30  << 2) + 0xff900000)
+#define   ENCP_DVI_HSO_END                         (0x1c31)
+#define P_ENCP_DVI_HSO_END                         (volatile unsigned int *)((0x1c31  << 2) + 0xff900000)
+#define   ENCP_DVI_VSO_BLINE_EVN                   (0x1c32)
+#define P_ENCP_DVI_VSO_BLINE_EVN                   (volatile unsigned int *)((0x1c32  << 2) + 0xff900000)
+#define   ENCP_DVI_VSO_BLINE_ODD                   (0x1c33)
+#define P_ENCP_DVI_VSO_BLINE_ODD                   (volatile unsigned int *)((0x1c33  << 2) + 0xff900000)
+#define   ENCP_DVI_VSO_ELINE_EVN                   (0x1c34)
+#define P_ENCP_DVI_VSO_ELINE_EVN                   (volatile unsigned int *)((0x1c34  << 2) + 0xff900000)
+#define   ENCP_DVI_VSO_ELINE_ODD                   (0x1c35)
+#define P_ENCP_DVI_VSO_ELINE_ODD                   (volatile unsigned int *)((0x1c35  << 2) + 0xff900000)
+#define   ENCP_DVI_VSO_BEGIN_EVN                   (0x1c36)
+#define P_ENCP_DVI_VSO_BEGIN_EVN                   (volatile unsigned int *)((0x1c36  << 2) + 0xff900000)
+#define   ENCP_DVI_VSO_BEGIN_ODD                   (0x1c37)
+#define P_ENCP_DVI_VSO_BEGIN_ODD                   (volatile unsigned int *)((0x1c37  << 2) + 0xff900000)
+#define   ENCP_DVI_VSO_END_EVN                     (0x1c38)
+#define P_ENCP_DVI_VSO_END_EVN                     (volatile unsigned int *)((0x1c38  << 2) + 0xff900000)
+#define   ENCP_DVI_VSO_END_ODD                     (0x1c39)
+#define P_ENCP_DVI_VSO_END_ODD                     (volatile unsigned int *)((0x1c39  << 2) + 0xff900000)
+#define   ENCP_DE_H_BEGIN                          (0x1c3a)
+#define P_ENCP_DE_H_BEGIN                          (volatile unsigned int *)((0x1c3a  << 2) + 0xff900000)
+#define   ENCP_DE_H_END                            (0x1c3b)
+#define P_ENCP_DE_H_END                            (volatile unsigned int *)((0x1c3b  << 2) + 0xff900000)
+#define   ENCP_DE_V_BEGIN_EVEN                     (0x1c3c)
+#define P_ENCP_DE_V_BEGIN_EVEN                     (volatile unsigned int *)((0x1c3c  << 2) + 0xff900000)
+#define   ENCP_DE_V_END_EVEN                       (0x1c3d)
+#define P_ENCP_DE_V_END_EVEN                       (volatile unsigned int *)((0x1c3d  << 2) + 0xff900000)
+#define   ENCP_DE_V_BEGIN_ODD                      (0x1c3e)
+#define P_ENCP_DE_V_BEGIN_ODD                      (volatile unsigned int *)((0x1c3e  << 2) + 0xff900000)
+#define   ENCP_DE_V_END_ODD                        (0x1c3f)
+#define P_ENCP_DE_V_END_ODD                        (volatile unsigned int *)((0x1c3f  << 2) + 0xff900000)
+// Bit 15:11 - sync length
+// Bit 10:0 - sync start line
+#define   ENCI_SYNC_LINE_LENGTH                    (0x1c40)
+#define P_ENCI_SYNC_LINE_LENGTH                    (volatile unsigned int *)((0x1c40  << 2) + 0xff900000)
+// Bit 15 - sync_pulse_enable
+// Bit 12:0 - sync start pixel
+#define   ENCI_SYNC_PIXEL_EN                       (0x1c41)
+#define P_ENCI_SYNC_PIXEL_EN                       (volatile unsigned int *)((0x1c41  << 2) + 0xff900000)
+// Bit 15 - enci_sync_enable
+// Bit 14 - encp_sync_enable
+// Bit 13 - enct_sync_enable
+// Bit 12 - short_fussy_sync
+// Bit 11 - fussy_sync_enable
+// Bit 10:0 - sync target line
+#define   ENCI_SYNC_TO_LINE_EN                     (0x1c42)
+#define P_ENCI_SYNC_TO_LINE_EN                     (volatile unsigned int *)((0x1c42  << 2) + 0xff900000)
+// Bit 12:0 - sync target pixel
+#define   ENCI_SYNC_TO_PIXEL                       (0x1c43)
+#define P_ENCI_SYNC_TO_PIXEL                       (volatile unsigned int *)((0x1c43  << 2) + 0xff900000)
+// Bit 15:11 - sync length
+// Bit 10:0 - sync start line
+#define   ENCP_SYNC_LINE_LENGTH                    (0x1c44)
+#define P_ENCP_SYNC_LINE_LENGTH                    (volatile unsigned int *)((0x1c44  << 2) + 0xff900000)
+// Bit 15 - sync_pulse_enable
+// Bit 12:0 - sync start pixel
+#define   ENCP_SYNC_PIXEL_EN                       (0x1c45)
+#define P_ENCP_SYNC_PIXEL_EN                       (volatile unsigned int *)((0x1c45  << 2) + 0xff900000)
+// Bit 15 - enci_sync_enable
+// Bit 14 - encp_sync_enable
+// Bit 13 - enct_sync_enable
+// Bit 12 - short_fussy_sync
+// Bit 11 - fussy_sync_enable
+// Bit 10:0 - sync target line
+#define   ENCP_SYNC_TO_LINE_EN                     (0x1c46)
+#define P_ENCP_SYNC_TO_LINE_EN                     (volatile unsigned int *)((0x1c46  << 2) + 0xff900000)
+// Bit 12:0 - sync target pixel
+#define   ENCP_SYNC_TO_PIXEL                       (0x1c47)
+#define P_ENCP_SYNC_TO_PIXEL                       (volatile unsigned int *)((0x1c47  << 2) + 0xff900000)
+// Bit 15:11 - sync length
+// Bit 10:0 - sync start line
+#define   ENCT_SYNC_LINE_LENGTH                    (0x1c48)
+#define P_ENCT_SYNC_LINE_LENGTH                    (volatile unsigned int *)((0x1c48  << 2) + 0xff900000)
+// Bit 15 - sync_pulse_enable
+// Bit 12:0 - sync start pixel
+#define   ENCT_SYNC_PIXEL_EN                       (0x1c49)
+#define P_ENCT_SYNC_PIXEL_EN                       (volatile unsigned int *)((0x1c49  << 2) + 0xff900000)
+// Bit 15 - enci_sync_enable
+// Bit 14 - encp_sync_enable
+// Bit 13 - enct_sync_enable
+// Bit 12 - short_fussy_sync
+// Bit 11 - fussy_sync_enable
+// Bit 10:0 - sync target line
+#define   ENCT_SYNC_TO_LINE_EN                     (0x1c4a)
+#define P_ENCT_SYNC_TO_LINE_EN                     (volatile unsigned int *)((0x1c4a  << 2) + 0xff900000)
+// Bit 12:0 - sync target pixel
+#define   ENCT_SYNC_TO_PIXEL                       (0x1c4b)
+#define P_ENCT_SYNC_TO_PIXEL                       (volatile unsigned int *)((0x1c4b  << 2) + 0xff900000)
+// Bit 15:11 - sync length
+// Bit 10:0 - sync start line
+#define   ENCL_SYNC_LINE_LENGTH                    (0x1c4c)
+#define P_ENCL_SYNC_LINE_LENGTH                    (volatile unsigned int *)((0x1c4c  << 2) + 0xff900000)
+// Bit 15 - sync_pulse_enable
+// Bit 12:0 - sync start pixel
+#define   ENCL_SYNC_PIXEL_EN                       (0x1c4d)
+#define P_ENCL_SYNC_PIXEL_EN                       (volatile unsigned int *)((0x1c4d  << 2) + 0xff900000)
+// Bit 15 - enci_sync_enable
+// Bit 14 - encp_sync_enable
+// Bit 13 - enct_sync_enable
+// Bit 12 - short_fussy_sync
+// Bit 11 - fussy_sync_enable
+// Bit 10:0 - sync target line
+#define   ENCL_SYNC_TO_LINE_EN                     (0x1c4e)
+#define P_ENCL_SYNC_TO_LINE_EN                     (volatile unsigned int *)((0x1c4e  << 2) + 0xff900000)
+// Bit 12:0 - sync target pixel
+#define   ENCL_SYNC_TO_PIXEL                       (0x1c4f)
+#define P_ENCL_SYNC_TO_PIXEL                       (volatile unsigned int *)((0x1c4f  << 2) + 0xff900000)
+// bit    3 cfg_encp_lcd_scaler_bypass. 1=Do not scale LCD input data;
+//                                      0=Scale LCD input data to y [16*4,235*4], c [16*4,240*4].
+// bit    2 cfg_encp_vadj_scaler_bypass. 1=Do not scale data to enc480p_vadj;
+//                                       0=Scale enc480p_vadj input data to y [16*4,235*4], c [16*4,240*4].
+// bit    1 cfg_vfifo2vd_out_scaler_bypass. 1=Do not scale vfifo2vd's output vdata;
+//                                          0=Scale vfifo2vd's output vdata to y [16,235], c [16,240].
+// bit    0 cfg_vfifo_din_full_range. 1=Data from viu fifo is full range [0,1023];
+//                                    0=Data from viu fifo is y [16*4,235*4], c [16*4,240*4].
+#define   ENCP_VFIFO2VD_CTL2                       (0x1c50)
+#define P_ENCP_VFIFO2VD_CTL2                       (volatile unsigned int *)((0x1c50  << 2) + 0xff900000)
+// bit 15:1 Reserved.
+// bit    0 cfg_int_dvi_sel_rgb. Applicable for using on-chip hdmi tx module only. This bit controls correct bit-mapping from
+//          Venc to hdmi_tx depending on whether YCbCr or RGB mode.
+//                               1=Map data bit from Venc to hdmi_tx for RGB mode;
+//                               0=Default. Map data bit from Venc to hdmi_tx for YCbCr mode.
+#define   VENC_DVI_SETTING_MORE                    (0x1c51)
+#define P_VENC_DVI_SETTING_MORE                    (volatile unsigned int *)((0x1c51  << 2) + 0xff900000)
+#define   VENC_VDAC_DAC4_FILT_CTRL0                (0x1c54)
+#define P_VENC_VDAC_DAC4_FILT_CTRL0                (volatile unsigned int *)((0x1c54  << 2) + 0xff900000)
+#define   VENC_VDAC_DAC4_FILT_CTRL1                (0x1c55)
+#define P_VENC_VDAC_DAC4_FILT_CTRL1                (volatile unsigned int *)((0x1c55  << 2) + 0xff900000)
+#define   VENC_VDAC_DAC5_FILT_CTRL0                (0x1c56)
+#define P_VENC_VDAC_DAC5_FILT_CTRL0                (volatile unsigned int *)((0x1c56  << 2) + 0xff900000)
+#define   VENC_VDAC_DAC5_FILT_CTRL1                (0x1c57)
+#define P_VENC_VDAC_DAC5_FILT_CTRL1                (volatile unsigned int *)((0x1c57  << 2) + 0xff900000)
+//Bit 0   filter_en
+#define   VENC_VDAC_DAC0_FILT_CTRL0                (0x1c58)
+#define P_VENC_VDAC_DAC0_FILT_CTRL0                (volatile unsigned int *)((0x1c58  << 2) + 0xff900000)
+//dout = ((din + din_d2) * coef1 + (din_d1 * coef0) + 32) >> 6
+//Bit 15:8, coef1,
+//Bit 7:0, coef0,
+#define   VENC_VDAC_DAC0_FILT_CTRL1                (0x1c59)
+#define P_VENC_VDAC_DAC0_FILT_CTRL1                (volatile unsigned int *)((0x1c59  << 2) + 0xff900000)
+//Bit 0   filter_en
+#define   VENC_VDAC_DAC1_FILT_CTRL0                (0x1c5a)
+#define P_VENC_VDAC_DAC1_FILT_CTRL0                (volatile unsigned int *)((0x1c5a  << 2) + 0xff900000)
+//dout = ((din + din_d2) * coef1 + (din_d1 * coef0) + 32) >> 6
+//Bit 15:8, coef1,
+//Bit 7:0, coef0,
+#define   VENC_VDAC_DAC1_FILT_CTRL1                (0x1c5b)
+#define P_VENC_VDAC_DAC1_FILT_CTRL1                (volatile unsigned int *)((0x1c5b  << 2) + 0xff900000)
+//Bit 0   filter_en
+#define   VENC_VDAC_DAC2_FILT_CTRL0                (0x1c5c)
+#define P_VENC_VDAC_DAC2_FILT_CTRL0                (volatile unsigned int *)((0x1c5c  << 2) + 0xff900000)
+//dout = ((din + din_d2) * coef1 + (din_d1 * coef0) + 32) >> 6
+//Bit 15:8, coef1,
+//Bit 7:0, coef0,
+#define   VENC_VDAC_DAC2_FILT_CTRL1                (0x1c5d)
+#define P_VENC_VDAC_DAC2_FILT_CTRL1                (volatile unsigned int *)((0x1c5d  << 2) + 0xff900000)
+//Bit 0   filter_en
+#define   VENC_VDAC_DAC3_FILT_CTRL0                (0x1c5e)
+#define P_VENC_VDAC_DAC3_FILT_CTRL0                (volatile unsigned int *)((0x1c5e  << 2) + 0xff900000)
+//dout = ((din + din_d2) * coef1 + (din_d1 * coef0) + 32) >> 6
+//Bit 15:8, coef1,
+//Bit 7:0, coef0,
+#define   VENC_VDAC_DAC3_FILT_CTRL1                (0x1c5f)
+#define P_VENC_VDAC_DAC3_FILT_CTRL1                (volatile unsigned int *)((0x1c5f  << 2) + 0xff900000)
+//===========================================================================
+// ENCT registers
+#define   ENCT_VIDEO_EN                            (0x1c60)
+#define P_ENCT_VIDEO_EN                            (volatile unsigned int *)((0x1c60  << 2) + 0xff900000)
+#define   ENCT_VIDEO_Y_SCL                         (0x1c61)
+#define P_ENCT_VIDEO_Y_SCL                         (volatile unsigned int *)((0x1c61  << 2) + 0xff900000)
+#define   ENCT_VIDEO_PB_SCL                        (0x1c62)
+#define P_ENCT_VIDEO_PB_SCL                        (volatile unsigned int *)((0x1c62  << 2) + 0xff900000)
+#define   ENCT_VIDEO_PR_SCL                        (0x1c63)
+#define P_ENCT_VIDEO_PR_SCL                        (volatile unsigned int *)((0x1c63  << 2) + 0xff900000)
+#define   ENCT_VIDEO_Y_OFFST                       (0x1c64)
+#define P_ENCT_VIDEO_Y_OFFST                       (volatile unsigned int *)((0x1c64  << 2) + 0xff900000)
+#define   ENCT_VIDEO_PB_OFFST                      (0x1c65)
+#define P_ENCT_VIDEO_PB_OFFST                      (volatile unsigned int *)((0x1c65  << 2) + 0xff900000)
+#define   ENCT_VIDEO_PR_OFFST                      (0x1c66)
+#define P_ENCT_VIDEO_PR_OFFST                      (volatile unsigned int *)((0x1c66  << 2) + 0xff900000)
+//----- Video mode
+#define   ENCT_VIDEO_MODE                          (0x1c67)
+#define P_ENCT_VIDEO_MODE                          (volatile unsigned int *)((0x1c67  << 2) + 0xff900000)
+#define   ENCT_VIDEO_MODE_ADV                      (0x1c68)
+#define P_ENCT_VIDEO_MODE_ADV                      (volatile unsigned int *)((0x1c68  << 2) + 0xff900000)
+//--------------- Debug pins
+#define   ENCT_DBG_PX_RST                          (0x1c69)
+#define P_ENCT_DBG_PX_RST                          (volatile unsigned int *)((0x1c69  << 2) + 0xff900000)
+#define   ENCT_DBG_LN_RST                          (0x1c6a)
+#define P_ENCT_DBG_LN_RST                          (volatile unsigned int *)((0x1c6a  << 2) + 0xff900000)
+#define   ENCT_DBG_PX_INT                          (0x1c6b)
+#define P_ENCT_DBG_PX_INT                          (volatile unsigned int *)((0x1c6b  << 2) + 0xff900000)
+#define   ENCT_DBG_LN_INT                          (0x1c6c)
+#define P_ENCT_DBG_LN_INT                          (volatile unsigned int *)((0x1c6c  << 2) + 0xff900000)
+//----------- Video Advanced setting
+#define   ENCT_VIDEO_YFP1_HTIME                    (0x1c6d)
+#define P_ENCT_VIDEO_YFP1_HTIME                    (volatile unsigned int *)((0x1c6d  << 2) + 0xff900000)
+#define   ENCT_VIDEO_YFP2_HTIME                    (0x1c6e)
+#define P_ENCT_VIDEO_YFP2_HTIME                    (volatile unsigned int *)((0x1c6e  << 2) + 0xff900000)
+#define   ENCT_VIDEO_YC_DLY                        (0x1c6f)
+#define P_ENCT_VIDEO_YC_DLY                        (volatile unsigned int *)((0x1c6f  << 2) + 0xff900000)
+#define   ENCT_VIDEO_MAX_PXCNT                     (0x1c70)
+#define P_ENCT_VIDEO_MAX_PXCNT                     (volatile unsigned int *)((0x1c70  << 2) + 0xff900000)
+#define   ENCT_VIDEO_HAVON_END                     (0x1c71)
+#define P_ENCT_VIDEO_HAVON_END                     (volatile unsigned int *)((0x1c71  << 2) + 0xff900000)
+#define   ENCT_VIDEO_HAVON_BEGIN                   (0x1c72)
+#define P_ENCT_VIDEO_HAVON_BEGIN                   (volatile unsigned int *)((0x1c72  << 2) + 0xff900000)
+#define   ENCT_VIDEO_VAVON_ELINE                   (0x1c73)
+#define P_ENCT_VIDEO_VAVON_ELINE                   (volatile unsigned int *)((0x1c73  << 2) + 0xff900000)
+#define   ENCT_VIDEO_VAVON_BLINE                   (0x1c74)
+#define P_ENCT_VIDEO_VAVON_BLINE                   (volatile unsigned int *)((0x1c74  << 2) + 0xff900000)
+#define   ENCT_VIDEO_HSO_BEGIN                     (0x1c75)
+#define P_ENCT_VIDEO_HSO_BEGIN                     (volatile unsigned int *)((0x1c75  << 2) + 0xff900000)
+#define   ENCT_VIDEO_HSO_END                       (0x1c76)
+#define P_ENCT_VIDEO_HSO_END                       (volatile unsigned int *)((0x1c76  << 2) + 0xff900000)
+#define   ENCT_VIDEO_VSO_BEGIN                     (0x1c77)
+#define P_ENCT_VIDEO_VSO_BEGIN                     (volatile unsigned int *)((0x1c77  << 2) + 0xff900000)
+#define   ENCT_VIDEO_VSO_END                       (0x1c78)
+#define P_ENCT_VIDEO_VSO_END                       (volatile unsigned int *)((0x1c78  << 2) + 0xff900000)
+#define   ENCT_VIDEO_VSO_BLINE                     (0x1c79)
+#define P_ENCT_VIDEO_VSO_BLINE                     (volatile unsigned int *)((0x1c79  << 2) + 0xff900000)
+#define   ENCT_VIDEO_VSO_ELINE                     (0x1c7a)
+#define P_ENCT_VIDEO_VSO_ELINE                     (volatile unsigned int *)((0x1c7a  << 2) + 0xff900000)
+#define   ENCT_VIDEO_MAX_LNCNT                     (0x1c7b)
+#define P_ENCT_VIDEO_MAX_LNCNT                     (volatile unsigned int *)((0x1c7b  << 2) + 0xff900000)
+#define   ENCT_VIDEO_BLANKY_VAL                    (0x1c7c)
+#define P_ENCT_VIDEO_BLANKY_VAL                    (volatile unsigned int *)((0x1c7c  << 2) + 0xff900000)
+#define   ENCT_VIDEO_BLANKPB_VAL                   (0x1c7d)
+#define P_ENCT_VIDEO_BLANKPB_VAL                   (volatile unsigned int *)((0x1c7d  << 2) + 0xff900000)
+#define   ENCT_VIDEO_BLANKPR_VAL                   (0x1c7e)
+#define P_ENCT_VIDEO_BLANKPR_VAL                   (volatile unsigned int *)((0x1c7e  << 2) + 0xff900000)
+#define   ENCT_VIDEO_HOFFST                        (0x1c7f)
+#define P_ENCT_VIDEO_HOFFST                        (volatile unsigned int *)((0x1c7f  << 2) + 0xff900000)
+#define   ENCT_VIDEO_VOFFST                        (0x1c80)
+#define P_ENCT_VIDEO_VOFFST                        (volatile unsigned int *)((0x1c80  << 2) + 0xff900000)
+#define   ENCT_VIDEO_RGB_CTRL                      (0x1c81)
+#define P_ENCT_VIDEO_RGB_CTRL                      (volatile unsigned int *)((0x1c81  << 2) + 0xff900000)
+#define   ENCT_VIDEO_FILT_CTRL                     (0x1c82)
+#define P_ENCT_VIDEO_FILT_CTRL                     (volatile unsigned int *)((0x1c82  << 2) + 0xff900000)
+#define   ENCT_VIDEO_OFLD_VPEQ_OFST                (0x1c83)
+#define P_ENCT_VIDEO_OFLD_VPEQ_OFST                (volatile unsigned int *)((0x1c83  << 2) + 0xff900000)
+#define   ENCT_VIDEO_OFLD_VOAV_OFST                (0x1c84)
+#define P_ENCT_VIDEO_OFLD_VOAV_OFST                (volatile unsigned int *)((0x1c84  << 2) + 0xff900000)
+#define   ENCT_VIDEO_MATRIX_CB                     (0x1c85)
+#define P_ENCT_VIDEO_MATRIX_CB                     (volatile unsigned int *)((0x1c85  << 2) + 0xff900000)
+#define   ENCT_VIDEO_MATRIX_CR                     (0x1c86)
+#define P_ENCT_VIDEO_MATRIX_CR                     (volatile unsigned int *)((0x1c86  << 2) + 0xff900000)
+#define   ENCT_VIDEO_RGBIN_CTRL                    (0x1c87)
+#define P_ENCT_VIDEO_RGBIN_CTRL                    (volatile unsigned int *)((0x1c87  << 2) + 0xff900000)
+#define   ENCT_MAX_LINE_SWITCH_POINT               (0x1c88)
+#define P_ENCT_MAX_LINE_SWITCH_POINT               (volatile unsigned int *)((0x1c88  << 2) + 0xff900000)
+#define   ENCT_DACSEL_0                            (0x1c89)
+#define P_ENCT_DACSEL_0                            (volatile unsigned int *)((0x1c89  << 2) + 0xff900000)
+#define   ENCT_DACSEL_1                            (0x1c8a)
+#define P_ENCT_DACSEL_1                            (volatile unsigned int *)((0x1c8a  << 2) + 0xff900000)
+//===========================================================================
+// For ENCL
+//===========================================================================
+// bit 15:8 -- vfifo2vd_vd_sel
+// bit 7 -- vfifo2vd_drop
+// bit 6:1 -- vfifo2vd_delay
+// bit 0 -- vfifo2vd_en
+#define   ENCL_VFIFO2VD_CTL                        (0x1c90)
+#define P_ENCL_VFIFO2VD_CTL                        (volatile unsigned int *)((0x1c90  << 2) + 0xff900000)
+// bit 12:0 -- vfifo2vd_pixel_start
+#define   ENCL_VFIFO2VD_PIXEL_START                (0x1c91)
+#define P_ENCL_VFIFO2VD_PIXEL_START                (volatile unsigned int *)((0x1c91  << 2) + 0xff900000)
+// bit 12:00 -- vfifo2vd_pixel_end
+#define   ENCL_VFIFO2VD_PIXEL_END                  (0x1c92)
+#define P_ENCL_VFIFO2VD_PIXEL_END                  (volatile unsigned int *)((0x1c92  << 2) + 0xff900000)
+// bit 10:0 -- vfifo2vd_line_top_start
+#define   ENCL_VFIFO2VD_LINE_TOP_START             (0x1c93)
+#define P_ENCL_VFIFO2VD_LINE_TOP_START             (volatile unsigned int *)((0x1c93  << 2) + 0xff900000)
+// bit 10:00 -- vfifo2vd_line_top_end
+#define   ENCL_VFIFO2VD_LINE_TOP_END               (0x1c94)
+#define P_ENCL_VFIFO2VD_LINE_TOP_END               (volatile unsigned int *)((0x1c94  << 2) + 0xff900000)
+// bit 10:00 -- vfifo2vd_line_bot_start
+#define   ENCL_VFIFO2VD_LINE_BOT_START             (0x1c95)
+#define P_ENCL_VFIFO2VD_LINE_BOT_START             (volatile unsigned int *)((0x1c95  << 2) + 0xff900000)
+// bit 10:00 -- vfifo2vd_line_bot_end
+#define   ENCL_VFIFO2VD_LINE_BOT_END               (0x1c96)
+#define P_ENCL_VFIFO2VD_LINE_BOT_END               (volatile unsigned int *)((0x1c96  << 2) + 0xff900000)
+#define   ENCL_VFIFO2VD_CTL2                       (0x1c97)
+#define P_ENCL_VFIFO2VD_CTL2                       (volatile unsigned int *)((0x1c97  << 2) + 0xff900000)
+#define   ENCL_TST_EN                              (0x1c98)
+#define P_ENCL_TST_EN                              (volatile unsigned int *)((0x1c98  << 2) + 0xff900000)
+#define   ENCL_TST_MDSEL                           (0x1c99)
+#define P_ENCL_TST_MDSEL                           (volatile unsigned int *)((0x1c99  << 2) + 0xff900000)
+#define   ENCL_TST_Y                               (0x1c9a)
+#define P_ENCL_TST_Y                               (volatile unsigned int *)((0x1c9a  << 2) + 0xff900000)
+#define   ENCL_TST_CB                              (0x1c9b)
+#define P_ENCL_TST_CB                              (volatile unsigned int *)((0x1c9b  << 2) + 0xff900000)
+#define   ENCL_TST_CR                              (0x1c9c)
+#define P_ENCL_TST_CR                              (volatile unsigned int *)((0x1c9c  << 2) + 0xff900000)
+#define   ENCL_TST_CLRBAR_STRT                     (0x1c9d)
+#define P_ENCL_TST_CLRBAR_STRT                     (volatile unsigned int *)((0x1c9d  << 2) + 0xff900000)
+#define   ENCL_TST_CLRBAR_WIDTH                    (0x1c9e)
+#define P_ENCL_TST_CLRBAR_WIDTH                    (volatile unsigned int *)((0x1c9e  << 2) + 0xff900000)
+#define   ENCL_TST_VDCNT_STSET                     (0x1c9f)
+#define P_ENCL_TST_VDCNT_STSET                     (volatile unsigned int *)((0x1c9f  << 2) + 0xff900000)
+//===========================================================================
+// ENCL registers
+#define   ENCL_VIDEO_EN                            (0x1ca0)
+#define P_ENCL_VIDEO_EN                            (volatile unsigned int *)((0x1ca0  << 2) + 0xff900000)
+#define   ENCL_VIDEO_Y_SCL                         (0x1ca1)
+#define P_ENCL_VIDEO_Y_SCL                         (volatile unsigned int *)((0x1ca1  << 2) + 0xff900000)
+#define   ENCL_VIDEO_PB_SCL                        (0x1ca2)
+#define P_ENCL_VIDEO_PB_SCL                        (volatile unsigned int *)((0x1ca2  << 2) + 0xff900000)
+#define   ENCL_VIDEO_PR_SCL                        (0x1ca3)
+#define P_ENCL_VIDEO_PR_SCL                        (volatile unsigned int *)((0x1ca3  << 2) + 0xff900000)
+#define   ENCL_VIDEO_Y_OFFST                       (0x1ca4)
+#define P_ENCL_VIDEO_Y_OFFST                       (volatile unsigned int *)((0x1ca4  << 2) + 0xff900000)
+#define   ENCL_VIDEO_PB_OFFST                      (0x1ca5)
+#define P_ENCL_VIDEO_PB_OFFST                      (volatile unsigned int *)((0x1ca5  << 2) + 0xff900000)
+#define   ENCL_VIDEO_PR_OFFST                      (0x1ca6)
+#define P_ENCL_VIDEO_PR_OFFST                      (volatile unsigned int *)((0x1ca6  << 2) + 0xff900000)
+//----- Video mode
+#define   ENCL_VIDEO_MODE                          (0x1ca7)
+#define P_ENCL_VIDEO_MODE                          (volatile unsigned int *)((0x1ca7  << 2) + 0xff900000)
+#define   ENCL_VIDEO_MODE_ADV                      (0x1ca8)
+#define P_ENCL_VIDEO_MODE_ADV                      (volatile unsigned int *)((0x1ca8  << 2) + 0xff900000)
+//--------------- Debug pins
+#define   ENCL_DBG_PX_RST                          (0x1ca9)
+#define P_ENCL_DBG_PX_RST                          (volatile unsigned int *)((0x1ca9  << 2) + 0xff900000)
+#define   ENCL_DBG_LN_RST                          (0x1caa)
+#define P_ENCL_DBG_LN_RST                          (volatile unsigned int *)((0x1caa  << 2) + 0xff900000)
+#define   ENCL_DBG_PX_INT                          (0x1cab)
+#define P_ENCL_DBG_PX_INT                          (volatile unsigned int *)((0x1cab  << 2) + 0xff900000)
+#define   ENCL_DBG_LN_INT                          (0x1cac)
+#define P_ENCL_DBG_LN_INT                          (volatile unsigned int *)((0x1cac  << 2) + 0xff900000)
+//----------- Video Advanced setting
+#define   ENCL_VIDEO_YFP1_HTIME                    (0x1cad)
+#define P_ENCL_VIDEO_YFP1_HTIME                    (volatile unsigned int *)((0x1cad  << 2) + 0xff900000)
+#define   ENCL_VIDEO_YFP2_HTIME                    (0x1cae)
+#define P_ENCL_VIDEO_YFP2_HTIME                    (volatile unsigned int *)((0x1cae  << 2) + 0xff900000)
+#define   ENCL_VIDEO_YC_DLY                        (0x1caf)
+#define P_ENCL_VIDEO_YC_DLY                        (volatile unsigned int *)((0x1caf  << 2) + 0xff900000)
+#define   ENCL_VIDEO_MAX_PXCNT                     (0x1cb0)
+#define P_ENCL_VIDEO_MAX_PXCNT                     (volatile unsigned int *)((0x1cb0  << 2) + 0xff900000)
+#define   ENCL_VIDEO_HAVON_END                     (0x1cb1)
+#define P_ENCL_VIDEO_HAVON_END                     (volatile unsigned int *)((0x1cb1  << 2) + 0xff900000)
+#define   ENCL_VIDEO_HAVON_BEGIN                   (0x1cb2)
+#define P_ENCL_VIDEO_HAVON_BEGIN                   (volatile unsigned int *)((0x1cb2  << 2) + 0xff900000)
+#define   ENCL_VIDEO_VAVON_ELINE                   (0x1cb3)
+#define P_ENCL_VIDEO_VAVON_ELINE                   (volatile unsigned int *)((0x1cb3  << 2) + 0xff900000)
+#define   ENCL_VIDEO_VAVON_BLINE                   (0x1cb4)
+#define P_ENCL_VIDEO_VAVON_BLINE                   (volatile unsigned int *)((0x1cb4  << 2) + 0xff900000)
+#define   ENCL_VIDEO_HSO_BEGIN                     (0x1cb5)
+#define P_ENCL_VIDEO_HSO_BEGIN                     (volatile unsigned int *)((0x1cb5  << 2) + 0xff900000)
+#define   ENCL_VIDEO_HSO_END                       (0x1cb6)
+#define P_ENCL_VIDEO_HSO_END                       (volatile unsigned int *)((0x1cb6  << 2) + 0xff900000)
+#define   ENCL_VIDEO_VSO_BEGIN                     (0x1cb7)
+#define P_ENCL_VIDEO_VSO_BEGIN                     (volatile unsigned int *)((0x1cb7  << 2) + 0xff900000)
+#define   ENCL_VIDEO_VSO_END                       (0x1cb8)
+#define P_ENCL_VIDEO_VSO_END                       (volatile unsigned int *)((0x1cb8  << 2) + 0xff900000)
+#define   ENCL_VIDEO_VSO_BLINE                     (0x1cb9)
+#define P_ENCL_VIDEO_VSO_BLINE                     (volatile unsigned int *)((0x1cb9  << 2) + 0xff900000)
+#define   ENCL_VIDEO_VSO_ELINE                     (0x1cba)
+#define P_ENCL_VIDEO_VSO_ELINE                     (volatile unsigned int *)((0x1cba  << 2) + 0xff900000)
+#define   ENCL_VIDEO_MAX_LNCNT                     (0x1cbb)
+#define P_ENCL_VIDEO_MAX_LNCNT                     (volatile unsigned int *)((0x1cbb  << 2) + 0xff900000)
+#define   ENCL_VIDEO_BLANKY_VAL                    (0x1cbc)
+#define P_ENCL_VIDEO_BLANKY_VAL                    (volatile unsigned int *)((0x1cbc  << 2) + 0xff900000)
+#define   ENCL_VIDEO_BLANKPB_VAL                   (0x1cbd)
+#define P_ENCL_VIDEO_BLANKPB_VAL                   (volatile unsigned int *)((0x1cbd  << 2) + 0xff900000)
+#define   ENCL_VIDEO_BLANKPR_VAL                   (0x1cbe)
+#define P_ENCL_VIDEO_BLANKPR_VAL                   (volatile unsigned int *)((0x1cbe  << 2) + 0xff900000)
+#define   ENCL_VIDEO_HOFFST                        (0x1cbf)
+#define P_ENCL_VIDEO_HOFFST                        (volatile unsigned int *)((0x1cbf  << 2) + 0xff900000)
+#define   ENCL_VIDEO_VOFFST                        (0x1cc0)
+#define P_ENCL_VIDEO_VOFFST                        (volatile unsigned int *)((0x1cc0  << 2) + 0xff900000)
+#define   ENCL_VIDEO_RGB_CTRL                      (0x1cc1)
+#define P_ENCL_VIDEO_RGB_CTRL                      (volatile unsigned int *)((0x1cc1  << 2) + 0xff900000)
+#define   ENCL_VIDEO_FILT_CTRL                     (0x1cc2)
+#define P_ENCL_VIDEO_FILT_CTRL                     (volatile unsigned int *)((0x1cc2  << 2) + 0xff900000)
+#define   ENCL_VIDEO_OFLD_VPEQ_OFST                (0x1cc3)
+#define P_ENCL_VIDEO_OFLD_VPEQ_OFST                (volatile unsigned int *)((0x1cc3  << 2) + 0xff900000)
+#define   ENCL_VIDEO_OFLD_VOAV_OFST                (0x1cc4)
+#define P_ENCL_VIDEO_OFLD_VOAV_OFST                (volatile unsigned int *)((0x1cc4  << 2) + 0xff900000)
+#define   ENCL_VIDEO_MATRIX_CB                     (0x1cc5)
+#define P_ENCL_VIDEO_MATRIX_CB                     (volatile unsigned int *)((0x1cc5  << 2) + 0xff900000)
+#define   ENCL_VIDEO_MATRIX_CR                     (0x1cc6)
+#define P_ENCL_VIDEO_MATRIX_CR                     (volatile unsigned int *)((0x1cc6  << 2) + 0xff900000)
+#define   ENCL_VIDEO_RGBIN_CTRL                    (0x1cc7)
+#define P_ENCL_VIDEO_RGBIN_CTRL                    (volatile unsigned int *)((0x1cc7  << 2) + 0xff900000)
+#define   ENCL_MAX_LINE_SWITCH_POINT               (0x1cc8)
+#define P_ENCL_MAX_LINE_SWITCH_POINT               (volatile unsigned int *)((0x1cc8  << 2) + 0xff900000)
+#define   ENCL_DACSEL_0                            (0x1cc9)
+#define P_ENCL_DACSEL_0                            (volatile unsigned int *)((0x1cc9  << 2) + 0xff900000)
+#define   ENCL_DACSEL_1                            (0x1cca)
+#define P_ENCL_DACSEL_1                            (volatile unsigned int *)((0x1cca  << 2) + 0xff900000)
+//
+// Closing file:  venc2_regs.h
+//
+//`define VPP_VCBUS_BASE			     8'h1d
+//
+// Reading file:  vpp_regs.h
+//
+// synopsys translate_off
+// synopsys translate_on
+// -----------------------------------------------
+// CBUS_BASE:  VPP_VCBUS_BASE = 0x1d
+// -----------------------------------------------
+//===========================================================================
+// Video postprocesing Registers
+//===========================================================================
+// dummy data used in the VPP preblend and scaler
+// Bit 23:16    Y
+// Bit 15:8     CB
+// Bit 7:0      CR
+#define   VPP_DUMMY_DATA                           (0x1d00)
+#define P_VPP_DUMMY_DATA                           (volatile unsigned int *)((0x1d00  << 2) + 0xff900000)
+//input line length used in VPP
+#define   VPP_LINE_IN_LENGTH                       (0x1d01)
+#define P_VPP_LINE_IN_LENGTH                       (volatile unsigned int *)((0x1d01  << 2) + 0xff900000)
+//input Picture height used in VPP
+#define   VPP_PIC_IN_HEIGHT                        (0x1d02)
+#define P_VPP_PIC_IN_HEIGHT                        (volatile unsigned int *)((0x1d02  << 2) + 0xff900000)
+//Because there are many coefficients used in the vertical filter and horizontal filters,
+//indirect access the coefficients of vertical filter and horizontal filter is used.
+//For vertical filter, there are 33x4 coefficients
+//For horizontal filter, there are 33x4 coefficients
+//Bit 15	index increment, if bit9 == 1  then (0: index increase 1, 1: index increase 2) else (index increase 2)
+//Bit 14	1: read coef through cbus enable, just for debug purpose in case when we wanna check the coef in ram in correct or not
+//Bit 13    if true, vertical separated coef enable
+//Bit 9     if true, use 9bit resolution coef, other use 8bit resolution coef
+//Bit 8:7   type of index, 00: vertical coef, 01: vertical chroma coef: 10: horizontal coef, 11: resevered
+//Bit 6:0 	coef index
+#define   VPP_SCALE_COEF_IDX                       (0x1d03)
+#define P_VPP_SCALE_COEF_IDX                       (volatile unsigned int *)((0x1d03  << 2) + 0xff900000)
+//coefficients for vertical filter and horizontal filter
+#define   VPP_SCALE_COEF                           (0x1d04)
+#define P_VPP_SCALE_COEF                           (volatile unsigned int *)((0x1d04  << 2) + 0xff900000)
+//these following registers are the absolute line address pointer for output divided screen
+//The output divided screen is shown in the following:
+//
+//  --------------------------   <------ line zero
+//		.
+//		.
+//		.		    region0        <---------- nonlinear region or nonscaling region
+//		.
+//  ---------------------------
+//  ---------------------------  <------ region1_startp
+//		.
+//		.           region1         <---------- nonlinear region
+//		.
+//		.
+//  ---------------------------
+//  ---------------------------  <------ region2_startp
+//		.
+//		.           region2         <---------- linear region
+//		.
+//		.
+//  ---------------------------
+//  ---------------------------  <------ region3_startp
+//		.
+//		.           region3         <---------- nonlinear region
+//		.
+//		.
+//  ---------------------------
+//  ---------------------------  <------ region4_startp
+//		.
+//		.           region4         <---------- nonlinear region or nonoscaling region
+//		.
+//		.
+//  ---------------------------  <------ region4_endp
+//Bit 28:16 region1 startp
+//Bit 12:0 region2 startp
+#define   VPP_VSC_REGION12_STARTP                  (0x1d05)
+#define P_VPP_VSC_REGION12_STARTP                  (volatile unsigned int *)((0x1d05  << 2) + 0xff900000)
+//Bit 28:16 region3 startp
+//Bit 12:0 region4 startp
+#define   VPP_VSC_REGION34_STARTP                  (0x1d06)
+#define P_VPP_VSC_REGION34_STARTP                  (volatile unsigned int *)((0x1d06  << 2) + 0xff900000)
+#define   VPP_VSC_REGION4_ENDP                     (0x1d07)
+#define P_VPP_VSC_REGION4_ENDP                     (volatile unsigned int *)((0x1d07  << 2) + 0xff900000)
+//vertical start phase step, (source/dest)*(2^24)
+//Bit 27:24 integer part
+//Bit 23:0	fraction part
+#define   VPP_VSC_START_PHASE_STEP                 (0x1d08)
+#define P_VPP_VSC_START_PHASE_STEP                 (volatile unsigned int *)((0x1d08  << 2) + 0xff900000)
+//vertical scaler region0 phase slope, Bit24 signed bit
+#define   VPP_VSC_REGION0_PHASE_SLOPE              (0x1d09)
+#define P_VPP_VSC_REGION0_PHASE_SLOPE              (volatile unsigned int *)((0x1d09  << 2) + 0xff900000)
+//vertical scaler region1 phase slope, Bit24 signed bit
+#define   VPP_VSC_REGION1_PHASE_SLOPE              (0x1d0a)
+#define P_VPP_VSC_REGION1_PHASE_SLOPE              (volatile unsigned int *)((0x1d0a  << 2) + 0xff900000)
+//vertical scaler region3 phase slope, Bit24 signed bit
+#define   VPP_VSC_REGION3_PHASE_SLOPE              (0x1d0b)
+#define P_VPP_VSC_REGION3_PHASE_SLOPE              (volatile unsigned int *)((0x1d0b  << 2) + 0xff900000)
+//vertical scaler region4 phase slope, Bit24 signed bit
+#define   VPP_VSC_REGION4_PHASE_SLOPE              (0x1d0c)
+#define P_VPP_VSC_REGION4_PHASE_SLOPE              (volatile unsigned int *)((0x1d0c  << 2) + 0xff900000)
+//Bit 18:17     double line mode, input/output line width of vscaler becomes 2X,
+//           so only 2 line buffer in this case, use for 3D line by line interleave scaling
+//           bit1 true, double the input width and half input height, bit0 true, change line buffer 2 lines instead of 4 lines
+//Bit 16     0: progressive output, 1: interlace output
+//Bit 15     vertical scaler output line0 in advance or not for bottom field
+//Bit 14:13  vertical scaler initial repeat line0 number for bottom field
+//Bit 11:8   vertical scaler initial receiving  number for bottom field
+//Bit 7      vertical scaler output line0 in advance or not for top field
+//Bit 6:5    vertical scaler initial repeat line0 number for top field
+//Bit 3:0    vertical scaler initial receiving  number for top field
+#define   VPP_VSC_PHASE_CTRL                       (0x1d0d)
+#define P_VPP_VSC_PHASE_CTRL                       (volatile unsigned int *)((0x1d0d  << 2) + 0xff900000)
+//Bit 31:16  vertical scaler field initial phase for bottom field
+//Bit 15:0  vertical scaler field initial phase for top field
+#define   VPP_VSC_INI_PHASE                        (0x1d0e)
+#define P_VPP_VSC_INI_PHASE                        (volatile unsigned int *)((0x1d0e  << 2) + 0xff900000)
+//Bit 28:16 region1 startp
+//Bit 12:0 region2 startp
+#define   VPP_HSC_REGION12_STARTP                  (0x1d10)
+#define P_VPP_HSC_REGION12_STARTP                  (volatile unsigned int *)((0x1d10  << 2) + 0xff900000)
+//Bit 28:16 region3 startp
+//Bit 12:0 region4 startp
+#define   VPP_HSC_REGION34_STARTP                  (0x1d11)
+#define P_VPP_HSC_REGION34_STARTP                  (volatile unsigned int *)((0x1d11  << 2) + 0xff900000)
+#define   VPP_HSC_REGION4_ENDP                     (0x1d12)
+#define P_VPP_HSC_REGION4_ENDP                     (volatile unsigned int *)((0x1d12  << 2) + 0xff900000)
+//horizontal start phase step, (source/dest)*(2^24)
+//Bit 27:24 integer part
+//Bit 23:0	fraction part
+#define   VPP_HSC_START_PHASE_STEP                 (0x1d13)
+#define P_VPP_HSC_START_PHASE_STEP                 (volatile unsigned int *)((0x1d13  << 2) + 0xff900000)
+//horizontal scaler region0 phase slope, Bit24 signed bit
+#define   VPP_HSC_REGION0_PHASE_SLOPE              (0x1d14)
+#define P_VPP_HSC_REGION0_PHASE_SLOPE              (volatile unsigned int *)((0x1d14  << 2) + 0xff900000)
+//horizontal scaler region1 phase slope, Bit24 signed bit
+#define   VPP_HSC_REGION1_PHASE_SLOPE              (0x1d15)
+#define P_VPP_HSC_REGION1_PHASE_SLOPE              (volatile unsigned int *)((0x1d15  << 2) + 0xff900000)
+//horizontal scaler region3 phase slope, Bit24 signed bit
+#define   VPP_HSC_REGION3_PHASE_SLOPE              (0x1d16)
+#define P_VPP_HSC_REGION3_PHASE_SLOPE              (volatile unsigned int *)((0x1d16  << 2) + 0xff900000)
+//horizontal scaler region4 phase slope, Bit24 signed bit
+#define   VPP_HSC_REGION4_PHASE_SLOPE              (0x1d17)
+#define P_VPP_HSC_REGION4_PHASE_SLOPE              (volatile unsigned int *)((0x1d17  << 2) + 0xff900000)
+//Bit 22:21   horizontal scaler initial repeat pixel0 number0
+//Bit 19:16   horizontal scaler initial receiving number0
+//Bit 15:0    horizontal scaler top field initial phase0
+#define   VPP_HSC_PHASE_CTRL                       (0x1d18)
+#define P_VPP_HSC_PHASE_CTRL                       (volatile unsigned int *)((0x1d18  << 2) + 0xff900000)
+// Bit 22 if true, divide VSC line length 2 as the HSC input length, othwise VSC length length is the same as the VSC line length,
+//                 just for special usage, more flexibility
+// Bit 21 if true, prevsc uses lin buffer, otherwise prevsc does not use line buffer, it should be same as prevsc_en
+// Bit 20 prehsc_en
+// Bit 19 prevsc_en
+// Bit 18 vsc_en
+// Bit 17 hsc_en
+// Bit 16 scale_top_en
+// Bit 15 video1 scale out enable
+// Bit 12 if true, region0,region4 are nonlinear regions, otherwise they are not scaling regions, for horizontal scaler
+// Bit 10:8 horizontal scaler bank length
+// Bit 5, vertical scaler phase field mode, if true, disable the opposite parity line output, more bandwith needed if output 1080i
+// Bit 4 if true, region0,region4 are nonlinear regions, otherwise they are not scaling regions, for vertical scaler
+// Bit 2:0 vertical scaler bank length
+#define   VPP_SC_MISC                              (0x1d19)
+#define P_VPP_SC_MISC                              (volatile unsigned int *)((0x1d19  << 2) + 0xff900000)
+// preblend video1 horizontal start and end
+//Bit 28:16 start
+//Bit 12:0 end
+#define   VPP_PREBLEND_VD1_H_START_END             (0x1d1a)
+#define P_VPP_PREBLEND_VD1_H_START_END             (volatile unsigned int *)((0x1d1a  << 2) + 0xff900000)
+// preblend video1 vertical start and end
+//Bit 28:16 start
+//Bit 12:0 end
+#define   VPP_PREBLEND_VD1_V_START_END             (0x1d1b)
+#define P_VPP_PREBLEND_VD1_V_START_END             (volatile unsigned int *)((0x1d1b  << 2) + 0xff900000)
+// postblend video1 horizontal start and end
+//Bit 28:16 start
+//Bit 12:0 end
+#define   VPP_POSTBLEND_VD1_H_START_END            (0x1d1c)
+#define P_VPP_POSTBLEND_VD1_H_START_END            (volatile unsigned int *)((0x1d1c  << 2) + 0xff900000)
+// postblend video1 vertical start and end
+//Bit 28:16 start
+//Bit 12:0 end
+#define   VPP_POSTBLEND_VD1_V_START_END            (0x1d1d)
+#define P_VPP_POSTBLEND_VD1_V_START_END            (volatile unsigned int *)((0x1d1d  << 2) + 0xff900000)
+// preblend/postblend video2 horizontal start and end
+//Bit 28:16 start
+//Bit 12:0 end
+#define   VPP_BLEND_VD2_H_START_END                (0x1d1e)
+#define P_VPP_BLEND_VD2_H_START_END                (volatile unsigned int *)((0x1d1e  << 2) + 0xff900000)
+// preblend/postblend video2 vertical start and end
+//Bit 28:16 start
+//Bit 12:0 end
+#define   VPP_BLEND_VD2_V_START_END                (0x1d1f)
+#define P_VPP_BLEND_VD2_V_START_END                (volatile unsigned int *)((0x1d1f  << 2) + 0xff900000)
+// preblend horizontal size
+#define   VPP_PREBLEND_H_SIZE                      (0x1d20)
+#define P_VPP_PREBLEND_H_SIZE                      (volatile unsigned int *)((0x1d20  << 2) + 0xff900000)
+// postblend horizontal size
+#define   VPP_POSTBLEND_H_SIZE                     (0x1d21)
+#define P_VPP_POSTBLEND_H_SIZE                     (volatile unsigned int *)((0x1d21  << 2) + 0xff900000)
+//VPP hold lines
+//Bit 29:24
+//Bit 21:16
+//Bit 15:8     preblend hold lines
+//Bit 7:0      postblend hold lines
+#define   VPP_HOLD_LINES                           (0x1d22)
+#define P_VPP_HOLD_LINES                           (volatile unsigned int *)((0x1d22  << 2) + 0xff900000)
+//Bit 26   if true, automatic change post blend output to one color if field ==1
+//Bit 25   if true, change screen to one color value for preblender
+//Bit 24   if true, change screen to one color value for postblender
+// Bit 23:16 one color Y
+// Bit 15:8 one color Cb
+// Bit  7:0 one color  Cr
+#define   VPP_BLEND_ONECOLOR_CTRL                  (0x1d23)
+#define P_VPP_BLEND_ONECOLOR_CTRL                  (volatile unsigned int *)((0x1d23  << 2) + 0xff900000)
+//Read Only, VPP preblend current_x, current_y
+//Bit 28:16 current_x
+//Bit 12:0 current_y
+#define   VPP_PREBLEND_CURRENT_XY                  (0x1d24)
+#define P_VPP_PREBLEND_CURRENT_XY                  (volatile unsigned int *)((0x1d24  << 2) + 0xff900000)
+//Read Only, VPP postblend current_x, current_y
+//Bit 28:16 current_x
+//Bit 12:0 current_y
+#define   VPP_POSTBLEND_CURRENT_XY                 (0x1d25)
+#define P_VPP_POSTBLEND_CURRENT_XY                 (volatile unsigned int *)((0x1d25  << 2) + 0xff900000)
+// Bit 31  vd1_bgosd_exchange_en for preblend
+// Bit 30  vd1_bgosd_exchange_en for postblend
+// Bit 28   color management enable
+// Bit 27,  if true, vd2 use viu2 output as the input, otherwise use normal vd2 from memory
+// Bit 26:18, vd2 alpha
+// Bit 17, osd2 enable for preblend
+// Bit 16, osd1 enable for preblend
+// Bit 15, vd2 enable for preblend
+// Bit 14, vd1 enable for preblend
+// Bit 13, osd2 enable for postblend
+// Bit 12, osd1 enable for postblend
+// Bit 11, vd2 enable for postblend
+// Bit 10, vd1 enable for postblend
+// Bit 9,  if true, osd1 is alpha premultipiled
+// Bit 8,  if true, osd2 is alpha premultipiled
+// Bit 7,  postblend module enable
+// Bit 6,  preblend module enable
+// Bit 5,  if true, osd2 foreground compared with osd1 in preblend
+// Bit 4,  if true, osd2 foreground compared with osd1 in postblend
+// Bit 3,
+// Bit 2,  if true, disable resetting async fifo every vsync, otherwise every vsync
+//			 the aync fifo will be reseted.
+// Bit 1,
+// Bit 0	if true, the output result of VPP is saturated
+#define   VPP_MISC                                 (0x1d26)
+#define P_VPP_MISC                                 (volatile unsigned int *)((0x1d26  << 2) + 0xff900000)
+//Bit 31:20 ofifo line length minus 1
+//Bit 19  if true invert input vs
+//Bit 18  if true invert input hs
+//Bit 17  force top/bottom field, enable
+//Bit 16  force top/bottom field, 0: top, 1: bottom
+//Bit 15  force one go_field, one pluse, write only
+//Bit 14  force one go_line, one pluse, write only
+//Bit 12:0 ofifo size (actually only bit 10:1 is valid), always even number
+#define   VPP_OFIFO_SIZE                           (0x1d27)
+#define P_VPP_OFIFO_SIZE                           (volatile unsigned int *)((0x1d27  << 2) + 0xff900000)
+//Read only
+//Bit 28:18 current scale out fifo counter
+//Bit 17:13 current afifo counter
+//Bit 12:0 current ofifo counter
+#define   VPP_FIFO_STATUS                          (0x1d28)
+#define P_VPP_FIFO_STATUS                          (volatile unsigned int *)((0x1d28  << 2) + 0xff900000)
+// Bit 5 SMOKE3 postblend enable only when postblend vd2 is not enable
+// Bit 4 SMOKE3 preblend enable only when preblend vd2 is not enable
+// Bit 3 SMOKE2 postblend enable only when postblend osd2 is not enable
+// Bit 2 SMOKE2 preblend enable only when preblend osd2 is not enable
+// Bit 1 SMOKE1 postblend enable only when postblend osd1 is not enable
+// Bit 0 SMOKE1 preblend enable only when preblend osd1 is not enable
+#define   VPP_SMOKE_CTRL                           (0x1d29)
+#define P_VPP_SMOKE_CTRL                           (volatile unsigned int *)((0x1d29  << 2) + 0xff900000)
+//smoke can be used only when that blending is disable and then be used as smoke function
+//smoke1 for OSD1 chanel
+//smoke2 for OSD2 chanel
+//smoke3 for VD2 chanel
+//31:24 Y
+//23:16 Cb
+//15:8 Cr
+//7:0 Alpha
+#define   VPP_SMOKE1_VAL                           (0x1d2a)
+#define P_VPP_SMOKE1_VAL                           (volatile unsigned int *)((0x1d2a  << 2) + 0xff900000)
+#define   VPP_SMOKE2_VAL                           (0x1d2b)
+#define P_VPP_SMOKE2_VAL                           (volatile unsigned int *)((0x1d2b  << 2) + 0xff900000)
+#define   VPP_SMOKE3_VAL                           (0x1d2c)
+#define P_VPP_SMOKE3_VAL                           (volatile unsigned int *)((0x1d2c  << 2) + 0xff900000)
+//Bit 28:16 start
+//Bit 12:0 end
+#define   VPP_SMOKE1_H_START_END                   (0x1d2d)
+#define P_VPP_SMOKE1_H_START_END                   (volatile unsigned int *)((0x1d2d  << 2) + 0xff900000)
+//Bit 28:16 start
+//Bit 12:0 end
+#define   VPP_SMOKE1_V_START_END                   (0x1d2e)
+#define P_VPP_SMOKE1_V_START_END                   (volatile unsigned int *)((0x1d2e  << 2) + 0xff900000)
+//Bit 28:16 start
+//Bit 12:0 end
+#define   VPP_SMOKE2_H_START_END                   (0x1d2f)
+#define P_VPP_SMOKE2_H_START_END                   (volatile unsigned int *)((0x1d2f  << 2) + 0xff900000)
+//Bit 28:16 start
+//Bit 12:0 end
+#define   VPP_SMOKE2_V_START_END                   (0x1d30)
+#define P_VPP_SMOKE2_V_START_END                   (volatile unsigned int *)((0x1d30  << 2) + 0xff900000)
+//Bit 28:16 start
+//Bit 12:0 end
+#define   VPP_SMOKE3_H_START_END                   (0x1d31)
+#define P_VPP_SMOKE3_H_START_END                   (volatile unsigned int *)((0x1d31  << 2) + 0xff900000)
+//Bit 28:16 start
+//Bit 12:0 end
+#define   VPP_SMOKE3_V_START_END                   (0x1d32)
+#define P_VPP_SMOKE3_V_START_END                   (volatile unsigned int *)((0x1d32  << 2) + 0xff900000)
+//Bit 27:16 scale out fifo line length minus 1
+//Bit 12:0 scale out fifo size (actually only bit 11:1 is valid, 11:1, max 1024), always even number
+#define   VPP_SCO_FIFO_CTRL                        (0x1d33)
+#define P_VPP_SCO_FIFO_CTRL                        (volatile unsigned int *)((0x1d33  << 2) + 0xff900000)
+//for 3D quincunx sub-sampling and horizontal pixel by pixel 3D interleaving
+//Bit 27:24, prehsc_mode, bit 3:2, prehsc odd line interp mode, bit 1:0, prehsc even line interp mode,
+//           each 2bit, 00: pix0+pix1/2, average, 01: pix1, 10: pix0
+//Bit 23 horizontal scaler double pixel mode
+//Bit 22:21   horizontal scaler initial repeat pixel0 number1
+//Bit 19:16   horizontal scaler initial receiving number1
+//Bit 15:0    horizontal scaler top field initial phase1
+#define   VPP_HSC_PHASE_CTRL1                      (0x1d34)
+#define P_VPP_HSC_PHASE_CTRL1                      (volatile unsigned int *)((0x1d34  << 2) + 0xff900000)
+//for 3D quincunx sub-sampling
+//31:24  prehsc pattern, each patten 1 bit, from lsb -> msb
+//22:20  prehsc pattern start
+//18:16 prehsc pattern end
+//15:8 hsc pattern, each patten 1 bit, from lsb -> msb
+//6:4  hsc pattern start
+//2:0  hsc pattern end
+#define   VPP_HSC_INI_PAT_CTRL                     (0x1d35)
+#define P_VPP_HSC_INI_PAT_CTRL                     (volatile unsigned int *)((0x1d35  << 2) + 0xff900000)
+//Bit 3			minus black level enable for vadj2
+//Bit 2			Video adjustment enable for vadj2
+//Bit 1			minus black level enable for vadj1
+//Bit 0			Video adjustment enable for vadj1
+#define   VPP_VADJ_CTRL                            (0x1d40)
+#define P_VPP_VADJ_CTRL                            (volatile unsigned int *)((0x1d40  << 2) + 0xff900000)
+//Bit 16:8  brightness, signed value
+//Bit 7:0	contrast, unsigned value, contrast from  0 <= contrast <2
+#define   VPP_VADJ1_Y                              (0x1d41)
+#define P_VPP_VADJ1_Y                              (volatile unsigned int *)((0x1d41  << 2) + 0xff900000)
+//cb' = cb*ma + cr*mb
+//cr' = cb*mc + cr*md
+//all are bit 9:0, signed value, -2 < ma/mb/mc/md < 2
+#define   VPP_VADJ1_MA_MB                          (0x1d42)
+#define P_VPP_VADJ1_MA_MB                          (volatile unsigned int *)((0x1d42  << 2) + 0xff900000)
+#define   VPP_VADJ1_MC_MD                          (0x1d43)
+#define P_VPP_VADJ1_MC_MD                          (volatile unsigned int *)((0x1d43  << 2) + 0xff900000)
+//Bit 16:8  brightness, signed value
+//Bit 7:0	contrast, unsigned value, contrast from  0 <= contrast <2
+#define   VPP_VADJ2_Y                              (0x1d44)
+#define P_VPP_VADJ2_Y                              (volatile unsigned int *)((0x1d44  << 2) + 0xff900000)
+//cb' = cb*ma + cr*mb
+//cr' = cb*mc + cr*md
+//all are bit 9:0, signed value, -2 < ma/mb/mc/md < 2
+#define   VPP_VADJ2_MA_MB                          (0x1d45)
+#define P_VPP_VADJ2_MA_MB                          (volatile unsigned int *)((0x1d45  << 2) + 0xff900000)
+#define   VPP_VADJ2_MC_MD                          (0x1d46)
+#define P_VPP_VADJ2_MC_MD                          (volatile unsigned int *)((0x1d46  << 2) + 0xff900000)
+//Bit 2 horizontal chroma sharp/blur selection, 0:sharp, 1: blur
+//Bit 1 horizontal luma sharp/blur selection, 0:sharp, 1: blur
+//Bit 0 horizontal sharpness enable
+#define   VPP_HSHARP_CTRL                          (0x1d50)
+#define P_VPP_HSHARP_CTRL                          (volatile unsigned int *)((0x1d50  << 2) + 0xff900000)
+//{1'b0,threhsold} < diff
+//Bit 26:16  luma threshold0
+//Bit 10:0   luma threshold1
+#define   VPP_HSHARP_LUMA_THRESH01                 (0x1d51)
+#define P_VPP_HSHARP_LUMA_THRESH01                 (volatile unsigned int *)((0x1d51  << 2) + 0xff900000)
+//
+//Bit 26:16  luma threshold2
+//Bit 10:0   luma threshold3
+#define   VPP_HSHARP_LUMA_THRESH23                 (0x1d52)
+#define P_VPP_HSHARP_LUMA_THRESH23                 (volatile unsigned int *)((0x1d52  << 2) + 0xff900000)
+//Bit 26:16  chroma threshold0
+//Bit 10:0   chroma threshold1
+#define   VPP_HSHARP_CHROMA_THRESH01               (0x1d53)
+#define P_VPP_HSHARP_CHROMA_THRESH01               (volatile unsigned int *)((0x1d53  << 2) + 0xff900000)
+//Bit 26:16  chroma threshold2
+//Bit 10:0   chroma threshold3
+#define   VPP_HSHARP_CHROMA_THRESH23               (0x1d54)
+#define P_VPP_HSHARP_CHROMA_THRESH23               (volatile unsigned int *)((0x1d54  << 2) + 0xff900000)
+//Bit 23:16 luma gain2
+//Bit 15:8  luma gain1
+//Bit 7:0   luma gain0
+#define   VPP_HSHARP_LUMA_GAIN                     (0x1d55)
+#define P_VPP_HSHARP_LUMA_GAIN                     (volatile unsigned int *)((0x1d55  << 2) + 0xff900000)
+//
+//Bit 23:16 chroma gain2
+//Bit 15:8  chroma gain1
+//Bit 7:0   chroma gain0
+#define   VPP_HSHARP_CHROMA_GAIN                   (0x1d56)
+#define P_VPP_HSHARP_CHROMA_GAIN                   (volatile unsigned int *)((0x1d56  << 2) + 0xff900000)
+//Read only
+//Bit 31, if it is true, it means this probe is valid in the last field/frame
+//Bit 29:20 component 0
+//Bit 19:10 component 1
+//Bit 9:0 component 2
+#define   VPP_MATRIX_PROBE_COLOR                   (0x1d5c)
+#define P_VPP_MATRIX_PROBE_COLOR                   (volatile unsigned int *)((0x1d5c  << 2) + 0xff900000)
+#define   VPP_MATRIX_PROBE_COLOR1                  (0x1dd7)
+#define P_VPP_MATRIX_PROBE_COLOR1                  (volatile unsigned int *)((0x1dd7  << 2) + 0xff900000)
+//Bit 23:16 component 0
+//Bit 15:8  component 1
+//Bit 7:0 component 2
+#define   VPP_MATRIX_HL_COLOR                      (0x1d5d)
+#define P_VPP_MATRIX_HL_COLOR                      (volatile unsigned int *)((0x1d5d  << 2) + 0xff900000)
+//28:16 probe x, postion
+//12:0  probe y, position
+#define   VPP_MATRIX_PROBE_POS                     (0x1d5e)
+#define P_VPP_MATRIX_PROBE_POS                     (volatile unsigned int *)((0x1d5e  << 2) + 0xff900000)
+//Bit 16,  highlight_en
+//Bit 15   probe_post, if true, probe pixel data after matrix, otherwise probe pixel data before matrix
+//Bit 14:12 probe_sel, 000: select post matrix, 001: select vd1 matrix, 010: select vd2 matrix
+//Bit 9:8  matrix coef idx selection, 00: select post matrix, 01: select vd1 matrix, 10: select vd2 matrix
+//Bit 5    vd1 conversion matrix enable
+//Bit 4    vd2 conversion matrix enable
+//Bit 2    output y/cb/cr saturation enable, only for post matrix (y saturate to 16-235, cb/cr saturate to 16-240)
+//Bit 1    input y/cb/cr saturation enable, only for post matrix (y saturate to 16-235, cb/cr saturate to 16-240)
+//Bit 0    post conversion matrix enable
+#define   VPP_MATRIX_CTRL                          (0x1d5f)
+#define P_VPP_MATRIX_CTRL                          (volatile unsigned int *)((0x1d5f  << 2) + 0xff900000)
+//Bit 28:16 coef00
+//Bit 12:0  coef01
+#define   VPP_MATRIX_COEF00_01                     (0x1d60)
+#define P_VPP_MATRIX_COEF00_01                     (volatile unsigned int *)((0x1d60  << 2) + 0xff900000)
+//Bit 28:16 coef02
+//Bit 12:0  coef10
+#define   VPP_MATRIX_COEF02_10                     (0x1d61)
+#define P_VPP_MATRIX_COEF02_10                     (volatile unsigned int *)((0x1d61  << 2) + 0xff900000)
+//Bit 28:16 coef11
+//Bit 12:0  coef12
+#define   VPP_MATRIX_COEF11_12                     (0x1d62)
+#define P_VPP_MATRIX_COEF11_12                     (volatile unsigned int *)((0x1d62  << 2) + 0xff900000)
+//Bit 28:16 coef20
+//Bit 12:0  coef21
+#define   VPP_MATRIX_COEF20_21                     (0x1d63)
+#define P_VPP_MATRIX_COEF20_21                     (volatile unsigned int *)((0x1d63  << 2) + 0xff900000)
+#define   VPP_MATRIX_COEF22                        (0x1d64)
+#define P_VPP_MATRIX_COEF22                        (volatile unsigned int *)((0x1d64  << 2) + 0xff900000)
+//Bit 26:16 offset0
+//Bit 10:0  offset1
+#define   VPP_MATRIX_OFFSET0_1                     (0x1d65)
+#define P_VPP_MATRIX_OFFSET0_1                     (volatile unsigned int *)((0x1d65  << 2) + 0xff900000)
+//Bit 10:0  offset2
+#define   VPP_MATRIX_OFFSET2                       (0x1d66)
+#define P_VPP_MATRIX_OFFSET2                       (volatile unsigned int *)((0x1d66  << 2) + 0xff900000)
+//Bit 26:16 pre_offset0
+//Bit 10:0  pre_offset1
+#define   VPP_MATRIX_PRE_OFFSET0_1                 (0x1d67)
+#define P_VPP_MATRIX_PRE_OFFSET0_1                 (volatile unsigned int *)((0x1d67  << 2) + 0xff900000)
+//Bit 10:0  pre_offset2
+#define   VPP_MATRIX_PRE_OFFSET2                   (0x1d68)
+#define P_VPP_MATRIX_PRE_OFFSET2                   (volatile unsigned int *)((0x1d68  << 2) + 0xff900000)
+// dummy data used in the VPP postblend
+// Bit 23:16    Y
+// Bit 15:8     CB
+// Bit 7:0      CR
+#define   VPP_DUMMY_DATA1                          (0x1d69)
+#define P_VPP_DUMMY_DATA1                          (volatile unsigned int *)((0x1d69  << 2) + 0xff900000)
+//Bit 31 gainoff module enable
+//Bit 26:16 gain0, 1.10 unsigned data
+//Bit 10:0  gain1, 1.10 unsigned dat
+#define   VPP_GAINOFF_CTRL0                        (0x1d6a)
+#define P_VPP_GAINOFF_CTRL0                        (volatile unsigned int *)((0x1d6a  << 2) + 0xff900000)
+//Bit 26:16 gain2, 1.10 unsigned data
+//Bit 10:0, offset0, signed data
+#define   VPP_GAINOFF_CTRL1                        (0x1d6b)
+#define P_VPP_GAINOFF_CTRL1                        (volatile unsigned int *)((0x1d6b  << 2) + 0xff900000)
+//Bit 26:16, offset1, signed data
+//Bit 10:0, offset2, signed data
+#define   VPP_GAINOFF_CTRL2                        (0x1d6c)
+#define P_VPP_GAINOFF_CTRL2                        (volatile unsigned int *)((0x1d6c  << 2) + 0xff900000)
+//Bit 26:16, pre_offset0, signed data
+//Bit 10:0, pre_offset1, signed data
+#define   VPP_GAINOFF_CTRL3                        (0x1d6d)
+#define P_VPP_GAINOFF_CTRL3                        (volatile unsigned int *)((0x1d6d  << 2) + 0xff900000)
+//Bit 10:0, pre_offset2, signed data
+#define   VPP_GAINOFF_CTRL4                        (0x1d6e)
+#define P_VPP_GAINOFF_CTRL4                        (volatile unsigned int *)((0x1d6e  << 2) + 0xff900000)
+//only two registers used in the color management, which are defined in the chroma_reg.h
+//`define VPP_CHROMA_ADDR_PORT    8'h70
+//`define VPP_CHROMA_DATA_PORT    8'h71
+//
+// Reading file:  chroma_reg.h
+//
+//**********************************************************************************
+//* Copyright (c) 2008, AMLOGIC Inc.
+//* All rights reserved
+//**********************************************************************************
+//* File :  chroma_reg.v
+//* Author : Terrence Wang
+//* Date : Dec 2008
+//* Description :
+//*
+//**********************************************************************************
+//* Modification History:
+//* Date    Modified By         Reason
+//**********************************************************************************
+// synopsys translate_off
+// synopsys translate_on
+#define   VPP_CHROMA_ADDR_PORT                     (0x1d70)
+#define P_VPP_CHROMA_ADDR_PORT                     (volatile unsigned int *)((0x1d70  << 2) + 0xff900000)
+#define   VPP_CHROMA_DATA_PORT                     (0x1d71)
+#define P_VPP_CHROMA_DATA_PORT                     (volatile unsigned int *)((0x1d71  << 2) + 0xff900000)
+//`define CHROMA_ADDR_PORT        8'h67
+//`define CHROMA_DATA_PORT        8'h68
+
+//  CHROMA_GAIN_REG_XX(00-07)
+//  hue gain, sat gain function control
+//  Bit 31      reg_sat_en                  enable sat adjustment in current region
+//  Bit 27      reg_sat_increase            sat adjustment increase or decrease
+//                                          1'b1: increase  1'b0: decrease
+//  Bit 26:25   reg_sat_central_en          sat adjustment with central biggest or one side biggest
+//                                          2'b01 central biggest   2'b00 one side biggest
+//  Bit 24      reg_sat_shape               when sat adjustment one side biggest, define left or right
+//                                          1'b1: left side biggest 1'b0 right side biggest
+//  Bit 23:16   reg_sat_gain                define the sat gain when sat adjustment
+//                                          0x00-0xff
+//  Bit 15      reg_hue_en                  enable hue adjustment in current region
+//  Bit 11      reg_hue_clockwise           hue adjustment clockwise or anti-clockwise
+//                                          1'b1: clockwise 1'b0: anti-clockwise
+//  Bit 10:9    reg_hue_central_en          when hue adjustment, parabola curve or non-symmetry curve
+//                                          1'b1: parabola curve    1'b0: non-symmetry curve
+//  Bit 8       reg_hue_shape               when non-symmetry curve, define which side change more
+//                                          1'b1: right side change more    1'b0: left side change more
+//  Bit 7:0     reg_hue_gain                define the hue gain when hue adjustment
+//                                          0x00-0x80, note: should be no bigger than 0x80
+
+    #define CHROMA_GAIN_REG00       0x00
+
+
+//  HUE_HUE_RANGE_REG_XX(00-07)
+//  hue range select
+//  Bit 31:24   no use now
+//  Bit 23:16   reg_hue_shift_range         define the angle of target region
+//                                          0x00-0xff,(0x100 means 120 degree though it can not be set)
+//                                          must be greater or equal than 8'd8
+//  Bit 15      reg_symmetry_en             this is used for create one symmetry region
+//                                          the symmetry region hue_shift_start = reg_hue_hue_shift_start + reg_hue_shift_range<<5
+//                                          the symmetry region hue_shift_range = reg_hue_shift_range
+//                                          in symmetry region, all the sat and hue setting will be same with original region,
+//                                          except reg_hue_shape, reg_sat_shape, reg_hue_clockwise will be reversed
+//  Bit 14:0    reg_hue_hue_shift_start     define the start angle of target region
+//                                          0x6000 means 360 degree
+//                                          only region 0 and 1 can exceed 360 degrees.
+
+    #define HUE_HUE_RANGE_REG00     0x01
+
+
+//  HUE_RANGE_INV_REG_XX
+//  Calculation should be follow
+//  HUE_RANGE_INV_REG0X[15:0] = ((1<<20)/HUE_HUE_RANGE_REG0X[23:16]+1)>>1
+//  HUE_RANGE_INV_REG_XX is to used to save divider
+
+    #define HUE_RANGE_INV_REG00     0x02
+
+
+
+//  for belowing each low, high, low_slope, high_slope group:
+//            a_____________b
+//            /             \               a = low  + 2^low_slope
+//           /               \              b = high - 2^high_slope
+//          /                 \             low_slope <= 7; high_slope <= 7
+//         /                   \            b >= a
+//  ______/_____________________\________
+//       low                    high
+//
+//
+//  HUE_LUM_RANGE_REG_XX(00-07)
+//  luma range selection for hue adjustment
+//  Bit 31:24   reg_sat_lum_low             define the low level of luma value for sat adjustment
+//                                          0x00-0xff
+//  Bit 23:20   reg_hue_lum_high_slope      define the slope area below high level of luma value for hue adjustment
+//                                          0x00-0x07
+//  Bit 19:16   reg_hue_lum_low_slope       define the slope area above low  level of luma value for hue adjustment
+//                                          0x00-0x07
+//  Bit 15:8    reg_hue_lum_high            define the high level of luma value for hue adjustment
+//                                          0x00-0xff
+//  Bit 7:0     reg_hue_lum_low             define the low  level of luma value for hue adjustment
+//                                          0x00-0xff
+
+    #define HUE_LUM_RANGE_REG00     0x03
+
+//  HUE_SAT_RANGE_REG_XX(00-07)
+//  sat range selection for hue adjustment
+//  Bit 31:24   reg_sat_lum_high            define the high level of luma value for sat adjustment
+//                                          0x00-0xff
+//  Bit 23:20   reg_hue_sat_high_slope      define the slope area below high level of sat value for hue adjustment
+//                                          0x00-0x07
+//  Bit 19:16   reg_hue_sat_low_slope       define the slope area above low  level of sat value for hue adjustment
+//                                          0x00-0x07
+//  Bit 15:8    reg_hue_sat_high            define the high level of sat value for hue adjustment
+//                                          0x00-0xff
+//  Bit 7:0     reg_hue_sat_low             define the low  level of sat value for hue adjustment
+//                                          0x00-0xff
+
+    #define HUE_SAT_RANGE_REG00     0x04
+
+//  SAT_SAT_RANGE_REG_XX(00-07)
+//  sat range selection for hue adjustment
+//  Bit 31:28   reg_sat_lum_high_slope      define the slope area below high level of luma value for sat adjustment
+//                                          0x00-0x07
+//  Bit 27:24   reg_sat_lum_low_slope       define the slope area above low  level of luma value for sat adjustment
+//                                          0x00-0x07
+//  Bit 23:20   reg_sat_sat_high_slope      define the slope area below high level of sat value for sat adjustment
+//                                          0x00-0x07
+//  Bit 19:16   reg_sat_sat_low_slope       define the slope area above low  level of sat value for sat adjustment
+//                                          0x00-0x07
+//  Bit 15:8    reg_sat_sat_high            define the high level of sat value for sat adjustment
+//                                          0x00-0xff
+//  Bit 7:0     reg_sat_sat_low             define the low  level of sat value for sat adjustment
+//                                          0x00-0xff
+
+    #define SAT_SAT_RANGE_REG00     0x05
+
+
+    #define CHROMA_GAIN_REG01       0x06
+    #define HUE_HUE_RANGE_REG01     0x07
+    #define HUE_RANGE_INV_REG01     0x08
+    #define HUE_LUM_RANGE_REG01     0x09
+    #define HUE_SAT_RANGE_REG01     0x0a
+    #define SAT_SAT_RANGE_REG01     0x0b
+
+    #define CHROMA_GAIN_REG02       0x0c
+    #define HUE_HUE_RANGE_REG02     0x0d
+    #define HUE_RANGE_INV_REG02     0x0e
+    #define HUE_LUM_RANGE_REG02     0x0f
+    #define HUE_SAT_RANGE_REG02     0x10
+    #define SAT_SAT_RANGE_REG02     0x11
+
+
+    #define CHROMA_GAIN_REG03       0x12
+    #define HUE_HUE_RANGE_REG03     0x13
+    #define HUE_RANGE_INV_REG03     0x14
+    #define HUE_LUM_RANGE_REG03     0x15
+    #define HUE_SAT_RANGE_REG03     0x16
+    #define SAT_SAT_RANGE_REG03     0x17
+
+    #define CHROMA_GAIN_REG04       0x18
+    #define HUE_HUE_RANGE_REG04     0x19
+    #define HUE_RANGE_INV_REG04     0x1a
+    #define HUE_LUM_RANGE_REG04     0x1b
+    #define HUE_SAT_RANGE_REG04     0x1c
+    #define SAT_SAT_RANGE_REG04     0x1d
+
+    #define CHROMA_GAIN_REG05       0x1e
+    #define HUE_HUE_RANGE_REG05     0x1f
+    #define HUE_RANGE_INV_REG05     0x20
+    #define HUE_LUM_RANGE_REG05     0x21
+    #define HUE_SAT_RANGE_REG05     0x22
+    #define SAT_SAT_RANGE_REG05     0x23
+
+    #define CHROMA_GAIN_REG06       0x24
+    #define HUE_HUE_RANGE_REG06     0x25
+    #define HUE_RANGE_INV_REG06     0x26
+    #define HUE_LUM_RANGE_REG06     0x27
+    #define HUE_SAT_RANGE_REG06     0x28
+    #define SAT_SAT_RANGE_REG06     0x29
+
+    #define CHROMA_GAIN_REG07       0x2a
+    #define HUE_HUE_RANGE_REG07     0x2b
+    #define HUE_RANGE_INV_REG07     0x2c
+    #define HUE_LUM_RANGE_REG07     0x2d
+    #define HUE_SAT_RANGE_REG07     0x2e
+    #define SAT_SAT_RANGE_REG07     0x2f
+
+//  REG_CHROMA_CONTROL
+//  Bit 31      reg_chroma_en               enable color manage function
+//                                          1'b1: enable    1'b0: bypass
+//  Bit 6       sat_sel                     uv_max or u^2+v^2 selected as sat for reference
+//                                          1'b1: uv_max(default)   1'b0: u^2+v^2
+//  Bit 5       uv_adj_en                   final uv_adjust enable
+//                                          1'b1: enable    1'b0: bypass
+//  Bit 2       hue_en                      rgb to hue enable
+//                                          1'b1: enable(default)   1'b0: bypass
+//  Bit 1:0     csc_sel                     define input YUV with different color type
+//                                          2'b00: 601(16-235)  2'b01: 709(16-235)
+//                                          2'b10: 601(0-255)   2'b11: 709(0-255)
+    #define REG_CHROMA_CONTROL      0x30   // default 32h'80000024
+    #define REG_DEMO_CENTER_BAR     0x31   // default 32h'0
+    #define REG_DEMO_HLIGHT_MODE    0x32   // default 32h'0
+    #define REG_DEMO_OWR_DATA       0x33   // default 32h'0
+
+
+////===========================================////
+//// CM2 ADDR
+////===========================================////
+
+    #define SAT_BYYB_NODE_REG0          0x200   // default 32'h0
+//Bit 31:24, sat_byyb_node3    the 4th node
+//Bit 23:16, sat_byyb_node2    the 3th node
+//Bit 15: 8, sat_byyb_node1    signed, the 2th node about saturation
+//Bit  7: 0, sat_byyb_node0    signed, the 1th node about saturation
+//gain offset along y coordinate,the gain normalized to 128 as "1"
+
+	#define SAT_BYYB_NODE_REG1          0x201   // default 32'h0
+//Bit 31:24, sat_byyb_node7     the 8th node
+//Bit 23:16, sat_byyb_node6     the 7th node
+//Bit 15: 8, sat_byyb_node5     signed, the 6th node about saturation
+//Bit  7: 0, sat_byyb_node4     signed, the 5th node about saturation
+//gain offset along y coordinate,the gain normalized to 128 as "1"
+
+    #define SAT_BYYB_NODE_REG2          0x202   // default 32'h0
+//Bit 31: 8, reserved
+//Bit  7: 0, sat_byyb_node4     signed, the 5th node about saturation
+
+
+    #define SAT_SRC_NODE_REG            0x203   // default 32'h0
+//Bit 31:28, reserved
+//Bit 27:16, sat_src_node1
+//Bit 15:12, reserved
+//Bit 11: 0, sat_src_node0     usigned, threshold of input saturation for  first and second piece
+
+    #define CM_ENH_SFT_MODE_REG         0x204   // default 32'h0
+//Bit 31: 9, reserved
+//Bit  8: 6, hue_lsft_mode        hue offset adjustments scale
+//Bit  5: 4, luma_lsft_mode       luma offset adjustments scale for reg_cm2_adj_luma_via_hue
+//Bit  3: 2, sat_byy_rsft_mode    saturation gain adjustments scale for reg_cm2_adj_sat_via_y
+//Bit  1: 0, sat_byhs_rsft_mode   saturation gain adjustments scale for reg_cm2_adj_sat_via_hs[:][:] 0:no scale up/down 1:dnscale by 2(-128,127)/2
+
+    #define FRM_SIZE_REG                0x205   // default 32'h0
+//Bit 31:29, reserved
+//Bit 28:16, reg_frm_height       the frame height size
+//Bit 15:13, reserved
+//Bit 12: 0, reg_frm_width        the frame width size
+
+    #define FITLER_CFG_REG              0x206   // default 32'h0
+//Bit 31: 5, reserved
+//Bit  4: 4, inteleav_mod         horizontal interleave filter(zero-padding) for 3D considerations 0:using non-zero padding lpf 1:using zero-padding lpf
+//Bit  3: 2, lpf_slt_uv           apply cm on lp portion or original video pixels options
+//Bit  1: 0, lpf_slt_y            apply cm on lp portion or original video pixels options
+
+    #define CM_GLOBAL_GAIN_REG          0x207   // default 32'h0
+//Bit 31:28, reserved
+//Bit 27:16, cm2_global_sat     global saturation gain for general color adjustments(0~4095 <=> 0~8),512 normalized to "1"
+//Bit 15:12, reserved
+//Bit 11: 0, cm2_global_hue     global hue offsets for general color adjustments(0~4095 <=> 0~360 degree)
+
+    #define CM_ENH_CTL_REG              0x208   // default 32'h0
+//Bit  31:7, reserved
+//Bit     6, hue_adj_en        cm2 hue adjustments
+//Bit     5, sat_adj_en        cm2 saturation adjustments
+//Bit     4, luma_adj_en       enable siganl for cm2 luma adjustments
+//Bit     3, reserved
+//Bit     2, cm2_filt_en       apply cm on lp portion enable
+//Bit     1, cm2_en            cm2 enable siganl
+//Bit     0, cm1_en
+
+    #define ROI_X_SCOPE_REG             0x209   // default 32'h0
+//Bit 31:29, reserved
+//Bit 28:16, roi_x_end      ending col index of the region of interest
+//Bit 15:13, reserved
+//Bit 12: 0, roi_x_beg      start col index of the region of interest
+
+   #define ROI_Y_SCOPE_REG             0x20a   // default 32'h0
+//Bit 31:29, reserved
+//Bit 28:16, roi_y_end      ending row index of the region of interest
+//Bit 15:13, reserved
+//Bit 12: 0, roi_y_beg      start row index of the region of interest
+
+    #define POI_XY_DIR_REG              0x20b   // default 32'h0
+//Bit 31:29, reserved
+//Bit 28:16, poi_y_dir      ending row index of the region of interest
+//Bit 15:13, reserved
+//Bit 12: 0, poi_x_dir      start row index of the region of interest
+
+    #define COI_Y_SCOPE_REG             0x20c   // default 32'h0
+//Bit 31:16, reserved
+//Bit 15: 8, coi_y_end
+//Bit  7: 0, coi_y_beg
+
+    #define COI_H_SCOPE_REG             0x20d   // default 32'h0
+//Bit 31:28, reserved
+//Bit 27:16, coi_h_end
+//Bit 15:12, reserved
+//Bit 11: 0, coi_h_beg        lower bound of hue value for color of interest ,12 bits precision
+
+    #define COI_S_SCOPE_REG             0x20e   // default 32'h0
+//Bit 31:28, reserved
+//Bit 27:16, coi_s_end
+//Bit 15:12, reserved
+//Bit 11: 0, coi_s_beg        lower bound of sat value for color of interest ,12 bits precision
+    #define IFO_MODE_REG                0x20f   // default 32'h0
+//Bit 31:8, reserved
+//Bit  7:6, ifo_mode3
+//Bit  5:4, ifo_mode2
+//Bit  3:2, ifo_mode1
+//Bit  1:0, ifo_mode0
+    #define POI_RPL_MODE_REG            0x210   // default 32'h0
+//Bit 31:4, reserved
+//Bit  3:0, poi_rpl_mode          enhance mode control of pixels inside and outside region of interest bit[3:2]control roi
+    #define DEMO_OWR_YHS_REG            0x211   // default 32'h0
+//Bit 31: 0, demo_owr_yhs
+
+    #define DEMO_POI_Y_REG              0x212   // default 32'h0
+//Bit 31: 8, reserved
+//Bit  7: 0, luma_data_poi_r       only get locked higher 8bits
+    #define DEMO_POI_H_REG              0x213   // default 32'h0
+//Bit 31: 12, reserved
+//Bit 11: 0, hue_data_poi_r        only get locked higher 12bits
+    #define DEMO_POI_S_REG              0x214   // default 32'h0
+//Bit 31: 12, reserved
+//Bit 11: 0, sat_data_poi_r         only get locked higher 12bits
+    //#define LUMA_BYH_LIMT_REG           0x215   // default 32'h0
+    #define LUMA_ADJ_LIMT_REG           0x215   // default 32'h0
+//Bit 31:24, reserved
+//Bit 23:16, luma_lmt_satslp         slope to do the luma adjustment degrade
+//Bit 15:12, reserved
+//Bit 11:0, luma_lmt_satth           threshold to saturation
+    #define SAT_ADJ_LIMT_REG            0x216   // default 32'h0
+//Bit 31:24, reserved
+//Bit 23:16, sat_lmt_satslp        slope to do the adjustment degrade
+//Bit 15:12, reserved
+//Bit 11:0, sat_lmt_satth          threshold to saturation
+    #define HUE_ADJ_LIMT_REG            0x217   // default 32'h0
+//Bit 31: 24, reserved
+//Bit 23: 16, hue_lmt_satslp        slope to do the adjustment degrade
+//Bit 15: 12, reserved
+//Bit 11: 0,  hue_lmt_satth          threshold to saturation
+    #define UVHS_OFST_REG               0x218   // default 32'h0
+//Bit 31: 24, hs2uv_v_ofst
+//Bit 23: 16, hs2uv_u_ofst
+//Bit 15: 8,  uv2hs_v_ofst
+//Bit  7: 0,  uv2hs_u_ofst
+    #define HUE_CFG_PARA_REG            0x219   // default 32'h0
+//Bit 31: 17, reserved
+//Bit     16, hue_protect_en
+//Bit 15: 13, cm2_hue_byhs_mode
+//Bit     12, cm2_hue_div_mode
+//Bit 11: 0, cm2_before_hue_ofst
+    #define DEMO_SPLT_CFG_REG           0x21a   // default 32'h0
+//Bit 31: 22, reserved
+//Bit 21: 20, demo_split_mode
+//Bit 19: 16, demo_split_width        slope to do the adjustment degrade
+//Bit 15: 13, reserved
+//Bit 12: 0,  demo_split_post           threshold to saturation
+    #define DEMO_SPLT_YHS_REG           0x21b   // default 32'h0
+//Bit 31: 0,  demo_splt_yhs             threshold to saturation
+
+    #define XVYCC_YSCP_REG              0x21c   // default 32'h0
+//Bit 31: 28, reserved
+//Bit 27: 16, xvycc_y_max
+//Bit 15: 12, reserved
+//Bit 11: 0, xvycc_y_min
+    #define XVYCC_USCP_REG              0x21d   // default 32'h0
+//Bit 31: 28, reserved
+//Bit 27: 16, xvycc_u_max
+//Bit 15: 12, reserved
+//Bit 11: 0, xvycc_u_min
+    #define XVYCC_VSCP_REG              0x21e   // default 32'h0
+//Bit 31: 28, reserved
+//Bit 27: 16, xvycc_v_max
+//Bit 15: 12, reserved
+//Bit 11: 0, xvycc_v_min
+
+////========= NODE 0 COEFFICIENT ==============////
+
+    #define REG_CM2_ENH_COEFF0_H00      0x100   // default 32'H0
+//Bit 31: 24, reg_cm2_adj_sat_via_hs_2
+//Bit 23: 16, reg_cm2_adj_sat_via_hs_1
+//Bit 15: 8,  reg_cm2_adj_sat_via_hs_0
+//Bit  7: 0, reg_cm2_adj_luma_via_h
+                                                  // [ 7: 0] : luma_byh_hx   / [15: 8] : sat_byhs_s0hx
+                                                  // [23:16] : sat_byhs_s0hx / [31:24] : sat_byhs_s2hx
+    #define REG_CM2_ENH_COEFF1_H00      0x101   // default 32'H0
+                                                  // [ 7: 0] : hue_byh_hx   / [15: 8] : hue_byy_y0hx
+                                                  // [23:16] : hue_byy_y1hx / [31:24] : hue_byy_y2hx
+    #define REG_CM2_ENH_COEFF2_H00      0x102   // default 32'H0
+                                                  // [ 7: 0] : hue_byy_y3hx / [15: 8] : hue_byy_y4hx
+                                                  // [23:16] : hue_bys_s0hx / [31:24] : hue_bys_s1hx
+    #define REG_CM2_ENH_COEFF3_H00      0x103   // default 32'H0
+                                                  // [ 7: 0] : hue_bys_s2hx / [15: 8] : hue_bys_s3hx
+                                                  // [23:16] : hue_bys_s4hx / [31:24] : hue_byya_y0hx
+    #define REG_CM2_ENH_COEFF4_H00      0x104   // default 32'H0
+                                                  // [ 7: 0] : hue_byya_y1hx / [15: 8] : hue_byya_y2hx
+                                                  // [23:16] : hue_byya_y3hx / [31:24] : hue_byya_y4hx
+
+////========= NODE 1 COEFFICIENT ==============////
+
+    #define REG_CM2_ENH_COEFF0_H01      0x108   // default 32'H0
+                                                  // [ 7: 0] : luma_byh_hx   / [15: 8] : sat_byhs_s0hx
+                                                  // [23:16] : sat_byhs_s0hx / [31:24] : sat_byhs_s2hx
+    #define REG_CM2_ENH_COEFF1_H01      0x109   // default 32'H0
+                                                  // [ 7: 0] : hue_byh_hx   / [15: 8] : hue_byy_y0hx
+                                                  // [23:16] : hue_byy_y1hx / [31:24] : hue_byy_y2hx
+    #define REG_CM2_ENH_COEFF2_H01      0x10a   // default 32'H0
+                                                  // [ 7: 0] : hue_byy_y3hx / [15: 8] : hue_byy_y4hx
+                                                  // [23:16] : hue_bys_s0hx / [31:24] : hue_bys_s1hx
+    #define REG_CM2_ENH_COEFF3_H01      0x10b   // default 32'H0
+                                                  // [ 7: 0] : hue_bys_s2hx / [15: 8] : hue_bys_s3hx
+                                                  // [23:16] : hue_bys_s4hx / [31:24] : hue_byya_y0hx
+    #define REG_CM2_ENH_COEFF4_H01      0x10c   // default 32'H0
+                                                  // [ 7: 0] : hue_byya_y1hx / [15: 8] : hue_byya_y2hx
+                                                  // [23:16] : hue_byya_y3hx / [31:24] : hue_byya_y4hx
+
+////========= NODE 2 COEFFICIENT ==============////
+
+    #define REG_CM2_ENH_COEFF0_H02      0x110   // default 32'H0
+                                                  // [ 7: 0] : luma_byh_hx   / [15: 8] : sat_byhs_s0hx
+                                                  // [23:16] : sat_byhs_s0hx / [31:24] : sat_byhs_s2hx
+    #define REG_CM2_ENH_COEFF1_H02      0x111   // default 32'H0
+                                                  // [ 7: 0] : hue_byh_hx   / [15: 8] : hue_byy_y0hx
+                                                  // [23:16] : hue_byy_y1hx / [31:24] : hue_byy_y2hx
+    #define REG_CM2_ENH_COEFF2_H02      0x112   // default 32'H0
+                                                  // [ 7: 0] : hue_byy_y3hx / [15: 8] : hue_byy_y4hx
+                                                  // [23:16] : hue_bys_s0hx / [31:24] : hue_bys_s1hx
+    #define REG_CM2_ENH_COEFF3_H02      0x113   // default 32'H0
+                                                  // [ 7: 0] : hue_bys_s2hx / [15: 8] : hue_bys_s3hx
+                                                  // [23:16] : hue_bys_s4hx / [31:24] : hue_byya_y0hx
+    #define REG_CM2_ENH_COEFF4_H02      0x114   // default 32'H0
+                                                  // [ 7: 0] : hue_byya_y1hx / [15: 8] : hue_byya_y2hx
+                                                  // [23:16] : hue_byya_y3hx / [31:24] : hue_byya_y4hx
+
+////========= NODE 3 COEFFICIENT ==============////
+
+    #define REG_CM2_ENH_COEFF0_H03      0x118   // default 32'H0
+                                                  // [ 7: 0] : luma_byh_hx   / [15: 8] : sat_byhs_s0hx
+                                                  // [23:16] : sat_byhs_s0hx / [31:24] : sat_byhs_s2hx
+    #define REG_CM2_ENH_COEFF1_H03      0x119   // default 32'H0
+                                                  // [ 7: 0] : hue_byh_hx   / [15: 8] : hue_byy_y0hx
+                                                  // [23:16] : hue_byy_y1hx / [31:24] : hue_byy_y2hx
+    #define REG_CM2_ENH_COEFF2_H03      0x11a   // default 32'H0
+                                                  // [ 7: 0] : hue_byy_y3hx / [15: 8] : hue_byy_y4hx
+                                                  // [23:16] : hue_bys_s0hx / [31:24] : hue_bys_s1hx
+    #define REG_CM2_ENH_COEFF3_H03      0x11b   // default 32'H0
+                                                  // [ 7: 0] : hue_bys_s2hx / [15: 8] : hue_bys_s3hx
+                                                  // [23:16] : hue_bys_s4hx / [31:24] : hue_byya_y0hx
+    #define REG_CM2_ENH_COEFF4_H03      0x11c   // default 32'H0
+                                                  // [ 7: 0] : hue_byya_y1hx / [15: 8] : hue_byya_y2hx
+                                                  // [23:16] : hue_byya_y3hx / [31:24] : hue_byya_y4hx
+
+////========= NODE 4 COEFFICIENT ==============////
+
+    #define REG_CM2_ENH_COEFF0_H04      0x120   // default 32'H0
+                                                  // [ 7: 0] : luma_byh_hx   / [15: 8] : sat_byhs_s0hx
+                                                  // [23:16] : sat_byhs_s0hx / [31:24] : sat_byhs_s2hx
+    #define REG_CM2_ENH_COEFF1_H04      0x121   // default 32'H0
+                                                  // [ 7: 0] : hue_byh_hx   / [15: 8] : hue_byy_y0hx
+                                                  // [23:16] : hue_byy_y1hx / [31:24] : hue_byy_y2hx
+    #define REG_CM2_ENH_COEFF2_H04      0x122   // default 32'H0
+                                                  // [ 7: 0] : hue_byy_y3hx / [15: 8] : hue_byy_y4hx
+                                                  // [23:16] : hue_bys_s0hx / [31:24] : hue_bys_s1hx
+    #define REG_CM2_ENH_COEFF3_H04      0x123   // default 32'H0
+                                                  // [ 7: 0] : hue_bys_s2hx / [15: 8] : hue_bys_s3hx
+                                                  // [23:16] : hue_bys_s4hx / [31:24] : hue_byya_y0hx
+    #define REG_CM2_ENH_COEFF4_H04      0x124   // default 32'H0
+                                                  // [ 7: 0] : hue_byya_y1hx / [15: 8] : hue_byya_y2hx
+                                                  // [23:16] : hue_byya_y3hx / [31:24] : hue_byya_y4hx
+
+////========= NODE 5 COEFFICIENT ==============////
+
+    #define REG_CM2_ENH_COEFF0_H05      0x128   // default 32'H0
+                                                  // [ 7: 0] : luma_byh_hx   / [15: 8] : sat_byhs_s0hx
+                                                  // [23:16] : sat_byhs_s0hx / [31:24] : sat_byhs_s2hx
+    #define REG_CM2_ENH_COEFF1_H05      0x129   // default 32'H0
+                                                  // [ 7: 0] : hue_byh_hx   / [15: 8] : hue_byy_y0hx
+                                                  // [23:16] : hue_byy_y1hx / [31:24] : hue_byy_y2hx
+    #define REG_CM2_ENH_COEFF2_H05      0x12a   // default 32'H0
+                                                  // [ 7: 0] : hue_byy_y3hx / [15: 8] : hue_byy_y4hx
+                                                  // [23:16] : hue_bys_s0hx / [31:24] : hue_bys_s1hx
+    #define REG_CM2_ENH_COEFF3_H05      0x12b   // default 32'H0
+                                                  // [ 7: 0] : hue_bys_s2hx / [15: 8] : hue_bys_s3hx
+                                                  // [23:16] : hue_bys_s4hx / [31:24] : hue_byya_y0hx
+    #define REG_CM2_ENH_COEFF4_H05      0x12c   // default 32'H0
+                                                  // [ 7: 0] : hue_byya_y1hx / [15: 8] : hue_byya_y2hx
+                                                  // [23:16] : hue_byya_y3hx / [31:24] : hue_byya_y4hx
+
+////========= NODE 6 COEFFICIENT ==============////
+
+    #define REG_CM2_ENH_COEFF0_H06      0x130   // default 32'H0
+                                                  // [ 7: 0] : luma_byh_hx   / [15: 8] : sat_byhs_s0hx
+                                                  // [23:16] : sat_byhs_s0hx / [31:24] : sat_byhs_s2hx
+    #define REG_CM2_ENH_COEFF1_H06      0x131   // default 32'H0
+                                                  // [ 7: 0] : hue_byh_hx   / [15: 8] : hue_byy_y0hx
+                                                  // [23:16] : hue_byy_y1hx / [31:24] : hue_byy_y2hx
+    #define REG_CM2_ENH_COEFF2_H06      0x132   // default 32'H0
+                                                  // [ 7: 0] : hue_byy_y3hx / [15: 8] : hue_byy_y4hx
+                                                  // [23:16] : hue_bys_s0hx / [31:24] : hue_bys_s1hx
+    #define REG_CM2_ENH_COEFF3_H06      0x133   // default 32'H0
+                                                  // [ 7: 0] : hue_bys_s2hx / [15: 8] : hue_bys_s3hx
+                                                  // [23:16] : hue_bys_s4hx / [31:24] : hue_byya_y0hx
+    #define REG_CM2_ENH_COEFF4_H06      0x134   // default 32'H0
+                                                  // [ 7: 0] : hue_byya_y1hx / [15: 8] : hue_byya_y2hx
+                                                  // [23:16] : hue_byya_y3hx / [31:24] : hue_byya_y4hx
+
+////========= NODE 7 COEFFICIENT ==============////
+
+    #define REG_CM2_ENH_COEFF0_H07      0x138   // default 32'H0
+                                                  // [ 7: 0] : luma_byh_hx   / [15: 8] : sat_byhs_s0hx
+                                                  // [23:16] : sat_byhs_s0hx / [31:24] : sat_byhs_s2hx
+    #define REG_CM2_ENH_COEFF1_H07      0x139   // default 32'H0
+                                                  // [ 7: 0] : hue_byh_hx   / [15: 8] : hue_byy_y0hx
+                                                  // [23:16] : hue_byy_y1hx / [31:24] : hue_byy_y2hx
+    #define REG_CM2_ENH_COEFF2_H07      0x13a   // default 32'H0
+                                                  // [ 7: 0] : hue_byy_y3hx / [15: 8] : hue_byy_y4hx
+                                                  // [23:16] : hue_bys_s0hx / [31:24] : hue_bys_s1hx
+    #define REG_CM2_ENH_COEFF3_H07      0x13b   // default 32'H0
+                                                  // [ 7: 0] : hue_bys_s2hx / [15: 8] : hue_bys_s3hx
+                                                  // [23:16] : hue_bys_s4hx / [31:24] : hue_byya_y0hx
+    #define REG_CM2_ENH_COEFF4_H07      0x13c   // default 32'H0
+                                                  // [ 7: 0] : hue_byya_y1hx / [15: 8] : hue_byya_y2hx
+                                                  // [23:16] : hue_byya_y3hx / [31:24] : hue_byya_y4hx
+
+////========= NODE 8 COEFFICIENT ==============////
+
+    #define REG_CM2_ENH_COEFF0_H08      0x140   // default 32'H0
+                                                  // [ 7: 0] : luma_byh_hx   / [15: 8] : sat_byhs_s0hx
+                                                  // [23:16] : sat_byhs_s0hx / [31:24] : sat_byhs_s2hx
+    #define REG_CM2_ENH_COEFF1_H08      0x141   // default 32'H0
+                                                  // [ 7: 0] : hue_byh_hx   / [15: 8] : hue_byy_y0hx
+                                                  // [23:16] : hue_byy_y1hx / [31:24] : hue_byy_y2hx
+    #define REG_CM2_ENH_COEFF2_H08      0x142   // default 32'H0
+                                                  // [ 7: 0] : hue_byy_y3hx / [15: 8] : hue_byy_y4hx
+                                                  // [23:16] : hue_bys_s0hx / [31:24] : hue_bys_s1hx
+    #define REG_CM2_ENH_COEFF3_H08      0x143   // default 32'H0
+                                                  // [ 7: 0] : hue_bys_s2hx / [15: 8] : hue_bys_s3hx
+                                                  // [23:16] : hue_bys_s4hx / [31:24] : hue_byya_y0hx
+    #define REG_CM2_ENH_COEFF4_H08      0x144   // default 32'H0
+                                                  // [ 7: 0] : hue_byya_y1hx / [15: 8] : hue_byya_y2hx
+                                                  // [23:16] : hue_byya_y3hx / [31:24] : hue_byya_y4hx
+
+////========= NODE 9 COEFFICIENT ==============////
+
+    #define REG_CM2_ENH_COEFF0_H09      0x148   // default 32'H0
+                                                  // [ 7: 0] : luma_byh_hx   / [15: 8] : sat_byhs_s0hx
+                                                  // [23:16] : sat_byhs_s0hx / [31:24] : sat_byhs_s2hx
+    #define REG_CM2_ENH_COEFF1_H09      0x149   // default 32'H0
+                                                  // [ 7: 0] : hue_byh_hx   / [15: 8] : hue_byy_y0hx
+                                                  // [23:16] : hue_byy_y1hx / [31:24] : hue_byy_y2hx
+    #define REG_CM2_ENH_COEFF2_H09      0x14a   // default 32'H0
+                                                  // [ 7: 0] : hue_byy_y3hx / [15: 8] : hue_byy_y4hx
+                                                  // [23:16] : hue_bys_s0hx / [31:24] : hue_bys_s1hx
+    #define REG_CM2_ENH_COEFF3_H09      0x14b   // default 32'H0
+                                                  // [ 7: 0] : hue_bys_s2hx / [15: 8] : hue_bys_s3hx
+                                                  // [23:16] : hue_bys_s4hx / [31:24] : hue_byya_y0hx
+    #define REG_CM2_ENH_COEFF4_H09      0x14c   // default 32'H0
+                                                  // [ 7: 0] : hue_byya_y1hx / [15: 8] : hue_byya_y2hx
+                                                  // [23:16] : hue_byya_y3hx / [31:24] : hue_byya_y4hx
+
+////========= NODE 10 COEFFICIENT ==============////
+
+    #define REG_CM2_ENH_COEFF0_H10      0x150   // default 32'H0
+                                                  // [ 7: 0] : luma_byh_hx   / [15: 8] : sat_byhs_s0hx
+                                                  // [23:16] : sat_byhs_s0hx / [31:24] : sat_byhs_s2hx
+    #define REG_CM2_ENH_COEFF1_H10      0x151   // default 32'H0
+                                                  // [ 7: 0] : hue_byh_hx   / [15: 8] : hue_byy_y0hx
+                                                  // [23:16] : hue_byy_y1hx / [31:24] : hue_byy_y2hx
+    #define REG_CM2_ENH_COEFF2_H10      0x152   // default 32'H0
+                                                  // [ 7: 0] : hue_byy_y3hx / [15: 8] : hue_byy_y4hx
+                                                  // [23:16] : hue_bys_s0hx / [31:24] : hue_bys_s1hx
+    #define REG_CM2_ENH_COEFF3_H10      0x153   // default 32'H0
+                                                  // [ 7: 0] : hue_bys_s2hx / [15: 8] : hue_bys_s3hx
+                                                  // [23:16] : hue_bys_s4hx / [31:24] : hue_byya_y0hx
+    #define REG_CM2_ENH_COEFF4_H10      0x154   // default 32'H0
+                                                  // [ 7: 0] : hue_byya_y1hx / [15: 8] : hue_byya_y2hx
+                                                  // [23:16] : hue_byya_y3hx / [31:24] : hue_byya_y4hx
+
+////========= NODE 11 COEFFICIENT ==============////
+
+    #define REG_CM2_ENH_COEFF0_H11      0x158   // default 32'H0
+                                                  // [ 7: 0] : luma_byh_hx   / [15: 8] : sat_byhs_s0hx
+                                                  // [23:16] : sat_byhs_s0hx / [31:24] : sat_byhs_s2hx
+    #define REG_CM2_ENH_COEFF1_H11      0x159   // default 32'H0
+                                                  // [ 7: 0] : hue_byh_hx   / [15: 8] : hue_byy_y0hx
+                                                  // [23:16] : hue_byy_y1hx / [31:24] : hue_byy_y2hx
+    #define REG_CM2_ENH_COEFF2_H11      0x15a   // default 32'H0
+                                                  // [ 7: 0] : hue_byy_y3hx / [15: 8] : hue_byy_y4hx
+                                                  // [23:16] : hue_bys_s0hx / [31:24] : hue_bys_s1hx
+    #define REG_CM2_ENH_COEFF3_H11      0x15b   // default 32'H0
+                                                  // [ 7: 0] : hue_bys_s2hx / [15: 8] : hue_bys_s3hx
+                                                  // [23:16] : hue_bys_s4hx / [31:24] : hue_byya_y0hx
+    #define REG_CM2_ENH_COEFF4_H11      0x15c   // default 32'H0
+                                                  // [ 7: 0] : hue_byya_y1hx / [15: 8] : hue_byya_y2hx
+                                                  // [23:16] : hue_byya_y3hx / [31:24] : hue_byya_y4hx
+
+////========= NODE 12 COEFFICIENT ==============////
+
+    #define REG_CM2_ENH_COEFF0_H12      0x160   // default 32'H0
+                                                  // [ 7: 0] : luma_byh_hx   / [15: 8] : sat_byhs_s0hx
+                                                  // [23:16] : sat_byhs_s0hx / [31:24] : sat_byhs_s2hx
+    #define REG_CM2_ENH_COEFF1_H12      0x161   // default 32'H0
+                                                  // [ 7: 0] : hue_byh_hx   / [15: 8] : hue_byy_y0hx
+                                                  // [23:16] : hue_byy_y1hx / [31:24] : hue_byy_y2hx
+    #define REG_CM2_ENH_COEFF2_H12      0x162   // default 32'H0
+                                                  // [ 7: 0] : hue_byy_y3hx / [15: 8] : hue_byy_y4hx
+                                                  // [23:16] : hue_bys_s0hx / [31:24] : hue_bys_s1hx
+    #define REG_CM2_ENH_COEFF3_H12      0x163   // default 32'H0
+                                                  // [ 7: 0] : hue_bys_s2hx / [15: 8] : hue_bys_s3hx
+                                                  // [23:16] : hue_bys_s4hx / [31:24] : hue_byya_y0hx
+    #define REG_CM2_ENH_COEFF4_H12      0x164   // default 32'H0
+                                                  // [ 7: 0] : hue_byya_y1hx / [15: 8] : hue_byya_y2hx
+                                                  // [23:16] : hue_byya_y3hx / [31:24] : hue_byya_y4hx
+
+////========= NODE 13 COEFFICIENT ==============////
+
+    #define REG_CM2_ENH_COEFF0_H13      0x168   // default 32'H0
+                                                  // [ 7: 0] : luma_byh_hx   / [15: 8] : sat_byhs_s0hx
+                                                  // [23:16] : sat_byhs_s0hx / [31:24] : sat_byhs_s2hx
+    #define REG_CM2_ENH_COEFF1_H13      0x169   // default 32'H0
+                                                  // [ 7: 0] : hue_byh_hx   / [15: 8] : hue_byy_y0hx
+                                                  // [23:16] : hue_byy_y1hx / [31:24] : hue_byy_y2hx
+    #define REG_CM2_ENH_COEFF2_H13      0x16a   // default 32'H0
+                                                  // [ 7: 0] : hue_byy_y3hx / [15: 8] : hue_byy_y4hx
+                                                  // [23:16] : hue_bys_s0hx / [31:24] : hue_bys_s1hx
+    #define REG_CM2_ENH_COEFF3_H13      0x16b   // default 32'H0
+                                                  // [ 7: 0] : hue_bys_s2hx / [15: 8] : hue_bys_s3hx
+                                                  // [23:16] : hue_bys_s4hx / [31:24] : hue_byya_y0hx
+    #define REG_CM2_ENH_COEFF4_H13      0x16c   // default 32'H0
+                                                  // [ 7: 0] : hue_byya_y1hx / [15: 8] : hue_byya_y2hx
+                                                  // [23:16] : hue_byya_y3hx / [31:24] : hue_byya_y4hx
+
+
+/* Constraints
+0)
+  there are 16 regions totally. 8 regions are for hue adjustment, 8 regions are for sat adjustment.
+  the hue range of the 16 regions can be set to overlap, but if overlap, the hue range(start and end) must be same.
+  the 8 regions for hue adjustment should not overlap. if corresponding reg_hue_en_00 - 07 == 1
+  the 8 regions for hue adjustment are defined by: (example are for region 0)
+    a) hue:
+        start: reg_hue_hue_shift_start_00[14:0]
+        end:
+        if reg_symmetry_en_00 == 0
+        reg_hue_hue_shift_start_00[14:0] + (reg_hue_hue_shift_range_00[7:0]<<5)
+        if reg_symmetry_en_00 == 1
+        reg_hue_hue_shift_start_00[14:0] + (reg_hue_hue_shift_range_00[7:0]<<6)
+    b) sat:
+        start: reg_hue_sat_low_00
+        end:   reg_hue_sat_high_00
+
+  the 8 regions for sat adjustment should not overlap. if corresponding reg_sat_en_00 - 07 == 1
+  the 8 regions for sat adjustment are defined by: (example are for region 0)
+    a) hue: same as that for hue adjustment.
+        start: reg_hue_hue_shift_start_00[14:0]
+        end:
+        if reg_symmetry_en_00 == 0
+        reg_hue_hue_shift_start_00[14:0] + (reg_hue_hue_shift_range_00[7:0]<<5)
+        if reg_symmetry_en_00 == 1
+        reg_hue_hue_shift_start_00[14:0] + (reg_hue_hue_shift_range_00[7:0]<<6)
+    b) sat:
+        start: reg_sat_sat_low_00
+        end:   reg_sat_sat_high_00
+
+1)
+  reg_hue_hue_shift_range_00[7:0]:
+  reg_hue_hue_shift_range_01[7:0]:
+  reg_hue_hue_shift_range_02[7:0]:
+  reg_hue_hue_shift_range_03[7:0]:
+  reg_hue_hue_shift_range_04[7:0]:
+  reg_hue_hue_shift_range_05[7:0]:
+  reg_hue_hue_shift_range_06[7:0]:
+  reg_hue_hue_shift_range_07[7:0]:
+  must be greater or equal than 8'd8, so as reg_hue_range_inv_regxx can be represented by 0.0000_0000_xxxx_xxxx_xxxx_xxxx
+
+2)
+  all regions of 0-7 should meet below requirement. below is just an example for region 7.
+  (reg_hue_lum_high_07 - reg_hue_lum_low_07) >=
+        (1<<reg_hue_lum_low_slope_07) + (1<<reg_hue_lum_high_slope_07)
+
+  (reg_hue_sat_high_07 - reg_hue_sat_low_07) >=
+        (1<<reg_hue_sat_low_slope_07) + (1<<reg_hue_sat_high_slope_07)
+
+  (reg_sat_lum_high_07 - reg_sat_lum_low_07) >=
+        (1<<reg_sat_lum_low_slope_07) + (1<<reg_sat_lum_high_slope_07)
+
+  (reg_sat_sat_high_07 - reg_sat_sat_low_07) >=
+        (1<<reg_sat_sat_low_slope_07) + (1<<reg_sat_sat_high_slope_07)
+
+3)
+  all of reg_hue_hue_shift_start_00[14:0] ~ 07[14:0] < 0x6000.
+  only region 0 and 1 can exceed 360 degrees. ie:
+    reg_hue_hue_shift_start_00 + (reg_hue_hue_shift_range_00<<5) can greater than 0x6000.
+    reg_hue_hue_shift_start_01 + (reg_hue_hue_shift_range_01<<5) can greater than 0x6000.
+  but below should be met:
+    reg_hue_hue_shift_start_00 + (reg_hue_hue_shift_range_00<<5) < 0x8000. if reg_symmetry_en_00 == 0
+    reg_hue_hue_shift_start_01 + (reg_hue_hue_shift_range_00<<5) < 0x8000. if reg_symmetry_en_00 == 0
+    reg_hue_hue_shift_start_00 + (reg_hue_hue_shift_range_00<<6) < 0x8000. if reg_symmetry_en_00 == 1
+    reg_hue_hue_shift_start_01 + (reg_hue_hue_shift_range_00<<6) < 0x8000. if reg_symmetry_en_00 == 1
+
+  others could not exceed 360 degrees. ie:
+    reg_hue_hue_shift_start_02(to 7) + (reg_hue_hue_shift_range_02 (to 7) <<5) < 0x6000. if reg_symmetry_en_02 (to 7) == 0.
+    reg_hue_hue_shift_start_02(to 7) + (reg_hue_hue_shift_range_02 (to 7) <<6) < 0x6000. if reg_symmetry_en_02 (to 7) == 1.
+
+4)
+  reg_hue_gain_00[7:0] <= 0x80.
+  reg_hue_gain_01[7:0] <= 0x80.
+  reg_hue_gain_02[7:0] <= 0x80.
+  reg_hue_gain_03[7:0] <= 0x80.
+  reg_hue_gain_04[7:0] <= 0x80.
+  reg_hue_gain_05[7:0] <= 0x80.
+  reg_hue_gain_06[7:0] <= 0x80.
+  reg_hue_gain_07[7:0] <= 0x80.
+
+5)
+  below registers can only have two setting: 00 and 01.
+    reg_hue_central_en_00[1:0]  .. _07[1:0]
+    reg_sat_central_en_00[1:0]  .. _07[1:0]
+
+6)
+  all reg_..._slope_00-07 should not be greater than 7, ie: maximum value is 7.
+   for example: below is for region 0:
+   reg_hue_lum_low_slope_00[3:0]  <= 7
+   reg_hue_lum_high_slope_00[3:0] <= 7
+   reg_hue_sat_low_slope_00[3:0]  <= 7
+   reg_hue_sat_high_slope_00[3:0] <= 7
+   reg_sat_lum_low_slope_00[3:0]  <= 7
+   reg_sat_lum_high_slope_00[3:0] <= 7
+   reg_sat_sat_low_slope_00[3:0]  <= 7
+   reg_sat_sat_high_slope_00[3:0] <= 7
+*/
+
+// synopsys translate_off
+// synopsys translate_on
+//
+// Closing file:  chroma_reg.h
+//
+//(hsvsharp), (blue), gainoff, mat_vd1,mat_vd2, mat_post, prebld, postbld,(hsharp),sco_ff, vadj1, vadj2, ofifo, (chroma1), clk0(free_clk) vpp_reg
+//each item 2bits, for each 2bits, if bit 2*i+1 == 1, free clk, else if bit 2*i == 1 no clk, else auto gated clock
+//bit1 is not used, because I can not turn off vpp_reg clk because I can not turn on again
+//because the register itself canot be set again without clk
+//Bit 31:0
+#define   VPP_GCLK_CTRL0                           (0x1d72)
+#define P_VPP_GCLK_CTRL0                           (volatile unsigned int *)((0x1d72  << 2) + 0xff900000)
+//(front_lti), (front_cti), Chroma2_filter, Chroma2, (Ccoring), (blackext), dnlp
+//Bit 13:0
+#define   VPP_GCLK_CTRL1                           (0x1d73)
+#define P_VPP_GCLK_CTRL1                           (volatile unsigned int *)((0x1d73  << 2) + 0xff900000)
+//prehsc_clk, line_buf, prevsc, vsc, hsc_clk, clk0(free_clk)
+//Bit 11:0
+#define   VPP_SC_GCLK_CTRL                         (0x1d74)
+#define P_VPP_SC_GCLK_CTRL                         (volatile unsigned int *)((0x1d74  << 2) + 0xff900000)
+//Bit 17:9 VD1 alpha for preblend
+//Bit 8:0 VD1 alpha for postblend
+#define   VPP_MISC1                                (0x1d76)
+#define P_VPP_MISC1                                (volatile unsigned int *)((0x1d76  << 2) + 0xff900000)
+//Bit 31:0 super scalar clock control
+#define   VPP_SRSCL_GCLK_CTRL                      (0x1d77)
+#define P_VPP_SRSCL_GCLK_CTRL                      (volatile unsigned int *)((0x1d77  << 2) + 0xff900000)
+//Bit 31:0 OSD super scalar clock control
+#define   VPP_OSDSR_GCLK_CTRL                      (0x1d78)
+#define P_VPP_OSDSR_GCLK_CTRL                      (volatile unsigned int *)((0x1d78  << 2) + 0xff900000)
+//Bit 31:0 vvycc clock control
+#define   VPP_XVYCC_GCLK_CTRL                      (0x1d79)
+#define P_VPP_XVYCC_GCLK_CTRL                      (volatile unsigned int *)((0x1d79  << 2) + 0xff900000)
+//Bit 31:24     blackext_start
+//Bit 23:16     blackext_slope1
+//Bit 15:8      blackext_midpt
+//Bit 7:0       blackext_slope2
+#define   VPP_BLACKEXT_CTRL                        (0x1d80)
+#define P_VPP_BLACKEXT_CTRL                        (volatile unsigned int *)((0x1d80  << 2) + 0xff900000)
+//Bit 31:24     bottom of region03 output value
+//Bit 23:16     bottom of region02 output value
+//Bit 15:8      bottom of region01 output value
+//Bit 7:0       bottom of region00 output value
+#define   VPP_DNLP_CTRL_00                         (0x1d81)
+#define P_VPP_DNLP_CTRL_00                         (volatile unsigned int *)((0x1d81  << 2) + 0xff900000)
+//Bit 31:24     bottom of region07 output value
+//Bit 23:16     bottom of region06 output value
+//Bit 15:8      bottom of region05 output value
+//Bit 7:0       bottom of region04 output value
+#define   VPP_DNLP_CTRL_01                         (0x1d82)
+#define P_VPP_DNLP_CTRL_01                         (volatile unsigned int *)((0x1d82  << 2) + 0xff900000)
+//Bit 31:24     bottom of region11 output value
+//Bit 23:16     bottom of region10 output value
+//Bit 15:8      bottom of region09 output value
+//Bit 7:0       bottom of region08 output value
+#define   VPP_DNLP_CTRL_02                         (0x1d83)
+#define P_VPP_DNLP_CTRL_02                         (volatile unsigned int *)((0x1d83  << 2) + 0xff900000)
+//Bit 31:24     bottom of region15 output value
+//Bit 23:16     bottom of region14 output value
+//Bit 15:8      bottom of region13 output value
+//Bit 7:0       bottom of region12 output value
+#define   VPP_DNLP_CTRL_03                         (0x1d84)
+#define P_VPP_DNLP_CTRL_03                         (volatile unsigned int *)((0x1d84  << 2) + 0xff900000)
+//Bit 31:24     bottom of region19 output value
+//Bit 23:16     bottom of region18 output value
+//Bit 15:8      bottom of region17 output value
+//Bit 7:0       bottom of region16 output value
+#define   VPP_DNLP_CTRL_04                         (0x1d85)
+#define P_VPP_DNLP_CTRL_04                         (volatile unsigned int *)((0x1d85  << 2) + 0xff900000)
+//Bit 31:24     bottom of region23 output value
+//Bit 23:16     bottom of region22 output value
+//Bit 15:8      bottom of region21 output value
+//Bit 7:0       bottom of region20 output value
+#define   VPP_DNLP_CTRL_05                         (0x1d86)
+#define P_VPP_DNLP_CTRL_05                         (volatile unsigned int *)((0x1d86  << 2) + 0xff900000)
+//Bit 31:24     bottom of region27 output value
+//Bit 23:16     bottom of region26 output value
+//Bit 15:8      bottom of region25 output value
+//Bit 7:0       bottom of region24 output value
+#define   VPP_DNLP_CTRL_06                         (0x1d87)
+#define P_VPP_DNLP_CTRL_06                         (volatile unsigned int *)((0x1d87  << 2) + 0xff900000)
+//Bit 31:24     bottom of region31 output value
+//Bit 23:16     bottom of region30 output value
+//Bit 15:8      bottom of region29 output value
+//Bit 7:0       bottom of region28 output value
+#define   VPP_DNLP_CTRL_07                         (0x1d88)
+#define P_VPP_DNLP_CTRL_07                         (volatile unsigned int *)((0x1d88  << 2) + 0xff900000)
+//Bit 31:24     bottom of region35 output value
+//Bit 23:16     bottom of region34 output value
+//Bit 15:8      bottom of region33 output value
+//Bit 7:0       bottom of region32 output value
+#define   VPP_DNLP_CTRL_08                         (0x1d89)
+#define P_VPP_DNLP_CTRL_08                         (volatile unsigned int *)((0x1d89  << 2) + 0xff900000)
+//Bit 31:24     bottom of region39 output value
+//Bit 23:16     bottom of region38 output value
+//Bit 15:8      bottom of region37 output value
+//Bit 7:0       bottom of region36 output value
+#define   VPP_DNLP_CTRL_09                         (0x1d8a)
+#define P_VPP_DNLP_CTRL_09                         (volatile unsigned int *)((0x1d8a  << 2) + 0xff900000)
+//Bit 31:24     bottom of region43 output value
+//Bit 23:16     bottom of region42 output value
+//Bit 15:8      bottom of region41 output value
+//Bit 7:0       bottom of region40 output value
+#define   VPP_DNLP_CTRL_10                         (0x1d8b)
+#define P_VPP_DNLP_CTRL_10                         (volatile unsigned int *)((0x1d8b  << 2) + 0xff900000)
+//Bit 31:24     bottom of region47 output value
+//Bit 23:16     bottom of region46 output value
+//Bit 15:8      bottom of region45 output value
+//Bit 7:0       bottom of region44 output value
+#define   VPP_DNLP_CTRL_11                         (0x1d8c)
+#define P_VPP_DNLP_CTRL_11                         (volatile unsigned int *)((0x1d8c  << 2) + 0xff900000)
+//Bit 31:24     bottom of region51 output value
+//Bit 23:16     bottom of region50 output value
+//Bit 15:8      bottom of region49 output value
+//Bit 7:0       bottom of region48 output value
+#define   VPP_DNLP_CTRL_12                         (0x1d8d)
+#define P_VPP_DNLP_CTRL_12                         (volatile unsigned int *)((0x1d8d  << 2) + 0xff900000)
+//Bit 31:24     bottom of region55 output value
+//Bit 23:16     bottom of region54 output value
+//Bit 15:8      bottom of region53 output value
+//Bit 7:0       bottom of region52 output value
+#define   VPP_DNLP_CTRL_13                         (0x1d8e)
+#define P_VPP_DNLP_CTRL_13                         (volatile unsigned int *)((0x1d8e  << 2) + 0xff900000)
+//Bit 31:24     bottom of region59 output value
+//Bit 23:16     bottom of region58 output value
+//Bit 15:8      bottom of region57 output value
+//Bit 7:0       bottom of region56 output value
+#define   VPP_DNLP_CTRL_14                         (0x1d8f)
+#define P_VPP_DNLP_CTRL_14                         (volatile unsigned int *)((0x1d8f  << 2) + 0xff900000)
+//Bit 31:24     bottom of region63 output value
+//Bit 23:16     bottom of region62 output value
+//Bit 15:8      bottom of region61 output value
+//Bit 7:0       bottom of region60 output value
+#define   VPP_DNLP_CTRL_15                         (0x1d90)
+#define P_VPP_DNLP_CTRL_15                         (volatile unsigned int *)((0x1d90  << 2) + 0xff900000)
+// `define VPP_PEAKING_HGAIN       8'h91   //32'h0
+// `define VPP_PEAKING_VGAIN       8'h92   //32'h0
+// `define VPP_PEAKING_NLP_1       8'h93   //32'h0
+// `define VPP_PEAKING_NLP_2       8'h94   //32'h0
+// `define VPP_PEAKING_NLP_3       8'h95   //32'h0
+// `define VPP_PEAKING_NLP_4       8'h96   //32'h0
+// `define VPP_PEAKING_NLP_5       8'h97   //32'h0
+// `define VPP_SHARP_LIMIT         8'h98   //32'h0
+// `define VPP_VLTI_CTRL           8'h99   //32'h0
+// `define VPP_HLTI_CTRL           8'h9a   //32'h0
+// `define VPP_CTI_CTRL            8'h9b   //32'h0
+#define   VPP_SRSHARP0_CTRL                        (0x1d91)
+#define P_VPP_SRSHARP0_CTRL                        (volatile unsigned int *)((0x1d91  << 2) + 0xff900000)
+//Bit 31:29  reserved
+//Bit 28:16  srsharp_demo_split_sz   srsharp demo top/bot left/right width
+//Bit 15:6   reserved
+//Bit 5:4    srsharp_demo_disp_post  srsharp demo display postion
+//Bit 3      srsharp_demo_en         srsharp demo enable
+//Bit 2      srsharp_c444to422_en    srsharp format444 convert 422 enable
+//Bit 1,     srsharp_buf_en          srsharp buffer enable
+//Bit 0,     srsharp_en              srsharp enable
+#define   VPP_SRSHARP1_CTRL                        (0x1d92)
+#define P_VPP_SRSHARP1_CTRL                        (volatile unsigned int *)((0x1d92  << 2) + 0xff900000)
+//Bit 31:29  reserved
+//Bit 28:16  srsharp_demo_split_sz   srsharp demo top/bot left/right width
+//Bit 15:6   reserved
+//Bit 5:4    srsharp_demo_disp_post  srsharp demo display postion
+//Bit 3      srsharp_demo_en         srsharp demo enable
+//Bit 2      srsharp_c444to422_en    srsharp format444 convert 422 enable
+//Bit 1,     srsharp_buf_en          srsharp buffer enable
+//Bit 0,     srsharp_en              srsharp enable
+#define   VPP_DOLBY_CTRL                           (0x1d93)
+#define P_VPP_DOLBY_CTRL                           (volatile unsigned int *)((0x1d93  << 2) + 0xff900000)
+//todo
+#define   VPP_DAT_CONV_PARA0                       (0x1d94)
+#define P_VPP_DAT_CONV_PARA0                       (volatile unsigned int *)((0x1d94  << 2) + 0xff900000)
+#define   VPP_DAT_CONV_PARA1                       (0x1d95)
+#define P_VPP_DAT_CONV_PARA1                       (volatile unsigned int *)((0x1d95  << 2) + 0xff900000)
+//todo
+#define   VPP_SYNC_SEL0                            (0x1d96)
+#define P_VPP_SYNC_SEL0                            (volatile unsigned int *)((0x1d96  << 2) + 0xff900000)
+#define   VPP_VADJ1_BLACK_VAL                      (0x1d97)
+#define P_VPP_VADJ1_BLACK_VAL                      (volatile unsigned int *)((0x1d97  << 2) + 0xff900000)
+#define   VPP_VADJ2_BLACK_VAL                      (0x1d98)
+#define P_VPP_VADJ2_BLACK_VAL                      (volatile unsigned int *)((0x1d98  << 2) + 0xff900000)
+//Bit 29        blue_stretch_cb_inc
+//Bit 28        blue_stretch_cr_inc
+//Bit 27        the MSB of blue_stretch_error_crp_inv[11:0]
+//Bit 26        the MSB of blue_stretch_error_crn_inv[11:0]
+//Bit 25        the MSB of blue_stretch_error_cbp_inv[11:0]
+//Bit 24        the MSB of blue_stretch_error_cbn_inv[11:0]
+//Bit 23:16     blue_stretch_gain
+//Bit 15:8      blue_stretch_gain_cb4cr
+//Bit 7:0       blue_stretch_luma_high
+#define   VPP_BLUE_STRETCH_1                       (0x1d9c)
+#define P_VPP_BLUE_STRETCH_1                       (volatile unsigned int *)((0x1d9c  << 2) + 0xff900000)
+//Bit 31:27     blue_stretch_error_crp
+//Bit 26:16     the 11 LSB of blue_stretch_error_crp_inv[11:0]
+//Bit 15:11     blue_stretch_error_crn
+//Bit 10:0      the 11 LSB of blue_stretch_error_crn_inv[11:0]
+#define   VPP_BLUE_STRETCH_2                       (0x1d9d)
+#define P_VPP_BLUE_STRETCH_2                       (volatile unsigned int *)((0x1d9d  << 2) + 0xff900000)
+//Bit 31:27     blue_stretch_error_cbp
+//Bit 26:16     the 11 LSB of blue_stretch_error_cbp_inv[11:0]
+//Bit 15:11     blue_stretch_error_cbn
+//Bit 10:0      the 11 LSB of blue_stretch_error_cbn_inv[11:0]
+#define   VPP_BLUE_STRETCH_3                       (0x1d9e)
+#define P_VPP_BLUE_STRETCH_3                       (volatile unsigned int *)((0x1d9e  << 2) + 0xff900000)
+//Bit 25:16 bypass_ccoring_ythd
+//Bit 15:8, Chroma coring threshold
+//Bit 3:0, Chroma coring slope
+#define   VPP_CCORING_CTRL                         (0x1da0)
+#define P_VPP_CCORING_CTRL                         (volatile unsigned int *)((0x1da0  << 2) + 0xff900000)
+//Bit 20 demo chroma coring enable
+//Bit 19 demo black enxtension enable
+//Bit 18 demo dynamic nonlinear luma processing enable
+//Bit 17 demo hsvsharp enable
+//Bit 16 demo bluestretch enable
+//Bit 15:14, 2'b00: demo adjust on top, 2'b01: demo adjust on bottom, 2'b10: demo adjust on left, 2'b11: demo adjust on right
+//Bit 4 chroma coring enable
+//Bit 3 black enxtension enable
+//Bit 2 dynamic nonlinear luma processing enable
+//Bit 1 hsvsharp enable
+//Bit 0 bluestretch enable
+#define   VPP_VE_ENABLE_CTRL                       (0x1da1)
+#define P_VPP_VE_ENABLE_CTRL                       (volatile unsigned int *)((0x1da1  << 2) + 0xff900000)
+//Bit 12:0, demo left or top screen width
+#define   VPP_VE_DEMO_LEFT_TOP_SCREEN_WIDTH        (0x1da2)
+#define P_VPP_VE_DEMO_LEFT_TOP_SCREEN_WIDTH        (volatile unsigned int *)((0x1da2  << 2) + 0xff900000)
+#define   VPP_VE_DEMO_CENTER_BAR                   (0x1da3)
+#define P_VPP_VE_DEMO_CENTER_BAR                   (volatile unsigned int *)((0x1da3  << 2) + 0xff900000)
+//28:16  ve_line_length
+//12:0   ve_pic_height
+#define   VPP_VE_H_V_SIZE                          (0x1da4)
+#define P_VPP_VE_H_V_SIZE                          (volatile unsigned int *)((0x1da4  << 2) + 0xff900000)
+//28:16  vppout_line_length
+//12:0   vppout_pic_height
+#define   VPP_OUT_H_V_SIZE                         (0x1da5)
+#define P_VPP_OUT_H_V_SIZE                         (volatile unsigned int *)((0x1da5  << 2) + 0xff900000)
+//28:16  vppin_line_length
+//12:0   vppin_pic_height
+#define   VPP_IN_H_V_SIZE                          (0x1da6)
+#define P_VPP_IN_H_V_SIZE                          (volatile unsigned int *)((0x1da6  << 2) + 0xff900000)
+//Bit 10   reset bit, high active
+//Bit 9    0: measuring rising edge, 1: measuring falling edge
+//Bit 8    if true, accumulate the counter number, otherwise not
+//Bit 7:0  vsync_span, define how many vsync span need to measure
+#define   VPP_VDO_MEAS_CTRL                        (0x1da8)
+#define P_VPP_VDO_MEAS_CTRL                        (volatile unsigned int *)((0x1da8  << 2) + 0xff900000)
+//Read only
+//19:16  ind_meas_count_n, every number of sync_span vsyncs, this counter add 1
+//15:0, high bit portion of counter
+#define   VPP_VDO_MEAS_VS_COUNT_HI                 (0x1da9)
+#define P_VPP_VDO_MEAS_VS_COUNT_HI                 (volatile unsigned int *)((0x1da9  << 2) + 0xff900000)
+//Read only
+//31:0, low bit portion of counter
+#define   VPP_VDO_MEAS_VS_COUNT_LO                 (0x1daa)
+#define P_VPP_VDO_MEAS_VS_COUNT_LO                 (volatile unsigned int *)((0x1daa  << 2) + 0xff900000)
+//bit 11:9 vd2_sel,  001: select vd1_din, 010: select vd2_din, 011: select d2d3_l_din, 100: d2d3_r_din, otherwise no selection
+//bit 8:6 vd1_l_sel, 001: select vd1_din, 010: select vd2_din, 011: select d2d3_l_din, 100: d2d3_r_din, otherwise no selection
+//bit 5:3 vd1_r_sel, 001: select vd1_din, 010: select vd2_din, 011: select d2d3_l_din, 100: d2d3_r_din, otherwise no selection
+//note: the source vd1_l_sel selected cannot be used as the source of vd1_r_sel or vd2_sel
+// vd1_r_sel is useful only vd1_interleave_mode is not 00. And the source vd1_r_sel used can not used for the vd2_sel any more.
+//bit 2:0 vd1_interleave_mode, 000: no interleave, 001: pixel interleaving, 010: line interleaving, 011: 2 pixel interleaving,
+// 100: 2 line interleaving
+#define   VPP_INPUT_CTRL                           (0x1dab)
+#define P_VPP_INPUT_CTRL                           (volatile unsigned int *)((0x1dab  << 2) + 0xff900000)
+//bit 25:24 cti_bpf_sel
+//bit 20:16 cti_blend_factor_gama
+//bit 12:8 cti_blend_factor_beta
+//bit 4:0 cti_blend_factor_alpha
+#define   VPP_CTI_CTRL2                            (0x1dac)
+#define P_VPP_CTI_CTRL2                            (volatile unsigned int *)((0x1dac  << 2) + 0xff900000)
+#define   VPP_PEAKING_SAT_THD1                     (0x1dad)
+#define P_VPP_PEAKING_SAT_THD1                     (volatile unsigned int *)((0x1dad  << 2) + 0xff900000)
+#define   VPP_PEAKING_SAT_THD2                     (0x1dae)
+#define P_VPP_PEAKING_SAT_THD2                     (volatile unsigned int *)((0x1dae  << 2) + 0xff900000)
+#define   VPP_PEAKING_SAT_THD3                     (0x1daf)
+#define P_VPP_PEAKING_SAT_THD3                     (volatile unsigned int *)((0x1daf  << 2) + 0xff900000)
+#define   VPP_PEAKING_SAT_THD4                     (0x1db0)
+#define P_VPP_PEAKING_SAT_THD4                     (volatile unsigned int *)((0x1db0  << 2) + 0xff900000)
+#define   VPP_PEAKING_SAT_THD5                     (0x1db1)
+#define P_VPP_PEAKING_SAT_THD5                     (volatile unsigned int *)((0x1db1  << 2) + 0xff900000)
+#define   VPP_PEAKING_SAT_THD6                     (0x1db2)
+#define P_VPP_PEAKING_SAT_THD6                     (volatile unsigned int *)((0x1db2  << 2) + 0xff900000)
+#define   VPP_PEAKING_SAT_THD7                     (0x1db3)
+#define P_VPP_PEAKING_SAT_THD7                     (volatile unsigned int *)((0x1db3  << 2) + 0xff900000)
+#define   VPP_PEAKING_SAT_THD8                     (0x1db4)
+#define P_VPP_PEAKING_SAT_THD8                     (volatile unsigned int *)((0x1db4  << 2) + 0xff900000)
+#define   VPP_PEAKING_SAT_THD9                     (0x1db5)
+#define P_VPP_PEAKING_SAT_THD9                     (volatile unsigned int *)((0x1db5  << 2) + 0xff900000)
+#define   VPP_PEAKING_GAIN_ADD1                    (0x1db6)
+#define P_VPP_PEAKING_GAIN_ADD1                    (volatile unsigned int *)((0x1db6  << 2) + 0xff900000)
+#define   VPP_PEAKING_GAIN_ADD2                    (0x1db7)
+#define P_VPP_PEAKING_GAIN_ADD2                    (volatile unsigned int *)((0x1db7  << 2) + 0xff900000)
+//bit 23:16 peaking_dnlp_gain, u5.3, DNLP effect
+//bit 15:8  peaking_factor
+//bit 5     peaking_dnlp_demo_en
+//bit 4     peaking_dnlp_en
+//bit 3:0   peaking_filter_sel
+#define   VPP_PEAKING_DNLP                         (0x1db8)
+#define P_VPP_PEAKING_DNLP                         (volatile unsigned int *)((0x1db8  << 2) + 0xff900000)
+//bit 24    sharp_demo_win_en
+//bit 23:12 sharp_demo_win_vend
+//bit 11:0  sharp_demo_win_vstart
+#define   VPP_SHARP_DEMO_WIN_CTRL1                 (0x1db9)
+#define P_VPP_SHARP_DEMO_WIN_CTRL1                 (volatile unsigned int *)((0x1db9  << 2) + 0xff900000)
+//bit 23:12 sharp_demo_win_hend
+//bit 11:0  sharp_demo_win_hstart
+#define   VPP_SHARP_DEMO_WIN_CTRL2                 (0x1dba)
+#define P_VPP_SHARP_DEMO_WIN_CTRL2                 (volatile unsigned int *)((0x1dba  << 2) + 0xff900000)
+//Bit 31:24     front_hlti_neg_gain
+//Bit 23:16     front_hlti_pos_gain
+//Bit 15:8      front_hlti_threshold
+//Bit 7:0       front_hlti_blend_factor
+#define   VPP_FRONT_HLTI_CTRL                      (0x1dbb)
+#define P_VPP_FRONT_HLTI_CTRL                      (volatile unsigned int *)((0x1dbb  << 2) + 0xff900000)
+//Bit 31        front_enable, enable the front LTI&CTI before scaler
+//Bit 26:24     front_cti_step2
+//Bit 23:21     front_cti_step
+//Bit 20:16     front_cti_blend_factor
+//Bit 15        front_cti_median_mode
+//Bit 14:8      front_cti_threshold
+//Bit 7:0       front_cti_gain
+#define   VPP_FRONT_CTI_CTRL                       (0x1dbc)
+#define P_VPP_FRONT_CTI_CTRL                       (volatile unsigned int *)((0x1dbc  << 2) + 0xff900000)
+//bit 29:28 front_hlti_step
+//bit 25:24 front_cti_bpf_sel
+//bit 20:16 front_cti_blend_factor_gama
+//bit 12:8  front_cti_blend_factor_beta
+//bit 4:0   front_cti_blend_factor_alpha
+#define   VPP_FRONT_CTI_CTRL2                      (0x1dbd)
+#define P_VPP_FRONT_CTI_CTRL2                      (volatile unsigned int *)((0x1dbd  << 2) + 0xff900000)
+//vertical scaler phase step
+//Bit 27:0,  4.24 format
+#define   VPP_OSD_VSC_PHASE_STEP                   (0x1dc0)
+#define P_VPP_OSD_VSC_PHASE_STEP                   (volatile unsigned int *)((0x1dc0  << 2) + 0xff900000)
+//Bit 31:16, botttom vertical scaler initial phase
+//Bit 15:0, top vertical scaler initial phase
+#define   VPP_OSD_VSC_INI_PHASE                    (0x1dc1)
+#define P_VPP_OSD_VSC_INI_PHASE                    (volatile unsigned int *)((0x1dc1  << 2) + 0xff900000)
+//Bit 24    osd vertical Scaler enable
+//Bit 23    osd_prog_interlace 0: current field is progressive, 1: current field is interlace
+//Bit 22:21 osd_vsc_double_line_mode, bit1, double input width and half input height, bit0, change line buffer becomes 2 lines
+//Bit 20    osd_vsc_phase0_always_en
+//Bit 19    osd_vsc_nearest_en
+//Bit 17:16 osd_vsc_bot_rpt_l0_num
+//Bit 14:11 osd_vsc_bot_ini_rcv_num
+//Bit 9:8   osd_vsc_top_rpt_l0_num
+//Bit 6:3   osd_vsc_top_ini_rcv_num
+//Bit 2:0   osd_vsc_bank_length
+#define   VPP_OSD_VSC_CTRL0                        (0x1dc2)
+#define P_VPP_OSD_VSC_CTRL0                        (volatile unsigned int *)((0x1dc2  << 2) + 0xff900000)
+//horizontal scaler phase step
+//Bit 27:0,  4.24 format
+#define   VPP_OSD_HSC_PHASE_STEP                   (0x1dc3)
+#define P_VPP_OSD_HSC_PHASE_STEP                   (volatile unsigned int *)((0x1dc3  << 2) + 0xff900000)
+//Bit 31:16, horizontal scaler initial phase1
+//Bit 15:0, horizontal scaler initial phase0
+#define   VPP_OSD_HSC_INI_PHASE                    (0x1dc4)
+#define P_VPP_OSD_HSC_INI_PHASE                    (volatile unsigned int *)((0x1dc4  << 2) + 0xff900000)
+//Bit 22   osd horizontal scaler enable
+//Bit 21   osd_hsc_double_pix_mode
+//Bit 20   osd_hsc_phase0_always_en
+//Bit 19   osd_hsc_nearest_en
+//Bit 17:16 osd_hsc_rpt_p0_num1
+//Bit 14:11 osd_hsc_ini_rcv_num1
+//Bit 9:8   osd_hsc_rpt_p0_num0
+//Bit 6:3   osd_hsc_ini_rcv_num0
+//Bit 2:0   osd_hsc_bank_length
+#define   VPP_OSD_HSC_CTRL0                        (0x1dc5)
+#define P_VPP_OSD_HSC_CTRL0                        (volatile unsigned int *)((0x1dc5  << 2) + 0xff900000)
+//for 3D quincunx sub-sampling
+//bit 15:8 pattern, each patten 1 bit, from lsb -> msb
+//bit 6:4  pattern start
+//bit 2:0  pattern end
+#define   VPP_OSD_HSC_INI_PAT_CTRL                 (0x1dc6)
+#define P_VPP_OSD_HSC_INI_PAT_CTRL                 (volatile unsigned int *)((0x1dc6  << 2) + 0xff900000)
+//bit 31:24, componet 0
+//bit 23:16, component 1
+//bit 15:8, component 2
+//bit 7:0 component 3, alpha
+#define   VPP_OSD_SC_DUMMY_DATA                    (0x1dc7)
+#define P_VPP_OSD_SC_DUMMY_DATA                    (volatile unsigned int *)((0x1dc7  << 2) + 0xff900000)
+//Bit 14 osc_sc_din_osd1_alpha_mode, 1: (alpha >= 128) ? alpha -1: alpha,  0: (alpha >=1) ? alpha - 1: alpha.
+//Bit 13 osc_sc_din_osd2_alpha_mode, 1: (alpha >= 128) ? alpha -1: alpha,  0: (alpha >=1) ? alpha - 1: alpha.
+//Bit 12 osc_sc_dout_alpha_mode, 1: (alpha >= 128) ? alpha + 1: alpha, 0: (alpha >=1) ? alpha + 1: alpha.
+//Bit 12 osc_sc_alpha_mode, 1: (alpha >= 128) ? alpha + 1: alpha, 0: (alpha >=1) ? alpha + 1: alpha.
+//Bit 11:4 default alpha for vd1 or vd2 if they are selected as the source
+//Bit 3 osd scaler path enable
+//Bit 1:0 osd_sc_sel, 00: select osd1 input, 01: select osd2 input, 10: select vd1 input, 11: select vd2 input after matrix
+#define   VPP_OSD_SC_CTRL0                         (0x1dc8)
+#define P_VPP_OSD_SC_CTRL0                         (volatile unsigned int *)((0x1dc8  << 2) + 0xff900000)
+//Bit 28:16 OSD scaler input width minus 1
+//Bit 12:0 OSD scaler input height minus 1
+#define   VPP_OSD_SCI_WH_M1                        (0x1dc9)
+#define P_VPP_OSD_SCI_WH_M1                        (volatile unsigned int *)((0x1dc9  << 2) + 0xff900000)
+//Bit 28:16 OSD scaler output horizontal start
+//Bit 12:0 OSD scaler output horizontal end
+#define   VPP_OSD_SCO_H_START_END                  (0x1dca)
+#define P_VPP_OSD_SCO_H_START_END                  (volatile unsigned int *)((0x1dca  << 2) + 0xff900000)
+//Bit 28:16 OSD scaler output vertical start
+//Bit 12:0 OSD scaler output vertical end
+#define   VPP_OSD_SCO_V_START_END                  (0x1dcb)
+#define P_VPP_OSD_SCO_V_START_END                  (volatile unsigned int *)((0x1dcb  << 2) + 0xff900000)
+//Because there are many coefficients used in the vertical filter and horizontal filters,
+//indirect access the coefficients of vertical filter and horizontal filter is used.
+//For vertical filter, there are 33x4 coefficients
+//For horizontal filter, there are 33x4 coefficients
+//Bit 15	index increment, if bit9 == 1  then (0: index increase 1, 1: index increase 2) else (index increase 2)
+//Bit 14	1: read coef through cbus enable, just for debug purpose in case when we wanna check the coef in ram in correct or not
+//Bit 9     if true, use 9bit resolution coef, other use 8bit resolution coef
+//Bit 8   type of index, 0: vertical coef,  1: horizontal coef
+//Bit 6:0 	coef index
+#define   VPP_OSD_SCALE_COEF_IDX                   (0x1dcc)
+#define P_VPP_OSD_SCALE_COEF_IDX                   (volatile unsigned int *)((0x1dcc  << 2) + 0xff900000)
+//coefficients for vertical filter and horizontal filter
+#define   VPP_OSD_SCALE_COEF                       (0x1dcd)
+#define P_VPP_OSD_SCALE_COEF                       (volatile unsigned int *)((0x1dcd  << 2) + 0xff900000)
+//Bit 12:0 line number use to generate interrupt when line == this number
+#define   VPP_INT_LINE_NUM                         (0x1dce)
+#define P_VPP_INT_LINE_NUM                         (volatile unsigned int *)((0x1dce  << 2) + 0xff900000)
+#define   VPP_XVYCC_MISC                           (0x1dcf)
+#define P_VPP_XVYCC_MISC                           (volatile unsigned int *)((0x1dcf  << 2) + 0xff900000)
+// new add lti/cti in 120924
+//Bit  3: 0        //default== 0  reg_hlti_dn_flt_coe[0]
+//Bit  7: 4        //default== 0  reg_hlti_dn_flt_coe[1]
+//Bit 11: 8        //default== 0  reg_hlti_dn_flt_coe[2]
+//Bit 15:12        //default== 2  reg_hlti_dn_flt_coe[3]
+//Bit 19:16        //default== 4  reg_hlti_dn_flt_coe[4]
+//Bit 22:20        //default== 3  reg_hlti_dn_flt_nrm  u3: 3~7
+#define   VPP_HLTI_DN_FLT                          (0x1dd0)
+#define P_VPP_HLTI_DN_FLT                          (volatile unsigned int *)((0x1dd0  << 2) + 0xff900000)
+//Bit  7: 0        //default== 8  reg_hlti_bst_gain  u8, norm 16 as "1"
+//Bit 15: 8        //default== 20 reg_hlti_bst_core  u8, norm 32 as "1"
+//Bit 23:16        //default== 32 reg_hlti_oob_gain  u8, norm 32 as "1"
+//Bit 28:24        //default== 0  reg_hlti_oob_core  u5
+#define   VPP_HLTI_GAIN                            (0x1dd1)
+#define P_VPP_HLTI_GAIN                            (volatile unsigned int *)((0x1dd1  << 2) + 0xff900000)
+//Bit  7: 0        //default== 2  reg_hlti_clp_ofst  u8,
+//Bit     8        //default== 0  reg_hlti_clp_mode  u1,
+//Bit 11: 9        //default== 1  reg_hlti_clp_wind  u3,
+//Bit 14:12        //default== 1  reg_hlti_bst_fltr  u3,
+//Bit    15        //default== 1  reg_hlti_enable    u1,
+#define   VPP_HLTI_PARA                            (0x1dd2)
+#define P_VPP_HLTI_PARA                            (volatile unsigned int *)((0x1dd2  << 2) + 0xff900000)
+//Bit  3: 0        //default== 0  reg_hcti_dn_flt_coe[0]
+//Bit  7: 4        //default== 0  reg_hcti_dn_flt_coe[1]
+//Bit 11: 8        //default== 1  reg_hcti_dn_flt_coe[2]
+//Bit 15:12        //default== 2  reg_hcti_dn_flt_coe[3]
+//Bit 19:16        //default== 2  reg_hcti_dn_flt_coe[4]
+//Bit 22:20        //default== 3  reg_hcti_dn_flt_nrm   u3: 3~7
+#define   VPP_HCTI_DN_FLT                          (0x1dd3)
+#define P_VPP_HCTI_DN_FLT                          (volatile unsigned int *)((0x1dd3  << 2) + 0xff900000)
+//Bit 7: 0        //default== 48 reg_hcti_bst_gain  u8, norm 16 as "1"
+//Bit15: 8        //default== 17 reg_hcti_bst_core  u8, norm 32 as "1"
+//Bit23:16        //default== 16 reg_hcti_oob_gain  u8, norm 32 as "1"
+//Bit28:24        //default==  0 reg_hcti_oob_core  u5
+#define   VPP_HCTI_GAIN                            (0x1dd4)
+#define P_VPP_HCTI_GAIN                            (volatile unsigned int *)((0x1dd4  << 2) + 0xff900000)
+//Bit  7: 0        //default==  0 reg_hcti_clp_ofst  u8,
+//Bit     8        //default==  1 reg_hcti_clp_mode  u1,
+//Bit 11: 9        //default==  3 reg_hcti_clp_wind  u3,
+//Bit 14:12        //default==  6 reg_hcti_bst_fltr  u3,
+//Bit    15        //default==  1 reg_hcti_enable    u1,
+#define   VPP_HCTI_PARA                            (0x1dd5)
+#define P_VPP_HCTI_PARA                            (volatile unsigned int *)((0x1dd5  << 2) + 0xff900000)
+//Bit  7: 0        //default== 48 reg_vcti_bst_gain  u8, normalize 16 as "1"
+//Bit 15: 8        //default== 10 reg_vcti_bst_core  u8
+//Bit 19:16        //default== 10 reg_vcti_clp_ofst  u4
+//Bit    20        //default==  1 reg_vcti_clp_wind  u1, 0: wind 3, 1: wind5
+#define   VPP_VCTI_PARA                            (0x1dd6)
+#define P_VPP_VCTI_PARA                            (volatile unsigned int *)((0x1dd6  << 2) + 0xff900000)
+//`define VPP_MATRIX_PROBE_COLOR1 8'hd7  //defined before
+//Bit 31          //default== 0, urgent fifo hold enable
+//Bit 28:12       //default== 0, urgent fifo hold line threshold
+//Bit 15          //default== 0, urgent_ctrl_en
+//Bit 14          //default== 0, urgent_wr, if true for write buffer
+//Bit 13          //default== 0, out_inv_en
+//Bit 12          //default == 0, urgent_ini_value
+//Bit 11:6        //default == 0, up_th  up threshold
+//Bit 5:0         //default == 0, dn_th  dn threshold
+#define   VPP_OFIFO_URG_CTRL                       (0x1dd8)
+#define P_VPP_OFIFO_URG_CTRL                       (volatile unsigned int *)((0x1dd8  << 2) + 0xff900000)
+#define   VPP_CLIP_MISC0                           (0x1dd9)
+#define P_VPP_CLIP_MISC0                           (volatile unsigned int *)((0x1dd9  << 2) + 0xff900000)
+//Bit 29:20       // default == 1023, final clip r channel top
+//Bit 19:10       // default == 1023, final clip g channel top
+//Bit  9: 0       // default == 1023, final clip b channel top
+#define   VPP_CLIP_MISC1                           (0x1dda)
+#define P_VPP_CLIP_MISC1                           (volatile unsigned int *)((0x1dda  << 2) + 0xff900000)
+//Bit 29:20       // default ==    0, final clip r channel bottom
+//Bit 19:10       // default ==    0, final clip g channel bottom
+//Bit  9: 0       // default ==    0, final clip b channel bottom
+#define   VPP_MATRIX_COEF13_14                     (0x1ddb)
+#define P_VPP_MATRIX_COEF13_14                     (volatile unsigned int *)((0x1ddb  << 2) + 0xff900000)
+//Bit 28:16       // default == 0, matrix coef13
+//Bit 12:0        // default == 0, matrix coef14
+#define   VPP_MATRIX_COEF23_24                     (0x1ddc)
+#define P_VPP_MATRIX_COEF23_24                     (volatile unsigned int *)((0x1ddc  << 2) + 0xff900000)
+//Bit 28:16       // default == 0, matrix coef23
+//Bit 12:0        // default == 0, matrix coef24
+#define   VPP_MATRIX_COEF15_25                     (0x1ddd)
+#define P_VPP_MATRIX_COEF15_25                     (volatile unsigned int *)((0x1ddd  << 2) + 0xff900000)
+//Bit 28:16       // default == 0, matrix coef15
+//Bit 12:0        // default == 0, matrix coef25
+#define   VPP_MATRIX_CLIP                          (0x1dde)
+#define P_VPP_MATRIX_CLIP                          (volatile unsigned int *)((0x1dde  << 2) + 0xff900000)
+//Bit 7:5         //  default == 0,   mat rs
+//Bit 4:3         //  default == 0,   mat clmod
+//Bit 2:0         //  default == 0,   mat clip enable
+#define   VPP_XVYCC_MISC0                          (0x1ddf)
+#define P_VPP_XVYCC_MISC0                          (volatile unsigned int *)((0x1ddf  << 2) + 0xff900000)
+//Bit 29:20       // default == 1023, xvycc clip r channel top
+//Bit 19:10       // default == 1023, xvycc clip g channel top
+//Bit  9: 0       // default == 1023, xvycc clip b channel top
+#define   VPP_XVYCC_MISC1                          (0x1de0)
+#define P_VPP_XVYCC_MISC1                          (volatile unsigned int *)((0x1de0  << 2) + 0xff900000)
+//Bit 29:20       // default ==    0, xvycc clip r channel bottom
+//Bit 19:10       // default ==    0, xvycc clip g channel bottom
+//Bit  9: 0       // default ==    0, xvycc clip b channel bottom
+#define   VPP_VD1_CLIP_MISC0                       (0x1de1)
+#define P_VPP_VD1_CLIP_MISC0                       (volatile unsigned int *)((0x1de1  << 2) + 0xff900000)
+//Bit 29:20       // default == 1023, vd1 clip r channel top
+//Bit 19:10       // default == 1023, vd1 clip g channel top
+//Bit  9: 0       // default == 1023, vd1 clip b channel top
+#define   VPP_VD1_CLIP_MISC1                       (0x1de2)
+#define P_VPP_VD1_CLIP_MISC1                       (volatile unsigned int *)((0x1de2  << 2) + 0xff900000)
+//Bit 29:20       // default ==    0, vd1 clip r channel bottom
+//Bit 19:10       // default ==    0, vd1 clip g channel bottom
+//Bit  9: 0       // default ==    0, vd1 clip b channel bottom
+#define   VPP_VD2_CLIP_MISC0                       (0x1de3)
+#define P_VPP_VD2_CLIP_MISC0                       (volatile unsigned int *)((0x1de3  << 2) + 0xff900000)
+//Bit 29:20       // default == 1023, vd2 clip r channel top
+//Bit 19:10       // default == 1023, vd2 clip g channel top
+//Bit  9: 0       // default == 1023, vd2 clip b channel top
+#define   VPP_VD2_CLIP_MISC1                       (0x1de4)
+#define P_VPP_VD2_CLIP_MISC1                       (volatile unsigned int *)((0x1de4  << 2) + 0xff900000)
+//Bit 29:20       // default ==    0, vd2 clip r channel bottom
+//Bit 19:10       // default ==    0, vd2 clip g channel bottom
+//Bit  9: 0       // default ==    0, vd2 clip b channel bottom
+// synopsys translate_off
+// synopsys translate_on
+//
+// Closing file:  vpp_regs.h
+//
+//`define VIU2_VCBUS_BASE                8'h1e
+//
+// Reading file:  v2regs.h
+//
+// synopsys translate_off
+// synopsys translate_on
+//===========================================================================
+// Video Interface 2 Registers    0xe00 - 0xeff
+//===========================================================================
+// -----------------------------------------------
+// CBUS_BASE:  VIU2_VCBUS_BASE = 0x1e
+// -----------------------------------------------
+#define   VIU2_ADDR_START                          (0x1e00)
+#define P_VIU2_ADDR_START                          (volatile unsigned int *)((0x1e00  << 2) + 0xff900000)
+#define   VIU2_ADDR_END                            (0x1eff)
+#define P_VIU2_ADDR_END                            (volatile unsigned int *)((0x1eff  << 2) + 0xff900000)
+//------------------------------------------------------------------------------
+// VIU2 top-level registers
+//------------------------------------------------------------------------------
+// Bit  0 RW, osd1_reset
+// Bit  1 RW, osd2_reset
+// Bit  2 RW, vd1_reset
+// Bit  3 RW, vd1_fmt_reset
+// Bit  7 RW, vpp_reset
+#define   VIU2_SW_RESET                            (0x1e01)
+#define P_VIU2_SW_RESET                            (volatile unsigned int *)((0x1e01  << 2) + 0xff900000)
+#define   VIU2_SW_RESET0                           (0x1e02)
+#define P_VIU2_SW_RESET0                           (volatile unsigned int *)((0x1e02  << 2) + 0xff900000)
+// Bit 0 RW, software reset for mcvecrd_mif
+// Bit 1 RW, software reset for mcinfowr_mif
+// Bit 2 RW, software reset for mcinford_mif
+//bit 8 if true, vsync interrup is generate only field == 0
+//bit 7:0 fix_disable
+#define   VIU2_MISC_CTRL0                          (0x1e06)
+#define P_VIU2_MISC_CTRL0                          (volatile unsigned int *)((0x1e06  << 2) + 0xff900000)
+//------------------------------------------------------------------------------
+// OSD1 registers
+//------------------------------------------------------------------------------
+// Bit    31 Reserved
+// Bit    30 RW, enable_free_clk: 1=use free-running clock to drive logics;
+//                                0=use gated clock for low power.
+// Bit    29 R, test_rd_dsr
+// Bit    28 R, osd_done
+// Bit 27:24 R, osd_blk_mode
+// Bit 23:22 R, osd_blk_ptr
+// Bit    21 R, osd_enable
+//
+// Bit 20:12 RW, global_alpha
+// Bit    11 RW, test_rd_en
+// Bit 10: 9 Reserved for control signals
+// Bit  8: 5 RW, ctrl_mtch_y
+// Bit     4 RW, ctrl_422to444
+// Bit  3: 0 RW, osd_blk_enable. Bit 0 to enable block 0: 1=enable, 0=disable;
+//                               Bit 1 to enable block 1, and so on.
+#define   VIU2_OSD1_CTRL_STAT                      (0x1e10)
+#define P_VIU2_OSD1_CTRL_STAT                      (volatile unsigned int *)((0x1e10  << 2) + 0xff900000)
+// Bit 31:26 Reserved
+// Bit 25:16 R, fifo_count
+// Bit 15: 6 Reserved
+// Bit  5: 4 RW, hold_fifo_lines[6:5]
+// Bit     3 RW, rgb2yuv_full_range
+// Bit     2 RW, alpha_9b_mode
+// Bit     1 RW, reserved
+// Bit     0 RW, color_expand_mode
+#define   VIU2_OSD1_CTRL_STAT2                     (0x1e2d)
+#define P_VIU2_OSD1_CTRL_STAT2                     (volatile unsigned int *)((0x1e2d  << 2) + 0xff900000)
+// Bit 31: 9 Reserved
+// Bit     8 RW, 0 = Write LUT, 1 = Read LUT
+// Bit  7: 0 RW, lut_addr
+#define   VIU2_OSD1_COLOR_ADDR                     (0x1e11)
+#define P_VIU2_OSD1_COLOR_ADDR                     (volatile unsigned int *)((0x1e11  << 2) + 0xff900000)
+// Bit 31:24 RW, Y or R
+// Bit 23:16 RW, Cb or G
+// Bit 15: 8 RW, Cr or B
+// Bit  7: 0 RW, Alpha
+#define   VIU2_OSD1_COLOR                          (0x1e12)
+#define P_VIU2_OSD1_COLOR                          (volatile unsigned int *)((0x1e12  << 2) + 0xff900000)
+// Bit 31:24 RW, Y or R
+// Bit 23:16 RW, Cb or G
+// Bit 15: 8 RW, Cr or B
+// Bit  7: 0 RW, Alpha
+#define   VIU2_OSD1_TCOLOR_AG0                     (0x1e17)
+#define P_VIU2_OSD1_TCOLOR_AG0                     (volatile unsigned int *)((0x1e17  << 2) + 0xff900000)
+#define   VIU2_OSD1_TCOLOR_AG1                     (0x1e18)
+#define P_VIU2_OSD1_TCOLOR_AG1                     (volatile unsigned int *)((0x1e18  << 2) + 0xff900000)
+#define   VIU2_OSD1_TCOLOR_AG2                     (0x1e19)
+#define P_VIU2_OSD1_TCOLOR_AG2                     (volatile unsigned int *)((0x1e19  << 2) + 0xff900000)
+#define   VIU2_OSD1_TCOLOR_AG3                     (0x1e1a)
+#define P_VIU2_OSD1_TCOLOR_AG3                     (volatile unsigned int *)((0x1e1a  << 2) + 0xff900000)
+// Bit 31:30 Reserved
+// Bit    29 RW, y_rev: 0=normal read, 1=reverse read in Y direction
+// Bit    28 RW, x_rev: 0=normal read, 1=reverse read in X direction
+// Bit 27:24 Reserved
+// Bit 23:16 RW, tbl_addr
+// Bit    15 RW, little_endian: 0=big endian, 1=little endian
+// Bit    14 RW, rpt_y
+// Bit 13:12 RW, interp_ctrl. 0x=No interpolation; 10=Interpolate with previous
+//                            pixel; 11=Interpolate with the average value
+//                            between previous and next pixel.
+// Bit 11: 8 RW, osd_blk_mode
+// Bit     7 RW, rgb_en
+// Bit     6 RW, tc_alpha_en
+// Bit  5: 2 RW, color_matrix
+// Bit     1 RW, interlace_en
+// Bit     0 RW, interlace_sel_odd
+#define   VIU2_OSD1_BLK0_CFG_W0                    (0x1e1b)
+#define P_VIU2_OSD1_BLK0_CFG_W0                    (volatile unsigned int *)((0x1e1b  << 2) + 0xff900000)
+#define   VIU2_OSD1_BLK1_CFG_W0                    (0x1e1f)
+#define P_VIU2_OSD1_BLK1_CFG_W0                    (volatile unsigned int *)((0x1e1f  << 2) + 0xff900000)
+#define   VIU2_OSD1_BLK2_CFG_W0                    (0x1e23)
+#define P_VIU2_OSD1_BLK2_CFG_W0                    (volatile unsigned int *)((0x1e23  << 2) + 0xff900000)
+#define   VIU2_OSD1_BLK3_CFG_W0                    (0x1e27)
+#define P_VIU2_OSD1_BLK3_CFG_W0                    (volatile unsigned int *)((0x1e27  << 2) + 0xff900000)
+// Bit 31:29 Reserved
+// Bit 28:16 RW, x_end
+// Bit 15:13 Reserved
+// Bit 12: 0 RW, x_start
+#define   VIU2_OSD1_BLK0_CFG_W1                    (0x1e1c)
+#define P_VIU2_OSD1_BLK0_CFG_W1                    (volatile unsigned int *)((0x1e1c  << 2) + 0xff900000)
+#define   VIU2_OSD1_BLK1_CFG_W1                    (0x1e20)
+#define P_VIU2_OSD1_BLK1_CFG_W1                    (volatile unsigned int *)((0x1e20  << 2) + 0xff900000)
+#define   VIU2_OSD1_BLK2_CFG_W1                    (0x1e24)
+#define P_VIU2_OSD1_BLK2_CFG_W1                    (volatile unsigned int *)((0x1e24  << 2) + 0xff900000)
+#define   VIU2_OSD1_BLK3_CFG_W1                    (0x1e28)
+#define P_VIU2_OSD1_BLK3_CFG_W1                    (volatile unsigned int *)((0x1e28  << 2) + 0xff900000)
+// Bit 31:29 Reserved
+// Bit 28:16 RW, y_end
+// Bit 15:13 Reserved
+// Bit 12: 0 RW, y_start
+#define   VIU2_OSD1_BLK0_CFG_W2                    (0x1e1d)
+#define P_VIU2_OSD1_BLK0_CFG_W2                    (volatile unsigned int *)((0x1e1d  << 2) + 0xff900000)
+#define   VIU2_OSD1_BLK1_CFG_W2                    (0x1e21)
+#define P_VIU2_OSD1_BLK1_CFG_W2                    (volatile unsigned int *)((0x1e21  << 2) + 0xff900000)
+#define   VIU2_OSD1_BLK2_CFG_W2                    (0x1e25)
+#define P_VIU2_OSD1_BLK2_CFG_W2                    (volatile unsigned int *)((0x1e25  << 2) + 0xff900000)
+#define   VIU2_OSD1_BLK3_CFG_W2                    (0x1e29)
+#define P_VIU2_OSD1_BLK3_CFG_W2                    (volatile unsigned int *)((0x1e29  << 2) + 0xff900000)
+// Bit 31:28 Reserved
+// Bit 27:16 RW, h_end
+// Bit 15:12 Reserved
+// Bit 11: 0 RW, h_start
+#define   VIU2_OSD1_BLK0_CFG_W3                    (0x1e1e)
+#define P_VIU2_OSD1_BLK0_CFG_W3                    (volatile unsigned int *)((0x1e1e  << 2) + 0xff900000)
+#define   VIU2_OSD1_BLK1_CFG_W3                    (0x1e22)
+#define P_VIU2_OSD1_BLK1_CFG_W3                    (volatile unsigned int *)((0x1e22  << 2) + 0xff900000)
+#define   VIU2_OSD1_BLK2_CFG_W3                    (0x1e26)
+#define P_VIU2_OSD1_BLK2_CFG_W3                    (volatile unsigned int *)((0x1e26  << 2) + 0xff900000)
+#define   VIU2_OSD1_BLK3_CFG_W3                    (0x1e2a)
+#define P_VIU2_OSD1_BLK3_CFG_W3                    (volatile unsigned int *)((0x1e2a  << 2) + 0xff900000)
+// Bit 31:28 Reserved
+// Bit 27:16 RW, v_end
+// Bit 15:12 Reserved
+// Bit 11: 0 RW, v_start
+#define   VIU2_OSD1_BLK0_CFG_W4                    (0x1e13)
+#define P_VIU2_OSD1_BLK0_CFG_W4                    (volatile unsigned int *)((0x1e13  << 2) + 0xff900000)
+#define   VIU2_OSD1_BLK1_CFG_W4                    (0x1e14)
+#define P_VIU2_OSD1_BLK1_CFG_W4                    (volatile unsigned int *)((0x1e14  << 2) + 0xff900000)
+#define   VIU2_OSD1_BLK2_CFG_W4                    (0x1e15)
+#define P_VIU2_OSD1_BLK2_CFG_W4                    (volatile unsigned int *)((0x1e15  << 2) + 0xff900000)
+#define   VIU2_OSD1_BLK3_CFG_W4                    (0x1e16)
+#define P_VIU2_OSD1_BLK3_CFG_W4                    (volatile unsigned int *)((0x1e16  << 2) + 0xff900000)
+// Bit    31 RW, burst_len_sel[2] of [2:0]
+// Bit    30 RW, byte_swap: In addition to endian control, further define
+//               whether to swap upper and lower byte within a 16-bit mem word.
+//               0=No swap; 1=Swap data[15:0] to be {data[7:0], data[15:8]}
+// Bit    29 RW, div_swap : swap the 2 64bits words in 128 bit word
+// Bit 28:24 RW, fifo_lim : when osd fifo is small than the fifo_lim*16, closed the rq port of osd_rd_mif
+// Bit 23:22 RW, fifo_ctrl: 00 : for 1 word in 1 burst , 01 : for  2words in 1burst, 10: for 4words in 1burst, 11: reserved
+// Bit 21:20 R,  fifo_st. 0=IDLE, 1=FILL, 2=ABORT
+// Bit    19 R,  fifo_overflow
+//
+// Bit 18:12 RW, fifo_depth_val, max value=64: set actual fifo depth to fifo_depth_val*8.
+// Bit 11:10 RW, burst_len_sel[1:0] of [2:0]. 0=24(default), 1=32, 2=48, 3=64, 4=96, 5=128.
+// Bit  9: 5 RW, hold_fifo_lines[4:0]
+// Bit     4 RW, clear_err: one pulse to clear fifo_overflow
+// Bit     3 RW, fifo_sync_rst
+// Bit  2: 1 RW, endian
+// Bit     0 RW, urgent
+#define   VIU2_OSD1_FIFO_CTRL_STAT                 (0x1e2b)
+#define P_VIU2_OSD1_FIFO_CTRL_STAT                 (volatile unsigned int *)((0x1e2b  << 2) + 0xff900000)
+// Bit 31:24 R, Y or R
+// Bit 23:16 R, Cb or G
+// Bit 15: 8 R, Cr or B
+// Bit  7: 0 R, Output Alpha[8:1]
+#define   VIU2_OSD1_TEST_RDDATA                    (0x1e2c)
+#define P_VIU2_OSD1_TEST_RDDATA                    (volatile unsigned int *)((0x1e2c  << 2) + 0xff900000)
+// Bit    15 RW, prot_en: 1=Borrow PROT's FIFO storage, either for rotate or non-rotate.
+// Bit 12: 0 RW, effective FIFO size when prot_en=1.
+#define   VIU2_OSD1_PROT_CTRL                      (0x1e2e)
+#define P_VIU2_OSD1_PROT_CTRL                      (volatile unsigned int *)((0x1e2e  << 2) + 0xff900000)
+//------------------------------------------------------------------------------
+// OSD2 registers
+//------------------------------------------------------------------------------
+// Bit    31 Reserved
+// Bit    30 RW, enable_free_clk: 1=use free-running clock to drive logics;
+//                                0=use gated clock for low power.
+// Bit    29 R, test_rd_dsr
+// Bit    28 R, osd_done
+// Bit 27:24 R, osd_blk_mode
+// Bit 23:22 R, osd_blk_ptr
+// Bit    21 R, osd_enable
+//
+// Bit 20:12 RW, global_alpha
+// Bit    11 RW, test_rd_en
+// Bit    10 RW, hl2_en
+// Bit     9 RW, hl1_en
+// Bit  8: 5 RW, ctrl_mtch_y
+// Bit     4 RW, ctrl_422to444
+// Bit  3: 0 RW, osd_blk_enable. Bit 0 to enable block 0: 1=enable, 0=disable;
+//                               Bit 1 to enable block 1, and so on.
+#define   VIU2_OSD2_CTRL_STAT                      (0x1e30)
+#define P_VIU2_OSD2_CTRL_STAT                      (volatile unsigned int *)((0x1e30  << 2) + 0xff900000)
+// Bit 31:26 Reserved
+// Bit 25:16 R, fifo_count
+// Bit 15: 6 Reserved
+// Bit  5: 4 RW, hold_fifo_lines[6:5]
+// Bit     3 RW, rgb2yuv_full_range
+// Bit     2 RW, alpha_9b_mode
+// Bit     1 RW, reserved
+// Bit     0 RW, color_expand_mode
+#define   VIU2_OSD2_CTRL_STAT2                     (0x1e4d)
+#define P_VIU2_OSD2_CTRL_STAT2                     (volatile unsigned int *)((0x1e4d  << 2) + 0xff900000)
+// Bit 31: 9 Reserved
+// Bit     8 RW, 0 = Write LUT, 1 = Read LUT
+// Bit  7: 0 RW, lut_addr
+#define   VIU2_OSD2_COLOR_ADDR                     (0x1e31)
+#define P_VIU2_OSD2_COLOR_ADDR                     (volatile unsigned int *)((0x1e31  << 2) + 0xff900000)
+// Bit 31:24 RW, Y or R
+// Bit 23:16 RW, Cb or G
+// Bit 15: 8 RW, Cr or B
+// Bit  7: 0 RW, Alpha
+#define   VIU2_OSD2_COLOR                          (0x1e32)
+#define P_VIU2_OSD2_COLOR                          (volatile unsigned int *)((0x1e32  << 2) + 0xff900000)
+// Bit 31:28 Reserved
+// Bit 27:16 RW, hl[1-2]_h/v_start
+// Bit 15:12 Reserved
+// Bit 11: 0 RW, hl[1-2]_h/v_end
+#define   VIU2_OSD2_HL1_H_START_END                (0x1e33)
+#define P_VIU2_OSD2_HL1_H_START_END                (volatile unsigned int *)((0x1e33  << 2) + 0xff900000)
+#define   VIU2_OSD2_HL1_V_START_END                (0x1e34)
+#define P_VIU2_OSD2_HL1_V_START_END                (volatile unsigned int *)((0x1e34  << 2) + 0xff900000)
+#define   VIU2_OSD2_HL2_H_START_END                (0x1e35)
+#define P_VIU2_OSD2_HL2_H_START_END                (volatile unsigned int *)((0x1e35  << 2) + 0xff900000)
+#define   VIU2_OSD2_HL2_V_START_END                (0x1e36)
+#define P_VIU2_OSD2_HL2_V_START_END                (volatile unsigned int *)((0x1e36  << 2) + 0xff900000)
+// Bit 31:24 RW, Y or R
+// Bit 23:16 RW, Cb or G
+// Bit 15: 8 RW, Cr or B
+// Bit  7: 0 RW, Alpha
+#define   VIU2_OSD2_TCOLOR_AG0                     (0x1e37)
+#define P_VIU2_OSD2_TCOLOR_AG0                     (volatile unsigned int *)((0x1e37  << 2) + 0xff900000)
+#define   VIU2_OSD2_TCOLOR_AG1                     (0x1e38)
+#define P_VIU2_OSD2_TCOLOR_AG1                     (volatile unsigned int *)((0x1e38  << 2) + 0xff900000)
+#define   VIU2_OSD2_TCOLOR_AG2                     (0x1e39)
+#define P_VIU2_OSD2_TCOLOR_AG2                     (volatile unsigned int *)((0x1e39  << 2) + 0xff900000)
+#define   VIU2_OSD2_TCOLOR_AG3                     (0x1e3a)
+#define P_VIU2_OSD2_TCOLOR_AG3                     (volatile unsigned int *)((0x1e3a  << 2) + 0xff900000)
+// Bit 31:24 Reserved
+// Bit 23:16 RW, tbl_addr
+// Bit    15 RW, little_endian: 0=big endian, 1=little endian
+// Bit    14 RW, rpt_y
+// Bit 13:12 RW, interp_ctrl. 0x=No interpolation; 10=Interpolate with previous
+//                            pixel; 11=Interpolate with the average value
+//                            between previous and next pixel.
+// Bit 11: 8 RW, osd_blk_mode
+// Bit     7 RW, rgb_en
+// Bit     6 RW, tc_alpha_en
+// Bit  5: 2 RW, color_matrix
+// Bit     1 RW, interlace_en
+// Bit     0 RW, interlace_sel_odd
+#define   VIU2_OSD2_BLK0_CFG_W0                    (0x1e3b)
+#define P_VIU2_OSD2_BLK0_CFG_W0                    (volatile unsigned int *)((0x1e3b  << 2) + 0xff900000)
+#define   VIU2_OSD2_BLK1_CFG_W0                    (0x1e3f)
+#define P_VIU2_OSD2_BLK1_CFG_W0                    (volatile unsigned int *)((0x1e3f  << 2) + 0xff900000)
+#define   VIU2_OSD2_BLK2_CFG_W0                    (0x1e43)
+#define P_VIU2_OSD2_BLK2_CFG_W0                    (volatile unsigned int *)((0x1e43  << 2) + 0xff900000)
+#define   VIU2_OSD2_BLK3_CFG_W0                    (0x1e47)
+#define P_VIU2_OSD2_BLK3_CFG_W0                    (volatile unsigned int *)((0x1e47  << 2) + 0xff900000)
+// Bit 31:29 Reserved
+// Bit 28:16 RW, x_end
+// Bit 15:13 Reserved
+// Bit 12: 0 RW, x_start
+#define   VIU2_OSD2_BLK0_CFG_W1                    (0x1e3c)
+#define P_VIU2_OSD2_BLK0_CFG_W1                    (volatile unsigned int *)((0x1e3c  << 2) + 0xff900000)
+#define   VIU2_OSD2_BLK1_CFG_W1                    (0x1e40)
+#define P_VIU2_OSD2_BLK1_CFG_W1                    (volatile unsigned int *)((0x1e40  << 2) + 0xff900000)
+#define   VIU2_OSD2_BLK2_CFG_W1                    (0x1e44)
+#define P_VIU2_OSD2_BLK2_CFG_W1                    (volatile unsigned int *)((0x1e44  << 2) + 0xff900000)
+#define   VIU2_OSD2_BLK3_CFG_W1                    (0x1e48)
+#define P_VIU2_OSD2_BLK3_CFG_W1                    (volatile unsigned int *)((0x1e48  << 2) + 0xff900000)
+// Bit 31:29 Reserved
+// Bit 28:16 RW, y_end
+// Bit 15:13 Reserved
+// Bit 12: 0 RW, y_start
+#define   VIU2_OSD2_BLK0_CFG_W2                    (0x1e3d)
+#define P_VIU2_OSD2_BLK0_CFG_W2                    (volatile unsigned int *)((0x1e3d  << 2) + 0xff900000)
+#define   VIU2_OSD2_BLK1_CFG_W2                    (0x1e41)
+#define P_VIU2_OSD2_BLK1_CFG_W2                    (volatile unsigned int *)((0x1e41  << 2) + 0xff900000)
+#define   VIU2_OSD2_BLK2_CFG_W2                    (0x1e45)
+#define P_VIU2_OSD2_BLK2_CFG_W2                    (volatile unsigned int *)((0x1e45  << 2) + 0xff900000)
+#define   VIU2_OSD2_BLK3_CFG_W2                    (0x1e49)
+#define P_VIU2_OSD2_BLK3_CFG_W2                    (volatile unsigned int *)((0x1e49  << 2) + 0xff900000)
+// Bit 31:28 Reserved
+// Bit 27:16 RW, h_end
+// Bit 15:12 Reserved
+// Bit 11: 0 RW, h_start
+#define   VIU2_OSD2_BLK0_CFG_W3                    (0x1e3e)
+#define P_VIU2_OSD2_BLK0_CFG_W3                    (volatile unsigned int *)((0x1e3e  << 2) + 0xff900000)
+#define   VIU2_OSD2_BLK1_CFG_W3                    (0x1e42)
+#define P_VIU2_OSD2_BLK1_CFG_W3                    (volatile unsigned int *)((0x1e42  << 2) + 0xff900000)
+#define   VIU2_OSD2_BLK2_CFG_W3                    (0x1e46)
+#define P_VIU2_OSD2_BLK2_CFG_W3                    (volatile unsigned int *)((0x1e46  << 2) + 0xff900000)
+#define   VIU2_OSD2_BLK3_CFG_W3                    (0x1e4a)
+#define P_VIU2_OSD2_BLK3_CFG_W3                    (volatile unsigned int *)((0x1e4a  << 2) + 0xff900000)
+// Bit 31:28 Reserved
+// Bit 27:16 RW, v_end
+// Bit 15:12 Reserved
+// Bit 11: 0 RW, v_start
+#define   VIU2_OSD2_BLK0_CFG_W4                    (0x1e64)
+#define P_VIU2_OSD2_BLK0_CFG_W4                    (volatile unsigned int *)((0x1e64  << 2) + 0xff900000)
+#define   VIU2_OSD2_BLK1_CFG_W4                    (0x1e65)
+#define P_VIU2_OSD2_BLK1_CFG_W4                    (volatile unsigned int *)((0x1e65  << 2) + 0xff900000)
+#define   VIU2_OSD2_BLK2_CFG_W4                    (0x1e66)
+#define P_VIU2_OSD2_BLK2_CFG_W4                    (volatile unsigned int *)((0x1e66  << 2) + 0xff900000)
+#define   VIU2_OSD2_BLK3_CFG_W4                    (0x1e67)
+#define P_VIU2_OSD2_BLK3_CFG_W4                    (volatile unsigned int *)((0x1e67  << 2) + 0xff900000)
+// Bit    31 RW, burst_len_sel[2] of [2:0]
+// Bit    30 RW, byte_swap: In addition to endian control, further define
+//               whether to swap upper and lower byte within a 16-bit mem word.
+//               0=No swap; 1=Swap data[15:0] to be {data[7:0], data[15:8]}
+// Bit    29 RW, div_swap : swap the 2 64bits words in 128 bit word
+// Bit 28:24 RW, fifo_lim : when osd fifo is small than the fifo_lim*16, closed the rq port of osd_rd_mif
+// Bit 23:22 RW, fifo_ctrl: 00 : for 1 word in 1 burst , 01 : for  2words in 1burst, 10: for 4words in 1burst, 11: reserved
+// Bit 21:20 R,  fifo_st. 0=IDLE, 1=FILL, 2=ABORT
+// Bit    19 R,  fifo_overflow
+// Bit 18:12 RW, fifo_depth_val, max value=64: set actual fifo depth to fifo_depth_val*8.
+// Bit 11:10 RW, burst_len_sel[1:0] of [2:0]. 0=24(default), 1=32, 2=48, 3=64, 4=96, 5=128.
+// Bit  9: 5 RW, hold_fifo_lines[4:0]
+// Bit     4 RW, clear_err: one pulse to clear fifo_overflow
+// Bit     3 RW, fifo_sync_rst
+// Bit  2: 1 RW, endian
+// Bit     0 RW, urgent
+#define   VIU2_OSD2_FIFO_CTRL_STAT                 (0x1e4b)
+#define P_VIU2_OSD2_FIFO_CTRL_STAT                 (volatile unsigned int *)((0x1e4b  << 2) + 0xff900000)
+// Bit 31:24 R, Y or R
+// Bit 23:16 R, Cb or G
+// Bit 15: 8 R, Cr or B
+// Bit  7: 0 R, Output Alpha[8:1]
+#define   VIU2_OSD2_TEST_RDDATA                    (0x1e4c)
+#define P_VIU2_OSD2_TEST_RDDATA                    (volatile unsigned int *)((0x1e4c  << 2) + 0xff900000)
+// Bit    15 RW, prot_en: 1=Borrow PROT's FIFO storage, either for rotate or non-rotate.
+// Bit 12: 0 RW, effective FIFO size when prot_en=1.
+#define   VIU2_OSD2_PROT_CTRL                      (0x1e4e)
+#define P_VIU2_OSD2_PROT_CTRL                      (volatile unsigned int *)((0x1e4e  << 2) + 0xff900000)
+//------------------------------------------------------------------------------
+// VD1 path
+//------------------------------------------------------------------------------
+#define   VIU2_VD1_IF0_GEN_REG                     (0x1e50)
+#define P_VIU2_VD1_IF0_GEN_REG                     (volatile unsigned int *)((0x1e50  << 2) + 0xff900000)
+#define   VIU2_VD1_IF0_CANVAS0                     (0x1e51)
+#define P_VIU2_VD1_IF0_CANVAS0                     (volatile unsigned int *)((0x1e51  << 2) + 0xff900000)
+#define   VIU2_VD1_IF0_CANVAS1                     (0x1e52)
+#define P_VIU2_VD1_IF0_CANVAS1                     (volatile unsigned int *)((0x1e52  << 2) + 0xff900000)
+#define   VIU2_VD1_IF0_LUMA_X0                     (0x1e53)
+#define P_VIU2_VD1_IF0_LUMA_X0                     (volatile unsigned int *)((0x1e53  << 2) + 0xff900000)
+#define   VIU2_VD1_IF0_LUMA_Y0                     (0x1e54)
+#define P_VIU2_VD1_IF0_LUMA_Y0                     (volatile unsigned int *)((0x1e54  << 2) + 0xff900000)
+#define   VIU2_VD1_IF0_CHROMA_X0                   (0x1e55)
+#define P_VIU2_VD1_IF0_CHROMA_X0                   (volatile unsigned int *)((0x1e55  << 2) + 0xff900000)
+#define   VIU2_VD1_IF0_CHROMA_Y0                   (0x1e56)
+#define P_VIU2_VD1_IF0_CHROMA_Y0                   (volatile unsigned int *)((0x1e56  << 2) + 0xff900000)
+#define   VIU2_VD1_IF0_LUMA_X1                     (0x1e57)
+#define P_VIU2_VD1_IF0_LUMA_X1                     (volatile unsigned int *)((0x1e57  << 2) + 0xff900000)
+#define   VIU2_VD1_IF0_LUMA_Y1                     (0x1e58)
+#define P_VIU2_VD1_IF0_LUMA_Y1                     (volatile unsigned int *)((0x1e58  << 2) + 0xff900000)
+#define   VIU2_VD1_IF0_CHROMA_X1                   (0x1e59)
+#define P_VIU2_VD1_IF0_CHROMA_X1                   (volatile unsigned int *)((0x1e59  << 2) + 0xff900000)
+#define   VIU2_VD1_IF0_CHROMA_Y1                   (0x1e5a)
+#define P_VIU2_VD1_IF0_CHROMA_Y1                   (volatile unsigned int *)((0x1e5a  << 2) + 0xff900000)
+#define   VIU2_VD1_IF0_RPT_LOOP                    (0x1e5b)
+#define P_VIU2_VD1_IF0_RPT_LOOP                    (volatile unsigned int *)((0x1e5b  << 2) + 0xff900000)
+#define   VIU2_VD1_IF0_LUMA0_RPT_PAT               (0x1e5c)
+#define P_VIU2_VD1_IF0_LUMA0_RPT_PAT               (volatile unsigned int *)((0x1e5c  << 2) + 0xff900000)
+#define   VIU2_VD1_IF0_CHROMA0_RPT_PAT             (0x1e5d)
+#define P_VIU2_VD1_IF0_CHROMA0_RPT_PAT             (volatile unsigned int *)((0x1e5d  << 2) + 0xff900000)
+#define   VIU2_VD1_IF0_LUMA1_RPT_PAT               (0x1e5e)
+#define P_VIU2_VD1_IF0_LUMA1_RPT_PAT               (volatile unsigned int *)((0x1e5e  << 2) + 0xff900000)
+#define   VIU2_VD1_IF0_CHROMA1_RPT_PAT             (0x1e5f)
+#define P_VIU2_VD1_IF0_CHROMA1_RPT_PAT             (volatile unsigned int *)((0x1e5f  << 2) + 0xff900000)
+#define   VIU2_VD1_IF0_LUMA_PSEL                   (0x1e60)
+#define P_VIU2_VD1_IF0_LUMA_PSEL                   (volatile unsigned int *)((0x1e60  << 2) + 0xff900000)
+#define   VIU2_VD1_IF0_CHROMA_PSEL                 (0x1e61)
+#define P_VIU2_VD1_IF0_CHROMA_PSEL                 (volatile unsigned int *)((0x1e61  << 2) + 0xff900000)
+#define   VIU2_VD1_IF0_DUMMY_PIXEL                 (0x1e62)
+#define P_VIU2_VD1_IF0_DUMMY_PIXEL                 (volatile unsigned int *)((0x1e62  << 2) + 0xff900000)
+#define   VIU2_VD1_IF0_LUMA_FIFO_SIZE              (0x1e63)
+#define P_VIU2_VD1_IF0_LUMA_FIFO_SIZE              (volatile unsigned int *)((0x1e63  << 2) + 0xff900000)
+#define   VIU2_VD1_IF0_RANGE_MAP_Y                 (0x1e6a)
+#define P_VIU2_VD1_IF0_RANGE_MAP_Y                 (volatile unsigned int *)((0x1e6a  << 2) + 0xff900000)
+#define   VIU2_VD1_IF0_RANGE_MAP_CB                (0x1e6b)
+#define P_VIU2_VD1_IF0_RANGE_MAP_CB                (volatile unsigned int *)((0x1e6b  << 2) + 0xff900000)
+#define   VIU2_VD1_IF0_RANGE_MAP_CR                (0x1e6c)
+#define P_VIU2_VD1_IF0_RANGE_MAP_CR                (volatile unsigned int *)((0x1e6c  << 2) + 0xff900000)
+#define   VIU2_VD1_IF0_GEN_REG2                    (0x1e6d)
+#define P_VIU2_VD1_IF0_GEN_REG2                    (volatile unsigned int *)((0x1e6d  << 2) + 0xff900000)
+#define   VIU2_VD1_IF0_PROT_CNTL                   (0x1e6e)
+#define P_VIU2_VD1_IF0_PROT_CNTL                   (volatile unsigned int *)((0x1e6e  << 2) + 0xff900000)
+#define   VIU2_VD1_IF0_URGENT_CTRL                 (0x1e6f)
+#define P_VIU2_VD1_IF0_URGENT_CTRL                 (volatile unsigned int *)((0x1e6f  << 2) + 0xff900000)
+//Bit 31    it true, disable clock, otherwise enable clock
+//Bit 30    soft rst bit
+//Bit 28    if true, horizontal formatter use repeating to generete pixel, otherwise use bilinear interpolation
+//Bit 27:24 horizontal formatter initial phase
+//Bit 23    horizontal formatter repeat pixel 0 enable
+//Bit 22:21 horizontal Y/C ratio, 00: 1:1, 01: 2:1, 10: 4:1
+//Bit 20    horizontal formatter enable
+//Bit 19    if true, always use phase0 while vertical formater, meaning always
+//          repeat data, no interpolation
+//Bit 18    if true, disable vertical formatter chroma repeat last line
+//Bit 17    veritcal formatter dont need repeat line on phase0, 1: enable, 0: disable
+//Bit 16    veritcal formatter repeat line 0 enable
+//Bit 15:12 vertical formatter skip line num at the beginning
+//Bit 11:8  vertical formatter initial phase
+//Bit 7:1   vertical formatter phase step (3.4)
+//Bit 0     vertical formatter enable
+#define   VIU2_VD1_FMT_CTRL                        (0x1e68)
+#define P_VIU2_VD1_FMT_CTRL                        (volatile unsigned int *)((0x1e68  << 2) + 0xff900000)
+//Bit 27:16  horizontal formatter width
+//Bit 11:0   vertical formatter width
+#define   VIU2_VD1_FMT_W                           (0x1e69)
+#define P_VIU2_VD1_FMT_W                           (volatile unsigned int *)((0x1e69  << 2) + 0xff900000)
+#define   VIU2_VD1_IF0_GEN_REG3                    (0x1e70)
+#define P_VIU2_VD1_IF0_GEN_REG3                    (volatile unsigned int *)((0x1e70  << 2) + 0xff900000)
+//bit 31:1,  reversed
+//bit 0,     cntl_64bit_rev
+// synopsys translate_off
+// synopsys translate_on
+//
+// Closing file:  v2regs.h
+//
+//`define VIUB_VCBUS_BASE                8'h20
+//
+// Reading file:  vregs_clk1.h
+//
+//===========================================================================
+// Video Interface Registers    0xa00 - 0xaff
+//===========================================================================
+// -----------------------------------------------
+// CBUS_BASE:  VIUB_VCBUS_BASE = 0x20
+// -----------------------------------------------
+#define   VIUB_ADDR_START                          (0x2000)
+#define P_VIUB_ADDR_START                          (volatile unsigned int *)((0x2000  << 2) + 0xff900000)
+#define   VIUB_ADDR_END                            (0x20ff)
+#define P_VIUB_ADDR_END                            (volatile unsigned int *)((0x20ff  << 2) + 0xff900000)
+//`define TRACE_REG 8'ff
+//------------------------------------------------------------------------------
+// VIU top-level registers
+//------------------------------------------------------------------------------
+// Bit  0 RW, osd1_reset
+// Bit  1 RW, osd2_reset
+// Bit  2 RW, vd1_reset
+// Bit  3 RW, vd1_fmt_reset
+// Bit  4 RW, vd2_reset
+// Bit  5 RW, vd2_fmt_reset
+// Bit  6 RW, di_dsr1to2_reset
+// Bit  7 RW, vpp_reset
+// Bit  8 RW, di_if1_reset
+// Bit  9 RW, di_if1_fmt_reset
+// Bit 10 RW, di_inp_reset
+// Bit 11 RW, di_inp_fmt_reset
+// Bit 12 RW, di_mem_reset
+// Bit 13 RW, di_mem_fmt_reset
+// Bit 14 RW, di_nr_wr_mif_reset
+// Bit 15 RW, dein_wr_mif_reset
+// Bit 16 RW, di_chan2_mif_reset
+// Bit 17 RW, di_mtn_wr_mif_reset
+// Bit 18 RW, di_mtn_rd_mif_reset
+// Bit 19 RW, di_mad_reset
+// Bit 20 RW, vdin0_reset
+// Bit 21 RW, vdin1_reset
+// Bit 22 RW, nrin_mux_reset
+// Bit 23 RW, vdin0_wr_reset
+// Bit 24 RW, vdin1_wr_reset
+// Bit 25 RW, reserved
+// Bit 26 RW, d2d3_reset
+// Bit 27 RW, di_cont_wr_mif_reset
+// Bit 28 RW, di_cont_rd_mif_reset
+#define   VIUB_SW_RESET                            (0x2001)
+#define P_VIUB_SW_RESET                            (volatile unsigned int *)((0x2001  << 2) + 0xff900000)
+#define   VIUB_SW_RESET0                           (0x2002)
+#define P_VIUB_SW_RESET0                           (volatile unsigned int *)((0x2002  << 2) + 0xff900000)
+// Bit 0 RW, software reset for mcvecrd_mif
+// Bit 1 RW, software reset for mcinfowr_mif
+// Bit 2 RW, software reset for mcinford_mif
+//bit 8 if true, vsync interrup is generate only field == 0
+//bit 7:0 fix_disable
+#define   VIUB_MISC_CTRL0                          (0x2006)
+#define P_VIUB_MISC_CTRL0                          (volatile unsigned int *)((0x2006  << 2) + 0xff900000)
+#define   VIUB_GCLK_CTRL0                          (0x2007)
+#define P_VIUB_GCLK_CTRL0                          (volatile unsigned int *)((0x2007  << 2) + 0xff900000)
+//// gclk_ctrl0_gl[ 0] : def=1 di_top_wrap clk enable
+////
+//// gclk_ctrl0_gl[ 8] : def=0 mad pre clock enable, from mad clock
+//// gclk_ctrl0_gl[ 9] : def=0 mad post clock enable, from mad clock
+//// gclk_ctrl0_gl[10] : def=0 div clock enable, di slow clock including di&mcdi
+//// gclk_ctrl0_gl[11] : def=0 mcdi clock enable, from div clock
+//// gclk_ctrl0_gl[12] : def=0 di post clock enable, from div clock
+//// gclk_ctrl0_gl[13] : def=0 reserved
+//// gclk_ctrl0_gl[14] : def=1 di_no_clk_gate, for old di
+//// gclk_ctrl0_gl[15] : def=0 di_gate_all, for old di
+#define   VIUB_GCLK_CTRL1                          (0x2008)
+#define P_VIUB_GCLK_CTRL1                          (volatile unsigned int *)((0x2008  << 2) + 0xff900000)
+//// gclk_ctrl1_gl[ 1: 0] : def=2'b00 mif-sub-arb clock gate ctrl [1]: clock valid, [0]: clock close
+//// gclk_ctrl1_gl[ 3: 2] : def=2'b00 if1 rdmif clock gate ctrl [1]: clock valid, [0]: clock close
+//// gclk_ctrl1_gl[ 5: 4] : def=2'b00 if2 rdmif clock gate ctrl [1]: clock valid, [0]: clock close
+//// gclk_ctrl1_gl[ 7: 6] : def=2'b00 de wrmif clock gate ctrl [1]: clock valid, [0]: clock close
+//// gclk_ctrl1_gl[ 9: 8] : def=2'b00 mtnrd post mif clock gate ctrl [1]: clock valid, [0]: clock close
+//// gclk_ctrl1_gl[11:10] : def=2'b00 mcdi post mif clock gate ctrl [1]: clock valid, [0]: clock close
+//// gclk_ctrl1_gl[17:16] : def=2'b00 inp rdmif clock gate ctrl [1]: clock valid, [0]: clock close
+//// gclk_ctrl1_gl[19:18] : def=2'b00 mem rdmif clock gate ctrl [1]: clock valid, [0]: clock close
+//// gclk_ctrl1_gl[21:20] : def=2'b00 chan rdmif clock gate ctrl [1]: clock valid, [0]: clock close
+//// gclk_ctrl1_gl[23:22] : def=2'b00 nr wrmif clock gate ctrl [1]: clock valid, [0]: clock close
+//// gclk_ctrl1_gl[25:24] : def=2'b00 mtn mif clock gate ctrl [1]: clock valid, [0]: clock close
+//// gclk_ctrl1_gl[27:26] : def=2'b00 mcdi pre mif clock gate ctrl [1]: clock valid, [0]: clock close
+////
+#define   VIUB_GCLK_CTRL2                          (0x2009)
+#define P_VIUB_GCLK_CTRL2                          (volatile unsigned int *)((0x2009  << 2) + 0xff900000)
+//// gclk_ctrl_pre[ 1: 0] : def=2'b00 nr clock gate ctrl [1]: clock valid, [0]: clock close
+//// gclk_ctrl_pre[ 3: 2] : def=2'b00 pd clock gate ctrl [1]: clock valid, [0]: clock close
+//// gclk_ctrl_pre[ 5: 4] : def=2'b00 mtn det clock gate ctrl [1]: clock valid, [0]: clock close
+//// gclk_ctrl_pre[ 7: 6] : def=2'b00 debanding clock gate ctrl [1]: clock valid, [0]: clock close
+//// gclk_ctrl_pre[ 9: 8] : def=2'b00 dnr clock gate ctrl [1]: clock valid, [0]: clock close
+//// gclk_ctrl_pre[11:10] : def=2'b00 nr&dnr blend clock gate ctrl [1]: clock valid, [0]: clock close
+//// gclk_ctrl_pre[13:12] : def=2'b00 mcdi clock gate ctrl [1]: clock valid, [0]: clock close
+#define   VIUB_GCLK_CTRL3                          (0x200a)
+#define P_VIUB_GCLK_CTRL3                          (volatile unsigned int *)((0x200a  << 2) + 0xff900000)
+//// gclk_ctrl_post[ 1: 0] : def=2'b00 di blend clock gate ctrl [1]: clock valid, [0]: clock close
+//// gclk_ctrl_post[ 3: 2] : def=2'b00 ei clock gate ctrl [1]: clock valid, [0]: clock close
+//// gclk_ctrl_post[ 5: 4] : def=2'b00 ei_0 clock gate ctrl [1]: clock valid, [0]: clock close
+#define   DI_IF2_GEN_REG                           (0x2010)
+#define P_DI_IF2_GEN_REG                           (volatile unsigned int *)((0x2010  << 2) + 0xff900000)
+#define   DI_IF2_CANVAS0                           (0x2011)
+#define P_DI_IF2_CANVAS0                           (volatile unsigned int *)((0x2011  << 2) + 0xff900000)
+#define   DI_IF2_LUMA_X0                           (0x2012)
+#define P_DI_IF2_LUMA_X0                           (volatile unsigned int *)((0x2012  << 2) + 0xff900000)
+#define   DI_IF2_LUMA_Y0                           (0x2013)
+#define P_DI_IF2_LUMA_Y0                           (volatile unsigned int *)((0x2013  << 2) + 0xff900000)
+#define   DI_IF2_CHROMA_X0                         (0x2014)
+#define P_DI_IF2_CHROMA_X0                         (volatile unsigned int *)((0x2014  << 2) + 0xff900000)
+#define   DI_IF2_CHROMA_Y0                         (0x2015)
+#define P_DI_IF2_CHROMA_Y0                         (volatile unsigned int *)((0x2015  << 2) + 0xff900000)
+#define   DI_IF2_RPT_LOOP                          (0x2016)
+#define P_DI_IF2_RPT_LOOP                          (volatile unsigned int *)((0x2016  << 2) + 0xff900000)
+#define   DI_IF2_LUMA0_RPT_PAT                     (0x2017)
+#define P_DI_IF2_LUMA0_RPT_PAT                     (volatile unsigned int *)((0x2017  << 2) + 0xff900000)
+#define   DI_IF2_CHROMA0_RPT_PAT                   (0x2018)
+#define P_DI_IF2_CHROMA0_RPT_PAT                   (volatile unsigned int *)((0x2018  << 2) + 0xff900000)
+#define   DI_IF2_DUMMY_PIXEL                       (0x2019)
+#define P_DI_IF2_DUMMY_PIXEL                       (volatile unsigned int *)((0x2019  << 2) + 0xff900000)
+#define   DI_IF2_LUMA_FIFO_SIZE                    (0x201a)
+#define P_DI_IF2_LUMA_FIFO_SIZE                    (volatile unsigned int *)((0x201a  << 2) + 0xff900000)
+#define   DI_IF2_RANGE_MAP_Y                       (0x201b)
+#define P_DI_IF2_RANGE_MAP_Y                       (volatile unsigned int *)((0x201b  << 2) + 0xff900000)
+#define   DI_IF2_RANGE_MAP_CB                      (0x201c)
+#define P_DI_IF2_RANGE_MAP_CB                      (volatile unsigned int *)((0x201c  << 2) + 0xff900000)
+#define   DI_IF2_RANGE_MAP_CR                      (0x201d)
+#define P_DI_IF2_RANGE_MAP_CR                      (volatile unsigned int *)((0x201d  << 2) + 0xff900000)
+#define   DI_IF2_GEN_REG2                          (0x201e)
+#define P_DI_IF2_GEN_REG2                          (volatile unsigned int *)((0x201e  << 2) + 0xff900000)
+#define   DI_IF2_FMT_CTRL                          (0x201f)
+#define P_DI_IF2_FMT_CTRL                          (volatile unsigned int *)((0x201f  << 2) + 0xff900000)
+#define   DI_IF2_FMT_W                             (0x2020)
+#define P_DI_IF2_FMT_W                             (volatile unsigned int *)((0x2020  << 2) + 0xff900000)
+#define   DI_IF2_URGENT_CTRL                       (0x2021)
+#define P_DI_IF2_URGENT_CTRL                       (volatile unsigned int *)((0x2021  << 2) + 0xff900000)
+//bit15, auto enable; bit14, canvas write mode ;7:4, high threshold ;3:0 , low threshold  for di inp chroma path
+//bit31, auto enable; bit30, canvas write mode ;23:20, high threshold ;19:16 , low threshold  for di inp luma path
+#define   DI_IF2_GEN_REG3                          (0x2022)
+#define P_DI_IF2_GEN_REG3                          (volatile unsigned int *)((0x2022  << 2) + 0xff900000)
+//bit 31:1,  reversed
+//bit 0,     cntl_64bit_rev
+#define   DI_IF1_URGENT_CTRL                       (0x20a3)
+#define P_DI_IF1_URGENT_CTRL                       (volatile unsigned int *)((0x20a3  << 2) + 0xff900000)
+//bit15, auto enable; bit14, canvas write mode ;7:4, high threshold ;3:0 , low threshold  for di inp chroma path
+//bit31, auto enable; bit30, canvas write mode ;23:20, high threshold ;19:16 , low threshold  for di inp luma path
+#define   DI_INP_URGENT_CTRL                       (0x20a4)
+#define P_DI_INP_URGENT_CTRL                       (volatile unsigned int *)((0x20a4  << 2) + 0xff900000)
+//bit15, auto enable; bit14, canvas write mode ;7:4, high threshold ;3:0 , low threshold  for di mem chroma path
+//bit31, auto enable; bit30, canvas write mode ;23:20, high threshold ;19:16 , low threshold  for di mem luma path
+#define   DI_MEM_URGENT_CTRL                       (0x20a5)
+#define P_DI_MEM_URGENT_CTRL                       (volatile unsigned int *)((0x20a5  << 2) + 0xff900000)
+//bit15, auto enable; bit14, canvas write mode ;7:4, high threshold ;3:0 , low threshold  for di chan2 chroma path
+//bit31, auto enable; bit30, canvas write mode ;23:20, high threshold ;19:16 , low threshold  for di chan2 luma path
+#define   DI_CHAN2_URGENT_CTRL                     (0x20a6)
+#define P_DI_CHAN2_URGENT_CTRL                     (volatile unsigned int *)((0x20a6  << 2) + 0xff900000)
+#define   DI_IF1_GEN_REG3                          (0x20a7)
+#define P_DI_IF1_GEN_REG3                          (volatile unsigned int *)((0x20a7  << 2) + 0xff900000)
+//bit 31:1,  reversed
+//bit 0,     cntl_64bit_rev
+#define   DI_INP_GEN_REG3                          (0x20a8)
+#define P_DI_INP_GEN_REG3                          (volatile unsigned int *)((0x20a8  << 2) + 0xff900000)
+//bit 31:1,  reversed
+//bit 0,     cntl_64bit_rev
+#define   DI_MEM_GEN_REG3                          (0x20a9)
+#define P_DI_MEM_GEN_REG3                          (volatile unsigned int *)((0x20a9  << 2) + 0xff900000)
+//bit 31:1,  reversed
+//bit 0,     cntl_64bit_rev
+#define   DI_CHAN2_GEN_REG3                        (0x20aa)
+#define P_DI_CHAN2_GEN_REG3                        (volatile unsigned int *)((0x20aa  << 2) + 0xff900000)
+//bit 31:1,  reversed
+//bit 0,     cntl_64bit_rev
+//
+// Closing file:  vregs_clk1.h
+//
+//======================================================================
+//   vpu  register.
+//======================================================================
+// -----------------------------------------------
+// CBUS_BASE:  VPU_VCBUS_BASE = 0x27
+// -----------------------------------------------
+#define   VPU_OSD1_MMC_CTRL                        (0x2701)
+#define P_VPU_OSD1_MMC_CTRL                        (volatile unsigned int *)((0x2701  << 2) + 0xff900000)
+#define   VPU_OSD2_MMC_CTRL                        (0x2702)
+#define P_VPU_OSD2_MMC_CTRL                        (volatile unsigned int *)((0x2702  << 2) + 0xff900000)
+#define   VPU_VD1_MMC_CTRL                         (0x2703)
+#define P_VPU_VD1_MMC_CTRL                         (volatile unsigned int *)((0x2703  << 2) + 0xff900000)
+#define   VPU_VD2_MMC_CTRL                         (0x2704)
+#define P_VPU_VD2_MMC_CTRL                         (volatile unsigned int *)((0x2704  << 2) + 0xff900000)
+#define   VPU_DI_IF1_MMC_CTRL                      (0x2705)
+#define P_VPU_DI_IF1_MMC_CTRL                      (volatile unsigned int *)((0x2705  << 2) + 0xff900000)
+#define   VPU_DI_MEM_MMC_CTRL                      (0x2706)
+#define P_VPU_DI_MEM_MMC_CTRL                      (volatile unsigned int *)((0x2706  << 2) + 0xff900000)
+#define   VPU_DI_INP_MMC_CTRL                      (0x2707)
+#define P_VPU_DI_INP_MMC_CTRL                      (volatile unsigned int *)((0x2707  << 2) + 0xff900000)
+#define   VPU_DI_MTNRD_MMC_CTRL                    (0x2708)
+#define P_VPU_DI_MTNRD_MMC_CTRL                    (volatile unsigned int *)((0x2708  << 2) + 0xff900000)
+#define   VPU_DI_CHAN2_MMC_CTRL                    (0x2709)
+#define P_VPU_DI_CHAN2_MMC_CTRL                    (volatile unsigned int *)((0x2709  << 2) + 0xff900000)
+#define   VPU_DI_MTNWR_MMC_CTRL                    (0x270a)
+#define P_VPU_DI_MTNWR_MMC_CTRL                    (volatile unsigned int *)((0x270a  << 2) + 0xff900000)
+#define   VPU_DI_NRWR_MMC_CTRL                     (0x270b)
+#define P_VPU_DI_NRWR_MMC_CTRL                     (volatile unsigned int *)((0x270b  << 2) + 0xff900000)
+#define   VPU_DI_DIWR_MMC_CTRL                     (0x270c)
+#define P_VPU_DI_DIWR_MMC_CTRL                     (volatile unsigned int *)((0x270c  << 2) + 0xff900000)
+#define   VPU_VDIN0_MMC_CTRL                       (0x270d)
+#define P_VPU_VDIN0_MMC_CTRL                       (volatile unsigned int *)((0x270d  << 2) + 0xff900000)
+#define   VPU_VDIN1_MMC_CTRL                       (0x270e)
+#define P_VPU_VDIN1_MMC_CTRL                       (volatile unsigned int *)((0x270e  << 2) + 0xff900000)
+#define   VPU_BT656_MMC_CTRL                       (0x270f)
+#define P_VPU_BT656_MMC_CTRL                       (volatile unsigned int *)((0x270f  << 2) + 0xff900000)
+#define   VPU_TVD3D_MMC_CTRL                       (0x2710)
+#define P_VPU_TVD3D_MMC_CTRL                       (volatile unsigned int *)((0x2710  << 2) + 0xff900000)
+#define   VPU_TVDVBI_MMC_CTRL                      (0x2711)
+#define P_VPU_TVDVBI_MMC_CTRL                      (volatile unsigned int *)((0x2711  << 2) + 0xff900000)
+//Read only
+//`define     VPU_TVDVBI_VSLATCH_ADDR   8'h12
+//Read only
+//`define     VPU_TVDVBI_WRRSP_ADDR 8'h13
+#define   VPU_VDIN_PRE_ARB_CTRL                    (0x2714)
+#define P_VPU_VDIN_PRE_ARB_CTRL                    (volatile unsigned int *)((0x2714  << 2) + 0xff900000)
+#define   VPU_VDISP_PRE_ARB_CTRL                   (0x2715)
+#define P_VPU_VDISP_PRE_ARB_CTRL                   (volatile unsigned int *)((0x2715  << 2) + 0xff900000)
+#define   VPU_VPUARB2_PRE_ARB_CTRL                 (0x2716)
+#define P_VPU_VPUARB2_PRE_ARB_CTRL                 (volatile unsigned int *)((0x2716  << 2) + 0xff900000)
+#define   VPU_OSD3_MMC_CTRL                        (0x2717)
+#define P_VPU_OSD3_MMC_CTRL                        (volatile unsigned int *)((0x2717  << 2) + 0xff900000)
+#define   VPU_OSD4_MMC_CTRL                        (0x2718)
+#define P_VPU_OSD4_MMC_CTRL                        (volatile unsigned int *)((0x2718  << 2) + 0xff900000)
+#define   VPU_VD3_MMC_CTRL                         (0x2719)
+#define P_VPU_VD3_MMC_CTRL                         (volatile unsigned int *)((0x2719  << 2) + 0xff900000)
+// [31:11] Reserved.
+// [10: 8] cntl_viu_vdin_sel_data. Select VIU to VDIN data path, must clear it first before changing the path selection:
+//          3'b000=Disable VIU to VDIN path;
+//          3'b001=Enable VIU of ENC_I domain to VDIN;
+//          3'b010=Enable VIU of ENC_P domain to VDIN;
+//          3'b100=Enable VIU of ENC_T domain to VDIN;
+// [ 6: 4] cntl_viu_vdin_sel_clk. Select which clock to VDIN path, must clear it first before changing the clock:
+//          3'b000=Disable VIU to VDIN clock;
+//          3'b001=Select encI clock to VDIN;
+//          3'b010=Select encP clock to VDIN;
+//          3'b100=Select encT clock to VDIN;
+// [ 3: 2] cntl_viu2_sel_venc. Select which one of the encI/P/T that VIU2 connects to:
+//         0=No connection, 1=ENCI, 2=ENCP, 3=ENCT.
+// [ 1: 0] cntl_viu1_sel_venc. Select which one of the encI/P/T that VIU1 connects to:
+//         0=No connection, 1=ENCI, 2=ENCP, 3=ENCT.
+#define   VPU_VIU_VENC_MUX_CTRL                    (0x271a)
+#define P_VPU_VIU_VENC_MUX_CTRL                    (volatile unsigned int *)((0x271a  << 2) + 0xff900000)
+// [15:12] rd_rate. 0=A read every clk2; 1=A read every 2 clk2; ...; 15=A read every 16 clk2.
+// [11: 8] wr_rate. 0=A write every clk1; 1=A write every 2 clk1; ...; 15=A write every 16 clk1.
+// [ 7: 5] data_comp_map. Input data is CrYCb(BRG), map the output data to desired format:
+//                          0=output CrYCb(BRG);
+//                          1=output YCbCr(RGB);
+//                          2=output YCrCb(RBG);
+//                          3=output CbCrY(GBR);
+//                          4=output CbYCr(GRB);
+//                          5=output CrCbY(BGR);
+//                          6,7=Rsrv.
+// [    4] inv_dvi_clk. 1=Invert clock to external DVI, (clock invertion exists at internal HDMI).
+// [    3] inv_vsync. 1=Invert Vsync polarity.
+// [    2] inv_hsync. 1=Invert Hsync polarity.
+// [ 1: 0] src_sel. 0=Disable output to HDMI; 1=Select VENC_I output to HDMI; 2=Select VENC_P output.
+#define   VPU_HDMI_SETTING                         (0x271b)
+#define P_VPU_HDMI_SETTING                         (volatile unsigned int *)((0x271b  << 2) + 0xff900000)
+#define   ENCI_INFO_READ                           (0x271c)
+#define P_ENCI_INFO_READ                           (volatile unsigned int *)((0x271c  << 2) + 0xff900000)
+#define   ENCP_INFO_READ                           (0x271d)
+#define P_ENCP_INFO_READ                           (volatile unsigned int *)((0x271d  << 2) + 0xff900000)
+#define   ENCT_INFO_READ                           (0x271e)
+#define P_ENCT_INFO_READ                           (volatile unsigned int *)((0x271e  << 2) + 0xff900000)
+#define   ENCL_INFO_READ                           (0x271f)
+#define P_ENCL_INFO_READ                           (volatile unsigned int *)((0x271f  << 2) + 0xff900000)
+// Bit  0 RW, viu_rst_n
+// Bit  1 RW, vdin_mmc_arb_rst_n
+// Bit  2 RW, vdisp_mmc_arb_rst_n
+// Bit  3 RW, vpuarb2_mmc_arb_rst_n
+#define   VPU_SW_RESET                             (0x2720)
+#define P_VPU_SW_RESET                             (volatile unsigned int *)((0x2720  << 2) + 0xff900000)
+//Bit 30     d2d3_depr_req_sel,  0:vdisp_pre_arb, 1: vpuarb2_pre_arb
+//Bit 27:22  d2d3_depr_brst_num
+//Bit 21:16  d2d3_depr_id
+//Bit 14     d2d3_depw_req_sel, 0: vdin_pre_arb, 1: vdisp_pre_arb
+//Bit 11:6   d2d3_depw_brst_num
+//Bit 5:0    d2d3_depw_id
+#define   VPU_D2D3_MMC_CTRL                        (0x2721)
+#define P_VPU_D2D3_MMC_CTRL                        (volatile unsigned int *)((0x2721  << 2) + 0xff900000)
+//Bit 30     mtn_contrd_req_pre,  0:disp1_arb, 1: vdin_pre_arb
+//Bit 27:22  mtn_contrd_brst_num
+//Bit 21:16  mtn_contrd_id
+//Bit 14     mtn_contwr_req_pre, 0: vdisp1_arb, 1: vdin_pre_arb
+//Bit 11:6   mtn_contwr_brst_num
+//Bit 5:0    mtn_contwr_id
+#define   VPU_CONT_MMC_CTRL                        (0x2722)
+#define P_VPU_CONT_MMC_CTRL                        (volatile unsigned int *)((0x2722  << 2) + 0xff900000)
+// Bit  6 RW, gclk_mpeg_vpu_misc
+// Bit  5 RW, gclk_mpeg_venc_l_top
+// Bit  4 RW, gclk_mpeg_vencl_int
+// Bit  3 RW, gclk_mpeg_vencp_int
+// Bit  2 RW, gclk_mpeg_vi2_top
+// Bit  1 RW, gclk_mpeg_vi_top
+// Bit  0 RW, gclk_mpeg_venc_p_top
+#define   VPU_CLK_GATE                             (0x2723)
+#define P_VPU_CLK_GATE                             (volatile unsigned int *)((0x2723  << 2) + 0xff900000)
+//Bit    12 RW, rdma_pre
+//Bit 11: 6 RW, rdma_num
+//Bit  5: 0 RW, rdma_id
+#define   VPU_RDMA_MMC_CTRL                        (0x2724)
+#define P_VPU_RDMA_MMC_CTRL                        (volatile unsigned int *)((0x2724  << 2) + 0xff900000)
+#define   VPU_MEM_PD_REG0                          (0x2725)
+#define P_VPU_MEM_PD_REG0                          (volatile unsigned int *)((0x2725  << 2) + 0xff900000)
+#define   VPU_MEM_PD_REG1                          (0x2726)
+#define P_VPU_MEM_PD_REG1                          (volatile unsigned int *)((0x2726  << 2) + 0xff900000)
+// [   31] hdmi_data_ovr_en: 1=Enable overriding data input to HDMI TX with hdmi_data_ovr[29:0]. 0=No override. Default 0.
+// [   30] Reserved.                                                                                            Default 0
+// [29: 0] hdmi_data_ovr.                                                                                       Default 0.
+#define   VPU_HDMI_DATA_OVR                        (0x2727)
+#define P_VPU_HDMI_DATA_OVR                        (volatile unsigned int *)((0x2727  << 2) + 0xff900000)
+//Bit    15 RW, prot1_sel_osd4
+//Bit    14 RW, prot1_sel_osd3
+//Bit    13 RW, prot1_sel_osd2
+//Bit    12 RW, prot1_sel_osd1
+//Bit 11: 6 RW, prot1_brst_num
+//Bit  5: 0 RW, prot1_id
+#define   VPU_PROT1_MMC_CTRL                       (0x2728)
+#define P_VPU_PROT1_MMC_CTRL                       (volatile unsigned int *)((0x2728  << 2) + 0xff900000)
+//Bit    14 RW, prot2_sel_vd3
+//Bit    13 RW, prot2_sel_vd2
+//Bit    12 RW, prot2_sel_vd1
+//Bit 11: 6 RW, prot2_brst_num
+//Bit  5: 0 RW, prot2_id
+#define   VPU_PROT2_MMC_CTRL                       (0x2729)
+#define P_VPU_PROT2_MMC_CTRL                       (volatile unsigned int *)((0x2729  << 2) + 0xff900000)
+//Bit    14 RW, prot3_sel_vd3
+//Bit    13 RW, prot3_sel_vd2
+//Bit    12 RW, prot3_sel_vd1
+//Bit 11: 6 RW, prot3_brst_num
+//Bit  5: 0 RW, prot3_id
+#define   VPU_PROT3_MMC_CTRL                       (0x272a)
+#define P_VPU_PROT3_MMC_CTRL                       (volatile unsigned int *)((0x272a  << 2) + 0xff900000)
+//Bit 29:24 RW, s3_brst_num
+//Bit 21:16 RW, s2_brst_num
+//Bit 13: 8 RW, s1_brst_num
+//Bit  5: 0 RW, s0_brst_num
+#define   VPU_ARB4_V1_MMC_CTRL                     (0x272b)
+#define P_VPU_ARB4_V1_MMC_CTRL                     (volatile unsigned int *)((0x272b  << 2) + 0xff900000)
+//Bit 29:24 RW, s3_brst_num
+//Bit 21:16 RW, s2_brst_num
+//Bit 13: 8 RW, s1_brst_num
+//Bit  5: 0 RW, s0_brst_num
+#define   VPU_ARB4_V2_MMC_CTRL                     (0x272c)
+#define P_VPU_ARB4_V2_MMC_CTRL                     (volatile unsigned int *)((0x272c  << 2) + 0xff900000)
+//Bit 27:22 RW, mcvecwr_num
+//Bit 21:16 RW, mcvecwr_id
+//Bit 11:6  RW, mcvecrd_num
+//Bit 5:0   RW, mcvecrd_id
+#define   VPU_MCVEC_MMC_CTRL                       (0x272d)
+#define P_VPU_MCVEC_MMC_CTRL                       (volatile unsigned int *)((0x272d  << 2) + 0xff900000)
+//Bit 27:22 RW, mcinfwr_num
+//Bit 21:16 RW, mcinfwr_id
+//Bit 11:6  RW, mcinfrd_num
+//Bit 5:0   RW, mcinfrd_id
+#define   VPU_MCINF_MMC_CTRL                       (0x272e)
+#define P_VPU_MCINF_MMC_CTRL                       (volatile unsigned int *)((0x272e  << 2) + 0xff900000)
+//Bit 31    reg_vpu_pwm_inv, 1: invert the pwm signal, active low
+//Bit 30:29 reg_vpu_pwm_src_sel, 00: encl, enct, encp
+//Bit 28:16 reg_vpu_pwm_v_end0
+//Bit 12:0  reg_vpu_pwm_v_start0
+#define   VPU_VPU_PWM_V0                           (0x2730)
+#define P_VPU_VPU_PWM_V0                           (volatile unsigned int *)((0x2730  << 2) + 0xff900000)
+//Bit 28:16 reg_vpu_pwm_v_end1
+//Bit 12:0  reg_vpu_pwm_v_start1
+#define   VPU_VPU_PWM_V1                           (0x2731)
+#define P_VPU_VPU_PWM_V1                           (volatile unsigned int *)((0x2731  << 2) + 0xff900000)
+//Bit 28:16 reg_vpu_pwm_v_end2
+//Bit 12:0  reg_vpu_pwm_v_start2
+#define   VPU_VPU_PWM_V2                           (0x2732)
+#define P_VPU_VPU_PWM_V2                           (volatile unsigned int *)((0x2732  << 2) + 0xff900000)
+//Bit 28:16 reg_vpu_pwm_v_end3
+//Bit 12:0  reg_vpu_pwm_v_start3
+#define   VPU_VPU_PWM_V3                           (0x2733)
+#define P_VPU_VPU_PWM_V3                           (volatile unsigned int *)((0x2733  << 2) + 0xff900000)
+//Bit 28:16 reg_vpu_pwm_h_end0
+//Bit 12:0  reg_vpu_pwm_h_start0
+#define   VPU_VPU_PWM_H0                           (0x2734)
+#define P_VPU_VPU_PWM_H0                           (volatile unsigned int *)((0x2734  << 2) + 0xff900000)
+//Bit 28:16 reg_vpu_pwm_h_end1
+//Bit 12:0  reg_vpu_pwm_h_start1
+#define   VPU_VPU_PWM_H1                           (0x2735)
+#define P_VPU_VPU_PWM_H1                           (volatile unsigned int *)((0x2735  << 2) + 0xff900000)
+//Bit 28:16 reg_vpu_pwm_h_end2
+//Bit 12:0  reg_vpu_pwm_h_start2
+#define   VPU_VPU_PWM_H2                           (0x2736)
+#define P_VPU_VPU_PWM_H2                           (volatile unsigned int *)((0x2736  << 2) + 0xff900000)
+//Bit 28:16 reg_vpu_pwm_h_end3
+//Bit 12:0  reg_vpu_pwm_h_start3
+#define   VPU_VPU_PWM_H3                           (0x2737)
+#define P_VPU_VPU_PWM_H3                           (volatile unsigned int *)((0x2737  << 2) + 0xff900000)
+//Bit 18   reg_vpu_3d_go_high_fld_pol: 0: go high at field 0, 1: go high at field 1
+//Bit 17   reg_vpu_3d_sync_setting_vsync_latch
+//Bit 16   reg_vpu_3d_sync_enable
+//Bit 14:8 reg_vpu_3d_sync_v_end
+//Bit 6:0  reg_vpu_3d_sync_v_start
+#define   VPU_VPU_3D_SYNC1                         (0x2738)
+#define P_VPU_VPU_3D_SYNC1                         (volatile unsigned int *)((0x2738  << 2) + 0xff900000)
+//Bit 28:16 reg_vpu_3d_sync_h_end
+//Bit 12:0  reg_vpu_3d_sync_h_start
+#define   VPU_VPU_3D_SYNC2                         (0x2739)
+#define P_VPU_VPU_3D_SYNC2                         (volatile unsigned int *)((0x2739  << 2) + 0xff900000)
+//Bit 4    csi2_pre, 1: using vpu pre arbiter0, 0: using vpu pre arbiter2
+//Bit 2:1  isp_in_sel, 01: select bt656, 10: select Mipi CSI2, otherwise select nothing
+//Bit 0,   if true, force vencl clk enable, otherwise, it might auto turn off by mipi DSI
+#define   VPU_MISC_CTRL                            (0x2740)
+#define P_VPU_MISC_CTRL                            (volatile unsigned int *)((0x2740  << 2) + 0xff900000)
+#define   VPU_ISP_GCLK_CTRL0                       (0x2741)
+#define P_VPU_ISP_GCLK_CTRL0                       (volatile unsigned int *)((0x2741  << 2) + 0xff900000)
+#define   VPU_ISP_GCLK_CTRL1                       (0x2742)
+#define P_VPU_ISP_GCLK_CTRL1                       (volatile unsigned int *)((0x2742  << 2) + 0xff900000)
+#define   VPU_HDMI_FMT_CTRL                        (0x2743)
+#define P_VPU_HDMI_FMT_CTRL                        (volatile unsigned int *)((0x2743  << 2) + 0xff900000)
+#define   VPU_VDIN_ASYNC_HOLD_CTRL                 (0x2744)
+#define P_VPU_VDIN_ASYNC_HOLD_CTRL                 (volatile unsigned int *)((0x2744  << 2) + 0xff900000)
+#define   VPU_VDISP_ASYNC_HOLD_CTRL                (0x2745)
+#define P_VPU_VDISP_ASYNC_HOLD_CTRL                (volatile unsigned int *)((0x2745  << 2) + 0xff900000)
+#define   VPU_VPUARB2_ASYNC_HOLD_CTRL              (0x2746)
+#define P_VPU_VPUARB2_ASYNC_HOLD_CTRL              (volatile unsigned int *)((0x2746  << 2) + 0xff900000)
+//    arb0_rd_urg_ctrl_o <=  vpp_off_urg_ctrl &  vpu_arb_urg_ctrl[0] |
+//                        rdma_ddr_req_busy_sync_d1 & vpu_arb_urg_ctrl[1]
+//                        ;
+//
+//    arb1_rd_urg_ctrl_o <=  vpp_off_urg_ctrl &  vpu_arb_urg_ctrl[2] |
+//                        rdma_ddr_req_busy_sync_d1 & vpu_arb_urg_ctrl[3]
+//                        ;
+//
+//    arb2_rd_urg_ctrl_o <=  vpp_off_urg_ctrl &  vpu_arb_urg_ctrl[4] |
+//                        rdma_ddr_req_busy_sync_d1 & vpu_arb_urg_ctrl[5]
+//                        ;
+//
+//    arb0_wr_urg_ctrl_o <=  vdin0_lff_urg_ctrl_sync_d1 & vpu_arb_urg_ctrl[6] |
+//                        vdin1_lff_urg_ctrl_sync_d1 & vpu_arb_urg_ctrl[7]
+//                        ;
+//
+//    arb1_wr_urg_ctrl_o <=  vdin0_lff_urg_ctrl_sync_d1 & vpu_arb_urg_ctrl[8] |
+//                        vdin1_lff_urg_ctrl_sync_d1 & vpu_arb_urg_ctrl[9]
+//
+#define   VPU_ARB_URG_CTRL                         (0x2747)
+#define P_VPU_ARB_URG_CTRL                         (volatile unsigned int *)((0x2747  << 2) + 0xff900000)
+#define   VPU_SECURE_DUMMY                         (0x2748)
+#define P_VPU_SECURE_DUMMY                         (volatile unsigned int *)((0x2748  << 2) + 0xff900000)
+#define   VPU_VENCL_DITH_EN                        (0x2749)
+#define P_VPU_VENCL_DITH_EN                        (volatile unsigned int *)((0x2749  << 2) + 0xff900000)
+// todo :
+#define   VPU_422TO444_RST                         (0x274a)
+#define P_VPU_422TO444_RST                         (volatile unsigned int *)((0x274a  << 2) + 0xff900000)
+// todo :
+#define   VPU_422TO444_CTRL0                       (0x274b)
+#define P_VPU_422TO444_CTRL0                       (volatile unsigned int *)((0x274b  << 2) + 0xff900000)
+// todo :
+#define   VPU_422TO444_CTRL1                       (0x274c)
+#define P_VPU_422TO444_CTRL1                       (volatile unsigned int *)((0x274c  << 2) + 0xff900000)
+// todo :
+// Picture Rotate (PROT) module 1 (for OSD) registers:
+#define   VPU_PROT1_CLK_GATE                       (0x2750)
+#define P_VPU_PROT1_CLK_GATE                       (volatile unsigned int *)((0x2750  << 2) + 0xff900000)
+#define   VPU_PROT1_GEN_CNTL                       (0x2751)
+#define P_VPU_PROT1_GEN_CNTL                       (volatile unsigned int *)((0x2751  << 2) + 0xff900000)
+#define   VPU_PROT1_X_START_END                    (0x2752)
+#define P_VPU_PROT1_X_START_END                    (volatile unsigned int *)((0x2752  << 2) + 0xff900000)
+#define   VPU_PROT1_Y_START_END                    (0x2753)
+#define P_VPU_PROT1_Y_START_END                    (volatile unsigned int *)((0x2753  << 2) + 0xff900000)
+#define   VPU_PROT1_Y_LEN_STEP                     (0x2754)
+#define P_VPU_PROT1_Y_LEN_STEP                     (volatile unsigned int *)((0x2754  << 2) + 0xff900000)
+#define   VPU_PROT1_RPT_LOOP                       (0x2755)
+#define P_VPU_PROT1_RPT_LOOP                       (volatile unsigned int *)((0x2755  << 2) + 0xff900000)
+#define   VPU_PROT1_RPT_PAT                        (0x2756)
+#define P_VPU_PROT1_RPT_PAT                        (volatile unsigned int *)((0x2756  << 2) + 0xff900000)
+#define   VPU_PROT1_DDR                            (0x2757)
+#define P_VPU_PROT1_DDR                            (volatile unsigned int *)((0x2757  << 2) + 0xff900000)
+#define   VPU_PROT1_RBUF_ROOM                      (0x2758)
+#define P_VPU_PROT1_RBUF_ROOM                      (volatile unsigned int *)((0x2758  << 2) + 0xff900000)
+#define   VPU_PROT1_STAT_0                         (0x2759)
+#define P_VPU_PROT1_STAT_0                         (volatile unsigned int *)((0x2759  << 2) + 0xff900000)
+#define   VPU_PROT1_STAT_1                         (0x275a)
+#define P_VPU_PROT1_STAT_1                         (volatile unsigned int *)((0x275a  << 2) + 0xff900000)
+#define   VPU_PROT1_STAT_2                         (0x275b)
+#define P_VPU_PROT1_STAT_2                         (volatile unsigned int *)((0x275b  << 2) + 0xff900000)
+#define   VPU_PROT1_REQ_ONOFF                      (0x275c)
+#define P_VPU_PROT1_REQ_ONOFF                      (volatile unsigned int *)((0x275c  << 2) + 0xff900000)
+// Picture Rotate (PROT) module 2 (for VD) registers:
+#define   VPU_PROT2_CLK_GATE                       (0x2760)
+#define P_VPU_PROT2_CLK_GATE                       (volatile unsigned int *)((0x2760  << 2) + 0xff900000)
+#define   VPU_PROT2_GEN_CNTL                       (0x2761)
+#define P_VPU_PROT2_GEN_CNTL                       (volatile unsigned int *)((0x2761  << 2) + 0xff900000)
+#define   VPU_PROT2_X_START_END                    (0x2762)
+#define P_VPU_PROT2_X_START_END                    (volatile unsigned int *)((0x2762  << 2) + 0xff900000)
+#define   VPU_PROT2_Y_START_END                    (0x2763)
+#define P_VPU_PROT2_Y_START_END                    (volatile unsigned int *)((0x2763  << 2) + 0xff900000)
+#define   VPU_PROT2_Y_LEN_STEP                     (0x2764)
+#define P_VPU_PROT2_Y_LEN_STEP                     (volatile unsigned int *)((0x2764  << 2) + 0xff900000)
+#define   VPU_PROT2_RPT_LOOP                       (0x2765)
+#define P_VPU_PROT2_RPT_LOOP                       (volatile unsigned int *)((0x2765  << 2) + 0xff900000)
+#define   VPU_PROT2_RPT_PAT                        (0x2766)
+#define P_VPU_PROT2_RPT_PAT                        (volatile unsigned int *)((0x2766  << 2) + 0xff900000)
+#define   VPU_PROT2_DDR                            (0x2767)
+#define P_VPU_PROT2_DDR                            (volatile unsigned int *)((0x2767  << 2) + 0xff900000)
+#define   VPU_PROT2_RBUF_ROOM                      (0x2768)
+#define P_VPU_PROT2_RBUF_ROOM                      (volatile unsigned int *)((0x2768  << 2) + 0xff900000)
+#define   VPU_PROT2_STAT_0                         (0x2769)
+#define P_VPU_PROT2_STAT_0                         (volatile unsigned int *)((0x2769  << 2) + 0xff900000)
+#define   VPU_PROT2_STAT_1                         (0x276a)
+#define P_VPU_PROT2_STAT_1                         (volatile unsigned int *)((0x276a  << 2) + 0xff900000)
+#define   VPU_PROT2_STAT_2                         (0x276b)
+#define P_VPU_PROT2_STAT_2                         (volatile unsigned int *)((0x276b  << 2) + 0xff900000)
+#define   VPU_PROT2_REQ_ONOFF                      (0x276c)
+#define P_VPU_PROT2_REQ_ONOFF                      (volatile unsigned int *)((0x276c  << 2) + 0xff900000)
+// Picture Rotate (PROT) module 3 (for VD) registers:
+#define   VPU_PROT3_CLK_GATE                       (0x2770)
+#define P_VPU_PROT3_CLK_GATE                       (volatile unsigned int *)((0x2770  << 2) + 0xff900000)
+#define   VPU_PROT3_GEN_CNTL                       (0x2771)
+#define P_VPU_PROT3_GEN_CNTL                       (volatile unsigned int *)((0x2771  << 2) + 0xff900000)
+#define   VPU_PROT3_X_START_END                    (0x2772)
+#define P_VPU_PROT3_X_START_END                    (volatile unsigned int *)((0x2772  << 2) + 0xff900000)
+#define   VPU_PROT3_Y_START_END                    (0x2773)
+#define P_VPU_PROT3_Y_START_END                    (volatile unsigned int *)((0x2773  << 2) + 0xff900000)
+#define   VPU_PROT3_Y_LEN_STEP                     (0x2774)
+#define P_VPU_PROT3_Y_LEN_STEP                     (volatile unsigned int *)((0x2774  << 2) + 0xff900000)
+#define   VPU_PROT3_RPT_LOOP                       (0x2775)
+#define P_VPU_PROT3_RPT_LOOP                       (volatile unsigned int *)((0x2775  << 2) + 0xff900000)
+#define   VPU_PROT3_RPT_PAT                        (0x2776)
+#define P_VPU_PROT3_RPT_PAT                        (volatile unsigned int *)((0x2776  << 2) + 0xff900000)
+#define   VPU_PROT3_DDR                            (0x2777)
+#define P_VPU_PROT3_DDR                            (volatile unsigned int *)((0x2777  << 2) + 0xff900000)
+#define   VPU_PROT3_RBUF_ROOM                      (0x2778)
+#define P_VPU_PROT3_RBUF_ROOM                      (volatile unsigned int *)((0x2778  << 2) + 0xff900000)
+#define   VPU_PROT3_STAT_0                         (0x2779)
+#define P_VPU_PROT3_STAT_0                         (volatile unsigned int *)((0x2779  << 2) + 0xff900000)
+#define   VPU_PROT3_STAT_1                         (0x277a)
+#define P_VPU_PROT3_STAT_1                         (volatile unsigned int *)((0x277a  << 2) + 0xff900000)
+#define   VPU_PROT3_STAT_2                         (0x277b)
+#define P_VPU_PROT3_STAT_2                         (volatile unsigned int *)((0x277b  << 2) + 0xff900000)
+#define   VPU_PROT3_REQ_ONOFF                      (0x277c)
+#define P_VPU_PROT3_REQ_ONOFF                      (volatile unsigned int *)((0x277c  << 2) + 0xff900000)
+//Bit 20    reg_viu2vdin_sw_reset:   software reset
+//Bit 19:18 reg_viu2vdin_dn_ratio:   down-scale ratio; 0: no scale; 1: 1/2;  2:1/4; 3: reserved
+//Bit 17:16 reg_viu2vdin_flt_mode:   filter mode; 0: no filter; 1:[0 2 2 0]/4; 2:[1 1 1 1]/4; 3:[1 3 3 1]/8
+//Bit 15:14 reversed
+//Bit 13:0  reg_viu2vdin_hsize:      source horizontal size
+#define   VPU_VIU2VDIN_HDN_CTRL                    (0x2780)
+#define P_VPU_VIU2VDIN_HDN_CTRL                    (volatile unsigned int *)((0x2780  << 2) + 0xff900000)
+#define   VPU_VIU_ASYNC_MASK                       (0x2781)
+#define P_VPU_VIU_ASYNC_MASK                       (volatile unsigned int *)((0x2781  << 2) + 0xff900000)
+#define   VDIN_MISC_CTRL                           (0x2782)
+#define P_VDIN_MISC_CTRL                           (volatile unsigned int *)((0x2782  << 2) + 0xff900000)
+// vpu arbtration :
+// the segment is 8'h90-8'hc8
+//
+// Reading file:  vpu_arb_axi_regs.h
+//
+// synopsys translate_off
+// synopsys translate_on
+////===============================////
+//// reg
+////===============================////
+#define   VPU_RDARB_MODE_L1C1                      (0x2790)
+#define P_VPU_RDARB_MODE_L1C1                      (volatile unsigned int *)((0x2790  << 2) + 0xff900000)
+//Bit   31:22,    reserved
+//Bit   21:16,    rdarb_sel           uns, default = 0 ,
+//                                    rdarb_sel[0]==0 slave dc0 connect master port0 rdarb_sel[0]==1 slave dc0 connect master port1
+//                                    rdarb_sel[1]==0 slave dc1 connect master port0 rdarb_sel[1]==1 slave dc1 connect master port1
+//                                    rdarb_sel[2]==0 slave dc2 connect master port0 rdarb_sel[2]==1 slave dc2 connect master port1
+//                                    rdarb_sel[3]==0 slave dc3 connect master port0 rdarb_sel[3]==1 slave dc3 connect master port1
+//                                    rdarb_sel[4]==0 slave dc4 connect master port0 rdarb_sel[4]==1 slave dc4 connect master port1
+//                                    rdarb_sel[5]==0 slave dc5 connect master port0 rdarb_sel[5]==1 slave dc5 connect master port1
+//Bit   15:10,    reserved
+//Bit   9:8,      rdarb_arb_mode      uns, default = 0 ,
+//                                    rdarb_arb_mode[0] master port0 arb way,
+//                                    rdarb_arb_mode[1] master port1 arb way,
+//Bit   7:4,      reserved
+//Bit   3:0,      rdarb_gate_clk_ctrl uns, default = 0 ,
+//                                    rdarb_gate_clk_ctrl[1:0] master port0 clk gate control
+//                                    rdarb_gate_clk_ctrl[3:2] master port1 clk gate control
+#define   VPU_RDARB_REQEN_SLV_L1C1                 (0x2791)
+#define P_VPU_RDARB_REQEN_SLV_L1C1                 (volatile unsigned int *)((0x2791  << 2) + 0xff900000)
+//Bit   31:12,     reserved
+//Bit   11:0,     rdarb_dc_req_en     unsigned  , default = 12'hfff
+//                                    rdarb_dc_req_en[0]: the slv0 req to mst port0 enable,
+//                                    rdarb_dc_req_en[1]: the slv1 req to mst port0 enable,
+//                                    rdarb_dc_req_en[2]: the slv2 req to mst port0 enable,
+//                                    rdarb_dc_req_en[3]: the slv3 req to mst port0 enable,
+//                                    rdarb_dc_req_en[4]: the slv4 req to mst port0 enable,
+//                                    rdarb_dc_req_en[5]: the slv5 req to mst port0 enable,
+//                                    rdarb_dc_req_en[6]: the slv0 req to mst port1 enable,
+//                                    rdarb_dc_req_en[7]: the slv1 req to mst port1 enable,
+//                                    rdarb_dc_req_en[8]: the slv2 req to mst port1 enable,
+//                                    rdarb_dc_req_en[9]: the slv3 req to mst port1 enable,
+//                                    rdarb_dc_req_en[10]: the slv4 req to mst port1 enable,
+//                                    rdarb_dc_req_en[11]: the slv5 req to mst port1 enable,
+#define   VPU_RDARB_WEIGH0_SLV_L1C1                (0x2792)
+#define P_VPU_RDARB_WEIGH0_SLV_L1C1                (volatile unsigned int *)((0x2792  << 2) + 0xff900000)
+//Bit   31:30,    reserved
+//Bit   29:0,     rddc_weigh_sxn     unsigned  , default = 0
+//                                    rddc_weigh_sxn[0*6+:6]: the slv0 req weigh number
+//                                    rddc_weigh_sxn[1*6+:6]: the slv1 req weigh number
+//                                    rddc_weigh_sxn[2*6+:6]: the slv2 req weigh number
+//                                    rddc_weigh_sxn[3*6+:6]: the slv3 req weigh number
+//                                    rddc_weigh_sxn[4*6+:6]: the slv4 req weigh number
+#define   VPU_RDARB_WEIGH1_SLV_L1C1                (0x2793)
+#define P_VPU_RDARB_WEIGH1_SLV_L1C1                (volatile unsigned int *)((0x2793  << 2) + 0xff900000)
+//Bit   31:6,    reserved
+//Bit   5:0,     rddc_weigh_sxn     unsigned  , default = 0
+//                                    rddc_weigh_sxn[5*6+:6]: the slv5 req weigh number
+#define   VPU_WRARB_MODE_L1C1                      (0x2794)
+#define P_VPU_WRARB_MODE_L1C1                      (volatile unsigned int *)((0x2794  << 2) + 0xff900000)
+//Bit   31:22,    reserved
+//Bit   21:16,    wrarb_sel           uns, default = 0 ,
+//                                    wrarb_sel[0]==0 slave dc0 connect master port0 wrarb_sel[0]==1 slave dc0 connect master port1
+//                                    wrarb_sel[1]==0 slave dc1 connect master port0 wrarb_sel[1]==1 slave dc1 connect master port1
+//                                    wrarb_sel[2]==0 slave dc2 connect master port0 wrarb_sel[2]==1 slave dc2 connect master port1
+//                                    wrarb_sel[3]==0 slave dc3 connect master port0 wrarb_sel[3]==1 slave dc3 connect master port1
+//                                    wrarb_sel[4]==0 slave dc4 connect master port0 wrarb_sel[4]==1 slave dc4 connect master port1
+//                                    wrarb_sel[5]==0 slave dc5 connect master port0 wrarb_sel[5]==1 slave dc5 connect master port1
+//Bit   15:10,    reserved
+//Bit   9:8,      wrarb_arb_mode      uns, default = 0 ,
+//                                    wrarb_arb_mode[0] master port0 arb way,
+//                                    wrarb_arb_mode[1] master port1 arb way,
+//Bit   7:4,      reserved
+//Bit   3:0,      wrarb_gate_clk_ctrl uns, default = 0 ,
+//                                    wrarb_gate_clk_ctrl[1:0] master port0 clk gate control
+//                                    wrarb_gate_clk_ctrl[3:2] master port1 clk gate control
+#define   VPU_WRARB_REQEN_SLV_L1C1                 (0x2795)
+#define P_VPU_WRARB_REQEN_SLV_L1C1                 (volatile unsigned int *)((0x2795  << 2) + 0xff900000)
+//Bit   31:12,     reserved
+//Bit   11:0,     wrarb_dc_req_en     unsigned  , default = 0
+//                                    wrarb_dc_req_en[0]: the slv0 req to mst port0 enable,
+//                                    wrarb_dc_req_en[1]: the slv1 req to mst port0 enable,
+//                                    wrarb_dc_req_en[2]: the slv2 req to mst port0 enable,
+//                                    wrarb_dc_req_en[3]: the slv3 req to mst port0 enable,
+//                                    wrarb_dc_req_en[4]: the slv4 req to mst port0 enable,
+//                                    wrarb_dc_req_en[5]: the slv5 req to mst port0 enable,
+//                                    wrarb_dc_req_en[0]: the slv0 req to mst port1 enable,
+//                                    wrarb_dc_req_en[1]: the slv1 req to mst port1 enable,
+//                                    wrarb_dc_req_en[2]: the slv2 req to mst port1 enable,
+//                                    wrarb_dc_req_en[3]: the slv3 req to mst port1 enable,
+//                                    wrarb_dc_req_en[4]: the slv4 req to mst port1 enable,
+//                                    wrarb_dc_req_en[5]: the slv5 req to mst port1 enable,
+#define   VPU_WRARB_WEIGH0_SLV_L1C1                (0x2796)
+#define P_VPU_WRARB_WEIGH0_SLV_L1C1                (volatile unsigned int *)((0x2796  << 2) + 0xff900000)
+//Bit   31:30,    reserved
+//Bit   29:0,     wrdc_weigh_sxn     unsigned  , default = 0
+//                                    wrdc_weigh_sxn[0*6+:6]: the slv0 req weigh number
+//                                    wrdc_weigh_sxn[1*6+:6]: the slv1 req weigh number
+//                                    wrdc_weigh_sxn[2*6+:6]: the slv2 req weigh number
+//                                    wrdc_weigh_sxn[3*6+:6]: the slv3 req weigh number
+//                                    wrdc_weigh_sxn[4*6+:6]: the slv4 req weigh number
+#define   VPU_WRARB_WEIGH1_SLV_L1C1                (0x2797)
+#define P_VPU_WRARB_WEIGH1_SLV_L1C1                (volatile unsigned int *)((0x2797  << 2) + 0xff900000)
+//Bit   31:6,    reserved
+//Bit   5:0,     wrdc_weigh_sxn     unsigned  , default = 0
+//                                    wrdc_weigh_sxn[5*6+:6]: the slv5 req weigh number
+#define   VPU_RDWR_ARB_STATUS_L1C1                 (0x2798)
+#define P_VPU_RDWR_ARB_STATUS_L1C1                 (volatile unsigned int *)((0x2798  << 2) + 0xff900000)
+//Bit   31:4,    reserved
+//Bit    3:2,    wrarb_arb_busy     unsigned  , default = 0
+//Bit    1:0,    rdarb_arb_busy     unsigned  , default = 0
+#define   VPU_RDARB_MODE_L1C2                      (0x2799)
+#define P_VPU_RDARB_MODE_L1C2                      (volatile unsigned int *)((0x2799  << 2) + 0xff900000)
+//Bit   31:21,    reserved
+//Bit   20:16,    rdarb_sel           uns, default = 0 ,
+//                                    rdarb_sel[0]==0 slave dc0 connect master port0 rdarb_sel[0]==1 slave dc0 connect master port1
+//                                    rdarb_sel[1]==0 slave dc1 connect master port0 rdarb_sel[1]==1 slave dc1 connect master port1
+//                                    rdarb_sel[2]==0 slave dc2 connect master port0 rdarb_sel[2]==1 slave dc2 connect master port1
+//                                    rdarb_sel[3]==0 slave dc3 connect master port0 rdarb_sel[3]==1 slave dc3 connect master port1
+//                                    rdarb_sel[4]==0 slave dc4 connect master port0 rdarb_sel[4]==1 slave dc4 connect master port1
+//Bit   15:10,    reserved
+//Bit   9:8,      rdarb_arb_mode      uns, default = 0 ,
+//                                    rdarb_arb_mode[0] master port0 arb way,
+//                                    rdarb_arb_mode[1] master port1 arb way,
+//Bit   7:4,      reserved
+//Bit   3:0,      rdarb_gate_clk_ctrl uns, default = 0 ,
+//                                    rdarb_gate_clk_ctrl[1:0] master port0 clk gate control
+//                                    rdarb_gate_clk_ctrl[3:2] master port0 clk gate control
+#define   VPU_RDARB_REQEN_SLV_L1C2                 (0x279a)
+#define P_VPU_RDARB_REQEN_SLV_L1C2                 (volatile unsigned int *)((0x279a  << 2) + 0xff900000)
+//Bit   31:10,     reserved
+//Bit    9:0,     rdarb_dc_req_en     unsigned  , default = 0
+//                                    rdarb_dc_req_en[0]: the slv0 req to mst port0 enable,
+//                                    rdarb_dc_req_en[1]: the slv1 req to mst port0 enable,
+//                                    rdarb_dc_req_en[2]: the slv2 req to mst port0 enable,
+//                                    rdarb_dc_req_en[3]: the slv3 req to mst port0 enable,
+//                                    rdarb_dc_req_en[4]: the slv4 req to mst port0 enable,
+//                                    rdarb_dc_req_en[5]: the slv0 req to mst port1 enable,
+//                                    rdarb_dc_req_en[6]: the slv1 req to mst port1 enable,
+//                                    rdarb_dc_req_en[7]: the slv2 req to mst port1 enable,
+//                                    rdarb_dc_req_en[8]: the slv3 req to mst port1 enable,
+//                                    rdarb_dc_req_en[9]: the slv4 req to mst port1 enable,
+#define   VPU_RDARB_WEIGH0_SLV_L1C2                (0x279b)
+#define P_VPU_RDARB_WEIGH0_SLV_L1C2                (volatile unsigned int *)((0x279b  << 2) + 0xff900000)
+//Bit   31:30,    reserved
+//Bit   29:0,     rddc_weigh_sxn     unsigned  , default = 0
+//                                    rddc_weigh_sxn[0*6+:6]: the slv0 req weigh number
+//                                    rddc_weigh_sxn[1*6+:6]: the slv1 req weigh number
+//                                    rddc_weigh_sxn[2*6+:6]: the slv2 req weigh number
+//                                    rddc_weigh_sxn[3*6+:6]: the slv3 req weigh number
+//                                    rddc_weigh_sxn[4*6+:6]: the slv4 req weigh number
+#define   VPU_RDWR_ARB_STATUS_L1C2                 (0x279c)
+#define P_VPU_RDWR_ARB_STATUS_L1C2                 (volatile unsigned int *)((0x279c  << 2) + 0xff900000)
+//Bit   31:3,    reserved
+//Bit      2,    wrarb_arb_busy     unsigned  , default = 0
+//Bit    1:0,    rdarb_arb_busy     unsigned  , default = 0
+#define   VPU_RDARB_MODE_L2C1                      (0x279d)
+#define P_VPU_RDARB_MODE_L2C1                      (volatile unsigned int *)((0x279d  << 2) + 0xff900000)
+//Bit   31:28,    reserved
+//Bit   27:16,    rdarb_sel           uns, default = 0 ,
+//                                    rdarb_sel[0]==0 slave dc0 connect master port0 rdarb_sel[0]==1 slave dc0 connect master port1
+//                                    rdarb_sel[1]==0 slave dc1 connect master port0 rdarb_sel[1]==1 slave dc1 connect master port1
+//                                    rdarb_sel[2]==0 slave dc2 connect master port0 rdarb_sel[2]==1 slave dc2 connect master port1
+//                                    rdarb_sel[3]==0 slave dc3 connect master port0 rdarb_sel[3]==1 slave dc3 connect master port1
+//                                    rdarb_sel[4]==0 slave dc4 connect master port0 rdarb_sel[4]==1 slave dc4 connect master port1
+//                                    rdarb_sel[5]==0 slave dc5 connect master port0 rdarb_sel[5]==1 slave dc5 connect master port1
+//Bit   15:11,    reserved
+//Bit   10:8,      rdarb_arb_mode      uns, default = 0 ,
+//                                    rdarb_arb_mode[0] master port0 arb way,
+//                                    rdarb_arb_mode[1] master port1 arb way,
+//Bit   7:6,      reserved
+//Bit   5:0,      rdarb_gate_clk_ctrl uns, default = 0 ,
+//                                    rdarb_gate_clk_ctrl[1:0] master port0 clk gate control
+//                                    rdarb_gate_clk_ctrl[3:2] master port1 clk gate control
+//                                    rdarb_gate_clk_ctrl[5:4] master port2 clk gate control
+#define   VPU_RDARB_REQEN_SLV_L2C1                 (0x279e)
+#define P_VPU_RDARB_REQEN_SLV_L2C1                 (volatile unsigned int *)((0x279e  << 2) + 0xff900000)
+//Bit   31:18,     reserved
+//Bit   17:0,     rdarb_dc_req_en     unsigned  , default = 0
+//                                    rdarb_dc_req_en[0]: the slv0 req to mst port0 enable,
+//                                    rdarb_dc_req_en[1]: the slv1 req to mst port0 enable,
+//                                    rdarb_dc_req_en[2]: the slv2 req to mst port0 enable,
+//                                    rdarb_dc_req_en[3]: the slv3 req to mst port0 enable,
+//                                    rdarb_dc_req_en[4]: the slv4 req to mst port0 enable,
+//                                    rdarb_dc_req_en[5]: the slv5 req to mst port0 enable,
+//                                    rdarb_dc_req_en[0]: the slv0 req to mst port1 enable,
+//                                    rdarb_dc_req_en[1]: the slv1 req to mst port1 enable,
+//                                    rdarb_dc_req_en[2]: the slv2 req to mst port1 enable,
+//                                    rdarb_dc_req_en[3]: the slv3 req to mst port1 enable,
+//                                    rdarb_dc_req_en[4]: the slv4 req to mst port1 enable,
+//                                    rdarb_dc_req_en[5]: the slv5 req to mst port1 enable,
+#define   VPU_RDARB_WEIGH0_SLV_L2C1                (0x279f)
+#define P_VPU_RDARB_WEIGH0_SLV_L2C1                (volatile unsigned int *)((0x279f  << 2) + 0xff900000)
+//Bit   31:30,    reserved
+//Bit   29:0,     rddc_weigh_sxn     unsigned  , default = 0
+//                                    rddc_weigh_sxn[0*6+:6]: the slv0 req weigh number
+//                                    rddc_weigh_sxn[1*6+:6]: the slv1 req weigh number
+//                                    rddc_weigh_sxn[2*6+:6]: the slv2 req weigh number
+//                                    rddc_weigh_sxn[3*6+:6]: the slv3 req weigh number
+//                                    rddc_weigh_sxn[4*6+:6]: the slv4 req weigh number
+#define   VPU_RDARB_WEIGH1_SLV_L2C1                (0x27a0)
+#define P_VPU_RDARB_WEIGH1_SLV_L2C1                (volatile unsigned int *)((0x27a0  << 2) + 0xff900000)
+//Bit   31:6,    reserved
+//Bit   5:0,     rddc_weigh_sxn     unsigned  , default = 0
+//                                    rddc_weigh_sxn[5*6+:6]: the slv5 req weigh number
+#define   VPU_RDWR_ARB_STATUS_L2C1                 (0x27a1)
+#define P_VPU_RDWR_ARB_STATUS_L2C1                 (volatile unsigned int *)((0x27a1  << 2) + 0xff900000)
+//Bit   31:4,    reserved
+//Bit    3:2,    wrarb_arb_busy     unsigned  , default = 0
+//Bit    1:0,    rdarb_arb_busy     unsigned  , default = 0
+#define   VPU_WRARB_MODE_L2C1                      (0x27a2)
+#define P_VPU_WRARB_MODE_L2C1                      (volatile unsigned int *)((0x27a2  << 2) + 0xff900000)
+//Bit   31:20,    reserved
+//Bit   19:16,    wrarb_sel           uns, default = 0 ,
+//                                    wrarb_sel[0]==0 slave dc0 connect master port0 wrarb_sel[0]==1 slave dc0 connect master port1
+//                                    wrarb_sel[1]==0 slave dc1 connect master port0 wrarb_sel[1]==1 slave dc1 connect master port1
+//                                    wrarb_sel[2]==0 slave dc2 connect master port0 wrarb_sel[2]==1 slave dc2 connect master port1
+//                                    wrarb_sel[3]==0 slave dc3 connect master port0 wrarb_sel[3]==1 slave dc3 connect master port1
+//Bit   15:10,    reserved
+//Bit   9:8,      wrarb_arb_mode      uns, default = 0 ,
+//                                    wrarb_arb_mode[0] master port0 arb way,
+//                                    wrarb_arb_mode[1] master port1 arb way,
+//Bit   7:4,      reserved
+//Bit   3:0,      wrarb_gate_clk_ctrl uns, default = 0 ,
+//                                    wrarb_gate_clk_ctrl[1:0] master port0 clk gate control
+//                                    wrarb_gate_clk_ctrl[3:2] master port0 clk gate control
+#define   VPU_WRARB_REQEN_SLV_L2C1                 (0x27a3)
+#define P_VPU_WRARB_REQEN_SLV_L2C1                 (volatile unsigned int *)((0x27a3  << 2) + 0xff900000)
+//Bit   31:8,     reserved
+//Bit    7:0,     wrarb_dc_req_en     unsigned  , default = 0
+//                                    wrarb_dc_req_en[0]: the slv0 req to mst port0 enable,
+//                                    wrarb_dc_req_en[1]: the slv1 req to mst port0 enable,
+//                                    wrarb_dc_req_en[2]: the slv2 req to mst port0 enable,
+//                                    wrarb_dc_req_en[3]: the slv3 req to mst port0 enable,
+//                                    wrarb_dc_req_en[0]: the slv0 req to mst port1 enable,
+//                                    wrarb_dc_req_en[1]: the slv1 req to mst port1 enable,
+//                                    wrarb_dc_req_en[2]: the slv2 req to mst port1 enable,
+//                                    wrarb_dc_req_en[3]: the slv3 req to mst port1 enable,
+#define   VPU_WRARB_WEIGH0_SLV_L2C1                (0x27a4)
+#define P_VPU_WRARB_WEIGH0_SLV_L2C1                (volatile unsigned int *)((0x27a4  << 2) + 0xff900000)
+//Bit   31:24,    reserved
+//Bit   23:0,     wrdc_weigh_sxn     unsigned  , default = 0
+//                                    wrdc_weigh_sxn[0*6+:6]: the slv0 req weigh number
+//                                    wrdc_weigh_sxn[1*6+:6]: the slv1 req weigh number
+//                                    wrdc_weigh_sxn[2*6+:6]: the slv2 req weigh number
+//                                    wrdc_weigh_sxn[3*6+:6]: the slv3 req weigh number
+#define   VPU_ASYNC_RD_MODE0                       (0x27a5)
+#define P_VPU_ASYNC_RD_MODE0                       (volatile unsigned int *)((0x27a5  << 2) + 0xff900000)
+//Bit   31:19,    reserved
+//Bit   18,       req_en            unsigned  , default = 0  async enable
+//Bit   17:16,    clk_gate_ctrl     unsigned  , default = 0  async clock gate control
+//Bit   15:12,    auto_arugt_weight unsigned  , default = 4
+//Bit   11,       reserved
+//Bit   10:9,     arugt_sel         unsigned  , default = 0
+//                                  00 : use auto fifo arugt generate the output arugt.
+//                                  01 : use the register bit control
+//                                  00 : use the input arguent
+//Bit   8,        arguent_cfg       unsigned  , default = 0  register arguent control bit
+//Bit   7:4,      rd_hold_num       unsigned  , default = 4  hold the read command threshold
+//Bit   3:0,      rd_rel_num        unsigned  , default = 0  release the read command threshold
+#define   VPU_ASYNC_RD_MODE1                       (0x27a6)
+#define P_VPU_ASYNC_RD_MODE1                       (volatile unsigned int *)((0x27a6  << 2) + 0xff900000)
+//Bit   31:19,    reserved
+//Bit   18,       req_en            unsigned  , default = 0  async enable
+//Bit   17:16,    clk_gate_ctrl     unsigned  , default = 0  async clock gate control
+//Bit   15:12,    auto_arugt_weight unsigned  , default = 4
+//Bit   11,       reserved
+//Bit   10:9,     arugt_sel         unsigned  , default = 0
+//                                  00 : use auto fifo arugt generate the output arugt.
+//                                  01 : use the register bit control
+//                                  00 : use the input arguent
+//Bit   8,        arguent_cfg       unsigned  , default = 0  register arguent control bit
+//Bit   7:4,      rd_hold_num       unsigned  , default = 4  hold the read command threshold
+//Bit   3:0,      rd_rel_num        unsigned  , default = 0  release the read command threshold
+#define   VPU_ASYNC_RD_MODE2                       (0x27a7)
+#define P_VPU_ASYNC_RD_MODE2                       (volatile unsigned int *)((0x27a7  << 2) + 0xff900000)
+//Bit   31:19,    reserved
+//Bit   18,       req_en            unsigned  , default = 0  async enable
+//Bit   17:16,    clk_gate_ctrl     unsigned  , default = 0  async clock gate control
+//Bit   15:12,    auto_arugt_weight unsigned  , default = 4
+//Bit   11,       reserved
+//Bit   10:9,     arugt_sel         unsigned  , default = 0
+//                                  00 : use auto fifo arugt generate the output arugt.
+//                                  01 : use the register bit control
+//                                  00 : use the input arguent
+//Bit   8,        arguent_cfg       unsigned  , default = 0  register arguent control bit
+//Bit   7:4,      rd_hold_num       unsigned  , default = 4  hold the read command threshold
+//Bit   3:0,      rd_rel_num        unsigned  , default = 0  release the read command threshold
+#define   VPU_ASYNC_RD_MODE3                       (0x27a8)
+#define P_VPU_ASYNC_RD_MODE3                       (volatile unsigned int *)((0x27a8  << 2) + 0xff900000)
+//Bit   31:19,    reserved
+//Bit   18,       req_en            unsigned  , default = 0  async enable
+//Bit   17:16,    clk_gate_ctrl     unsigned  , default = 0  async clock gate control
+//Bit   15:12,    auto_arugt_weight unsigned  , default = 4
+//Bit   11,       reserved
+//Bit   10:9,     arugt_sel         unsigned  , default = 0
+//                                  00 : use auto fifo arugt generate the output arugt.
+//                                  01 : use the register bit control
+//                                  00 : use the input arguent
+//Bit   8,        arguent_cfg       unsigned  , default = 0  register arguent control bit
+//Bit   7:4,      rd_hold_num       unsigned  , default = 4  hold the read command threshold
+//Bit   3:0,      rd_rel_num        unsigned  , default = 0  release the read command threshold
+#define   VPU_ASYNC_RD_MODE4                       (0x27a9)
+#define P_VPU_ASYNC_RD_MODE4                       (volatile unsigned int *)((0x27a9  << 2) + 0xff900000)
+//Bit   31:19,    reserved
+//Bit   18,       req_en            unsigned  , default = 0  async enable
+//Bit   17:16,    clk_gate_ctrl     unsigned  , default = 0  async clock gate control
+//Bit   15:12,    auto_arugt_weight unsigned  , default = 4
+//Bit   11,       reserved
+//Bit   10:9,     arugt_sel         unsigned  , default = 0
+//                                  00 : use auto fifo arugt generate the output arugt.
+//                                  01 : use the register bit control
+//                                  00 : use the input arguent
+//Bit   8,        arguent_cfg       unsigned  , default = 0  register arguent control bit
+//Bit   7:4,      rd_hold_num       unsigned  , default = 4  hold the read command threshold
+//Bit   3:0,      rd_rel_num        unsigned  , default = 0  release the read command threshold
+#define   VPU_ASYNC_WR_MODE0                       (0x27aa)
+#define P_VPU_ASYNC_WR_MODE0                       (volatile unsigned int *)((0x27aa  << 2) + 0xff900000)
+//Bit   31:19,    reserved
+//Bit   18,       req_en            unsigned  , default = 0  async enable
+//Bit   17:16,    clk_gate_ctrl     unsigned  , default = 0  async clock gate control
+//Bit   15:12,    auto_arugt_weight unsigned  , default = 4
+//Bit   11,       reserved
+//Bit   10:9,     arugt_sel         unsigned  , default = 0
+//                                  00 : use auto fifo arugt generate the output arugt.
+//                                  01 : use the register bit control
+//                                  00 : use the input arguent
+//Bit   8,        arguent_cfg       unsigned  , default = 0  register arguent control bit
+//Bit   7:4,      wr_hold_num       unsigned  , default = 4  hold the read command threshold
+//Bit   3:0,      wr_rel_num        unsigned  , default = 0  release the write command threshold
+#define   VPU_ASYNC_WR_MODE1                       (0x27ab)
+#define P_VPU_ASYNC_WR_MODE1                       (volatile unsigned int *)((0x27ab  << 2) + 0xff900000)
+//Bit   31:19,    reserved
+//Bit   18,       req_en            unsigned  , default = 0  async enable
+//Bit   17:16,    clk_gate_ctrl     unsigned  , default = 0  async clock gate control
+//Bit   15:12,    auto_arugt_weight unsigned  , default = 4
+//Bit   11,       reserved
+//Bit   10:9,     arugt_sel         unsigned  , default = 0
+//                                  00 : use auto fifo arugt generate the output arugt.
+//                                  01 : use the register bit control
+//                                  00 : use the input arguent
+//Bit   8,        arguent_cfg       unsigned  , default = 0  register arguent control bit
+//Bit   7:4,      wr_hold_num       unsigned  , default = 4  hold the read command threshold
+//Bit   3:0,      wr_rel_num        unsigned  , default = 0  release the write command threshold
+#define   VPU_ASYNC_WR_MODE2                       (0x27ac)
+#define P_VPU_ASYNC_WR_MODE2                       (volatile unsigned int *)((0x27ac  << 2) + 0xff900000)
+//Bit   31:19,    reserved
+//Bit   18,       req_en            unsigned  , default = 0  async enable
+//Bit   17:16,    clk_gate_ctrl     unsigned  , default = 0  async clock gate control
+//Bit   15:12,    auto_arugt_weight unsigned  , default = 4
+//Bit   11,       reserved
+//Bit   10:9,     arugt_sel         unsigned  , default = 0
+//                                  00 : use auto fifo arugt generate the output arugt.
+//                                  01 : use the register bit control
+//                                  00 : use the input arguent
+//Bit   8,        arguent_cfg       unsigned  , default = 0  register arguent control bit
+//Bit   7:4,      wr_hold_num       unsigned  , default = 4  hold the read command threshold
+//Bit   3:0,      wr_rel_num        unsigned  , default = 0  release the write command threshold
+#define   VPU_ASYNC_STAT                           (0x27ad)
+#define P_VPU_ASYNC_STAT                           (volatile unsigned int *)((0x27ad  << 2) + 0xff900000)
+//Bit   31:19,    reserved
+//Bit   18,       axiwr2_chan_idle  unsigned  , RO, axi write channel2 idle state
+//Bit   17,       axiwr1_chan_idle  unsigned  , RO, axi write channel1 idle state
+//Bit   16,       axiwr0_chan_idle  unsigned  , RO, axi write channel0 idle state
+//Bit   15:5,     reserved
+//Bit   4,        axird4_chan_idle  unsigned  , RO, axi read channel4 idle state
+//Bit   3,        axird3_chan_idle  unsigned  , RO, axi read channel3 idle state
+//Bit   2,        axird2_chan_idle  unsigned  , RO, axi read channel2 idle state
+//Bit   1,        axird1_chan_idle  unsigned  , RO, axi read channel1 idle state
+//Bit   0,        axird0_chan_idle  unsigned  , RO, axi read channel0 idle state
+#define   VPU_WRARB_MODE_L1C2                      (0x27ae)
+#define P_VPU_WRARB_MODE_L1C2                      (volatile unsigned int *)((0x27ae  << 2) + 0xff900000)
+//Bit   31:18,    reserved
+//Bit   17:16,    wrarb_sel           uns, default = 0 ,
+//                                    wrarb_sel[0]==0 slave dc0 connect master port0 wrarb_sel[0]==1 slave dc0 connect master port1
+//                                    wrarb_sel[1]==0 slave dc1 connect master port0 wrarb_sel[1]==1 slave dc1 connect master port1
+//Bit   15:9,     reserved
+//Bit   8,        wrarb_arb_mode      uns, default = 0 ,
+//                                    wrarb_arb_mode[0] master port0 arb way,
+//Bit   7:2,      reserved
+//Bit   1:0,      wrarb_gate_clk_ctrl uns, default = 0 ,
+//                                    wrarb_gate_clk_ctrl[1:0] master port0 clk gate control
+#define   VPU_WRARB_REQEN_SLV_L1C2                 (0x27af)
+#define P_VPU_WRARB_REQEN_SLV_L1C2                 (volatile unsigned int *)((0x27af  << 2) + 0xff900000)
+//Bit   31:2,     reserved
+//Bit    1:0,     wrarb_dc_req_en     unsigned  , default = 0
+//                                    wrarb_dc_req_en[0]: the slv0 req to mst port0 enable,
+//                                    wrarb_dc_req_en[1]: the slv1 req to mst port0 enable,
+#define   VPU_WRARB_WEIGH0_SLV_L1C2                (0x27b0)
+#define P_VPU_WRARB_WEIGH0_SLV_L1C2                (volatile unsigned int *)((0x27b0  << 2) + 0xff900000)
+//Bit   31:30,    reserved
+//Bit   29:0,     wrdc_weigh_sxn     unsigned  , default = 0
+//                                    wrdc_weigh_sxn[0*6+:6]: the slv0 req weigh number
+//                                    wrdc_weigh_sxn[1*6+:6]: the slv1 req weigh number
+//                                    wrdc_weigh_sxn[2*6+:6]: the slv1 req weigh number
+//                                    wrdc_weigh_sxn[3*6+:6]: the slv1 req weigh number
+//                                    wrdc_weigh_sxn[4*6+:6]: the slv1 req weigh number
+#define   VPU_WRARB_WEIGH1_SLV_L1C2                (0x27b1)
+#define P_VPU_WRARB_WEIGH1_SLV_L1C2                (volatile unsigned int *)((0x27b1  << 2) + 0xff900000)
+//Bit   31:18,    reserved
+//Bit   17:0,     wrdc_weigh_sxn     unsigned  , default = 0
+//                                    wrdc_weigh_sxn[5*6+:6]: the slv0 req weigh number
+//                                    wrdc_weigh_sxn[6*6+:6]: the slv1 req weigh number
+//                                    wrdc_weigh_sxn[7*6+:6]: the slv1 req weigh number
+#define   VPU_RDARB_WEIGH1_SLV_L1C2                (0x27b2)
+#define P_VPU_RDARB_WEIGH1_SLV_L1C2                (volatile unsigned int *)((0x27b2  << 2) + 0xff900000)
+//Bit   31:18,    reserved
+//Bit   17:0,     rddc_weigh_sxn     unsigned  , default = 0
+//                                    rddc_weigh_sxn[5*6+:6]: the slv0 req weigh number
+//                                    rddc_weigh_sxn[6*6+:6]: the slv1 req weigh number
+//                                    rddc_weigh_sxn[7*6+:6]: the slv2 req weigh number
+#define   VPU_ARB_DBG_CTRL_L1C1                    (0x27b3)
+#define P_VPU_ARB_DBG_CTRL_L1C1                    (volatile unsigned int *)((0x27b3  << 2) + 0xff900000)
+#define   VPU_ARB_DBG_STAT_L1C1                    (0x27b4)
+#define P_VPU_ARB_DBG_STAT_L1C1                    (volatile unsigned int *)((0x27b4  << 2) + 0xff900000)
+#define   VPU_ARB_DBG_CTRL_L1C2                    (0x27b5)
+#define P_VPU_ARB_DBG_CTRL_L1C2                    (volatile unsigned int *)((0x27b5  << 2) + 0xff900000)
+#define   VPU_ARB_DBG_STAT_L1C2                    (0x27b6)
+#define P_VPU_ARB_DBG_STAT_L1C2                    (volatile unsigned int *)((0x27b6  << 2) + 0xff900000)
+#define   VPU_ARB_DBG_CTRL_L2C1                    (0x27b7)
+#define P_VPU_ARB_DBG_CTRL_L2C1                    (volatile unsigned int *)((0x27b7  << 2) + 0xff900000)
+#define   VPU_ARB_DBG_STAT_L2C1                    (0x27b8)
+#define P_VPU_ARB_DBG_STAT_L2C1                    (volatile unsigned int *)((0x27b8  << 2) + 0xff900000)
+#define   VPU_ARB_PATH_CTRL                        (0x27b9)
+#define P_VPU_ARB_PATH_CTRL                        (volatile unsigned int *)((0x27b9  << 2) + 0xff900000)
+#define   VPU_ARB_PATH_MAP00                       (0x27ba)
+#define P_VPU_ARB_PATH_MAP00                       (volatile unsigned int *)((0x27ba  << 2) + 0xff900000)
+#define   VPU_ARB_PATH_MAP01                       (0x27bb)
+#define P_VPU_ARB_PATH_MAP01                       (volatile unsigned int *)((0x27bb  << 2) + 0xff900000)
+#define   VPU_ARB_PATH_MAP02                       (0x27bc)
+#define P_VPU_ARB_PATH_MAP02                       (volatile unsigned int *)((0x27bc  << 2) + 0xff900000)
+#define   VPU_ARB_PATH_MAP03                       (0x27bd)
+#define P_VPU_ARB_PATH_MAP03                       (volatile unsigned int *)((0x27bd  << 2) + 0xff900000)
+#define   VPU_ARB_PATH_MAP10                       (0x27be)
+#define P_VPU_ARB_PATH_MAP10                       (volatile unsigned int *)((0x27be  << 2) + 0xff900000)
+#define   VPU_ARB_PATH_MAP11                       (0x27bf)
+#define P_VPU_ARB_PATH_MAP11                       (volatile unsigned int *)((0x27bf  << 2) + 0xff900000)
+#define   VPU_ARB_PATH_MAP12                       (0x27c0)
+#define P_VPU_ARB_PATH_MAP12                       (volatile unsigned int *)((0x27c0  << 2) + 0xff900000)
+#define   VPU_ARB_PATH_MAP13                       (0x27c1)
+#define P_VPU_ARB_PATH_MAP13                       (volatile unsigned int *)((0x27c1  << 2) + 0xff900000)
+// synopsys translate_off
+// synopsys translate_on
+//
+// Closing file:  vpu_arb_axi_regs.h
+//
+// the segment is 8'he0-8'hef
+#define   VPU_VENCL_DITH_CTRL                      (0x27e0)
+#define P_VPU_VENCL_DITH_CTRL                      (volatile unsigned int *)((0x27e0  << 2) + 0xff900000)
+#define   VPU_VENCL_DITH_LUT_1                     (0x27e1)
+#define P_VPU_VENCL_DITH_LUT_1                     (volatile unsigned int *)((0x27e1  << 2) + 0xff900000)
+#define   VPU_VENCL_DITH_LUT_2                     (0x27e2)
+#define P_VPU_VENCL_DITH_LUT_2                     (volatile unsigned int *)((0x27e2  << 2) + 0xff900000)
+#define   VPU_VENCL_DITH_LUT_3                     (0x27e3)
+#define P_VPU_VENCL_DITH_LUT_3                     (volatile unsigned int *)((0x27e3  << 2) + 0xff900000)
+#define   VPU_VENCL_DITH_LUT_4                     (0x27e4)
+#define P_VPU_VENCL_DITH_LUT_4                     (volatile unsigned int *)((0x27e4  << 2) + 0xff900000)
+#define   VPU_VENCL_DITH_LUT_5                     (0x27e5)
+#define P_VPU_VENCL_DITH_LUT_5                     (volatile unsigned int *)((0x27e5  << 2) + 0xff900000)
+#define   VPU_VENCL_DITH_LUT_6                     (0x27e6)
+#define P_VPU_VENCL_DITH_LUT_6                     (volatile unsigned int *)((0x27e6  << 2) + 0xff900000)
+#define   VPU_VENCL_DITH_LUT_7                     (0x27e7)
+#define P_VPU_VENCL_DITH_LUT_7                     (volatile unsigned int *)((0x27e7  << 2) + 0xff900000)
+#define   VPU_VENCL_DITH_LUT_8                     (0x27e8)
+#define P_VPU_VENCL_DITH_LUT_8                     (volatile unsigned int *)((0x27e8  << 2) + 0xff900000)
+#define   VPU_VENCL_DITH_LUT_9                     (0x27e9)
+#define P_VPU_VENCL_DITH_LUT_9                     (volatile unsigned int *)((0x27e9  << 2) + 0xff900000)
+#define   VPU_VENCL_DITH_LUT_10                    (0x27ea)
+#define P_VPU_VENCL_DITH_LUT_10                    (volatile unsigned int *)((0x27ea  << 2) + 0xff900000)
+#define   VPU_VENCL_DITH_LUT_11                    (0x27eb)
+#define P_VPU_VENCL_DITH_LUT_11                    (volatile unsigned int *)((0x27eb  << 2) + 0xff900000)
+#define   VPU_VENCL_DITH_LUT_12                    (0x27ec)
+#define P_VPU_VENCL_DITH_LUT_12                    (volatile unsigned int *)((0x27ec  << 2) + 0xff900000)
+//new added 4x4 dither
+// the segment is 8'hf0
+#define   VPU_HDMI_DITH_01_04                      (0x27f0)
+#define P_VPU_HDMI_DITH_01_04                      (volatile unsigned int *)((0x27f0  << 2) + 0xff900000)
+#define   VPU_HDMI_DITH_01_15                      (0x27f1)
+#define P_VPU_HDMI_DITH_01_15                      (volatile unsigned int *)((0x27f1  << 2) + 0xff900000)
+#define   VPU_HDMI_DITH_01_26                      (0x27f2)
+#define P_VPU_HDMI_DITH_01_26                      (volatile unsigned int *)((0x27f2  << 2) + 0xff900000)
+#define   VPU_HDMI_DITH_01_37                      (0x27f3)
+#define P_VPU_HDMI_DITH_01_37                      (volatile unsigned int *)((0x27f3  << 2) + 0xff900000)
+#define   VPU_HDMI_DITH_10_04                      (0x27f4)
+#define P_VPU_HDMI_DITH_10_04                      (volatile unsigned int *)((0x27f4  << 2) + 0xff900000)
+#define   VPU_HDMI_DITH_10_15                      (0x27f5)
+#define P_VPU_HDMI_DITH_10_15                      (volatile unsigned int *)((0x27f5  << 2) + 0xff900000)
+#define   VPU_HDMI_DITH_10_26                      (0x27f6)
+#define P_VPU_HDMI_DITH_10_26                      (volatile unsigned int *)((0x27f6  << 2) + 0xff900000)
+#define   VPU_HDMI_DITH_10_37                      (0x27f7)
+#define P_VPU_HDMI_DITH_10_37                      (volatile unsigned int *)((0x27f7  << 2) + 0xff900000)
+#define   VPU_HDMI_DITH_11_04                      (0x27f8)
+#define P_VPU_HDMI_DITH_11_04                      (volatile unsigned int *)((0x27f8  << 2) + 0xff900000)
+#define   VPU_HDMI_DITH_11_15                      (0x27f9)
+#define P_VPU_HDMI_DITH_11_15                      (volatile unsigned int *)((0x27f9  << 2) + 0xff900000)
+#define   VPU_HDMI_DITH_11_26                      (0x27fa)
+#define P_VPU_HDMI_DITH_11_26                      (volatile unsigned int *)((0x27fa  << 2) + 0xff900000)
+#define   VPU_HDMI_DITH_11_37                      (0x27fb)
+#define P_VPU_HDMI_DITH_11_37                      (volatile unsigned int *)((0x27fb  << 2) + 0xff900000)
+#define   VPU_HDMI_DITH_CNTL                       (0x27fc)
+#define P_VPU_HDMI_DITH_CNTL                       (volatile unsigned int *)((0x27fc  << 2) + 0xff900000)
+//========================================================================
+//  MIPI CSI2 Controller Adaptor    (16'h2a00 - 16'h2aff)
+//
+//========================================================================
+//`define  CSI2_VCBUS_BASE            8'h2a
+//`include "csi2_regs.h"
+//======================================================================
+// D2D3 registers
+//======================================================================
+//`define     D2D3_VCBUS_BASE         8'h2b
+//
+// Reading file:  d2d3_regs.h
+//
+//===========================================================================
+// D2D3 Registers    0x - 0x
+//===========================================================================
+// -----------------------------------------------
+// CBUS_BASE:  D2D3_VCBUS_BASE = 0x2b
+// -----------------------------------------------
+//------------------------------------------------------------------------------
+// D2D3 top-level registers
+//------------------------------------------------------------------------------
+// Bit 31    RW, rd_lock_en,     1 to allow update some read-only registers based on filed
+// Bit 30    RW, sw_rst_nobuf,   1 to reset the whole d2d3 unit
+// Bit 29:28 RW, clk_auto_dis,   [29] DBR clock disable
+//                               [28] DPG clock disable
+// Bit 27:16 RW, clk_ctrl,       [27:26] gated clock control for register unit
+//                               [25:24] gated clock control for DBR unit
+//                               [23:22] gated clock control for LBDG unit
+//                               [21:20] gated clock control for MBDG unit
+//                               [19:18] gated clock control for CBDG unit
+//                               [17:16] gated clock control for DBLD unit and SCD81 unit
+// Bit 15:12 Reserved
+// Bit 11    RW, lo_chroma_sign, 0: negate the u/v component of DBR left channel video output, 1: bypass
+// Bit 10    RW, ro_chroma_sign, 0: negate the u/v component of DBR right channel video output, 1: bypass
+// Bit 9     RW, vi0_chroma_sign, 0: negate the u/v component of DPG video input, 1: bypass
+// Bit 8     RW, vi1_chroma_sign, 0: negate the u/v component of DBR video input, 1: bypass
+// Bit 7:5   Reserved
+// Bit 4     RW, lg_en,          Enable the LBDG unit and LBDG clock
+// Bit 3     RW, mg_en,          Enable the MBDG unit and MBDG clock
+// Bit 2     RW, cg_en,          Enable the CBDG unit and CBDG clock
+// Bit 1     RW, dbr_en,         Enable the DBR unit and DBR clock
+// Bit 0     RW, dpg_en,         Enable the DPG unit and clock except sub-unit CBDG, MBDG and LBDG
+#define   D2D3_GLB_CTRL                            (0x2b00)
+#define P_D2D3_GLB_CTRL                            (volatile unsigned int *)((0x2b00  << 2) + 0xff900000)
+// Indicate the input picture size in DPG unit
+// Bit 31:16 RW, szx_vi_m1,      The horizontal size minus 1
+// Bit 15:0  RW, szy_vi_m1,      The vertical size minus 1
+#define   D2D3_DPG_INPIC_SIZE                      (0x2b01)
+#define P_D2D3_DPG_INPIC_SIZE                      (volatile unsigned int *)((0x2b01  << 2) + 0xff900000)
+// Indicate the output picture size in DBR unit
+// Bit 31:16 RW, szx_vo_m1,      The horizontal size minus 1
+// Bit 15:0  RW, szy_vo_m1,      The vertical size minus 1
+#define   D2D3_DBR_OUTPIC_SIZE                     (0x2b02)
+#define P_D2D3_DBR_OUTPIC_SIZE                     (volatile unsigned int *)((0x2b02  << 2) + 0xff900000)
+// Indicate the rectangular window to generate the "depth" in DPG unit
+// Bit 31:16 RW, dg_win_x_start, Horizontal start position, count from 0
+// Bit 15:0  RW, dg_win_x_end,   Horizontal end position, count from 0
+#define   D2D3_DGEN_WIN_HOR                        (0x2b03)
+#define P_D2D3_DGEN_WIN_HOR                        (volatile unsigned int *)((0x2b03  << 2) + 0xff900000)
+// Indicate the rectangular window to generate the "depth" in DPG unit
+// Bit 31:16 RW, dg_win_y_start, Vertical start position, count from 0
+// Bit 15:0  RW, dg_win_y_end,   Vertical end position, count from 0
+#define   D2D3_DGEN_WIN_VER                        (0x2b04)
+#define P_D2D3_DGEN_WIN_VER                        (volatile unsigned int *)((0x2b04  << 2) + 0xff900000)
+//------------------------------------------------------------------------------
+// CBDG SCU18 SCD81 SCD81_PRE registers
+// cg: color based depth generate module
+// scu18: scale up module
+// scd81: scale down module
+// scd81_pre: scd81 pre-scale-down module
+//------------------------------------------------------------------------------
+// Indicate parameters of pre-scale-down unit
+// Bit 31:16 RW, scd81_hphs_step, horizontal step
+// Bit 15:0  RW, scd81_hphs_ini, horizontal initial phase
+#define   D2D3_PRE_SCD_H                           (0x2b05)
+#define P_D2D3_PRE_SCD_H                           (volatile unsigned int *)((0x2b05  << 2) + 0xff900000)
+// Bit 31:16 RW, scu18_iniph,    initial phase in SCU18,
+//                               [23:16] indicate the horizontal phase offset from the first data of every line
+//                               [31:24] indicate the vertical phase offset from the first line of every frame
+// Bit 15:12 Reserved
+// Bit 11    RW, scd81_predrop_en, 1 to enable scd81 pre-scale-down function
+// Bit 10:9  RW, cg_csc_sel,     Color Space Conversion(CSC) matrix mode selector in CBDG
+//                               0: BT.601 (16-235/240)
+//                               1: BT.709 (16-235/240)
+//                               2: BT.601 (0-255)
+//                               3: BT.709 (0-255)
+// Bit 8     RW, scu18_rep_en,   1 to double each line of the SCU18 output
+// Bit 7:4   RW, scu18_factor,   up-scale factor in SCU18 on DBR input depth data
+//                               [7:6] for vertical, 0->1:1, 1->1:2, 2->1:4, 3->1:8
+//                               [5:4] for horizontal, 0->1:1, 1->1:2, 2->1:4, 3->1:8
+// Bit 3:0   RW, scd81_factor,   down-scale factor in SCD81 on DPG source video
+//                               [3:2] for vertical, 0->1:1, 1->2:1, 2->4:1, 3->8:1
+//                               [1:0] for horizontal, 0->1:1, 1->2:1, 2->4:1, 3->8:1
+#define   D2D3_SCALER_CTRL                         (0x2b06)
+#define P_D2D3_SCALER_CTRL                         (volatile unsigned int *)((0x2b06  << 2) + 0xff900000)
+// Bit 31:24 RW, cg_rpg_dth,     the down |r-g| threshold for sky detect
+// Bit 23:16 RW, cg_rpg_uth,     the up |r-g| threshold for sky detect
+// Bit 15:8  RW, cg_lum_dth,     the down Y threshold for sky detect
+// Bit 7:0   RW, cg_lum_uth,     the up Y threshold for sky detect
+#define   D2D3_CG_THRESHOLD_1                      (0x2b07)
+#define P_D2D3_CG_THRESHOLD_1                      (volatile unsigned int *)((0x2b07  << 2) + 0xff900000)
+// Bit 31:24 RW, cg_rpb_dth,     the down |r-b| threshold for sky detect
+// Bit 23:16 RW, cg_rpb_uth,     the up |r-b| threshold for sky detect
+// Bit 15:8  RW, cg_bpg_dth,     the down |b-g| threshold for sky detect
+// Bit 7:0   RW, cg_bpg_uth,     the up |b-g| threshold for sky detect
+#define   D2D3_CG_THRESHOLD_2                      (0x2b08)
+#define P_D2D3_CG_THRESHOLD_2                      (volatile unsigned int *)((0x2b08  << 2) + 0xff900000)
+// Bit 31:24 RW, cg_vp_rel_k,    parameter to calculate vanish point reliability
+// Bit 23:16 RW, cg_vp_y_thr,    the max limitation to calculate the vanish-point's vertical position
+// Bit 15:8  RW, cg_meet_dval,   signed depth value in the sky-bitmap
+// Bit 7:0   RW, cg_unmt_dval,   signed depth value not in the sky-bitmap
+#define   D2D3_CG_PARAM_1                          (0x2b09)
+#define P_D2D3_CG_PARAM_1                          (volatile unsigned int *)((0x2b09  << 2) + 0xff900000)
+// Bit 31:16 RW, cg_vpos_thr,    Maximal vertical limitation for sky-bit map when cg_vpos_en=1 and cg_vpos_adpt_en=0
+// Bit 15:8  Reserved
+// Bit 7     RW, cg_vpos_en,     1 to enable the max vertical limitation for sky-bitmap
+// Bit 6     RW, cg_vpos_adpt_en, 1 to enable the adaptive max vertical limitation for sky-bitmap.
+//                               It is only valid when cg_vpos_en=1.
+//                               The max vertical limitation is the previous field's vanish-point (vertical position) if cg_vpos_adpt_en=1.
+// Bit 5:4   RW, cg_lpf_bypass,  bypass of low pass filter
+//                               [5]:Vertical bypass, 1: bypass the vertical LPF on the CBDG depth
+//                               [4]:Horizontal bypass, 1: bypass the horizontal LPF on the CBDG depth
+// Bit 3:0   RW, cg_vp_rel_s,    parameter to calculate vanish point reliability
+#define   D2D3_CG_PARAM_2                          (0x2b0a)
+#define P_D2D3_CG_PARAM_2                          (volatile unsigned int *)((0x2b0a  << 2) + 0xff900000)
+// Indicate parameters of pre-scale-down unit
+// Bit 31:16 RW, scd81_vphs_step, vertical step
+// Bit 15:0  RW, scd81_vphs_ini, vertical initial phase
+#define   D2D3_PRE_SCD_V                           (0x2b0b)
+#define P_D2D3_PRE_SCD_V                           (volatile unsigned int *)((0x2b0b  << 2) + 0xff900000)
+//------------------------------------------------------------------------------
+// D2P registers
+// d2p: depth to parallax transform module
+//------------------------------------------------------------------------------
+// Bit 31:24 RW, d2p_brdwid,     Horizontal boundary width for parallax, the parallax value would be forced to 0 in boundary,
+//                               the d2p_brdwid should not 0 when D2P_WRAP is enabled
+// Bit 23:22 Reserved
+// Bit 21:20 RW, d2p_lomode,     line output mode,
+//                               0:whole line is left or right;  1:whole line is left or right;
+//                               2:left/right pixel interleaved;  3:left/right half-line interleaved
+// Bit 19    RW, d2p_neg,        1 to exchange the left and right parallax value
+// Bit 18    Reserved
+// Bit 17    RW, d2p_wrap_en,    1 to enable D2P_WRAP unit
+// Bit 16    RW, d2p_lar,        Indicate the first output for left or right, 0: left; 1: right
+// Bit 15    RW, d2p_lr_switch,  enable left/right flag filed switch automatically, only valid when parallax output mode is field interleaved
+// Bit 14    RW, d2p_1dtolr,     enable to generate 2 parallax data (left and right) from one depth
+// Bit 13:12 RW, d2p_out_mode,   Parallax output mode
+//                               0:left/right pixel interleaved; 1:line or half line interleaved; 2:field interleaved
+// Bit 11:8  RW, d2p_smode,      Shift mode,
+//                               0: no shift; 1: enable left shift;
+//                               2: enable right shift; 3: both left and right shift are enabled
+// Bit 7:0   RW, d2p_offset,     depth offset, signed,
+#define   D2D3_D2P_PARAM_1                         (0x2b0c)
+#define P_D2D3_D2P_PARAM_1                         (volatile unsigned int *)((0x2b0c  << 2) + 0xff900000)
+// Bit 31:24 RW, d2p_pg0,        positive parallax gain when Parallax value < pt
+// Bit 23:16 RW, d2p_pg1,        positive parallax gain when Parallax value >= pt
+// Bit 15:8  RW, d2p_pt,         unsigned value used to separate the positive parallax range
+// Bit 7:0   RW, d2p_plimit,     The limitation for positive parallax
+#define   D2D3_D2P_PARAM_2                         (0x2b0d)
+#define P_D2D3_D2P_PARAM_2                         (volatile unsigned int *)((0x2b0d  << 2) + 0xff900000)
+// Bit 31:24 RW, d2p_ng0,        negative parallax gain when Parallax value > -nt
+// Bit 23:16 RW, d2p_ng1,        negative parallax gain when Parallax value <= -nt
+// Bit 15:8  RW, d2p_nt,         unsigned value used to separate the negative parallax range
+// Bit 7:0   RW, d2p_nlimit,     The limitation for negative parallax
+#define   D2D3_D2P_PARAM_3                         (0x2b0e)
+#define P_D2D3_D2P_PARAM_3                         (volatile unsigned int *)((0x2b0e  << 2) + 0xff900000)
+// Indicate step parameters of SCU18 unit
+// Bit 31:17 Reserved
+// Bit 16    RW, scu18_step_en,   step set enable in SCU18
+// Bit 15:8  RW, scu18_hphs_step, horizontal step in SCU18
+// Bit 7:0   RW, scu18_vphs_step, vertical step in SCU18
+#define   D2D3_SCU18_STEP                          (0x2b0f)
+#define P_D2D3_SCU18_STEP                          (volatile unsigned int *)((0x2b0f  << 2) + 0xff900000)
+//------------------------------------------------------------------------------
+// LBDG and DBLD registers
+// lg: luma based depth generate module
+// db: depth blending module
+//------------------------------------------------------------------------------
+// Bit 31:22 Reserved
+// Bit 21:20 RW, db_lpf_bpcoeff, [21]:Vertical factor of low pass filter,
+//                               1: Vfactor = 0/0/64/0/0, 0: Vfactor = {db_vf_a,db_vf_b,db_vf_c,db_vf_b,db_vf_a}, see D2D3_CTRL_15
+//                               [20]:Horizontal factor of low pass filter,
+//                               1: Hfactor = 0/0/64/0/0, 0: Hfactor = {db_hf_a,db_hf_b,db_hf_c,db_hf_b,db_hf_a}, see D2D3_CTRL_14
+// Bit 19:18 RW, lg_lpf_bpcoeff, [19]:Vertical factor of low pass filter, 1: Vfactor = 0/64/0, 0: Vfactor = 20/24/20
+//                               [18]:Horizontal factor of low pass filter, 1: Hfactor = 0/64/0, 0: Hfactor = 16/32/16
+// Bit 17:16 RW, cg_lpf_bpcoeff, [17]:Vertical factor of low pass filter, 1: Vfactor = 0/64/0, 0: Vfactor = 20/24/20
+//                               [16]:Horizontal factor of low pass filter, 1: Hfactor = 0/64/0, 0: Hfactor = 16/32/16
+// Bit 15:10 Reserved
+// Bit 9:8   RW, db_lpf_bypass,  [9] 1 to bypass the vertical LPF on the DBLD depth
+//                               [8] 1 to bypass the horizontal LPF on the DBLD depth
+// Bit 7:6   RW, lg_lpf_bypass,  [7] 1 to bypass the vertical LPF on the LBDG depth
+//                               [6] 1 to bypass the horizontal LPF on the LBDG depth
+// Bit 5:0   RW, lg_kc,          gain of CPL(v-u+256-y) to calculate the depth in LBDG
+#define   D2D3_DPF_LPF_CTRL                        (0x2b10)
+#define P_D2D3_DPF_LPF_CTRL                        (volatile unsigned int *)((0x2b10  << 2) + 0xff900000)
+//------------------------------------------------------------------------------
+// DBLD registers
+// db: depth blending module
+//------------------------------------------------------------------------------
+// Bit 31:24 RW, db_g2_cg,       gain of CBDG depth in DBLD
+// Bit 23:16 RW, db_o2_cg,       offset of CBDG depth in DBLD
+// Bit 15:8  RW, db_g1_cg,       gain of CBDG depth using for summary in DBLD
+// Bit 7:0   RW, db_o1_cg,       offset of CBDG depth using for summary in DBLD
+#define   D2D3_DBLD_CG_PARAM                       (0x2b11)
+#define P_D2D3_DBLD_CG_PARAM                       (volatile unsigned int *)((0x2b11  << 2) + 0xff900000)
+// Bit 31:24 RW, db_g2_mg,       gain of MBDG depth in DBLD
+// Bit 23:16 RW, db_o2_mg,       offset of MBDG depth in DBLD
+// Bit 15:8  RW, db_g1_mg,       gain of MBDG depth using for summary in DBLD
+// Bit 7:0   RW, db_o1_mg,       offset of MBDG depth using for summary in DBLD
+#define   D2D3_DBLD_MG_PARAM                       (0x2b12)
+#define P_D2D3_DBLD_MG_PARAM                       (volatile unsigned int *)((0x2b12  << 2) + 0xff900000)
+// Bit 31:24 RW, db_g2_lg,       gain of LBDG depth in DBLD
+// Bit 23:16 RW, db_o2_lg,       offset of LBDG depth in DBLD
+// Bit 15:8  RW, db_g1_lg,       gain of LBDG depth using for summary in DBLD
+// Bit 7:0   RW, db_o1_lg,       offset of LBDG depth using for summary in DBLD
+#define   D2D3_DBLD_LG_PARAM                       (0x2b13)
+#define P_D2D3_DBLD_LG_PARAM                       (volatile unsigned int *)((0x2b13  << 2) + 0xff900000)
+// Bit 31:24 RW, db_factor,      unsigned gain of difference in DBLD
+// Bit 23:16 RW, db_hf_a,        see register DPF_LPF_CTRL:db_lpf_bpcoeff, sign
+// Bit 15:8  RW, db_hf_b,        see register DPF_LPF_CTRL:db_lpf_bpcoeff, sign
+// Bit 7:0   RW, db_hf_c,        see register DPF_LPF_CTRL:db_lpf_bpcoeff, sign
+#define   D2D3_DBLD_LPF_HCOEFF                     (0x2b14)
+#define P_D2D3_DBLD_LPF_HCOEFF                     (volatile unsigned int *)((0x2b14  << 2) + 0xff900000)
+// Bit 31:24 RW, db_owin_fill,   signed depth value outside the rectangular window defined in register DGEN_WIN_HOR and DGEN_WIN_VER
+// Bit 23:16 RW, db_vf_a,        see register DPF_LPF_CTRL:db_lpf_bpcoeff, sign
+// Bit 15:8  RW, db_vf_b,        see register DPF_LPF_CTRL:db_lpf_bpcoeff, sign
+// Bit 7:0   RW, db_vf_c,        see register DPF_LPF_CTRL:db_lpf_bpcoeff, sign
+#define   D2D3_DBLD_LPF_VCOEFF                     (0x2b15)
+#define P_D2D3_DBLD_LPF_VCOEFF                     (volatile unsigned int *)((0x2b15  << 2) + 0xff900000)
+// Bit 31:28 RW, hist_depth_idx,
+// Bit 27:26 Reserved
+// Bit 25    RW, mbdg_dep_neg,   1 to negate the output data of MBDG
+// Bit 24    RW, lbdg_dep_neg,   1 to negate the output data of LBDG
+// Bit 23:16 RW, db_f1_ctrl,     MUX1 selector
+//                               [1:0] MUX1 path1 selector, 0:summary, 1:CBDG, 2:MBDG, 3:LBDG
+//                               [3:2] MUX1 path2 selector, 0:summary, 1:CBDG, 2:MBDG, 3:LBDG
+//                               [6:4] MUX1 out1 selector, 1:CBDG, 2:MBDG, 3:LBDG, 4:summary, 5:MUX1out0, others:summary
+//                               [7] MUX1OUT0 selector, 0:MIN (MUX1PATH1,MUX1Path2), 1:MAX (MUX1Path1,MUX1Path2)
+// Bit 15:8  RW, db_f2_ctrl,     MUX2 selector
+//                               [1:0] MUX2 path1 selector, 0:MUX1OUT1, 1:CBDG, 2:MBDG, 3:LBDG
+//                               [3:2] MUX2 path2 selector, 0:MUX1OUT1, 1:CBDG, 2:MBDG, 3:LBDG
+//                               [6:4] MUX2 out1 selector, 1:CBDG, 2:MBDG, 3:LBDG, 4:summary, 5:MUX2out0, others:MUX2out0
+//                               [7] MUX2OUT0 selector, 0:MIN (MUX2PATH1,MUX2Path2), 1:MAX (MUX2Path1,MUX2Path2)
+// Bit 7:4   RW, db_fifo0_sel,   the source input of FIFO0
+//                               0: no use; 1:from CBDG; 2:from MBDG; 3:from LBDG others:reserved
+// Bit 3:0   RW, db_fifo1_sel,   the source input of FIFO1
+//                               0: no use; 1:from CBDG; 2:from MBDG; 3:from LBDG 4: from FIFO0; others:reserved
+#define   D2D3_DBLD_PATH_CTRL                      (0x2b16)
+#define P_D2D3_DBLD_PATH_CTRL                      (volatile unsigned int *)((0x2b16  << 2) + 0xff900000)
+// Indicate the input picture size in SCU18 unit
+// Bit 31:16 RW, szy_scui,       The vertical size
+// Bit 15:0  RW, szx_scui,       The horizontal size
+#define   D2D3_SCU18_INPIC_SIZE                    (0x2b17)
+#define P_D2D3_SCU18_INPIC_SIZE                    (volatile unsigned int *)((0x2b17  << 2) + 0xff900000)
+//------------------------------------------------------------------------------
+// MBDG registers
+// mg: model based depth generate module
+//------------------------------------------------------------------------------
+// Bit 31:18 Reserved
+// Bit 17    RW, mg_vp_en,       mdg vanish point enable, not used
+// Bit 16    RW, mg_sw_en,       1 to use the software forced parameter for the point D, U and C in MBDG
+// Bit 15:8  RW, mg_owin_fill,   Signed depth value outside the rectangular window defined in register DGEN_WIN_HOR and DGEN_WIN_VER
+// Bit 7     RW, mg_iir_en,      1 to enable the 2-taps IIR filter in MBDG
+// Bit 6:0   RW, mg_iir,         [6]: 1 to bypass the 2-taps IIR filter in MBDG
+//                               [5:0]:Unsigned coefficient of the 2-taps IIR filter in MBDG
+//                               [6]:bypass, 1:bypass, 0:not bypass
+#define   D2D3_MBDG_CTRL                           (0x2b18)
+#define P_D2D3_MBDG_CTRL                           (volatile unsigned int *)((0x2b18  << 2) + 0xff900000)
+// Bit 31:28 RW, mg_dtl_pxl_left, Max pixel number (1<< mg_dtl_pxl_left) using in the left window for activities in MBDG
+// Bit 27:24 RW, mg_dtl_pxl_right, Max pixel number (1<< mg_dtl_pxl_right) using in the right window for activities in MBDG
+// Bit 23:16 RW, mg_cx_sw,       Depth of point C in horizontal curve in MBDG for software forced
+// Bit 15:8  RW, mg_ux_sw,       Depth of point U in horizontal curve in MBDG for software forced
+// Bit 7:0   RW, mg_dx_sw,       Depth of point D in horizontal curve in MBDG for software forced
+#define   D2D3_MBDG_PARAM_0                        (0x2b19)
+#define P_D2D3_MBDG_PARAM_0                        (volatile unsigned int *)((0x2b19  << 2) + 0xff900000)
+// Bit 31:28 RW, mg_dtl_pxl_up,  Max pixel number (1<< mg_dtl_pxl_up) using in the top window for activities in MBDG
+// Bit 27:24 RW, mg_dtl_pxl_dn,  Max pixel number (1<< mg_dtl_pxl_dn) using in the bottom window for activities in MBDG
+// Bit 23:16 RW, mg_cy_sw,       Depth of point C in vertical curve in MBDG for software forced
+// Bit 15:8  RW, mg_uy_sw,       Depth of point U in vertical curve in MBDG for software forced
+// Bit 7:0   RW, mg_dy_sw,       Depth of point D in vertical curve in MBDG for software forced
+#define   D2D3_MBDG_PARAM_1                        (0x2b1a)
+#define P_D2D3_MBDG_PARAM_1                        (volatile unsigned int *)((0x2b1a  << 2) + 0xff900000)
+// Bit 31:24 RW, mg_dtl_ln_up,   Line number in the top window for activities in MBDG
+// Bit 23:16 RW, mg_dtl_ln_dn,   Line number in the bottom window for activities in MBDG
+// Bit 15:8  RW, mg_dtl_ln_left, Column number in the left window for activities in MBDG
+// Bit 7:0   RW, mg_dtl_ln_right,Column number in the right window for activities in MBDG
+#define   D2D3_MBDG_PARAM_2                        (0x2b1b)
+#define P_D2D3_MBDG_PARAM_2                        (volatile unsigned int *)((0x2b1b  << 2) + 0xff900000)
+// Bit 31:24 RW, mg_y_max,       Software initial depth of point D and U in vertical curve
+// Bit 23:16 RW, mg_y_min,       Software initial depth of point C in vertical curve
+// Bit 15:8  RW, mg_x_max,       Software initial depth of point D and U in horizontal curve
+// Bit 7:0   RW, mg_x_min,       Software initial depth of point C in horizontal curve
+#define   D2D3_MBDG_PARAM_3                        (0x2b1c)
+#define P_D2D3_MBDG_PARAM_3                        (volatile unsigned int *)((0x2b1c  << 2) + 0xff900000)
+// Bit 31:27 Reserved
+// Bit 26    RW, mg_y_adapt_en,  1 to enable the adaptive mode for point U/D in vertical curve calculation
+// Bit 25    RW, mg_xmm_adapt_en, 1 to enable the XMM adaptive mode for point U/D in horizontal curve calculation
+// Bit 24    RW, mg_x_adapt_en,  1 to enable the adaptive mode for point U/D in horizontal curve calculation
+// Bit 23:20 RW, mg_ytrans_1,    Shifter controller in vertical curve calculation, if mg_xtrans_1<0, right shift abs(mg_xtrans_1) bits, others left shift abs(mg_xtrans_1) bits
+// Bit 19:16 RW, mg_xtrans_1,    Shifter controller in horizontal curve calculation, if mg_xtrans_1<0, right shift abs(mg_xtrans_1) bits, others left shift abs(mg_xtrans_1) bits
+// Bit 15:8  RW, mg_yk_0,        The based activities value of the ACT for vertical curve
+// Bit 7:0   RW, mg_xk_0,        The based activities value of the ACT for horizontal curve
+#define   D2D3_MBDG_PARAM_4                        (0x2b1d)
+#define P_D2D3_MBDG_PARAM_4                        (volatile unsigned int *)((0x2b1d  << 2) + 0xff900000)
+// Bit 31:24 RW, mg_ysu3,        Quantized value 3 in vertical curve adaptive calculation
+// Bit 23:16 RW, mg_ysu2,        Quantized value 2 in vertical curve adaptive calculation
+// Bit 15:8  RW, mg_ysu1,        Quantized value 1 in vertical curve adaptive calculation
+// Bit 7:0   RW, mg_ysu0,        Quantized value 0 in vertical curve adaptive calculation
+#define   D2D3_MBDG_PARAM_5                        (0x2b1e)
+#define P_D2D3_MBDG_PARAM_5                        (volatile unsigned int *)((0x2b1e  << 2) + 0xff900000)
+// Bit 31:24 RW, mg_xsu3,        Quantized value 3 in horizontal curve adaptive calculation
+// Bit 23:16 RW, mg_xsu2,        Quantized value 2 in horizontal curve adaptive calculation
+// Bit 15:8  RW, mg_xsu1,        Quantized value 1 in horizontal curve adaptive calculation
+// Bit 7:0   RW, mg_xsu0,        Quantized value 0 in horizontal curve adaptive calculation
+#define   D2D3_MBDG_PARAM_6                        (0x2b1f)
+#define P_D2D3_MBDG_PARAM_6                        (volatile unsigned int *)((0x2b1f  << 2) + 0xff900000)
+// Bit 31:16 Reserved
+// Bit 15:8  RW, mg_xsu4,        Quantized value 4 in horizontal curve adaptive calculation
+// Bit 7:0   RW, mg_ysu4,        Quantized value 4 in vertical curve adaptive calculation
+#define   D2D3_MBDG_PARAM_7                        (0x2b20)
+#define P_D2D3_MBDG_PARAM_7                        (volatile unsigned int *)((0x2b20  << 2) + 0xff900000)
+// Bit 31:28 RW, dbg_hscnt_sel   see DBG_STATUS_2
+// Bit 27:25 Reserved
+// Bit 24    RW, dbg_dbr_en,     1 to enable debug mode in DBR
+// Bit 23:16 RW, dbg_force_data, Forced data in debug mode
+// Bit 15:12 RW, dbg_bld_ctrl,   debug controller for DBLD
+//                               [12]:enable;  [13]: 0 for passive mode, 0 for handshake mode
+//                               [15:14]: 0 for constant mode, 1 for step1 mode
+// Bit 11:8  RW, dbg_mg_ctrl,    debug controller for MBDG
+//                               [8]:enable;  [9]: 0 for passive mode, 0 for handshake mode
+//                               [11:10]: 0 for constant mode, 1 for step1 mode
+// Bit 7:4   RW, dbg_cg_ctrl,    debug controller for CBDG
+//                               [4]:enable;  [5]: 0 for passive mode, 0 for handshake mode
+//                               [7:6]: 0 for constant mode, 1 for step1 mode
+// Bit 3:0   RW, dbg_lg_ctrl,    debug controller for LBDG
+//                               [0]:enable;  [1]: 0 for passive mode, 0 for handshake mode
+//                               [3:2]: 0 for constant mode, 1 for step1 mode
+#define   D2D3_DBG_CTRL                            (0x2b23)
+#define P_D2D3_DBG_CTRL                            (volatile unsigned int *)((0x2b23  << 2) + 0xff900000)
+//------------------------------------------------------------------------------
+// DWMIF registers
+//------------------------------------------------------------------------------
+// Bit 31:18 Reserved
+// Bit 17    RW, dw_x_rev        0: Normal write data from left to right in horizontal
+//                               1: Reversed write data from left to right in horizontal
+// Bit 16    RW, dw_y_rev        0: Normal write data from top to bottom in horizontal
+//                               1: Reversed write data from bottom to top in horizontal
+// Bit 15    RW, dw_done_clr     1 to clear register depw_done (DWMIF_STATUS)
+// Bit 14    RW, dw_little_endian, 0: data is ordered in big-endian, 1: little endian
+// Bit 13:12 RW, dw_pic_struct,  0:read every line, 1:reserved, 2:read even line, 3:read odd line
+// Bit 11    RW, dw_urgent,      urgent index
+// Bit 10    RW, dw_clr_wrrsp,   1:clear the write fifo counter
+// Bit 9     RW, dw_canvas_wr,   canvas write initialization again
+// Bit 8     RW, dw_req_en,      1 to enable write request
+// Bit 7:0   RW, dw_canvas_index,Canvas index for the MSB of memory address for memory write
+#define   D2D3_DWMIF_CTRL                          (0x2b24)
+#define P_D2D3_DWMIF_CTRL                          (volatile unsigned int *)((0x2b24  << 2) + 0xff900000)
+// Bit 31    Reserved
+// Bit 30:16 RW, dw_end_x,       Horizontal end position for memory write, count by BYTE
+// Bit 15    Reserved
+// Bit 14:0  RW, dw_start_x,     Horizontal start position for memory write, count by BYTE
+#define   D2D3_DWMIF_HPOS                          (0x2b25)
+#define P_D2D3_DWMIF_HPOS                          (volatile unsigned int *)((0x2b25  << 2) + 0xff900000)
+// Bit 31:29 Reserved
+// Bit 28:16 RW, dw_end_y,       Vertical end position for memory write, count by BYTE
+// Bit 15:13 Reserved
+// Bit 12:0  RW, dw_start_y,     Vertical start position for memory write, count by BYTE
+#define   D2D3_DWMIF_VPOS                          (0x2b26)
+#define P_D2D3_DWMIF_VPOS                          (volatile unsigned int *)((0x2b26  << 2) + 0xff900000)
+// Bit 31:28 Reserved
+// Bit 27:16 RW, dw_vsizem1,     Vertical size for memory write, equal the size minus 1
+// Bit 15:12 Reserved
+// Bit 11:0  RW, dw_hsizem1,     Horizontal size for memory write, equal the size minus 1
+#define   D2D3_DWMIF_SIZE                          (0x2b27)
+#define P_D2D3_DWMIF_SIZE                          (volatile unsigned int *)((0x2b27  << 2) + 0xff900000)
+//------------------------------------------------------------------------------
+// DRMIF registers
+//------------------------------------------------------------------------------
+// Bit 31:18 Reserved
+// Bit 17    RW, dr_y_rev,       0: Normal Read data from top to bottom in horizontal
+//                               1: Reversed read data from bottom to top in horizontal
+// Bit 16    RW, dr_x_rev,       0: Normal Read data from left to right in horizontal
+//                               1: Reversed read data from right to left in horizontal
+// Bit 15    RW, dr_clr_fifo_error, 1 to clear the overflow flag of the sticky FIFO
+// Bit 14    RW, dr_little_endian, 0: data is ordered in big-endian; 1: little-endian
+// Bit 13:12 RW, dr_pic_struct,  0: progressive;  1: Reserved;
+//                               2: interlaced, even line;  3: interlaced, odd line
+// Bit 11    RW, dr_urgent,      urgent index, no use in this system
+// Bit 10:9  RW, dr_burst_size,  Burst read length for each request; 0=24,1=32,2=48,3=64
+// Bit 8     RW, dr_req_en,      1 to enable read request
+// Bit 7:0   RW, dr_canvas_index, Canvas index for the MSB of memory address for memory read
+#define   D2D3_DRMIF_CTRL                          (0x2b28)
+#define P_D2D3_DRMIF_CTRL                          (volatile unsigned int *)((0x2b28  << 2) + 0xff900000)
+// Bit 31    Reserved
+// Bit 30:16 RW, dr_end_x,       Horizontal end position for memory read, count by BYTE
+// Bit 15    Reserved
+// Bit 14:0  RW, dr_start_x,     Horizontal start position for memory read, count by BYTE
+#define   D2D3_DRMIF_HPOS                          (0x2b29)
+#define P_D2D3_DRMIF_HPOS                          (volatile unsigned int *)((0x2b29  << 2) + 0xff900000)
+// Bit 31:29 Reserved
+// Bit 28:16 RW, dr_end_y,       Vertical end position for memory read, count by BYTE
+// Bit 15:13 Reserved
+// Bit 12:0  RW, dr_start_y,     Vertical start position for memory read, count by BYTE
+#define   D2D3_DRMIF_VPOS                          (0x2b2a)
+#define P_D2D3_DRMIF_VPOS                          (volatile unsigned int *)((0x2b2a  << 2) + 0xff900000)
+//------------------------------------------------------------------------------
+// PDR registers
+// ddd: parallax based render
+//------------------------------------------------------------------------------
+// Bit 31:8  Reserved
+// Bit 7     RW, ddd_brdlpf_en,  1 to enable the smooth filter on the depth around the boundary
+// Bit 6     RW, ddd_extn_black, 1 to enable the function to fill black colour when interpolated pixels is outside the picture in DBR
+// Bit 5     RW, ddd_wrap_en,    Reserved
+// Bit 4     RW, ddd_hhalf,      1 to indicate the left/right line length is a half of original line.
+// Bit 3:2   RW, ddd_out_mode,   Reserved
+// Bit 1:0   RW, ddd_lomode,     wrap & pbr interleave mode:
+//                               2'b0x: whole line is left or right;
+//                               2'b10: d2p_lar=1(D2P_PARAM_1), rlrlrlrl inteleave in one line,
+//                                      d2p_lar=0(D2P_PARAM_1), lrlrlrlr inteleave in one line,
+//                               2'b11: d2p_lar=1(D2P_PARAM_1), rrrrr?lllll, half line is right, another half is left,
+//                                      d2p_lar=0(D2P_PARAM_1), lllll?rrrrr, half line is left, another half is right,
+#define   D2D3_DBR_DDD_CTRL                        (0x2b2c)
+#define P_D2D3_DBR_DDD_CTRL                        (volatile unsigned int *)((0x2b2c  << 2) + 0xff900000)
+// Bit 31:0  RW, ddd_dbg_ctrl,   no use
+#define   D2D3_DBR_DDD_DBG                         (0x2b2d)
+#define P_D2D3_DBR_DDD_DBG                         (volatile unsigned int *)((0x2b2d  << 2) + 0xff900000)
+//------------------------------------------------------------------------------
+// LRDMX registers
+//------------------------------------------------------------------------------
+// Bit 31:9  Reserved
+// Bit 8     RW, lr_merge,       1: all the left/right input go to the left channel output
+// Bit 7:6   RW, lrd_ff0_sel,    FF0 source selector
+//                               0:from left input; 1:from right input; 2:from FF0; 3:no used
+// Bit 5:4   RW, lrd_ff1_sel,    FF1 source selector
+//                               0:from left input; 1:from right input; 2:from FF0; 3:no used
+// Bit 3:2   RW, lrd_lout_sel,   left channel DEMUX
+//                               00: ff0  01:ff1   10: left input  11:right input
+// Bit 1:0   RW, lrd_rout_sel,   right channel DEMUX
+//                               00: ff1  01:ff0   10: left input  11:right input
+#define   D2D3_DBR_LRDMX_CTRL                      (0x2b2f)
+#define P_D2D3_DBR_LRDMX_CTRL                      (volatile unsigned int *)((0x2b2f  << 2) + 0xff900000)
+//------------------------------------------------------------------------------
+// Read Only registers
+//------------------------------------------------------------------------------
+// Bit 31:24 RO, ro_cg_vprel,    vanish point's reliability in CBDG
+// Bit 23:12 RO, ro_cg_vpx,      vanish point's X-Axis in CBDG
+// Bit 11:0  RO, ro_cg_vpy,      vanish point's Y-Axis in CBDG
+#define   D2D3_CBDG_STATUS_1                       (0x2b30)
+#define P_D2D3_CBDG_STATUS_1                       (volatile unsigned int *)((0x2b30  << 2) + 0xff900000)
+// Bit 31:24 RO, ro_mg_cx[7:0],  X-Axis of point C in horizontal curve in MBDG
+// Bit 23:16 RO, ro_mg_ux,       Depth value of point U in horizontal curve in MBDG
+// Bit 15:8  RO, ro_mg_dx,       Depth value of point D in horizontal curve in MBDG
+// Bit 7:0   RO, ro_mg_minx,     Depth value of point C in horizontal curve in MBDG
+#define   D2D3_MBDG_STATUS_1                       (0x2b31)
+#define P_D2D3_MBDG_STATUS_1                       (volatile unsigned int *)((0x2b31  << 2) + 0xff900000)
+// Bit 31:24 RO, ro_mg_cy[7:0],  X-Axis of point C in vertical curve in MBDG
+// Bit 23:16 RO, ro_mg_uy,       Depth value of point U in vertical curve in MBDG
+// Bit 15:8  RO, ro_mg_dy,       Depth value of point D in vertical curve in MBDG
+// Bit 7:0   RO, ro_mg_miny,     Depth value of point C in vertical curve in MBDG
+#define   D2D3_MBDG_STATUS_2                       (0x2b32)
+#define P_D2D3_MBDG_STATUS_2                       (volatile unsigned int *)((0x2b32  << 2) + 0xff900000)
+// Bit 31    RO, ro_wrap_status, 1 indicate the D2P_WRAP is busy to perform the initialization
+// Bit 30:8  Reserved
+// Bit 7:4   RO, ro_mg_cy[11:8], X-Axis of point C in vertical curve in MBDG
+// Bit 3:0   RO, ro_mg_cx[11:8], X-Axis of point C in horizontal curve in MBDG
+#define   D2D3_MBDG_STATUS_3                       (0x2b33)
+#define P_D2D3_MBDG_STATUS_3                       (volatile unsigned int *)((0x2b33  << 2) + 0xff900000)
+// Bit 31:21 Reserved
+// Bit 20:0  RO, ro_mg_sum_u,    ACT(top): activities of the top part
+#define   D2D3_MBDG_STATUS_4                       (0x2b34)
+#define P_D2D3_MBDG_STATUS_4                       (volatile unsigned int *)((0x2b34  << 2) + 0xff900000)
+// Bit 31:21 Reserved
+// Bit 20:0  RO, ro_mg_sum_d,    ACT(bottom): activities of the bottom part
+#define   D2D3_MBDG_STATUS_5                       (0x2b35)
+#define P_D2D3_MBDG_STATUS_5                       (volatile unsigned int *)((0x2b35  << 2) + 0xff900000)
+// Bit 31:21 Reserved
+// Bit 20:0  RO, ro_mg_sum_l,    ACT(left): activities of the left part
+#define   D2D3_MBDG_STATUS_6                       (0x2b36)
+#define P_D2D3_MBDG_STATUS_6                       (volatile unsigned int *)((0x2b36  << 2) + 0xff900000)
+// Bit 31:21 Reserved
+// Bit 20:0  RO, ro_mg_sum_r,    ACT(right): activities of the right part
+#define   D2D3_MBDG_STATUS_7                       (0x2b37)
+#define P_D2D3_MBDG_STATUS_7                       (volatile unsigned int *)((0x2b37  << 2) + 0xff900000)
+// Bit 31:0 dbg_handshake_ro0,   handshake signal for debug, internal srdy and rrdy
+#define   D2D3_DBG_STATUS_1                        (0x2b38)
+#define P_D2D3_DBG_STATUS_1                        (volatile unsigned int *)((0x2b38  << 2) + 0xff900000)
+// Bit 31:0 dbg_hscnt,           dbg_hscnt_sel == 4'h0, output lg hscnt
+//                               dbg_hscnt_sel == 4'h1, output cg hscnt
+//                               dbg_hscnt_sel == 4'h2, output mg hscnt
+//                               dbg_hscnt_sel == 4'h3, output bld hscnt
+//                               dbg_hscnt_sel == other value, output 32'h0
+#define   D2D3_DBG_STATUS_2                        (0x2b39)
+#define P_D2D3_DBG_STATUS_2                        (volatile unsigned int *)((0x2b39  << 2) + 0xff900000)
+// Bit 31:0 RO, drmif_status,    drmif module internal status
+#define   D2D3_DRMIF_STATUS                        (0x2b3a)
+#define P_D2D3_DRMIF_STATUS                        (volatile unsigned int *)((0x2b3a  << 2) + 0xff900000)
+// Bit 31:2 RO, Reserved
+// Bit 1:0  RO, d2d3_status0,    [1]: depw_done, one field depth write to ddr has done
+//                               [0]: dwmif_pending_ddr_wrrsp, 1 to indicate write response from ddr
+#define   D2D3_DWMIF_STATUS                        (0x2b3b)
+#define P_D2D3_DWMIF_STATUS                        (volatile unsigned int *)((0x2b3b  << 2) + 0xff900000)
+// Bit 31:24 Reserved
+// Bit 23:0  RO, ro_meet_sum,    register sumxy_sum_dbg in CBDG
+#define   D2D3_CBDG_STATUS_2                       (0x2b3c)
+#define P_D2D3_CBDG_STATUS_2                       (volatile unsigned int *)((0x2b3c  << 2) + 0xff900000)
+// Bit 31:20 Reserved
+// Bit 19:0  RO, ro_hist_depth,
+#define   D2D3_DBLD_STATUS                         (0x2b3d)
+#define P_D2D3_DBLD_STATUS                         (volatile unsigned int *)((0x2b3d  << 2) + 0xff900000)
+// Bit 31:0 Reserved
+#define   D2D3_RESEV_STATUS1                       (0x2b3e)
+#define P_D2D3_RESEV_STATUS1                       (volatile unsigned int *)((0x2b3e  << 2) + 0xff900000)
+// Bit 31:0  Reserved
+#define   D2D3_RESEV_STATUS2                       (0x2b3f)
+#define P_D2D3_RESEV_STATUS2                       (volatile unsigned int *)((0x2b3f  << 2) + 0xff900000)
+//
+// Closing file:  d2d3_regs.h
+//
+//========================================================================
+//  MIPI DSI Host Controller        (16'h2c00 - 16'h2cff)
+//
+//========================================================================
+//`define  DSI_VCBUS_BASE             8'h2c
+//`include "dsi_regs.h"
+//========================================================================
+//  ISP register    (16'h2d00 - 16'h2dff)
+//========================================================================
+//`define ISP_VCBUS_BASE                   8'h2d
+//`include "isp_reg.h"
+//`define MADB_VCBUS_BASE                8'h2d
+//
+// Reading file:  dnr_regs.h
+//
+// synopsys translate_off
+// synopsys translate_on
+// -----------------------------------------------
+// CBUS_BASE:  MADB_VCBUS_BASE = 0x2d
+// -----------------------------------------------
+#define   DNR_CTRL                                 (0x2d00)
+#define P_DNR_CTRL                                 (volatile unsigned int *)((0x2d00  << 2) + 0xff900000)
+//Bit 31:17,        reserved
+//Bit 16,            reg_dnr_en		                                , dnr enable                  . unsigned  , default = 1
+//Bit 15,            reg_dnr_db_vdbstep                          , vdb step, 0: 4, 1: 8        . unsigned  , default = 1
+//Bit 14,            reg_dnr_db_vdbprten                         , vdb protectoin enable       . unsigned  , default = 1
+//Bit 13,            reg_dnr_gbs_difen                           , enable dif (between LR and LL/RR) condition for gbs stat.. unsigned  , default = 0
+//Bit 12,            reg_dnr_luma_en                             , enable ycbcr2luma module    . unsigned  , default = 1
+//Bit 11:10,        reg_dnr_db_mod                              , deblocking mode, 0: disable, 1: horizontal deblocking, 2: vertical deblocking, 3: horizontal & vertical deblocking. unsigned  , default = 3
+//Bit  9,            reg_dnr_db_chrmen                           , enable chroma deblocking    . unsigned  , default = 1
+//Bit  8,            reg_dnr_hvdif_mod                           , 0: calc. difs by original Y, 1: by new luma. unsigned  , default = 1
+//Bit  7,            reserved
+//Bit  6: 4,        reg_dnr_demo_lften                          , b0: Y b1:U b2:V             . unsigned  , default = 7
+//Bit  3,            reserved
+//Bit  2: 0,        reg_dnr_demo_rgten                          , b0: Y b1:U b2:V             . unsigned  , default = 7
+#define   DNR_HVSIZE                               (0x2d01)
+#define P_DNR_HVSIZE                               (volatile unsigned int *)((0x2d01  << 2) + 0xff900000)
+//Bit 31:29,        reserved
+//Bit 28:16,        reg_dnr_hsize                               , hsize                       . unsigned  , default = 0
+//Bit 15:13,        reserved
+//Bit 12: 0,        reg_dnr_vsize                               , vsize                       . unsigned  , default = 0
+#define   DNR_DBLK_BLANK_NUM                       (0x2d02)
+#define P_DNR_DBLK_BLANK_NUM                       (volatile unsigned int *)((0x2d02  << 2) + 0xff900000)
+//Bit 31:16,        reserved
+//Bit 15: 8,        reg_dblk_hblank_num                         , deblock hor blank num       . unsigned  , default = 16
+//Bit  7: 0,        reg_dblk_vblank_num                         , deblock ver blank num       . unsigned  , default = 45
+#define   DNR_BLK_OFFST                            (0x2d03)
+#define P_DNR_BLK_OFFST                            (volatile unsigned int *)((0x2d03  << 2) + 0xff900000)
+//Bit 31: 7,        reserved
+//Bit  6: 4,        reg_dnr_hbofst                              , horizontal block offset may provide by software calc.. unsigned  , default = 0
+//Bit  3,            reserved
+//Bit  2: 0,        reg_dnr_vbofst                              , vertical block offset may provide by software calc.. unsigned  , default = 0
+#define   DNR_GBS                                  (0x2d04)
+#define P_DNR_GBS                                  (volatile unsigned int *)((0x2d04  << 2) + 0xff900000)
+//Bit 31: 2,        reserved
+//Bit  1: 0,        reg_dnr_gbs                                 , global block strength may update by software calc.. unsigned  , default = 0
+#define   DNR_HBOFFST_STAT                         (0x2d05)
+#define P_DNR_HBOFFST_STAT                         (volatile unsigned int *)((0x2d05  << 2) + 0xff900000)
+//Bit 31:24,        reg_dnr_hbof_difthd                         , dif threshold (>=) between LR and LL/RR. unsigned  , default = 2
+//Bit 23:16,        reg_dnr_hbof_edgethd                        , edge threshold (<=) for LR  . unsigned  , default = 32
+//Bit 15: 8,        reg_dnr_hbof_flatthd                        , flat threshold (>=) for LR  . unsigned  , default = 0
+//Bit  7,            reserved
+//Bit  6: 4,        reg_dnr_hbof_delta                          , delta for weighted bin accumulator. unsigned  , default = 1
+//Bit  3,            reserved
+//Bit  2: 0,        reg_dnr_hbof_statmod                        , statistic mode for horizontal block offset, 0: count flags for 8-bin, 1: count LRs for 8-bin, 2: count difs for 8-bin, 3: count weighted flags for 8-bin, 4: count flags for first 32-bin, 5: count LRs for first 32-bin, 6 or 7: count difs for first 32-bin. unsigned  , default = 2
+#define   DNR_VBOFFST_STAT                         (0x2d06)
+#define P_DNR_VBOFFST_STAT                         (volatile unsigned int *)((0x2d06  << 2) + 0xff900000)
+//Bit 31:24,        reg_dnr_vbof_difthd                         , dif threshold (>=) between Up and Dw. unsigned  , default = 1
+//Bit 23:16,        reg_dnr_vbof_edgethd                        , edge threshold (<=) for Up/Dw. unsigned  , default = 16
+//Bit 15: 8,        reg_dnr_vbof_flatthd                        , flat threshold (>=) for Up/Dw. unsigned  , default = 0
+//Bit  7,            reserved
+//Bit  6: 4,        reg_dnr_vbof_delta                          , delta for weighted bin accumulator. unsigned  , default = 1
+//Bit  3,            reserved
+//Bit  2: 0,        reg_dnr_vbof_statmod                        , statistic mode for vertical block offset, 0: count flags for 8-bin, 1: count Ups for 8-bin, 2: count difs for 8-bin, 3: count weighted flags for 8-bin, 4: count flags for first 32-bin, 5: count Ups for first 32-bin, 6 or 7: count difs for first 32-bin. unsigned  , default = 2
+#define   DNR_GBS_STAT                             (0x2d07)
+#define P_DNR_GBS_STAT                             (volatile unsigned int *)((0x2d07  << 2) + 0xff900000)
+//Bit 31:24,        reg_dnr_gbs_edgethd                         , edge threshold (<=) for LR  . unsigned  , default = 32
+//Bit 23:16,        reg_dnr_gbs_flatthd                         , flat threshold (>=) for LR  . unsigned  , default = 0
+//Bit 15: 8,        reg_dnr_gbs_varthd                          , variation threshold (<=) for Lvar/Rvar. unsigned  , default = 16
+//Bit  7: 0,        reg_dnr_gbs_difthd                          , dif threshold (>=) between LR and LL/RR. unsigned  , default = 2
+#define   DNR_STAT_X_START_END                     (0x2d08)
+#define P_DNR_STAT_X_START_END                     (volatile unsigned int *)((0x2d08  << 2) + 0xff900000)
+//Bit 31:30,        reserved
+//Bit 29:16,        reg_dnr_stat_xst                                                          . unsigned  , default = 24
+//Bit 15:14,        reserved
+//Bit 13: 0,        reg_dnr_stat_xed                                                          . unsigned  , default = HSIZE - 25
+#define   DNR_STAT_Y_START_END                     (0x2d09)
+#define P_DNR_STAT_Y_START_END                     (volatile unsigned int *)((0x2d09  << 2) + 0xff900000)
+//Bit 31:30,        reserved
+//Bit 29:16,        reg_dnr_stat_yst                                                          . unsigned  , default = 24
+//Bit 15:14,        reserved
+//Bit 13: 0,        reg_dnr_stat_yed                                                          . unsigned  , default = VSIZE - 25
+#define   DNR_LUMA                                 (0x2d0a)
+#define P_DNR_LUMA                                 (volatile unsigned int *)((0x2d0a  << 2) + 0xff900000)
+//Bit 31:27,        reserved
+//Bit 26:24,        reg_dnr_luma_sqrtshft                       , left shift for fast squart of chroma, [0, 4]. unsigned  , default = 2
+//Bit 23:21,        reserved
+//Bit 20:16,        reg_dnr_luma_sqrtoffst                      , offset for fast squart of chroma. signed    , default = 0
+//Bit 15,            reserved
+//Bit 14:12,        reg_dnr_luma_wcmod                          , theta related to warm/cool segment line, 0: 0, 1: 45, 2: 90, 3: 135, 4: 180, 5: 225, 6: 270, 7: 315. . unsigned  , default = 3
+//Bit 11: 8,        reg_dnr_luma_cshft                          , shift for calc. delta part, 0~8,  . unsigned  , default = 8
+//Bit  7: 6,        reserved
+//Bit  5: 0,        reg_dnr_luma_cgain                          , final gain for delta part, 32 normalized to "1". unsigned  , default = 4
+#define   DNR_DB_YEDGE_THD                         (0x2d0b)
+#define P_DNR_DB_YEDGE_THD                         (volatile unsigned int *)((0x2d0b  << 2) + 0xff900000)
+//Bit 31:24,        reg_dnr_db_yedgethd0                        , edge threshold0 for luma    . unsigned  , default = 12
+//Bit 23:16,        reg_dnr_db_yedgethd1                        , edge threshold1 for luma    . unsigned  , default = 15
+//Bit 15: 8,        reg_dnr_db_yedgethd2                        , edge threshold2 for luma    . unsigned  , default = 18
+//Bit  7: 0,        reg_dnr_db_yedgethd3                        , edge threshold3 for luma    . unsigned  , default = 25
+#define   DNR_DB_CEDGE_THD                         (0x2d0c)
+#define P_DNR_DB_CEDGE_THD                         (volatile unsigned int *)((0x2d0c  << 2) + 0xff900000)
+//Bit 31:24,        reg_dnr_db_cedgethd0                        , edge threshold0 for chroma  . unsigned  , default = 12
+//Bit 23:16,        reg_dnr_db_cedgethd1                        , edge threshold1 for chroma  . unsigned  , default = 15
+//Bit 15: 8,        reg_dnr_db_cedgethd2                        , edge threshold2 for chroma  . unsigned  , default = 18
+//Bit  7: 0,        reg_dnr_db_cedgethd3                        , edge threshold3 for chroma  . unsigned  , default = 25
+#define   DNR_DB_HGAP                              (0x2d0d)
+#define P_DNR_DB_HGAP                              (volatile unsigned int *)((0x2d0d  << 2) + 0xff900000)
+//Bit 31:24,        reserved
+//Bit 23:16,        reg_dnr_db_hgapthd                          , horizontal gap thd (<=) for very sure blockiness . unsigned  , default = 8
+//Bit 15: 8,        reg_dnr_db_hgapdifthd                       , dif thd between hgap and lft/rgt hdifs. unsigned  , default = 1
+//Bit  7: 1,        reserved
+//Bit  0,            reg_dnr_db_hgapmod                          , horizontal gap calc. mode, 0: just use current col x, 1: find max between (x-1, x, x+1) . unsigned  , default = 0
+#define   DNR_DB_HBS                               (0x2d0e)
+#define P_DNR_DB_HBS                               (volatile unsigned int *)((0x2d0e  << 2) + 0xff900000)
+//Bit 31: 6,        reserved
+//Bit  5: 4,        reg_dnr_db_hbsup                            , horizontal bs up value      . unsigned  , default = 1
+//Bit  3: 2,        reg_dnr_db_hbsmax                           , max value of hbs for global control. unsigned  , default = 3
+//Bit  1: 0,        reg_dnr_db_hgbsthd                          , gbs thd (>=) for hbs calc.  . unsigned  , default = 1
+#define   DNR_DB_HACT                              (0x2d0f)
+#define P_DNR_DB_HACT                              (volatile unsigned int *)((0x2d0f  << 2) + 0xff900000)
+//Bit 31:16,        reserved
+//Bit 15: 8,        reg_dnr_db_hactthd0                         , thd0 of hact, for block classification. unsigned  , default = 10
+//Bit  7: 0,        reg_dnr_db_hactthd1                         , thd1 of hact, for block classification. unsigned  , default = 32
+#define   DNR_DB_YHDELTA_GAIN                      (0x2d10)
+#define P_DNR_DB_YHDELTA_GAIN                      (volatile unsigned int *)((0x2d10  << 2) + 0xff900000)
+//Bit 31:27,        reserved
+//Bit 26:24,        reg_dnr_db_yhdeltagain1                     , (p1-q1) gain for Y's delta calc. when bs=1, normalized 8 as "1" . unsigned  , default = 2
+//Bit 23,            reserved
+//Bit 22:20,        reg_dnr_db_yhdeltagain2                     , (p1-q1) gain for Y's delta calc. when bs=2, normalized 8 as "1" . unsigned  , default = 0
+//Bit 19,            reserved
+//Bit 18:16,        reg_dnr_db_yhdeltagain3                     , (p1-q1) gain for Y's delta calc. when bs=3, normalized 8 as "1" . unsigned  , default = 0
+//Bit 15,            reserved
+//Bit 14: 8,        reg_dnr_db_yhdeltaadjoffst                  , offset for adjust Y's hdelta (-64, 63). signed    , default = 0
+//Bit  7: 6,        reserved
+//Bit  5: 0,        reg_dnr_db_yhdeltaadjgain                   , gain for adjust Y's hdelta, normalized 32 as "1" . unsigned  , default = 32
+#define   DNR_DB_YHDELTA2_GAIN                     (0x2d11)
+#define P_DNR_DB_YHDELTA2_GAIN                     (volatile unsigned int *)((0x2d11  << 2) + 0xff900000)
+//Bit 31:30,        reserved
+//Bit 29:24,        reg_dnr_db_yhdelta2gain2                    , gain for bs=2's adjust Y's hdelta2, normalized 64 as "1" . unsigned  , default = 8
+//Bit 23:21,        reserved
+//Bit 20:16,        reg_dnr_db_yhdelta2offst2                   , offset for bs=2's adjust Y's hdelta2 (-16, 15). signed    , default = 0
+//Bit 15:14,        reserved
+//Bit 13: 8,        reg_dnr_db_yhdelta2gain3                    , gain for bs=3's adjust Y's hdelta2, normalized 64 as "1" . unsigned  , default = 4
+//Bit  7: 5,        reserved
+//Bit  4: 0,        reg_dnr_db_yhdelta2offst3                   , offset for bs=3's adjust Y's hdelta2 (-16, 15). signed    , default = 0
+#define   DNR_DB_CHDELTA_GAIN                      (0x2d12)
+#define P_DNR_DB_CHDELTA_GAIN                      (volatile unsigned int *)((0x2d12  << 2) + 0xff900000)
+//Bit 31:27,        reserved
+//Bit 26:24,        reg_dnr_db_chdeltagain1                     , (p1-q1) gain for UV's delta calc. when bs=1, normalized 8 as "1". unsigned  , default = 2
+//Bit 23,            reserved
+//Bit 22:20,        reg_dnr_db_chdeltagain2                     , (p1-q1) gain for UV's delta calc. when bs=2, normalized 8 as "1". unsigned  , default = 0
+//Bit 19,            reserved
+//Bit 18:16,        reg_dnr_db_chdeltagain3                     , (p1-q1) gain for UV's delta calc. when bs=3, normalized 8 as "1". unsigned  , default = 0
+//Bit 15,            reserved
+//Bit 14: 8,        reg_dnr_db_chdeltaadjoffst                  , offset for adjust UV's hdelta (-64, 63). signed    , default = 0
+//Bit  7: 6,        reserved
+//Bit  5: 0,        reg_dnr_db_chdeltaadjgain                   , gain for adjust UV's hdelta, normalized 32 as "1". unsigned  , default = 32
+#define   DNR_DB_CHDELTA2_GAIN                     (0x2d13)
+#define P_DNR_DB_CHDELTA2_GAIN                     (volatile unsigned int *)((0x2d13  << 2) + 0xff900000)
+//Bit 31:30,        reserved
+//Bit 29:24,        reg_dnr_db_chdelta2gain2                    , gain for bs=2's adjust UV's hdelta2, normalized 64 as "1" . unsigned  , default = 8
+//Bit 23:21,        reserved
+//Bit 20:16,        reg_dnr_db_chdelta2offst2                   , offset for bs=2's adjust UV's hdelta2 (-16, 15). signed    , default = 0
+//Bit 15:14,        reserved
+//Bit 13: 8,        reg_dnr_db_chdelta2gain3                    , gain for bs=2's adjust UV's hdelta2, normalized 64 as "1" . unsigned  , default = 4
+//Bit  7: 5,        reserved
+//Bit  4: 0,        reg_dnr_db_chdelta2offst3                   , offset for bs=2's adjust UV's hdelta2 (-16, 15). signed    , default = 0
+#define   DNR_DB_YC_VEDGE_THD                      (0x2d14)
+#define P_DNR_DB_YC_VEDGE_THD                      (volatile unsigned int *)((0x2d14  << 2) + 0xff900000)
+//Bit 31:16,        reserved
+//Bit 15: 8,        reg_dnr_db_yvedgethd                        , special Y's edge thd for vdb. unsigned  , default = 12
+//Bit  7: 0,        reg_dnr_db_cvedgethd                        , special UV's edge thd for vdb. unsigned  , default = 12
+#define   DNR_DB_VBS_MISC                          (0x2d15)
+#define P_DNR_DB_VBS_MISC                          (volatile unsigned int *)((0x2d15  << 2) + 0xff900000)
+//Bit 31:24,        reg_dnr_db_vgapthd                          , vertical gap thd (<=) for very sure blockiness . unsigned  , default = 8
+//Bit 23:16,        reg_dnr_db_vactthd                          , thd of vact, for block classification . unsigned  , default = 10
+//Bit 15: 8,        reg_dnr_db_vgapdifthd                       , dif thd between vgap and vact. unsigned  , default = 4
+//Bit  7: 4,        reserved
+//Bit  3: 2,        reg_dnr_db_vbsmax                           , max value of vbs for global control. unsigned  , default = 2
+//Bit  1: 0,        reg_dnr_db_vgbsthd                          , gbs thd (>=) for vbs calc.  . unsigned  , default = 1
+#define   DNR_DB_YVDELTA_GAIN                      (0x2d16)
+#define P_DNR_DB_YVDELTA_GAIN                      (volatile unsigned int *)((0x2d16  << 2) + 0xff900000)
+//Bit 31:30,        reserved
+//Bit 29:24,        reg_dnr_db_yvdeltaadjgain                   , gain for adjust Y's vdelta, normalized 32 as "1". unsigned  , default = 32
+//Bit 23,            reserved
+//Bit 22:16,        reg_dnr_db_yvdeltaadjoffst                  , offset for adjust Y's vdelta (-64, 63). signed    , default = 0
+//Bit 15:14,        reserved
+//Bit 13: 8,        reg_dnr_db_yvdelta2gain                     , gain for adjust Y's vdelta2, normalized 64 as "1". unsigned  , default = 8
+//Bit  7: 5,        reserved
+//Bit  4: 0,        reg_dnr_db_yvdelta2offst                    , offset for adjust Y's vdelta2 (-16, 15). signed    , default = 0
+#define   DNR_DB_CVDELTA_GAIN                      (0x2d17)
+#define P_DNR_DB_CVDELTA_GAIN                      (volatile unsigned int *)((0x2d17  << 2) + 0xff900000)
+//Bit 31:30,        reserved
+//Bit 29:24,        reg_dnr_db_cvdeltaadjgain                   , gain for adjust UV's vdelta, normalized 32 as "1". unsigned  , default = 32
+//Bit 23,            reserved
+//Bit 22:16,        reg_dnr_db_cvdeltaadjoffst                  , offset for adjust UV's vdelta (-64, 63). signed    , default = 0
+//Bit 15:14,        reserved
+//Bit 13: 8,        reg_dnr_db_cvdelta2gain                     , gain for adjust UV's vdelta2, normalized 64 as "1". unsigned  , default = 8
+//Bit  7: 5,        reserved
+//Bit  4: 0,        reg_dnr_db_cvdelta2offst                    , offset for adjust UV's vdelta2 (-16, 15). signed    , default = 0
+#define   DNR_RO_GBS_STAT_LR                       (0x2d18)
+#define P_DNR_RO_GBS_STAT_LR                       (volatile unsigned int *)((0x2d18  << 2) + 0xff900000)
+//Bit 31: 0,        ro_gbs_stat_lr                                                            . unsigned  , default = 0
+#define   DNR_RO_GBS_STAT_LL                       (0x2d19)
+#define P_DNR_RO_GBS_STAT_LL                       (volatile unsigned int *)((0x2d19  << 2) + 0xff900000)
+//Bit 31: 0,        ro_gbs_stat_ll                                                            . unsigned  , default = 0
+#define   DNR_RO_GBS_STAT_RR                       (0x2d1a)
+#define P_DNR_RO_GBS_STAT_RR                       (volatile unsigned int *)((0x2d1a  << 2) + 0xff900000)
+//Bit 31: 0,        ro_gbs_stat_rr                                                            . unsigned  , default = 0
+#define   DNR_RO_GBS_STAT_DIF                      (0x2d1b)
+#define P_DNR_RO_GBS_STAT_DIF                      (volatile unsigned int *)((0x2d1b  << 2) + 0xff900000)
+//Bit 31: 0,        ro_gbs_stat_dif                                                           . unsigned  , default = 0
+#define   DNR_RO_GBS_STAT_CNT                      (0x2d1c)
+#define P_DNR_RO_GBS_STAT_CNT                      (volatile unsigned int *)((0x2d1c  << 2) + 0xff900000)
+//Bit 31: 0,        ro_gbs_stat_cnt                                                           . unsigned  , default = 0
+#define   DNR_RO_HBOF_STAT_CNT_0                   (0x2d1d)
+#define P_DNR_RO_HBOF_STAT_CNT_0                   (volatile unsigned int *)((0x2d1d  << 2) + 0xff900000)
+//Bit 31: 0,        ro_hbof_stat_cnt0                                                         . unsigned  , default = 0
+#define   DNR_RO_HBOF_STAT_CNT_1                   (0x2d1e)
+#define P_DNR_RO_HBOF_STAT_CNT_1                   (volatile unsigned int *)((0x2d1e  << 2) + 0xff900000)
+//Bit 31: 0,        ro_hbof_stat_cnt1                                                         . unsigned  , default = 0
+#define   DNR_RO_HBOF_STAT_CNT_2                   (0x2d1f)
+#define P_DNR_RO_HBOF_STAT_CNT_2                   (volatile unsigned int *)((0x2d1f  << 2) + 0xff900000)
+//Bit 31: 0,        ro_hbof_stat_cnt2                                                         . unsigned  , default = 0
+#define   DNR_RO_HBOF_STAT_CNT_3                   (0x2d20)
+#define P_DNR_RO_HBOF_STAT_CNT_3                   (volatile unsigned int *)((0x2d20  << 2) + 0xff900000)
+//Bit 31: 0,        ro_hbof_stat_cnt3                                                         . unsigned  , default = 0
+#define   DNR_RO_HBOF_STAT_CNT_4                   (0x2d21)
+#define P_DNR_RO_HBOF_STAT_CNT_4                   (volatile unsigned int *)((0x2d21  << 2) + 0xff900000)
+//Bit 31: 0,        ro_hbof_stat_cnt4                                                         . unsigned  , default = 0
+#define   DNR_RO_HBOF_STAT_CNT_5                   (0x2d22)
+#define P_DNR_RO_HBOF_STAT_CNT_5                   (volatile unsigned int *)((0x2d22  << 2) + 0xff900000)
+//Bit 31: 0,        ro_hbof_stat_cnt5                                                         . unsigned  , default = 0
+#define   DNR_RO_HBOF_STAT_CNT_6                   (0x2d23)
+#define P_DNR_RO_HBOF_STAT_CNT_6                   (volatile unsigned int *)((0x2d23  << 2) + 0xff900000)
+//Bit 31: 0,        ro_hbof_stat_cnt6                                                         . unsigned  , default = 0
+#define   DNR_RO_HBOF_STAT_CNT_7                   (0x2d24)
+#define P_DNR_RO_HBOF_STAT_CNT_7                   (volatile unsigned int *)((0x2d24  << 2) + 0xff900000)
+//Bit 31: 0,        ro_hbof_stat_cnt7                                                         . unsigned  , default = 0
+#define   DNR_RO_HBOF_STAT_CNT_8                   (0x2d25)
+#define P_DNR_RO_HBOF_STAT_CNT_8                   (volatile unsigned int *)((0x2d25  << 2) + 0xff900000)
+//Bit 31: 0,        ro_hbof_stat_cnt8                                                         . unsigned  , default = 0
+#define   DNR_RO_HBOF_STAT_CNT_9                   (0x2d26)
+#define P_DNR_RO_HBOF_STAT_CNT_9                   (volatile unsigned int *)((0x2d26  << 2) + 0xff900000)
+//Bit 31: 0,        ro_hbof_stat_cnt9                                                         . unsigned  , default = 0
+#define   DNR_RO_HBOF_STAT_CNT_10                  (0x2d27)
+#define P_DNR_RO_HBOF_STAT_CNT_10                  (volatile unsigned int *)((0x2d27  << 2) + 0xff900000)
+//Bit 31: 0,        ro_hbof_stat_cnt10                                                        . unsigned  , default = 0
+#define   DNR_RO_HBOF_STAT_CNT_11                  (0x2d28)
+#define P_DNR_RO_HBOF_STAT_CNT_11                  (volatile unsigned int *)((0x2d28  << 2) + 0xff900000)
+//Bit 31: 0,        ro_hbof_stat_cnt11                                                        . unsigned  , default = 0
+#define   DNR_RO_HBOF_STAT_CNT_12                  (0x2d29)
+#define P_DNR_RO_HBOF_STAT_CNT_12                  (volatile unsigned int *)((0x2d29  << 2) + 0xff900000)
+//Bit 31: 0,        ro_hbof_stat_cnt12                                                        . unsigned  , default = 0
+#define   DNR_RO_HBOF_STAT_CNT_13                  (0x2d2a)
+#define P_DNR_RO_HBOF_STAT_CNT_13                  (volatile unsigned int *)((0x2d2a  << 2) + 0xff900000)
+//Bit 31: 0,        ro_hbof_stat_cnt13                                                        . unsigned  , default = 0
+#define   DNR_RO_HBOF_STAT_CNT_14                  (0x2d2b)
+#define P_DNR_RO_HBOF_STAT_CNT_14                  (volatile unsigned int *)((0x2d2b  << 2) + 0xff900000)
+//Bit 31: 0,        ro_hbof_stat_cnt14                                                        . unsigned  , default = 0
+#define   DNR_RO_HBOF_STAT_CNT_15                  (0x2d2c)
+#define P_DNR_RO_HBOF_STAT_CNT_15                  (volatile unsigned int *)((0x2d2c  << 2) + 0xff900000)
+//Bit 31: 0,        ro_hbof_stat_cnt15                                                        . unsigned  , default = 0
+#define   DNR_RO_HBOF_STAT_CNT_16                  (0x2d2d)
+#define P_DNR_RO_HBOF_STAT_CNT_16                  (volatile unsigned int *)((0x2d2d  << 2) + 0xff900000)
+//Bit 31: 0,        ro_hbof_stat_cnt16                                                        . unsigned  , default = 0
+#define   DNR_RO_HBOF_STAT_CNT_17                  (0x2d2e)
+#define P_DNR_RO_HBOF_STAT_CNT_17                  (volatile unsigned int *)((0x2d2e  << 2) + 0xff900000)
+//Bit 31: 0,        ro_hbof_stat_cnt17                                                        . unsigned  , default = 0
+#define   DNR_RO_HBOF_STAT_CNT_18                  (0x2d2f)
+#define P_DNR_RO_HBOF_STAT_CNT_18                  (volatile unsigned int *)((0x2d2f  << 2) + 0xff900000)
+//Bit 31: 0,        ro_hbof_stat_cnt18                                                        . unsigned  , default = 0
+#define   DNR_RO_HBOF_STAT_CNT_19                  (0x2d30)
+#define P_DNR_RO_HBOF_STAT_CNT_19                  (volatile unsigned int *)((0x2d30  << 2) + 0xff900000)
+//Bit 31: 0,        ro_hbof_stat_cnt19                                                        . unsigned  , default = 0
+#define   DNR_RO_HBOF_STAT_CNT_20                  (0x2d31)
+#define P_DNR_RO_HBOF_STAT_CNT_20                  (volatile unsigned int *)((0x2d31  << 2) + 0xff900000)
+//Bit 31: 0,        ro_hbof_stat_cnt20                                                        . unsigned  , default = 0
+#define   DNR_RO_HBOF_STAT_CNT_21                  (0x2d32)
+#define P_DNR_RO_HBOF_STAT_CNT_21                  (volatile unsigned int *)((0x2d32  << 2) + 0xff900000)
+//Bit 31: 0,        ro_hbof_stat_cnt21                                                        . unsigned  , default = 0
+#define   DNR_RO_HBOF_STAT_CNT_22                  (0x2d33)
+#define P_DNR_RO_HBOF_STAT_CNT_22                  (volatile unsigned int *)((0x2d33  << 2) + 0xff900000)
+//Bit 31: 0,        ro_hbof_stat_cnt22                                                        . unsigned  , default = 0
+#define   DNR_RO_HBOF_STAT_CNT_23                  (0x2d34)
+#define P_DNR_RO_HBOF_STAT_CNT_23                  (volatile unsigned int *)((0x2d34  << 2) + 0xff900000)
+//Bit 31: 0,        ro_hbof_stat_cnt23                                                        . unsigned  , default = 0
+#define   DNR_RO_HBOF_STAT_CNT_24                  (0x2d35)
+#define P_DNR_RO_HBOF_STAT_CNT_24                  (volatile unsigned int *)((0x2d35  << 2) + 0xff900000)
+//Bit 31: 0,        ro_hbof_stat_cnt24                                                        . unsigned  , default = 0
+#define   DNR_RO_HBOF_STAT_CNT_25                  (0x2d36)
+#define P_DNR_RO_HBOF_STAT_CNT_25                  (volatile unsigned int *)((0x2d36  << 2) + 0xff900000)
+//Bit 31: 0,        ro_hbof_stat_cnt25                                                        . unsigned  , default = 0
+#define   DNR_RO_HBOF_STAT_CNT_26                  (0x2d37)
+#define P_DNR_RO_HBOF_STAT_CNT_26                  (volatile unsigned int *)((0x2d37  << 2) + 0xff900000)
+//Bit 31: 0,        ro_hbof_stat_cnt26                                                        . unsigned  , default = 0
+#define   DNR_RO_HBOF_STAT_CNT_27                  (0x2d38)
+#define P_DNR_RO_HBOF_STAT_CNT_27                  (volatile unsigned int *)((0x2d38  << 2) + 0xff900000)
+//Bit 31: 0,        ro_hbof_stat_cnt27                                                        . unsigned  , default = 0
+#define   DNR_RO_HBOF_STAT_CNT_28                  (0x2d39)
+#define P_DNR_RO_HBOF_STAT_CNT_28                  (volatile unsigned int *)((0x2d39  << 2) + 0xff900000)
+//Bit 31: 0,        ro_hbof_stat_cnt28                                                        . unsigned  , default = 0
+#define   DNR_RO_HBOF_STAT_CNT_29                  (0x2d3a)
+#define P_DNR_RO_HBOF_STAT_CNT_29                  (volatile unsigned int *)((0x2d3a  << 2) + 0xff900000)
+//Bit 31: 0,        ro_hbof_stat_cnt29                                                        . unsigned  , default = 0
+#define   DNR_RO_HBOF_STAT_CNT_30                  (0x2d3b)
+#define P_DNR_RO_HBOF_STAT_CNT_30                  (volatile unsigned int *)((0x2d3b  << 2) + 0xff900000)
+//Bit 31: 0,        ro_hbof_stat_cnt30                                                        . unsigned  , default = 0
+#define   DNR_RO_HBOF_STAT_CNT_31                  (0x2d3c)
+#define P_DNR_RO_HBOF_STAT_CNT_31                  (volatile unsigned int *)((0x2d3c  << 2) + 0xff900000)
+//Bit 31: 0,        ro_hbof_stat_cnt31                                                        . unsigned  , default = 0
+#define   DNR_RO_VBOF_STAT_CNT_0                   (0x2d3d)
+#define P_DNR_RO_VBOF_STAT_CNT_0                   (volatile unsigned int *)((0x2d3d  << 2) + 0xff900000)
+//Bit 31: 0,        ro_vbof_stat_cnt0                                                         . unsigned  , default = 0
+#define   DNR_RO_VBOF_STAT_CNT_1                   (0x2d3e)
+#define P_DNR_RO_VBOF_STAT_CNT_1                   (volatile unsigned int *)((0x2d3e  << 2) + 0xff900000)
+//Bit 31: 0,        ro_vbof_stat_cnt1                                                         . unsigned  , default = 0
+#define   DNR_RO_VBOF_STAT_CNT_2                   (0x2d3f)
+#define P_DNR_RO_VBOF_STAT_CNT_2                   (volatile unsigned int *)((0x2d3f  << 2) + 0xff900000)
+//Bit 31: 0,        ro_vbof_stat_cnt2                                                         . unsigned  , default = 0
+#define   DNR_RO_VBOF_STAT_CNT_3                   (0x2d40)
+#define P_DNR_RO_VBOF_STAT_CNT_3                   (volatile unsigned int *)((0x2d40  << 2) + 0xff900000)
+//Bit 31: 0,        ro_vbof_stat_cnt3                                                         . unsigned  , default = 0
+#define   DNR_RO_VBOF_STAT_CNT_4                   (0x2d41)
+#define P_DNR_RO_VBOF_STAT_CNT_4                   (volatile unsigned int *)((0x2d41  << 2) + 0xff900000)
+//Bit 31: 0,        ro_vbof_stat_cnt4                                                         . unsigned  , default = 0
+#define   DNR_RO_VBOF_STAT_CNT_5                   (0x2d42)
+#define P_DNR_RO_VBOF_STAT_CNT_5                   (volatile unsigned int *)((0x2d42  << 2) + 0xff900000)
+//Bit 31: 0,        ro_vbof_stat_cnt5                                                         . unsigned  , default = 0
+#define   DNR_RO_VBOF_STAT_CNT_6                   (0x2d43)
+#define P_DNR_RO_VBOF_STAT_CNT_6                   (volatile unsigned int *)((0x2d43  << 2) + 0xff900000)
+//Bit 31: 0,        ro_vbof_stat_cnt6                                                         . unsigned  , default = 0
+#define   DNR_RO_VBOF_STAT_CNT_7                   (0x2d44)
+#define P_DNR_RO_VBOF_STAT_CNT_7                   (volatile unsigned int *)((0x2d44  << 2) + 0xff900000)
+//Bit 31: 0,        ro_vbof_stat_cnt7                                                         . unsigned  , default = 0
+#define   DNR_RO_VBOF_STAT_CNT_8                   (0x2d45)
+#define P_DNR_RO_VBOF_STAT_CNT_8                   (volatile unsigned int *)((0x2d45  << 2) + 0xff900000)
+//Bit 31: 0,        ro_vbof_stat_cnt8                                                         . unsigned  , default = 0
+#define   DNR_RO_VBOF_STAT_CNT_9                   (0x2d46)
+#define P_DNR_RO_VBOF_STAT_CNT_9                   (volatile unsigned int *)((0x2d46  << 2) + 0xff900000)
+//Bit 31: 0,        ro_vbof_stat_cnt9                                                         . unsigned  , default = 0
+#define   DNR_RO_VBOF_STAT_CNT_10                  (0x2d47)
+#define P_DNR_RO_VBOF_STAT_CNT_10                  (volatile unsigned int *)((0x2d47  << 2) + 0xff900000)
+//Bit 31: 0,        ro_vbof_stat_cnt10                                                        . unsigned  , default = 0
+#define   DNR_RO_VBOF_STAT_CNT_11                  (0x2d48)
+#define P_DNR_RO_VBOF_STAT_CNT_11                  (volatile unsigned int *)((0x2d48  << 2) + 0xff900000)
+//Bit 31: 0,        ro_vbof_stat_cnt11                                                        . unsigned  , default = 0
+#define   DNR_RO_VBOF_STAT_CNT_12                  (0x2d49)
+#define P_DNR_RO_VBOF_STAT_CNT_12                  (volatile unsigned int *)((0x2d49  << 2) + 0xff900000)
+//Bit 31: 0,        ro_vbof_stat_cnt12                                                        . unsigned  , default = 0
+#define   DNR_RO_VBOF_STAT_CNT_13                  (0x2d4a)
+#define P_DNR_RO_VBOF_STAT_CNT_13                  (volatile unsigned int *)((0x2d4a  << 2) + 0xff900000)
+//Bit 31: 0,        ro_vbof_stat_cnt13                                                        . unsigned  , default = 0
+#define   DNR_RO_VBOF_STAT_CNT_14                  (0x2d4b)
+#define P_DNR_RO_VBOF_STAT_CNT_14                  (volatile unsigned int *)((0x2d4b  << 2) + 0xff900000)
+//Bit 31: 0,        ro_vbof_stat_cnt14                                                        . unsigned  , default = 0
+#define   DNR_RO_VBOF_STAT_CNT_15                  (0x2d4c)
+#define P_DNR_RO_VBOF_STAT_CNT_15                  (volatile unsigned int *)((0x2d4c  << 2) + 0xff900000)
+//Bit 31: 0,        ro_vbof_stat_cnt15                                                        . unsigned  , default = 0
+#define   DNR_RO_VBOF_STAT_CNT_16                  (0x2d4d)
+#define P_DNR_RO_VBOF_STAT_CNT_16                  (volatile unsigned int *)((0x2d4d  << 2) + 0xff900000)
+//Bit 31: 0,        ro_vbof_stat_cnt16                                                        . unsigned  , default = 0
+#define   DNR_RO_VBOF_STAT_CNT_17                  (0x2d4e)
+#define P_DNR_RO_VBOF_STAT_CNT_17                  (volatile unsigned int *)((0x2d4e  << 2) + 0xff900000)
+//Bit 31: 0,        ro_vbof_stat_cnt17                                                        . unsigned  , default = 0
+#define   DNR_RO_VBOF_STAT_CNT_18                  (0x2d4f)
+#define P_DNR_RO_VBOF_STAT_CNT_18                  (volatile unsigned int *)((0x2d4f  << 2) + 0xff900000)
+//Bit 31: 0,        ro_vbof_stat_cnt18                                                        . unsigned  , default = 0
+#define   DNR_RO_VBOF_STAT_CNT_19                  (0x2d50)
+#define P_DNR_RO_VBOF_STAT_CNT_19                  (volatile unsigned int *)((0x2d50  << 2) + 0xff900000)
+//Bit 31: 0,        ro_vbof_stat_cnt19                                                        . unsigned  , default = 0
+#define   DNR_RO_VBOF_STAT_CNT_20                  (0x2d51)
+#define P_DNR_RO_VBOF_STAT_CNT_20                  (volatile unsigned int *)((0x2d51  << 2) + 0xff900000)
+//Bit 31: 0,        ro_vbof_stat_cnt20                                                        . unsigned  , default = 0
+#define   DNR_RO_VBOF_STAT_CNT_21                  (0x2d52)
+#define P_DNR_RO_VBOF_STAT_CNT_21                  (volatile unsigned int *)((0x2d52  << 2) + 0xff900000)
+//Bit 31: 0,        ro_vbof_stat_cnt21                                                        . unsigned  , default = 0
+#define   DNR_RO_VBOF_STAT_CNT_22                  (0x2d53)
+#define P_DNR_RO_VBOF_STAT_CNT_22                  (volatile unsigned int *)((0x2d53  << 2) + 0xff900000)
+//Bit 31: 0,        ro_vbof_stat_cnt22                                                        . unsigned  , default = 0
+#define   DNR_RO_VBOF_STAT_CNT_23                  (0x2d54)
+#define P_DNR_RO_VBOF_STAT_CNT_23                  (volatile unsigned int *)((0x2d54  << 2) + 0xff900000)
+//Bit 31: 0,        ro_vbof_stat_cnt23                                                        . unsigned  , default = 0
+#define   DNR_RO_VBOF_STAT_CNT_24                  (0x2d55)
+#define P_DNR_RO_VBOF_STAT_CNT_24                  (volatile unsigned int *)((0x2d55  << 2) + 0xff900000)
+//Bit 31: 0,        ro_vbof_stat_cnt24                                                        . unsigned  , default = 0
+#define   DNR_RO_VBOF_STAT_CNT_25                  (0x2d56)
+#define P_DNR_RO_VBOF_STAT_CNT_25                  (volatile unsigned int *)((0x2d56  << 2) + 0xff900000)
+//Bit 31: 0,        ro_vbof_stat_cnt25                                                        . unsigned  , default = 0
+#define   DNR_RO_VBOF_STAT_CNT_26                  (0x2d57)
+#define P_DNR_RO_VBOF_STAT_CNT_26                  (volatile unsigned int *)((0x2d57  << 2) + 0xff900000)
+//Bit 31: 0,        ro_vbof_stat_cnt26                                                        . unsigned  , default = 0
+#define   DNR_RO_VBOF_STAT_CNT_27                  (0x2d58)
+#define P_DNR_RO_VBOF_STAT_CNT_27                  (volatile unsigned int *)((0x2d58  << 2) + 0xff900000)
+//Bit 31: 0,        ro_vbof_stat_cnt27                                                        . unsigned  , default = 0
+#define   DNR_RO_VBOF_STAT_CNT_28                  (0x2d59)
+#define P_DNR_RO_VBOF_STAT_CNT_28                  (volatile unsigned int *)((0x2d59  << 2) + 0xff900000)
+//Bit 31: 0,        ro_vbof_stat_cnt28                                                        . unsigned  , default = 0
+#define   DNR_RO_VBOF_STAT_CNT_29                  (0x2d5a)
+#define P_DNR_RO_VBOF_STAT_CNT_29                  (volatile unsigned int *)((0x2d5a  << 2) + 0xff900000)
+//Bit 31: 0,        ro_vbof_stat_cnt29                                                        . unsigned  , default = 0
+#define   DNR_RO_VBOF_STAT_CNT_30                  (0x2d5b)
+#define P_DNR_RO_VBOF_STAT_CNT_30                  (volatile unsigned int *)((0x2d5b  << 2) + 0xff900000)
+//Bit 31: 0,        ro_vbof_stat_cnt30                                                        . unsigned  , default = 0
+#define   DNR_RO_VBOF_STAT_CNT_31                  (0x2d5c)
+#define P_DNR_RO_VBOF_STAT_CNT_31                  (volatile unsigned int *)((0x2d5c  << 2) + 0xff900000)
+//Bit 31: 0,        ro_vbof_stat_cnt31                                                        . unsigned  , default = 0
+#define   DNR_DM_CTRL                              (0x2d60)
+#define P_DNR_DM_CTRL                              (volatile unsigned int *)((0x2d60  << 2) + 0xff900000)
+//Bit 31:13,        reserved
+//Bit 12,            reg_dnr_dm_fedgeflg_en                      , enable edge flag calc. of each frame. unsigned  , default = 1
+//Bit 11,            reg_dnr_dm_fedgeflg_cl                      , clear frame edge flag if needed. unsigned  , default = 1
+//Bit 10,            reg_dnr_dm_fedgeflg_df                      , user defined edge when reg_dnr_dm_fedgeflg_en=0, default = 1
+//Bit  9,            reg_dnr_dm_en                               , enable demosquito function  . unsigned  , default = 1
+//Bit  8,            reg_dnr_dm_chrmen                           , enable chrome processing for demosquito. unsigned  , default = 1
+//Bit  7: 6,        reg_dnr_dm_level                            , demosquito level            . unsigned  , default = 3
+//Bit  5: 4,        reg_dnr_dm_leveldw0                         , level down when gbs is small. unsigned  , default = 1
+//Bit  3: 2,        reg_dnr_dm_leveldw1                         , level down for no edge/flat blocks. unsigned  , default = 1
+//Bit  1: 0,        reg_dnr_dm_gbsthd                           , small/large threshold for gbs (<=). unsigned  , default = 0
+#define   DNR_DM_NR_BLND                           (0x2d61)
+#define P_DNR_DM_NR_BLND                           (volatile unsigned int *)((0x2d61  << 2) + 0xff900000)
+//Bit 31:25,        reserved
+//Bit 24,            reg_dnr_dm_defalpen                         , enable user define alpha for dm & nr blend. unsigned  , default = 0
+//Bit 23:16,        reg_dnr_dm_defalp                           , user define alpha for dm & nr blend if enable. unsigned  , default = 0
+//Bit 15:14,        reserved
+//Bit 13: 8,        reg_dnr_dm_alpgain                          , gain for nr/dm alpha, normalized 32 as "1". unsigned  , default = 32
+//Bit  7: 0,        reg_dnr_dm_alpoffst                         , (-128, 127), offset for nr/dm alpha. signed    , default = 0
+#define   DNR_DM_RNG_THD                           (0x2d62)
+#define P_DNR_DM_RNG_THD                           (volatile unsigned int *)((0x2d62  << 2) + 0xff900000)
+//Bit 31:24,        reserved
+//Bit 23:16,        reg_dnr_dm_rngminthd                                                      . unsigned  , default = 2
+//Bit 15: 8,        reg_dnr_dm_rngmaxthd                                                      . unsigned  , default = 64
+//Bit  7: 0,        reg_dnr_dm_rngdifthd                                                      . unsigned  , default = 4
+#define   DNR_DM_RNG_GAIN_OFST                     (0x2d63)
+#define P_DNR_DM_RNG_GAIN_OFST                     (volatile unsigned int *)((0x2d63  << 2) + 0xff900000)
+//Bit 31:14,        reserved
+//Bit 13: 8,        reg_dnr_dm_rnggain                          , normalized 16 as "1"        . unsigned  , default = 16
+//Bit  7: 6,        reserved
+//Bit  5: 0,        reg_dnr_dm_rngofst                                                        . unsigned  , default = 0
+#define   DNR_DM_DIR_MISC                          (0x2d64)
+#define P_DNR_DM_DIR_MISC                          (volatile unsigned int *)((0x2d64  << 2) + 0xff900000)
+//Bit 31:30,        reserved
+//Bit 29,            reg_dnr_dm_diralpen                                                       . unsigned  , default = 1
+//Bit 28:24,        reg_dnr_dm_diralpgain                                                     . unsigned  , default = 0
+//Bit 23:22,        reserved
+//Bit 21:16,        reg_dnr_dm_diralpofst                                                     . unsigned  , default = 0
+//Bit 15:13,        reserved
+//Bit 12: 8,        reg_dnr_dm_diralpmin                                                      . unsigned  , default = 0
+//Bit  7: 5,        reserved
+//Bit  4: 0,        reg_dnr_dm_diralpmax                                                      . unsigned  , default = 31
+#define   DNR_DM_COR_DIF                           (0x2d65)
+#define P_DNR_DM_COR_DIF                           (volatile unsigned int *)((0x2d65  << 2) + 0xff900000)
+//Bit 31: 4,        reserved
+//Bit  3: 1,        reg_dnr_dm_cordifshft                                                     . unsigned  , default = 3
+//Bit  0,            reg_dnr_dm_cordifmod                        , 0:use max dir dif as cordif, 1: use max3x3 - min3x3 as cordif. unsigned  , default = 1
+#define   DNR_DM_FLT_THD                           (0x2d66)
+#define P_DNR_DM_FLT_THD                           (volatile unsigned int *)((0x2d66  << 2) + 0xff900000)
+//Bit 31:24,        reg_dnr_dm_fltthd00                         , block flat threshold0 for block average difference when gbs is small, for flat block detection. unsigned  , default = 4
+//Bit 23:16,        reg_dnr_dm_fltthd01                         , block flat threshold1 for block average difference when gbs is small, for flat block detection. unsigned  , default = 6
+//Bit 15: 8,        reg_dnr_dm_fltthd10                         , block flat threshold0 for block average difference when gbs is large, for flat block detection. unsigned  , default = 9
+//Bit  7: 0,        reg_dnr_dm_fltthd11                         , block flat threshold1 for block average difference when gbs is large, for flat block detection. unsigned  , default = 12
+#define   DNR_DM_VAR_THD                           (0x2d67)
+#define P_DNR_DM_VAR_THD                           (volatile unsigned int *)((0x2d67  << 2) + 0xff900000)
+//Bit 31:24,        reg_dnr_dm_varthd00                         , block variance threshold0 (>=) when gbs is small, for flat block detection. unsigned  , default = 2
+//Bit 23:16,        reg_dnr_dm_varthd01                         , block variance threshold1 (<=) when gbs is small, for flat block detection. unsigned  , default = 15
+//Bit 15: 8,        reg_dnr_dm_varthd10                         , block variance threshold0 (>=) when gbs is large, for flat block detection. unsigned  , default = 3
+//Bit  7: 0,        reg_dnr_dm_varthd11                         , block variance threshold1 (<=) when gbs is large, for flat block detection. unsigned  , default = 24
+#define   DNR_DM_EDGE_DIF_THD                      (0x2d68)
+#define P_DNR_DM_EDGE_DIF_THD                      (volatile unsigned int *)((0x2d68  << 2) + 0xff900000)
+//Bit 31:24,        reg_dnr_dm_edgethd0                         , block edge threshold (<=) when gbs is small, for flat block detection. unsigned  , default = 32
+//Bit 23:16,        reg_dnr_dm_edgethd1                         , block edge threshold (<=) when gbs is large, for flat block detection. unsigned  , default = 48
+//Bit 15: 8,        reg_dnr_dm_difthd0                          , block dif threshold (<=) when gbs is small, for flat block detection. unsigned  , default = 48
+//Bit  7: 0,        reg_dnr_dm_difthd1                          , block dif threshold (<=) when gbs is large, for flat block detection. unsigned  , default = 64
+#define   DNR_DM_AVG_THD                           (0x2d69)
+#define P_DNR_DM_AVG_THD                           (volatile unsigned int *)((0x2d69  << 2) + 0xff900000)
+//Bit 31:16,        reserved
+//Bit 15: 8,        reg_dnr_dm_avgthd0                          , block average threshold (>=), for flat block detection. unsigned  , default = 160
+//Bit  7: 0,        reg_dnr_dm_avgthd1                          , block average threshold (<=), for flat block detection. unsigned  , default = 128
+#define   DNR_DM_AVG_VAR_DIF_THD                   (0x2d6a)
+#define P_DNR_DM_AVG_VAR_DIF_THD                   (volatile unsigned int *)((0x2d6a  << 2) + 0xff900000)
+//Bit 31:16,        reserved
+//Bit 15: 8,        reg_dnr_dm_avgdifthd                        , block average dif threshold (<) between cur and up block, for flat block detection. unsigned  , default = 12
+//Bit  7: 0,        reg_dnr_dm_vardifthd                        , block variance dif threshold (>=) between cur and up block, for flat block detection. unsigned  , default = 1
+#define   DNR_DM_VAR_EDGE_DIF_THD2                 (0x2d6b)
+#define P_DNR_DM_VAR_EDGE_DIF_THD2                 (volatile unsigned int *)((0x2d6b  << 2) + 0xff900000)
+//Bit 31:24,        reserved
+//Bit 23:16,        reg_dnr_dm_varthd2                          , block variance threshold (>=), for edge block detection. unsigned  , default = 24
+//Bit 15: 8,        reg_dnr_dm_edgethd2                         , block edge threshold (>=), for edge block detection. unsigned  , default = 40
+//Bit  7: 0,        reg_dnr_dm_difthd2                          , block dif threshold (>=), for edge block detection. unsigned  , default = 80
+#define   DNR_DM_DIF_FLT_MISC                      (0x2d6c)
+#define P_DNR_DM_DIF_FLT_MISC                      (volatile unsigned int *)((0x2d6c  << 2) + 0xff900000)
+//Bit 31:28,        reg_dnr_dm_ldifoob                          , pre-defined large dif when pixel out of blocks. unsigned  , default = 0
+//Bit 27:24,        reg_dnr_dm_bdifoob                          , pre-defined block dif when pixel out of blocks;. unsigned  , default = 0
+//Bit 23:16,        reg_dnr_dm_fltalp                           , pre-defined alpha for dm and nr blending, when block is flat with mos.. unsigned  , default = 200
+//Bit 15:12,        reserved
+//Bit 11: 8,        reg_dnr_dm_fltminbdif                       , pre-defined min block dif for dm filter, when block is flat with mos.. unsigned  , default = 12
+//Bit  7,            reserved
+//Bit  6: 2,        reg_dnr_dm_difnormgain                      , gain for pixel dif normalization for dm filter, normalized 16 as "1". unsigned  , default = 16
+//Bit  1,            reg_dnr_dm_difnormen                        , enable pixel dif normalization for dm filter. unsigned  , default = 1
+//Bit  0,            reg_dnr_dm_difupden                         , enable block dif update using max of left, cur, right difs. unsigned  , default = 0
+#define   DNR_DM_SDIF_LUT0_2                       (0x2d6d)
+#define P_DNR_DM_SDIF_LUT0_2                       (volatile unsigned int *)((0x2d6d  << 2) + 0xff900000)
+//Bit 31:21,        reserved
+//Bit 20:16,        reg_dnr_dm_sdiflut0                         , normally 0-16               . unsigned  , default = 16
+//Bit 15:13,        reserved
+//Bit 12: 8,        reg_dnr_dm_sdiflut1                         , normally 0-16               . unsigned  , default = 14
+//Bit  7: 5,        reserved
+//Bit  4: 0,        reg_dnr_dm_sdiflut2                         , normally 0-16               . unsigned  , default = 13
+#define   DNR_DM_SDIF_LUT3_5                       (0x2d6e)
+#define P_DNR_DM_SDIF_LUT3_5                       (volatile unsigned int *)((0x2d6e  << 2) + 0xff900000)
+//Bit 31:21,        reserved
+//Bit 20:16,        reg_dnr_dm_sdiflut3                         , normally 0-16               . unsigned  , default = 10
+//Bit 15:13,        reserved
+//Bit 12: 8,        reg_dnr_dm_sdiflut4                         , normally 0-16               . unsigned  , default = 7
+//Bit  7: 5,        reserved
+//Bit  4: 0,        reg_dnr_dm_sdiflut5                         , normally 0-16               . unsigned  , default = 5
+#define   DNR_DM_SDIF_LUT6_8                       (0x2d6f)
+#define P_DNR_DM_SDIF_LUT6_8                       (volatile unsigned int *)((0x2d6f  << 2) + 0xff900000)
+//Bit 31:21,        reserved
+//Bit 20:16,        reg_dnr_dm_sdiflut6                         , normally 0-16               . unsigned  , default = 3
+//Bit 15:13,        reserved
+//Bit 12: 8,        reg_dnr_dm_sdiflut7                         , normally 0-16               . unsigned  , default = 1
+//Bit  7: 5,        reserved
+//Bit  4: 0,        reg_dnr_dm_sdiflut8                         , normally 0-16               . unsigned  , default = 0
+#define   DNR_DM_LDIF_LUT0_2                       (0x2d70)
+#define P_DNR_DM_LDIF_LUT0_2                       (volatile unsigned int *)((0x2d70  << 2) + 0xff900000)
+//Bit 31:21,        reserved
+//Bit 20:16,        reg_dnr_dm_ldiflut0                         , normally 0-16               . unsigned  , default = 0
+//Bit 15:13,        reserved
+//Bit 12: 8,        reg_dnr_dm_ldiflut1                         , normally 0-16               . unsigned  , default = 4
+//Bit  7: 5,        reserved
+//Bit  4: 0,        reg_dnr_dm_ldiflut2                         , normally 0-16               . unsigned  , default = 12
+#define   DNR_DM_LDIF_LUT3_5                       (0x2d71)
+#define P_DNR_DM_LDIF_LUT3_5                       (volatile unsigned int *)((0x2d71  << 2) + 0xff900000)
+//Bit 31:21,        reserved
+//Bit 20:16,        reg_dnr_dm_ldiflut3                         , normally 0-16               . unsigned  , default = 14
+//Bit 15:13,        reserved
+//Bit 12: 8,        reg_dnr_dm_ldiflut4                         , normally 0-16               . unsigned  , default = 15
+//Bit  7: 5,        reserved
+//Bit  4: 0,        reg_dnr_dm_ldiflut5                         , normally 0-16               . unsigned  , default = 16
+#define   DNR_DM_LDIF_LUT6_8                       (0x2d72)
+#define P_DNR_DM_LDIF_LUT6_8                       (volatile unsigned int *)((0x2d72  << 2) + 0xff900000)
+//Bit 31:21,        reserved
+//Bit 20:16,        reg_dnr_dm_ldiflut6                         , normally 0-16               . unsigned  , default = 16
+//Bit 15:13,        reserved
+//Bit 12: 8,        reg_dnr_dm_ldiflut7                         , normally 0-16               . unsigned  , default = 16
+//Bit  7: 5,        reserved
+//Bit  4: 0,        reg_dnr_dm_ldiflut8                         , normally 0-16               . unsigned  , default = 16
+#define   DNR_DM_DIF2NORM_LUT0_2                   (0x2d73)
+#define P_DNR_DM_DIF2NORM_LUT0_2                   (volatile unsigned int *)((0x2d73  << 2) + 0xff900000)
+//Bit 31:21,        reserved
+//Bit 20:16,        reg_dnr_dm_dif2normlut0                     , normally 0-16               . unsigned  , default = 16
+//Bit 15:13,        reserved
+//Bit 12: 8,        reg_dnr_dm_dif2normlut1                     , normally 0-16               . unsigned  , default = 5
+//Bit  7: 5,        reserved
+//Bit  4: 0,        reg_dnr_dm_dif2normlut2                     , normally 0-16               . unsigned  , default = 3
+#define   DNR_DM_DIF2NORM_LUT3_5                   (0x2d74)
+#define P_DNR_DM_DIF2NORM_LUT3_5                   (volatile unsigned int *)((0x2d74  << 2) + 0xff900000)
+//Bit 31:21,        reserved
+//Bit 20:16,        reg_dnr_dm_dif2normlut3                     , normally 0-16               . unsigned  , default = 2
+//Bit 15:13,        reserved
+//Bit 12: 8,        reg_dnr_dm_dif2normlut4                     , normally 0-16               . unsigned  , default = 2
+//Bit  7: 5,        reserved
+//Bit  4: 0,        reg_dnr_dm_dif2normlut5                     , normally 0-16               . unsigned  , default = 1
+#define   DNR_DM_DIF2NORM_LUT6_8                   (0x2d75)
+#define P_DNR_DM_DIF2NORM_LUT6_8                   (volatile unsigned int *)((0x2d75  << 2) + 0xff900000)
+//Bit 31:21,        reserved
+//Bit 20:16,        reg_dnr_dm_dif2normlut6                     , normally 0-16               . unsigned  , default = 1
+//Bit 15:13,        reserved
+//Bit 12: 8,        reg_dnr_dm_dif2normlut7                     , normally 0-16               . unsigned  , default = 1
+//Bit  7: 5,        reserved
+//Bit  4: 0,        reg_dnr_dm_dif2normlut8                     , normally 0-16               . unsigned  , default = 1
+#define   DNR_DM_GMS_THD                           (0x2d76)
+#define P_DNR_DM_GMS_THD                           (volatile unsigned int *)((0x2d76  << 2) + 0xff900000)
+//Bit 31:16,        reserved
+//Bit 15: 8,        reg_gms_stat_thd0                                                         . unsigned  , default = 0
+//Bit  7: 0,        reg_gms_stat_thd1                                                         . unsigned  , default = 128
+#define   DNR_RO_DM_GMS_STAT_CNT                   (0x2d77)
+#define P_DNR_RO_DM_GMS_STAT_CNT                   (volatile unsigned int *)((0x2d77  << 2) + 0xff900000)
+//Bit 31: 0,        ro_dm_gms_stat_cnt                                                        . unsigned  , default = 0
+#define   DNR_RO_DM_GMS_STAT_MS                    (0x2d78)
+#define P_DNR_RO_DM_GMS_STAT_MS                    (volatile unsigned int *)((0x2d78  << 2) + 0xff900000)
+//Bit 31: 0,        ro_dm_gms_stat_ms                                                        . unsigned  , default = 0
+// 0x80-0x90
+//
+// Reading file:  decomb_regs.h
+//
+#define   DECOMB_DET_VERT_CON0                     (0x2d80)
+#define P_DECOMB_DET_VERT_CON0                     (volatile unsigned int *)((0x2d80  << 2) + 0xff900000)
+//Bit  31:24   reg_di_dcmb_det_vcon_thd0      default = 60  // u8
+//Bit  23:16   reg_di_dcmb_det_vcon_thd1      default = 80  // u8
+//Bit  15: 8   reg_di_dcmb_det_valp_lmt0      default = 63  // u8
+//Bit   7: 0   reg_di_dcmb_det_valp_lmt1      default = 4   // u8
+#define   DECOMB_DET_VERT_CON1                     (0x2d81)
+#define P_DECOMB_DET_VERT_CON1                     (volatile unsigned int *)((0x2d81  << 2) + 0xff900000)
+//Bit  23:16   reg_di_dcmb_det_valp_lmt2      default = 0   // u8
+//Bit  15: 8   reg_di_dcmb_det_vrate0         default = 32  // u8
+//Bit   7: 0   reg_di_dcmb_det_vrate1         default = 4   // u8
+#define   DECOMB_DET_EDGE_CON0                     (0x2d82)
+#define P_DECOMB_DET_EDGE_CON0                     (volatile unsigned int *)((0x2d82  << 2) + 0xff900000)
+//Bit  31:24   reg_di_dcmb_det_econ_thd0      default = 60  // u8
+//Bit  23:16   reg_di_dcmb_det_econ_thd1      default = 80  // u8
+//Bit  15: 8   reg_di_dcmb_det_ealp_lmt0      default = 63  // u8
+//Bit   7: 0   reg_di_dcmb_det_ealp_lmt1      default = 4   // u8
+#define   DECOMB_DET_EDGE_CON1                     (0x2d83)
+#define P_DECOMB_DET_EDGE_CON1                     (volatile unsigned int *)((0x2d83  << 2) + 0xff900000)
+//Bit  23:16   reg_di_dcmb_det_ealp_lmt2      default = 0   // u8
+//Bit  15: 8   reg_di_dcmb_det_erate0         default = 32  // u8
+//Bit   7: 0   reg_di_dcmb_det_erate1         default = 4  // u8
+#define   DECOMB_PARA                              (0x2d84)
+#define P_DECOMB_PARA                              (volatile unsigned int *)((0x2d84  << 2) + 0xff900000)
+//Bit  31:30   reserved
+//Bit  29:28   reg_di_dcmb_cmb_lpf            default = 1  // u2, 0:no lpf, 1:[1 2 1], 2,3: [1 2 2 2 1]
+//Bit  27:26   reg_di_dcmb_vedge_chk          default = 0  // u2, vertical edge check, 0: no check, 1: vrt!=0, 2: vrt==3
+//Bit  25:24   reg_di_dcmb_nedge_chk          default = 0  // u2, no idea edge check, 0, no check, 1, check
+//Bit  23:20   reg_di_dcmb_edge_min           default = 0   // u4, min edge for edge cmb
+//Bit  19:16   reg_di_dcmb_edge_max           default = 15  // u4, min edge for edge cmb
+//Bit   15:8   reg_di_dcmb_bld_alp            default = 255  // u8, user defined alpha for di & decmb blend
+//Bit    7:0   reg_di_dcmb_bld_alp_beta       default = 40  // u8, beta for mtn & cmb blend, for bld alpha calc.
+#define   DECOMB_BLND_CON0                         (0x2d85)
+#define P_DECOMB_BLND_CON0                         (volatile unsigned int *)((0x2d85  << 2) + 0xff900000)
+//Bit  31:24   reg_di_dcmb_bld_con_thd0       default = 100  // u8
+//Bit  23:16   reg_di_dcmb_bld_con_thd1       default = 120  // u8
+//Bit  15: 8   reg_di_dcmb_bld_alp_lmt0       default = 0  // u8
+//Bit   7: 0   reg_di_dcmb_bld_alp_lmt1       default = 128   // u8
+#define   DECOMB_BLND_CON1                         (0x2d86)
+#define P_DECOMB_BLND_CON1                         (volatile unsigned int *)((0x2d86  << 2) + 0xff900000)
+//Bit  23:16   reg_di_dcmb_bld_alp_lmt2       default = 255   // u8
+//Bit  15: 8   reg_di_dcmb_bld_rate0          default = 32 // u8
+//Bit   7: 0   reg_di_dcmb_bld_rate1          default = 32  // u8
+#define   DECOMB_YC_THRD                           (0x2d87)
+#define P_DECOMB_YC_THRD                           (volatile unsigned int *)((0x2d87  << 2) + 0xff900000)
+//Bit  31:16   reserved
+//Bit  15: 8   reg_di_dcmb_ythd               default = 2 // u8, default = 2
+//Bit   7: 0   reg_di_dcmb_cthd               default = 2 // u8, default = 2
+#define   DECOMB_MTN_GAIN_OFST                     (0x2d88)
+#define P_DECOMB_MTN_GAIN_OFST                     (volatile unsigned int *)((0x2d88  << 2) + 0xff900000)
+//Bit  31:22   reserved
+//Bit  21:16   reg_di_dcmb_mtn_alp_gain       default = 16  // u6, 16 is normalized to '1'
+//Bit   15:9   reserved
+//Bit    8:0   reg_di_dcmb_mtn_alp_ofst       default = 0  // s9, [-256, 255]
+#define   DECOMB_CMB_SEL_GAIN_OFST                 (0x2d89)
+#define P_DECOMB_CMB_SEL_GAIN_OFST                 (volatile unsigned int *)((0x2d89  << 2) + 0xff900000)
+//Bit  31:22   reserved
+//Bit  21:16   reg_di_dcmb_cmb_sel_gain       default = 48  // u6, 16 is normalized to '1'
+//Bit   15:9   reserved
+//Bit    8:0   reg_di_dcmb_cmb_sel_ofst       default = 0  // s9, [-256, 255]
+#define   DECOMB_WIND00                            (0x2d8a)
+#define P_DECOMB_WIND00                            (volatile unsigned int *)((0x2d8a  << 2) + 0xff900000)
+//Bit  31:29   reserved
+//Bit  28:16   reg_di_dcmb_wnd00              default = 0 // u13, x0 for window 0, software control
+//Bit  15:13   reserved
+//Bit   12:0   reg_di_dcmb_wnd01              default = 719 // u13, x1 for window 0, HSIZE-1, software control
+#define   DECOMB_WIND01                            (0x2d8b)
+#define P_DECOMB_WIND01                            (volatile unsigned int *)((0x2d8b  << 2) + 0xff900000)
+//Bit  31:29   reserved
+//Bit  28:16   reg_di_dcmb_wnd02              default = 0 // u13, y0 for window 0, software control
+//Bit  15:13   reserved
+//Bit   12:0   reg_di_dcmb_wnd03              default = 39 // u13, y1 for window 0, software control
+#define   DECOMB_WIND10                            (0x2d8c)
+#define P_DECOMB_WIND10                            (volatile unsigned int *)((0x2d8c  << 2) + 0xff900000)
+//Bit  31:29   reserved
+//Bit  28:16   reg_di_dcmb_wnd10              default = 0 // u13, x0 for window 1, software control
+//Bit  15:13   reserved
+//Bit   12:0   reg_di_dcmb_wnd11              default = 719 // u13, x1 for window 1, HSIZE-1, software control
+#define   DECOMB_WIND11                            (0x2d8d)
+#define P_DECOMB_WIND11                            (volatile unsigned int *)((0x2d8d  << 2) + 0xff900000)
+//Bit  31:29   reserved
+//Bit  28:16   reg_di_dcmb_wnd12              default = 40 // u13, y0 for window 1, software control
+//Bit  15:13   reserved
+//Bit   12:0   reg_di_dcmb_wnd13              default = 239 // u13, y1 for window 1, VSIZE-1-40, software control
+#define   DECOMB_MODE                              (0x2d8e)
+#define P_DECOMB_MODE                              (volatile unsigned int *)((0x2d8e  << 2) + 0xff900000)
+//Bit  31:16   reserved
+//Bit     15   reg_di_dcmb_is_cmb_bef         default = 1  // u1, 1: decide is_cmb before cmbing refine, 0: decide is_cmb after cmbing refine
+//Bit     14   reg_di_dcmb_en0                default = 1 // u1, enable decmobing for wind0
+//Bit     13   reg_di_dcmb_en1                default = 1 // u1, enable decmobing for wind1
+//Bit     12   reg_di_dcmb_en2                default = 1 // u1, enable decmobing for wind2
+//Bit  11:10   reg_di_dcmb_lpf_mod0           default = 2  // u2, get combing free pixels of wind0 by: 0, vertical lpf, 1, edge lpf, 2,3, ei data
+//Bit    9:8   reg_di_dcmb_lpf_mod1           default = 2  // u2, get combing free pixels of wind1 by: 0, vertical lpf, 1, edge lpf, 2,3, ei data
+//Bit    7:6   reg_di_dcmb_lpf_mod2           default = 0  // u2, get combing free pixels of wind2 by: 0, vertical lpf, 1, edge lpf, 2,3, ei data
+//Bit      5   reg_di_dcmb_cmb_sel0           default = 1  // u1, wind0 decmb based on: 0, vert cmb, 1, edge cmb
+//Bit      4   reg_di_dcmb_cmb_sel1           default = 1  // u1, wind1 decmb based on: 0, vert cmb, 1, edge cmb
+//Bit      3   reg_di_dcmb_cmb_sel2           default = 0  // u1, wind2 decmb based on: 0, vert cmb, 1, edge cmb
+//Bit      2   reg_di_dcmb_alp_mod0           default = 1  // u1, wind0 decmb alpha based on: 0, user-defined, 1, motion adaptive
+//Bit      1   reg_di_dcmb_alp_mod1           default = 1  // u1, wind1 decmb alpha based on: 0, user-defined, 1, motion adaptive
+//Bit      0   reg_di_dcmb_alp_mod2           default = 1  // u1, wind2 decmb alpha based on: 0, user-defined, 1, motion adaptive
+#define   DECOMB_FRM_SIZE                          (0x2d8f)
+#define P_DECOMB_FRM_SIZE                          (volatile unsigned int *)((0x2d8f  << 2) + 0xff900000)
+//Bit  31:29   reserved
+//Bit  28:16   hsize_in                       default = 1920  // u13, pic horz size in  unit: pixel
+//Bit  15:13   reserved
+//Bit   12:0   vsize_in                       default = 1080  // u13, pic vert size in  unit: pixel
+#define   DECOMB_HV_BLANK                          (0x2d90)
+#define P_DECOMB_HV_BLANK                          (volatile unsigned int *)((0x2d90  << 2) + 0xff900000)
+//Bit  31:16   reserved
+//Bit   15:8   hblank_num                     default = 20  // u8, hor blank time
+//Bit    7:0   vblank_num                     default = 50  // u8, ver blank time
+//
+// Closing file:  decomb_regs.h
+//
+// 0x98-0xa3
+//
+// Reading file:  nr2_det_polar_regs.h
+//
+// synopsys translate_off
+// synopsys translate_on
+#define   NR2_POLAR3_MODE                          (0x2d98)
+#define P_NR2_POLAR3_MODE                          (volatile unsigned int *)((0x2d98  << 2) + 0xff900000)
+//Bit 31:20        reserved
+//Bit 19:18        reg_polar3_f02lpf_mod0    // unsigned , default = 3  low pass filter mode for field 0 and field2 before polar3 detection; 0 for no lpf, 1: [1 2 1]/4 vert lpf; 2: [1 2 1; 2 4 2; 1 2 1]/16 2d lpf, p1 no hlpf; 2: [1 2 1; 2 4 2; 1 2 1]/16 2d lpf, p1 [1 2 1]/4 hlpf
+//Bit 17:16        reg_polar3_f02lpf_mod1    // unsigned , default = 3  low pass filter mode for field 0 and field2 before polar3 detection; 0 for no lpf, 1: [1 2 1]/4 vert lpf; 2: [1 2 1; 2 4 2; 1 2 1]/16 2d lpf, p1 no hlpf; 2: [1 2 1; 2 4 2; 1 2 1]/16 2d lpf, p1 [1 2 1]/4 hlpf
+//Bit 15: 8        reg_polar3_dif02_thrd0    // unsigned , default = 5  threshold of dif for polar3 detection except for 32 detection, only do polar3 detection on obvious motion, [0] for luma, 1[1] for chroma
+//Bit  7: 0        reg_polar3_dif02_thrd1    // unsigned , default = 5  threshold of dif for polar3 detection except for 32 detection, only do polar3 detection on obvious motion, [0] for luma, 1[1] for chroma
+#define   NR2_POLAR3_THRD                          (0x2d99)
+#define P_NR2_POLAR3_THRD                          (volatile unsigned int *)((0x2d99  << 2) + 0xff900000)
+//Bit 31:24        reg_polar3_txtf02_thrd0   // unsigned , default = 30  threshold to vertical f0f2 texture, if texture larger than this threshold, will not do the polar3 decision.
+//Bit 23:16        reg_polar3_txtf02_thrd1   // unsigned , default = 30  threshold to vertical f0f2 texture, if texture larger than this threshold, will not do the polar3 decision.
+//Bit 15: 8        reg_polar3_txtf1_thrd0    // unsigned , default = 20  threshold to vertical f1 texture, if texture larger than this threshold, will not do the polar3 decision.
+//Bit  7: 0        reg_polar3_txtf1_thrd1    // unsigned , default = 20  threshold to vertical f1 texture, if texture larger than this threshold, will not do the polar3 decision.
+#define   NR2_POLAR3_PARA0                         (0x2d9a)
+#define P_NR2_POLAR3_PARA0                         (volatile unsigned int *)((0x2d9a  << 2) + 0xff900000)
+//Bit 31:28        reg_polar3_rate00         // unsigned , default = 6  delt = rate*dif02/32, e.g. f2<f0, if f1 within((f0+f2)/2 - delt), ((f0+f2)/2 + delt), then polar3_smoothmv++;
+//Bit 27:24        reg_polar3_rate01         // unsigned , default = 6  delt = rate*dif02/32, e.g. f2<f0, if f1 within((f0+f2)/2 - delt), ((f0+f2)/2 + delt), then polar3_smoothmv++;
+//Bit 23:20        reg_polar3_rate10         // unsigned , default = 8  delt = rate*dif02/32, e.g. f2-ofst1<f0, if f1<((f0+f2)/2 - delt), then polar3_m1++; if f1>((f0+f2)/2 + delt), then polar3_p1++;
+//Bit 19:16        reg_polar3_rate11         // unsigned , default = 8  delt = rate*dif02/32, e.g. f2-ofst1<f0, if f1<((f0+f2)/2 - delt), then polar3_m1++; if f1>((f0+f2)/2 + delt), then polar3_p1++;
+//Bit 15:12        reg_polar3_rate20         // unsigned , default = 2  delt = rate*dif02/32, e.g. f2<f0, if f1<(f2 - delt- ofset2), then polar3_m2++; if f1>((f0 + delt+ ofset2), then polar3_p2++;
+//Bit 11: 8        reg_polar3_rate21         // unsigned , default = 2  delt = rate*dif02/32, e.g. f2<f0, if f1<(f2 - delt- ofset2), then polar3_m2++; if f1>((f0 + delt+ ofset2), then polar3_p2++;
+//Bit  7: 1        reserved
+//Bit  0           reg_polar3_ro_reset       // unsigned , default = 0  reset signal of the polar3 read only registers
+#define   NR2_POLAR3_PARA1                         (0x2d9b)
+#define P_NR2_POLAR3_PARA1                         (volatile unsigned int *)((0x2d9b  << 2) + 0xff900000)
+//Bit 31:24        reg_polar3_rate30         // unsigned , default = 48  delt = rate*dif02/32, e.g. f2<f0, if f1<(f2 - delt- ofset3) or f1>((f0 + delt+ofst3), then polar3_32++;
+//Bit 23:16        reg_polar3_rate31         // unsigned , default = 48  delt = rate*dif02/32, e.g. f2<f0, if f1<(f2 - delt- ofset3) or f1>((f0 + delt+ofst3), then polar3_32++;
+//Bit 15:12        reg_polar3_ofst30         // signed , default = 2  delt = rate*dif02/32, e.g. f2<f0, if f1<(f2 - delt-ofst3) or f1>((f0 + delt+ofst3), then polar3_32++;
+//Bit 11: 8        reg_polar3_ofst31         // signed , default = 2  delt = rate*dif02/32, e.g. f2<f0, if f1<(f2 - delt-ofst3) or f1>((f0 + delt+ofst3), then polar3_32++;
+//Bit  7: 4        reg_polar3_ofst20         // signed , default = 2  delt = rate*dif02/32, e.g. f2<f0, if f1<(f2 - delt- ofset2), then polar3_m2++; if f1>((f0 + delt+ ofset2), then polar3_p2++;
+//Bit  3: 0        reg_polar3_ofst21         // signed , default = 2  delt = rate*dif02/32, e.g. f2<f0, if f1<(f2 - delt- ofset2), then polar3_m2++; if f1>((f0 + delt+ ofset2), then polar3_p2++;
+#define   NR2_POLAR3_CTRL                          (0x2d9c)
+#define P_NR2_POLAR3_CTRL                          (volatile unsigned int *)((0x2d9c  << 2) + 0xff900000)
+//Bit 31:24        reg_polar3_ofst10         // signed , default = 1
+//Bit 23:16        reg_polar3_ofst11         // signed , default = 1
+//Bit 15: 8        reg_polar3_h_mute         // unsigned , default = 10  horizontal pixels to mute for left right sides for polar3 detection;
+//Bit  7: 0        reg_polar3_v_mute         // unsigned , default = 10  vertical pixels to mute for top and bottom sides for polar3 detection;
+#define   NR2_RO_POLAR3_NUMOFPIX                   (0x2d9d)
+#define P_NR2_RO_POLAR3_NUMOFPIX                   (volatile unsigned int *)((0x2d9d  << 2) + 0xff900000)
+//Bit 31:24        reserved
+//Bit 23: 0        ro_polar3_numofpix        // unsigned , default = 0  number of pixels detected as polar3
+#define   NR2_RO_POLAR3_SMOOTHMV                   (0x2d9e)
+#define P_NR2_RO_POLAR3_SMOOTHMV                   (volatile unsigned int *)((0x2d9e  << 2) + 0xff900000)
+//Bit 31:24        reserved
+//Bit 23: 0        ro_polar3_smoothmv        // unsigned , default = 0  number of pixels with smooth mv, F(t) is close between avg of f(t-1) and f(t+1);
+#define   NR2_RO_POLAR3_M1                         (0x2d9f)
+#define P_NR2_RO_POLAR3_M1                         (volatile unsigned int *)((0x2d9f  << 2) + 0xff900000)
+//Bit 31:24        reserved
+//Bit 23: 0        ro_polar3_m1              // unsigned , default = 0  number of pixels with F(t) is close to f(t-1) instead of f(t+1), but in between [f(t-1), f(t+1)];
+#define   NR2_RO_POLAR3_P1                         (0x2da0)
+#define P_NR2_RO_POLAR3_P1                         (volatile unsigned int *)((0x2da0  << 2) + 0xff900000)
+//Bit 31:24        reserved
+//Bit 23: 0        ro_polar3_p1              // unsigned , default = 0  number of pixels with F(t) is close to f(t+1) instead of f(t-1), but in between [f(t-1), f(t+1)];
+#define   NR2_RO_POLAR3_M2                         (0x2da1)
+#define P_NR2_RO_POLAR3_M2                         (volatile unsigned int *)((0x2da1  << 2) + 0xff900000)
+//Bit 31:24        reserved
+//Bit 23: 0        ro_polar3_m2              // unsigned , default = 0  number of pixels with F(t) is close to f(t-1) instead of f(t+1), but out side of (f(t-1), f(t+1));
+#define   NR2_RO_POLAR3_P2                         (0x2da2)
+#define P_NR2_RO_POLAR3_P2                         (volatile unsigned int *)((0x2da2  << 2) + 0xff900000)
+//Bit 31:24        reserved
+//Bit 23: 0        ro_polar3_p2              // unsigned , default = 0  number of pixels with F(t) is close to f(t+1) instead of f(t-1), but out side of (f(t-1), f(t+1));
+#define   NR2_RO_POLAR3_32                         (0x2da3)
+#define P_NR2_RO_POLAR3_32                         (volatile unsigned int *)((0x2da3  << 2) + 0xff900000)
+//Bit 31:24        reserved
+//Bit 23: 0        ro_polar3_32              // unsigned , default = 0  number of pixels with F(t) far from [f(t-1),f(t+1)] and f(t-1) is close to f(t+1);
+// synopsys translate_off
+// synopsys translate_on
+//
+// Closing file:  nr2_det_polar_regs.h
+//
+// 0xa4-0xf7 / 0xff
+//
+// Reading file:  nr4_regs.h
+//
+// synopsys translate_off
+// synopsys translate_on
+//========== nr4_drt_regs register begin ==========//
+#define   NR4_DRT_CTRL                             (0x2da4)
+#define P_NR4_DRT_CTRL                             (volatile unsigned int *)((0x2da4  << 2) + 0xff900000)
+//Bit 31:24        reg_nr4_ydrt_3line_ssd_gain    // unsigned , default = 16  gain to max ssd normalized 16 as '1'
+//Bit 23:16        reg_nr4_ydrt_5line_ssd_gain    // unsigned , default = 16  gain to max ssd normalized 16 as '1'
+//Bit 15            reserved
+//Bit 14:13        reg_nr4_drt_yhsad_mode         // unsigned , default = 1  mode for luma horiztonal sad calc., 0: no vertical lpf, 1: vertical [1 2 1], 2 or 3: vertical [ 1 2 2 2 1] if 5 lines
+//Bit 12:11        reg_nr4_drt_chsad_mode         // unsigned , default = 1  mode for chroma horiztonal sad calc., 0: no vertical lpf, 1: vertical [1 2 1], 2 or 3: vertical [ 1 2 2 2 1] if 5 lines
+//Bit 10           reg_nr4_drt_yhsad_hlpf         // unsigned , default = 1  hlpf for luma hsad of drt calculation, 0: no lpf, 1: with [1 2 1] hlpf
+//Bit  9           reg_nr4_drt_yvsad_hlpf         // unsigned , default = 1  hlpf for luma vsad of drt calculation, 0: no lpf, 1: with [1 2 1] hlpf
+//Bit  8           reg_nr4_drt_ydsad_hlpf         // unsigned , default = 1  hlpf for luma dsad of drt calculation, 0: no lpf, 1: with [1 2 1] hlpf
+//Bit  7           reg_nr4_drt_chsad_hlpf         // unsigned , default = 1  hlpf for chrome hsad of drt calculation, 0: no lpf, 1: with [1 2 1] hlpf
+//Bit  6           reg_nr4_drt_cvsad_hlpf         // unsigned , default = 1  hlpf for chroma vsad of drt calculation, 0: no lpf, 1: with [1 2 1] hlpf
+//Bit  5           reg_nr4_drt_cdsad_hlpf         // unsigned , default = 1  hlpf for chroma dsad of drt calculation, 0: no lpf, 1: with [1 2 1] hlpf
+//Bit  4           reg_nr4_ydrt_dif_mode          // unsigned , default = 1  0:y_dif, 1: y_dif + (u_dif + v_dif)/2
+//Bit  3: 2        reg_nr4_cdrt_dif_mode          // unsigned , default = 2  0:(u_dif + v_dif), 1: y_dif/4 + (u_dif + v_dif)*3/4, 2:y_dif/2 + (u_dif + v_dif)/2, 3: y_dif (not recommended)
+//Bit  1: 0        reserved
+#define   NR4_DRT_YSAD_GAIN                        (0x2da5)
+#define P_NR4_DRT_YSAD_GAIN                        (volatile unsigned int *)((0x2da5  << 2) + 0xff900000)
+//Bit 31:24        reg_nr4_ysad_hrz_gain           // unsigned , default = 16  gain for horizontal sad, 16 normalized to "1"
+//Bit 23:16        reg_nr4_ysad_diag_gain          // unsigned , default = 20  gain for diagonal sad, 16 normalized to "1"
+//Bit 15: 8        reg_nr4_ysad_vrt_gain           // unsigned , default = 16  gain for vertical sad, 16 normalized to "1"
+//Bit  7: 6        reserved
+//Bit  5: 0        reg_nr4_drt_ysad_core_rate      // unsigned , default = 6  rate of coring for sad(theta) - sad(theta+pi/2)*rate/64
+#define   NR4_DRT_CSAD_GAIN                        (0x2da6)
+#define P_NR4_DRT_CSAD_GAIN                        (volatile unsigned int *)((0x2da6  << 2) + 0xff900000)
+//Bit 31:24        reg_nr4_csad_hrz_gain           // unsigned , default = 16  gain for horizontal sad, 16 normalized to "1"
+//Bit 23:16        reg_nr4_csad_diag_gain          // unsigned , default = 20  gain for diagonal sad, 16 normalized to "1"
+//Bit 15: 8        reg_nr4_csad_vrt_gain           // unsigned , default = 16  gain for vertical sad, 16 normalized to "1"
+//Bit  7: 6        reserved
+//Bit  5: 0        reg_nr4_drt_csad_core_rate      // unsigned , default = 6  rate of coring for sad(theta) - sad(theta+pi/2)*rate/64
+#define   NR4_DRT_SAD_ALP_CORE                     (0x2da7)
+#define P_NR4_DRT_SAD_ALP_CORE                     (volatile unsigned int *)((0x2da7  << 2) + 0xff900000)
+//Bit 31:24        reserved
+//Bit 23:20        reg_nr4_ydrt_alp_core_rate     // unsigned , default = 0  luma ratio to min_err, alpha = (min_err - (max_err - min_err)*rate + ofst)/max_err * 64; dft = 0/32
+//Bit 19:16        reg_nr4_cdrt_alp_core_rate     // unsigned , default = 0  chroma ratio to min_err, alpha = (min_err - (max_err - min_err)*rate + ofst)/max_err * 64; dft = 0/32
+//Bit 15:14        reserved
+//Bit 13: 8        reg_nr4_ydrt_alp_core_ofst     // unsigned , default = 10  luma offset to min_err, alpha = (min_err - (max_err - min_err)*rate + ofst)/max_err * 64; dft = 10
+//Bit  7: 6        reserved
+//Bit  5: 0        reg_nr4_cdrt_alp_core_ofst     // unsigned , default = 10  chroma offset to min_err, alpha = (min_err - (max_err - min_err)*rate + ofst)/max_err * 64; dft = 10
+#define   NR4_DRT_ALP_MINMAX                       (0x2da8)
+#define P_NR4_DRT_ALP_MINMAX                       (volatile unsigned int *)((0x2da8  << 2) + 0xff900000)
+//Bit 31:30        reserved
+//Bit 29:24        reg_nr4_ydrt_alp_min           // unsigned , default = 0  luma min value of alpha, dft = 0
+//Bit 23:22        reserved
+//Bit 21:16        reg_nr4_ydrt_alp_max           // unsigned , default = 63  luma max value of alpha, dft = 63
+//Bit 15:14        reserved
+//Bit 13: 8        reg_nr4_cdrt_alp_min           // unsigned , default = 0  chroma min value of alpha, dft = 0
+//Bit  7: 6        reserved
+//Bit  5: 0        reg_nr4_cdrt_alp_max           // unsigned , default = 63  chroma max value of alpha, dft = 63
+//========== nr4_drt_regs register end ==========//
+//========== nr4_snr_regs register begin ==========//
+#define   NR4_SNR_CTRL_REG                         (0x2da9)
+#define P_NR4_SNR_CTRL_REG                         (volatile unsigned int *)((0x2da9  << 2) + 0xff900000)
+//Bit 31:13        reserved
+//Bit 12           reg_nr4_bet2_sel              // unsigned , default = 1
+//Bit 11: 9        reg_nr4_snr2_sel_mode         // unsigned , default = 0  0: no filter, 1: adpgau, adp_drt_lpf blend; 2: adpgau, drt4_lpf blend; 3: adp_drt_lpf method, 4: drt4_lpf method, 5: adp_drt_                                                             //original image blend, 6: drt4_lpf, original image blend, 7: adpgau method; dft=1
+//Bit  8           reg_nr4_snr2_gaulpf_mode      // unsigned , default = 1    0: 3*5 or 5*5 gaussian lpf;  1: 3*3 (window size) gaussian lpf;   dft=1
+//Bit  7: 6        reg_nr4_snr2_alpha0_sad_mode  // unsigned , default = 3  0: max_sad*max_ssd;  1: max_sad*max_sad; 2: adp_max_sad*max_ssd; 3: adp_max_sad*adp_max_sad  dft=3
+//Bit  5: 4        reg_nr4_snr2_alpha1_sad_mode  // unsigned , default = 2  0: max_sad;  1: cross_max_sad; 2 or 3: adp_sad  dft=2
+//Bit  3: 2        reserved
+//Bit  1: 0        reg_nr4_snr2_adp_drtlpf_mode  // unsigned , default = 3  0: adp_drtlpf [2 1 1]/4, 1: adp_drtlpf [4 2 1 1]/8; 2: adp_drtlpf [2 2 2 1 1]/8; 3: adp_drtlpf [7 7 7 6 5]/32;  dft=3;
+#define   NR4_SNR_ALPHA0_MAX_MIN                   (0x2daa)
+#define P_NR4_SNR_ALPHA0_MAX_MIN                   (volatile unsigned int *)((0x2daa  << 2) + 0xff900000)
+//Bit 31:30        reserved
+//Bit 29:23        reg_nr4_snr2_alp0_ymin    // unsigned , default = 127  normalized to 128 as '1'
+//Bit 22:16        reg_nr4_snr2_alp0_ymax    // unsigned , default = 127  normalized to 128 as '1'
+//Bit 15:14        reserved
+//Bit 13: 7        reg_nr4_snr2_alp0_cmin    // unsigned , default = 127  normalized to 128 as '1'
+//Bit  6: 0        reg_nr4_snr2_alp0_cmax    // unsigned , default = 127  normalized to 128 as '1'
+#define   NR4_ALP0C_ERR2CURV_LIMIT0                (0x2dab)
+#define P_NR4_ALP0C_ERR2CURV_LIMIT0                (volatile unsigned int *)((0x2dab  << 2) + 0xff900000)
+//Bit 31:24        reg_nr4_snr2_alp0_minerr_cpar0  // unsigned , default = 0  threshold0 of curve to map mierr to alp0 for chroma channel, this will be set value of flat region mierr that no need blur.
+//Bit 23:16        reg_nr4_snr2_alp0_minerr_cpar1  // unsigned , default = 25  threshold1 of curve to map mierr to alp0 for chroma channel,this will be set value of texture region mierr that can not blur.
+//Bit 15: 8        reg_nr4_snr2_alp0_minerr_cpar5  // unsigned , default = 40  rate0 (for mierr<th0) of curve to map mierr to alp0 for chroma channel. the larger of the value, the deep of the slope. 0~255.
+//Bit  7: 0        reg_nr4_snr2_alp0_minerr_cpar6  // unsigned , default = 40  rate1 (for mierr>th1) of curve to map mierr to alp0 for chroma channel. the larger of the value, the deep of the slope. 0~255.
+#define   NR4_ALP0C_ERR2CURV_LIMIT1                (0x2dac)
+#define P_NR4_ALP0C_ERR2CURV_LIMIT1                (volatile unsigned int *)((0x2dac  << 2) + 0xff900000)
+//Bit 31:24        reserved
+//Bit 23:16        reg_nr4_snr2_alp0_minerr_cpar2  // unsigned , default = 127  level limit(for mierr<th0) of curve to map mierr to alp0 for chroma channel, that we can do for flat region. 0~255.
+//Bit 15: 8        reg_nr4_snr2_alp0_minerr_cpar3  // unsigned , default = 0  level limit(for th0<mierr<th1) of curve to map mierr to alp0 for chroma channel, that we can do for misc region. 0~255.
+//Bit  7: 0        reg_nr4_snr2_alp0_minerr_cpar4  // unsigned , default = 127  level limit(for mierr>th1) of curve to map mierr to alp0 for chroma channel,   that we can do for texture region. 0~255.
+#define   NR4_ALP0Y_ERR2CURV_LIMIT0                (0x2dad)
+#define P_NR4_ALP0Y_ERR2CURV_LIMIT0                (volatile unsigned int *)((0x2dad  << 2) + 0xff900000)
+//Bit 31:24        reg_nr4_snr2_alp0_minerr_ypar0  // unsigned , default = 0  threshold0 of curve to map mierr to alp0 for luma channel, this will be set value of flat region mierr that no need blur. 0~255.
+//Bit 23:16        reg_nr4_snr2_alp0_minerr_ypar1  // unsigned , default = 25  threshold1 of curve to map mierr to alp0 for luma channel,this will be set value of texture region mierr that can not blur.
+//Bit 15: 8        reg_nr4_snr2_alp0_minerr_ypar5  // unsigned , default = 40  rate0 (for mierr<th0) of curve to map mierr to alp0 for luma channel. the larger of the value, the deep of the slope. 0~255.
+//Bit  7: 0        reg_nr4_snr2_alp0_minerr_ypar6  // unsigned , default = 40  rate1 (for mierr>th1) of curve to map mierr to alp0 for luma channel. the larger of the value, the deep of the slope. 0~255.
+#define   NR4_ALP0Y_ERR2CURV_LIMIT1                (0x2dae)
+#define P_NR4_ALP0Y_ERR2CURV_LIMIT1                (volatile unsigned int *)((0x2dae  << 2) + 0xff900000)
+//Bit 31:24        reserved
+//Bit 23:16        reg_nr4_snr2_alp0_minerr_ypar2  // unsigned , default = 127  level limit(for mierr<th0) of curve to map mierr to alp0 for luma channel,  set to alp0 that we can do for flat region. 0~255.
+//Bit 15: 8        reg_nr4_snr2_alp0_minerr_ypar3  // unsigned , default = 0  level limit(for th0<mierr<th1) of curve to map mierr to alp0 for luma channel, alp0 that we can do for misc region. 0~255.
+//Bit  7: 0        reg_nr4_snr2_alp0_minerr_ypar4  // unsigned , default = 127  level limit(for mierr>th1) of curve to map mierr to alp0 for luma channel, alp0 that we can do for texture region. 0~255.
+#define   NR4_SNR_ALPA1_RATE_AND_OFST              (0x2daf)
+#define P_NR4_SNR_ALPA1_RATE_AND_OFST              (volatile unsigned int *)((0x2daf  << 2) + 0xff900000)
+//Bit 31:24        reserved
+//Bit 23:18        reg_nr4_snr2_alp1_ycore_rate      // unsigned , default = 0    normalized 64 as "1"
+//Bit 17:12        reg_nr4_snr2_alp1_ccore_rate      // unsigned , default = 0    normalized 64 as "1"
+//Bit 11: 6        reg_nr4_snr2_alp1_ycore_ofst      // signed , default = 3    normalized 64 as "1"
+//Bit  5: 0        reg_nr4_snr2_alp1_ccore_ofst      // signed , default = 3    normalized 64 as "1"
+#define   NR4_SNR_ALPHA1_MAX_MIN                   (0x2db0)
+#define P_NR4_SNR_ALPHA1_MAX_MIN                   (volatile unsigned int *)((0x2db0  << 2) + 0xff900000)
+//Bit 31:24        reserved
+//Bit 23:18        reg_nr4_snr2_alp1_ymin            // unsigned , default = 0    normalized to 64 as '1'
+//Bit 17:12        reg_nr4_snr2_alp1_ymax            // unsigned , default = 63   normalized to 64 as '1'
+//Bit 11: 6        reg_nr4_snr2_alp1_cmin            // unsigned , default = 0    normalized to 64 as '1'
+//Bit  5: 0        reg_nr4_snr2_alp1_cmax            // unsigned , default = 63   normalized to 64 as '1'
+#define   NR4_ALP1C_ERR2CURV_LIMIT0                (0x2db1)
+#define P_NR4_ALP1C_ERR2CURV_LIMIT0                (volatile unsigned int *)((0x2db1  << 2) + 0xff900000)
+//Bit 31:24        reg_nr4_snr2_alp1_minerr_cpar0  // unsigned , default = 0    annel, this will be set value of flat region mierr that no need directional NR. 0~255.
+//Bit 23:16        reg_nr4_snr2_alp1_minerr_cpar1  // unsigned , default = 24   hannel,this will be set value of texture region mierr that can not do directional NR. 0~255.
+//Bit 15: 8        reg_nr4_snr2_alp1_minerr_cpar5  // unsigned , default = 0    a/chroma  channel. the larger of the value, the deep of the slope.
+//Bit  7: 0        reg_nr4_snr2_alp1_minerr_cpar6  // unsigned , default = 20   a/chroma  channel. the larger of the value, the deep of the slope. 0~255
+#define   NR4_ALP1C_ERR2CURV_LIMIT1                (0x2db2)
+#define P_NR4_ALP1C_ERR2CURV_LIMIT1                (volatile unsigned int *)((0x2db2  << 2) + 0xff900000)
+//Bit 31:24        reserved
+//Bit 23:16        reg_nr4_snr2_alp1_minerr_cpar2  // unsigned , default = 0    will be set to alp1 that we can do for flat region. 0~255.
+//Bit 15: 8        reg_nr4_snr2_alp1_minerr_cpar3  // unsigned , default = 16   this will be set to alp1 that we can do for misc region. 0~255.
+//Bit  7: 0        reg_nr4_snr2_alp1_minerr_cpar4  // unsigned , default = 63   will be set to alp1 that we can do for texture region. 0~255.255 before
+#define   NR4_ALP1Y_ERR2CURV_LIMIT0                (0x2db3)
+#define P_NR4_ALP1Y_ERR2CURV_LIMIT0                (volatile unsigned int *)((0x2db3  << 2) + 0xff900000)
+//Bit 31:24        reg_nr4_snr2_alp1_minerr_ypar0  // unsigned , default = 0    thra/chroma channel, this will be set value of flat region mierr that no need directional NR. 0~255.
+//Bit 23:16        reg_nr4_snr2_alp1_minerr_ypar1  // unsigned , default = 24   thra/chroma  channel,this will be set value of texture region mierr that can not do directional NR. 0~255.
+//Bit 15: 8        reg_nr4_snr2_alp1_minerr_ypar5  // unsigned , default = 0    ratlp1 for luma/chroma  channel. the larger of the value, the deep of the slope.
+//Bit  7: 0        reg_nr4_snr2_alp1_minerr_ypar6  // unsigned , default = 20   ratlp1 for luma/chroma  channel. the larger of the value, the deep of the slope. 0~255
+#define   NR4_ALP1Y_ERR2CURV_LIMIT1                (0x2db4)
+#define P_NR4_ALP1Y_ERR2CURV_LIMIT1                (volatile unsigned int *)((0x2db4  << 2) + 0xff900000)
+//Bit 31:24        reserved
+//Bit 23:16        reg_nr4_snr2_alp1_minerr_ypar2  // unsigned , default = 0    lev to alp1 for luma/chroma  channel, this will be set to alp1 that we can do for flat region. 0~255.
+//Bit 15: 8        reg_nr4_snr2_alp1_minerr_ypar3  // unsigned , default = 16   levierr to alp1 for luma/chroma  channel, this will be set to alp1 that we can do for misc region. 0~255.
+//Bit  7: 0        reg_nr4_snr2_alp1_minerr_ypar4  // unsigned , default = 63   lev to alp1 for luma/chroma  channel, this will be set to alp1 that we can do for texture region. 0~255.255 before
+//========== nr4_snr_regs register end ==========//
+//========== nr4_tnr_regs register begin ==========//
+#define   NR4_MTN_CTRL                             (0x2db5)
+#define P_NR4_MTN_CTRL                             (volatile unsigned int *)((0x2db5  << 2) + 0xff900000)
+//Bit 31: 2        reserved
+//Bit  1           reg_nr4_mtn_ref_en        // unsigned , default = 1  enable motion refinement, dft = 1
+//Bit  0           reg_nr4_mtn_ref_bet_sel   // unsigned , default = 0  beta selection mode for motion refinement, 0: beta1, 1: beta2, dft = 0
+#define   NR4_MTN_REF_PAR0                         (0x2db6)
+#define P_NR4_MTN_REF_PAR0                         (volatile unsigned int *)((0x2db6  << 2) + 0xff900000)
+//Bit 31:24        reg_nr4_mtn_ref_par0      // unsigned , default = 24  par0 for beta to gain, dft =
+//Bit 23:16        reg_nr4_mtn_ref_par1      // unsigned , default = 60  par1 for beta to gain, dft =
+//Bit 15: 8        reg_nr4_mtn_ref_par2      // unsigned , default = 4  par2 for beta to gain, dft =
+//Bit  7: 0        reg_nr4_mtn_ref_par3      // unsigned , default = 32  par3 for beta to gain, dft =
+#define   NR4_MTN_REF_PAR1                         (0x2db7)
+#define P_NR4_MTN_REF_PAR1                         (volatile unsigned int *)((0x2db7  << 2) + 0xff900000)
+//Bit 31:24        reserved
+//Bit 23:16        reg_nr4_mtn_ref_par4      // unsigned , default = 128  par4 for beta to gain, dft =
+//Bit 15: 8        reg_nr4_mtn_ref_par5      // unsigned , default = 40  par5 for beta to gain, dft =
+//Bit  7: 0        reg_nr4_mtn_ref_par6      // unsigned , default = 20  par6 for beta to gain, dft =
+//========== nr4_tnr_regs register end ==========//
+//========== nr4_mcnr_regs register begin ==========//
+#define   NR4_MCNR_LUMA_ENH_CTRL                   (0x2db8)
+#define P_NR4_MCNR_LUMA_ENH_CTRL                   (volatile unsigned int *)((0x2db8  << 2) + 0xff900000)
+//Bit 31: 4        reserved
+//Bit  3           reg_nr4_luma_plus_en           // unsigned , default = 1  enable luma enhancement, dft = 1
+//Bit  2           reg_nr4_luma_plus_wt_mode      // unsigned , default = 1  luma weight calc mode, 0:sqrt(1+x^2), 1: 1+abs(x), dft = 0
+//Bit  1: 0        reg_nr4_luma_plus_orient_mode  // unsigned , default = 1  0: only use previous orient for pre and cur luma plus, 1: 0: only use current orient for pre and cur luma plus
+#define   NR4_MCNR_LUMA_STAT_LIMTX                 (0x2db9)
+#define P_NR4_MCNR_LUMA_STAT_LIMTX                 (volatile unsigned int *)((0x2db9  << 2) + 0xff900000)
+//Bit 31:30        reserved
+//Bit 29:16        reg_nr4_luma_plus_xst        // unsigned , default = 8    start for luma plus statistic, dft = 8
+//Bit 15:14        reserved
+//Bit 13: 0        reg_nr4_luma_plus_xed        // unsigned , default = 711  end for luma plus statistic, dft = HSIZE-8-1;
+#define   NR4_MCNR_LUMA_STAT_LIMTY                 (0x2dba)
+#define P_NR4_MCNR_LUMA_STAT_LIMTY                 (volatile unsigned int *)((0x2dba  << 2) + 0xff900000)
+//Bit 31:30        reserved
+//Bit 29:16        reg_nr4_luma_plus_yst          // unsigned , default = 8  start for luma plus statistic, dft = 8
+//Bit 15:14        reserved
+//Bit 13: 0        reg_nr4_luma_plus_yed          // unsigned , default = 231  end for luma plus statistic, dft = VSIZE-8-1
+#define   NR4_MCNR_LUMA_DIF_CALC                   (0x2dbb)
+#define P_NR4_MCNR_LUMA_DIF_CALC                   (volatile unsigned int *)((0x2dbb  << 2) + 0xff900000)
+//Bit 31:30        reserved
+//Bit 29:24        reg_nr4_luma_plus_ugain        // unsigned , default = 8  U's gain for luma enhancement, 16 normalized as '1'
+//Bit 23:22        reserved
+//Bit 21:16        reg_nr4_luma_plus_vgain        // unsigned , default = 8  V's gain for luma enhancement, 16 normalized as '1'
+//Bit 15: 8        reg_nr4_luma_plus_ycor_thd     // unsigned , default = 2  Y coring threshold for difference calc., dft = 0
+//Bit  7: 0        reg_nr4_luma_plus_ccor_thd     // unsigned , default = 0  C coring threshold for difference calc., dft = 0
+#define   NR4_MCNR_LUMAPRE_CAL_PRAM                (0x2dbc)
+#define P_NR4_MCNR_LUMAPRE_CAL_PRAM                (volatile unsigned int *)((0x2dbc  << 2) + 0xff900000)
+//Bit 31:26        reserved
+//Bit 25:24        reg_nr4_pre_u_orient           // signed , default = 0  orientation of previous U, initial to 0, and will be updated by software
+//Bit 23:18        reserved
+//Bit 17:16        reg_nr4_pre_v_orient           // signed , default = 0  orientation of previous V, initial to 0, and will be updated by software
+//Bit 15: 8        reg_nr4_pre_u_mean             // unsigned , default = 0  mean of previous U, initial to 0, and will be updated by software
+//Bit  7: 0        reg_nr4_pre_v_mean             // unsigned , default = 0  mean of previousV, initial to 0, and will be updated by software
+#define   NR4_MCNR_LUMACUR_CAL_PRAM                (0x2dbd)
+#define P_NR4_MCNR_LUMACUR_CAL_PRAM                (volatile unsigned int *)((0x2dbd  << 2) + 0xff900000)
+//Bit 31:26        reserved
+//Bit 25:24        reg_nr4_cur_u_orient           // signed , default = 0  orientation of current U, initial to 0, and will be updated by software
+//Bit 23:18        reserved
+//Bit 17:16        reg_nr4_cur_v_orient           // signed , default = 0  orientation of current V, initial to 0, and will be updated by software
+//Bit 15: 8        reg_nr4_cur_u_mean             // unsigned , default = 0  mean of current U, initial to 0, and will be updated by software
+//Bit  7: 0        reg_nr4_cur_v_mean             // unsigned , default = 0  mean of current, initial to 0, and will be updated by software
+#define   NR4_MCNR_MV_CTRL_REG                     (0x2dbe)
+#define P_NR4_MCNR_MV_CTRL_REG                     (volatile unsigned int *)((0x2dbe  << 2) + 0xff900000)
+//Bit 31:14        reserved
+//Bit 13:12        reg_nr4_sad_bitw          // unsigned , default = 2  sad bit width (8 + x) before clip to u8, dft = 1
+//Bit 11: 4        reg_nr4_glb_gain          // unsigned , default = 64  global gain calc. by software, 64 is normalized as '1'
+//Bit  3: 0        reg_nr4_mv_err_rsft       // unsigned , default = 8  right shift for mv err calc., dft = 9
+#define   NR4_MCNR_MV_GAIN0                        (0x2dbf)
+#define P_NR4_MCNR_MV_GAIN0                        (volatile unsigned int *)((0x2dbf  << 2) + 0xff900000)
+//Bit 31:28        reg_nr4_lftmvx_gain       // unsigned , default = 1  left mvx gain for err calc., dft = 1
+//Bit 27:24        reg_nr4_lftmvy_gain       // unsigned , default = 1  left mvy gain for err calc., dft = 1
+//Bit 23:20        reg_nr4_zmvx_gain         // unsigned , default = 5  zero mvx gain for err calc., dft = 2
+//Bit 19:16        reg_nr4_zmvy_gain         // unsigned , default = 5  zero mvy gain for err calc., dft = 4
+//Bit 15:12        reg_nr4_lmvx0_gain        // unsigned , default = 2  line mvx0 gain for err calc., dft = 1
+//Bit 11: 8        reg_nr4_lmvx1_gain        // unsigned , default = 2  line mvx1 gain for err calc., dft = 1
+//Bit  7: 4        reg_nr4_lmvy0_gain        // unsigned , default = 2  line mvy0 gain for err calc., dft = 1
+//Bit  3: 0        reg_nr4_lmvy1_gain        // unsigned , default = 2  line mvy1 gain for err calc., dft = 1
+#define   NR4_MCNR_LMV_PARM                        (0x2dc0)
+#define P_NR4_MCNR_LMV_PARM                        (volatile unsigned int *)((0x2dc0  << 2) + 0xff900000)
+//Bit 31:28        reg_nr4_lmv_rt0		         // unsigned , default = 3  ratio of max lmv
+//Bit 27:24        reg_nr4_lmv_rt1		         // unsigned , default = 3  ratio of second max lmv
+//Bit 23:22        reserved
+//Bit 21:16        reg_nr4_lmv_num_lmt0	     // unsigned , default = 16  lmv0 least/limit number of (total number - zero_bin)
+//Bit 15:14        reserved
+//Bit 13: 8        reg_nr4_lmv_num_lmt1	     // unsigned , default = 8  lmv1 least/limit number of (total number - zero_bin - max0)
+//Bit  7: 2        reserved
+//Bit  1: 0        reg_nr4_max_sad_rng       // unsigned , default = 1  search range of max2 sad in small region, dft = 1
+#define   NR4_MCNR_ALP0_REG                        (0x2dc1)
+#define P_NR4_MCNR_ALP0_REG                        (volatile unsigned int *)((0x2dc1  << 2) + 0xff900000)
+//Bit 31:26        reserved
+//Bit 25           reg_nr4_alp0_fail_chk     // unsigned , default = 1  enable check for alp0 fail status
+//Bit 24           reg_nr4_bet0_coef_ref_en  // unsigned , default = 1  bet1 refinement by coef_blt
+//Bit 23:16        reg_nr4_alp0_posad_gain   // unsigned , default = 255  the sad (norm) gain for pixel pointed by MV;
+//Bit 15:10        reserved
+//Bit  9: 8        reg_nr4_alp0_norm_mode    // unsigned , default = 0  alp0 select sad norm mode, 0: disable, 1: enable dc norm, 2: enable ac norm, 3: enable both (dc/ac) norm, dft = 3
+//Bit  7: 6        reserved
+//Bit  5: 0        reg_nr4_alp0_norm_gain    // unsigned , default = 16  alp0 gain for sad norm, '32' as '1', dft = 1
+#define   NR4_MCNR_ALP1_AND_BET0_REG               (0x2dc2)
+#define P_NR4_MCNR_ALP1_AND_BET0_REG               (volatile unsigned int *)((0x2dc2  << 2) + 0xff900000)
+//Bit 31:26        reserved
+//Bit 25:24        reg_nr4_alp1_norm_mode    // unsigned , default = 3  alp1 select sad norm mode, 0: disable, 1: enable dc norm, 2: enable ac norm, 3: enable both (dc/ac) norm, dft = 3
+//Bit 23:22        reserved
+//Bit 21:16        reg_nr4_alp1_norm_gain    // unsigned , default = 3  alp1 gain for sad norm, '32' as '1', dft = 1
+//Bit 15:10        reserved
+//Bit  9: 8        reg_nr4_bet0_norm_mode    // unsigned , default = 3  bet0 select sad norm mode, 0: disable, 1: enable dc norm, 2: enable ac norm, 3: enable both (dc/ac) norm, dft = 3
+//Bit  7: 6        reserved
+//Bit  5: 0        reg_nr4_bet0_norm_gain    // unsigned , default = 8  bet0 gain for sad norm, '32' as '1', dft = 1
+#define   NR4_MCNR_BET1_AND_BET2_REG               (0x2dc3)
+#define P_NR4_MCNR_BET1_AND_BET2_REG               (volatile unsigned int *)((0x2dc3  << 2) + 0xff900000)
+//Bit 31:26        reserved
+//Bit 25:24        reg_nr4_bet1_norm_mode    // unsigned , default = 3  bet1 select sad norm mode, 0: disable, 1: enable dc norm, 2: enable ac norm, 3: enable both (dc/ac) norm, dft = 3
+//Bit 23:22        reserved
+//Bit 21:16        reg_nr4_bet1_norm_gain    // unsigned , default = 8  bet1 gain for sad norm, '32' as '1', dft = 1
+//Bit 15:10        reserved
+//Bit  9: 8        reg_nr4_bet2_norm_mode    // unsigned , default = 0  bet2 select sad norm mode, 0: disable, 1: enable dc norm, 2: enable ac norm, 3: enable both (dc/ac) norm, dft = 3
+//Bit  7: 6        reserved
+//Bit  5: 0        reg_nr4_bet2_norm_gain    // unsigned , default = 16  bet2 gain for sad norm, '32' as '1', dft = 1
+#define   NR4_MCNR_AC_DC_CRTL                      (0x2dc4)
+#define P_NR4_MCNR_AC_DC_CRTL                      (volatile unsigned int *)((0x2dc4  << 2) + 0xff900000)
+//Bit 31:16        reserved
+//Bit 15:12        reserved
+//Bit 11           reg_nr4_dc_mode           // unsigned , default = 1  mode for dc selection,0: Y_lpf, 1: Y_lpf + (U_Lpf+V_lpf)/2,
+//Bit 10           reg_nr4_ac_mode           // unsigned , default = 1  mode for ac selection, 0: Y_abs_dif, 1: Y_abs_dif + (U_abs_dif + V_abs_dif)/2
+//Bit  9           reg_nr4_dc_sel            // unsigned , default = 0  selection mode for dc value, 0: 3x5, 1: 5x5, dft = 1
+//Bit  8           reg_nr4_ac_sel            // unsigned , default = 0  selection mode for ac value, 0: 3x5, 1: 5x5, dft = 1
+//Bit  7            reserved
+//Bit  6: 4        reg_nr4_dc_shft           // unsigned , default = 2  right shift for dc value, dft = 2
+//Bit  3            reserved
+//Bit  2: 0        reg_nr4_ac_shft           // unsigned , default = 0  right shift for ac value, dft = 2
+#define   NR4_MCNR_CM_CTRL0                        (0x2dc5)
+#define P_NR4_MCNR_CM_CTRL0                        (volatile unsigned int *)((0x2dc5  << 2) + 0xff900000)
+//Bit 31:29        reserved
+//Bit 28           reg_nr4_cm_skin_prc_bet0      // unsigned , default = 0  enable skin tone processing for mcnr bet0 calc., dft = 1
+//Bit 27:26        reg_nr4_cm_chrm_sel           // unsigned , default = 1  chrome selection for color match, 0: 1x1, 1: 3X3LPF, 2: 3x5LPF, 3: 5x5LPF for 5lines, 3x5LPF for 3lines, dft = 3
+//Bit 25:24        reg_nr4_cm_luma_sel           // unsigned , default = 1  luma selection for color match, 0: 1x1, 1: 3X3LPF, 2: 3x5LPF, 3: 5x5LPF for 5lines, 3x5LPF for 3lines, dft = 3
+//Bit 23:21        reg_nr4_cm_skin_rshft_bet0    // unsigned , default = 3  right shift for bet0's skin color gains, dft = 3
+//Bit 20           reg_nr4_cm_var_sel            // unsigned , default = 1  variation selection for color match, 0: 3x5, 1: 5x5 for 5lines, 3x5 for 3lines, dft = 1
+//Bit 19           reg_nr4_cm_green_prc_bet0     // unsigned , default = 1  enable green processing for mcnr bet0 calc., dft = 1
+//Bit 18:16        reg_nr4_cm_green_rshft_bet0   // unsigned , default = 4  right shift for bet0's green color gains, dft = 4
+//Bit 15:14        reg_nr4_preflt_mod            // unsigned , default = 2  pre filter mode in mcnr, 0: mv pointed pixel, 1: bilater filter
+//Bit 13:12        reg_nr4_alp1_mode             // unsigned , default = 1  mode for alpha1's sad selection, 0: max sad, 1: three min sads, 2: min sad, 3: co sad
+//Bit 11:10        reserved
+//Bit  9: 8        reg_nr4_bet0_mode             // unsigned , default = 0  mode for bet0's sad selection, 0: max sad, 1: three min sads, 2: min sad, 3: co sad, else: (co sad) - (min sad)
+//Bit  7: 6        reserved
+//Bit  5: 4        reg_nr4_bet1_mode             // unsigned , default = 2  mode for bet1's sad selection, 0: max sad, 1: three min sads, 2: min sad, 3: co sad, else: (co sad) - (min sad)
+//Bit  3: 2        reserved
+//Bit  1: 0        reg_nr4_bet2_mode             // unsigned , default = 1  mode for bet2's sad selection, 0: max sad, 1: three min sads, 2: min sad, 3: co sad, else: (co sad) - (min sad)
+#define   NR4_MCNR_CM_PRAM                         (0x2dc6)
+#define P_NR4_MCNR_CM_PRAM                         (volatile unsigned int *)((0x2dc6  << 2) + 0xff900000)
+//Bit 31:30        reserved
+//Bit 29           reg_nr4_cm_blue_prc_alp0      // unsigned , default = 1  enable blue processing for mcnr alpha0 calc., dft = 1
+//Bit 28           reg_nr4_cm_blue_prc_alp1      // unsigned , default = 1  enable blue processing for mcnr alpha1 calc., dft = 1
+//Bit 27           reg_nr4_cm_skin_prc_alp0      // unsigned , default = 1  enable skin tone processing for mcnr alpha0 calc., dft = 1
+//Bit 26           reg_nr4_cm_green_prc_alp0     // unsigned , default = 1  enable green processing for mcnr alpha0 clac., dft = 1
+//Bit 25           reg_nr4_cm_skin_prc_alp1      // unsigned , default = 1  enable skin tone processing for mcnr alpha0 calc., dft = 1
+//Bit 24           reg_nr4_cm_green_prc_alp1     // unsigned , default = 1  enable green processing for mcnr alpha1 clac., dft = 1
+//Bit 23:20        reg_nr4_cm_blue_hue_st        // unsigned , default = 13  hue start of blue, dft =
+//Bit 19:16        reg_nr4_cm_blue_hue_ed        // unsigned , default = 15  hue end  of blue, dft =
+//Bit 15:12        reg_nr4_cm_green_hue_st       // unsigned , default = 7  hue start of green, dft =
+//Bit 11: 8        reg_nr4_cm_green_hue_ed       // unsigned , default = 10  hue end  of green, dft =
+//Bit  7: 4        reg_nr4_cm_skin_hue_st        // unsigned , default = 5  hue start of skin, dft =
+//Bit  3: 0        reg_nr4_cm_skin_hue_ed        // unsigned , default = 6  hue end  of skin, dft =
+#define   NR4_MCNR_CM_RSHFT_ALP0                   (0x2dc7)
+#define P_NR4_MCNR_CM_RSHFT_ALP0                   (volatile unsigned int *)((0x2dc7  << 2) + 0xff900000)
+//Bit 31:28        reserved
+//Bit 27:25        reg_nr4_cm_blue_rshft_bet0    // unsigned , default = 5  right shift for bet0's blue color gains, dft = 5
+//Bit 24           reg_nr4_cm_blue_prc_bet0      // unsigned , default = 1  enable blue processing for mcnr bet0 calc., dft = 1
+//Bit 23            reserved
+//Bit 22:20        reg_nr4_cm_blue_rshft_alp0    // unsigned , default = 5  right shift for alpha0/1's blue color gains, dft = 5
+//Bit 19            reserved
+//Bit 18:16        reg_nr4_cm_blue_rshft_alp1    // unsigned , default = 5  right shift for alpha0/1's blue color gains, dft = 5
+//Bit 15            reserved
+//Bit 14:12        reg_nr4_cm_green_rshft_alp0   // unsigned , default = 4  right shift for alpha0/1's green color gains, dft = 4
+//Bit 11            reserved
+//Bit 10: 8        reg_nr4_cm_green_rshft_alp1   // unsigned , default = 4  right shift for alpha0/1's green color gains, dft = 4
+//Bit  7            reserved
+//Bit  6: 4        reg_nr4_cm_skin_rshft_alp0    // unsigned , default = 3  right shift for alpha0/1's skin color gains, dft = 3
+//Bit  3            reserved
+//Bit  2: 0        reg_nr4_cm_skin_rshft_alp1    // unsigned , default = 3  right shift for alpha0/1's skin color gains, dft = 3
+#define   NR4_MCNR_BLUE_CENT                       (0x2dc8)
+#define P_NR4_MCNR_BLUE_CENT                       (volatile unsigned int *)((0x2dc8  << 2) + 0xff900000)
+//Bit 31:24        reserved
+//Bit 23:16        reg_nr4_cm_blue_centx         // unsigned , default = 157  x coordinate of center of blue, dft =
+//Bit 15: 8        reserved
+//Bit  7: 0        reg_nr4_cm_blue_centy         // unsigned , default = 110  y coordinate of center of blue, dft =
+#define   NR4_MCNR_BLUE_GAIN_PAR0                  (0x2dc9)
+#define P_NR4_MCNR_BLUE_GAIN_PAR0                  (volatile unsigned int *)((0x2dc9  << 2) + 0xff900000)
+//Bit 31:24        reg_nr4_cm_blue_gain_par0   // unsigned , default = 32  par0 for blue gain, dft =
+//Bit 23:16        reg_nr4_cm_blue_gain_par1   // unsigned , default = 255  par1 for blue gain, dft =
+//Bit 15: 8        reg_nr4_cm_blue_gain_par2   // unsigned , default = 4  par2 for blue gain, dft =
+//Bit  7: 0        reg_nr4_cm_blue_gain_par3   // unsigned , default = 32  par3 for blue gain, dft =
+#define   NR4_MCNR_BLUE_GAIN_PAR1                  (0x2dca)
+#define P_NR4_MCNR_BLUE_GAIN_PAR1                  (volatile unsigned int *)((0x2dca  << 2) + 0xff900000)
+//Bit 31:24        reserved
+//Bit 23:16        reg_nr4_cm_blue_gain_par4   // unsigned , default = 32  par4 for blue gain, dft =
+//Bit 15: 8        reg_nr4_cm_blue_gain_par5   // unsigned , default = 32  par5 for blue gain, dft =
+//Bit  7: 0        reg_nr4_cm_blue_gain_par6   // unsigned , default = 0  par6 for blue gain, dft =
+#define   NR4_MCNR_CM_BLUE_CLIP0                   (0x2dcb)
+#define P_NR4_MCNR_CM_BLUE_CLIP0                   (volatile unsigned int *)((0x2dcb  << 2) + 0xff900000)
+//Bit 31:24        reserved
+//Bit 23:16        reg_nr4_cm_blue_luma_min      // unsigned , default = 40  luma min for blue color matching, dft =
+//Bit 15: 8        reserved
+//Bit  7: 0        reg_nr4_cm_blue_luma_max      // unsigned , default = 180  luma max for blue color matching, dft =
+#define   NR4_MCNR_CM_BLUE_CLIP1                   (0x2dcc)
+#define P_NR4_MCNR_CM_BLUE_CLIP1                   (volatile unsigned int *)((0x2dcc  << 2) + 0xff900000)
+//Bit 31:24        reg_nr4_cm_blue_sat_min       // unsigned , default = 5  saturation min for blue color matching, dft =
+//Bit 23:16        reg_nr4_cm_blue_sat_max       // unsigned , default = 255  saturation max for blue color matching, dft =
+//Bit 15: 8        reg_nr4_cm_blue_var_min       // unsigned , default = 0  variation min for blue color matching, dft =
+//Bit  7: 0        reg_nr4_cm_blue_var_max       // unsigned , default = 12  variation max for blue color matching, dft =
+#define   NR4_MCNR_GREEN_CENT                      (0x2dcd)
+#define P_NR4_MCNR_GREEN_CENT                      (volatile unsigned int *)((0x2dcd  << 2) + 0xff900000)
+//Bit 31:24        reserved
+//Bit 23:16        reg_nr4_cm_green_centx         // unsigned , default = 114  x coordinate of center of green, dft =
+//Bit 15: 8        reserved
+//Bit  7: 0        reg_nr4_cm_green_centy         // unsigned , default = 126  y coordinate of center of green, dft =
+#define   NR4_MCNR_GREEN_GAIN_PAR0                 (0x2dce)
+#define P_NR4_MCNR_GREEN_GAIN_PAR0                 (volatile unsigned int *)((0x2dce  << 2) + 0xff900000)
+//Bit 31:24        reg_nr4_cm_green_gain_par0   // unsigned , default = 16  par0 for green gain, dft =
+//Bit 23:16        reg_nr4_cm_green_gain_par1   // unsigned , default = 255  par1 for green gain, dft =
+//Bit 15: 8        reg_nr4_cm_green_gain_par2   // unsigned , default = 255  par2 for green gain, dft =
+//Bit  7: 0        reg_nr4_cm_green_gain_par3   // unsigned , default = 16  par3 for green gain, dft =
+#define   NR4_MCNR_GREEN_GAIN_PAR1                 (0x2dcf)
+#define P_NR4_MCNR_GREEN_GAIN_PAR1                 (volatile unsigned int *)((0x2dcf  << 2) + 0xff900000)
+//Bit 31:24        reserved
+//Bit 23:16        reg_nr4_cm_green_gain_par4   // unsigned , default = 16  par4 for green gain, dft =
+//Bit 15: 8        reg_nr4_cm_green_gain_par5   // unsigned , default = 128  par5 for green gain, dft =
+//Bit  7: 0        reg_nr4_cm_green_gain_par6   // unsigned , default = 0  par6 for green gain, dft =
+#define   NR4_MCNR_GREEN_CLIP0                     (0x2dd0)
+#define P_NR4_MCNR_GREEN_CLIP0                     (volatile unsigned int *)((0x2dd0  << 2) + 0xff900000)
+//Bit 31:24        reserved
+//Bit 23:16        reg_nr4_cm_green_luma_min      // unsigned , default = 40  luma min for green color matching, dft =
+//Bit 15: 8        reserved
+//Bit  7: 0        reg_nr4_cm_green_luma_max      // unsigned , default = 160  luma max for green color matching, dft =
+#define   NR4_MCNR_GREEN_CLIP2                     (0x2dd1)
+#define P_NR4_MCNR_GREEN_CLIP2                     (volatile unsigned int *)((0x2dd1  << 2) + 0xff900000)
+//Bit 31:24        reg_nr4_cm_green_sat_min       // unsigned , default = 4  saturation min for green color matching, dft =
+//Bit 23:16        reg_nr4_cm_green_sat_max       // unsigned , default = 255  saturation max for green color matching, dft =
+//Bit 15: 8        reg_nr4_cm_green_var_min       // unsigned , default = 0  variation min for green color matching, dft =
+//Bit  7: 0        reg_nr4_cm_green_var_max       // unsigned , default = 12  variation max for green color matching, dft =
+#define   NR4_MCNR_SKIN_CENT                       (0x2dd2)
+#define P_NR4_MCNR_SKIN_CENT                       (volatile unsigned int *)((0x2dd2  << 2) + 0xff900000)
+//Bit 31:24        reserved
+//Bit 23:16        reg_nr4_cm_skin_centx         // unsigned , default = 112  x coordinate of center of skin tone, dft =
+//Bit 15: 8        reserved
+//Bit  7: 0        reg_nr4_cm_skin_centy         // unsigned , default = 149  y coordinate of center of skin tone, dft =
+#define   NR4_MCNR_SKIN_GAIN_PAR0                  (0x2dd3)
+#define P_NR4_MCNR_SKIN_GAIN_PAR0                  (volatile unsigned int *)((0x2dd3  << 2) + 0xff900000)
+//Bit 31:24        reg_nr4_cm_skin_gain_par0   // unsigned , default = 20  par0 for skin gain, dft =
+//Bit 23:16        reg_nr4_cm_skin_gain_par1   // unsigned , default = 255  par1 for skin gain, dft =
+//Bit 15: 8        reg_nr4_cm_skin_gain_par2   // unsigned , default = 255  par2 for skin gain, dft =
+//Bit  7: 0        reg_nr4_cm_skin_gain_par3   // unsigned , default = 8  par3 for skin gain, dft =
+#define   NR4_MCNR_SKIN_GAIN_PAR1                  (0x2dd4)
+#define P_NR4_MCNR_SKIN_GAIN_PAR1                  (volatile unsigned int *)((0x2dd4  << 2) + 0xff900000)
+//Bit 31:24        reserved
+//Bit 23:16        reg_nr4_cm_skin_gain_par4   // unsigned , default = 8  par4 for skin gain, dft =
+//Bit 15: 8        reg_nr4_cm_skin_gain_par5   // unsigned , default = 128  par5 for skin gain, dft =
+//Bit  7: 0        reg_nr4_cm_skin_gain_par6   // unsigned , default = 0  par6 for skin gain, dft =
+#define   NR4_MCNR_SKIN_CLIP0                      (0x2dd5)
+#define P_NR4_MCNR_SKIN_CLIP0                      (volatile unsigned int *)((0x2dd5  << 2) + 0xff900000)
+//Bit 31:24        reserved
+//Bit 23:16        reg_nr4_cm_skin_luma_min      // unsigned , default = 40  luma min for skin color matching, dft =
+//Bit 15: 8        reserved
+//Bit  7: 0        reg_nr4_cm_skin_luma_max      // unsigned , default = 180  luma max for skin color matching, dft =
+#define   NR4_MCNR_SKIN_CLIP1                      (0x2dd6)
+#define P_NR4_MCNR_SKIN_CLIP1                      (volatile unsigned int *)((0x2dd6  << 2) + 0xff900000)
+//Bit 31:24        reg_nr4_cm_skin_sat_min       // unsigned , default = 5  saturation min for skin color matching, dft =
+//Bit 23:16        reg_nr4_cm_skin_sat_max       // unsigned , default = 255  saturation max for skin color matching, dft =
+//Bit 15: 8        reg_nr4_cm_skin_var_min       // unsigned , default = 0  variation min for skin color matching, dft =
+//Bit  7: 0        reg_nr4_cm_skin_var_max       // unsigned , default = 12  variation max for skin color matching, dft =
+#define   NR4_MCNR_ALP1_GLB_CTRL                   (0x2dd7)
+#define P_NR4_MCNR_ALP1_GLB_CTRL                   (volatile unsigned int *)((0x2dd7  << 2) + 0xff900000)
+//Bit 31           reg_nr4_alp1_glb_gain_en     // unsigned , default = 0  alp1 adjust by global gain, dft = 1
+//Bit 30:28        reg_nr4_alp1_glb_gain_lsft   // unsigned , default = 6  alp1 left shift before combine with global gain
+//Bit 27           reg_nr4_bet0_glb_gain_en     // unsigned , default = 1  bet0 adjust by global gain, dft = 1
+//Bit 26:24        reg_nr4_bet0_glb_gain_lsft   // unsigned , default = 6  bet1 left shift before combine with global gain
+//Bit 23           reg_nr4_bet1_glb_gain_en     // unsigned , default = 0  bet1 adjust by global gain, dft = 0
+//Bit 22:20        reg_nr4_bet1_glb_gain_lsft   // unsigned , default = 6  bet1 left shift before combine with global gain
+//Bit 19           reg_nr4_bet2_glb_gain_en     // unsigned , default = 1  bet2 adjust by global gain, dft = 1
+//Bit 18:16        reg_nr4_bet2_glb_gain_lsft   // unsigned , default = 6  bet2 left shift before combine with global gain
+//Bit 15           reg_nr4_alp1_ac_en           // unsigned , default = 1  alp1 adjust by ac, dft = 1
+//Bit 14:12        reg_nr4_alp1_ac_lsft         // unsigned , default = 5  alp1 left shift before combine with ac
+//Bit 11           reg_nr4_bet0_ac_en           // unsigned , default = 0  bet0 adjust by ac, dft = 1
+//Bit 10: 8        reg_nr4_bet0_ac_lsft         // unsigned , default = 5  bet0 left shift before combine with ac
+//Bit  7           reg_nr4_bet1_ac_en           // unsigned , default = 0  bet1 adjust by ac, dft = 1
+//Bit  6: 4        reg_nr4_bet1_ac_lsft         // unsigned , default = 5  bet1 left shift before combine with ac
+//Bit  3           reg_nr4_bet2_ac_en           // unsigned , default = 0  bet2 adjust by ac, dft = 1
+//Bit  2: 0        reg_nr4_bet2_ac_lsft         // unsigned , default = 5  bet2 left shift before combine with ac
+#define   NR4_MCNR_DC2NORM_LUT0                    (0x2dd8)
+#define P_NR4_MCNR_DC2NORM_LUT0                    (volatile unsigned int *)((0x2dd8  << 2) + 0xff900000)
+//Bit 31:29        reserved
+//Bit 28:24        reg_nr4_dc2norm_lut0         // unsigned , default = 16  normal 0~16, dc to norm for alpha adjust, dft =
+//Bit 23:21        reserved
+//Bit 20:16        reg_nr4_dc2norm_lut1         // unsigned , default = 16  normal 0~16, dc to norm for alpha adjust, dft =
+//Bit 15:13        reserved
+//Bit 12: 8        reg_nr4_dc2norm_lut2         // unsigned , default = 16  normal 0~16, dc to norm for alpha adjust, dft =
+//Bit  7: 5        reserved
+//Bit  4: 0        reg_nr4_dc2norm_lut3         // unsigned , default = 16  normal 0~16, dc to norm for alpha adjust, dft =
+#define   NR4_MCNR_DC2NORM_LUT1                    (0x2dd9)
+#define P_NR4_MCNR_DC2NORM_LUT1                    (volatile unsigned int *)((0x2dd9  << 2) + 0xff900000)
+//Bit 31:29        reserved
+//Bit 28:24        reg_nr4_dc2norm_lut4         // unsigned , default = 16  normal 0~16, dc to norm for alpha adjust, dft =
+//Bit 23:21        reserved
+//Bit 20:16        reg_nr4_dc2norm_lut5         // unsigned , default = 16  normal 0~16, dc to norm for alpha adjust, dft =
+//Bit 15:13        reserved
+//Bit 12: 8        reg_nr4_dc2norm_lut6         // unsigned , default = 16  normal 0~16, dc to norm for alpha adjust, dft =
+//Bit  7: 5        reserved
+//Bit  4: 0        reg_nr4_dc2norm_lut7         // unsigned , default = 12  normal 0~16, dc to norm for alpha adjust, dft =
+#define   NR4_MCNR_DC2NORM_LUT2                    (0x2dda)
+#define P_NR4_MCNR_DC2NORM_LUT2                    (volatile unsigned int *)((0x2dda  << 2) + 0xff900000)
+//Bit 31: 5        reserved
+//Bit  4: 0        reg_nr4_dc2norm_lut8        // unsigned , default = 8   normal 0~16, dc to norm for alpha adjust, dft =
+#define   NR4_MCNR_AC2NORM_LUT0                    (0x2ddb)
+#define P_NR4_MCNR_AC2NORM_LUT0                    (volatile unsigned int *)((0x2ddb  << 2) + 0xff900000)
+//Bit 31:29        reserved
+//Bit 28:24        reg_nr4_ac2norm_lut0         // unsigned , default = 2  normal 0~16, ac to norm for alpha adjust, dft =
+//Bit 23:21        reserved
+//Bit 20:16        reg_nr4_ac2norm_lut1         // unsigned , default = 16  normal 0~16, ac to norm for alpha adjust, dft =
+//Bit 15:13        reserved
+//Bit 12: 8        reg_nr4_ac2norm_lut2         // unsigned , default = 16  normal 0~16, ac to norm for alpha adjust, dft =
+//Bit  7: 5        reserved
+//Bit  4: 0        reg_nr4_ac2norm_lut3         // unsigned , default = 12  normal 0~16, ac to norm for alpha adjust, dft =
+#define   NR4_MCNR_AC2NORM_LUT1                    (0x2ddc)
+#define P_NR4_MCNR_AC2NORM_LUT1                    (volatile unsigned int *)((0x2ddc  << 2) + 0xff900000)
+//Bit 31:29        reserved
+//Bit 28:24        reg_nr4_ac2norm_lut4         // unsigned , default = 4  normal 0~16, ac to norm for alpha adjust, dft =
+//Bit 23:21        reserved
+//Bit 20:16        reg_nr4_ac2norm_lut5         // unsigned , default = 2  normal 0~16, ac to norm for alpha adjust, dft =
+//Bit 15:13        reserved
+//Bit 12: 8        reg_nr4_ac2norm_lut6         // unsigned , default = 1  normal 0~16, ac to norm for alpha adjust, dft =
+//Bit  7: 5        reserved
+//Bit  4: 0        reg_nr4_ac2norm_lut7         // unsigned , default = 1  normal 0~16, ac to norm for alpha adjust, dft =
+#define   NR4_MCNR_AC2NORM_LUT2                    (0x2ddd)
+#define P_NR4_MCNR_AC2NORM_LUT2                    (volatile unsigned int *)((0x2ddd  << 2) + 0xff900000)
+//Bit 31: 5        reserved
+//Bit  4: 0        reg_nr4_ac2norm_lut8         // unsigned , default = 1  normal 0~16, ac to norm for alpha adjust, dft =
+#define   NR4_MCNR_SAD2ALP0_LUT0                   (0x2dde)
+#define P_NR4_MCNR_SAD2ALP0_LUT0                   (volatile unsigned int *)((0x2dde  << 2) + 0xff900000)
+//Bit 31:24        reg_nr4_sad2alp0_lut0        // unsigned , default = 255  sad to alpha0 for temporal pixel value, dft = 255
+//Bit 23:16        reg_nr4_sad2alp0_lut1        // unsigned , default = 252  sad to alpha0 for temporal pixel value, dft = 252
+//Bit 15: 8        reg_nr4_sad2alp0_lut2        // unsigned , default = 249  sad to alpha0 for temporal pixel value, dft = 249
+//Bit  7: 0        reg_nr4_sad2alp0_lut3        // unsigned , default = 235  sad to alpha0 for temporal pixel value, dft = 70
+#define   NR4_MCNR_SAD2ALP0_LUT1                   (0x2ddf)
+#define P_NR4_MCNR_SAD2ALP0_LUT1                   (volatile unsigned int *)((0x2ddf  << 2) + 0xff900000)
+//Bit 31:24        reg_nr4_sad2alp0_lut4        // unsigned , default = 185  sad to alpha0 for temporal pixel value, dft = 12
+//Bit 23:16        reg_nr4_sad2alp0_lut5        // unsigned , default = 70  sad to alpha0 for temporal pixel value, dft = 1
+//Bit 15: 8        reg_nr4_sad2alp0_lut6        // unsigned , default = 14  sad to alpha0 for temporal pixel value, dft = 0
+//Bit  7: 0        reg_nr4_sad2alp0_lut7        // unsigned , default = 1  sad to alpha0 for temporal pixel value, dft = 0
+#define   NR4_MCNR_SAD2ALP0_LUT2                   (0x2de0)
+#define P_NR4_MCNR_SAD2ALP0_LUT2                   (volatile unsigned int *)((0x2de0  << 2) + 0xff900000)
+//Bit 31:24        reg_nr4_sad2alp0_lut8        // unsigned , default = 0  sad to alpha0 for temporal pixel value, dft = 0
+//Bit 23:16        reg_nr4_sad2alp0_lut9        // unsigned , default = 0  sad to alpha0 for temporal pixel value, dft = 0
+//Bit 15: 8        reg_nr4_sad2alp0_lut10       // unsigned , default = 0  sad to alpha0 for temporal pixel value, dft = 0
+//Bit  7: 0        reg_nr4_sad2alp0_lut11       // unsigned , default = 0  sad to alpha0 for temporal pixel value, dft = 0
+#define   NR4_MCNR_SAD2ALP0_LUT3                   (0x2de1)
+#define P_NR4_MCNR_SAD2ALP0_LUT3                   (volatile unsigned int *)((0x2de1  << 2) + 0xff900000)
+//Bit 31:24        reg_nr4_sad2alp0_lut12       // unsigned , default = 0  sad to alpha0 for temporal pixel value, dft = 0
+//Bit 23:16        reg_nr4_sad2alp0_lut13       // unsigned , default = 0  sad to alpha0 for temporal pixel value, dft = 0
+//Bit 15: 8        reg_nr4_sad2alp0_lut14       // unsigned , default = 0  sad to alpha0 for temporal pixel value, dft = 0
+//Bit  7: 0        reg_nr4_sad2alp0_lut15       // unsigned , default = 0  sad to alpha0 for temporal pixel value, dft = 0
+#define   NR4_MCNR_SAD2ALP1_LUT0                   (0x2de2)
+#define P_NR4_MCNR_SAD2ALP1_LUT0                   (volatile unsigned int *)((0x2de2  << 2) + 0xff900000)
+//Bit 31:24        reg_nr4_sad2alp1_lut0        // unsigned , default = 192  sad to alpha1 for temporal blending, dft = 128
+//Bit 23:16        reg_nr4_sad2alp1_lut1        // unsigned , default = 160  sad to alpha1 for temporal blending, dft = 128
+//Bit 15: 8        reg_nr4_sad2alp1_lut2        // unsigned , default = 128  sad to alpha1 for temporal blending, dft = 128
+//Bit  7: 0        reg_nr4_sad2alp1_lut3        // unsigned , default = 96  sad to alpha1 for temporal blending, dft = 64
+#define   NR4_MCNR_SAD2ALP1_LUT1                   (0x2de3)
+#define P_NR4_MCNR_SAD2ALP1_LUT1                   (volatile unsigned int *)((0x2de3  << 2) + 0xff900000)
+//Bit 31:24        reg_nr4_sad2alp1_lut4        // unsigned , default = 64  sad to alpha1 for temporal blending, dft = 64
+//Bit 23:16        reg_nr4_sad2alp1_lut5        // unsigned , default = 32  sad to alpha1 for temporal blending, dft = 128
+//Bit 15: 8        reg_nr4_sad2alp1_lut6        // unsigned , default = 16  sad to alpha1 for temporal blending, dft = 255
+//Bit  7: 0        reg_nr4_sad2alp1_lut7        // unsigned , default = 8  sad to alpha1 for temporal blending, dft = 255
+#define   NR4_MCNR_SAD2ALP1_LUT2                   (0x2de4)
+#define P_NR4_MCNR_SAD2ALP1_LUT2                   (volatile unsigned int *)((0x2de4  << 2) + 0xff900000)
+//Bit 31:24        reg_nr4_sad2alp1_lut8        // unsigned , default = 4  sad to alpha1 for temporal blending, dft = 255
+//Bit 23:16        reg_nr4_sad2alp1_lut9        // unsigned , default = 0  sad to alpha1 for temporal blending, dft = 255
+//Bit 15: 8        reg_nr4_sad2alp1_lut10       // unsigned , default = 16  sad to alpha1 for temporal blending, dft = 255
+//Bit  7: 0        reg_nr4_sad2alp1_lut11       // unsigned , default = 64  sad to alpha1 for temporal blending, dft = 255
+#define   NR4_MCNR_SAD2ALP1_LUT3                   (0x2de5)
+#define P_NR4_MCNR_SAD2ALP1_LUT3                   (volatile unsigned int *)((0x2de5  << 2) + 0xff900000)
+//Bit 31:24        reg_nr4_sad2alp1_lut12       // unsigned , default = 96  sad to alpha1 for temporal blending, dft = 255
+//Bit 23:16        reg_nr4_sad2alp1_lut13       // unsigned , default = 224  sad to alpha1 for temporal blending, dft = 255
+//Bit 15: 8        reg_nr4_sad2alp1_lut14       // unsigned , default = 255  sad to alpha1 for temporal blending, dft = 255
+//Bit  7: 0        reg_nr4_sad2alp1_lut15       // unsigned , default = 255  sad to alpha1 for temporal blending, dft = 255
+#define   NR4_MCNR_SAD2BET0_LUT0                   (0x2de6)
+#define P_NR4_MCNR_SAD2BET0_LUT0                   (volatile unsigned int *)((0x2de6  << 2) + 0xff900000)
+//Bit 31:24        reg_nr4_sad2bet0_lut0        // unsigned , default = 0  sad to beta0 for tnr and mcnr blending, dft = 0
+//Bit 23:16        reg_nr4_sad2bet0_lut1        // unsigned , default = 2  sad to beta0 for tnr and mcnr blending, dft = 2
+//Bit 15: 8        reg_nr4_sad2bet0_lut2        // unsigned , default = 4  sad to beta0 for tnr and mcnr blending, dft = 4
+//Bit  7: 0        reg_nr4_sad2bet0_lut3        // unsigned , default = 8  sad to beta0 for tnr and mcnr blending, dft = 8
+#define   NR4_MCNR_SAD2BET0_LUT1                   (0x2de7)
+#define P_NR4_MCNR_SAD2BET0_LUT1                   (volatile unsigned int *)((0x2de7  << 2) + 0xff900000)
+//Bit 31:24        reg_nr4_sad2bet0_lut4        // unsigned , default = 16  sad to beta0 for tnr and mcnr blending, dft = 16
+//Bit 23:16        reg_nr4_sad2bet0_lut5        // unsigned , default = 32  sad to beta0 for tnr and mcnr blending, dft = 32
+//Bit 15: 8        reg_nr4_sad2bet0_lut6        // unsigned , default = 48  sad to beta0 for tnr and mcnr blending, dft = 48
+//Bit  7: 0        reg_nr4_sad2bet0_lut7        // unsigned , default = 64  sad to beta0 for tnr and mcnr blending, dft = 64
+#define   NR4_MCNR_SAD2BET0_LUT2                   (0x2de8)
+#define P_NR4_MCNR_SAD2BET0_LUT2                   (volatile unsigned int *)((0x2de8  << 2) + 0xff900000)
+//Bit 31:24        reg_nr4_sad2bet0_lut8        // unsigned , default = 80  sad to beta0 for tnr and mcnr blending, dft = 80
+//Bit 23:16        reg_nr4_sad2bet0_lut9        // unsigned , default = 96  sad to beta0 for tnr and mcnr blending, dft = 96
+//Bit 15: 8        reg_nr4_sad2bet0_lut10       // unsigned , default = 112  sad to beta0 for tnr and mcnr blending, dft = 112
+//Bit  7: 0        reg_nr4_sad2bet0_lut11       // unsigned , default = 128  sad to beta0 for tnr and mcnr blending, dft = 128
+#define   NR4_MCNR_SAD2BET0_LUT3                   (0x2de9)
+#define P_NR4_MCNR_SAD2BET0_LUT3                   (volatile unsigned int *)((0x2de9  << 2) + 0xff900000)
+//Bit 31:24        reg_nr4_sad2bet0_lut12       // unsigned , default = 196  sad to beta0 for tnr and mcnr blending, dft = 160
+//Bit 23:16        reg_nr4_sad2bet0_lut13       // unsigned , default = 224  sad to beta0 for tnr and mcnr blending, dft = 192
+//Bit 15: 8        reg_nr4_sad2bet0_lut14       // unsigned , default = 255  sad to beta0 for tnr and mcnr blending, dft = 224
+//Bit  7: 0        reg_nr4_sad2bet0_lut15       // unsigned , default = 255  sad to beta0 for tnr and mcnr blending, dft = 255
+#define   NR4_MCNR_SAD2BET1_LUT0                   (0x2dea)
+#define P_NR4_MCNR_SAD2BET1_LUT0                   (volatile unsigned int *)((0x2dea  << 2) + 0xff900000)
+//Bit 31:24        reg_nr4_sad2bet1_lut0        // unsigned , default = 0  sad to beta1 for deghost blending, dft = 0
+//Bit 23:16        reg_nr4_sad2bet1_lut1        // unsigned , default = 2  sad to beta1 for deghost blending, dft = 2
+//Bit 15: 8        reg_nr4_sad2bet1_lut2        // unsigned , default = 4  sad to beta1 for deghost blending, dft = 4
+//Bit  7: 0        reg_nr4_sad2bet1_lut3        // unsigned , default = 8  sad to beta1 for deghost blending, dft = 8
+#define   NR4_MCNR_SAD2BET1_LUT1                   (0x2deb)
+#define P_NR4_MCNR_SAD2BET1_LUT1                   (volatile unsigned int *)((0x2deb  << 2) + 0xff900000)
+//Bit 31:24        reg_nr4_sad2bet1_lut4        // unsigned , default = 16  sad to beta1 for deghost blending, dft = 16
+//Bit 23:16        reg_nr4_sad2bet1_lut5        // unsigned , default = 32  sad to beta1 for deghost blending, dft = 32
+//Bit 15: 8        reg_nr4_sad2bet1_lut6        // unsigned , default = 48  sad to beta1 for deghost blending, dft = 48
+//Bit  7: 0        reg_nr4_sad2bet1_lut7        // unsigned , default = 64  sad to beta1 for deghost blending, dft = 64
+#define   NR4_MCNR_SAD2BET1_LUT2                   (0x2dec)
+#define P_NR4_MCNR_SAD2BET1_LUT2                   (volatile unsigned int *)((0x2dec  << 2) + 0xff900000)
+//Bit 31:24        reg_nr4_sad2bet1_lut8        // unsigned , default = 80  sad to beta1 for deghost blending, dft = 80
+//Bit 23:16        reg_nr4_sad2bet1_lut9        // unsigned , default = 96  sad to beta1 for deghost blending, dft = 96
+//Bit 15: 8        reg_nr4_sad2bet1_lut10       // unsigned , default = 112  sad to beta1 for deghost blending, dft = 112
+//Bit  7: 0        reg_nr4_sad2bet1_lut11       // unsigned , default = 128  sad to beta1 for deghost blending, dft = 128
+#define   NR4_MCNR_SAD2BET1_LUT3                   (0x2ded)
+#define P_NR4_MCNR_SAD2BET1_LUT3                   (volatile unsigned int *)((0x2ded  << 2) + 0xff900000)
+//Bit 31:24        reg_nr4_sad2bet1_lut12       // unsigned , default = 160  sad to beta1 for deghost blending, dft = 160
+//Bit 23:16        reg_nr4_sad2bet1_lut13       // unsigned , default = 192  sad to beta1 for deghost blending, dft = 192
+//Bit 15: 8        reg_nr4_sad2bet1_lut14       // unsigned , default = 224  sad to beta1 for deghost blending, dft = 224
+//Bit  7: 0        reg_nr4_sad2bet1_lut15       // unsigned , default = 255  sad to beta1 for deghost blending, dft = 255
+#define   NR4_MCNR_SAD2BET2_LUT0                   (0x2dee)
+#define P_NR4_MCNR_SAD2BET2_LUT0                   (volatile unsigned int *)((0x2dee  << 2) + 0xff900000)
+//Bit 31:24        reg_nr4_sad2bet2_lut0        // unsigned , default = 0  sad to beta2 for snr and mcnr blending, dft = 0
+//Bit 23:16        reg_nr4_sad2bet2_lut1        // unsigned , default = 1  sad to beta2 for snr and mcnr blending, dft = 2
+//Bit 15: 8        reg_nr4_sad2bet2_lut2        // unsigned , default = 2  sad to beta2 for snr and mcnr blending, dft  = 4
+//Bit  7: 0        reg_nr4_sad2bet2_lut3        // unsigned , default = 4  sad to beta2 for snr and mcnr blending, dft = 8
+#define   NR4_MCNR_SAD2BET2_LUT1                   (0x2def)
+#define P_NR4_MCNR_SAD2BET2_LUT1                   (volatile unsigned int *)((0x2def  << 2) + 0xff900000)
+//Bit 31:24        reg_nr4_sad2bet2_lut4        // unsigned , default = 8  sad to beta2 for snr and mcnr blending, dft = 16
+//Bit 23:16        reg_nr4_sad2bet2_lut5        // unsigned , default = 16  sad to beta2 for snr and mcnr blending, dft = 32
+//Bit 15: 8        reg_nr4_sad2bet2_lut6        // unsigned , default = 32  sad to beta2 for snr and mcnr blending, dft = 48
+//Bit  7: 0        reg_nr4_sad2bet2_lut7        // unsigned , default = 48  sad to beta2 for snr and mcnr blending, dft = 64
+#define   NR4_MCNR_SAD2BET2_LUT2                   (0x2df0)
+#define P_NR4_MCNR_SAD2BET2_LUT2                   (volatile unsigned int *)((0x2df0  << 2) + 0xff900000)
+//Bit 31:24        reg_nr4_sad2bet2_lut8        // unsigned , default = 64  sad to beta2 for snr and mcnr blending, dft = 80
+//Bit 23:16        reg_nr4_sad2bet2_lut9        // unsigned , default = 80  sad to beta2 for snr and mcnr blending, dft = 96
+//Bit 15: 8        reg_nr4_sad2bet2_lut10       // unsigned , default = 96  sad to beta2 for snr and mcnr blending, dft = 112
+//Bit  7: 0        reg_nr4_sad2bet2_lut11       // unsigned , default = 112  sad to beta2 for snr and mcnr blending, dft = 128
+#define   NR4_MCNR_SAD2BET2_LUT3                   (0x2df1)
+#define P_NR4_MCNR_SAD2BET2_LUT3                   (volatile unsigned int *)((0x2df1  << 2) + 0xff900000)
+//Bit 31:24        reg_nr4_sad2bet2_lut12       // unsigned , default = 128  sad to beta2 for snr and mcnr blending, dft = 160
+//Bit 23:16        reg_nr4_sad2bet2_lut13       // unsigned , default = 160  sad to beta2 for snr and mcnr blending, dft = 192
+//Bit 15: 8        reg_nr4_sad2bet2_lut14       // unsigned , default = 224  sad to beta2 for snr and mcnr blending, dft = 224
+//Bit  7: 0        reg_nr4_sad2bet2_lut15       // unsigned , default = 255  sad to beta2 for snr and mcnr blending, dft = 255
+#define   NR4_MCNR_RO_U_SUM                        (0x2df2)
+#define P_NR4_MCNR_RO_U_SUM                        (volatile unsigned int *)((0x2df2  << 2) + 0xff900000)
+//Bit 31: 0        ro_nr4_u_sum                // unsigned , default = 0  sum of U of current field/frame
+#define   NR4_MCNR_RO_V_SUM                        (0x2df3)
+#define P_NR4_MCNR_RO_V_SUM                        (volatile unsigned int *)((0x2df3  << 2) + 0xff900000)
+//Bit 31: 0        ro_nr4_v_sum                // unsigned , default = 0  sum of V of current field/frame
+#define   NR4_MCNR_RO_GRDU_SUM                     (0x2df4)
+#define P_NR4_MCNR_RO_GRDU_SUM                     (volatile unsigned int *)((0x2df4  << 2) + 0xff900000)
+//Bit 31: 0        ro_nr4_grdu_sum             // unsigned , default = 0  sum of gradient U of current field/frame
+#define   NR4_MCNR_RO_GRDV_SUM                     (0x2df5)
+#define P_NR4_MCNR_RO_GRDV_SUM                     (volatile unsigned int *)((0x2df5  << 2) + 0xff900000)
+//Bit 31: 0        ro_nr4_grdv_sum             // unsigned , default = 0  sum of gradient V of current field/frame
+#define   NR4_TOP_CTRL                             (0x2dff)
+#define P_NR4_TOP_CTRL                             (volatile unsigned int *)((0x2dff  << 2) + 0xff900000)
+//Bit 31:20        reg_gclk_ctrl                 // unsigned , default = 0
+//Bit 19           reserved
+//Bit 18           reg_nr4_mcnr_en              // unsigned , default = 1  ncnr enable or bypass, dft = 1
+//Bit 17           reg_nr2_en                 // unsigned , default = 1  nr2 enable, dft = 1
+//Bit 16           reg_nr4_en                   // unsigned , default = 1  nr4 enable, dft = 1
+//Bit 15           reg_nr2_proc_en            // unsigned , default = 1
+//Bit 14           reg_det3d_en               // unsigned , default = 1
+//Bit 13           di_polar_en                   // unsigned , default = 1  do does not have in C
+//Bit 12           reg_cfr_enable             // unsigned , default = 0  0-disable;  1:enable
+//Bit 11: 9        reg_3dnr_enable_l          // unsigned , default = 7  b0: Y b1:U b2:V
+//Bit  8: 6        reg_3dnr_enable_r          // unsigned , default = 7  b0: Y b1:U b2:V
+//Bit  5           reg_nr4_lnbuf_ctrl           // unsigned , default = 1  line buf ctrl for nr4: 0, 3lines, 1, 5lines, dft = 1
+//Bit  4           reg_nr4_snr2_en              // unsigned , default = 0  snr2 enable, 0: use old snr, 1: use new snr2,   dft = 1
+//Bit  3           reg_nr4_scene_change_en      // unsigned , default = 1  enable scene change proc. dft = 1
+//Bit  2           nr2_sw_en                     // unsigned , default = 1  do does not have in C
+//Bit  1            reserved
+//Bit  0           reg_nr4_scene_change_flg     // unsigned , default = 0  flags for scene change, dft = 0
+//========== nr4_mcnr_regs register end ==========//
+// synopsys translate_off
+// synopsys translate_on
+//
+// Closing file:  nr4_regs.h
+//
+// synopsys translate_off
+// synopsys translate_on
+//
+// Closing file:  dnr_regs.h
+//
+//========================================================================
+//  VI_HIST_SPL register    (16'h2e00 - 16'h2eff)
+//========================================================================
+//`define VI_HIST_SPL_VCBUS_BASE                   8'h2e
+//
+// Reading file:  vi_hist_spl_reg.h
+//
+// synopsys translate_off
+// synopsys translate_on
+// ----------------------------
+// VI_HIST_SPL 0x2e
+// ----------------------------
+// -----------------------------------------------
+// CBUS_BASE:  VI_HIST_SPL_VCBUS_BASE = 0x2e
+// -----------------------------------------------
+//BIT 14: 34bin only, 0&255 and other 32bins
+//Bit 13:11 hist_din_sel, 00: from vdin0 dout,  1: from vdin1, 2: from nr dout, 3: di output, 4: vpp output, 5: vd1_din, 6: vd2_din, 7:osd1_dout
+//Bit 10:8   hist_din_comp_mux, mux of [29:22], [19:12], [9:2] for hist detect
+//Bit 7:5   hist_dnlp_low   the real pixels in each bins got by VI_DNLP_HISTXX should multiple with 2^(dnlp_low+3)
+//Bit 3:2   hist_din_sel    the source used for hist statistics.  00: from matrix0 dout,  01: from vsc_dout, 10: from matrix1 dout, 11: form matrix1 din
+//Bit 1     hist_win_en     1'b0: hist used for full picture; 1'b1: hist used for pixels within hist window
+//Bit 0     hist_spl_en     1'b0: disable hist readback; 1'b1: enable hist readback
+#define   VI_HIST_CTRL                             (0x2e00)
+#define P_VI_HIST_CTRL                             (volatile unsigned int *)((0x2e00  << 2) + 0xff900000)
+//Bit 28:16 hist_hstart  horizontal start value to define hist window
+//Bit 12:0  hist_hend    horizontal end value to define hist window
+#define   VI_HIST_H_START_END                      (0x2e01)
+#define P_VI_HIST_H_START_END                      (volatile unsigned int *)((0x2e01  << 2) + 0xff900000)
+//Bit 28:16 hist_vstart  vertical start value to define hist window
+//Bit 12:0  hist_vend    vertical end value to define hist window
+#define   VI_HIST_V_START_END                      (0x2e02)
+#define P_VI_HIST_V_START_END                      (volatile unsigned int *)((0x2e02  << 2) + 0xff900000)
+//Bit 15:8  hist_max    maximum value
+//Bit 7:0   hist_min    minimum value
+//read only
+#define   VI_HIST_MAX_MIN                          (0x2e03)
+#define P_VI_HIST_MAX_MIN                          (volatile unsigned int *)((0x2e03  << 2) + 0xff900000)
+//Bit 31:0  hist_spl_rd
+//counts for the total luma value
+//read only
+#define   VI_HIST_SPL_VAL                          (0x2e04)
+#define P_VI_HIST_SPL_VAL                          (volatile unsigned int *)((0x2e04  << 2) + 0xff900000)
+//Bit 21:0  hist_spl_pixel_count
+//counts for the total calculated pixels
+//read only
+#define   VI_HIST_SPL_PIX_CNT                      (0x2e05)
+#define P_VI_HIST_SPL_PIX_CNT                      (volatile unsigned int *)((0x2e05  << 2) + 0xff900000)
+//Bit 31:0  hist_chroma_sum
+//counts for the total chroma value
+//read only
+#define   VI_HIST_CHROMA_SUM                       (0x2e06)
+#define P_VI_HIST_CHROMA_SUM                       (volatile unsigned int *)((0x2e06  << 2) + 0xff900000)
+//Bit 31:16 higher hist bin
+//Bit 15:0  lower hist bin
+//0-255 are splited to 64 bins evenly, and VI_DNLP_HISTXX
+//are the statistic number of pixels that within each bin.
+//VI_DNLP_HIST00[15:0]  counts for the first  bin
+//VI_DNLP_HIST00[31:16] counts for the second bin
+//VI_DNLP_HIST01[15:0]  counts for the third  bin
+//VI_DNLP_HIST01[31:16] counts for the fourth bin
+//etc...
+//read only
+#define   VI_DNLP_HIST00                           (0x2e07)
+#define P_VI_DNLP_HIST00                           (volatile unsigned int *)((0x2e07  << 2) + 0xff900000)
+#define   VI_DNLP_HIST01                           (0x2e08)
+#define P_VI_DNLP_HIST01                           (volatile unsigned int *)((0x2e08  << 2) + 0xff900000)
+#define   VI_DNLP_HIST02                           (0x2e09)
+#define P_VI_DNLP_HIST02                           (volatile unsigned int *)((0x2e09  << 2) + 0xff900000)
+#define   VI_DNLP_HIST03                           (0x2e0a)
+#define P_VI_DNLP_HIST03                           (volatile unsigned int *)((0x2e0a  << 2) + 0xff900000)
+#define   VI_DNLP_HIST04                           (0x2e0b)
+#define P_VI_DNLP_HIST04                           (volatile unsigned int *)((0x2e0b  << 2) + 0xff900000)
+#define   VI_DNLP_HIST05                           (0x2e0c)
+#define P_VI_DNLP_HIST05                           (volatile unsigned int *)((0x2e0c  << 2) + 0xff900000)
+#define   VI_DNLP_HIST06                           (0x2e0d)
+#define P_VI_DNLP_HIST06                           (volatile unsigned int *)((0x2e0d  << 2) + 0xff900000)
+#define   VI_DNLP_HIST07                           (0x2e0e)
+#define P_VI_DNLP_HIST07                           (volatile unsigned int *)((0x2e0e  << 2) + 0xff900000)
+#define   VI_DNLP_HIST08                           (0x2e0f)
+#define P_VI_DNLP_HIST08                           (volatile unsigned int *)((0x2e0f  << 2) + 0xff900000)
+#define   VI_DNLP_HIST09                           (0x2e10)
+#define P_VI_DNLP_HIST09                           (volatile unsigned int *)((0x2e10  << 2) + 0xff900000)
+#define   VI_DNLP_HIST10                           (0x2e11)
+#define P_VI_DNLP_HIST10                           (volatile unsigned int *)((0x2e11  << 2) + 0xff900000)
+#define   VI_DNLP_HIST11                           (0x2e12)
+#define P_VI_DNLP_HIST11                           (volatile unsigned int *)((0x2e12  << 2) + 0xff900000)
+#define   VI_DNLP_HIST12                           (0x2e13)
+#define P_VI_DNLP_HIST12                           (volatile unsigned int *)((0x2e13  << 2) + 0xff900000)
+#define   VI_DNLP_HIST13                           (0x2e14)
+#define P_VI_DNLP_HIST13                           (volatile unsigned int *)((0x2e14  << 2) + 0xff900000)
+#define   VI_DNLP_HIST14                           (0x2e15)
+#define P_VI_DNLP_HIST14                           (volatile unsigned int *)((0x2e15  << 2) + 0xff900000)
+#define   VI_DNLP_HIST15                           (0x2e16)
+#define P_VI_DNLP_HIST15                           (volatile unsigned int *)((0x2e16  << 2) + 0xff900000)
+#define   VI_DNLP_HIST16                           (0x2e17)
+#define P_VI_DNLP_HIST16                           (volatile unsigned int *)((0x2e17  << 2) + 0xff900000)
+#define   VI_DNLP_HIST17                           (0x2e18)
+#define P_VI_DNLP_HIST17                           (volatile unsigned int *)((0x2e18  << 2) + 0xff900000)
+#define   VI_DNLP_HIST18                           (0x2e19)
+#define P_VI_DNLP_HIST18                           (volatile unsigned int *)((0x2e19  << 2) + 0xff900000)
+#define   VI_DNLP_HIST19                           (0x2e1a)
+#define P_VI_DNLP_HIST19                           (volatile unsigned int *)((0x2e1a  << 2) + 0xff900000)
+#define   VI_DNLP_HIST20                           (0x2e1b)
+#define P_VI_DNLP_HIST20                           (volatile unsigned int *)((0x2e1b  << 2) + 0xff900000)
+#define   VI_DNLP_HIST21                           (0x2e1c)
+#define P_VI_DNLP_HIST21                           (volatile unsigned int *)((0x2e1c  << 2) + 0xff900000)
+#define   VI_DNLP_HIST22                           (0x2e1d)
+#define P_VI_DNLP_HIST22                           (volatile unsigned int *)((0x2e1d  << 2) + 0xff900000)
+#define   VI_DNLP_HIST23                           (0x2e1e)
+#define P_VI_DNLP_HIST23                           (volatile unsigned int *)((0x2e1e  << 2) + 0xff900000)
+#define   VI_DNLP_HIST24                           (0x2e1f)
+#define P_VI_DNLP_HIST24                           (volatile unsigned int *)((0x2e1f  << 2) + 0xff900000)
+#define   VI_DNLP_HIST25                           (0x2e20)
+#define P_VI_DNLP_HIST25                           (volatile unsigned int *)((0x2e20  << 2) + 0xff900000)
+#define   VI_DNLP_HIST26                           (0x2e21)
+#define P_VI_DNLP_HIST26                           (volatile unsigned int *)((0x2e21  << 2) + 0xff900000)
+#define   VI_DNLP_HIST27                           (0x2e22)
+#define P_VI_DNLP_HIST27                           (volatile unsigned int *)((0x2e22  << 2) + 0xff900000)
+#define   VI_DNLP_HIST28                           (0x2e23)
+#define P_VI_DNLP_HIST28                           (volatile unsigned int *)((0x2e23  << 2) + 0xff900000)
+#define   VI_DNLP_HIST29                           (0x2e24)
+#define P_VI_DNLP_HIST29                           (volatile unsigned int *)((0x2e24  << 2) + 0xff900000)
+#define   VI_DNLP_HIST30                           (0x2e25)
+#define P_VI_DNLP_HIST30                           (volatile unsigned int *)((0x2e25  << 2) + 0xff900000)
+#define   VI_DNLP_HIST31                           (0x2e26)
+#define P_VI_DNLP_HIST31                           (volatile unsigned int *)((0x2e26  << 2) + 0xff900000)
+#define   VI_DNLP_HIST32                           (0x2e27)
+#define P_VI_DNLP_HIST32                           (volatile unsigned int *)((0x2e27  << 2) + 0xff900000)
+//Bit 28:16 hist_pic_height  active input data window height
+//Bit 12:0  hist_pic_width   active input data window width
+#define   VI_HIST_PIC_SIZE                         (0x2e28)
+#define P_VI_HIST_PIC_SIZE                         (volatile unsigned int *)((0x2e28  << 2) + 0xff900000)
+//Bit 15:8 hist_pix_white_value: >= this value will be white pixel
+//Bit 7:0 hist_pix_black_value: <= this value will be black pixel
+#define   VI_HIST_BLACK_WHITE_VALUE                (0x2e29)
+#define P_VI_HIST_BLACK_WHITE_VALUE                (volatile unsigned int *)((0x2e29  << 2) + 0xff900000)
+#define   VI_HIST_GCLK_CTRL                        (0x2e2a)
+#define P_VI_HIST_GCLK_CTRL                        (volatile unsigned int *)((0x2e2a  << 2) + 0xff900000)
+// synopsys translate_off
+// synopsys translate_on
+//
+// Closing file:  vi_hist_spl_reg.h
+//
+//`define MCDI_VCBUS_BASE                8'h2f
+//
+// Reading file:  mcdi_regs.h
+//
+// synopsys translate_off
+// synopsys translate_on
+// -----------------------------------------------
+// CBUS_BASE:  MCDI_VCBUS_BASE = 0x2f
+// -----------------------------------------------
+////=================================================================////
+//// memc di core 0
+////=================================================================////
+#define   MCDI_HV_SIZEIN                           (0x2f00)
+#define P_MCDI_HV_SIZEIN                           (volatile unsigned int *)((0x2f00  << 2) + 0xff900000)
+//Bit 31:29, reserved
+//Bit 28:16, reg_mcdi_hsize               image horizontal size (number of cols)   default=1024
+//Bit 15:13, reserved
+//Bit 12: 0, reg_mcdi_vsize               image vertical size   (number of rows)   default=1024
+#define   MCDI_HV_BLKSIZEIN                        (0x2f01)
+#define P_MCDI_HV_BLKSIZEIN                        (volatile unsigned int *)((0x2f01  << 2) + 0xff900000)
+//Bit    31, reg_mcdi_vrev					 default = 0
+//Bit    30, reg_mcdi_hrev					 default = 0
+//Bit 29:28, reserved
+//Bit 27:16, reg_mcdi_blkhsize               image horizontal blk size (number of cols)   default=1024
+//Bit 15:13, reserved
+//Bit 11: 0, reg_mcdi_blkvsize               image vertical blk size   (number of rows)   default=1024
+#define   MCDI_BLKTOTAL                            (0x2f02)
+#define P_MCDI_BLKTOTAL                            (volatile unsigned int *)((0x2f02  << 2) + 0xff900000)
+//Bit 31:24, reserved
+//Bit 23: 0, reg_mcdi_blktotal
+#define   MCDI_MOTINEN                             (0x2f03)
+#define P_MCDI_MOTINEN                             (volatile unsigned int *)((0x2f03  << 2) + 0xff900000)
+//Bit 31: 2, reserved
+//Bit     1, reg_mcdi_motionrefen.           enable motion refinement of MA, default = 1
+//Bit     0, reg_mcdi_motionparadoxen.       enable motion paradox detection, default = 1
+#define   MCDI_CTRL_MODE                           (0x2f04)
+#define P_MCDI_CTRL_MODE                           (volatile unsigned int *)((0x2f04  << 2) + 0xff900000)
+//Bit 31:28, reserved
+//Bit 27:26, reg_mcdi_lmvlocken	             0:disable, 1: use max Lmv, 2: use no-zero Lmv, lmv lock enable mode, default = 2
+//Bit 25,    reg_mcdi_reldetrptchken
+//                                           0: unable; 1: enable, enable repeat pattern check (not repeat mv detection) in rel det part, default = 1
+//Bit 24,    reg_mcdi_reldetgmvpd22chken
+//                                           0: unable; 1: enable, enable pull-down 22 mode check in gmv lock mode for rel det, default = 1
+//Bit 23,    reg_mcdi_pd22chken
+//                                           0: unable; 1: enable, enable pull-down 22 mode check (lock) function, default = 1
+//Bit 22,    reg_mcdi_reldetlpfen
+//                                           0: unable; 1: enable, enable det value lpf, default = 1
+//Bit 21,    reg_mcdi_reldetlmvpd22chken
+//                                           0: unable; 1: enable, enable pull-down 22 mode check in lmv lock mode for rel det, default = 1
+//Bit 20,    reg_mcdi_reldetlmvdifchken
+//                                           0: unable; 1: enable, enable lmv dif check in lmv lock mode for rel det, default = 1
+//Bit 19,    reg_mcdi_reldetgmvdifchken
+//                                           0: unable; 1: enable, enable lmv dif check in lmv lock mode for rel det, default = 1
+//Bit 18,    reg_mcdi_reldetpd22chken
+//                                           0: unable; 1: enable, enable pull-down 22 mode check for rel det refinement, default = 1
+//Bit 17,    reg_mcdi_reldetfrqchken
+//                                           0: unable; 1: enable, enable mv frequency check in rel det, default = 1
+//Bit 16,    reg_mcdi_qmeen
+//                                           0: unable; 1: enable, enable quarter motion estimation, defautl = 1
+//Bit 15,    reg_mcdi_refrptmven
+//                                           0: unable; 1: enable, use repeat mv in refinement, default = 1
+//Bit 14,    reg_mcdi_refgmven
+//                                           0: unable; 1: enable, use gmv in refinement, default = 1
+//Bit 13,    reg_mcdi_reflmven
+//                                           0: unable; 1: enable, use lmvs in refinement, default = 1
+//Bit 12,    reg_mcdi_refnmven
+//                                           0: unable; 1: enable, use neighoring mvs in refinement, default = 1
+//Bit 11,    reserved
+//Bit 10,    reg_mcdi_referrfrqchken
+//                                           0: unable; 1: enable, enable mv frquency check while finding min err in ref, default = 1
+//Bit 9,     reg_mcdi_refen
+//                                           0: unable; 1: enable, enable mv refinement, default = 1
+//Bit 8,     reg_mcdi_horlineen
+//                                           0: unable; 1: enable,enable horizontal lines detection by sad map, default = 1
+//Bit 7,     reg_mcdi_highvertfrqdeten
+//                                           0: unable; 1: enable, enable high vertical frequency pattern detection, default = 1
+//Bit 6,     reg_mcdi_gmvlocken
+//                                           0: unable; 1: enable, enable gmv lock mode, default = 1
+//Bit 5,     reg_mcdi_rptmven
+//                                           0: unable; 1: enable, enable repeat pattern detection, default = 1
+//Bit 4,     reg_mcdi_gmven
+//                                           0: unable; 1: enable, enable global motion estimation, default = 1
+//Bit 3,     reg_mcdi_lmven
+//                                           0: unable; 1: enable, enable line mv estimation for hme, default = 1
+//Bit 2,     reg_mcdi_chkedgeen
+//                                           0: unable; 1: enable, enable check edge function, default = 1
+//Bit 1,     reg_mcdi_txtdeten
+//                                           0: unable; 1: enable, enable texture detection, default = 1
+//Bit 0,     reg_mcdi_memcen
+//                                           0: unable; 1: enable, enable of memc di, default = 1
+#define   MCDI_UNI_MVDST                           (0x2f05)
+#define P_MCDI_UNI_MVDST                           (volatile unsigned int *)((0x2f05  << 2) + 0xff900000)
+//Bit 31:20, reserved
+//Bit 19:17, reg_mcdi_unimvdstabsseg0                     segment0 for uni-mv abs, default = 1
+//Bit 16:12, reg_mcdi_unimvdstabsseg1                     segment1 for uni-mv abs, default = 15
+//Bit 11: 8, reg_mcdi_unimvdstabsdifgain0	          2/2, gain0 of uni-mv abs dif for segment0, normalized 2 to '1', default = 2
+//Bit  7: 5, reg_mcdi_unimvdstabsdifgain1                 2/2, gain1 of uni-mv abs dif for segment1, normalized 2 to '1', default = 2
+//Bit  4: 2, reg_mcdi_unimvdstabsdifgain2                 2/2, gain2 of uni-mv abs dif beyond segment1, normalized 2 to '1', default = 2
+//Bit  1: 0, reg_mcdi_unimvdstsgnshft		          shift for neighboring distance of uni-mv, default = 0
+#define   MCDI_BI_MVDST                            (0x2f06)
+#define P_MCDI_BI_MVDST                            (volatile unsigned int *)((0x2f06  << 2) + 0xff900000)
+//Bit 31:20, reserved
+//Bit 19:17, reg_mcdi_bimvdstabsseg0                      segment0 for bi-mv abs, default = 1
+//Bit 16:12, reg_mcdi_bimvdstabsseg1                      segment1 for bi-mv abs, default = 9
+//Bit 11: 8, reg_mcdi_bimvdstabsdifgain0	          6/2, gain0 of bi-mv abs dif for segment0, normalized 2 to '1', default = 6
+//Bit  7: 5, reg_mcdi_bimvdstabsdifgain1                  3/2, gain1 of bi-mvabs dif for segment1, normalized 2 to '1', default = 3
+//Bit  4: 2, reg_mcdi_bimvdstabsdifgain2                  2/2, gain2 of bi-mvabs dif beyond segment1, normalized 2 to '1', default = 2
+//Bit  1: 0, reg_mcdi_bimvdstsgnshft	                  shift for neighboring distance of bi-mv, default = 0
+#define   MCDI_SAD_GAIN                            (0x2f07)
+#define P_MCDI_SAD_GAIN                            (volatile unsigned int *)((0x2f07  << 2) + 0xff900000)
+//Bit 31:19, reserved
+//Bit 18:17, reg_mcdi_unisadcorepxlgain                   uni-sad core pixels gain, default = 3
+//Bit 16,    reg_mcdi_unisadcorepxlnormen                 enable uni-sad core pixels normalization, default = 0
+//Bit 15:11, reserved
+//Bit 10: 9, reg_mcdi_bisadcorepxlgain                    bi-sad core pixels gain, default = 3
+//Bit  8,    reg_mcdi_bisadcorepxlnormen                  enable bi-sad core pixels normalization, default = 1
+//Bit  7: 3, reserved
+//Bit  2: 1, reg_mcdi_biqsadcorepxlgain                   bi-qsad core pixels gain, default = 3
+//Bit  0,    reg_mcdi_biqsadcorepxlnormen                 enable bi-qsad core pixels normalization, default = 1
+#define   MCDI_TXT_THD                             (0x2f08)
+#define P_MCDI_TXT_THD                             (volatile unsigned int *)((0x2f08  << 2) + 0xff900000)
+//Bit 31:24, reserved
+//Bit 23:16, reg_mcdi_txtminmaxdifthd,                    min max dif threshold (>=) for texture detection, default = 24
+//Bit 15: 8, reg_mcdi_txtmeandifthd,                      mean dif threshold (<) for texture detection, default = 9
+//Bit  7: 3, reserved
+//Bit  2: 0, reg_mcdi_txtdetthd,                          texture detecting threshold, 0~4, default = 2
+#define   MCDI_FLT_MODESEL                         (0x2f09)
+#define P_MCDI_FLT_MODESEL                         (volatile unsigned int *)((0x2f09  << 2) + 0xff900000)
+//Bit 31	 reserved
+//Bit 30:28, reg_mcdi_flthorlineselmode                   mode for horizontal line detecting flat calculation, default = 1, same as below
+//Bit 27	 reserved
+//Bit 26:24, reg_mcdi_fltgmvselmode                       mode for gmv flat calculation, default = 4, same as below
+//Bit 23,	 reserved
+//Bit 22:20, reg_mcdi_fltsadselmode                       mode for sad flat calculation, default = 2, same as below
+//Bit 19,	 reserved
+//Bit 18:16, reg_mcdi_fltbadwselmode                      mode for badw flat calculation, default = 3, same as below
+//Bit 15,	 reserved
+//Bit 14:12, reg_mcdi_fltrptmvselmode                     mode for repeat mv flat calculation, default = 4, same as below
+//Bit 11,	 reserved
+//Bit 10: 8, reg_mcdi_fltbadrelselmode                    mode for bad rel flat calculation, default = 4, same as below
+//Bit  7,	 reserved
+//Bit  6: 4, reg_mcdi_fltcolcfdselmode                    mode for col cfd flat calculation, default = 2, same as below
+//Bit  3,	 reserved
+//Bit  2: 0, reg_mcdi_fltpd22chkselmode                   mode for pd22 check flat calculation, default = 2, # 0:cur dif h, 1: cur dif v, 2: pre dif h, 3: pre dif v, 4: cur flt, 5: pre flt, 6: cur+pre, 7: max all(cur,pre)
+#define   MCDI_CHK_EDGE_THD                        (0x2f0a)
+#define P_MCDI_CHK_EDGE_THD                        (volatile unsigned int *)((0x2f0a  << 2) + 0xff900000)
+//Bit 23:28, reserved.
+//Bit 27:24, reg_mcdi_chkedgedifsadthd.                   thd (<=) for sad dif check, 0~8, default = 1
+//Bit 23:16, reserved.
+//Bit 15:12, reg_mcdi_chkedgemaxedgethd.                  max drt of edge, default = 15
+//Bit 11: 8, reg_mcdi_chkedgeminedgethd.                  min drt of edge, default = 2
+//Bit     7, reserved.
+//Bit  6: 0, reg_mcdi_chkedgevdifthd.                     thd for vertical dif in check edge, default = 14
+#define   MCDI_CHK_EDGE_GAIN_OFFST                 (0x2f0b)
+#define P_MCDI_CHK_EDGE_GAIN_OFFST                 (volatile unsigned int *)((0x2f0b  << 2) + 0xff900000)
+//Bit 31:24, reserved.
+//Bit 23:20, reg_mcdi_chkedgedifthd1.                     thd1 for edge dif check (<=), default = 4
+//Bit 19:16, reg_mcdi_chkedgedifthd0.                     thd0 for edge dif check (>=), default = 15
+//Bit   :15, reserved.
+//Bit 14:10, reg_mcdi_chkedgechklen.                      total check length for edge check, 1~24 (>0), default = 24
+//Bit  9: 8, reg_mcdi_chkedgeedgesel.                     final edge select mode, 0: original start edge, 1: lpf start edge, 2: orignal start+end edge, 3: lpf start+end edge, default = 1
+//Bit  7: 3, reg_mcdi_chkedgesaddstgain.                  distance gain for sad calc while getting edges, default = 4
+//Bit     2, reg_mcdi_chkedgechkmode.                     edge used in check mode, 0: original edge, 1: lpf edge, defautl = 1
+//Bit     1, reg_mcdi_chkedgestartedge.                   edge mode for start edge, 0: original edge, 1: lpf edge, defautl = 0
+//Bit     0, reg_mcdi_chkedgeedgelpf.                     edge lpf mode, 0:[0,2,4,2,0], 1:[1,2,2,2,1], default = 0
+#define   MCDI_LMV_RT                              (0x2f0c)
+#define P_MCDI_LMV_RT                              (volatile unsigned int *)((0x2f0c  << 2) + 0xff900000)
+//BIt 31:15, reserved
+//Bit 14:12, reg_mcdi_lmvvalidmode                        valid mode for lmv calc., 100b: use char det, 010b: use flt, 001b: use hori flg
+//Bit 11:10, reg_mcdi_lmvgainmvmode                       four modes of mv selection for lmv weight calucluation, default = 1
+//                                                        0: cur(x-3), lst(x-1,x,x+1); 1: cur(x-4,x-3), lst(x,x+1); 2: cur(x-5,x-4,x-3), lst(x-1,x,x+1,x+2,x+3); 3: cur(x-6,x-5,x-4,x-3), lst(x-1,x,x+1,x+2);
+//Bit  9,    reg_mcdi_lmvinitmode                         initial lmvs at first row of input field, 0: intial value = 0; 1: inital = 32 (invalid), default = 0
+//Bit  8,    reserved
+//Bit  7: 4, reg_mcdi_lmvrt0                              ratio of max mv, default = 5
+//Bit  3: 0, reg_mcdi_lmvrt1                              ratio of second max mv, default = 5
+#define   MCDI_LMV_GAINTHD                         (0x2f0d)
+#define P_MCDI_LMV_GAINTHD                         (volatile unsigned int *)((0x2f0d  << 2) + 0xff900000)
+//Bit 31:24, reg_mcdi_lmvvxmaxgain                        max gain of lmv weight, default = 96
+//Bit 23,    reserved
+//Bit 22:20, reg_mcdi_lmvdifthd0                          dif threshold 0 (<) for small lmv, default = 1
+//Bit 19:17, reg_mcdi_lmvdifthd1                          dif threshold 1 (<) for median lmv, default = 2
+//Bit 16:14, reg_mcdi_lmvdifthd2                          dif threshold 2 (<) for large lmv, default = 3
+//Bit 13: 8, reg_mcdi_lmvnumlmt                           least/limit number of (total number - max0), default = 20
+//Bit  7: 0, reg_mcdi_lmvfltthd                           flt cnt thd (<) for lmv, default = 9
+#define   MCDI_RPTMV_THD0                          (0x2f0e)
+#define P_MCDI_RPTMV_THD0                          (volatile unsigned int *)((0x2f0e  << 2) + 0xff900000)
+//Bit 31:25, reg_mcdi_rptmvslpthd2			  slope thd (>=) between i and i+3/i-3 (i+4/i-4), default = 64
+//Bit 24:20, reg_mcdi_rptmvslpthd1                        slope thd (>=) between i and i+2/i-2, default = 4
+//Bit 19:10, reg_mcdi_rptmvampthd2                        amplitude thd (>=) between max and min, when count cycles, default = 300
+//Bit  9: 0, reg_mcdi_rptmvampthd1                        amplitude thd (>=) between average of max and min, default = 400
+#define   MCDI_RPTMV_THD1                          (0x2f0f)
+#define P_MCDI_RPTMV_THD1                          (volatile unsigned int *)((0x2f0f  << 2) + 0xff900000)
+//Bit 31:28, reserved
+//Bit 27:25, reg_mcdi_rptmvcyccntthd                      thd (>=) of total cycles count, default = 2
+//Bit 24:21, reg_mcdi_rptmvcycdifthd                      dif thd (<) of cycles length, default = 3
+//Bit 20:18, reg_mcdi_rptmvcycvldthd                      thd (>) of valid cycles number, default = 1
+//Bit 17:15, reg_mcdi_rptmvhalfcycminthd                  min length thd (>=) of half cycle, default = 2
+//Bit 14:11, reg_mcdi_rptmvhalfcycdifthd                  neighboring half cycle length dif thd (<), default = 5
+//Bit 10: 8, reg_mcdi_rptmvminmaxcntthd                   least number of valid max and min, default = 2
+//Bit  7: 5, reg_mcdi_rptmvcycminthd                      min length thd (>=) of cycles, default = 2
+//Bit  4: 0, reg_mcdi_rptmvcycmaxthd                      max length thd (<) of cycles, default = 17
+#define   MCDI_RPTMV_THD2                          (0x2f10)
+#define P_MCDI_RPTMV_THD2                          (volatile unsigned int *)((0x2f10  << 2) + 0xff900000)
+//Bit 31:24, reserved
+//Bit 23:16, reg_mcdi_rptmvhdifthd0                       higher hdif thd (>=) (vertical edge) for rpt detection, default = 8
+//Bit 15: 8, reg_mcdi_rptmvhdifthd1                       hdif thd (>=) (slope edge) for rpt detection, default = 4
+//Bit  7: 0, reg_mcdi_rptmvvdifthd                        vdif thd (>=) (slope edge) for rpt detection, default = 1
+#define   MCDI_RPTMV_SAD                           (0x2f11)
+#define P_MCDI_RPTMV_SAD                           (volatile unsigned int *)((0x2f11  << 2) + 0xff900000)
+//Bit 31:26, reserved
+//Bit 25:16, reg_mcdi_rptmvsaddifthdgain                  7x3x(16/16), gain for sad dif thd in rpt mv detection, 0~672, normalized 16 as '1', default = 336
+//Bit 15:10, reserved
+//Bit  9: 0, reg_mcdi_rptmvsaddifthdoffst                 offset for sad dif thd in rpt mv detection, -512~511, default = 16
+#define   MCDI_RPTMV_FLG                           (0x2f12)
+#define P_MCDI_RPTMV_FLG                           (volatile unsigned int *)((0x2f12  << 2) + 0xff900000)
+//Bit 31:18,  reserved
+//Bit 17:16,  reg_mcdi_rptmvmode                          select mode of mvs for repeat motion estimation, 0: hmv, 1: qmv/2, 2 or 3: qmv/4, default = 2
+//Bit 15: 8,  reg_mcdi_rptmvflgcntthd                     thd (>=) of min count number for rptmv of whole field, for rptmv estimation, default = 64
+//Bit  7: 5,  reserved
+//Bit  4: 0,  reg_mcdi_rptmvflgcntrt                      4/32, ratio for repeat mv flag count, normalized 32 as '1', set 31 to 32,
+#define   MCDI_RPTMV_GAIN                          (0x2f13)
+#define P_MCDI_RPTMV_GAIN                          (volatile unsigned int *)((0x2f13  << 2) + 0xff900000)
+//Bit 31:24, reg_mcdi_rptmvlftgain                        up repeat mv gain for hme, default = 96
+//Bit 23:16, reg_mcdi_rptmvuplftgain                      up left repeat mv gain for hme, default = 32
+//Bit 15: 8, reg_mcdi_rptmvupgain                         up repeat mv gain for hme, default = 64
+//Bit  7: 0, reg_mcdi_rptmvuprightgain                    up right repeat mv gain for hme, default = 32
+#define   MCDI_GMV_RT                              (0x2f14)
+#define P_MCDI_GMV_RT                              (volatile unsigned int *)((0x2f14  << 2) + 0xff900000)
+//Bit 31,    reserved
+//Bit 30:24, reg_mcdi_gmvmtnrt0                           ratio 0 for motion senario, set 127 to 128, normalized 128 as '1', default =32
+//Bit 23,    reserved
+//Bit 22:16, reg_mcdi_gmvmtnrt1                           ratio 1 for motion senario, set 127 to 128, normalized 128 as '1', default = 56
+//Bit 15,    reserved
+//Bit 14: 8, reg_mcdi_gmvstlrt0                           ratio 0 for still senario, set 127 to 128, normalized 128 as '1', default = 56
+//Bit  7,    reserved
+//Bit  6: 0, reg_mcdi_gmvstlrt1                           ratio 1 for still senario, set 127 to 128, normalized 128 as '1', default = 80
+#define   MCDI_GMV_GAIN                            (0x2f15)
+#define P_MCDI_GMV_GAIN                            (volatile unsigned int *)((0x2f15  << 2) + 0xff900000)
+//Bit 31:25, reg_mcdi_gmvzeromvlockrt0                    ratio 0 for locking zero mv, set 127 to 128, normalized 128 as '1', default = 100
+//Bit 24:18, reg_mcdi_gmvzeromvlockrt1                    ratio 1 for locking zero mv, set 127 to 128, normalized 128 as '1', default = 112
+//Bit 17:16, reg_mcdi_gmvvalidmode                        valid mode for gmv calc., 10b: use flt, 01b: use hori flg, default = 3
+//Bit 15: 8, reg_mcdi_gmvvxgain                           gmv's vx gain when gmv locked for hme, default = 0
+//Bit  7: 0, reg_mcdi_gmvfltthd                           flat thd (<) for gmv calc. default = 3
+#define   MCDI_HOR_SADOFST                         (0x2f16)
+#define P_MCDI_HOR_SADOFST                         (volatile unsigned int *)((0x2f16  << 2) + 0xff900000)
+//Bit 31:25, reserved
+//Bit 24:16, reg_mcdi_horsaddifthdgain                    21*1/8, gain/divisor for sad dif threshold in hor line detection, normalized 8 as '1', default = 21
+//Bit 15: 8, reg_mcdi_horsaddifthdoffst                   offset for sad dif threshold in hor line detection, -128~127, default = 0
+//Bit  7: 0, reg_mcdi_horvdifthd                          threshold (>=) of vertical dif of next block for horizontal line detection, default = 24
+#define   MCDI_REF_MV_NUM                          (0x2f17)
+#define P_MCDI_REF_MV_NUM                          (volatile unsigned int *)((0x2f17  << 2) + 0xff900000)
+//Bit 31: 2, reserved
+//Bit  1: 0, reg_mcdi_refmcmode.         motion compensated mode used in refinement, 0: pre, 1: next, 2: (pre+next)/2, default = 0
+#define   MCDI_REF_BADW_THD_GAIN                   (0x2f18)
+#define P_MCDI_REF_BADW_THD_GAIN                   (volatile unsigned int *)((0x2f18  << 2) + 0xff900000)
+//Bit 31:28, reserved
+//Bit 27:24, reg_mcdi_refbadwcnt2gain.   gain for badwv count num==3, default = 6
+//Bit 23:20, reg_mcdi_refbadwcnt1gain.   gain for badwv count num==2, default = 3
+//Bit 19:16, reg_mcdi_refbadwcnt0gain.   gain for badwv count num==1, default = 1
+//Bit 15:12, reg_mcdi_refbadwthd3.       threshold 3 for detect badweave with largest average luma, default = 4
+//Bit 11: 8, reg_mcdi_refbadwthd2.       threshold 2 for detect badweave with third smallest average luma, default = 3
+//Bit  7: 4, reg_mcdi_refbadwthd1.       threshold 1 for detect badweave with second smallest average luma, default = 2
+//Bit  3: 0, reg_mcdi_refbadwthd0.       threshold 0 for detect badweave with smallest average luma, default = 1
+#define   MCDI_REF_BADW_SUM_GAIN                   (0x2f19)
+#define P_MCDI_REF_BADW_SUM_GAIN                   (volatile unsigned int *)((0x2f19  << 2) + 0xff900000)
+//Bit 31:13, reserved
+//Bit 12: 8, reg_mcdi_refbadwsumgain0.   sum gain for r channel, 0~16, default = 8
+//Bit  7: 5, reserved
+//Bit     4, reg_mcdi_refbadwcalcmode.   mode for badw calculation, 0:sum, 1:max, default = 0
+//Bit  3: 0, reserved
+#define   MCDI_REF_BS_THD_GAIN                     (0x2f1a)
+#define P_MCDI_REF_BS_THD_GAIN                     (volatile unsigned int *)((0x2f1a  << 2) + 0xff900000)
+//Bit 31:28, reg_mcdi_refbsudgain1.      up & down block stregth gain1, normalized to 8 as '1', default = 2
+//Bit 27:24, reg_mcdi_refbsudgain0.      up & down block stregth gain0, normalized to 8 as '1', default = 4
+//Bit 23:19, reserved
+//Bit 18:16, reg_mcdi_refbslftgain.      left block strength gain, default = 0
+//Bit 15:13, reserved
+//Bit 12: 8, reg_mcdi_refbsthd1.         threshold 1 for detect block stregth in refinment, default = 16
+//Bit  7: 5, reserved
+//Bit  4: 0, reg_mcdi_refbsthd0.         threshold 0 for detect block stregth in refinment, default = 8
+#define   MCDI_REF_ERR_GAIN0                       (0x2f1b)
+#define P_MCDI_REF_ERR_GAIN0                       (volatile unsigned int *)((0x2f1b  << 2) + 0xff900000)
+//Bit    31, reserved
+//Bit 30:24, reg_mcdi_referrnbrdstgain.            neighoring mv distances gain for err calc. in ref, normalized to 8 as '1', default = 48
+//Bit 23:20, reserved
+//Bit 19:16, reg_mcdi_referrbsgain.                bs gain for err calc. in ref, normalized to 8 as '1', default = 4
+//Bit    15, reserved
+//Bit 14: 8, reg_mcdi_referrbadwgain.              badw gain for err calc. in ref, normalized to 8 as '1', default = 64
+//Bit  7: 4, reserved
+//Bit  3: 0, reg_mcdi_referrsadgain.               sad gain for err calc. in ref, normalized to 8 as '1', default = 4
+#define   MCDI_REF_ERR_GAIN1                       (0x2f1c)
+#define P_MCDI_REF_ERR_GAIN1                       (volatile unsigned int *)((0x2f1c  << 2) + 0xff900000)
+//Bit 31:20, reserved
+//Bit 19:16, reg_mcdi_referrchkedgegain.           check edge gain for err calc. in ref, normalized to 8 as '1', default = 4
+//Bit 15:12, reserved
+//Bit 11: 8, reg_mcdi_referrlmvgain.               (locked) lmv gain for err calc. in ref, normalized to 8 as '1', default = 0
+//Bit  7: 4, reserved
+//Bit  3: 0, reg_mcdi_referrgmvgain.               (locked) gmv gain for err calc. in ref, normalized to 8 as '1', default = 0
+#define   MCDI_REF_ERR_FRQ_CHK                     (0x2f1d)
+#define P_MCDI_REF_ERR_FRQ_CHK                     (volatile unsigned int *)((0x2f1d  << 2) + 0xff900000)
+//Bit 31:28, reserved
+//Bit 27:24, reg_mcdi_referrfrqgain.               gain for mv frquency, normalized to 4 as '1', default = 10
+//Bit 23:21, reserved
+//Bit 20:16, reg_mcdi_referrfrqmax.                max gain for mv frquency check, default = 31
+//Bit    15, reserved
+//Bit 14:12, reg_mcdi_ref_errfrqmvdifthd2.         mv dif threshold 2 (<) for mv frquency check, default = 3
+//Bit    11, reserved
+//Bit 10: 8, reg_mcdi_ref_errfrqmvdifthd1.         mv dif threshold 1 (<) for mv frquency check, default = 2
+//Bit     7, reserved
+//Bit  6: 4, reg_mcdi_ref_errfrqmvdifthd0.         mv dif threshold 0 (<) for mv frquency check, default = 1
+//Bit  3: 0, reserved
+#define   MCDI_QME_LPF_MSK                         (0x2f1e)
+#define P_MCDI_QME_LPF_MSK                         (volatile unsigned int *)((0x2f1e  << 2) + 0xff900000)
+//Bit 31:28, reserved
+//Bit 27:24, reg_mcdi_qmechkedgelpfmsk0.           lpf mask0 for chk edge in qme, 0~8, msk1 = (8-msk0), normalized to 8 as '1', default = 7
+//Bit 23:20, reserved
+//Bit 19:16, reg_mcdi_qmebslpfmsk0.                lpf mask0 for bs in qme, 0~8, msk1 = (8-msk0), normalized to 8 as '1', default = 7
+//Bit 15:12, reserved
+//Bit 11: 8, reg_mcdi_qmebadwlpfmsk0.              lpf mask0 for badw in qme, 0~8, msk1 = (8-msk0), normalized to 8 as '1', default = 7
+//Bit  7: 4, reserved
+//Bit  3: 0, reg_mcdi_qmesadlpfmsk0.               lpf mask0 for sad in qme, 0~8, msk1 = (8-msk0), normalized to 8 as '1', default = 7
+#define   MCDI_REL_DIF_THD_02                      (0x2f1f)
+#define P_MCDI_REL_DIF_THD_02                      (volatile unsigned int *)((0x2f1f  << 2) + 0xff900000)
+//Bit 31:24, reserved.
+//Bit 23:16, reg_mcdi_reldifthd2.                  thd (<) for (hdif+vdif), default = 9
+//Bit 15: 8, reg_mcdi_reldifthd1.                  thd (<) for (vdif), default = 5
+//Bit  7: 0, reg_mcdi_reldifthd0.                  thd (>=) for (hdif-vdif), default = 48
+#define   MCDI_REL_DIF_THD_34                      (0x2f20)
+#define P_MCDI_REL_DIF_THD_34                      (volatile unsigned int *)((0x2f20  << 2) + 0xff900000)
+//Bit 31:16, reserved.
+//Bit 15: 8, reg_mcdi_reldifthd4.                  thd (<) for (hdif), default = 255
+//Bit  7: 0, reg_mcdi_reldifthd3.                  thd (>=) for (vdif-hdif), default = 48
+#define   MCDI_REL_BADW_GAIN_OFFST_01              (0x2f21)
+#define P_MCDI_REL_BADW_GAIN_OFFST_01              (volatile unsigned int *)((0x2f21  << 2) + 0xff900000)
+//Bit 31:24, reg_mcdi_relbadwoffst1.               offset for badw adj, for flat block, -128~127, default = 0
+//Bit 23:16, reg_mcdi_relbadwgain1.                gain for badw adj, for flat block, default = 128
+//Bit 15: 8, reg_mcdi_relbadwoffst0.               offset for badw adj, for vertical block, -128~127, default = 0
+//Bit  7: 0, reg_mcdi_relbadwgain0.                gain for badw adj, for vertical block, default = 160
+#define   MCDI_REL_BADW_GAIN_OFFST_23              (0x2f22)
+#define P_MCDI_REL_BADW_GAIN_OFFST_23              (volatile unsigned int *)((0x2f22  << 2) + 0xff900000)
+//Bit 31:24, reg_mcdi_relbadwoffst3.               offset for badw adj, for other block, -128~127, default = 0
+//Bit 23:16, reg_mcdi_relbadwgain3.                gain for badw adj, for other block, default = 48
+//Bit 15: 8, reg_mcdi_relbadwoffst2.               offset for badw adj, for horizontal block, -128~127, default = 0
+//Bit  7: 0, reg_mcdi_relbadwgain2.                gain for badw adj, for horizontal block, default = 48
+#define   MCDI_REL_BADW_THD_GAIN_OFFST             (0x2f23)
+#define P_MCDI_REL_BADW_THD_GAIN_OFFST             (volatile unsigned int *)((0x2f23  << 2) + 0xff900000)
+//Bit 31:23, reserved.
+//Bit 22:16, reg_mcdi_relbadwoffst.                offset for badw thd adj, -64~63, default = 0
+//Bit 15: 8, reserved.
+//Bit  7: 0, reg_mcdi_relbadwthdgain.              gain0 for badw thd adj, normalized to 16 as '1', default = 16
+#define   MCDI_REL_BADW_THD_MIN_MAX                (0x2f24)
+#define P_MCDI_REL_BADW_THD_MIN_MAX                (volatile unsigned int *)((0x2f24  << 2) + 0xff900000)
+//Bit 31:18, reserved.
+//Bit 17: 8, reg_mcdi_relbadwthdmax.               max for badw thd adj, default = 256
+//Bit  7: 0, reg_mcdi_relbadwthdmin.               min for badw thd adj, default = 16
+#define   MCDI_REL_SAD_GAIN_OFFST_01               (0x2f25)
+#define P_MCDI_REL_SAD_GAIN_OFFST_01               (volatile unsigned int *)((0x2f25  << 2) + 0xff900000)
+//Bit 31:24, reg_mcdi_relsadoffst1.                offset for sad adj, for flat block, -128~127, default = 0
+//Bit 23:20, reserved.
+//Bit 19:16, reg_mcdi_relsadgain1.                 gain for sad adj, for flat block, normalized to 8 as '1', default = 8
+//Bit 15: 8, reg_mcdi_relsadoffst0.                offset for sad adj, for vertical block, -128~127, default = 0
+//Bit  7: 4, reserved.
+//Bit  3: 0, reg_mcdi_relsadgain0.                 gain for sad adj, for vertical block, normalized to 8 as '1', default = 6
+#define   MCDI_REL_SAD_GAIN_OFFST_23               (0x2f26)
+#define P_MCDI_REL_SAD_GAIN_OFFST_23               (volatile unsigned int *)((0x2f26  << 2) + 0xff900000)
+//Bit 31:24, reg_mcdi_relsadoffst3.                offset for sad adj, for other block, -128~127, default = 0
+//Bit 23:20, reserved.
+//Bit 19:16, reg_mcdi_relsadgain3.                 gain for sad adj, for other block, normalized to 8 as '1', default = 8
+//Bit 15: 8, reg_mcdi_relsadoffst2.                offset for sad adj, for horizontal block, -128~127, default = 0
+//Bit  7: 4, reserved.
+//Bit  3: 0, reg_mcdi_relsadgain2.                 gain for sad adj, for horizontal block, normalized to 8 as '1', default = 12
+#define   MCDI_REL_SAD_THD_GAIN_OFFST              (0x2f27)
+#define P_MCDI_REL_SAD_THD_GAIN_OFFST              (volatile unsigned int *)((0x2f27  << 2) + 0xff900000)
+//Bit 31:24, reserved.
+//Bit 23:16, reg_mcdi_relsadoffst.                 offset for sad thd adj, -128~127, default = 0
+//Bit 15:10, reserved.
+//Bit  9: 0, reg_mcdi_relsadthdgain.               gain for sad thd adj, 21*2/16, normalized to 16 as '1', default = 42
+#define   MCDI_REL_SAD_THD_MIN_MAX                 (0x2f28)
+#define P_MCDI_REL_SAD_THD_MIN_MAX                 (volatile unsigned int *)((0x2f28  << 2) + 0xff900000)
+//Bit 31:27, reserved.
+//Bit 26:16, reg_mcdi_relsadthdmax.                max for sad thd adj, 21*32, default = 672
+//Bit 15: 9, reserved.
+//Bit  8: 0, reg_mcdi_relsadthdmin.                min for sad thd adj, 21*2, default = 42
+#define   MCDI_REL_DET_GAIN_00                     (0x2f29)
+#define P_MCDI_REL_DET_GAIN_00                     (volatile unsigned int *)((0x2f29  << 2) + 0xff900000)
+//Bit 31:21, reserved.
+//Bit 20:16, reg_mcdi_reldetbsgain0.               gain0 (gmv locked) for bs, for det. calc. normalized to 16 as '1', default = 8
+//Bit 15:14, reserved.
+//Bit 13: 8, reg_mcdi_reldetbadwgain0.             gain0 (gmv locked) for badw, for det. calc. normalized to 16 as '1', default = 12
+//Bit  7: 5, reserved.
+//Bit  4: 0, reg_mcdi_reldetsadgain0.              gain0 (gmv locked) for qsad, for det. calc. normalized to 16 as '1', default = 8
+#define   MCDI_REL_DET_GAIN_01                     (0x2f2a)
+#define P_MCDI_REL_DET_GAIN_01                     (volatile unsigned int *)((0x2f2a  << 2) + 0xff900000)
+//Bit 31:14, reserved.
+//Bit 12: 8, reg_mcdi_reldetchkedgegain0.          gain0 (gmv locked) for chk_edge, for det. calc. normalized to 16 as '1', default = 2
+//Bit     7, reserved.
+//Bit  6: 0, reg_mcdi_reldetnbrdstgain0.           gain0 (gmv locked) for neighoring dist, for det. calc. normalized to 16 as '1', default = 24
+#define   MCDI_REL_DET_GAIN_10                     (0x2f2b)
+#define P_MCDI_REL_DET_GAIN_10                     (volatile unsigned int *)((0x2f2b  << 2) + 0xff900000)
+//Bit 31:21, reserved.
+//Bit 20:16, reg_mcdi_reldetbsgain1.               gain1 (lmv locked) for bs, for det. calc. normalized to 16 as '1', default = 0
+//Bit 15:14, reserved.
+//Bit 13: 8, reg_mcdi_reldetbadwgain1.             gain1 (lmv locked) for badw, for det. calc. normalized to 16 as '1', default = 8
+//Bit  7: 5, reserved.
+//Bit  4: 0, reg_mcdi_reldetsadgain1.              gain1 (lmv locked) for qsad, for det. calc. normalized to 16 as '1', default = 8
+#define   MCDI_REL_DET_GAIN_11                     (0x2f2c)
+#define P_MCDI_REL_DET_GAIN_11                     (volatile unsigned int *)((0x2f2c  << 2) + 0xff900000)
+//Bit 31:14, reserved.
+//Bit 12: 8, reg_mcdi_reldetchkedgegain1.          gain1 (lmv locked) for chk_edge, for det. calc. normalized to 16 as '1', default = 0
+//Bit     7, reserved.
+//Bit  6: 0, reg_mcdi_reldetnbrdstgain1.           gain1 (lmv locked) for neighoring dist, for det. calc. normalized to 16 as '1', default = 24
+#define   MCDI_REL_DET_GAIN_20                     (0x2f2d)
+#define P_MCDI_REL_DET_GAIN_20                     (volatile unsigned int *)((0x2f2d  << 2) + 0xff900000)
+//Bit 31:21, reserved.
+//Bit 20:16, reg_mcdi_reldetbsgain2.               gain2 (no locked) for bs, for det. calc. normalized to 16 as '1', default = 12
+//Bit 15:14, reserved.
+//Bit 13: 8, reg_mcdi_reldetbadwgain2.             gain2 (no locked) for badw, for det. calc. normalized to 16 as '1', default = 32
+//Bit  7: 5, reserved.
+//Bit  4: 0, reg_mcdi_reldetsadgain2.              gain2 (no locked) for qsad, for det. calc. normalized to 16 as '1', default = 16
+#define   MCDI_REL_DET_GAIN_21                     (0x2f2e)
+#define P_MCDI_REL_DET_GAIN_21                     (volatile unsigned int *)((0x2f2e  << 2) + 0xff900000)
+//Bit 31:26, reserved
+//Bit 25:16, reg_mcdi_reldetoffst.                 offset for rel calculation, for det. calc. -512~511,  default = 0
+//Bit 15:14, reserved.
+//Bit 12: 8, reg_mcdi_reldetchkedgegain2.          gain2 (no locked) for chk_edge, for det. calc. normalized to 16 as '1', default = 10
+//Bit     7, reserved.
+//Bit  6: 0, reg_mcdi_reldetnbrdstgain2.           gain2 (no locked) for neighoring dist, for det. calc. normalized to 16 as '1', default = 32
+#define   MCDI_REL_DET_GMV_DIF_CHK                 (0x2f2f)
+#define P_MCDI_REL_DET_GMV_DIF_CHK                 (volatile unsigned int *)((0x2f2f  << 2) + 0xff900000)
+//Bit 31:24, reserved.
+//Bit 23:16, reg_mcdi_reldetgmvfltthd.             flat thd (>=) for gmv lock decision, default = 0
+//Bit    15, reserved.
+//Bit 14:12, reg_mcdi_reldetgmvdifthd.             dif thd (>=) for current mv different from gmv for gmv dif check, actually used in Lmv lock check, default = 3
+//Bit    11, reserved.
+//Bit 10: 8, reg_mcdi_reldetgmvdifmin.             min mv dif for gmv dif check, default = 1, note: dif between reg_mcdi_rel_det_gmv_dif_max and reg_mcdi_rel_det_gmv_dif_min should be; 0,1,3,7, not work for others
+//Bit  7: 4, reg_mcdi_reldetgmvdifmax.             max mv dif for gmv dif check, default = 4
+//Bit  3: 1, reserved
+//Bit     0, reg_mcdi_reldetgmvdifmvmode.          mv mode used for gmv dif check, 0: use refmv, 1: use qmv, default = 0
+#define   MCDI_REL_DET_LMV_DIF_CHK                 (0x2f30)
+#define P_MCDI_REL_DET_LMV_DIF_CHK                 (volatile unsigned int *)((0x2f30  << 2) + 0xff900000)
+//Bit 31:24, reserved.
+//Bit 23:16, reg_mcdi_reldetlmvfltthd.             flat thd (>=) for lmv lock decision, default = 12
+//Bit 15:14, reserved.
+//Bit 13:12, reg_mcdi_reldetlmvlockchkmode.        lmv lock check mode, 0:cur Lmv, 1: cur & (last | next), 2: last & cur & next Lmv, default = 1
+//Bit    11, reserved.
+//Bit 10: 8, reg_mcdi_reldetlmvdifmin.             min mv dif for lmv dif check, default = 1, note: dif between reg_mcdi_rel_det_lmv_dif_max and reg_mcdi_rel_det_lmv_dif_min should be; 0,1,3,7, not work for others
+//Bit  7: 4, reg_mcdi_reldetlmvdifmax.             max mv dif for lmv dif check, default = 4
+//Bit  3: 1, reserved
+//Bit     0, reg_mcdi_reldetlmvdifmvmode.          mv mode used for lmv dif check, 0: use refmv, 1: use qmv, default = 0
+#define   MCDI_REL_DET_FRQ_CHK                     (0x2f31)
+#define P_MCDI_REL_DET_FRQ_CHK                     (volatile unsigned int *)((0x2f31  << 2) + 0xff900000)
+//Bit 31:12, reserved.
+//Bit 11: 8, reg_mcdi_reldetfrqgain.               gain for frequency check, normalized to 4 as '1', default = 10
+//Bit  7: 5, reserved
+//Bit  4: 0, reg_mcdi_reldetfrqmax.                max value for frequency check, default = 31
+#define   MCDI_REL_DET_PD22_CHK                    (0x2f32)
+#define P_MCDI_REL_DET_PD22_CHK                    (volatile unsigned int *)((0x2f32  << 2) + 0xff900000)
+//Bit 31:18, reserved.
+//Bit 17: 8, reg_mcdi_reldetpd22chkoffst.          offset for pd22 check happened, default = 512
+//Bit  7: 5, reserved
+//Bit  4: 0, reg_mcdi_reldetpd22chkgain.           gain for pd22 check happened, normalized to 8 as '1', default = 12
+#define   MCDI_REL_DET_RPT_CHK_ROW                 (0x2f33)
+#define P_MCDI_REL_DET_RPT_CHK_ROW                 (volatile unsigned int *)((0x2f33  << 2) + 0xff900000)
+//Bit 31:27, reserved
+//Bit 26:16, reg_mcdi_reldetrptchkendrow.          end row (<) number for repeat check, default = 2047
+//Bit 15:11, reserved
+//Bit 10: 0, reg_mcdi_reldetrptchkstartrow.        start row (>=) number for repeat check, default = 0
+#define   MCDI_REL_DET_RPT_CHK_GAIN_QMV            (0x2f34)
+#define P_MCDI_REL_DET_RPT_CHK_GAIN_QMV            (volatile unsigned int *)((0x2f34  << 2) + 0xff900000)
+//Bit 31:30, reserved
+//Bit 29:24, reg_mcdi_reldetrptchkqmvmax.          max thd (<) of abs qmv for repeat check, default = 15, note that quarter mv's range is -63~63
+//Bit 23:22, reserved
+//Bit 21:16, reg_mcdi_reldetrptchkqmvmin.          min thd (>=) of abs qmv for repeat check, default = 10, note that quarter mv's range is -63~63
+//Bit    15, reserved/
+//Bit 14: 4, reg_mcdi_reldetrptchkoffst.           offset for repeat check, default = 512
+//Bit  3: 0, reg_mcdi_reldetrptchkgain.            gain for repeat check, normalized to 8 as '1', default = 4
+#define   MCDI_REL_DET_RPT_CHK_THD_0               (0x2f35)
+#define P_MCDI_REL_DET_RPT_CHK_THD_0               (volatile unsigned int *)((0x2f35  << 2) + 0xff900000)
+//Bit 31:24, reserved
+//Bit 23:16, reg_mcdi_reldetrptchkzerosadthd.      zero sad thd (<) for repeat check, default = 255
+//Bit 15:14, reserved.
+//Bit 13: 8, reg_mcdi_reldetrptchkzerobadwthd.     zero badw thd (>=) for repeat check, default = 16
+//Bit  7: 4, reserved
+//Bit  3: 0, reg_mcdi_reldetrptchkfrqdifthd.       frequency dif thd (<) for repeat check, 0~10, default = 5
+#define   MCDI_REL_DET_RPT_CHK_THD_1               (0x2f36)
+#define P_MCDI_REL_DET_RPT_CHK_THD_1               (volatile unsigned int *)((0x2f36  << 2) + 0xff900000)
+//Bit 31:16, reserved
+//Bit 15: 8, reg_mcdi_reldetrptchkvdifthd.         vertical dif thd (<) for repeat check, default = 16
+//Bit  7: 0, reg_mcdi_reldetrptchkhdifthd.         horizontal dif thd (>=) for repeat check, default = 16
+#define   MCDI_REL_DET_LPF_DIF_THD                 (0x2f37)
+#define P_MCDI_REL_DET_LPF_DIF_THD                 (volatile unsigned int *)((0x2f37  << 2) + 0xff900000)
+//Bit 31:24, reg_mcdi_reldetlpfdifthd3.            hdif thd (<) for lpf selection of horizontal block, default = 9
+//Bit 23:16, reg_mcdi_reldetlpfdifthd2.            vdif-hdif thd (>=) for lpf selection of horizontal block, default = 48
+//Bit 15: 8, reg_mcdi_reldetlpfdifthd1.            vdif thd (<) for lpf selection of vertical block, default = 9
+//Bit  7: 0, reg_mcdi_reldetlpfdifthd0.            hdif-vdif thd (>=) for lpf selection of vertical block, default = 48
+#define   MCDI_REL_DET_LPF_MSK_00_03               (0x2f38)
+#define P_MCDI_REL_DET_LPF_MSK_00_03               (volatile unsigned int *)((0x2f38  << 2) + 0xff900000)
+//Bit 31:29, reserved
+//Bit 28:24, reg_mcdi_reldetlpfmsk03.              det lpf mask03 for gmv/lmv locked mode, 0~16, default = 1
+//Bit 23:21, reserved
+//Bit 20:16, reg_mcdi_reldetlpfmsk02.              det lpf mask02 for gmv/lmv locked mode, 0~16, default = 1
+//Bit 15:13, reserved
+//Bit 12: 8, reg_mcdi_reldetlpfmsk01.              det lpf mask01 for gmv/lmv locked mode, 0~16, default = 5
+//Bit  7: 5, reserved
+//Bit  4: 0, reg_mcdi_reldetlpfmsk00.              det lpf mask00 for gmv/lmv locked mode, 0~16, default = 8
+#define   MCDI_REL_DET_LPF_MSK_04_12               (0x2f39)
+#define P_MCDI_REL_DET_LPF_MSK_04_12               (volatile unsigned int *)((0x2f39  << 2) + 0xff900000)
+//Bit 31:29, reserved
+//Bit 28:24, reg_mcdi_reldetlpfmsk12.              det lpf mask12 for vertical blocks, 0~16, default = 0
+//Bit 23:21, reserved
+//Bit 20:16, reg_mcdi_reldetlpfmsk11.              det lpf mask11 for vertical blocks, 0~16, default = 0
+//Bit 15:13, reserved
+//Bit 12: 8, reg_mcdi_reldetlpfmsk10.              det lpf mask10 for vertical blocks, 0~16, default = 16
+//Bit  7: 5, reserved
+//Bit  4: 0, reg_mcdi_reldetlpfmsk04.              det lpf mask04 for gmv/lmv locked mode, 0~16, default = 1
+#define   MCDI_REL_DET_LPF_MSK_13_21               (0x2f3a)
+#define P_MCDI_REL_DET_LPF_MSK_13_21               (volatile unsigned int *)((0x2f3a  << 2) + 0xff900000)
+//Bit 31:29, reserved
+//Bit 28:24, reg_mcdi_reldetlpfmsk21.              det lpf mask21 for horizontal blocks, 0~16, default = 6
+//Bit 23:21, reserved
+//Bit 20:16, reg_mcdi_reldetlpfmsk20.              det lpf mask20 for horizontal blocks, 0~16, default = 8
+//Bit 15:13, reserved
+//Bit 12: 8, reg_mcdi_reldetlpfmsk14.              det lpf mask14 for vertical blocks, 0~16, default = 0
+//Bit  7: 5, reserved
+//Bit  4: 0, reg_mcdi_reldetlpfmsk13.              det lpf mask13 for vertical blocks, 0~16, default = 0
+#define   MCDI_REL_DET_LPF_MSK_22_30               (0x2f3b)
+#define P_MCDI_REL_DET_LPF_MSK_22_30               (volatile unsigned int *)((0x2f3b  << 2) + 0xff900000)
+//Bit 31:29, reserved
+//Bit 28:24, reg_mcdi_reldetlpfmsk30.              det lpf mask30 for other blocks, 0~16, default = 16
+//Bit 23:21, reserved
+//Bit 20:16, reg_mcdi_reldetlpfmsk24.              det lpf mask24 for horizontal blocks, 0~16, default = 1
+//Bit 15:13, reserved
+//Bit 12: 8, reg_mcdi_reldetlpfmsk23.              det lpf mask23 for horizontal blocks, 0~16, default = 0
+//Bit  7: 5, reserved
+//Bit  4: 0, reg_mcdi_reldetlpfmsk22.              det lpf mask22 for horizontal blocks, 0~16, default = 1
+#define   MCDI_REL_DET_LPF_MSK_31_34               (0x2f3c)
+#define P_MCDI_REL_DET_LPF_MSK_31_34               (volatile unsigned int *)((0x2f3c  << 2) + 0xff900000)
+//Bit 31:29, reserved
+//Bit 28:24, reg_mcdi_reldetlpfmsk34.              det lpf mask34 for other blocks, 0~16, default = 0
+//Bit 23:21, reserved
+//Bit 20:16, reg_mcdi_reldetlpfmsk33.              det lpf mask33 for other blocks, 0~16, default = 0
+//Bit 15:13, reserved
+//Bit 12: 8, reg_mcdi_reldetlpfmsk32.              det lpf mask32 for other blocks, 0~16, default = 0
+//Bit  7: 5, reserved
+//Bit  4: 0, reg_mcdi_reldetlpfmsk31.              det lpf mask31 for other blocks, 0~16, default = 0
+//Note: there are four group lpf masks from addr 37~3b, each group sum equal to 16.
+#define   MCDI_REL_DET_MIN                         (0x2f3d)
+#define P_MCDI_REL_DET_MIN                         (volatile unsigned int *)((0x2f3d  << 2) + 0xff900000)
+//Bit 31: 7, reserved
+//Bit  6: 0, reg_mcdi_reldetmin.                   min of detected value, default = 16
+#define   MCDI_REL_DET_LUT_0_3                     (0x2f3e)
+#define P_MCDI_REL_DET_LUT_0_3                     (volatile unsigned int *)((0x2f3e  << 2) + 0xff900000)
+//Bit 31:24, reg_mcdi_reldetmaplut3.               default = 8
+//Bit 23:16, reg_mcdi_reldetmaplut2.               default = 4
+//Bit 15: 8, reg_mcdi_reldetmaplut1.               default = 2
+//Bit  7: 0, reg_mcdi_reldetmaplut0.               default = 0
+#define   MCDI_REL_DET_LUT_4_7                     (0x2f3f)
+#define P_MCDI_REL_DET_LUT_4_7                     (volatile unsigned int *)((0x2f3f  << 2) + 0xff900000)
+//Bit 31:24, reg_mcdi_reldetmaplut7.               default = 64
+//Bit 23:16, reg_mcdi_reldetmaplut6.               default = 48
+//Bit 15: 8, reg_mcdi_reldetmaplut5.               default = 32
+//Bit  7: 0, reg_mcdi_reldetmaplut4.               default = 16
+#define   MCDI_REL_DET_LUT_8_11                    (0x2f40)
+#define P_MCDI_REL_DET_LUT_8_11                    (volatile unsigned int *)((0x2f40  << 2) + 0xff900000)
+//Bit 31:24, reg_mcdi_reldetmaplut11.              default = 160
+//Bit 23:16, reg_mcdi_reldetmaplut10.              default = 128
+//Bit 15: 8, reg_mcdi_reldetmaplut9.               default = 96
+//Bit  7: 0, reg_mcdi_reldetmaplut8.               default = 80
+#define   MCDI_REL_DET_LUT_12_15                   (0x2f41)
+#define P_MCDI_REL_DET_LUT_12_15                   (volatile unsigned int *)((0x2f41  << 2) + 0xff900000)
+//Bit 31:24, reg_mcdi_reldetmaplut15.              default = 255
+//Bit 23:16, reg_mcdi_reldetmaplut14.              default = 240
+//Bit 15: 8, reg_mcdi_reldetmaplut13.              default = 224
+//Bit  7: 0, reg_mcdi_reldetmaplut12.              default = 192
+#define   MCDI_REL_DET_COL_CFD_THD                 (0x2f42)
+#define P_MCDI_REL_DET_COL_CFD_THD                 (volatile unsigned int *)((0x2f42  << 2) + 0xff900000)
+//Bit 31:24, reg_mcdi_reldetcolcfdfltthd.          thd for flat smaller than (<) of column cofidence, default = 5
+//Bit 23:16, reg_mcdi_reldetcolcfdthd1.            thd for rel larger than (>=) in rel calc. mode col confidence without gmv locking, default = 160
+//Bit 15: 8, reg_mcdi_reldetcolcfdthd0.            thd for rel larger than (>=) in rel calc. mode col confidence when gmv locked, default = 100
+//Bit  7: 2, reg_mcdi_reldetcolcfdbadwthd.         thd for badw larger than (>=) in qbadw calc. mode of column cofidence, default = 16
+//Bit     1, reserved
+//Bit     0, reg_mcdi_reldetcolcfdcalcmode.        calc. mode for column cofidence, 0: use rel, 1: use qbadw, default = 0
+#define   MCDI_REL_DET_COL_CFD_AVG_LUMA            (0x2f43)
+#define P_MCDI_REL_DET_COL_CFD_AVG_LUMA            (volatile unsigned int *)((0x2f43  << 2) + 0xff900000)
+//Bit 31:24, reg_mcdi_reldetcolcfdavgmin1.         avg luma min1 (>=) for column cofidence, valid between 16~235, default = 235
+//Bit 23:16, reg_mcdi_reldetcolcfdavgmax1.         avg luma max1 (<)  for column cofidence, valid between 16~235, default = 235
+//Bit 15: 8, reg_mcdi_reldetcolcfdavgmin0.         avg luma min0 (>=) for column cofidence, valid between 16~235, default = 16
+//Bit  7: 0, reg_mcdi_reldetcolcfdavgmax0.         avg luma max0 (<)  for column cofidence, valid between 16~235, default = 21
+#define   MCDI_REL_DET_BAD_THD_0                   (0x2f44)
+#define P_MCDI_REL_DET_BAD_THD_0                   (volatile unsigned int *)((0x2f44  << 2) + 0xff900000)
+//Bit 31:16, reserved
+//Bit 15: 8, reg_mcdi_reldetbadsadthd.             thd (>=) for bad sad, default = 120 (480/4)
+//Bit  7: 6, reserved
+//Bit  5: 0, reg_mcdi_reldetbadbadwthd.            thd (>=) for bad badw, 0~42, default = 12
+#define   MCDI_REL_DET_BAD_THD_1                   (0x2f45)
+#define P_MCDI_REL_DET_BAD_THD_1                   (volatile unsigned int *)((0x2f45  << 2) + 0xff900000)
+//Bit 31:24, reserved
+//Bit 23:16, reg_mcdi_reldetbadrelfltthd.          thd (>=) of flat for bad rel detection, default = 4
+//Bit 15: 8, reg_mcdi_reldetbadrelthd1.            thd (>=) for bad rel without gmv/lmv locked, default = 160
+//Bit  7: 0, reg_mcdi_reldetbadrelthd0.            thd (>=) for bad rel with gmv/lmv locked, default = 120
+#define   MCDI_PD22_CHK_THD                        (0x2f46)
+#define P_MCDI_PD22_CHK_THD                        (volatile unsigned int *)((0x2f46  << 2) + 0xff900000)
+//Bit 31:25, reserved
+//Bit 24:16, reg_mcdi_pd22chksaddifthd.            sad dif thd (>=) for (pd22chksad - qsad) for pd22 check, default = 64
+//Bit 15:14, reserved
+//Bit 13: 8, reg_mcdi_pd22chkqmvthd.               thd (>=) of abs qmv for pd22 check, default = 2
+//Bit  7: 0, reg_mcdi_pd22chkfltthd.               thd (>=) of flat for pd22 check, default = 4
+#define   MCDI_PD22_CHK_GAIN_OFFST_0               (0x2f47)
+#define P_MCDI_PD22_CHK_GAIN_OFFST_0               (volatile unsigned int *)((0x2f47  << 2) + 0xff900000)
+//Bit 31:24, reg_mcdi_pd22chkedgeoffst0.           offset0 of pd22chkedge from right film22 phase, -128~127, default = 0
+//Bit 23:21, reserved
+//Bit 20:16, reg_mcdi_pd22chkedgegain0.            gain0 of pd22chkedge from right film22 phase, normalized to 16 as '1', default = 16
+//Bit 15:12, reserved
+//Bit 11: 8, reg_mcdi_pd22chkbadwoffst0.           offset0 of pd22chkbadw from right film22 phase, -8~7, default = 0
+//Bit  7: 5, reserved
+//Bit  4: 0, reg_mcdi_pd22chkbadwgain0.            gain0 of pd22chkbadw from right film22 phase, normalized to 16 as '1', default = 8
+#define   MCDI_PD22_CHK_GAIN_OFFST_1               (0x2f48)
+#define P_MCDI_PD22_CHK_GAIN_OFFST_1               (volatile unsigned int *)((0x2f48  << 2) + 0xff900000)
+//Bit 31:24, reg_mcdi_pd22chkedgeoffst1.           offset1 of pd22chkedge from right film22 phase, -128~127, default = 0
+//Bit 23:21, reserved
+//Bit 20:16, reg_mcdi_pd22chkedgegain1.            gain1 of pd22chkedge from right film22 phase, normalized to 16 as '1', default = 16
+//Bit 15:12, reserved
+//Bit 11: 8, reg_mcdi_pd22chkbadwoffst1.           offset1 of pd22chkbadw from right film22 phase, -8~7, default = 0
+//Bit  7: 5, reserved
+//Bit  4: 0, reg_mcdi_pd22chkbadwgain1.            gain1 of pd22chkbadw from right film22 phase, normalized to 16 as '1', default = 12
+#define   MCDI_LMV_LOCK_CNT_THD_GAIN               (0x2f49)
+#define P_MCDI_LMV_LOCK_CNT_THD_GAIN               (volatile unsigned int *)((0x2f49  << 2) + 0xff900000)
+//Bit 31:20, reserved
+//Bit 19:16, reg_mcdi_lmvlockcntmax.               max lmv lock count number, default = 6
+//Bit 15:12, reg_mcdi_lmvlockcntoffst.             offset for lmv lock count, -8~7, default =  0
+//Bit 11: 8, reg_mcdi_lmvlockcntgain.              gain for lmv lock count, normalized 8 as '1', 15 is set to 16, default = 8
+//Bit  7: 5, reserved
+//Bit  4: 0, reg_mcdi_lmvlockcntthd.               lmv count thd (>=) before be locked, 1~31, default = 4
+#define   MCDI_LMV_LOCK_ABS_DIF_THD                (0x2f4a)
+#define P_MCDI_LMV_LOCK_ABS_DIF_THD                (volatile unsigned int *)((0x2f4a  << 2) + 0xff900000)
+//Bit 31:27, reserved
+//Bit 26:24, reg_mcdi_lmvlockdifthd2.              lmv dif thd for third part, before locked, default = 1
+//Bit    23, reserved
+//Bit 22:20, reg_mcdi_lmvlockdifthd1.              lmv dif thd for second part, before locked, default = 1
+//Bit    19, reserved
+//Bit 18:16, reg_mcdi_lmvlockdifthd0.              lmv dif thd for first part, before locked, default = 1
+//Bit 15:13, reserved
+//Bit 12: 8, reg_mcdi_lmvlockabsmax.               max abs (<) of lmv to be locked, default = 24
+//Bit  7: 5, reserved
+//Bit  4: 0, reg_mcdi_lmvlockabsmin.               min abs (>=) of lmv to be locked, default = 1
+#define   MCDI_LMV_LOCK_ROW                        (0x2f4b)
+#define P_MCDI_LMV_LOCK_ROW                        (volatile unsigned int *)((0x2f4b  << 2) + 0xff900000)
+//Bit 31:27, reserved
+//Bit 26:16, reg_mcdi_lmvlockendrow.               end row (<) for lmv lock, default = 2047
+//Bit 15:11, reserved
+//Bit 10: 0, reg_mcdi_lmvlockstartrow.             start row (>=) for lmv lock, default = 0
+#define   MCDI_LMV_LOCK_RT_MODE                    (0x2f4c)
+#define P_MCDI_LMV_LOCK_RT_MODE                    (volatile unsigned int *)((0x2f4c  << 2) + 0xff900000)
+//Bit 31:27, reserved
+//Bit 26:24, reg_mcdi_lmvlockextmode.              extend lines for lmv lock check, check how many lines for lmv locking, default = 2
+//Bit 23:16, reg_mcdi_lmvlockfltcntrt.             ratio of flt cnt for lock check, normalized 256 as '1', 255 is set to 256, default = 32
+//Bit 15: 8, reg_mcdi_lmvlocklmvcntrt1.            ratio when use non-zero lmv for lock check, normalized 256 as '1', 255 is set to 256, default = 48
+//Bit  7: 0, reg_mcdi_lmvlocklmvcntrt0.            ratio when use max lmv for lock check, normalized 256 as '1', 255 is set to 256, default = 106
+#define   MCDI_GMV_LOCK_CNT_THD_GAIN               (0x2f4d)
+#define P_MCDI_GMV_LOCK_CNT_THD_GAIN               (volatile unsigned int *)((0x2f4d  << 2) + 0xff900000)
+//Bit 31:20, reserved
+//Bit 19:16, reg_mcdi_gmvlockcntmax.               max gmv lock count number, default = 6
+//Bit 15:12, reg_mcdi_gmvlockcntoffst.             offset for gmv lock count, -8~7, default =  0
+//Bit 11: 8, reg_mcdi_gmvlockcntgain.              gain for gmv lock count, normalized 8 as '1', 15 is set to 16, default = 8
+//Bit  7: 5, reserved
+//Bit  4: 0, reg_mcdi_gmvlockcntthd.               gmv count thd (>=) before be locked, 1~31, default = 4
+#define   MCDI_GMV_LOCK_ABS_DIF_THD                (0x2f4e)
+#define P_MCDI_GMV_LOCK_ABS_DIF_THD                (volatile unsigned int *)((0x2f4e  << 2) + 0xff900000)
+//Bit 31:27, reserved
+//Bit 26:24, reg_mcdi_gmvlockdifthd2.              gmv dif thd for third part, before locked, default = 3
+//Bit    23, reserved
+//Bit 22:20, reg_mcdi_gmvlockdifthd1.              gmv dif thd for second part, before locked, default = 2
+//Bit    19, reserved
+//Bit 18:16, reg_mcdi_gmvlockdifthd0.              gmv dif thd for first part, before locked, default = 1
+//Bit 15:13, reserved
+//Bit 12: 8, reg_mcdi_gmvlockabsmax.               max abs of gmv to be locked, default = 15
+//Bit  7: 5, reserved
+//Bit  4: 0, reg_mcdi_gmvlockabsmin.               min abs of gmv to be locked, default = 1
+#define   MCDI_HIGH_VERT_FRQ_DIF_THD               (0x2f4f)
+#define P_MCDI_HIGH_VERT_FRQ_DIF_THD               (volatile unsigned int *)((0x2f4f  << 2) + 0xff900000)
+//Bit 31: 0, reg_mcdi_highvertfrqfldavgdifthd.     high_vert_frq field average luma dif thd (>=), 3*Blk_Width*Blk_Height, set by software, default = 103680
+#define   MCDI_HIGH_VERT_FRQ_DIF_DIF_THD           (0x2f50)
+#define P_MCDI_HIGH_VERT_FRQ_DIF_DIF_THD           (volatile unsigned int *)((0x2f50  << 2) + 0xff900000)
+//Bit 31: 0, reg_mcdi_highvertfrqfldavgdifdifthd.  high_vert_frq field average luma dif's dif thd (<), 3*Blk_Width*Blk_Height, set by software, default = 103680
+#define   MCDI_HIGH_VERT_FRQ_RT_GAIN               (0x2f51)
+#define P_MCDI_HIGH_VERT_FRQ_RT_GAIN               (volatile unsigned int *)((0x2f51  << 2) + 0xff900000)
+//Bit 31:20, reserved
+//Bit 19:16, reg_mcdi_highvertfrqcntthd.           high_vert_frq count thd (>=) before locked, 1~31, default = 4
+//Bit 15: 8, reg_mcdi_highvertfrqbadsadrt.         ratio for high_vert_frq bad sad count, normalized 256 as '1', 255 is set to 256, default = 24
+//Bit  7: 0, reg_mcdi_highvertfrqbadbadwrt.        ratio for high_vert_frq badw count, normalized 256 as '1', 255 is set to 256, default = 130
+#define   MCDI_MOTION_PARADOX_THD                  (0x2f52)
+#define P_MCDI_MOTION_PARADOX_THD                  (volatile unsigned int *)((0x2f52  << 2) + 0xff900000)
+//Bit 31:29, reserved
+//Bit 28:24, reg_mcdi_motionparadoxcntthd.         motion paradox count thd (>=) before locked, 1~31, default = 4
+//Bit 23:22, reserved
+//Bit 21:16, reg_mcdi_motionparadoxgmvthd.         abs gmv thd (<) of motion paradox, 0~32, note that 32 means invalid gmv, be careful, default = 32
+//Bit 15: 0, reserved
+#define   MCDI_MOTION_PARADOX_RT                   (0x2f53)
+#define P_MCDI_MOTION_PARADOX_RT                   (volatile unsigned int *)((0x2f53  << 2) + 0xff900000)
+//Bit 31:24, reserved
+//Bit 23:16, reg_mcdi_motionparadoxbadsadrt.       ratio for field bad sad count of motion paradox, normalized 256 as '1', 255 is set to 256, default = 24
+//Bit 15: 8, reg_mcdi_motionparadoxbadrelrt.       ratio for field bad reliabilty count of motion paradox, normalized 256 as '1', 255 is set to 256, default = 120
+//Bit  7: 0, reg_mcdi_motionparadoxmtnrt.          ratio for field motion count of motion paradox, normalized 256 as '1', 255 is set to 256, default = 218
+#define   MCDI_MOTION_REF_THD                      (0x2f54)
+#define P_MCDI_MOTION_REF_THD                      (volatile unsigned int *)((0x2f54  << 2) + 0xff900000)
+//Bit 31:24, reserved
+//Bit 23:20, reg_mcdi_motionrefoffst.              motion ref additive offset, default = 15
+//Bit 19:16, reg_mcdi_motionrefgain.               motion ref gain, normalized 8 as '1', default = 8
+//Bit 15:13, reserved
+//Bit 12: 8, reg_mcdi_motionrefrptmvthd.           abs thd (>=) of rpt mv (0~31, 32 means invalid) for motion ref, default = 1
+//Bit  7: 2, reg_mcdi_motionrefqmvthd.             min thd (>=) of abs qmv for motion ref, note that quarter mv's range is -63~63, default = 2
+//Bit  1: 0, reg_mcdi_motionreflpfmode.            Mv and (8 x repeat flg) 's lpf mode of motion refinement, 0: no lpf, 1: [1 2 1], 2: [1 2 2 2 1], default = 1
+#define   MCDI_REL_COL_REF_RT                      (0x2f55)
+#define P_MCDI_REL_COL_REF_RT                      (volatile unsigned int *)((0x2f55  << 2) + 0xff900000)
+//Bit 31: 8, reserved
+//Bit  7: 0, reg_mcdi_relcolrefrt.                 ratio for column cofidence level against column number, for refinement, default = 135
+#define   MCDI_PD22_CHK_THD_RT                     (0x2f56)
+#define P_MCDI_PD22_CHK_THD_RT                     (volatile unsigned int *)((0x2f56  << 2) + 0xff900000)
+//Bit 31:27, reserved
+//Bit 26:16, reg_mcdi_pd22chkfltcntrt.             ratio for flat count of field pulldown 22 check, normalized 2048 as '1', 2047 is set to 2048, default = 1
+//Bit 15: 8, reg_mcdi_pd22chkcntrt.                ratio of pulldown 22 check count, normalized 256 as '1', 255 is set to 256, default = 100
+//Bit  7: 5, reserved
+//Bit  4: 0, reg_mcdi_pd22chkcntthd.               thd (>=) for pd22 count before locked, 1~31, default = 4
+#define   MCDI_CHAR_DET_DIF_THD                    (0x2f57)
+#define P_MCDI_CHAR_DET_DIF_THD                    (volatile unsigned int *)((0x2f57  << 2) + 0xff900000)
+//Bit 31:24, reserved
+//Bit 23:16, reg_mcdi_chardetminmaxdifthd.         thd (>=) for dif between min and max value, default = 64
+//Bit 15: 8, reg_mcdi_chardetmaxdifthd.            thd (<) for dif between max value, default = 17
+//Bit  7: 0, reg_mcdi_chardetmindifthd.            thd (<) for dif between min value, default = 17
+#define   MCDI_CHAR_DET_CNT_THD                    (0x2f58)
+#define P_MCDI_CHAR_DET_CNT_THD                    (volatile unsigned int *)((0x2f58  << 2) + 0xff900000)
+//Bit 31:21, reserved
+//Bit 20:16, reg_mcdi_chardettotcntthd.            thd (>=) for total count, 0~21, default = 18
+//Bit 15:13, reserved
+//Bit 12: 8, reg_mcdi_chardetmaxcntthd.            thd (>=) for max count, 0~21, default = 1
+//Bit  7: 5, reserved
+//Bit  4: 0, reg_mcdi_chardetmincntthd.            thd (>=) for min count, 0~21, default = 1
+//new add
+#define   MCDI_PD_22_CHK_WND0_X                    (0x2f59)
+#define P_MCDI_PD_22_CHK_WND0_X                    (volatile unsigned int *)((0x2f59  << 2) + 0xff900000)
+//Bit 31:29, reserved
+//Bit 28:16, reg_mcdi_pd22chkwnd0_x1                 u13, x1 for window 0, HSIZE-1, software control, default = 719
+//Bit 15:13, reserved
+//Bit 12: 0, reg_mcdi_pd22chkwnd0_x0                 u13, x0 for window 0, software control, default = 0
+#define   MCDI_PD_22_CHK_WND0_Y                    (0x2f5a)
+#define P_MCDI_PD_22_CHK_WND0_Y                    (volatile unsigned int *)((0x2f5a  << 2) + 0xff900000)
+//Bit 31:29, reserved
+//Bit 28:16, reg_mcdi_pd22chkwnd0_y1                 u13, y1 for window 0  software control, default = 39
+//Bit 15:13, reserved
+//Bit 12: 0, reg_mcdi_pd22chkwnd0_y0                 u13, y0 for window 0, software control, default = 0
+#define   MCDI_PD_22_CHK_WND1_X                    (0x2f5b)
+#define P_MCDI_PD_22_CHK_WND1_X                    (volatile unsigned int *)((0x2f5b  << 2) + 0xff900000)
+//Bit 31:29, reserved
+//Bit 28:16, reg_mcdi_pd22chkwnd1_x1                 u13, x1 for window 1, HSIZE-1, software control, default = 719
+//Bit 15:13, reserved
+//Bit 12: 0, reg_mcdi_pd22chkwnd1_x0                 u13, x0 for window 1, software control, default = 0
+#define   MCDI_PD_22_CHK_WND1_Y                    (0x2f5c)
+#define P_MCDI_PD_22_CHK_WND1_Y                    (volatile unsigned int *)((0x2f5c  << 2) + 0xff900000)
+//Bit 31:29, reserved
+//Bit 28:16, reg_mcdi_pd22chkwnd1_y1                 u13, y1 for window 1  software control, default = 199
+//Bit 15:13, reserved
+//Bit 12: 0, reg_mcdi_pd22chkwnd1_y0                 u13, y0 for window 1, software control, default = 40
+#define   MCDI_PD_22_CHK_FRC_LMV                   (0x2f5d)
+#define P_MCDI_PD_22_CHK_FRC_LMV                   (volatile unsigned int *)((0x2f5d  << 2) + 0xff900000)
+//Bit 31:11, reserved
+//Bit    10, reg_mcdi_pd22chklmvchk2               u1, lmv lock check while force vof for each windows, default = 1
+//Bit     9, reg_mcdi_pd22chklmvchk1               u1, lmv lock check while force vof for each windows, default = 0
+//Bit     8, reg_mcdi_pd22chklmvchk0               u1, lmv lock check while force vof for each windows, default = 0
+//Bit     7, reserved
+//Bit     6, reg_mcdi_pd22chkfrcpd2                u1, force pd flags for each windows, default = 0
+//Bit     5, reg_mcdi_pd22chkfrcpd1                u1, force pd flags for each windows, default = 0
+//Bit     4, reg_mcdi_pd22chkfrcpd0                u1, force pd flags for each windows, default = 0
+//Bit     3, reserved
+//Bit     2, reg_mcdi_pd22chkfrcvof2               u1, force vof flags for each windows, default = 1
+//Bit     1, reg_mcdi_pd22chkfrcvof1               u1, force vof flags for each windows, default = 0
+//Bit     0, reg_mcdi_pd22chkfrcvof0               u1, force vof flags for each windows, default = 0
+#define   MCDI_PD_22_CHK_FLG_CNT                   (0x2f5e)
+#define P_MCDI_PD_22_CHK_FLG_CNT                   (volatile unsigned int *)((0x2f5e  << 2) + 0xff900000)
+//Bit 31:27, reserved.
+//Bit    26, reg_mcdi_pd22chkflg2.                     pull down 22 flag of prevoius one field. initial = 0
+//Bit    25, reg_mcdi_pd22chkflg1.                     pull down 22 flag of prevoius one field. initial = 0
+//Bit    24, reg_mcdi_pd22chkflg.                      pull down 22 flag of prevoius one field. initial = 0
+//Bit 23:16, reg_mcdi_pd22chkcnt2.                     pull down 22 count till prevoius one field. initial = 0
+//Bit 15: 8, reg_mcdi_pd22chkcnt1.                     pull down 22 count till prevoius one field. initial = 0
+//Bit  7: 0, reg_mcdi_pd22chkcnt.                      pull down 22 count till prevoius one field. initial = 0
+#define   MCDI_RO_FLD_PD_22_PRE_CNT1               (0x2fca)
+#define P_MCDI_RO_FLD_PD_22_PRE_CNT1               (volatile unsigned int *)((0x2fca  << 2) + 0xff900000)
+//Bit 31: 0, ro_mcdi_fldpd22precnt1.              prevoius pd22 check count of whole pre one field (block based). initial = 0
+#define   MCDI_RO_FLD_PD_22_FOR_CNT1               (0x2fcb)
+#define P_MCDI_RO_FLD_PD_22_FOR_CNT1               (volatile unsigned int *)((0x2fcb  << 2) + 0xff900000)
+//Bit 31: 0, ro_mcdi_fldpd22forcnt1.              forward pd22 check count of whole pre one field (block based). initial = 0
+#define   MCDI_RO_FLD_PD_22_FLT_CNT1               (0x2fcc)
+#define P_MCDI_RO_FLD_PD_22_FLT_CNT1               (volatile unsigned int *)((0x2fcc  << 2) + 0xff900000)
+//Bit 31: 0, ro_mcdi_fldpd22fltcnt1.              flat count (for pd22 check) of whole pre one field (block based). initial = 0
+#define   MCDI_RO_FLD_PD_22_PRE_CNT2               (0x2fcd)
+#define P_MCDI_RO_FLD_PD_22_PRE_CNT2               (volatile unsigned int *)((0x2fcd  << 2) + 0xff900000)
+//Bit 31: 0, ro_mcdi_fldpd22precnt2.              prevoius pd22 check count of whole pre one field (block based). initial = 0
+#define   MCDI_RO_FLD_PD_22_FOR_CNT2               (0x2fce)
+#define P_MCDI_RO_FLD_PD_22_FOR_CNT2               (volatile unsigned int *)((0x2fce  << 2) + 0xff900000)
+//Bit 31: 0, ro_mcdi_fldpd22forcnt2.              forward pd22 check count of whole pre one field (block based). initial = 0
+#define   MCDI_RO_FLD_PD_22_FLT_CNT2               (0x2fcf)
+#define P_MCDI_RO_FLD_PD_22_FLT_CNT2               (volatile unsigned int *)((0x2fcf  << 2) + 0xff900000)
+//Bit 31: 0, ro_mcdi_fldpd22fltcnt2.              flat count (for pd22 check) of whole pre one field (block based). initial = 0
+#define   MCDI_FIELD_MV                            (0x2f60)
+#define P_MCDI_FIELD_MV                            (volatile unsigned int *)((0x2f60  << 2) + 0xff900000)
+//Bit 31:24, reg_mcdi_pd22chkcnt
+//Bit 23:16, reg_mcdi_fieldgmvcnt
+//Bit    15, reg_mcdi_pd22chkflg
+//Bit    14, reg_mcdi_fieldgmvlock
+//Bit 13: 8, reg_mcdi_fieldrptmv.    	           last field rpt mv
+//Bit  7: 6, reserved
+//Bit  5: 0, reg_mcdi_fieldgmv.                    last field gmv
+#define   MCDI_FIELD_HVF_PRDX_CNT                  (0x2f61)
+#define P_MCDI_FIELD_HVF_PRDX_CNT                  (volatile unsigned int *)((0x2f61  << 2) + 0xff900000)
+//Bit 31:24, reg_mcdi_motionparadoxcnt.
+//Bit 23:17, reserved
+//Bit    16, reg_mcdi_motionparadoxflg.
+//Bit 15: 8, reg_mcdi_highvertfrqcnt.
+//Bit  7: 4, reserved
+//Bit  3: 2, reg_mcdi_highvertfrqphase.
+//Bit     1, reserved
+//Bit     0, reg_mcdi_highvertfrqflg.
+#define   MCDI_FIELD_LUMA_AVG_SUM_0                (0x2f62)
+#define P_MCDI_FIELD_LUMA_AVG_SUM_0                (volatile unsigned int *)((0x2f62  << 2) + 0xff900000)
+//Bit 31: 0, reg_mcdi_fld_luma_avg_sum0.
+#define   MCDI_FIELD_LUMA_AVG_SUM_1                (0x2f63)
+#define P_MCDI_FIELD_LUMA_AVG_SUM_1                (volatile unsigned int *)((0x2f63  << 2) + 0xff900000)
+//Bit 31: 0, reg_mcdi_fld_luma_avg_sum1.
+#define   MCDI_YCBCR_BLEND_CRTL                    (0x2f64)
+#define P_MCDI_YCBCR_BLEND_CRTL                    (volatile unsigned int *)((0x2f64  << 2) + 0xff900000)
+//Bit 31:16, reserved
+//Bit 15: 8, reg_mcdi_ycbcrblendgain.              ycbcr blending gain for cbcr in ycbcr. default = 0
+//Bit  7: 2, reserved.
+//Bit  1: 0, reg_mcdi_ycbcrblendmode.              0:y+cmb(cb,cr), 1:med(r,g,b), 2:max(r,g,b), default = 2
+#define   MCDI_MCVECWR_CANVAS_SIZE                 (0x2f65)
+#define P_MCDI_MCVECWR_CANVAS_SIZE                 (volatile unsigned int *)((0x2f65  << 2) + 0xff900000)
+#define   MCDI_MCVECRD_CANVAS_SIZE                 (0x2f66)
+#define P_MCDI_MCVECRD_CANVAS_SIZE                 (volatile unsigned int *)((0x2f66  << 2) + 0xff900000)
+#define   MCDI_MCINFOWR_CANVAS_SIZE                (0x2f67)
+#define P_MCDI_MCINFOWR_CANVAS_SIZE                (volatile unsigned int *)((0x2f67  << 2) + 0xff900000)
+#define   MCDI_MCINFORD_CANVAS_SIZE                (0x2f68)
+#define P_MCDI_MCINFORD_CANVAS_SIZE                (volatile unsigned int *)((0x2f68  << 2) + 0xff900000)
+#define   MCDI_MCVECWR_X                           (0x2f92)
+#define P_MCDI_MCVECWR_X                           (volatile unsigned int *)((0x2f92  << 2) + 0xff900000)
+#define   MCDI_MCVECWR_Y                           (0x2f93)
+#define P_MCDI_MCVECWR_Y                           (volatile unsigned int *)((0x2f93  << 2) + 0xff900000)
+#define   MCDI_MCVECWR_CTRL                        (0x2f94)
+#define P_MCDI_MCVECWR_CTRL                        (volatile unsigned int *)((0x2f94  << 2) + 0xff900000)
+#define   MCDI_MCVECRD_X                           (0x2f95)
+#define P_MCDI_MCVECRD_X                           (volatile unsigned int *)((0x2f95  << 2) + 0xff900000)
+#define   MCDI_MCVECRD_Y                           (0x2f96)
+#define P_MCDI_MCVECRD_Y                           (volatile unsigned int *)((0x2f96  << 2) + 0xff900000)
+#define   MCDI_MCVECRD_CTRL                        (0x2f97)
+#define P_MCDI_MCVECRD_CTRL                        (volatile unsigned int *)((0x2f97  << 2) + 0xff900000)
+#define   MCDI_MCINFOWR_X                          (0x2f98)
+#define P_MCDI_MCINFOWR_X                          (volatile unsigned int *)((0x2f98  << 2) + 0xff900000)
+#define   MCDI_MCINFOWR_Y                          (0x2f99)
+#define P_MCDI_MCINFOWR_Y                          (volatile unsigned int *)((0x2f99  << 2) + 0xff900000)
+#define   MCDI_MCINFOWR_CTRL                       (0x2f9a)
+#define P_MCDI_MCINFOWR_CTRL                       (volatile unsigned int *)((0x2f9a  << 2) + 0xff900000)
+#define   MCDI_MCINFORD_X                          (0x2f9b)
+#define P_MCDI_MCINFORD_X                          (volatile unsigned int *)((0x2f9b  << 2) + 0xff900000)
+#define   MCDI_MCINFORD_Y                          (0x2f9c)
+#define P_MCDI_MCINFORD_Y                          (volatile unsigned int *)((0x2f9c  << 2) + 0xff900000)
+#define   MCDI_MCINFORD_CTRL                       (0x2f9d)
+#define P_MCDI_MCINFORD_CTRL                       (volatile unsigned int *)((0x2f9d  << 2) + 0xff900000)
+// ================================================================== MC registers ========================================================================================================
+#define   MCDI_MC_CRTL                             (0x2f70)
+#define P_MCDI_MC_CRTL                             (volatile unsigned int *)((0x2f70  << 2) + 0xff900000)
+//Bit 31: 9, reserved
+//Bit     8, reg_mcdi_mcpreflg.                    flag to use previous field for MC, 0:forward field, 1: previous field, default = 1
+//Bit     7, reg_mcdi_mcrelrefbycolcfden.          enable rel refinement by column cofidence in mc blending, default = 1
+//Bit  6: 5, reg_mcdi_mclpfen.                     enable mc pixles/rel lpf, 0:disable, 1: lpf rel, 2: lpf mc pxls, 3: lpf both rel and mc pxls, default = 0
+//Bit  4: 2, reg_mcdi_mcdebugmode.                 enable mc debug mode, 0:disable, 1: split left/right, 2: split top/bottom, 3: debug mv, 4: debug rel, default = 0
+//Bit  1: 0, reg_mcdi_mcen.                        mcdi enable mode, 0:disable, 1: blend with ma, 2: full mc, default = 1
+#define   MCDI_MC_LPF_MSK_0                        (0x2f71)
+#define P_MCDI_MC_LPF_MSK_0                        (volatile unsigned int *)((0x2f71  << 2) + 0xff900000)
+//Bit 31:21, reserved
+//Bit 20:16, reg_mcdi_mclpfmsk02.                  mc lpf coef. 2 for pixel 0 of current block, normalized 16 as '1', default = 0
+//Bit 15:13, reserved
+//Bit 12: 8, reg_mcdi_mclpfmsk01.                  mc lpf coef. 1 for pixel 0 of current block, normalized 16 as '1', default = 9
+//Bit  7: 5, reserved
+//Bit  4: 0, reg_mcdi_mclpfmsk00.                  mc lpf coef. 0 for pixel 0 of current block, normalized 16 as '1', default = 7
+#define   MCDI_MC_LPF_MSK_1                        (0x2f72)
+#define P_MCDI_MC_LPF_MSK_1                        (volatile unsigned int *)((0x2f72  << 2) + 0xff900000)
+//Bit 31:21, reserved
+//Bit 20:16, reg_mcdi_mclpfmsk12.                  mc lpf coef. 2 for pixel 1 of current block, 0~16, normalized 16 as '1', default = 0
+//Bit 15:13, reserved
+//Bit 12: 8, reg_mcdi_mclpfmsk11.                  mc lpf coef. 1 for pixel 1 of current block, 0~16, normalized 16 as '1', default = 11
+//Bit  7: 5, reserved
+//Bit  4: 0, reg_mcdi_mclpfmsk10.                  mc lpf coef. 0 for pixel 1 of current block, 0~16, normalized 16 as '1', default = 5
+#define   MCDI_MC_LPF_MSK_2                        (0x2f73)
+#define P_MCDI_MC_LPF_MSK_2                        (volatile unsigned int *)((0x2f73  << 2) + 0xff900000)
+//Bit 31:21, reserved
+//Bit 20:16, reg_mcdi_mclpfmsk22.                  mc lpf coef. 2 for pixel 2 of current block, 0~16, normalized 16 as '1', default = 1
+//Bit 15:13, reserved
+//Bit 12: 8, reg_mcdi_mclpfmsk21.                  mc lpf coef. 1 for pixel 2 of current block, 0~16, normalized 16 as '1', default = 14
+//Bit  7: 5, reserved
+//Bit  4: 0, reg_mcdi_mclpfmsk20.                  mc lpf coef. 0 for pixel 2 of current block, 0~16, normalized 16 as '1', default = 1
+#define   MCDI_MC_LPF_MSK_3                        (0x2f74)
+#define P_MCDI_MC_LPF_MSK_3                        (volatile unsigned int *)((0x2f74  << 2) + 0xff900000)
+//Bit 31:21, reserved
+//Bit 20:16, reg_mcdi_mclpfmsk32.                  mc lpf coef. 2 for pixel 3 of current block, 0~16, normalized 16 as '1', default = 5
+//Bit 15:13, reserved
+//Bit 12: 8, reg_mcdi_mclpfmsk31.                  mc lpf coef. 1 for pixel 3 of current block, 0~16, normalized 16 as '1', default = 11
+//Bit  7: 5, reserved
+//Bit  4: 0, reg_mcdi_mclpfmsk30.                  mc lpf coef. 0 for pixel 3 of current block, 0~16, normalized 16 as '1', default = 0
+#define   MCDI_MC_LPF_MSK_4                        (0x2f75)
+#define P_MCDI_MC_LPF_MSK_4                        (volatile unsigned int *)((0x2f75  << 2) + 0xff900000)
+//Bit 31:21, reserved
+//Bit 20:16, reg_mcdi_mclpfmsk42.                  mc lpf coef. 2 for pixel 4 of current block, 0~16, normalized 16 as '1', default = 7
+//Bit 15:13, reserved
+//Bit 12: 8, reg_mcdi_mclpfmsk41.                  mc lpf coef. 1 for pixel 4 of current block, 0~16, normalized 16 as '1', default = 9
+//Bit  7: 5, reserved
+//Bit  4: 0, reg_mcdi_mclpfmsk40.                  mc lpf coef. 0 for pixel 4 of current block, 0~16, normalized 16 as '1', default = 0
+#define   MCDI_MC_REL_GAIN_OFFST_0                 (0x2f76)
+#define P_MCDI_MC_REL_GAIN_OFFST_0                 (volatile unsigned int *)((0x2f76  << 2) + 0xff900000)
+//Bit 31:26, reserved
+//Bit    25, reg_mcdi_mcmotionparadoxflg.          flag of motion paradox, initial with 0 and read from software, default = 0
+//Bit    24, reg_mcdi_mchighvertfrqflg.            flag of high vert frq, initial with 0 and read from software, default = 0
+//Bit 23:16, reg_mcdi_mcmotionparadoxoffst.        offset (rel + offset) for rel (MC blending coef.) refinement if motion paradox detected before MC blending before MC blending, default = 128
+//Bit 15:12, reserved
+//Bit 11: 8, reg_mcdi_mcmotionparadoxgain.         gain for rel (MC blending coef.) refinement if motion paradox detected before MC blending, normalized 8 as '1', set 15 to 16, default = 8
+//Bit  7: 4, reg_mcdi_mchighvertfrqoffst.          minus offset (alpha - offset) for motion (MA blending coef.) refinement if high vertical frequency detected before MA blending, default = 15
+//Bit  3: 0, reg_mcdi_mchighvertfrqgain.           gain for motion (MA blending coef.) refinement if high vertical frequency detected before MA blending, normalized 8 as '1', set 15 to 16, default = 8
+#define   MCDI_MC_REL_GAIN_OFFST_1                 (0x2f77)
+#define P_MCDI_MC_REL_GAIN_OFFST_1                 (volatile unsigned int *)((0x2f77  << 2) + 0xff900000)
+//Bit 31:24, reg_mcdi_mcoutofboundrayoffst.        offset (rel + offset) for rel (MC blending coef.) refinement if MC pointed out of boundray before MC blending before MC blending, default = 255
+//Bit 23:20, reserved
+//Bit 19:16, reg_mcdi_mcoutofboundraygain.         gain for rel (MC blending coef.) refinement if MC pointed out of boundray before MC blending, normalized 8 as '1', set 15 to 16, default = 8
+//Bit 15: 8, reg_mcdi_mcrelrefbycolcfdoffst.       offset (rel + offset) for rel (MC blending coef.) refinement if motion paradox detected before MC blending before MC blending, default = 255
+//Bit  7: 4, reserved.
+//Bit  3: 0, reg_mcdi_mcrelrefbycolcfdgain.        gain for rel (MC blending coef.) refinement if column cofidence failed before MC blending, normalized 8 as '1', set 15 to 16, default = 8
+#define   MCDI_MC_COL_CFD_0                        (0x2f78)
+#define P_MCDI_MC_COL_CFD_0                        (volatile unsigned int *)((0x2f78  << 2) + 0xff900000)
+//Bit 31: 0, mcdi_mc_col_cfd_0.                    column cofidence value 0 read from software. initial = 0
+#define   MCDI_MC_COL_CFD_1                        (0x2f79)
+#define P_MCDI_MC_COL_CFD_1                        (volatile unsigned int *)((0x2f79  << 2) + 0xff900000)
+//Bit 31: 0, mcdi_mc_col_cfd_1.                    column cofidence value 1 read from software. initial = 0
+#define   MCDI_MC_COL_CFD_2                        (0x2f7a)
+#define P_MCDI_MC_COL_CFD_2                        (volatile unsigned int *)((0x2f7a  << 2) + 0xff900000)
+//Bit 31: 0, mcdi_mc_col_cfd_2.                    column cofidence value 2 read from software. initial = 0
+#define   MCDI_MC_COL_CFD_3                        (0x2f7b)
+#define P_MCDI_MC_COL_CFD_3                        (volatile unsigned int *)((0x2f7b  << 2) + 0xff900000)
+//Bit 31: 0, mcdi_mc_col_cfd_3.                    column cofidence value 3 read from software. initial = 0
+#define   MCDI_MC_COL_CFD_4                        (0x2f7c)
+#define P_MCDI_MC_COL_CFD_4                        (volatile unsigned int *)((0x2f7c  << 2) + 0xff900000)
+//Bit 31: 0, mcdi_mc_col_cfd_4.                    column cofidence value 4 read from software. initial = 0
+#define   MCDI_MC_COL_CFD_5                        (0x2f7d)
+#define P_MCDI_MC_COL_CFD_5                        (volatile unsigned int *)((0x2f7d  << 2) + 0xff900000)
+//Bit 31: 0, mcdi_mc_col_cfd_5.                    column cofidence value 5 read from software. initial = 0
+#define   MCDI_MC_COL_CFD_6                        (0x2f7e)
+#define P_MCDI_MC_COL_CFD_6                        (volatile unsigned int *)((0x2f7e  << 2) + 0xff900000)
+//Bit 31: 0, mcdi_mc_col_cfd_6.                    column cofidence value 6 read from software. initial = 0
+#define   MCDI_MC_COL_CFD_7                        (0x2f7f)
+#define P_MCDI_MC_COL_CFD_7                        (volatile unsigned int *)((0x2f7f  << 2) + 0xff900000)
+//Bit 31: 0, mcdi_mc_col_cfd_7.                    column cofidence value 7 read from software. initial = 0
+#define   MCDI_MC_COL_CFD_8                        (0x2f80)
+#define P_MCDI_MC_COL_CFD_8                        (volatile unsigned int *)((0x2f80  << 2) + 0xff900000)
+//Bit 31: 0, mcdi_mc_col_cfd_8.                    column cofidence value 8 read from software. initial = 0
+#define   MCDI_MC_COL_CFD_9                        (0x2f81)
+#define P_MCDI_MC_COL_CFD_9                        (volatile unsigned int *)((0x2f81  << 2) + 0xff900000)
+//Bit 31: 0, mcdi_mc_col_cfd_9.                    column cofidence value 9 read from software. initial = 0
+#define   MCDI_MC_COL_CFD_10                       (0x2f82)
+#define P_MCDI_MC_COL_CFD_10                       (volatile unsigned int *)((0x2f82  << 2) + 0xff900000)
+//Bit 31: 0, mcdi_mc_col_cfd_10.                   column cofidence value 10 read from software. initial = 0
+#define   MCDI_MC_COL_CFD_11                       (0x2f83)
+#define P_MCDI_MC_COL_CFD_11                       (volatile unsigned int *)((0x2f83  << 2) + 0xff900000)
+//Bit 31: 0, mcdi_mc_col_cfd_11.                   column cofidence value 11 read from software. initial = 0
+#define   MCDI_MC_COL_CFD_12                       (0x2f84)
+#define P_MCDI_MC_COL_CFD_12                       (volatile unsigned int *)((0x2f84  << 2) + 0xff900000)
+//Bit 31: 0, mcdi_mc_col_cfd_12.                   column cofidence value 12 read from software. initial = 0
+#define   MCDI_MC_COL_CFD_13                       (0x2f85)
+#define P_MCDI_MC_COL_CFD_13                       (volatile unsigned int *)((0x2f85  << 2) + 0xff900000)
+//Bit 31: 0, mcdi_mc_col_cfd_13.                   column cofidence value 13 read from software. initial = 0
+#define   MCDI_MC_COL_CFD_14                       (0x2f86)
+#define P_MCDI_MC_COL_CFD_14                       (volatile unsigned int *)((0x2f86  << 2) + 0xff900000)
+//Bit 31: 0, mcdi_mc_col_cfd_14.                   column cofidence value 14 read from software. initial = 0
+#define   MCDI_MC_COL_CFD_15                       (0x2f87)
+#define P_MCDI_MC_COL_CFD_15                       (volatile unsigned int *)((0x2f87  << 2) + 0xff900000)
+//Bit 31: 0, mcdi_mc_col_cfd_15.                   column cofidence value 15 read from software. initial = 0
+#define   MCDI_MC_COL_CFD_16                       (0x2f88)
+#define P_MCDI_MC_COL_CFD_16                       (volatile unsigned int *)((0x2f88  << 2) + 0xff900000)
+//Bit 31: 0, mcdi_mc_col_cfd_16.                   column cofidence value 16 read from software. initial = 0
+#define   MCDI_MC_COL_CFD_17                       (0x2f89)
+#define P_MCDI_MC_COL_CFD_17                       (volatile unsigned int *)((0x2f89  << 2) + 0xff900000)
+//Bit 31: 0, mcdi_mc_col_cfd_17.                   column cofidence value 17 read from software. initial = 0
+#define   MCDI_MC_COL_CFD_18                       (0x2f8a)
+#define P_MCDI_MC_COL_CFD_18                       (volatile unsigned int *)((0x2f8a  << 2) + 0xff900000)
+//Bit 31: 0, mcdi_mc_col_cfd_18.                   column cofidence value 18 read from software. initial = 0
+#define   MCDI_MC_COL_CFD_19                       (0x2f8b)
+#define P_MCDI_MC_COL_CFD_19                       (volatile unsigned int *)((0x2f8b  << 2) + 0xff900000)
+//Bit 31: 0, mcdi_mc_col_cfd_19.                   column cofidence value 19 read from software. initial = 0
+#define   MCDI_MC_COL_CFD_20                       (0x2f8c)
+#define P_MCDI_MC_COL_CFD_20                       (volatile unsigned int *)((0x2f8c  << 2) + 0xff900000)
+//Bit 31: 0, mcdi_mc_col_cfd_20.                   column cofidence value 20 read from software. initial = 0
+#define   MCDI_MC_COL_CFD_21                       (0x2f8d)
+#define P_MCDI_MC_COL_CFD_21                       (volatile unsigned int *)((0x2f8d  << 2) + 0xff900000)
+//Bit 31: 0, mcdi_mc_col_cfd_21.                   column cofidence value 21 read from software. initial = 0
+#define   MCDI_MC_COL_CFD_22                       (0x2f8e)
+#define P_MCDI_MC_COL_CFD_22                       (volatile unsigned int *)((0x2f8e  << 2) + 0xff900000)
+//Bit 31: 0, mcdi_mc_col_cfd_22.                   column cofidence value 22 read from software. initial = 0
+#define   MCDI_MC_COL_CFD_23                       (0x2f8f)
+#define P_MCDI_MC_COL_CFD_23                       (volatile unsigned int *)((0x2f8f  << 2) + 0xff900000)
+//Bit 31: 0, mcdi_mc_col_cfd_23.                   column cofidence value 23 read from software. initial = 0
+#define   MCDI_MC_COL_CFD_24                       (0x2f90)
+#define P_MCDI_MC_COL_CFD_24                       (volatile unsigned int *)((0x2f90  << 2) + 0xff900000)
+//Bit 31: 0, mcdi_mc_col_cfd_24.                   column cofidence value 24 read from software. initial = 0
+#define   MCDI_MC_COL_CFD_25                       (0x2f91)
+#define P_MCDI_MC_COL_CFD_25                       (volatile unsigned int *)((0x2f91  << 2) + 0xff900000)
+//Bit 31: 0, mcdi_mc_col_cfd_25.                   column cofidence value 25 read from software. initial = 0
+// ===================================================================================== PRE RO Registers ==========================================================================================
+#define   MCDI_RO_FLD_LUMA_AVG_SUM                 (0x2fa0)
+#define P_MCDI_RO_FLD_LUMA_AVG_SUM                 (volatile unsigned int *)((0x2fa0  << 2) + 0xff900000)
+//Bit 31: 0, ro_mcdi_fldlumaavgsum.                block's luma avg sum of current filed (block based). initial = 0
+#define   MCDI_RO_GMV_VLD_CNT                      (0x2fa1)
+#define P_MCDI_RO_GMV_VLD_CNT                      (volatile unsigned int *)((0x2fa1  << 2) + 0xff900000)
+//Bit 31: 0, ro_mcdi_gmvvldcnt.                    valid gmv's count of pre one filed (block based). initial = 0
+#define   MCDI_RO_RPT_FLG_CNT                      (0x2fa2)
+#define P_MCDI_RO_RPT_FLG_CNT                      (volatile unsigned int *)((0x2fa2  << 2) + 0xff900000)
+//Bit 31: 0, ro_mcdi_rptflgcnt.                    repeat mv's count of pre one filed (block based). initial = 0
+#define   MCDI_RO_FLD_BAD_SAD_CNT                  (0x2fa3)
+#define P_MCDI_RO_FLD_BAD_SAD_CNT                  (volatile unsigned int *)((0x2fa3  << 2) + 0xff900000)
+//Bit 31: 0, ro_mcdi_fldbadsadcnt.                 bad sad count of whole pre one field (block based). initial = 0
+#define   MCDI_RO_FLD_BAD_BADW_CNT                 (0x2fa4)
+#define P_MCDI_RO_FLD_BAD_BADW_CNT                 (volatile unsigned int *)((0x2fa4  << 2) + 0xff900000)
+//Bit 31: 0, ro_mcdi_fldbadbadwcnt.                bad badw count of whole pre one field (block based). initial = 0
+#define   MCDI_RO_FLD_BAD_REL_CNT                  (0x2fa5)
+#define P_MCDI_RO_FLD_BAD_REL_CNT                  (volatile unsigned int *)((0x2fa5  << 2) + 0xff900000)
+//Bit 31: 0, ro_mcdi_fldbadrelcnt.                 bad rel count of whole pre one field (block based). initial = 0
+#define   MCDI_RO_FLD_MTN_CNT                      (0x2fa6)
+#define P_MCDI_RO_FLD_MTN_CNT                      (volatile unsigned int *)((0x2fa6  << 2) + 0xff900000)
+//Bit 31: 0, ro_mcdi_fldmtncnt.                    motion count of whole pre one field (pixel based). initial = 0
+#define   MCDI_RO_FLD_VLD_CNT                      (0x2fa7)
+#define P_MCDI_RO_FLD_VLD_CNT                      (volatile unsigned int *)((0x2fa7  << 2) + 0xff900000)
+//Bit 31: 0, ro_mcdi_fldvldcnt.                    valid motion count of whole pre one field (pixel based). initial = 0
+#define   MCDI_RO_FLD_PD_22_PRE_CNT                (0x2fa8)
+#define P_MCDI_RO_FLD_PD_22_PRE_CNT                (volatile unsigned int *)((0x2fa8  << 2) + 0xff900000)
+//Bit 31: 0, ro_mcdi_fldpd22precnt.                prevoius pd22 check count of whole pre one field (block based). initial = 0
+#define   MCDI_RO_FLD_PD_22_FOR_CNT                (0x2fa9)
+#define P_MCDI_RO_FLD_PD_22_FOR_CNT                (volatile unsigned int *)((0x2fa9  << 2) + 0xff900000)
+//Bit 31: 0, ro_mcdi_fldpd22forcnt.                forward pd22 check count of whole pre one field (block based). initial = 0
+#define   MCDI_RO_FLD_PD_22_FLT_CNT                (0x2faa)
+#define P_MCDI_RO_FLD_PD_22_FLT_CNT                (volatile unsigned int *)((0x2faa  << 2) + 0xff900000)
+//Bit 31: 0, ro_mcdi_fldpd22fltcnt.                flat count (for pd22 check) of whole pre one field (block based). initial = 0
+#define   MCDI_RO_HIGH_VERT_FRQ_FLG                (0x2fab)
+#define P_MCDI_RO_HIGH_VERT_FRQ_FLG                (volatile unsigned int *)((0x2fab  << 2) + 0xff900000)
+//Bit 31:16, reserved.
+//Bit 15: 8, ro_mcdi_highvertfrqcnt.               high vertical frequency count till prevoius one field. initial = 0
+//Bit  7: 3, reserved.
+//Bit  2: 1, ro_mcdi_highvertfrqphase.             high vertical frequency phase of prevoius one field. initial = 2
+//Bit     0, ro_mcdi_highvertfrqflg.               high vertical frequency flag of prevoius one field. initial = 0
+#define   MCDI_RO_GMV_LOCK_FLG                     (0x2fac)
+#define P_MCDI_RO_GMV_LOCK_FLG                     (volatile unsigned int *)((0x2fac  << 2) + 0xff900000)
+//Bit 31:16, reserved.
+//Bit 15: 8, ro_mcdi_gmvlckcnt.                    global mv lock count till prevoius one field. initial = 0
+//Bit  7: 2, ro_mcdi_gmv.                          global mv of prevoius one field. -31~31, initial = 32 (invalid value)
+//Bit     1, ro_mcdi_zerogmvlckflg.                zero global mv lock flag of prevoius one field. initial = 0
+//Bit     0, ro_mcdi_gmvlckflg.                    global mv lock flag of prevoius one field. initial = 0
+#define   MCDI_RO_RPT_MV                           (0x2fad)
+#define P_MCDI_RO_RPT_MV                           (volatile unsigned int *)((0x2fad  << 2) + 0xff900000)
+//Bit 5: 0, ro_mcdi_rptmv.                         repeate mv of prevoius one field. -31~31, initial = 32 (invalid value)
+#define   MCDI_RO_MOTION_PARADOX_FLG               (0x2fae)
+#define P_MCDI_RO_MOTION_PARADOX_FLG               (volatile unsigned int *)((0x2fae  << 2) + 0xff900000)
+//Bit 31:16, reserved.
+//Bit 15: 8, ro_mcdi_motionparadoxcnt.             motion paradox count till prevoius one field. initial = 0
+//Bit  7: 1, reserved.
+//Bit     0, ro_mcdi_motionparadoxflg.             motion paradox flag of prevoius one field. initial = 0
+#define   MCDI_RO_PD_22_FLG                        (0x2faf)
+#define P_MCDI_RO_PD_22_FLG                        (volatile unsigned int *)((0x2faf  << 2) + 0xff900000)
+//Bit 31:27, reserved.
+//Bit    26, ro_mcdi_pd22flg2.                     pull down 22 flag of prevoius one field. initial = 0
+//Bit    25, ro_mcdi_pd22flg1.                     pull down 22 flag of prevoius one field. initial = 0
+//Bit    24, ro_mcdi_pd22flg.                      pull down 22 flag of prevoius one field. initial = 0
+//Bit 23:16, ro_mcdi_pd22cnt2.                     pull down 22 count till prevoius one field. initial = 0
+//Bit 15: 8, ro_mcdi_pd22cnt1.                     pull down 22 count till prevoius one field. initial = 0
+//Bit  7: 0, ro_mcdi_pd22cnt.                      pull down 22 count till prevoius one field. initial = 0
+#define   MCDI_RO_COL_CFD_0                        (0x2fb0)
+#define P_MCDI_RO_COL_CFD_0                        (volatile unsigned int *)((0x2fb0  << 2) + 0xff900000)
+//Bit 31: 0, ro_mcdi_col_cfd_0.                    column cofidence value 0. initial = 0
+#define   MCDI_RO_COL_CFD_1                        (0x2fb1)
+#define P_MCDI_RO_COL_CFD_1                        (volatile unsigned int *)((0x2fb1  << 2) + 0xff900000)
+//Bit 31: 0, ro_mcdi_col_cfd_1.                    column cofidence value 1. initial = 0
+#define   MCDI_RO_COL_CFD_2                        (0x2fb2)
+#define P_MCDI_RO_COL_CFD_2                        (volatile unsigned int *)((0x2fb2  << 2) + 0xff900000)
+//Bit 31: 0, ro_mcdi_col_cfd_2.                    column cofidence value 2. initial = 0
+#define   MCDI_RO_COL_CFD_3                        (0x2fb3)
+#define P_MCDI_RO_COL_CFD_3                        (volatile unsigned int *)((0x2fb3  << 2) + 0xff900000)
+//Bit 31: 0, ro_mcdi_col_cfd_3.                    column cofidence value 3. initial = 0
+#define   MCDI_RO_COL_CFD_4                        (0x2fb4)
+#define P_MCDI_RO_COL_CFD_4                        (volatile unsigned int *)((0x2fb4  << 2) + 0xff900000)
+//Bit 31: 0, ro_mcdi_col_cfd_4.                    column cofidence value 4. initial = 0
+#define   MCDI_RO_COL_CFD_5                        (0x2fb5)
+#define P_MCDI_RO_COL_CFD_5                        (volatile unsigned int *)((0x2fb5  << 2) + 0xff900000)
+//Bit 31: 0, ro_mcdi_col_cfd_5.                    column cofidence value 5. initial = 0
+#define   MCDI_RO_COL_CFD_6                        (0x2fb6)
+#define P_MCDI_RO_COL_CFD_6                        (volatile unsigned int *)((0x2fb6  << 2) + 0xff900000)
+//Bit 31: 0, ro_mcdi_col_cfd_6.                    column cofidence value 6. initial = 0
+#define   MCDI_RO_COL_CFD_7                        (0x2fb7)
+#define P_MCDI_RO_COL_CFD_7                        (volatile unsigned int *)((0x2fb7  << 2) + 0xff900000)
+//Bit 31: 0, ro_mcdi_col_cfd_7.                    column cofidence value 7. initial = 0
+#define   MCDI_RO_COL_CFD_8                        (0x2fb8)
+#define P_MCDI_RO_COL_CFD_8                        (volatile unsigned int *)((0x2fb8  << 2) + 0xff900000)
+//Bit 31: 0, ro_mcdi_col_cfd_8.                    column cofidence value 8. initial = 0
+#define   MCDI_RO_COL_CFD_9                        (0x2fb9)
+#define P_MCDI_RO_COL_CFD_9                        (volatile unsigned int *)((0x2fb9  << 2) + 0xff900000)
+//Bit 31: 0, ro_mcdi_col_cfd_9.                    column cofidence value 9. initial = 0
+#define   MCDI_RO_COL_CFD_10                       (0x2fba)
+#define P_MCDI_RO_COL_CFD_10                       (volatile unsigned int *)((0x2fba  << 2) + 0xff900000)
+//Bit 31: 0, ro_mcdi_col_cfd_10.                   column cofidence value 10. initial = 0
+#define   MCDI_RO_COL_CFD_11                       (0x2fbb)
+#define P_MCDI_RO_COL_CFD_11                       (volatile unsigned int *)((0x2fbb  << 2) + 0xff900000)
+//Bit 31: 0, ro_mcdi_col_cfd_11.                   column cofidence value 11. initial = 0
+#define   MCDI_RO_COL_CFD_12                       (0x2fbc)
+#define P_MCDI_RO_COL_CFD_12                       (volatile unsigned int *)((0x2fbc  << 2) + 0xff900000)
+//Bit 31: 0, ro_mcdi_col_cfd_12.                   column cofidence value 12. initial = 0
+#define   MCDI_RO_COL_CFD_13                       (0x2fbd)
+#define P_MCDI_RO_COL_CFD_13                       (volatile unsigned int *)((0x2fbd  << 2) + 0xff900000)
+//Bit 31: 0, ro_mcdi_col_cfd_13.                   column cofidence value 13. initial = 0
+#define   MCDI_RO_COL_CFD_14                       (0x2fbe)
+#define P_MCDI_RO_COL_CFD_14                       (volatile unsigned int *)((0x2fbe  << 2) + 0xff900000)
+//Bit 31: 0, ro_mcdi_col_cfd_14.                   column cofidence value 14. initial = 0
+#define   MCDI_RO_COL_CFD_15                       (0x2fbf)
+#define P_MCDI_RO_COL_CFD_15                       (volatile unsigned int *)((0x2fbf  << 2) + 0xff900000)
+//Bit 31: 0, ro_mcdi_col_cfd_15.                   column cofidence value 15. initial = 0
+#define   MCDI_RO_COL_CFD_16                       (0x2fc0)
+#define P_MCDI_RO_COL_CFD_16                       (volatile unsigned int *)((0x2fc0  << 2) + 0xff900000)
+//Bit 31: 0, ro_mcdi_col_cfd_16.                   column cofidence value 16. initial = 0
+#define   MCDI_RO_COL_CFD_17                       (0x2fc1)
+#define P_MCDI_RO_COL_CFD_17                       (volatile unsigned int *)((0x2fc1  << 2) + 0xff900000)
+//Bit 31: 0, ro_mcdi_col_cfd_17.                   column cofidence value 17. initial = 0
+#define   MCDI_RO_COL_CFD_18                       (0x2fc2)
+#define P_MCDI_RO_COL_CFD_18                       (volatile unsigned int *)((0x2fc2  << 2) + 0xff900000)
+//Bit 31: 0, ro_mcdi_col_cfd_18.                   column cofidence value 18. initial = 0
+#define   MCDI_RO_COL_CFD_19                       (0x2fc3)
+#define P_MCDI_RO_COL_CFD_19                       (volatile unsigned int *)((0x2fc3  << 2) + 0xff900000)
+//Bit 31: 0, ro_mcdi_col_cfd_19.                   column cofidence value 19. initial = 0
+#define   MCDI_RO_COL_CFD_20                       (0x2fc4)
+#define P_MCDI_RO_COL_CFD_20                       (volatile unsigned int *)((0x2fc4  << 2) + 0xff900000)
+//Bit 31: 0, ro_mcdi_col_cfd_20.                   column cofidence value 20. initial = 0
+#define   MCDI_RO_COL_CFD_21                       (0x2fc5)
+#define P_MCDI_RO_COL_CFD_21                       (volatile unsigned int *)((0x2fc5  << 2) + 0xff900000)
+//Bit 31: 0, ro_mcdi_col_cfd_21.                   column cofidence value 21. initial = 0
+#define   MCDI_RO_COL_CFD_22                       (0x2fc6)
+#define P_MCDI_RO_COL_CFD_22                       (volatile unsigned int *)((0x2fc6  << 2) + 0xff900000)
+//Bit 31: 0, ro_mcdi_col_cfd_22.                   column cofidence value 22. initial = 0
+#define   MCDI_RO_COL_CFD_23                       (0x2fc7)
+#define P_MCDI_RO_COL_CFD_23                       (volatile unsigned int *)((0x2fc7  << 2) + 0xff900000)
+//Bit 31: 0, ro_mcdi_col_cfd_23.                   column cofidence value 23. initial = 0
+#define   MCDI_RO_COL_CFD_24                       (0x2fc8)
+#define P_MCDI_RO_COL_CFD_24                       (volatile unsigned int *)((0x2fc8  << 2) + 0xff900000)
+//Bit 31: 0, ro_mcdi_col_cfd_24.                   column cofidence value 24. initial = 0
+#define   MCDI_RO_COL_CFD_25                       (0x2fc9)
+#define P_MCDI_RO_COL_CFD_25                       (volatile unsigned int *)((0x2fc9  << 2) + 0xff900000)
+//Bit 31: 0, ro_mcdi_col_cfd_25.                   column cofidence value 25. initial = 0
+// add space 8'hd0-8'hef
+//
+// Reading file:  dipd_regs.h
+//
+// synopsys translate_off
+// synopsys translate_on
+// using 8'he0-8'hef
+#define   DIPD_COMB_CTRL0                          (0x2fd0)
+#define P_DIPD_COMB_CTRL0                          (volatile unsigned int *)((0x2fd0  << 2) + 0xff900000)
+//Bit 31:0,								reg_pd_comb_ctrl0
+#define   DIPD_COMB_CTRL1                          (0x2fd1)
+#define P_DIPD_COMB_CTRL1                          (volatile unsigned int *)((0x2fd1  << 2) + 0xff900000)
+//Bit 31:0,								reg_pd_comb_ctrl1
+#define   DIPD_COMB_CTRL2                          (0x2fd2)
+#define P_DIPD_COMB_CTRL2                          (volatile unsigned int *)((0x2fd2  << 2) + 0xff900000)
+//Bit 31:0,								reg_pd_comb_ctrl2
+#define   DIPD_COMB_CTRL3                          (0x2fd3)
+#define P_DIPD_COMB_CTRL3                          (volatile unsigned int *)((0x2fd3  << 2) + 0xff900000)
+//Bit 31:0,								reg_pd_comb_ctrl3
+#define   DIPD_COMB_CTRL4                          (0x2fd4)
+#define P_DIPD_COMB_CTRL4                          (volatile unsigned int *)((0x2fd4  << 2) + 0xff900000)
+//Bit 31:0,								reg_pd_comb_ctrl4
+#define   DIPD_COMB_CTRL5                          (0x2fd5)
+#define P_DIPD_COMB_CTRL5                          (volatile unsigned int *)((0x2fd5  << 2) + 0xff900000)
+//Bit 31:0,								reg_pd_comb_ctrl5
+#define   DIPD_RO_COMB_0                           (0x2fd6)
+#define P_DIPD_RO_COMB_0                           (volatile unsigned int *)((0x2fd6  << 2) + 0xff900000)
+//Bit 31:0,								ro_pd_comb_0
+#define   DIPD_RO_COMB_1                           (0x2fd7)
+#define P_DIPD_RO_COMB_1                           (volatile unsigned int *)((0x2fd7  << 2) + 0xff900000)
+//Bit 31:0,								ro_pd_comb_1
+#define   DIPD_RO_COMB_2                           (0x2fd8)
+#define P_DIPD_RO_COMB_2                           (volatile unsigned int *)((0x2fd8  << 2) + 0xff900000)
+//Bit 31:0,								ro_pd_comb_2
+#define   DIPD_RO_COMB_3                           (0x2fd9)
+#define P_DIPD_RO_COMB_3                           (volatile unsigned int *)((0x2fd9  << 2) + 0xff900000)
+//Bit 31:0,								ro_pd_comb_3
+#define   DIPD_RO_COMB_4                           (0x2fda)
+#define P_DIPD_RO_COMB_4                           (volatile unsigned int *)((0x2fda  << 2) + 0xff900000)
+//Bit 31:0,								ro_pd_comb_4
+#define   DIPD_RO_COMB_5                           (0x2fdb)
+#define P_DIPD_RO_COMB_5                           (volatile unsigned int *)((0x2fdb  << 2) + 0xff900000)
+//Bit 31:0,								ro_pd_comb_5
+#define   DIPD_RO_COMB_6                           (0x2fdc)
+#define P_DIPD_RO_COMB_6                           (volatile unsigned int *)((0x2fdc  << 2) + 0xff900000)
+//Bit 31:0,								ro_pd_comb_6
+#define   DIPD_RO_COMB_7                           (0x2fdd)
+#define P_DIPD_RO_COMB_7                           (volatile unsigned int *)((0x2fdd  << 2) + 0xff900000)
+//Bit 31:0,								ro_pd_comb_7
+#define   DIPD_RO_COMB_8                           (0x2fde)
+#define P_DIPD_RO_COMB_8                           (volatile unsigned int *)((0x2fde  << 2) + 0xff900000)
+//Bit 31:0,								ro_pd_comb_8
+#define   DIPD_RO_COMB_9                           (0x2fdf)
+#define P_DIPD_RO_COMB_9                           (volatile unsigned int *)((0x2fdf  << 2) + 0xff900000)
+//Bit 31:0,								ro_pd_comb_9
+#define   DIPD_RO_COMB_10                          (0x2fe0)
+#define P_DIPD_RO_COMB_10                          (volatile unsigned int *)((0x2fe0  << 2) + 0xff900000)
+//Bit 31:0,								ro_pd_comb_10
+#define   DIPD_RO_COMB_11                          (0x2fe1)
+#define P_DIPD_RO_COMB_11                          (volatile unsigned int *)((0x2fe1  << 2) + 0xff900000)
+//Bit 31:0,								ro_pd_comb_11
+#define   DIPD_RO_COMB_12                          (0x2fe2)
+#define P_DIPD_RO_COMB_12                          (volatile unsigned int *)((0x2fe2  << 2) + 0xff900000)
+//Bit 31:0,								ro_pd_comb_12
+#define   DIPD_RO_COMB_13                          (0x2fe3)
+#define P_DIPD_RO_COMB_13                          (volatile unsigned int *)((0x2fe3  << 2) + 0xff900000)
+//Bit 31:0,								ro_pd_comb_13
+#define   DIPD_RO_COMB_14                          (0x2fe4)
+#define P_DIPD_RO_COMB_14                          (volatile unsigned int *)((0x2fe4  << 2) + 0xff900000)
+//Bit 31:0,								ro_pd_comb_14
+#define   DIPD_RO_COMB_15                          (0x2fe5)
+#define P_DIPD_RO_COMB_15                          (volatile unsigned int *)((0x2fe5  << 2) + 0xff900000)
+//Bit 31:0,								ro_pd_comb_15
+#define   DIPD_RO_COMB_16                          (0x2fe6)
+#define P_DIPD_RO_COMB_16                          (volatile unsigned int *)((0x2fe6  << 2) + 0xff900000)
+//Bit 31:0,								ro_pd_comb_16
+#define   DIPD_RO_COMB_17                          (0x2fe7)
+#define P_DIPD_RO_COMB_17                          (volatile unsigned int *)((0x2fe7  << 2) + 0xff900000)
+//Bit 31:0,								ro_pd_comb_17
+#define   DIPD_RO_COMB_18                          (0x2fe8)
+#define P_DIPD_RO_COMB_18                          (volatile unsigned int *)((0x2fe8  << 2) + 0xff900000)
+//Bit 31:0,								ro_pd_comb_18
+#define   DIPD_RO_COMB_19                          (0x2fe9)
+#define P_DIPD_RO_COMB_19                          (volatile unsigned int *)((0x2fe9  << 2) + 0xff900000)
+//Bit 31:0,								ro_pd_comb_19
+#define   DIPD_RO_COMB_20                          (0x2fea)
+#define P_DIPD_RO_COMB_20                          (volatile unsigned int *)((0x2fea  << 2) + 0xff900000)
+//Bit 31:0,								ro_pd_comb_20
+// synopsys translate_off
+// synopsys translate_on
+//
+// Closing file:  dipd_regs.h
+//
+// addr space 8'hf0-8'hff
+//
+// Reading file:  nr3_tnr_regs.h
+//
+// synopsys translate_off
+// synopsys translate_on
+#define   NR3_MODE                                 (0x2ff0)
+#define P_NR3_MODE                                 (volatile unsigned int *)((0x2ff0  << 2) + 0xff900000)
+//Bit 31: 6        reserved
+//Bit  5           reg_nr3_vtxt_mode         // unsigned , default = 0  0: avg; 1:MAX
+//Bit  4           reg_3dnr_nr3_cbyy_ignor_coop    // unsigned , default = 0  ignore coop condition for cbyy motion decision
+//Bit  3           reg_3dnr_nr3_ybyc_ignor_cnoop   // unsigned , default = 0  ignore cnoop condition for ybyc motion decision
+//Bit  2: 0        reg_3dnr_nr3_suremot_txt_mode   // unsigned , default = 3  0: cur, 1:p2; 2: (cur+p2)/2; 3/up: min(cur,p2)
+#define   NR3_COOP_PARA                            (0x2ff1)
+#define P_NR3_COOP_PARA                            (volatile unsigned int *)((0x2ff1  << 2) + 0xff900000)
+//Bit 31:22        reserved
+//Bit 21:20        reg_3dnr_nr3_coop_mode    // unsigned , default = 2  0 original pixel 1: [1 2 1]/4 lpf; 2: [1 2 2 2 1]/8; 3: 3x3 lpf
+//Bit 19:16        reg_3dnr_nr3_coop_ratio    // unsigned , default = 8  cur and p2 color oop decision ratio:  (avg1<(dif1*ratio/8 + ofst));
+//Bit 15: 8        reg_3dnr_nr3_coop_ofset    // signed , default = -1  cur and p2 color oop decision ofst:  (avg1<(dif1*ratio/8 + ofst));
+//Bit  7: 0        reg_3dnr_nr3_coop_sat_thrd // unsigned , default = 0  cur and p2 color oop decision min(sat0,sat1) threshold;
+#define   NR3_CNOOP_GAIN                           (0x2ff2)
+#define P_NR3_CNOOP_GAIN                           (volatile unsigned int *)((0x2ff2  << 2) + 0xff900000)
+//Bit 31:24        reserved
+//Bit 23:20        reg_3dnr_nr3_cnoop_ratio0   // unsigned , default = 8  cur and p2 color noop decision ratio0:  (avg1<(MAX(sat0,sat2)*ratio0/8 + ofst0));
+//Bit 19:16        reg_3dnr_nr3_cnoop_ratio1   // unsigned , default = 8  cur and p2 color noop decision ratio1:  (dif1<(MIN(sat0,sat2)*ratio1/8 + ofst1));
+//Bit 15: 8        reg_3dnr_nr3_cnoop_ofset0   // signed , default = 25  cur and p2 color noop decision ofset0:  (avg1<(MAX(sat0,sat2)*ratio0/8 + ofst0));
+//Bit  7: 0        reg_3dnr_nr3_cnoop_ofset1   // signed , default = 0  cur and p2 color noop decision ofset1:  (dif1<(MIN(sat0,sat2)*ratio1/8 + ofst1));
+#define   NR3_YMOT_PARA                            (0x2ff3)
+#define P_NR3_YMOT_PARA                            (volatile unsigned int *)((0x2ff3  << 2) + 0xff900000)
+//Bit 31:20        reserved
+//Bit 19           reg_3dnr_nr3_ymot_only_en  // unsigned , default = 1  enable signal for ignor chroma motion: (ytxt &coop)
+//Bit 18           reg_3dnr_nr3_ymot_only_cmtmode  // unsigned , default = 1  0: cmot=ymot; 1: cmot = MIN(ymot, cmot)
+//Bit 17:16        reg_3dnr_nr3_ymot_only_txtmode  // unsigned , default = 0  0, min(txt0,txt2); 1, max(txt0,txt2);2, (txt0+txt2)/2; 3: sat(txt0, txt2)
+//Bit 15: 8        reg_3dnr_nr3_ymot_only_txtthrd  // unsigned , default = 10  threshold to luma texture to decide use ymot only
+//Bit  7: 0        reg_3dnr_nr3_ymot_only_motthrd  // unsigned , default = 30  threshold to luma motion to decide use ymot only
+#define   NR3_CMOT_PARA                            (0x2ff4)
+#define P_NR3_CMOT_PARA                            (volatile unsigned int *)((0x2ff4  << 2) + 0xff900000)
+//Bit 31:20        reserved
+//Bit 19           reg_3dnr_nr3_cmot_only_en  // unsigned , default = 1  enable signal for ignor luma motion: (ctxt &cnoop)
+//Bit 18           reg_3dnr_nr3_cmot_only_ymtmode  // unsigned , default = 0  0: ymot=cmot+ymot/4; 1: ymot = MIN(ymot, cmot)
+//Bit 17:16        reg_3dnr_nr3_cmot_only_txtmode  // unsigned , default = 0  0, min(txt0,txt2); 1, max(txt0,txt2);2, (txt0+txt2)/2; 3: sat(txt0, txt2)
+//Bit 15: 8        reg_3dnr_nr3_cmot_only_txtthrd  // unsigned , default = 20  threshold to chroma texture to decide use cmot only
+//Bit  7: 0        reg_3dnr_nr3_cmot_only_motthrd  // unsigned , default = 15  threshold to chroma motion to decide use cmot only
+#define   NR3_SUREMOT_YGAIN                        (0x2ff5)
+#define P_NR3_SUREMOT_YGAIN                        (volatile unsigned int *)((0x2ff5  << 2) + 0xff900000)
+//Bit 31:24        reg_3dnr_nr3_suremot_dec_yrate  // unsigned , default = 16  (norm 16)lpfMot>(dec_rate*txt +ofst) then force lpfMot*frc_gain+frc_ofset
+//Bit 23:16        reg_3dnr_nr3_suremot_dec_yofst  // unsigned , default = 12   lpfMot>(dec_rate*txt +ofst) then force lpfMot*frc_gain+frc_ofset
+//Bit 15: 8        reg_3dnr_nr3_suremot_frc_ygain  // unsigned , default = 64  (norm 8)lpfMot>(dec_rate*txt +ofst) then force lpfMot*frc_gain+frc_ofset
+//Bit  7: 0        reg_3dnr_nr3_suremot_frc_yofst  // unsigned , default = 20  lpfMot>(dec_rate*txt +ofst) then force lpfMot*frc_gain+frc_ofset
+#define   NR3_SUREMOT_CGAIN                        (0x2ff6)
+#define P_NR3_SUREMOT_CGAIN                        (volatile unsigned int *)((0x2ff6  << 2) + 0xff900000)
+//Bit 31:24        reg_3dnr_nr3_suremot_dec_crate  // unsigned , default = 34  (norm 16)lpfMot>(dec_rate*txt +ofst) then force lpfMot*frc_gain+frc_ofset
+//Bit 23:16        reg_3dnr_nr3_suremot_dec_cofst  // unsigned , default = 38   lpfMot>(dec_rate*txt +ofst) then force lpfMot*frc_gain+frc_ofset
+//Bit 15: 8        reg_3dnr_nr3_suremot_frc_cgain  // unsigned , default = 64  (norm 8)lpfMot>(dec_rate*txt +ofst) then force lpfMot*frc_gain+frc_ofset
+//Bit  7: 0        reg_3dnr_nr3_suremot_frc_cofst  // unsigned , default = 20  lpfMot>(dec_rate*txt +ofst) then force lpfMot*frc_gain+frc_ofset
+// synopsys translate_off
+// synopsys translate_on
+//
+// Closing file:  nr3_tnr_regs.h
+//
+#define   LBUF_TOP_CTRL                            (0x2fff)
+#define P_LBUF_TOP_CTRL                            (volatile unsigned int *)((0x2fff  << 2) + 0xff900000)
+//bit 23:22   mode_444c422
+//bit 21:20   mode_422c444
+//bit 17      lbuf_fmt444_mode
+//bit 16      lbuf_line5_mode
+//bit 12:0    pre_lbuf_size
+// synopsys translate_off
+// synopsys translate_on
+//
+// Closing file:  mcdi_regs.h
+//
+//  VPU_VLOCK register    (16'h3000 - 16'h30ff)
+//========================================================================
+//`define VPU_VLOCK_VCBUS_BASE                   8'h30
+//
+// Reading file:  vpu_vlock_reg.h
+//
+// synopsys translate_off
+// synopsys translate_on
+// ----------------------------
+// VPU_VLOCK 0x30
+// ----------------------------
+// -----------------------------------------------
+// CBUS_BASE:  VPU_VLOCK_VCBUS_BASE = 0x30
+// -----------------------------------------------
+#define   VPU_VLOCK_CTRL                           (0x3000)
+#define P_VPU_VLOCK_CTRL                           (volatile unsigned int *)((0x3000  << 2) + 0xff900000)
+#define   VPU_VLOCK_MISC_CTRL                      (0x3001)
+#define P_VPU_VLOCK_MISC_CTRL                      (volatile unsigned int *)((0x3001  << 2) + 0xff900000)
+#define   VPU_VLOCK_LOOP0_ACCUM_LMT                (0x3002)
+#define P_VPU_VLOCK_LOOP0_ACCUM_LMT                (volatile unsigned int *)((0x3002  << 2) + 0xff900000)
+#define   VPU_VLOCK_LOOP0_CTRL0                    (0x3003)
+#define P_VPU_VLOCK_LOOP0_CTRL0                    (volatile unsigned int *)((0x3003  << 2) + 0xff900000)
+#define   VPU_VLOCK_LOOP1_CTRL0                    (0x3004)
+#define P_VPU_VLOCK_LOOP1_CTRL0                    (volatile unsigned int *)((0x3004  << 2) + 0xff900000)
+#define   VPU_VLOCK_LOOP1_IMISSYNC_MAX             (0x3005)
+#define P_VPU_VLOCK_LOOP1_IMISSYNC_MAX             (volatile unsigned int *)((0x3005  << 2) + 0xff900000)
+#define   VPU_VLOCK_LOOP1_IMISSYNC_MIN             (0x3006)
+#define P_VPU_VLOCK_LOOP1_IMISSYNC_MIN             (volatile unsigned int *)((0x3006  << 2) + 0xff900000)
+#define   VPU_VLOCK_OVWRITE_ACCUM0                 (0x3007)
+#define P_VPU_VLOCK_OVWRITE_ACCUM0                 (volatile unsigned int *)((0x3007  << 2) + 0xff900000)
+#define   VPU_VLOCK_OVWRITE_ACCUM1                 (0x3008)
+#define P_VPU_VLOCK_OVWRITE_ACCUM1                 (volatile unsigned int *)((0x3008  << 2) + 0xff900000)
+#define   VPU_VLOCK_OUTPUT0_CAPT_LMT               (0x3009)
+#define P_VPU_VLOCK_OUTPUT0_CAPT_LMT               (volatile unsigned int *)((0x3009  << 2) + 0xff900000)
+#define   VPU_VLOCK_OUTPUT0_PLL_LMT                (0x300a)
+#define P_VPU_VLOCK_OUTPUT0_PLL_LMT                (volatile unsigned int *)((0x300a  << 2) + 0xff900000)
+#define   VPU_VLOCK_OUTPUT1_CAPT_LMT               (0x300b)
+#define P_VPU_VLOCK_OUTPUT1_CAPT_LMT               (volatile unsigned int *)((0x300b  << 2) + 0xff900000)
+#define   VPU_VLOCK_OUTPUT1_PLL_LMT                (0x300c)
+#define P_VPU_VLOCK_OUTPUT1_PLL_LMT                (volatile unsigned int *)((0x300c  << 2) + 0xff900000)
+#define   VPU_VLOCK_LOOP1_PHSDIF_TGT               (0x300d)
+#define P_VPU_VLOCK_LOOP1_PHSDIF_TGT               (volatile unsigned int *)((0x300d  << 2) + 0xff900000)
+#define   VPU_VLOCK_RO_LOOP0_ACCUM                 (0x300e)
+#define P_VPU_VLOCK_RO_LOOP0_ACCUM                 (volatile unsigned int *)((0x300e  << 2) + 0xff900000)
+#define   VPU_VLOCK_RO_LOOP1_ACCUM                 (0x300f)
+#define P_VPU_VLOCK_RO_LOOP1_ACCUM                 (volatile unsigned int *)((0x300f  << 2) + 0xff900000)
+#define   VPU_VLOCK_OROW_OCOL_MAX                  (0x3010)
+#define P_VPU_VLOCK_OROW_OCOL_MAX                  (volatile unsigned int *)((0x3010  << 2) + 0xff900000)
+#define   VPU_VLOCK_RO_VS_I_DIST                   (0x3011)
+#define P_VPU_VLOCK_RO_VS_I_DIST                   (volatile unsigned int *)((0x3011  << 2) + 0xff900000)
+#define   VPU_VLOCK_RO_VS_O_DIST                   (0x3012)
+#define P_VPU_VLOCK_RO_VS_O_DIST                   (volatile unsigned int *)((0x3012  << 2) + 0xff900000)
+#define   VPU_VLOCK_RO_LINE_PIX_ADJ                (0x3013)
+#define P_VPU_VLOCK_RO_LINE_PIX_ADJ                (volatile unsigned int *)((0x3013  << 2) + 0xff900000)
+#define   VPU_VLOCK_RO_OUTPUT_00_01                (0x3014)
+#define P_VPU_VLOCK_RO_OUTPUT_00_01                (volatile unsigned int *)((0x3014  << 2) + 0xff900000)
+#define   VPU_VLOCK_RO_OUTPUT_10_11                (0x3015)
+#define P_VPU_VLOCK_RO_OUTPUT_10_11                (volatile unsigned int *)((0x3015  << 2) + 0xff900000)
+#define   VPU_VLOCK_MX4096                         (0x3016)
+#define P_VPU_VLOCK_MX4096                         (volatile unsigned int *)((0x3016  << 2) + 0xff900000)
+#define   VPU_VLOCK_STBDET_WIN0_WIN1               (0x3017)
+#define P_VPU_VLOCK_STBDET_WIN0_WIN1               (volatile unsigned int *)((0x3017  << 2) + 0xff900000)
+#define   VPU_VLOCK_STBDET_CLP                     (0x3018)
+#define P_VPU_VLOCK_STBDET_CLP                     (volatile unsigned int *)((0x3018  << 2) + 0xff900000)
+#define   VPU_VLOCK_STBDET_ABS_WIN0                (0x3019)
+#define P_VPU_VLOCK_STBDET_ABS_WIN0                (volatile unsigned int *)((0x3019  << 2) + 0xff900000)
+#define   VPU_VLOCK_STBDET_ABS_WIN1                (0x301a)
+#define P_VPU_VLOCK_STBDET_ABS_WIN1                (volatile unsigned int *)((0x301a  << 2) + 0xff900000)
+#define   VPU_VLOCK_STBDET_SGN_WIN0                (0x301b)
+#define P_VPU_VLOCK_STBDET_SGN_WIN0                (volatile unsigned int *)((0x301b  << 2) + 0xff900000)
+#define   VPU_VLOCK_STBDET_SGN_WIN1                (0x301c)
+#define P_VPU_VLOCK_STBDET_SGN_WIN1                (volatile unsigned int *)((0x301c  << 2) + 0xff900000)
+#define   VPU_VLOCK_ADJ_EN_SYNC_CTRL               (0x301d)
+#define P_VPU_VLOCK_ADJ_EN_SYNC_CTRL               (volatile unsigned int *)((0x301d  << 2) + 0xff900000)
+#define   VPU_VLOCK_GCLK_EN                        (0x301e)
+#define P_VPU_VLOCK_GCLK_EN                        (volatile unsigned int *)((0x301e  << 2) + 0xff900000)
+#define   VPU_VLOCK_LOOP1_ACCUM_LMT                (0x301f)
+#define P_VPU_VLOCK_LOOP1_ACCUM_LMT                (volatile unsigned int *)((0x301f  << 2) + 0xff900000)
+#define   VPU_VLOCK_RO_M_INT_FRAC                  (0x3020)
+#define P_VPU_VLOCK_RO_M_INT_FRAC                  (volatile unsigned int *)((0x3020  << 2) + 0xff900000)
+// synopsys translate_off
+// synopsys translate_on
+//
+// Closing file:  vpu_vlock_reg.h
+//
+//`define VPPB_VCBUS_BASE                8'h31
+//
+// Reading file:  srscl_reg.h
+//
+// synopsys translate_off
+// synopsys translate_on
+// -----------------------------------------------
+// CBUS_BASE:  VPPB_VCBUS_BASE = 0x31
+// -----------------------------------------------
+////=================================================================////
+//// vkeystone
+////=================================================================////
+// 8'h00-8'h17
+//
+// Reading file:  vkstone_regs.h
+//
+// synopsys translate_off
+// synopsys translate_on
+#define   VKS_CTRL                                 (0x3100)
+#define P_VKS_CTRL                                 (volatile unsigned int *)((0x3100  << 2) + 0xff900000)
+//Bit 31           reg_vks_en                // unsigned , default = 1  enable signal of the vks function
+//Bit 30           reg_vks_scl_mode0         // unsigned , default = 1  : b0 mode of vks ofset mode, 0: offset= offset; 1: offset= offset*step= ofset/scale;
+//Bit 29           reg_vks_scl_mode1         // unsigned , default = 1  : b0 mode of vks ofset mode, 0: offset= offset; 1: offset= offset*step= ofset/scale;
+//Bit 28           reg_vks_fill_mode         // unsigned , default = 1  mode of out-of-boundary fill, 0 extension, 1: fill with the fill_value
+//Bit 27:26        reg_vks_row_inp_mode      // unsigned , default = 1  , interpolation mode from 16pieces ofset/step to each line ofset and step; 0: linear interpolation; 1: cubic interpolation (using ccoef)
+//Bit 25           reg_vks_border_ext_mode0  // unsigned , default = 0  , extend mode of the border data of luma and chroma, 0: copy the most border one; 1: extropolate the border one
+//Bit 24           reg_vks_border_ext_mode1  // unsigned , default = 0  , extend mode of the border data of luma and chroma, 0: copy the most border one; 1: extropolate the border one
+//Bit 23           reg_vks_obuf_mode0        // unsigned , default = 1  , mode of output buffer left/right side. 0: no precalculate active pixels during output fill region; 1: precaclc active pixels during output fill regions
+//Bit 22           reg_vks_obuf_mode1        // unsigned , default = 1  , mode of output buffer left/right side. 0: no precalculate active pixels during output fill region; 1: precaclc active pixels during output fill regions
+//Bit 21:20        reg_vks_obuf_mrgn0        // unsigned , default = 3  , margin pixels for left right most active pixel to the fill pixels to avoid jump
+//Bit 19:18        reg_vks_obuf_mrgn1        // unsigned , default = 3  , margin pixels for left right most active pixel to the fill pixels to avoid jump
+//Bit 17:16        reg_vks_phs_qmode         // unsigned , default = 2  , interpolation mode of the phase, 0: floor to 1/64 phase; 1: round to 1/64 phase; 2/3 linear intp
+//Bit 15: 0        reg_vks_row_scl           // unsigned , default = 11651  , scale of row to make it fit to the 16 pieces, scl = (2^23)/RowMax
+#define   VKS_OUT_WIN_SIZE                         (0x3101)
+#define P_VKS_OUT_WIN_SIZE                         (volatile unsigned int *)((0x3101  << 2) + 0xff900000)
+//Bit 31:30        reserved
+//Bit 29:16        reg_vks_ocolmax           // unsigned , default = 1280  output outer window col number, decided by the projector
+//Bit 15:14        reserved
+//Bit 13: 0        reg_vks_orowmax           // unsigned , default = 720  output outer window row number, decided by the projector
+#define   VKS_PRELPF_YCOEF0                        (0x3102)
+#define P_VKS_PRELPF_YCOEF0                        (volatile unsigned int *)((0x3102  << 2) + 0xff900000)
+//Bit 31:24        reg_vks_prelpf_ycoef0     // signed , default = -128  coef of horizontal luma prelpf for Keystone, normalized 128 as '1'
+//Bit 23:16        reg_vks_prelpf_ycoef1     // signed , default = 0  coef of horizontal luma prelpf for Keystone, normalized 128 as '1'
+//Bit 15: 8        reg_vks_prelpf_ycoef2     // signed , default = 0  coef of horizontal luma prelpf for Keystone, normalized 128 as '1'
+//Bit  7: 0        reg_vks_prelpf_ycoef3     // signed , default = 0  coef of horizontal luma prelpf for Keystone, normalized 128 as '1'
+#define   VKS_PRELPF_YCOEF1                        (0x3103)
+#define P_VKS_PRELPF_YCOEF1                        (volatile unsigned int *)((0x3103  << 2) + 0xff900000)
+//Bit 31:16        reserved
+//Bit 15: 8        reg_vks_prelpf_ycoef4     // signed , default = 0  coef of horizontal luma prelpf for Keystone, normalized 128 as '1'
+//Bit  7: 0        reg_vks_prelpf_ycoef5     // signed , default = 0  coef of horizontal luma prelpf for Keystone, normalized 128 as '1'
+#define   VKS_PRELPF_CCOEF0                        (0x3104)
+#define P_VKS_PRELPF_CCOEF0                        (volatile unsigned int *)((0x3104  << 2) + 0xff900000)
+//Bit 31:24        reg_vks_prelpf_ccoef0     // signed , default = -128  mode of horizontal chroma prelpf for Keystone, normalized 128 as '1'
+//Bit 23:16        reg_vks_prelpf_ccoef1     // signed , default = 0  mode of horizontal chroma prelpf for Keystone, normalized 128 as '1'
+//Bit 15: 8        reg_vks_prelpf_ccoef2     // signed , default = 0  mode of horizontal chroma prelpf for Keystone, normalized 128 as '1'
+//Bit  7: 0        reg_vks_prelpf_ccoef3     // signed , default = 0  mode of horizontal chroma prelpf for Keystone, normalized 128 as '1'
+#define   VKS_PRELPF_CCOEF1                        (0x3105)
+#define P_VKS_PRELPF_CCOEF1                        (volatile unsigned int *)((0x3105  << 2) + 0xff900000)
+//Bit 31:16        reserved
+//Bit 15: 8        reg_vks_prelpf_ccoef4     // signed , default = 0  mode of horizontal chroma prelpf for Keystone, normalized 128 as '1'
+//Bit  7: 0        reg_vks_prelpf_ccoef5     // signed , default = 0  mode of horizontal chroma prelpf for Keystone, normalized 128 as '1'
+#define   VKS_FILL_VAL                             (0x3106)
+#define P_VKS_FILL_VAL                             (volatile unsigned int *)((0x3106  << 2) + 0xff900000)
+//Bit 31:24        reserved
+//Bit 23:16        reg_vks_fill_value0       // unsigned , default = 0  , border fill color define. yuv: [0 128 128];   rgb:[0 0 0]
+//Bit 15: 8        reg_vks_fill_value1       // unsigned , default = 128  , border fill color define. yuv: [0 128 128];   rgb:[0 0 0]
+//Bit  7: 0        reg_vks_fill_value2       // unsigned , default = 128  , border fill color define. yuv: [0 128 128];   rgb:[0 0 0]
+#define   VKS_IWIN_HSIZE                           (0x3107)
+#define P_VKS_IWIN_HSIZE                           (volatile unsigned int *)((0x3107  << 2) + 0xff900000)
+//Bit 31:30        reserved
+//Bit 29:16        reg_vks_iwinx0            // unsigned , default = 160  , input start-col and end-col;
+//Bit 15:14        reserved
+//Bit 13: 0        reg_vks_iwinx1            // unsigned , default = 1279  , input start-col and end-col;
+#define   VKS_IWIN_VSIZE                           (0x3108)
+#define P_VKS_IWIN_VSIZE                           (volatile unsigned int *)((0x3108  << 2) + 0xff900000)
+//Bit 31:30        reserved
+//Bit 29:16        reg_vks_iwiny0            // unsigned , default = 0  , input start-row and end-row;
+//Bit 15:14        reserved
+//Bit 13: 0        reg_vks_iwiny1            // unsigned , default = 719  , input start-row and end-row;
+#define   VKS_TOP_MISC                             (0x3109)
+#define P_VKS_TOP_MISC                             (volatile unsigned int *)((0x3109  << 2) + 0xff900000)
+//Bit 31:19        reserved
+//Bit 18           reg_flt_en                // unsigned , default = 1
+//Bit 17           reg_frm_rst               // unsigned , default = 0
+//Bit 16           reg_ctrl_sync             // unsigned , default = 0
+//Bit 15: 8        blank_num                 // unsigned , default = 4
+//Bit  7: 0        flt_blank_num             // unsigned , default = 9
+#define   VKS_START_CTRL                           (0x310a)
+#define P_VKS_START_CTRL                           (volatile unsigned int *)((0x310a  << 2) + 0xff900000)
+//Bit 31:17        reserved
+//Bit 16           reg_vks_en_mode           // unsigned , default = 0
+//Bit 15: 0        reg_hold_phnum            // unsigned , default = 5
+#define   VKS_LBUF_SIZE                            (0x310b)
+#define P_VKS_LBUF_SIZE                            (volatile unsigned int *)((0x310b  << 2) + 0xff900000)
+//Bit 31:12        reserved
+//Bit 11: 0        reg_lbuf_depth            // unsigned , default = 1024
+#define   VKS_PARA_ADDR_PORT                       (0x310e)
+#define P_VKS_PARA_ADDR_PORT                       (volatile unsigned int *)((0x310e  << 2) + 0xff900000)
+#define   VKS_PARA_DATA_PORT                       (0x310f)
+#define P_VKS_PARA_DATA_PORT                       (volatile unsigned int *)((0x310f  << 2) + 0xff900000)
+
+    #define VKS_SCL_OFSET00                        0x9  //
+//Bit 31:20        reserved
+//Bit 19: 0        reg_vks_scl_ofset0        // unsigned , default = 118534  , left offset of the input pixel offset from left, 12.8 12bits pixel + 8bits float phase
+    #define VKS_SCL_OFSET01                        0xa  //
+//Bit 31:20        reserved
+//Bit 19: 0        reg_vks_scl_ofset1        // unsigned , default = 111450  , left offset of the input pixel offset from left, 12.8 12bits pixel + 8bits float phase
+    #define VKS_SCL_OFSET02                        0xb  //
+//Bit 31:20        reserved
+//Bit 19: 0        reg_vks_scl_ofset2        // unsigned , default = 104366  , left offset of the input pixel offset from left, 12.8 12bits pixel + 8bits float phase
+    #define VKS_SCL_OFSET03                        0xc  //
+//Bit 31:20        reserved
+//Bit 19: 0        reg_vks_scl_ofset3        // unsigned , default = 97283  , left offset of the input pixel offset from left, 12.8 12bits pixel + 8bits float phase
+    #define VKS_SCL_OFSET04                        0xd  //
+//Bit 31:20        reserved
+//Bit 19: 0        reg_vks_scl_ofset4        // unsigned , default = 90199  , left offset of the input pixel offset from left, 12.8 12bits pixel + 8bits float phase
+    #define VKS_SCL_OFSET05                        0xe  //
+//Bit 31:20        reserved
+//Bit 19: 0        reg_vks_scl_ofset5        // unsigned , default = 83115  , left offset of the input pixel offset from left, 12.8 12bits pixel + 8bits float phase
+    #define VKS_SCL_OFSET06                        0xf  //
+//Bit 31:20        reserved
+//Bit 19: 0        reg_vks_scl_ofset6        // unsigned , default = 76031  , left offset of the input pixel offset from left, 12.8 12bits pixel + 8bits float phase
+    #define VKS_SCL_OFSET07                       0x10  //
+//Bit 31:20        reserved
+//Bit 19: 0        reg_vks_scl_ofset7        // unsigned , default = 68947  , left offset of the input pixel offset from left, 12.8 12bits pixel + 8bits float phase
+    #define VKS_SCL_OFSET08                       0x11  //
+//Bit 31:20        reserved
+//Bit 19: 0        reg_vks_scl_ofset8        // unsigned , default = 61864  , left offset of the input pixel offset from left, 12.8 12bits pixel + 8bits float phase
+    #define VKS_SCL_OFSET09                       0x12  //
+//Bit 31:20        reserved
+//Bit 19: 0        reg_vks_scl_ofset9        // unsigned , default = 54780  , left offset of the input pixel offset from left, 12.8 12bits pixel + 8bits float phase
+    #define VKS_SCL_OFSET10                       0x13  //
+//Bit 31:20        reserved
+//Bit 19: 0        reg_vks_scl_ofset10       // unsigned , default = 47696  , left offset of the input pixel offset from left, 12.8 12bits pixel + 8bits float phase
+    #define VKS_SCL_OFSET11                       0x14  //
+//Bit 31:20        reserved
+//Bit 19: 0        reg_vks_scl_ofset11       // unsigned , default = 40612  , left offset of the input pixel offset from left, 12.8 12bits pixel + 8bits float phase
+    #define VKS_SCL_OFSET12                       0x15  //
+//Bit 31:20        reserved
+//Bit 19: 0        reg_vks_scl_ofset12       // unsigned , default = 33528  , left offset of the input pixel offset from left, 12.8 12bits pixel + 8bits float phase
+    #define VKS_SCL_OFSET13                       0x16  //
+//Bit 31:20        reserved
+//Bit 19: 0        reg_vks_scl_ofset13       // unsigned , default = 26444  , left offset of the input pixel offset from left, 12.8 12bits pixel + 8bits float phase
+    #define VKS_SCL_OFSET14                       0x17  //
+//Bit 31:20        reserved
+//Bit 19: 0        reg_vks_scl_ofset14       // unsigned , default = 19361  , left offset of the input pixel offset from left, 12.8 12bits pixel + 8bits float phase
+    #define VKS_SCL_OFSET15                       0x18  //
+//Bit 31:20        reserved
+//Bit 19: 0        reg_vks_scl_ofset15       // unsigned , default = 12277  , left offset of the input pixel offset from left, 12.8 12bits pixel + 8bits float phase
+    #define VKS_SCL_OFSET16                       0x19  //
+//Bit 31:20        reserved
+//Bit 19: 0        reg_vks_scl_ofset16       // unsigned , default = 5193  , left offset of the input pixel offset from left, 12.8 12bits pixel + 8bits float phase
+    #define VKS_SCL_STEP00                        0x1a  //
+//Bit 31:24        reserved
+//Bit 23: 0        reg_vks_scl_step0         // unsigned , default = 331378  , for ratio of each line (defined piece),step: 4.20 opixnum = (ipixnum<<20)/step;  scale:4.20 = 1/step
+    #define VKS_SCL_STEP01                        0x1b  //
+//Bit 31:24        reserved
+//Bit 23: 0        reg_vks_scl_step1         // unsigned , default = 383191  , for ratio of each line (defined piece),step: 4.20 opixnum = (ipixnum<<20)/step;  scale:4.20 = 1/step
+    #define VKS_SCL_STEP02                        0x1c  //
+//Bit 31:24        reserved
+//Bit 23: 0        reg_vks_scl_step2         // unsigned , default = 435004  , for ratio of each line (defined piece),step: 4.20 opixnum = (ipixnum<<20)/step;  scale:4.20 = 1/step
+    #define VKS_SCL_STEP03                        0x1d  //
+//Bit 31:24        reserved
+//Bit 23: 0        reg_vks_scl_step3         // unsigned , default = 486818  , for ratio of each line (defined piece),step: 4.20 opixnum = (ipixnum<<20)/step;  scale:4.20 = 1/step
+    #define VKS_SCL_STEP04                        0x1e  //
+//Bit 31:24        reserved
+//Bit 23: 0        reg_vks_scl_step4         // unsigned , default = 538631  , for ratio of each line (defined piece),step: 4.20 opixnum = (ipixnum<<20)/step;  scale:4.20 = 1/step
+    #define VKS_SCL_STEP05                        0x1f  //
+//Bit 31:24        reserved
+//Bit 23: 0        reg_vks_scl_step5         // unsigned , default = 590444  , for ratio of each line (defined piece),step: 4.20 opixnum = (ipixnum<<20)/step;  scale:4.20 = 1/step
+    #define VKS_SCL_STEP06                        0x20  //
+//Bit 31:24        reserved
+//Bit 23: 0        reg_vks_scl_step6         // unsigned , default = 642257  , for ratio of each line (defined piece),step: 4.20 opixnum = (ipixnum<<20)/step;  scale:4.20 = 1/step
+    #define VKS_SCL_STEP07                        0x21  //
+//Bit 31:24        reserved
+//Bit 23: 0        reg_vks_scl_step7         // unsigned , default = 694070  , for ratio of each line (defined piece),step: 4.20 opixnum = (ipixnum<<20)/step;  scale:4.20 = 1/step
+    #define VKS_SCL_STEP08                        0x22  //
+//Bit 31:24        reserved
+//Bit 23: 0        reg_vks_scl_step8         // unsigned , default = 745884  , for ratio of each line (defined piece),step: 4.20 opixnum = (ipixnum<<20)/step;  scale:4.20 = 1/step
+    #define VKS_SCL_STEP09                        0x23  //
+//Bit 31:24        reserved
+//Bit 23: 0        reg_vks_scl_step9         // unsigned , default = 797697  , for ratio of each line (defined piece),step: 4.20 opixnum = (ipixnum<<20)/step;  scale:4.20 = 1/step
+    #define VKS_SCL_STEP10                        0x24  //
+//Bit 31:24        reserved
+//Bit 23: 0        reg_vks_scl_step10        // unsigned , default = 849510  , for ratio of each line (defined piece),step: 4.20 opixnum = (ipixnum<<20)/step;  scale:4.20 = 1/step
+    #define VKS_SCL_STEP11                        0x25  //
+//Bit 31:24        reserved
+//Bit 23: 0        reg_vks_scl_step11        // unsigned , default = 901323  , for ratio of each line (defined piece),step: 4.20 opixnum = (ipixnum<<20)/step;  scale:4.20 = 1/step
+    #define VKS_SCL_STEP12                        0x26  //
+//Bit 31:24        reserved
+//Bit 23: 0        reg_vks_scl_step12        // unsigned , default = 953136  , for ratio of each line (defined piece),step: 4.20 opixnum = (ipixnum<<20)/step;  scale:4.20 = 1/step
+    #define VKS_SCL_STEP13                        0x27  //
+//Bit 31:24        reserved
+//Bit 23: 0        reg_vks_scl_step13        // unsigned , default = 1004949  , for ratio of each line (defined piece),step: 4.20 opixnum = (ipixnum<<20)/step;  scale:4.20 = 1/step
+    #define VKS_SCL_STEP14                        0x28  //
+//Bit 31:24        reserved
+//Bit 23: 0        reg_vks_scl_step14        // unsigned , default = 1056763  , for ratio of each line (defined piece),step: 4.20 opixnum = (ipixnum<<20)/step;  scale:4.20 = 1/step
+    #define VKS_SCL_STEP15                        0x29  //
+//Bit 31:24        reserved
+//Bit 23: 0        reg_vks_scl_step15        // unsigned , default = 1108576  , for ratio of each line (defined piece),step: 4.20 opixnum = (ipixnum<<20)/step;  scale:4.20 = 1/step
+    #define VKS_SCL_STEP16                        0x2a  //
+//Bit 31:24        reserved
+//Bit 23: 0        reg_vks_scl_step16        // unsigned , default = 1160389  , for ratio of each line (defined piece),step: 4.20 opixnum = (ipixnum<<20)/step;  scale:4.20 = 1/step
+    #define VKS_PPS_YCOEF00                       0x2b  //
+//Bit 31:24        reg_vks_ycoef0            // signed , default = 0  poly-phase scalar coefs
+//Bit 23:16        reg_vks_ycoef1            // signed , default = 128  poly-phase scalar coefs
+//Bit 15: 8        reg_vks_ycoef2            // signed , default = 0  poly-phase scalar coefs
+//Bit  7: 0        reg_vks_ycoef3            // signed , default = 0  poly-phase scalar coefs
+    #define VKS_PPS_YCOEF01                       0x2c  //
+//Bit 31:24        reg_vks_ycoef4            // signed , default = 0  poly-phase scalar coefs
+//Bit 23:16        reg_vks_ycoef5            // signed , default = 127  poly-phase scalar coefs
+//Bit 15: 8        reg_vks_ycoef6            // signed , default = 1  poly-phase scalar coefs
+//Bit  7: 0        reg_vks_ycoef7            // signed , default = 0  poly-phase scalar coefs
+    #define VKS_PPS_YCOEF02                       0x2d  //
+//Bit 31:24        reg_vks_ycoef8            // signed , default = -1  poly-phase scalar coefs
+//Bit 23:16        reg_vks_ycoef9            // signed , default = 127  poly-phase scalar coefs
+//Bit 15: 8        reg_vks_ycoef10           // signed , default = 2  poly-phase scalar coefs
+//Bit  7: 0        reg_vks_ycoef11           // signed , default = 0  poly-phase scalar coefs
+    #define VKS_PPS_YCOEF03                       0x2e  //
+//Bit 31:24        reg_vks_ycoef12           // signed , default = -2  poly-phase scalar coefs
+//Bit 23:16        reg_vks_ycoef13           // signed , default = 127  poly-phase scalar coefs
+//Bit 15: 8        reg_vks_ycoef14           // signed , default = 3  poly-phase scalar coefs
+//Bit  7: 0        reg_vks_ycoef15           // signed , default = 0  poly-phase scalar coefs
+    #define VKS_PPS_YCOEF04                       0x2f  //
+//Bit 31:24        reg_vks_ycoef16           // signed , default = -3  poly-phase scalar coefs
+//Bit 23:16        reg_vks_ycoef17           // signed , default = 126  poly-phase scalar coefs
+//Bit 15: 8        reg_vks_ycoef18           // signed , default = 5  poly-phase scalar coefs
+//Bit  7: 0        reg_vks_ycoef19           // signed , default = 0  poly-phase scalar coefs
+    #define VKS_PPS_YCOEF05                       0x30  //
+//Bit 31:24        reg_vks_ycoef20           // signed , default = -4  poly-phase scalar coefs
+//Bit 23:16        reg_vks_ycoef21           // signed , default = 126  poly-phase scalar coefs
+//Bit 15: 8        reg_vks_ycoef22           // signed , default = 6  poly-phase scalar coefs
+//Bit  7: 0        reg_vks_ycoef23           // signed , default = 0  poly-phase scalar coefs
+    #define VKS_PPS_YCOEF06                       0x31  //
+//Bit 31:24        reg_vks_ycoef24           // signed , default = -5  poly-phase scalar coefs
+//Bit 23:16        reg_vks_ycoef25           // signed , default = 125  poly-phase scalar coefs
+//Bit 15: 8        reg_vks_ycoef26           // signed , default = 8  poly-phase scalar coefs
+//Bit  7: 0        reg_vks_ycoef27           // signed , default = 0  poly-phase scalar coefs
+    #define VKS_PPS_YCOEF07                       0x32  //
+//Bit 31:24        reg_vks_ycoef28           // signed , default = -5  poly-phase scalar coefs
+//Bit 23:16        reg_vks_ycoef29           // signed , default = 124  poly-phase scalar coefs
+//Bit 15: 8        reg_vks_ycoef30           // signed , default = 9  poly-phase scalar coefs
+//Bit  7: 0        reg_vks_ycoef31           // signed , default = 0  poly-phase scalar coefs
+    #define VKS_PPS_YCOEF08                       0x33  //
+//Bit 31:24        reg_vks_ycoef32           // signed , default = -6  poly-phase scalar coefs
+//Bit 23:16        reg_vks_ycoef33           // signed , default = 123  poly-phase scalar coefs
+//Bit 15: 8        reg_vks_ycoef34           // signed , default = 11  poly-phase scalar coefs
+//Bit  7: 0        reg_vks_ycoef35           // signed , default = 0  poly-phase scalar coefs
+    #define VKS_PPS_YCOEF09                       0x34  //
+//Bit 31:24        reg_vks_ycoef36           // signed , default = -6  poly-phase scalar coefs
+//Bit 23:16        reg_vks_ycoef37           // signed , default = 122  poly-phase scalar coefs
+//Bit 15: 8        reg_vks_ycoef38           // signed , default = 13  poly-phase scalar coefs
+//Bit  7: 0        reg_vks_ycoef39           // signed , default = -1  poly-phase scalar coefs
+    #define VKS_PPS_YCOEF10                       0x35  //
+//Bit 31:24        reg_vks_ycoef40           // signed , default = -7  poly-phase scalar coefs
+//Bit 23:16        reg_vks_ycoef41           // signed , default = 121  poly-phase scalar coefs
+//Bit 15: 8        reg_vks_ycoef42           // signed , default = 15  poly-phase scalar coefs
+//Bit  7: 0        reg_vks_ycoef43           // signed , default = -1  poly-phase scalar coefs
+    #define VKS_PPS_YCOEF11                       0x36  //
+//Bit 31:24        reg_vks_ycoef44           // signed , default = -7  poly-phase scalar coefs
+//Bit 23:16        reg_vks_ycoef45           // signed , default = 119  poly-phase scalar coefs
+//Bit 15: 8        reg_vks_ycoef46           // signed , default = 17  poly-phase scalar coefs
+//Bit  7: 0        reg_vks_ycoef47           // signed , default = -1  poly-phase scalar coefs
+    #define VKS_PPS_YCOEF12                       0x37  //
+//Bit 31:24        reg_vks_ycoef48           // signed , default = -8  poly-phase scalar coefs
+//Bit 23:16        reg_vks_ycoef49           // signed , default = 118  poly-phase scalar coefs
+//Bit 15: 8        reg_vks_ycoef50           // signed , default = 19  poly-phase scalar coefs
+//Bit  7: 0        reg_vks_ycoef51           // signed , default = -1  poly-phase scalar coefs
+    #define VKS_PPS_YCOEF13                       0x38  //
+//Bit 31:24        reg_vks_ycoef52           // signed , default = -8  poly-phase scalar coefs
+//Bit 23:16        reg_vks_ycoef53           // signed , default = 116  poly-phase scalar coefs
+//Bit 15: 8        reg_vks_ycoef54           // signed , default = 22  poly-phase scalar coefs
+//Bit  7: 0        reg_vks_ycoef55           // signed , default = -2  poly-phase scalar coefs
+    #define VKS_PPS_YCOEF14                       0x39  //
+//Bit 31:24        reg_vks_ycoef56           // signed , default = -8  poly-phase scalar coefs
+//Bit 23:16        reg_vks_ycoef57           // signed , default = 114  poly-phase scalar coefs
+//Bit 15: 8        reg_vks_ycoef58           // signed , default = 24  poly-phase scalar coefs
+//Bit  7: 0        reg_vks_ycoef59           // signed , default = -2  poly-phase scalar coefs
+    #define VKS_PPS_YCOEF15                       0x3a  //
+//Bit 31:24        reg_vks_ycoef60           // signed , default = -8  poly-phase scalar coefs
+//Bit 23:16        reg_vks_ycoef61           // signed , default = 112  poly-phase scalar coefs
+//Bit 15: 8        reg_vks_ycoef62           // signed , default = 26  poly-phase scalar coefs
+//Bit  7: 0        reg_vks_ycoef63           // signed , default = -2  poly-phase scalar coefs
+    #define VKS_PPS_YCOEF16                       0x3b  //
+//Bit 31:24        reg_vks_ycoef64           // signed , default = -9  poly-phase scalar coefs
+//Bit 23:16        reg_vks_ycoef65           // signed , default = 111  poly-phase scalar coefs
+//Bit 15: 8        reg_vks_ycoef66           // signed , default = 29  poly-phase scalar coefs
+//Bit  7: 0        reg_vks_ycoef67           // signed , default = -3  poly-phase scalar coefs
+    #define VKS_PPS_YCOEF17                       0x3c  //
+//Bit 31:24        reg_vks_ycoef68           // signed , default = -9  poly-phase scalar coefs
+//Bit 23:16        reg_vks_ycoef69           // signed , default = 109  poly-phase scalar coefs
+//Bit 15: 8        reg_vks_ycoef70           // signed , default = 31  poly-phase scalar coefs
+//Bit  7: 0        reg_vks_ycoef71           // signed , default = -3  poly-phase scalar coefs
+    #define VKS_PPS_YCOEF18                       0x3d  //
+//Bit 31:24        reg_vks_ycoef72           // signed , default = -9  poly-phase scalar coefs
+//Bit 23:16        reg_vks_ycoef73           // signed , default = 107  poly-phase scalar coefs
+//Bit 15: 8        reg_vks_ycoef74           // signed , default = 33  poly-phase scalar coefs
+//Bit  7: 0        reg_vks_ycoef75           // signed , default = -3  poly-phase scalar coefs
+    #define VKS_PPS_YCOEF19                       0x3e  //
+//Bit 31:24        reg_vks_ycoef76           // signed , default = -9  poly-phase scalar coefs
+//Bit 23:16        reg_vks_ycoef77           // signed , default = 104  poly-phase scalar coefs
+//Bit 15: 8        reg_vks_ycoef78           // signed , default = 36  poly-phase scalar coefs
+//Bit  7: 0        reg_vks_ycoef79           // signed , default = -3  poly-phase scalar coefs
+    #define VKS_PPS_YCOEF20                       0x3f  //
+//Bit 31:24        reg_vks_ycoef80           // signed , default = -9  poly-phase scalar coefs
+//Bit 23:16        reg_vks_ycoef81           // signed , default = 102  poly-phase scalar coefs
+//Bit 15: 8        reg_vks_ycoef82           // signed , default = 39  poly-phase scalar coefs
+//Bit  7: 0        reg_vks_ycoef83           // signed , default = -4  poly-phase scalar coefs
+    #define VKS_PPS_YCOEF21                       0x40  //
+//Bit 31:24        reg_vks_ycoef84           // signed , default = -9  poly-phase scalar coefs
+//Bit 23:16        reg_vks_ycoef85           // signed , default = 100  poly-phase scalar coefs
+//Bit 15: 8        reg_vks_ycoef86           // signed , default = 41  poly-phase scalar coefs
+//Bit  7: 0        reg_vks_ycoef87           // signed , default = -4  poly-phase scalar coefs
+    #define VKS_PPS_YCOEF22                       0x41  //
+//Bit 31:24        reg_vks_ycoef88           // signed , default = -9  poly-phase scalar coefs
+//Bit 23:16        reg_vks_ycoef89           // signed , default = 97  poly-phase scalar coefs
+//Bit 15: 8        reg_vks_ycoef90           // signed , default = 44  poly-phase scalar coefs
+//Bit  7: 0        reg_vks_ycoef91           // signed , default = -4  poly-phase scalar coefs
+    #define VKS_PPS_YCOEF23                       0x42  //
+//Bit 31:24        reg_vks_ycoef92           // signed , default = -9  poly-phase scalar coefs
+//Bit 23:16        reg_vks_ycoef93           // signed , default = 95  poly-phase scalar coefs
+//Bit 15: 8        reg_vks_ycoef94           // signed , default = 47  poly-phase scalar coefs
+//Bit  7: 0        reg_vks_ycoef95           // signed , default = -5  poly-phase scalar coefs
+    #define VKS_PPS_YCOEF24                       0x43  //
+//Bit 31:24        reg_vks_ycoef96           // signed , default = -9  poly-phase scalar coefs
+//Bit 23:16        reg_vks_ycoef97           // signed , default = 93  poly-phase scalar coefs
+//Bit 15: 8        reg_vks_ycoef98           // signed , default = 49  poly-phase scalar coefs
+//Bit  7: 0        reg_vks_ycoef99           // signed , default = -5  poly-phase scalar coefs
+    #define VKS_PPS_YCOEF25                       0x44  //
+//Bit 31:24        reg_vks_ycoef100          // signed , default = -9  poly-phase scalar coefs
+//Bit 23:16        reg_vks_ycoef101          // signed , default = 90  poly-phase scalar coefs
+//Bit 15: 8        reg_vks_ycoef102          // signed , default = 52  poly-phase scalar coefs
+//Bit  7: 0        reg_vks_ycoef103          // signed , default = -5  poly-phase scalar coefs
+    #define VKS_PPS_YCOEF26                       0x45  //
+//Bit 31:24        reg_vks_ycoef104          // signed , default = -9  poly-phase scalar coefs
+//Bit 23:16        reg_vks_ycoef105          // signed , default = 88  poly-phase scalar coefs
+//Bit 15: 8        reg_vks_ycoef106          // signed , default = 55  poly-phase scalar coefs
+//Bit  7: 0        reg_vks_ycoef107          // signed , default = -6  poly-phase scalar coefs
+    #define VKS_PPS_YCOEF27                       0x46  //
+//Bit 31:24        reg_vks_ycoef108          // signed , default = -9  poly-phase scalar coefs
+//Bit 23:16        reg_vks_ycoef109          // signed , default = 85  poly-phase scalar coefs
+//Bit 15: 8        reg_vks_ycoef110          // signed , default = 58  poly-phase scalar coefs
+//Bit  7: 0        reg_vks_ycoef111          // signed , default = -6  poly-phase scalar coefs
+    #define VKS_PPS_YCOEF28                       0x47  //
+//Bit 31:24        reg_vks_ycoef112          // signed , default = -8  poly-phase scalar coefs
+//Bit 23:16        reg_vks_ycoef113          // signed , default = 82  poly-phase scalar coefs
+//Bit 15: 8        reg_vks_ycoef114          // signed , default = 60  poly-phase scalar coefs
+//Bit  7: 0        reg_vks_ycoef115          // signed , default = -6  poly-phase scalar coefs
+    #define VKS_PPS_YCOEF29                       0x48  //
+//Bit 31:24        reg_vks_ycoef116          // signed , default = -8  poly-phase scalar coefs
+//Bit 23:16        reg_vks_ycoef117          // signed , default = 80  poly-phase scalar coefs
+//Bit 15: 8        reg_vks_ycoef118          // signed , default = 63  poly-phase scalar coefs
+//Bit  7: 0        reg_vks_ycoef119          // signed , default = -7  poly-phase scalar coefs
+    #define VKS_PPS_YCOEF30                       0x49  //
+//Bit 31:24        reg_vks_ycoef120          // signed , default = -8  poly-phase scalar coefs
+//Bit 23:16        reg_vks_ycoef121          // signed , default = 77  poly-phase scalar coefs
+//Bit 15: 8        reg_vks_ycoef122          // signed , default = 66  poly-phase scalar coefs
+//Bit  7: 0        reg_vks_ycoef123          // signed , default = -7  poly-phase scalar coefs
+    #define VKS_PPS_YCOEF31                       0x4a  //
+//Bit 31:24        reg_vks_ycoef124          // signed , default = -8  poly-phase scalar coefs
+//Bit 23:16        reg_vks_ycoef125          // signed , default = 74  poly-phase scalar coefs
+//Bit 15: 8        reg_vks_ycoef126          // signed , default = 69  poly-phase scalar coefs
+//Bit  7: 0        reg_vks_ycoef127          // signed , default = -7  poly-phase scalar coefs
+    #define VKS_PPS_YCOEF32                       0x4b  //
+//Bit 31:24        reg_vks_ycoef128          // signed , default = -8  poly-phase scalar coefs
+//Bit 23:16        reg_vks_ycoef129          // signed , default = 72  poly-phase scalar coefs
+//Bit 15: 8        reg_vks_ycoef130          // signed , default = 72  poly-phase scalar coefs
+//Bit  7: 0        reg_vks_ycoef131          // signed , default = -8  poly-phase scalar coefs
+    #define VKS_PPS_CCOEF00                       0x4c  //
+//Bit 31:24        reg_vks_ccoef0            // signed , default = 0  poly-phase scalar coefs
+//Bit 23:16        reg_vks_ccoef1            // signed , default = 128  poly-phase scalar coefs
+//Bit 15: 8        reg_vks_ccoef2            // signed , default = 0  poly-phase scalar coefs
+//Bit  7: 0        reg_vks_ccoef3            // signed , default = 0  poly-phase scalar coefs
+    #define VKS_PPS_CCOEF01                       0x4d  //
+//Bit 31:24        reg_vks_ccoef4            // signed , default = 0  poly-phase scalar coefs
+//Bit 23:16        reg_vks_ccoef5            // signed , default = 127  poly-phase scalar coefs
+//Bit 15: 8        reg_vks_ccoef6            // signed , default = 1  poly-phase scalar coefs
+//Bit  7: 0        reg_vks_ccoef7            // signed , default = 0  poly-phase scalar coefs
+    #define VKS_PPS_CCOEF02                       0x4e  //
+//Bit 31:24        reg_vks_ccoef8            // signed , default = -1  poly-phase scalar coefs
+//Bit 23:16        reg_vks_ccoef9            // signed , default = 127  poly-phase scalar coefs
+//Bit 15: 8        reg_vks_ccoef10           // signed , default = 2  poly-phase scalar coefs
+//Bit  7: 0        reg_vks_ccoef11           // signed , default = 0  poly-phase scalar coefs
+    #define VKS_PPS_CCOEF03                       0x4f  //
+//Bit 31:24        reg_vks_ccoef12           // signed , default = -2  poly-phase scalar coefs
+//Bit 23:16        reg_vks_ccoef13           // signed , default = 127  poly-phase scalar coefs
+//Bit 15: 8        reg_vks_ccoef14           // signed , default = 3  poly-phase scalar coefs
+//Bit  7: 0        reg_vks_ccoef15           // signed , default = 0  poly-phase scalar coefs
+    #define VKS_PPS_CCOEF04                       0x50  //
+//Bit 31:24        reg_vks_ccoef16           // signed , default = -3  poly-phase scalar coefs
+//Bit 23:16        reg_vks_ccoef17           // signed , default = 126  poly-phase scalar coefs
+//Bit 15: 8        reg_vks_ccoef18           // signed , default = 5  poly-phase scalar coefs
+//Bit  7: 0        reg_vks_ccoef19           // signed , default = 0  poly-phase scalar coefs
+    #define VKS_PPS_CCOEF05                       0x51  //
+//Bit 31:24        reg_vks_ccoef20           // signed , default = -4  poly-phase scalar coefs
+//Bit 23:16        reg_vks_ccoef21           // signed , default = 126  poly-phase scalar coefs
+//Bit 15: 8        reg_vks_ccoef22           // signed , default = 6  poly-phase scalar coefs
+//Bit  7: 0        reg_vks_ccoef23           // signed , default = 0  poly-phase scalar coefs
+    #define VKS_PPS_CCOEF06                       0x52  //
+//Bit 31:24        reg_vks_ccoef24           // signed , default = -5  poly-phase scalar coefs
+//Bit 23:16        reg_vks_ccoef25           // signed , default = 125  poly-phase scalar coefs
+//Bit 15: 8        reg_vks_ccoef26           // signed , default = 8  poly-phase scalar coefs
+//Bit  7: 0        reg_vks_ccoef27           // signed , default = 0  poly-phase scalar coefs
+    #define VKS_PPS_CCOEF07                       0x53  //
+//Bit 31:24        reg_vks_ccoef28           // signed , default = -5  poly-phase scalar coefs
+//Bit 23:16        reg_vks_ccoef29           // signed , default = 124  poly-phase scalar coefs
+//Bit 15: 8        reg_vks_ccoef30           // signed , default = 9  poly-phase scalar coefs
+//Bit  7: 0        reg_vks_ccoef31           // signed , default = 0  poly-phase scalar coefs
+    #define VKS_PPS_CCOEF08                       0x54  //
+//Bit 31:24        reg_vks_ccoef32           // signed , default = -6  poly-phase scalar coefs
+//Bit 23:16        reg_vks_ccoef33           // signed , default = 123  poly-phase scalar coefs
+//Bit 15: 8        reg_vks_ccoef34           // signed , default = 11  poly-phase scalar coefs
+//Bit  7: 0        reg_vks_ccoef35           // signed , default = 0  poly-phase scalar coefs
+    #define VKS_PPS_CCOEF09                       0x55  //
+//Bit 31:24        reg_vks_ccoef36           // signed , default = -6  poly-phase scalar coefs
+//Bit 23:16        reg_vks_ccoef37           // signed , default = 122  poly-phase scalar coefs
+//Bit 15: 8        reg_vks_ccoef38           // signed , default = 13  poly-phase scalar coefs
+//Bit  7: 0        reg_vks_ccoef39           // signed , default = -1  poly-phase scalar coefs
+    #define VKS_PPS_CCOEF10                       0x56  //
+//Bit 31:24        reg_vks_ccoef40           // signed , default = -7  poly-phase scalar coefs
+//Bit 23:16        reg_vks_ccoef41           // signed , default = 121  poly-phase scalar coefs
+//Bit 15: 8        reg_vks_ccoef42           // signed , default = 15  poly-phase scalar coefs
+//Bit  7: 0        reg_vks_ccoef43           // signed , default = -1  poly-phase scalar coefs
+    #define VKS_PPS_CCOEF11                       0x57  //
+//Bit 31:24        reg_vks_ccoef44           // signed , default = -7  poly-phase scalar coefs
+//Bit 23:16        reg_vks_ccoef45           // signed , default = 119  poly-phase scalar coefs
+//Bit 15: 8        reg_vks_ccoef46           // signed , default = 17  poly-phase scalar coefs
+//Bit  7: 0        reg_vks_ccoef47           // signed , default = -1  poly-phase scalar coefs
+    #define VKS_PPS_CCOEF12                       0x58  //
+//Bit 31:24        reg_vks_ccoef48           // signed , default = -8  poly-phase scalar coefs
+//Bit 23:16        reg_vks_ccoef49           // signed , default = 118  poly-phase scalar coefs
+//Bit 15: 8        reg_vks_ccoef50           // signed , default = 19  poly-phase scalar coefs
+//Bit  7: 0        reg_vks_ccoef51           // signed , default = -1  poly-phase scalar coefs
+    #define VKS_PPS_CCOEF13                       0x59  //
+//Bit 31:24        reg_vks_ccoef52           // signed , default = -8  poly-phase scalar coefs
+//Bit 23:16        reg_vks_ccoef53           // signed , default = 116  poly-phase scalar coefs
+//Bit 15: 8        reg_vks_ccoef54           // signed , default = 22  poly-phase scalar coefs
+//Bit  7: 0        reg_vks_ccoef55           // signed , default = -2  poly-phase scalar coefs
+    #define VKS_PPS_CCOEF14                       0x5a  //
+//Bit 31:24        reg_vks_ccoef56           // signed , default = -8  poly-phase scalar coefs
+//Bit 23:16        reg_vks_ccoef57           // signed , default = 114  poly-phase scalar coefs
+//Bit 15: 8        reg_vks_ccoef58           // signed , default = 24  poly-phase scalar coefs
+//Bit  7: 0        reg_vks_ccoef59           // signed , default = -2  poly-phase scalar coefs
+    #define VKS_PPS_CCOEF15                       0x5b  //
+//Bit 31:24        reg_vks_ccoef60           // signed , default = -8  poly-phase scalar coefs
+//Bit 23:16        reg_vks_ccoef61           // signed , default = 112  poly-phase scalar coefs
+//Bit 15: 8        reg_vks_ccoef62           // signed , default = 26  poly-phase scalar coefs
+//Bit  7: 0        reg_vks_ccoef63           // signed , default = -2  poly-phase scalar coefs
+    #define VKS_PPS_CCOEF16                       0x5c  //
+//Bit 31:24        reg_vks_ccoef64           // signed , default = -9  poly-phase scalar coefs
+//Bit 23:16        reg_vks_ccoef65           // signed , default = 111  poly-phase scalar coefs
+//Bit 15: 8        reg_vks_ccoef66           // signed , default = 29  poly-phase scalar coefs
+//Bit  7: 0        reg_vks_ccoef67           // signed , default = -3  poly-phase scalar coefs
+    #define VKS_PPS_CCOEF17                       0x5d  //
+//Bit 31:24        reg_vks_ccoef68           // signed , default = -9  poly-phase scalar coefs
+//Bit 23:16        reg_vks_ccoef69           // signed , default = 109  poly-phase scalar coefs
+//Bit 15: 8        reg_vks_ccoef70           // signed , default = 31  poly-phase scalar coefs
+//Bit  7: 0        reg_vks_ccoef71           // signed , default = -3  poly-phase scalar coefs
+    #define VKS_PPS_CCOEF18                       0x5e  //
+//Bit 31:24        reg_vks_ccoef72           // signed , default = -9  poly-phase scalar coefs
+//Bit 23:16        reg_vks_ccoef73           // signed , default = 107  poly-phase scalar coefs
+//Bit 15: 8        reg_vks_ccoef74           // signed , default = 33  poly-phase scalar coefs
+//Bit  7: 0        reg_vks_ccoef75           // signed , default = -3  poly-phase scalar coefs
+    #define VKS_PPS_CCOEF19                       0x5f  //
+//Bit 31:24        reg_vks_ccoef76           // signed , default = -9  poly-phase scalar coefs
+//Bit 23:16        reg_vks_ccoef77           // signed , default = 104  poly-phase scalar coefs
+//Bit 15: 8        reg_vks_ccoef78           // signed , default = 36  poly-phase scalar coefs
+//Bit  7: 0        reg_vks_ccoef79           // signed , default = -3  poly-phase scalar coefs
+    #define VKS_PPS_CCOEF20                       0x60  //
+//Bit 31:24        reg_vks_ccoef80           // signed , default = -9  poly-phase scalar coefs
+//Bit 23:16        reg_vks_ccoef81           // signed , default = 102  poly-phase scalar coefs
+//Bit 15: 8        reg_vks_ccoef82           // signed , default = 39  poly-phase scalar coefs
+//Bit  7: 0        reg_vks_ccoef83           // signed , default = -4  poly-phase scalar coefs
+    #define VKS_PPS_CCOEF21                       0x61  //
+//Bit 31:24        reg_vks_ccoef84           // signed , default = -9  poly-phase scalar coefs
+//Bit 23:16        reg_vks_ccoef85           // signed , default = 100  poly-phase scalar coefs
+//Bit 15: 8        reg_vks_ccoef86           // signed , default = 41  poly-phase scalar coefs
+//Bit  7: 0        reg_vks_ccoef87           // signed , default = -4  poly-phase scalar coefs
+    #define VKS_PPS_CCOEF22                       0x62  //
+//Bit 31:24        reg_vks_ccoef88           // signed , default = -9  poly-phase scalar coefs
+//Bit 23:16        reg_vks_ccoef89           // signed , default = 97  poly-phase scalar coefs
+//Bit 15: 8        reg_vks_ccoef90           // signed , default = 44  poly-phase scalar coefs
+//Bit  7: 0        reg_vks_ccoef91           // signed , default = -4  poly-phase scalar coefs
+    #define VKS_PPS_CCOEF23                       0x63  //
+//Bit 31:24        reg_vks_ccoef92           // signed , default = -9  poly-phase scalar coefs
+//Bit 23:16        reg_vks_ccoef93           // signed , default = 95  poly-phase scalar coefs
+//Bit 15: 8        reg_vks_ccoef94           // signed , default = 47  poly-phase scalar coefs
+//Bit  7: 0        reg_vks_ccoef95           // signed , default = -5  poly-phase scalar coefs
+    #define VKS_PPS_CCOEF24                       0x64  //
+//Bit 31:24        reg_vks_ccoef96           // signed , default = -9  poly-phase scalar coefs
+//Bit 23:16        reg_vks_ccoef97           // signed , default = 93  poly-phase scalar coefs
+//Bit 15: 8        reg_vks_ccoef98           // signed , default = 49  poly-phase scalar coefs
+//Bit  7: 0        reg_vks_ccoef99           // signed , default = -5  poly-phase scalar coefs
+    #define VKS_PPS_CCOEF25                       0x65  //
+//Bit 31:24        reg_vks_ccoef100          // signed , default = -9  poly-phase scalar coefs
+//Bit 23:16        reg_vks_ccoef101          // signed , default = 90  poly-phase scalar coefs
+//Bit 15: 8        reg_vks_ccoef102          // signed , default = 52  poly-phase scalar coefs
+//Bit  7: 0        reg_vks_ccoef103          // signed , default = -5  poly-phase scalar coefs
+    #define VKS_PPS_CCOEF26                       0x66  //
+//Bit 31:24        reg_vks_ccoef104          // signed , default = -9  poly-phase scalar coefs
+//Bit 23:16        reg_vks_ccoef105          // signed , default = 88  poly-phase scalar coefs
+//Bit 15: 8        reg_vks_ccoef106          // signed , default = 55  poly-phase scalar coefs
+//Bit  7: 0        reg_vks_ccoef107          // signed , default = -6  poly-phase scalar coefs
+    #define VKS_PPS_CCOEF27                       0x67  //
+//Bit 31:24        reg_vks_ccoef108          // signed , default = -9  poly-phase scalar coefs
+//Bit 23:16        reg_vks_ccoef109          // signed , default = 85  poly-phase scalar coefs
+//Bit 15: 8        reg_vks_ccoef110          // signed , default = 58  poly-phase scalar coefs
+//Bit  7: 0        reg_vks_ccoef111          // signed , default = -6  poly-phase scalar coefs
+    #define VKS_PPS_CCOEF28                       0x68  //
+//Bit 31:24        reg_vks_ccoef112          // signed , default = -8  poly-phase scalar coefs
+//Bit 23:16        reg_vks_ccoef113          // signed , default = 82  poly-phase scalar coefs
+//Bit 15: 8        reg_vks_ccoef114          // signed , default = 60  poly-phase scalar coefs
+//Bit  7: 0        reg_vks_ccoef115          // signed , default = -6  poly-phase scalar coefs
+    #define VKS_PPS_CCOEF29                       0x69  //
+//Bit 31:24        reg_vks_ccoef116          // signed , default = -8  poly-phase scalar coefs
+//Bit 23:16        reg_vks_ccoef117          // signed , default = 80  poly-phase scalar coefs
+//Bit 15: 8        reg_vks_ccoef118          // signed , default = 63  poly-phase scalar coefs
+//Bit  7: 0        reg_vks_ccoef119          // signed , default = -7  poly-phase scalar coefs
+    #define VKS_PPS_CCOEF30                       0x6a  //
+//Bit 31:24        reg_vks_ccoef120          // signed , default = -8  poly-phase scalar coefs
+//Bit 23:16        reg_vks_ccoef121          // signed , default = 77  poly-phase scalar coefs
+//Bit 15: 8        reg_vks_ccoef122          // signed , default = 66  poly-phase scalar coefs
+//Bit  7: 0        reg_vks_ccoef123          // signed , default = -7  poly-phase scalar coefs
+    #define VKS_PPS_CCOEF31                       0x6b  //
+//Bit 31:24        reg_vks_ccoef124          // signed , default = -8  poly-phase scalar coefs
+//Bit 23:16        reg_vks_ccoef125          // signed , default = 74  poly-phase scalar coefs
+//Bit 15: 8        reg_vks_ccoef126          // signed , default = 69  poly-phase scalar coefs
+//Bit  7: 0        reg_vks_ccoef127          // signed , default = -7  poly-phase scalar coefs
+    #define VKS_PPS_CCOEF32                       0x6c  //
+//Bit 31:24        reg_vks_ccoef128          // signed , default = -8  poly-phase scalar coefs
+//Bit 23:16        reg_vks_ccoef129          // signed , default = 72  poly-phase scalar coefs
+//Bit 15: 8        reg_vks_ccoef130          // signed , default = 72  poly-phase scalar coefs
+//Bit  7: 0        reg_vks_ccoef131          // signed , default = -8  poly-phase scalar coefs
+
+
+// synopsys translate_off
+// synopsys translate_on
+//
+// Closing file:  vkstone_regs.h
+//
+////=================================================================////
+//// vpp dither
+////=================================================================////
+// 8'h20-8'h3f
+//
+// Reading file:  vpp_dither_regs.h
+//
+// synopsys translate_off
+// synopsys translate_on
+#define   VPP_VE_DITHER_CTRL                       (0x3120)
+#define P_VPP_VE_DITHER_CTRL                       (volatile unsigned int *)((0x3120  << 2) + 0xff900000)
+#define   VPP_VE_DITHER_LUT_1                      (0x3121)
+#define P_VPP_VE_DITHER_LUT_1                      (volatile unsigned int *)((0x3121  << 2) + 0xff900000)
+#define   VPP_VE_DITHER_LUT_2                      (0x3122)
+#define P_VPP_VE_DITHER_LUT_2                      (volatile unsigned int *)((0x3122  << 2) + 0xff900000)
+#define   VPP_VE_DITHER_LUT_3                      (0x3123)
+#define P_VPP_VE_DITHER_LUT_3                      (volatile unsigned int *)((0x3123  << 2) + 0xff900000)
+#define   VPP_VE_DITHER_LUT_4                      (0x3124)
+#define P_VPP_VE_DITHER_LUT_4                      (volatile unsigned int *)((0x3124  << 2) + 0xff900000)
+#define   VPP_VE_DITHER_LUT_5                      (0x3125)
+#define P_VPP_VE_DITHER_LUT_5                      (volatile unsigned int *)((0x3125  << 2) + 0xff900000)
+#define   VPP_VE_DITHER_LUT_6                      (0x3126)
+#define P_VPP_VE_DITHER_LUT_6                      (volatile unsigned int *)((0x3126  << 2) + 0xff900000)
+#define   VPP_VE_DITHER_LUT_7                      (0x3127)
+#define P_VPP_VE_DITHER_LUT_7                      (volatile unsigned int *)((0x3127  << 2) + 0xff900000)
+#define   VPP_VE_DITHER_LUT_8                      (0x3128)
+#define P_VPP_VE_DITHER_LUT_8                      (volatile unsigned int *)((0x3128  << 2) + 0xff900000)
+#define   VPP_VE_DITHER_LUT_9                      (0x3129)
+#define P_VPP_VE_DITHER_LUT_9                      (volatile unsigned int *)((0x3129  << 2) + 0xff900000)
+#define   VPP_VE_DITHER_LUT_10                     (0x312a)
+#define P_VPP_VE_DITHER_LUT_10                     (volatile unsigned int *)((0x312a  << 2) + 0xff900000)
+#define   VPP_VE_DITHER_LUT_11                     (0x312b)
+#define P_VPP_VE_DITHER_LUT_11                     (volatile unsigned int *)((0x312b  << 2) + 0xff900000)
+#define   VPP_VE_DITHER_LUT_12                     (0x312c)
+#define P_VPP_VE_DITHER_LUT_12                     (volatile unsigned int *)((0x312c  << 2) + 0xff900000)
+#define   VPP_OSDSC_DITHER_CTRL                    (0x3130)
+#define P_VPP_OSDSC_DITHER_CTRL                    (volatile unsigned int *)((0x3130  << 2) + 0xff900000)
+#define   VPP_OSDSC_DITHER_LUT_1                   (0x3131)
+#define P_VPP_OSDSC_DITHER_LUT_1                   (volatile unsigned int *)((0x3131  << 2) + 0xff900000)
+#define   VPP_OSDSC_DITHER_LUT_2                   (0x3132)
+#define P_VPP_OSDSC_DITHER_LUT_2                   (volatile unsigned int *)((0x3132  << 2) + 0xff900000)
+#define   VPP_OSDSC_DITHER_LUT_3                   (0x3133)
+#define P_VPP_OSDSC_DITHER_LUT_3                   (volatile unsigned int *)((0x3133  << 2) + 0xff900000)
+#define   VPP_OSDSC_DITHER_LUT_4                   (0x3134)
+#define P_VPP_OSDSC_DITHER_LUT_4                   (volatile unsigned int *)((0x3134  << 2) + 0xff900000)
+#define   VPP_OSDSC_DITHER_LUT_5                   (0x3135)
+#define P_VPP_OSDSC_DITHER_LUT_5                   (volatile unsigned int *)((0x3135  << 2) + 0xff900000)
+#define   VPP_OSDSC_DITHER_LUT_6                   (0x3136)
+#define P_VPP_OSDSC_DITHER_LUT_6                   (volatile unsigned int *)((0x3136  << 2) + 0xff900000)
+#define   VPP_OSDSC_DITHER_LUT_7                   (0x3137)
+#define P_VPP_OSDSC_DITHER_LUT_7                   (volatile unsigned int *)((0x3137  << 2) + 0xff900000)
+#define   VPP_OSDSC_DITHER_LUT_8                   (0x3138)
+#define P_VPP_OSDSC_DITHER_LUT_8                   (volatile unsigned int *)((0x3138  << 2) + 0xff900000)
+#define   VPP_OSDSC_DITHER_LUT_9                   (0x3139)
+#define P_VPP_OSDSC_DITHER_LUT_9                   (volatile unsigned int *)((0x3139  << 2) + 0xff900000)
+#define   VPP_OSDSC_DITHER_LUT_10                  (0x313a)
+#define P_VPP_OSDSC_DITHER_LUT_10                  (volatile unsigned int *)((0x313a  << 2) + 0xff900000)
+#define   VPP_OSDSC_DITHER_LUT_11                  (0x313b)
+#define P_VPP_OSDSC_DITHER_LUT_11                  (volatile unsigned int *)((0x313b  << 2) + 0xff900000)
+#define   VPP_OSDSC_DITHER_LUT_12                  (0x313c)
+#define P_VPP_OSDSC_DITHER_LUT_12                  (volatile unsigned int *)((0x313c  << 2) + 0xff900000)
+#define   VPP_OSDSC_DITHER_LUT_13                  (0x313d)
+#define P_VPP_OSDSC_DITHER_LUT_13                  (volatile unsigned int *)((0x313d  << 2) + 0xff900000)
+#define   VPP_OSDSC_DITHER_LUT_14                  (0x313e)
+#define P_VPP_OSDSC_DITHER_LUT_14                  (volatile unsigned int *)((0x313e  << 2) + 0xff900000)
+#define   VPP_OSDSC_DITHER_LUT_15                  (0x313f)
+#define P_VPP_OSDSC_DITHER_LUT_15                  (volatile unsigned int *)((0x313f  << 2) + 0xff900000)
+
+
+/* osd super scale */
+#define OSDSR_HV_SIZEIN              VPP_OSDSC_DITHER_CTRL
+#define OSDSR_CTRL_MODE              VPP_OSDSC_DITHER_LUT_1
+#define OSDSR_ABIC_HCOEF             VPP_OSDSC_DITHER_LUT_2
+#define OSDSR_YBIC_HCOEF             VPP_OSDSC_DITHER_LUT_3
+#define OSDSR_CBIC_HCOEF             VPP_OSDSC_DITHER_LUT_4
+#define OSDSR_ABIC_VCOEF             VPP_OSDSC_DITHER_LUT_5
+#define OSDSR_YBIC_VCOEF             VPP_OSDSC_DITHER_LUT_6
+#define OSDSR_CBIC_VCOEF             VPP_OSDSC_DITHER_LUT_7
+#define OSDSR_VAR_PARA               VPP_OSDSC_DITHER_LUT_8
+#define OSDSR_CONST_PARA             VPP_OSDSC_DITHER_LUT_9
+#define OSDSR_RKE_EXTWIN             VPP_OSDSC_DITHER_LUT_10
+#define OSDSR_UK_GRAD2DDIAG_TH_RATE  VPP_OSDSC_DITHER_LUT_11
+#define OSDSR_UK_GRAD2DDIAG_LIMIT    VPP_OSDSC_DITHER_LUT_12
+#define OSDSR_UK_GRAD2DADJA_TH_RATE  VPP_OSDSC_DITHER_LUT_13
+#define OSDSR_UK_GRAD2DADJA_LIMIT    VPP_OSDSC_DITHER_LUT_14
+#define OSDSR_UK_BST_GAIN            VPP_OSDSC_DITHER_LUT_15
+
+// synopsys translate_off
+// synopsys translate_on
+//
+// Closing file:  vpp_dither_regs.h
+//
+// 8'h40-8'h4f
+//
+// Reading file:  osdsc_deband_regs.h
+//
+// synopsys translate_off
+// synopsys translate_on
+#define   OSD_DB_FLT_CTRL                          (0x3140)
+#define P_OSD_DB_FLT_CTRL                          (volatile unsigned int *)((0x3140  << 2) + 0xff900000)
+//Bit 31:27        reserved
+//Bit 26           reg_nrdeband_reset1       // unsigned , default = 1  , 0 : no reload chrm seed 1: reload chrm seed
+//Bit 25           reg_nrdeband_reset0       // unsigned , default = 1  , 0 : no reload luma seed 1: reload luma seed
+//Bit 24           reg_nrdeband_rgb          // unsigned , default = 0  , 0 : yuv 1: RGB
+//Bit 23           reg_nrdeband_en11         // unsigned , default = 0  , debanding registers of side lines, [0] for luma,   same for below
+//Bit 22           reg_nrdeband_en10         // unsigned , default = 0  , debanding registers of side lines, [1] for chroma, same for below
+//Bit 21           reg_nrdeband_siderand     // unsigned , default = 1  , options to use side two lines use the rand, instead of use for the YUV three component of middle line, 0: seed[3]/bandrand[3] for middle line yuv; 1: seed[3]/bandrand[3] for nearby three lines Y;
+//Bit 20           reg_nrdeband_randmode     // unsigned , default = 0  , mode of rand noise adding, 0: same noise strength for all difs; else: strenght of noise will not exceed the difs, MIN((pPKReg->reg_nrdeband_bandrand[m]), noise[m])
+//Bit 19:17        reg_nrdeband_bandrand2    // unsigned , default = 6
+//Bit 16            reserved
+//Bit 15:13        reg_nrdeband_bandrand1    // unsigned , default = 6
+//Bit 12            reserved
+//Bit 11: 9        reg_nrdeband_bandrand0    // unsigned , default = 6
+//Bit  8            reserved
+//Bit  7           reg_nrdeband_hpxor1       // unsigned , default = 1   , debanding random hp portion xor, [0] for luma
+//Bit  6           reg_nrdeband_hpxor0       // unsigned , default = 1   , debanding random hp portion xor, [1] for chroma
+//Bit  5           reg_nrdeband_en1          // unsigned , default = 0   , debanding registers,  for luma
+//Bit  4           reg_nrdeband_en0          // unsigned , default = 0   , debanding registers,  for chroma
+//Bit  3: 2        reg_nrdeband_lpf_mode1    // unsigned , default = 2   , lpf mode, 0: 3x3, 1:3x5; 2: 5x5; 3:5x7
+//Bit  1: 0        reg_nrdeband_lpf_mode0    // unsigned , default = 2   , lpf mode, 0: 3x3, 1:3x5; 2: 5x5; 3:5x7
+#define   OSD_DB_FLT_CTRL1                         (0x3141)
+#define P_OSD_DB_FLT_CTRL1                         (volatile unsigned int *)((0x3141  << 2) + 0xff900000)
+//Bit 31:18        reserved
+//Bit 17:16        reg_nrdeband_noise_rs     // unsigned , default = 2
+//Bit 15:12        reg_nrdeband_randgain     // unsigned , default = 8
+//Bit 11            reserved
+//Bit 10: 8        reg_nrdeband_bandrand5    // unsigned , default = 6
+//Bit  7            reserved
+//Bit  6: 4        reg_nrdeband_bandrand4    // unsigned , default = 6
+//Bit  3            reserved
+//Bit  2: 0        reg_nrdeband_bandrand3    // unsigned , default = 6
+#define   OSD_DB_FLT_LUMA_THRD                     (0x3142)
+#define P_OSD_DB_FLT_LUMA_THRD                     (volatile unsigned int *)((0x3142  << 2) + 0xff900000)
+//Bit 31:30        reserved
+//Bit 29:24        reg_nrdeband_luma_th3     // unsigned , default = 36   , threshold to |Y-Ylpf|, if < th[0] use lpf
+//Bit 23:22        reserved
+//Bit 21:16        reg_nrdeband_luma_th2     // unsigned , default = 28   , elseif <th[1] use (lpf*3 + y)/4
+//Bit 15:14        reserved
+//Bit 13: 8        reg_nrdeband_luma_th1     // unsigned , default = 24   , elseif <th[1] use (lpf*3 + y)/4elseif <th[2] (lpf*1 + y)/2
+//Bit  7: 6        reserved
+//Bit  5: 0        reg_nrdeband_luma_th0     // unsigned , default = 20   , elseif <th[1] use (lpf*3 + y)/4elseif elseif <th[3] (lpf*1 + 3*y)/4; else
+#define   OSD_DB_FLT_CHRM_THRD                     (0x3143)
+#define P_OSD_DB_FLT_CHRM_THRD                     (volatile unsigned int *)((0x3143  << 2) + 0xff900000)
+//Bit 31:30        reserved
+//Bit 29:24        reg_nrdeband_chrm_th3     // unsigned , default = 36   , threshold to |Y-Ylpf|, if < th[0] use lpf
+//Bit 23:22        reserved
+//Bit 21:16        reg_nrdeband_chrm_th2     // unsigned , default = 28   , elseif <th[1] use (lpf*3 + y)/4
+//Bit 15:14        reserved
+//Bit 13: 8        reg_nrdeband_chrm_th1     // unsigned , default = 24   , elseif <th[1] use (lpf*3 + y)/4elseif <th[2] (lpf*1 + y)/2
+//Bit  7: 6        reserved
+//Bit  5: 0        reg_nrdeband_chrm_th0     // unsigned , default = 20   , elseif <th[1] use (lpf*3 + y)/4elseif elseif
+#define   OSD_DB_FLT_RANDLUT                       (0x3144)
+#define P_OSD_DB_FLT_RANDLUT                       (volatile unsigned int *)((0x3144  << 2) + 0xff900000)
+//Bit 31:24        reserved
+//Bit 23:21        reg_nrdeband_randslut7    // unsigned , default = 1   rand lut7
+//Bit 20:18        reg_nrdeband_randslut6    // unsigned , default = 1   rand lut6
+//Bit 17:15        reg_nrdeband_randslut5    // unsigned , default = 1   rand lut5
+//Bit 14:12        reg_nrdeband_randslut4    // unsigned , default = 1   rand lut4
+//Bit 11: 9        reg_nrdeband_randslut3    // unsigned , default = 1   rand lut3
+//Bit  8: 6        reg_nrdeband_randslut2    // unsigned , default = 1   rand lut2
+//Bit  5: 3        reg_nrdeband_randslut1    // unsigned , default = 1   rand lut1
+//Bit  2: 0        reg_nrdeband_randslut0    // unsigned , default = 1   rand lut0
+#define   OSD_DB_FLT_PXI_THRD                      (0x3145)
+#define P_OSD_DB_FLT_PXI_THRD                      (volatile unsigned int *)((0x3145  << 2) + 0xff900000)
+//Bit 31:26        reserved
+//Bit 25:16        reg_nrdeband_yc_th1       // unsigned , default = 0   ,threshold to luma/|u/v| for using the denoise
+//Bit 15:10        reserved
+//Bit  9: 0        reg_nrdeband_yc_th0       // unsigned , default = 0   ,threshold to luma/|u/v| for using the denoise
+#define   OSD_DB_FLT_SEED_Y                        (0x3146)
+#define P_OSD_DB_FLT_SEED_Y                        (volatile unsigned int *)((0x3146  << 2) + 0xff900000)
+//Bit 31: 0        reg_nrdeband_seed0        // unsigned , default = 1621438240  ,debanding noise adding seed for Y. seed[0]= 0x60a52f20; as default
+#define   OSD_DB_FLT_SEED_U                        (0x3147)
+#define P_OSD_DB_FLT_SEED_U                        (volatile unsigned int *)((0x3147  << 2) + 0xff900000)
+//Bit 31: 0        reg_nrdeband_seed1        // unsigned , default = 1621438247  ,debanding noise adding seed for U. seed[0]= 0x60a52f27; as default
+#define   OSD_DB_FLT_SEED_V                        (0x3148)
+#define P_OSD_DB_FLT_SEED_V                        (volatile unsigned int *)((0x3148  << 2) + 0xff900000)
+//Bit 31: 0        reg_nrdeband_seed2        // unsigned , default = 1621438242  ,debanding noise adding seed for V. seed[0]= 0x60a52f22; as default
+#define   OSD_DB_FLT_SEED3                         (0x3149)
+#define P_OSD_DB_FLT_SEED3                         (volatile unsigned int *)((0x3149  << 2) + 0xff900000)
+//Bit 31: 0        reg_nrdeband_seed3        // unsigned , default = 1621438242  ,debanding noise adding seed for V. seed[0]= 0x60a52f22; as default
+#define   OSD_DB_FLT_SEED4                         (0x314a)
+#define P_OSD_DB_FLT_SEED4                         (volatile unsigned int *)((0x314a  << 2) + 0xff900000)
+//Bit 31: 0        reg_nrdeband_seed4        // unsigned , default = 1621438242  ,debanding noise adding seed for V. seed[0]= 0x60a52f22; as default
+#define   OSD_DB_FLT_SEED5                         (0x314b)
+#define P_OSD_DB_FLT_SEED5                         (volatile unsigned int *)((0x314b  << 2) + 0xff900000)
+//Bit 31: 0        reg_nrdeband_seed5        // unsigned , default = 1621438242  ,debanding noise adding seed for V. seed[0]= 0x60a52f22; as default
+// synopsys translate_off
+// synopsys translate_on
+//
+// Closing file:  osdsc_deband_regs.h
+//
+//register definition for xvycc
+// 8'h50-8'h7f
+//
+// Reading file:  xvycc_regs.h
+//
+// synopsys translate_off
+// synopsys translate_on
+//    `define XVYCC_VCBUS_BASE	   8'hfe
+#define   XVYCC_INV_LUT_Y_ADDR_PORT                (0x3158)
+#define P_XVYCC_INV_LUT_Y_ADDR_PORT                (volatile unsigned int *)((0x3158  << 2) + 0xff900000)
+//Bit 31:7, reserved
+//Bit  6:0,  xvycc_inv_lut_y_addr;
+#define   XVYCC_INV_LUT_Y_DATA_PORT                (0x3159)
+#define P_XVYCC_INV_LUT_Y_DATA_PORT                (volatile unsigned int *)((0x3159  << 2) + 0xff900000)
+//Bit 31:12, reserved
+//Bit  11:0, xvycc_inv_lut_y_data;
+#define   XVYCC_INV_LUT_U_ADDR_PORT                (0x315a)
+#define P_XVYCC_INV_LUT_U_ADDR_PORT                (volatile unsigned int *)((0x315a  << 2) + 0xff900000)
+//Bit 31:6, reserved
+//Bit  5:0,  xvycc_inv_lut_u_addr;
+#define   XVYCC_INV_LUT_U_DATA_PORT                (0x315b)
+#define P_XVYCC_INV_LUT_U_DATA_PORT                (volatile unsigned int *)((0x315b  << 2) + 0xff900000)
+//Bit 31:12, reserved
+//Bit  11:0, xvycc_inv_lut_u_data;
+#define   XVYCC_INV_LUT_V_ADDR_PORT                (0x315c)
+#define P_XVYCC_INV_LUT_V_ADDR_PORT                (volatile unsigned int *)((0x315c  << 2) + 0xff900000)
+//Bit 31:6, reserved
+//Bit  5:0,  xvycc_inv_lut_v_addr;
+#define   XVYCC_INV_LUT_V_DATA_PORT                (0x315d)
+#define P_XVYCC_INV_LUT_V_DATA_PORT                (volatile unsigned int *)((0x315d  << 2) + 0xff900000)
+//Bit 31:12, reserved
+//Bit  11:0, xvycc_inv_lut_v_data;
+#define   XVYCC_LUT_R_ADDR_PORT                    (0x315e)
+#define P_XVYCC_LUT_R_ADDR_PORT                    (volatile unsigned int *)((0x315e  << 2) + 0xff900000)
+//Bit 31:7, reserved
+//Bit  6:0,  xvycc_lut_r_addr;
+#define   XVYCC_LUT_R_DATA_PORT                    (0x315f)
+#define P_XVYCC_LUT_R_DATA_PORT                    (volatile unsigned int *)((0x315f  << 2) + 0xff900000)
+//Bit 31:10, reserved
+//Bit  9:0,  xvycc_lut_r_data;
+#define   XVYCC_LUT_G_ADDR_PORT                    (0x3160)
+#define P_XVYCC_LUT_G_ADDR_PORT                    (volatile unsigned int *)((0x3160  << 2) + 0xff900000)
+//Bit 31:7, reserved
+//Bit  6:0,  xvycc_lut_g_addr;
+#define   XVYCC_LUT_G_DATA_PORT                    (0x3161)
+#define P_XVYCC_LUT_G_DATA_PORT                    (volatile unsigned int *)((0x3161  << 2) + 0xff900000)
+//Bit 31:10, reserved
+//Bit  9:0,  xvycc_lut_g_data;
+#define   XVYCC_LUT_B_ADDR_PORT                    (0x3162)
+#define P_XVYCC_LUT_B_ADDR_PORT                    (volatile unsigned int *)((0x3162  << 2) + 0xff900000)
+//Bit 31:7, reserved
+//Bit  6:0,  xvycc_lut_b_addr;
+#define   XVYCC_LUT_B_DATA_PORT                    (0x3163)
+#define P_XVYCC_LUT_B_DATA_PORT                    (volatile unsigned int *)((0x3163  << 2) + 0xff900000)
+//Bit 31:10, reserved
+//Bit  9:0,  xvycc_lut_b_data;
+#define   XVYCC_INV_LUT_CTL                        (0x3164)
+#define P_XVYCC_INV_LUT_CTL                        (volatile unsigned int *)((0x3164  << 2) + 0xff900000)
+//Bit 31:15, reserved
+//Bit 14:12, reg_xvycc_cmpr_invlut_enable    enable for xvycc compression inverse-lut [2] for Y, [1] for U, [0] for V default=0
+//Bit 11:10, reg_xvycc_cmpr_invlut_vscl_1   v LUT input scale for positive portion   default=0
+//Bit  9: 8, reg_xvycc_cmpr_invlut_vscl_0   v LUT input scale for negative portion   default=0
+//Bit  7: 6, reg_xvycc_cmpr_invlut_uscl_1   u LUT input scale for positive portion   default=0
+//Bit  5: 4, reg_xvycc_cmpr_invlut_uscl_0   u LUT input scale for negative portion   default=0
+//Bit  3: 2, reg_xvycc_cmpr_invlut_yscl_1   y LUT input scale for positive portion   default=0
+//Bit  1: 0, reg_xvycc_cmpr_invlut_yscl_0   y LUT input scale for negative portion   default=0
+#define   XVYCC_LUT_CTL                            (0x3165)
+#define P_XVYCC_LUT_CTL                            (volatile unsigned int *)((0x3165  << 2) + 0xff900000)
+//Bit 31: 7, reserved
+//Bit  6: 4, reg_xvycc_lut_enable  LUT enable [6] for R, [5] for G, [4] for B  default=0
+//Bit  3: 2, reg_xvycc_lut_scl_1   LUT input scale for positive portion   default=0
+//Bit  1: 0, reg_xvycc_lut_scl_0   LUT input scale for negative portion   default=0
+#define   XVYCC_VADJ1_CURV_0                       (0x3166)
+#define P_XVYCC_VADJ1_CURV_0                       (volatile unsigned int *)((0x3166  << 2) + 0xff900000)
+//Bit 31:24, vadj1_softcon_curv0_ci                         default=0
+//Bit 23:12, vadj1_softcon_curv0_b                          default=0
+//Bit 11: 0, vadj1_softcon_curv0_a                          default=0
+#define   XVYCC_VADJ1_CURV_1                       (0x3167)
+#define P_XVYCC_VADJ1_CURV_1                       (volatile unsigned int *)((0x3167  << 2) + 0xff900000)
+//Bit 31:13, reserved
+//Bit 12: 4, vadj1_softcon_curv0_g                          default=0
+//Bit     3, reserved
+//Bit  2: 0, vadj1_softcon_curv0_cs                         default=0
+#define   XVYCC_VADJ1_CURV_2                       (0x3168)
+#define P_XVYCC_VADJ1_CURV_2                       (volatile unsigned int *)((0x3168  << 2) + 0xff900000)
+//Bit 31:24, vadj1_softcon_curv1_ci                         default=0
+//Bit 23:12, vadj1_softcon_curv1_b                          default=0
+//Bit 11: 0, vadj1_softcon_curv1_a                          default=0
+#define   XVYCC_VADJ1_CURV_3                       (0x3169)
+#define P_XVYCC_VADJ1_CURV_3                       (volatile unsigned int *)((0x3169  << 2) + 0xff900000)
+//Bit 31:13, reserved
+//Bit 12: 4, vadj1_softcon_curv1_g                          default=0
+//Bit     3, reserved
+//Bit  2: 0, vadj1_softcon_curv1_cs                         default=0
+#define   XVYCC_VADJ2_CURV_0                       (0x316a)
+#define P_XVYCC_VADJ2_CURV_0                       (volatile unsigned int *)((0x316a  << 2) + 0xff900000)
+//Bit 31:24, vadj2_softcon_curv0_ci                         default=0
+//Bit 23:12, vadj2_softcon_curv0_b                          default=0
+//Bit 11: 0, vadj2_softcon_curv0_a                          default=0
+#define   XVYCC_VADJ2_CURV_1                       (0x316b)
+#define P_XVYCC_VADJ2_CURV_1                       (volatile unsigned int *)((0x316b  << 2) + 0xff900000)
+//Bit 31:13, reserved
+//Bit 12: 4, vadj2_softcon_curv0_g                          default=0
+//Bit     3, reserved
+//Bit  2: 0, vadj2_softcon_curv0_cs                         default=0
+#define   XVYCC_VADJ2_CURV_2                       (0x316c)
+#define P_XVYCC_VADJ2_CURV_2                       (volatile unsigned int *)((0x316c  << 2) + 0xff900000)
+//Bit 31:24, vadj2_softcon_curv1_ci                         default=0
+//Bit 23:12, vadj2_softcon_curv1_b                          default=0
+//Bit 11: 0, vadj2_softcon_curv1_a                          default=0
+#define   XVYCC_VADJ2_CURV_3                       (0x316d)
+#define P_XVYCC_VADJ2_CURV_3                       (volatile unsigned int *)((0x316d  << 2) + 0xff900000)
+//Bit 31:13, reserved
+//Bit 12: 4, vadj2_softcon_curv1_g                          default=0
+//Bit     3, reserved
+//Bit  2: 0, vadj2_softcon_curv1_cs                         default=0
+#define   XVYCC_VD1_RGB_CTRST                      (0x3170)
+#define P_XVYCC_VD1_RGB_CTRST                      (volatile unsigned int *)((0x3170  << 2) + 0xff900000)
+//Bit 31:28, reserved
+//Bit 27:16, reg_vd1_rgb_ctrst        u12, contrast in rgb.      default=1024
+//Bit 15:14, reserved
+//Bit 13: 4, reg_vd1_rgb_ctrst_blklvl u10, contrast blacklevel   default=64
+//Bit  3: 2, reserved
+//Bit     1, reg_vd1_rgbbst_en         u1, enable rgbbst         default=0
+//Bit     0, reg_vd1_rgb_ctrst_prt     u1, enable signal to protect saturation in rgb.  default=1
+#define   XVYCC_VD1_RGB_BRGHT                      (0x3171)
+#define P_XVYCC_VD1_RGB_BRGHT                      (volatile unsigned int *)((0x3171  << 2) + 0xff900000)
+//Bit 31:16, reserved
+//Bit 15: 4, reg_vd1_rgb_brght        s12, brightness level in rgb domain                              default=0
+//Bit  3: 2, reserved
+//Bit     1, reg_vd1_rgb_brght_prt     u1, enalbe signal to protect saturation in rgb                  default=1
+//Bit     0, reg_vd1_rgbbst_dlut_x2    u1, enable signal to do x2 to the dlut cells before subtracting default=0
+#define   XVYCC_VD1_RGB_DLUT_0_3                   (0x3172)
+#define P_XVYCC_VD1_RGB_DLUT_0_3                   (volatile unsigned int *)((0x3172  << 2) + 0xff900000)
+//Bit 31:24, reg_vd1_rgbbst_dlut0      u8,   default = 255
+//Bit 23:16, reg_vd1_rgbbst_dlut1      u8,   default = 205
+//Bit 15: 8, reg_vd1_rgbbst_dlut2      u8,   default = 171
+//Bit  7: 0, reg_vd1_rgbbst_dlut3      u8,   default = 147
+#define   XVYCC_VD1_RGB_DLUT_4_7                   (0x3173)
+#define P_XVYCC_VD1_RGB_DLUT_4_7                   (volatile unsigned int *)((0x3173  << 2) + 0xff900000)
+//Bit 31:24, reg_vd1_rgbbst_dlut4      u8,   default = 128
+//Bit 23:16, reg_vd1_rgbbst_dlut5      u8,   default = 113
+//Bit 15: 8, reg_vd1_rgbbst_dlut6      u8,   default = 102
+//Bit  7: 0, reg_vd1_rgbbst_dlut7      u8,   default = 93
+#define   XVYCC_VD1_RGB_DLUT_8_11                  (0x3174)
+#define P_XVYCC_VD1_RGB_DLUT_8_11                  (volatile unsigned int *)((0x3174  << 2) + 0xff900000)
+//Bit 31:24, reg_vd1_rgbbst_dlut8      u8,   default = 85
+//Bit 23:16, reg_vd1_rgbbst_dlut9      u8,   default = 78
+//Bit 15: 8, reg_vd1_rgbbst_dlut10     u8,   default = 73
+//Bit  7: 0, reg_vd1_rgbbst_dlut11     u8,   default = 68
+#define   XVYCC_POST_RGB_CTRST                     (0x3175)
+#define P_XVYCC_POST_RGB_CTRST                     (volatile unsigned int *)((0x3175  << 2) + 0xff900000)
+//Bit 31:28, reserved
+//Bit 27:16, reg_post_rgb_ctrst        u12, contrast in rgb.      default=1024
+//Bit 15:14, reserved
+//Bit 13: 4, reg_post_rgb_ctrst_blklvl u10, contrast blacklevel   default=64
+//Bit  3: 2, reserved
+//Bit     1, reg_post_rgbbst_en         u1, enable rgbbst         default=0
+//Bit     0, reg_post_rgb_ctrst_prt     u1, enable signal to protect saturation in rgb.  default=1
+#define   XVYCC_POST_RGB_BRGHT                     (0x3176)
+#define P_XVYCC_POST_RGB_BRGHT                     (volatile unsigned int *)((0x3176  << 2) + 0xff900000)
+//Bit 31:16, reserved
+//Bit 15: 4, reg_post_rgb_brght        s12, brightness level in rgb domain                              default=0
+//Bit  3: 2, reserved
+//Bit     1, reg_post_rgb_brght_prt     u1, enalbe signal to protect saturation in rgb                  default=1
+//Bit     0, reg_post_rgbbst_dlut_x2    u1, enable signal to do x2 to the dlut cells before subtracting default=0
+#define   XVYCC_POST_RGB_DLUT_0_3                  (0x3177)
+#define P_XVYCC_POST_RGB_DLUT_0_3                  (volatile unsigned int *)((0x3177  << 2) + 0xff900000)
+//Bit 31:24, reg_post_rgbbst_dlut0      u8,   default = 255
+//Bit 23:16, reg_post_rgbbst_dlut1      u8,   default = 205
+//Bit 15: 8, reg_post_rgbbst_dlut2      u8,   default = 171
+//Bit  7: 0, reg_post_rgbbst_dlut3      u8,   default = 147
+#define   XVYCC_POST_RGB_DLUT_4_7                  (0x3178)
+#define P_XVYCC_POST_RGB_DLUT_4_7                  (volatile unsigned int *)((0x3178  << 2) + 0xff900000)
+//Bit 31:24, reg_post_rgbbst_dlut4      u8,   default = 128
+//Bit 23:16, reg_post_rgbbst_dlut5      u8,   default = 113
+//Bit 15: 8, reg_post_rgbbst_dlut6      u8,   default = 102
+//Bit  7: 0, reg_post_rgbbst_dlut7      u8,   default = 93
+#define   XVYCC_POST_RGB_DLUT_8_11                 (0x3179)
+#define P_XVYCC_POST_RGB_DLUT_8_11                 (volatile unsigned int *)((0x3179  << 2) + 0xff900000)
+//Bit 31:24, reg_post_rgbbst_dlut8      u8,   default = 85
+//Bit 23:16, reg_post_rgbbst_dlut9      u8,   default = 78
+//Bit 15: 8, reg_post_rgbbst_dlut10     u8,   default = 73
+//Bit  7: 0, reg_post_rgbbst_dlut11     u8,   default = 68
+#define   ADAPTIVE_SCALE_REG0                      (0x3150)
+#define P_ADAPTIVE_SCALE_REG0                      (volatile unsigned int *)((0x3150  << 2) + 0xff900000)
+//Bit 31,    reg_adaptive_scale_enable    u1,  default = 1
+//Bit 27:16, reg_adpscl_ys_coef_0        u12,  default = 538
+//Bit 11: 0, reg_adpscl_ys_coef_1        u12,  default = 1389
+#define   ADAPTIVE_SCALE_REG1                      (0x3151)
+#define P_ADAPTIVE_SCALE_REG1                      (volatile unsigned int *)((0x3151  << 2) + 0xff900000)
+//Bit 27:16, reg_adpscl_ys_coef_2        u12,  default = 121
+//Bit 11: 0, reg_adpscl_alpha_0          u12,  default = 1024
+#define   ADAPTIVE_SCALE_REG2                      (0x3152)
+#define P_ADAPTIVE_SCALE_REG2                      (volatile unsigned int *)((0x3152  << 2) + 0xff900000)
+//Bit 27:16, reg_adpscl_alpha_1          u12,  default = 1024
+//Bit 11: 0, reg_adpscl_alpha_2          u12,  default = 1024
+#define   ADAPTIVE_SCALE_REG3                      (0x3153)
+#define P_ADAPTIVE_SCALE_REG3                      (volatile unsigned int *)((0x3153  << 2) + 0xff900000)
+//Bit 31:16, reg_adpscl_beta_0          u16,  default = 0
+//Bit 15: 0, reg_adpscl_beta_1          u16,  default = 0
+#define   ADAPTIVE_SCALE_REG4                      (0x3154)
+#define P_ADAPTIVE_SCALE_REG4                      (volatile unsigned int *)((0x3154  << 2) + 0xff900000)
+//Bit 31:16, reg_adpscl_beta_2          u16,  default = 0
+#define   ADAPTIVE_SCALE_ADDR                      (0x3155)
+#define P_ADAPTIVE_SCALE_ADDR                      (volatile unsigned int *)((0x3155  << 2) + 0xff900000)
+//Bit 6:0,   reg_lut_addr               u7,  default = 0
+#define   ADAPTIVE_SCALE_DATA                      (0x3156)
+#define P_ADAPTIVE_SCALE_DATA                      (volatile unsigned int *)((0x3156  << 2) + 0xff900000)
+//Bit 11:0,  reg_lut_data               u12,  default = 0
+// synopsys translate_off
+// synopsys translate_on
+//
+// Closing file:  xvycc_regs.h
+//
+//register definition for vd2 afbc dec
+// 8'h80-8'h9f
+//
+// Reading file:  vd2_afbc_dec_regs.h
+//
+// synopsys translate_off
+// synopsys translate_on
+////===============================////
+//// reg
+////===============================////
+#define   VD2_AFBC_ENABLE                          (0x3180)
+#define P_VD2_AFBC_ENABLE                          (volatile unsigned int *)((0x3180  << 2) + 0xff900000)
+//Bit   31:1,     reserved
+//Bit   8,        dec_enable        unsigned  , default = 0
+//Bit   7:1,      reserved
+//Bit   0,        frm_start         unsigned  , default = 0
+#define   VD2_AFBC_MODE                            (0x3181)
+#define P_VD2_AFBC_MODE                            (volatile unsigned int *)((0x3181  << 2) + 0xff900000)
+//Bit   31,       soft_reset        the use as go_field
+//Bit   30,       reserved
+//Bit   29,       ddr_sz_mode       uns, default = 0 , 0: fixed block ddr size 1 : unfixed block ddr size;
+//Bit   28,       blk_mem_mode      uns, default = 0 , 0: fixed 16x128 size; 1 : fixed 12x128 size
+//Bit   27:26,    rev_mode          uns, default = 0 , reverse mode
+//Bit   25:24,    mif_urgent        uns, default = 3 , info mif and data mif urgent
+//Bit   22:16,    hold_line_num
+//Bit   15:14,    burst_len         uns, default = 1, 0: burst1 1:burst2 2:burst4
+//Bit   13:8,     compbits_yuv      uns, default = 0 ,
+//                                  bit 1:0,: y  component bitwidth : 00-8bit 01-9bit 10-10bit
+//                                  bit 3:2,: u  component bitwidth : 00-8bit 01-9bit 10-10bit
+//                                  bit 5:4,: v  component bitwidth : 00-8bit 01-9bit 10-10bit
+//Bit   7:6,      vert_skip_y       uns, default = 0 , luma vert skip mode : 00-y0y1, 01-y0, 10-y1, 11-(y0+y1)/2
+//Bit   5:4,      horz_skip_y       uns, default = 0 , luma horz skip mode : 00-y0y1, 01-y0, 10-y1, 11-(y0+y1)/2
+//Bit   3:2,      vert_skip_uv      uns, default = 0 , chroma vert skip mode : 00-y0y1, 01-y0, 10-y1, 11-(y0+y1)/2
+//Bit   1:0,      horz_skip_uv      uns, default = 0 , chroma horz skip mode : 00-y0y1, 01-y0, 10-y1, 11-(y0+y1)/2
+#define   VD2_AFBC_SIZE_IN                         (0x3182)
+#define P_VD2_AFBC_SIZE_IN                         (volatile unsigned int *)((0x3182  << 2) + 0xff900000)
+//Bit   31:29,    reserved
+//Bit   28:16     hsize_in          uns, default = 1920 , pic horz size in  unit: pixel
+//Bit   15:13,    reserved
+//Bit   12:0,     vsize_in          uns, default = 1080 , pic vert size in  unit: pixel
+#define   VD2_AFBC_DEC_DEF_COLOR                   (0x3183)
+#define P_VD2_AFBC_DEC_DEF_COLOR                   (volatile unsigned int *)((0x3183  << 2) + 0xff900000)
+//Bit   31:29,    reserved
+//Bit   29:20,   def_color_y        uns, default = 0, afbc dec y default setting value
+//Bit   19:10,   def_color_u        uns, default = 0, afbc dec u default setting value
+//Bit    9: 0,   def_color_v        uns, default = 0, afbc dec v default setting value
+#define   VD2_AFBC_CONV_CTRL                       (0x3184)
+#define P_VD2_AFBC_CONV_CTRL                       (volatile unsigned int *)((0x3184  << 2) + 0xff900000)
+//Bit   31:12,   reserved
+//Bit   11: 0,   conv_lbuf_len       uns, default = 256, unit=16 pixel need to set = 2^n
+#define   VD2_AFBC_LBUF_DEPTH                      (0x3185)
+#define P_VD2_AFBC_LBUF_DEPTH                      (volatile unsigned int *)((0x3185  << 2) + 0xff900000)
+//Bit   31:28,   reserved
+//Bit   27:16,   dec_lbuf_depth      uns, default = 128; // unit= 8 pixel
+//Bit   15:12,   reserved
+//Bit   11:0,    mif_lbuf_depth      uns, default = 128;
+#define   VD2_AFBC_HEAD_BADDR                      (0x3186)
+#define P_VD2_AFBC_HEAD_BADDR                      (volatile unsigned int *)((0x3186  << 2) + 0xff900000)
+//Bit   31:0,   mif_info_baddr      uns, default = 32'h0;
+#define   VD2_AFBC_BODY_BADDR                      (0x3187)
+#define P_VD2_AFBC_BODY_BADDR                      (volatile unsigned int *)((0x3187  << 2) + 0xff900000)
+//Bit   31:0,   mif_data_baddr      uns, default = 32'h0001_0000;
+#define   VD2_AFBC_SIZE_OUT                        (0x3188)
+#define P_VD2_AFBC_SIZE_OUT                        (volatile unsigned int *)((0x3188  << 2) + 0xff900000)
+//Bit   31:29,   reserved
+//Bit   28:16,   hsize_out          uns, default = 1920 ; // unit: 1 pixel
+//Bit   15:13,   reserved
+//Bit    12:0,   vsize_out          uns, default = 1080 ; // unit: 1 pixel
+#define   VD2_AFBC_OUT_YSCOPE                      (0x3189)
+#define P_VD2_AFBC_OUT_YSCOPE                      (volatile unsigned int *)((0x3189  << 2) + 0xff900000)
+//Bit   31:29,   reserved
+//Bit   28:16,   out_vert_bgn        uns, default = 0    ; // unit: 1 pixel
+//Bit   15:13,   reserved
+//Bit    12:0,   out_vert_end        uns, default = 1079 ; // unit: 1 pixel
+#define   VD2_AFBC_STAT                            (0x318a)
+#define P_VD2_AFBC_STAT                            (volatile unsigned int *)((0x318a  << 2) + 0xff900000)
+//Bit   31:1,   reserved
+//Bit      0,   frm_end_stat         uns, frame end status
+#define   VD2_AFBC_VD_CFMT_CTRL                    (0x318b)
+#define P_VD2_AFBC_VD_CFMT_CTRL                    (volatile unsigned int *)((0x318b  << 2) + 0xff900000)
+//Bit 31    it true, disable clock, otherwise enable clock
+//Bit 30    soft rst bit
+//Bit 28    if true, horizontal formatter use repeating to generete pixel, otherwise use bilinear interpolation
+//Bit 27:24 horizontal formatter initial phase
+//Bit 23    horizontal formatter repeat pixel 0 enable
+//Bit 22:21 horizontal Y/C ratio, 00: 1:1, 01: 2:1, 10: 4:1
+//Bit 20    horizontal formatter enable
+//Bit 19    if true, always use phase0 while vertical formater, meaning always
+//          repeat data, no interpolation
+//Bit 18    if true, disable vertical formatter chroma repeat last line
+//Bit 17    veritcal formatter dont need repeat line on phase0, 1: enable, 0: disable
+//Bit 16    veritcal formatter repeat line 0 enable
+//Bit 15:12 vertical formatter skip line num at the beginning
+//Bit 11:8  vertical formatter initial phase
+//Bit 7:1   vertical formatter phase step (3.4)
+//Bit 0     vertical formatter enable
+#define   VD2_AFBC_VD_CFMT_W                       (0x318c)
+#define P_VD2_AFBC_VD_CFMT_W                       (volatile unsigned int *)((0x318c  << 2) + 0xff900000)
+//Bit 27:16  horizontal formatter width
+//Bit 11:0   vertical formatter width
+#define   VD2_AFBC_MIF_HOR_SCOPE                   (0x318d)
+#define P_VD2_AFBC_MIF_HOR_SCOPE                   (volatile unsigned int *)((0x318d  << 2) + 0xff900000)
+//Bit   31:26,   reserved
+//Bit   25:16,   mif_blk_bgn_h        uns, default = 0  ; // unit: 32 pixel/block hor
+//Bit   15:10,   reserved
+//Bit    9: 0,   mif_blk_end_h        uns, default = 59 ; // unit: 32 pixel/block hor
+#define   VD2_AFBC_MIF_VER_SCOPE                   (0x318e)
+#define P_VD2_AFBC_MIF_VER_SCOPE                   (volatile unsigned int *)((0x318e  << 2) + 0xff900000)
+//Bit   31:28,   reserved
+//Bit   27:16,   mif_blk_bgn_v        uns, default = 0  ; // unit: 32 pixel/block ver
+//Bit   15:12,   reserved
+//Bit   11: 0,   mif_blk_end_v        uns, default = 269; // unit: 32 pixel/block ver
+#define   VD2_AFBC_PIXEL_HOR_SCOPE                 (0x318f)
+#define P_VD2_AFBC_PIXEL_HOR_SCOPE                 (volatile unsigned int *)((0x318f  << 2) + 0xff900000)
+//Bit   31:29,   reserved
+//Bit   28:16,   dec_pixel_bgn_h        uns, default = 0  ; // unit: pixel
+//Bit   15:13,   reserved
+//Bit   12: 0,   dec_pixel_end_h        uns, default = 1919 ; // unit: pixel
+#define   VD2_AFBC_PIXEL_VER_SCOPE                 (0x3190)
+#define P_VD2_AFBC_PIXEL_VER_SCOPE                 (volatile unsigned int *)((0x3190  << 2) + 0xff900000)
+//Bit   31:29,   reserved
+//Bit   28:16,   dec_pixel_bgn_v        uns, default = 0  ; // unit: pixel
+//Bit   15:13,   reserved
+//Bit   12: 0,   dec_pixel_end_v        uns, default = 1079 ; // unit: pixel
+#define   VD2_AFBC_VD_CFMT_H                       (0x3191)
+#define P_VD2_AFBC_VD_CFMT_H                       (volatile unsigned int *)((0x3191  << 2) + 0xff900000)
+//Bit 12:0   vertical formatter height
+// synopsys translate_off
+// synopsys translate_on
+//
+// Closing file:  vd2_afbc_dec_regs.h
+//
+//register definition for osd1 afbcd dec
+// 8'ha0-8'haf
+//
+// Reading file:  osd1_afbcd_regs.h
+//
+// synopsys translate_off
+// synopsys translate_on
+////===============================////
+//// reg
+////===============================////
+#define   OSD1_AFBCD_ENABLE                        (0x31a0)
+#define P_OSD1_AFBCD_ENABLE                        (volatile unsigned int *)((0x31a0  << 2) + 0xff900000)
+//Bit   31:16,    reserved
+//Bit   15:9,     id_fifo_thrd      unsigned  , default = 64, axi id fifo threshold
+//Bit   8,        dec_enable        unsigned  , default = 0
+//Bit   7:1,      reserved
+//Bit   0,        frm_start         unsigned  , default = 0
+#define   OSD1_AFBCD_MODE                          (0x31a1)
+#define P_OSD1_AFBCD_MODE                          (volatile unsigned int *)((0x31a1  << 2) + 0xff900000)
+//Bit   31,       soft_reset              the use as go_field
+//Bit   30:29,    reserved
+//Bit   28,       axi_reorder_mode        default=0, the axi reorder mode, note : don't seting
+//Bit   27:26,    reserved
+//Bit   25:24,    mif_urgent              uns, default = 3 , info mif and data mif urgent
+//Bit   22:16,    hold_line_num
+//Bit   15:8,     rgba_exchan_ctrl
+//Bit   7,        reserved
+//Bit   6,        hreg_block_split        uns, default = 1 , Enable/disable block split mode in sparse allocation
+//Bit   5,        hreg_half_block         uns, default = 1 , Enable/disable half block decoding. 1=half block, 0=full block
+//Bit   4:0,      hreg_pixel_packing_fmt  uns, default = 5 , Pixel format
+#define   OSD1_AFBCD_SIZE_IN                       (0x31a2)
+#define P_OSD1_AFBCD_SIZE_IN                       (volatile unsigned int *)((0x31a2  << 2) + 0xff900000)
+//Bit   31:16     hreg_hsize_in          uns, default = 1920 , pic horz size in  unit: pixel
+//Bit   15:0,     hreg_vsize_in          uns, default = 1080 , pic vert size in  unit: pixel
+#define   OSD1_AFBCD_HDR_PTR                       (0x31a3)
+#define P_OSD1_AFBCD_HDR_PTR                       (volatile unsigned int *)((0x31a3  << 2) + 0xff900000)
+//Bit   31:0      hreg_hdr_ptr           uns, default = 0 ,
+#define   OSD1_AFBCD_FRAME_PTR                     (0x31a4)
+#define P_OSD1_AFBCD_FRAME_PTR                     (volatile unsigned int *)((0x31a4  << 2) + 0xff900000)
+//Bit   31:0      hreg_frame_ptr         uns, default = 0 , The start address of the target frame buffer.
+//                                       For YUV format, this pointer specifies the luma buffer.
+#define   OSD1_AFBCD_CHROMA_PTR                    (0x31a5)
+#define P_OSD1_AFBCD_CHROMA_PTR                    (volatile unsigned int *)((0x31a5  << 2) + 0xff900000)
+//Bit   31:0      hreg_chroma_ptr        uns, default = 0 , Only valid in YUV format, to specify the target chroma buffer.
+#define   OSD1_AFBCD_CONV_CTRL                     (0x31a6)
+#define P_OSD1_AFBCD_CONV_CTRL                     (volatile unsigned int *)((0x31a6  << 2) + 0xff900000)
+//Bit   31:15,   reserved
+//Bit   15: 0,   conv_lbuf_len           uns, default = 1024, unit=16 pixel need to set = 2^n
+#define   OSD1_AFBCD_STATUS                        (0x31a8)
+#define P_OSD1_AFBCD_STATUS                        (volatile unsigned int *)((0x31a8  << 2) + 0xff900000)
+//Bit   30:4,     reserved
+//Bit   3,        hreg_dec_resp          uns, default = 0 , Decoder error flage from the dec4x4 core
+//Bit   2,        hreg_axi_bresp         uns, default = 0 , Bus error flag for AXI write error
+//Bit   1,        hreg_axi_rresp         uns, default = 0 , Bus error flag for AXI read error
+//Bit   0,        hreg_idle_n            uns, default = 0 , Idle output, value 0 indicates the standalone decoder is free now and can start the next frame.
+#define   OSD1_AFBCD_PIXEL_HSCOPE                  (0x31a9)
+#define P_OSD1_AFBCD_PIXEL_HSCOPE                  (volatile unsigned int *)((0x31a9  << 2) + 0xff900000)
+//Bit   31:16,   dec_pixel_bgn_h         uns, default = 0  ; // unit: pixel
+//Bit   15: 0,   dec_pixel_end_h         uns, default = 1919 ; // unit: pixel
+#define   OSD1_AFBCD_PIXEL_VSCOPE                  (0x31aa)
+#define P_OSD1_AFBCD_PIXEL_VSCOPE                  (volatile unsigned int *)((0x31aa  << 2) + 0xff900000)
+//Bit   31:16,   dec_pixel_bgn_v         uns, default = 0  ; // unit: pixel
+//Bit   15: 0,   dec_pixel_end_v         uns, default = 1079 ; // unit: pixel
+// synopsys translate_off
+// synopsys translate_on
+//
+// Closing file:  osd1_afbcd_regs.h
+//
+//register definition for osd1 afbcd dec
+// 8'hb0-8'hca
+//
+// Reading file:  vpp_wm_regs.h
+//
+//// synopsys translate_off
+//`ifdef VPP_WM_REGS_H
+//`else
+//    `define VPP_WM_REGS_H
+//// synopsys translate_on
+//    `define VPPB_VCBUS_BASE                8'h32
+#define   WM_CTRL                                  (0x31b0)
+#define P_WM_CTRL                                  (volatile unsigned int *)((0x31b0  << 2) + 0xff900000)
+//Bit  31,      int_mask					default = 0
+//Bit  30:16,	reserved
+//Bit  15:8,	strength_multiply			default =1
+//Bit  7:6,		reserved
+//Bit  5,       shift_en                      default = 0
+//Bit  4,		background_embedding_on			default =0
+//Bit  3,		mark_en			default =0
+//Bit  2,		noise_en			default =0
+//Bit  1,		blend_en			default =0
+//Bit  0,		wm_en			default =0
+#define   WM_SPACE_RESOLUTION                      (0x31b1)
+#define P_WM_SPACE_RESOLUTION                      (volatile unsigned int *)((0x31b1  << 2) + 0xff900000)
+//Bit  31:25,	reserved
+//Bit  24:16,	spacing_horz			default =10
+//Bit  15:9,    reserved
+//Bit  8:0,		spacing_vert			default =12
+#define   WM_SYMBOLS_NUM                           (0x31b2)
+#define P_WM_SYMBOLS_NUM                           (volatile unsigned int *)((0x31b2  << 2) + 0xff900000)
+//Bit  31:8, reserved
+//Bit  7:4, symbols_cols		1~10;	default =5
+//Bit  3:0, symbols_rows		1~10;	default =2
+#define   WM_MARK_RESOLUTION                       (0x31b3)
+#define P_WM_MARK_RESOLUTION                       (volatile unsigned int *)((0x31b3  << 2) + 0xff900000)
+//Bit  31:20,  mark_hsize		mark_buffer_width;  	default =1820
+//Bit  19:8,   mark_vsize		mark_buffer_height; 	default =1820             t =780
+//Bit  7:6,		reserved
+//Bit  5:0,		scale			default =13                  // scale up
+#define   WM_FREQ_DIST_LEFT                        (0x31b4)
+#define P_WM_FREQ_DIST_LEFT                        (volatile unsigned int *)((0x31b4  << 2) + 0xff900000)
+//Bit  31:21, reserved
+//Bit  20:0, freq_dist_left			default =21092          // frequency_distance [n][0]  each is 7bits, there is 3 dist
+#define   WM_FREQ_DIST_RIGHT                       (0x31b5)
+#define P_WM_FREQ_DIST_RIGHT                       (volatile unsigned int *)((0x31b5  << 2) + 0xff900000)
+//Bit  31:21, reserved
+//Bit  20:0, freq_dist_right			default =21092          // frequency_distance [n][0]  each is 7bits, there is 3 dist
+#define   WM_FREQ_DIST_TOP                         (0x31b6)
+#define P_WM_FREQ_DIST_TOP                         (volatile unsigned int *)((0x31b6  << 2) + 0xff900000)
+//Bit  31:21, reserved
+//Bit  20:0, freq_dist_top			default =21092          // frequency_distance [n][0]  each is 7bits, there is 3 dist
+#define   WM_SYMBOLS_XPOS                          (0x31b7)
+#define P_WM_SYMBOLS_XPOS                          (volatile unsigned int *)((0x31b7  << 2) + 0xff900000)
+//Bit  31:29, reserved
+//Bit  28:16, symbols_xpos_start			default =1536      // SYMBOLS_XPOS * h_res
+//Bit  15:13, reserved
+//Bit  12:0,  symbols_xpos_end			default =3356        // SYMBOLS_XPOS * h_res + mark_hsize
+#define   WM_SYMBOLS_YPOS                          (0x31b8)
+#define P_WM_SYMBOLS_YPOS                          (volatile unsigned int *)((0x31b8  << 2) + 0xff900000)
+//Bit  31:29, reserved
+//Bit  28:16, symbols_ypos_start			default =756      // SYMBOLS_yPOS * y_res
+//Bit  15:13, reserved
+//Bit  12:0,  symbols_ypos_end			    default =1536        // SYMBOLS_yPOS * y_res + mark_vsize
+#define   WM_STORAGE_SETTING                       (0x31b9)
+#define P_WM_STORAGE_SETTING                       (volatile unsigned int *)((0x31b9  << 2) + 0xff900000)
+//Bit  31:28, reserved
+//Bit  27:16, direction_max		default = 80
+//Bit	  15, reserved
+//Bit   14:8, storage_s			default =18               // biggest is 72      S
+//Bit      7, reserved
+//Bit    6:0, storage_max_distance			default =36    // biggest is 72      max_distance
+#define   WM_VIDEO_RESOLUTION                      (0x31ba)
+#define P_WM_VIDEO_RESOLUTION                      (volatile unsigned int *)((0x31ba  << 2) + 0xff900000)
+//Bit  31:29, reserved
+//Bit  28:16, h_res			default =3840                   // video hsize
+//Bit  15:13, reserved
+//Bit  12:0,  v_res			default =2160                   // video vsize
+#define   WM_EMBEDDING_STRENGTH_THRESHOLD0         (0x31bb)
+#define P_WM_EMBEDDING_STRENGTH_THRESHOLD0         (volatile unsigned int *)((0x31bb  << 2) + 0xff900000)
+//Bit  31:28, reserved
+//Bit  27:16, embedding_strength_threshold_0		default =48
+//Bit  15:12, reserved
+//Bit  11:0,  embedding_strength_threshold_1		default =60
+#define   WM_EMBEDDING_STRENGTH_THRESHOLD1         (0x31bc)
+#define P_WM_EMBEDDING_STRENGTH_THRESHOLD1         (volatile unsigned int *)((0x31bc  << 2) + 0xff900000)
+//Bit  31:28, reserved
+//Bit  27:16, embedding_strength_threshold_2		default = 68
+//Bit  15:12, reserved
+//Bit  11:0,  embedding_strength_threshold_3		default = 80
+#define   WM_EMBEDDING_STRENGTH_THRESHOLD2         (0x31bd)
+#define P_WM_EMBEDDING_STRENGTH_THRESHOLD2         (volatile unsigned int *)((0x31bd  << 2) + 0xff900000)
+//Bit  31:28, reserved
+//Bit  27:16, embedding_strength_threshold_4		default = 88
+//Bit  15:12, reserved
+//Bit  11:0,  embedding_strength_threshold_5		default = 96
+#define   WM_EMBEDDING_STRENGTH_THRESHOLD3         (0x31be)
+#define P_WM_EMBEDDING_STRENGTH_THRESHOLD3         (volatile unsigned int *)((0x31be  << 2) + 0xff900000)
+//Bit  31:28, reserved
+//Bit  27:16, embedding_strength_threshold_6		default = 100
+//Bit  15:12, reserved
+//Bit  11:0,  embedding_strength_threshold_7		default = 108
+#define   WM_EMBEDDING_STRENGTH_THRESHOLD4         (0x31bf)
+#define P_WM_EMBEDDING_STRENGTH_THRESHOLD4         (volatile unsigned int *)((0x31bf  << 2) + 0xff900000)
+//Bit  31:28, reserved
+//Bit  27:16, embedding_strength_threshold_8		default = 112
+//Bit  15:12, reserved
+//Bit  11:0,  embedding_strength_threshold_9		default = 116
+#define   WM_EMBEDDING_STRENGTH_THRESHOLD5         (0x31c0)
+#define P_WM_EMBEDDING_STRENGTH_THRESHOLD5         (volatile unsigned int *)((0x31c0  << 2) + 0xff900000)
+//Bit  31:28, reserved
+//Bit  27:16, embedding_strength_threshold_10		default = 120
+//Bit  15:12, reserved
+//Bit  11:0,  embedding_strength_threshold_11		default = 124
+#define   WM_EMBEDDING_STRENGTH_THRESHOLD_BG0      (0x31c1)
+#define P_WM_EMBEDDING_STRENGTH_THRESHOLD_BG0      (volatile unsigned int *)((0x31c1  << 2) + 0xff900000)
+//Bit  31:28, reserved
+//Bit  27:16, embedding_strength_threshold_bg_0		default =320
+//Bit  15:12, reserved
+//Bit  11:0,  embedding_strength_threshold_bg_1		default = 328
+#define   WM_EMBEDDING_STRENGTH_THRESHOLD_BG1      (0x31c2)
+#define P_WM_EMBEDDING_STRENGTH_THRESHOLD_BG1      (volatile unsigned int *)((0x31c2  << 2) + 0xff900000)
+//Bit  31:28, reserved
+//Bit  27:16, embedding_strength_threshold_bg_2		default = 332
+//Bit  15:12, reserved
+//Bit  11:0,  embedding_strength_threshold_bg_3		default = 340
+#define   WM_EMBEDDING_STRENGTH_THRESHOLD_BG2      (0x31c3)
+#define P_WM_EMBEDDING_STRENGTH_THRESHOLD_BG2      (volatile unsigned int *)((0x31c3  << 2) + 0xff900000)
+//Bit  31:28, reserved
+//Bit  27:16, embedding_strength_threshold_bg_4		default = 344
+//Bit  15:12, reserved
+//Bit  11:0,  embedding_strength_threshold_bg_5		default = 348
+#define   WM_EMBEDDING_STRENGTH_THRESHOLD_BG3      (0x31c4)
+#define P_WM_EMBEDDING_STRENGTH_THRESHOLD_BG3      (volatile unsigned int *)((0x31c4  << 2) + 0xff900000)
+//Bit  31:28, reserved
+//Bit  27:16, embedding_strength_threshold_bg_6		default = 352
+//Bit  15:12, reserved
+//Bit  11:0,  embedding_strength_threshold_bg_7		default = 356
+#define   WM_EMBEDDING_STRENGTH_THRESHOLD_BG4      (0x31c5)
+#define P_WM_EMBEDDING_STRENGTH_THRESHOLD_BG4      (volatile unsigned int *)((0x31c5  << 2) + 0xff900000)
+//Bit  31:28, reserved
+//Bit  27:16, embedding_strength_threshold_bg_8		default = 360
+//Bit  15:12, reserved
+//Bit  11:0,  embedding_strength_threshold_bg_9		default = 368
+#define   WM_EMBEDDING_STRENGTH_THRESHOLD_BG5      (0x31c6)
+#define P_WM_EMBEDDING_STRENGTH_THRESHOLD_BG5      (volatile unsigned int *)((0x31c6  << 2) + 0xff900000)
+//Bit  31:28, reserved
+//Bit  27:16, embedding_strength_threshold_bg_10		default = 372
+//Bit  15:12, reserved
+//Bit  11:0,  embedding_strength_threshold_bg_11		default = 380
+#define   WM_AM_LUT_DATA_PORT                      (0x31c7)
+#define P_WM_AM_LUT_DATA_PORT                      (volatile unsigned int *)((0x31c7  << 2) + 0xff900000)
+#define   WM_AM_LUT_ADDR_PORT                      (0x31c8)
+#define P_WM_AM_LUT_ADDR_PORT                      (volatile unsigned int *)((0x31c8  << 2) + 0xff900000)
+#define   WM_STATUS_RO                             (0x31c9)
+#define P_WM_STATUS_RO                             (volatile unsigned int *)((0x31c9  << 2) + 0xff900000)
+//Bit  31,  ro_resolution_changed
+//Bit  30:29, reserved
+//Bit  30:16, ro_hsize_in
+//Bit  15:13, reserved
+//Bit  8:0,   ro_vsize_in
+#define   WM_STATUS_RAM_RO                         (0x31ca)
+#define P_WM_STATUS_RAM_RO                         (volatile unsigned int *)((0x31ca  << 2) + 0xff900000)
+//Bit  31:9,  reserved
+//Bit  8:0,   ro_ram_addr
+#define   WM_THRES_ADDR_PORT                       (0x31cb)
+#define P_WM_THRES_ADDR_PORT                       (volatile unsigned int *)((0x31cb  << 2) + 0xff900000)
+#define   WM_THRES_DATA_PORT                       (0x31cd)
+#define P_WM_THRES_DATA_PORT                       (volatile unsigned int *)((0x31cd  << 2) + 0xff900000)
+//
+// Closing file:  vpp_wm_regs.h
+//
+// 8'hd0-8hef
+//
+// Reading file:  bt2020_regs.h
+//
+// synopsys translate_off
+// synopsys translate_on
+//    `define XVYCC_VCBUS_BASE	   8'hfe
+//Bit 31:27 for all [31] for all eotf enable,[30] for matrix3x3 enable, [29:27] for eotf_ch0~3
+//Bit 17:6  for clock gating
+//Bit 5:4   pscale_mode ch2
+//Bit 3:2   pscale_mode ch1
+//Bit 1:0   pscale_mode ch0
+#define   VPP_EOTF_CTL                             (0x31d0)
+#define P_VPP_EOTF_CTL                             (volatile unsigned int *)((0x31d0  << 2) + 0xff900000)
+//Bit 28:16 coef00
+//Bit 12:0  coef01
+#define   VPP_EOTF_COEF00_01                       (0x31d1)
+#define P_VPP_EOTF_COEF00_01                       (volatile unsigned int *)((0x31d1  << 2) + 0xff900000)
+//Bit 28:16 coef02
+//Bit 12:0  coef10
+#define   VPP_EOTF_COEF02_10                       (0x31d2)
+#define P_VPP_EOTF_COEF02_10                       (volatile unsigned int *)((0x31d2  << 2) + 0xff900000)
+//Bit 28:16 coef11
+//Bit 12:0  coef12
+#define   VPP_EOTF_COEF11_12                       (0x31d3)
+#define P_VPP_EOTF_COEF11_12                       (volatile unsigned int *)((0x31d3  << 2) + 0xff900000)
+//Bit 28:16 coef20
+//Bit 12:0  coef21
+#define   VPP_EOTF_COEF20_21                       (0x31d4)
+#define P_VPP_EOTF_COEF20_21                       (volatile unsigned int *)((0x31d4  << 2) + 0xff900000)
+//Bit 28:16 coef22
+//Bit   2:0 coef_rs
+#define   VPP_EOTF_COEF22_RS                       (0x31d5)
+#define P_VPP_EOTF_COEF22_RS                       (volatile unsigned int *)((0x31d5  << 2) + 0xff900000)
+#define   VPP_EOTF_LUT_ADDR_PORT                   (0x31d6)
+#define P_VPP_EOTF_LUT_ADDR_PORT                   (volatile unsigned int *)((0x31d6  << 2) + 0xff900000)
+#define   VPP_EOTF_LUT_DATA_PORT                   (0x31d7)
+#define P_VPP_EOTF_LUT_DATA_PORT                   (volatile unsigned int *)((0x31d7  << 2) + 0xff900000)
+#define   VPP_EOTF_3X3_OFST_0                      (0x31d8)
+#define P_VPP_EOTF_3X3_OFST_0                      (volatile unsigned int *)((0x31d8  << 2) + 0xff900000)
+#define   VPP_EOTF_3X3_OFST_1                      (0x31d9)
+#define P_VPP_EOTF_3X3_OFST_1                      (volatile unsigned int *)((0x31d9  << 2) + 0xff900000)
+// synopsys translate_off
+// synopsys translate_on
+//
+// Closing file:  bt2020_regs.h
+//
+// synopsys translate_off
+// synopsys translate_on
+//
+// Closing file:  srscl_reg.h
+//
+// -----------------------------------------------
+// CBUS_BASE:  VPPC_VCBUS_BASE = 0x32
+// -----------------------------------------------
+//
+// Reading file:  srsharp_regs.h
+//
+// synopsys translate_off
+// synopsys translate_on
+// `define  VPPB_VCBUS_BASE   8'h31
+//VDIN0        8'h00 - 8'h7f
+//VDIN1        8'h80 - 8'hef
+#define  SRSHARP0_OFFSET   (0x00<<2)
+#define  SRSHARP1_OFFSET   (0x80<<2)
+
+//
+// Reading file:  sharp_regs.h
+//
+#define   SHARP_HVSIZE                             (0x3200)
+#define P_SHARP_HVSIZE                             (volatile unsigned int *)((0x3200  << 2) + 0xff900000)
+//Bit 31:29,        reserved
+//Bit 28:16,        reg_pknr_hsize                                                                                                              . unsigned  , default = 1920
+//Bit 15:13,        reserved
+//Bit 12: 0,        reg_pknr_vsize                                                                                                              . unsigned  , default = 1080
+#define   SHARP_HVBLANK_NUM                        (0x3201)
+#define P_SHARP_HVBLANK_NUM                        (volatile unsigned int *)((0x3201  << 2) + 0xff900000)
+//Bit 31:16,        reserved
+//Bit 15: 8,        reg_pknr_hblank_num                                                                                                         . unsigned  , default = 20
+//Bit  7: 0,        reg_pknr_vblank_num                                                                                                         . unsigned  , default = 73
+#define   NR_GAUSSIAN_MODE                         (0x3202)
+#define P_NR_GAUSSIAN_MODE                         (volatile unsigned int *)((0x3202  << 2) + 0xff900000)
+//Bit 31: 5,        reserved
+//Bit  4,            reg_nr_gau_ymode                            : 0 3x3 filter; 1: 5x5 filter                                                   . unsigned  , default = 1
+//Bit  3: 1,        reserved
+//Bit  0,            reg_nr_gau_cmode                            : 0 3x3 filter; 1: 5x5 filter                                                   . unsigned  , default = 1
+#define   PK_CON_2CIRHPGAIN_TH_RATE                (0x3205)
+#define P_PK_CON_2CIRHPGAIN_TH_RATE                (volatile unsigned int *)((0x3205  << 2) + 0xff900000)
+//Bit 31:24,        reg_pk_cirhpcon2gain0                       : threshold0 of curve to map hpcon to hpgain for circle hp filter (all 8 direction same). 0~255.. unsigned  , default = 25
+//Bit 23:16,        reg_pk_cirhpcon2gain1                       : threshold1 of curve to map hpcon to hpgain for circle hp filter (all 8 direction same). 0~255.. unsigned  , default = 60
+//Bit 15: 8,        reg_pk_cirhpcon2gain5                       : rate0 (for hpcon<th0) of curve to map hpcon to hpgain for circle hp filter (all 8 direction same). 0~255.. unsigned  , default = 80
+//Bit  7: 0,        reg_pk_cirhpcon2gain6                       : rate1 (for hpcon>th1) of curve to map hpcon to hpgain for circle hp filter (all 8 direction same). 0~255.. unsigned  , default = 20
+#define   PK_CON_2CIRHPGAIN_LIMIT                  (0x3206)
+#define P_PK_CON_2CIRHPGAIN_LIMIT                  (volatile unsigned int *)((0x3206  << 2) + 0xff900000)
+//Bit 31:24,        reg_pk_cirhpcon2gain2                       : level limit(for hpcon<th0) of curve to map hpcon to hpgain for circle hp filter (all 8 direction same). 0~255.. unsigned  , default = 155
+//Bit 23:16,        reg_pk_cirhpcon2gain3                       : level limit(for th0<hpcon<th1) of curve to map hpcon to hpgain for circle hp filter (all 8 direction same). 0~255.. unsigned  , default = 150
+//Bit 15: 8,        reg_pk_cirhpcon2gain4                       : level limit(for hpcon>th1) of curve to map hpcon to hpgain for circle hp filter (all 8 direction same). 0~255.. unsigned  , default = 5
+//Bit  7: 0,        reserved
+#define   PK_CON_2CIRBPGAIN_TH_RATE                (0x3207)
+#define P_PK_CON_2CIRBPGAIN_TH_RATE                (volatile unsigned int *)((0x3207  << 2) + 0xff900000)
+//Bit 31:24,        reg_pk_cirbpcon2gain0                       : threshold0 of curve to map bpcon to bpgain for circle bp filter (all 8 direction same). 0~255.. unsigned  , default = 20
+//Bit 23:16,        reg_pk_cirbpcon2gain1                       : threshold1 of curve to map bpcon to bpgain for circle bp filter (all 8 direction same).. unsigned  , default = 50
+//Bit 15: 8,        reg_pk_cirbpcon2gain5                       : rate0 (for bpcon<th0) of curve to map bpcon to bpgain for circle bp filter (all 8 direction same). 0~255.. unsigned  , default = 50
+//Bit  7: 0,        reg_pk_cirbpcon2gain6                       : rate1 (for bpcon>th1) of curve to map bpcon to bpgain for circle bp filter (all 8 direction same). 0~255.. unsigned  , default = 25
+#define   PK_CON_2CIRBPGAIN_LIMIT                  (0x3208)
+#define P_PK_CON_2CIRBPGAIN_LIMIT                  (volatile unsigned int *)((0x3208  << 2) + 0xff900000)
+//Bit 31:24,        reg_pk_cirbpcon2gain2                       : level limit(for bpcon<th0) of curve to map bpcon to bpgain for circle bp filter (all 8 direction same). 0~255.. unsigned  , default = 155
+//Bit 23:16,        reg_pk_cirbpcon2gain3                       : level limit(for th0<bpcon<th1) of curve to map bpcon to bpgain for circle bp filter (all 8 direction same). 0~255.. unsigned  , default = 150
+//Bit 15: 8,        reg_pk_cirbpcon2gain4                       : level limit(for bpcon>th1) of curve to map bpcon to bpgain for circle bp filter (all 8 direction same). 0~255.. unsigned  , default = 5
+//Bit  7: 0,        reserved
+#define   PK_CON_2DRTHPGAIN_TH_RATE                (0x3209)
+#define P_PK_CON_2DRTHPGAIN_TH_RATE                (volatile unsigned int *)((0x3209  << 2) + 0xff900000)
+//Bit 31:24,        reg_pk_drthpcon2gain0                       : threshold0 of curve to map hpcon to hpgain for directional hp filter (best direction). 0~255.. unsigned  , default = 25
+//Bit 23:16,        reg_pk_drthpcon2gain1                       : threshold1 of curve to map hpcon to hpgain for directional hp filter (best direction). 0~255.. unsigned  , default = 60
+//Bit 15: 8,        reg_pk_drthpcon2gain5                       : rate0 (for hpcon<th0) of curve to map hpcon to hpgain for directional hp filter (best direction). 0~255.. unsigned  , default = 80
+//Bit  7: 0,        reg_pk_drthpcon2gain6                       : rate1 (for hpcon>th1) of curve to map hpcon to hpgain for directional hp filter (best direction). 0~255.. unsigned  , default = 20
+#define   PK_CON_2DRTHPGAIN_LIMIT                  (0x320a)
+#define P_PK_CON_2DRTHPGAIN_LIMIT                  (volatile unsigned int *)((0x320a  << 2) + 0xff900000)
+//Bit 31:24,        reg_pk_drthpcon2gain2                       : level limit(for hpcon<th0) of curve to map hpcon to hpgain for directional hp filter (best direction).. unsigned  , default = 105
+//Bit 23:16,        reg_pk_drthpcon2gain3                       : level limit(for th0<hpcon<th1) of curve to map hpcon to hpgain for directional hp filter (best direction). 0~255.. unsigned  , default = 96
+//Bit 15: 8,        reg_pk_drthpcon2gain4                       : level limit(for hpcon>th1) of curve to map hpcon to hpgain for directional hp filter (best direction). 0~255.. unsigned  , default = 5
+//Bit  7: 0,        reserved
+#define   PK_CON_2DRTBPGAIN_TH_RATE                (0x320b)
+#define P_PK_CON_2DRTBPGAIN_TH_RATE                (volatile unsigned int *)((0x320b  << 2) + 0xff900000)
+//Bit 31:24,        reg_pk_drtbpcon2gain0                       : threshold0 of curve to map bpcon to bpgain for directional bp filter (best direction). 0~255.. unsigned  , default = 20
+//Bit 23:16,        reg_pk_drtbpcon2gain1                       : threshold1 of curve to map bpcon to bpgain for directional bp filter (best direction). 0~255.. unsigned  , default = 50
+//Bit 15: 8,        reg_pk_drtbpcon2gain5                       : rate0 (for bpcon<th0) of curve to map bpcon to bpgain for directional bp filter (best direction). 0~255.. unsigned  , default = 50
+//Bit  7: 0,        reg_pk_drtbpcon2gain6                       : rate1 (for bpcon>th1) of curve to map bpcon to bpgain for directional bp filter (best direction). 0~255.. unsigned  , default = 25
+#define   PK_CON_2DRTBPGAIN_LIMIT                  (0x320c)
+#define P_PK_CON_2DRTBPGAIN_LIMIT                  (volatile unsigned int *)((0x320c  << 2) + 0xff900000)
+//Bit 31:24,        reg_pk_drtbpcon2gain2                       : level limit(for bpcon<th0) of curve to map bpcon to bpgain for directional bp filter (best direction). 0~255.. unsigned  , default = 55
+//Bit 23:16,        reg_pk_drtbpcon2gain3                       : level limit(for th0<bpcon<th1) of curve to map bpcon to bpgain for directional bp filter (best direction). 0~255.. unsigned  , default = 40
+//Bit 15: 8,        reg_pk_drtbpcon2gain4                       : level limit(for bpcon>th1) of curve to map bpcon to bpgain for directional bp filter (best direction). 0~255.. unsigned  , default = 5
+//Bit  7: 0,        reserved
+#define   PK_CIRFB_LPF_MODE                        (0x320d)
+#define P_PK_CIRFB_LPF_MODE                        (volatile unsigned int *)((0x320d  << 2) + 0xff900000)
+//Bit 31:30,        reserved
+//Bit 29:28,        reg_cirhp_horz_mode                         : no horz filter on HP; 1: [1 2 1]/4; 2/3: [1 2 2 2 1]/8                        . unsigned  , default = 1
+//Bit 27:26,        reserved
+//Bit 25:24,        reg_cirhp_vert_mode                         : no vert filter on HP; 1: [1 2 1]/4; 2/3: [1 2 2 2 1]/8                        . unsigned  , default = 1
+//Bit 23:22,        reserved
+//Bit 21:20,        reg_cirhp_diag_mode                         : filter on HP; 1: [1 2 1]/4;                                                   . unsigned  , default = 1
+//Bit 19:14,        reserved
+//Bit 13:12,        reg_cirbp_horz_mode                         : no horz filter on BP; 1: [1 2 1]/4; 2/3: [1 2 2 2 1]/8                        . unsigned  , default = 1
+//Bit 11:10,        reserved
+//Bit  9: 8,        reg_cirbp_vert_mode                         : no vert filter on BP; 1: [1 2 1]/4; 2/3: [1 2 2 2 1]/8                        . unsigned  , default = 1
+//Bit  7: 6,        reserved
+//Bit  5: 4,        reg_cirbp_diag_mode                         : filter on BP; 1: [1 2 1]/4;                                                   . unsigned  , default = 1
+//Bit  3: 0,        reserved
+#define   PK_DRTFB_LPF_MODE                        (0x320e)
+#define P_PK_DRTFB_LPF_MODE                        (volatile unsigned int *)((0x320e  << 2) + 0xff900000)
+//Bit 31:30,        reserved
+//Bit 29:28,        reg_drthp_horz_mode                         : no horz filter on HP; 1: [1 2 1]/4; 2/3: [1 2 2 2 1]/8  2                     . unsigned  , default = 1
+//Bit 27:26,        reserved
+//Bit 25:24,        reg_drthp_vert_mode                         : no vert filter on HP; 1: [1 2 1]/4; 2/3: [1 2 2 2 1]/8  2                     . unsigned  , default = 1
+//Bit 23:22,        reserved
+//Bit 21:20,        reg_drthp_diag_mode                         : filter on HP; 1: [1 2 1]/4;                             1                     . unsigned  , default = 1
+//Bit 19:14,        reserved
+//Bit 13:12,        reg_drtbp_horz_mode                         : no horz filter on BP; 1: [1 2 1]/4; 2/3: [1 2 2 2 1]/8  2                     . unsigned  , default = 1
+//Bit 11:10,        reserved
+//Bit  9: 8,        reg_drtbp_vert_mode                         : no vert filter on BP; 1: [1 2 1]/4; 2/3: [1 2 2 2 1]/8  2                     . unsigned  , default = 1
+//Bit  7: 6,        reserved
+//Bit  5: 4,        reg_drtbp_diag_mode                         : filter on BP; 1: [1 2 1]/4;                             1                     . unsigned  , default = 1
+//Bit  3: 0,        reserved
+#define   PK_CIRFB_HP_CORING                       (0x320f)
+#define P_PK_CIRFB_HP_CORING                       (volatile unsigned int *)((0x320f  << 2) + 0xff900000)
+//Bit 31:22,        reserved
+//Bit 21:16,        reg_cirhp_horz_core                         : coring of HP for Horz                                                         . unsigned  , default = 0
+//Bit 15:14,        reserved
+//Bit 13: 8,        reg_cirhp_vert_core                         : coring of HP for Vert                                                         . unsigned  , default = 0
+//Bit  7: 6,        reserved
+//Bit  5: 0,        reg_cirhp_diag_core                         : coring of HP for Diag                                                         . unsigned  , default = 0
+#define   PK_CIRFB_BP_CORING                       (0x3210)
+#define P_PK_CIRFB_BP_CORING                       (volatile unsigned int *)((0x3210  << 2) + 0xff900000)
+//Bit 31:22,        reserved
+//Bit 21:16,        reg_cirbp_horz_core                         : coring of HP for Horz                                                         . unsigned  , default = 1
+//Bit 15:14,        reserved
+//Bit 13: 8,        reg_cirbp_vert_core                         : coring of HP for Vert                                                         . unsigned  , default = 1
+//Bit  7: 6,        reserved
+//Bit  5: 0,        reg_cirbp_diag_core                         : coring of HP for Diag                                                         . unsigned  , default = 1
+#define   PK_DRTFB_HP_CORING                       (0x3211)
+#define P_PK_DRTFB_HP_CORING                       (volatile unsigned int *)((0x3211  << 2) + 0xff900000)
+//Bit 31:22,        reserved
+//Bit 21:16,        reg_drthp_horz_core                         : coring of HP for Horz                                                         . unsigned  , default = 1
+//Bit 15:14,        reserved
+//Bit 13: 8,        reg_drthp_vert_core                         : coring of HP for Vert                                                         . unsigned  , default = 1
+//Bit  7: 6,        reserved
+//Bit  5: 0,        reg_drthp_diag_core                         : coring of HP for Diag                                                         . unsigned  , default = 1
+#define   PK_DRTFB_BP_CORING                       (0x3212)
+#define P_PK_DRTFB_BP_CORING                       (volatile unsigned int *)((0x3212  << 2) + 0xff900000)
+//Bit 31:22,        reserved
+//Bit 21:16,        reg_drtbp_horz_core                         : coring of HP for Horz                                                         . unsigned  , default = 1
+//Bit 15:14,        reserved
+//Bit 13: 8,        reg_drtbp_vert_core                         : coring of HP for Vert                                                         . unsigned  , default = 1
+//Bit  7: 6,        reserved
+//Bit  5: 0,        reg_drtbp_diag_core                         : coring of HP for Diag                                                         . unsigned  , default = 1
+#define   PK_CIRFB_BLEND_GAIN                      (0x3213)
+#define P_PK_CIRFB_BLEND_GAIN                      (volatile unsigned int *)((0x3213  << 2) + 0xff900000)
+//Bit 31:28,        reg_hp_cir_hgain                            : normalized 8 as '1'                                                           . unsigned  , default = 8
+//Bit 27:24,        reg_hp_cir_vgain                            : normalized 8 as '1'                                                           . unsigned  , default = 8
+//Bit 23:20,        reg_hp_cir_dgain                            : normalized 8 as '1'                                                           . unsigned  , default = 8
+//Bit 19:16,        reserved
+//Bit 15:12,        reg_bp_cir_hgain                            : normalized 8 as '1'                                                           . unsigned  , default = 8
+//Bit 11: 8,        reg_bp_cir_vgain                            : normalized 8 as '1'                                                           . unsigned  , default = 8
+//Bit  7: 4,        reg_bp_cir_dgain                            : normalized 8 as '1'                                                           . unsigned  , default = 8
+//Bit  3: 0,        reserved
+#define   NR_ALPY_SSD_GAIN_OFST                    (0x3214)
+#define P_NR_ALPY_SSD_GAIN_OFST                    (volatile unsigned int *)((0x3214  << 2) + 0xff900000)
+//Bit 31:16,        reserved
+//Bit 15: 8,        reg_nr_alp0_ssd_gain                        : gain to max ssd normalized 16 as '1'                                          . unsigned  , default = 16
+//Bit  7: 6,        reserved
+//Bit  5: 0,        reg_nr_alp0_ssd_ofst                        : offset to ssd before dividing to min_err                                      . signed    , default = -2
+#define   NR_ALP0Y_ERR2CURV_TH_RATE                (0x3215)
+#define P_NR_ALP0Y_ERR2CURV_TH_RATE                (volatile unsigned int *)((0x3215  << 2) + 0xff900000)
+//Bit 31:24,        reg_nr_alp0_minerr_ypar0                    : threshold0 of curve to map mierr to alp0 for luma channel, this will be set value of flat region mierr that no need blur. 0~255.. unsigned  , default = 10
+//Bit 23:16,        reg_nr_alp0_minerr_ypar1                    : threshold1 of curve to map mierr to alp0 for luma channel,this will be set value of texture region mierr that can not blur.. unsigned  , default = 25
+//Bit 15: 8,        reg_nr_alp0_minerr_ypar5                    : rate0 (for mierr<th0) of curve to map mierr to alp0 for luma channel. the larger of the value, the deep of the slope. 0~255.. unsigned  , default = 80
+//Bit  7: 0,        reg_nr_alp0_minerr_ypar6                    : rate1 (for mierr>th1) of curve to map mierr to alp0 for luma channel. the larger of the value, the deep of the slope. 0~255.. unsigned  , default = 64
+#define   NR_ALP0Y_ERR2CURV_LIMIT                  (0x3216)
+#define P_NR_ALP0Y_ERR2CURV_LIMIT                  (volatile unsigned int *)((0x3216  << 2) + 0xff900000)
+//Bit 31:24,        reg_nr_alp0_minerr_ypar2                    : level limit(for mierr<th0) of curve to map mierr to alp0 for luma channel, this will be set to alp0 that we can do for flat region. 0~255.. unsigned  , default = 63
+//Bit 23:16,        reg_nr_alp0_minerr_ypar3                    : level limit(for th0<mierr<th1) of curve to map mierr to alp0 for luma channel, this will be set to alp0 that we can do for misc region. 0~255.. unsigned  , default = 0
+//Bit 15: 8,        reg_nr_alp0_minerr_ypar4                    : level limit(for mierr>th1) of curve to map mierr to alp0 for luma channel, this will be set to alp0 that we can do for texture region. 0~255.. unsigned  , default = 63
+//Bit  7: 0,        reserved
+#define   NR_ALP0C_ERR2CURV_TH_RATE                (0x3217)
+#define P_NR_ALP0C_ERR2CURV_TH_RATE                (volatile unsigned int *)((0x3217  << 2) + 0xff900000)
+//Bit 31:24,        reg_nr_alp0_minerr_cpar0                    : threshold0 of curve to map mierr to alp0 for chroma channel, this will be set value of flat region mierr that no need blur.. unsigned  , default = 10
+//Bit 23:16,        reg_nr_alp0_minerr_cpar1                    : threshold1 of curve to map mierr to alp0 for chroma channel,this will be set value of texture region mierr that can not blur.. unsigned  , default = 25
+//Bit 15: 8,        reg_nr_alp0_minerr_cpar5                    : rate0 (for mierr<th0) of curve to map mierr to alp0 for chroma channel. the larger of the value, the deep of the slope. 0~255.. unsigned  , default = 80
+//Bit  7: 0,        reg_nr_alp0_minerr_cpar6                    : rate1 (for mierr>th1) of curve to map mierr to alp0 for chroma channel. the larger of the value, the deep of the slope. 0~255.. unsigned  , default = 64
+#define   NR_ALP0C_ERR2CURV_LIMIT                  (0x3218)
+#define P_NR_ALP0C_ERR2CURV_LIMIT                  (volatile unsigned int *)((0x3218  << 2) + 0xff900000)
+//Bit 31:24,        reg_nr_alp0_minerr_cpar2                    : level limit(for mierr<th0) of curve to map mierr to alp0 for chroma channel, this will be set to alp0 that we can do for flat region. 0~255.. unsigned  , default = 63
+//Bit 23:16,        reg_nr_alp0_minerr_cpar3                    : level limit(for th0<mierr<th1) of curve to map mierr to alp0 for chroma channel, this will be set to alp0 that we can do for misc region. 0~255.. unsigned  , default = 0
+//Bit 15: 8,        reg_nr_alp0_minerr_cpar4                    : level limit(for mierr>th1) of curve to map mierr to alp0 for chroma channel, this will be set to alp0 that we can do for texture region. 0~255.. unsigned  , default = 63
+//Bit  7: 0,        reserved
+#define   NR_ALP0_MIN_MAX                          (0x3219)
+#define P_NR_ALP0_MIN_MAX                          (volatile unsigned int *)((0x3219  << 2) + 0xff900000)
+//Bit 31:30,        reserved
+//Bit 29:24,        reg_nr_alp0_ymin                            : normalized to 64 as '1'                                                       . unsigned  , default = 0
+//Bit 23:22,        reserved
+//Bit 21:16,        reg_nr_alp0_ymax                            : normalized to 64 as '1'                                                       . unsigned  , default = 63
+//Bit 15:14,        reserved
+//Bit 13: 8,        reg_nr_alp0_cmin                            : normalized to 64 as '1'                                                       . unsigned  , default = 0
+//Bit  7: 6,        reserved
+//Bit  5: 0,        reg_nr_alp0_cmax                            : normalized to 64 as '1'                                                       . unsigned  , default = 63
+#define   NR_ALP1_MIERR_CORING                     (0x321a)
+#define P_NR_ALP1_MIERR_CORING                     (volatile unsigned int *)((0x321a  << 2) + 0xff900000)
+//Bit 31:17,        reserved
+//Bit 16,            reg_nr_alp1_maxerr_mode                     : 0 max err; 1: xerr                                                            . unsigned  , default = 0
+//Bit 15:14,        reserved
+//Bit 13: 8,        reg_nr_alp1_core_rate                       : normalized 64 as "1"                                                          . unsigned  , default = 0
+//Bit  7: 6,        reserved
+//Bit  5: 0,        reg_nr_alp1_core_ofst                       : normalized 64 as "1"                                                          . signed    , default = 3
+#define   NR_ALP1_ERR2CURV_TH_RATE                 (0x321b)
+#define P_NR_ALP1_ERR2CURV_TH_RATE                 (volatile unsigned int *)((0x321b  << 2) + 0xff900000)
+//Bit 31:24,        reg_nr_alp1_minerr_par0                     : threshold0 of curve to map mierr to alp1 for luma/chroma channel, this will be set value of flat region mierr that no need directional NR. 0~255.. unsigned  , default = 0
+//Bit 23:16,        reg_nr_alp1_minerr_par1                     : threshold1 of curve to map mierr to alp1 for luma/chroma  channel,this will be set value of texture region mierr that can not do directional NR. 0~255.. unsigned  , default = 24
+//Bit 15: 8,        reg_nr_alp1_minerr_par5                     : rate0 (for mierr<th0) of curve to map mierr to alp1 for luma/chroma  channel. the larger of the value, the deep of the slope.. unsigned  , default = 0
+//Bit  7: 0,        reg_nr_alp1_minerr_par6                     : rate1 (for mierr>th1) of curve to map mierr to alp1 for luma/chroma  channel. the larger of the value, the deep of the slope. 0~255. unsigned  , default = 20
+#define   NR_ALP1_ERR2CURV_LIMIT                   (0x321c)
+#define P_NR_ALP1_ERR2CURV_LIMIT                   (volatile unsigned int *)((0x321c  << 2) + 0xff900000)
+//Bit 31:24,        reg_nr_alp1_minerr_par2                     : level limit(for mierr<th0) of curve to map mierr to alp1 for luma/chroma  channel, this will be set to alp1 that we can do for flat region. 0~255.. unsigned  , default = 0
+//Bit 23:16,        reg_nr_alp1_minerr_par3                     : level limit(for th0<mierr<th1) of curve to map mierr to alp1 for luma/chroma  channel, this will be set to alp1 that we can do for misc region. 0~255.. unsigned  , default = 16
+//Bit 15: 8,        reg_nr_alp1_minerr_par4                     : level limit(for mierr>th1) of curve to map mierr to alp1 for luma/chroma  channel, this will be set to alp1 that we can do for texture region. 0~255.255 before. unsigned  , default = 63
+//Bit  7: 0,        reserved
+#define   NR_ALP1_MIN_MAX                          (0x321d)
+#define P_NR_ALP1_MIN_MAX                          (volatile unsigned int *)((0x321d  << 2) + 0xff900000)
+//Bit 31:30,        reserved
+//Bit 29:24,        reg_nr_alp1_ymin                            : normalized to 64 as '1'                                                       . unsigned  , default = 0
+//Bit 23:22,        reserved
+//Bit 21:16,        reg_nr_alp1_ymax                            : normalized to 64 as '1'                                                       . unsigned  , default = 63
+//Bit 15:14,        reserved
+//Bit 13: 8,        reg_nr_alp1_cmin                            : normalized to 64 as '1'                                                       . unsigned  , default = 0
+//Bit  7: 6,        reserved
+//Bit  5: 0,        reg_nr_alp1_cmax                            : normalized to 64 as '1'                                                       . unsigned  , default = 63
+#define   PK_ALP2_MIERR_CORING                     (0x321e)
+#define P_PK_ALP2_MIERR_CORING                     (volatile unsigned int *)((0x321e  << 2) + 0xff900000)
+//Bit 31:17,        reserved
+//Bit 16,            reg_pk_alp2_maxerr_mode                     : 0 max err; 1: xerr                                                            . unsigned  , default = 1
+//Bit 15:14,        reserved
+//Bit 13: 8,        reg_pk_alp2_core_rate                       : normalized 64 as "1"                                                          . unsigned  , default = 0
+//Bit  7: 6,        reserved
+//Bit  5: 0,        reg_pk_alp2_core_ofst                       : normalized 64 as "1"                                                          . signed    , default = 1
+#define   PK_ALP2_ERR2CURV_TH_RATE                 (0x321f)
+#define P_PK_ALP2_ERR2CURV_TH_RATE                 (volatile unsigned int *)((0x321f  << 2) + 0xff900000)
+//Bit 31:24,        reg_pk_alp2_minerr_par0                     : threshold0 of curve to map mierr to alp2 for luma channel, this will be set value of flat region mierr that no need peaking.. unsigned  , default = 0
+//Bit 23:16,        reg_pk_alp2_minerr_par1                     : threshold1 of curve to map mierr to alp2 for luma  channel,this will be set value of texture region mierr that can not do peaking. 0~255.. unsigned  , default = 24
+//Bit 15: 8,        reg_pk_alp2_minerr_par5                     : rate0 (for mierr<th0) of curve to map mierr to alp2 for luma  channel. the larger of the value, the deep of the slope. 0~255.. unsigned  , default = 0
+//Bit  7: 0,        reg_pk_alp2_minerr_par6                     : rate1 (for mierr>th1) of curve to map mierr to alp2 for luma  channel. the larger of the value, the deep of the slope. 0~255.. unsigned  , default = 20
+#define   PK_ALP2_ERR2CURV_LIMIT                   (0x3220)
+#define P_PK_ALP2_ERR2CURV_LIMIT                   (volatile unsigned int *)((0x3220  << 2) + 0xff900000)
+//Bit 31:24,        reg_pk_alp2_minerr_par2                     : level limit(for mierr<th0) of curve to map mierr to alp2 for luma  channel, this will be set to alp2 that we can do for flat region. 0~255.. unsigned  , default = 0
+//Bit 23:16,        reg_pk_alp2_minerr_par3                     : level limit(for th0<mierr<th1) of curve to map mierr to alp2 for luma  channel, this will be set to alp2 that we can do for misc region. 0~255.. unsigned  , default = 16
+//Bit 15: 8,        reg_pk_alp2_minerr_par4                     : level limit(for mierr>th1) of curve to map mierr to alp2 for luma  channel, this will be set to alp2 that we can do for texture region. 0~255. default = 32;. unsigned  , default = 32
+//Bit  7: 0,        reserved
+#define   PK_ALP2_MIN_MAX                          (0x3221)
+#define P_PK_ALP2_MIN_MAX                          (volatile unsigned int *)((0x3221  << 2) + 0xff900000)
+//Bit 31:14,        reserved
+//Bit 13: 8,        reg_pk_alp2_min                             : normalized to 64 as '1'                                                       . unsigned  , default = 0
+//Bit  7: 6,        reserved
+//Bit  5: 0,        reg_pk_alp2_max                             : normalized to 64 as '1'                                                       . unsigned  , default = 63
+#define   PK_FINALGAIN_HP_BP                       (0x3222)
+#define P_PK_FINALGAIN_HP_BP                       (volatile unsigned int *)((0x3222  << 2) + 0xff900000)
+//Bit 31:18,        reserved
+//Bit 17:16,        reg_final_gain_rs                           : s2: right shift bits for the gain normalization, 0 normal to 32 as 1; 1 normalize to 64 as 1; -2 normalized to 8 as 1; -1 normalize 16 as 1. default = 0
+//Bit 15: 8,        reg_hp_final_gain                           : gain to highpass boost result (including directional/circle blending), normalized 32 as '1', 0~255. 1.25 * 32. unsigned  , default = 40
+//Bit  7: 0,        reg_bp_final_gain                           : gain to bandpass boost result (including directional/circle blending), normalized 32 as '1', 0~255. 1.25 * 32. unsigned  , default = 30
+#define   PK_OS_HORZ_CORE_GAIN                     (0x3223)
+#define P_PK_OS_HORZ_CORE_GAIN                     (volatile unsigned int *)((0x3223  << 2) + 0xff900000)
+//Bit 31:24,        reg_pk_os_hsidecore                         : side coring (not to current pixel) to adaptive overshoot margin in horizontal direction. the larger of this value, the less overshoot admitted 0~255;. unsigned  , default = 8
+//Bit 23:16,        reg_pk_os_hsidegain                         : side gain (not to current pixel) to adaptive overshoot margin in horizontal direction. normalized to 32 as '1'. 0~255;. unsigned  , default = 20
+//Bit 15: 8,        reg_pk_os_hmidcore                          : midd coring (to current pixel) to adaptive overshoot margin in horizontal direction. the larger of this value, the less overshoot admitted 0~255;. unsigned  , default = 2
+//Bit  7: 0,        reg_pk_os_hmidgain                          : midd gain (to current pixel) to adaptive overshoot margin in horizontal direction. normalized to 32 as '1'. 0~255;. unsigned  , default = 20
+#define   PK_OS_VERT_CORE_GAIN                     (0x3224)
+#define P_PK_OS_VERT_CORE_GAIN                     (volatile unsigned int *)((0x3224  << 2) + 0xff900000)
+//Bit 31:24,        reg_pk_os_vsidecore                         : side coring (not to current pixel) to adaptive overshoot margin in vertical direction. the larger of this value, the less overshoot admitted 0~255;. unsigned  , default = 8
+//Bit 23:16,        reg_pk_os_vsidegain                         : side gain (not to current pixel) to adaptive overshoot margin in vertical direction. normalized to 32 as '1'. 0~255;. unsigned  , default = 20
+//Bit 15: 8,        reg_pk_os_vmidcore                          : midd coring (to current pixel) to adaptive overshoot margin in vertical direction. the larger of this value, the less overshoot admitted 0~255;. unsigned  , default = 2
+//Bit  7: 0,        reg_pk_os_vmidgain                          : midd gain (to current pixel) to adaptive overshoot margin in vertical direction. normalized to 32 as '1'. 0~255;. unsigned  , default = 20
+#define   PK_OS_ADPT_MISC                          (0x3225)
+#define P_PK_OS_ADPT_MISC                          (volatile unsigned int *)((0x3225  << 2) + 0xff900000)
+//Bit 31:24,        reg_pk_os_minerr_core                       : coring to minerr for adaptive overshoot margin. the larger of this value, the less overshoot admitted 0~255;. unsigned  , default = 40
+//Bit 23:16,        reg_pk_os_minerr_gain                       : gain to minerr based adaptive overshoot margin. normalized to 64 as '1'. 0~255;. unsigned  , default = 6
+//Bit 15: 8,        reg_pk_os_adpt_max                          : maximum limit adaptive overshoot margin (4x). 0~255;                          . unsigned  , default = 200
+//Bit  7: 0,        reg_pk_os_adpt_min                          : minimun limit adaptive overshoot margin (1x). 0~255;                          . unsigned  , default = 20
+#define   PK_OS_STATIC                             (0x3226)
+#define P_PK_OS_STATIC                             (volatile unsigned int *)((0x3226  << 2) + 0xff900000)
+//Bit 31:30,        reserved
+//Bit 29:28,        reg_pk_osh_mode                             : 0~3: (2x+1) window in H direction                                             . unsigned  , default = 2
+//Bit 27:26,        reserved
+//Bit 25:24,        reg_pk_osv_mode                             : 0~3: (2x+1) window in V direction                                             . unsigned  , default = 2
+//Bit 23:22,        reserved
+//Bit 21:12,        reg_pk_os_down                              : static negative overshoot margin. 0~1023;                                     . unsigned  , default = 200
+//Bit 11:10,        reserved
+//Bit  9: 0,        reg_pk_os_up                                : static positive overshoot margin. 0~1023;                                     . unsigned  , default = 200
+#define   PK_NR_ENABLE                             (0x3227)
+#define P_PK_NR_ENABLE                             (volatile unsigned int *)((0x3227  << 2) + 0xff900000)
+//Bit 31: 4,        reserved
+//Bit  3: 2,        reg_3d_mode                                 , 0: no 3D; 1: L/R; 2: T/B; 3: horizontal interleaved, dft = 0                                             //. unsigned  , default = 0
+//Bit  1,            reg_pk_en                                                                                                                   . unsigned  , default = 1
+//Bit  0,            reg_nr_en                                                                                                                   . unsigned  , default = 1
+#define   PK_DRT_SAD_MISC                          (0x3228)
+#define P_PK_DRT_SAD_MISC                          (volatile unsigned int *)((0x3228  << 2) + 0xff900000)
+//Bit 31:24,        reg_pk_sad_ver_gain                         : gain to sad[4], 16 normalized to "1";                                         . unsigned  , default = 32
+//Bit 23:16,        reg_pk_sad_hor_gain                         : gain to sad[0], 16 normalized to "1";                                         . unsigned  , default = 24
+//Bit 15:12,        reserved
+//Bit 11            reserved
+//Bit 10: 9,        reg_pk_bias_diag                            : bias towards diag                                                             . unsigned  , default = 0
+//Bit  8,           reserved
+//Bit  7: 5,        reserved
+//Bit  4: 0,        reg_pk_drt_force                            : force direction of drt peaking filter, h2b: 0:hp drt force, 1: bp drt force; 2: bp+hp drt force, 3: no force;. unsigned  , default = 24
+#define   NR_TI_DNLP_BLEND                         (0x3229)
+#define P_NR_TI_DNLP_BLEND                         (volatile unsigned int *)((0x3229  << 2) + 0xff900000)
+//Bit 31:11,        reserved
+//Bit 10: 8,        reg_dnlp_input_mode                         : dnlp input options. 0: org_y; 1: gau_y; 2: gauadp_y; 3: edgadplpf_y; 4: nr_y;5: lti_y; 6: pk_y (before os);7: pk_y (after os). unsigned  , default = 4
+//Bit  7: 4,        reserved
+//Bit  3: 2,        reg_nr_cti_blend_mode                       : blend mode of nr and lti result: 0: nr; 1:cti; 2: (nr+cti)/2; 3:cti + dlt_nr  . unsigned  , default = 1
+//Bit  1: 0,        reg_nr_lti_blend_mode                       : blend mode of nr and lti result: 0: nr; 1:lti; 2: (nr+lti)/2; 3:lti + dlt_nr  . unsigned  , default = 2
+////////////////////////////////////////////////////////////////////////////////
+// new ti regsters from here
+////////////////////////////////////////////////////////////////////////////////
+#define   LTI_DIR_CORE_ALPHA                       (0x322a)
+#define P_LTI_DIR_CORE_ALPHA                       (volatile unsigned int *)((0x322a  << 2) + 0xff900000)
+//Bit 31:30,        reserved
+//Bit 29:24,        reg_adp_lti_dir_alp_core_ofst               : ofst to min_err, alpha = (min_err - (max_err-min_err)*rate + ofst)/max_err*64;    dft=10. unsigned  , default = 10
+//Bit 23:20,        reserved
+//Bit 19:16,        reg_adp_lti_dir_alp_core_rate               : ofset to min_err, alpha = (min_err - (max_err-min_err)*rate + ofst)/max_err*64;   dft=0/32. unsigned  , default = 0
+//Bit 15:14,        reserved
+//Bit 13: 8,        reg_adp_lti_dir_alpmin                      : min value of alpha, alpha = (min_err+x +ofst)/max_err*64; dft=10              . unsigned  , default = 0
+//Bit  7: 6,        reserved
+//Bit  5: 0,        reg_adp_lti_dir_alpmax                      : max value of alpha, alpha = (min_err+x +ofst)/max_err*64; dft=63              . unsigned  , default = 63
+#define   CTI_DIR_ALPHA                            (0x322b)
+#define P_CTI_DIR_ALPHA                            (volatile unsigned int *)((0x322b  << 2) + 0xff900000)
+//Bit 31:30,        reserved
+//Bit 29:24,        reg_adp_cti_dir_alp_core_ofst               : ofst to min_err, alpha = (min_err - (max_err-min_err)*rate + ofst)/max_err*64;    dft=10. unsigned  , default = 5
+//Bit 23:20,        reserved
+//Bit 19:16,        reg_adp_cti_dir_alp_core_rate               : ofset to min_err, alpha = (min_err - (max_err-min_err)*rate + ofst)/max_err*64;   dft=0/32. unsigned  , default = 0
+//Bit 15:14,        reserved
+//Bit 13: 8,        reg_adp_cti_dir_alpmin                      : min value of alpha, alpha = (min_err +x+ofst)/max_err*64;  dft=10             . unsigned  , default = 0
+//Bit  7: 6,        reserved
+//Bit  5: 0,        reg_adp_cti_dir_alpmax                      : max value of alpha, alpha = (min_err +x+ofst)/max_err*64;  dft=63             . unsigned  , default = 63
+#define   LTI_CTI_DF_GAIN                          (0x322c)
+#define P_LTI_CTI_DF_GAIN                          (volatile unsigned int *)((0x322c  << 2) + 0xff900000)
+//Bit 31:30,        reserved
+//Bit 29:24,        reg_adp_lti_hdf_gain                        : 8 normalized to "1";  default = 12                                            . unsigned  , default = 12
+//Bit 23:22,        reserved
+//Bit 21:16,        reg_adp_lti_vdf_gain                        : 8 normalized to "1";  default = 12                                            . unsigned  , default = 12
+//Bit 15:14,        reserved
+//Bit 13: 8,        reg_adp_cti_hdf_gain                        : 8 normalized to "1";  default = 12                                            . unsigned  , default = 12
+//Bit  7: 6,        reserved
+//Bit  5: 0,        reg_adp_cti_vdf_gain                        : 8 normalized to "1";  default = 12                                            . unsigned  , default = 12
+#define   LTI_CTI_DIR_AC_DBG                       (0x322d)
+#define P_LTI_CTI_DIR_AC_DBG                       (volatile unsigned int *)((0x322d  << 2) + 0xff900000)
+//Bit 31,            reserved
+//Bit 30,            reg_adp_lti_dir_lpf                         : 0: no lpf; 1: [1 2 2 2 1]/8 lpf                                               . unsigned  , default = 1
+//Bit 29,            reserved
+//Bit 28,            reg_adp_lti_dir_difmode                     : 0: y_dif; 1: y_dif + (u_dif+v_dif)/2;                                         . unsigned  , default = 1
+//Bit 27,            reserved
+//Bit 26,            reg_adp_cti_dir_lpf                         : 0: no lpf; 1: [1 2 2 2 1]/8 lpf  dft=1                                        . unsigned  , default = 1
+//Bit 25:24,        reg_adp_cti_dir_difmode                     : 0: (u_dif+v_dif); 1: y_dif/2 + (u_dif+v_dif)*3/4; 2: y_dif + (u_dif+v_dif)/2; 3: y_dif*2 (not recomended). unsigned  , default = 2
+//Bit 23:22,        reg_adp_hvlti_dcblend_mode                  : 0: hlti_dc; 1:vlti_dc; 2: avg  3; blend on alpha                              . unsigned  , default = 3
+//Bit 21:20,        reg_adp_hvcti_dcblend_mode                  : 0: hcti_dc; 1:vcti_dc; 2: avg  3; blend on alpha                              . unsigned  , default = 2
+//Bit 19:18,        reg_adp_hvlti_acblend_mode                  : hlti_ac; 1:vlti_ac; 2: add  3;:adaptive to alpha                              . unsigned  , default = 3
+//Bit 17:16,        reg_adp_hvcti_acblend_mode                  : hcti_ac; 1:vcti_ac; 2: add  3;: adaptive to alpha                             . unsigned  , default = 2
+//Bit 15,            reserved
+//Bit 14:12,        reg_adp_hlti_debug                          , for hlti debug, default = 0                                                   . unsigned  , default = 0
+//Bit 11,            reserved
+//Bit 10: 8,        reg_adp_vlti_debug                          , for vlti debug, default = 0                                                   . unsigned  , default = 0
+//Bit  7,            reserved
+//Bit  6: 4,        reg_adp_hcti_debug                          , for hcti debug, default = 0                                                   . unsigned  , default = 0
+//Bit  3,            reserved
+//Bit  2: 0,        reg_adp_vcti_debug                          , for vcti debug, default = 0                                                   . unsigned  , default = 0
+#define   HCTI_FLT_CLP_DC                          (0x322e)
+#define P_HCTI_FLT_CLP_DC                          (volatile unsigned int *)((0x322e  << 2) + 0xff900000)
+//Bit 31:29,        reserved
+//Bit 28,            reg_adp_hcti_en                             , 0: no cti, 1: new cti, default = 1                                            . unsigned  , default = 1
+//Bit 27:26,        reg_adp_hcti_vdn_flt                        , 0: no lpf; 1:[0,2,4,2,0],  2 : [1 2 2 2 1]/8  3:[1 0 2 0 1]/4, default = 2    . unsigned  , default = 2
+//Bit 25:24,        reg_adp_hcti_hdn_flt                        , 0: no lpf; 1:[0, 0, 0, 4, 8, 4, 0, 0, 0], 2:[0, 0, 2, 4, 4, 4, 2, 0, 0], 3: [1, 2, 2, 2, 2, 2, 2, 2, 1], default = 2. unsigned  , default = 2
+//Bit 23:22,        reg_adp_hcti_ddn_flt                        , 0: no lpf; 1:[0,2,4,2,0],  2 : [1 2 2 2 1]/8 3:[1 0 2 0 1]/4, default = 2     . unsigned  , default = 2
+//Bit 21:20,        reg_adp_hcti_lpf0_flt                       , 0:no filter; 1:sigma=0.75, 2: sigma = 1.0, 3: sigma = 1.5, default = 1        . unsigned  , default = 1
+//Bit 19:18,        reg_adp_hcti_lpf1_flt                       , 0:no filter; 1:sigma= 2.0, 2: sigma = 3.0, 3: sigma = 4.0, default = 1        . unsigned  , default = 1
+//Bit 17:16,        reg_adp_hcti_lpf2_flt                       , 0:no filter; 1:sigma=5.0,  2: sigma = 9.0, 3: sigma = 13.0, default = 1       . unsigned  , default = 1
+//Bit 15:12,        reg_adp_hcti_hard_clp_win                   , window size, 0~8, default = 5                                                 . unsigned  , default = 5
+//Bit 11: 8,        reg_adp_hcti_hard_win_min                   , window size, 0~8, default = 3                                                 . unsigned  , default = 3
+//Bit  7: 5,        reserved
+//Bit  4,            reg_adp_hcti_clp_mode                       , 0: hard clip, 1: adaptive clip, default = 1                                   . unsigned  , default = 1
+//Bit  3,            reserved
+//Bit  2: 0,        reg_adp_hcti_dc_mode                        , 0:dn, 1:lpf0, 2:lpf1, 3:lpf2, 4: lpf3: 5: vdn result; 6/7:org, default = 0    . unsigned  , default = 0
+#define   HCTI_BST_GAIN                            (0x322f)
+#define P_HCTI_BST_GAIN                            (volatile unsigned int *)((0x322f  << 2) + 0xff900000)
+//Bit 31:24,        reg_adp_hcti_bst_gain0                      : gain of the bandpass 0 (lpf1-lpf2)- LBP, default = 80                         . unsigned  , default = 80
+//Bit 23:16,        reg_adp_hcti_bst_gain1                      : gain of the bandpass 1 (lpf0-lpf1)- BP, default = 96                          . unsigned  , default = 96
+//Bit 15: 8,        reg_adp_hcti_bst_gain2                      : gain of the bandpass 2 (hdn-lpf0)-  HP, default = 64                          . unsigned  , default = 64
+//Bit  7: 0,        reg_adp_hcti_bst_gain3                      : gain of the unsharp band (yuvin-hdn) - US, default = 16                       . unsigned  , default = 16
+#define   HCTI_BST_CORE                            (0x3230)
+#define P_HCTI_BST_CORE                            (volatile unsigned int *)((0x3230  << 2) + 0xff900000)
+//Bit 31:24,        reg_adp_hcti_bst_core0                      : core of the bandpass 0 (lpf1-lpf2)- LBP, default = 5                          . unsigned  , default = 5
+//Bit 23:16,        reg_adp_hcti_bst_core1                      : core of the bandpass 1 (lpf0-lpf1)- BP, default = 5                           . unsigned  , default = 5
+//Bit 15: 8,        reg_adp_hcti_bst_core2                      : core of the bandpass 2 (hdn-lpf0)-  HP, default = 5                           . unsigned  , default = 5
+//Bit  7: 0,        reg_adp_hcti_bst_core3                      : core of the unsharp band (yuvin-hdn) - US, default = 3                        . unsigned  , default = 5
+#define   HCTI_CON_2_GAIN_0                        (0x3231)
+#define P_HCTI_CON_2_GAIN_0                        (volatile unsigned int *)((0x3231  << 2) + 0xff900000)
+//Bit 31:29,        reg_adp_hcti_con_mode                       : con mode 0:[0, 0,-1, 1, 0, 0, 0]+[0, 0, 0, 1,-1, 0, 0], 1: [0, 0,-1, 0, 1, 0, 0], 2: [0,-1, 0, 0, 0, 1, 0], 3:[-1, 0, 0, 0, 0, 0, 1], 4: .... default = 1. unsigned  , default = 1
+//Bit 28:26,        reg_adp_hcti_dx_mode                        : dx mode 0: [-1 1 0]; 1~7: [-1 (2x+1)"0" 1], default = 2                       . unsigned  , default = 2
+//Bit 25:24,        reg_adp_hcti_con_lpf                        : lpf mode of the con: 0: [1 2 1]/4; 1:[1 2 2 2 1]/8, default = 0               . unsigned  , default = 0
+//Bit 23:16,        reg_adp_hcti_con_2_gain0                    , default = 25                                                                  . unsigned  , default = 25
+//Bit 15: 8,        reg_adp_hcti_con_2_gain1                    , default = 60                                                                  . unsigned  , default = 60
+//Bit  7: 0,        reg_adp_hcti_con_2_gain2                    0;, default = 5                                                                 . unsigned  , default = 5
+#define   HCTI_CON_2_GAIN_1                        (0x3232)
+#define P_HCTI_CON_2_GAIN_1                        (volatile unsigned int *)((0x3232  << 2) + 0xff900000)
+//Bit 31:24,        reg_adp_hcti_con_2_gain3                    96;, default = 96                                                               . unsigned  , default = 96
+//Bit 23:16,        reg_adp_hcti_con_2_gain4                    5;, default = 5                                                                 . unsigned  , default = 5
+//Bit 15: 8,        reg_adp_hcti_con_2_gain5                    80;, default = 80                                                               . unsigned  , default = 80
+//Bit  7: 0,        reg_adp_hcti_con_2_gain6                    20;, default = 20                                                               . unsigned  , default = 20
+#define   HCTI_OS_MARGIN                           (0x3233)
+#define P_HCTI_OS_MARGIN                           (volatile unsigned int *)((0x3233  << 2) + 0xff900000)
+//Bit 31: 8,        reserved
+//Bit  7: 0,        reg_adp_hcti_os_margin                      : margin for hcti overshoot, default = 0                                        . unsigned  , default = 0
+#define   HLTI_FLT_CLP_DC                          (0x3234)
+#define P_HLTI_FLT_CLP_DC                          (volatile unsigned int *)((0x3234  << 2) + 0xff900000)
+//Bit 31:29,        reserved
+//Bit 28,            reg_adp_hlti_en                             , 0: no cti, 1: new cti, default = 1                                            . unsigned  , default = 1
+//Bit 27:26,        reg_adp_hlti_vdn_flt                        , 0: no lpf; 1:[0,2,4,2,0],   2 : [1 2 2 2 1]/8 3:[1 0 2 0 1]/4, default = 2    . unsigned  , default = 2
+//Bit 25:24,        reg_adp_hlti_hdn_flt                        , 0: no lpf; 1:[0, 0, 0, 4, 8, 4, 0, 0, 0], 2:[0, 0, 2, 4, 4, 4, 2, 0, 0], 3: [1, 2, 2, 2, 2, 2, 2, 2, 1], default = 1. unsigned  , default = 1
+//Bit 23:22,        reg_adp_hlti_ddn_flt                        , 0: no lpf; 1:[0,2,4,2,0],   2 : [1 2 2 2 1]/8 3:[1 0 2 0 1]/4, default = 1    . unsigned  , default = 1
+//Bit 21:20,        reg_adp_hlti_lpf0_flt                       , 0:no filter; 1:sigma=0.75, 2: sigma = 1.0, 3: sigma = 1.5, default = 1        . unsigned  , default = 1
+//Bit 19:18,        reg_adp_hlti_lpf1_flt                       , 0:no filter; 1:sigma= 2.0, 2: sigma = 3.0, 3: sigma = 4.0, default = 1        . unsigned  , default = 1
+//Bit 17:16,        reg_adp_hlti_lpf2_flt                       , 0:no filter; 1:sigma=5.0,  2: sigma = 9.0, 3: sigma = 13.0, default = 1       . unsigned  , default = 1
+//Bit 15:12,        reg_adp_hlti_hard_clp_win                   , window size, 0~8, default = 2                                                 . unsigned  , default = 2
+//Bit 11: 8,        reg_adp_hlti_hard_win_min                   , window size, 0~8, default = 1                                                 . unsigned  , default = 1
+//Bit  7: 5,        reserved
+//Bit  4,            reg_adp_hlti_clp_mode                       , 0: hard clip, 1: adaptive clip, default = 0                                   . unsigned  , default = 0
+//Bit  3,            reserved
+//Bit  2: 0,        reg_adp_hlti_dc_mode                        , 0:dn, 1:lpf0, 2:lpf1, 3:lpf2, 4: lpf3: 5: vdn result; 6/7:org, default = 4    . unsigned  , default = 4
+#define   HLTI_BST_GAIN                            (0x3235)
+#define P_HLTI_BST_GAIN                            (volatile unsigned int *)((0x3235  << 2) + 0xff900000)
+//Bit 31:24,        reg_adp_hlti_bst_gain0                      : gain of the bandpass 0 (lpf1-lpf2)- LBP, default = 32                         . unsigned  , default = 32
+//Bit 23:16,        reg_adp_hlti_bst_gain1                      : gain of the bandpass 1 (lpf0-lpf1)- BP, default = 32                          . unsigned  , default = 32
+//Bit 15: 8,        reg_adp_hlti_bst_gain2                      : gain of the bandpass 2 (hdn-lpf0)-  HP, default = 28                          . unsigned  , default = 28
+//Bit  7: 0,        reg_adp_hlti_bst_gain3                      : gain of the unsharp band (yuvin-hdn) - US, default = 12                       . unsigned  , default = 12
+#define   HLTI_BST_CORE                            (0x3236)
+#define P_HLTI_BST_CORE                            (volatile unsigned int *)((0x3236  << 2) + 0xff900000)
+//Bit 31:24,        reg_adp_hlti_bst_core0                      : core of the bandpass 0 (lpf1-lpf2)- LBP, default = 5                          . unsigned  , default = 5
+//Bit 23:16,        reg_adp_hlti_bst_core1                      : core of the bandpass 1 (lpf0-lpf1)- BP, default = 5                           . unsigned  , default = 5
+//Bit 15: 8,        reg_adp_hlti_bst_core2                      : core of the bandpass 2 (hdn-lpf0)-  HP, default = 5                           . unsigned  , default = 5
+//Bit  7: 0,        reg_adp_hlti_bst_core3                      : core of the unsharp band (yuvin-hdn) - US, default = 3                        . unsigned  , default = 3
+#define   HLTI_CON_2_GAIN_0                        (0x3237)
+#define P_HLTI_CON_2_GAIN_0                        (volatile unsigned int *)((0x3237  << 2) + 0xff900000)
+//Bit 31:29,        reg_adp_hlti_con_mode                       : con mode 0:[0, 0,-1, 1, 0, 0, 0]+[0, 0, 0, 1,-1, 0, 0], 1: [0, 0,-1, 0, 1, 0, 0], 2: [0,-1, 0, 0, 0, 1, 0], 3:[-1, 0, 0, 0, 0, 0, 1], 4: ....., default = 1. unsigned  , default = 1
+//Bit 28:26,        reg_adp_hlti_dx_mode                        : dx mode 0: [-1 1 0]; 1~7: [-1 (2x+1)"0" 1], default = 1                       . unsigned  , default = 1
+//Bit 25:24,        reg_adp_hlti_con_lpf                        : lpf mode of the con: 0: [1 2 1]/4; 1:[1 2 2 2 1]/8, default = 0               . unsigned  , default = 0
+//Bit 23:16,        reg_adp_hlti_con_2_gain0                    25;, default = 25                                                               . unsigned  , default = 25
+//Bit 15: 8,        reg_adp_hlti_con_2_gain1                    60;, default = 60                                                               . unsigned  , default = 60
+//Bit  7: 0,        reg_adp_hlti_con_2_gain2                    0;, default = 5                                                                . unsigned  , default = 5
+#define   HLTI_CON_2_GAIN_1                        (0x3238)
+#define P_HLTI_CON_2_GAIN_1                        (volatile unsigned int *)((0x3238  << 2) + 0xff900000)
+//Bit 31:24,        reg_adp_hlti_con_2_gain3                    96;, default = 96                                                               . unsigned  , default = 96
+//Bit 23:16,        reg_adp_hlti_con_2_gain4                    5;, default = 95                                                                . unsigned  , default = 95
+//Bit 15: 8,        reg_adp_hlti_con_2_gain5                    80;, default = 80                                                               . unsigned  , default = 80
+//Bit  7: 0,        reg_adp_hlti_con_2_gain6                    20;, default = 20                                                               . unsigned  , default = 20
+#define   HLTI_OS_MARGIN                           (0x3239)
+#define P_HLTI_OS_MARGIN                           (volatile unsigned int *)((0x3239  << 2) + 0xff900000)
+//Bit 31: 8,        reserved
+//Bit  7: 0,        reg_adp_hlti_os_margin                      : margin for hlti overshoot, default = 0                                        . unsigned  , default = 0
+#define   VLTI_FLT_CON_CLP                         (0x323a)
+#define P_VLTI_FLT_CON_CLP                         (volatile unsigned int *)((0x323a  << 2) + 0xff900000)
+//Bit 31:15,        reserved
+//Bit 14,            reg_adp_vlti_en                             : enable bit of vlti, default = 1                                               . unsigned  , default = 1
+//Bit 13:12,        reg_adp_vlti_hxn_flt                        : 0: no dn; 1: [1 2 1]/4;  2 : [1 2 2 2 1]/8 3:[1 0 2 0 1]/4, default = 2       . unsigned  , default = 2
+//Bit 11:10,        reg_adp_vlti_dxn_flt                        : 0: no dn; 1: [1 2 1]/4;  2 : [1 2 2 2 1]/8 3:[1 0 2 0 1]/4, default = 2       . unsigned  , default = 2
+//Bit  9: 8,        reg_adp_vlti_han_flt                        : 0: no dn; 1: [1 2 1]/4;  2 : [1 2 2 2 1]/8 3:[1 0 2 0 1]/4, default = 2       . unsigned  , default = 2
+//Bit  7: 6,        reg_adp_vlti_dan_flt                        : 0: no dn; 1: [1 2 1]/4;  2 : [1 2 2 2 1]/8 3:[1 0 2 0 1]/4, default = 2       . unsigned  , default = 2
+//Bit  5: 4,        reg_adp_vlti_dx_mode                        : 0:[-1 1] 1:[-1 0 -1]; 2/3: [-1 0 0 0 -1], default = 1                         . unsigned  , default = 1
+//Bit  3,            reserved
+//Bit  2,            reg_adp_vlti_con_lpf                        : lpf mode of the con: 0: [1 2 1]/4; 1:[1 2 2 2 1]/8, default = 0               . unsigned  , default = 0
+//Bit  1,            reserved
+//Bit  0,            reg_adp_vlti_hard_clp_win                   : window size; 0: 1x3 window; 1: 1x5 window, default = 0                        . unsigned  , default = 0
+#define   VLTI_BST_GAIN                            (0x323b)
+#define P_VLTI_BST_GAIN                            (volatile unsigned int *)((0x323b  << 2) + 0xff900000)
+//Bit 31:24,        reserved
+//Bit 23:16,        reg_adp_vlti_bst_gain0                      : gain to boost filter [-1 2 -1];, default = 32                                 . unsigned  , default = 32
+//Bit 15: 8,        reg_adp_vlti_bst_gain1                      : gain to boost filter [-1 0 2 0 -1];, default = 32                             . unsigned  , default = 32
+//Bit  7: 0,        reg_adp_vlti_bst_gain2                      : gain to boost filter usf, default = 32                                        . unsigned  , default = 32
+#define   VLTI_BST_CORE                            (0x323c)
+#define P_VLTI_BST_CORE                            (volatile unsigned int *)((0x323c  << 2) + 0xff900000)
+//Bit 31:24,        reserved
+//Bit 23:16,        reg_adp_vlti_bst_core0                      : coring to boost filter [-1 2 -1];, default = 5                                . unsigned  , default = 5
+//Bit 15: 8,        reg_adp_vlti_bst_core1                      : coring to boost filter [-1 0 2 0 -1];, default = 5                            . unsigned  , default = 5
+//Bit  7: 0,        reg_adp_vlti_bst_core2                      : coring to boost filter usf, default = 3                                       . unsigned  , default = 3
+#define   VLTI_CON_2_GAIN_0                        (0x323d)
+#define P_VLTI_CON_2_GAIN_0                        (volatile unsigned int *)((0x323d  << 2) + 0xff900000)
+//Bit 31:24,        reg_adp_vlti_con_2_gain0                    25;, default = 25                                                               . unsigned  , default = 25
+//Bit 23:16,        reg_adp_vlti_con_2_gain1                    60;, default = 60                                                               . unsigned  , default = 60
+//Bit 15: 8,        reg_adp_vlti_con_2_gain2                    0;, default = 5                                                                . unsigned  , default = 5
+//Bit  7: 0,        reg_adp_vlti_con_2_gain3                    96;, default = 96                                                               . unsigned  , default = 96
+#define   VLTI_CON_2_GAIN_1                        (0x323e)
+#define P_VLTI_CON_2_GAIN_1                        (volatile unsigned int *)((0x323e  << 2) + 0xff900000)
+//Bit 31:24,        reg_adp_vlti_con_2_gain4                    5;, default = 95                                                                . unsigned  , default = 95
+//Bit 23:16,        reg_adp_vlti_con_2_gain5                    80;, default = 80                                                               . unsigned  , default = 80
+//Bit 15: 8,        reg_adp_vlti_con_2_gain6                    20;, default = 20                                                               . unsigned  , default = 20
+//Bit  7: 0,        reg_adp_vlti_os_margin                      : margin for vlti overshoot, default = 0                                        . unsigned  , default = 0
+#define   VCTI_FLT_CON_CLP                         (0x323f)
+#define P_VCTI_FLT_CON_CLP                         (volatile unsigned int *)((0x323f  << 2) + 0xff900000)
+//Bit 31:15,        reserved
+//Bit 14,            reg_adp_vcti_en                             : enable bit of vlti, default = 1                                               . unsigned  , default = 1
+//Bit 13:12,        reg_adp_vcti_hxn_flt                        : 0: no dn; 1: [1 2 1]/4;  2 : [1 2 2 2 1]/8 3:[1 0 2 0 1]/4, default = 2       . unsigned  , default = 2
+//Bit 11:10,        reg_adp_vcti_dxn_flt                        : 0: no dn; 1: [1 2 1]/4;  2 : [1 2 2 2 1]/8 3:[1 0 2 0 1]/4, default = 2       . unsigned  , default = 2
+//Bit  9: 8,        reg_adp_vcti_han_flt                        : 0: no dn; 1: [1 2 1]/4;  2 : [1 2 2 2 1]/8 3:[1 0 2 0 1]/4, default = 2       . unsigned  , default = 2
+//Bit  7: 6,        reg_adp_vcti_dan_flt                        : 0: no dn; 1: [1 2 1]/4;  2 : [1 2 2 2 1]/8 3:[1 0 2 0 1]/4, default = 2       . unsigned  , default = 2
+//Bit  5: 4,        reg_adp_vcti_dx_mode                        : 0:[-1 1] 1:[-1 0 -1]; 2/3: [-1 0 0 0 -1], default = 1                         . unsigned  , default = 1
+//Bit  3,            reserved
+//Bit  2,            reg_adp_vcti_con_lpf                        : lpf mode of the con: 0: [1 2 1]/4; 1:[1 2 2 2 1]/8, default = 0               . unsigned  , default = 0
+//Bit  1,            reserved
+//Bit  0,            reg_adp_vcti_hard_clp_win                   : window size; 0: 1x3 window; 1: 1x5 window, default = 0                        . unsigned  , default = 0
+#define   VCTI_BST_GAIN                            (0x3240)
+#define P_VCTI_BST_GAIN                            (volatile unsigned int *)((0x3240  << 2) + 0xff900000)
+//Bit 31:24,        reserved
+//Bit 23:16,        reg_adp_vcti_bst_gain0                      : gain to boost filter [-1 2 -1];, default = 16                                  . unsigned  , default = 16
+//Bit 15: 8,        reg_adp_vcti_bst_gain1                      : gain to boost filter [-1 0 2 0 -1];, default = 16                              . unsigned  , default = 16
+//Bit  7: 0,        reg_adp_vcti_bst_gain2                      : gain to boost filter usf, default = 16                                         . unsigned  , default = 16
+#define   VCTI_BST_CORE                            (0x3241)
+#define P_VCTI_BST_CORE                            (volatile unsigned int *)((0x3241  << 2) + 0xff900000)
+//Bit 31:24,        reserved
+//Bit 23:16,        reg_adp_vcti_bst_core0                      : coring to boost filter [-1 2 -1];, default = 5                                . unsigned  , default = 5
+//Bit 15: 8,        reg_adp_vcti_bst_core1                      : coring to boost filter [-1 0 2 0 -1];, default = 5                            . unsigned  , default = 5
+//Bit  7: 0,        reg_adp_vcti_bst_core2                      : coring to boost filter usf, default = 3                                       . unsigned  , default = 3
+#define   VCTI_CON_2_GAIN_0                        (0x3242)
+#define P_VCTI_CON_2_GAIN_0                        (volatile unsigned int *)((0x3242  << 2) + 0xff900000)
+//Bit 31:24,        reg_adp_vcti_con_2_gain0                    25;, default = 25                                                               . unsigned  , default = 25
+//Bit 23:16,        reg_adp_vcti_con_2_gain1                    60;, default = 60                                                               . unsigned  , default = 60
+//Bit 15: 8,        reg_adp_vcti_con_2_gain2                    0;, default = 5                                                                . unsigned  , default = 5
+//Bit  7: 0,        reg_adp_vcti_con_2_gain3                    96;, default = 96                                                               . unsigned  , default = 96
+#define   VCTI_CON_2_GAIN_1                        (0x3243)
+#define P_VCTI_CON_2_GAIN_1                        (volatile unsigned int *)((0x3243  << 2) + 0xff900000)
+//Bit 31:24,        reg_adp_vcti_con_2_gain4                    5;, default = 95                                                                . unsigned  , default = 95
+//Bit 23:16,        reg_adp_vcti_con_2_gain5                    80;, default = 80                                                               . unsigned  , default = 80
+//Bit 15: 8,        reg_adp_vcti_con_2_gain6                    20;, default = 20                                                               . unsigned  , default = 20
+//Bit  7: 0,        reg_adp_vcti_os_margin                      : margin for vcti overshoot, default = 0                                        . unsigned  , default = 0
+#define   SHARP_3DLIMIT                            (0x3244)
+#define P_SHARP_3DLIMIT                            (volatile unsigned int *)((0x3244  << 2) + 0xff900000)
+//Bit 31:29,        reserved
+//Bit 28:16,        reg_3d_mid_width                            ,width of left part of 3d input, dft = half size of input width  default = 0    . unsigned  , default = 960
+//Bit 15:13,        reserved
+//Bit 12: 0,        reg_3d_mid_height                           ,height of left part of 3d input, dft = half size of input height  default = 0  . unsigned  , default = 540
+#define   DNLP_EN                                  (0x3245)
+#define P_DNLP_EN                                  (volatile unsigned int *)((0x3245  << 2) + 0xff900000)
+//Bit 31: 1,        reserved
+//Bit  0,            reg_dnlp_en                                                                                                                 . unsigned  , default = 1
+#define   DNLP_00                                  (0x3246)
+#define P_DNLP_00                                  (volatile unsigned int *)((0x3246  << 2) + 0xff900000)
+//Bit 31: 0,        reg_dnlp_ygrid0                             : dnlp00                                                                        . unsigned  , default = 32'h08060402
+#define   DNLP_01                                  (0x3247)
+#define P_DNLP_01                                  (volatile unsigned int *)((0x3247  << 2) + 0xff900000)
+//Bit 31: 0,        reg_dnlp_ygrid1                             : dnlp01                                                                        . unsigned  , default = 32'h100e0c0a
+#define   DNLP_02                                  (0x3248)
+#define P_DNLP_02                                  (volatile unsigned int *)((0x3248  << 2) + 0xff900000)
+//Bit 31: 0,        reg_dnlp_ygrid2                             : dnlp02                                                                        . unsigned  , default = 32'h1a171412
+#define   DNLP_03                                  (0x3249)
+#define P_DNLP_03                                  (volatile unsigned int *)((0x3249  << 2) + 0xff900000)
+//Bit 31: 0,        reg_dnlp_ygrid3                             : dnlp03                                                                        . unsigned  , default = 32'h2824201d
+#define   DNLP_04                                  (0x324a)
+#define P_DNLP_04                                  (volatile unsigned int *)((0x324a  << 2) + 0xff900000)
+//Bit 31: 0,        reg_dnlp_ygrid4                             : dnlp04                                                                        . unsigned  , default = 32'h3834302c
+#define   DNLP_05                                  (0x324b)
+#define P_DNLP_05                                  (volatile unsigned int *)((0x324b  << 2) + 0xff900000)
+//Bit 31: 0,        reg_dnlp_ygrid5                             : dnlp05                                                                        . unsigned  , default = 32'h4b45403c
+#define   DNLP_06                                  (0x324c)
+#define P_DNLP_06                                  (volatile unsigned int *)((0x324c  << 2) + 0xff900000)
+//Bit 31: 0,        reg_dnlp_ygrid6                             : dnlp06                                                                        . unsigned  , default = 32'h605b5550
+#define   DNLP_07                                  (0x324d)
+#define P_DNLP_07                                  (volatile unsigned int *)((0x324d  << 2) + 0xff900000)
+//Bit 31: 0,        reg_dnlp_ygrid7                             : dnlp07                                                                        . unsigned  , default = 32'h80787068
+#define   DNLP_08                                  (0x324e)
+#define P_DNLP_08                                  (volatile unsigned int *)((0x324e  << 2) + 0xff900000)
+//Bit 31: 0,        reg_dnlp_ygrid8                             : dnlp08                                                                        . unsigned  , default = 32'ha0989088
+#define   DNLP_09                                  (0x324f)
+#define P_DNLP_09                                  (volatile unsigned int *)((0x324f  << 2) + 0xff900000)
+//Bit 31: 0,        reg_dnlp_ygrid9                             : dnlp09                                                                        . unsigned  , default = 32'hb8b2aca6
+#define   DNLP_10                                  (0x3250)
+#define P_DNLP_10                                  (volatile unsigned int *)((0x3250  << 2) + 0xff900000)
+//Bit 31: 0,        reg_dnlp_ygrid10                            : dnlp10                                                                        . unsigned  , default = 32'hc8c4c0bc
+#define   DNLP_11                                  (0x3251)
+#define P_DNLP_11                                  (volatile unsigned int *)((0x3251  << 2) + 0xff900000)
+//Bit 31: 0,        reg_dnlp_ygrid11                            : dnlp11                                                                        . unsigned  , default = 32'hd4d2cecb
+#define   DNLP_12                                  (0x3252)
+#define P_DNLP_12                                  (volatile unsigned int *)((0x3252  << 2) + 0xff900000)
+//Bit 31: 0,        reg_dnlp_ygrid12                            : dnlp12                                                                        . unsigned  , default = 32'hdad8d7d6
+#define   DNLP_13                                  (0x3253)
+#define P_DNLP_13                                  (volatile unsigned int *)((0x3253  << 2) + 0xff900000)
+//Bit 31: 0,        reg_dnlp_ygrid13                            : dnlp13                                                                        . unsigned  , default = 32'he2e0dedc
+#define   DNLP_14                                  (0x3254)
+#define P_DNLP_14                                  (volatile unsigned int *)((0x3254  << 2) + 0xff900000)
+//Bit 31: 0,        reg_dnlp_ygrid14                            : dnlp14                                                                        . unsigned  , default = 32'hf0ece8e4
+#define   DNLP_15                                  (0x3255)
+#define P_DNLP_15                                  (volatile unsigned int *)((0x3255  << 2) + 0xff900000)
+//Bit 31: 0,        reg_dnlp_ygrid15                            : dnlp15                                                                        . unsigned  , default = 32'hfffcf8f4
+#define   DEMO_CRTL                                (0x3256)
+#define P_DEMO_CRTL                                (volatile unsigned int *)((0x3256  << 2) + 0xff900000)
+//Bit 31:19,        reserved
+//Bit 18:17,        demo_disp_position                                                                                                          . unsigned  , default = 2
+//Bit 16,            demo_hsvsharp_enable                                                                                                        . unsigned  , default = 0
+//Bit 15:13,        reserved
+//Bit 12: 0,        demo_left_top_screen_width                  :                                                                               . unsigned  , default = 360
+#define   SHARP_SR2_CTRL                           (0x3257)
+#define P_SHARP_SR2_CTRL                           (volatile unsigned int *)((0x3257  << 2) + 0xff900000)
+//Bit 31:22,    reserved
+//Bit 21:16,    reg_sr2_pk_la_err_dis_rate         :     . unsigned  , low angle and high angle error should not be no less than nearby_error*rate/64; default = 24
+//Bit 15:8,     reg_sr2_pk_sad_diag_gain           :     . unsigned  , gain to sad[2] and sad[6], 16 normalized to "1"; default = 16
+//Bit 7,        reg_sr2_vert_outphs                :     . unsigned  , default = 0
+//Bit 6,        reg_sr2_horz_outphs                :     . unsigned  , default = 0
+//Bit 5,        reg_sr2_vert_ratio                 :     . unsigned  , default = 0
+//Bit 4,        reg_sr2_hori_ratio                 :     . unsigned  , default = 0
+//Bit 3,        reg_sr2_bic_norm                   :     . unsigned  , default = 1
+//Bit 2,        reg_sr2_enable                     :     . unsigned  , default = 0
+//Bit 1,        reg_sr2_sharp_prc_lr_hbic          :     . unsigned  , default = 0
+//Bit 0,        reg_sr2_sharp_prc_lr               : lti/cti/nr/peaking processing using LR grid, 0: on HR grid; 1:on LR grid, horizontally no upscale, but using simple bic   . unsigned  , default = 0
+#define   SHARP_SR2_YBIC_HCOEF0                    (0x3258)
+#define P_SHARP_SR2_YBIC_HCOEF0                    (volatile unsigned int *)((0x3258  << 2) + 0xff900000)
+//Bit 31:24, reg_sr2_y_bic_hcoef03            Horizontal bi-cubic filter of 1.0 phase of luma channel Filter will be normalized to 128 as éˆ¥?éˆ¥? default=0
+//Bit 23:16, reg_sr2_y_bic_hcoef02            the same as above; default=0
+//Bit 15: 8, reg_sr2_y_bic_hcoef01            the same as above; default=64
+//Bit  7: 0, reg_sr2_y_bic_hcoef00            the same as above; default=0
+#define   SHARP_SR2_YBIC_HCOEF1                    (0x3259)
+#define P_SHARP_SR2_YBIC_HCOEF1                    (volatile unsigned int *)((0x3259  << 2) + 0xff900000)
+//Bit 31:24, reg_sr2_y_bic_hcoef13            Horizontal bi-cubic filter of 0.5 phase of luma channel,Filter will be normalized to 128 as éˆ¥?éˆ¥? default=-4
+//Bit 23:16, reg_sr2_y_bic_hcoef12            the same as above; default=36
+//Bit 15: 8, reg_sr2_y_bic_hcoef11            the same as above; default=36
+//Bit  7: 0, reg_sr2_y_bic_hcoef10            the same as above; default=-4
+#define   SHARP_SR2_CBIC_HCOEF0                    (0x325a)
+#define P_SHARP_SR2_CBIC_HCOEF0                    (volatile unsigned int *)((0x325a  << 2) + 0xff900000)
+//Bit 31:24, reg_sr2_c_bic_hcoef03            Horizontal bi-cubic filter of 1.0 phase of luma channel ,Filter will be normalized to 128 as éˆ¥?éˆ¥? default=0
+//Bit 23:16, reg_sr2_c_bic_hcoef02            the same as above; default=21
+//Bit 15: 8, reg_sr2_c_bic_hcoef01            the same as above; default=22
+//Bit  7: 0, reg_sr2_c_bic_hcoef00            the same as above; default=21
+#define   SHARP_SR2_CBIC_HCOEF1                    (0x325b)
+#define P_SHARP_SR2_CBIC_HCOEF1                    (volatile unsigned int *)((0x325b  << 2) + 0xff900000)
+//Bit 31:24, reg_sr2_c_bic_hcoef13            Horizontal bi-cubic filter of 0.5 phase of luma channel,Filter will be normalized to 128 as éˆ¥?éˆ¥? default=-4
+//Bit 23:16, reg_sr2_c_bic_hcoef12            the same as above; default=36
+//Bit 15: 8, reg_sr2_c_bic_hcoef11            the same as above; default=36
+//Bit  7: 0, reg_sr2_c_bic_hcoef10            the same as above; default=-4
+#define   SHARP_SR2_YBIC_VCOEF0                    (0x325c)
+#define P_SHARP_SR2_YBIC_VCOEF0                    (volatile unsigned int *)((0x325c  << 2) + 0xff900000)
+//Bit 31:24, reg_sr2_y_bic_vcoef03            Horizontal bi-cubic filter of 1.0 phase of luma channel, Filter will be normalized to 128 as éˆ¥?éˆ¥? default=0
+//Bit 23:16, reg_sr2_y_bic_vcoef02            the same as above; default=0
+//Bit 15: 8, reg_sr2_y_bic_vcoef01            the same as above; default=64
+//Bit  7: 0, reg_sr2_y_bic_vcoef00            the same as above; default=0
+#define   SHARP_SR2_YBIC_VCOEF1                    (0x325d)
+#define P_SHARP_SR2_YBIC_VCOEF1                    (volatile unsigned int *)((0x325d  << 2) + 0xff900000)
+//Bit 31:24, reg_sr2_y_bic_vcoef13            Horizontal bi-cubic filter of 0.5 phase of luma channe, lFilter will be normalized to 128 as éˆ¥?éˆ¥? default=-4
+//Bit 23:16, reg_sr2_y_bic_vcoef12            the same as above; default=36
+//Bit 15: 8, reg_sr2_y_bic_vcoef11            the same as above; default=36
+//Bit  7: 0, reg_sr2_y_bic_vcoef10            the same as above; default=-4
+#define   SHARP_SR2_CBIC_VCOEF0                    (0x325e)
+#define P_SHARP_SR2_CBIC_VCOEF0                    (volatile unsigned int *)((0x325e  << 2) + 0xff900000)
+//Bit 31:24, reg_sr2_c_bic_vcoef03            Horizontal bi-cubic filter of 1.0 phase of luma channel, Filter will be normalized to 128 as éˆ¥?éˆ¥? default=0
+//Bit 23:16, reg_sr2_c_bic_vcoef02            the same as above; default=21
+//Bit 15: 8, reg_sr2_c_bic_vcoef01            the same as above; default=22
+//Bit  7: 0, reg_sr2_c_bic_vcoef00            the same as above; default=21
+#define   SHARP_SR2_CBIC_VCOEF1                    (0x325f)
+#define P_SHARP_SR2_CBIC_VCOEF1                    (volatile unsigned int *)((0x325f  << 2) + 0xff900000)
+//Bit 31:24, reg_sr2_c_bic_vcoef13            Horizontal bi-cubic filter of 0.5 phase of luma channel,Filter will be normalized to 128 as éˆ¥?éˆ¥? default=-4
+//Bit 23:16, reg_sr2_c_bic_vcoef12            the same as above; default=36
+//Bit 15: 8, reg_sr2_c_bic_vcoef11            the same as above; default=36
+//Bit  7: 0, reg_sr2_c_bic_vcoef10            the same as above; default=-4
+#define   SHARP_SR2_MISC                           (0x3260)
+#define P_SHARP_SR2_MISC                           (volatile unsigned int *)((0x3260  << 2) + 0xff900000)
+//Bit 31:2,   reserved
+//Bit 1,      reg_sr2_cmpmux_bef                 :     . unsigned  , default = 0,0 no swap anf for YUV->YUV; 1, swapped and for RGB->GBR;
+//Bit 0,      reg_sr2_cmpmux_aft                 :     . unsigned  , default = 0,0 no swap anf for YUV->YUV; 1, swapped and for GBR-RGB;
+#define   SHARP_SR3_SAD_CTRL                       (0x3261)
+#define P_SHARP_SR3_SAD_CTRL                       (volatile unsigned int *)((0x3261  << 2) + 0xff900000)
+//Bit 31:30 reserved
+//Bit 29:24 reg_sr3_pk_sad_core_rate         // u6: rate of coring for sad(theta) - sad(theta+pi/2)*rate/64
+//Bit 23:22 reserved
+//Bit 21:16 reg_sr3_lti_sad_core_rate        // u6: rate of coring for sad(theta) - sad(theta+pi/2)*rate/64 , default= 6
+//Bit 15:14 reserved
+//Bit 13:8  reg_sr3_cti_sad_core_rate        // u6: rate of coring for sad(theta) - sad(theta+pi/2)*rate/64 , default= 6
+//Bit 7,    reg_sr3_lti_hsad_mode            // u1: mode for hsad of lti caluclation; 0: block based; 1:othor shape; default= 1
+//Bit 6,    reg_sr3_cti_hsad_mode            // u1: mode for hsad of cti caluclation; 0: block based; 1:othor shape; default= 1
+//Bit 5,    reg_sr3_lti_dsad_mode            // u1: mode for dsad of lti caluclation, 0: block based; 1:othor shape; default= 1
+//Bit 4,    reg_sr3_cti_dsad_mode            // u1: mode for dsad of cti caluclation, 0: block based; 1:othor shape; default= 1
+//Bit 3,    reg_sr3_lti_vsad_mode            // u1: mode for vsad of lti caluclation, 0: block based; 1:othor shape; default= 1
+//Bit 2,    reg_sr3_cti_vsad_mode            // u1: mode for vsad of cti caluclation, 0: block based; 1:othor shape; default= 1
+//Bit 1,    reg_sr3_lti_hsad_hlpf            // u1: hlpf for hsad of lti caluclation, 0: no hlpf; 1: with [1 2 1] hlpf; default= 1
+//Bit 0,    reg_sr3_cti_hsad_hlpf            // u1: hlpf for hsad of cti caluclation, 0: no hlpf; 1: with [1 2 1] hlpf; default= 1
+#define   SHARP_SR3_PK_CTRL0                       (0x3262)
+#define P_SHARP_SR3_PK_CTRL0                       (volatile unsigned int *)((0x3262  << 2) + 0xff900000)
+//Bit 31:12 reserved
+//Bit 11,   reg_sr3_pk_sad_mode              // u1: mode for sad of peaking and noise reduction, 0: block based; 1:othor shape; default= 1
+//Bit 10,   reg_sr3_pk_hsad_hlpf             // u1: hlpf for hsad for peaking caluclation, 0: no hlpf; 1: with [1 2 2 2 1] hlpf; default= 1
+//Bit 9,    reg_sr3_pk_vsad_hlpf             // u1: hlpf for vsad for peaking caluclation, 0: no hlpf; 1: with [1 2 2 2 1] hlpf; default= 1
+//Bit 8,    reg_sr3_pk_dsad_hlpf             // u1: hlpf for dsad for peaking caluclation, 0: no hlpf; 1: with [1 2 2 2 1] hlpf; default= 1
+//Bit 7:6,  reg_sr3_pk_hpdrt_mode            // u2: mode for HPdrt filter:  default= 3
+//Bit 5:4,  reg_sr3_pk_bpdrt_mode            // u2: mode for BPdrt filter:  default= 3
+//Bit 3:2,  reg_sr3_pk_drtbld_range          // u2: range of the min2 and min direction distance; default =1
+//Bit 1,    reserved
+//Bit 0,    reg_sr3_pk_ti_blend_mode         // u1: blend mode of the TI and PK results: default = 0;
+#define   SHARP_SR3_PK_CTRL1                       (0x3263)
+#define P_SHARP_SR3_PK_CTRL1                       (volatile unsigned int *)((0x3263  << 2) + 0xff900000)
+//Bit 31,     reserved
+//Bit 30:28,  reg_sr3_pk_hp_hvcon_replace8_maxsad     //u3: replace HP hvcon by maxsad, default =1
+//Bit 27,     reserved
+//Bit 26:24,  reg_sr3_pk_bp_hvcon_replace8_maxsad     //u3: replace HP hvcon by maxsad, default =1
+//Bit 23:16,  reg_sr3_pk_hp_hvcon_replace8lv_gain     //u8: gain to local variant before calculating the hv gain for peaking, normalized to 32 as "1" default = 32;
+//Bit 15:8,   reg_sr3_pk_bp_hvcon_replace8lv_gain     //u8: gain to local variant before calculating the hv gain for peaking, normalized to 32 as "1" default = 32;
+//Bit 7,      reg_sr3_sad_intlev_mode                 //u1: interleave detection xerr mode: 0 max; 1:sum default=1
+//Bit 6,      reg_sr3_sad_intlev_mode1                //u1: mode 1 of using diagonal protection: 0: no digonal protection; 1: with diagonal protection default=1
+//Bit 5:0,    reg_sr3_sad_intlev_gain                 //u6: interleave detection for sad gain applied, normalized to 8 as 1  default=12
+#define   SHARP_DEJ_CTRL                           (0x3264)
+#define P_SHARP_DEJ_CTRL                           (volatile unsigned int *)((0x3264  << 2) + 0xff900000)
+//Bit 31:4    reserved
+//Bit 3:2,    reg_sr3_dejaggy_sameside_prtct   // u2:  enable of sr3 dejaggy same side curve protect from filter, [0] for proc, [1] for ctrl path,  default=3
+//Bit 1,      reg_sr3_dejaggy_sameside_mode    // u1: mode of the sameside flag decision: default =1
+//Bit 0,      reg_sr3_dejaggy_enable           // u1: enable of sr3 dejaggy: default =0
+#define   SHARP_DEJ_ALPHA                          (0x3265)
+#define P_SHARP_DEJ_ALPHA                          (volatile unsigned int *)((0x3265  << 2) + 0xff900000)
+//Bit 31:28,  reg_sr3_dejaggy_ctrlchrm_alpha_1  //u4: alpha for LR video LPF,  default = 0
+//Bit 27:24,  reg_sr3_dejaggy_ctrlchrm_alpha_0  //u4: alpha for LR video LPF,  default = 15
+//Bit 23:20,  reg_sr3_dejaggy_ctrlluma_alpha_1  //u4: alpha for LR video LPF,  default = 0
+//Bit 19:16,  reg_sr3_dejaggy_ctrlluma_alpha_0  //u4: alpha for LR video LPF,  default = 15
+//Bit 15:12,  reg_sr3_dejaggy_procchrm_alpha_1  //u4: alpha for LR video LPF,  default = 4
+//Bit 11:8,   reg_sr3_dejaggy_procchrm_alpha_0  //u4: alpha for LR video LPF,  default = 6
+//Bit 7:4,    reg_sr3_dejaggy_procluma_alpha_1  //u4: alpha for LR video LPF,  default = 4
+//Bit 3:0,    reg_sr3_dejaggy_procluma_alpha_0  //u4: alpha for LR video LPF,  default = 6
+#define   SHARP_SR3_DRTLPF_EN                      (0x3266)
+#define P_SHARP_SR3_DRTLPF_EN                      (volatile unsigned int *)((0x3266  << 2) + 0xff900000)
+//Bit 31:15   reserved
+//Bit 14:8,   reg_pk_debug_edge                . unsigned  , default = 0
+//Bit  7,     reserved
+//Bit  6:4,   reg_sr3_drtlpf_theta_en           //u1x3 theta (pure vertical and horizontal HF burst protection) enable. 0: not enable, 1:enable protection
+//Bit  3,     reserved
+//Bit  2:0    reg_sr3_drtlpf_enable             //u1x3 directional lpf on luma U and V channels, default = 7
+#define   SHARP_SR3_DRTLPF_ALPHA_0                 (0x3267)
+#define P_SHARP_SR3_DRTLPF_ALPHA_0                 (volatile unsigned int *)((0x3267  << 2) + 0xff900000)
+//Bit 31:30   reserved
+//Bit 29:24   reg_sr3_drtlpf_alpha3             //u6: directional lpf alpha coef for min_sad/max_sad comparied, default = 9
+//Bit 23:22   reserved
+//Bit 21:16   reg_sr3_drtlpf_alpha2             //u6: default =10
+//Bit 15:14   reserved
+//Bit 13:8    reg_sr3_drtlpf_alpha1             //u6: default = 11
+//Bit 7:6     reserved
+//Bit 5:0     reg_sr3_drtlpf_alpha0             //u6: default = 12
+#define   SHARP_SR3_DRTLPF_ALPHA_1                 (0x3268)
+#define P_SHARP_SR3_DRTLPF_ALPHA_1                 (volatile unsigned int *)((0x3268  << 2) + 0xff900000)
+//Bit 31:30   reserved
+//Bit 29:24   reg_sr3_drtlpf_alpha7             //u6: directional lpf alpha coef for min_sad/max_sad comparied, default = 1
+//Bit 23:22   reserved
+//Bit 21:16   reg_sr3_drtlpf_alpha6             //u6: default = 4
+//Bit 15:14   reserved
+//Bit 13:8    reg_sr3_drtlpf_alpha5             //u6: default = 7
+//Bit 7:6     reserved
+//Bit 5:0     reg_sr3_drtlpf_alpha4             //u6: default = 8
+#define   SHARP_SR3_DRTLPF_ALPHA_2                 (0x3269)
+#define P_SHARP_SR3_DRTLPF_ALPHA_2                 (volatile unsigned int *)((0x3269  << 2) + 0xff900000)
+//Bit 31:30   reserved
+//Bit 29:24   reg_sr3_drtlpf_alpha11            //u6: directional lpf alpha coef for min_sad/max_sad comparied, default = 0
+//Bit 23:22   reserved
+//Bit 21:16   reg_sr3_drtlpf_alpha10            //u6: default = 0
+//Bit 15:14   reserved
+//Bit 13:8    reg_sr3_drtlpf_alpha9             //u6: default = 0
+//Bit 7:6     reserved
+//Bit 5:0     reg_sr3_drtlpf_alpha8             //u6: default = 0
+#define   SHARP_SR3_DRTLPF_ALPHA_OFST              (0x326a)
+#define P_SHARP_SR3_DRTLPF_ALPHA_OFST              (volatile unsigned int *)((0x326a  << 2) + 0xff900000)
+//Bit 31:28   reg_sr3_drtlpf_alpha_ofst7        //s4: directional lpf alpha coef ofset of each directions, default = -8
+//Bit 27:24   reg_sr3_drtlpf_alpha_ofst6        //s4: default = -8
+//Bit 23:20   reg_sr3_drtlpf_alpha_ofst5        //s4: default = -8
+//Bit 19:16   reg_sr3_drtlpf_alpha_ofst4        //s4: default = -8
+//Bit 15:12   reg_sr3_drtlpf_alpha_ofst3        //s4: default = -8
+//Bit 11:8    reg_sr3_drtlpf_alpha_ofst2        //s4: default = -8
+//Bit 7:4     reg_sr3_drtlpf_alpha_ofst1        //s4: default = -8
+//Bit 3:0     reg_sr3_drtlpf_alpha_ofst0        //s4: default = -8
+#define   SHARP_SR3_DERING_CTRL                    (0x326b)
+#define P_SHARP_SR3_DERING_CTRL                    (volatile unsigned int *)((0x326b  << 2) + 0xff900000)
+//Bit 31      reserved
+//Bit 30:28   reg_sr3_dering_enable                  // u3: dering enable bits; default = 1
+//Bit 27      reserved
+//Bit 26:24   reg_sr3_dering_varlpf_mode             // u3: local variant LPF mode: 0 no filter, 1, errosion 3x3; 2: 3x3 lpf; 3 and up: 3x3 errosion + lpf default = 3
+//Bit 23:20   reg_sr3_dering_maxrange                // u4: maximum:range of dering in LR resolution, max to 12;  default = 9
+//Bit 19:18   reserved
+//Bit 17:16   reg_sr3_dering_lcvar_blend_mode        // u2: mode for lcvar calculation: 0: HVblend; 1: diagblend; 2: HVblend+V (for hring); 3: HVblend+ DiagBlend default = 2
+//Bit 15:8    reg_sr3_dering_lcvar_gain              // u8: gain to local variant and normalized to 32 as "1"  default = 64
+//Bit 7:0     reg_sr3_dering_lcvar_nearby_maxsad_th  // u8: threshold to use nearer side maxsad if that side sad is larger than this threshold, ortherwise, use the max one default = 28
+#define   SHARP_SR3_DERING_LUMA2PKGAIN_0TO3        (0x326c)
+#define P_SHARP_SR3_DERING_LUMA2PKGAIN_0TO3        (volatile unsigned int *)((0x326c  << 2) + 0xff900000)
+//Bit 31:24   reg_sr3_dering_luma2pkgain3             // u8: level limit(for th0<bpcon<th1) of curve for dering pkgain based on LPF luma level. default=255
+//Bit 23:16   reg_sr3_dering_luma2pkgain2             // u8: level limit(for bpcon<th0) of curve for dering pkgain based on LPF luma level. default=255
+//Bit 15:8    reg_sr3_dering_luma2pkgain1             // u8: threshold1 of curve for dering pkgain based on LPF luma level  default =200
+//Bit 7:0     reg_sr3_dering_luma2pkgain0             // u8: threshold0 of curve for dering pkgain based on LPF luma level. default =30
+#define   SHARP_SR3_DERING_LUMA2PKGAIN_4TO6        (0x326d)
+#define P_SHARP_SR3_DERING_LUMA2PKGAIN_4TO6        (volatile unsigned int *)((0x326d  << 2) + 0xff900000)
+//Bit 31:24   reserved
+//Bit 23:16   reg_sr3_dering_luma2pkgain6             // u8: rate1 (for bpcon>th1) of curve for dering pkgain based on LPF luma level. default =24
+//Bit 15:8    reg_sr3_dering_luma2pkgain5             // u8: rate0 (for bpcon<th0) of curve for dering pkgain based on LPF luma level. dfault =50
+//Bit 7:0     reg_sr3_dering_luma2pkgain4             // u8: level limit(for bpcon>th1) of curve for dering pkgain based on LPF luma level. default =255
+#define   SHARP_SR3_DERING_LUMA2PKOS_0TO3          (0x326e)
+#define P_SHARP_SR3_DERING_LUMA2PKOS_0TO3          (volatile unsigned int *)((0x326e  << 2) + 0xff900000)
+//Bit 31:24   reg_sr3_dering_luma2pkos3             // u8: level limit(for th0<bpcon<th1) of curve for dering pkOS based on LPF luma level. default=255
+//Bit 23:16   reg_sr3_dering_luma2pkos2             // u8: level limit(for bpcon<th0) of curve for dering pkOS based on LPF luma level. default=255
+//Bit 15:8    reg_sr3_dering_luma2pkos1             // u8: threshold1 of curve for dering pkOS based on LPF luma level  default =200
+//Bit 7:0     reg_sr3_dering_luma2pkos0             // u8: threshold0 of curve for dering pkOS based on LPF luma leve. default =30
+#define   SHARP_SR3_DERING_LUMA2PKOS_4TO6          (0x326f)
+#define P_SHARP_SR3_DERING_LUMA2PKOS_4TO6          (volatile unsigned int *)((0x326f  << 2) + 0xff900000)
+//Bit 31:24   reserved
+//Bit 23:16   reg_sr3_dering_luma2pkos6             // u8: rate1 (for bpcon>th1) of curve for dering pkOS based on LPF luma level. default =24
+//Bit 15:8    reg_sr3_dering_luma2pkos5             // u8: rate0 (for bpcon<th0) of curve for dering pkOS based on LPF luma level. dfault =50
+//Bit 7:0     reg_sr3_dering_luma2pkos4             // u8: level limit(for bpcon>th1) of curve for dering pkOS based on LPF luma level. default =255
+#define   SHARP_SR3_DERING_GAINVS_MADSAD           (0x3270)
+#define P_SHARP_SR3_DERING_GAINVS_MADSAD           (volatile unsigned int *)((0x3270  << 2) + 0xff900000)
+//Bit 31:28   reg_sr3_dering_gainvs_maxsad7        //u4: pkgain vs maxsad value, 8 node interpolations, default = 0
+//Bit 27:24   reg_sr3_dering_gainvs_maxsad6        //u4: default = 0
+//Bit 23:20   reg_sr3_dering_gainvs_maxsad5        //u4: default = 0
+//Bit 19:16   reg_sr3_dering_gainvs_maxsad4        //u4: default = 0
+//Bit 15:12   reg_sr3_dering_gainvs_maxsad3        //u4: default = 0
+//Bit 11:8    reg_sr3_dering_gainvs_maxsad2        //u4: default = 0
+//Bit 7:4     reg_sr3_dering_gainvs_maxsad1        //u4: default = 4
+//Bit 3:0     reg_sr3_dering_gainvs_maxsad0        //u4: default = 8
+#define   SHARP_SR3_DERING_GAINVS_VR2MAX           (0x3271)
+#define P_SHARP_SR3_DERING_GAINVS_VR2MAX           (volatile unsigned int *)((0x3271  << 2) + 0xff900000)
+//Bit 31:28   reg_sr3_dering_gainvs_vr2max7        //u4: pkgain vs ratio = max(local_var, floor)/maxsad nearby, default = 15
+//Bit 27:24   reg_sr3_dering_gainvs_vr2max6        //u4: default = 15
+//Bit 23:20   reg_sr3_dering_gainvs_vr2max5        //u4: default = 15
+//Bit 19:16   reg_sr3_dering_gainvs_vr2max4        //u4: default = 15
+//Bit 15:12   reg_sr3_dering_gainvs_vr2max3        //u4: default = 14
+//Bit 11:8    reg_sr3_dering_gainvs_vr2max2        //u4: default = 12
+//Bit 7:4     reg_sr3_dering_gainvs_vr2max1        //u4: default = 2
+//Bit 3:0     reg_sr3_dering_gainvs_vr2max0        //u4: default = 0
+#define   SHARP_SR3_DERING_PARAM0                  (0x3272)
+#define P_SHARP_SR3_DERING_PARAM0                  (volatile unsigned int *)((0x3272  << 2) + 0xff900000)
+//Bit 31:24   reserved
+//Bit 23:16   reg_sr3_dering_lcvar_floor        //u8: local varianet no smaller than this value to calculate dgain max(localvar,x)/maxsad. default = 10
+//Bit 15:8    reg_sr3_dering_vr2max_gain        //u8: gain to max(local_var, floor)/maxsad  before feeding to LUT. default = 32
+//Bit 7:6     reserved
+//Bit 5:0     reg_sr3_dering_vr2max_limt        //u6: limit of maxsad to max(local_var, floor)*(max(maxsad, lmit))/maxsad.  default = 16
+#define   SHARP_SR3_DRTLPF_THETA                   (0x3273)
+#define P_SHARP_SR3_DRTLPF_THETA                   (volatile unsigned int *)((0x3273  << 2) + 0xff900000)
+//Bit 31:0    reg_sr3_drtlpf_theta              //u4x8: directional lpf beta coef for min_sad/min2_sad compared to x=0:7 correspond to[1:8]/16;  0 means no drtLPF, 15: 100% alpha dependant drtLPF
+#define   SHARP_SATPRT_CTRL                        (0x3274)
+#define P_SHARP_SATPRT_CTRL                        (volatile unsigned int *)((0x3274  << 2) + 0xff900000)
+//Bit 31:24   reserved
+//Bit 23:16   reg_satprt_sat_core      //u8: 4x will be coring to cor(irgb_max-irgb_min) to calculate the oy_delt, the smaller the more protection to color, the larger only the rich color will be protected;
+//Bit 15:8    reg_satprt_sat_rate      //u8: rate to cor(irgb_max-irgb_min) to calculate the oy_delt, the larger the more protection to rich color; norm 16 as 1
+//Bit 7:4     reserved
+//Bit 3:2     reg_satprt_csc_mode      //u2: csc mode of current yuv input: 0:601, 1:709, 2:BT2020 NCL, 3:reserved
+//Bit 1       reg_satprt_is_lmt        //u1: flag telling the YUV is limited range data or full range data, 0 full range, 1: limited range
+//Bit 0       reg_satprt_enable        //u1: enable of saturation protection for dnlp adjustments
+#define   SHARP_SATPRT_DIVM                        (0x3275)
+#define P_SHARP_SATPRT_DIVM                        (volatile unsigned int *)((0x3275  << 2) + 0xff900000)
+//Bit 31:24   reserved
+//Bit 23:0    reg_satprt_div_m        //u8x3, 1/m, normalized to 128 as 1, default=1
+#define   SHARP_SATPRT_LMT_RGB                     (0x3276)
+#define P_SHARP_SATPRT_LMT_RGB                     (volatile unsigned int *)((0x3276  << 2) + 0xff900000)
+//Bit 31:30   reserved
+//Bit 29:0    reg_satprt_lmt_rgb      //u10x3, limit of the rgb channel, for limited range RGB, set to 960, otherwise set to 1023
+#define   SHARP_DB_FLT_CTRL                        (0x3277)
+#define P_SHARP_DB_FLT_CTRL                        (volatile unsigned int *)((0x3277  << 2) + 0xff900000)
+//Bit 31:27        reserved
+//Bit 26           reg_nrdeband_reset1
+//Bit 25           reg_nrdeband_reset0
+//Bit 24           reg_nrdeband_rgb          // unsigned , default = 0  0:yuv 1:RGB
+//Bit 23           reg_nrdeband_en11         // unsigned , default = 1  debanding registers of side lines, [0] for luma,   same for below
+//Bit 22           reg_nrdeband_en10         // unsigned , default = 1  debanding registers of side lines, [1] for chroma, same for below
+//Bit 21           reg_nrdeband_siderand     // unsigned , default = 1  options to use side two lines use the rand, instead of use for the YUV three component of middle line, 0: seed[3]/bandrand[3] for middle line yuv; 1: seed[3]/bandrand[3] for nearby three lines Y;
+//Bit 20           reg_nrdeband_randmode     // unsigned , default = 0  mode of rand noise adding, 0: same noise strength for all difs; else: strenght of noise will not exceed the difs, MIN((pPKReg->reg_nrdeband_bandrand[m]), noise[m])
+//Bit 19:17        reg_nrdeband_bandrand2    // unsigned , default = 6
+//Bit 16            reserved
+//Bit 15:13        reg_nrdeband_bandrand1    // unsigned , default = 6
+//Bit 12            reserved
+//Bit 11: 9        reg_nrdeband_bandrand0    // unsigned , default = 6
+//Bit  8            reserved
+//Bit  7           reg_nrdeband_hpxor1       // unsigned , default = 1   debanding random hp portion xor, [0] for luma
+//Bit  6           reg_nrdeband_hpxor0       // unsigned , default = 1   debanding random hp portion xor, [1] for chroma
+//Bit  5           reg_nrdeband_en1          // unsigned , default = 1   debanding registers,  for luma
+//Bit  4           reg_nrdeband_en0          // unsigned , default = 1   debanding registers,  for chroma
+//Bit  3: 2        reg_nrdeband_lpf_mode1    // unsigned , default = 2   lpf mode, 0: 3x3, 1:3x5; 2: 5x5; 3:5x7
+//Bit  1: 0        reg_nrdeband_lpf_mode0    // unsigned , default = 2   lpf mode, 0: 3x3, 1:3x5; 2: 5x5; 3:5x7
+#define   SHARP_DB_FLT_YC_THRD                     (0x3278)
+#define P_SHARP_DB_FLT_YC_THRD                     (volatile unsigned int *)((0x3278  << 2) + 0xff900000)
+//Bit 31:28        reg_nrdeband_luma_th3     // unsigned , default = 9   threshold to |Y-Ylpf|, if < th[0] use lpf
+//Bit 27:24        reg_nrdeband_luma_th2     // unsigned , default = 7   elseif <th[1] use (lpf*3 + y)/4
+//Bit 23:20        reg_nrdeband_luma_th1     // unsigned , default = 6   elseif <th[1] use (lpf*3 + y)/4elseif <th[2] (lpf*1 + y)/2
+//Bit 19:16        reg_nrdeband_luma_th0     // unsigned , default = 5   elseif <th[1] use (lpf*3 + y)/4elseif elseif <th[3] (lpf*1 + 3*y)/4; else
+//Bit 15:12        reg_nrdeband_chrm_th3     // unsigned , default = 9   threshold to |Y-Ylpf|, if < th[0] use lpf
+//Bit 11: 8        reg_nrdeband_chrm_th2     // unsigned , default = 7   elseif <th[1] use (lpf*3 + y)/4
+//Bit  7: 4        reg_nrdeband_chrm_th1     // unsigned , default = 6   elseif <th[1] use (lpf*3 + y)/4elseif <th[2] (lpf*1 + y)/2
+//Bit  3: 0        reg_nrdeband_chrm_th0     // unsigned , default = 5   elseif <th[1] use (lpf*3 + y)/4elseif elseif
+#define   SHARP_DB_FLT_RANDLUT                     (0x3279)
+#define P_SHARP_DB_FLT_RANDLUT                     (volatile unsigned int *)((0x3279  << 2) + 0xff900000)
+//Bit 31:24        reserved
+//Bit 23:21        reg_nrdebandslut7         // unsigned , default = 1   lut0
+//Bit 20:18        reg_nrdebandslut6         // unsigned , default = 1   lut0
+//Bit 17:15        reg_nrdebandslut5         // unsigned , default = 1   lut0
+//Bit 14:12        reg_nrdebandslut4         // unsigned , default = 1   lut0
+//Bit 11: 9        reg_nrdebandslut3         // unsigned , default = 1   lut0
+//Bit  8: 6        reg_nrdebandslut2         // unsigned , default = 1   lut0
+//Bit  5: 3        reg_nrdebandslut1         // unsigned , default = 1   lut0
+//Bit  2: 0        reg_nrdebandslut0         // unsigned , default = 1   lut0
+#define   SHARP_DB_FLT_PXI_THRD                    (0x327a)
+#define P_SHARP_DB_FLT_PXI_THRD                    (volatile unsigned int *)((0x327a  << 2) + 0xff900000)
+//Bit 31:26        reserved
+//Bit 25:16        reg_nrdeband_yc_th1       // unsigned , default = 0   to luma/|u/v| for using the denoise
+//Bit 15:10        reserved
+//Bit  9: 0        reg_nrdeband_yc_th0       // unsigned , default = 0   to luma/|u/v| for using the denoise
+#define   SHARP_DB_FLT_SEED_Y                      (0x327b)
+#define P_SHARP_DB_FLT_SEED_Y                      (volatile unsigned int *)((0x327b  << 2) + 0xff900000)
+//Bit 31: 0        reg_nrdeband_seed0        // unsigned , default = 1621438240  noise adding seed for Y. seed[0]= 0x60a52f20; as default
+#define   SHARP_DB_FLT_SEED_U                      (0x327c)
+#define P_SHARP_DB_FLT_SEED_U                      (volatile unsigned int *)((0x327c  << 2) + 0xff900000)
+//Bit 31: 0        reg_nrdeband_seed1        // unsigned , default = 1621438247  noise adding seed for U. seed[0]= 0x60a52f27; as default
+#define   SHARP_DB_FLT_SEED_V                      (0x327d)
+#define P_SHARP_DB_FLT_SEED_V                      (volatile unsigned int *)((0x327d  << 2) + 0xff900000)
+//Bit 31: 0        reg_nrdeband_seed2        // unsigned , default = 1621438242  noise adding seed for V. seed[0]= 0x60a52f22; as default
+#define   SHARP_PKGAIN_VSLUMA_LUT_L                (0x327e)
+#define P_SHARP_PKGAIN_VSLUMA_LUT_L                (volatile unsigned int *)((0x327e  << 2) + 0xff900000)
+//Bit 31:28       reg_pkgain_vsluma_lut7;
+//Bit 27:24       reg_pkgain_vsluma_lut6;
+//Bit 23:20       reg_pkgain_vsluma_lut5;
+//Bit 19:16       reg_pkgain_vsluma_lut4;
+//Bit 15:12       reg_pkgain_vsluma_lut3;
+//Bit 11: 8       reg_pkgain_vsluma_lut2;
+//Bit  7: 4       reg_pkgain_vsluma_lut1;
+//Bit  3: 0       reg_pkgain_vsluma_lut0;
+#define   SHARP_PKGAIN_VSLUMA_LUT_H                (0x327f)
+#define P_SHARP_PKGAIN_VSLUMA_LUT_H                (volatile unsigned int *)((0x327f  << 2) + 0xff900000)
+//Bit 31: 4       reserved;
+//Bit  3: 0       reg_pkgain_vsluma_lut8;
+#define   SHARP_PKOSHT_VSLUMA_LUT_L                (0x3203)
+#define P_SHARP_PKOSHT_VSLUMA_LUT_L                (volatile unsigned int *)((0x3203  << 2) + 0xff900000)
+//Bit 31:28       reg_pkosht_vsluma_lut7;
+//Bit 27:24       reg_pkosht_vsluma_lut6;
+//Bit 23:20       reg_pkosht_vsluma_lut5;
+//Bit 19:16       reg_pkosht_vsluma_lut4;
+//Bit 15:12       reg_pkosht_vsluma_lut3;
+//Bit 11: 8       reg_pkosht_vsluma_lut2;
+//Bit  7: 4       reg_pkosht_vsluma_lut1;
+//Bit  3: 0       reg_pkosht_vsluma_lut0;
+#define   SHARP_PKOSHT_VSLUMA_LUT_H                (0x3204)
+#define P_SHARP_PKOSHT_VSLUMA_LUT_H                (volatile unsigned int *)((0x3204  << 2) + 0xff900000)
+//Bit 31: 4       reserved;
+//Bit  3: 0       reg_pkosht_vsluma_lut8;
+//
+// Closing file:  sharp_regs.h
+//
+
+#define SRSHARP0_SHARP_HVSIZE                      (SRSHARP0_OFFSET + SHARP_HVSIZE                 )  //0x00  //
+#define SRSHARP0_SHARP_HVBLANK_NUM                 (SRSHARP0_OFFSET + SHARP_HVBLANK_NUM            )  //0x01  //
+#define SRSHARP0_NR_GAUSSIAN_MODE                  (SRSHARP0_OFFSET + NR_GAUSSIAN_MODE             )  //0x02  //
+//`define SRSHARP0_PK_HVCON_LPF_MODE                 (`SRSHARP0_OFFSET + `PK_HVCON_LPF_MODE            )  //8'h03  //
+//`define SRSHARP0_PK_CON_BLEND_GAIN                 (`SRSHARP0_OFFSET + `PK_CON_BLEND_GAIN            )  //8'h04  //
+#define SRSHARP0_PK_CON_2CIRHPGAIN_TH_RATE         (SRSHARP0_OFFSET + PK_CON_2CIRHPGAIN_TH_RATE    )  //0x05  //
+#define SRSHARP0_PK_CON_2CIRHPGAIN_LIMIT           (SRSHARP0_OFFSET + PK_CON_2CIRHPGAIN_LIMIT      )  //0x06  //
+#define SRSHARP0_PK_CON_2CIRBPGAIN_TH_RATE         (SRSHARP0_OFFSET + PK_CON_2CIRBPGAIN_TH_RATE    )  //0x07  //
+#define SRSHARP0_PK_CON_2CIRBPGAIN_LIMIT           (SRSHARP0_OFFSET + PK_CON_2CIRBPGAIN_LIMIT      )  //0x08  //
+#define SRSHARP0_PK_CON_2DRTHPGAIN_TH_RATE         (SRSHARP0_OFFSET + PK_CON_2DRTHPGAIN_TH_RATE    )  //0x09  //
+#define SRSHARP0_PK_CON_2DRTHPGAIN_LIMIT           (SRSHARP0_OFFSET + PK_CON_2DRTHPGAIN_LIMIT      )  //0x0a  //
+#define SRSHARP0_PK_CON_2DRTBPGAIN_TH_RATE         (SRSHARP0_OFFSET + PK_CON_2DRTBPGAIN_TH_RATE    )  //0x0b  //
+#define SRSHARP0_PK_CON_2DRTBPGAIN_LIMIT           (SRSHARP0_OFFSET + PK_CON_2DRTBPGAIN_LIMIT      )  //0x0c  //
+#define SRSHARP0_PK_CIRFB_LPF_MODE                 (SRSHARP0_OFFSET + PK_CIRFB_LPF_MODE            )  //0x0d  //
+#define SRSHARP0_PK_DRTFB_LPF_MODE                 (SRSHARP0_OFFSET + PK_DRTFB_LPF_MODE            )  //0x0e  //
+#define SRSHARP0_PK_CIRFB_HP_CORING                (SRSHARP0_OFFSET + PK_CIRFB_HP_CORING           )  //0x0f  //
+#define SRSHARP0_PK_CIRFB_BP_CORING                (SRSHARP0_OFFSET + PK_CIRFB_BP_CORING           )  //0x10  //
+#define SRSHARP0_PK_DRTFB_HP_CORING                (SRSHARP0_OFFSET + PK_DRTFB_HP_CORING           )  //0x11  //
+#define SRSHARP0_PK_DRTFB_BP_CORING                (SRSHARP0_OFFSET + PK_DRTFB_BP_CORING           )  //0x12  //
+#define SRSHARP0_PK_CIRFB_BLEND_GAIN               (SRSHARP0_OFFSET + PK_CIRFB_BLEND_GAIN          )  //0x13  //
+#define SRSHARP0_NR_ALPY_SSD_GAIN_OFST             (SRSHARP0_OFFSET + NR_ALPY_SSD_GAIN_OFST        )  //0x14  //
+#define SRSHARP0_NR_ALP0Y_ERR2CURV_TH_RATE         (SRSHARP0_OFFSET + NR_ALP0Y_ERR2CURV_TH_RATE    )  //0x15  //
+#define SRSHARP0_NR_ALP0Y_ERR2CURV_LIMIT           (SRSHARP0_OFFSET + NR_ALP0Y_ERR2CURV_LIMIT      )  //0x16  //
+#define SRSHARP0_NR_ALP0C_ERR2CURV_TH_RATE         (SRSHARP0_OFFSET + NR_ALP0C_ERR2CURV_TH_RATE    )  //0x17  //
+#define SRSHARP0_NR_ALP0C_ERR2CURV_LIMIT           (SRSHARP0_OFFSET + NR_ALP0C_ERR2CURV_LIMIT      )  //0x18  //
+#define SRSHARP0_NR_ALP0_MIN_MAX                   (SRSHARP0_OFFSET + NR_ALP0_MIN_MAX              )  //0x19  //
+#define SRSHARP0_NR_ALP1_MIERR_CORING              (SRSHARP0_OFFSET + NR_ALP1_MIERR_CORING         )  //0x1a  //
+#define SRSHARP0_NR_ALP1_ERR2CURV_TH_RATE          (SRSHARP0_OFFSET + NR_ALP1_ERR2CURV_TH_RATE     )  //0x1b  //
+#define SRSHARP0_NR_ALP1_ERR2CURV_LIMIT            (SRSHARP0_OFFSET + NR_ALP1_ERR2CURV_LIMIT       )  //0x1c  //
+#define SRSHARP0_NR_ALP1_MIN_MAX                   (SRSHARP0_OFFSET + NR_ALP1_MIN_MAX              )  //0x1d  //
+#define SRSHARP0_PK_ALP2_MIERR_CORING              (SRSHARP0_OFFSET + PK_ALP2_MIERR_CORING         )  //0x1e  //
+#define SRSHARP0_PK_ALP2_ERR2CURV_TH_RATE          (SRSHARP0_OFFSET + PK_ALP2_ERR2CURV_TH_RATE     )  //0x1f  //
+#define SRSHARP0_PK_ALP2_ERR2CURV_LIMIT            (SRSHARP0_OFFSET + PK_ALP2_ERR2CURV_LIMIT       )  //0x20  //
+#define SRSHARP0_PK_ALP2_MIN_MAX                   (SRSHARP0_OFFSET + PK_ALP2_MIN_MAX              )  //0x21  //
+#define SRSHARP0_PK_FINALGAIN_HP_BP                (SRSHARP0_OFFSET + PK_FINALGAIN_HP_BP           )  //0x22  //
+#define SRSHARP0_PK_OS_HORZ_CORE_GAIN              (SRSHARP0_OFFSET + PK_OS_HORZ_CORE_GAIN         )  //0x23  //
+#define SRSHARP0_PK_OS_VERT_CORE_GAIN              (SRSHARP0_OFFSET + PK_OS_VERT_CORE_GAIN         )  //0x24  //
+#define SRSHARP0_PK_OS_ADPT_MISC                   (SRSHARP0_OFFSET + PK_OS_ADPT_MISC              )  //0x25  //
+#define SRSHARP0_PK_OS_STATIC                      (SRSHARP0_OFFSET + PK_OS_STATIC                 )  //0x26  //
+#define SRSHARP0_PK_NR_ENABLE                      (SRSHARP0_OFFSET + PK_NR_ENABLE                 )  //0x27  //
+#define SRSHARP0_PK_DRT_SAD_MISC                   (SRSHARP0_OFFSET + PK_DRT_SAD_MISC              )  //0x28  //
+#define SRSHARP0_NR_TI_DNLP_BLEND                  (SRSHARP0_OFFSET + NR_TI_DNLP_BLEND             )  //0x29  //
+
+#define SRSHARP0_LTI_DIR_CORE_ALPHA                (SRSHARP0_OFFSET + LTI_DIR_CORE_ALPHA           )  //0x2a  //
+#define SRSHARP0_CTI_DIR_ALPHA                     (SRSHARP0_OFFSET + CTI_DIR_ALPHA                )  //0x2b  //
+#define SRSHARP0_LTI_CTI_DF_GAIN                   (SRSHARP0_OFFSET + LTI_CTI_DF_GAIN              )  //0x2c  //
+#define SRSHARP0_LTI_CTI_DIR_AC_DBG                (SRSHARP0_OFFSET + LTI_CTI_DIR_AC_DBG           )  //0x2d  //
+#define SRSHARP0_HCTI_FLT_CLP_DC                   (SRSHARP0_OFFSET + HCTI_FLT_CLP_DC              )  //0x2e  //
+#define SRSHARP0_HCTI_BST_GAIN                     (SRSHARP0_OFFSET + HCTI_BST_GAIN                )  //0x2f  //
+#define SRSHARP0_HCTI_BST_CORE                     (SRSHARP0_OFFSET + HCTI_BST_CORE                )  //0x30  //
+#define SRSHARP0_HCTI_CON_2_GAIN_0                 (SRSHARP0_OFFSET + HCTI_CON_2_GAIN_0            )  //0x31  //
+#define SRSHARP0_HCTI_CON_2_GAIN_1                 (SRSHARP0_OFFSET + HCTI_CON_2_GAIN_1            )  //0x32  //
+#define SRSHARP0_HCTI_OS_MARGIN                    (SRSHARP0_OFFSET + HCTI_OS_MARGIN               )  //0x33  //
+#define SRSHARP0_HLTI_FLT_CLP_DC                   (SRSHARP0_OFFSET + HLTI_FLT_CLP_DC              )  //0x34  //
+#define SRSHARP0_HLTI_BST_GAIN                     (SRSHARP0_OFFSET + HLTI_BST_GAIN                )  //0x35  //
+#define SRSHARP0_HLTI_BST_CORE                     (SRSHARP0_OFFSET + HLTI_BST_CORE                )  //0x36  //
+#define SRSHARP0_HLTI_CON_2_GAIN_0                 (SRSHARP0_OFFSET + HLTI_CON_2_GAIN_0            )  //0x37  //
+#define SRSHARP0_HLTI_CON_2_GAIN_1                 (SRSHARP0_OFFSET + HLTI_CON_2_GAIN_1            )  //0x38  //
+#define SRSHARP0_HLTI_OS_MARGIN                    (SRSHARP0_OFFSET + HLTI_OS_MARGIN               )  //0x39  //
+#define SRSHARP0_VLTI_FLT_CON_CLP                  (SRSHARP0_OFFSET + VLTI_FLT_CON_CLP             )  //0x3a  //
+#define SRSHARP0_VLTI_BST_GAIN                     (SRSHARP0_OFFSET + VLTI_BST_GAIN                )  //0x3b  //
+#define SRSHARP0_VLTI_BST_CORE                     (SRSHARP0_OFFSET + VLTI_BST_CORE                )  //0x3c  //
+#define SRSHARP0_VLTI_CON_2_GAIN_0                 (SRSHARP0_OFFSET + VLTI_CON_2_GAIN_0            )  //0x3d  //
+#define SRSHARP0_VLTI_CON_2_GAIN_1                 (SRSHARP0_OFFSET + VLTI_CON_2_GAIN_1            )  //0x3e  //
+#define SRSHARP0_VCTI_FLT_CON_CLP                  (SRSHARP0_OFFSET + VCTI_FLT_CON_CLP             )  //0x3f  //
+#define SRSHARP0_VCTI_BST_GAIN                     (SRSHARP0_OFFSET + VCTI_BST_GAIN                )  //0x40  //
+#define SRSHARP0_VCTI_BST_CORE                     (SRSHARP0_OFFSET + VCTI_BST_CORE                )  //0x41  //
+#define SRSHARP0_VCTI_CON_2_GAIN_0                 (SRSHARP0_OFFSET + VCTI_CON_2_GAIN_0            )  //0x42  //
+#define SRSHARP0_VCTI_CON_2_GAIN_1                 (SRSHARP0_OFFSET + VCTI_CON_2_GAIN_1            )  //0x43  //
+#define SRSHARP0_SHARP_3DLIMIT                     (SRSHARP0_OFFSET + SHARP_3DLIMIT                )  //0x44  //
+#define SRSHARP0_DNLP_EN                           (SRSHARP0_OFFSET + DNLP_EN                      )  //0x45  //
+#define SRSHARP0_DNLP_00                           (SRSHARP0_OFFSET + DNLP_00                      )  //0x46  //
+#define SRSHARP0_DNLP_01                           (SRSHARP0_OFFSET + DNLP_01                      )  //0x47  //
+#define SRSHARP0_DNLP_02                           (SRSHARP0_OFFSET + DNLP_02                      )  //0x48  //
+#define SRSHARP0_DNLP_03                           (SRSHARP0_OFFSET + DNLP_03                      )  //0x49  //
+#define SRSHARP0_DNLP_04                           (SRSHARP0_OFFSET + DNLP_04                      )  //0x4a  //
+#define SRSHARP0_DNLP_05                           (SRSHARP0_OFFSET + DNLP_05                      )  //0x4b  //
+#define SRSHARP0_DNLP_06                           (SRSHARP0_OFFSET + DNLP_06                      )  //0x4c  //
+#define SRSHARP0_DNLP_07                           (SRSHARP0_OFFSET + DNLP_07                      )  //0x4d  //
+#define SRSHARP0_DNLP_08                           (SRSHARP0_OFFSET + DNLP_08                      )  //0x4e  //
+#define SRSHARP0_DNLP_09                           (SRSHARP0_OFFSET + DNLP_09                      )  //0x4f  //
+#define SRSHARP0_DNLP_10                           (SRSHARP0_OFFSET + DNLP_10                      )  //0x50  //
+#define SRSHARP0_DNLP_11                           (SRSHARP0_OFFSET + DNLP_11                      )  //0x51  //
+#define SRSHARP0_DNLP_12                           (SRSHARP0_OFFSET + DNLP_12                      )  //0x52  //
+#define SRSHARP0_DNLP_13                           (SRSHARP0_OFFSET + DNLP_13                      )  //0x53  //
+#define SRSHARP0_DNLP_14                           (SRSHARP0_OFFSET + DNLP_14                      )  //0x54  //
+#define SRSHARP0_DNLP_15                           (SRSHARP0_OFFSET + DNLP_15                      )  //0x55  //
+#define SRSHARP0_DEMO_CRTL                         (SRSHARP0_OFFSET + DEMO_CRTL                    )  //0x56  //
+#define SRSHARP0_SHARP_SR2_CTRL                    (SRSHARP0_OFFSET + SHARP_SR2_CTRL               )  //0x57  //
+#define SRSHARP0_SHARP_SR2_YBIC_HCOEF0             (SRSHARP0_OFFSET + SHARP_SR2_YBIC_HCOEF0        )  //0x58
+#define SRSHARP0_SHARP_SR2_YBIC_HCOEF1             (SRSHARP0_OFFSET + SHARP_SR2_YBIC_HCOEF1        )  //0x59  //
+#define SRSHARP0_SHARP_SR2_CBIC_HCOEF0             (SRSHARP0_OFFSET + SHARP_SR2_CBIC_HCOEF0        )  //0x5a  //
+#define SRSHARP0_SHARP_SR2_CBIC_HCOEF1             (SRSHARP0_OFFSET + SHARP_SR2_CBIC_HCOEF1        )  //0x5b  //
+#define SRSHARP0_SHARP_SR2_YBIC_VCOEF0             (SRSHARP0_OFFSET + SHARP_SR2_YBIC_VCOEF0        )  //0x5c  //
+#define SRSHARP0_SHARP_SR2_YBIC_VCOEF1             (SRSHARP0_OFFSET + SHARP_SR2_YBIC_VCOEF1        )  //0x5d  //
+#define SRSHARP0_SHARP_SR2_CBIC_VCOEF0             (SRSHARP0_OFFSET + SHARP_SR2_CBIC_VCOEF0        )  //0x5e  //
+#define SRSHARP0_SHARP_SR2_CBIC_VCOEF1             (SRSHARP0_OFFSET + SHARP_SR2_CBIC_VCOEF1        )  //0x5f  //
+#define SRSHARP0_SHARP_SR2_MISC                    (SRSHARP0_OFFSET + SHARP_SR2_MISC               )  //0x60  //
+// `define SRSHARP0_SHARP_DEJ2_PRC                    (`SRSHARP0_OFFSET + `SHARP_DEJ2_PRC               )  //8'h61  //
+// `define SRSHARP0_SHARP_DEJ1_PRC                    (`SRSHARP0_OFFSET + `SHARP_DEJ1_PRC               )  //8'h62  //
+// `define SRSHARP0_SHARP_DEJ2_MISC                   (`SRSHARP0_OFFSET + `SHARP_DEJ2_MISC              )  //8'h63  //
+// `define SRSHARP0_SHARP_DEJ1_MISC                   (`SRSHARP0_OFFSET + `SHARP_DEJ1_MISC              )  //8'h64  //
+#define SRSHARP0_SR3_SAD_CTRL                   (SRSHARP0_OFFSET + SHARP_SR3_SAD_CTRL                 ) // 0x61  //
+#define SRSHARP0_SR3_PK_CTRL0                   (SRSHARP0_OFFSET + SHARP_SR3_PK_CTRL0                 ) // 0x62
+#define SRSHARP0_SR3_PK_CTRL1                   (SRSHARP0_OFFSET + SHARP_SR3_PK_CTRL1                 ) // 0x63
+#define SRSHARP0_DEJ_CTRL                       (SRSHARP0_OFFSET + SHARP_DEJ_CTRL                     ) // 0x64
+#define SRSHARP0_DEJ_ALPHA                      (SRSHARP0_OFFSET + SHARP_DEJ_ALPHA                    ) // 0x65
+#define SRSHARP0_SR3_DRTLPF_EN                  (SRSHARP0_OFFSET + SHARP_SR3_DRTLPF_EN                ) // 0x66
+#define SRSHARP0_SR3_DRTLPF_ALPHA_0             (SRSHARP0_OFFSET + SHARP_SR3_DRTLPF_ALPHA_0           ) // 0x67
+#define SRSHARP0_SR3_DRTLPF_ALPHA_1             (SRSHARP0_OFFSET + SHARP_SR3_DRTLPF_ALPHA_1           ) // 0x68
+#define SRSHARP0_SR3_DRTLPF_ALPHA_2             (SRSHARP0_OFFSET + SHARP_SR3_DRTLPF_ALPHA_2           ) // 0x69
+#define SRSHARP0_SR3_DRTLPF_ALPHA_OFST          (SRSHARP0_OFFSET + SHARP_SR3_DRTLPF_ALPHA_OFST        ) // 0x6a
+#define SRSHARP0_SR3_DERING_CTRL                (SRSHARP0_OFFSET + SHARP_SR3_DERING_CTRL              ) // 0x6b
+#define SRSHARP0_SR3_DERING_LUMA2PKGAIN_0TO3    (SRSHARP0_OFFSET + SHARP_SR3_DERING_LUMA2PKGAIN_0TO3  ) // 0x6c
+#define SRSHARP0_SR3_DERING_LUMA2PKGAIN_4TO6    (SRSHARP0_OFFSET + SHARP_SR3_DERING_LUMA2PKGAIN_4TO6  ) // 0x6d
+#define SRSHARP0_SR3_DERING_LUMA2PKOS_0TO3      (SRSHARP0_OFFSET + SHARP_SR3_DERING_LUMA2PKOS_0TO3    ) // 0x6e
+#define SRSHARP0_SR3_DERING_LUMA2PKOS_4TO6      (SRSHARP0_OFFSET + SHARP_SR3_DERING_LUMA2PKOS_4TO6    ) // 0x6f
+#define SRSHARP0_SR3_DERING_GAINVS_MADSAD       (SRSHARP0_OFFSET + SHARP_SR3_DERING_GAINVS_MADSAD     ) // 0x70
+#define SRSHARP0_SR3_DERING_GAINVS_VR2MAX       (SRSHARP0_OFFSET + SHARP_SR3_DERING_GAINVS_VR2MAX     ) // 0x71
+#define SRSHARP0_SR3_DERING_PARAM0              (SRSHARP0_OFFSET + SHARP_SR3_DERING_PARAM0            ) // 0x72
+#define SRSHARP0_SR3_DRTLPF_THETA               (SRSHARP0_OFFSET + SHARP_SR3_DRTLPF_THETA             ) // 0x73
+#define SRSHARP0_SATPRT_CTRL                    (SRSHARP0_OFFSET + SHARP_SATPRT_CTRL                  ) // 0x74
+#define SRSHARP0_SATPRT_DIVM                    (SRSHARP0_OFFSET + SHARP_SATPRT_DIVM                  ) // 0x75
+#define SRSHARP0_SATPRT_LMT_RGB                 (SRSHARP0_OFFSET + SHARP_SATPRT_LMT_RGB               ) // 0x76
+#define SRSHARP0_DB_FLT_CTRL                    (SRSHARP0_OFFSET + SHARP_DB_FLT_CTRL                  ) // 0x77
+#define SRSHARP0_DB_FLT_YC_THRD                 (SRSHARP0_OFFSET + SHARP_DB_FLT_YC_THRD               ) // 0x78
+#define SRSHARP0_DB_FLT_RANDLUT                 (SRSHARP0_OFFSET + SHARP_DB_FLT_RANDLUT               ) // 0x79
+#define SRSHARP0_DB_FLT_PXI_THRD                (SRSHARP0_OFFSET + SHARP_DB_FLT_PXI_THRD              ) // 0x7a
+#define SRSHARP0_DB_FLT_SEED_Y                  (SRSHARP0_OFFSET + SHARP_DB_FLT_SEED_Y                ) // 0x7b
+#define SRSHARP0_DB_FLT_SEED_U                  (SRSHARP0_OFFSET + SHARP_DB_FLT_SEED_U                ) // 0x7c
+#define SRSHARP0_DB_FLT_SEED_V                  (SRSHARP0_OFFSET + SHARP_DB_FLT_SEED_V                ) // 0x7d
+#define SRSHARP0_PKGAIN_VSLUMA_LUT_L            (SRSHARP0_OFFSET + SHARP_PKGAIN_VSLUMA_LUT_L          ) // 0x80
+#define SRSHARP0_PKGAIN_VSLUMA_LUT_H            (SRSHARP0_OFFSET + SHARP_PKGAIN_VSLUMA_LUT_H          ) // 0x81
+#define SRSHARP0_PKOSHT_VSLUMA_LUT_L            (SRSHARP0_OFFSET + SHARP_PKOSHT_VSLUMA_LUT_L          ) // 0x82
+#define SRSHARP0_PKOSHT_VSLUMA_LUT_H            (SRSHARP0_OFFSET + SHARP_PKOSHT_VSLUMA_LUT_H          ) // 0x83
+
+//// srsharp1 reg define
+
+#define SRSHARP1_SHARP_HVSIZE                      (SRSHARP1_OFFSET + SHARP_HVSIZE                 )  //0x00  //
+#define SRSHARP1_SHARP_HVBLANK_NUM                 (SRSHARP1_OFFSET + SHARP_HVBLANK_NUM            )  //0x01  //
+#define SRSHARP1_NR_GAUSSIAN_MODE                  (SRSHARP1_OFFSET + NR_GAUSSIAN_MODE             )  //0x02  //
+//`define SRSHARP1_PK_HVCON_LPF_MODE                 (`SRSHARP1_OFFSET + `PK_HVCON_LPF_MODE            )  //8'h03  //
+//`define SRSHARP1_PK_CON_BLEND_GAIN                 (`SRSHARP1_OFFSET + `PK_CON_BLEND_GAIN            )  //8'h04  //
+#define SRSHARP1_PK_CON_2CIRHPGAIN_TH_RATE         (SRSHARP1_OFFSET + PK_CON_2CIRHPGAIN_TH_RATE    )  //0x05  //
+#define SRSHARP1_PK_CON_2CIRHPGAIN_LIMIT           (SRSHARP1_OFFSET + PK_CON_2CIRHPGAIN_LIMIT      )  //0x06  //
+#define SRSHARP1_PK_CON_2CIRBPGAIN_TH_RATE         (SRSHARP1_OFFSET + PK_CON_2CIRBPGAIN_TH_RATE    )  //0x07  //
+#define SRSHARP1_PK_CON_2CIRBPGAIN_LIMIT           (SRSHARP1_OFFSET + PK_CON_2CIRBPGAIN_LIMIT      )  //0x08  //
+#define SRSHARP1_PK_CON_2DRTHPGAIN_TH_RATE         (SRSHARP1_OFFSET + PK_CON_2DRTHPGAIN_TH_RATE    )  //0x09  //
+#define SRSHARP1_PK_CON_2DRTHPGAIN_LIMIT           (SRSHARP1_OFFSET + PK_CON_2DRTHPGAIN_LIMIT      )  //0x0a  //
+#define SRSHARP1_PK_CON_2DRTBPGAIN_TH_RATE         (SRSHARP1_OFFSET + PK_CON_2DRTBPGAIN_TH_RATE    )  //0x0b  //
+#define SRSHARP1_PK_CON_2DRTBPGAIN_LIMIT           (SRSHARP1_OFFSET + PK_CON_2DRTBPGAIN_LIMIT      )  //0x0c  //
+#define SRSHARP1_PK_CIRFB_LPF_MODE                 (SRSHARP1_OFFSET + PK_CIRFB_LPF_MODE            )  //0x0d  //
+#define SRSHARP1_PK_DRTFB_LPF_MODE                 (SRSHARP1_OFFSET + PK_DRTFB_LPF_MODE            )  //0x0e  //
+#define SRSHARP1_PK_CIRFB_HP_CORING                (SRSHARP1_OFFSET + PK_CIRFB_HP_CORING           )  //0x0f  //
+#define SRSHARP1_PK_CIRFB_BP_CORING                (SRSHARP1_OFFSET + PK_CIRFB_BP_CORING           )  //0x10  //
+#define SRSHARP1_PK_DRTFB_HP_CORING                (SRSHARP1_OFFSET + PK_DRTFB_HP_CORING           )  //0x11  //
+#define SRSHARP1_PK_DRTFB_BP_CORING                (SRSHARP1_OFFSET + PK_DRTFB_BP_CORING           )  //0x12  //
+#define SRSHARP1_PK_CIRFB_BLEND_GAIN               (SRSHARP1_OFFSET + PK_CIRFB_BLEND_GAIN          )  //0x13  //
+#define SRSHARP1_NR_ALPY_SSD_GAIN_OFST             (SRSHARP1_OFFSET + NR_ALPY_SSD_GAIN_OFST        )  //0x14  //
+#define SRSHARP1_NR_ALP0Y_ERR2CURV_TH_RATE         (SRSHARP1_OFFSET + NR_ALP0Y_ERR2CURV_TH_RATE    )  //0x15  //
+#define SRSHARP1_NR_ALP0Y_ERR2CURV_LIMIT           (SRSHARP1_OFFSET + NR_ALP0Y_ERR2CURV_LIMIT      )  //0x16  //
+#define SRSHARP1_NR_ALP0C_ERR2CURV_TH_RATE         (SRSHARP1_OFFSET + NR_ALP0C_ERR2CURV_TH_RATE    )  //0x17  //
+#define SRSHARP1_NR_ALP0C_ERR2CURV_LIMIT           (SRSHARP1_OFFSET + NR_ALP0C_ERR2CURV_LIMIT      )  //0x18  //
+#define SRSHARP1_NR_ALP0_MIN_MAX                   (SRSHARP1_OFFSET + NR_ALP0_MIN_MAX              )  //0x19  //
+#define SRSHARP1_NR_ALP1_MIERR_CORING              (SRSHARP1_OFFSET + NR_ALP1_MIERR_CORING         )  //0x1a  //
+#define SRSHARP1_NR_ALP1_ERR2CURV_TH_RATE          (SRSHARP1_OFFSET + NR_ALP1_ERR2CURV_TH_RATE     )  //0x1b  //
+#define SRSHARP1_NR_ALP1_ERR2CURV_LIMIT            (SRSHARP1_OFFSET + NR_ALP1_ERR2CURV_LIMIT       )  //0x1c  //
+#define SRSHARP1_NR_ALP1_MIN_MAX                   (SRSHARP1_OFFSET + NR_ALP1_MIN_MAX              )  //0x1d  //
+#define SRSHARP1_PK_ALP2_MIERR_CORING              (SRSHARP1_OFFSET + PK_ALP2_MIERR_CORING         )  //0x1e  //
+#define SRSHARP1_PK_ALP2_ERR2CURV_TH_RATE          (SRSHARP1_OFFSET + PK_ALP2_ERR2CURV_TH_RATE     )  //0x1f  //
+#define SRSHARP1_PK_ALP2_ERR2CURV_LIMIT            (SRSHARP1_OFFSET + PK_ALP2_ERR2CURV_LIMIT       )  //0x20  //
+#define SRSHARP1_PK_ALP2_MIN_MAX                   (SRSHARP1_OFFSET + PK_ALP2_MIN_MAX              )  //0x21  //
+#define SRSHARP1_PK_FINALGAIN_HP_BP                (SRSHARP1_OFFSET + PK_FINALGAIN_HP_BP           )  //0x22  //
+#define SRSHARP1_PK_OS_HORZ_CORE_GAIN              (SRSHARP1_OFFSET + PK_OS_HORZ_CORE_GAIN         )  //0x23  //
+#define SRSHARP1_PK_OS_VERT_CORE_GAIN              (SRSHARP1_OFFSET + PK_OS_VERT_CORE_GAIN         )  //0x24  //
+#define SRSHARP1_PK_OS_ADPT_MISC                   (SRSHARP1_OFFSET + PK_OS_ADPT_MISC              )  //0x25  //
+#define SRSHARP1_PK_OS_STATIC                      (SRSHARP1_OFFSET + PK_OS_STATIC                 )  //0x26  //
+#define SRSHARP1_PK_NR_ENABLE                      (SRSHARP1_OFFSET + PK_NR_ENABLE                 )  //0x27  //
+#define SRSHARP1_PK_DRT_SAD_MISC                   (SRSHARP1_OFFSET + PK_DRT_SAD_MISC              )  //0x28  //
+#define SRSHARP1_NR_TI_DNLP_BLEND                  (SRSHARP1_OFFSET + NR_TI_DNLP_BLEND             )  //0x29  //
+#define SRSHARP1_LTI_DIR_CORE_ALPHA                (SRSHARP1_OFFSET + LTI_DIR_CORE_ALPHA           )  //0x2a  //
+#define SRSHARP1_CTI_DIR_ALPHA                     (SRSHARP1_OFFSET + CTI_DIR_ALPHA                )  //0x2b  //
+#define SRSHARP1_LTI_CTI_DF_GAIN                   (SRSHARP1_OFFSET + LTI_CTI_DF_GAIN              )  //0x2c  //
+#define SRSHARP1_LTI_CTI_DIR_AC_DBG                (SRSHARP1_OFFSET + LTI_CTI_DIR_AC_DBG           )  //0x2d  //
+#define SRSHARP1_HCTI_FLT_CLP_DC                   (SRSHARP1_OFFSET + HCTI_FLT_CLP_DC              )  //0x2e  //
+#define SRSHARP1_HCTI_BST_GAIN                     (SRSHARP1_OFFSET + HCTI_BST_GAIN                )  //0x2f  //
+#define SRSHARP1_HCTI_BST_CORE                     (SRSHARP1_OFFSET + HCTI_BST_CORE                )  //0x30  //
+#define SRSHARP1_HCTI_CON_2_GAIN_0                 (SRSHARP1_OFFSET + HCTI_CON_2_GAIN_0            )  //0x31  //
+#define SRSHARP1_HCTI_CON_2_GAIN_1                 (SRSHARP1_OFFSET + HCTI_CON_2_GAIN_1            )  //0x32  //
+#define SRSHARP1_HCTI_OS_MARGIN                    (SRSHARP1_OFFSET + HCTI_OS_MARGIN               )  //0x33  //
+#define SRSHARP1_HLTI_FLT_CLP_DC                   (SRSHARP1_OFFSET + HLTI_FLT_CLP_DC              )  //0x34  //
+#define SRSHARP1_HLTI_BST_GAIN                     (SRSHARP1_OFFSET + HLTI_BST_GAIN                )  //0x35  //
+#define SRSHARP1_HLTI_BST_CORE                     (SRSHARP1_OFFSET + HLTI_BST_CORE                )  //0x36  //
+#define SRSHARP1_HLTI_CON_2_GAIN_0                 (SRSHARP1_OFFSET + HLTI_CON_2_GAIN_0            )  //0x37  //
+#define SRSHARP1_HLTI_CON_2_GAIN_1                 (SRSHARP1_OFFSET + HLTI_CON_2_GAIN_1            )  //0x38  //
+#define SRSHARP1_HLTI_OS_MARGIN                    (SRSHARP1_OFFSET + HLTI_OS_MARGIN               )  //0x39  //
+#define SRSHARP1_VLTI_FLT_CON_CLP                  (SRSHARP1_OFFSET + VLTI_FLT_CON_CLP             )  //0x3a  //
+#define SRSHARP1_VLTI_BST_GAIN                     (SRSHARP1_OFFSET + VLTI_BST_GAIN                )  //0x3b  //
+#define SRSHARP1_VLTI_BST_CORE                     (SRSHARP1_OFFSET + VLTI_BST_CORE                )  //0x3c  //
+#define SRSHARP1_VLTI_CON_2_GAIN_0                 (SRSHARP1_OFFSET + VLTI_CON_2_GAIN_0            )  //0x3d  //
+#define SRSHARP1_VLTI_CON_2_GAIN_1                 (SRSHARP1_OFFSET + VLTI_CON_2_GAIN_1            )  //0x3e  //
+#define SRSHARP1_VCTI_FLT_CON_CLP                  (SRSHARP1_OFFSET + VCTI_FLT_CON_CLP             )  //0x3f  //
+#define SRSHARP1_VCTI_BST_GAIN                     (SRSHARP1_OFFSET + VCTI_BST_GAIN                )  //0x40  //
+#define SRSHARP1_VCTI_BST_CORE                     (SRSHARP1_OFFSET + VCTI_BST_CORE                )  //0x41  //
+#define SRSHARP1_VCTI_CON_2_GAIN_0                 (SRSHARP1_OFFSET + VCTI_CON_2_GAIN_0            )  //0x42  //
+#define SRSHARP1_VCTI_CON_2_GAIN_1                 (SRSHARP1_OFFSET + VCTI_CON_2_GAIN_1            )  //0x43  //
+#define SRSHARP1_SHARP_3DLIMIT                     (SRSHARP1_OFFSET + SHARP_3DLIMIT                )  //0x44  //
+#define SRSHARP1_DNLP_EN                           (SRSHARP1_OFFSET + DNLP_EN                      )  //0x45  //
+#define SRSHARP1_DNLP_00                           (SRSHARP1_OFFSET + DNLP_00                      )  //0x46  //
+#define SRSHARP1_DNLP_01                           (SRSHARP1_OFFSET + DNLP_01                      )  //0x47  //
+#define SRSHARP1_DNLP_02                           (SRSHARP1_OFFSET + DNLP_02                      )  //0x48  //
+#define SRSHARP1_DNLP_03                           (SRSHARP1_OFFSET + DNLP_03                      )  //0x49  //
+#define SRSHARP1_DNLP_04                           (SRSHARP1_OFFSET + DNLP_04                      )  //0x4a  //
+#define SRSHARP1_DNLP_05                           (SRSHARP1_OFFSET + DNLP_05                      )  //0x4b  //
+#define SRSHARP1_DNLP_06                           (SRSHARP1_OFFSET + DNLP_06                      )  //0x4c  //
+#define SRSHARP1_DNLP_07                           (SRSHARP1_OFFSET + DNLP_07                      )  //0x4d  //
+#define SRSHARP1_DNLP_08                           (SRSHARP1_OFFSET + DNLP_08                      )  //0x4e  //
+#define SRSHARP1_DNLP_09                           (SRSHARP1_OFFSET + DNLP_09                      )  //0x4f  //
+#define SRSHARP1_DNLP_10                           (SRSHARP1_OFFSET + DNLP_10                      )  //0x50  //
+#define SRSHARP1_DNLP_11                           (SRSHARP1_OFFSET + DNLP_11                      )  //0x51  //
+#define SRSHARP1_DNLP_12                           (SRSHARP1_OFFSET + DNLP_12                      )  //0x52  //
+#define SRSHARP1_DNLP_13                           (SRSHARP1_OFFSET + DNLP_13                      )  //0x53  //
+#define SRSHARP1_DNLP_14                           (SRSHARP1_OFFSET + DNLP_14                      )  //0x54  //
+#define SRSHARP1_DNLP_15                           (SRSHARP1_OFFSET + DNLP_15                      )  //0x55  //
+#define SRSHARP1_DEMO_CRTL                         (SRSHARP1_OFFSET + DEMO_CRTL                    )  //0x56  //
+#define SRSHARP1_SHARP_SR2_CTRL                    (SRSHARP1_OFFSET + SHARP_SR2_CTRL               )  //0x57  //
+#define SRSHARP1_SHARP_SR2_YBIC_HCOEF0             (SRSHARP1_OFFSET + SHARP_SR2_YBIC_HCOEF0        )  //0x58
+#define SRSHARP1_SHARP_SR2_YBIC_HCOEF1             (SRSHARP1_OFFSET + SHARP_SR2_YBIC_HCOEF1        )  //0x59  //
+#define SRSHARP1_SHARP_SR2_CBIC_HCOEF0             (SRSHARP1_OFFSET + SHARP_SR2_CBIC_HCOEF0        )  //0x5a  //
+#define SRSHARP1_SHARP_SR2_CBIC_HCOEF1             (SRSHARP1_OFFSET + SHARP_SR2_CBIC_HCOEF1        )  //0x5b  //
+#define SRSHARP1_SHARP_SR2_YBIC_VCOEF0             (SRSHARP1_OFFSET + SHARP_SR2_YBIC_VCOEF0        )  //0x5c  //
+#define SRSHARP1_SHARP_SR2_YBIC_VCOEF1             (SRSHARP1_OFFSET + SHARP_SR2_YBIC_VCOEF1        )  //0x5d  //
+#define SRSHARP1_SHARP_SR2_CBIC_VCOEF0             (SRSHARP1_OFFSET + SHARP_SR2_CBIC_VCOEF0        )  //0x5e  //
+#define SRSHARP1_SHARP_SR2_CBIC_VCOEF1             (SRSHARP1_OFFSET + SHARP_SR2_CBIC_VCOEF1        )  //0x5f  //
+#define SRSHARP1_SHARP_SR2_MISC                    (SRSHARP1_OFFSET + SHARP_SR2_MISC               )  //0x60  //
+// `define SRSHARP1_SHARP_DEJ2_PRC                    (`SRSHARP1_OFFSET + `SHARP_DEJ2_PRC               )  //8'h61  //
+// `define SRSHARP1_SHARP_DEJ1_PRC                    (`SRSHARP1_OFFSET + `SHARP_DEJ1_PRC               )  //8'h62  //
+// `define SRSHARP1_SHARP_DEJ2_MISC                   (`SRSHARP1_OFFSET + `SHARP_DEJ2_MISC              )  //8'h63  //
+// `define SRSHARP1_SHARP_DEJ1_MISC                   (`SRSHARP1_OFFSET + `SHARP_DEJ1_MISC              )  //8'h64  //
+
+#define SRSHARP1_SR3_SAD_CTRL                   (SRSHARP1_OFFSET + SHARP_SR3_SAD_CTRL                 ) // 0x61  //
+#define SRSHARP1_SR3_PK_CTRL0                   (SRSHARP1_OFFSET + SHARP_SR3_PK_CTRL0                 ) // 0x62
+#define SRSHARP1_SR3_PK_CTRL1                   (SRSHARP1_OFFSET + SHARP_SR3_PK_CTRL1                 ) // 0x63
+#define SRSHARP1_DEJ_CTRL                       (SRSHARP1_OFFSET + SHARP_DEJ_CTRL                     ) // 0x64
+#define SRSHARP1_DEJ_ALPHA                      (SRSHARP1_OFFSET + SHARP_DEJ_ALPHA                    ) // 0x65
+#define SRSHARP1_SR3_DRTLPF_EN                  (SRSHARP1_OFFSET + SHARP_SR3_DRTLPF_EN                ) // 0x66
+#define SRSHARP1_SR3_DRTLPF_ALPHA_0             (SRSHARP1_OFFSET + SHARP_SR3_DRTLPF_ALPHA_0           ) // 0x67
+#define SRSHARP1_SR3_DRTLPF_ALPHA_1             (SRSHARP1_OFFSET + SHARP_SR3_DRTLPF_ALPHA_1           ) // 0x68
+#define SRSHARP1_SR3_DRTLPF_ALPHA_2             (SRSHARP1_OFFSET + SHARP_SR3_DRTLPF_ALPHA_2           ) // 0x69
+#define SRSHARP1_SR3_DRTLPF_ALPHA_OFST          (SRSHARP1_OFFSET + SHARP_SR3_DRTLPF_ALPHA_OFST        ) // 0x6a
+#define SRSHARP1_SR3_DERING_CTRL                (SRSHARP1_OFFSET + SHARP_SR3_DERING_CTRL              ) // 0x6b
+#define SRSHARP1_SR3_DERING_LUMA2PKGAIN_0TO3    (SRSHARP1_OFFSET + SHARP_SR3_DERING_LUMA2PKGAIN_0TO3  ) // 0x6c
+#define SRSHARP1_SR3_DERING_LUMA2PKGAIN_4TO6    (SRSHARP1_OFFSET + SHARP_SR3_DERING_LUMA2PKGAIN_4TO6  ) // 0x6d
+#define SRSHARP1_SR3_DERING_LUMA2PKOS_0TO3      (SRSHARP1_OFFSET + SHARP_SR3_DERING_LUMA2PKOS_0TO3    ) // 0x6e
+#define SRSHARP1_SR3_DERING_LUMA2PKOS_4TO6      (SRSHARP1_OFFSET + SHARP_SR3_DERING_LUMA2PKOS_4TO6    ) // 0x6f
+#define SRSHARP1_SR3_DERING_GAINVS_MADSAD       (SRSHARP1_OFFSET + SHARP_SR3_DERING_GAINVS_MADSAD     ) // 0x70
+#define SRSHARP1_SR3_DERING_GAINVS_VR2MAX       (SRSHARP1_OFFSET + SHARP_SR3_DERING_GAINVS_VR2MAX     ) // 0x71
+#define SRSHARP1_SR3_DERING_PARAM0              (SRSHARP1_OFFSET + SHARP_SR3_DERING_PARAM0            ) // 0x72
+#define SRSHARP1_SR3_DRTLPF_THETA               (SRSHARP1_OFFSET + SHARP_SR3_DRTLPF_THETA             ) // 0x73
+#define SRSHARP1_SATPRT_CTRL                    (SRSHARP1_OFFSET + SHARP_SATPRT_CTRL                  ) // 0x74
+#define SRSHARP1_SATPRT_DIVM                    (SRSHARP1_OFFSET + SHARP_SATPRT_DIVM                  ) // 0x75
+#define SRSHARP1_SATPRT_LMT_RGB                 (SRSHARP1_OFFSET + SHARP_SATPRT_LMT_RGB               ) // 0x76
+#define SRSHARP1_DB_FLT_CTRL                    (SRSHARP1_OFFSET + SHARP_DB_FLT_CTRL                  ) // 0x77
+#define SRSHARP1_DB_FLT_YC_THRD                 (SRSHARP1_OFFSET + SHARP_DB_FLT_YC_THRD               ) // 0x78
+#define SRSHARP1_DB_FLT_RANDLUT                 (SRSHARP1_OFFSET + SHARP_DB_FLT_RANDLUT               ) // 0x79
+#define SRSHARP1_DB_FLT_PXI_THRD                (SRSHARP1_OFFSET + SHARP_DB_FLT_PXI_THRD              ) // 0x7a
+#define SRSHARP1_DB_FLT_SEED_Y                  (SRSHARP1_OFFSET + SHARP_DB_FLT_SEED_Y                ) // 0x7b
+#define SRSHARP1_DB_FLT_SEED_U                  (SRSHARP1_OFFSET + SHARP_DB_FLT_SEED_U                ) // 0x7c
+#define SRSHARP1_DB_FLT_SEED_V                  (SRSHARP1_OFFSET + SHARP_DB_FLT_SEED_V                ) // 0x7d
+#define SRSHARP1_PKGAIN_VSLUMA_LUT_L            (SRSHARP1_OFFSET + SHARP_PKGAIN_VSLUMA_LUT_L          ) // 0x80
+#define SRSHARP1_PKGAIN_VSLUMA_LUT_H            (SRSHARP1_OFFSET + SHARP_PKGAIN_VSLUMA_LUT_H          ) // 0x81
+#define SRSHARP1_PKOSHT_VSLUMA_LUT_L            (SRSHARP1_OFFSET + SHARP_PKOSHT_VSLUMA_LUT_L          ) // 0x82
+#define SRSHARP1_PKOSHT_VSLUMA_LUT_H            (SRSHARP1_OFFSET + SHARP_PKOSHT_VSLUMA_LUT_H          ) // 0x83
+
+// synopsys translate_off
+// synopsys translate_on
+//
+// Closing file:  srsharp_regs.h
+//
+//`define DOLBY0_VCBUS_BASE              8'h33
+//`include "dolby0_regs.h"
+// -----------------------------------------------
+// CBUS_BASE:  DOLBYTV_VCBUS_BASE = 0x33
+// -----------------------------------------------
+//
+// Reading file:  dolby_regs.h
+//
+// synopsys translate_off
+// synopsys translate_on
+#define   DOLBY_TV_REG_START                       (0x3300)
+#define P_DOLBY_TV_REG_START                       (volatile unsigned int *)((0x3300  << 2) + 0xff900000)
+// dolby register address 0~0xDA
+#define   DOLBY_TV_CLKGATE_CTRL                    (0x33f1)
+#define P_DOLBY_TV_CLKGATE_CTRL                    (volatile unsigned int *)((0x33f1  << 2) + 0xff900000)
+//bit[9:8]  R-RW 0~3 0  dma2axi_clkgate_ctrl         : 0 "auto gated clock", 1 "closed clock", 2&3 "free run clock"
+//bit[7:6]  R-RW 0~3 0  bl_dolby_swaps_clkgate_ctrl  : 0 "auto gated clock", 1 "closed clock", 2&3 "free run clock"
+//bit[5:4]  R-RW 0~3 0  el_swaps_clkgate_ctrl        : 0 "auto gated clock", 1 "closed clock", 2&3 "free run clock"
+//bit[3:2]  R-RW 0~3 0  el_buf_clkgate_ctrl          : 0 "auto gated clock", 1 "closed clock", 2&3 "free run clock"
+//bit[1:0]  R-RW 0~3 0  top_level_reg_clkgate_ctrl   : 0 "auto gated clock", 1 "closed clock", 2&3 "free run clock"
+#define   DOLBY_TV_SWAP_CTRL0                      (0x33f2)
+#define P_DOLBY_TV_SWAP_CTRL0                      (volatile unsigned int *)((0x33f2  << 2) + 0xff900000)
+//bit[2]  R-RW 0~1  0   el_41mode      : 1 "bl resolution : el resolution = 4:1", 0 "bl_res : el_res = 1:1"
+//bit[1]  R-RW 0~1  0   el_enable      : 1 "enhancement layer is supported", 0 "el is not supported"
+//bit[0]  R-RW 0~1  0   source_enable  : 1 "base layer is supported", 0 "bl is not supported"
+#define   DOLBY_TV_SWAP_CTRL1                      (0x33f3)
+#define P_DOLBY_TV_SWAP_CTRL1                      (volatile unsigned int *)((0x33f3  << 2) + 0xff900000)
+//bit[28:16]  R-RW  0~8191 0  htotal  : total pixels number in each line
+//bit[21:0]   R-RW  0~8191 0  vtotal  : total line number in each frame (only support progress frame)
+#define   DOLBY_TV_SWAP_CTRL2                      (0x33f4)
+#define P_DOLBY_TV_SWAP_CTRL2                      (volatile unsigned int *)((0x33f4  << 2) + 0xff900000)
+//bit[28:16]  R-RW  0~4096 0 hsize  : active pixels number in each line
+//bit[21:0]   R-RW  0~3840 0 vsize  : active lines number in each frame
+#define   DOLBY_TV_SWAP_CTRL3                      (0x33f5)
+#define P_DOLBY_TV_SWAP_CTRL3                      (volatile unsigned int *)((0x33f5  << 2) + 0xff900000)
+//bit[28:16]  R-RW  0~8191 0  hsync_width  : hsync signal width (high effective)
+//bit[21:0]   R-RW  0~8191 0  vsync_width  : vysnc singal width (high effective)
+#define   DOLBY_TV_SWAP_CTRL4                      (0x33f6)
+#define P_DOLBY_TV_SWAP_CTRL4                      (volatile unsigned int *)((0x33f6  << 2) + 0xff900000)
+//bit[28:16]  R-RW  0~8191 0  hsync_backporch  : pixels number between hsync and h_active_duration
+//bit[21:0]   R-RW  0~8191 0  vsync_backporch  : lines number between vsync and v_active_duration
+#define   DOLBY_TV_SWAP_CTRL5                      (0x33f7)
+#define P_DOLBY_TV_SWAP_CTRL5                      (volatile unsigned int *)((0x33f7  << 2) + 0xff900000)
+//[25:8]      R-RW                           :   reg_tunnel_sel for tunnel bit match swap
+//bit[4]      R-RW  0~1  0   bl_tunnel_mode  :   1 "hdmi input, source is 12bit422 tunnel in 8bit444", 0 "opt mode, 10 bit 444"
+//bit[3:2]    R-RW  0~3  0   bl_uv_mode      :   3 "uv=in_u", 2 "uv[0]=u[0],uv[1]=v[0]", 1 "uv[0]=v[0],uv[1]=u[0]", 0 "uv=in_v"
+//bit[1:0]    R-RW  0~3  0   el_uv_mode      :   3 "uv=in_u", 2 "uv[0]=u[0],uv[1]=v[0]", 1 "uv[0]=v[0],uv[1]=u[0]", 0 "uv=in_v"
+#define   DOLBY_TV_SWAP_CTRL6                      (0x33f8)
+#define P_DOLBY_TV_SWAP_CTRL6                      (volatile unsigned int *)((0x33f8  << 2) + 0xff900000)
+//bit[31]     R-RW  0~1      dm_uv_input     :   uv select
+//bit[23:16]  R-RW  0~1  0   dump_ctrl       :   1 "fixed output bitdepth as 12bit", 0 "output bitdepth based on vdr_bit_depth"
+//bit[15]     R-RW  0~1      datapath_reset_n_enable : manual reset control
+//bit[14]     R-RW  0~1      handshake_reset_n_enable : manual reset control
+//bit[13]     R-RW  0~1      axi_reset_n_enable : manual reset control
+//bit[5:2]    R-RW  0~15     vdr_bit_depth
+//bit[1:0]    R-RW  0~3      reg_hdmi_mode
+#define   DOLBY_TV_SWAP_CTRL7                      (0x33f9)
+#define P_DOLBY_TV_SWAP_CTRL7                      (volatile unsigned int *)((0x33f9  << 2) + 0xff900000)
+//reserved
+#define   DOLBY_TV_AXI2DMA_CTRL0                   (0x33fa)
+#define P_DOLBY_TV_AXI2DMA_CTRL0                   (volatile unsigned int *)((0x33fa  << 2) + 0xff900000)
+//bit[31]        R-RW   0~1  0    reg_req_en         :  enable req after line count
+//bit[30]        R-RW   0~1  0    reg_id_check       :  check the id of data path and req path
+//bit[29]        R-RW   0~1  0    reg_clear_fifo     :  manually reset bit
+//bit[28]        R-RW   0~1  0    reg_vsync_rst      :  soft_rst auto reset enable
+//bit[27]        R-RW   0~1  0    reg_update_addr    :  manually udpate start addr
+//bit[26]        R-RW   0~1  0    reg_addr_auto      :  auto update start addr enable
+//bit[25]        R-RW   0~1  0    reg_keep_receive   :  data path keep receive
+//bit[24:19]     R-RW   0~63 0    reg_req_th         :  fifo_room > req_th, then send the request
+//bit[18:16]     R-RW   0~7  0    reg_arsize         :  axi arsize
+//bit[14:12]     R-RW   0~7  0    reg_arprot         :  axi arprot
+//bit[11:8]      R-RW   0~15 0    reg_aruser         :  axi aruser
+//bit[5:4]       R-RW   0~3  0    reg_arid           :  axi arid
+//bit[3:0]       R-RW   0~2  0    reg_lens           :  default request lens, each burst has "reg_lens+1" data
+#define   DOLBY_TV_AXI2DMA_CTRL1                   (0x33fb)
+#define P_DOLBY_TV_AXI2DMA_CTRL1                   (volatile unsigned int *)((0x33fb  << 2) + 0xff900000)
+//bit[31]        R-RW   0~1     0 axi_addr_mode   :  1 "canvas mode", 0 "normal mode"
+//bit[27:16]     R-RW   0~4095  0 dma_size0       :  total data number in dma0
+//bit[11:0]      R-RW   0~4095  0 dma_size1       :  total data number in dma1
+#define   DOLBY_TV_AXI2DMA_CTRL2                   (0x33fc)
+#define P_DOLBY_TV_AXI2DMA_CTRL2                   (volatile unsigned int *)((0x33fc  << 2) + 0xff900000)
+//bit[31:0]      R-RW   0~4294967295  0 axi_start_addr : axi start address
+#define   DOLBY_TV_AXI2DMA_CTRL3                   (0x33fd)
+#define P_DOLBY_TV_AXI2DMA_CTRL3                   (volatile unsigned int *)((0x33fd  << 2) + 0xff900000)
+//bit[11:0]      R-RW   0~4095        0  hold_line     :  after hold_line the axi slave start requesting
+#define   DOLBY_TV_STATUS0                         (0x33fe)
+#define P_DOLBY_TV_STATUS0                         (volatile unsigned int *)((0x33fe  << 2) + 0xff900000)
+#define   DOLBY_TV_STATUS1                         (0x33ff)
+#define P_DOLBY_TV_STATUS1                         (volatile unsigned int *)((0x33ff  << 2) + 0xff900000)
+#define   DOLBY_TV_ADAPTIVE_SCALE_REGADDR          (0x33e0)
+#define P_DOLBY_TV_ADAPTIVE_SCALE_REGADDR          (volatile unsigned int *)((0x33e0  << 2) + 0xff900000)
+#define   DOLBY_TV_ADAPTIVE_SCALE_REGDATA          (0x33e1)
+#define P_DOLBY_TV_ADAPTIVE_SCALE_REGDATA          (volatile unsigned int *)((0x33e1  << 2) + 0xff900000)
+#define   DOLBY_TV_ADAPTIVE_SCALE_LUTADDR          (0x33e2)
+#define P_DOLBY_TV_ADAPTIVE_SCALE_LUTADDR          (volatile unsigned int *)((0x33e2  << 2) + 0xff900000)
+#define   DOLBY_TV_ADAPTIVE_SCALE_LUTDATA          (0x33e3)
+#define P_DOLBY_TV_ADAPTIVE_SCALE_LUTDATA          (volatile unsigned int *)((0x33e3  << 2) + 0xff900000)
+// synopsys translate_off
+// synopsys translate_on
+//
+// Closing file:  dolby_regs.h
+//
+// -----------------------------------------------
+// CBUS_BASE:  DOLBY1A_VCBUS_BASE = 0x34
+// -----------------------------------------------
+//
+// Reading file:  dolby1a_regs.h
+//
+// synopsys translate_off
+// synopsys translate_on
+#define   DOLBY_CORE2A_REG_START                   (0x3400)
+#define P_DOLBY_CORE2A_REG_START                   (volatile unsigned int *)((0x3400  << 2) + 0xff900000)
+#define   DOLBY_CORE2A_CLKGATE_CTRL                (0x3432)
+#define P_DOLBY_CORE2A_CLKGATE_CTRL                (volatile unsigned int *)((0x3432  << 2) + 0xff900000)
+#define   DOLBY_CORE2A_SWAP_CTRL0                  (0x3433)
+#define P_DOLBY_CORE2A_SWAP_CTRL0                  (volatile unsigned int *)((0x3433  << 2) + 0xff900000)
+#define   DOLBY_CORE2A_SWAP_CTRL1                  (0x3434)
+#define P_DOLBY_CORE2A_SWAP_CTRL1                  (volatile unsigned int *)((0x3434  << 2) + 0xff900000)
+#define   DOLBY_CORE2A_SWAP_CTRL2                  (0x3435)
+#define P_DOLBY_CORE2A_SWAP_CTRL2                  (volatile unsigned int *)((0x3435  << 2) + 0xff900000)
+#define   DOLBY_CORE2A_SWAP_CTRL3                  (0x3436)
+#define P_DOLBY_CORE2A_SWAP_CTRL3                  (volatile unsigned int *)((0x3436  << 2) + 0xff900000)
+#define   DOLBY_CORE2A_SWAP_CTRL4                  (0x3437)
+#define P_DOLBY_CORE2A_SWAP_CTRL4                  (volatile unsigned int *)((0x3437  << 2) + 0xff900000)
+#define   DOLBY_CORE2A_SWAP_CTRL5                  (0x3438)
+#define P_DOLBY_CORE2A_SWAP_CTRL5                  (volatile unsigned int *)((0x3438  << 2) + 0xff900000)
+#define   DOLBY_CORE2A_DMA_CTRL                    (0x3439)
+#define P_DOLBY_CORE2A_DMA_CTRL                    (volatile unsigned int *)((0x3439  << 2) + 0xff900000)
+#define   DOLBY_CORE2A_DMA_STATUS                  (0x343a)
+#define P_DOLBY_CORE2A_DMA_STATUS                  (volatile unsigned int *)((0x343a  << 2) + 0xff900000)
+#define   DOLBY_CORE2A_STATUS0                     (0x343b)
+#define P_DOLBY_CORE2A_STATUS0                     (volatile unsigned int *)((0x343b  << 2) + 0xff900000)
+#define   DOLBY_CORE2A_STATUS1                     (0x343c)
+#define P_DOLBY_CORE2A_STATUS1                     (volatile unsigned int *)((0x343c  << 2) + 0xff900000)
+#define   DOLBY_CORE2A_STATUS2                     (0x343d)
+#define P_DOLBY_CORE2A_STATUS2                     (volatile unsigned int *)((0x343d  << 2) + 0xff900000)
+#define   DOLBY_CORE2A_STATUS3                     (0x343e)
+#define P_DOLBY_CORE2A_STATUS3                     (volatile unsigned int *)((0x343e  << 2) + 0xff900000)
+#define   DOLBY_CORE2A_DMA_PORT                    (0x343f)
+#define P_DOLBY_CORE2A_DMA_PORT                    (volatile unsigned int *)((0x343f  << 2) + 0xff900000)
+#define   DOLBY_CORE2A_AXI2DMA_CTRL0               (0x3440)
+#define P_DOLBY_CORE2A_AXI2DMA_CTRL0               (volatile unsigned int *)((0x3440  << 2) + 0xff900000)
+#define   DOLBY_CORE2A_AXI2DMA_CTRL1               (0x3441)
+#define P_DOLBY_CORE2A_AXI2DMA_CTRL1               (volatile unsigned int *)((0x3441  << 2) + 0xff900000)
+#define   DOLBY_CORE2A_AXI2DMA_CTRL2               (0x3442)
+#define P_DOLBY_CORE2A_AXI2DMA_CTRL2               (volatile unsigned int *)((0x3442  << 2) + 0xff900000)
+#define   DOLBY_CORE2A_AXI2DMA_CTRL3               (0x3443)
+#define P_DOLBY_CORE2A_AXI2DMA_CTRL3               (volatile unsigned int *)((0x3443  << 2) + 0xff900000)
+// synopsys translate_off
+// synopsys translate_on
+//
+// Closing file:  dolby1a_regs.h
+//
+// -----------------------------------------------
+// CBUS_BASE:  DOLBY1B_VCBUS_BASE = 0x35
+// -----------------------------------------------
+//`include "dolby1b_regs.h"
+// -----------------------------------------------
+// CBUS_BASE:  DOLBY2_VCBUS_BASE = 0x36
+// -----------------------------------------------
+//
+// Reading file:  dolby2_regs.h
+//
+// synopsys translate_off
+// synopsys translate_on
+#define   DOLBY_CORE3_REG_START                    (0x3600)
+#define P_DOLBY_CORE3_REG_START                    (volatile unsigned int *)((0x3600  << 2) + 0xff900000)
+#define   DOLBY_CORE3_CLKGATE_CTRL                 (0x36f0)
+#define P_DOLBY_CORE3_CLKGATE_CTRL                 (volatile unsigned int *)((0x36f0  << 2) + 0xff900000)
+#define   DOLBY_CORE3_SWAP_CTRL0                   (0x36f1)
+#define P_DOLBY_CORE3_SWAP_CTRL0                   (volatile unsigned int *)((0x36f1  << 2) + 0xff900000)
+#define   DOLBY_CORE3_SWAP_CTRL1                   (0x36f2)
+#define P_DOLBY_CORE3_SWAP_CTRL1                   (volatile unsigned int *)((0x36f2  << 2) + 0xff900000)
+#define   DOLBY_CORE3_SWAP_CTRL2                   (0x36f3)
+#define P_DOLBY_CORE3_SWAP_CTRL2                   (volatile unsigned int *)((0x36f3  << 2) + 0xff900000)
+#define   DOLBY_CORE3_SWAP_CTRL3                   (0x36f4)
+#define P_DOLBY_CORE3_SWAP_CTRL3                   (volatile unsigned int *)((0x36f4  << 2) + 0xff900000)
+#define   DOLBY_CORE3_SWAP_CTRL4                   (0x36f5)
+#define P_DOLBY_CORE3_SWAP_CTRL4                   (volatile unsigned int *)((0x36f5  << 2) + 0xff900000)
+#define   DOLBY_CORE3_SWAP_CTRL5                   (0x36f6)
+#define P_DOLBY_CORE3_SWAP_CTRL5                   (volatile unsigned int *)((0x36f6  << 2) + 0xff900000)
+#define   DOLBY_CORE3_SWAP_CTRL6                   (0x36f7)
+#define P_DOLBY_CORE3_SWAP_CTRL6                   (volatile unsigned int *)((0x36f7  << 2) + 0xff900000)
+#define   DOLBY_CORE3_SWAP_CTRL7                   (0x36f8)
+#define P_DOLBY_CORE3_SWAP_CTRL7                   (volatile unsigned int *)((0x36f8  << 2) + 0xff900000)
+#define   DOLBY_CORE3_SWAP_CTRL8                   (0x36f9)
+#define P_DOLBY_CORE3_SWAP_CTRL8                   (volatile unsigned int *)((0x36f9  << 2) + 0xff900000)
+#define   DOLBY_CORE3_SWAP_CTRL9                   (0x36fa)
+#define P_DOLBY_CORE3_SWAP_CTRL9                   (volatile unsigned int *)((0x36fa  << 2) + 0xff900000)
+#define   DOLBY_CORE3_STATUS0                      (0x36fb)
+#define P_DOLBY_CORE3_STATUS0                      (volatile unsigned int *)((0x36fb  << 2) + 0xff900000)
+#define   DOLBY_CORE3_STATUS1                      (0x36fc)
+#define P_DOLBY_CORE3_STATUS1                      (volatile unsigned int *)((0x36fc  << 2) + 0xff900000)
+#define   DOLBY_CORE3_STATUS2                      (0x36fd)
+#define P_DOLBY_CORE3_STATUS2                      (volatile unsigned int *)((0x36fd  << 2) + 0xff900000)
+#define   DOLBY_CORE3_STATUS3                      (0x36fe)
+#define P_DOLBY_CORE3_STATUS3                      (volatile unsigned int *)((0x36fe  << 2) + 0xff900000)
+// synopsys translate_off
+// synopsys translate_on
+//
+// Closing file:  dolby2_regs.h
+//
+//`define MADC_VCBUS_BASE              8'h37
+//
+// Reading file:  vpu_madc_regs.h
+//
+// synopsys translate_off
+// synopsys translate_on
+// -----------------------------------------------
+// CBUS_BASE:  MADC_VCBUS_BASE = 0x37
+// -----------------------------------------------
+// 0x00-0x1f
+//
+// Reading file:  nr4_nm_regs.h
+//
+// synopsys translate_off
+// synopsys translate_on
+#define   NR4_MCNR_SAD_GAIN                        (0x3700)
+#define P_NR4_MCNR_SAD_GAIN                        (volatile unsigned int *)((0x3700  << 2) + 0xff900000)
+//Bit 31:25        reserved
+//Bit 24           reg_nr4_bld12vs3_usemaxsad     // unsigned , default = 0  use minsad/maxsad instead of minsad/avgsad to decision if it was texture or flat region, 1: use minsad/maxsad
+//Bit 23:16        reg_nr4_bld12vs3_rate_gain     // unsigned , default = 64  gain to minsad/maxsad or minsad/avgsad before LUT, 64 normalized as "1"
+//Bit 15: 8        reg_nr4_bld1vs2_rate_gain      // unsigned , default = 32  gain to minsad/maxsad or minsad/avgsad before the LUT, 64 normalized as"1"
+//Bit  7: 0        reg_nr4_coefblt_gain           // unsigned , default = 64  gain to final coefblt, normalized 64 as "1"
+#define   NR4_MCNR_LPF_CTRL                        (0x3701)
+#define P_NR4_MCNR_LPF_CTRL                        (volatile unsigned int *)((0x3701  << 2) + 0xff900000)
+//Bit 31            reserved
+//Bit 30:22        reg_nr4_preflt_alpofst         // signed , default = 0  pre filter alpha ofst
+//Bit 21:16        reg_nr4_preflt_alpgain         // unsigned , default = 16  pre filter alpha gain
+//Bit 15:14        reg_nr4_preflt_alpsel          // unsigned , default = 3  pre filter alpha selection for adaptive blending, 0: mv pointed sad, 1: weighted mv pointed sad, 2or3: coefblt
+//Bit 13: 8        reg_nr4_avgsad_gain            // unsigned , default = 8  gain for avg sad before luts
+//Bit  7            reserved
+//Bit  6           reg_nr4_maxsad_mod             // unsigned , default = 1  max sad select mode, 0: mx2_sad, 1: max sad
+//Bit  5           reg_nr4_minsad_mod             // unsigned , default = 1  min sad select mode, 0: sad with min err, 1: min sad
+//Bit  4           reg_nr4_minmaxsad_lpf          // unsigned , default = 1  mode of lpf for minmaxsad, 0: no LPF, 1: [1 2 1]/4
+//Bit  3           reg_nr4_avgsad_lpf             // unsigned , default = 1  mode of lpf for avgsad, 0: no LPF, 1: [1 2 1]/4
+//Bit  2           reg_nr4_minavgsad_ratio_lpf    // unsigned , default = 1  mode of lpf for minsad/avgsad and zmvsad/avgsad, 0: no LPF, 1: [1 2 1]/4
+//Bit  1           reg_nr4_bldvs_lut_lpf          // unsigned , default = 1  mode of lpf for bld12vs3 and bld1vs2 LUT results, 0: no LPF, 1: [1 2 1]/4
+//Bit  0           reg_nr4_final_coef_lpf         // unsigned , default = 1  mode of lpf for final coef_blt_blend123, 0: no LPF, 1: [1 2 1]/4
+#define   NR4_MCNR_BLD_VS3LUT0                     (0x3702)
+#define P_NR4_MCNR_BLD_VS3LUT0                     (volatile unsigned int *)((0x3702  << 2) + 0xff900000)
+//Bit 31:30        reserved
+//Bit 29:24        reg_nr4_bld12vs3_lut0     // unsigned , default = 0
+//Bit 23:22        reserved
+//Bit 21:16        reg_nr4_bld12vs3_lut1     // unsigned , default = 8
+//Bit 15:14        reserved
+//Bit 13: 8        reg_nr4_bld12vs3_lut2     // unsigned , default = 10
+//Bit  7: 6        reserved
+//Bit  5: 0        reg_nr4_bld12vs3_lut3     // unsigned , default = 11
+#define   NR4_MCNR_BLD_VS3LUT1                     (0x3703)
+#define P_NR4_MCNR_BLD_VS3LUT1                     (volatile unsigned int *)((0x3703  << 2) + 0xff900000)
+//Bit 31:30        reserved
+//Bit 29:24        reg_nr4_bld12vs3_lut4     // unsigned , default = 12
+//Bit 23:22        reserved
+//Bit 21:16        reg_nr4_bld12vs3_lut5     // unsigned , default = 14
+//Bit 15:14        reserved
+//Bit 13: 8        reg_nr4_bld12vs3_lut6     // unsigned , default = 16
+//Bit  7: 6        reserved
+//Bit  5: 0        reg_nr4_bld12vs3_lut7     // unsigned , default = 24
+#define   NR4_MCNR_BLD_VS3LUT2                     (0x3704)
+#define P_NR4_MCNR_BLD_VS3LUT2                     (volatile unsigned int *)((0x3704  << 2) + 0xff900000)
+//Bit 31:30        reserved
+//Bit 29:24        reg_nr4_bld12vs3_lut8     // unsigned , default = 50
+//Bit 23:22        reserved
+//Bit 21:16        reg_nr4_bld12vs3_lut9     // unsigned , default = 58
+//Bit 15:14        reserved
+//Bit 13: 8        reg_nr4_bld12vs3_lut10    // unsigned , default = 63
+//Bit  7: 6        reserved
+//Bit  5: 0        reg_nr4_bld12vs3_lut11    // unsigned , default = 63
+#define   NR4_MCNR_BLD_VS2LUT0                     (0x3705)
+#define P_NR4_MCNR_BLD_VS2LUT0                     (volatile unsigned int *)((0x3705  << 2) + 0xff900000)
+//Bit 31:30        reserved
+//Bit 29:24        reg_nr4_bld1vs2_lut0      // unsigned , default = 63
+//Bit 23:22        reserved
+//Bit 21:16        reg_nr4_bld1vs2_lut1      // unsigned , default = 32
+//Bit 15:14        reserved
+//Bit 13: 8        reg_nr4_bld1vs2_lut2      // unsigned , default = 16
+//Bit  7: 6        reserved
+//Bit  5: 0        reg_nr4_bld1vs2_lut3      // unsigned , default = 8
+#define   NR4_MCNR_BLD_VS2LUT1                     (0x3706)
+#define P_NR4_MCNR_BLD_VS2LUT1                     (volatile unsigned int *)((0x3706  << 2) + 0xff900000)
+//Bit 31:30        reserved
+//Bit 29:24        reg_nr4_bld1vs2_lut4      // unsigned , default = 4
+//Bit 23:22        reserved
+//Bit 21:16        reg_nr4_bld1vs2_lut5      // unsigned , default = 2
+//Bit 15:14        reserved
+//Bit 13: 8        reg_nr4_bld1vs2_lut6      // unsigned , default = 1
+//Bit  7: 6        reserved
+//Bit  5: 0        reg_nr4_bld1vs2_lut7      // unsigned , default = 0
+#define   NR4_COEFBLT_LUT10                        (0x3707)
+#define P_NR4_COEFBLT_LUT10                        (volatile unsigned int *)((0x3707  << 2) + 0xff900000)
+//Bit 31:24        reg_nr4_coefblt_lut10     // signed , default = -128
+//Bit 23:16        reg_nr4_coefblt_lut11     // signed , default = -128
+//Bit 15: 8        reg_nr4_coefblt_lut12     // signed , default = -126
+//Bit  7: 0        reg_nr4_coefblt_lut13     // signed , default = -124
+#define   NR4_COEFBLT_LUT11                        (0x3708)
+#define P_NR4_COEFBLT_LUT11                        (volatile unsigned int *)((0x3708  << 2) + 0xff900000)
+//Bit 31:24        reg_nr4_coefblt_lut14     // signed , default = -120
+//Bit 23:16        reg_nr4_coefblt_lut15     // signed , default = -110
+//Bit 15: 8        reg_nr4_coefblt_lut16     // signed , default = -100
+//Bit  7: 0        reg_nr4_coefblt_lut17     // signed , default = -90
+#define   NR4_COEFBLT_LUT12                        (0x3709)
+#define P_NR4_COEFBLT_LUT12                        (volatile unsigned int *)((0x3709  << 2) + 0xff900000)
+//Bit 31:24        reg_nr4_coefblt_lut18     // signed , default = -56
+//Bit 23:16        reg_nr4_coefblt_lut19     // signed , default = -32
+//Bit 15: 8        reg_nr4_coefblt_lut110    // signed , default = -64
+//Bit  7: 0        reg_nr4_coefblt_lut111    // signed , default = -128
+#define   NR4_COEFBLT_LUT20                        (0x370a)
+#define P_NR4_COEFBLT_LUT20                        (volatile unsigned int *)((0x370a  << 2) + 0xff900000)
+//Bit 31:24        reg_nr4_coefblt_lut20     // signed , default = -128
+//Bit 23:16        reg_nr4_coefblt_lut21     // signed , default = -120
+//Bit 15: 8        reg_nr4_coefblt_lut22     // signed , default = -112
+//Bit  7: 0        reg_nr4_coefblt_lut23     // signed , default = -104
+#define   NR4_COEFBLT_LUT21                        (0x370b)
+#define P_NR4_COEFBLT_LUT21                        (volatile unsigned int *)((0x370b  << 2) + 0xff900000)
+//Bit 31:24        reg_nr4_coefblt_lut24     // signed , default = -96
+//Bit 23:16        reg_nr4_coefblt_lut25     // signed , default = -88
+//Bit 15: 8        reg_nr4_coefblt_lut26     // signed , default = -76
+//Bit  7: 0        reg_nr4_coefblt_lut27     // signed , default = -64
+#define   NR4_COEFBLT_LUT22                        (0x370c)
+#define P_NR4_COEFBLT_LUT22                        (volatile unsigned int *)((0x370c  << 2) + 0xff900000)
+//Bit 31:24        reg_nr4_coefblt_lut28     // signed , default = -48
+//Bit 23:16        reg_nr4_coefblt_lut29     // signed , default = -32
+//Bit 15: 8        reg_nr4_coefblt_lut210    // signed , default = -64
+//Bit  7: 0        reg_nr4_coefblt_lut211    // signed , default = -108
+#define   NR4_COEFBLT_LUT30                        (0x370d)
+#define P_NR4_COEFBLT_LUT30                        (volatile unsigned int *)((0x370d  << 2) + 0xff900000)
+//Bit 31:24        reg_nr4_coefblt_lut30     // signed , default = 8
+//Bit 23:16        reg_nr4_coefblt_lut31     // signed , default = 16
+//Bit 15: 8        reg_nr4_coefblt_lut32     // signed , default = 24
+//Bit  7: 0        reg_nr4_coefblt_lut33     // signed , default = 30
+#define   NR4_COEFBLT_LUT31                        (0x370e)
+#define P_NR4_COEFBLT_LUT31                        (volatile unsigned int *)((0x370e  << 2) + 0xff900000)
+//Bit 31:24        reg_nr4_coefblt_lut34     // signed , default = 36
+//Bit 23:16        reg_nr4_coefblt_lut35     // signed , default = 48
+//Bit 15: 8        reg_nr4_coefblt_lut36     // signed , default = 70
+//Bit  7: 0        reg_nr4_coefblt_lut37     // signed , default = 96
+#define   NR4_COEFBLT_LUT32                        (0x370f)
+#define P_NR4_COEFBLT_LUT32                        (volatile unsigned int *)((0x370f  << 2) + 0xff900000)
+//Bit 31:24        reg_nr4_coefblt_lut38     // signed , default = 120
+//Bit 23:16        reg_nr4_coefblt_lut39     // signed , default = 64
+//Bit 15: 8        reg_nr4_coefblt_lut310    // signed , default = 16
+//Bit  7: 0        reg_nr4_coefblt_lut311    // signed , default = -8
+#define   NR4_COEFBLT_CONV                         (0x3710)
+#define P_NR4_COEFBLT_CONV                         (volatile unsigned int *)((0x3710  << 2) + 0xff900000)
+//Bit 31:24        reserved
+//Bit 23:16        reg_nr4_coefblt_convmin   // unsigned , default = 0  minimum of coef. bilateral conversion
+//Bit 15: 8        reg_nr4_coefblt_convmax   // unsigned , default = 255  maximum of coef. bilateral conversion
+//Bit  7: 0        reg_nr4_coefblt_convmid   // unsigned , default = 128  value at midpoint of coef. bilateral conversion
+#define   NR4_DBGWIN_YX0                           (0x3711)
+#define P_NR4_DBGWIN_YX0                           (volatile unsigned int *)((0x3711  << 2) + 0xff900000)
+//Bit 31:30        reserved
+//Bit 29:16        reg_nr4_dgbwin_yx0        // unsigned , default = 100  ystart for debug window
+//Bit 15:14        reserved
+//Bit 13: 0        reg_nr4_dgbwin_yx1        // unsigned , default = 160  yend   for debug window
+#define   NR4_DBGWIN_YX1                           (0x3712)
+#define P_NR4_DBGWIN_YX1                           (volatile unsigned int *)((0x3712  << 2) + 0xff900000)
+//Bit 31:30        reserved
+//Bit 29:16        reg_nr4_dgbwin_yx2        // unsigned , default = 200  xstart for debug window
+//Bit 15:14        reserved
+//Bit 13: 0        reg_nr4_dgbwin_yx3        // unsigned , default = 300  xend   for debug window
+#define   NR4_NM_X_CFG                             (0x3713)
+#define P_NR4_NM_X_CFG                             (volatile unsigned int *)((0x3713  << 2) + 0xff900000)
+//Bit 31:30        reserved
+//Bit 29:16        reg_nr4_nm_xst            // unsigned , default = 8  start for noise meter statistic, dft = 8
+//Bit 15:14        reserved
+//Bit 13: 0        reg_nr4_nm_xed            // unsigned , default = 711  end for noise meter statistic, dft = HSIZE-8-1;
+#define   NR4_NM_Y_CFG                             (0x3714)
+#define P_NR4_NM_Y_CFG                             (volatile unsigned int *)((0x3714  << 2) + 0xff900000)
+//Bit 31:30        reserved
+//Bit 29:16        reg_nr4_nm_yst            // unsigned , default = 8  start for noise meter statistic, dft = 8;
+//Bit 15:14        reserved
+//Bit 13: 0        reg_nr4_nm_yed            // unsigned , default = 231  end for noise meter statistic, dft = VSIZE-8-1;
+#define   NR4_NM_SAD_THD                           (0x3715)
+#define P_NR4_NM_SAD_THD                           (volatile unsigned int *)((0x3715  << 2) + 0xff900000)
+//Bit 31: 8        reserved
+//Bit  7: 0        reg_nr4_nm_sad_thd        // unsigned , default = 255  threshold for (flat region) sad count, dft = 4
+#define   NR4_MCNR_BANDSPLIT_PRAM                  (0x3716)
+#define P_NR4_MCNR_BANDSPLIT_PRAM                  (volatile unsigned int *)((0x3716  << 2) + 0xff900000)
+//Bit 31: 5        reserved
+//Bit  4           reg_nr4_mc_use_bandsplit     // unsigned , default = 1  separate lp and us for mc IIR filter, 0: no BS used; 1: use BS
+//Bit  3           reg_nr4_mc_apply_on_lp       // unsigned , default = 1  use mcnr only on lowpass portion;
+//Bit  2           reg_nr4_mc_apply_on_us       // unsigned , default = 1  use mcnr only on lp complimentary portion;
+//Bit  1: 0        reg_nr4_mc_zmvbs_use_adplpf  // unsigned , default = 1  use adapptive LPF for the zmv pointing data for MCNR, for abs(mvx)<th
+#define   NR4_MCNR_ALP1_SGN_COR                    (0x3717)
+#define P_NR4_MCNR_ALP1_SGN_COR                    (volatile unsigned int *)((0x3717  << 2) + 0xff900000)
+//Bit 31:24        reg_nr4_mc_aph1_sgn_coring0  // unsigned , default = 10  coring to cur-pre before do sgn decision
+//Bit 23:16        reg_nr4_mc_aph1_sgn_coring1  // unsigned , default = 7  coring to cur-pre before do sgn decision
+//Bit 15: 8        reg_nr4_mc_aph1_sgn_core_max0 // unsigned , default = 90  maximum of coring, default = 30/15
+//Bit  7: 0        reg_nr4_mc_aph1_sgn_core_max1 // unsigned , default = 15  maximum of coring, default = 30/15
+#define   NR4_MCNR_ALP1_SGN_PRAM                   (0x3718)
+#define P_NR4_MCNR_ALP1_SGN_PRAM                   (volatile unsigned int *)((0x3718  << 2) + 0xff900000)
+//Bit 31:11        reserved
+//Bit 10           reg_nr4_mc_alp1_sgn_half       // unsigned , default = 1  half block sgn sum mode enable, 0: only use 3x5 whole block sum of sgns; 1: use max(sgn_3x5, sqrt(sgn_left+sgn_righ))
+//Bit  9           reg_nr4_mc_alp1_sgn_frczmv   // unsigned , default = 1  force zmv to calculate the sign_sum;
+//Bit  8           reg_nr4_mc_alp1_sgnmvx_mode  // unsigned , default = 1  blend mode of sgnlut and mvxlut blend mode: 0: sgnlut+ mvxlut; 1: max(sgnlut, mvxlut), default =1
+//Bit  7: 4        reg_nr4_mc_aph1_sgn_crate0   // unsigned , default = 4  rate to var, norm to 16 as 1, default = 2
+//Bit  3: 0        reg_nr4_mc_aph1_sgn_crate1   // unsigned , default = 2  rate to var, norm to 16 as 1, default = 2
+#define   NR4_MCNR_ALP1_MVX_LUT1                   (0x3719)
+#define P_NR4_MCNR_ALP1_MVX_LUT1                   (volatile unsigned int *)((0x3719  << 2) + 0xff900000)
+//Bit 31:28        reg_nr4_mc_alp1_mvx_luty3  // unsigned , default = 14  alp1 of luma vas mvx(0~7), and alp1 vs mvy(0,1)
+//Bit 27:24        reg_nr4_mc_alp1_mvx_lutc3  // unsigned , default = 14  alp1 of chrm vas mvx(0~7), and alp1 vs mvy(0,1)
+//Bit 23:20        reg_nr4_mc_alp1_mvx_luty2  // unsigned , default = 12  alp1 of luma vas mvx(0~7), and alp1 vs mvy(0,1)
+//Bit 19:16        reg_nr4_mc_alp1_mvx_lutc2  // unsigned , default = 12  alp1 of chrm vas mvx(0~7), and alp1 vs mvy(0,1)
+//Bit 15:12        reg_nr4_mc_alp1_mvx_luty1  // unsigned , default = 5  alp1 of luma vas mvx(0~7), and alp1 vs mvy(0,1)
+//Bit 11: 8        reg_nr4_mc_alp1_mvx_lutc1  // unsigned , default = 5  alp1 of chrm vas mvx(0~7), and alp1 vs mvy(0,1)
+//Bit  7: 4        reg_nr4_mc_alp1_mvx_luty0  // unsigned , default = 3  alp1 of luma vas mvx(0~7), and alp1 vs mvy(0,1)
+//Bit  3: 0        reg_nr4_mc_alp1_mvx_lutc0  // unsigned , default = 3  alp1 of chrm vas mvx(0~7), and alp1 vs mvy(0,1)
+#define   NR4_MCNR_ALP1_MVX_LUT2                   (0x371a)
+#define P_NR4_MCNR_ALP1_MVX_LUT2                   (volatile unsigned int *)((0x371a  << 2) + 0xff900000)
+//Bit 31:28        reg_nr4_mc_alp1_mvx_luty7  // unsigned , default = 15  alp1 of luma vas mvx(0~7), and alp1 vs mvy(0,1)
+//Bit 27:24        reg_nr4_mc_alp1_mvx_lutc7  // unsigned , default = 15  alp1 of chrm vas mvx(0~7), and alp1 vs mvy(0,1)
+//Bit 23:20        reg_nr4_mc_alp1_mvx_luty6  // unsigned , default = 15  alp1 of luma vas mvx(0~7), and alp1 vs mvy(0,1)
+//Bit 19:16        reg_nr4_mc_alp1_mvx_lutc6  // unsigned , default = 15  alp1 of chrm vas mvx(0~7), and alp1 vs mvy(0,1)
+//Bit 15:12        reg_nr4_mc_alp1_mvx_luty5  // unsigned , default = 15  alp1 of luma vas mvx(0~7), and alp1 vs mvy(0,1)
+//Bit 11: 8        reg_nr4_mc_alp1_mvx_lutc5  // unsigned , default = 15  alp1 of chrm vas mvx(0~7), and alp1 vs mvy(0,1)
+//Bit  7: 4        reg_nr4_mc_alp1_mvx_luty4  // unsigned , default = 15  alp1 of luma vas mvx(0~7), and alp1 vs mvy(0,1)
+//Bit  3: 0        reg_nr4_mc_alp1_mvx_lutc4  // unsigned , default = 15  alp1 of chrm vas mvx(0~7), and alp1 vs mvy(0,1)
+#define   NR4_MCNR_ALP1_MVX_LUT3                   (0x371b)
+#define P_NR4_MCNR_ALP1_MVX_LUT3                   (volatile unsigned int *)((0x371b  << 2) + 0xff900000)
+//Bit 31: 8        reserved
+//Bit  7: 4        reg_nr4_mc_alp1_mvx_luty8  // unsigned , default = 6  alp1 of luma vas mvx(0~7), and alp1 vs mvy(0,1)
+//Bit  3: 0        reg_nr4_mc_alp1_mvx_lutc8  // unsigned , default = 6  alp1 of chrm vas mvx(0~7), and alp1 vs mvy(0,1)
+#define   NR4_MCNR_ALP1_LP_PRAM                    (0x371c)
+#define P_NR4_MCNR_ALP1_LP_PRAM                    (volatile unsigned int *)((0x371c  << 2) + 0xff900000)
+//Bit 31:18        reserved
+//Bit 17:16        reg_nr4_mc_alp1_lp_sel    // unsigned , default = 1  mode for alp1_lp for lp portion IIR, 0: apha1, 1:dc_dif vs ac analysis; 2: gain/ofst of alp1; 3: max of #1/#2 results
+//Bit 15: 8        reg_nr4_mc_alp1_lp_gain   // unsigned , default = 64  gain to alp1 to get the alp1_lp = alp1*gain/32 + ofset, default =64;
+//Bit  7: 0        reg_nr4_mc_alp1_lp_ofst   // signed , default = 0  offset to alp1 to get the alp1_lp = alp1*gain/32 + ofset, default =10;
+#define   NR4_MCNR_ALP1_SGN_LUT1                   (0x371d)
+#define P_NR4_MCNR_ALP1_SGN_LUT1                   (volatile unsigned int *)((0x371d  << 2) + 0xff900000)
+//Bit 31:28        reg_nr4_mc_alp1_sgn_lut0  // unsigned , default = 3  alp1 vs x=abs|sgn(cur-pre)|, if x is small, less possibility of flat region move
+//Bit 27:24        reg_nr4_mc_alp1_sgn_lut1  // unsigned , default = 3  alp1 vs x=abs|sgn(cur-pre)|, if x is small, less possibility of flat region move
+//Bit 23:20        reg_nr4_mc_alp1_sgn_lut2  // unsigned , default = 3  alp1 vs x=abs|sgn(cur-pre)|, if x is small, less possibility of flat region move
+//Bit 19:16        reg_nr4_mc_alp1_sgn_lut3  // unsigned , default = 4  alp1 vs x=abs|sgn(cur-pre)|, if x is small, less possibility of flat region move
+//Bit 15:12        reg_nr4_mc_alp1_sgn_lut4  // unsigned , default = 5  alp1 vs x=abs|sgn(cur-pre)|, if x is small, less possibility of flat region move
+//Bit 11: 8        reg_nr4_mc_alp1_sgn_lut5  // unsigned , default = 6  alp1 vs x=abs|sgn(cur-pre)|, if x is small, less possibility of flat region move
+//Bit  7: 4        reg_nr4_mc_alp1_sgn_lut6  // unsigned , default = 7  alp1 vs x=abs|sgn(cur-pre)|, if x is small, less possibility of flat region move
+//Bit  3: 0        reg_nr4_mc_alp1_sgn_lut7  // unsigned , default = 8  alp1 vs x=abs|sgn(cur-pre)|, if x is small, less possibility of flat region move
+#define   NR4_MCNR_ALP1_SGN_LUT2                   (0x371e)
+#define P_NR4_MCNR_ALP1_SGN_LUT2                   (volatile unsigned int *)((0x371e  << 2) + 0xff900000)
+//Bit 31:28        reg_nr4_mc_alp1_sgn_lut8   // unsigned , default = 9  alp1 vs x=abs|sgn(cur-pre)|, if x is small, less possibility of flat region move
+//Bit 27:24        reg_nr4_mc_alp1_sgn_lut9   // unsigned , default = 10  alp1 vs x=abs|sgn(cur-pre)|, if x is small, less possibility of flat region move
+//Bit 23:20        reg_nr4_mc_alp1_sgn_lut10  // unsigned , default = 11  alp1 vs x=abs|sgn(cur-pre)|, if x is small, less possibility of flat region move
+//Bit 19:16        reg_nr4_mc_alp1_sgn_lut11  // unsigned , default = 12  alp1 vs x=abs|sgn(cur-pre)|, if x is small, less possibility of flat region move
+//Bit 15:12        reg_nr4_mc_alp1_sgn_lut12  // unsigned , default = 13  alp1 vs x=abs|sgn(cur-pre)|, if x is small, less possibility of flat region move
+//Bit 11: 8        reg_nr4_mc_alp1_sgn_lut13  // unsigned , default = 14  alp1 vs x=abs|sgn(cur-pre)|, if x is small, less possibility of flat region move
+//Bit  7: 4        reg_nr4_mc_alp1_sgn_lut14  // unsigned , default = 15  alp1 vs x=abs|sgn(cur-pre)|, if x is small, less possibility of flat region move
+//Bit  3: 0        reg_nr4_mc_alp1_sgn_lut15  // unsigned , default = 15  alp1 vs x=abs|sgn(cur-pre)|, if x is small, less possibility of flat region move
+#define   NR4_RO_NM_SAD_SUM                        (0x371f)
+#define P_NR4_RO_NM_SAD_SUM                        (volatile unsigned int *)((0x371f  << 2) + 0xff900000)
+//Bit 31: 0        ro_nr4_nm_sad_sum         // unsigned , default = 0  sum of sad, for scene change detectcion, in noise meter
+#define   NR4_RO_NM_SAD_CNT                        (0x3720)
+#define P_NR4_RO_NM_SAD_CNT                        (volatile unsigned int *)((0x3720  << 2) + 0xff900000)
+//Bit 31: 0        ro_nr4_nm_sad_cnt         // unsigned , default = 0  cnt of sad, for scene change detectcion, in noise meter
+#define   NR4_RO_NM_VAR_SUM                        (0x3721)
+#define P_NR4_RO_NM_VAR_SUM                        (volatile unsigned int *)((0x3721  << 2) + 0xff900000)
+//Bit 31: 0        ro_nr4_nm_var_sum         // unsigned , default = 0  sum of var, for noise level detection, in noise meter
+#define   NR4_RO_NM_VAR_SCNT                       (0x3722)
+#define P_NR4_RO_NM_VAR_SCNT                       (volatile unsigned int *)((0x3722  << 2) + 0xff900000)
+//Bit 31: 0        ro_nr4_nm_var_cnt         // unsigned , default = 0  cnt of var, for noise level detection, in noise meter
+#define   NR4_RO_NM_VAR_MIN_MAX                    (0x3723)
+#define P_NR4_RO_NM_VAR_MIN_MAX                    (volatile unsigned int *)((0x3723  << 2) + 0xff900000)
+//Bit 31:22        reserved
+//Bit 21:12        ro_nr4_nm_min_var         // unsigned , default = 1023  min of var, for noise level detection, in noise meter
+//Bit 11:10        reserved
+//Bit  9: 0        ro_nr4_nm_max_var         // unsigned , default = 0  max of var, for noise level detection, in noise meter
+#define   NR4_RO_NR4_DBGPIX_NUM                    (0x3724)
+#define P_NR4_RO_NR4_DBGPIX_NUM                    (volatile unsigned int *)((0x3724  << 2) + 0xff900000)
+//Bit 31:28        reserved
+//Bit 27: 0        ro_nr4_dbgpix_num         // unsigned , default = 0  number of pixels statistic invoved (removed?)
+#define   NR4_RO_NR4_BLDVS2_SUM                    (0x3725)
+#define P_NR4_RO_NR4_BLDVS2_SUM                    (volatile unsigned int *)((0x3725  << 2) + 0xff900000)
+//Bit 31: 0        ro_nr4_bld1vs2_sum        // unsigned , default = 0  sum of blend_1vs2 with the debug window
+#define   NR4_BLDVS3_SUM                           (0x3726)
+#define P_NR4_BLDVS3_SUM                           (volatile unsigned int *)((0x3726  << 2) + 0xff900000)
+//Bit 31: 0        ro_nr4_bld12vs3_sum       // unsigned , default = 0  sum of blend_12vs3 with the debug window
+#define   NR4_COEF12_SUM                           (0x3727)
+#define P_NR4_COEF12_SUM                           (volatile unsigned int *)((0x3727  << 2) + 0xff900000)
+//Bit 31: 0        ro_nr4_coef12_sum         // signed , default = 0  sum of coef_blt_blend12 with the debug window, under 8 bits precision
+#define   NR4_COEF123_SUM                          (0x3728)
+#define P_NR4_COEF123_SUM                          (volatile unsigned int *)((0x3728  << 2) + 0xff900000)
+//Bit 31: 0        ro_nr4_coef123_sum        // signed , default = 0  sum of coef_final with the debug window, under 8 bits precision
+// synopsys translate_off
+// synopsys translate_on
+//
+// Closing file:  nr4_nm_regs.h
+//
+// 0x28-0x38
+//
+// Reading file:  nr_deband_regs.h
+//
+// synopsys translate_off
+// synopsys translate_on
+#define   NR_DB_FLT_CTRL                           (0x3738)
+#define P_NR_DB_FLT_CTRL                           (volatile unsigned int *)((0x3738  << 2) + 0xff900000)
+//Bit 31:27        reserved
+//Bit 26           reg_nrdeband_reset1       // unsigned , default = 0  0 : no reset seed  1: reload chroma seed
+//Bit 25           reg_nrdeband_reset0       // unsigned , default = 0  0 : no reset seed  1: reload luma seed
+//Bit 24           reg_nrdeband_rgb          // unsigned , default = 0  0 : yuv 1: RGB
+//Bit 23           reg_nrdeband_en11         // unsigned , default = 1  debanding registers of side lines, [0] for luma,   same for below
+//Bit 22           reg_nrdeband_en10         // unsigned , default = 1  debanding registers of side lines, [1] for chroma, same for below
+//Bit 21           reg_nrdeband_siderand     // unsigned , default = 1  options to use side two lines use the rand, instead of use for the YUV three component of middle line, 0: seed[3]/bandrand[3] for middle line yuv; 1: seed[3]/bandrand[3] for nearby three lines Y;
+//Bit 20           reg_nrdeband_randmode     // unsigned , default = 0  mode of rand noise adding, 0: same noise strength for all difs; else: strenght of noise will not exceed the difs, MIN((pPKReg->reg_nrdeband_bandrand[m]), noise[m])
+//Bit 19:17        reg_nrdeband_bandrand2    // unsigned , default = 6
+//Bit 16            reserved
+//Bit 15:13        reg_nrdeband_bandrand1    // unsigned , default = 6
+//Bit 12            reserved
+//Bit 11: 9        reg_nrdeband_bandrand0    // unsigned , default = 6
+//Bit  8            reserved
+//Bit  7           reg_nrdeband_hpxor1       // unsigned , default = 1   debanding random hp portion xor, [0] for luma
+//Bit  6           reg_nrdeband_hpxor0       // unsigned , default = 1   debanding random hp portion xor, [1] for chroma
+//Bit  5           reg_nrdeband_en1          // unsigned , default = 1   debanding registers,  for luma
+//Bit  4           reg_nrdeband_en0          // unsigned , default = 1   debanding registers,  for chroma
+//Bit  3: 2        reg_nrdeband_lpf_mode1    // unsigned , default = 2   lpf mode, 0: 3x3, 1:3x5; 2: 5x5; 3:5x7
+//Bit  1: 0        reg_nrdeband_lpf_mode0    // unsigned , default = 2   lpf mode, 0: 3x3, 1:3x5; 2: 5x5; 3:5x7
+#define   NR_DB_FLT_YC_THRD                        (0x3739)
+#define P_NR_DB_FLT_YC_THRD                        (volatile unsigned int *)((0x3739  << 2) + 0xff900000)
+//Bit 31:28        reg_nrdeband_luma_th3     // unsigned , default = 9   threshold to |Y-Ylpf|, if < th[0] use lpf
+//Bit 27:24        reg_nrdeband_luma_th2     // unsigned , default = 7   elseif <th[1] use (lpf*3 + y)/4
+//Bit 23:20        reg_nrdeband_luma_th1     // unsigned , default = 6   elseif <th[1] use (lpf*3 + y)/4elseif <th[2] (lpf*1 + y)/2
+//Bit 19:16        reg_nrdeband_luma_th0     // unsigned , default = 5   elseif <th[1] use (lpf*3 + y)/4elseif elseif <th[3] (lpf*1 + 3*y)/4; else
+//Bit 15:12        reg_nrdeband_chrm_th3     // unsigned , default = 9   threshold to |Y-Ylpf|, if < th[0] use lpf
+//Bit 11: 8        reg_nrdeband_chrm_th2     // unsigned , default = 7   elseif <th[1] use (lpf*3 + y)/4
+//Bit  7: 4        reg_nrdeband_chrm_th1     // unsigned , default = 6   elseif <th[1] use (lpf*3 + y)/4elseif <th[2] (lpf*1 + y)/2
+//Bit  3: 0        reg_nrdeband_chrm_th0     // unsigned , default = 5   elseif <th[1] use (lpf*3 + y)/4elseif elseif
+#define   NR_DB_FLT_RANDLUT                        (0x373a)
+#define P_NR_DB_FLT_RANDLUT                        (volatile unsigned int *)((0x373a  << 2) + 0xff900000)
+//Bit 31:24        reserved
+//Bit 23:21        reg_nrdeband_randslut7    // unsigned , default = 1   lut0
+//Bit 20:18        reg_nrdeband_randslut6    // unsigned , default = 1   lut0
+//Bit 17:15        reg_nrdeband_randslut5    // unsigned , default = 1   lut0
+//Bit 14:12        reg_nrdeband_randslut4    // unsigned , default = 1   lut0
+//Bit 11: 9        reg_nrdeband_randslut3    // unsigned , default = 1   lut0
+//Bit  8: 6        reg_nrdeband_randslut2    // unsigned , default = 1   lut0
+//Bit  5: 3        reg_nrdeband_randslut1    // unsigned , default = 1   lut0
+//Bit  2: 0        reg_nrdeband_randslut0    // unsigned , default = 1   lut0
+#define   NR_DB_FLT_PXI_THRD                       (0x373b)
+#define P_NR_DB_FLT_PXI_THRD                       (volatile unsigned int *)((0x373b  << 2) + 0xff900000)
+//Bit 31:26        reserved
+//Bit 25:16        reg_nrdeband_yc_th1       // unsigned , default = 0   to luma/|u/v| for using the denoise
+//Bit 15:10        reserved
+//Bit  9: 0        reg_nrdeband_yc_th0       // unsigned , default = 0   to luma/|u/v| for using the denoise
+#define   NR_DB_FLT_SEED_Y                         (0x373c)
+#define P_NR_DB_FLT_SEED_Y                         (volatile unsigned int *)((0x373c  << 2) + 0xff900000)
+//Bit 31: 0        reg_nrdeband_seed0        // unsigned , default = 1621438240  noise adding seed for Y. seed[0]= 0x60a52f20; as default
+#define   NR_DB_FLT_SEED_U                         (0x373d)
+#define P_NR_DB_FLT_SEED_U                         (volatile unsigned int *)((0x373d  << 2) + 0xff900000)
+//Bit 31: 0        reg_nrdeband_seed1        // unsigned , default = 1621438247  noise adding seed for U. seed[0]= 0x60a52f27; as default
+#define   NR_DB_FLT_SEED_V                         (0x373e)
+#define P_NR_DB_FLT_SEED_V                         (volatile unsigned int *)((0x373e  << 2) + 0xff900000)
+//Bit 31: 0        reg_nrdeband_seed2        // unsigned , default = 1621438242  noise adding seed for V. seed[0]= 0x60a52f22; as default
+#define   NR_DB_FLT_SEED3                          (0x373f)
+#define P_NR_DB_FLT_SEED3                          (volatile unsigned int *)((0x373f  << 2) + 0xff900000)
+//Bit 31: 0        reg_nrdeband_seed3        // unsigned , default = 1621438242  noise adding seed for V. seed[0]= 0x60a52f22; as default
+// synopsys translate_off
+// synopsys translate_on
+//
+// Closing file:  nr_deband_regs.h
+//
+// synopsys translate_off
+// synopsys translate_on
+//
+// Closing file:  vpu_madc_regs.h
+//
+// -----------------------------------------------
+// CBUS_BASE:  NR4NM_VCBUS_BASE = 0x68
+// -----------------------------------------------
+// synopsys translate_off
+// synopsys translate_on
+//
+// Closing file:  ./vcbus_regs.h
+//
+//
+// Reading file:  ./ge2d_regs.h
+//
+// synopsys translate_off
+// synopsys translate_on
+//===========================================================================
+////// GE2D Registers    0x8a0 - 0x8ff
+//address is 0xd016_0000 - 0xd0160000 - 0xd01603ff
+//===========================================================================
+// -----------------------------------------------
+// CBUS_BASE:  GE2D_GCBUS_BASE = 0x00
+// -----------------------------------------------
+//Bit 31, destination bytemask only if destination bitmask is enable
+//Bit 30, destination bitmask enable
+//Bit 29, source2 key  enable
+//Bit 28, source2 key  mode, 0: mask data when match, 1: mask data when unmatch
+//Bit 27, source1 key  enable
+//Bit 26, source1 key  mode, 0: mask data when match, 1: mask data when unmatch
+//Bit 25:24, dst1 8bit mode component selection,
+//            00: select Y(R), 01: Cb(G), 10: Cr(B), 11: Alpha
+//Bit 23  dst clip mode, 0: write inside clip window, 1: write outside clip window
+//Bit 22:17,  reserved
+//Bit 16:15, src2 8bit mode component selection,
+//            00: select Y(R), 01: Cb(G), 10: Cr(B), 11: Alpha
+//Bit 14     src2 fill mode, 0: repeat data, 1: fill default color
+//Bit 13:12  src2 picture struct, 00: frame, 10: even, 11: odd
+//Bit 11     src1 x direction yc ration, 0: 1:1, 1: 2:1
+//Bit 10     src1 y direction yc ration, 0: 1:1, 1: 2:1
+//Bit 9:7    reserved
+//Bit 6:5,   src1  8bit mode component selection,
+//            00: select Y(R), 01: Cb(G), 10: Cr(B), 11: Alpha
+//Bit 4      src1 fill mode, 0: repeat data, 1: fill default color
+//Bit 3      src1 lookup table enable
+//Bit 2:1    src1 picture struct, 00: frame, 10: even, 11: odd
+//Bit 0      src1 separate buffer enable
+#define   GE2D_GEN_CTRL0                           (0x00a0)
+#define P_GE2D_GEN_CTRL0                           (volatile unsigned int *)((0x00a0  << 2) + 0xff940000)
+//Bit 31, soft rst
+//Bit 30, dst write response counter reset
+//Bit 29, disable adding dst write response count to busy bit
+//Bit 28:26, reserved
+//bit 25:24, interrupt control, if bit[0] true, generate interrupt when one command done,
+//                              if bit[1] true, generate interrupt when ge2d change from busy to not busy
+//Bit 23:22 src2 burst size control
+//Bit 21:16 src1 burst size control, 5:4, yfifo, 3:2, cbfifo, 1:0, crfifo
+//          each 2bit, 00: 24 64bitword, 01: 32 64bitword, 10: 48 64bitwords, 11: 64 64bitwords
+//Bit 15:14, dst1 picture struct, 00: frame, 10:top, 11: bottom
+//Bit 13:12, bit 13 if true, force read src1, bit 12 if true, force read src2
+//Bit 11, dst2 request urgent enable
+//Bit 10, src1 request urgent enable
+//Bit 9,  src2 request urgent enable
+//Bit 8,  dst1 request urgent enable
+//Bit 7:0 src1 global alpha
+#define   GE2D_GEN_CTRL1                           (0x00a1)
+#define P_GE2D_GEN_CTRL1                           (volatile unsigned int *)((0x00a1  << 2) + 0xff940000)
+//Bit31      alpha conversion mode in alu, 0: alpha_out = (alpha !=0) ? alpha +1 : 0;
+//                 otherwise, alpha_out = (alpha < 128) ? alpha: alpha + 1;
+//Bit30      color conversion mode in alu, 0: color_out = (color != 0) ? color +1: 0;
+//                 otherwise, color_out = (color < 128) ? color: color + 1;
+//Bit29      src1_gb_alpha_en, As = src1_gb_alpha_en ? Asr * Ag: Asr
+//Bit28      dst1_color_round_mode, 0: truncate, 1: + 0.5 rounding
+//Bit27      src2_color_expand_mode, 0: add 0, 1: add MSBs
+//Bit26      src2_alpha_expand_mode, 0: add 0, 1: add MSBs
+//Bit25      src1_color_expand_mode, 0: add 0, 1: add MSBs
+//Bit24      src1_alpha_expand_mode, 0: add 0, 1: add MSBs
+//Bit 23     if true, dst little endian, otherwise big endian
+//Bit 22:19 dst1 color_map
+//        dst1_format=0                  : output 8-bit;
+//        dst1_format=1, dst1_color_map=1: output 16-bit YCbCr  655;
+//        dst1_format=1, dst1_color_map=2: output 16-bit YCbCr  844;
+//        dst1_format=1, dst1_color_map=3: output 16-bit YCbCrA 6442;
+//        dst1_format=1, dst1_color_map=4: output 16-bit YCbCrA 4444;
+//        dst1_format=1, dst1_color_map=5: output 16-bit YCbCr  565;
+//        dst1_format=1, dst1_color_map=6: output 16-bit AYCbCr 4444;
+//        dst1_format=1, dst1_color_map=7: output 16-bit AYCbCr 1555;
+//        dst1_format=1, dst1_color_map=8: output 16-bit YCbCrA 4642;
+//        dst1_format=1, dst1_color_map=9: output 16-bit CbCr   88;
+//        dst1_format=1, dst1_color_map=10:output 16-bit CrCb   88;
+//        dst1_format=2, dst1_color_map=0: output 24-bit YCbCr  888;
+//        dst1_format=2, dst1_color_map=1: output 24-bit YCbCrA 5658;
+//        dst1_format=2, dst1_color_map=2: output 24-bit AYCbCr 8565;
+//        dst1_format=2, dst1_color_map=3: output 24-bit YCbCrA 6666;
+//        dst1_format=2, dst1_color_map=4: output 24-bit AYCbCr 6666;
+//        dst1_format=2, dst1_color_map=5: output 24-bit CrCbY  888;
+//        dst1_format=3, dst1_color_map=0: output 32-bit YCbCrA 8888;
+//        dst1_format=3, dst1_color_map=1: output 32-bit AYCbCr 8888;
+//        dst1_format=3, dst1_color_map=2: output 32-bit ACrCbY 8888;
+//        dst1_format=3, dst1_color_map=3: output 32-bit CrCbYA 8888.
+//Bit 17:16 dst1_format,  00: 8bit, 01:16bit, 10:24bit, 11: 32bit
+//Bit 15    if true, src2 little endian, otherwise big endian
+//Bit 14:11  src2 color_map
+//        src2_format=0                 : output 8-bit;
+//        src2_format=1, src2_color_map=1: output 16-bit YCbCr  655;
+//        src2_format=1, src2_color_map=2: output 16-bit YCbCr  844;
+//        src2_format=1, src2_color_map=3: output 16-bit YCbCrA 6442;
+//        src2_format=1, src2_color_map=4: output 16-bit YCbCrA 4444;
+//        src2_format=1, src2_color_map=5: output 16-bit YCbCr  565;
+//        src2_format=1, src2_color_map=6: output 16-bit AYCbCr 4444;
+//        src2_format=1, src2_color_map=7: output 16-bit AYCbCr 1555;
+//        src2_format=1, src2_color_map=8: output 16-bit YCbCrA 4642;
+//        src2_format=2, src2_color_map=0: output 24-bit YCbCr  888;
+//        src2_format=2, src2_color_map=1: output 24-bit YCbCrA 5658;
+//        src2_format=2, src2_color_map=2: output 24-bit AYCbCr 8565;
+//        src2_format=2, src2_color_map=3: output 24-bit YCbCrA 6666;
+//        src2_format=2, src2_color_map=4: output 24-bit AYCbCr 6666;
+//        src2_format=2, src2_color_map=5: output 24-bit CrCbY  888;
+//        src2_format=3, src2_color_map=0: output 32-bit YCbCrA 8888;
+//        src2_format=3, src2_color_map=1: output 32-bit AYCbCr 8888;
+//        src2_format=3, src2_color_map=2: output 32-bit ACrCbY 8888;
+//        src2_format=3, src2_color_map=3: output 32-bit CrCbYA 8888.
+//Bit 9:8 src2 format, 00: 8bit, 01:16bit, 10:24bit 11: 32bit
+//Bit 7     if true, src1 little endian, otherwise big endian
+//Bit 6:3   src1 color_map
+//        src1_format=0                 : output 8-bit;
+//        src1_format=1, src1_color_map=0: output 4:2:2  (Y0Cb0Y1Cr0);
+//        src1_format=1, src1_color_map=1: output 16-bit YCbCr  655;
+//        src1_format=1, src1_color_map=2: output 16-bit YCbCr  844;
+//        src1_format=1, src1_color_map=3: output 16-bit YCbCrA 6442;
+//        src1_format=1, src1_color_map=4: output 16-bit YCbCrA 4444;
+//        src1_format=1, src1_color_map=5: output 16-bit YCbCr  565;
+//        src1_format=1, src1_color_map=6: output 16-bit AYCbCr 4444;
+//        src1_format=1, src1_color_map=7: output 16-bit AYCbCr 1555;
+//        src1_format=1, src2_color_map=8: output 16-bit YCbCrA 4642;
+//        src1_format=2, src1_color_map=0: output 24-bit YCbCr  888;
+//        src1_format=2, src1_color_map=1: output 24-bit YCbCrA 5658;
+//        src1_format=2, src1_color_map=2: output 24-bit AYCbCr 8565;
+//        src1_format=2, src1_color_map=3: output 24-bit YCbCrA 6666;
+//        src1_format=2, src1_color_map=4: output 24-bit AYCbCr 6666;
+//        src1_format=2, src1_color_map=5: output 24-bit CrCbY  888;
+//        src1_format=2, src1_color_map=14:output 8-bit Y and 16-bit CbCr;
+//        src1_format=2, src1_color_map=15:output 8-bit Y and 16-bit CrCb;
+//        src1_format=3, src1_color_map=0: output 32-bit YCbCrA 8888;
+//        src1_format=3, src1_color_map=1: output 32-bit AYCbCr 8888;
+//        src1_format=3, src1_color_map=2: output 32-bit ACrCbY 8888;
+//        src1_format=3, src1_color_map=3: output 32-bit CrCbYA 8888.
+//Bit 1:0 src1 format, 00: 8bit, 01:16bit/4:2:2, 10:24bit 11: 32bit
+#define   GE2D_GEN_CTRL2                           (0x00a2)
+#define P_GE2D_GEN_CTRL2                           (volatile unsigned int *)((0x00a2  << 2) + 0xff940000)
+//Bit 9     if true, all src2 data use default color
+//Bit 8     if true, all src1 data use default color
+//Bit 7     if true, dst x/y swap
+//Bit 6     if true, dst x direction reversely read
+//Bit 5     if true, dst y direction reversely read
+//Bit 4     if true, src2 x direction reversely read
+//Bit 3     if true, src2 y direction reversely read
+//Bit 2     if true, src1 x direction reversely read
+//Bit 1     if true, src1 y direction reversely read
+//Bit 0     cmd write
+#define   GE2D_CMD_CTRL                            (0x00a3)
+#define P_GE2D_CMD_CTRL                            (volatile unsigned int *)((0x00a3  << 2) + 0xff940000)
+//Read only
+//Bit 28:17 dst write response counter, for debug only
+//Bit 16:7  ge2d_dp status, for debug only
+//Bit 6     read src1 cmd ready
+//Bit 5     read src2 cmd ready
+//Bit 4     pre dpcmd ready
+//Bit 3     ge2d dpcmd ready
+//Bit 2     ge2d buffer command valid
+//Bit 1     ge2d current command valid
+//Bit 0     ge2d busy
+#define   GE2D_STATUS0                             (0x00a4)
+#define P_GE2D_STATUS0                             (volatile unsigned int *)((0x00a4  << 2) + 0xff940000)
+//
+//Read only
+// Bit 29:16 ge2d_dst1_status, for debug only
+// Bit    15 ge2d_rd_src2 core.fifo_empty
+// Bit    14 ge2d_rd_src2 core.fifo_overflow
+// Bit 13:12 ge2d_rd_src2 core.req_st
+// Bit    11 ge2d_rd_src2 cmd_if.cmd_err, true if cmd_format=1
+// Bit    10 ge2d_rd_src2 cmd_if.cmd_st, 0=IDLE state, 1=BUSY state
+// Bit     9 ge2d_rd_src1 luma_core(chroma_core).fifo_empty
+// Bit     8 ge2d_rd_src1 luma_core(chroma_core).fifo_overflow
+// Bit  7: 6 ge2d_rd_src1 chroma_core.req_st_cr
+// Bit  5: 4 ge2d_rd_src1 chroma_core.req_st_cb
+// Bit  3: 2 ge2d_rd_src1 luma_core.req_st_y
+// Bit     1 ge2d_rd_src1 cmd_if.stat_read_window_err, 1=reading/clipping window setting exceed limit
+// Bit     0 ge2d_rd_src1 cmd_if.cmd_st, 0=IDLE state, 1=BUSY state
+#define   GE2D_STATUS1                             (0x00a5)
+#define P_GE2D_STATUS1                             (volatile unsigned int *)((0x00a5  << 2) + 0xff940000)
+//SRC1 default clolor
+//{Y,Cb,Cr,A}/{R,G,B,A}
+#define   GE2D_SRC1_DEF_COLOR                      (0x00a6)
+#define P_GE2D_SRC1_DEF_COLOR                      (volatile unsigned int *)((0x00a6  << 2) + 0xff940000)
+//Bit 31, SRC1 clip x start extra, if true, one more data is read for chroma
+//Bit 28:16, SRC1 clip x start
+//Bit 15, SRC1 clip x end extra, if true, one more data is read for chroma
+//Bit 12:0, SRC1 clip x end
+#define   GE2D_SRC1_CLIPX_START_END                (0x00a7)
+#define P_GE2D_SRC1_CLIPX_START_END                (volatile unsigned int *)((0x00a7  << 2) + 0xff940000)
+//Bit 31, SRC1 clip y start extra, if true, one more data is read for chroma
+//Bit 28:16, SRC1 clip y start
+//Bit 15, SRC1 clip y end extra, if true, one more data is read for chroma
+//Bit 12:0, SRC1 clip y end
+#define   GE2D_SRC1_CLIPY_START_END                (0x00a8)
+#define P_GE2D_SRC1_CLIPY_START_END                (volatile unsigned int *)((0x00a8  << 2) + 0xff940000)
+//Bit 31:24, SRC1 canvas address0
+//Bit 23:16, SRC1 canvas address1
+//Bit 15:8, SRC1 canvas address2
+#define   GE2D_SRC1_CANVAS                         (0x00a9)
+#define P_GE2D_SRC1_CANVAS                         (volatile unsigned int *)((0x00a9  << 2) + 0xff940000)
+//Bit 31, SRC1 x start extra bit1, if true, one more chroma data is read for x even start chroma data when y/c ratio = 2
+//             or x even/odd start chroma extra data when y/c ratio = 1
+//Bit 30, SRC1 x start extra bit0, if true, one more chroma data is read for x odd start chroma data when y/c ratio = 2
+//Bit 29:16, SRC1 x start, signed data
+//Bit 15, SRC1 x end extra bit1, if true, one more chroma data is read for x odd end chroma data when y/c ratio = 2
+//             or x even/odd end chroma extra data when y/c ratio = 1
+//Bit 14, SRC1 x end extra bit0, if true, one more chroma data is read for x even end chroma data when y/c ratio = 2
+//Bit 13:0, SRC1 x end, signed data
+#define   GE2D_SRC1_X_START_END                    (0x00aa)
+#define P_GE2D_SRC1_X_START_END                    (volatile unsigned int *)((0x00aa  << 2) + 0xff940000)
+//Bit 31, SRC1 y start extra, if true, one more chroma data is read for y even start chroma data when y/c ratio = 2
+//             or y even/odd start chroma extra data when y/c ratio = 1
+//Bit 30, SRC1 y start extra, if true, one more chroma data is read for x odd start chroma data when y/c ratio = 2
+//Bit 28:16, SRC1 y start
+//Bit 15, SRC1 y end extra bit1, if true, one more chroma data is read for y odd end chroma data when y/c ratio = 2
+//             or y even/odd end chroma extra data when y/c ratio = 1
+//Bit 14, SRC1 y end extra bit0, if true, one more chroma data is read for y even end chroma data when y/c ratio = 2
+//Bit 12:0, SRC1 y end
+#define   GE2D_SRC1_Y_START_END                    (0x00ab)
+#define P_GE2D_SRC1_Y_START_END                    (volatile unsigned int *)((0x00ab  << 2) + 0xff940000)
+// Bit 31: 9 Reserved
+// Bit     8 RW, 0 = Write LUT, 1 = Read LUT
+// Bit  7: 0 RW, lut_addr
+#define   GE2D_SRC1_LUT_ADDR                       (0x00ac)
+#define P_GE2D_SRC1_LUT_ADDR                       (volatile unsigned int *)((0x00ac  << 2) + 0xff940000)
+// Bit 31:24 RW, Y or R
+// Bit 23:16 RW, Cb or G
+// Bit 15: 8 RW, Cr or B
+// Bit  7: 0 RW, Alpha
+#define   GE2D_SRC1_LUT_DAT                        (0x00ad)
+#define P_GE2D_SRC1_LUT_DAT                        (volatile unsigned int *)((0x00ad  << 2) + 0xff940000)
+//Bit 19, if true, horizontal formatter using repeat to get the pixel, otherwise using interpolation
+//Bit 18, horizontal formatter en
+//Bit 17, if true, vertical formatter using repeat to get the pixel, otherwise using interpolation
+//Bit 16, vertical formatter en
+//Bit 15:8 X direction chroma phase,
+//          [7:4] for x direction even start/end chroma phase when y/c ratio = 2
+//                or start/end even/odd chroma phase  when y/c ratio = 1
+//          [3:0] for x direction odd start/end chroma phase only when y/c ration = 2
+//Bit 7:0  Y direction chroma phase,
+//          [7:4] for y direction even start/end chroma phase when y/c ratio = 2
+//          or start/end even/odd chroma phase  when y/c ratio = 1
+//          [3:0] for y direction odd start/end chroma phase only when y/c ration = 2
+#define   GE2D_SRC1_FMT_CTRL                       (0x00ae)
+#define P_GE2D_SRC1_FMT_CTRL                       (volatile unsigned int *)((0x00ae  << 2) + 0xff940000)
+//SRC2 default clolor
+//{Y,Cb,Cr,A}/{R,G,B,A}
+#define   GE2D_SRC2_DEF_COLOR                      (0x00af)
+#define P_GE2D_SRC2_DEF_COLOR                      (volatile unsigned int *)((0x00af  << 2) + 0xff940000)
+//Bit 28:16, SRC2 clip x start
+//Bit 12:0, SRC2 clip x end
+#define   GE2D_SRC2_CLIPX_START_END                (0x00b0)
+#define P_GE2D_SRC2_CLIPX_START_END                (volatile unsigned int *)((0x00b0  << 2) + 0xff940000)
+//Bit 28:16, SRC2 clip y start
+//Bit 12:0, SRC2 clip y end
+#define   GE2D_SRC2_CLIPY_START_END                (0x00b1)
+#define P_GE2D_SRC2_CLIPY_START_END                (volatile unsigned int *)((0x00b1  << 2) + 0xff940000)
+//Bit 28:16, SRC2 x start
+//Bit 12:0, SRC2 x end
+#define   GE2D_SRC2_X_START_END                    (0x00b2)
+#define P_GE2D_SRC2_X_START_END                    (volatile unsigned int *)((0x00b2  << 2) + 0xff940000)
+//Bit 28:16, SRC2 y start
+//Bit 12:0, SRC2 y end
+#define   GE2D_SRC2_Y_START_END                    (0x00b3)
+#define P_GE2D_SRC2_Y_START_END                    (volatile unsigned int *)((0x00b3  << 2) + 0xff940000)
+//Bit 28:16, DST clip x start
+//Bit 12:0, DST clip x end
+#define   GE2D_DST_CLIPX_START_END                 (0x00b4)
+#define P_GE2D_DST_CLIPX_START_END                 (volatile unsigned int *)((0x00b4  << 2) + 0xff940000)
+//
+//Bit 28:16, DST clip y start
+//Bit 12:0, DST clip y end
+#define   GE2D_DST_CLIPY_START_END                 (0x00b5)
+#define P_GE2D_DST_CLIPY_START_END                 (volatile unsigned int *)((0x00b5  << 2) + 0xff940000)
+//Bit 28:16, DST x start
+//Bit 12:0, DST x end
+#define   GE2D_DST_X_START_END                     (0x00b6)
+#define P_GE2D_DST_X_START_END                     (volatile unsigned int *)((0x00b6  << 2) + 0xff940000)
+//
+//Bit 28:16, DST x start
+//Bit 12:0, DST x end
+#define   GE2D_DST_Y_START_END                     (0x00b7)
+#define P_GE2D_DST_Y_START_END                     (volatile unsigned int *)((0x00b7  << 2) + 0xff940000)
+//Bit 23:16 DST2 canvas address
+//Bit 15:8 SRC2 canvas address
+//Bit 7:0 DST1 canvas address
+#define   GE2D_SRC2_DST_CANVAS                     (0x00b8)
+#define P_GE2D_SRC2_DST_CANVAS                     (volatile unsigned int *)((0x00b8  << 2) + 0xff940000)
+//vertical scaler phase step
+//Bit 28:0,  5.24 format
+#define   GE2D_VSC_START_PHASE_STEP                (0x00b9)
+#define P_GE2D_VSC_START_PHASE_STEP                (volatile unsigned int *)((0x00b9  << 2) + 0xff940000)
+//phase slope
+//Bit 24:0, bit 24 signed bit
+#define   GE2D_VSC_PHASE_SLOPE                     (0x00ba)
+#define P_GE2D_VSC_PHASE_SLOPE                     (volatile unsigned int *)((0x00ba  << 2) + 0xff940000)
+//Bit 30:29, vertical repeat line0 number
+//Bit 23:0, vertical scaler initial phase
+#define   GE2D_VSC_INI_CTRL                        (0x00bb)
+#define P_GE2D_VSC_INI_CTRL                        (volatile unsigned int *)((0x00bb  << 2) + 0xff940000)
+//horizontal scaler phase step
+//Bit 28:0,  5.24 format
+#define   GE2D_HSC_START_PHASE_STEP                (0x00bc)
+#define P_GE2D_HSC_START_PHASE_STEP                (volatile unsigned int *)((0x00bc  << 2) + 0xff940000)
+//phase slope
+//Bit 24:0, bit 24 signed bit
+#define   GE2D_HSC_PHASE_SLOPE                     (0x00bd)
+#define P_GE2D_HSC_PHASE_SLOPE                     (volatile unsigned int *)((0x00bd  << 2) + 0xff940000)
+//Bit 30:29, horizontal repeat line0 number
+//Bit 23:0, horizontal scaler initial phase
+#define   GE2D_HSC_INI_CTRL                        (0x00be)
+#define P_GE2D_HSC_INI_CTRL                        (volatile unsigned int *)((0x00be  << 2) + 0xff940000)
+//Bit 31:24, advance number in this round, if horizontal scaler is working on dividing mode
+//Bit 23:0, horizontal scaler advance phase in this round, if horizontal scaler is working on dividing mode
+#define   GE2D_HSC_ADV_CTRL                        (0x00bf)
+#define P_GE2D_HSC_ADV_CTRL                        (volatile unsigned int *)((0x00bf  << 2) + 0xff940000)
+//Bit 30, vertical nearest mode enable, must set vt_bank_length = 4
+//Bit 29, horizontal nearest mode enable, must set hz_bank_length = 4
+//Bit 28, horizontal scaler dividing mode enable
+//Bit 27:15, horizontal dividing length, if bit 28 is enable
+//Bit 14, pre horizontal scaler enable
+//Bit 13, pre vertical scale enable
+//Bit 12, vertical scale enable
+//Bit 11, horizontal scaler enable
+//Bit 9, if true, treat horizontal repeat line number(GE2D_HSC_INI_CTRL bit 30:29) as repeating line,
+//        otherwise using treat horizontal repeat line number as minus line number.
+//Bit 8, if true, treat vertical repeat line number(GE2D_VSC_INI_CTRL bit 30:29) as repeating line,
+//        otherwise using treat vertical repeat line number as minus line number.
+//Bit 7, if true, always use phase0 in vertical scaler
+//Bit 6:4, vertical scaler bank length
+//Bit 3, if true, always use phase0 in horizontal scaler
+//Bit 2:0, horizontal scaler bank length
+#define   GE2D_SC_MISC_CTRL                        (0x00c0)
+#define P_GE2D_SC_MISC_CTRL                        (volatile unsigned int *)((0x00c0  << 2) + 0xff940000)
+//Read only
+//vertical scaler next round integer pixel pointer, signed data
+//Bit 13:0
+#define   GE2D_VSC_NRND_POINT                      (0x00c1)
+#define P_GE2D_VSC_NRND_POINT                      (volatile unsigned int *)((0x00c1  << 2) + 0xff940000)
+//Read only
+//vertical scaler next round phase
+//bit 23:0
+#define   GE2D_VSC_NRND_PHASE                      (0x00c2)
+#define P_GE2D_VSC_NRND_PHASE                      (volatile unsigned int *)((0x00c2  << 2) + 0xff940000)
+//Read only
+//horizontal scaler next round integer pixel pointer, signed data
+//Bit 13:0
+#define   GE2D_HSC_NRND_POINT                      (0x00c3)
+#define P_GE2D_HSC_NRND_POINT                      (volatile unsigned int *)((0x00c3  << 2) + 0xff940000)
+//Read only
+//horizontal scaler next round phase
+//bit 23:0
+#define   GE2D_HSC_NRND_PHASE                      (0x00c4)
+#define P_GE2D_HSC_NRND_PHASE                      (volatile unsigned int *)((0x00c4  << 2) + 0xff940000)
+//
+//Bit 28:20, pre_offset0
+//Bit 18:10, pre_offset1
+//Bit 8:0,   pre_offset2
+#define   GE2D_MATRIX_PRE_OFFSET                   (0x00c5)
+#define P_GE2D_MATRIX_PRE_OFFSET                   (volatile unsigned int *)((0x00c5  << 2) + 0xff940000)
+//Bit 28:16 coef00
+//Bit 12:0  coef01
+#define   GE2D_MATRIX_COEF00_01                    (0x00c6)
+#define P_GE2D_MATRIX_COEF00_01                    (volatile unsigned int *)((0x00c6  << 2) + 0xff940000)
+//Bit 28:16 coef02
+//Bit 12:0  coef10
+#define   GE2D_MATRIX_COEF02_10                    (0x00c7)
+#define P_GE2D_MATRIX_COEF02_10                    (volatile unsigned int *)((0x00c7  << 2) + 0xff940000)
+//Bit 28:16 coef11
+//Bit 12:0  coef12
+#define   GE2D_MATRIX_COEF11_12                    (0x00c8)
+#define P_GE2D_MATRIX_COEF11_12                    (volatile unsigned int *)((0x00c8  << 2) + 0xff940000)
+//Bit 28:16 coef20
+//Bit 12:0  coef21
+#define   GE2D_MATRIX_COEF20_21                    (0x00c9)
+#define P_GE2D_MATRIX_COEF20_21                    (volatile unsigned int *)((0x00c9  << 2) + 0xff940000)
+//Bit 28:16 coef22
+//Bit 7    input y/cb/cr saturation enable
+//Bit 0    conversion matrix enable
+#define   GE2D_MATRIX_COEF22_CTRL                  (0x00ca)
+#define P_GE2D_MATRIX_COEF22_CTRL                  (volatile unsigned int *)((0x00ca  << 2) + 0xff940000)
+//Bit 28:20, offset0
+//Bit 18:10, offset1
+//Bit 8:0,   offset2
+#define   GE2D_MATRIX_OFFSET                       (0x00cb)
+#define P_GE2D_MATRIX_OFFSET                       (volatile unsigned int *)((0x00cb  << 2) + 0xff940000)
+//Bit 26:25, SRC1 color multiplier alpha selection
+//           if 00, Cs = Csr
+//           if 01, Cs = Csr * Asr * Ag (if source is not premultiplied)
+//           if 10, Cs = Csr * Ag (if source is premultipied)
+//Bit 24    SRC2 color multiplier alpha selection
+//          if 0, no multiplier, Cd = Cdr,  otherwise, Cd = Cdr * Ad.
+//Bit 22:12 ALU color operation
+//          bit10:8 Blending Mode Parameter
+//            3'b000: ADD               Cs*Fs + Cd*Fd
+//            3'b001: SUBTRACT          Cs*Fs - Cd*Fd
+//            3'b010: REVERSE SUBTRACT  Cd*Fd - Cs*Fs
+//            3'b011: MIN               min(Cs*Fs, Cd*Fd)
+//            3'b100: MAX               max(Cs*Fs, Cd*Fd)
+//            3'b101: LOGIC OP          Cs op Cd
+//          bit7:4 Source Color Blending Factor CFs
+//            4'b0000: ZERO                        0
+//            4'b0001: ONE                         1
+//            4'b0010: SRC_COLOR                   Cs(RGBs)
+//            4'b0011: ONE_MINUS_SRC_COLOR         1 - Cs(RGBs)
+//            4'b0100: DST_COLOR                   Cd(RGBd)
+//            4'b0101: ONE_MINUS_DST_COLOR         1 - Cd(RGBd)
+//            4'b0110: SRC_ALPHA                   As
+//            4'b0111: ONE_MINUS_SRC_ALPHA         1 - As
+//            4'b1000: DST_ALPHA                   Ad
+//            4'b1001: ONE_MINUS_DST_ALPHA         1 - Ad
+//            4'b1010: CONST_COLOR                 Cc(RGBc)
+//            4'b1011: ONE_MINUS_CONST_COLOR       1 - Cc(RGBc)
+//            4'b1100: CONST_ALPHA                 Ac
+//            4'b1101: ONE_MINUS_CONST_ALPHA       1 - Ac
+//            4'b1110: SRC_ALPHA_SATURATE          min(As,1-Ad)
+//          bit3:0 dest Color Blending Factor CFd, when bit10:8 != LOGIC OP
+//            4'b0000: ZERO                        0
+//            4'b0001: ONE                         1
+//            4'b0010: SRC_COLOR                   Cs(RGBs)
+//            4'b0011: ONE_MINUS_SRC_COLOR         1 - Cs(RGBs)
+//            4'b0100: DST_COLOR                   Cd(RGBd)
+//            4'b0101: ONE_MINUS_DST_COLOR         1 - Cd(RGBd)
+//            4'b0110: SRC_ALPHA                   As
+//            4'b0111: ONE_MINUS_SRC_ALPHA         1 - As
+//            4'b1000: DST_ALPHA                   Ad
+//            4'b1001: ONE_MINUS_DST_ALPHA         1 - Ad
+//            4'b1010: CONST_COLOR                 Cc(RGBc)
+//            4'b1011: ONE_MINUS_CONST_COLOR       1 - Cc(RGBc)
+//            4'b1100: CONST_ALPHA                 Ac
+//            4'b1101: ONE_MINUS_CONST_ALPHA       1 - Ac
+//            4'b1110: SRC_ALPHA_SATURATE          min(As,1-Ad)
+//          bit3:0 logic operations, when bit10:8 == LOGIC OP
+//            4'b0000: CLEAR                       0
+//            4'b0001: COPY                        s
+//            4'b0010: NOOP                        d
+//            4'b0011: SET                         1
+//            4'b0100: COPY_INVERT                 ~s
+//            4'b0101: INVERT                      ~d
+//            4'b0110: AND_REVERSE                 s & ~d
+//            4'b0111: OR_REVERSE                  s | ~d
+//            4'b1000: AND                         s & d
+//            4'b1001: OR                          s | d
+//            4'b1010: NAND                        ~(s & d)
+//            4'b1011: NOR                         ~(s | d)
+//            4'b1100: XOR                         s ^ d
+//            4'b1101: EQUIV                       ~(s ^ d)
+//            4'b1110: AND_INVERTED                ~s & d
+//            4'b1111: OR_INVERTED                 ~s | d
+//Bit 10:0  ALU alpha operation
+//            bit10:8 Blending Equation Math Operation
+//              3'b000: ADD               As*Fs + Ad*Fd
+//              3'b001: SUBTRACT          As*Fs - Ad*Fd
+//              3'b010: REVERSE SUBTRACT  Ad*Fd - As*Fs
+//              3'b011: MIN               min(As*Fs, Ad*Fd)
+//              3'b100: MAX               max(As*Fs, Ad*Fd)
+//              3'b101: LOGIC OP          As op Ad
+//            bit7:4 Source alpha Blending Factor AFs
+//              4'b0000                       0
+//              4'b0001                       1
+//              4'b0010                       As
+//              4'b0011                       1 - As
+//              4'b0100                       Ad
+//              4'b0101                       1 - Ad
+//              4'b0110                       Ac
+//              4'b0111                       1 - Ac
+//               ....                         reserved
+//            bit3:0 Destination alpha Blending Factor AFd, when bit10:8 != LOGIC OP
+//              4'b0000                       0
+//              4'b0001                       1
+//              4'b0010                       As
+//              4'b0011                       1 - As
+//              4'b0100                       Ad
+//              4'b0101                       1 - Ad
+//              4'b0110                       Ac
+//              4'b0111                       1 - Ac
+//               ....                         reserved
+//            bit3:0 logic operations, when bit10:8 == LOGIC OP
+//              4'b0000: CLEAR                       0
+//              4'b0001: COPY                        s
+//              4'b0010: NOOP                        d
+//              4'b0011: SET                         1
+//              4'b0100: COPY_INVERT                 ~s
+//              4'b0101: INVERT                      ~d
+//              4'b0110: AND_REVERSE                 s & ~d
+//              4'b0111: OR_REVERSE                  s | ~d
+//              4'b1000: AND                         s & d
+//              4'b1001: OR                          s | d
+//              4'b1010: NAND                        ~(s & d)
+//              4'b1011: NOR                         ~(s | d)
+//              4'b1100: XOR                         s ^ d
+//              4'b1101: EQUIV                       ~(s ^ d)
+//              4'b1110: AND_INVERTED                ~s & d
+//              4'b1111: OR_INVERTED                 ~s | d
+#define   GE2D_ALU_OP_CTRL                         (0x00cc)
+#define P_GE2D_ALU_OP_CTRL                         (volatile unsigned int *)((0x00cc  << 2) + 0xff940000)
+//bit 31:0 (RGBA,YCBCRA)
+#define   GE2D_ALU_CONST_COLOR                     (0x00cd)
+#define P_GE2D_ALU_CONST_COLOR                     (volatile unsigned int *)((0x00cd  << 2) + 0xff940000)
+//SRC1 Key
+//31:0
+#define   GE2D_SRC1_KEY                            (0x00ce)
+#define P_GE2D_SRC1_KEY                            (volatile unsigned int *)((0x00ce  << 2) + 0xff940000)
+//SRC1 Key Mask
+//31:0
+#define   GE2D_SRC1_KEY_MASK                       (0x00cf)
+#define P_GE2D_SRC1_KEY_MASK                       (volatile unsigned int *)((0x00cf  << 2) + 0xff940000)
+//SRC2 Key
+//31:0
+#define   GE2D_SRC2_KEY                            (0x00d0)
+#define P_GE2D_SRC2_KEY                            (volatile unsigned int *)((0x00d0  << 2) + 0xff940000)
+//SRC2 Key Mask
+//31:0
+#define   GE2D_SRC2_KEY_MASK                       (0x00d1)
+#define P_GE2D_SRC2_KEY_MASK                       (volatile unsigned int *)((0x00d1  << 2) + 0xff940000)
+//Destination Bit Mask
+//31:0
+#define   GE2D_DST_BITMASK                         (0x00d2)
+#define P_GE2D_DST_BITMASK                         (volatile unsigned int *)((0x00d2  << 2) + 0xff940000)
+//Bit 31    DP onoff mode, 0: on_counter means how many pixels will output before ge2d turns off
+//                         1: on_counter means how many clocks will ge2d turn on before ge2d turns off
+//Bit 30:16     DP on counter
+//Bit 15        0: vd_format doesnt have onoff mode, 1: vd format has onoff mode
+//Bit 14:0      DP off counter
+#define   GE2D_DP_ONOFF_CTRL                       (0x00d3)
+#define P_GE2D_DP_ONOFF_CTRL                       (volatile unsigned int *)((0x00d3  << 2) + 0xff940000)
+//Because there are many coefficients used in the vertical filter and horizontal filters,
+//indirect access the coefficients of vertical filter and horizontal filter is used.
+//For vertical filter, there are 33x4 coefficients
+//For horizontal filter, there are 33x4 coefficients
+//Bit 15	index increment, if bit9 == 1  then (0: index increase 1, 1: index increase 2) else (index increase 2)
+//Bit 14	1: read coef through cbus enable, just for debug purpose in case when we wanna check the coef in ram in correct or not
+//Bit 9     if true, use 9bit resolution coef, other use 8bit resolution coef
+//Bit 8	    type of index, 0: vertical coef
+//						   1: horizontal coef
+//Bit 6:0 	coef index
+#define   GE2D_SCALE_COEF_IDX                      (0x00d4)
+#define P_GE2D_SCALE_COEF_IDX                      (volatile unsigned int *)((0x00d4  << 2) + 0xff940000)
+//coefficients for vertical filter and horizontal filter
+#define   GE2D_SCALE_COEF                          (0x00d5)
+#define P_GE2D_SCALE_COEF                          (volatile unsigned int *)((0x00d5  << 2) + 0xff940000)
+//Bit 24    src2 alpha fill mode: together with GE2D_GEN_CTRL0[4](fill_mode), define what alpha values are used
+//                                for the area outside the clipping window. As below:
+//                                fill_mode=0, alpha_fill_mode=0 : use inner alpha, (or default_alpha if src data have no alpha values);
+//                                fill_mode=0, alpha_fill_mode=1 : use outside_alpha;
+//                                fill_mode=1, alpha_fill_mode=0 : use default_alpha;
+//                                fill_mode=1, alpha_fill_mode=1 : use outside_alpha.
+//Bit 23:16 src2 outside alpha
+//Bit 8     src1 alpha fill mode, refer to src2 alpha fill mode above.
+//Bit 7:0   src1 outside alpha
+#define   GE2D_SRC_OUTSIDE_ALPHA                   (0x00d6)
+#define P_GE2D_SRC_OUTSIDE_ALPHA                   (volatile unsigned int *)((0x00d6  << 2) + 0xff940000)
+//Bit 31       antiflick enable
+//Bit 24       1: alpha value for the first line use repeated alpha, 0: use bit 23:16 as the first line alpha
+//Bit 23:16     register value for the first line alpha when bit 24 is 1
+//Bit 8        1: alpha value for the last line use repeated alpha, 0: use bit 7:0 as the last line alpha
+//Bit 7:0      register value for the last line alpha when bit 8 is 1
+#define   GE2D_ANTIFLICK_CTRL0                     (0x00d8)
+#define P_GE2D_ANTIFLICK_CTRL0                     (volatile unsigned int *)((0x00d8  << 2) + 0xff940000)
+//Bit 25,    rgb_sel, 1: antiflick RGBA, 0: antiflick YCbCrA
+//Bit 24,    cbcr_en, 1: also filter cbcr in case of antiflicking YCbCrA, 0: no filter on cbcr in case of antiflicking YCbCrA
+//Bit 23:16, R mult coef for converting RGB to Y
+//Bit 15:8,  G mult coef for converting RGB to Y
+//Bit 7:0,   B mult coef for converting RGB to Y
+//Y = (R * y_r + G * y_g + B * y_b) / 256
+#define   GE2D_ANTIFLICK_CTRL1                     (0x00d9)
+#define P_GE2D_ANTIFLICK_CTRL1                     (volatile unsigned int *)((0x00d9  << 2) + 0xff940000)
+//Bit 31:24, Y threhold1, when   0<Y<=th1, use filter0;
+//Bit 23:16, color antiflick filter0 n3
+//Bit 15:8,  color antiflick filter0 n2
+//Bit 7:0,   color antiflick filter0 n1
+//Y = (line_up * n1 + line_center * n2 + line_dn * n3) / 128
+#define   GE2D_ANTIFLICK_COLOR_FILT0               (0x00da)
+#define P_GE2D_ANTIFLICK_COLOR_FILT0               (volatile unsigned int *)((0x00da  << 2) + 0xff940000)
+//Bit 31:24, Y threhold2, when th1<Y<=th2, use filter1;
+//Bit 23:16, color antiflick filter1 n3
+//Bit 15:8,  color antiflick filter1 n2
+//Bit 7:0,   color antiflick filter1 n1
+#define   GE2D_ANTIFLICK_COLOR_FILT1               (0x00db)
+#define P_GE2D_ANTIFLICK_COLOR_FILT1               (volatile unsigned int *)((0x00db  << 2) + 0xff940000)
+//Bit 31:24, Y threhold3, when th2<Y<=th3, use filter2; Y>th3, use filter3
+//Bit 23:16, color antiflick filter2 n3
+//Bit 15:8,  color antiflick filter2 n2
+//Bit 7:0,   color antiflick filter2 n1
+#define   GE2D_ANTIFLICK_COLOR_FILT2               (0x00dc)
+#define P_GE2D_ANTIFLICK_COLOR_FILT2               (volatile unsigned int *)((0x00dc  << 2) + 0xff940000)
+//Bit 23:16, color antiflick filter3 n3
+//Bit 15:8,  color antiflick filter3 n2
+//Bit 7:0,   color antiflick filter3 n1
+#define   GE2D_ANTIFLICK_COLOR_FILT3               (0x00dd)
+#define P_GE2D_ANTIFLICK_COLOR_FILT3               (volatile unsigned int *)((0x00dd  << 2) + 0xff940000)
+//Bit 31:24, Alpha threhold1, when   0<Alpha<=th1, use filter0;
+//Bit 23:16, Alpha antiflick filter0 n3
+//Bit 15:8,  Alpha antiflick filter0 n2
+//Bit 7:0,   Alpha antiflick filter0 n1
+//Alpha = (line_up * n1 + line_center * n2 + line_dn * n3) / 128
+#define   GE2D_ANTIFLICK_ALPHA_FILT0               (0x00de)
+#define P_GE2D_ANTIFLICK_ALPHA_FILT0               (volatile unsigned int *)((0x00de  << 2) + 0xff940000)
+//Bit 31:24, Alpha threhold2, when th1<Alpha<=th2, use filter1;
+//Bit 23:16, Alpha antiflick filter1 n3
+//Bit 15:8,  Alpha antiflick filter1 n2
+//Bit 7:0,   Alpha antiflick filter1 n1
+#define   GE2D_ANTIFLICK_ALPHA_FILT1               (0x00df)
+#define P_GE2D_ANTIFLICK_ALPHA_FILT1               (volatile unsigned int *)((0x00df  << 2) + 0xff940000)
+//Bit 31:24, Alpha threhold3, when th2<Alpha<=th3, use filter2; Alpha>th3, use filter3
+//Bit 23:16, Alpha antiflick filter2 n3
+//Bit 15:8,  Alpha antiflick filter2 n2
+//Bit 7:0,   Alpha antiflick filter2 n1
+#define   GE2D_ANTIFLICK_ALPHA_FILT2               (0x00e0)
+#define P_GE2D_ANTIFLICK_ALPHA_FILT2               (volatile unsigned int *)((0x00e0  << 2) + 0xff940000)
+//Bit 23:16, Alpha antiflick filter3 n3
+//Bit 15:8,  Alpha antiflick filter3 n2
+//Bit 7:0,   Alpha antiflick filter3 n1
+#define   GE2D_ANTIFLICK_ALPHA_FILT3               (0x00e1)
+#define P_GE2D_ANTIFLICK_ALPHA_FILT3               (volatile unsigned int *)((0x00e1  << 2) + 0xff940000)
+//dout = clipto_0_255(((din + din_offset) * map_coef + ((1 << (map_sr - 1))) >> map_sr + dout_offset)
+//Bit 30:22 din_offset (signed data)
+//Bit 21:14 map_coef (unsigned data)
+//Bit 13:10 map_sr (unsigned data)
+//Bit 9:1   dout_offset (signed data)
+//Bit 0     enable
+#define   GE2D_SRC1_RANGE_MAP_Y_CTRL               (0x00e3)
+#define P_GE2D_SRC1_RANGE_MAP_Y_CTRL               (volatile unsigned int *)((0x00e3  << 2) + 0xff940000)
+//dout = clipto_0_255(((din + din_offset) * map_coef + ((1 << (map_sr - 1))) >> map_sr + dout_offset)
+//Bit 30:22 din_offset (signed data)
+//Bit 21:14 map_coef (unsigned data)
+//Bit 13:10 map_sr (unsigned data)
+//Bit 9:1   dout_offset (signed data)
+//Bit 0     enable
+#define   GE2D_SRC1_RANGE_MAP_CB_CTRL              (0x00e4)
+#define P_GE2D_SRC1_RANGE_MAP_CB_CTRL              (volatile unsigned int *)((0x00e4  << 2) + 0xff940000)
+//dout = clipto_0_255(((din + din_offset) * map_coef + ((1 << (map_sr - 1))) >> map_sr + dout_offset)
+//Bit 30:22 din_offset (signed data)
+//Bit 21:14 map_coef (unsigned data)
+//Bit 13:10 map_sr (unsigned data)
+//Bit 9:1   dout_offset (signed data)
+//Bit 0     enable
+#define   GE2D_SRC1_RANGE_MAP_CR_CTRL              (0x00e5)
+#define P_GE2D_SRC1_RANGE_MAP_CR_CTRL              (volatile unsigned int *)((0x00e5  << 2) + 0xff940000)
+//Bit 21:16     src1 prearbitor burst number
+//Bit 13:8      src2 prearbitor burst number
+//Bit 5:0       dst prearbitor burst number
+#define   GE2D_ARB_BURST_NUM                       (0x00e6)
+#define P_GE2D_ARB_BURST_NUM                       (volatile unsigned int *)((0x00e6  << 2) + 0xff940000)
+//each 6bit ID, high 4bit are thread ID, low 2bits are the token
+//Bit 21:16 src1 ID
+//Bit 13:8 src2 ID
+//Bit 5:0  dst ID
+#define   GE2D_TID_TOKEN                           (0x00e7)
+#define P_GE2D_TID_TOKEN                           (volatile unsigned int *)((0x00e7  << 2) + 0xff940000)
+//Bit 31:28 dst2_bytemask_val. 1-bit mask for each byte (8-bit). Applicable only if both dst_bitmask_en=1 and dst_bytemask_only=1.
+//Bit 27:26, dst2 picture struct, 00: frame, 10:top, 11: bottom
+//Bit 25:24, dst2 8bit mode component selection,
+//            00: select Y(R), 01: Cb(G), 10: Cr(B), 11: Alpha
+//Bit 22:19 dst2 color_map
+//        dst2_format=0                  : output 8-bit;
+//        dst2_format=1, dst2_color_map=1: output 16-bit YCbCr  655;
+//        dst2_format=1, dst2_color_map=2: output 16-bit YCbCr  844;
+//        dst2_format=1, dst2_color_map=3: output 16-bit YCbCrA 6442;
+//        dst2_format=1, dst2_color_map=4: output 16-bit YCbCrA 4444;
+//        dst2_format=1, dst2_color_map=5: output 16-bit YCbCr  565;
+//        dst2_format=1, dst2_color_map=6: output 16-bit AYCbCr 4444;
+//        dst2_format=1, dst2_color_map=7: output 16-bit AYCbCr 1555;
+//        dst2_format=1, dst2_color_map=8: output 16-bit YCbCrA 4642;
+//        dst2_format=1, dst2_color_map=9: output 16-bit CbCr   88;
+//        dst2_format=1, dst2_color_map=10:output 16-bit CrCb   88;
+//        dst2_format=2, dst2_color_map=0: output 24-bit YCbCr  888;
+//        dst2_format=2, dst2_color_map=1: output 24-bit YCbCrA 5658;
+//        dst2_format=2, dst2_color_map=2: output 24-bit AYCbCr 8565;
+//        dst2_format=2, dst2_color_map=3: output 24-bit YCbCrA 6666;
+//        dst2_format=2, dst2_color_map=4: output 24-bit AYCbCr 6666;
+//        dst2_format=2, dst2_color_map=5: output 24-bit CrCbY  888;
+//        dst2_format=3, dst2_color_map=0: output 32-bit YCbCrA 8888;
+//        dst2_format=3, dst2_color_map=1: output 32-bit AYCbCr 8888;
+//        dst2_format=3, dst2_color_map=2: output 32-bit ACrCbY 8888;
+//        dst2_format=3, dst2_color_map=3: output 32-bit CrCbYA 8888.
+//Bit 17:16 dst2_format,  00: 8bit, 01:16bit, 10:24bit, 11: 32bit
+//Bit 15     reserved
+//Bit 14     dst2_color_round_mode, 0: truncate, 1: + 0.5 rounding
+//Bit 13:12, dst2_x_discard_mode. 00: no discard; 10=discard even x; 11=discard odd x. Note: x is post reverse/rotation.
+//Bit 11:10, dst2_y_discard_mode. 00: no discard; 10=discard even y; 11=discard odd y. Note: y is post reverse/rotation.
+//Bit     9 reserved
+//Bit     8, dst2_enable. 0: disable dst2 (default); 1=enable dst2.
+//Bit  7: 6 reserved
+//Bit  5: 4, dst1_x_discard_mode. 00: no discard; 10=discard even x; 11=discard odd x. Note: x is post reverse/rotation.
+//Bit  3: 2, dst1_y_discard_mode. 00: no discard; 10=discard even y; 11=discard odd y. Note: y is post reverse/rotation.
+//Bit     1 reserved
+//Bit     0, dst1_enable. 0: disable dst1; 1=enable dst1 (default).
+#define   GE2D_GEN_CTRL3                           (0x00e8)
+#define P_GE2D_GEN_CTRL3                           (volatile unsigned int *)((0x00e8  << 2) + 0xff940000)
+//Read only
+// Bit 13:0 ge2d_dst2_status, for debug only
+#define   GE2D_STATUS2                             (0x00e9)
+#define P_GE2D_STATUS2                             (volatile unsigned int *)((0x00e9  << 2) + 0xff940000)
+//Bit 27:26  src1 Y fifo size control, 00: 512, 01: 256, 10: 128 11: 96
+//Bit 25:24  src2 fifo size control, 00: 512, 01: 256, 10: 128 11: 96
+//Bit 23:22  dst1 fifo size control, 00: 512, 01: 256, 10: 128 11: 64
+//Bit 21:20  dst2 fifo size control, 00: 512, 01: 256, 10: 128 11: 64
+//Bit 19:18, dst1 fifo burst control, 00: 24x64, 01: 32x64, 10: 48x64, 11:64x64
+//Bit 17:16, dst2 fifo burst control, 00: 24x64, 01: 32x64, 10: 48x64, 11:64x64
+//Bit 15:1, top_wrap_ctrl
+//bit 0, if true, disable bug fix about the dp_out_done/scale_out_done(test1823) hang issue when scaling down ratio is high.
+#define   GE2D_GEN_CTRL4                           (0x00ea)
+#define P_GE2D_GEN_CTRL4                           (volatile unsigned int *)((0x00ea  << 2) + 0xff940000)
+#define   GE2D_GCLK_CTRL0                          (0x00ef)
+#define P_GE2D_GCLK_CTRL0                          (volatile unsigned int *)((0x00ef  << 2) + 0xff940000)
+#define   GE2D_GCLK_CTRL1                          (0x00f0)
+#define P_GE2D_GCLK_CTRL1                          (volatile unsigned int *)((0x00f0  << 2) + 0xff940000)
+// synopsys translate_off
+// synopsys translate_on
+//
+// Closing file:  ./ge2d_regs.h
+//
+
+// canvas.h
+// ---------------------------
+#define DC_CAV_LUT_DATAL                           (0x0012 << 2)
+#define P_DC_CAV_LUT_DATAL                         (volatile unsigned int *)((0x0012  << 2) + 0xff638000)
+#define DC_CAV_LUT_DATAH                           (0x0013 << 2)
+#define P_DC_CAV_LUT_DATAH                         (volatile unsigned int *)((0x0013  << 2) + 0xff638000)
+#define DC_CAV_LUT_ADDR                            (0x0014 << 2)
+#define P_DC_CAV_LUT_ADDR                          (volatile unsigned int *)((0x0014  << 2) + 0xff638000)
+#define DC_CAV_LUT_RDATAL                          (0x0015 << 2)
+#define P_DC_CAV_LUT_RDATAL                        (volatile unsigned int *)((0x0015  << 2) + 0xff638000)
+#define DC_CAV_LUT_RDATAH                          (0x0016 << 2)
+#define P_DC_CAV_LUT_RDATAH                        (volatile unsigned int *)((0x0016  << 2) + 0xff638000)
+
+
+#define VPU_RDARB_MODE_L1C1                        (0x2790)
+#define VPU_RDARB_MODE_L1C2                        (0x2799)
+#define VPU_RDARB_MODE_L2C1                        (0x279d)
+#define VPU_WRARB_MODE_L2C1                        (0x27a2)
+
+// secure_apb.h
+
+//	registers for mipi_dsi (12'h8a0 - 12'h8ff)
+//========================================================================
+//
+// Reading file:  dsi_regs.h
+//
+// synopsys translate_off
+// synopsys translate_on
+//===========================================================================
+// MIPI DSI HOST CONTROLLER Registers 0x1c00 - 0x1cff
+//===========================================================================
+// -----------------------------------------------
+// CBUS_BASE:  DSI_CBUS_BASE = 0x1c
+#define MIPI_DSI_REGISTER
+// -----------------------------------------------
+//------------------------------------------------------------------------------
+// DWC IP registers: Synopsys IP, please refer to MIPI DSI HOST Databook
+//------------------------------------------------------------------------------
+#define MIPI_DSI_DWC_VERSION_OS                    0x1c00
+#define MIPI_DSI_DWC_PWR_UP_OS                     0x1c01
+#define MIPI_DSI_DWC_CLKMGR_CFG_OS                 0x1c02
+#define MIPI_DSI_DWC_DPI_VCID_OS                   0x1c03
+#define MIPI_DSI_DWC_DPI_COLOR_CODING_OS           0x1c04
+#define MIPI_DSI_DWC_DPI_CFG_POL_OS                0x1c05
+#define MIPI_DSI_DWC_DPI_LP_CMD_TIM_OS             0x1c06
+#define MIPI_DSI_DWC_PCKHDL_CFG_OS                 0x1c0b
+#define MIPI_DSI_DWC_GEN_VCID_OS                   0x1c0c
+#define MIPI_DSI_DWC_MODE_CFG_OS                   0x1c0d
+#define MIPI_DSI_DWC_VID_MODE_CFG_OS               0x1c0e
+#define MIPI_DSI_DWC_VID_PKT_SIZE_OS               0x1c0f
+#define MIPI_DSI_DWC_VID_NUM_CHUNKS_OS             0x1c10
+#define MIPI_DSI_DWC_VID_NULL_SIZE_OS              0x1c11
+#define MIPI_DSI_DWC_VID_HSA_TIME_OS               0x1c12
+#define MIPI_DSI_DWC_VID_HBP_TIME_OS               0x1c13
+#define MIPI_DSI_DWC_VID_HLINE_TIME_OS             0x1c14
+#define MIPI_DSI_DWC_VID_VSA_LINES_OS              0x1c15
+#define MIPI_DSI_DWC_VID_VBP_LINES_OS              0x1c16
+#define MIPI_DSI_DWC_VID_VFP_LINES_OS              0x1c17
+#define MIPI_DSI_DWC_VID_VACTIVE_LINES_OS          0x1c18
+#define MIPI_DSI_DWC_EDPI_CMD_SIZE_OS              0x1c19
+#define MIPI_DSI_DWC_CMD_MODE_CFG_OS               0x1c1a
+#define MIPI_DSI_DWC_GEN_HDR_OS                    0x1c1b
+#define MIPI_DSI_DWC_GEN_PLD_DATA_OS               0x1c1c
+#define MIPI_DSI_DWC_CMD_PKT_STATUS_OS             0x1c1d
+#define MIPI_DSI_DWC_TO_CNT_CFG_OS                 0x1c1e
+#define MIPI_DSI_DWC_HS_RD_TO_CNT_OS               0x1c1f
+#define MIPI_DSI_DWC_LP_RD_TO_CNT_OS               0x1c20
+#define MIPI_DSI_DWC_HS_WR_TO_CNT_OS               0x1c21
+#define MIPI_DSI_DWC_LP_WR_TO_CNT_OS               0x1c22
+#define MIPI_DSI_DWC_BTA_TO_CNT_OS                 0x1c23
+#define MIPI_DSI_DWC_SDF_3D_OS                     0x1c24
+#define MIPI_DSI_DWC_LPCLK_CTRL_OS                 0x1c25
+#define MIPI_DSI_DWC_PHY_TMR_LPCLK_CFG_OS          0x1c26
+#define MIPI_DSI_DWC_PHY_TMR_CFG_OS                0x1c27
+#define MIPI_DSI_DWC_PHY_RSTZ_OS                   0x1c28
+#define MIPI_DSI_DWC_PHY_IF_CFG_OS                 0x1c29
+#define MIPI_DSI_DWC_PHY_ULPS_CTRL_OS              0x1c2a
+#define MIPI_DSI_DWC_PHY_TX_TRIGGERS_OS            0x1c2b
+#define MIPI_DSI_DWC_PHY_STATUS_OS                 0x1c2c
+#define MIPI_DSI_DWC_PHY_TST_CTRL0_OS              0x1c2d
+#define MIPI_DSI_DWC_PHY_TST_CTRL1_OS              0x1c2e
+#define MIPI_DSI_DWC_INT_ST0_OS                    0x1c2f
+#define MIPI_DSI_DWC_INT_ST1_OS                    0x1c30
+#define MIPI_DSI_DWC_INT_MSK0_OS                   0x1c31
+#define MIPI_DSI_DWC_INT_MSK1_OS                   0x1c32
+//------------------------------------------------------------------------------
+// Top-level registers: AmLogic proprietary
+//------------------------------------------------------------------------------
+// 31: 4    Reserved.                                                                           Default 0.
+//     3 RW ~tim_rst_n:  1=Assert SW reset on mipi_dsi_host_timing block.   0=Release reset.    Default 1.
+//     2 RW ~dpi_rst_n:  1=Assert SW reset on mipi_dsi_host_dpi block.      0=Release reset.    Default 1.
+//     1 RW ~intr_rst_n: 1=Assert SW reset on mipi_dsi_host_intr block.     0=Release reset.    Default 1.
+//     0 RW ~dwc_rst_n:  1=Assert SW reset on IP core.                      0=Release reset.    Default 1.
+#define MIPI_DSI_TOP_SW_RESET                      0x1cf0
+// 31: 5    Reserved.                                                                                                       Default 0.
+//     4 RW manual_edpihalt:  1=Manual suspend VencL; 0=do not suspend VencL.                                               Default 0.
+//     3 RW auto_edpihalt_en: 1=Enable IP's edpihalt signal to suspend VencL; 0=IP's edpihalt signal does not affect VencL. Default 0.
+//     2 RW clock_freerun: Apply to auto-clock gate only.                                                                   Default 0.
+//                          0=Default, use auto-clock gating to save power;
+//                          1=use free-run clock, disable auto-clock gating, for debug mode.
+//     1 RW enable_pixclk: A manual clock gate option, due to DWC IP does not have auto-clock gating. 1=Enable pixclk.      Default 0.
+//     0 RW enable_sysclk: A manual clock gate option, due to DWC IP does not have auto-clock gating. 1=Enable sysclk.      Default 0.
+#define MIPI_DSI_TOP_CLK_CNTL                      0x1cf1
+// 31:27    Reserved.                                                                       Default 0.
+//    26 RW de_dpi_pol:     1= Invert DE polarity from mipi_dsi_host_dpi.                   Default 0.
+//    25 RW hsync_dpi_pol:  1= Invert HS polarity from mipi_dsi_host_dpi.                   Default 0.
+//    24 RW vsync_dpi_pol:  1= Invert VS polarity from mipi_dsi_host_dpi.                   Default 0.
+// 23:20 RW dpi_color_mode: Define DPI pixel format.                                        Default 0.
+//                           0=16-bit RGB565 config 1;
+//                           1=16-bit RGB565 config 2;
+//                           2=16-bit RGB565 config 3;
+//                           3=18-bit RGB666 config 1;
+//                           4=18-bit RGB666 config 2;
+//                           5=24-bit RGB888;
+//                           6=20-bit YCbCr 4:2:2;
+//                           7=24-bit YCbCr 4:2:2;
+//                           8=16-bit YCbCr 4:2:2;
+//                           9=30-bit RGB;
+//                          10=36-bit RGB;
+//                          11=12-bit YCbCr 4:2:0.
+//    19    Reserved.                                                                       Default 0.
+// 18:16 RW in_color_mode:  Define VENC data width.                                         Default 0.
+//                          0=30-bit pixel;
+//                          1=24-bit pixel;
+//                          2=18-bit pixel, RGB666;
+//                          3=16-bit pixel, RGB565.
+// 15:14 RW chroma_subsample: Define method of chroma subsampling.                          Default 0.
+//                            Applicable to YUV422 or YUV420 only.
+//                            0=Use even pixel's chroma;
+//                            1=Use odd pixel's chroma;
+//                            2=Use averaged value between even and odd pair.
+// 13:12 RW comp2_sel:  Select which component to be Cr or B: 0=comp0; 1=comp1; 2=comp2.    Default 2.
+// 11:10 RW comp1_sel:  Select which component to be Cb or G: 0=comp0; 1=comp1; 2=comp2.    Default 1.
+//  9: 8 RW comp0_sel:  Select which component to be Y  or R: 0=comp0; 1=comp1; 2=comp2.    Default 0.
+//     7    Reserved.                                                                       Default 0.
+//     6 RW de_venc_pol:    1= Invert DE polarity from VENC.                                Default 0.
+//     5 RW hsync_venc_pol: 1= Invert HS polarity from VENC.                                Default 0.
+//     4 RW vsync_venc_pol: 1= Invert VS polarity from VENC.                                Default 0.
+//     3 RW dpicolorm:      Signal to IP.                                                   Default 0.
+//     2 RW dpishutdn:      Signal to IP.                                                   Default 0.
+//     1    Reserved.                                                                       Default 0.
+//     0    Reserved.                                                                       Default 0.
+#define MIPI_DSI_TOP_CNTL                          0x1cf2
+// 31:16    Reserved.                                                                                                           Default 0.
+// 15: 8 RW suspend_frame_rate: Define rate of timed-suspend.                                                                   Default 0.
+//                              0=Execute suspend every frame; 1=Every other frame; ...; 255=Every 256 frame.
+//  7: 3    Reserved.                                                                                                           Default 0.
+//     2 RW timed_suspend_en:   1=Enable timed suspend VencL. 0=Disable timed suspend.                                          Default 0.
+//     1 RW manual_suspend_en:  1=Enable manual suspend VencL. 1=Cancel manual suspend VencL.                                   Default 0.
+//     0 RW suspend_on_edpihalt:1=Enable IP's edpihalt signal to suspend VencL; 0=IP's edpihalt signal does not affect VencL.   Default 1.
+#define MIPI_DSI_TOP_SUSPEND_CNTL                  0x1cf3
+// 31:29    Reserved.                                                                                                           Default 0.
+// 28:16 RW suspend_line_end:   Define timed-suspend region. Suspend from [pix_start,line_start] to [pix_end,line_end].         Default 0.
+// 15:13    Reserved.                                                                                                           Default 0.
+// 12: 0 RW suspend_line_start: Define timed-suspend region. Suspend from [pix_start,line_start] to [pix_end,line_end].         Default 0.
+#define MIPI_DSI_TOP_SUSPEND_LINE                  0x1cf4
+// 31:29    Reserved.                                                                                                           Default 0.
+// 28:16 RW suspend_pix_end:    Define timed-suspend region. Suspend from [pix_start,line_start] to [pix_end,line_end].         Default 0.
+// 15:13    Reserved.                                                                                                           Default 0.
+// 12: 0 RW suspend_pix_start:  Define timed-suspend region. Suspend from [pix_start,line_start] to [pix_end,line_end].         Default 0.
+#define MIPI_DSI_TOP_SUSPEND_PIX                   0x1cf5
+// 31:20    Reserved.                                                                                                           Default 0.
+// 19:10 RW meas_vsync:     Control on measuring Host Controller's vsync.                                                       Default 0.
+//                          [   19] meas_en:        1=Enable measurement
+//                          [   18] accum_meas_en:  0=meas_count is cleared at the end of each measure;
+//                                                  1=meas_count is accumulated at the end of each measure.
+//                          [17:10] vsync_span:     Define the duration of a measure is to last for how many Vsyncs.
+//  9: 0 RW meas_edpite:    Control on measuring Display Slave's edpite.                                                        Default 0.
+//                          [    9] meas_en:        1=Enable measurement
+//                          [    8] accum_meas_en:  0=meas_count is cleared at the end of each measure;
+//                                                  1=meas_count is accumulated at the end of each measure.
+//                          [ 7: 0] edpite_span:    Define the duration of a measure is to last for how many edpite.
+#define MIPI_DSI_TOP_MEAS_CNTL                     0x1cf6
+//    31 R  stat_edpihalt:  status of edpihalt signal from IP.              Default 0.
+// 30:29    Reserved.                                                       Default 0.
+// 28:16 R  stat_te_line:   Snapshot of Host's line position at edpite.     Default 0.
+// 15:13    Reserved.                                                       Default 0.
+// 12: 0 R  stat_te_pix:    Snapshot of Host's pixel position at edpite.    Default 0.
+#define MIPI_DSI_TOP_STAT                          0x1cf7
+// To measure display slave's frame rate, we can use a reference clock to measure the duration of one of more edpite pulse(s).
+// Measurement control is by register MIPI_DSI_TOP_MEAS_CNTL bit[9:0].
+// Reference clock comes from clk_rst_tst.cts_dsi_meas_clk, and is defined by HIU register HHI_VDIN_MEAS_CLK_CNTL bit[23:12].
+// Mesurement result is in MIPI_DSI_TOP_MEAS_STAT_TE0 and MIPI_DSI_TOP_MEAS_STAT_TE1, as below:
+// edpite_meas_count[47:0]: Number of reference clock cycles counted during one measure period (non-incremental measure), or
+//                          during all measure periods so far (incremental measure).
+// edpite_meas_count_n[3:0]:Number of measure periods has been done. Number can wrap over.
+//
+// 31: 0 R  edpite_meas_count[31:0].    Default 0.
+#define MIPI_DSI_TOP_MEAS_STAT_TE0                 0x1cf8
+// 19:16 R  edpite_meas_count_n.        Default 0.
+// 15: 0 R  edpite_meas_count[47:32].   Default 0.
+#define MIPI_DSI_TOP_MEAS_STAT_TE1                 0x1cf9
+// To measure Host's frame rate, we can use a reference clock to measure the duration of one of more Vsync pulse(s).
+// Measurement control is by register MIPI_DSI_TOP_MEAS_CNTL bit[19:10].
+// Reference clock comes from clk_rst_tst.cts_dsi_meas_clk, and is defined by HIU register HHI_VDIN_MEAS_CLK_CNTL bit[23:12].
+// Mesurement result is in MIPI_DSI_TOP_MEAS_STAT_VS0 and MIPI_DSI_TOP_MEAS_STAT_VS1, as below:
+// vsync_meas_count[47:0]:  Number of reference clock cycles counted during one measure period (non-incremental measure), or
+//                          during all measure periods so far (incremental measure).
+// vsync_meas_count_n[3:0]: Number of measure periods has been done. Number can wrap over.
+//
+// 31: 0 R  vsync_meas_count[31:0].     Default 0.
+#define MIPI_DSI_TOP_MEAS_STAT_VS0                 0x1cfa
+// 19:16 R  vsync_meas_count_n.         Default 0.
+// 15: 0 R  vsync_meas_count[47:32].    Default 0.
+#define MIPI_DSI_TOP_MEAS_STAT_VS1                 0x1cfb
+// 31:16 RW intr_stat/clr. For each bit, read as this interrupt level status, write 1 to clear. Default 0.
+//                         Note: To clear the interrupt level, simply write 1 to the specific bit, no need to write 0 afterwards.
+//          [31:22] Reserved
+//          [   21] stat/clr of EOF interrupt
+//          [   20] stat/clr of de_fall interrupt
+//          [   19] stat/clr of de_rise interrupt
+//          [   18] stat/clr of vs_fall interrupt
+//          [   17] stat/clr of vs_rise interrupt
+//          [   16] stat/clr of dwc_edpite interrupt
+// 15: 0 RW intr_enable. For each bit, 1=enable this interrupt, 0=disable.                      Default 0.
+//          [15: 6] Reserved
+//          [    5] EOF (End_Of_Field) interrupt
+//          [    4] de_fall interrupt
+//          [    3] de_rise interrupt
+//          [    2] vs_fall interrupt
+//          [    1] vs_rise interrupt
+//          [    0] dwc_edpite interrupt
+#define MIPI_DSI_TOP_INTR_CNTL_STAT                0x1cfc
+// 31: 2    Reserved.   Default 0.
+//  1: 0 RW mem_pd.     Default 3.
+#define MIPI_DSI_TOP_MEM_PD                        0x1cfd
+// synopsys translate_off
+// synopsys translate_on
+//
+// Closing file:  dsi_regs.h
+#define VD1_HDR2_CTRL                      0x3800
+#define VD1_HDR2_CLK_GATE                  0x3801
+#define VD1_HDR2_MATRIXI_COEF00_01         0x3802
+#define VD1_HDR2_MATRIXI_COEF02_10         0x3803
+#define VD1_HDR2_MATRIXI_COEF11_12         0x3804
+#define VD1_HDR2_MATRIXI_COEF20_21         0x3805
+#define VD1_HDR2_MATRIXI_COEF22            0x3806
+#define VD1_HDR2_MATRIXI_COEF30_31         0x3807
+#define VD1_HDR2_MATRIXI_COEF32_40         0x3808
+#define VD1_HDR2_MATRIXI_COEF41_42         0x3809
+#define VD1_HDR2_MATRIXI_OFFSET0_1         0x380a
+#define VD1_HDR2_MATRIXI_OFFSET2           0x380b
+#define VD1_HDR2_MATRIXI_PRE_OFFSET0_1     0x380c
+#define VD1_HDR2_MATRIXI_PRE_OFFSET2       0x380d
+#define VD1_HDR2_MATRIXO_COEF00_01         0x380e
+#define VD1_HDR2_MATRIXO_COEF02_10         0x380f
+#define VD1_HDR2_MATRIXO_COEF11_12         0x3810
+#define VD1_HDR2_MATRIXO_COEF20_21         0x3811
+#define VD1_HDR2_MATRIXO_COEF22            0x3812
+#define VD1_HDR2_MATRIXO_COEF30_31         0x3813
+#define VD1_HDR2_MATRIXO_COEF32_40         0x3814
+#define VD1_HDR2_MATRIXO_COEF41_42         0x3815
+#define VD1_HDR2_MATRIXO_OFFSET0_1         0x3816
+#define VD1_HDR2_MATRIXO_OFFSET2           0x3817
+#define VD1_HDR2_MATRIXO_PRE_OFFSET0_1     0x3818
+#define VD1_HDR2_MATRIXO_PRE_OFFSET2       0x3819
+#define VD1_HDR2_MATRIXI_CLIP              0x381a
+#define VD1_HDR2_MATRIXO_CLIP              0x381b
+#define VD1_HDR2_CGAIN_OFFT                0x381c
+#define VD1_EOTF_LUT_ADDR_PORT             0x381e
+#define VD1_EOTF_LUT_DATA_PORT             0x381f
+#define VD1_OETF_LUT_ADDR_PORT             0x3820
+#define VD1_OETF_LUT_DATA_PORT             0x3821
+#define VD1_CGAIN_LUT_ADDR_PORT            0x3822
+#define VD1_CGAIN_LUT_DATA_PORT            0x3823
+#define VD1_HDR2_CGAIN_COEF0               0x3824
+#define VD1_HDR2_CGAIN_COEF1               0x3825
+#define VD1_OGAIN_LUT_ADDR_PORT            0x3826
+#define VD1_OGAIN_LUT_DATA_PORT            0x3827
+#define VD1_HDR2_ADPS_CTRL                 0x3828
+#define VD1_HDR2_ADPS_ALPHA0               0x3829
+#define VD1_HDR2_ADPS_ALPHA1               0x382a
+#define VD1_HDR2_ADPS_BETA0                0x382b
+#define VD1_HDR2_ADPS_BETA1                0x382c
+#define VD1_HDR2_ADPS_BETA2                0x382d
+#define VD1_HDR2_ADPS_COEF0                0x382e
+#define VD1_HDR2_ADPS_COEF1                0x382f
+#define VD1_HDR2_GMUT_CTRL                 0x3830
+#define VD1_HDR2_GMUT_COEF0                0x3831
+#define VD1_HDR2_GMUT_COEF1                0x3832
+#define VD1_HDR2_GMUT_COEF2                0x3833
+#define VD1_HDR2_GMUT_COEF3                0x3834
+#define VD1_HDR2_GMUT_COEF4                0x3835
+#define VD1_HDR2_PIPE_CTRL1                0x3836
+#define VD1_HDR2_PIPE_CTRL2                0x3837
+#define VD1_HDR2_PIPE_CTRL3                0x3838
+#define VD1_HDR2_PROC_WIN1                 0x3839
+#define VD1_HDR2_PROC_WIN2                 0x383a
+#define VD1_HDR2_MATRIXI_EN_CTRL           0x383b
+#define VD1_HDR2_MATRIXO_EN_CTRL           0x383c
+
+#define VD2_HDR2_CTRL                      0x3850
+#define VD2_HDR2_CLK_GATE                  0x3851
+#define VD2_HDR2_MATRIXI_COEF00_01         0x3852
+#define VD2_HDR2_MATRIXI_COEF02_10         0x3853
+#define VD2_HDR2_MATRIXI_COEF11_12         0x3854
+#define VD2_HDR2_MATRIXI_COEF20_21         0x3855
+#define VD2_HDR2_MATRIXI_COEF22            0x3856
+#define VD2_HDR2_MATRIXI_COEF30_31         0x3857
+#define VD2_HDR2_MATRIXI_COEF32_40         0x3858
+#define VD2_HDR2_MATRIXI_COEF41_42         0x3859
+#define VD2_HDR2_MATRIXI_OFFSET0_1         0x385a
+#define VD2_HDR2_MATRIXI_OFFSET2           0x385b
+#define VD2_HDR2_MATRIXI_PRE_OFFSET0_1     0x385c
+#define VD2_HDR2_MATRIXI_PRE_OFFSET2       0x385d
+#define VD2_HDR2_MATRIXO_COEF00_01         0x385e
+#define VD2_HDR2_MATRIXO_COEF02_10         0x385f
+#define VD2_HDR2_MATRIXO_COEF11_12         0x3860
+#define VD2_HDR2_MATRIXO_COEF20_21         0x3861
+#define VD2_HDR2_MATRIXO_COEF22            0x3862
+#define VD2_HDR2_MATRIXO_COEF30_31         0x3863
+#define VD2_HDR2_MATRIXO_COEF32_40         0x3864
+#define VD2_HDR2_MATRIXO_COEF41_42         0x3865
+#define VD2_HDR2_MATRIXO_OFFSET0_1         0x3866
+#define VD2_HDR2_MATRIXO_OFFSET2           0x3867
+#define VD2_HDR2_MATRIXO_PRE_OFFSET0_1     0x3868
+#define VD2_HDR2_MATRIXO_PRE_OFFSET2       0x3869
+#define VD2_HDR2_MATRIXI_CLIP              0x386a
+#define VD2_HDR2_MATRIXO_CLIP              0x386b
+#define VD2_HDR2_CGAIN_OFFT                0x386c
+#define VD2_EOTF_LUT_ADDR_PORT             0x386e
+#define VD2_EOTF_LUT_DATA_PORT             0x386f
+#define VD2_OETF_LUT_ADDR_PORT             0x3870
+#define VD2_OETF_LUT_DATA_PORT             0x3871
+#define VD2_CGAIN_LUT_ADDR_PORT            0x3872
+#define VD2_CGAIN_LUT_DATA_PORT            0x3873
+#define VD2_HDR2_CGAIN_COEF0               0x3874
+#define VD2_HDR2_CGAIN_COEF1               0x3875
+#define VD2_OGAIN_LUT_ADDR_PORT            0x3876
+#define VD2_OGAIN_LUT_DATA_PORT            0x3877
+#define VD2_HDR2_ADPS_CTRL                 0x3878
+#define VD2_HDR2_ADPS_ALPHA0               0x3879
+#define VD2_HDR2_ADPS_ALPHA1               0x387a
+#define VD2_HDR2_ADPS_BETA0                0x387b
+#define VD2_HDR2_ADPS_BETA1                0x387c
+#define VD2_HDR2_ADPS_BETA2                0x387d
+#define VD2_HDR2_ADPS_COEF0                0x387e
+#define VD2_HDR2_ADPS_COEF1                0x387f
+#define VD2_HDR2_GMUT_CTRL                 0x3880
+#define VD2_HDR2_GMUT_COEF0                0x3881
+#define VD2_HDR2_GMUT_COEF1                0x3882
+#define VD2_HDR2_GMUT_COEF2                0x3883
+#define VD2_HDR2_GMUT_COEF3                0x3884
+#define VD2_HDR2_GMUT_COEF4                0x3885
+#define VD2_HDR2_PIPE_CTRL1                0x3886
+#define VD2_HDR2_PIPE_CTRL2                0x3887
+#define VD2_HDR2_PIPE_CTRL3                0x3888
+#define VD2_HDR2_PROC_WIN1                 0x3889
+#define VD2_HDR2_PROC_WIN2                 0x388a
+#define VD2_HDR2_MATRIXI_EN_CTRL           0x388b
+#define VD2_HDR2_MATRIXO_EN_CTRL           0x388c
+
+#define OSD1_HDR2_CTRL                      0x38a0
+#define OSD1_HDR2_CLK_GATE                  0x38a1
+#define OSD1_HDR2_MATRIXI_COEF00_01         0x38a2
+#define OSD1_HDR2_MATRIXI_COEF02_10         0x38a3
+#define OSD1_HDR2_MATRIXI_COEF11_12         0x38a4
+#define OSD1_HDR2_MATRIXI_COEF20_21         0x38a5
+#define OSD1_HDR2_MATRIXI_COEF22            0x38a6
+#define OSD1_HDR2_MATRIXI_COEF30_31         0x38a7
+#define OSD1_HDR2_MATRIXI_COEF32_40         0x38a8
+#define OSD1_HDR2_MATRIXI_COEF41_42         0x38a9
+#define OSD1_HDR2_MATRIXI_OFFSET0_1         0x38aa
+#define OSD1_HDR2_MATRIXI_OFFSET2           0x38ab
+#define OSD1_HDR2_MATRIXI_PRE_OFFSET0_1     0x38ac
+#define OSD1_HDR2_MATRIXI_PRE_OFFSET2       0x38ad
+#define OSD1_HDR2_MATRIXO_COEF00_01         0x38ae
+#define OSD1_HDR2_MATRIXO_COEF02_10         0x38af
+#define OSD1_HDR2_MATRIXO_COEF11_12         0x38b0
+#define OSD1_HDR2_MATRIXO_COEF20_21         0x38b1
+#define OSD1_HDR2_MATRIXO_COEF22            0x38b2
+#define OSD1_HDR2_MATRIXO_COEF30_31         0x38b3
+#define OSD1_HDR2_MATRIXO_COEF32_40         0x38b4
+#define OSD1_HDR2_MATRIXO_COEF41_42         0x38b5
+#define OSD1_HDR2_MATRIXO_OFFSET0_1         0x38b6
+#define OSD1_HDR2_MATRIXO_OFFSET2           0x38b7
+#define OSD1_HDR2_MATRIXO_PRE_OFFSET0_1     0x38b8
+#define OSD1_HDR2_MATRIXO_PRE_OFFSET2       0x38b9
+#define OSD1_HDR2_MATRIXI_CLIP              0x38ba
+#define OSD1_HDR2_MATRIXO_CLIP              0x38bb
+#define OSD1_HDR2_CGAIN_OFFT                0x38bc
+#define OSD1_EOTF_LUT_ADDR_PORT             0x38be
+#define OSD1_EOTF_LUT_DATA_PORT             0x38bf
+#define OSD1_OETF_LUT_ADDR_PORT             0x38c0
+#define OSD1_OETF_LUT_DATA_PORT             0x38c1
+#define OSD1_CGAIN_LUT_ADDR_PORT            0x38c2
+#define OSD1_CGAIN_LUT_DATA_PORT            0x38c3
+#define OSD1_HDR2_CGAIN_COEF0               0x38c4
+#define OSD1_HDR2_CGAIN_COEF1               0x38c5
+#define OSD1_OGAIN_LUT_ADDR_PORT            0x38c6
+#define OSD1_OGAIN_LUT_DATA_PORT            0x38c7
+#define OSD1_HDR2_ADPS_CTRL                 0x38c8
+#define OSD1_HDR2_ADPS_ALPHA0               0x38c9
+#define OSD1_HDR2_ADPS_ALPHA1               0x38ca
+#define OSD1_HDR2_ADPS_BETA0                0x38cb
+#define OSD1_HDR2_ADPS_BETA1                0x38cc
+#define OSD1_HDR2_ADPS_BETA2                0x38cd
+#define OSD1_HDR2_ADPS_COEF0                0x38ce
+#define OSD1_HDR2_ADPS_COEF1                0x38cf
+#define OSD1_HDR2_GMUT_CTRL                 0x38d0
+#define OSD1_HDR2_GMUT_COEF0                0x38d1
+#define OSD1_HDR2_GMUT_COEF1                0x38d2
+#define OSD1_HDR2_GMUT_COEF2                0x38d3
+#define OSD1_HDR2_GMUT_COEF3                0x38d4
+#define OSD1_HDR2_GMUT_COEF4                0x38d5
+#define OSD1_HDR2_PIPE_CTRL1                0x38d6
+#define OSD1_HDR2_PIPE_CTRL2                0x38d7
+#define OSD1_HDR2_PIPE_CTRL3                0x38d8
+#define OSD1_HDR2_PROC_WIN1                 0x38d9
+#define OSD1_HDR2_PROC_WIN2                 0x38da
+#define OSD1_HDR2_MATRIXI_EN_CTRL           0x38db
+#define OSD1_HDR2_MATRIXO_EN_CTRL           0x38dc
diff --git a/include/amlogic/asm/romboot.h b/include/amlogic/asm/romboot.h
new file mode 100644
index 00000000000..338365e87a6
--- /dev/null
+++ b/include/amlogic/asm/romboot.h
@@ -0,0 +1,53 @@
+
+/*
+ * arch/arm/include/asm/arch-txl/romboot.h
+ *
+ * Copyright (C) 2015 Amlogic, Inc. All rights reserved.
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License for
+ * more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program; if not, write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
+*/
+
+#ifndef __BOOT_ROM_H_
+#define __BOOT_ROM_H_
+#ifndef __ASSEMBLY__
+//#include <stdint.h>
+//uint8_t simple_i2c(uint8_t adr);
+//void spi_pin_mux(void);
+//void spi_init(void);
+//uint32_t spi_read(uint32_t src, uint32_t mem, uint32_t size);
+//void udelay(uint32_t usec);
+//void boot_des_decrypt(uint8_t *ct, uint8_t *pt, uint32_t size);
+
+#endif /* ! __ASSEMBLY__ */
+#include "config.h"
+
+/* Magic number to "boot" up A53 */
+#define AO_SEC_SD_CFG10_CB			0x80000000
+
+/*BOOT device and ddr size*/
+/*31-28: boot device id, 27-24: boot device para, 23-20: reserved*/
+/*19-8: ddr size, 7-0: board revision*/
+//#define P_AO_SEC_GP_CFG0                                     0xDA100240 //defined in secure_apb.h
+#define AO_SEC_GP_CFG7_W0_BIT			8
+#define AO_SEC_GP_CFG7_W0			0x100
+
+#define BOOT_ID_RESERVED	0
+#define BOOT_ID_EMMC		1
+#define BOOT_ID_NAND		2
+#define BOOT_ID_SPI		3
+#define BOOT_ID_SDCARD		4
+#define BOOT_ID_USB		5
+
+#endif /* __BOOT_ROM_H_ */
diff --git a/include/amlogic/asm/sd_emmc.h b/include/amlogic/asm/sd_emmc.h
new file mode 100644
index 00000000000..81de3a9674c
--- /dev/null
+++ b/include/amlogic/asm/sd_emmc.h
@@ -0,0 +1,136 @@
+/* SPDX-License-Identifier: GPL-2.0+ */
+/*
+ * (C) Copyright 2016 Carlo Caione <carlo@caione.org>
+ */
+
+#ifndef __SD_EMMC_H__
+#define __SD_EMMC_H__
+
+#include <mmc.h>
+
+#define SDIO_PORT_A			0
+#define SDIO_PORT_B			1
+#define SDIO_PORT_C			2
+
+#define SD_EMMC_CLKSRC_24M		24000000	/* 24 MHz */
+#define SD_EMMC_CLKSRC_DIV2		1000000000	/* 1 GHz */
+
+#define MESON_SD_EMMC_CLOCK		0x00
+#define CLK_MAX_DIV   GENMASK(5, 0)
+#define CLK_MAX_SRC   GENMASK(7, 6)
+#define	Cfg_div 	0
+#define Cfg_src		6
+#define Cfg_co_phase	8
+#define	Cfg_tx_phase	10
+#define	Cfg_rx_phase	12
+#define	Cfg_sram_pd		14
+#define	Cfg_tx_delay	16
+#define	Cfg_rx_delay	22
+#define	Cfg_always_on	28
+#define	Cfg_irq_sdio_sleep   29
+#define Cfg_irq_sdio_sleep_ds		30
+
+#define MESON_SD_EMMC_DELAY1	0x4
+#define DLY_D0_MASK	GENMASK(5, 0)
+#define DLY_D1_MASK	GENMASK(11, 6)
+#define DLY_D2_MASK	GENMASK(17, 12)
+#define DLY_D3_MASK	GENMASK(23, 18)
+#define DLY_D4_MASK	GENMASK(31, 24)
+#define Dly_d0	0
+#define Dly_d1	6
+#define Dly_d2	12
+#define Dly_d3	18
+#define Dly_d4	24
+
+#define MESON_SD_EMMC_DELAY2	0x8
+#define DLY_D5_MASK	GENMASK(5, 0)
+#define DLY_D6_MASK	GENMASK(11, 6)
+#define DLY_D7_MASK	GENMASK(17, 12)
+#define DLY_D8_MASK	GENMASK(23, 18)
+#define DLY_D9_MASK	GENMASK(31, 24)
+#define Dly_d5	0
+#define Dly_d6	6
+#define Dly_d7	12
+#define Dly_d8	18
+#define Dly_d9	24
+
+#define MESON_SD_EMMC_ADJUST	0xC
+#define CALI_SEL_MASK	GENMASK(11, 8)
+#define ADJ_DLY_MASK	GENMASK(21, 16)
+#define Cfg_cali_sel	8
+#define Cfg_cali_en		12
+#define Cfg_adj_en		13
+#define Cfg_cali_rise	14
+#define Cfg_ds_en		15
+#define Cfg_adj_dly		16
+#define Cfg_adj_auto	22
+#define Cfg_adj_init	23
+
+#define MESON_SD_EMMC_START		0x40
+#define   CFG_DESC_INIT			BIT(0)
+#define   CFG_DESC_BUSY			BIT(1)
+#define   CFG_DESC_ADDR			2
+
+#define MESON_SD_EMMC_CFG		0x44
+#define   CFG_BUS_WIDTH_MASK		GENMASK(1, 0)
+#define   CFG_BUS_WIDTH_1		0
+#define   CFG_BUS_WIDTH_4		1
+#define   CFG_BUS_WIDTH_8		2
+#define   CFG_DDR				BIT(2)
+#define   CFG_BL_LEN_MASK		GENMASK(7, 4)
+#define   CFG_BL_LEN_SHIFT		4
+#define   CFG_BL_LEN_512		(9 << 4)
+#define   CFG_RESP_TIMEOUT_MASK		GENMASK(11, 8)
+#define   CFG_RESP_TIMEOUT_256		(8 << 8)
+#define   CFG_RC_CC_MASK		GENMASK(15, 12)
+#define   CFG_RC_CC_16			(4 << 12)
+#define   CFG_SDCLK_ALWAYS_ON		BIT(18)
+#define   CFG_AUTO_CLK			BIT(23)
+
+#define MESON_SD_EMMC_STATUS		0x48
+#define   STATUS_MASK			GENMASK(15, 0)
+#define   STATUS_ERR_MASK		GENMASK(12, 0)
+#define   STATUS_RXD_ERR_MASK		GENMASK(7, 0)
+#define   STATUS_TXD_ERR		BIT(8)
+#define   STATUS_DESC_ERR		BIT(9)
+#define   STATUS_RESP_ERR		BIT(10)
+#define   STATUS_RESP_TIMEOUT		BIT(11)
+#define   STATUS_DESC_TIMEOUT		BIT(12)
+#define   STATUS_END_OF_CHAIN		BIT(13)
+
+#define MESON_SD_EMMC_IRQ_EN		0x4c
+
+#define MESON_SD_EMMC_CMD_CFG		0x50
+#define   CMD_CFG_LENGTH_MASK		GENMASK(8, 0)
+#define   CMD_CFG_BLOCK_MODE		BIT(9)
+#define   CMD_CFG_R1B			BIT(10)
+#define   CMD_CFG_END_OF_CHAIN		BIT(11)
+#define   CMD_CFG_TIMEOUT_4S		(12 << 12)
+#define   CMD_CFG_NO_RESP		BIT(16)
+#define   CMD_CFG_NO_CMD		BIT(17)
+#define   CMD_CFG_DATA_IO		BIT(18)
+#define   CMD_CFG_DATA_WR		BIT(19)
+#define   CMD_CFG_RESP_NOCRC		BIT(20)
+#define   CMD_CFG_RESP_128		BIT(21)
+#define   CMD_CFG_RESP_NUM		BIT(22)
+#define   CMD_CFG_DATA_NUM		BIT(23)
+#define   CMD_CFG_CMD_INDEX_MASK	GENMASK(29, 24)
+#define   CMD_CFG_CMD_INDEX_SHIFT	24
+#define   CMD_CFG_ERR			BIT(30)
+#define   CMD_CFG_OWNER			BIT(31)
+
+#define MESON_SD_EMMC_CMD_ARG		0x54
+#define MESON_SD_EMMC_CMD_DAT		0x58
+#define MESON_SD_EMMC_CMD_RSP		0x5c
+#define MESON_SD_EMMC_CMD_RSP1		0x60
+#define MESON_SD_EMMC_CMD_RSP2		0x64
+#define MESON_SD_EMMC_CMD_RSP3		0x68
+
+#define SD_EMMC_RXD_ERROR               (1 << 0)
+#define SD_EMMC_TXD_ERROR               (1 << 1)
+#define SD_EMMC_DESC_ERROR              (1 << 2)
+#define SD_EMMC_RESP_CRC_ERROR          (1 << 3)
+#define SD_EMMC_RESP_TIMEOUT_ERROR      (1 << 4)
+#define SD_EMMC_DESC_TIMEOUT_ERROR      (1 << 5)
+
+#endif
diff --git a/include/amlogic/asm/secure_apb.h b/include/amlogic/asm/secure_apb.h
new file mode 100644
index 00000000000..a146334e50f
--- /dev/null
+++ b/include/amlogic/asm/secure_apb.h
@@ -0,0 +1,4235 @@
+// ----------------------------------------------------------------------
+// This file is automatically generated from the script:
+//
+// ./create_headers_from_register_map_h.pl
+//
+// and was applied to the file
+//
+// ./register_map.h
+//
+// DO NOT EDIT!!!!!
+// ----------------------------------------------------------------------
+//
+#include <amlogic/asm/regs.h>
+
+#ifdef REGISTER_H
+#else
+#define REGISTER_H
+#endif
+
+// ----------------------------------------------------------------------
+// This file is automatically generated from the script:
+//
+// ./create_headers_from_secure_apb4_h.pl
+//
+// and was applied to the file
+//
+// ./secure_apb4_ee.h ./ao_rti_reg.h
+//
+// DO NOT EDIT!!!!!
+// ----------------------------------------------------------------------
+//
+
+#ifdef SECURE_APB_H
+#else
+#define SECURE_APB_H
+
+//
+// Reading file:  ./secure_apb4_ee.h
+//
+// synopsys translate_off
+// synopsys translate_on
+//========================================================================
+// MIPI_DSI_PHY
+//========================================================================
+//  APB4_DECODER_NON_SECURE_BASE     32'hFF644000
+//  APB4_DECODER_SECURE_BASE         32'hFF644000
+//`define MIPI_DSI_PHY_START      8'h00
+//`define MIPI_DSI_PHY_END        16'hffff
+#define     MIPI_DSI_PHY_CTRL                                  (0xff644000 + (0x000 << 2))
+#define SEC_MIPI_DSI_PHY_CTRL                                  (0xff644000 + (0x000 << 2))
+#define   P_MIPI_DSI_PHY_CTRL                                  (volatile uint32_t *)(0xff644000 + (0x000 << 2))
+#define     MIPI_DSI_CHAN_CTRL                                 (0xff644000 + (0x001 << 2))
+#define SEC_MIPI_DSI_CHAN_CTRL                                 (0xff644000 + (0x001 << 2))
+#define   P_MIPI_DSI_CHAN_CTRL                                 (volatile uint32_t *)(0xff644000 + (0x001 << 2))
+#define     MIPI_DSI_CHAN_STS                                  (0xff644000 + (0x002 << 2))
+#define SEC_MIPI_DSI_CHAN_STS                                  (0xff644000 + (0x002 << 2))
+#define   P_MIPI_DSI_CHAN_STS                                  (volatile uint32_t *)(0xff644000 + (0x002 << 2))
+#define     MIPI_DSI_CLK_TIM                                   (0xff644000 + (0x003 << 2))
+#define SEC_MIPI_DSI_CLK_TIM                                   (0xff644000 + (0x003 << 2))
+#define   P_MIPI_DSI_CLK_TIM                                   (volatile uint32_t *)(0xff644000 + (0x003 << 2))
+#define     MIPI_DSI_HS_TIM                                    (0xff644000 + (0x004 << 2))
+#define SEC_MIPI_DSI_HS_TIM                                    (0xff644000 + (0x004 << 2))
+#define   P_MIPI_DSI_HS_TIM                                    (volatile uint32_t *)(0xff644000 + (0x004 << 2))
+#define     MIPI_DSI_LP_TIM                                    (0xff644000 + (0x005 << 2))
+#define SEC_MIPI_DSI_LP_TIM                                    (0xff644000 + (0x005 << 2))
+#define   P_MIPI_DSI_LP_TIM                                    (volatile uint32_t *)(0xff644000 + (0x005 << 2))
+#define     MIPI_DSI_ANA_UP_TIM                                (0xff644000 + (0x006 << 2))
+#define SEC_MIPI_DSI_ANA_UP_TIM                                (0xff644000 + (0x006 << 2))
+#define   P_MIPI_DSI_ANA_UP_TIM                                (volatile uint32_t *)(0xff644000 + (0x006 << 2))
+#define     MIPI_DSI_INIT_TIM                                  (0xff644000 + (0x007 << 2))
+#define SEC_MIPI_DSI_INIT_TIM                                  (0xff644000 + (0x007 << 2))
+#define   P_MIPI_DSI_INIT_TIM                                  (volatile uint32_t *)(0xff644000 + (0x007 << 2))
+#define     MIPI_DSI_WAKEUP_TIM                                (0xff644000 + (0x008 << 2))
+#define SEC_MIPI_DSI_WAKEUP_TIM                                (0xff644000 + (0x008 << 2))
+#define   P_MIPI_DSI_WAKEUP_TIM                                (volatile uint32_t *)(0xff644000 + (0x008 << 2))
+#define     MIPI_DSI_LPOK_TIM                                  (0xff644000 + (0x009 << 2))
+#define SEC_MIPI_DSI_LPOK_TIM                                  (0xff644000 + (0x009 << 2))
+#define   P_MIPI_DSI_LPOK_TIM                                  (volatile uint32_t *)(0xff644000 + (0x009 << 2))
+#define     MIPI_DSI_LP_WCHDOG                                 (0xff644000 + (0x00a << 2))
+#define SEC_MIPI_DSI_LP_WCHDOG                                 (0xff644000 + (0x00a << 2))
+#define   P_MIPI_DSI_LP_WCHDOG                                 (volatile uint32_t *)(0xff644000 + (0x00a << 2))
+#define     MIPI_DSI_ANA_CTRL                                  (0xff644000 + (0x00b << 2))
+#define SEC_MIPI_DSI_ANA_CTRL                                  (0xff644000 + (0x00b << 2))
+#define   P_MIPI_DSI_ANA_CTRL                                  (volatile uint32_t *)(0xff644000 + (0x00b << 2))
+#define     MIPI_DSI_CLK_TIM1                                  (0xff644000 + (0x00c << 2))
+#define SEC_MIPI_DSI_CLK_TIM1                                  (0xff644000 + (0x00c << 2))
+#define   P_MIPI_DSI_CLK_TIM1                                  (volatile uint32_t *)(0xff644000 + (0x00c << 2))
+#define     MIPI_DSI_TURN_WCHDOG                               (0xff644000 + (0x00d << 2))
+#define SEC_MIPI_DSI_TURN_WCHDOG                               (0xff644000 + (0x00d << 2))
+#define   P_MIPI_DSI_TURN_WCHDOG                               (volatile uint32_t *)(0xff644000 + (0x00d << 2))
+#define     MIPI_DSI_ULPS_CHECK                                (0xff644000 + (0x00e << 2))
+#define SEC_MIPI_DSI_ULPS_CHECK                                (0xff644000 + (0x00e << 2))
+#define   P_MIPI_DSI_ULPS_CHECK                                (volatile uint32_t *)(0xff644000 + (0x00e << 2))
+#define     MIPI_DSI_TEST_CTRL0                                (0xff644000 + (0x00f << 2))
+#define SEC_MIPI_DSI_TEST_CTRL0                                (0xff644000 + (0x00f << 2))
+#define   P_MIPI_DSI_TEST_CTRL0                                (volatile uint32_t *)(0xff644000 + (0x00f << 2))
+#define     MIPI_DSI_TEST_CTRL1                                (0xff644000 + (0x010 << 2))
+#define SEC_MIPI_DSI_TEST_CTRL1                                (0xff644000 + (0x010 << 2))
+#define   P_MIPI_DSI_TEST_CTRL1                                (volatile uint32_t *)(0xff644000 + (0x010 << 2))
+//========================================================================
+//  Temp sensor PLL
+//========================================================================
+//  APB4_DECODER_NON_SECURE_BASE     32'hFF634800
+//  APB4_DECODER_SECURE_BASE         32'hFF634800
+#define     TS_PLL_CFG_REG1                                    (0xff634800 + (0x001 << 2))
+#define SEC_TS_PLL_CFG_REG1                                    (0xff634800 + (0x001 << 2))
+#define   P_TS_PLL_CFG_REG1                                    (volatile uint32_t *)(0xff634800 + (0x001 << 2))
+#define     TS_PLL_CFG_REG2                                    (0xff634800 + (0x002 << 2))
+#define SEC_TS_PLL_CFG_REG2                                    (0xff634800 + (0x002 << 2))
+#define   P_TS_PLL_CFG_REG2                                    (volatile uint32_t *)(0xff634800 + (0x002 << 2))
+#define     TS_PLL_CFG_REG3                                    (0xff634800 + (0x003 << 2))
+#define SEC_TS_PLL_CFG_REG3                                    (0xff634800 + (0x003 << 2))
+#define   P_TS_PLL_CFG_REG3                                    (volatile uint32_t *)(0xff634800 + (0x003 << 2))
+#define     TS_PLL_CFG_REG4                                    (0xff634800 + (0x004 << 2))
+#define SEC_TS_PLL_CFG_REG4                                    (0xff634800 + (0x004 << 2))
+#define   P_TS_PLL_CFG_REG4                                    (volatile uint32_t *)(0xff634800 + (0x004 << 2))
+#define     TS_PLL_CFG_REG5                                    (0xff634800 + (0x005 << 2))
+#define SEC_TS_PLL_CFG_REG5                                    (0xff634800 + (0x005 << 2))
+#define   P_TS_PLL_CFG_REG5                                    (volatile uint32_t *)(0xff634800 + (0x005 << 2))
+#define     TS_PLL_CFG_REG6                                    (0xff634800 + (0x006 << 2))
+#define SEC_TS_PLL_CFG_REG6                                    (0xff634800 + (0x006 << 2))
+#define   P_TS_PLL_CFG_REG6                                    (volatile uint32_t *)(0xff634800 + (0x006 << 2))
+#define     TS_PLL_CFG_REG7                                    (0xff634800 + (0x007 << 2))
+#define SEC_TS_PLL_CFG_REG7                                    (0xff634800 + (0x007 << 2))
+#define   P_TS_PLL_CFG_REG7                                    (volatile uint32_t *)(0xff634800 + (0x007 << 2))
+#define     TS_PLL_STAT0                                       (0xff634800 + (0x010 << 2))
+#define SEC_TS_PLL_STAT0                                       (0xff634800 + (0x010 << 2))
+#define   P_TS_PLL_STAT0                                       (volatile uint32_t *)(0xff634800 + (0x010 << 2))
+#define     TS_PLL_STAT1                                       (0xff634800 + (0x011 << 2))
+#define SEC_TS_PLL_STAT1                                       (0xff634800 + (0x011 << 2))
+#define   P_TS_PLL_STAT1                                       (volatile uint32_t *)(0xff634800 + (0x011 << 2))
+#define     TS_PLL_STAT2                                       (0xff634800 + (0x012 << 2))
+#define SEC_TS_PLL_STAT2                                       (0xff634800 + (0x012 << 2))
+#define   P_TS_PLL_STAT2                                       (volatile uint32_t *)(0xff634800 + (0x012 << 2))
+#define     TS_PLL_STAT3                                       (0xff634800 + (0x013 << 2))
+#define SEC_TS_PLL_STAT3                                       (0xff634800 + (0x013 << 2))
+#define   P_TS_PLL_STAT3                                       (volatile uint32_t *)(0xff634800 + (0x013 << 2))
+#define     TS_PLL_STAT4                                       (0xff634800 + (0x014 << 2))
+#define SEC_TS_PLL_STAT4                                       (0xff634800 + (0x014 << 2))
+#define   P_TS_PLL_STAT4                                       (volatile uint32_t *)(0xff634800 + (0x014 << 2))
+#define     TS_PLL_STAT5                                       (0xff634800 + (0x015 << 2))
+#define SEC_TS_PLL_STAT5                                       (0xff634800 + (0x015 << 2))
+#define   P_TS_PLL_STAT5                                       (volatile uint32_t *)(0xff634800 + (0x015 << 2))
+#define     TS_PLL_STAT6                                       (0xff634800 + (0x016 << 2))
+#define SEC_TS_PLL_STAT6                                       (0xff634800 + (0x016 << 2))
+#define   P_TS_PLL_STAT6                                       (volatile uint32_t *)(0xff634800 + (0x016 << 2))
+#define     TS_PLL_STAT7                                       (0xff634800 + (0x017 << 2))
+#define SEC_TS_PLL_STAT7                                       (0xff634800 + (0x017 << 2))
+#define   P_TS_PLL_STAT7                                       (volatile uint32_t *)(0xff634800 + (0x017 << 2))
+#define     TS_PLL_STAT8                                       (0xff634800 + (0x018 << 2))
+#define SEC_TS_PLL_STAT8                                       (0xff634800 + (0x018 << 2))
+#define   P_TS_PLL_STAT8                                       (volatile uint32_t *)(0xff634800 + (0x018 << 2))
+#define     TS_PLL_STAT9                                       (0xff634800 + (0x019 << 2))
+#define SEC_TS_PLL_STAT9                                       (0xff634800 + (0x019 << 2))
+#define   P_TS_PLL_STAT9                                       (volatile uint32_t *)(0xff634800 + (0x019 << 2))
+//========================================================================
+//  Temp sensor DDR
+//========================================================================
+//  APB4_DECODER_NON_SECURE_BASE     32'hFF634C00
+//  APB4_DECODER_SECURE_BASE         32'hFF634C00
+#define     TS_DDR_CFG_REG1                                    (0xff634c00 + (0x001 << 2))
+#define SEC_TS_DDR_CFG_REG1                                    (0xff634c00 + (0x001 << 2))
+#define   P_TS_DDR_CFG_REG1                                    (volatile uint32_t *)(0xff634c00 + (0x001 << 2))
+#define     TS_DDR_CFG_REG2                                    (0xff634c00 + (0x002 << 2))
+#define SEC_TS_DDR_CFG_REG2                                    (0xff634c00 + (0x002 << 2))
+#define   P_TS_DDR_CFG_REG2                                    (volatile uint32_t *)(0xff634c00 + (0x002 << 2))
+#define     TS_DDR_CFG_REG3                                    (0xff634c00 + (0x003 << 2))
+#define SEC_TS_DDR_CFG_REG3                                    (0xff634c00 + (0x003 << 2))
+#define   P_TS_DDR_CFG_REG3                                    (volatile uint32_t *)(0xff634c00 + (0x003 << 2))
+#define     TS_DDR_CFG_REG4                                    (0xff634c00 + (0x004 << 2))
+#define SEC_TS_DDR_CFG_REG4                                    (0xff634c00 + (0x004 << 2))
+#define   P_TS_DDR_CFG_REG4                                    (volatile uint32_t *)(0xff634c00 + (0x004 << 2))
+#define     TS_DDR_CFG_REG5                                    (0xff634c00 + (0x005 << 2))
+#define SEC_TS_DDR_CFG_REG5                                    (0xff634c00 + (0x005 << 2))
+#define   P_TS_DDR_CFG_REG5                                    (volatile uint32_t *)(0xff634c00 + (0x005 << 2))
+#define     TS_DDR_CFG_REG6                                    (0xff634c00 + (0x006 << 2))
+#define SEC_TS_DDR_CFG_REG6                                    (0xff634c00 + (0x006 << 2))
+#define   P_TS_DDR_CFG_REG6                                    (volatile uint32_t *)(0xff634c00 + (0x006 << 2))
+#define     TS_DDR_CFG_REG7                                    (0xff634c00 + (0x007 << 2))
+#define SEC_TS_DDR_CFG_REG7                                    (0xff634c00 + (0x007 << 2))
+#define   P_TS_DDR_CFG_REG7                                    (volatile uint32_t *)(0xff634c00 + (0x007 << 2))
+#define     TS_DDR_STAT0                                       (0xff634c00 + (0x010 << 2))
+#define SEC_TS_DDR_STAT0                                       (0xff634c00 + (0x010 << 2))
+#define   P_TS_DDR_STAT0                                       (volatile uint32_t *)(0xff634c00 + (0x010 << 2))
+#define     TS_DDR_STAT1                                       (0xff634c00 + (0x011 << 2))
+#define SEC_TS_DDR_STAT1                                       (0xff634c00 + (0x011 << 2))
+#define   P_TS_DDR_STAT1                                       (volatile uint32_t *)(0xff634c00 + (0x011 << 2))
+#define     TS_DDR_STAT2                                       (0xff634c00 + (0x012 << 2))
+#define SEC_TS_DDR_STAT2                                       (0xff634c00 + (0x012 << 2))
+#define   P_TS_DDR_STAT2                                       (volatile uint32_t *)(0xff634c00 + (0x012 << 2))
+#define     TS_DDR_STAT3                                       (0xff634c00 + (0x013 << 2))
+#define SEC_TS_DDR_STAT3                                       (0xff634c00 + (0x013 << 2))
+#define   P_TS_DDR_STAT3                                       (volatile uint32_t *)(0xff634c00 + (0x013 << 2))
+#define     TS_DDR_STAT4                                       (0xff634c00 + (0x014 << 2))
+#define SEC_TS_DDR_STAT4                                       (0xff634c00 + (0x014 << 2))
+#define   P_TS_DDR_STAT4                                       (volatile uint32_t *)(0xff634c00 + (0x014 << 2))
+#define     TS_DDR_STAT5                                       (0xff634c00 + (0x015 << 2))
+#define SEC_TS_DDR_STAT5                                       (0xff634c00 + (0x015 << 2))
+#define   P_TS_DDR_STAT5                                       (volatile uint32_t *)(0xff634c00 + (0x015 << 2))
+#define     TS_DDR_STAT6                                       (0xff634c00 + (0x016 << 2))
+#define SEC_TS_DDR_STAT6                                       (0xff634c00 + (0x016 << 2))
+#define   P_TS_DDR_STAT6                                       (volatile uint32_t *)(0xff634c00 + (0x016 << 2))
+#define     TS_DDR_STAT7                                       (0xff634c00 + (0x017 << 2))
+#define SEC_TS_DDR_STAT7                                       (0xff634c00 + (0x017 << 2))
+#define   P_TS_DDR_STAT7                                       (volatile uint32_t *)(0xff634c00 + (0x017 << 2))
+#define     TS_DDR_STAT8                                       (0xff634c00 + (0x018 << 2))
+#define SEC_TS_DDR_STAT8                                       (0xff634c00 + (0x018 << 2))
+#define   P_TS_DDR_STAT8                                       (volatile uint32_t *)(0xff634c00 + (0x018 << 2))
+#define     TS_DDR_STAT9                                       (0xff634c00 + (0x019 << 2))
+#define SEC_TS_DDR_STAT9                                       (0xff634c00 + (0x019 << 2))
+#define   P_TS_DDR_STAT9                                       (volatile uint32_t *)(0xff634c00 + (0x019 << 2))
+//========================================================================
+//  Temp sensor GPU
+//========================================================================
+//  APB4_DECODER_NON_SECURE_BASE     32'hFF635000
+//  APB4_DECODER_SECURE_BASE         32'hFF635000
+//`define TS_GPU_CFG_REG1                         8'h01
+//`define TS_GPU_CFG_REG2                         8'h02
+//`define TS_GPU_CFG_REG3                         8'h03
+//`define TS_GPU_CFG_REG4                         8'h04
+//`define TS_GPU_CFG_REG5                         8'h05
+//`define TS_GPU_CFG_REG6                         8'h06
+//`define TS_GPU_CFG_REG7                         8'h07
+//`define TS_GPU_STAT0                            8'h10
+//`define TS_GPU_STAT1                            8'h11
+//`define TS_GPU_STAT2                            8'h12
+//`define TS_GPU_STAT3                            8'h13
+//`define TS_GPU_STAT4                            8'h14
+//`define TS_GPU_STAT5                            8'h15
+//`define TS_GPU_STAT6                            8'h16
+//`define TS_GPU_STAT7                            8'h17
+//`define TS_GPU_STAT8                            8'h18
+//`define TS_GPU_STAT9                            8'h19
+//========================================================================
+//  RNG
+//========================================================================
+//  APB4_DECODER_NON_SECURE_BASE     32'hFF634000
+//  APB4_DECODER_SECURE_BASE         32'hFF634000
+//========================================================================
+//  ACODEC
+//========================================================================
+//  APB4_DECODER_NON_SECURE_BASE     32'hFF632000
+//  APB4_DECODER_SECURE_BASE         32'hFF632000
+#define     ACODEC_0                                           (0xff632000 + (0x000 << 2))
+#define SEC_ACODEC_0                                           (0xff632000 + (0x000 << 2))
+#define   P_ACODEC_0                                           (volatile uint32_t *)(0xff632000 + (0x000 << 2))
+#define     ACODEC_1                                           (0xff632000 + (0x001 << 2))
+#define SEC_ACODEC_1                                           (0xff632000 + (0x001 << 2))
+#define   P_ACODEC_1                                           (volatile uint32_t *)(0xff632000 + (0x001 << 2))
+#define     ACODEC_2                                           (0xff632000 + (0x002 << 2))
+#define SEC_ACODEC_2                                           (0xff632000 + (0x002 << 2))
+#define   P_ACODEC_2                                           (volatile uint32_t *)(0xff632000 + (0x002 << 2))
+#define     ACODEC_3                                           (0xff632000 + (0x003 << 2))
+#define SEC_ACODEC_3                                           (0xff632000 + (0x003 << 2))
+#define   P_ACODEC_3                                           (volatile uint32_t *)(0xff632000 + (0x003 << 2))
+#define     ACODEC_4                                           (0xff632000 + (0x004 << 2))
+#define SEC_ACODEC_4                                           (0xff632000 + (0x004 << 2))
+#define   P_ACODEC_4                                           (volatile uint32_t *)(0xff632000 + (0x004 << 2))
+#define     ACODEC_5                                           (0xff632000 + (0x005 << 2))
+#define SEC_ACODEC_5                                           (0xff632000 + (0x005 << 2))
+#define   P_ACODEC_5                                           (volatile uint32_t *)(0xff632000 + (0x005 << 2))
+#define     ACODEC_6                                           (0xff632000 + (0x006 << 2))
+#define SEC_ACODEC_6                                           (0xff632000 + (0x006 << 2))
+#define   P_ACODEC_6                                           (volatile uint32_t *)(0xff632000 + (0x006 << 2))
+#define     ACODEC_7                                           (0xff632000 + (0x007 << 2))
+#define SEC_ACODEC_7                                           (0xff632000 + (0x007 << 2))
+#define   P_ACODEC_7                                           (volatile uint32_t *)(0xff632000 + (0x007 << 2))
+//========================================================================
+//  AML USB PHY A
+//========================================================================
+//  APB4_DECODER_NON_SECURE_BASE     32'hFF636000
+//  APB4_DECODER_SECURE_BASE         32'hFF636000
+#define     AMLUSB_A0                                          (0xff636000 + (0x000 << 2))
+#define SEC_AMLUSB_A0                                          (0xff636000 + (0x000 << 2))
+#define   P_AMLUSB_A0                                          (volatile uint32_t *)(0xff636000 + (0x000 << 2))
+#define     AMLUSB_A1                                          (0xff636000 + (0x001 << 2))
+#define SEC_AMLUSB_A1                                          (0xff636000 + (0x001 << 2))
+#define   P_AMLUSB_A1                                          (volatile uint32_t *)(0xff636000 + (0x001 << 2))
+#define     AMLUSB_A2                                          (0xff636000 + (0x002 << 2))
+#define SEC_AMLUSB_A2                                          (0xff636000 + (0x002 << 2))
+#define   P_AMLUSB_A2                                          (volatile uint32_t *)(0xff636000 + (0x002 << 2))
+#define     AMLUSB_A3                                          (0xff636000 + (0x003 << 2))
+#define SEC_AMLUSB_A3                                          (0xff636000 + (0x003 << 2))
+#define   P_AMLUSB_A3                                          (volatile uint32_t *)(0xff636000 + (0x003 << 2))
+#define     AMLUSB_A4                                          (0xff636000 + (0x004 << 2))
+#define SEC_AMLUSB_A4                                          (0xff636000 + (0x004 << 2))
+#define   P_AMLUSB_A4                                          (volatile uint32_t *)(0xff636000 + (0x004 << 2))
+#define     AMLUSB_A5                                          (0xff636000 + (0x005 << 2))
+#define SEC_AMLUSB_A5                                          (0xff636000 + (0x005 << 2))
+#define   P_AMLUSB_A5                                          (volatile uint32_t *)(0xff636000 + (0x005 << 2))
+#define     AMLUSB_A6                                          (0xff636000 + (0x006 << 2))
+#define SEC_AMLUSB_A6                                          (0xff636000 + (0x006 << 2))
+#define   P_AMLUSB_A6                                          (volatile uint32_t *)(0xff636000 + (0x006 << 2))
+#define     AMLUSB_A7                                          (0xff636000 + (0x007 << 2))
+#define SEC_AMLUSB_A7                                          (0xff636000 + (0x007 << 2))
+#define   P_AMLUSB_A7                                          (volatile uint32_t *)(0xff636000 + (0x007 << 2))
+#define     AMLUSB_A8                                          (0xff636000 + (0x008 << 2))
+#define SEC_AMLUSB_A8                                          (0xff636000 + (0x008 << 2))
+#define   P_AMLUSB_A8                                          (volatile uint32_t *)(0xff636000 + (0x008 << 2))
+#define     AMLUSB_A9                                          (0xff636000 + (0x009 << 2))
+#define SEC_AMLUSB_A9                                          (0xff636000 + (0x009 << 2))
+#define   P_AMLUSB_A9                                          (volatile uint32_t *)(0xff636000 + (0x009 << 2))
+#define     AMLUSB_A10                                         (0xff636000 + (0x00a << 2))
+#define SEC_AMLUSB_A10                                         (0xff636000 + (0x00a << 2))
+#define   P_AMLUSB_A10                                         (volatile uint32_t *)(0xff636000 + (0x00a << 2))
+#define     AMLUSB_A11                                         (0xff636000 + (0x00b << 2))
+#define SEC_AMLUSB_A11                                         (0xff636000 + (0x00b << 2))
+#define   P_AMLUSB_A11                                         (volatile uint32_t *)(0xff636000 + (0x00b << 2))
+#define     AMLUSB_A12                                         (0xff636000 + (0x00c << 2))
+#define SEC_AMLUSB_A12                                         (0xff636000 + (0x00c << 2))
+#define   P_AMLUSB_A12                                         (volatile uint32_t *)(0xff636000 + (0x00c << 2))
+#define     AMLUSB_A13                                         (0xff636000 + (0x00d << 2))
+#define SEC_AMLUSB_A13                                         (0xff636000 + (0x00d << 2))
+#define   P_AMLUSB_A13                                         (volatile uint32_t *)(0xff636000 + (0x00d << 2))
+#define     AMLUSB_A14                                         (0xff636000 + (0x00e << 2))
+#define SEC_AMLUSB_A14                                         (0xff636000 + (0x00e << 2))
+#define   P_AMLUSB_A14                                         (volatile uint32_t *)(0xff636000 + (0x00e << 2))
+#define     AMLUSB_A15                                         (0xff636000 + (0x00f << 2))
+#define SEC_AMLUSB_A15                                         (0xff636000 + (0x00f << 2))
+#define   P_AMLUSB_A15                                         (volatile uint32_t *)(0xff636000 + (0x00f << 2))
+#define     AMLUSB_A16                                         (0xff636000 + (0x010 << 2))
+#define SEC_AMLUSB_A16                                         (0xff636000 + (0x010 << 2))
+#define   P_AMLUSB_A16                                         (volatile uint32_t *)(0xff636000 + (0x010 << 2))
+#define     AMLUSB_A17                                         (0xff636000 + (0x011 << 2))
+#define SEC_AMLUSB_A17                                         (0xff636000 + (0x011 << 2))
+#define   P_AMLUSB_A17                                         (volatile uint32_t *)(0xff636000 + (0x011 << 2))
+#define     AMLUSB_A18                                         (0xff636000 + (0x012 << 2))
+#define SEC_AMLUSB_A18                                         (0xff636000 + (0x012 << 2))
+#define   P_AMLUSB_A18                                         (volatile uint32_t *)(0xff636000 + (0x012 << 2))
+#define     AMLUSB_A19                                         (0xff636000 + (0x013 << 2))
+#define SEC_AMLUSB_A19                                         (0xff636000 + (0x013 << 2))
+#define   P_AMLUSB_A19                                         (volatile uint32_t *)(0xff636000 + (0x013 << 2))
+#define     AMLUSB_A20                                         (0xff636000 + (0x014 << 2))
+#define SEC_AMLUSB_A20                                         (0xff636000 + (0x014 << 2))
+#define   P_AMLUSB_A20                                         (volatile uint32_t *)(0xff636000 + (0x014 << 2))
+#define     AMLUSB_A21                                         (0xff636000 + (0x015 << 2))
+#define SEC_AMLUSB_A21                                         (0xff636000 + (0x015 << 2))
+#define   P_AMLUSB_A21                                         (volatile uint32_t *)(0xff636000 + (0x015 << 2))
+#define     AMLUSB_A22                                         (0xff636000 + (0x016 << 2))
+#define SEC_AMLUSB_A22                                         (0xff636000 + (0x016 << 2))
+#define   P_AMLUSB_A22                                         (volatile uint32_t *)(0xff636000 + (0x016 << 2))
+#define     AMLUSB_A23                                         (0xff636000 + (0x017 << 2))
+#define SEC_AMLUSB_A23                                         (0xff636000 + (0x017 << 2))
+#define   P_AMLUSB_A23                                         (volatile uint32_t *)(0xff636000 + (0x017 << 2))
+#define     AMLUSB_A24                                         (0xff636000 + (0x018 << 2))
+#define SEC_AMLUSB_A24                                         (0xff636000 + (0x018 << 2))
+#define   P_AMLUSB_A24                                         (volatile uint32_t *)(0xff636000 + (0x018 << 2))
+#define     AMLUSB_A25                                         (0xff636000 + (0x019 << 2))
+#define SEC_AMLUSB_A25                                         (0xff636000 + (0x019 << 2))
+#define   P_AMLUSB_A25                                         (volatile uint32_t *)(0xff636000 + (0x019 << 2))
+#define     AMLUSB_A26                                         (0xff636000 + (0x01a << 2))
+#define SEC_AMLUSB_A26                                         (0xff636000 + (0x01a << 2))
+#define   P_AMLUSB_A26                                         (volatile uint32_t *)(0xff636000 + (0x01a << 2))
+#define     AMLUSB_A27                                         (0xff636000 + (0x01b << 2))
+#define SEC_AMLUSB_A27                                         (0xff636000 + (0x01b << 2))
+#define   P_AMLUSB_A27                                         (volatile uint32_t *)(0xff636000 + (0x01b << 2))
+#define     AMLUSB_A28                                         (0xff636000 + (0x01c << 2))
+#define SEC_AMLUSB_A28                                         (0xff636000 + (0x01c << 2))
+#define   P_AMLUSB_A28                                         (volatile uint32_t *)(0xff636000 + (0x01c << 2))
+#define     AMLUSB_A29                                         (0xff636000 + (0x01d << 2))
+#define SEC_AMLUSB_A29                                         (0xff636000 + (0x01d << 2))
+#define   P_AMLUSB_A29                                         (volatile uint32_t *)(0xff636000 + (0x01d << 2))
+#define     AMLUSB_A30                                         (0xff636000 + (0x01e << 2))
+#define SEC_AMLUSB_A30                                         (0xff636000 + (0x01e << 2))
+#define   P_AMLUSB_A30                                         (volatile uint32_t *)(0xff636000 + (0x01e << 2))
+#define     AMLUSB_A31                                         (0xff636000 + (0x01f << 2))
+#define SEC_AMLUSB_A31                                         (0xff636000 + (0x01f << 2))
+#define   P_AMLUSB_A31                                         (volatile uint32_t *)(0xff636000 + (0x01f << 2))
+//========================================================================
+//  AML USB PHY B
+//========================================================================
+//  APB4_DECODER_NON_SECURE_BASE     32'hFF63A000
+//  APB4_DECODER_SECURE_BASE         32'hFF63A000
+#define     AMLUSB_B0                                          (0xff63a000 + (0x000 << 2))
+#define SEC_AMLUSB_B0                                          (0xff63a000 + (0x000 << 2))
+#define   P_AMLUSB_B0                                          (volatile uint32_t *)(0xff63a000 + (0x000 << 2))
+#define     AMLUSB_B1                                          (0xff63a000 + (0x001 << 2))
+#define SEC_AMLUSB_B1                                          (0xff63a000 + (0x001 << 2))
+#define   P_AMLUSB_B1                                          (volatile uint32_t *)(0xff63a000 + (0x001 << 2))
+#define     AMLUSB_B2                                          (0xff63a000 + (0x002 << 2))
+#define SEC_AMLUSB_B2                                          (0xff63a000 + (0x002 << 2))
+#define   P_AMLUSB_B2                                          (volatile uint32_t *)(0xff63a000 + (0x002 << 2))
+#define     AMLUSB_B3                                          (0xff63a000 + (0x003 << 2))
+#define SEC_AMLUSB_B3                                          (0xff63a000 + (0x003 << 2))
+#define   P_AMLUSB_B3                                          (volatile uint32_t *)(0xff63a000 + (0x003 << 2))
+#define     AMLUSB_B4                                          (0xff63a000 + (0x004 << 2))
+#define SEC_AMLUSB_B4                                          (0xff63a000 + (0x004 << 2))
+#define   P_AMLUSB_B4                                          (volatile uint32_t *)(0xff63a000 + (0x004 << 2))
+#define     AMLUSB_B5                                          (0xff63a000 + (0x005 << 2))
+#define SEC_AMLUSB_B5                                          (0xff63a000 + (0x005 << 2))
+#define   P_AMLUSB_B5                                          (volatile uint32_t *)(0xff63a000 + (0x005 << 2))
+#define     AMLUSB_B6                                          (0xff63a000 + (0x006 << 2))
+#define SEC_AMLUSB_B6                                          (0xff63a000 + (0x006 << 2))
+#define   P_AMLUSB_B6                                          (volatile uint32_t *)(0xff63a000 + (0x006 << 2))
+#define     AMLUSB_B7                                          (0xff63a000 + (0x007 << 2))
+#define SEC_AMLUSB_B7                                          (0xff63a000 + (0x007 << 2))
+#define   P_AMLUSB_B7                                          (volatile uint32_t *)(0xff63a000 + (0x007 << 2))
+#define     AMLUSB_B8                                          (0xff63a000 + (0x008 << 2))
+#define SEC_AMLUSB_B8                                          (0xff63a000 + (0x008 << 2))
+#define   P_AMLUSB_B8                                          (volatile uint32_t *)(0xff63a000 + (0x008 << 2))
+#define     AMLUSB_B9                                          (0xff63a000 + (0x009 << 2))
+#define SEC_AMLUSB_B9                                          (0xff63a000 + (0x009 << 2))
+#define   P_AMLUSB_B9                                          (volatile uint32_t *)(0xff63a000 + (0x009 << 2))
+#define     AMLUSB_B10                                         (0xff63a000 + (0x00a << 2))
+#define SEC_AMLUSB_B10                                         (0xff63a000 + (0x00a << 2))
+#define   P_AMLUSB_B10                                         (volatile uint32_t *)(0xff63a000 + (0x00a << 2))
+#define     AMLUSB_B11                                         (0xff63a000 + (0x00b << 2))
+#define SEC_AMLUSB_B11                                         (0xff63a000 + (0x00b << 2))
+#define   P_AMLUSB_B11                                         (volatile uint32_t *)(0xff63a000 + (0x00b << 2))
+#define     AMLUSB_B12                                         (0xff63a000 + (0x00c << 2))
+#define SEC_AMLUSB_B12                                         (0xff63a000 + (0x00c << 2))
+#define   P_AMLUSB_B12                                         (volatile uint32_t *)(0xff63a000 + (0x00c << 2))
+#define     AMLUSB_B13                                         (0xff63a000 + (0x00d << 2))
+#define SEC_AMLUSB_B13                                         (0xff63a000 + (0x00d << 2))
+#define   P_AMLUSB_B13                                         (volatile uint32_t *)(0xff63a000 + (0x00d << 2))
+#define     AMLUSB_B14                                         (0xff63a000 + (0x00e << 2))
+#define SEC_AMLUSB_B14                                         (0xff63a000 + (0x00e << 2))
+#define   P_AMLUSB_B14                                         (volatile uint32_t *)(0xff63a000 + (0x00e << 2))
+#define     AMLUSB_B15                                         (0xff63a000 + (0x00f << 2))
+#define SEC_AMLUSB_B15                                         (0xff63a000 + (0x00f << 2))
+#define   P_AMLUSB_B15                                         (volatile uint32_t *)(0xff63a000 + (0x00f << 2))
+#define     AMLUSB_B16                                         (0xff63a000 + (0x010 << 2))
+#define SEC_AMLUSB_B16                                         (0xff63a000 + (0x010 << 2))
+#define   P_AMLUSB_B16                                         (volatile uint32_t *)(0xff63a000 + (0x010 << 2))
+#define     AMLUSB_B17                                         (0xff63a000 + (0x011 << 2))
+#define SEC_AMLUSB_B17                                         (0xff63a000 + (0x011 << 2))
+#define   P_AMLUSB_B17                                         (volatile uint32_t *)(0xff63a000 + (0x011 << 2))
+#define     AMLUSB_B18                                         (0xff63a000 + (0x012 << 2))
+#define SEC_AMLUSB_B18                                         (0xff63a000 + (0x012 << 2))
+#define   P_AMLUSB_B18                                         (volatile uint32_t *)(0xff63a000 + (0x012 << 2))
+#define     AMLUSB_B19                                         (0xff63a000 + (0x013 << 2))
+#define SEC_AMLUSB_B19                                         (0xff63a000 + (0x013 << 2))
+#define   P_AMLUSB_B19                                         (volatile uint32_t *)(0xff63a000 + (0x013 << 2))
+#define     AMLUSB_B20                                         (0xff63a000 + (0x014 << 2))
+#define SEC_AMLUSB_B20                                         (0xff63a000 + (0x014 << 2))
+#define   P_AMLUSB_B20                                         (volatile uint32_t *)(0xff63a000 + (0x014 << 2))
+#define     AMLUSB_B21                                         (0xff63a000 + (0x015 << 2))
+#define SEC_AMLUSB_B21                                         (0xff63a000 + (0x015 << 2))
+#define   P_AMLUSB_B21                                         (volatile uint32_t *)(0xff63a000 + (0x015 << 2))
+#define     AMLUSB_B22                                         (0xff63a000 + (0x016 << 2))
+#define SEC_AMLUSB_B22                                         (0xff63a000 + (0x016 << 2))
+#define   P_AMLUSB_B22                                         (volatile uint32_t *)(0xff63a000 + (0x016 << 2))
+#define     AMLUSB_B23                                         (0xff63a000 + (0x017 << 2))
+#define SEC_AMLUSB_B23                                         (0xff63a000 + (0x017 << 2))
+#define   P_AMLUSB_B23                                         (volatile uint32_t *)(0xff63a000 + (0x017 << 2))
+#define     AMLUSB_B24                                         (0xff63a000 + (0x018 << 2))
+#define SEC_AMLUSB_B24                                         (0xff63a000 + (0x018 << 2))
+#define   P_AMLUSB_B24                                         (volatile uint32_t *)(0xff63a000 + (0x018 << 2))
+#define     AMLUSB_B25                                         (0xff63a000 + (0x019 << 2))
+#define SEC_AMLUSB_B25                                         (0xff63a000 + (0x019 << 2))
+#define   P_AMLUSB_B25                                         (volatile uint32_t *)(0xff63a000 + (0x019 << 2))
+#define     AMLUSB_B26                                         (0xff63a000 + (0x01a << 2))
+#define SEC_AMLUSB_B26                                         (0xff63a000 + (0x01a << 2))
+#define   P_AMLUSB_B26                                         (volatile uint32_t *)(0xff63a000 + (0x01a << 2))
+#define     AMLUSB_B27                                         (0xff63a000 + (0x01b << 2))
+#define SEC_AMLUSB_B27                                         (0xff63a000 + (0x01b << 2))
+#define   P_AMLUSB_B27                                         (volatile uint32_t *)(0xff63a000 + (0x01b << 2))
+#define     AMLUSB_B28                                         (0xff63a000 + (0x01c << 2))
+#define SEC_AMLUSB_B28                                         (0xff63a000 + (0x01c << 2))
+#define   P_AMLUSB_B28                                         (volatile uint32_t *)(0xff63a000 + (0x01c << 2))
+#define     AMLUSB_B29                                         (0xff63a000 + (0x01d << 2))
+#define SEC_AMLUSB_B29                                         (0xff63a000 + (0x01d << 2))
+#define   P_AMLUSB_B29                                         (volatile uint32_t *)(0xff63a000 + (0x01d << 2))
+#define     AMLUSB_B30                                         (0xff63a000 + (0x01e << 2))
+#define SEC_AMLUSB_B30                                         (0xff63a000 + (0x01e << 2))
+#define   P_AMLUSB_B30                                         (volatile uint32_t *)(0xff63a000 + (0x01e << 2))
+#define     AMLUSB_B31                                         (0xff63a000 + (0x01f << 2))
+#define SEC_AMLUSB_B31                                         (0xff63a000 + (0x01f << 2))
+#define   P_AMLUSB_B31                                         (volatile uint32_t *)(0xff63a000 + (0x01f << 2))
+//========================================================================
+//  PERIPHS
+//========================================================================
+//  APB4_DECODER_NON_SECURE_BASE     32'hFF634400
+//  APB4_DECODER_SECURE_BASE         32'hFF634400
+// The following are handled by $periphs/rtl/periphs_reg.v
+//`define PREG_CTLREG0_ADDR                       8'h00
+// ----------------------------
+// ----------------------------
+//`define PREG_JTAG_GPIO_ADDR                     8'h0b   // DWORD base address (0xc120002c >> 2)
+// ----------------------------
+// Pre-defined GPIO addresses
+// ----------------------------
+#define     PREG_PAD_GPIO0_EN_N                                (0xff634400 + (0x010 << 2))
+#define SEC_PREG_PAD_GPIO0_EN_N                                (0xff634400 + (0x010 << 2))
+#define   P_PREG_PAD_GPIO0_EN_N                                (volatile uint32_t *)(0xff634400 + (0x010 << 2))
+#define     PREG_PAD_GPIO0_O                                   (0xff634400 + (0x011 << 2))
+#define SEC_PREG_PAD_GPIO0_O                                   (0xff634400 + (0x011 << 2))
+#define   P_PREG_PAD_GPIO0_O                                   (volatile uint32_t *)(0xff634400 + (0x011 << 2))
+#define     PREG_PAD_GPIO0_I                                   (0xff634400 + (0x012 << 2))
+#define SEC_PREG_PAD_GPIO0_I                                   (0xff634400 + (0x012 << 2))
+#define   P_PREG_PAD_GPIO0_I                                   (volatile uint32_t *)(0xff634400 + (0x012 << 2))
+// ----------------------------
+#define     PREG_PAD_GPIO1_EN_N                                (0xff634400 + (0x013 << 2))
+#define SEC_PREG_PAD_GPIO1_EN_N                                (0xff634400 + (0x013 << 2))
+#define   P_PREG_PAD_GPIO1_EN_N                                (volatile uint32_t *)(0xff634400 + (0x013 << 2))
+#define     PREG_PAD_GPIO1_O                                   (0xff634400 + (0x014 << 2))
+#define SEC_PREG_PAD_GPIO1_O                                   (0xff634400 + (0x014 << 2))
+#define   P_PREG_PAD_GPIO1_O                                   (volatile uint32_t *)(0xff634400 + (0x014 << 2))
+#define     PREG_PAD_GPIO1_I                                   (0xff634400 + (0x015 << 2))
+#define SEC_PREG_PAD_GPIO1_I                                   (0xff634400 + (0x015 << 2))
+#define   P_PREG_PAD_GPIO1_I                                   (volatile uint32_t *)(0xff634400 + (0x015 << 2))
+// ----------------------------
+#define     PREG_PAD_GPIO2_EN_N                                (0xff634400 + (0x016 << 2))
+#define SEC_PREG_PAD_GPIO2_EN_N                                (0xff634400 + (0x016 << 2))
+#define   P_PREG_PAD_GPIO2_EN_N                                (volatile uint32_t *)(0xff634400 + (0x016 << 2))
+#define     PREG_PAD_GPIO2_O                                   (0xff634400 + (0x017 << 2))
+#define SEC_PREG_PAD_GPIO2_O                                   (0xff634400 + (0x017 << 2))
+#define   P_PREG_PAD_GPIO2_O                                   (volatile uint32_t *)(0xff634400 + (0x017 << 2))
+#define     PREG_PAD_GPIO2_I                                   (0xff634400 + (0x018 << 2))
+#define SEC_PREG_PAD_GPIO2_I                                   (0xff634400 + (0x018 << 2))
+#define   P_PREG_PAD_GPIO2_I                                   (volatile uint32_t *)(0xff634400 + (0x018 << 2))
+// ----------------------------
+#define     PREG_PAD_GPIO3_EN_N                                (0xff634400 + (0x019 << 2))
+#define SEC_PREG_PAD_GPIO3_EN_N                                (0xff634400 + (0x019 << 2))
+#define   P_PREG_PAD_GPIO3_EN_N                                (volatile uint32_t *)(0xff634400 + (0x019 << 2))
+#define     PREG_PAD_GPIO3_O                                   (0xff634400 + (0x01a << 2))
+#define SEC_PREG_PAD_GPIO3_O                                   (0xff634400 + (0x01a << 2))
+#define   P_PREG_PAD_GPIO3_O                                   (volatile uint32_t *)(0xff634400 + (0x01a << 2))
+#define     PREG_PAD_GPIO3_I                                   (0xff634400 + (0x01b << 2))
+#define SEC_PREG_PAD_GPIO3_I                                   (0xff634400 + (0x01b << 2))
+#define   P_PREG_PAD_GPIO3_I                                   (volatile uint32_t *)(0xff634400 + (0x01b << 2))
+// ----------------------------
+#define     PREG_PAD_GPIO4_EN_N                                (0xff634400 + (0x01c << 2))
+#define SEC_PREG_PAD_GPIO4_EN_N                                (0xff634400 + (0x01c << 2))
+#define   P_PREG_PAD_GPIO4_EN_N                                (volatile uint32_t *)(0xff634400 + (0x01c << 2))
+#define     PREG_PAD_GPIO4_O                                   (0xff634400 + (0x01d << 2))
+#define SEC_PREG_PAD_GPIO4_O                                   (0xff634400 + (0x01d << 2))
+#define   P_PREG_PAD_GPIO4_O                                   (volatile uint32_t *)(0xff634400 + (0x01d << 2))
+#define     PREG_PAD_GPIO4_I                                   (0xff634400 + (0x01e << 2))
+#define SEC_PREG_PAD_GPIO4_I                                   (0xff634400 + (0x01e << 2))
+#define   P_PREG_PAD_GPIO4_I                                   (volatile uint32_t *)(0xff634400 + (0x01e << 2))
+// ----------------------------
+#define     PREG_PAD_GPIO5_EN_N                                (0xff634400 + (0x020 << 2))
+#define SEC_PREG_PAD_GPIO5_EN_N                                (0xff634400 + (0x020 << 2))
+#define   P_PREG_PAD_GPIO5_EN_N                                (volatile uint32_t *)(0xff634400 + (0x020 << 2))
+#define     PREG_PAD_GPIO5_O                                   (0xff634400 + (0x021 << 2))
+#define SEC_PREG_PAD_GPIO5_O                                   (0xff634400 + (0x021 << 2))
+#define   P_PREG_PAD_GPIO5_O                                   (volatile uint32_t *)(0xff634400 + (0x021 << 2))
+#define     PREG_PAD_GPIO5_I                                   (0xff634400 + (0x022 << 2))
+#define SEC_PREG_PAD_GPIO5_I                                   (0xff634400 + (0x022 << 2))
+#define   P_PREG_PAD_GPIO5_I                                   (volatile uint32_t *)(0xff634400 + (0x022 << 2))
+// ----------------------------
+// ----------------------------
+// Pad conntrols
+// ----------------------------
+//`define PAD_PULL_UP_REG6                    8'h39
+#define     PAD_PULL_UP_REG0                                   (0xff634400 + (0x03a << 2))
+#define SEC_PAD_PULL_UP_REG0                                   (0xff634400 + (0x03a << 2))
+#define   P_PAD_PULL_UP_REG0                                   (volatile uint32_t *)(0xff634400 + (0x03a << 2))
+#define     PAD_PULL_UP_REG1                                   (0xff634400 + (0x03b << 2))
+#define SEC_PAD_PULL_UP_REG1                                   (0xff634400 + (0x03b << 2))
+#define   P_PAD_PULL_UP_REG1                                   (volatile uint32_t *)(0xff634400 + (0x03b << 2))
+#define     PAD_PULL_UP_REG2                                   (0xff634400 + (0x03c << 2))
+#define SEC_PAD_PULL_UP_REG2                                   (0xff634400 + (0x03c << 2))
+#define   P_PAD_PULL_UP_REG2                                   (volatile uint32_t *)(0xff634400 + (0x03c << 2))
+#define     PAD_PULL_UP_REG3                                   (0xff634400 + (0x03d << 2))
+#define SEC_PAD_PULL_UP_REG3                                   (0xff634400 + (0x03d << 2))
+#define   P_PAD_PULL_UP_REG3                                   (volatile uint32_t *)(0xff634400 + (0x03d << 2))
+#define     PAD_PULL_UP_REG4                                   (0xff634400 + (0x03e << 2))
+#define SEC_PAD_PULL_UP_REG4                                   (0xff634400 + (0x03e << 2))
+#define   P_PAD_PULL_UP_REG4                                   (volatile uint32_t *)(0xff634400 + (0x03e << 2))
+#define     PAD_PULL_UP_REG5                                   (0xff634400 + (0x03f << 2))
+#define SEC_PAD_PULL_UP_REG5                                   (0xff634400 + (0x03f << 2))
+#define   P_PAD_PULL_UP_REG5                                   (volatile uint32_t *)(0xff634400 + (0x03f << 2))
+// ----------------------------
+// Random (2)
+// ----------------------------
+//`define RAND64_ADDR0                        8'h40       // DWORD base address (0xc1200138 >> 2)
+//`define RAND64_ADDR1                        8'h41       // DWORD base address (0xc120013c >> 2)
+// ---------------------------
+// Ethernet (1)
+// ----------------------------
+//`define PREG_ETHERNET_ADDR0                 8'h42       // DWORD base address (0xc1200290 >> 2)
+// ---------------------------
+// AM_ANALOG_TOP
+// ----------------------------
+//`define PREG_AM_ANALOG_ADDR                 8'h43       // DWORD base address (0xc1200298 >> 2)
+// ---------------------------
+// Mali55 (1)
+// ----------------------------
+//`define PREG_MALI_BYTE_CNTL                 8'h44
+// ---------------------------
+// WIFI (1)
+// ----------------------------
+//`define PREG_WIFI_CNTL                      8'h45
+#define     PAD_PULL_UP_EN_REG0                                (0xff634400 + (0x048 << 2))
+#define SEC_PAD_PULL_UP_EN_REG0                                (0xff634400 + (0x048 << 2))
+#define   P_PAD_PULL_UP_EN_REG0                                (volatile uint32_t *)(0xff634400 + (0x048 << 2))
+#define     PAD_PULL_UP_EN_REG1                                (0xff634400 + (0x049 << 2))
+#define SEC_PAD_PULL_UP_EN_REG1                                (0xff634400 + (0x049 << 2))
+#define   P_PAD_PULL_UP_EN_REG1                                (volatile uint32_t *)(0xff634400 + (0x049 << 2))
+#define     PAD_PULL_UP_EN_REG2                                (0xff634400 + (0x04a << 2))
+#define SEC_PAD_PULL_UP_EN_REG2                                (0xff634400 + (0x04a << 2))
+#define   P_PAD_PULL_UP_EN_REG2                                (volatile uint32_t *)(0xff634400 + (0x04a << 2))
+#define     PAD_PULL_UP_EN_REG3                                (0xff634400 + (0x04b << 2))
+#define SEC_PAD_PULL_UP_EN_REG3                                (0xff634400 + (0x04b << 2))
+#define   P_PAD_PULL_UP_EN_REG3                                (volatile uint32_t *)(0xff634400 + (0x04b << 2))
+#define     PAD_PULL_UP_EN_REG4                                (0xff634400 + (0x04c << 2))
+#define SEC_PAD_PULL_UP_EN_REG4                                (0xff634400 + (0x04c << 2))
+#define   P_PAD_PULL_UP_EN_REG4                                (volatile uint32_t *)(0xff634400 + (0x04c << 2))
+#define     PAD_PULL_UP_EN_REG5                                (0xff634400 + (0x04d << 2))
+#define SEC_PAD_PULL_UP_EN_REG5                                (0xff634400 + (0x04d << 2))
+#define   P_PAD_PULL_UP_EN_REG5                                (volatile uint32_t *)(0xff634400 + (0x04d << 2))
+//`define PAD_PULL_UP_EN_REG6                 8'h4e
+// ---------------------------
+#define     PREG_ETH_REG0                                      (0xff634400 + (0x050 << 2))
+#define SEC_PREG_ETH_REG0                                      (0xff634400 + (0x050 << 2))
+#define   P_PREG_ETH_REG0                                      (volatile uint32_t *)(0xff634400 + (0x050 << 2))
+#define     PREG_ETH_REG1                                      (0xff634400 + (0x051 << 2))
+#define SEC_PREG_ETH_REG1                                      (0xff634400 + (0x051 << 2))
+#define   P_PREG_ETH_REG1                                      (volatile uint32_t *)(0xff634400 + (0x051 << 2))
+#define     PREG_NAND_CFG_KEY0                                 (0xff634400 + (0x052 << 2))
+#define SEC_PREG_NAND_CFG_KEY0                                 (0xff634400 + (0x052 << 2))
+#define   P_PREG_NAND_CFG_KEY0                                 (volatile uint32_t *)(0xff634400 + (0x052 << 2))
+#define     PREG_NAND_CFG_KEY1                                 (0xff634400 + (0x053 << 2))
+#define SEC_PREG_NAND_CFG_KEY1                                 (0xff634400 + (0x053 << 2))
+#define   P_PREG_NAND_CFG_KEY1                                 (volatile uint32_t *)(0xff634400 + (0x053 << 2))
+#define     PREG_VPU_SECURE0                                   (0xff634400 + (0x054 << 2))
+#define SEC_PREG_VPU_SECURE0                                   (0xff634400 + (0x054 << 2))
+#define   P_PREG_VPU_SECURE0                                   (volatile uint32_t *)(0xff634400 + (0x054 << 2))
+#define     PREG_VPU_SECURE1                                   (0xff634400 + (0x055 << 2))
+#define SEC_PREG_VPU_SECURE1                                   (0xff634400 + (0x055 << 2))
+#define   P_PREG_VPU_SECURE1                                   (volatile uint32_t *)(0xff634400 + (0x055 << 2))
+#define     PREG_ETH_REG2                                      (0xff634400 + (0x056 << 2))
+#define SEC_PREG_ETH_REG2                                      (0xff634400 + (0x056 << 2))
+#define   P_PREG_ETH_REG2                                      (volatile uint32_t *)(0xff634400 + (0x056 << 2))
+#define     PREG_ETH_REG3                                      (0xff634400 + (0x057 << 2))
+#define SEC_PREG_ETH_REG3                                      (0xff634400 + (0x057 << 2))
+#define   P_PREG_ETH_REG3                                      (volatile uint32_t *)(0xff634400 + (0x057 << 2))
+#define     PREG_ETH_REG4                                      (0xff634400 + (0x058 << 2))
+#define SEC_PREG_ETH_REG4                                      (0xff634400 + (0x058 << 2))
+#define   P_PREG_ETH_REG4                                      (volatile uint32_t *)(0xff634400 + (0x058 << 2))
+// ---------------------------
+// Generic production test
+// ----------------------------
+#define     PROD_TEST_REG0                                     (0xff634400 + (0x060 << 2))
+#define SEC_PROD_TEST_REG0                                     (0xff634400 + (0x060 << 2))
+#define   P_PROD_TEST_REG0                                     (volatile uint32_t *)(0xff634400 + (0x060 << 2))
+#define     PROD_TEST_REG1                                     (0xff634400 + (0x061 << 2))
+#define SEC_PROD_TEST_REG1                                     (0xff634400 + (0x061 << 2))
+#define   P_PROD_TEST_REG1                                     (volatile uint32_t *)(0xff634400 + (0x061 << 2))
+#define     PROD_TEST_REG2                                     (0xff634400 + (0x062 << 2))
+#define SEC_PROD_TEST_REG2                                     (0xff634400 + (0x062 << 2))
+#define   P_PROD_TEST_REG2                                     (volatile uint32_t *)(0xff634400 + (0x062 << 2))
+#define     PROD_TEST_REG3                                     (0xff634400 + (0x063 << 2))
+#define SEC_PROD_TEST_REG3                                     (0xff634400 + (0x063 << 2))
+#define   P_PROD_TEST_REG3                                     (volatile uint32_t *)(0xff634400 + (0x063 << 2))
+// am_analog_top
+// ----------------------------
+//`define METAL_REVISION                      8'h6a
+//`define ADC_TOP_MISC                        8'h6b
+//`define DPLL_TOP_MISC                       8'h6c
+//`define ANALOG_TOP_MISC                     8'h6d
+//`define AM_ANALOG_TOP_REG0                  8'h6e
+//`define AM_ANALOG_TOP_REG1                  8'h6f
+// ---------------------------
+// Sticky regs
+// ----------------------------
+#define     PREG_STICKY_REG0                                   (0xff634400 + (0x070 << 2))
+#define SEC_PREG_STICKY_REG0                                   (0xff634400 + (0x070 << 2))
+#define   P_PREG_STICKY_REG0                                   (volatile uint32_t *)(0xff634400 + (0x070 << 2))
+#define     PREG_STICKY_REG1                                   (0xff634400 + (0x071 << 2))
+#define SEC_PREG_STICKY_REG1                                   (0xff634400 + (0x071 << 2))
+#define   P_PREG_STICKY_REG1                                   (volatile uint32_t *)(0xff634400 + (0x071 << 2))
+#define     PREG_STICKY_REG2                                   (0xff634400 + (0x072 << 2))
+#define SEC_PREG_STICKY_REG2                                   (0xff634400 + (0x072 << 2))
+#define   P_PREG_STICKY_REG2                                   (volatile uint32_t *)(0xff634400 + (0x072 << 2))
+#define     PREG_STICKY_REG3                                   (0xff634400 + (0x073 << 2))
+#define SEC_PREG_STICKY_REG3                                   (0xff634400 + (0x073 << 2))
+#define   P_PREG_STICKY_REG3                                   (volatile uint32_t *)(0xff634400 + (0x073 << 2))
+#define     PREG_STICKY_REG4                                   (0xff634400 + (0x074 << 2))
+#define SEC_PREG_STICKY_REG4                                   (0xff634400 + (0x074 << 2))
+#define   P_PREG_STICKY_REG4                                   (volatile uint32_t *)(0xff634400 + (0x074 << 2))
+#define     PREG_STICKY_REG5                                   (0xff634400 + (0x075 << 2))
+#define SEC_PREG_STICKY_REG5                                   (0xff634400 + (0x075 << 2))
+#define   P_PREG_STICKY_REG5                                   (volatile uint32_t *)(0xff634400 + (0x075 << 2))
+#define     PREG_STICKY_REG6                                   (0xff634400 + (0x076 << 2))
+#define SEC_PREG_STICKY_REG6                                   (0xff634400 + (0x076 << 2))
+#define   P_PREG_STICKY_REG6                                   (volatile uint32_t *)(0xff634400 + (0x076 << 2))
+#define     PREG_STICKY_REG7                                   (0xff634400 + (0x077 << 2))
+#define SEC_PREG_STICKY_REG7                                   (0xff634400 + (0x077 << 2))
+#define   P_PREG_STICKY_REG7                                   (volatile uint32_t *)(0xff634400 + (0x077 << 2))
+#define     PREG_STICKY_REG8                                   (0xff634400 + (0x078 << 2))
+#define SEC_PREG_STICKY_REG8                                   (0xff634400 + (0x078 << 2))
+#define   P_PREG_STICKY_REG8                                   (volatile uint32_t *)(0xff634400 + (0x078 << 2))
+#define     PREG_STICKY_REG9                                   (0xff634400 + (0x079 << 2))
+#define SEC_PREG_STICKY_REG9                                   (0xff634400 + (0x079 << 2))
+#define   P_PREG_STICKY_REG9                                   (volatile uint32_t *)(0xff634400 + (0x079 << 2))
+//`define PREG_WRITE_ONCE_REG                 8'h7e
+// ---------------------------
+// AM Ring Oscillator
+// ----------------------------
+#define     AM_RING_OSC_REG0                                   (0xff634400 + (0x07f << 2))
+#define SEC_AM_RING_OSC_REG0                                   (0xff634400 + (0x07f << 2))
+#define   P_AM_RING_OSC_REG0                                   (volatile uint32_t *)(0xff634400 + (0x07f << 2))
+// Control whether to provide random number to HDMITX20
+//`define HDMITX20_RNDNUM                     8'h80
+// ---------------------------
+// Bus Monitoring
+// ----------------------------
+#define     BUS_MONITOR_CNTL                                   (0xff634400 + (0x081 << 2))
+#define SEC_BUS_MONITOR_CNTL                                   (0xff634400 + (0x081 << 2))
+#define   P_BUS_MONITOR_CNTL                                   (volatile uint32_t *)(0xff634400 + (0x081 << 2))
+#define     BUS_MON0_ADDR                                      (0xff634400 + (0x082 << 2))
+#define SEC_BUS_MON0_ADDR                                      (0xff634400 + (0x082 << 2))
+#define   P_BUS_MON0_ADDR                                      (volatile uint32_t *)(0xff634400 + (0x082 << 2))
+#define     BUS_MON0_DATA                                      (0xff634400 + (0x083 << 2))
+#define SEC_BUS_MON0_DATA                                      (0xff634400 + (0x083 << 2))
+#define   P_BUS_MON0_DATA                                      (volatile uint32_t *)(0xff634400 + (0x083 << 2))
+#define     BUS_MON0_DATA_MSK                                  (0xff634400 + (0x084 << 2))
+#define SEC_BUS_MON0_DATA_MSK                                  (0xff634400 + (0x084 << 2))
+#define   P_BUS_MON0_DATA_MSK                                  (volatile uint32_t *)(0xff634400 + (0x084 << 2))
+#define     BUS_MON1_ADDR                                      (0xff634400 + (0x085 << 2))
+#define SEC_BUS_MON1_ADDR                                      (0xff634400 + (0x085 << 2))
+#define   P_BUS_MON1_ADDR                                      (volatile uint32_t *)(0xff634400 + (0x085 << 2))
+#define     BUS_MON1_DATA                                      (0xff634400 + (0x086 << 2))
+#define SEC_BUS_MON1_DATA                                      (0xff634400 + (0x086 << 2))
+#define   P_BUS_MON1_DATA                                      (volatile uint32_t *)(0xff634400 + (0x086 << 2))
+#define     BUS_MON1_DATA_MSK                                  (0xff634400 + (0x087 << 2))
+#define SEC_BUS_MON1_DATA_MSK                                  (0xff634400 + (0x087 << 2))
+#define   P_BUS_MON1_DATA_MSK                                  (volatile uint32_t *)(0xff634400 + (0x087 << 2))
+#define     ASYNC_FIFO_LOCK_ADR                                (0xff634400 + (0x088 << 2))
+#define SEC_ASYNC_FIFO_LOCK_ADR                                (0xff634400 + (0x088 << 2))
+#define   P_ASYNC_FIFO_LOCK_ADR                                (volatile uint32_t *)(0xff634400 + (0x088 << 2))
+#define     SECE_TIMER_CTRL                                    (0xff634400 + (0x089 << 2))
+#define SEC_SECE_TIMER_CTRL                                    (0xff634400 + (0x089 << 2))
+#define   P_SECE_TIMER_CTRL                                    (volatile uint32_t *)(0xff634400 + (0x089 << 2))
+#define     SECE_TIMER_LOW                                     (0xff634400 + (0x08a << 2))
+#define SEC_SECE_TIMER_LOW                                     (0xff634400 + (0x08a << 2))
+#define   P_SECE_TIMER_LOW                                     (volatile uint32_t *)(0xff634400 + (0x08a << 2))
+#define     SECE_TIMER_HIG                                     (0xff634400 + (0x08b << 2))
+#define SEC_SECE_TIMER_HIG                                     (0xff634400 + (0x08b << 2))
+#define   P_SECE_TIMER_HIG                                     (volatile uint32_t *)(0xff634400 + (0x08b << 2))
+// ---------------------------
+// System CPU control registers
+// ----------------------------
+#define     SYS_CPU_POR_CFG0                                   (0xff634400 + (0x090 << 2))
+#define SEC_SYS_CPU_POR_CFG0                                   (0xff634400 + (0x090 << 2))
+#define   P_SYS_CPU_POR_CFG0                                   (volatile uint32_t *)(0xff634400 + (0x090 << 2))
+#define     SYS_CPU_POR_CFG1                                   (0xff634400 + (0x091 << 2))
+#define SEC_SYS_CPU_POR_CFG1                                   (0xff634400 + (0x091 << 2))
+#define   P_SYS_CPU_POR_CFG1                                   (volatile uint32_t *)(0xff634400 + (0x091 << 2))
+#define     SYS_CPU_CFG0                                       (0xff634400 + (0x092 << 2))
+#define SEC_SYS_CPU_CFG0                                       (0xff634400 + (0x092 << 2))
+#define   P_SYS_CPU_CFG0                                       (volatile uint32_t *)(0xff634400 + (0x092 << 2))
+#define     SYS_CPU_CFG1                                       (0xff634400 + (0x093 << 2))
+#define SEC_SYS_CPU_CFG1                                       (0xff634400 + (0x093 << 2))
+#define   P_SYS_CPU_CFG1                                       (volatile uint32_t *)(0xff634400 + (0x093 << 2))
+#define     SYS_CPU_CFG2                                       (0xff634400 + (0x094 << 2))
+#define SEC_SYS_CPU_CFG2                                       (0xff634400 + (0x094 << 2))
+#define   P_SYS_CPU_CFG2                                       (volatile uint32_t *)(0xff634400 + (0x094 << 2))
+#define     SYS_CPU_CFG3                                       (0xff634400 + (0x095 << 2))
+#define SEC_SYS_CPU_CFG3                                       (0xff634400 + (0x095 << 2))
+#define   P_SYS_CPU_CFG3                                       (volatile uint32_t *)(0xff634400 + (0x095 << 2))
+#define     SYS_CPU_CFG4                                       (0xff634400 + (0x096 << 2))
+#define SEC_SYS_CPU_CFG4                                       (0xff634400 + (0x096 << 2))
+#define   P_SYS_CPU_CFG4                                       (volatile uint32_t *)(0xff634400 + (0x096 << 2))
+#define     SYS_CPU_CFG5                                       (0xff634400 + (0x097 << 2))
+#define SEC_SYS_CPU_CFG5                                       (0xff634400 + (0x097 << 2))
+#define   P_SYS_CPU_CFG5                                       (volatile uint32_t *)(0xff634400 + (0x097 << 2))
+#define     SYS_CPU_CFG6                                       (0xff634400 + (0x098 << 2))
+#define SEC_SYS_CPU_CFG6                                       (0xff634400 + (0x098 << 2))
+#define   P_SYS_CPU_CFG6                                       (volatile uint32_t *)(0xff634400 + (0x098 << 2))
+#define     SYS_CPU_CFG7                                       (0xff634400 + (0x099 << 2))
+#define SEC_SYS_CPU_CFG7                                       (0xff634400 + (0x099 << 2))
+#define   P_SYS_CPU_CFG7                                       (volatile uint32_t *)(0xff634400 + (0x099 << 2))
+#define     SYS_CPU_CFG8                                       (0xff634400 + (0x09a << 2))
+#define SEC_SYS_CPU_CFG8                                       (0xff634400 + (0x09a << 2))
+#define   P_SYS_CPU_CFG8                                       (volatile uint32_t *)(0xff634400 + (0x09a << 2))
+#define     SYS_CPU_CFG9                                       (0xff634400 + (0x09b << 2))
+#define SEC_SYS_CPU_CFG9                                       (0xff634400 + (0x09b << 2))
+#define   P_SYS_CPU_CFG9                                       (volatile uint32_t *)(0xff634400 + (0x09b << 2))
+#define     SYS_CPU_CFG10                                      (0xff634400 + (0x09c << 2))
+#define SEC_SYS_CPU_CFG10                                      (0xff634400 + (0x09c << 2))
+#define   P_SYS_CPU_CFG10                                      (volatile uint32_t *)(0xff634400 + (0x09c << 2))
+//`define SYS_CPU_CFG11                       8'h9d
+//`define SYS_CPU_CFG12                       8'h9e
+//`define SYS_CPU_CFG13                       8'h9f
+#define     SYS_CPU_STATUS0                                    (0xff634400 + (0x0a0 << 2))
+#define SEC_SYS_CPU_STATUS0                                    (0xff634400 + (0x0a0 << 2))
+#define   P_SYS_CPU_STATUS0                                    (volatile uint32_t *)(0xff634400 + (0x0a0 << 2))
+#define     SYS_CPU_STATUS1                                    (0xff634400 + (0x0a1 << 2))
+#define SEC_SYS_CPU_STATUS1                                    (0xff634400 + (0x0a1 << 2))
+#define   P_SYS_CPU_STATUS1                                    (volatile uint32_t *)(0xff634400 + (0x0a1 << 2))
+#define     SYS_CPU_STATUS2                                    (0xff634400 + (0x0a2 << 2))
+#define SEC_SYS_CPU_STATUS2                                    (0xff634400 + (0x0a2 << 2))
+#define   P_SYS_CPU_STATUS2                                    (volatile uint32_t *)(0xff634400 + (0x0a2 << 2))
+#define     SYS_CPU_STATUS3                                    (0xff634400 + (0x0a3 << 2))
+#define SEC_SYS_CPU_STATUS3                                    (0xff634400 + (0x0a3 << 2))
+#define   P_SYS_CPU_STATUS3                                    (volatile uint32_t *)(0xff634400 + (0x0a3 << 2))
+#define     SYS_CPU_STATUS4                                    (0xff634400 + (0x0a4 << 2))
+#define SEC_SYS_CPU_STATUS4                                    (0xff634400 + (0x0a4 << 2))
+#define   P_SYS_CPU_STATUS4                                    (volatile uint32_t *)(0xff634400 + (0x0a4 << 2))
+#define     SYS_CPU_STATUS5                                    (0xff634400 + (0x0a5 << 2))
+#define SEC_SYS_CPU_STATUS5                                    (0xff634400 + (0x0a5 << 2))
+#define   P_SYS_CPU_STATUS5                                    (volatile uint32_t *)(0xff634400 + (0x0a5 << 2))
+#define     SYS_CPU_MISC                                       (0xff634400 + (0x0a8 << 2))
+#define SEC_SYS_CPU_MISC                                       (0xff634400 + (0x0a8 << 2))
+#define   P_SYS_CPU_MISC                                       (volatile uint32_t *)(0xff634400 + (0x0a8 << 2))
+// ----------------------------
+// Pin Mux  (9)
+// ----------------------------
+#define     PERIPHS_LOCK_PAD                                   (0xff634400 + (0x0ae << 2))
+#define SEC_PERIPHS_LOCK_PAD                                   (0xff634400 + (0x0ae << 2))
+#define   P_PERIPHS_LOCK_PAD                                   (volatile uint32_t *)(0xff634400 + (0x0ae << 2))
+#define     PERIPHS_LOCK_PIN_MUX                               (0xff634400 + (0x0af << 2))
+#define SEC_PERIPHS_LOCK_PIN_MUX                               (0xff634400 + (0x0af << 2))
+#define   P_PERIPHS_LOCK_PIN_MUX                               (volatile uint32_t *)(0xff634400 + (0x0af << 2))
+#define     PERIPHS_PIN_MUX_0                                  (0xff634400 + (0x0b0 << 2))
+#define SEC_PERIPHS_PIN_MUX_0                                  (0xff634400 + (0x0b0 << 2))
+#define   P_PERIPHS_PIN_MUX_0                                  (volatile uint32_t *)(0xff634400 + (0x0b0 << 2))
+#define     PERIPHS_PIN_MUX_1                                  (0xff634400 + (0x0b1 << 2))
+#define SEC_PERIPHS_PIN_MUX_1                                  (0xff634400 + (0x0b1 << 2))
+#define   P_PERIPHS_PIN_MUX_1                                  (volatile uint32_t *)(0xff634400 + (0x0b1 << 2))
+#define     PERIPHS_PIN_MUX_2                                  (0xff634400 + (0x0b2 << 2))
+#define SEC_PERIPHS_PIN_MUX_2                                  (0xff634400 + (0x0b2 << 2))
+#define   P_PERIPHS_PIN_MUX_2                                  (volatile uint32_t *)(0xff634400 + (0x0b2 << 2))
+#define     PERIPHS_PIN_MUX_3                                  (0xff634400 + (0x0b3 << 2))
+#define SEC_PERIPHS_PIN_MUX_3                                  (0xff634400 + (0x0b3 << 2))
+#define   P_PERIPHS_PIN_MUX_3                                  (volatile uint32_t *)(0xff634400 + (0x0b3 << 2))
+#define     PERIPHS_PIN_MUX_4                                  (0xff634400 + (0x0b4 << 2))
+#define SEC_PERIPHS_PIN_MUX_4                                  (0xff634400 + (0x0b4 << 2))
+#define   P_PERIPHS_PIN_MUX_4                                  (volatile uint32_t *)(0xff634400 + (0x0b4 << 2))
+#define     PERIPHS_PIN_MUX_5                                  (0xff634400 + (0x0b5 << 2))
+#define SEC_PERIPHS_PIN_MUX_5                                  (0xff634400 + (0x0b5 << 2))
+#define   P_PERIPHS_PIN_MUX_5                                  (volatile uint32_t *)(0xff634400 + (0x0b5 << 2))
+#define     PERIPHS_PIN_MUX_6                                  (0xff634400 + (0x0b6 << 2))
+#define SEC_PERIPHS_PIN_MUX_6                                  (0xff634400 + (0x0b6 << 2))
+#define   P_PERIPHS_PIN_MUX_6                                  (volatile uint32_t *)(0xff634400 + (0x0b6 << 2))
+#define     PERIPHS_PIN_MUX_7                                  (0xff634400 + (0x0b7 << 2))
+#define SEC_PERIPHS_PIN_MUX_7                                  (0xff634400 + (0x0b7 << 2))
+#define   P_PERIPHS_PIN_MUX_7                                  (volatile uint32_t *)(0xff634400 + (0x0b7 << 2))
+#define     PERIPHS_PIN_MUX_8                                  (0xff634400 + (0x0b8 << 2))
+#define SEC_PERIPHS_PIN_MUX_8                                  (0xff634400 + (0x0b8 << 2))
+#define   P_PERIPHS_PIN_MUX_8                                  (volatile uint32_t *)(0xff634400 + (0x0b8 << 2))
+#define     PERIPHS_PIN_MUX_9                                  (0xff634400 + (0x0b9 << 2))
+#define SEC_PERIPHS_PIN_MUX_9                                  (0xff634400 + (0x0b9 << 2))
+#define   P_PERIPHS_PIN_MUX_9                                  (volatile uint32_t *)(0xff634400 + (0x0b9 << 2))
+#define     PERIPHS_PIN_MUX_A                                  (0xff634400 + (0x0ba << 2))
+#define SEC_PERIPHS_PIN_MUX_A                                  (0xff634400 + (0x0ba << 2))
+#define   P_PERIPHS_PIN_MUX_A                                  (volatile uint32_t *)(0xff634400 + (0x0ba << 2))
+#define     PERIPHS_PIN_MUX_B                                  (0xff634400 + (0x0bb << 2))
+#define SEC_PERIPHS_PIN_MUX_B                                  (0xff634400 + (0x0bb << 2))
+#define   P_PERIPHS_PIN_MUX_B                                  (volatile uint32_t *)(0xff634400 + (0x0bb << 2))
+#define     PERIPHS_PIN_MUX_C                                  (0xff634400 + (0x0bc << 2))
+#define SEC_PERIPHS_PIN_MUX_C                                  (0xff634400 + (0x0bc << 2))
+#define   P_PERIPHS_PIN_MUX_C                                  (volatile uint32_t *)(0xff634400 + (0x0bc << 2))
+#define     PERIPHS_PIN_MUX_D                                  (0xff634400 + (0x0bd << 2))
+#define SEC_PERIPHS_PIN_MUX_D                                  (0xff634400 + (0x0bd << 2))
+#define   P_PERIPHS_PIN_MUX_D                                  (volatile uint32_t *)(0xff634400 + (0x0bd << 2))
+#define     PERIPHS_PIN_MUX_E                                  (0xff634400 + (0x0be << 2))
+#define SEC_PERIPHS_PIN_MUX_E                                  (0xff634400 + (0x0be << 2))
+#define   P_PERIPHS_PIN_MUX_E                                  (volatile uint32_t *)(0xff634400 + (0x0be << 2))
+#define     PERIPHS_PIN_MUX_F                                  (0xff634400 + (0x0bf << 2))
+#define SEC_PERIPHS_PIN_MUX_F                                  (0xff634400 + (0x0bf << 2))
+#define   P_PERIPHS_PIN_MUX_F                                  (volatile uint32_t *)(0xff634400 + (0x0bf << 2))
+#define     EFUSE_CFG_LOCK                                     (0xff634400 + (0x0c0 << 2))
+#define SEC_EFUSE_CFG_LOCK                                     (0xff634400 + (0x0c0 << 2))
+#define   P_EFUSE_CFG_LOCK                                     (volatile uint32_t *)(0xff634400 + (0x0c0 << 2))
+#define     EFUSE_CLK_A53_CFG01                                (0xff634400 + (0x0c1 << 2))
+#define SEC_EFUSE_CLK_A53_CFG01                                (0xff634400 + (0x0c1 << 2))
+#define   P_EFUSE_CLK_A53_CFG01                                (volatile uint32_t *)(0xff634400 + (0x0c1 << 2))
+#define     EFUSE_CLK_A53_CFG2                                 (0xff634400 + (0x0c2 << 2))
+#define SEC_EFUSE_CLK_A53_CFG2                                 (0xff634400 + (0x0c2 << 2))
+#define   P_EFUSE_CLK_A53_CFG2                                 (volatile uint32_t *)(0xff634400 + (0x0c2 << 2))
+#define     EFUSE_CLK_ENCP_CFG0                                (0xff634400 + (0x0c3 << 2))
+#define SEC_EFUSE_CLK_ENCP_CFG0                                (0xff634400 + (0x0c3 << 2))
+#define   P_EFUSE_CLK_ENCP_CFG0                                (volatile uint32_t *)(0xff634400 + (0x0c3 << 2))
+#define     EFUSE_CLK_MALI_CFG0                                (0xff634400 + (0x0c4 << 2))
+#define SEC_EFUSE_CLK_MALI_CFG0                                (0xff634400 + (0x0c4 << 2))
+#define   P_EFUSE_CLK_MALI_CFG0                                (volatile uint32_t *)(0xff634400 + (0x0c4 << 2))
+#define     EFUSE_CLK_HEVCB_CFG0                               (0xff634400 + (0x0c5 << 2))
+#define SEC_EFUSE_CLK_HEVCB_CFG0                               (0xff634400 + (0x0c5 << 2))
+#define   P_EFUSE_CLK_HEVCB_CFG0                               (volatile uint32_t *)(0xff634400 + (0x0c5 << 2))
+#define     PAD_DS_REG0A                                       (0xff634400 + (0x0d0 << 2))
+#define SEC_PAD_DS_REG0A                                       (0xff634400 + (0x0d0 << 2))
+#define   P_PAD_DS_REG0A                                       (volatile uint32_t *)(0xff634400 + (0x0d0 << 2))
+#define     PAD_DS_REG1A                                       (0xff634400 + (0x0d1 << 2))
+#define SEC_PAD_DS_REG1A                                       (0xff634400 + (0x0d1 << 2))
+#define   P_PAD_DS_REG1A                                       (volatile uint32_t *)(0xff634400 + (0x0d1 << 2))
+#define     PAD_DS_REG2A                                       (0xff634400 + (0x0d2 << 2))
+#define SEC_PAD_DS_REG2A                                       (0xff634400 + (0x0d2 << 2))
+#define   P_PAD_DS_REG2A                                       (volatile uint32_t *)(0xff634400 + (0x0d2 << 2))
+#define     PAD_DS_REG2B                                       (0xff634400 + (0x0d3 << 2))
+#define SEC_PAD_DS_REG2B                                       (0xff634400 + (0x0d3 << 2))
+#define   P_PAD_DS_REG2B                                       (volatile uint32_t *)(0xff634400 + (0x0d3 << 2))
+#define     PAD_DS_REG3A                                       (0xff634400 + (0x0d4 << 2))
+#define SEC_PAD_DS_REG3A                                       (0xff634400 + (0x0d4 << 2))
+#define   P_PAD_DS_REG3A                                       (volatile uint32_t *)(0xff634400 + (0x0d4 << 2))
+#define     PAD_DS_REG4A                                       (0xff634400 + (0x0d5 << 2))
+#define SEC_PAD_DS_REG4A                                       (0xff634400 + (0x0d5 << 2))
+#define   P_PAD_DS_REG4A                                       (volatile uint32_t *)(0xff634400 + (0x0d5 << 2))
+#define     PAD_DS_REG5A                                       (0xff634400 + (0x0d6 << 2))
+#define SEC_PAD_DS_REG5A                                       (0xff634400 + (0x0d6 << 2))
+#define   P_PAD_DS_REG5A                                       (volatile uint32_t *)(0xff634400 + (0x0d6 << 2))
+//========================================================================
+//  RESET_SEC - Registers
+//========================================================================
+// APB4_DECODER_NON_SECURE_BASE     32'hFF64E000
+// APB4_DECODER_SECURE_BASE         32'hFF64E000
+#define     RESET0_SEC_REGISTER                                (0xff64e000 + (0x000 << 2))
+#define SEC_RESET0_SEC_REGISTER                                (0xff64e000 + (0x000 << 2))
+#define   P_RESET0_SEC_REGISTER                                (volatile uint32_t *)(0xff64e000 + (0x000 << 2))
+#define     RESET1_SEC_REGISTER                                (0xff64e000 + (0x001 << 2))
+#define SEC_RESET1_SEC_REGISTER                                (0xff64e000 + (0x001 << 2))
+#define   P_RESET1_SEC_REGISTER                                (volatile uint32_t *)(0xff64e000 + (0x001 << 2))
+#define     RESET2_SEC_REGISTER                                (0xff64e000 + (0x002 << 2))
+#define SEC_RESET2_SEC_REGISTER                                (0xff64e000 + (0x002 << 2))
+#define   P_RESET2_SEC_REGISTER                                (volatile uint32_t *)(0xff64e000 + (0x002 << 2))
+#define     RESET0_SEC_LEVEL                                   (0xff64e000 + (0x010 << 2))
+#define SEC_RESET0_SEC_LEVEL                                   (0xff64e000 + (0x010 << 2))
+#define   P_RESET0_SEC_LEVEL                                   (volatile uint32_t *)(0xff64e000 + (0x010 << 2))
+#define     RESET1_SEC_LEVEL                                   (0xff64e000 + (0x011 << 2))
+#define SEC_RESET1_SEC_LEVEL                                   (0xff64e000 + (0x011 << 2))
+#define   P_RESET1_SEC_LEVEL                                   (volatile uint32_t *)(0xff64e000 + (0x011 << 2))
+#define     RESET2_SEC_LEVEL                                   (0xff64e000 + (0x012 << 2))
+#define SEC_RESET2_SEC_LEVEL                                   (0xff64e000 + (0x012 << 2))
+#define   P_RESET2_SEC_LEVEL                                   (volatile uint32_t *)(0xff64e000 + (0x012 << 2))
+#define     RESET0_SEC_MASK                                    (0xff64e000 + (0x020 << 2))
+#define SEC_RESET0_SEC_MASK                                    (0xff64e000 + (0x020 << 2))
+#define   P_RESET0_SEC_MASK                                    (volatile uint32_t *)(0xff64e000 + (0x020 << 2))
+#define     RESET1_SEC_MASK                                    (0xff64e000 + (0x021 << 2))
+#define SEC_RESET1_SEC_MASK                                    (0xff64e000 + (0x021 << 2))
+#define   P_RESET1_SEC_MASK                                    (volatile uint32_t *)(0xff64e000 + (0x021 << 2))
+#define     RESET2_SEC_MASK                                    (0xff64e000 + (0x022 << 2))
+#define SEC_RESET2_SEC_MASK                                    (0xff64e000 + (0x022 << 2))
+#define   P_RESET2_SEC_MASK                                    (volatile uint32_t *)(0xff64e000 + (0x022 << 2))
+//========================================================================
+//  AUDIO locker - Registers
+//========================================================================
+// APB4_DECODER_NON_SECURE_BASE     32'hFF64a000
+// APB4_DECODER_SECURE_BASE         32'hFF64a000
+#define     AUD_LOCK_EN                                        (0xff64a000 + (0x000 << 2))
+#define SEC_AUD_LOCK_EN                                        (0xff64a000 + (0x000 << 2))
+#define   P_AUD_LOCK_EN                                        (volatile uint32_t *)(0xff64a000 + (0x000 << 2))
+#define     AUD_LOCK_SW_RESET                                  (0xff64a000 + (0x001 << 2))
+#define SEC_AUD_LOCK_SW_RESET                                  (0xff64a000 + (0x001 << 2))
+#define   P_AUD_LOCK_SW_RESET                                  (volatile uint32_t *)(0xff64a000 + (0x001 << 2))
+#define     AUD_LOCK_SW_LATCH                                  (0xff64a000 + (0x002 << 2))
+#define SEC_AUD_LOCK_SW_LATCH                                  (0xff64a000 + (0x002 << 2))
+#define   P_AUD_LOCK_SW_LATCH                                  (volatile uint32_t *)(0xff64a000 + (0x002 << 2))
+#define     AUD_LOCK_HW_LATCH                                  (0xff64a000 + (0x003 << 2))
+#define SEC_AUD_LOCK_HW_LATCH                                  (0xff64a000 + (0x003 << 2))
+#define   P_AUD_LOCK_HW_LATCH                                  (volatile uint32_t *)(0xff64a000 + (0x003 << 2))
+#define     AUD_LOCK_REFCLK_SRC                                (0xff64a000 + (0x004 << 2))
+#define SEC_AUD_LOCK_REFCLK_SRC                                (0xff64a000 + (0x004 << 2))
+#define   P_AUD_LOCK_REFCLK_SRC                                (volatile uint32_t *)(0xff64a000 + (0x004 << 2))
+#define     AUD_LOCK_REFCLK_LAT_INT                            (0xff64a000 + (0x005 << 2))
+#define SEC_AUD_LOCK_REFCLK_LAT_INT                            (0xff64a000 + (0x005 << 2))
+#define   P_AUD_LOCK_REFCLK_LAT_INT                            (volatile uint32_t *)(0xff64a000 + (0x005 << 2))
+#define     AUD_LOCK_IMCLK_LAT_INT                             (0xff64a000 + (0x006 << 2))
+#define SEC_AUD_LOCK_IMCLK_LAT_INT                             (0xff64a000 + (0x006 << 2))
+#define   P_AUD_LOCK_IMCLK_LAT_INT                             (volatile uint32_t *)(0xff64a000 + (0x006 << 2))
+#define     AUD_LOCK_OMCLK_LAT_INT                             (0xff64a000 + (0x007 << 2))
+#define SEC_AUD_LOCK_OMCLK_LAT_INT                             (0xff64a000 + (0x007 << 2))
+#define   P_AUD_LOCK_OMCLK_LAT_INT                             (volatile uint32_t *)(0xff64a000 + (0x007 << 2))
+#define     AUD_LOCK_REFCLK_DS_INT                             (0xff64a000 + (0x008 << 2))
+#define SEC_AUD_LOCK_REFCLK_DS_INT                             (0xff64a000 + (0x008 << 2))
+#define   P_AUD_LOCK_REFCLK_DS_INT                             (volatile uint32_t *)(0xff64a000 + (0x008 << 2))
+#define     AUD_LOCK_IMCLK_DS_INT                              (0xff64a000 + (0x009 << 2))
+#define SEC_AUD_LOCK_IMCLK_DS_INT                              (0xff64a000 + (0x009 << 2))
+#define   P_AUD_LOCK_IMCLK_DS_INT                              (volatile uint32_t *)(0xff64a000 + (0x009 << 2))
+#define     AUD_LOCK_OMCLK_DS_INT                              (0xff64a000 + (0x00a << 2))
+#define SEC_AUD_LOCK_OMCLK_DS_INT                              (0xff64a000 + (0x00a << 2))
+#define   P_AUD_LOCK_OMCLK_DS_INT                              (volatile uint32_t *)(0xff64a000 + (0x00a << 2))
+#define     AUD_LOCK_INT_CLR                                   (0xff64a000 + (0x00b << 2))
+#define SEC_AUD_LOCK_INT_CLR                                   (0xff64a000 + (0x00b << 2))
+#define   P_AUD_LOCK_INT_CLR                                   (volatile uint32_t *)(0xff64a000 + (0x00b << 2))
+#define     AUD_LOCK_GCLK_CTRL                                 (0xff64a000 + (0x00c << 2))
+#define SEC_AUD_LOCK_GCLK_CTRL                                 (0xff64a000 + (0x00c << 2))
+#define   P_AUD_LOCK_GCLK_CTRL                                 (volatile uint32_t *)(0xff64a000 + (0x00c << 2))
+#define     AUD_LOCK_INT_CTRL                                  (0xff64a000 + (0x00d << 2))
+#define SEC_AUD_LOCK_INT_CTRL                                  (0xff64a000 + (0x00d << 2))
+#define   P_AUD_LOCK_INT_CTRL                                  (volatile uint32_t *)(0xff64a000 + (0x00d << 2))
+#define     RO_REF2IMCLK_CNT_L                                 (0xff64a000 + (0x010 << 2))
+#define SEC_RO_REF2IMCLK_CNT_L                                 (0xff64a000 + (0x010 << 2))
+#define   P_RO_REF2IMCLK_CNT_L                                 (volatile uint32_t *)(0xff64a000 + (0x010 << 2))
+#define     RO_REF2IMCLK_CNT_H                                 (0xff64a000 + (0x011 << 2))
+#define SEC_RO_REF2IMCLK_CNT_H                                 (0xff64a000 + (0x011 << 2))
+#define   P_RO_REF2IMCLK_CNT_H                                 (volatile uint32_t *)(0xff64a000 + (0x011 << 2))
+#define     RO_REF2OMCLK_CNT_L                                 (0xff64a000 + (0x012 << 2))
+#define SEC_RO_REF2OMCLK_CNT_L                                 (0xff64a000 + (0x012 << 2))
+#define   P_RO_REF2OMCLK_CNT_L                                 (volatile uint32_t *)(0xff64a000 + (0x012 << 2))
+#define     RO_REF2OMCLK_CNT_H                                 (0xff64a000 + (0x013 << 2))
+#define SEC_RO_REF2OMCLK_CNT_H                                 (0xff64a000 + (0x013 << 2))
+#define   P_RO_REF2OMCLK_CNT_H                                 (volatile uint32_t *)(0xff64a000 + (0x013 << 2))
+#define     RO_IMCLK2REF_CNT_L                                 (0xff64a000 + (0x014 << 2))
+#define SEC_RO_IMCLK2REF_CNT_L                                 (0xff64a000 + (0x014 << 2))
+#define   P_RO_IMCLK2REF_CNT_L                                 (volatile uint32_t *)(0xff64a000 + (0x014 << 2))
+#define     RO_IMCLK2REF_CNT_H                                 (0xff64a000 + (0x015 << 2))
+#define SEC_RO_IMCLK2REF_CNT_H                                 (0xff64a000 + (0x015 << 2))
+#define   P_RO_IMCLK2REF_CNT_H                                 (volatile uint32_t *)(0xff64a000 + (0x015 << 2))
+#define     RO_OMCLK2REF_CNT_L                                 (0xff64a000 + (0x016 << 2))
+#define SEC_RO_OMCLK2REF_CNT_L                                 (0xff64a000 + (0x016 << 2))
+#define   P_RO_OMCLK2REF_CNT_L                                 (volatile uint32_t *)(0xff64a000 + (0x016 << 2))
+#define     RO_OMCLK2REF_CNT_H                                 (0xff64a000 + (0x017 << 2))
+#define SEC_RO_OMCLK2REF_CNT_H                                 (0xff64a000 + (0x017 << 2))
+#define   P_RO_OMCLK2REF_CNT_H                                 (volatile uint32_t *)(0xff64a000 + (0x017 << 2))
+#define     RO_REFCLK_PKG_CNT                                  (0xff64a000 + (0x018 << 2))
+#define SEC_RO_REFCLK_PKG_CNT                                  (0xff64a000 + (0x018 << 2))
+#define   P_RO_REFCLK_PKG_CNT                                  (volatile uint32_t *)(0xff64a000 + (0x018 << 2))
+#define     RO_IMCLK_PKG_CNT                                   (0xff64a000 + (0x019 << 2))
+#define SEC_RO_IMCLK_PKG_CNT                                   (0xff64a000 + (0x019 << 2))
+#define   P_RO_IMCLK_PKG_CNT                                   (volatile uint32_t *)(0xff64a000 + (0x019 << 2))
+#define     RO_OMCLK_PKG_CNT                                   (0xff64a000 + (0x01a << 2))
+#define SEC_RO_OMCLK_PKG_CNT                                   (0xff64a000 + (0x01a << 2))
+#define   P_RO_OMCLK_PKG_CNT                                   (volatile uint32_t *)(0xff64a000 + (0x01a << 2))
+#define     RO_AUD_LOCK_INT_STATUS                             (0xff64a000 + (0x01b << 2))
+#define SEC_RO_AUD_LOCK_INT_STATUS                             (0xff64a000 + (0x01b << 2))
+#define   P_RO_AUD_LOCK_INT_STATUS                             (volatile uint32_t *)(0xff64a000 + (0x01b << 2))
+//========================================================================
+//  AUDIO - Registers
+//========================================================================
+// APB4_DECODER_NON_SECURE_BASE     32'hFF642000
+// APB4_DECODER_SECURE_BASE         32'hFF642000
+#define     EE_AUDIO_CLK_GATE_EN                               (0xff642000 + (0x000 << 2))
+#define SEC_EE_AUDIO_CLK_GATE_EN                               (0xff642000 + (0x000 << 2))
+#define   P_EE_AUDIO_CLK_GATE_EN                               (volatile uint32_t *)(0xff642000 + (0x000 << 2))
+#define     EE_AUDIO_MCLK_A_CTRL                               (0xff642000 + (0x001 << 2))
+#define SEC_EE_AUDIO_MCLK_A_CTRL                               (0xff642000 + (0x001 << 2))
+#define   P_EE_AUDIO_MCLK_A_CTRL                               (volatile uint32_t *)(0xff642000 + (0x001 << 2))
+#define     EE_AUDIO_MCLK_B_CTRL                               (0xff642000 + (0x002 << 2))
+#define SEC_EE_AUDIO_MCLK_B_CTRL                               (0xff642000 + (0x002 << 2))
+#define   P_EE_AUDIO_MCLK_B_CTRL                               (volatile uint32_t *)(0xff642000 + (0x002 << 2))
+#define     EE_AUDIO_MCLK_C_CTRL                               (0xff642000 + (0x003 << 2))
+#define SEC_EE_AUDIO_MCLK_C_CTRL                               (0xff642000 + (0x003 << 2))
+#define   P_EE_AUDIO_MCLK_C_CTRL                               (volatile uint32_t *)(0xff642000 + (0x003 << 2))
+#define     EE_AUDIO_MCLK_D_CTRL                               (0xff642000 + (0x004 << 2))
+#define SEC_EE_AUDIO_MCLK_D_CTRL                               (0xff642000 + (0x004 << 2))
+#define   P_EE_AUDIO_MCLK_D_CTRL                               (volatile uint32_t *)(0xff642000 + (0x004 << 2))
+#define     EE_AUDIO_MCLK_E_CTRL                               (0xff642000 + (0x005 << 2))
+#define SEC_EE_AUDIO_MCLK_E_CTRL                               (0xff642000 + (0x005 << 2))
+#define   P_EE_AUDIO_MCLK_E_CTRL                               (volatile uint32_t *)(0xff642000 + (0x005 << 2))
+#define     EE_AUDIO_MCLK_F_CTRL                               (0xff642000 + (0x006 << 2))
+#define SEC_EE_AUDIO_MCLK_F_CTRL                               (0xff642000 + (0x006 << 2))
+#define   P_EE_AUDIO_MCLK_F_CTRL                               (volatile uint32_t *)(0xff642000 + (0x006 << 2))
+#define     EE_AUDIO_PAD_CTRL0                                 (0xff642000 + (0x007 << 2))
+#define SEC_EE_AUDIO_PAD_CTRL0                                 (0xff642000 + (0x007 << 2))
+#define   P_EE_AUDIO_PAD_CTRL0                                 (volatile uint32_t *)(0xff642000 + (0x007 << 2))
+#define     EE_AUDIO_PAD_CTRL1                                 (0xff642000 + (0x008 << 2))
+#define SEC_EE_AUDIO_PAD_CTRL1                                 (0xff642000 + (0x008 << 2))
+#define   P_EE_AUDIO_PAD_CTRL1                                 (volatile uint32_t *)(0xff642000 + (0x008 << 2))
+#define     EE_AUDIO_SW_RESET                                  (0xff642000 + (0x009 << 2))
+#define SEC_EE_AUDIO_SW_RESET                                  (0xff642000 + (0x009 << 2))
+#define   P_EE_AUDIO_SW_RESET                                  (volatile uint32_t *)(0xff642000 + (0x009 << 2))
+#define     EE_AUDIO_MST_A_SCLK_CTRL0                          (0xff642000 + (0x010 << 2))
+#define SEC_EE_AUDIO_MST_A_SCLK_CTRL0                          (0xff642000 + (0x010 << 2))
+#define   P_EE_AUDIO_MST_A_SCLK_CTRL0                          (volatile uint32_t *)(0xff642000 + (0x010 << 2))
+#define     EE_AUDIO_MST_A_SCLK_CTRL1                          (0xff642000 + (0x011 << 2))
+#define SEC_EE_AUDIO_MST_A_SCLK_CTRL1                          (0xff642000 + (0x011 << 2))
+#define   P_EE_AUDIO_MST_A_SCLK_CTRL1                          (volatile uint32_t *)(0xff642000 + (0x011 << 2))
+#define     EE_AUDIO_MST_B_SCLK_CTRL0                          (0xff642000 + (0x012 << 2))
+#define SEC_EE_AUDIO_MST_B_SCLK_CTRL0                          (0xff642000 + (0x012 << 2))
+#define   P_EE_AUDIO_MST_B_SCLK_CTRL0                          (volatile uint32_t *)(0xff642000 + (0x012 << 2))
+#define     EE_AUDIO_MST_B_SCLK_CTRL1                          (0xff642000 + (0x013 << 2))
+#define SEC_EE_AUDIO_MST_B_SCLK_CTRL1                          (0xff642000 + (0x013 << 2))
+#define   P_EE_AUDIO_MST_B_SCLK_CTRL1                          (volatile uint32_t *)(0xff642000 + (0x013 << 2))
+#define     EE_AUDIO_MST_C_SCLK_CTRL0                          (0xff642000 + (0x014 << 2))
+#define SEC_EE_AUDIO_MST_C_SCLK_CTRL0                          (0xff642000 + (0x014 << 2))
+#define   P_EE_AUDIO_MST_C_SCLK_CTRL0                          (volatile uint32_t *)(0xff642000 + (0x014 << 2))
+#define     EE_AUDIO_MST_C_SCLK_CTRL1                          (0xff642000 + (0x015 << 2))
+#define SEC_EE_AUDIO_MST_C_SCLK_CTRL1                          (0xff642000 + (0x015 << 2))
+#define   P_EE_AUDIO_MST_C_SCLK_CTRL1                          (volatile uint32_t *)(0xff642000 + (0x015 << 2))
+#define     EE_AUDIO_MST_D_SCLK_CTRL0                          (0xff642000 + (0x016 << 2))
+#define SEC_EE_AUDIO_MST_D_SCLK_CTRL0                          (0xff642000 + (0x016 << 2))
+#define   P_EE_AUDIO_MST_D_SCLK_CTRL0                          (volatile uint32_t *)(0xff642000 + (0x016 << 2))
+#define     EE_AUDIO_MST_D_SCLK_CTRL1                          (0xff642000 + (0x017 << 2))
+#define SEC_EE_AUDIO_MST_D_SCLK_CTRL1                          (0xff642000 + (0x017 << 2))
+#define   P_EE_AUDIO_MST_D_SCLK_CTRL1                          (volatile uint32_t *)(0xff642000 + (0x017 << 2))
+#define     EE_AUDIO_MST_E_SCLK_CTRL0                          (0xff642000 + (0x018 << 2))
+#define SEC_EE_AUDIO_MST_E_SCLK_CTRL0                          (0xff642000 + (0x018 << 2))
+#define   P_EE_AUDIO_MST_E_SCLK_CTRL0                          (volatile uint32_t *)(0xff642000 + (0x018 << 2))
+#define     EE_AUDIO_MST_E_SCLK_CTRL1                          (0xff642000 + (0x019 << 2))
+#define SEC_EE_AUDIO_MST_E_SCLK_CTRL1                          (0xff642000 + (0x019 << 2))
+#define   P_EE_AUDIO_MST_E_SCLK_CTRL1                          (volatile uint32_t *)(0xff642000 + (0x019 << 2))
+#define     EE_AUDIO_MST_F_SCLK_CTRL0                          (0xff642000 + (0x01a << 2))
+#define SEC_EE_AUDIO_MST_F_SCLK_CTRL0                          (0xff642000 + (0x01a << 2))
+#define   P_EE_AUDIO_MST_F_SCLK_CTRL0                          (volatile uint32_t *)(0xff642000 + (0x01a << 2))
+#define     EE_AUDIO_MST_F_SCLK_CTRL1                          (0xff642000 + (0x01b << 2))
+#define SEC_EE_AUDIO_MST_F_SCLK_CTRL1                          (0xff642000 + (0x01b << 2))
+#define   P_EE_AUDIO_MST_F_SCLK_CTRL1                          (volatile uint32_t *)(0xff642000 + (0x01b << 2))
+#define     EE_AUDIO_CLK_TDMIN_A_CTRL                          (0xff642000 + (0x020 << 2))
+#define SEC_EE_AUDIO_CLK_TDMIN_A_CTRL                          (0xff642000 + (0x020 << 2))
+#define   P_EE_AUDIO_CLK_TDMIN_A_CTRL                          (volatile uint32_t *)(0xff642000 + (0x020 << 2))
+#define     EE_AUDIO_CLK_TDMIN_B_CTRL                          (0xff642000 + (0x021 << 2))
+#define SEC_EE_AUDIO_CLK_TDMIN_B_CTRL                          (0xff642000 + (0x021 << 2))
+#define   P_EE_AUDIO_CLK_TDMIN_B_CTRL                          (volatile uint32_t *)(0xff642000 + (0x021 << 2))
+#define     EE_AUDIO_CLK_TDMIN_C_CTRL                          (0xff642000 + (0x022 << 2))
+#define SEC_EE_AUDIO_CLK_TDMIN_C_CTRL                          (0xff642000 + (0x022 << 2))
+#define   P_EE_AUDIO_CLK_TDMIN_C_CTRL                          (volatile uint32_t *)(0xff642000 + (0x022 << 2))
+#define     EE_AUDIO_CLK_TDMIN_LB_CTRL                         (0xff642000 + (0x023 << 2))
+#define SEC_EE_AUDIO_CLK_TDMIN_LB_CTRL                         (0xff642000 + (0x023 << 2))
+#define   P_EE_AUDIO_CLK_TDMIN_LB_CTRL                         (volatile uint32_t *)(0xff642000 + (0x023 << 2))
+#define     EE_AUDIO_CLK_TDMOUT_A_CTRL                         (0xff642000 + (0x024 << 2))
+#define SEC_EE_AUDIO_CLK_TDMOUT_A_CTRL                         (0xff642000 + (0x024 << 2))
+#define   P_EE_AUDIO_CLK_TDMOUT_A_CTRL                         (volatile uint32_t *)(0xff642000 + (0x024 << 2))
+#define     EE_AUDIO_CLK_TDMOUT_B_CTRL                         (0xff642000 + (0x025 << 2))
+#define SEC_EE_AUDIO_CLK_TDMOUT_B_CTRL                         (0xff642000 + (0x025 << 2))
+#define   P_EE_AUDIO_CLK_TDMOUT_B_CTRL                         (volatile uint32_t *)(0xff642000 + (0x025 << 2))
+#define     EE_AUDIO_CLK_TDMOUT_C_CTRL                         (0xff642000 + (0x026 << 2))
+#define SEC_EE_AUDIO_CLK_TDMOUT_C_CTRL                         (0xff642000 + (0x026 << 2))
+#define   P_EE_AUDIO_CLK_TDMOUT_C_CTRL                         (volatile uint32_t *)(0xff642000 + (0x026 << 2))
+#define     EE_AUDIO_CLK_SPDIFIN_CTRL                          (0xff642000 + (0x027 << 2))
+#define SEC_EE_AUDIO_CLK_SPDIFIN_CTRL                          (0xff642000 + (0x027 << 2))
+#define   P_EE_AUDIO_CLK_SPDIFIN_CTRL                          (volatile uint32_t *)(0xff642000 + (0x027 << 2))
+#define     EE_AUDIO_CLK_SPDIFOUT_CTRL                         (0xff642000 + (0x028 << 2))
+#define SEC_EE_AUDIO_CLK_SPDIFOUT_CTRL                         (0xff642000 + (0x028 << 2))
+#define   P_EE_AUDIO_CLK_SPDIFOUT_CTRL                         (volatile uint32_t *)(0xff642000 + (0x028 << 2))
+#define     EE_AUDIO_CLK_RESAMPLE_CTRL                         (0xff642000 + (0x029 << 2))
+#define SEC_EE_AUDIO_CLK_RESAMPLE_CTRL                         (0xff642000 + (0x029 << 2))
+#define   P_EE_AUDIO_CLK_RESAMPLE_CTRL                         (volatile uint32_t *)(0xff642000 + (0x029 << 2))
+#define     EE_AUDIO_CLK_LOCKER_CTRL                           (0xff642000 + (0x02a << 2))
+#define SEC_EE_AUDIO_CLK_LOCKER_CTRL                           (0xff642000 + (0x02a << 2))
+#define   P_EE_AUDIO_CLK_LOCKER_CTRL                           (volatile uint32_t *)(0xff642000 + (0x02a << 2))
+#define     EE_AUDIO_CLK_PDMIN_CTRL0                           (0xff642000 + (0x02b << 2))
+#define SEC_EE_AUDIO_CLK_PDMIN_CTRL0                           (0xff642000 + (0x02b << 2))
+#define   P_EE_AUDIO_CLK_PDMIN_CTRL0                           (volatile uint32_t *)(0xff642000 + (0x02b << 2))
+#define     EE_AUDIO_CLK_PDMIN_CTRL1                           (0xff642000 + (0x02c << 2))
+#define SEC_EE_AUDIO_CLK_PDMIN_CTRL1                           (0xff642000 + (0x02c << 2))
+#define   P_EE_AUDIO_CLK_PDMIN_CTRL1                           (volatile uint32_t *)(0xff642000 + (0x02c << 2))
+#define     EE_AUDIO_CLK_SPDIFOUT_B_CTRL                       (0xff642000 + (0x02d << 2))
+#define SEC_EE_AUDIO_CLK_SPDIFOUT_B_CTRL                       (0xff642000 + (0x02d << 2))
+#define   P_EE_AUDIO_CLK_SPDIFOUT_B_CTRL                       (volatile uint32_t *)(0xff642000 + (0x02d << 2))
+#define     EE_AUDIO_TODDR_A_CTRL0                             (0xff642000 + (0x040 << 2))
+#define SEC_EE_AUDIO_TODDR_A_CTRL0                             (0xff642000 + (0x040 << 2))
+#define   P_EE_AUDIO_TODDR_A_CTRL0                             (volatile uint32_t *)(0xff642000 + (0x040 << 2))
+#define     EE_AUDIO_TODDR_A_CTRL1                             (0xff642000 + (0x041 << 2))
+#define SEC_EE_AUDIO_TODDR_A_CTRL1                             (0xff642000 + (0x041 << 2))
+#define   P_EE_AUDIO_TODDR_A_CTRL1                             (volatile uint32_t *)(0xff642000 + (0x041 << 2))
+#define     EE_AUDIO_TODDR_A_START_ADDR                        (0xff642000 + (0x042 << 2))
+#define SEC_EE_AUDIO_TODDR_A_START_ADDR                        (0xff642000 + (0x042 << 2))
+#define   P_EE_AUDIO_TODDR_A_START_ADDR                        (volatile uint32_t *)(0xff642000 + (0x042 << 2))
+#define     EE_AUDIO_TODDR_A_FINISH_ADDR                       (0xff642000 + (0x043 << 2))
+#define SEC_EE_AUDIO_TODDR_A_FINISH_ADDR                       (0xff642000 + (0x043 << 2))
+#define   P_EE_AUDIO_TODDR_A_FINISH_ADDR                       (volatile uint32_t *)(0xff642000 + (0x043 << 2))
+#define     EE_AUDIO_TODDR_A_INT_ADDR                          (0xff642000 + (0x044 << 2))
+#define SEC_EE_AUDIO_TODDR_A_INT_ADDR                          (0xff642000 + (0x044 << 2))
+#define   P_EE_AUDIO_TODDR_A_INT_ADDR                          (volatile uint32_t *)(0xff642000 + (0x044 << 2))
+#define     EE_AUDIO_TODDR_A_STATUS1                           (0xff642000 + (0x045 << 2))
+#define SEC_EE_AUDIO_TODDR_A_STATUS1                           (0xff642000 + (0x045 << 2))
+#define   P_EE_AUDIO_TODDR_A_STATUS1                           (volatile uint32_t *)(0xff642000 + (0x045 << 2))
+#define     EE_AUDIO_TODDR_A_STATUS2                           (0xff642000 + (0x046 << 2))
+#define SEC_EE_AUDIO_TODDR_A_STATUS2                           (0xff642000 + (0x046 << 2))
+#define   P_EE_AUDIO_TODDR_A_STATUS2                           (volatile uint32_t *)(0xff642000 + (0x046 << 2))
+#define     EE_AUDIO_TODDR_A_START_ADDRB                       (0xff642000 + (0x047 << 2))
+#define SEC_EE_AUDIO_TODDR_A_START_ADDRB                       (0xff642000 + (0x047 << 2))
+#define   P_EE_AUDIO_TODDR_A_START_ADDRB                       (volatile uint32_t *)(0xff642000 + (0x047 << 2))
+#define     EE_AUDIO_TODDR_A_FINISH_ADDRB                      (0xff642000 + (0x048 << 2))
+#define SEC_EE_AUDIO_TODDR_A_FINISH_ADDRB                      (0xff642000 + (0x048 << 2))
+#define   P_EE_AUDIO_TODDR_A_FINISH_ADDRB                      (volatile uint32_t *)(0xff642000 + (0x048 << 2))
+#define     EE_AUDIO_TODDR_A_INIT_ADDR                         (0xff642000 + (0x049 << 2))
+#define SEC_EE_AUDIO_TODDR_A_INIT_ADDR                         (0xff642000 + (0x049 << 2))
+#define   P_EE_AUDIO_TODDR_A_INIT_ADDR                         (volatile uint32_t *)(0xff642000 + (0x049 << 2))
+#define     EE_AUDIO_TODDR_B_CTRL0                             (0xff642000 + (0x050 << 2))
+#define SEC_EE_AUDIO_TODDR_B_CTRL0                             (0xff642000 + (0x050 << 2))
+#define   P_EE_AUDIO_TODDR_B_CTRL0                             (volatile uint32_t *)(0xff642000 + (0x050 << 2))
+#define     EE_AUDIO_TODDR_B_CTRL1                             (0xff642000 + (0x051 << 2))
+#define SEC_EE_AUDIO_TODDR_B_CTRL1                             (0xff642000 + (0x051 << 2))
+#define   P_EE_AUDIO_TODDR_B_CTRL1                             (volatile uint32_t *)(0xff642000 + (0x051 << 2))
+#define     EE_AUDIO_TODDR_B_START_ADDR                        (0xff642000 + (0x052 << 2))
+#define SEC_EE_AUDIO_TODDR_B_START_ADDR                        (0xff642000 + (0x052 << 2))
+#define   P_EE_AUDIO_TODDR_B_START_ADDR                        (volatile uint32_t *)(0xff642000 + (0x052 << 2))
+#define     EE_AUDIO_TODDR_B_FINISH_ADDR                       (0xff642000 + (0x053 << 2))
+#define SEC_EE_AUDIO_TODDR_B_FINISH_ADDR                       (0xff642000 + (0x053 << 2))
+#define   P_EE_AUDIO_TODDR_B_FINISH_ADDR                       (volatile uint32_t *)(0xff642000 + (0x053 << 2))
+#define     EE_AUDIO_TODDR_B_INT_ADDR                          (0xff642000 + (0x054 << 2))
+#define SEC_EE_AUDIO_TODDR_B_INT_ADDR                          (0xff642000 + (0x054 << 2))
+#define   P_EE_AUDIO_TODDR_B_INT_ADDR                          (volatile uint32_t *)(0xff642000 + (0x054 << 2))
+#define     EE_AUDIO_TODDR_B_STATUS1                           (0xff642000 + (0x055 << 2))
+#define SEC_EE_AUDIO_TODDR_B_STATUS1                           (0xff642000 + (0x055 << 2))
+#define   P_EE_AUDIO_TODDR_B_STATUS1                           (volatile uint32_t *)(0xff642000 + (0x055 << 2))
+#define     EE_AUDIO_TODDR_B_STATUS2                           (0xff642000 + (0x056 << 2))
+#define SEC_EE_AUDIO_TODDR_B_STATUS2                           (0xff642000 + (0x056 << 2))
+#define   P_EE_AUDIO_TODDR_B_STATUS2                           (volatile uint32_t *)(0xff642000 + (0x056 << 2))
+#define     EE_AUDIO_TODDR_B_START_ADDRB                       (0xff642000 + (0x057 << 2))
+#define SEC_EE_AUDIO_TODDR_B_START_ADDRB                       (0xff642000 + (0x057 << 2))
+#define   P_EE_AUDIO_TODDR_B_START_ADDRB                       (volatile uint32_t *)(0xff642000 + (0x057 << 2))
+#define     EE_AUDIO_TODDR_B_FINISH_ADDRB                      (0xff642000 + (0x058 << 2))
+#define SEC_EE_AUDIO_TODDR_B_FINISH_ADDRB                      (0xff642000 + (0x058 << 2))
+#define   P_EE_AUDIO_TODDR_B_FINISH_ADDRB                      (volatile uint32_t *)(0xff642000 + (0x058 << 2))
+#define     EE_AUDIO_TODDR_B_INIT_ADDR                         (0xff642000 + (0x059 << 2))
+#define SEC_EE_AUDIO_TODDR_B_INIT_ADDR                         (0xff642000 + (0x059 << 2))
+#define   P_EE_AUDIO_TODDR_B_INIT_ADDR                         (volatile uint32_t *)(0xff642000 + (0x059 << 2))
+#define     EE_AUDIO_TODDR_C_CTRL0                             (0xff642000 + (0x060 << 2))
+#define SEC_EE_AUDIO_TODDR_C_CTRL0                             (0xff642000 + (0x060 << 2))
+#define   P_EE_AUDIO_TODDR_C_CTRL0                             (volatile uint32_t *)(0xff642000 + (0x060 << 2))
+#define     EE_AUDIO_TODDR_C_CTRL1                             (0xff642000 + (0x061 << 2))
+#define SEC_EE_AUDIO_TODDR_C_CTRL1                             (0xff642000 + (0x061 << 2))
+#define   P_EE_AUDIO_TODDR_C_CTRL1                             (volatile uint32_t *)(0xff642000 + (0x061 << 2))
+#define     EE_AUDIO_TODDR_C_START_ADDR                        (0xff642000 + (0x062 << 2))
+#define SEC_EE_AUDIO_TODDR_C_START_ADDR                        (0xff642000 + (0x062 << 2))
+#define   P_EE_AUDIO_TODDR_C_START_ADDR                        (volatile uint32_t *)(0xff642000 + (0x062 << 2))
+#define     EE_AUDIO_TODDR_C_FINISH_ADDR                       (0xff642000 + (0x063 << 2))
+#define SEC_EE_AUDIO_TODDR_C_FINISH_ADDR                       (0xff642000 + (0x063 << 2))
+#define   P_EE_AUDIO_TODDR_C_FINISH_ADDR                       (volatile uint32_t *)(0xff642000 + (0x063 << 2))
+#define     EE_AUDIO_TODDR_C_INT_ADDR                          (0xff642000 + (0x064 << 2))
+#define SEC_EE_AUDIO_TODDR_C_INT_ADDR                          (0xff642000 + (0x064 << 2))
+#define   P_EE_AUDIO_TODDR_C_INT_ADDR                          (volatile uint32_t *)(0xff642000 + (0x064 << 2))
+#define     EE_AUDIO_TODDR_C_STATUS1                           (0xff642000 + (0x065 << 2))
+#define SEC_EE_AUDIO_TODDR_C_STATUS1                           (0xff642000 + (0x065 << 2))
+#define   P_EE_AUDIO_TODDR_C_STATUS1                           (volatile uint32_t *)(0xff642000 + (0x065 << 2))
+#define     EE_AUDIO_TODDR_C_STATUS2                           (0xff642000 + (0x066 << 2))
+#define SEC_EE_AUDIO_TODDR_C_STATUS2                           (0xff642000 + (0x066 << 2))
+#define   P_EE_AUDIO_TODDR_C_STATUS2                           (volatile uint32_t *)(0xff642000 + (0x066 << 2))
+#define     EE_AUDIO_TODDR_C_START_ADDRB                       (0xff642000 + (0x067 << 2))
+#define SEC_EE_AUDIO_TODDR_C_START_ADDRB                       (0xff642000 + (0x067 << 2))
+#define   P_EE_AUDIO_TODDR_C_START_ADDRB                       (volatile uint32_t *)(0xff642000 + (0x067 << 2))
+#define     EE_AUDIO_TODDR_C_FINISH_ADDRB                      (0xff642000 + (0x068 << 2))
+#define SEC_EE_AUDIO_TODDR_C_FINISH_ADDRB                      (0xff642000 + (0x068 << 2))
+#define   P_EE_AUDIO_TODDR_C_FINISH_ADDRB                      (volatile uint32_t *)(0xff642000 + (0x068 << 2))
+#define     EE_AUDIO_TODDR_C_INIT_ADDR                         (0xff642000 + (0x069 << 2))
+#define SEC_EE_AUDIO_TODDR_C_INIT_ADDR                         (0xff642000 + (0x069 << 2))
+#define   P_EE_AUDIO_TODDR_C_INIT_ADDR                         (volatile uint32_t *)(0xff642000 + (0x069 << 2))
+#define     EE_AUDIO_FRDDR_A_CTRL0                             (0xff642000 + (0x070 << 2))
+#define SEC_EE_AUDIO_FRDDR_A_CTRL0                             (0xff642000 + (0x070 << 2))
+#define   P_EE_AUDIO_FRDDR_A_CTRL0                             (volatile uint32_t *)(0xff642000 + (0x070 << 2))
+#define     EE_AUDIO_FRDDR_A_CTRL1                             (0xff642000 + (0x071 << 2))
+#define SEC_EE_AUDIO_FRDDR_A_CTRL1                             (0xff642000 + (0x071 << 2))
+#define   P_EE_AUDIO_FRDDR_A_CTRL1                             (volatile uint32_t *)(0xff642000 + (0x071 << 2))
+#define     EE_AUDIO_FRDDR_A_START_ADDR                        (0xff642000 + (0x072 << 2))
+#define SEC_EE_AUDIO_FRDDR_A_START_ADDR                        (0xff642000 + (0x072 << 2))
+#define   P_EE_AUDIO_FRDDR_A_START_ADDR                        (volatile uint32_t *)(0xff642000 + (0x072 << 2))
+#define     EE_AUDIO_FRDDR_A_FINISH_ADDR                       (0xff642000 + (0x073 << 2))
+#define SEC_EE_AUDIO_FRDDR_A_FINISH_ADDR                       (0xff642000 + (0x073 << 2))
+#define   P_EE_AUDIO_FRDDR_A_FINISH_ADDR                       (volatile uint32_t *)(0xff642000 + (0x073 << 2))
+#define     EE_AUDIO_FRDDR_A_INT_ADDR                          (0xff642000 + (0x074 << 2))
+#define SEC_EE_AUDIO_FRDDR_A_INT_ADDR                          (0xff642000 + (0x074 << 2))
+#define   P_EE_AUDIO_FRDDR_A_INT_ADDR                          (volatile uint32_t *)(0xff642000 + (0x074 << 2))
+#define     EE_AUDIO_FRDDR_A_STATUS1                           (0xff642000 + (0x075 << 2))
+#define SEC_EE_AUDIO_FRDDR_A_STATUS1                           (0xff642000 + (0x075 << 2))
+#define   P_EE_AUDIO_FRDDR_A_STATUS1                           (volatile uint32_t *)(0xff642000 + (0x075 << 2))
+#define     EE_AUDIO_FRDDR_A_STATUS2                           (0xff642000 + (0x076 << 2))
+#define SEC_EE_AUDIO_FRDDR_A_STATUS2                           (0xff642000 + (0x076 << 2))
+#define   P_EE_AUDIO_FRDDR_A_STATUS2                           (volatile uint32_t *)(0xff642000 + (0x076 << 2))
+#define     EE_AUDIO_FRDDR_A_START_ADDRB                       (0xff642000 + (0x077 << 2))
+#define SEC_EE_AUDIO_FRDDR_A_START_ADDRB                       (0xff642000 + (0x077 << 2))
+#define   P_EE_AUDIO_FRDDR_A_START_ADDRB                       (volatile uint32_t *)(0xff642000 + (0x077 << 2))
+#define     EE_AUDIO_FRDDR_A_FINISH_ADDRB                      (0xff642000 + (0x078 << 2))
+#define SEC_EE_AUDIO_FRDDR_A_FINISH_ADDRB                      (0xff642000 + (0x078 << 2))
+#define   P_EE_AUDIO_FRDDR_A_FINISH_ADDRB                      (volatile uint32_t *)(0xff642000 + (0x078 << 2))
+#define     EE_AUDIO_FRDDR_A_INIT_ADDR                         (0xff642000 + (0x079 << 2))
+#define SEC_EE_AUDIO_FRDDR_A_INIT_ADDR                         (0xff642000 + (0x079 << 2))
+#define   P_EE_AUDIO_FRDDR_A_INIT_ADDR                         (volatile uint32_t *)(0xff642000 + (0x079 << 2))
+#define     EE_AUDIO_FRDDR_B_CTRL0                             (0xff642000 + (0x080 << 2))
+#define SEC_EE_AUDIO_FRDDR_B_CTRL0                             (0xff642000 + (0x080 << 2))
+#define   P_EE_AUDIO_FRDDR_B_CTRL0                             (volatile uint32_t *)(0xff642000 + (0x080 << 2))
+#define     EE_AUDIO_FRDDR_B_CTRL1                             (0xff642000 + (0x081 << 2))
+#define SEC_EE_AUDIO_FRDDR_B_CTRL1                             (0xff642000 + (0x081 << 2))
+#define   P_EE_AUDIO_FRDDR_B_CTRL1                             (volatile uint32_t *)(0xff642000 + (0x081 << 2))
+#define     EE_AUDIO_FRDDR_B_START_ADDR                        (0xff642000 + (0x082 << 2))
+#define SEC_EE_AUDIO_FRDDR_B_START_ADDR                        (0xff642000 + (0x082 << 2))
+#define   P_EE_AUDIO_FRDDR_B_START_ADDR                        (volatile uint32_t *)(0xff642000 + (0x082 << 2))
+#define     EE_AUDIO_FRDDR_B_FINISH_ADDR                       (0xff642000 + (0x083 << 2))
+#define SEC_EE_AUDIO_FRDDR_B_FINISH_ADDR                       (0xff642000 + (0x083 << 2))
+#define   P_EE_AUDIO_FRDDR_B_FINISH_ADDR                       (volatile uint32_t *)(0xff642000 + (0x083 << 2))
+#define     EE_AUDIO_FRDDR_B_INT_ADDR                          (0xff642000 + (0x084 << 2))
+#define SEC_EE_AUDIO_FRDDR_B_INT_ADDR                          (0xff642000 + (0x084 << 2))
+#define   P_EE_AUDIO_FRDDR_B_INT_ADDR                          (volatile uint32_t *)(0xff642000 + (0x084 << 2))
+#define     EE_AUDIO_FRDDR_B_STATUS1                           (0xff642000 + (0x085 << 2))
+#define SEC_EE_AUDIO_FRDDR_B_STATUS1                           (0xff642000 + (0x085 << 2))
+#define   P_EE_AUDIO_FRDDR_B_STATUS1                           (volatile uint32_t *)(0xff642000 + (0x085 << 2))
+#define     EE_AUDIO_FRDDR_B_STATUS2                           (0xff642000 + (0x086 << 2))
+#define SEC_EE_AUDIO_FRDDR_B_STATUS2                           (0xff642000 + (0x086 << 2))
+#define   P_EE_AUDIO_FRDDR_B_STATUS2                           (volatile uint32_t *)(0xff642000 + (0x086 << 2))
+#define     EE_AUDIO_FRDDR_B_START_ADDRB                       (0xff642000 + (0x087 << 2))
+#define SEC_EE_AUDIO_FRDDR_B_START_ADDRB                       (0xff642000 + (0x087 << 2))
+#define   P_EE_AUDIO_FRDDR_B_START_ADDRB                       (volatile uint32_t *)(0xff642000 + (0x087 << 2))
+#define     EE_AUDIO_FRDDR_B_FINISH_ADDRB                      (0xff642000 + (0x088 << 2))
+#define SEC_EE_AUDIO_FRDDR_B_FINISH_ADDRB                      (0xff642000 + (0x088 << 2))
+#define   P_EE_AUDIO_FRDDR_B_FINISH_ADDRB                      (volatile uint32_t *)(0xff642000 + (0x088 << 2))
+#define     EE_AUDIO_FRDDR_B_INIT_ADDR                         (0xff642000 + (0x089 << 2))
+#define SEC_EE_AUDIO_FRDDR_B_INIT_ADDR                         (0xff642000 + (0x089 << 2))
+#define   P_EE_AUDIO_FRDDR_B_INIT_ADDR                         (volatile uint32_t *)(0xff642000 + (0x089 << 2))
+#define     EE_AUDIO_FRDDR_C_CTRL0                             (0xff642000 + (0x090 << 2))
+#define SEC_EE_AUDIO_FRDDR_C_CTRL0                             (0xff642000 + (0x090 << 2))
+#define   P_EE_AUDIO_FRDDR_C_CTRL0                             (volatile uint32_t *)(0xff642000 + (0x090 << 2))
+#define     EE_AUDIO_FRDDR_C_CTRL1                             (0xff642000 + (0x091 << 2))
+#define SEC_EE_AUDIO_FRDDR_C_CTRL1                             (0xff642000 + (0x091 << 2))
+#define   P_EE_AUDIO_FRDDR_C_CTRL1                             (volatile uint32_t *)(0xff642000 + (0x091 << 2))
+#define     EE_AUDIO_FRDDR_C_START_ADDR                        (0xff642000 + (0x092 << 2))
+#define SEC_EE_AUDIO_FRDDR_C_START_ADDR                        (0xff642000 + (0x092 << 2))
+#define   P_EE_AUDIO_FRDDR_C_START_ADDR                        (volatile uint32_t *)(0xff642000 + (0x092 << 2))
+#define     EE_AUDIO_FRDDR_C_FINISH_ADDR                       (0xff642000 + (0x093 << 2))
+#define SEC_EE_AUDIO_FRDDR_C_FINISH_ADDR                       (0xff642000 + (0x093 << 2))
+#define   P_EE_AUDIO_FRDDR_C_FINISH_ADDR                       (volatile uint32_t *)(0xff642000 + (0x093 << 2))
+#define     EE_AUDIO_FRDDR_C_INT_ADDR                          (0xff642000 + (0x094 << 2))
+#define SEC_EE_AUDIO_FRDDR_C_INT_ADDR                          (0xff642000 + (0x094 << 2))
+#define   P_EE_AUDIO_FRDDR_C_INT_ADDR                          (volatile uint32_t *)(0xff642000 + (0x094 << 2))
+#define     EE_AUDIO_FRDDR_C_STATUS1                           (0xff642000 + (0x095 << 2))
+#define SEC_EE_AUDIO_FRDDR_C_STATUS1                           (0xff642000 + (0x095 << 2))
+#define   P_EE_AUDIO_FRDDR_C_STATUS1                           (volatile uint32_t *)(0xff642000 + (0x095 << 2))
+#define     EE_AUDIO_FRDDR_C_STATUS2                           (0xff642000 + (0x096 << 2))
+#define SEC_EE_AUDIO_FRDDR_C_STATUS2                           (0xff642000 + (0x096 << 2))
+#define   P_EE_AUDIO_FRDDR_C_STATUS2                           (volatile uint32_t *)(0xff642000 + (0x096 << 2))
+#define     EE_AUDIO_FRDDR_C_START_ADDRB                       (0xff642000 + (0x097 << 2))
+#define SEC_EE_AUDIO_FRDDR_C_START_ADDRB                       (0xff642000 + (0x097 << 2))
+#define   P_EE_AUDIO_FRDDR_C_START_ADDRB                       (volatile uint32_t *)(0xff642000 + (0x097 << 2))
+#define     EE_AUDIO_FRDDR_C_FINISH_ADDRB                      (0xff642000 + (0x098 << 2))
+#define SEC_EE_AUDIO_FRDDR_C_FINISH_ADDRB                      (0xff642000 + (0x098 << 2))
+#define   P_EE_AUDIO_FRDDR_C_FINISH_ADDRB                      (volatile uint32_t *)(0xff642000 + (0x098 << 2))
+#define     EE_AUDIO_FRDDR_C_INIT_ADDR                         (0xff642000 + (0x099 << 2))
+#define SEC_EE_AUDIO_FRDDR_C_INIT_ADDR                         (0xff642000 + (0x099 << 2))
+#define   P_EE_AUDIO_FRDDR_C_INIT_ADDR                         (volatile uint32_t *)(0xff642000 + (0x099 << 2))
+#define     EE_AUDIO_ARB_CTRL                                  (0xff642000 + (0x0a0 << 2))
+#define SEC_EE_AUDIO_ARB_CTRL                                  (0xff642000 + (0x0a0 << 2))
+#define   P_EE_AUDIO_ARB_CTRL                                  (volatile uint32_t *)(0xff642000 + (0x0a0 << 2))
+#define     EE_AUDIO_LB_CTRL0                                  (0xff642000 + (0x0b0 << 2))
+#define SEC_EE_AUDIO_LB_CTRL0                                  (0xff642000 + (0x0b0 << 2))
+#define   P_EE_AUDIO_LB_CTRL0                                  (volatile uint32_t *)(0xff642000 + (0x0b0 << 2))
+#define     EE_AUDIO_LB_CTRL1                                  (0xff642000 + (0x0b1 << 2))
+#define SEC_EE_AUDIO_LB_CTRL1                                  (0xff642000 + (0x0b1 << 2))
+#define   P_EE_AUDIO_LB_CTRL1                                  (volatile uint32_t *)(0xff642000 + (0x0b1 << 2))
+#define     EE_AUDIO_LB_DAT_CH_ID0                             (0xff642000 + (0x0b2 << 2))
+#define SEC_EE_AUDIO_LB_DAT_CH_ID0                             (0xff642000 + (0x0b2 << 2))
+#define   P_EE_AUDIO_LB_DAT_CH_ID0                             (volatile uint32_t *)(0xff642000 + (0x0b2 << 2))
+#define     EE_AUDIO_LB_DAT_CH_ID1                             (0xff642000 + (0x0b3 << 2))
+#define SEC_EE_AUDIO_LB_DAT_CH_ID1                             (0xff642000 + (0x0b3 << 2))
+#define   P_EE_AUDIO_LB_DAT_CH_ID1                             (volatile uint32_t *)(0xff642000 + (0x0b3 << 2))
+#define     EE_AUDIO_LB_LB_CH_ID0                              (0xff642000 + (0x0b4 << 2))
+#define SEC_EE_AUDIO_LB_LB_CH_ID0                              (0xff642000 + (0x0b4 << 2))
+#define   P_EE_AUDIO_LB_LB_CH_ID0                              (volatile uint32_t *)(0xff642000 + (0x0b4 << 2))
+#define     EE_AUDIO_LB_LB_CH_ID1                              (0xff642000 + (0x0b5 << 2))
+#define SEC_EE_AUDIO_LB_LB_CH_ID1                              (0xff642000 + (0x0b5 << 2))
+#define   P_EE_AUDIO_LB_LB_CH_ID1                              (volatile uint32_t *)(0xff642000 + (0x0b5 << 2))
+#define     EE_AUDIO_LB_STS                                    (0xff642000 + (0x0b6 << 2))
+#define SEC_EE_AUDIO_LB_STS                                    (0xff642000 + (0x0b6 << 2))
+#define   P_EE_AUDIO_LB_STS                                    (volatile uint32_t *)(0xff642000 + (0x0b6 << 2))
+#define     EE_AUDIO_TDMIN_A_CTRL                              (0xff642000 + (0x0c0 << 2))
+#define SEC_EE_AUDIO_TDMIN_A_CTRL                              (0xff642000 + (0x0c0 << 2))
+#define   P_EE_AUDIO_TDMIN_A_CTRL                              (volatile uint32_t *)(0xff642000 + (0x0c0 << 2))
+#define     EE_AUDIO_TDMIN_A_SWAP                              (0xff642000 + (0x0c1 << 2))
+#define SEC_EE_AUDIO_TDMIN_A_SWAP                              (0xff642000 + (0x0c1 << 2))
+#define   P_EE_AUDIO_TDMIN_A_SWAP                              (volatile uint32_t *)(0xff642000 + (0x0c1 << 2))
+#define     EE_AUDIO_TDMIN_A_MASK0                             (0xff642000 + (0x0c2 << 2))
+#define SEC_EE_AUDIO_TDMIN_A_MASK0                             (0xff642000 + (0x0c2 << 2))
+#define   P_EE_AUDIO_TDMIN_A_MASK0                             (volatile uint32_t *)(0xff642000 + (0x0c2 << 2))
+#define     EE_AUDIO_TDMIN_A_MASK1                             (0xff642000 + (0x0c3 << 2))
+#define SEC_EE_AUDIO_TDMIN_A_MASK1                             (0xff642000 + (0x0c3 << 2))
+#define   P_EE_AUDIO_TDMIN_A_MASK1                             (volatile uint32_t *)(0xff642000 + (0x0c3 << 2))
+#define     EE_AUDIO_TDMIN_A_MASK2                             (0xff642000 + (0x0c4 << 2))
+#define SEC_EE_AUDIO_TDMIN_A_MASK2                             (0xff642000 + (0x0c4 << 2))
+#define   P_EE_AUDIO_TDMIN_A_MASK2                             (volatile uint32_t *)(0xff642000 + (0x0c4 << 2))
+#define     EE_AUDIO_TDMIN_A_MASK3                             (0xff642000 + (0x0c5 << 2))
+#define SEC_EE_AUDIO_TDMIN_A_MASK3                             (0xff642000 + (0x0c5 << 2))
+#define   P_EE_AUDIO_TDMIN_A_MASK3                             (volatile uint32_t *)(0xff642000 + (0x0c5 << 2))
+#define     EE_AUDIO_TDMIN_A_STAT                              (0xff642000 + (0x0c6 << 2))
+#define SEC_EE_AUDIO_TDMIN_A_STAT                              (0xff642000 + (0x0c6 << 2))
+#define   P_EE_AUDIO_TDMIN_A_STAT                              (volatile uint32_t *)(0xff642000 + (0x0c6 << 2))
+#define     EE_AUDIO_TDMIN_A_MUTE_VAL                          (0xff642000 + (0x0c7 << 2))
+#define SEC_EE_AUDIO_TDMIN_A_MUTE_VAL                          (0xff642000 + (0x0c7 << 2))
+#define   P_EE_AUDIO_TDMIN_A_MUTE_VAL                          (volatile uint32_t *)(0xff642000 + (0x0c7 << 2))
+#define     EE_AUDIO_TDMIN_A_MUTE0                             (0xff642000 + (0x0c8 << 2))
+#define SEC_EE_AUDIO_TDMIN_A_MUTE0                             (0xff642000 + (0x0c8 << 2))
+#define   P_EE_AUDIO_TDMIN_A_MUTE0                             (volatile uint32_t *)(0xff642000 + (0x0c8 << 2))
+#define     EE_AUDIO_TDMIN_A_MUTE1                             (0xff642000 + (0x0c9 << 2))
+#define SEC_EE_AUDIO_TDMIN_A_MUTE1                             (0xff642000 + (0x0c9 << 2))
+#define   P_EE_AUDIO_TDMIN_A_MUTE1                             (volatile uint32_t *)(0xff642000 + (0x0c9 << 2))
+#define     EE_AUDIO_TDMIN_A_MUTE2                             (0xff642000 + (0x0ca << 2))
+#define SEC_EE_AUDIO_TDMIN_A_MUTE2                             (0xff642000 + (0x0ca << 2))
+#define   P_EE_AUDIO_TDMIN_A_MUTE2                             (volatile uint32_t *)(0xff642000 + (0x0ca << 2))
+#define     EE_AUDIO_TDMIN_A_MUTE3                             (0xff642000 + (0x0cb << 2))
+#define SEC_EE_AUDIO_TDMIN_A_MUTE3                             (0xff642000 + (0x0cb << 2))
+#define   P_EE_AUDIO_TDMIN_A_MUTE3                             (volatile uint32_t *)(0xff642000 + (0x0cb << 2))
+#define     EE_AUDIO_TDMIN_B_CTRL                              (0xff642000 + (0x0d0 << 2))
+#define SEC_EE_AUDIO_TDMIN_B_CTRL                              (0xff642000 + (0x0d0 << 2))
+#define   P_EE_AUDIO_TDMIN_B_CTRL                              (volatile uint32_t *)(0xff642000 + (0x0d0 << 2))
+#define     EE_AUDIO_TDMIN_B_SWAP                              (0xff642000 + (0x0d1 << 2))
+#define SEC_EE_AUDIO_TDMIN_B_SWAP                              (0xff642000 + (0x0d1 << 2))
+#define   P_EE_AUDIO_TDMIN_B_SWAP                              (volatile uint32_t *)(0xff642000 + (0x0d1 << 2))
+#define     EE_AUDIO_TDMIN_B_MASK0                             (0xff642000 + (0x0d2 << 2))
+#define SEC_EE_AUDIO_TDMIN_B_MASK0                             (0xff642000 + (0x0d2 << 2))
+#define   P_EE_AUDIO_TDMIN_B_MASK0                             (volatile uint32_t *)(0xff642000 + (0x0d2 << 2))
+#define     EE_AUDIO_TDMIN_B_MASK1                             (0xff642000 + (0x0d3 << 2))
+#define SEC_EE_AUDIO_TDMIN_B_MASK1                             (0xff642000 + (0x0d3 << 2))
+#define   P_EE_AUDIO_TDMIN_B_MASK1                             (volatile uint32_t *)(0xff642000 + (0x0d3 << 2))
+#define     EE_AUDIO_TDMIN_B_MASK2                             (0xff642000 + (0x0d4 << 2))
+#define SEC_EE_AUDIO_TDMIN_B_MASK2                             (0xff642000 + (0x0d4 << 2))
+#define   P_EE_AUDIO_TDMIN_B_MASK2                             (volatile uint32_t *)(0xff642000 + (0x0d4 << 2))
+#define     EE_AUDIO_TDMIN_B_MASK3                             (0xff642000 + (0x0d5 << 2))
+#define SEC_EE_AUDIO_TDMIN_B_MASK3                             (0xff642000 + (0x0d5 << 2))
+#define   P_EE_AUDIO_TDMIN_B_MASK3                             (volatile uint32_t *)(0xff642000 + (0x0d5 << 2))
+#define     EE_AUDIO_TDMIN_B_STAT                              (0xff642000 + (0x0d6 << 2))
+#define SEC_EE_AUDIO_TDMIN_B_STAT                              (0xff642000 + (0x0d6 << 2))
+#define   P_EE_AUDIO_TDMIN_B_STAT                              (volatile uint32_t *)(0xff642000 + (0x0d6 << 2))
+#define     EE_AUDIO_TDMIN_B_MUTE_VAL                          (0xff642000 + (0x0d7 << 2))
+#define SEC_EE_AUDIO_TDMIN_B_MUTE_VAL                          (0xff642000 + (0x0d7 << 2))
+#define   P_EE_AUDIO_TDMIN_B_MUTE_VAL                          (volatile uint32_t *)(0xff642000 + (0x0d7 << 2))
+#define     EE_AUDIO_TDMIN_B_MUTE0                             (0xff642000 + (0x0d8 << 2))
+#define SEC_EE_AUDIO_TDMIN_B_MUTE0                             (0xff642000 + (0x0d8 << 2))
+#define   P_EE_AUDIO_TDMIN_B_MUTE0                             (volatile uint32_t *)(0xff642000 + (0x0d8 << 2))
+#define     EE_AUDIO_TDMIN_B_MUTE1                             (0xff642000 + (0x0d9 << 2))
+#define SEC_EE_AUDIO_TDMIN_B_MUTE1                             (0xff642000 + (0x0d9 << 2))
+#define   P_EE_AUDIO_TDMIN_B_MUTE1                             (volatile uint32_t *)(0xff642000 + (0x0d9 << 2))
+#define     EE_AUDIO_TDMIN_B_MUTE2                             (0xff642000 + (0x0da << 2))
+#define SEC_EE_AUDIO_TDMIN_B_MUTE2                             (0xff642000 + (0x0da << 2))
+#define   P_EE_AUDIO_TDMIN_B_MUTE2                             (volatile uint32_t *)(0xff642000 + (0x0da << 2))
+#define     EE_AUDIO_TDMIN_B_MUTE3                             (0xff642000 + (0x0db << 2))
+#define SEC_EE_AUDIO_TDMIN_B_MUTE3                             (0xff642000 + (0x0db << 2))
+#define   P_EE_AUDIO_TDMIN_B_MUTE3                             (volatile uint32_t *)(0xff642000 + (0x0db << 2))
+#define     EE_AUDIO_TDMIN_C_CTRL                              (0xff642000 + (0x0e0 << 2))
+#define SEC_EE_AUDIO_TDMIN_C_CTRL                              (0xff642000 + (0x0e0 << 2))
+#define   P_EE_AUDIO_TDMIN_C_CTRL                              (volatile uint32_t *)(0xff642000 + (0x0e0 << 2))
+#define     EE_AUDIO_TDMIN_C_SWAP                              (0xff642000 + (0x0e1 << 2))
+#define SEC_EE_AUDIO_TDMIN_C_SWAP                              (0xff642000 + (0x0e1 << 2))
+#define   P_EE_AUDIO_TDMIN_C_SWAP                              (volatile uint32_t *)(0xff642000 + (0x0e1 << 2))
+#define     EE_AUDIO_TDMIN_C_MASK0                             (0xff642000 + (0x0e2 << 2))
+#define SEC_EE_AUDIO_TDMIN_C_MASK0                             (0xff642000 + (0x0e2 << 2))
+#define   P_EE_AUDIO_TDMIN_C_MASK0                             (volatile uint32_t *)(0xff642000 + (0x0e2 << 2))
+#define     EE_AUDIO_TDMIN_C_MASK1                             (0xff642000 + (0x0e3 << 2))
+#define SEC_EE_AUDIO_TDMIN_C_MASK1                             (0xff642000 + (0x0e3 << 2))
+#define   P_EE_AUDIO_TDMIN_C_MASK1                             (volatile uint32_t *)(0xff642000 + (0x0e3 << 2))
+#define     EE_AUDIO_TDMIN_C_MASK2                             (0xff642000 + (0x0e4 << 2))
+#define SEC_EE_AUDIO_TDMIN_C_MASK2                             (0xff642000 + (0x0e4 << 2))
+#define   P_EE_AUDIO_TDMIN_C_MASK2                             (volatile uint32_t *)(0xff642000 + (0x0e4 << 2))
+#define     EE_AUDIO_TDMIN_C_MASK3                             (0xff642000 + (0x0e5 << 2))
+#define SEC_EE_AUDIO_TDMIN_C_MASK3                             (0xff642000 + (0x0e5 << 2))
+#define   P_EE_AUDIO_TDMIN_C_MASK3                             (volatile uint32_t *)(0xff642000 + (0x0e5 << 2))
+#define     EE_AUDIO_TDMIN_C_STAT                              (0xff642000 + (0x0e6 << 2))
+#define SEC_EE_AUDIO_TDMIN_C_STAT                              (0xff642000 + (0x0e6 << 2))
+#define   P_EE_AUDIO_TDMIN_C_STAT                              (volatile uint32_t *)(0xff642000 + (0x0e6 << 2))
+#define     EE_AUDIO_TDMIN_C_MUTE_VAL                          (0xff642000 + (0x0e7 << 2))
+#define SEC_EE_AUDIO_TDMIN_C_MUTE_VAL                          (0xff642000 + (0x0e7 << 2))
+#define   P_EE_AUDIO_TDMIN_C_MUTE_VAL                          (volatile uint32_t *)(0xff642000 + (0x0e7 << 2))
+#define     EE_AUDIO_TDMIN_C_MUTE0                             (0xff642000 + (0x0e8 << 2))
+#define SEC_EE_AUDIO_TDMIN_C_MUTE0                             (0xff642000 + (0x0e8 << 2))
+#define   P_EE_AUDIO_TDMIN_C_MUTE0                             (volatile uint32_t *)(0xff642000 + (0x0e8 << 2))
+#define     EE_AUDIO_TDMIN_C_MUTE1                             (0xff642000 + (0x0e9 << 2))
+#define SEC_EE_AUDIO_TDMIN_C_MUTE1                             (0xff642000 + (0x0e9 << 2))
+#define   P_EE_AUDIO_TDMIN_C_MUTE1                             (volatile uint32_t *)(0xff642000 + (0x0e9 << 2))
+#define     EE_AUDIO_TDMIN_C_MUTE2                             (0xff642000 + (0x0ea << 2))
+#define SEC_EE_AUDIO_TDMIN_C_MUTE2                             (0xff642000 + (0x0ea << 2))
+#define   P_EE_AUDIO_TDMIN_C_MUTE2                             (volatile uint32_t *)(0xff642000 + (0x0ea << 2))
+#define     EE_AUDIO_TDMIN_C_MUTE3                             (0xff642000 + (0x0eb << 2))
+#define SEC_EE_AUDIO_TDMIN_C_MUTE3                             (0xff642000 + (0x0eb << 2))
+#define   P_EE_AUDIO_TDMIN_C_MUTE3                             (volatile uint32_t *)(0xff642000 + (0x0eb << 2))
+#define     EE_AUDIO_TDMIN_LB_CTRL                             (0xff642000 + (0x0f0 << 2))
+#define SEC_EE_AUDIO_TDMIN_LB_CTRL                             (0xff642000 + (0x0f0 << 2))
+#define   P_EE_AUDIO_TDMIN_LB_CTRL                             (volatile uint32_t *)(0xff642000 + (0x0f0 << 2))
+#define     EE_AUDIO_TDMIN_LB_SWAP                             (0xff642000 + (0x0f1 << 2))
+#define SEC_EE_AUDIO_TDMIN_LB_SWAP                             (0xff642000 + (0x0f1 << 2))
+#define   P_EE_AUDIO_TDMIN_LB_SWAP                             (volatile uint32_t *)(0xff642000 + (0x0f1 << 2))
+#define     EE_AUDIO_TDMIN_LB_MASK0                            (0xff642000 + (0x0f2 << 2))
+#define SEC_EE_AUDIO_TDMIN_LB_MASK0                            (0xff642000 + (0x0f2 << 2))
+#define   P_EE_AUDIO_TDMIN_LB_MASK0                            (volatile uint32_t *)(0xff642000 + (0x0f2 << 2))
+#define     EE_AUDIO_TDMIN_LB_MASK1                            (0xff642000 + (0x0f3 << 2))
+#define SEC_EE_AUDIO_TDMIN_LB_MASK1                            (0xff642000 + (0x0f3 << 2))
+#define   P_EE_AUDIO_TDMIN_LB_MASK1                            (volatile uint32_t *)(0xff642000 + (0x0f3 << 2))
+#define     EE_AUDIO_TDMIN_LB_MASK2                            (0xff642000 + (0x0f4 << 2))
+#define SEC_EE_AUDIO_TDMIN_LB_MASK2                            (0xff642000 + (0x0f4 << 2))
+#define   P_EE_AUDIO_TDMIN_LB_MASK2                            (volatile uint32_t *)(0xff642000 + (0x0f4 << 2))
+#define     EE_AUDIO_TDMIN_LB_MASK3                            (0xff642000 + (0x0f5 << 2))
+#define SEC_EE_AUDIO_TDMIN_LB_MASK3                            (0xff642000 + (0x0f5 << 2))
+#define   P_EE_AUDIO_TDMIN_LB_MASK3                            (volatile uint32_t *)(0xff642000 + (0x0f5 << 2))
+#define     EE_AUDIO_TDMIN_LB_STAT                             (0xff642000 + (0x0f6 << 2))
+#define SEC_EE_AUDIO_TDMIN_LB_STAT                             (0xff642000 + (0x0f6 << 2))
+#define   P_EE_AUDIO_TDMIN_LB_STAT                             (volatile uint32_t *)(0xff642000 + (0x0f6 << 2))
+#define     EE_AUDIO_TDMIN_LB_MUTE_VAL                         (0xff642000 + (0x0f7 << 2))
+#define SEC_EE_AUDIO_TDMIN_LB_MUTE_VAL                         (0xff642000 + (0x0f7 << 2))
+#define   P_EE_AUDIO_TDMIN_LB_MUTE_VAL                         (volatile uint32_t *)(0xff642000 + (0x0f7 << 2))
+#define     EE_AUDIO_TDMIN_LB_MUTE0                            (0xff642000 + (0x0f8 << 2))
+#define SEC_EE_AUDIO_TDMIN_LB_MUTE0                            (0xff642000 + (0x0f8 << 2))
+#define   P_EE_AUDIO_TDMIN_LB_MUTE0                            (volatile uint32_t *)(0xff642000 + (0x0f8 << 2))
+#define     EE_AUDIO_TDMIN_LB_MUTE1                            (0xff642000 + (0x0f9 << 2))
+#define SEC_EE_AUDIO_TDMIN_LB_MUTE1                            (0xff642000 + (0x0f9 << 2))
+#define   P_EE_AUDIO_TDMIN_LB_MUTE1                            (volatile uint32_t *)(0xff642000 + (0x0f9 << 2))
+#define     EE_AUDIO_TDMIN_LB_MUTE2                            (0xff642000 + (0x0fa << 2))
+#define SEC_EE_AUDIO_TDMIN_LB_MUTE2                            (0xff642000 + (0x0fa << 2))
+#define   P_EE_AUDIO_TDMIN_LB_MUTE2                            (volatile uint32_t *)(0xff642000 + (0x0fa << 2))
+#define     EE_AUDIO_TDMIN_LB_MUTE3                            (0xff642000 + (0x0fb << 2))
+#define SEC_EE_AUDIO_TDMIN_LB_MUTE3                            (0xff642000 + (0x0fb << 2))
+#define   P_EE_AUDIO_TDMIN_LB_MUTE3                            (volatile uint32_t *)(0xff642000 + (0x0fb << 2))
+#define     EE_AUDIO_SPDIFIN_CTRL0                             (0xff642000 + (0x100 << 2))
+#define SEC_EE_AUDIO_SPDIFIN_CTRL0                             (0xff642000 + (0x100 << 2))
+#define   P_EE_AUDIO_SPDIFIN_CTRL0                             (volatile uint32_t *)(0xff642000 + (0x100 << 2))
+#define     EE_AUDIO_SPDIFIN_CTRL1                             (0xff642000 + (0x101 << 2))
+#define SEC_EE_AUDIO_SPDIFIN_CTRL1                             (0xff642000 + (0x101 << 2))
+#define   P_EE_AUDIO_SPDIFIN_CTRL1                             (volatile uint32_t *)(0xff642000 + (0x101 << 2))
+#define     EE_AUDIO_SPDIFIN_CTRL2                             (0xff642000 + (0x102 << 2))
+#define SEC_EE_AUDIO_SPDIFIN_CTRL2                             (0xff642000 + (0x102 << 2))
+#define   P_EE_AUDIO_SPDIFIN_CTRL2                             (volatile uint32_t *)(0xff642000 + (0x102 << 2))
+#define     EE_AUDIO_SPDIFIN_CTRL3                             (0xff642000 + (0x103 << 2))
+#define SEC_EE_AUDIO_SPDIFIN_CTRL3                             (0xff642000 + (0x103 << 2))
+#define   P_EE_AUDIO_SPDIFIN_CTRL3                             (volatile uint32_t *)(0xff642000 + (0x103 << 2))
+#define     EE_AUDIO_SPDIFIN_CTRL4                             (0xff642000 + (0x104 << 2))
+#define SEC_EE_AUDIO_SPDIFIN_CTRL4                             (0xff642000 + (0x104 << 2))
+#define   P_EE_AUDIO_SPDIFIN_CTRL4                             (volatile uint32_t *)(0xff642000 + (0x104 << 2))
+#define     EE_AUDIO_SPDIFIN_CTRL5                             (0xff642000 + (0x105 << 2))
+#define SEC_EE_AUDIO_SPDIFIN_CTRL5                             (0xff642000 + (0x105 << 2))
+#define   P_EE_AUDIO_SPDIFIN_CTRL5                             (volatile uint32_t *)(0xff642000 + (0x105 << 2))
+#define     EE_AUDIO_SPDIFIN_CTRL6                             (0xff642000 + (0x106 << 2))
+#define SEC_EE_AUDIO_SPDIFIN_CTRL6                             (0xff642000 + (0x106 << 2))
+#define   P_EE_AUDIO_SPDIFIN_CTRL6                             (volatile uint32_t *)(0xff642000 + (0x106 << 2))
+#define     EE_AUDIO_SPDIFIN_STAT0                             (0xff642000 + (0x107 << 2))
+#define SEC_EE_AUDIO_SPDIFIN_STAT0                             (0xff642000 + (0x107 << 2))
+#define   P_EE_AUDIO_SPDIFIN_STAT0                             (volatile uint32_t *)(0xff642000 + (0x107 << 2))
+#define     EE_AUDIO_SPDIFIN_STAT1                             (0xff642000 + (0x108 << 2))
+#define SEC_EE_AUDIO_SPDIFIN_STAT1                             (0xff642000 + (0x108 << 2))
+#define   P_EE_AUDIO_SPDIFIN_STAT1                             (volatile uint32_t *)(0xff642000 + (0x108 << 2))
+#define     EE_AUDIO_SPDIFIN_STAT2                             (0xff642000 + (0x109 << 2))
+#define SEC_EE_AUDIO_SPDIFIN_STAT2                             (0xff642000 + (0x109 << 2))
+#define   P_EE_AUDIO_SPDIFIN_STAT2                             (volatile uint32_t *)(0xff642000 + (0x109 << 2))
+#define     EE_AUDIO_SPDIFIN_MUTE_VAL                          (0xff642000 + (0x10a << 2))
+#define SEC_EE_AUDIO_SPDIFIN_MUTE_VAL                          (0xff642000 + (0x10a << 2))
+#define   P_EE_AUDIO_SPDIFIN_MUTE_VAL                          (volatile uint32_t *)(0xff642000 + (0x10a << 2))
+#define     EE_AUDIO_RESAMPLE_CTRL0                            (0xff642000 + (0x110 << 2))
+#define SEC_EE_AUDIO_RESAMPLE_CTRL0                            (0xff642000 + (0x110 << 2))
+#define   P_EE_AUDIO_RESAMPLE_CTRL0                            (volatile uint32_t *)(0xff642000 + (0x110 << 2))
+#define     EE_AUDIO_RESAMPLE_CTRL1                            (0xff642000 + (0x111 << 2))
+#define SEC_EE_AUDIO_RESAMPLE_CTRL1                            (0xff642000 + (0x111 << 2))
+#define   P_EE_AUDIO_RESAMPLE_CTRL1                            (volatile uint32_t *)(0xff642000 + (0x111 << 2))
+#define     EE_AUDIO_RESAMPLE_CTRL2                            (0xff642000 + (0x112 << 2))
+#define SEC_EE_AUDIO_RESAMPLE_CTRL2                            (0xff642000 + (0x112 << 2))
+#define   P_EE_AUDIO_RESAMPLE_CTRL2                            (volatile uint32_t *)(0xff642000 + (0x112 << 2))
+#define     EE_AUDIO_RESAMPLE_CTRL3                            (0xff642000 + (0x113 << 2))
+#define SEC_EE_AUDIO_RESAMPLE_CTRL3                            (0xff642000 + (0x113 << 2))
+#define   P_EE_AUDIO_RESAMPLE_CTRL3                            (volatile uint32_t *)(0xff642000 + (0x113 << 2))
+#define     EE_AUDIO_RESAMPLE_COEF0                            (0xff642000 + (0x114 << 2))
+#define SEC_EE_AUDIO_RESAMPLE_COEF0                            (0xff642000 + (0x114 << 2))
+#define   P_EE_AUDIO_RESAMPLE_COEF0                            (volatile uint32_t *)(0xff642000 + (0x114 << 2))
+#define     EE_AUDIO_RESAMPLE_COEF1                            (0xff642000 + (0x115 << 2))
+#define SEC_EE_AUDIO_RESAMPLE_COEF1                            (0xff642000 + (0x115 << 2))
+#define   P_EE_AUDIO_RESAMPLE_COEF1                            (volatile uint32_t *)(0xff642000 + (0x115 << 2))
+#define     EE_AUDIO_RESAMPLE_COEF2                            (0xff642000 + (0x116 << 2))
+#define SEC_EE_AUDIO_RESAMPLE_COEF2                            (0xff642000 + (0x116 << 2))
+#define   P_EE_AUDIO_RESAMPLE_COEF2                            (volatile uint32_t *)(0xff642000 + (0x116 << 2))
+#define     EE_AUDIO_RESAMPLE_COEF3                            (0xff642000 + (0x117 << 2))
+#define SEC_EE_AUDIO_RESAMPLE_COEF3                            (0xff642000 + (0x117 << 2))
+#define   P_EE_AUDIO_RESAMPLE_COEF3                            (volatile uint32_t *)(0xff642000 + (0x117 << 2))
+#define     EE_AUDIO_RESAMPLE_COEF4                            (0xff642000 + (0x118 << 2))
+#define SEC_EE_AUDIO_RESAMPLE_COEF4                            (0xff642000 + (0x118 << 2))
+#define   P_EE_AUDIO_RESAMPLE_COEF4                            (volatile uint32_t *)(0xff642000 + (0x118 << 2))
+#define     EE_AUDIO_RESAMPLE_STATUS1                          (0xff642000 + (0x119 << 2))
+#define SEC_EE_AUDIO_RESAMPLE_STATUS1                          (0xff642000 + (0x119 << 2))
+#define   P_EE_AUDIO_RESAMPLE_STATUS1                          (volatile uint32_t *)(0xff642000 + (0x119 << 2))
+#define     EE_AUDIO_SPDIFOUT_STAT                             (0xff642000 + (0x120 << 2))
+#define SEC_EE_AUDIO_SPDIFOUT_STAT                             (0xff642000 + (0x120 << 2))
+#define   P_EE_AUDIO_SPDIFOUT_STAT                             (volatile uint32_t *)(0xff642000 + (0x120 << 2))
+#define     EE_AUDIO_SPDIFOUT_GAIN0                            (0xff642000 + (0x121 << 2))
+#define SEC_EE_AUDIO_SPDIFOUT_GAIN0                            (0xff642000 + (0x121 << 2))
+#define   P_EE_AUDIO_SPDIFOUT_GAIN0                            (volatile uint32_t *)(0xff642000 + (0x121 << 2))
+#define     EE_AUDIO_SPDIFOUT_GAIN1                            (0xff642000 + (0x122 << 2))
+#define SEC_EE_AUDIO_SPDIFOUT_GAIN1                            (0xff642000 + (0x122 << 2))
+#define   P_EE_AUDIO_SPDIFOUT_GAIN1                            (volatile uint32_t *)(0xff642000 + (0x122 << 2))
+#define     EE_AUDIO_SPDIFOUT_CTRL0                            (0xff642000 + (0x123 << 2))
+#define SEC_EE_AUDIO_SPDIFOUT_CTRL0                            (0xff642000 + (0x123 << 2))
+#define   P_EE_AUDIO_SPDIFOUT_CTRL0                            (volatile uint32_t *)(0xff642000 + (0x123 << 2))
+#define     EE_AUDIO_SPDIFOUT_CTRL1                            (0xff642000 + (0x124 << 2))
+#define SEC_EE_AUDIO_SPDIFOUT_CTRL1                            (0xff642000 + (0x124 << 2))
+#define   P_EE_AUDIO_SPDIFOUT_CTRL1                            (volatile uint32_t *)(0xff642000 + (0x124 << 2))
+#define     EE_AUDIO_SPDIFOUT_PREAMB                           (0xff642000 + (0x125 << 2))
+#define SEC_EE_AUDIO_SPDIFOUT_PREAMB                           (0xff642000 + (0x125 << 2))
+#define   P_EE_AUDIO_SPDIFOUT_PREAMB                           (volatile uint32_t *)(0xff642000 + (0x125 << 2))
+#define     EE_AUDIO_SPDIFOUT_SWAP                             (0xff642000 + (0x126 << 2))
+#define SEC_EE_AUDIO_SPDIFOUT_SWAP                             (0xff642000 + (0x126 << 2))
+#define   P_EE_AUDIO_SPDIFOUT_SWAP                             (volatile uint32_t *)(0xff642000 + (0x126 << 2))
+#define     EE_AUDIO_SPDIFOUT_CHSTS0                           (0xff642000 + (0x127 << 2))
+#define SEC_EE_AUDIO_SPDIFOUT_CHSTS0                           (0xff642000 + (0x127 << 2))
+#define   P_EE_AUDIO_SPDIFOUT_CHSTS0                           (volatile uint32_t *)(0xff642000 + (0x127 << 2))
+#define     EE_AUDIO_SPDIFOUT_CHSTS1                           (0xff642000 + (0x128 << 2))
+#define SEC_EE_AUDIO_SPDIFOUT_CHSTS1                           (0xff642000 + (0x128 << 2))
+#define   P_EE_AUDIO_SPDIFOUT_CHSTS1                           (volatile uint32_t *)(0xff642000 + (0x128 << 2))
+#define     EE_AUDIO_SPDIFOUT_CHSTS2                           (0xff642000 + (0x129 << 2))
+#define SEC_EE_AUDIO_SPDIFOUT_CHSTS2                           (0xff642000 + (0x129 << 2))
+#define   P_EE_AUDIO_SPDIFOUT_CHSTS2                           (volatile uint32_t *)(0xff642000 + (0x129 << 2))
+#define     EE_AUDIO_SPDIFOUT_CHSTS3                           (0xff642000 + (0x12a << 2))
+#define SEC_EE_AUDIO_SPDIFOUT_CHSTS3                           (0xff642000 + (0x12a << 2))
+#define   P_EE_AUDIO_SPDIFOUT_CHSTS3                           (volatile uint32_t *)(0xff642000 + (0x12a << 2))
+#define     EE_AUDIO_SPDIFOUT_CHSTS4                           (0xff642000 + (0x12b << 2))
+#define SEC_EE_AUDIO_SPDIFOUT_CHSTS4                           (0xff642000 + (0x12b << 2))
+#define   P_EE_AUDIO_SPDIFOUT_CHSTS4                           (volatile uint32_t *)(0xff642000 + (0x12b << 2))
+#define     EE_AUDIO_SPDIFOUT_CHSTS5                           (0xff642000 + (0x12c << 2))
+#define SEC_EE_AUDIO_SPDIFOUT_CHSTS5                           (0xff642000 + (0x12c << 2))
+#define   P_EE_AUDIO_SPDIFOUT_CHSTS5                           (volatile uint32_t *)(0xff642000 + (0x12c << 2))
+#define     EE_AUDIO_SPDIFOUT_CHSTS6                           (0xff642000 + (0x12d << 2))
+#define SEC_EE_AUDIO_SPDIFOUT_CHSTS6                           (0xff642000 + (0x12d << 2))
+#define   P_EE_AUDIO_SPDIFOUT_CHSTS6                           (volatile uint32_t *)(0xff642000 + (0x12d << 2))
+#define     EE_AUDIO_SPDIFOUT_CHSTS7                           (0xff642000 + (0x12e << 2))
+#define SEC_EE_AUDIO_SPDIFOUT_CHSTS7                           (0xff642000 + (0x12e << 2))
+#define   P_EE_AUDIO_SPDIFOUT_CHSTS7                           (volatile uint32_t *)(0xff642000 + (0x12e << 2))
+#define     EE_AUDIO_SPDIFOUT_CHSTS8                           (0xff642000 + (0x12f << 2))
+#define SEC_EE_AUDIO_SPDIFOUT_CHSTS8                           (0xff642000 + (0x12f << 2))
+#define   P_EE_AUDIO_SPDIFOUT_CHSTS8                           (volatile uint32_t *)(0xff642000 + (0x12f << 2))
+#define     EE_AUDIO_SPDIFOUT_CHSTS9                           (0xff642000 + (0x130 << 2))
+#define SEC_EE_AUDIO_SPDIFOUT_CHSTS9                           (0xff642000 + (0x130 << 2))
+#define   P_EE_AUDIO_SPDIFOUT_CHSTS9                           (volatile uint32_t *)(0xff642000 + (0x130 << 2))
+#define     EE_AUDIO_SPDIFOUT_CHSTSA                           (0xff642000 + (0x131 << 2))
+#define SEC_EE_AUDIO_SPDIFOUT_CHSTSA                           (0xff642000 + (0x131 << 2))
+#define   P_EE_AUDIO_SPDIFOUT_CHSTSA                           (volatile uint32_t *)(0xff642000 + (0x131 << 2))
+#define     EE_AUDIO_SPDIFOUT_CHSTSB                           (0xff642000 + (0x132 << 2))
+#define SEC_EE_AUDIO_SPDIFOUT_CHSTSB                           (0xff642000 + (0x132 << 2))
+#define   P_EE_AUDIO_SPDIFOUT_CHSTSB                           (volatile uint32_t *)(0xff642000 + (0x132 << 2))
+#define     EE_AUDIO_SPDIFOUT_MUTE_VAL                         (0xff642000 + (0x133 << 2))
+#define SEC_EE_AUDIO_SPDIFOUT_MUTE_VAL                         (0xff642000 + (0x133 << 2))
+#define   P_EE_AUDIO_SPDIFOUT_MUTE_VAL                         (volatile uint32_t *)(0xff642000 + (0x133 << 2))
+#define     EE_AUDIO_TDMOUT_A_CTRL0                            (0xff642000 + (0x140 << 2))
+#define SEC_EE_AUDIO_TDMOUT_A_CTRL0                            (0xff642000 + (0x140 << 2))
+#define   P_EE_AUDIO_TDMOUT_A_CTRL0                            (volatile uint32_t *)(0xff642000 + (0x140 << 2))
+#define     EE_AUDIO_TDMOUT_A_CTRL1                            (0xff642000 + (0x141 << 2))
+#define SEC_EE_AUDIO_TDMOUT_A_CTRL1                            (0xff642000 + (0x141 << 2))
+#define   P_EE_AUDIO_TDMOUT_A_CTRL1                            (volatile uint32_t *)(0xff642000 + (0x141 << 2))
+#define     EE_AUDIO_TDMOUT_A_SWAP                             (0xff642000 + (0x142 << 2))
+#define SEC_EE_AUDIO_TDMOUT_A_SWAP                             (0xff642000 + (0x142 << 2))
+#define   P_EE_AUDIO_TDMOUT_A_SWAP                             (volatile uint32_t *)(0xff642000 + (0x142 << 2))
+#define     EE_AUDIO_TDMOUT_A_MASK0                            (0xff642000 + (0x143 << 2))
+#define SEC_EE_AUDIO_TDMOUT_A_MASK0                            (0xff642000 + (0x143 << 2))
+#define   P_EE_AUDIO_TDMOUT_A_MASK0                            (volatile uint32_t *)(0xff642000 + (0x143 << 2))
+#define     EE_AUDIO_TDMOUT_A_MASK1                            (0xff642000 + (0x144 << 2))
+#define SEC_EE_AUDIO_TDMOUT_A_MASK1                            (0xff642000 + (0x144 << 2))
+#define   P_EE_AUDIO_TDMOUT_A_MASK1                            (volatile uint32_t *)(0xff642000 + (0x144 << 2))
+#define     EE_AUDIO_TDMOUT_A_MASK2                            (0xff642000 + (0x145 << 2))
+#define SEC_EE_AUDIO_TDMOUT_A_MASK2                            (0xff642000 + (0x145 << 2))
+#define   P_EE_AUDIO_TDMOUT_A_MASK2                            (volatile uint32_t *)(0xff642000 + (0x145 << 2))
+#define     EE_AUDIO_TDMOUT_A_MASK3                            (0xff642000 + (0x146 << 2))
+#define SEC_EE_AUDIO_TDMOUT_A_MASK3                            (0xff642000 + (0x146 << 2))
+#define   P_EE_AUDIO_TDMOUT_A_MASK3                            (volatile uint32_t *)(0xff642000 + (0x146 << 2))
+#define     EE_AUDIO_TDMOUT_A_STAT                             (0xff642000 + (0x147 << 2))
+#define SEC_EE_AUDIO_TDMOUT_A_STAT                             (0xff642000 + (0x147 << 2))
+#define   P_EE_AUDIO_TDMOUT_A_STAT                             (volatile uint32_t *)(0xff642000 + (0x147 << 2))
+#define     EE_AUDIO_TDMOUT_A_GAIN0                            (0xff642000 + (0x148 << 2))
+#define SEC_EE_AUDIO_TDMOUT_A_GAIN0                            (0xff642000 + (0x148 << 2))
+#define   P_EE_AUDIO_TDMOUT_A_GAIN0                            (volatile uint32_t *)(0xff642000 + (0x148 << 2))
+#define     EE_AUDIO_TDMOUT_A_GAIN1                            (0xff642000 + (0x149 << 2))
+#define SEC_EE_AUDIO_TDMOUT_A_GAIN1                            (0xff642000 + (0x149 << 2))
+#define   P_EE_AUDIO_TDMOUT_A_GAIN1                            (volatile uint32_t *)(0xff642000 + (0x149 << 2))
+#define     EE_AUDIO_TDMOUT_A_MUTE_VAL                         (0xff642000 + (0x14a << 2))
+#define SEC_EE_AUDIO_TDMOUT_A_MUTE_VAL                         (0xff642000 + (0x14a << 2))
+#define   P_EE_AUDIO_TDMOUT_A_MUTE_VAL                         (volatile uint32_t *)(0xff642000 + (0x14a << 2))
+#define     EE_AUDIO_TDMOUT_A_MUTE0                            (0xff642000 + (0x14b << 2))
+#define SEC_EE_AUDIO_TDMOUT_A_MUTE0                            (0xff642000 + (0x14b << 2))
+#define   P_EE_AUDIO_TDMOUT_A_MUTE0                            (volatile uint32_t *)(0xff642000 + (0x14b << 2))
+#define     EE_AUDIO_TDMOUT_A_MUTE1                            (0xff642000 + (0x14c << 2))
+#define SEC_EE_AUDIO_TDMOUT_A_MUTE1                            (0xff642000 + (0x14c << 2))
+#define   P_EE_AUDIO_TDMOUT_A_MUTE1                            (volatile uint32_t *)(0xff642000 + (0x14c << 2))
+#define     EE_AUDIO_TDMOUT_A_MUTE2                            (0xff642000 + (0x14d << 2))
+#define SEC_EE_AUDIO_TDMOUT_A_MUTE2                            (0xff642000 + (0x14d << 2))
+#define   P_EE_AUDIO_TDMOUT_A_MUTE2                            (volatile uint32_t *)(0xff642000 + (0x14d << 2))
+#define     EE_AUDIO_TDMOUT_A_MUTE3                            (0xff642000 + (0x14e << 2))
+#define SEC_EE_AUDIO_TDMOUT_A_MUTE3                            (0xff642000 + (0x14e << 2))
+#define   P_EE_AUDIO_TDMOUT_A_MUTE3                            (volatile uint32_t *)(0xff642000 + (0x14e << 2))
+#define     EE_AUDIO_TDMOUT_A_MASK_VAL                         (0xff642000 + (0x14f << 2))
+#define SEC_EE_AUDIO_TDMOUT_A_MASK_VAL                         (0xff642000 + (0x14f << 2))
+#define   P_EE_AUDIO_TDMOUT_A_MASK_VAL                         (volatile uint32_t *)(0xff642000 + (0x14f << 2))
+#define     EE_AUDIO_TDMOUT_B_CTRL0                            (0xff642000 + (0x150 << 2))
+#define SEC_EE_AUDIO_TDMOUT_B_CTRL0                            (0xff642000 + (0x150 << 2))
+#define   P_EE_AUDIO_TDMOUT_B_CTRL0                            (volatile uint32_t *)(0xff642000 + (0x150 << 2))
+#define     EE_AUDIO_TDMOUT_B_CTRL1                            (0xff642000 + (0x151 << 2))
+#define SEC_EE_AUDIO_TDMOUT_B_CTRL1                            (0xff642000 + (0x151 << 2))
+#define   P_EE_AUDIO_TDMOUT_B_CTRL1                            (volatile uint32_t *)(0xff642000 + (0x151 << 2))
+#define     EE_AUDIO_TDMOUT_B_SWAP                             (0xff642000 + (0x152 << 2))
+#define SEC_EE_AUDIO_TDMOUT_B_SWAP                             (0xff642000 + (0x152 << 2))
+#define   P_EE_AUDIO_TDMOUT_B_SWAP                             (volatile uint32_t *)(0xff642000 + (0x152 << 2))
+#define     EE_AUDIO_TDMOUT_B_MASK0                            (0xff642000 + (0x153 << 2))
+#define SEC_EE_AUDIO_TDMOUT_B_MASK0                            (0xff642000 + (0x153 << 2))
+#define   P_EE_AUDIO_TDMOUT_B_MASK0                            (volatile uint32_t *)(0xff642000 + (0x153 << 2))
+#define     EE_AUDIO_TDMOUT_B_MASK1                            (0xff642000 + (0x154 << 2))
+#define SEC_EE_AUDIO_TDMOUT_B_MASK1                            (0xff642000 + (0x154 << 2))
+#define   P_EE_AUDIO_TDMOUT_B_MASK1                            (volatile uint32_t *)(0xff642000 + (0x154 << 2))
+#define     EE_AUDIO_TDMOUT_B_MASK2                            (0xff642000 + (0x155 << 2))
+#define SEC_EE_AUDIO_TDMOUT_B_MASK2                            (0xff642000 + (0x155 << 2))
+#define   P_EE_AUDIO_TDMOUT_B_MASK2                            (volatile uint32_t *)(0xff642000 + (0x155 << 2))
+#define     EE_AUDIO_TDMOUT_B_MASK3                            (0xff642000 + (0x156 << 2))
+#define SEC_EE_AUDIO_TDMOUT_B_MASK3                            (0xff642000 + (0x156 << 2))
+#define   P_EE_AUDIO_TDMOUT_B_MASK3                            (volatile uint32_t *)(0xff642000 + (0x156 << 2))
+#define     EE_AUDIO_TDMOUT_B_STAT                             (0xff642000 + (0x157 << 2))
+#define SEC_EE_AUDIO_TDMOUT_B_STAT                             (0xff642000 + (0x157 << 2))
+#define   P_EE_AUDIO_TDMOUT_B_STAT                             (volatile uint32_t *)(0xff642000 + (0x157 << 2))
+#define     EE_AUDIO_TDMOUT_B_GAIN0                            (0xff642000 + (0x158 << 2))
+#define SEC_EE_AUDIO_TDMOUT_B_GAIN0                            (0xff642000 + (0x158 << 2))
+#define   P_EE_AUDIO_TDMOUT_B_GAIN0                            (volatile uint32_t *)(0xff642000 + (0x158 << 2))
+#define     EE_AUDIO_TDMOUT_B_GAIN1                            (0xff642000 + (0x159 << 2))
+#define SEC_EE_AUDIO_TDMOUT_B_GAIN1                            (0xff642000 + (0x159 << 2))
+#define   P_EE_AUDIO_TDMOUT_B_GAIN1                            (volatile uint32_t *)(0xff642000 + (0x159 << 2))
+#define     EE_AUDIO_TDMOUT_B_MUTE_VAL                         (0xff642000 + (0x15a << 2))
+#define SEC_EE_AUDIO_TDMOUT_B_MUTE_VAL                         (0xff642000 + (0x15a << 2))
+#define   P_EE_AUDIO_TDMOUT_B_MUTE_VAL                         (volatile uint32_t *)(0xff642000 + (0x15a << 2))
+#define     EE_AUDIO_TDMOUT_B_MUTE0                            (0xff642000 + (0x15b << 2))
+#define SEC_EE_AUDIO_TDMOUT_B_MUTE0                            (0xff642000 + (0x15b << 2))
+#define   P_EE_AUDIO_TDMOUT_B_MUTE0                            (volatile uint32_t *)(0xff642000 + (0x15b << 2))
+#define     EE_AUDIO_TDMOUT_B_MUTE1                            (0xff642000 + (0x15c << 2))
+#define SEC_EE_AUDIO_TDMOUT_B_MUTE1                            (0xff642000 + (0x15c << 2))
+#define   P_EE_AUDIO_TDMOUT_B_MUTE1                            (volatile uint32_t *)(0xff642000 + (0x15c << 2))
+#define     EE_AUDIO_TDMOUT_B_MUTE2                            (0xff642000 + (0x15d << 2))
+#define SEC_EE_AUDIO_TDMOUT_B_MUTE2                            (0xff642000 + (0x15d << 2))
+#define   P_EE_AUDIO_TDMOUT_B_MUTE2                            (volatile uint32_t *)(0xff642000 + (0x15d << 2))
+#define     EE_AUDIO_TDMOUT_B_MUTE3                            (0xff642000 + (0x15e << 2))
+#define SEC_EE_AUDIO_TDMOUT_B_MUTE3                            (0xff642000 + (0x15e << 2))
+#define   P_EE_AUDIO_TDMOUT_B_MUTE3                            (volatile uint32_t *)(0xff642000 + (0x15e << 2))
+#define     EE_AUDIO_TDMOUT_B_MASK_VAL                         (0xff642000 + (0x15f << 2))
+#define SEC_EE_AUDIO_TDMOUT_B_MASK_VAL                         (0xff642000 + (0x15f << 2))
+#define   P_EE_AUDIO_TDMOUT_B_MASK_VAL                         (volatile uint32_t *)(0xff642000 + (0x15f << 2))
+#define     EE_AUDIO_TDMOUT_C_CTRL0                            (0xff642000 + (0x160 << 2))
+#define SEC_EE_AUDIO_TDMOUT_C_CTRL0                            (0xff642000 + (0x160 << 2))
+#define   P_EE_AUDIO_TDMOUT_C_CTRL0                            (volatile uint32_t *)(0xff642000 + (0x160 << 2))
+#define     EE_AUDIO_TDMOUT_C_CTRL1                            (0xff642000 + (0x161 << 2))
+#define SEC_EE_AUDIO_TDMOUT_C_CTRL1                            (0xff642000 + (0x161 << 2))
+#define   P_EE_AUDIO_TDMOUT_C_CTRL1                            (volatile uint32_t *)(0xff642000 + (0x161 << 2))
+#define     EE_AUDIO_TDMOUT_C_SWAP                             (0xff642000 + (0x162 << 2))
+#define SEC_EE_AUDIO_TDMOUT_C_SWAP                             (0xff642000 + (0x162 << 2))
+#define   P_EE_AUDIO_TDMOUT_C_SWAP                             (volatile uint32_t *)(0xff642000 + (0x162 << 2))
+#define     EE_AUDIO_TDMOUT_C_MASK0                            (0xff642000 + (0x163 << 2))
+#define SEC_EE_AUDIO_TDMOUT_C_MASK0                            (0xff642000 + (0x163 << 2))
+#define   P_EE_AUDIO_TDMOUT_C_MASK0                            (volatile uint32_t *)(0xff642000 + (0x163 << 2))
+#define     EE_AUDIO_TDMOUT_C_MASK1                            (0xff642000 + (0x164 << 2))
+#define SEC_EE_AUDIO_TDMOUT_C_MASK1                            (0xff642000 + (0x164 << 2))
+#define   P_EE_AUDIO_TDMOUT_C_MASK1                            (volatile uint32_t *)(0xff642000 + (0x164 << 2))
+#define     EE_AUDIO_TDMOUT_C_MASK2                            (0xff642000 + (0x165 << 2))
+#define SEC_EE_AUDIO_TDMOUT_C_MASK2                            (0xff642000 + (0x165 << 2))
+#define   P_EE_AUDIO_TDMOUT_C_MASK2                            (volatile uint32_t *)(0xff642000 + (0x165 << 2))
+#define     EE_AUDIO_TDMOUT_C_MASK3                            (0xff642000 + (0x166 << 2))
+#define SEC_EE_AUDIO_TDMOUT_C_MASK3                            (0xff642000 + (0x166 << 2))
+#define   P_EE_AUDIO_TDMOUT_C_MASK3                            (volatile uint32_t *)(0xff642000 + (0x166 << 2))
+#define     EE_AUDIO_TDMOUT_C_STAT                             (0xff642000 + (0x167 << 2))
+#define SEC_EE_AUDIO_TDMOUT_C_STAT                             (0xff642000 + (0x167 << 2))
+#define   P_EE_AUDIO_TDMOUT_C_STAT                             (volatile uint32_t *)(0xff642000 + (0x167 << 2))
+#define     EE_AUDIO_TDMOUT_C_GAIN0                            (0xff642000 + (0x168 << 2))
+#define SEC_EE_AUDIO_TDMOUT_C_GAIN0                            (0xff642000 + (0x168 << 2))
+#define   P_EE_AUDIO_TDMOUT_C_GAIN0                            (volatile uint32_t *)(0xff642000 + (0x168 << 2))
+#define     EE_AUDIO_TDMOUT_C_GAIN1                            (0xff642000 + (0x169 << 2))
+#define SEC_EE_AUDIO_TDMOUT_C_GAIN1                            (0xff642000 + (0x169 << 2))
+#define   P_EE_AUDIO_TDMOUT_C_GAIN1                            (volatile uint32_t *)(0xff642000 + (0x169 << 2))
+#define     EE_AUDIO_TDMOUT_C_MUTE_VAL                         (0xff642000 + (0x16a << 2))
+#define SEC_EE_AUDIO_TDMOUT_C_MUTE_VAL                         (0xff642000 + (0x16a << 2))
+#define   P_EE_AUDIO_TDMOUT_C_MUTE_VAL                         (volatile uint32_t *)(0xff642000 + (0x16a << 2))
+#define     EE_AUDIO_TDMOUT_C_MUTE0                            (0xff642000 + (0x16b << 2))
+#define SEC_EE_AUDIO_TDMOUT_C_MUTE0                            (0xff642000 + (0x16b << 2))
+#define   P_EE_AUDIO_TDMOUT_C_MUTE0                            (volatile uint32_t *)(0xff642000 + (0x16b << 2))
+#define     EE_AUDIO_TDMOUT_C_MUTE1                            (0xff642000 + (0x16c << 2))
+#define SEC_EE_AUDIO_TDMOUT_C_MUTE1                            (0xff642000 + (0x16c << 2))
+#define   P_EE_AUDIO_TDMOUT_C_MUTE1                            (volatile uint32_t *)(0xff642000 + (0x16c << 2))
+#define     EE_AUDIO_TDMOUT_C_MUTE2                            (0xff642000 + (0x16d << 2))
+#define SEC_EE_AUDIO_TDMOUT_C_MUTE2                            (0xff642000 + (0x16d << 2))
+#define   P_EE_AUDIO_TDMOUT_C_MUTE2                            (volatile uint32_t *)(0xff642000 + (0x16d << 2))
+#define     EE_AUDIO_TDMOUT_C_MUTE3                            (0xff642000 + (0x16e << 2))
+#define SEC_EE_AUDIO_TDMOUT_C_MUTE3                            (0xff642000 + (0x16e << 2))
+#define   P_EE_AUDIO_TDMOUT_C_MUTE3                            (volatile uint32_t *)(0xff642000 + (0x16e << 2))
+#define     EE_AUDIO_TDMOUT_C_MASK_VAL                         (0xff642000 + (0x16f << 2))
+#define SEC_EE_AUDIO_TDMOUT_C_MASK_VAL                         (0xff642000 + (0x16f << 2))
+#define   P_EE_AUDIO_TDMOUT_C_MASK_VAL                         (volatile uint32_t *)(0xff642000 + (0x16f << 2))
+#define     EE_AUDIO_POW_DET_CTRL0                             (0xff642000 + (0x180 << 2))
+#define SEC_EE_AUDIO_POW_DET_CTRL0                             (0xff642000 + (0x180 << 2))
+#define   P_EE_AUDIO_POW_DET_CTRL0                             (volatile uint32_t *)(0xff642000 + (0x180 << 2))
+#define     EE_AUDIO_POW_DET_CTRL1                             (0xff642000 + (0x181 << 2))
+#define SEC_EE_AUDIO_POW_DET_CTRL1                             (0xff642000 + (0x181 << 2))
+#define   P_EE_AUDIO_POW_DET_CTRL1                             (volatile uint32_t *)(0xff642000 + (0x181 << 2))
+#define     EE_AUDIO_POW_DET_TH_HI                             (0xff642000 + (0x182 << 2))
+#define SEC_EE_AUDIO_POW_DET_TH_HI                             (0xff642000 + (0x182 << 2))
+#define   P_EE_AUDIO_POW_DET_TH_HI                             (volatile uint32_t *)(0xff642000 + (0x182 << 2))
+#define     EE_AUDIO_POW_DET_TH_LO                             (0xff642000 + (0x183 << 2))
+#define SEC_EE_AUDIO_POW_DET_TH_LO                             (0xff642000 + (0x183 << 2))
+#define   P_EE_AUDIO_POW_DET_TH_LO                             (volatile uint32_t *)(0xff642000 + (0x183 << 2))
+#define     EE_AUDIO_POW_DET_VALUE                             (0xff642000 + (0x184 << 2))
+#define SEC_EE_AUDIO_POW_DET_VALUE                             (0xff642000 + (0x184 << 2))
+#define   P_EE_AUDIO_POW_DET_VALUE                             (volatile uint32_t *)(0xff642000 + (0x184 << 2))
+#define     EE_AUDIO_SECURITY_CTRL                             (0xff642000 + (0x193 << 2))
+#define SEC_EE_AUDIO_SECURITY_CTRL                             (0xff642000 + (0x193 << 2))
+#define   P_EE_AUDIO_SECURITY_CTRL                             (volatile uint32_t *)(0xff642000 + (0x193 << 2))
+#define     EE_AUDIO_SPDIFOUT_B_STAT                           (0xff642000 + (0x1a0 << 2))
+#define SEC_EE_AUDIO_SPDIFOUT_B_STAT                           (0xff642000 + (0x1a0 << 2))
+#define   P_EE_AUDIO_SPDIFOUT_B_STAT                           (volatile uint32_t *)(0xff642000 + (0x1a0 << 2))
+#define     EE_AUDIO_SPDIFOUT_B_GAIN0                          (0xff642000 + (0x1a1 << 2))
+#define SEC_EE_AUDIO_SPDIFOUT_B_GAIN0                          (0xff642000 + (0x1a1 << 2))
+#define   P_EE_AUDIO_SPDIFOUT_B_GAIN0                          (volatile uint32_t *)(0xff642000 + (0x1a1 << 2))
+#define     EE_AUDIO_SPDIFOUT_B_GAIN1                          (0xff642000 + (0x1a2 << 2))
+#define SEC_EE_AUDIO_SPDIFOUT_B_GAIN1                          (0xff642000 + (0x1a2 << 2))
+#define   P_EE_AUDIO_SPDIFOUT_B_GAIN1                          (volatile uint32_t *)(0xff642000 + (0x1a2 << 2))
+#define     EE_AUDIO_SPDIFOUT_B_CTRL0                          (0xff642000 + (0x1a3 << 2))
+#define SEC_EE_AUDIO_SPDIFOUT_B_CTRL0                          (0xff642000 + (0x1a3 << 2))
+#define   P_EE_AUDIO_SPDIFOUT_B_CTRL0                          (volatile uint32_t *)(0xff642000 + (0x1a3 << 2))
+#define     EE_AUDIO_SPDIFOUT_B_CTRL1                          (0xff642000 + (0x1a4 << 2))
+#define SEC_EE_AUDIO_SPDIFOUT_B_CTRL1                          (0xff642000 + (0x1a4 << 2))
+#define   P_EE_AUDIO_SPDIFOUT_B_CTRL1                          (volatile uint32_t *)(0xff642000 + (0x1a4 << 2))
+#define     EE_AUDIO_SPDIFOUT_B_PREAMB                         (0xff642000 + (0x1a5 << 2))
+#define SEC_EE_AUDIO_SPDIFOUT_B_PREAMB                         (0xff642000 + (0x1a5 << 2))
+#define   P_EE_AUDIO_SPDIFOUT_B_PREAMB                         (volatile uint32_t *)(0xff642000 + (0x1a5 << 2))
+#define     EE_AUDIO_SPDIFOUT_B_SWAP                           (0xff642000 + (0x1a6 << 2))
+#define SEC_EE_AUDIO_SPDIFOUT_B_SWAP                           (0xff642000 + (0x1a6 << 2))
+#define   P_EE_AUDIO_SPDIFOUT_B_SWAP                           (volatile uint32_t *)(0xff642000 + (0x1a6 << 2))
+#define     EE_AUDIO_SPDIFOUT_B_CHSTS0                         (0xff642000 + (0x1a7 << 2))
+#define SEC_EE_AUDIO_SPDIFOUT_B_CHSTS0                         (0xff642000 + (0x1a7 << 2))
+#define   P_EE_AUDIO_SPDIFOUT_B_CHSTS0                         (volatile uint32_t *)(0xff642000 + (0x1a7 << 2))
+#define     EE_AUDIO_SPDIFOUT_B_CHSTS1                         (0xff642000 + (0x1a8 << 2))
+#define SEC_EE_AUDIO_SPDIFOUT_B_CHSTS1                         (0xff642000 + (0x1a8 << 2))
+#define   P_EE_AUDIO_SPDIFOUT_B_CHSTS1                         (volatile uint32_t *)(0xff642000 + (0x1a8 << 2))
+#define     EE_AUDIO_SPDIFOUT_B_CHSTS2                         (0xff642000 + (0x1a9 << 2))
+#define SEC_EE_AUDIO_SPDIFOUT_B_CHSTS2                         (0xff642000 + (0x1a9 << 2))
+#define   P_EE_AUDIO_SPDIFOUT_B_CHSTS2                         (volatile uint32_t *)(0xff642000 + (0x1a9 << 2))
+#define     EE_AUDIO_SPDIFOUT_B_CHSTS3                         (0xff642000 + (0x1aa << 2))
+#define SEC_EE_AUDIO_SPDIFOUT_B_CHSTS3                         (0xff642000 + (0x1aa << 2))
+#define   P_EE_AUDIO_SPDIFOUT_B_CHSTS3                         (volatile uint32_t *)(0xff642000 + (0x1aa << 2))
+#define     EE_AUDIO_SPDIFOUT_B_CHSTS4                         (0xff642000 + (0x1ab << 2))
+#define SEC_EE_AUDIO_SPDIFOUT_B_CHSTS4                         (0xff642000 + (0x1ab << 2))
+#define   P_EE_AUDIO_SPDIFOUT_B_CHSTS4                         (volatile uint32_t *)(0xff642000 + (0x1ab << 2))
+#define     EE_AUDIO_SPDIFOUT_B_CHSTS5                         (0xff642000 + (0x1ac << 2))
+#define SEC_EE_AUDIO_SPDIFOUT_B_CHSTS5                         (0xff642000 + (0x1ac << 2))
+#define   P_EE_AUDIO_SPDIFOUT_B_CHSTS5                         (volatile uint32_t *)(0xff642000 + (0x1ac << 2))
+#define     EE_AUDIO_SPDIFOUT_B_CHSTS6                         (0xff642000 + (0x1ad << 2))
+#define SEC_EE_AUDIO_SPDIFOUT_B_CHSTS6                         (0xff642000 + (0x1ad << 2))
+#define   P_EE_AUDIO_SPDIFOUT_B_CHSTS6                         (volatile uint32_t *)(0xff642000 + (0x1ad << 2))
+#define     EE_AUDIO_SPDIFOUT_B_CHSTS7                         (0xff642000 + (0x1ae << 2))
+#define SEC_EE_AUDIO_SPDIFOUT_B_CHSTS7                         (0xff642000 + (0x1ae << 2))
+#define   P_EE_AUDIO_SPDIFOUT_B_CHSTS7                         (volatile uint32_t *)(0xff642000 + (0x1ae << 2))
+#define     EE_AUDIO_SPDIFOUT_B_CHSTS8                         (0xff642000 + (0x1af << 2))
+#define SEC_EE_AUDIO_SPDIFOUT_B_CHSTS8                         (0xff642000 + (0x1af << 2))
+#define   P_EE_AUDIO_SPDIFOUT_B_CHSTS8                         (volatile uint32_t *)(0xff642000 + (0x1af << 2))
+#define     EE_AUDIO_SPDIFOUT_B_CHSTS9                         (0xff642000 + (0x1b0 << 2))
+#define SEC_EE_AUDIO_SPDIFOUT_B_CHSTS9                         (0xff642000 + (0x1b0 << 2))
+#define   P_EE_AUDIO_SPDIFOUT_B_CHSTS9                         (volatile uint32_t *)(0xff642000 + (0x1b0 << 2))
+#define     EE_AUDIO_SPDIFOUT_B_CHSTSA                         (0xff642000 + (0x1b1 << 2))
+#define SEC_EE_AUDIO_SPDIFOUT_B_CHSTSA                         (0xff642000 + (0x1b1 << 2))
+#define   P_EE_AUDIO_SPDIFOUT_B_CHSTSA                         (volatile uint32_t *)(0xff642000 + (0x1b1 << 2))
+#define     EE_AUDIO_SPDIFOUT_B_CHSTSB                         (0xff642000 + (0x1b2 << 2))
+#define SEC_EE_AUDIO_SPDIFOUT_B_CHSTSB                         (0xff642000 + (0x1b2 << 2))
+#define   P_EE_AUDIO_SPDIFOUT_B_CHSTSB                         (volatile uint32_t *)(0xff642000 + (0x1b2 << 2))
+#define     EE_AUDIO_SPDIFOUT_B_MUTE_VAL                       (0xff642000 + (0x1b3 << 2))
+#define SEC_EE_AUDIO_SPDIFOUT_B_MUTE_VAL                       (0xff642000 + (0x1b3 << 2))
+#define   P_EE_AUDIO_SPDIFOUT_B_MUTE_VAL                       (volatile uint32_t *)(0xff642000 + (0x1b3 << 2))
+#define     EE_AUDIO_TORAM_CTRL0                               (0xff642000 + (0x1c0 << 2))
+#define SEC_EE_AUDIO_TORAM_CTRL0                               (0xff642000 + (0x1c0 << 2))
+#define   P_EE_AUDIO_TORAM_CTRL0                               (volatile uint32_t *)(0xff642000 + (0x1c0 << 2))
+#define     EE_AUDIO_TORAM_CTRL1                               (0xff642000 + (0x1c1 << 2))
+#define SEC_EE_AUDIO_TORAM_CTRL1                               (0xff642000 + (0x1c1 << 2))
+#define   P_EE_AUDIO_TORAM_CTRL1                               (volatile uint32_t *)(0xff642000 + (0x1c1 << 2))
+#define     EE_AUDIO_TORAM_START_ADDR                          (0xff642000 + (0x1c2 << 2))
+#define SEC_EE_AUDIO_TORAM_START_ADDR                          (0xff642000 + (0x1c2 << 2))
+#define   P_EE_AUDIO_TORAM_START_ADDR                          (volatile uint32_t *)(0xff642000 + (0x1c2 << 2))
+#define     EE_AUDIO_TORAM_FINISH_ADDR                         (0xff642000 + (0x1c3 << 2))
+#define SEC_EE_AUDIO_TORAM_FINISH_ADDR                         (0xff642000 + (0x1c3 << 2))
+#define   P_EE_AUDIO_TORAM_FINISH_ADDR                         (volatile uint32_t *)(0xff642000 + (0x1c3 << 2))
+#define     EE_AUDIO_TORAM_INT_ADDR                            (0xff642000 + (0x1c4 << 2))
+#define SEC_EE_AUDIO_TORAM_INT_ADDR                            (0xff642000 + (0x1c4 << 2))
+#define   P_EE_AUDIO_TORAM_INT_ADDR                            (volatile uint32_t *)(0xff642000 + (0x1c4 << 2))
+#define     EE_AUDIO_TORAM_STATUS1                             (0xff642000 + (0x1c5 << 2))
+#define SEC_EE_AUDIO_TORAM_STATUS1                             (0xff642000 + (0x1c5 << 2))
+#define   P_EE_AUDIO_TORAM_STATUS1                             (volatile uint32_t *)(0xff642000 + (0x1c5 << 2))
+#define     EE_AUDIO_TORAM_STATUS2                             (0xff642000 + (0x1c6 << 2))
+#define SEC_EE_AUDIO_TORAM_STATUS2                             (0xff642000 + (0x1c6 << 2))
+#define   P_EE_AUDIO_TORAM_STATUS2                             (volatile uint32_t *)(0xff642000 + (0x1c6 << 2))
+#define     EE_AUDIO_TORAM_INIT_ADDR                           (0xff642000 + (0x1c7 << 2))
+#define SEC_EE_AUDIO_TORAM_INIT_ADDR                           (0xff642000 + (0x1c7 << 2))
+#define   P_EE_AUDIO_TORAM_INIT_ADDR                           (volatile uint32_t *)(0xff642000 + (0x1c7 << 2))
+#define     EE_AUDIO_TOACODEC_CTRL0                            (0xff642000 + (0x1d0 << 2))
+#define SEC_EE_AUDIO_TOACODEC_CTRL0                            (0xff642000 + (0x1d0 << 2))
+#define   P_EE_AUDIO_TOACODEC_CTRL0                            (volatile uint32_t *)(0xff642000 + (0x1d0 << 2))
+#define     EE_AUDIO_TOHDMITX_CTRL0                            (0xff642000 + (0x1d1 << 2))
+#define SEC_EE_AUDIO_TOHDMITX_CTRL0                            (0xff642000 + (0x1d1 << 2))
+#define   P_EE_AUDIO_TOHDMITX_CTRL0                            (volatile uint32_t *)(0xff642000 + (0x1d1 << 2))
+//eq drc register
+#define     AED_EQ_CH1_COEF00                                  (0xff642000 + (0x200 << 2))
+#define SEC_AED_EQ_CH1_COEF00                                  (0xff642000 + (0x200 << 2))
+#define   P_AED_EQ_CH1_COEF00                                  (volatile uint32_t *)(0xff642000 + (0x200 << 2))
+#define     AED_EQ_CH1_COEF01                                  (0xff642000 + (0x201 << 2))
+#define SEC_AED_EQ_CH1_COEF01                                  (0xff642000 + (0x201 << 2))
+#define   P_AED_EQ_CH1_COEF01                                  (volatile uint32_t *)(0xff642000 + (0x201 << 2))
+#define     AED_EQ_CH1_COEF02                                  (0xff642000 + (0x202 << 2))
+#define SEC_AED_EQ_CH1_COEF02                                  (0xff642000 + (0x202 << 2))
+#define   P_AED_EQ_CH1_COEF02                                  (volatile uint32_t *)(0xff642000 + (0x202 << 2))
+#define     AED_EQ_CH1_COEF03                                  (0xff642000 + (0x203 << 2))
+#define SEC_AED_EQ_CH1_COEF03                                  (0xff642000 + (0x203 << 2))
+#define   P_AED_EQ_CH1_COEF03                                  (volatile uint32_t *)(0xff642000 + (0x203 << 2))
+#define     AED_EQ_CH1_COEF04                                  (0xff642000 + (0x204 << 2))
+#define SEC_AED_EQ_CH1_COEF04                                  (0xff642000 + (0x204 << 2))
+#define   P_AED_EQ_CH1_COEF04                                  (volatile uint32_t *)(0xff642000 + (0x204 << 2))
+#define     AED_EQ_CH1_COEF10                                  (0xff642000 + (0x205 << 2))
+#define SEC_AED_EQ_CH1_COEF10                                  (0xff642000 + (0x205 << 2))
+#define   P_AED_EQ_CH1_COEF10                                  (volatile uint32_t *)(0xff642000 + (0x205 << 2))
+#define     AED_EQ_CH1_COEF11                                  (0xff642000 + (0x206 << 2))
+#define SEC_AED_EQ_CH1_COEF11                                  (0xff642000 + (0x206 << 2))
+#define   P_AED_EQ_CH1_COEF11                                  (volatile uint32_t *)(0xff642000 + (0x206 << 2))
+#define     AED_EQ_CH1_COEF12                                  (0xff642000 + (0x207 << 2))
+#define SEC_AED_EQ_CH1_COEF12                                  (0xff642000 + (0x207 << 2))
+#define   P_AED_EQ_CH1_COEF12                                  (volatile uint32_t *)(0xff642000 + (0x207 << 2))
+#define     AED_EQ_CH1_COEF13                                  (0xff642000 + (0x208 << 2))
+#define SEC_AED_EQ_CH1_COEF13                                  (0xff642000 + (0x208 << 2))
+#define   P_AED_EQ_CH1_COEF13                                  (volatile uint32_t *)(0xff642000 + (0x208 << 2))
+#define     AED_EQ_CH1_COEF14                                  (0xff642000 + (0x209 << 2))
+#define SEC_AED_EQ_CH1_COEF14                                  (0xff642000 + (0x209 << 2))
+#define   P_AED_EQ_CH1_COEF14                                  (volatile uint32_t *)(0xff642000 + (0x209 << 2))
+#define     AED_EQ_CH1_COEF20                                  (0xff642000 + (0x20a << 2))
+#define SEC_AED_EQ_CH1_COEF20                                  (0xff642000 + (0x20a << 2))
+#define   P_AED_EQ_CH1_COEF20                                  (volatile uint32_t *)(0xff642000 + (0x20a << 2))
+#define     AED_EQ_CH1_COEF21                                  (0xff642000 + (0x20b << 2))
+#define SEC_AED_EQ_CH1_COEF21                                  (0xff642000 + (0x20b << 2))
+#define   P_AED_EQ_CH1_COEF21                                  (volatile uint32_t *)(0xff642000 + (0x20b << 2))
+#define     AED_EQ_CH1_COEF22                                  (0xff642000 + (0x20c << 2))
+#define SEC_AED_EQ_CH1_COEF22                                  (0xff642000 + (0x20c << 2))
+#define   P_AED_EQ_CH1_COEF22                                  (volatile uint32_t *)(0xff642000 + (0x20c << 2))
+#define     AED_EQ_CH1_COEF23                                  (0xff642000 + (0x20d << 2))
+#define SEC_AED_EQ_CH1_COEF23                                  (0xff642000 + (0x20d << 2))
+#define   P_AED_EQ_CH1_COEF23                                  (volatile uint32_t *)(0xff642000 + (0x20d << 2))
+#define     AED_EQ_CH1_COEF24                                  (0xff642000 + (0x20e << 2))
+#define SEC_AED_EQ_CH1_COEF24                                  (0xff642000 + (0x20e << 2))
+#define   P_AED_EQ_CH1_COEF24                                  (volatile uint32_t *)(0xff642000 + (0x20e << 2))
+#define     AED_EQ_CH1_COEF30                                  (0xff642000 + (0x20f << 2))
+#define SEC_AED_EQ_CH1_COEF30                                  (0xff642000 + (0x20f << 2))
+#define   P_AED_EQ_CH1_COEF30                                  (volatile uint32_t *)(0xff642000 + (0x20f << 2))
+#define     AED_EQ_CH1_COEF31                                  (0xff642000 + (0x210 << 2))
+#define SEC_AED_EQ_CH1_COEF31                                  (0xff642000 + (0x210 << 2))
+#define   P_AED_EQ_CH1_COEF31                                  (volatile uint32_t *)(0xff642000 + (0x210 << 2))
+#define     AED_EQ_CH1_COEF32                                  (0xff642000 + (0x211 << 2))
+#define SEC_AED_EQ_CH1_COEF32                                  (0xff642000 + (0x211 << 2))
+#define   P_AED_EQ_CH1_COEF32                                  (volatile uint32_t *)(0xff642000 + (0x211 << 2))
+#define     AED_EQ_CH1_COEF33                                  (0xff642000 + (0x212 << 2))
+#define SEC_AED_EQ_CH1_COEF33                                  (0xff642000 + (0x212 << 2))
+#define   P_AED_EQ_CH1_COEF33                                  (volatile uint32_t *)(0xff642000 + (0x212 << 2))
+#define     AED_EQ_CH1_COEF34                                  (0xff642000 + (0x213 << 2))
+#define SEC_AED_EQ_CH1_COEF34                                  (0xff642000 + (0x213 << 2))
+#define   P_AED_EQ_CH1_COEF34                                  (volatile uint32_t *)(0xff642000 + (0x213 << 2))
+#define     AED_EQ_CH1_COEF40                                  (0xff642000 + (0x214 << 2))
+#define SEC_AED_EQ_CH1_COEF40                                  (0xff642000 + (0x214 << 2))
+#define   P_AED_EQ_CH1_COEF40                                  (volatile uint32_t *)(0xff642000 + (0x214 << 2))
+#define     AED_EQ_CH1_COEF41                                  (0xff642000 + (0x215 << 2))
+#define SEC_AED_EQ_CH1_COEF41                                  (0xff642000 + (0x215 << 2))
+#define   P_AED_EQ_CH1_COEF41                                  (volatile uint32_t *)(0xff642000 + (0x215 << 2))
+#define     AED_EQ_CH1_COEF42                                  (0xff642000 + (0x216 << 2))
+#define SEC_AED_EQ_CH1_COEF42                                  (0xff642000 + (0x216 << 2))
+#define   P_AED_EQ_CH1_COEF42                                  (volatile uint32_t *)(0xff642000 + (0x216 << 2))
+#define     AED_EQ_CH1_COEF43                                  (0xff642000 + (0x217 << 2))
+#define SEC_AED_EQ_CH1_COEF43                                  (0xff642000 + (0x217 << 2))
+#define   P_AED_EQ_CH1_COEF43                                  (volatile uint32_t *)(0xff642000 + (0x217 << 2))
+#define     AED_EQ_CH1_COEF44                                  (0xff642000 + (0x218 << 2))
+#define SEC_AED_EQ_CH1_COEF44                                  (0xff642000 + (0x218 << 2))
+#define   P_AED_EQ_CH1_COEF44                                  (volatile uint32_t *)(0xff642000 + (0x218 << 2))
+#define     AED_EQ_CH1_COEF50                                  (0xff642000 + (0x219 << 2))
+#define SEC_AED_EQ_CH1_COEF50                                  (0xff642000 + (0x219 << 2))
+#define   P_AED_EQ_CH1_COEF50                                  (volatile uint32_t *)(0xff642000 + (0x219 << 2))
+#define     AED_EQ_CH1_COEF51                                  (0xff642000 + (0x21a << 2))
+#define SEC_AED_EQ_CH1_COEF51                                  (0xff642000 + (0x21a << 2))
+#define   P_AED_EQ_CH1_COEF51                                  (volatile uint32_t *)(0xff642000 + (0x21a << 2))
+#define     AED_EQ_CH1_COEF52                                  (0xff642000 + (0x21b << 2))
+#define SEC_AED_EQ_CH1_COEF52                                  (0xff642000 + (0x21b << 2))
+#define   P_AED_EQ_CH1_COEF52                                  (volatile uint32_t *)(0xff642000 + (0x21b << 2))
+#define     AED_EQ_CH1_COEF53                                  (0xff642000 + (0x21c << 2))
+#define SEC_AED_EQ_CH1_COEF53                                  (0xff642000 + (0x21c << 2))
+#define   P_AED_EQ_CH1_COEF53                                  (volatile uint32_t *)(0xff642000 + (0x21c << 2))
+#define     AED_EQ_CH1_COEF54                                  (0xff642000 + (0x21d << 2))
+#define SEC_AED_EQ_CH1_COEF54                                  (0xff642000 + (0x21d << 2))
+#define   P_AED_EQ_CH1_COEF54                                  (volatile uint32_t *)(0xff642000 + (0x21d << 2))
+#define     AED_EQ_CH1_COEF60                                  (0xff642000 + (0x21e << 2))
+#define SEC_AED_EQ_CH1_COEF60                                  (0xff642000 + (0x21e << 2))
+#define   P_AED_EQ_CH1_COEF60                                  (volatile uint32_t *)(0xff642000 + (0x21e << 2))
+#define     AED_EQ_CH1_COEF61                                  (0xff642000 + (0x21f << 2))
+#define SEC_AED_EQ_CH1_COEF61                                  (0xff642000 + (0x21f << 2))
+#define   P_AED_EQ_CH1_COEF61                                  (volatile uint32_t *)(0xff642000 + (0x21f << 2))
+#define     AED_EQ_CH1_COEF62                                  (0xff642000 + (0x220 << 2))
+#define SEC_AED_EQ_CH1_COEF62                                  (0xff642000 + (0x220 << 2))
+#define   P_AED_EQ_CH1_COEF62                                  (volatile uint32_t *)(0xff642000 + (0x220 << 2))
+#define     AED_EQ_CH1_COEF63                                  (0xff642000 + (0x221 << 2))
+#define SEC_AED_EQ_CH1_COEF63                                  (0xff642000 + (0x221 << 2))
+#define   P_AED_EQ_CH1_COEF63                                  (volatile uint32_t *)(0xff642000 + (0x221 << 2))
+#define     AED_EQ_CH1_COEF64                                  (0xff642000 + (0x222 << 2))
+#define SEC_AED_EQ_CH1_COEF64                                  (0xff642000 + (0x222 << 2))
+#define   P_AED_EQ_CH1_COEF64                                  (volatile uint32_t *)(0xff642000 + (0x222 << 2))
+#define     AED_EQ_CH1_COEF70                                  (0xff642000 + (0x223 << 2))
+#define SEC_AED_EQ_CH1_COEF70                                  (0xff642000 + (0x223 << 2))
+#define   P_AED_EQ_CH1_COEF70                                  (volatile uint32_t *)(0xff642000 + (0x223 << 2))
+#define     AED_EQ_CH1_COEF71                                  (0xff642000 + (0x224 << 2))
+#define SEC_AED_EQ_CH1_COEF71                                  (0xff642000 + (0x224 << 2))
+#define   P_AED_EQ_CH1_COEF71                                  (volatile uint32_t *)(0xff642000 + (0x224 << 2))
+#define     AED_EQ_CH1_COEF72                                  (0xff642000 + (0x225 << 2))
+#define SEC_AED_EQ_CH1_COEF72                                  (0xff642000 + (0x225 << 2))
+#define   P_AED_EQ_CH1_COEF72                                  (volatile uint32_t *)(0xff642000 + (0x225 << 2))
+#define     AED_EQ_CH1_COEF73                                  (0xff642000 + (0x226 << 2))
+#define SEC_AED_EQ_CH1_COEF73                                  (0xff642000 + (0x226 << 2))
+#define   P_AED_EQ_CH1_COEF73                                  (volatile uint32_t *)(0xff642000 + (0x226 << 2))
+#define     AED_EQ_CH1_COEF74                                  (0xff642000 + (0x227 << 2))
+#define SEC_AED_EQ_CH1_COEF74                                  (0xff642000 + (0x227 << 2))
+#define   P_AED_EQ_CH1_COEF74                                  (volatile uint32_t *)(0xff642000 + (0x227 << 2))
+#define     AED_EQ_CH1_COEF80                                  (0xff642000 + (0x228 << 2))
+#define SEC_AED_EQ_CH1_COEF80                                  (0xff642000 + (0x228 << 2))
+#define   P_AED_EQ_CH1_COEF80                                  (volatile uint32_t *)(0xff642000 + (0x228 << 2))
+#define     AED_EQ_CH1_COEF81                                  (0xff642000 + (0x229 << 2))
+#define SEC_AED_EQ_CH1_COEF81                                  (0xff642000 + (0x229 << 2))
+#define   P_AED_EQ_CH1_COEF81                                  (volatile uint32_t *)(0xff642000 + (0x229 << 2))
+#define     AED_EQ_CH1_COEF82                                  (0xff642000 + (0x22a << 2))
+#define SEC_AED_EQ_CH1_COEF82                                  (0xff642000 + (0x22a << 2))
+#define   P_AED_EQ_CH1_COEF82                                  (volatile uint32_t *)(0xff642000 + (0x22a << 2))
+#define     AED_EQ_CH1_COEF83                                  (0xff642000 + (0x22b << 2))
+#define SEC_AED_EQ_CH1_COEF83                                  (0xff642000 + (0x22b << 2))
+#define   P_AED_EQ_CH1_COEF83                                  (volatile uint32_t *)(0xff642000 + (0x22b << 2))
+#define     AED_EQ_CH1_COEF84                                  (0xff642000 + (0x22c << 2))
+#define SEC_AED_EQ_CH1_COEF84                                  (0xff642000 + (0x22c << 2))
+#define   P_AED_EQ_CH1_COEF84                                  (volatile uint32_t *)(0xff642000 + (0x22c << 2))
+#define     AED_EQ_CH1_COEF90                                  (0xff642000 + (0x22d << 2))
+#define SEC_AED_EQ_CH1_COEF90                                  (0xff642000 + (0x22d << 2))
+#define   P_AED_EQ_CH1_COEF90                                  (volatile uint32_t *)(0xff642000 + (0x22d << 2))
+#define     AED_EQ_CH1_COEF91                                  (0xff642000 + (0x22e << 2))
+#define SEC_AED_EQ_CH1_COEF91                                  (0xff642000 + (0x22e << 2))
+#define   P_AED_EQ_CH1_COEF91                                  (volatile uint32_t *)(0xff642000 + (0x22e << 2))
+#define     AED_EQ_CH1_COEF92                                  (0xff642000 + (0x22f << 2))
+#define SEC_AED_EQ_CH1_COEF92                                  (0xff642000 + (0x22f << 2))
+#define   P_AED_EQ_CH1_COEF92                                  (volatile uint32_t *)(0xff642000 + (0x22f << 2))
+#define     AED_EQ_CH1_COEF93                                  (0xff642000 + (0x230 << 2))
+#define SEC_AED_EQ_CH1_COEF93                                  (0xff642000 + (0x230 << 2))
+#define   P_AED_EQ_CH1_COEF93                                  (volatile uint32_t *)(0xff642000 + (0x230 << 2))
+#define     AED_EQ_CH1_COEF94                                  (0xff642000 + (0x231 << 2))
+#define SEC_AED_EQ_CH1_COEF94                                  (0xff642000 + (0x231 << 2))
+#define   P_AED_EQ_CH1_COEF94                                  (volatile uint32_t *)(0xff642000 + (0x231 << 2))
+#define     AED_EQ_CH2_COEF00                                  (0xff642000 + (0x232 << 2))
+#define SEC_AED_EQ_CH2_COEF00                                  (0xff642000 + (0x232 << 2))
+#define   P_AED_EQ_CH2_COEF00                                  (volatile uint32_t *)(0xff642000 + (0x232 << 2))
+#define     AED_EQ_CH2_COEF01                                  (0xff642000 + (0x233 << 2))
+#define SEC_AED_EQ_CH2_COEF01                                  (0xff642000 + (0x233 << 2))
+#define   P_AED_EQ_CH2_COEF01                                  (volatile uint32_t *)(0xff642000 + (0x233 << 2))
+#define     AED_EQ_CH2_COEF02                                  (0xff642000 + (0x234 << 2))
+#define SEC_AED_EQ_CH2_COEF02                                  (0xff642000 + (0x234 << 2))
+#define   P_AED_EQ_CH2_COEF02                                  (volatile uint32_t *)(0xff642000 + (0x234 << 2))
+#define     AED_EQ_CH2_COEF03                                  (0xff642000 + (0x235 << 2))
+#define SEC_AED_EQ_CH2_COEF03                                  (0xff642000 + (0x235 << 2))
+#define   P_AED_EQ_CH2_COEF03                                  (volatile uint32_t *)(0xff642000 + (0x235 << 2))
+#define     AED_EQ_CH2_COEF04                                  (0xff642000 + (0x236 << 2))
+#define SEC_AED_EQ_CH2_COEF04                                  (0xff642000 + (0x236 << 2))
+#define   P_AED_EQ_CH2_COEF04                                  (volatile uint32_t *)(0xff642000 + (0x236 << 2))
+#define     AED_EQ_CH2_COEF10                                  (0xff642000 + (0x237 << 2))
+#define SEC_AED_EQ_CH2_COEF10                                  (0xff642000 + (0x237 << 2))
+#define   P_AED_EQ_CH2_COEF10                                  (volatile uint32_t *)(0xff642000 + (0x237 << 2))
+#define     AED_EQ_CH2_COEF11                                  (0xff642000 + (0x238 << 2))
+#define SEC_AED_EQ_CH2_COEF11                                  (0xff642000 + (0x238 << 2))
+#define   P_AED_EQ_CH2_COEF11                                  (volatile uint32_t *)(0xff642000 + (0x238 << 2))
+#define     AED_EQ_CH2_COEF12                                  (0xff642000 + (0x239 << 2))
+#define SEC_AED_EQ_CH2_COEF12                                  (0xff642000 + (0x239 << 2))
+#define   P_AED_EQ_CH2_COEF12                                  (volatile uint32_t *)(0xff642000 + (0x239 << 2))
+#define     AED_EQ_CH2_COEF13                                  (0xff642000 + (0x23a << 2))
+#define SEC_AED_EQ_CH2_COEF13                                  (0xff642000 + (0x23a << 2))
+#define   P_AED_EQ_CH2_COEF13                                  (volatile uint32_t *)(0xff642000 + (0x23a << 2))
+#define     AED_EQ_CH2_COEF14                                  (0xff642000 + (0x23b << 2))
+#define SEC_AED_EQ_CH2_COEF14                                  (0xff642000 + (0x23b << 2))
+#define   P_AED_EQ_CH2_COEF14                                  (volatile uint32_t *)(0xff642000 + (0x23b << 2))
+#define     AED_EQ_CH2_COEF20                                  (0xff642000 + (0x23c << 2))
+#define SEC_AED_EQ_CH2_COEF20                                  (0xff642000 + (0x23c << 2))
+#define   P_AED_EQ_CH2_COEF20                                  (volatile uint32_t *)(0xff642000 + (0x23c << 2))
+#define     AED_EQ_CH2_COEF21                                  (0xff642000 + (0x23d << 2))
+#define SEC_AED_EQ_CH2_COEF21                                  (0xff642000 + (0x23d << 2))
+#define   P_AED_EQ_CH2_COEF21                                  (volatile uint32_t *)(0xff642000 + (0x23d << 2))
+#define     AED_EQ_CH2_COEF22                                  (0xff642000 + (0x23e << 2))
+#define SEC_AED_EQ_CH2_COEF22                                  (0xff642000 + (0x23e << 2))
+#define   P_AED_EQ_CH2_COEF22                                  (volatile uint32_t *)(0xff642000 + (0x23e << 2))
+#define     AED_EQ_CH2_COEF23                                  (0xff642000 + (0x23f << 2))
+#define SEC_AED_EQ_CH2_COEF23                                  (0xff642000 + (0x23f << 2))
+#define   P_AED_EQ_CH2_COEF23                                  (volatile uint32_t *)(0xff642000 + (0x23f << 2))
+#define     AED_EQ_CH2_COEF24                                  (0xff642000 + (0x240 << 2))
+#define SEC_AED_EQ_CH2_COEF24                                  (0xff642000 + (0x240 << 2))
+#define   P_AED_EQ_CH2_COEF24                                  (volatile uint32_t *)(0xff642000 + (0x240 << 2))
+#define     AED_EQ_CH2_COEF30                                  (0xff642000 + (0x241 << 2))
+#define SEC_AED_EQ_CH2_COEF30                                  (0xff642000 + (0x241 << 2))
+#define   P_AED_EQ_CH2_COEF30                                  (volatile uint32_t *)(0xff642000 + (0x241 << 2))
+#define     AED_EQ_CH2_COEF31                                  (0xff642000 + (0x242 << 2))
+#define SEC_AED_EQ_CH2_COEF31                                  (0xff642000 + (0x242 << 2))
+#define   P_AED_EQ_CH2_COEF31                                  (volatile uint32_t *)(0xff642000 + (0x242 << 2))
+#define     AED_EQ_CH2_COEF32                                  (0xff642000 + (0x243 << 2))
+#define SEC_AED_EQ_CH2_COEF32                                  (0xff642000 + (0x243 << 2))
+#define   P_AED_EQ_CH2_COEF32                                  (volatile uint32_t *)(0xff642000 + (0x243 << 2))
+#define     AED_EQ_CH2_COEF33                                  (0xff642000 + (0x244 << 2))
+#define SEC_AED_EQ_CH2_COEF33                                  (0xff642000 + (0x244 << 2))
+#define   P_AED_EQ_CH2_COEF33                                  (volatile uint32_t *)(0xff642000 + (0x244 << 2))
+#define     AED_EQ_CH2_COEF34                                  (0xff642000 + (0x245 << 2))
+#define SEC_AED_EQ_CH2_COEF34                                  (0xff642000 + (0x245 << 2))
+#define   P_AED_EQ_CH2_COEF34                                  (volatile uint32_t *)(0xff642000 + (0x245 << 2))
+#define     AED_EQ_CH2_COEF40                                  (0xff642000 + (0x246 << 2))
+#define SEC_AED_EQ_CH2_COEF40                                  (0xff642000 + (0x246 << 2))
+#define   P_AED_EQ_CH2_COEF40                                  (volatile uint32_t *)(0xff642000 + (0x246 << 2))
+#define     AED_EQ_CH2_COEF41                                  (0xff642000 + (0x247 << 2))
+#define SEC_AED_EQ_CH2_COEF41                                  (0xff642000 + (0x247 << 2))
+#define   P_AED_EQ_CH2_COEF41                                  (volatile uint32_t *)(0xff642000 + (0x247 << 2))
+#define     AED_EQ_CH2_COEF42                                  (0xff642000 + (0x248 << 2))
+#define SEC_AED_EQ_CH2_COEF42                                  (0xff642000 + (0x248 << 2))
+#define   P_AED_EQ_CH2_COEF42                                  (volatile uint32_t *)(0xff642000 + (0x248 << 2))
+#define     AED_EQ_CH2_COEF43                                  (0xff642000 + (0x249 << 2))
+#define SEC_AED_EQ_CH2_COEF43                                  (0xff642000 + (0x249 << 2))
+#define   P_AED_EQ_CH2_COEF43                                  (volatile uint32_t *)(0xff642000 + (0x249 << 2))
+#define     AED_EQ_CH2_COEF44                                  (0xff642000 + (0x24a << 2))
+#define SEC_AED_EQ_CH2_COEF44                                  (0xff642000 + (0x24a << 2))
+#define   P_AED_EQ_CH2_COEF44                                  (volatile uint32_t *)(0xff642000 + (0x24a << 2))
+#define     AED_EQ_CH2_COEF50                                  (0xff642000 + (0x24b << 2))
+#define SEC_AED_EQ_CH2_COEF50                                  (0xff642000 + (0x24b << 2))
+#define   P_AED_EQ_CH2_COEF50                                  (volatile uint32_t *)(0xff642000 + (0x24b << 2))
+#define     AED_EQ_CH2_COEF51                                  (0xff642000 + (0x24c << 2))
+#define SEC_AED_EQ_CH2_COEF51                                  (0xff642000 + (0x24c << 2))
+#define   P_AED_EQ_CH2_COEF51                                  (volatile uint32_t *)(0xff642000 + (0x24c << 2))
+#define     AED_EQ_CH2_COEF52                                  (0xff642000 + (0x24d << 2))
+#define SEC_AED_EQ_CH2_COEF52                                  (0xff642000 + (0x24d << 2))
+#define   P_AED_EQ_CH2_COEF52                                  (volatile uint32_t *)(0xff642000 + (0x24d << 2))
+#define     AED_EQ_CH2_COEF53                                  (0xff642000 + (0x24e << 2))
+#define SEC_AED_EQ_CH2_COEF53                                  (0xff642000 + (0x24e << 2))
+#define   P_AED_EQ_CH2_COEF53                                  (volatile uint32_t *)(0xff642000 + (0x24e << 2))
+#define     AED_EQ_CH2_COEF54                                  (0xff642000 + (0x24f << 2))
+#define SEC_AED_EQ_CH2_COEF54                                  (0xff642000 + (0x24f << 2))
+#define   P_AED_EQ_CH2_COEF54                                  (volatile uint32_t *)(0xff642000 + (0x24f << 2))
+#define     AED_EQ_CH2_COEF60                                  (0xff642000 + (0x250 << 2))
+#define SEC_AED_EQ_CH2_COEF60                                  (0xff642000 + (0x250 << 2))
+#define   P_AED_EQ_CH2_COEF60                                  (volatile uint32_t *)(0xff642000 + (0x250 << 2))
+#define     AED_EQ_CH2_COEF61                                  (0xff642000 + (0x251 << 2))
+#define SEC_AED_EQ_CH2_COEF61                                  (0xff642000 + (0x251 << 2))
+#define   P_AED_EQ_CH2_COEF61                                  (volatile uint32_t *)(0xff642000 + (0x251 << 2))
+#define     AED_EQ_CH2_COEF62                                  (0xff642000 + (0x252 << 2))
+#define SEC_AED_EQ_CH2_COEF62                                  (0xff642000 + (0x252 << 2))
+#define   P_AED_EQ_CH2_COEF62                                  (volatile uint32_t *)(0xff642000 + (0x252 << 2))
+#define     AED_EQ_CH2_COEF63                                  (0xff642000 + (0x253 << 2))
+#define SEC_AED_EQ_CH2_COEF63                                  (0xff642000 + (0x253 << 2))
+#define   P_AED_EQ_CH2_COEF63                                  (volatile uint32_t *)(0xff642000 + (0x253 << 2))
+#define     AED_EQ_CH2_COEF64                                  (0xff642000 + (0x254 << 2))
+#define SEC_AED_EQ_CH2_COEF64                                  (0xff642000 + (0x254 << 2))
+#define   P_AED_EQ_CH2_COEF64                                  (volatile uint32_t *)(0xff642000 + (0x254 << 2))
+#define     AED_EQ_CH2_COEF70                                  (0xff642000 + (0x255 << 2))
+#define SEC_AED_EQ_CH2_COEF70                                  (0xff642000 + (0x255 << 2))
+#define   P_AED_EQ_CH2_COEF70                                  (volatile uint32_t *)(0xff642000 + (0x255 << 2))
+#define     AED_EQ_CH2_COEF71                                  (0xff642000 + (0x256 << 2))
+#define SEC_AED_EQ_CH2_COEF71                                  (0xff642000 + (0x256 << 2))
+#define   P_AED_EQ_CH2_COEF71                                  (volatile uint32_t *)(0xff642000 + (0x256 << 2))
+#define     AED_EQ_CH2_COEF72                                  (0xff642000 + (0x257 << 2))
+#define SEC_AED_EQ_CH2_COEF72                                  (0xff642000 + (0x257 << 2))
+#define   P_AED_EQ_CH2_COEF72                                  (volatile uint32_t *)(0xff642000 + (0x257 << 2))
+#define     AED_EQ_CH2_COEF73                                  (0xff642000 + (0x258 << 2))
+#define SEC_AED_EQ_CH2_COEF73                                  (0xff642000 + (0x258 << 2))
+#define   P_AED_EQ_CH2_COEF73                                  (volatile uint32_t *)(0xff642000 + (0x258 << 2))
+#define     AED_EQ_CH2_COEF74                                  (0xff642000 + (0x259 << 2))
+#define SEC_AED_EQ_CH2_COEF74                                  (0xff642000 + (0x259 << 2))
+#define   P_AED_EQ_CH2_COEF74                                  (volatile uint32_t *)(0xff642000 + (0x259 << 2))
+#define     AED_EQ_CH2_COEF80                                  (0xff642000 + (0x25a << 2))
+#define SEC_AED_EQ_CH2_COEF80                                  (0xff642000 + (0x25a << 2))
+#define   P_AED_EQ_CH2_COEF80                                  (volatile uint32_t *)(0xff642000 + (0x25a << 2))
+#define     AED_EQ_CH2_COEF81                                  (0xff642000 + (0x25b << 2))
+#define SEC_AED_EQ_CH2_COEF81                                  (0xff642000 + (0x25b << 2))
+#define   P_AED_EQ_CH2_COEF81                                  (volatile uint32_t *)(0xff642000 + (0x25b << 2))
+#define     AED_EQ_CH2_COEF82                                  (0xff642000 + (0x25c << 2))
+#define SEC_AED_EQ_CH2_COEF82                                  (0xff642000 + (0x25c << 2))
+#define   P_AED_EQ_CH2_COEF82                                  (volatile uint32_t *)(0xff642000 + (0x25c << 2))
+#define     AED_EQ_CH2_COEF83                                  (0xff642000 + (0x25d << 2))
+#define SEC_AED_EQ_CH2_COEF83                                  (0xff642000 + (0x25d << 2))
+#define   P_AED_EQ_CH2_COEF83                                  (volatile uint32_t *)(0xff642000 + (0x25d << 2))
+#define     AED_EQ_CH2_COEF84                                  (0xff642000 + (0x25e << 2))
+#define SEC_AED_EQ_CH2_COEF84                                  (0xff642000 + (0x25e << 2))
+#define   P_AED_EQ_CH2_COEF84                                  (volatile uint32_t *)(0xff642000 + (0x25e << 2))
+#define     AED_EQ_CH2_COEF90                                  (0xff642000 + (0x25f << 2))
+#define SEC_AED_EQ_CH2_COEF90                                  (0xff642000 + (0x25f << 2))
+#define   P_AED_EQ_CH2_COEF90                                  (volatile uint32_t *)(0xff642000 + (0x25f << 2))
+#define     AED_EQ_CH2_COEF91                                  (0xff642000 + (0x260 << 2))
+#define SEC_AED_EQ_CH2_COEF91                                  (0xff642000 + (0x260 << 2))
+#define   P_AED_EQ_CH2_COEF91                                  (volatile uint32_t *)(0xff642000 + (0x260 << 2))
+#define     AED_EQ_CH2_COEF92                                  (0xff642000 + (0x261 << 2))
+#define SEC_AED_EQ_CH2_COEF92                                  (0xff642000 + (0x261 << 2))
+#define   P_AED_EQ_CH2_COEF92                                  (volatile uint32_t *)(0xff642000 + (0x261 << 2))
+#define     AED_EQ_CH2_COEF93                                  (0xff642000 + (0x262 << 2))
+#define SEC_AED_EQ_CH2_COEF93                                  (0xff642000 + (0x262 << 2))
+#define   P_AED_EQ_CH2_COEF93                                  (volatile uint32_t *)(0xff642000 + (0x262 << 2))
+#define     AED_EQ_CH2_COEF94                                  (0xff642000 + (0x263 << 2))
+#define SEC_AED_EQ_CH2_COEF94                                  (0xff642000 + (0x263 << 2))
+#define   P_AED_EQ_CH2_COEF94                                  (volatile uint32_t *)(0xff642000 + (0x263 << 2))
+#define     AED_EQ_EN                                          (0xff642000 + (0x264 << 2))
+#define SEC_AED_EQ_EN                                          (0xff642000 + (0x264 << 2))
+#define   P_AED_EQ_EN                                          (volatile uint32_t *)(0xff642000 + (0x264 << 2))
+#define     AED_EQ_VOLUME                                      (0xff642000 + (0x265 << 2))
+#define SEC_AED_EQ_VOLUME                                      (0xff642000 + (0x265 << 2))
+#define   P_AED_EQ_VOLUME                                      (volatile uint32_t *)(0xff642000 + (0x265 << 2))
+#define     AED_EQ_VOLUME_SLEW_CNT                             (0xff642000 + (0x266 << 2))
+#define SEC_AED_EQ_VOLUME_SLEW_CNT                             (0xff642000 + (0x266 << 2))
+#define   P_AED_EQ_VOLUME_SLEW_CNT                             (volatile uint32_t *)(0xff642000 + (0x266 << 2))
+#define     AED_MUTE                                           (0xff642000 + (0x267 << 2))
+#define SEC_AED_MUTE                                           (0xff642000 + (0x267 << 2))
+#define   P_AED_MUTE                                           (volatile uint32_t *)(0xff642000 + (0x267 << 2))
+#define     AED_DRC_EN                                         (0xff642000 + (0x268 << 2))
+#define SEC_AED_DRC_EN                                         (0xff642000 + (0x268 << 2))
+#define   P_AED_DRC_EN                                         (volatile uint32_t *)(0xff642000 + (0x268 << 2))
+#define     AED_DRC_AE                                         (0xff642000 + (0x269 << 2))
+#define SEC_AED_DRC_AE                                         (0xff642000 + (0x269 << 2))
+#define   P_AED_DRC_AE                                         (volatile uint32_t *)(0xff642000 + (0x269 << 2))
+#define     AED_DRC_AA                                         (0xff642000 + (0x26a << 2))
+#define SEC_AED_DRC_AA                                         (0xff642000 + (0x26a << 2))
+#define   P_AED_DRC_AA                                         (volatile uint32_t *)(0xff642000 + (0x26a << 2))
+#define     AED_DRC_AD                                         (0xff642000 + (0x26b << 2))
+#define SEC_AED_DRC_AD                                         (0xff642000 + (0x26b << 2))
+#define   P_AED_DRC_AD                                         (volatile uint32_t *)(0xff642000 + (0x26b << 2))
+#define     AED_DRC_AE_1M                                      (0xff642000 + (0x26c << 2))
+#define SEC_AED_DRC_AE_1M                                      (0xff642000 + (0x26c << 2))
+#define   P_AED_DRC_AE_1M                                      (volatile uint32_t *)(0xff642000 + (0x26c << 2))
+#define     AED_DRC_AA_1M                                      (0xff642000 + (0x26d << 2))
+#define SEC_AED_DRC_AA_1M                                      (0xff642000 + (0x26d << 2))
+#define   P_AED_DRC_AA_1M                                      (volatile uint32_t *)(0xff642000 + (0x26d << 2))
+#define     AED_DRC_AD_1M                                      (0xff642000 + (0x26e << 2))
+#define SEC_AED_DRC_AD_1M                                      (0xff642000 + (0x26e << 2))
+#define   P_AED_DRC_AD_1M                                      (volatile uint32_t *)(0xff642000 + (0x26e << 2))
+#define     AED_DRC_OFFSET0                                    (0xff642000 + (0x26f << 2))
+#define SEC_AED_DRC_OFFSET0                                    (0xff642000 + (0x26f << 2))
+#define   P_AED_DRC_OFFSET0                                    (volatile uint32_t *)(0xff642000 + (0x26f << 2))
+#define     AED_DRC_OFFSET1                                    (0xff642000 + (0x270 << 2))
+#define SEC_AED_DRC_OFFSET1                                    (0xff642000 + (0x270 << 2))
+#define   P_AED_DRC_OFFSET1                                    (volatile uint32_t *)(0xff642000 + (0x270 << 2))
+#define     AED_DRC_THD0                                       (0xff642000 + (0x271 << 2))
+#define SEC_AED_DRC_THD0                                       (0xff642000 + (0x271 << 2))
+#define   P_AED_DRC_THD0                                       (volatile uint32_t *)(0xff642000 + (0x271 << 2))
+#define     AED_DRC_THD1                                       (0xff642000 + (0x272 << 2))
+#define SEC_AED_DRC_THD1                                       (0xff642000 + (0x272 << 2))
+#define   P_AED_DRC_THD1                                       (volatile uint32_t *)(0xff642000 + (0x272 << 2))
+#define     AED_DRC_K0                                         (0xff642000 + (0x273 << 2))
+#define SEC_AED_DRC_K0                                         (0xff642000 + (0x273 << 2))
+#define   P_AED_DRC_K0                                         (volatile uint32_t *)(0xff642000 + (0x273 << 2))
+#define     AED_DRC_K1                                         (0xff642000 + (0x274 << 2))
+#define SEC_AED_DRC_K1                                         (0xff642000 + (0x274 << 2))
+#define   P_AED_DRC_K1                                         (volatile uint32_t *)(0xff642000 + (0x274 << 2))
+#define     AED_CLIP_THD                                       (0xff642000 + (0x275 << 2))
+#define SEC_AED_CLIP_THD                                       (0xff642000 + (0x275 << 2))
+#define   P_AED_CLIP_THD                                       (volatile uint32_t *)(0xff642000 + (0x275 << 2))
+#define     AED_NG_THD0                                        (0xff642000 + (0x276 << 2))
+#define SEC_AED_NG_THD0                                        (0xff642000 + (0x276 << 2))
+#define   P_AED_NG_THD0                                        (volatile uint32_t *)(0xff642000 + (0x276 << 2))
+#define     AED_NG_THD1                                        (0xff642000 + (0x277 << 2))
+#define SEC_AED_NG_THD1                                        (0xff642000 + (0x277 << 2))
+#define   P_AED_NG_THD1                                        (volatile uint32_t *)(0xff642000 + (0x277 << 2))
+#define     AED_NG_CNT_THD                                     (0xff642000 + (0x278 << 2))
+#define SEC_AED_NG_CNT_THD                                     (0xff642000 + (0x278 << 2))
+#define   P_AED_NG_CNT_THD                                     (volatile uint32_t *)(0xff642000 + (0x278 << 2))
+#define     AED_NG_CTL                                         (0xff642000 + (0x279 << 2))
+#define SEC_AED_NG_CTL                                         (0xff642000 + (0x279 << 2))
+#define   P_AED_NG_CTL                                         (volatile uint32_t *)(0xff642000 + (0x279 << 2))
+#define     AED_ED_CTL                                         (0xff642000 + (0x27a << 2))
+#define SEC_AED_ED_CTL                                         (0xff642000 + (0x27a << 2))
+#define   P_AED_ED_CTL                                         (volatile uint32_t *)(0xff642000 + (0x27a << 2))
+#define     AED_DEBUG0                                         (0xff642000 + (0x27b << 2))
+#define SEC_AED_DEBUG0                                         (0xff642000 + (0x27b << 2))
+#define   P_AED_DEBUG0                                         (volatile uint32_t *)(0xff642000 + (0x27b << 2))
+#define     AED_DEBUG1                                         (0xff642000 + (0x27c << 2))
+#define SEC_AED_DEBUG1                                         (0xff642000 + (0x27c << 2))
+#define   P_AED_DEBUG1                                         (volatile uint32_t *)(0xff642000 + (0x27c << 2))
+#define     AED_DEBUG2                                         (0xff642000 + (0x27d << 2))
+#define SEC_AED_DEBUG2                                         (0xff642000 + (0x27d << 2))
+#define   P_AED_DEBUG2                                         (volatile uint32_t *)(0xff642000 + (0x27d << 2))
+#define     AED_DEBUG3                                         (0xff642000 + (0x27e << 2))
+#define SEC_AED_DEBUG3                                         (0xff642000 + (0x27e << 2))
+#define   P_AED_DEBUG3                                         (volatile uint32_t *)(0xff642000 + (0x27e << 2))
+#define     AED_DEBUG4                                         (0xff642000 + (0x27f << 2))
+#define SEC_AED_DEBUG4                                         (0xff642000 + (0x27f << 2))
+#define   P_AED_DEBUG4                                         (volatile uint32_t *)(0xff642000 + (0x27f << 2))
+#define     AED_DEBUG5                                         (0xff642000 + (0x280 << 2))
+#define SEC_AED_DEBUG5                                         (0xff642000 + (0x280 << 2))
+#define   P_AED_DEBUG5                                         (volatile uint32_t *)(0xff642000 + (0x280 << 2))
+#define     AED_DEBUG6                                         (0xff642000 + (0x281 << 2))
+#define SEC_AED_DEBUG6                                         (0xff642000 + (0x281 << 2))
+#define   P_AED_DEBUG6                                         (volatile uint32_t *)(0xff642000 + (0x281 << 2))
+#define     AED_DRC_AA_H                                       (0xff642000 + (0x282 << 2))
+#define SEC_AED_DRC_AA_H                                       (0xff642000 + (0x282 << 2))
+#define   P_AED_DRC_AA_H                                       (volatile uint32_t *)(0xff642000 + (0x282 << 2))
+#define     AED_DRC_AD_H                                       (0xff642000 + (0x283 << 2))
+#define SEC_AED_DRC_AD_H                                       (0xff642000 + (0x283 << 2))
+#define   P_AED_DRC_AD_H                                       (volatile uint32_t *)(0xff642000 + (0x283 << 2))
+#define     AED_DRC_AA_1M_H                                    (0xff642000 + (0x284 << 2))
+#define SEC_AED_DRC_AA_1M_H                                    (0xff642000 + (0x284 << 2))
+#define   P_AED_DRC_AA_1M_H                                    (volatile uint32_t *)(0xff642000 + (0x284 << 2))
+#define     AED_DRC_AD_1M_H                                    (0xff642000 + (0x285 << 2))
+#define SEC_AED_DRC_AD_1M_H                                    (0xff642000 + (0x285 << 2))
+#define   P_AED_DRC_AD_1M_H                                    (volatile uint32_t *)(0xff642000 + (0x285 << 2))
+#define     AED_NG_CNT                                         (0xff642000 + (0x286 << 2))
+#define SEC_AED_NG_CNT                                         (0xff642000 + (0x286 << 2))
+#define   P_AED_NG_CNT                                         (volatile uint32_t *)(0xff642000 + (0x286 << 2))
+#define     AED_NG_STEP                                        (0xff642000 + (0x287 << 2))
+#define SEC_AED_NG_STEP                                        (0xff642000 + (0x287 << 2))
+#define   P_AED_NG_STEP                                        (volatile uint32_t *)(0xff642000 + (0x287 << 2))
+#define     AED_TOP_CTL                                        (0xff642000 + (0x288 << 2))
+#define SEC_AED_TOP_CTL                                        (0xff642000 + (0x288 << 2))
+#define   P_AED_TOP_CTL                                        (volatile uint32_t *)(0xff642000 + (0x288 << 2))
+#define     AED_TOP_REQ_CTL                                    (0xff642000 + (0x289 << 2))
+#define SEC_AED_TOP_REQ_CTL                                    (0xff642000 + (0x289 << 2))
+#define   P_AED_TOP_REQ_CTL                                    (volatile uint32_t *)(0xff642000 + (0x289 << 2))
+//========================================================================
+//  HIU - Registers
+//========================================================================
+// APB4_DECODER_NON_SECURE_BASE     32'hFF63C000
+// APB4_DECODER_SECURE_BASE         32'hFF63C000
+#define     HHI_MIPI_CNTL0                                     (0xff63c000 + (0x000 << 2))
+#define SEC_HHI_MIPI_CNTL0                                     (0xff63c000 + (0x000 << 2))
+#define   P_HHI_MIPI_CNTL0                                     (volatile uint32_t *)(0xff63c000 + (0x000 << 2))
+#define     HHI_MIPI_CNTL1                                     (0xff63c000 + (0x001 << 2))
+#define SEC_HHI_MIPI_CNTL1                                     (0xff63c000 + (0x001 << 2))
+#define   P_HHI_MIPI_CNTL1                                     (volatile uint32_t *)(0xff63c000 + (0x001 << 2))
+#define     HHI_MIPI_CNTL2                                     (0xff63c000 + (0x002 << 2))
+#define SEC_HHI_MIPI_CNTL2                                     (0xff63c000 + (0x002 << 2))
+#define   P_HHI_MIPI_CNTL2                                     (volatile uint32_t *)(0xff63c000 + (0x002 << 2))
+#define     HHI_MIPI_STS                                       (0xff63c000 + (0x003 << 2))
+#define SEC_HHI_MIPI_STS                                       (0xff63c000 + (0x003 << 2))
+#define   P_HHI_MIPI_STS                                       (volatile uint32_t *)(0xff63c000 + (0x003 << 2))
+#define     HHI_CHECK_CLK_RESULT                               (0xff63c000 + (0x004 << 2))
+#define SEC_HHI_CHECK_CLK_RESULT                               (0xff63c000 + (0x004 << 2))
+#define   P_HHI_CHECK_CLK_RESULT                               (volatile uint32_t *)(0xff63c000 + (0x004 << 2))
+#define     SCR_HIU                                            (0xff63c000 + (0x00b << 2))
+#define SEC_SCR_HIU                                            (0xff63c000 + (0x00b << 2))
+#define   P_SCR_HIU                                            (volatile uint32_t *)(0xff63c000 + (0x00b << 2))
+//`define HHI_SYS_STS           8'h0c
+#define     HPG_TIMER                                          (0xff63c000 + (0x00f << 2))
+#define SEC_HPG_TIMER                                          (0xff63c000 + (0x00f << 2))
+#define   P_HPG_TIMER                                          (volatile uint32_t *)(0xff63c000 + (0x00f << 2))
+#define     HHI_GP0_PLL_CNTL0                                  (0xff63c000 + (0x010 << 2))
+#define SEC_HHI_GP0_PLL_CNTL0                                  (0xff63c000 + (0x010 << 2))
+#define   P_HHI_GP0_PLL_CNTL0                                  (volatile uint32_t *)(0xff63c000 + (0x010 << 2))
+#define     HHI_GP0_PLL_CNTL1                                  (0xff63c000 + (0x011 << 2))
+#define SEC_HHI_GP0_PLL_CNTL1                                  (0xff63c000 + (0x011 << 2))
+#define   P_HHI_GP0_PLL_CNTL1                                  (volatile uint32_t *)(0xff63c000 + (0x011 << 2))
+#define     HHI_GP0_PLL_CNTL2                                  (0xff63c000 + (0x012 << 2))
+#define SEC_HHI_GP0_PLL_CNTL2                                  (0xff63c000 + (0x012 << 2))
+#define   P_HHI_GP0_PLL_CNTL2                                  (volatile uint32_t *)(0xff63c000 + (0x012 << 2))
+#define     HHI_GP0_PLL_CNTL3                                  (0xff63c000 + (0x013 << 2))
+#define SEC_HHI_GP0_PLL_CNTL3                                  (0xff63c000 + (0x013 << 2))
+#define   P_HHI_GP0_PLL_CNTL3                                  (volatile uint32_t *)(0xff63c000 + (0x013 << 2))
+#define     HHI_GP0_PLL_CNTL4                                  (0xff63c000 + (0x014 << 2))
+#define SEC_HHI_GP0_PLL_CNTL4                                  (0xff63c000 + (0x014 << 2))
+#define   P_HHI_GP0_PLL_CNTL4                                  (volatile uint32_t *)(0xff63c000 + (0x014 << 2))
+#define     HHI_GP0_PLL_CNTL5                                  (0xff63c000 + (0x015 << 2))
+#define SEC_HHI_GP0_PLL_CNTL5                                  (0xff63c000 + (0x015 << 2))
+#define   P_HHI_GP0_PLL_CNTL5                                  (volatile uint32_t *)(0xff63c000 + (0x015 << 2))
+#define     HHI_GP0_PLL_CNTL6                                  (0xff63c000 + (0x016 << 2))
+#define SEC_HHI_GP0_PLL_CNTL6                                  (0xff63c000 + (0x016 << 2))
+#define   P_HHI_GP0_PLL_CNTL6                                  (volatile uint32_t *)(0xff63c000 + (0x016 << 2))
+#define     HHI_GP0_PLL_STS                                    (0xff63c000 + (0x017 << 2))
+#define SEC_HHI_GP0_PLL_STS                                    (0xff63c000 + (0x017 << 2))
+#define   P_HHI_GP0_PLL_STS                                    (volatile uint32_t *)(0xff63c000 + (0x017 << 2))
+//`define HHI_GP1_PLL_CNTL0     8'h18
+//`define HHI_GP1_PLL_CNTL1     8'h19
+//`define HHI_GP1_PLL_CNTL2     8'h1a
+//`define HHI_GP1_PLL_CNTL3     8'h1b
+//`define HHI_GP1_PLL_CNTL4     8'h1c
+//`define HHI_GP1_PLL_CNTL5     8'h1d
+//`define HHI_GP1_PLL_CNTL6     8'h1e
+//`define HHI_GP1_PLL_STS       8'h1f
+//`define HHI_CADC_CNTL           8'h20
+//`define HHI_CADC_CNTL2          8'h21
+//`define HHI_CADC_CNTL3          8'h22
+//`define HHI_CADC_CNTL4          8'h23
+//`define HHI_CADC_CNTL5          8'h24
+//`define HHI_CADC_CNTL6          8'h25
+#define     HHI_PCIE_PLL_CNTL0                                 (0xff63c000 + (0x026 << 2))
+#define SEC_HHI_PCIE_PLL_CNTL0                                 (0xff63c000 + (0x026 << 2))
+#define   P_HHI_PCIE_PLL_CNTL0                                 (volatile uint32_t *)(0xff63c000 + (0x026 << 2))
+#define     HHI_PCIE_PLL_CNTL1                                 (0xff63c000 + (0x027 << 2))
+#define SEC_HHI_PCIE_PLL_CNTL1                                 (0xff63c000 + (0x027 << 2))
+#define   P_HHI_PCIE_PLL_CNTL1                                 (volatile uint32_t *)(0xff63c000 + (0x027 << 2))
+#define     HHI_PCIE_PLL_CNTL2                                 (0xff63c000 + (0x028 << 2))
+#define SEC_HHI_PCIE_PLL_CNTL2                                 (0xff63c000 + (0x028 << 2))
+#define   P_HHI_PCIE_PLL_CNTL2                                 (volatile uint32_t *)(0xff63c000 + (0x028 << 2))
+#define     HHI_PCIE_PLL_CNTL3                                 (0xff63c000 + (0x029 << 2))
+#define SEC_HHI_PCIE_PLL_CNTL3                                 (0xff63c000 + (0x029 << 2))
+#define   P_HHI_PCIE_PLL_CNTL3                                 (volatile uint32_t *)(0xff63c000 + (0x029 << 2))
+#define     HHI_PCIE_PLL_CNTL4                                 (0xff63c000 + (0x02a << 2))
+#define SEC_HHI_PCIE_PLL_CNTL4                                 (0xff63c000 + (0x02a << 2))
+#define   P_HHI_PCIE_PLL_CNTL4                                 (volatile uint32_t *)(0xff63c000 + (0x02a << 2))
+#define     HHI_PCIE_PLL_CNTL5                                 (0xff63c000 + (0x02b << 2))
+#define SEC_HHI_PCIE_PLL_CNTL5                                 (0xff63c000 + (0x02b << 2))
+#define   P_HHI_PCIE_PLL_CNTL5                                 (volatile uint32_t *)(0xff63c000 + (0x02b << 2))
+#define     HHI_PCIE_PLL_STS                                   (0xff63c000 + (0x02c << 2))
+#define SEC_HHI_PCIE_PLL_STS                                   (0xff63c000 + (0x02c << 2))
+#define   P_HHI_PCIE_PLL_STS                                   (volatile uint32_t *)(0xff63c000 + (0x02c << 2))
+//`define HHI_DADC_CNTL           8'h27
+//`define HHI_DADC_CNTL2          8'h28
+//`define HHI_DADC_RDBK0_I        8'h29
+//`define HHI_DADC_CNTL3          8'h2a
+//`define HHI_DADC_CNTL4          8'h2b
+//`define HHI_AFE_TUNNING_CNTL    8'h2c
+//`define HHI_AFE_TUNNING_CNTL_I  8'h2d
+//`define HHI_CVBS_DETECT_CNTL    8'h2e
+#define     HHI_XTAL_DIVN_CNTL                                 (0xff63c000 + (0x02f << 2))
+#define SEC_HHI_XTAL_DIVN_CNTL                                 (0xff63c000 + (0x02f << 2))
+#define   P_HHI_XTAL_DIVN_CNTL                                 (volatile uint32_t *)(0xff63c000 + (0x02f << 2))
+#define     HHI_GCLK2_MPEG0                                    (0xff63c000 + (0x030 << 2))
+#define SEC_HHI_GCLK2_MPEG0                                    (0xff63c000 + (0x030 << 2))
+#define   P_HHI_GCLK2_MPEG0                                    (volatile uint32_t *)(0xff63c000 + (0x030 << 2))
+#define     HHI_GCLK2_MPEG1                                    (0xff63c000 + (0x031 << 2))
+#define SEC_HHI_GCLK2_MPEG1                                    (0xff63c000 + (0x031 << 2))
+#define   P_HHI_GCLK2_MPEG1                                    (volatile uint32_t *)(0xff63c000 + (0x031 << 2))
+#define     HHI_GCLK2_MPEG2                                    (0xff63c000 + (0x032 << 2))
+#define SEC_HHI_GCLK2_MPEG2                                    (0xff63c000 + (0x032 << 2))
+#define   P_HHI_GCLK2_MPEG2                                    (volatile uint32_t *)(0xff63c000 + (0x032 << 2))
+#define     HHI_GCLK2_OTHER                                    (0xff63c000 + (0x034 << 2))
+#define SEC_HHI_GCLK2_OTHER                                    (0xff63c000 + (0x034 << 2))
+#define   P_HHI_GCLK2_OTHER                                    (volatile uint32_t *)(0xff63c000 + (0x034 << 2))
+//`define HHI_GCLK2_AO           8'h35
+#define     HHI_HIFI_PLL_CNTL0                                 (0xff63c000 + (0x036 << 2))
+#define SEC_HHI_HIFI_PLL_CNTL0                                 (0xff63c000 + (0x036 << 2))
+#define   P_HHI_HIFI_PLL_CNTL0                                 (volatile uint32_t *)(0xff63c000 + (0x036 << 2))
+#define     HHI_HIFI_PLL_CNTL1                                 (0xff63c000 + (0x037 << 2))
+#define SEC_HHI_HIFI_PLL_CNTL1                                 (0xff63c000 + (0x037 << 2))
+#define   P_HHI_HIFI_PLL_CNTL1                                 (volatile uint32_t *)(0xff63c000 + (0x037 << 2))
+#define     HHI_HIFI_PLL_CNTL2                                 (0xff63c000 + (0x038 << 2))
+#define SEC_HHI_HIFI_PLL_CNTL2                                 (0xff63c000 + (0x038 << 2))
+#define   P_HHI_HIFI_PLL_CNTL2                                 (volatile uint32_t *)(0xff63c000 + (0x038 << 2))
+#define     HHI_HIFI_PLL_CNTL3                                 (0xff63c000 + (0x039 << 2))
+#define SEC_HHI_HIFI_PLL_CNTL3                                 (0xff63c000 + (0x039 << 2))
+#define   P_HHI_HIFI_PLL_CNTL3                                 (volatile uint32_t *)(0xff63c000 + (0x039 << 2))
+#define     HHI_HIFI_PLL_CNTL4                                 (0xff63c000 + (0x03a << 2))
+#define SEC_HHI_HIFI_PLL_CNTL4                                 (0xff63c000 + (0x03a << 2))
+#define   P_HHI_HIFI_PLL_CNTL4                                 (volatile uint32_t *)(0xff63c000 + (0x03a << 2))
+#define     HHI_HIFI_PLL_CNTL5                                 (0xff63c000 + (0x03b << 2))
+#define SEC_HHI_HIFI_PLL_CNTL5                                 (0xff63c000 + (0x03b << 2))
+#define   P_HHI_HIFI_PLL_CNTL5                                 (volatile uint32_t *)(0xff63c000 + (0x03b << 2))
+#define     HHI_HIFI_PLL_CNTL6                                 (0xff63c000 + (0x03c << 2))
+#define SEC_HHI_HIFI_PLL_CNTL6                                 (0xff63c000 + (0x03c << 2))
+#define   P_HHI_HIFI_PLL_CNTL6                                 (volatile uint32_t *)(0xff63c000 + (0x03c << 2))
+#define     HHI_HIFI_PLL_STS                                   (0xff63c000 + (0x03d << 2))
+#define SEC_HHI_HIFI_PLL_STS                                   (0xff63c000 + (0x03d << 2))
+#define   P_HHI_HIFI_PLL_STS                                   (volatile uint32_t *)(0xff63c000 + (0x03d << 2))
+#define     HHI_TIMER90K                                       (0xff63c000 + (0x03f << 2))
+#define SEC_HHI_TIMER90K                                       (0xff63c000 + (0x03f << 2))
+#define   P_HHI_TIMER90K                                       (volatile uint32_t *)(0xff63c000 + (0x03f << 2))
+#define     HHI_MEM_PD_REG0                                    (0xff63c000 + (0x040 << 2))
+#define SEC_HHI_MEM_PD_REG0                                    (0xff63c000 + (0x040 << 2))
+#define   P_HHI_MEM_PD_REG0                                    (volatile uint32_t *)(0xff63c000 + (0x040 << 2))
+//VIU1
+//bit 29:28 mem_pd_vi_sharp,  2'b00: Sharpness line buffer memory power on, 2'b11: power down
+//bit 29:28 mem_pd_vi_dipost, 2'b00: Deinterlace - di_post memory power on, 2'b11: power down
+//bit 27:26 mem_pd_vi_dipre,  2'b00: Deinterlace - di_pre memory power on, 2'b11: power down
+//bit 25:24 mem_pd_vi_prot3,  2'b00: picture rotation3 memory power on, 2'b11: power down
+//bit 23:22 mem_pd_vi_prot2,  2'b00: picture rotation2 memory power on, 2'b11: power down
+//bit 21:20 mem_pd_vi_prot1,  2'b00: picture rotation1 memory power on, 2'b11: power down
+//bit 19:18 mem_pd_vi_vdin1,  2'b00: vdin1 memory power on, 2'b11: power down
+//bit 17:16 mem_pd_vi_vdin0,  2'b00: vdin0 memory power on, 2'b11: power down
+//bit 15:14 mem_pd_vi_osd_sc, 2'b00: osd_scaler memory power on, 2'b11: power down
+//bit 13:12 mem_pd_vi_scale,  2'b00: scaler memory power on, 2'b11: power down
+//bit 11:10 mem_pd_vi_ofifo,  2'b00: vpp output fifo memory power on, 2'b11: power down
+//bit 9:8   mem_pd_vi_chroma, 2'b00: color management module memory power on, 2'b11: power down
+//bit 7:6   mem_pd_vi_vd2,    2'b00: vd2 memory power on, 2'b11: power down
+//bit 5:4   mem_pd_vi_vd1,    2'b00: vd1 memory power on, 2'b11: power down
+//bit 3:2   mem_pd_vi_osd2,   2'b00: osd2 memory power on, 2'b11: power down
+//bit 1:0   mem_pd_vi_osd1,   2'b00: osd1 memory power on, 2'b11: power down
+#define     HHI_VPU_MEM_PD_REG0                                (0xff63c000 + (0x041 << 2))
+#define SEC_HHI_VPU_MEM_PD_REG0                                (0xff63c000 + (0x041 << 2))
+#define   P_HHI_VPU_MEM_PD_REG0                                (volatile uint32_t *)(0xff63c000 + (0x041 << 2))
+//bit 29:28 mem_pd_atv_dmd,   2'b00: ATV DMD memory power on, 2'b11: power down
+//bit 29:28 mem_pd_cvd2,      2'b00: CVD2 memory power on, 2'b11: power down
+//bit 27:26 mem_pd_isp,       2'b00: ISP memory power on, 2'b11: power down
+//bit 25:24 mem_pd_venci_int, 2'b00: cvbs- enci interface memory power on, 2'b11: power down
+//bit 23:22 mem_pd_venc_l_top,2'b00: panel - encl top memory power on, 2'b11: power down
+//bit 21:20 mem_pd_vencp_int, 2'b00: hdmi - encp interface memory power on, 2'b11: power down
+//bit 13:12 mem_pd_vi2_osd_sc,2'b00: viu2 OSD scaler memory power on, 2'b11: power down
+//bit 11:10 mem_pd_vi2_scale, 2'b00: viu2 scaler memory power on, 2'b11: power down
+//bit 9:8   mem_pd_vi2_ofifo, 2'b00: viu2 vpp output fifo memory power on, 2'b11: power down
+//bit 7:6   mem_pd_vi2_chroma,2'b00: viu2 color management module memory power on, 2'b11: power down
+//bit 5:4   mem_pd_vi2_vd1,   2'b00: viu2 vd1 memory power on, 2'b11: power down
+//bit 3:2   mem_pd_vi2_osd2,  2'b00: viu2 osd2 memory power on, 2'b11: power down
+//bit 1:0   mem_pd_vi2_osd1,  2'b00: viu2 osd1 memory power on, 2'b11: power down
+#define     HHI_VPU_MEM_PD_REG1                                (0xff63c000 + (0x042 << 2))
+#define SEC_HHI_VPU_MEM_PD_REG1                                (0xff63c000 + (0x042 << 2))
+#define   P_HHI_VPU_MEM_PD_REG1                                (volatile uint32_t *)(0xff63c000 + (0x042 << 2))
+#define     HHI_VPU_MEM_PD_REG3                                (0xff63c000 + (0x043 << 2))
+#define SEC_HHI_VPU_MEM_PD_REG3                                (0xff63c000 + (0x043 << 2))
+#define   P_HHI_VPU_MEM_PD_REG3                                (volatile uint32_t *)(0xff63c000 + (0x043 << 2))
+#define     HHI_VPU_MEM_PD_REG4                                (0xff63c000 + (0x044 << 2))
+#define SEC_HHI_VPU_MEM_PD_REG4                                (0xff63c000 + (0x044 << 2))
+#define   P_HHI_VPU_MEM_PD_REG4                                (volatile uint32_t *)(0xff63c000 + (0x044 << 2))
+//`define HHI_DEMOD_MEM_PD_REG     8'h43
+//`define HHI_AUD_DAC_CTRL          8'h44
+// `define HHI_VIID_PLL_CNTL4      8'h46 // video PLL read back
+// `define HHI_VIID_PLL_CNTL       8'h47 // Video PLL control, word 1
+// `define HHI_VIID_PLL_CNTL2      8'h48 // Video PLL control, word 2
+// `define HHI_VIID_PLL_CNTL3      8'h49 // Video PLL control, word 3
+#define     HHI_VIID_CLK_DIV                                   (0xff63c000 + (0x04a << 2))
+#define SEC_HHI_VIID_CLK_DIV                                   (0xff63c000 + (0x04a << 2))
+#define   P_HHI_VIID_CLK_DIV                                   (volatile uint32_t *)(0xff63c000 + (0x04a << 2))
+#define     HHI_VIID_CLK_CNTL                                  (0xff63c000 + (0x04b << 2))
+#define SEC_HHI_VIID_CLK_CNTL                                  (0xff63c000 + (0x04b << 2))
+#define   P_HHI_VIID_CLK_CNTL                                  (volatile uint32_t *)(0xff63c000 + (0x04b << 2))
+//`define HHI_VIID_DIVIDER_CNTL   8'h4c
+//bit 1:0   mem_pd_vi_wm,  2'b00: viu1 wm memory power on, 2'b11: power down
+#define     HHI_VPU_MEM_PD_REG2                                (0xff63c000 + (0x04d << 2))
+#define SEC_HHI_VPU_MEM_PD_REG2                                (0xff63c000 + (0x04d << 2))
+#define   P_HHI_VPU_MEM_PD_REG2                                (volatile uint32_t *)(0xff63c000 + (0x04d << 2))
+// Gated clock enables.  There are 64 enables for the MPEG clocks and 32 enables for other clock domains
+#define     HHI_GCLK_LOCK                                      (0xff63c000 + (0x04f << 2))
+#define SEC_HHI_GCLK_LOCK                                      (0xff63c000 + (0x04f << 2))
+#define   P_HHI_GCLK_LOCK                                      (volatile uint32_t *)(0xff63c000 + (0x04f << 2))
+#define     HHI_GCLK_MPEG0                                     (0xff63c000 + (0x050 << 2))
+#define SEC_HHI_GCLK_MPEG0                                     (0xff63c000 + (0x050 << 2))
+#define   P_HHI_GCLK_MPEG0                                     (volatile uint32_t *)(0xff63c000 + (0x050 << 2))
+#define     HHI_GCLK_MPEG1                                     (0xff63c000 + (0x051 << 2))
+#define SEC_HHI_GCLK_MPEG1                                     (0xff63c000 + (0x051 << 2))
+#define   P_HHI_GCLK_MPEG1                                     (volatile uint32_t *)(0xff63c000 + (0x051 << 2))
+#define     HHI_GCLK_MPEG2                                     (0xff63c000 + (0x052 << 2))
+#define SEC_HHI_GCLK_MPEG2                                     (0xff63c000 + (0x052 << 2))
+#define   P_HHI_GCLK_MPEG2                                     (volatile uint32_t *)(0xff63c000 + (0x052 << 2))
+#define     HHI_GCLK_OTHER                                     (0xff63c000 + (0x054 << 2))
+#define SEC_HHI_GCLK_OTHER                                     (0xff63c000 + (0x054 << 2))
+#define   P_HHI_GCLK_OTHER                                     (volatile uint32_t *)(0xff63c000 + (0x054 << 2))
+#define     HHI_GCLK_SP_MPEG                                   (0xff63c000 + (0x055 << 2))
+#define SEC_HHI_GCLK_SP_MPEG                                   (0xff63c000 + (0x055 << 2))
+#define   P_HHI_GCLK_SP_MPEG                                   (volatile uint32_t *)(0xff63c000 + (0x055 << 2))
+//`define HHI_SYS_OSCIN_CNTL      8'h56
+#define     HHI_SYS_CPU_CLK_CNTL1                              (0xff63c000 + (0x057 << 2))
+#define SEC_HHI_SYS_CPU_CLK_CNTL1                              (0xff63c000 + (0x057 << 2))
+#define   P_HHI_SYS_CPU_CLK_CNTL1                              (volatile uint32_t *)(0xff63c000 + (0x057 << 2))
+#define     HHI_SYS_CPU_RESET_CNTL                             (0xff63c000 + (0x058 << 2))
+#define SEC_HHI_SYS_CPU_RESET_CNTL                             (0xff63c000 + (0x058 << 2))
+#define   P_HHI_SYS_CPU_RESET_CNTL                             (volatile uint32_t *)(0xff63c000 + (0x058 << 2))
+// PLL Controls
+#define     HHI_VID_CLK_DIV                                    (0xff63c000 + (0x059 << 2))
+#define SEC_HHI_VID_CLK_DIV                                    (0xff63c000 + (0x059 << 2))
+#define   P_HHI_VID_CLK_DIV                                    (volatile uint32_t *)(0xff63c000 + (0x059 << 2))
+#define     HHI_MPEG_CLK_CNTL                                  (0xff63c000 + (0x05d << 2))
+#define SEC_HHI_MPEG_CLK_CNTL                                  (0xff63c000 + (0x05d << 2))
+#define   P_HHI_MPEG_CLK_CNTL                                  (volatile uint32_t *)(0xff63c000 + (0x05d << 2))
+#define     HHI_VID_CLK_CNTL                                   (0xff63c000 + (0x05f << 2))
+#define SEC_HHI_VID_CLK_CNTL                                   (0xff63c000 + (0x05f << 2))
+#define   P_HHI_VID_CLK_CNTL                                   (volatile uint32_t *)(0xff63c000 + (0x05f << 2))
+//`define HHI_WIFI_CLK_CNTL       8'h60 // MPEG clock control
+//`define HHI_WIFI_PLL_CNTL       8'h61 // WIFI PLL control, word 1
+//`define HHI_WIFI_PLL_CNTL2      8'h62 // WIFI PLL control, word 2
+//`define HHI_WIFI_PLL_CNTL3      8'h63 // WIFI PLL control, word 3
+#define     HHI_TS_CLK_CNTL                                    (0xff63c000 + (0x064 << 2))
+#define SEC_HHI_TS_CLK_CNTL                                    (0xff63c000 + (0x064 << 2))
+#define   P_HHI_TS_CLK_CNTL                                    (volatile uint32_t *)(0xff63c000 + (0x064 << 2))
+#define     HHI_VID_CLK_CNTL2                                  (0xff63c000 + (0x065 << 2))
+#define SEC_HHI_VID_CLK_CNTL2                                  (0xff63c000 + (0x065 << 2))
+#define   P_HHI_VID_CLK_CNTL2                                  (volatile uint32_t *)(0xff63c000 + (0x065 << 2))
+//`define HHI_VID_DIVIDER_CNTL    8'h66
+#define     HHI_SYS_CPU_CLK_CNTL                               (0xff63c000 + (0x067 << 2))
+#define SEC_HHI_SYS_CPU_CLK_CNTL                               (0xff63c000 + (0x067 << 2))
+#define   P_HHI_SYS_CPU_CLK_CNTL                               (volatile uint32_t *)(0xff63c000 + (0x067 << 2))
+#define     HHI_VID_PLL_CLK_DIV                                (0xff63c000 + (0x068 << 2))
+#define SEC_HHI_VID_PLL_CLK_DIV                                (0xff63c000 + (0x068 << 2))
+#define   P_HHI_VID_PLL_CLK_DIV                                (volatile uint32_t *)(0xff63c000 + (0x068 << 2))
+// Moved to Martin's domain `define HHI_DDR_PLL_CNTL        8'h68 // DDR PLL control, word 1
+// Moved to Martin's domain `define HHI_DDR_PLL_CNTL2       8'h69 // DDR PLL control, word 2
+// Moved to Martin's domain `define HHI_DDR_PLL_CNTL3       8'h6a // DDR PLL control, word 3
+// Moved to Martin's domain `define HHI_DDR_PLL_CNTL4       8'h6b // DDR PLL control, word 3
+#define     HHI_MALI_CLK_CNTL                                  (0xff63c000 + (0x06c << 2))
+#define SEC_HHI_MALI_CLK_CNTL                                  (0xff63c000 + (0x06c << 2))
+#define   P_HHI_MALI_CLK_CNTL                                  (volatile uint32_t *)(0xff63c000 + (0x06c << 2))
+#define     HHI_VPU_CLKC_CNTL                                  (0xff63c000 + (0x06d << 2))
+#define SEC_HHI_VPU_CLKC_CNTL                                  (0xff63c000 + (0x06d << 2))
+#define   P_HHI_VPU_CLKC_CNTL                                  (volatile uint32_t *)(0xff63c000 + (0x06d << 2))
+//`define HHI_MIPI_PHY_CLK_CNTL   8'h6e
+#define     HHI_VPU_CLK_CNTL                                   (0xff63c000 + (0x06f << 2))
+#define SEC_HHI_VPU_CLK_CNTL                                   (0xff63c000 + (0x06f << 2))
+#define   P_HHI_VPU_CLK_CNTL                                   (volatile uint32_t *)(0xff63c000 + (0x06f << 2))
+//`define HHI_OTHER_PLL_CNTL      8'h70 // OTHER PLL control, word 1
+//`define HHI_OTHER_PLL_CNTL2     8'h71 // OTHER PLL control, word 2
+//`define HHI_OTHER_PLL_CNTL3     8'h72 // OTHER PLL control, word 3
+#define     HHI_HDMI_CLK_CNTL                                  (0xff63c000 + (0x073 << 2))
+#define SEC_HHI_HDMI_CLK_CNTL                                  (0xff63c000 + (0x073 << 2))
+#define   P_HHI_HDMI_CLK_CNTL                                  (volatile uint32_t *)(0xff63c000 + (0x073 << 2))
+//`define HHI_DEMOD_CLK_CNTL      8'h74 // DEMOD clock control
+//`define HHI_SATA_CLK_CNTL       8'h75 // SATA clock control
+#define     HHI_ETH_CLK_CNTL                                   (0xff63c000 + (0x076 << 2))
+#define SEC_HHI_ETH_CLK_CNTL                                   (0xff63c000 + (0x076 << 2))
+#define   P_HHI_ETH_CLK_CNTL                                   (volatile uint32_t *)(0xff63c000 + (0x076 << 2))
+//`define HHI_CLK_DOUBLE_CNTL     8'h77 // Ethernet clock control
+#define     HHI_VDEC_CLK_CNTL                                  (0xff63c000 + (0x078 << 2))
+#define SEC_HHI_VDEC_CLK_CNTL                                  (0xff63c000 + (0x078 << 2))
+#define   P_HHI_VDEC_CLK_CNTL                                  (volatile uint32_t *)(0xff63c000 + (0x078 << 2))
+#define     HHI_VDEC2_CLK_CNTL                                 (0xff63c000 + (0x079 << 2))
+#define SEC_HHI_VDEC2_CLK_CNTL                                 (0xff63c000 + (0x079 << 2))
+#define   P_HHI_VDEC2_CLK_CNTL                                 (volatile uint32_t *)(0xff63c000 + (0x079 << 2))
+#define     HHI_VDEC3_CLK_CNTL                                 (0xff63c000 + (0x07a << 2))
+#define SEC_HHI_VDEC3_CLK_CNTL                                 (0xff63c000 + (0x07a << 2))
+#define   P_HHI_VDEC3_CLK_CNTL                                 (volatile uint32_t *)(0xff63c000 + (0x07a << 2))
+#define     HHI_VDEC4_CLK_CNTL                                 (0xff63c000 + (0x07b << 2))
+#define SEC_HHI_VDEC4_CLK_CNTL                                 (0xff63c000 + (0x07b << 2))
+#define   P_HHI_VDEC4_CLK_CNTL                                 (volatile uint32_t *)(0xff63c000 + (0x07b << 2))
+#define     HHI_HDCP22_CLK_CNTL                                (0xff63c000 + (0x07c << 2))
+#define SEC_HHI_HDCP22_CLK_CNTL                                (0xff63c000 + (0x07c << 2))
+#define   P_HHI_HDCP22_CLK_CNTL                                (volatile uint32_t *)(0xff63c000 + (0x07c << 2))
+#define     HHI_VAPBCLK_CNTL                                   (0xff63c000 + (0x07d << 2))
+#define SEC_HHI_VAPBCLK_CNTL                                   (0xff63c000 + (0x07d << 2))
+#define   P_HHI_VAPBCLK_CNTL                                   (volatile uint32_t *)(0xff63c000 + (0x07d << 2))
+//`define HHI_VP9DEC_CLK_CNTL     8'h7e
+// `define HHI_SYS_CPU_AUTO_CLK0        8'h78   never used
+// `define HHI_SYS_CPU_AUTO_CLK1        8'h79   never used
+// `define HHI_MEDIA_CPU_AUTO_CLK0    8'h7a     never used
+// `define HHI_MEDIA_CPU_AUTO_CLK1    8'h7b     never used
+//`define HHI_HDMI_AFC_CNTL       8'h7f
+//`define HHI_HDMIRX_CLK_CNTL     8'h80
+//`define HHI_HDMIRX_AUD_CLK_CNTL 8'h81
+//`define HHI_EDP_APB_CLK_CNTL    8'h82
+#define     HHI_VPU_CLKB_CNTL                                  (0xff63c000 + (0x083 << 2))
+#define SEC_HHI_VPU_CLKB_CNTL                                  (0xff63c000 + (0x083 << 2))
+#define   P_HHI_VPU_CLKB_CNTL                                  (volatile uint32_t *)(0xff63c000 + (0x083 << 2))
+//`define HHI_VID_PLL_MOD_CNTL0       8'h84
+//`define HHI_VID_PLL_MOD_LOW_TCNT    8'h85
+//`define HHI_VID_PLL_MOD_HIGH_TCNT   8'h86
+//`define HHI_VID_PLL_MOD_NOM_TCNT    8'h87
+// Removed `define HHI_DDR_CLK_CNTL            8'h88
+//`define HHI_32K_CLK_CNTL            8'h89
+#define     HHI_GEN_CLK_CNTL                                   (0xff63c000 + (0x08a << 2))
+#define SEC_HHI_GEN_CLK_CNTL                                   (0xff63c000 + (0x08a << 2))
+#define   P_HHI_GEN_CLK_CNTL                                   (volatile uint32_t *)(0xff63c000 + (0x08a << 2))
+//`define HHI_GEN_CLK_CNTL2           8'h8b
+//`define HHI_AUDPLL_CLK_OUT_CNTL     8'h8c
+//`define HHI_JTAG_CONFIG             8'h8e
+//`define HHI_VAFE_CLKXTALIN_CNTL       8'h8f
+//`define HHI_VAFE_CLKOSCIN_CNTL        8'h90
+//`define HHI_VAFE_CLKIN_CNTL           8'h91
+//`define HHI_TVFE_AUTOMODE_CLK_CNTL    8'h92
+//`define HHI_VAFE_CLKPI_CNTL       8'h93
+#define     HHI_VDIN_MEAS_CLK_CNTL                             (0xff63c000 + (0x094 << 2))
+#define SEC_HHI_VDIN_MEAS_CLK_CNTL                             (0xff63c000 + (0x094 << 2))
+#define   P_HHI_VDIN_MEAS_CLK_CNTL                             (volatile uint32_t *)(0xff63c000 + (0x094 << 2))
+#define     HHI_MIPIDSI_PHY_CLK_CNTL                           (0xff63c000 + (0x095 << 2))
+#define SEC_HHI_MIPIDSI_PHY_CLK_CNTL                           (0xff63c000 + (0x095 << 2))
+#define   P_HHI_MIPIDSI_PHY_CLK_CNTL                           (volatile uint32_t *)(0xff63c000 + (0x095 << 2))
+#define     HHI_NAND_CLK_CNTL                                  (0xff63c000 + (0x097 << 2))
+#define SEC_HHI_NAND_CLK_CNTL                                  (0xff63c000 + (0x097 << 2))
+#define   P_HHI_NAND_CLK_CNTL                                  (volatile uint32_t *)(0xff63c000 + (0x097 << 2))
+//`define HHI_ISP_LED_CLK_CNTL        8'h98
+#define     HHI_SD_EMMC_CLK_CNTL                               (0xff63c000 + (0x099 << 2))
+#define SEC_HHI_SD_EMMC_CLK_CNTL                               (0xff63c000 + (0x099 << 2))
+#define   P_HHI_SD_EMMC_CLK_CNTL                               (volatile uint32_t *)(0xff63c000 + (0x099 << 2))
+#define     HHI_WAVE420L_CLK_CNTL                              (0xff63c000 + (0x09a << 2))
+#define SEC_HHI_WAVE420L_CLK_CNTL                              (0xff63c000 + (0x09a << 2))
+#define   P_HHI_WAVE420L_CLK_CNTL                              (volatile uint32_t *)(0xff63c000 + (0x09a << 2))
+#define     HHI_WAVE420L_CLK_CNTL2                             (0xff63c000 + (0x09b << 2))
+#define SEC_HHI_WAVE420L_CLK_CNTL2                             (0xff63c000 + (0x09b << 2))
+#define   P_HHI_WAVE420L_CLK_CNTL2                             (volatile uint32_t *)(0xff63c000 + (0x09b << 2))
+//`define HHI_EDP_TX_PHY_CNTL0        8'h9c
+//`define HHI_EDP_TX_PHY_CNTL1        8'h9d
+//`define HHI_ADC_PLL_CNTL5           8'h9e
+//`define HHI_ADC_PLL_CNTL6           8'h9f
+#define     HHI_MPLL_CNTL0                                     (0xff63c000 + (0x09e << 2))
+#define SEC_HHI_MPLL_CNTL0                                     (0xff63c000 + (0x09e << 2))
+#define   P_HHI_MPLL_CNTL0                                     (volatile uint32_t *)(0xff63c000 + (0x09e << 2))
+#define     HHI_MPLL_CNTL1                                     (0xff63c000 + (0x09f << 2))
+#define SEC_HHI_MPLL_CNTL1                                     (0xff63c000 + (0x09f << 2))
+#define   P_HHI_MPLL_CNTL1                                     (volatile uint32_t *)(0xff63c000 + (0x09f << 2))
+#define     HHI_MPLL_CNTL2                                     (0xff63c000 + (0x0a0 << 2))
+#define SEC_HHI_MPLL_CNTL2                                     (0xff63c000 + (0x0a0 << 2))
+#define   P_HHI_MPLL_CNTL2                                     (volatile uint32_t *)(0xff63c000 + (0x0a0 << 2))
+#define     HHI_MPLL_CNTL3                                     (0xff63c000 + (0x0a1 << 2))
+#define SEC_HHI_MPLL_CNTL3                                     (0xff63c000 + (0x0a1 << 2))
+#define   P_HHI_MPLL_CNTL3                                     (volatile uint32_t *)(0xff63c000 + (0x0a1 << 2))
+#define     HHI_MPLL_CNTL4                                     (0xff63c000 + (0x0a2 << 2))
+#define SEC_HHI_MPLL_CNTL4                                     (0xff63c000 + (0x0a2 << 2))
+#define   P_HHI_MPLL_CNTL4                                     (volatile uint32_t *)(0xff63c000 + (0x0a2 << 2))
+#define     HHI_MPLL_CNTL5                                     (0xff63c000 + (0x0a3 << 2))
+#define SEC_HHI_MPLL_CNTL5                                     (0xff63c000 + (0x0a3 << 2))
+#define   P_HHI_MPLL_CNTL5                                     (volatile uint32_t *)(0xff63c000 + (0x0a3 << 2))
+#define     HHI_MPLL_CNTL6                                     (0xff63c000 + (0x0a4 << 2))
+#define SEC_HHI_MPLL_CNTL6                                     (0xff63c000 + (0x0a4 << 2))
+#define   P_HHI_MPLL_CNTL6                                     (volatile uint32_t *)(0xff63c000 + (0x0a4 << 2))
+#define     HHI_MPLL_CNTL7                                     (0xff63c000 + (0x0a5 << 2))
+#define SEC_HHI_MPLL_CNTL7                                     (0xff63c000 + (0x0a5 << 2))
+#define   P_HHI_MPLL_CNTL7                                     (volatile uint32_t *)(0xff63c000 + (0x0a5 << 2))
+#define     HHI_MPLL_CNTL8                                     (0xff63c000 + (0x0a6 << 2))
+#define SEC_HHI_MPLL_CNTL8                                     (0xff63c000 + (0x0a6 << 2))
+#define   P_HHI_MPLL_CNTL8                                     (volatile uint32_t *)(0xff63c000 + (0x0a6 << 2))
+#define     HHI_MPLL_STS                                       (0xff63c000 + (0x0a7 << 2))
+#define SEC_HHI_MPLL_STS                                       (0xff63c000 + (0x0a7 << 2))
+#define   P_HHI_MPLL_STS                                       (volatile uint32_t *)(0xff63c000 + (0x0a7 << 2))
+#define     HHI_FIX_PLL_CNTL0                                  (0xff63c000 + (0x0a8 << 2))
+#define SEC_HHI_FIX_PLL_CNTL0                                  (0xff63c000 + (0x0a8 << 2))
+#define   P_HHI_FIX_PLL_CNTL0                                  (volatile uint32_t *)(0xff63c000 + (0x0a8 << 2))
+#define     HHI_FIX_PLL_CNTL1                                  (0xff63c000 + (0x0a9 << 2))
+#define SEC_HHI_FIX_PLL_CNTL1                                  (0xff63c000 + (0x0a9 << 2))
+#define   P_HHI_FIX_PLL_CNTL1                                  (volatile uint32_t *)(0xff63c000 + (0x0a9 << 2))
+#define     HHI_FIX_PLL_CNTL2                                  (0xff63c000 + (0x0aa << 2))
+#define SEC_HHI_FIX_PLL_CNTL2                                  (0xff63c000 + (0x0aa << 2))
+#define   P_HHI_FIX_PLL_CNTL2                                  (volatile uint32_t *)(0xff63c000 + (0x0aa << 2))
+#define     HHI_FIX_PLL_CNTL3                                  (0xff63c000 + (0x0ab << 2))
+#define SEC_HHI_FIX_PLL_CNTL3                                  (0xff63c000 + (0x0ab << 2))
+#define   P_HHI_FIX_PLL_CNTL3                                  (volatile uint32_t *)(0xff63c000 + (0x0ab << 2))
+#define     HHI_FIX_PLL_CNTL4                                  (0xff63c000 + (0x0ac << 2))
+#define SEC_HHI_FIX_PLL_CNTL4                                  (0xff63c000 + (0x0ac << 2))
+#define   P_HHI_FIX_PLL_CNTL4                                  (volatile uint32_t *)(0xff63c000 + (0x0ac << 2))
+#define     HHI_FIX_PLL_CNTL5                                  (0xff63c000 + (0x0ad << 2))
+#define SEC_HHI_FIX_PLL_CNTL5                                  (0xff63c000 + (0x0ad << 2))
+#define   P_HHI_FIX_PLL_CNTL5                                  (volatile uint32_t *)(0xff63c000 + (0x0ad << 2))
+#define     HHI_FIX_PLL_CNTL6                                  (0xff63c000 + (0x0ae << 2))
+#define SEC_HHI_FIX_PLL_CNTL6                                  (0xff63c000 + (0x0ae << 2))
+#define   P_HHI_FIX_PLL_CNTL6                                  (volatile uint32_t *)(0xff63c000 + (0x0ae << 2))
+#define     HHI_FIX_PLL_STS                                    (0xff63c000 + (0x0af << 2))
+#define SEC_HHI_FIX_PLL_STS                                    (0xff63c000 + (0x0af << 2))
+#define   P_HHI_FIX_PLL_STS                                    (volatile uint32_t *)(0xff63c000 + (0x0af << 2))
+//`define HHI_ADC_PLL_CNTL            8'haa
+//`define HHI_ADC_PLL_CNTL2           8'hab
+//`define HHI_ADC_PLL_CNTL3           8'hac
+//`define HHI_ADC_PLL_CNTL4           8'had
+//`define HHI_ADC_PLL_STS             8'hae
+//`define HHI_ADC_PLL_CNTL1           8'haf
+//`define HHI_AUDCLK_PLL_CNTL         8'hb0
+//`define HHI_AUDCLK_PLL_CNTL2        8'hb1
+//`define HHI_AUDCLK_PLL_CNTL3        8'hb2
+//`define HHI_AUDCLK_PLL_CNTL4        8'hb3
+//`define HHI_AUDCLK_PLL_CNTL5        8'hb4
+//`define HHI_AUDCLK_PLL_CNTL6        8'hb5
+//`define HHI_L2_DDR_CLK_CNTL         8'hb6
+//`define HHI_PLL_TOP_MISC            8'hba
+#define     HHI_VDAC_CNTL0                                     (0xff63c000 + (0x0bb << 2))
+#define SEC_HHI_VDAC_CNTL0                                     (0xff63c000 + (0x0bb << 2))
+#define   P_HHI_VDAC_CNTL0                                     (volatile uint32_t *)(0xff63c000 + (0x0bb << 2))
+#define     HHI_VDAC_CNTL1                                     (0xff63c000 + (0x0bc << 2))
+#define SEC_HHI_VDAC_CNTL1                                     (0xff63c000 + (0x0bc << 2))
+#define   P_HHI_VDAC_CNTL1                                     (volatile uint32_t *)(0xff63c000 + (0x0bc << 2))
+#define     HHI_SYS_PLL_CNTL0                                  (0xff63c000 + (0x0bd << 2))
+#define SEC_HHI_SYS_PLL_CNTL0                                  (0xff63c000 + (0x0bd << 2))
+#define   P_HHI_SYS_PLL_CNTL0                                  (volatile uint32_t *)(0xff63c000 + (0x0bd << 2))
+#define     HHI_SYS_PLL_CNTL1                                  (0xff63c000 + (0x0be << 2))
+#define SEC_HHI_SYS_PLL_CNTL1                                  (0xff63c000 + (0x0be << 2))
+#define   P_HHI_SYS_PLL_CNTL1                                  (volatile uint32_t *)(0xff63c000 + (0x0be << 2))
+#define     HHI_SYS_PLL_CNTL2                                  (0xff63c000 + (0x0bf << 2))
+#define SEC_HHI_SYS_PLL_CNTL2                                  (0xff63c000 + (0x0bf << 2))
+#define   P_HHI_SYS_PLL_CNTL2                                  (volatile uint32_t *)(0xff63c000 + (0x0bf << 2))
+#define     HHI_SYS_PLL_CNTL3                                  (0xff63c000 + (0x0c0 << 2))
+#define SEC_HHI_SYS_PLL_CNTL3                                  (0xff63c000 + (0x0c0 << 2))
+#define   P_HHI_SYS_PLL_CNTL3                                  (volatile uint32_t *)(0xff63c000 + (0x0c0 << 2))
+#define     HHI_SYS_PLL_CNTL4                                  (0xff63c000 + (0x0c1 << 2))
+#define SEC_HHI_SYS_PLL_CNTL4                                  (0xff63c000 + (0x0c1 << 2))
+#define   P_HHI_SYS_PLL_CNTL4                                  (volatile uint32_t *)(0xff63c000 + (0x0c1 << 2))
+#define     HHI_SYS_PLL_CNTL5                                  (0xff63c000 + (0x0c2 << 2))
+#define SEC_HHI_SYS_PLL_CNTL5                                  (0xff63c000 + (0x0c2 << 2))
+#define   P_HHI_SYS_PLL_CNTL5                                  (volatile uint32_t *)(0xff63c000 + (0x0c2 << 2))
+#define     HHI_SYS_PLL_CNTL6                                  (0xff63c000 + (0x0c3 << 2))
+#define SEC_HHI_SYS_PLL_CNTL6                                  (0xff63c000 + (0x0c3 << 2))
+#define   P_HHI_SYS_PLL_CNTL6                                  (volatile uint32_t *)(0xff63c000 + (0x0c3 << 2))
+#define     HHI_SYS_PLL_STS                                    (0xff63c000 + (0x0c4 << 2))
+#define SEC_HHI_SYS_PLL_STS                                    (0xff63c000 + (0x0c4 << 2))
+#define   P_HHI_SYS_PLL_STS                                    (volatile uint32_t *)(0xff63c000 + (0x0c4 << 2))
+#define     HHI_HDMI_PLL_CNTL0                                 (0xff63c000 + (0x0c8 << 2))
+#define SEC_HHI_HDMI_PLL_CNTL0                                 (0xff63c000 + (0x0c8 << 2))
+#define   P_HHI_HDMI_PLL_CNTL0                                 (volatile uint32_t *)(0xff63c000 + (0x0c8 << 2))
+#define     HHI_HDMI_PLL_CNTL1                                 (0xff63c000 + (0x0c9 << 2))
+#define SEC_HHI_HDMI_PLL_CNTL1                                 (0xff63c000 + (0x0c9 << 2))
+#define   P_HHI_HDMI_PLL_CNTL1                                 (volatile uint32_t *)(0xff63c000 + (0x0c9 << 2))
+#define     HHI_HDMI_PLL_CNTL2                                 (0xff63c000 + (0x0ca << 2))
+#define SEC_HHI_HDMI_PLL_CNTL2                                 (0xff63c000 + (0x0ca << 2))
+#define   P_HHI_HDMI_PLL_CNTL2                                 (volatile uint32_t *)(0xff63c000 + (0x0ca << 2))
+#define     HHI_HDMI_PLL_CNTL3                                 (0xff63c000 + (0x0cb << 2))
+#define SEC_HHI_HDMI_PLL_CNTL3                                 (0xff63c000 + (0x0cb << 2))
+#define   P_HHI_HDMI_PLL_CNTL3                                 (volatile uint32_t *)(0xff63c000 + (0x0cb << 2))
+#define     HHI_HDMI_PLL_CNTL4                                 (0xff63c000 + (0x0cc << 2))
+#define SEC_HHI_HDMI_PLL_CNTL4                                 (0xff63c000 + (0x0cc << 2))
+#define   P_HHI_HDMI_PLL_CNTL4                                 (volatile uint32_t *)(0xff63c000 + (0x0cc << 2))
+#define     HHI_HDMI_PLL_CNTL5                                 (0xff63c000 + (0x0cd << 2))
+#define SEC_HHI_HDMI_PLL_CNTL5                                 (0xff63c000 + (0x0cd << 2))
+#define   P_HHI_HDMI_PLL_CNTL5                                 (volatile uint32_t *)(0xff63c000 + (0x0cd << 2))
+#define     HHI_HDMI_PLL_CNTL6                                 (0xff63c000 + (0x0ce << 2))
+#define SEC_HHI_HDMI_PLL_CNTL6                                 (0xff63c000 + (0x0ce << 2))
+#define   P_HHI_HDMI_PLL_CNTL6                                 (volatile uint32_t *)(0xff63c000 + (0x0ce << 2))
+#define     HHI_HDMI_PLL_STS                                   (0xff63c000 + (0x0cf << 2))
+#define SEC_HHI_HDMI_PLL_STS                                   (0xff63c000 + (0x0cf << 2))
+#define   P_HHI_HDMI_PLL_STS                                   (volatile uint32_t *)(0xff63c000 + (0x0cf << 2))
+//`define HHI_MIPI_CSI_PHY_CLK_CNTL   8'hd0
+//`define HHI_DSI_LVDS_EDP_CNTL0      8'hd1
+//`define HHI_DSI_LVDS_EDP_CNTL1      8'hd2
+//`define HHI_CSI_PHY_CNTL0           8'hd3
+//`define HHI_CSI_PHY_CNTL1           8'hd4
+//`define HHI_CSI_PHY_CNTL2           8'hd5
+//`define HHI_CSI_PHY_CNTL3           8'hd6
+//`define HHI_CSI_PHY_CNTL4           8'hd7
+//`define HHI_DIF_CSI_PHY_CNTL0       8'hd8
+//`define HHI_DIF_CSI_PHY_CNTL1       8'hd9
+//`define HHI_DIF_CSI_PHY_CNTL2       8'hda
+//`define HHI_DIF_CSI_PHY_CNTL3       8'hdb
+//`define HHI_DIF_CSI_PHY_CNTL4       8'hdc
+//`define HHI_DIF_CSI_PHY_CNTL5       8'hdd
+//`define HHI_LVDS_TX_PHY_CNTL0       8'hde
+//`define HHI_LVDS_TX_PHY_CNTL1       8'hdf
+//`define HHI_VID2_PLL_CNTL           8'he0
+//`define HHI_VID2_PLL_CNTL2          8'he1
+//`define HHI_VID2_PLL_CNTL3          8'he2
+//`define HHI_VID2_PLL_CNTL4          8'he3
+//`define HHI_VID2_PLL_CNTL5          8'he4
+//`define HHI_VID2_PLL_CNTL_I         8'he5
+#define     HHI_HDMI_PHY_CNTL0                                 (0xff63c000 + (0x0e8 << 2))
+#define SEC_HHI_HDMI_PHY_CNTL0                                 (0xff63c000 + (0x0e8 << 2))
+#define   P_HHI_HDMI_PHY_CNTL0                                 (volatile uint32_t *)(0xff63c000 + (0x0e8 << 2))
+#define     HHI_HDMI_PHY_CNTL1                                 (0xff63c000 + (0x0e9 << 2))
+#define SEC_HHI_HDMI_PHY_CNTL1                                 (0xff63c000 + (0x0e9 << 2))
+#define   P_HHI_HDMI_PHY_CNTL1                                 (volatile uint32_t *)(0xff63c000 + (0x0e9 << 2))
+#define     HHI_HDMI_PHY_CNTL2                                 (0xff63c000 + (0x0ea << 2))
+#define SEC_HHI_HDMI_PHY_CNTL2                                 (0xff63c000 + (0x0ea << 2))
+#define   P_HHI_HDMI_PHY_CNTL2                                 (volatile uint32_t *)(0xff63c000 + (0x0ea << 2))
+#define     HHI_HDMI_PHY_CNTL3                                 (0xff63c000 + (0x0eb << 2))
+#define SEC_HHI_HDMI_PHY_CNTL3                                 (0xff63c000 + (0x0eb << 2))
+#define   P_HHI_HDMI_PHY_CNTL3                                 (volatile uint32_t *)(0xff63c000 + (0x0eb << 2))
+#define     HHI_HDMI_PHY_CNTL4                                 (0xff63c000 + (0x0ec << 2))
+#define SEC_HHI_HDMI_PHY_CNTL4                                 (0xff63c000 + (0x0ec << 2))
+#define   P_HHI_HDMI_PHY_CNTL4                                 (volatile uint32_t *)(0xff63c000 + (0x0ec << 2))
+#define     HHI_HDMI_PHY_CNTL5                                 (0xff63c000 + (0x0ed << 2))
+#define SEC_HHI_HDMI_PHY_CNTL5                                 (0xff63c000 + (0x0ed << 2))
+#define   P_HHI_HDMI_PHY_CNTL5                                 (volatile uint32_t *)(0xff63c000 + (0x0ed << 2))
+#define     HHI_HDMI_PHY_STATUS                                (0xff63c000 + (0x0ee << 2))
+#define SEC_HHI_HDMI_PHY_STATUS                                (0xff63c000 + (0x0ee << 2))
+#define   P_HHI_HDMI_PHY_STATUS                                (volatile uint32_t *)(0xff63c000 + (0x0ee << 2))
+//`define HHI_ADEC_SYS_CLK_CNTL       8'hf1
+#define     HHI_VID_LOCK_CLK_CNTL                              (0xff63c000 + (0x0f2 << 2))
+#define SEC_HHI_VID_LOCK_CLK_CNTL                              (0xff63c000 + (0x0f2 << 2))
+#define   P_HHI_VID_LOCK_CLK_CNTL                              (volatile uint32_t *)(0xff63c000 + (0x0f2 << 2))
+//`define HHI_ATV_DMD_SYS_CLK_CNTL    8'hf3
+#define     HHI_AXI_PIPEL_CNTL                                 (0xff63c000 + (0x0f4 << 2))
+#define SEC_HHI_AXI_PIPEL_CNTL                                 (0xff63c000 + (0x0f4 << 2))
+#define   P_HHI_AXI_PIPEL_CNTL                                 (volatile uint32_t *)(0xff63c000 + (0x0f4 << 2))
+#define     HHI_BT656_CLK_CNTL                                 (0xff63c000 + (0x0f5 << 2))
+#define SEC_HHI_BT656_CLK_CNTL                                 (0xff63c000 + (0x0f5 << 2))
+#define   P_HHI_BT656_CLK_CNTL                                 (volatile uint32_t *)(0xff63c000 + (0x0f5 << 2))
+#define     HHI_CDAC_CLK_CNTL                                  (0xff63c000 + (0x0f6 << 2))
+#define SEC_HHI_CDAC_CLK_CNTL                                  (0xff63c000 + (0x0f6 << 2))
+#define   P_HHI_CDAC_CLK_CNTL                                  (volatile uint32_t *)(0xff63c000 + (0x0f6 << 2))
+#define     HHI_SPICC_CLK_CNTL                                 (0xff63c000 + (0x0f7 << 2))
+#define SEC_HHI_SPICC_CLK_CNTL                                 (0xff63c000 + (0x0f7 << 2))
+#define   P_HHI_SPICC_CLK_CNTL                                 (volatile uint32_t *)(0xff63c000 + (0x0f7 << 2))
+//`define HHI_HDMIRX_AUD_PLL_CNTL     8'hf8
+//`define HHI_HDMIRX_AUD_PLL_CNTL2    8'hf9
+//`define HHI_HDMIRX_AUD_PLL_CNTL3    8'hfa
+//`define HHI_HDMIRX_AUD_PLL_CNTL4    8'hfb
+//`define HHI_HDMIRX_AUD_PLL_CNTL5    8'hfc
+//`define HHI_HDMIRX_AUD_PLL_CNTL6    8'hfd
+//`define HHI_HDMIRX_AUD_PLL_CNTL_I   8'hfe
+//========================================================================
+//  HIU - Mailbox
+//========================================================================
+// APB4_DECODER_NON_SECURE_BASE     32'hFF63C400
+// APB4_DECODER_SECURE_BASE         32'hFF63C400
+#define     HIU_MAILBOX_SET_0                                  (0xff63c400 + (0x001 << 2))
+#define SEC_HIU_MAILBOX_SET_0                                  (0xff63c400 + (0x001 << 2))
+#define   P_HIU_MAILBOX_SET_0                                  (volatile uint32_t *)(0xff63c400 + (0x001 << 2))
+#define     HIU_MAILBOX_STAT_0                                 (0xff63c400 + (0x002 << 2))
+#define SEC_HIU_MAILBOX_STAT_0                                 (0xff63c400 + (0x002 << 2))
+#define   P_HIU_MAILBOX_STAT_0                                 (volatile uint32_t *)(0xff63c400 + (0x002 << 2))
+#define     HIU_MAILBOX_CLR_0                                  (0xff63c400 + (0x003 << 2))
+#define SEC_HIU_MAILBOX_CLR_0                                  (0xff63c400 + (0x003 << 2))
+#define   P_HIU_MAILBOX_CLR_0                                  (volatile uint32_t *)(0xff63c400 + (0x003 << 2))
+#define     HIU_MAILBOX_SET_1                                  (0xff63c400 + (0x004 << 2))
+#define SEC_HIU_MAILBOX_SET_1                                  (0xff63c400 + (0x004 << 2))
+#define   P_HIU_MAILBOX_SET_1                                  (volatile uint32_t *)(0xff63c400 + (0x004 << 2))
+#define     HIU_MAILBOX_STAT_1                                 (0xff63c400 + (0x005 << 2))
+#define SEC_HIU_MAILBOX_STAT_1                                 (0xff63c400 + (0x005 << 2))
+#define   P_HIU_MAILBOX_STAT_1                                 (volatile uint32_t *)(0xff63c400 + (0x005 << 2))
+#define     HIU_MAILBOX_CLR_1                                  (0xff63c400 + (0x006 << 2))
+#define SEC_HIU_MAILBOX_CLR_1                                  (0xff63c400 + (0x006 << 2))
+#define   P_HIU_MAILBOX_CLR_1                                  (volatile uint32_t *)(0xff63c400 + (0x006 << 2))
+#define     HIU_MAILBOX_SET_2                                  (0xff63c400 + (0x007 << 2))
+#define SEC_HIU_MAILBOX_SET_2                                  (0xff63c400 + (0x007 << 2))
+#define   P_HIU_MAILBOX_SET_2                                  (volatile uint32_t *)(0xff63c400 + (0x007 << 2))
+#define     HIU_MAILBOX_STAT_2                                 (0xff63c400 + (0x008 << 2))
+#define SEC_HIU_MAILBOX_STAT_2                                 (0xff63c400 + (0x008 << 2))
+#define   P_HIU_MAILBOX_STAT_2                                 (volatile uint32_t *)(0xff63c400 + (0x008 << 2))
+#define     HIU_MAILBOX_CLR_2                                  (0xff63c400 + (0x009 << 2))
+#define SEC_HIU_MAILBOX_CLR_2                                  (0xff63c400 + (0x009 << 2))
+#define   P_HIU_MAILBOX_CLR_2                                  (volatile uint32_t *)(0xff63c400 + (0x009 << 2))
+#define     HIU_MAILBOX_SET_3                                  (0xff63c400 + (0x00a << 2))
+#define SEC_HIU_MAILBOX_SET_3                                  (0xff63c400 + (0x00a << 2))
+#define   P_HIU_MAILBOX_SET_3                                  (volatile uint32_t *)(0xff63c400 + (0x00a << 2))
+#define     HIU_MAILBOX_STAT_3                                 (0xff63c400 + (0x00b << 2))
+#define SEC_HIU_MAILBOX_STAT_3                                 (0xff63c400 + (0x00b << 2))
+#define   P_HIU_MAILBOX_STAT_3                                 (volatile uint32_t *)(0xff63c400 + (0x00b << 2))
+#define     HIU_MAILBOX_CLR_3                                  (0xff63c400 + (0x00c << 2))
+#define SEC_HIU_MAILBOX_CLR_3                                  (0xff63c400 + (0x00c << 2))
+#define   P_HIU_MAILBOX_CLR_3                                  (volatile uint32_t *)(0xff63c400 + (0x00c << 2))
+#define     HIU_MAILBOX_SET_4                                  (0xff63c400 + (0x00d << 2))
+#define SEC_HIU_MAILBOX_SET_4                                  (0xff63c400 + (0x00d << 2))
+#define   P_HIU_MAILBOX_SET_4                                  (volatile uint32_t *)(0xff63c400 + (0x00d << 2))
+#define     HIU_MAILBOX_STAT_4                                 (0xff63c400 + (0x00e << 2))
+#define SEC_HIU_MAILBOX_STAT_4                                 (0xff63c400 + (0x00e << 2))
+#define   P_HIU_MAILBOX_STAT_4                                 (volatile uint32_t *)(0xff63c400 + (0x00e << 2))
+#define     HIU_MAILBOX_CLR_4                                  (0xff63c400 + (0x00f << 2))
+#define SEC_HIU_MAILBOX_CLR_4                                  (0xff63c400 + (0x00f << 2))
+#define   P_HIU_MAILBOX_CLR_4                                  (volatile uint32_t *)(0xff63c400 + (0x00f << 2))
+#define     HIU_MAILBOX_SET_5                                  (0xff63c400 + (0x010 << 2))
+#define SEC_HIU_MAILBOX_SET_5                                  (0xff63c400 + (0x010 << 2))
+#define   P_HIU_MAILBOX_SET_5                                  (volatile uint32_t *)(0xff63c400 + (0x010 << 2))
+#define     HIU_MAILBOX_STAT_5                                 (0xff63c400 + (0x011 << 2))
+#define SEC_HIU_MAILBOX_STAT_5                                 (0xff63c400 + (0x011 << 2))
+#define   P_HIU_MAILBOX_STAT_5                                 (volatile uint32_t *)(0xff63c400 + (0x011 << 2))
+#define     HIU_MAILBOX_CLR_5                                  (0xff63c400 + (0x012 << 2))
+#define SEC_HIU_MAILBOX_CLR_5                                  (0xff63c400 + (0x012 << 2))
+#define   P_HIU_MAILBOX_CLR_5                                  (volatile uint32_t *)(0xff63c400 + (0x012 << 2))
+#define     HIU_MAILBOX_SET_6                                  (0xff63c400 + (0x013 << 2))
+#define SEC_HIU_MAILBOX_SET_6                                  (0xff63c400 + (0x013 << 2))
+#define   P_HIU_MAILBOX_SET_6                                  (volatile uint32_t *)(0xff63c400 + (0x013 << 2))
+#define     HIU_MAILBOX_STAT_6                                 (0xff63c400 + (0x014 << 2))
+#define SEC_HIU_MAILBOX_STAT_6                                 (0xff63c400 + (0x014 << 2))
+#define   P_HIU_MAILBOX_STAT_6                                 (volatile uint32_t *)(0xff63c400 + (0x014 << 2))
+#define     HIU_MAILBOX_CLR_6                                  (0xff63c400 + (0x015 << 2))
+#define SEC_HIU_MAILBOX_CLR_6                                  (0xff63c400 + (0x015 << 2))
+#define   P_HIU_MAILBOX_CLR_6                                  (volatile uint32_t *)(0xff63c400 + (0x015 << 2))
+#define     HIU_MAILBOX_SET_7                                  (0xff63c400 + (0x016 << 2))
+#define SEC_HIU_MAILBOX_SET_7                                  (0xff63c400 + (0x016 << 2))
+#define   P_HIU_MAILBOX_SET_7                                  (volatile uint32_t *)(0xff63c400 + (0x016 << 2))
+#define     HIU_MAILBOX_STAT_7                                 (0xff63c400 + (0x017 << 2))
+#define SEC_HIU_MAILBOX_STAT_7                                 (0xff63c400 + (0x017 << 2))
+#define   P_HIU_MAILBOX_STAT_7                                 (volatile uint32_t *)(0xff63c400 + (0x017 << 2))
+#define     HIU_MAILBOX_CLR_7                                  (0xff63c400 + (0x018 << 2))
+#define SEC_HIU_MAILBOX_CLR_7                                  (0xff63c400 + (0x018 << 2))
+#define   P_HIU_MAILBOX_CLR_7                                  (volatile uint32_t *)(0xff63c400 + (0x018 << 2))
+//========================================================================
+//  EFUSE
+//========================================================================
+//  APB4_DECODER_NON_SECURE_BASE     32'hFF630000
+//  APB4_DECODER_SECURE_BASE         32'hFF630000
+#define     EFUSE_CLR                                          (0xff630000 + (0x000 << 2))
+#define SEC_EFUSE_CLR                                          (0xff630000 + (0x000 << 2))
+#define   P_EFUSE_CLR                                          (volatile uint32_t *)(0xff630000 + (0x000 << 2))
+#define     EFUSE_START                                        (0xff630000 + (0x001 << 2))
+#define SEC_EFUSE_START                                        (0xff630000 + (0x001 << 2))
+#define   P_EFUSE_START                                        (volatile uint32_t *)(0xff630000 + (0x001 << 2))
+#define     EFUSE_WDATA0                                       (0xff630000 + (0x004 << 2))
+#define SEC_EFUSE_WDATA0                                       (0xff630000 + (0x004 << 2))
+#define   P_EFUSE_WDATA0                                       (volatile uint32_t *)(0xff630000 + (0x004 << 2))
+#define     EFUSE_WDATA1                                       (0xff630000 + (0x005 << 2))
+#define SEC_EFUSE_WDATA1                                       (0xff630000 + (0x005 << 2))
+#define   P_EFUSE_WDATA1                                       (volatile uint32_t *)(0xff630000 + (0x005 << 2))
+#define     EFUSE_WDATA2                                       (0xff630000 + (0x006 << 2))
+#define SEC_EFUSE_WDATA2                                       (0xff630000 + (0x006 << 2))
+#define   P_EFUSE_WDATA2                                       (volatile uint32_t *)(0xff630000 + (0x006 << 2))
+#define     EFUSE_WDATA3                                       (0xff630000 + (0x007 << 2))
+#define SEC_EFUSE_WDATA3                                       (0xff630000 + (0x007 << 2))
+#define   P_EFUSE_WDATA3                                       (volatile uint32_t *)(0xff630000 + (0x007 << 2))
+#define     EFUSE_RDATA0                                       (0xff630000 + (0x008 << 2))
+#define SEC_EFUSE_RDATA0                                       (0xff630000 + (0x008 << 2))
+#define   P_EFUSE_RDATA0                                       (volatile uint32_t *)(0xff630000 + (0x008 << 2))
+#define     EFUSE_RDATA1                                       (0xff630000 + (0x009 << 2))
+#define SEC_EFUSE_RDATA1                                       (0xff630000 + (0x009 << 2))
+#define   P_EFUSE_RDATA1                                       (volatile uint32_t *)(0xff630000 + (0x009 << 2))
+#define     EFUSE_RDATA2                                       (0xff630000 + (0x00a << 2))
+#define SEC_EFUSE_RDATA2                                       (0xff630000 + (0x00a << 2))
+#define   P_EFUSE_RDATA2                                       (volatile uint32_t *)(0xff630000 + (0x00a << 2))
+#define     EFUSE_RDATA3                                       (0xff630000 + (0x00b << 2))
+#define SEC_EFUSE_RDATA3                                       (0xff630000 + (0x00b << 2))
+#define   P_EFUSE_RDATA3                                       (volatile uint32_t *)(0xff630000 + (0x00b << 2))
+#define     EFUSE_LIC0                                         (0xff630000 + (0x00c << 2))
+#define SEC_EFUSE_LIC0                                         (0xff630000 + (0x00c << 2))
+#define   P_EFUSE_LIC0                                         (volatile uint32_t *)(0xff630000 + (0x00c << 2))
+#define     EFUSE_LIC1                                         (0xff630000 + (0x00d << 2))
+#define SEC_EFUSE_LIC1                                         (0xff630000 + (0x00d << 2))
+#define   P_EFUSE_LIC1                                         (volatile uint32_t *)(0xff630000 + (0x00d << 2))
+#define     EFUSE_LIC2                                         (0xff630000 + (0x00e << 2))
+#define SEC_EFUSE_LIC2                                         (0xff630000 + (0x00e << 2))
+#define   P_EFUSE_LIC2                                         (volatile uint32_t *)(0xff630000 + (0x00e << 2))
+#define     EFUSE_LIC3                                         (0xff630000 + (0x00f << 2))
+#define SEC_EFUSE_LIC3                                         (0xff630000 + (0x00f << 2))
+#define   P_EFUSE_LIC3                                         (volatile uint32_t *)(0xff630000 + (0x00f << 2))
+#define     KL_START0                                          (0xff630000 + (0x020 << 2))
+#define SEC_KL_START0                                          (0xff630000 + (0x020 << 2))
+#define   P_KL_START0                                          (volatile uint32_t *)(0xff630000 + (0x020 << 2))
+#define     KL_START1                                          (0xff630000 + (0x021 << 2))
+#define SEC_KL_START1                                          (0xff630000 + (0x021 << 2))
+#define   P_KL_START1                                          (volatile uint32_t *)(0xff630000 + (0x021 << 2))
+#define     KL_RESP0_0                                         (0xff630000 + (0x024 << 2))
+#define SEC_KL_RESP0_0                                         (0xff630000 + (0x024 << 2))
+#define   P_KL_RESP0_0                                         (volatile uint32_t *)(0xff630000 + (0x024 << 2))
+#define     KL_RESP0_1                                         (0xff630000 + (0x025 << 2))
+#define SEC_KL_RESP0_1                                         (0xff630000 + (0x025 << 2))
+#define   P_KL_RESP0_1                                         (volatile uint32_t *)(0xff630000 + (0x025 << 2))
+#define     KL_RESP0_2                                         (0xff630000 + (0x026 << 2))
+#define SEC_KL_RESP0_2                                         (0xff630000 + (0x026 << 2))
+#define   P_KL_RESP0_2                                         (volatile uint32_t *)(0xff630000 + (0x026 << 2))
+#define     KL_RESP0_3                                         (0xff630000 + (0x027 << 2))
+#define SEC_KL_RESP0_3                                         (0xff630000 + (0x027 << 2))
+#define   P_KL_RESP0_3                                         (volatile uint32_t *)(0xff630000 + (0x027 << 2))
+#define     KL_RESP1_0                                         (0xff630000 + (0x028 << 2))
+#define SEC_KL_RESP1_0                                         (0xff630000 + (0x028 << 2))
+#define   P_KL_RESP1_0                                         (volatile uint32_t *)(0xff630000 + (0x028 << 2))
+#define     KL_RESP1_1                                         (0xff630000 + (0x029 << 2))
+#define SEC_KL_RESP1_1                                         (0xff630000 + (0x029 << 2))
+#define   P_KL_RESP1_1                                         (volatile uint32_t *)(0xff630000 + (0x029 << 2))
+#define     KL_RESP1_2                                         (0xff630000 + (0x02a << 2))
+#define SEC_KL_RESP1_2                                         (0xff630000 + (0x02a << 2))
+#define   P_KL_RESP1_2                                         (volatile uint32_t *)(0xff630000 + (0x02a << 2))
+#define     KL_RESP1_3                                         (0xff630000 + (0x02b << 2))
+#define SEC_KL_RESP1_3                                         (0xff630000 + (0x02b << 2))
+#define   P_KL_RESP1_3                                         (volatile uint32_t *)(0xff630000 + (0x02b << 2))
+#define     KL_RAM                                             (0xff630000 + (0x040 << 2))
+#define SEC_KL_RAM                                             (0xff630000 + (0x040 << 2))
+#define   P_KL_RAM                                             (volatile uint32_t *)(0xff630000 + (0x040 << 2))
+#define     RNG_SEC_CONFIG_REG1                                (0xff630000 + (0x081 << 2))
+#define SEC_RNG_SEC_CONFIG_REG1                                (0xff630000 + (0x081 << 2))
+#define   P_RNG_SEC_CONFIG_REG1                                (volatile uint32_t *)(0xff630000 + (0x081 << 2))
+#define     RNG_SEC_CONFIG_REG2                                (0xff630000 + (0x082 << 2))
+#define SEC_RNG_SEC_CONFIG_REG2                                (0xff630000 + (0x082 << 2))
+#define   P_RNG_SEC_CONFIG_REG2                                (volatile uint32_t *)(0xff630000 + (0x082 << 2))
+#define     RNG_SEC_DATA                                       (0xff630000 + (0x084 << 2))
+#define SEC_RNG_SEC_DATA                                       (0xff630000 + (0x084 << 2))
+#define   P_RNG_SEC_DATA                                       (volatile uint32_t *)(0xff630000 + (0x084 << 2))
+#define     RNG_SEC_STS                                        (0xff630000 + (0x085 << 2))
+#define SEC_RNG_SEC_STS                                        (0xff630000 + (0x085 << 2))
+#define   P_RNG_SEC_STS                                        (volatile uint32_t *)(0xff630000 + (0x085 << 2))
+#define     RNG_USR_DATA                                       (0xff630000 + (0x086 << 2))
+#define SEC_RNG_USR_DATA                                       (0xff630000 + (0x086 << 2))
+#define   P_RNG_USR_DATA                                       (volatile uint32_t *)(0xff630000 + (0x086 << 2))
+#define     RNG_USR_STS                                        (0xff630000 + (0x087 << 2))
+#define SEC_RNG_USR_STS                                        (0xff630000 + (0x087 << 2))
+#define   P_RNG_USR_STS                                        (volatile uint32_t *)(0xff630000 + (0x087 << 2))
+//========================================================================
+//  Ethernet Phy
+//========================================================================
+//  APB4_DECODER_NON_SECURE_BASE     32'hFF64C000
+//  APB4_DECODER_SECURE_BASE         32'hFF64C000
+#define     ETH_PHY_DBG_CTL0                                   (0xff64c000 + (0x000 << 2))
+#define SEC_ETH_PHY_DBG_CTL0                                   (0xff64c000 + (0x000 << 2))
+#define   P_ETH_PHY_DBG_CTL0                                   (volatile uint32_t *)(0xff64c000 + (0x000 << 2))
+#define     ETH_PHY_DBG_CTL1                                   (0xff64c000 + (0x001 << 2))
+#define SEC_ETH_PHY_DBG_CTL1                                   (0xff64c000 + (0x001 << 2))
+#define   P_ETH_PHY_DBG_CTL1                                   (volatile uint32_t *)(0xff64c000 + (0x001 << 2))
+#define     ETH_PHY_DBG_CFG0                                   (0xff64c000 + (0x002 << 2))
+#define SEC_ETH_PHY_DBG_CFG0                                   (0xff64c000 + (0x002 << 2))
+#define   P_ETH_PHY_DBG_CFG0                                   (volatile uint32_t *)(0xff64c000 + (0x002 << 2))
+#define     ETH_PHY_DBG_CFG1                                   (0xff64c000 + (0x003 << 2))
+#define SEC_ETH_PHY_DBG_CFG1                                   (0xff64c000 + (0x003 << 2))
+#define   P_ETH_PHY_DBG_CFG1                                   (volatile uint32_t *)(0xff64c000 + (0x003 << 2))
+#define     ETH_PHY_DBG_CFG2                                   (0xff64c000 + (0x004 << 2))
+#define SEC_ETH_PHY_DBG_CFG2                                   (0xff64c000 + (0x004 << 2))
+#define   P_ETH_PHY_DBG_CFG2                                   (volatile uint32_t *)(0xff64c000 + (0x004 << 2))
+#define     ETH_PHY_DBG_CFG3                                   (0xff64c000 + (0x005 << 2))
+#define SEC_ETH_PHY_DBG_CFG3                                   (0xff64c000 + (0x005 << 2))
+#define   P_ETH_PHY_DBG_CFG3                                   (volatile uint32_t *)(0xff64c000 + (0x005 << 2))
+#define     ETH_PHY_DBG_CFG4                                   (0xff64c000 + (0x006 << 2))
+#define SEC_ETH_PHY_DBG_CFG4                                   (0xff64c000 + (0x006 << 2))
+#define   P_ETH_PHY_DBG_CFG4                                   (volatile uint32_t *)(0xff64c000 + (0x006 << 2))
+#define     ETH_PLL_STS                                        (0xff64c000 + (0x010 << 2))
+#define SEC_ETH_PLL_STS                                        (0xff64c000 + (0x010 << 2))
+#define   P_ETH_PLL_STS                                        (volatile uint32_t *)(0xff64c000 + (0x010 << 2))
+#define     ETH_PLL_CTL0                                       (0xff64c000 + (0x011 << 2))
+#define SEC_ETH_PLL_CTL0                                       (0xff64c000 + (0x011 << 2))
+#define   P_ETH_PLL_CTL0                                       (volatile uint32_t *)(0xff64c000 + (0x011 << 2))
+#define     ETH_PLL_CTL1                                       (0xff64c000 + (0x012 << 2))
+#define SEC_ETH_PLL_CTL1                                       (0xff64c000 + (0x012 << 2))
+#define   P_ETH_PLL_CTL1                                       (volatile uint32_t *)(0xff64c000 + (0x012 << 2))
+#define     ETH_PLL_CTL2                                       (0xff64c000 + (0x013 << 2))
+#define SEC_ETH_PLL_CTL2                                       (0xff64c000 + (0x013 << 2))
+#define   P_ETH_PLL_CTL2                                       (volatile uint32_t *)(0xff64c000 + (0x013 << 2))
+#define     ETH_PLL_CTL3                                       (0xff64c000 + (0x014 << 2))
+#define SEC_ETH_PLL_CTL3                                       (0xff64c000 + (0x014 << 2))
+#define   P_ETH_PLL_CTL3                                       (volatile uint32_t *)(0xff64c000 + (0x014 << 2))
+#define     ETH_PLL_CTL4                                       (0xff64c000 + (0x015 << 2))
+#define SEC_ETH_PLL_CTL4                                       (0xff64c000 + (0x015 << 2))
+#define   P_ETH_PLL_CTL4                                       (volatile uint32_t *)(0xff64c000 + (0x015 << 2))
+#define     ETH_PLL_CTL5                                       (0xff64c000 + (0x016 << 2))
+#define SEC_ETH_PLL_CTL5                                       (0xff64c000 + (0x016 << 2))
+#define   P_ETH_PLL_CTL5                                       (volatile uint32_t *)(0xff64c000 + (0x016 << 2))
+#define     ETH_PLL_CTL6                                       (0xff64c000 + (0x017 << 2))
+#define SEC_ETH_PLL_CTL6                                       (0xff64c000 + (0x017 << 2))
+#define   P_ETH_PLL_CTL6                                       (volatile uint32_t *)(0xff64c000 + (0x017 << 2))
+#define     ETH_PLL_CTL7                                       (0xff64c000 + (0x018 << 2))
+#define SEC_ETH_PLL_CTL7                                       (0xff64c000 + (0x018 << 2))
+#define   P_ETH_PLL_CTL7                                       (volatile uint32_t *)(0xff64c000 + (0x018 << 2))
+#define     ETH_PHY_CNTL0                                      (0xff64c000 + (0x020 << 2))
+#define SEC_ETH_PHY_CNTL0                                      (0xff64c000 + (0x020 << 2))
+#define   P_ETH_PHY_CNTL0                                      (volatile uint32_t *)(0xff64c000 + (0x020 << 2))
+#define     ETH_PHY_CNTL1                                      (0xff64c000 + (0x021 << 2))
+#define SEC_ETH_PHY_CNTL1                                      (0xff64c000 + (0x021 << 2))
+#define   P_ETH_PHY_CNTL1                                      (volatile uint32_t *)(0xff64c000 + (0x021 << 2))
+#define     ETH_PHY_CNTL2                                      (0xff64c000 + (0x022 << 2))
+#define SEC_ETH_PHY_CNTL2                                      (0xff64c000 + (0x022 << 2))
+#define   P_ETH_PHY_CNTL2                                      (volatile uint32_t *)(0xff64c000 + (0x022 << 2))
+#define     ETH_PHY_STS0                                       (0xff64c000 + (0x025 << 2))
+#define SEC_ETH_PHY_STS0                                       (0xff64c000 + (0x025 << 2))
+#define   P_ETH_PHY_STS0                                       (volatile uint32_t *)(0xff64c000 + (0x025 << 2))
+#define     ETH_PHY_STS1                                       (0xff64c000 + (0x026 << 2))
+#define SEC_ETH_PHY_STS1                                       (0xff64c000 + (0x026 << 2))
+#define   P_ETH_PHY_STS1                                       (volatile uint32_t *)(0xff64c000 + (0x026 << 2))
+#define     ETH_PHY_STS2                                       (0xff64c000 + (0x027 << 2))
+#define SEC_ETH_PHY_STS2                                       (0xff64c000 + (0x027 << 2))
+#define   P_ETH_PHY_STS2                                       (volatile uint32_t *)(0xff64c000 + (0x027 << 2))
+#define     ETH_PHY_DBG_REG                                    (0xff64c000 + (0x028 << 2))
+#define SEC_ETH_PHY_DBG_REG                                    (0xff64c000 + (0x028 << 2))
+#define   P_ETH_PHY_DBG_REG                                    (volatile uint32_t *)(0xff64c000 + (0x028 << 2))
+//========================================================================
+//  PDM
+//========================================================================
+//
+// Reading file:  ../audio/rtl/pdm_reg.vh
+//
+//  APB4_DECODER_NON_SECURE_BASE     32'hFF640000
+//  APB4_DECODER_SECURE_BASE         32'hFF640000
+#define     PDM_CTRL                                           (0xff640000 + (0x000 << 2))
+#define SEC_PDM_CTRL                                           (0xff640000 + (0x000 << 2))
+#define   P_PDM_CTRL                                           (volatile uint32_t *)(0xff640000 + (0x000 << 2))
+#define     PDM_HCIC_CTRL1                                     (0xff640000 + (0x001 << 2))
+#define SEC_PDM_HCIC_CTRL1                                     (0xff640000 + (0x001 << 2))
+#define   P_PDM_HCIC_CTRL1                                     (volatile uint32_t *)(0xff640000 + (0x001 << 2))
+#define     PDM_HCIC_CTRL2                                     (0xff640000 + (0x002 << 2))
+#define SEC_PDM_HCIC_CTRL2                                     (0xff640000 + (0x002 << 2))
+#define   P_PDM_HCIC_CTRL2                                     (volatile uint32_t *)(0xff640000 + (0x002 << 2))
+#define     PDM_F1_CTRL                                        (0xff640000 + (0x003 << 2))
+#define SEC_PDM_F1_CTRL                                        (0xff640000 + (0x003 << 2))
+#define   P_PDM_F1_CTRL                                        (volatile uint32_t *)(0xff640000 + (0x003 << 2))
+#define     PDM_F2_CTRL                                        (0xff640000 + (0x004 << 2))
+#define SEC_PDM_F2_CTRL                                        (0xff640000 + (0x004 << 2))
+#define   P_PDM_F2_CTRL                                        (volatile uint32_t *)(0xff640000 + (0x004 << 2))
+#define     PDM_F3_CTRL                                        (0xff640000 + (0x005 << 2))
+#define SEC_PDM_F3_CTRL                                        (0xff640000 + (0x005 << 2))
+#define   P_PDM_F3_CTRL                                        (volatile uint32_t *)(0xff640000 + (0x005 << 2))
+#define     PDM_HPF_CTRL                                       (0xff640000 + (0x006 << 2))
+#define SEC_PDM_HPF_CTRL                                       (0xff640000 + (0x006 << 2))
+#define   P_PDM_HPF_CTRL                                       (volatile uint32_t *)(0xff640000 + (0x006 << 2))
+#define     PDM_CHAN_CTRL                                      (0xff640000 + (0x007 << 2))
+#define SEC_PDM_CHAN_CTRL                                      (0xff640000 + (0x007 << 2))
+#define   P_PDM_CHAN_CTRL                                      (volatile uint32_t *)(0xff640000 + (0x007 << 2))
+#define     PDM_CHAN_CTRL1                                     (0xff640000 + (0x008 << 2))
+#define SEC_PDM_CHAN_CTRL1                                     (0xff640000 + (0x008 << 2))
+#define   P_PDM_CHAN_CTRL1                                     (volatile uint32_t *)(0xff640000 + (0x008 << 2))
+#define     PDM_COEFF_ADDR                                     (0xff640000 + (0x009 << 2))
+#define SEC_PDM_COEFF_ADDR                                     (0xff640000 + (0x009 << 2))
+#define   P_PDM_COEFF_ADDR                                     (volatile uint32_t *)(0xff640000 + (0x009 << 2))
+#define     PDM_COEFF_DATA                                     (0xff640000 + (0x00a << 2))
+#define SEC_PDM_COEFF_DATA                                     (0xff640000 + (0x00a << 2))
+#define   P_PDM_COEFF_DATA                                     (volatile uint32_t *)(0xff640000 + (0x00a << 2))
+#define     PDM_CLKG_CTRL                                      (0xff640000 + (0x00b << 2))
+#define SEC_PDM_CLKG_CTRL                                      (0xff640000 + (0x00b << 2))
+#define   P_PDM_CLKG_CTRL                                      (volatile uint32_t *)(0xff640000 + (0x00b << 2))
+#define     PDM_STS                                            (0xff640000 + (0x00c << 2))
+#define SEC_PDM_STS                                            (0xff640000 + (0x00c << 2))
+#define   P_PDM_STS                                            (volatile uint32_t *)(0xff640000 + (0x00c << 2))
+//bit 1  HPF filter output overflow.  means the PCLK is too slow.
+//bit 0  HCIC filter output overflow. means the CTS_PDM_CLK is too slow. can't finished the filter function.
+#define     PDM_MUTE_VALUE                                     (0xff640000 + (0x00d << 2))
+#define SEC_PDM_MUTE_VALUE                                     (0xff640000 + (0x00d << 2))
+#define   P_PDM_MUTE_VALUE                                     (volatile uint32_t *)(0xff640000 + (0x00d << 2))
+//
+// Closing file:  ../audio/rtl/pdm_reg.vh
+//
+// synopsys translate_off
+// synopsys translate_on
+//
+// Closing file:  ./secure_apb4_ee.h
+//
+//
+// Reading file:  ./ao_rti_reg.h
+//
+//#define AO_RTI_REG_BASE 0x00
+// APB4_DECODER_NON_SECURE_BASE     32'hFF800000
+// APB4_DECODER_SECURE_BASE         32'hFF800000
+// Registers not affected by the Watchdog timer
+#define     AO_RTI_STATUS_REG0                                 (0xff800000 + (0x000 << 2))
+#define SEC_AO_RTI_STATUS_REG0                                 (0xff800000 + (0x000 << 2))
+#define   P_AO_RTI_STATUS_REG0                                 (volatile uint32_t *)(0xff800000 + (0x000 << 2))
+#define     AO_RTI_STATUS_REG1                                 (0xff800000 + (0x001 << 2))
+#define SEC_AO_RTI_STATUS_REG1                                 (0xff800000 + (0x001 << 2))
+#define   P_AO_RTI_STATUS_REG1                                 (volatile uint32_t *)(0xff800000 + (0x001 << 2))
+#define     AO_RTI_STATUS_REG2                                 (0xff800000 + (0x002 << 2))
+#define SEC_AO_RTI_STATUS_REG2                                 (0xff800000 + (0x002 << 2))
+#define   P_AO_RTI_STATUS_REG2                                 (volatile uint32_t *)(0xff800000 + (0x002 << 2))
+#define     AO_RTI_STATUS_REG3                                 (0xff800000 + (0x003 << 2))
+#define SEC_AO_RTI_STATUS_REG3                                 (0xff800000 + (0x003 << 2))
+#define   P_AO_RTI_STATUS_REG3                                 (volatile uint32_t *)(0xff800000 + (0x003 << 2))
+//`define AO_RTI_PWR_CNTL_REG1        8'h03
+#define     AO_RTI_PWR_CNTL_REG0                               (0xff800000 + (0x004 << 2))
+#define SEC_AO_RTI_PWR_CNTL_REG0                               (0xff800000 + (0x004 << 2))
+#define   P_AO_RTI_PWR_CNTL_REG0                               (volatile uint32_t *)(0xff800000 + (0x004 << 2))
+#define     AO_RTI_PINMUX_REG0                                 (0xff800000 + (0x005 << 2))
+#define SEC_AO_RTI_PINMUX_REG0                                 (0xff800000 + (0x005 << 2))
+#define   P_AO_RTI_PINMUX_REG0                                 (volatile uint32_t *)(0xff800000 + (0x005 << 2))
+#define     AO_RTI_PINMUX_REG1                                 (0xff800000 + (0x006 << 2))
+#define SEC_AO_RTI_PINMUX_REG1                                 (0xff800000 + (0x006 << 2))
+#define   P_AO_RTI_PINMUX_REG1                                 (volatile uint32_t *)(0xff800000 + (0x006 << 2))
+//`define AO_REMAP_REG1               8'h08
+#define     AO_PAD_DS_A                                        (0xff800000 + (0x007 << 2))
+#define SEC_AO_PAD_DS_A                                        (0xff800000 + (0x007 << 2))
+#define   P_AO_PAD_DS_A                                        (volatile uint32_t *)(0xff800000 + (0x007 << 2))
+#define     AO_PAD_DS_B                                        (0xff800000 + (0x008 << 2))
+#define SEC_AO_PAD_DS_B                                        (0xff800000 + (0x008 << 2))
+#define   P_AO_PAD_DS_B                                        (volatile uint32_t *)(0xff800000 + (0x008 << 2))
+#define     AO_GPIO_O_EN_N                                     (0xff800000 + (0x009 << 2))
+#define SEC_AO_GPIO_O_EN_N                                     (0xff800000 + (0x009 << 2))
+#define   P_AO_GPIO_O_EN_N                                     (volatile uint32_t *)(0xff800000 + (0x009 << 2))
+#define     AO_GPIO_I                                          (0xff800000 + (0x00a << 2))
+#define SEC_AO_GPIO_I                                          (0xff800000 + (0x00a << 2))
+#define   P_AO_GPIO_I                                          (volatile uint32_t *)(0xff800000 + (0x00a << 2))
+#define     AO_RTI_PULL_UP_REG                                 (0xff800000 + (0x00b << 2))
+#define SEC_AO_RTI_PULL_UP_REG                                 (0xff800000 + (0x00b << 2))
+#define   P_AO_RTI_PULL_UP_REG                                 (volatile uint32_t *)(0xff800000 + (0x00b << 2))
+#define     AO_RTI_PULL_UP_EN_REG                              (0xff800000 + (0x00c << 2))
+#define SEC_AO_RTI_PULL_UP_EN_REG                              (0xff800000 + (0x00c << 2))
+#define   P_AO_RTI_PULL_UP_EN_REG                              (volatile uint32_t *)(0xff800000 + (0x00c << 2))
+#define     AO_GPIO_O                                          (0xff800000 + (0x00d << 2))
+#define SEC_AO_GPIO_O                                          (0xff800000 + (0x00d << 2))
+#define   P_AO_GPIO_O                                          (volatile uint32_t *)(0xff800000 + (0x00d << 2))
+//`define AO_RTI_JTAG_CONFIG_REG      8'h0C
+//`define AO_RTI_WD_MARK              8'h0D
+#define     AO_CPU_CNTL                                        (0xff800000 + (0x00e << 2))
+#define SEC_AO_CPU_CNTL                                        (0xff800000 + (0x00e << 2))
+#define   P_AO_CPU_CNTL                                        (volatile uint32_t *)(0xff800000 + (0x00e << 2))
+#define     AO_CPU_CNTL2                                       (0xff800000 + (0x00f << 2))
+#define SEC_AO_CPU_CNTL2                                       (0xff800000 + (0x00f << 2))
+#define   P_AO_CPU_CNTL2                                       (volatile uint32_t *)(0xff800000 + (0x00f << 2))
+#define     AO_RTI_GEN_CNTL_REG0                               (0xff800000 + (0x010 << 2))
+#define SEC_AO_RTI_GEN_CNTL_REG0                               (0xff800000 + (0x010 << 2))
+#define   P_AO_RTI_GEN_CNTL_REG0                               (volatile uint32_t *)(0xff800000 + (0x010 << 2))
+#define     AO_CPU_CNTL_NS                                     (0xff800000 + (0x011 << 2))
+#define SEC_AO_CPU_CNTL_NS                                     (0xff800000 + (0x011 << 2))
+#define   P_AO_CPU_CNTL_NS                                     (volatile uint32_t *)(0xff800000 + (0x011 << 2))
+#define     AO_METAL_REVISION_1                                (0xff800000 + (0x012 << 2))
+#define SEC_AO_METAL_REVISION_1                                (0xff800000 + (0x012 << 2))
+#define   P_AO_METAL_REVISION_1                                (volatile uint32_t *)(0xff800000 + (0x012 << 2))
+#define     AO_CLK_GATE0                                       (0xff800000 + (0x013 << 2))
+#define SEC_AO_CLK_GATE0                                       (0xff800000 + (0x013 << 2))
+#define   P_AO_CLK_GATE0                                       (volatile uint32_t *)(0xff800000 + (0x013 << 2))
+#define     AO_CLK_GATE0_SP                                    (0xff800000 + (0x014 << 2))
+#define SEC_AO_CLK_GATE0_SP                                    (0xff800000 + (0x014 << 2))
+#define   P_AO_CLK_GATE0_SP                                    (volatile uint32_t *)(0xff800000 + (0x014 << 2))
+#define     AO_TIMEBASE_CNTL1                                  (0xff800000 + (0x015 << 2))
+#define SEC_AO_TIMEBASE_CNTL1                                  (0xff800000 + (0x015 << 2))
+#define   P_AO_TIMEBASE_CNTL1                                  (volatile uint32_t *)(0xff800000 + (0x015 << 2))
+#define     AO_OSCIN_CNTL                                      (0xff800000 + (0x016 << 2))
+#define SEC_AO_OSCIN_CNTL                                      (0xff800000 + (0x016 << 2))
+#define   P_AO_OSCIN_CNTL                                      (volatile uint32_t *)(0xff800000 + (0x016 << 2))
+#define     AO_PINMUX_LOCK                                     (0xff800000 + (0x017 << 2))
+#define SEC_AO_PINMUX_LOCK                                     (0xff800000 + (0x017 << 2))
+#define   P_AO_PINMUX_LOCK                                     (volatile uint32_t *)(0xff800000 + (0x017 << 2))
+#define     AO_AHB2DDR_CNTL                                    (0xff800000 + (0x018 << 2))
+#define SEC_AO_AHB2DDR_CNTL                                    (0xff800000 + (0x018 << 2))
+#define   P_AO_AHB2DDR_CNTL                                    (volatile uint32_t *)(0xff800000 + (0x018 << 2))
+#define     AO_TIMEBASE_CNTL                                   (0xff800000 + (0x019 << 2))
+#define SEC_AO_TIMEBASE_CNTL                                   (0xff800000 + (0x019 << 2))
+#define   P_AO_TIMEBASE_CNTL                                   (volatile uint32_t *)(0xff800000 + (0x019 << 2))
+#define     AO_GEN_CLK_CNTL                                    (0xff800000 + (0x01a << 2))
+#define SEC_AO_GEN_CLK_CNTL                                    (0xff800000 + (0x01a << 2))
+#define   P_AO_GEN_CLK_CNTL                                    (volatile uint32_t *)(0xff800000 + (0x01a << 2))
+//`define AO_RTI_INTER_OSC_CTL0       8'h1b
+//`define AO_RTI_INTER_OSC_CTL1       8'h1c
+#define     AO_CEC_CLK_CNTL_REG0                               (0xff800000 + (0x01d << 2))
+#define SEC_AO_CEC_CLK_CNTL_REG0                               (0xff800000 + (0x01d << 2))
+#define   P_AO_CEC_CLK_CNTL_REG0                               (volatile uint32_t *)(0xff800000 + (0x01d << 2))
+#define     AO_CEC_CLK_CNTL_REG1                               (0xff800000 + (0x01e << 2))
+#define SEC_AO_CEC_CLK_CNTL_REG1                               (0xff800000 + (0x01e << 2))
+#define   P_AO_CEC_CLK_CNTL_REG1                               (volatile uint32_t *)(0xff800000 + (0x01e << 2))
+#define     AO_METAL_REVISION                                  (0xff800000 + (0x01f << 2))
+#define SEC_AO_METAL_REVISION                                  (0xff800000 + (0x01f << 2))
+#define   P_AO_METAL_REVISION                                  (volatile uint32_t *)(0xff800000 + (0x01f << 2))
+//`define AO_IRQ_MASK_FIQ_SEL         8'h20
+#define     AO_IRQ_GPIO_REG                                    (0xff800000 + (0x021 << 2))
+#define SEC_AO_IRQ_GPIO_REG                                    (0xff800000 + (0x021 << 2))
+#define   P_AO_IRQ_GPIO_REG                                    (volatile uint32_t *)(0xff800000 + (0x021 << 2))
+//`define AO_IRQ_STAT                 8'h22
+//`define AO_IRQ_STAT_CLR             8'h23
+#define     AO_SAR_CLK                                         (0xff800000 + (0x024 << 2))
+#define SEC_AO_SAR_CLK                                         (0xff800000 + (0x024 << 2))
+#define   P_AO_SAR_CLK                                         (volatile uint32_t *)(0xff800000 + (0x024 << 2))
+#define     AO_RTC_ALT_CLK_CNTL0                               (0xff800000 + (0x025 << 2))
+#define SEC_AO_RTC_ALT_CLK_CNTL0                               (0xff800000 + (0x025 << 2))
+#define   P_AO_RTC_ALT_CLK_CNTL0                               (volatile uint32_t *)(0xff800000 + (0x025 << 2))
+#define     AO_RTC_ALT_CLK_CNTL1                               (0xff800000 + (0x026 << 2))
+#define SEC_AO_RTC_ALT_CLK_CNTL1                               (0xff800000 + (0x026 << 2))
+#define   P_AO_RTC_ALT_CLK_CNTL1                               (volatile uint32_t *)(0xff800000 + (0x026 << 2))
+#define     AO_TIMESTAMP_CNTL2                                 (0xff800000 + (0x027 << 2))
+#define SEC_AO_TIMESTAMP_CNTL2                                 (0xff800000 + (0x027 << 2))
+#define   P_AO_TIMESTAMP_CNTL2                                 (volatile uint32_t *)(0xff800000 + (0x027 << 2))
+#define     AO_DEBUG_REG0                                      (0xff800000 + (0x028 << 2))
+#define SEC_AO_DEBUG_REG0                                      (0xff800000 + (0x028 << 2))
+#define   P_AO_DEBUG_REG0                                      (volatile uint32_t *)(0xff800000 + (0x028 << 2))
+#define     AO_DEBUG_REG1                                      (0xff800000 + (0x029 << 2))
+#define SEC_AO_DEBUG_REG1                                      (0xff800000 + (0x029 << 2))
+#define   P_AO_DEBUG_REG1                                      (volatile uint32_t *)(0xff800000 + (0x029 << 2))
+#define     AO_DEBUG_REG2                                      (0xff800000 + (0x02a << 2))
+#define SEC_AO_DEBUG_REG2                                      (0xff800000 + (0x02a << 2))
+#define   P_AO_DEBUG_REG2                                      (volatile uint32_t *)(0xff800000 + (0x02a << 2))
+#define     AO_DEBUG_REG3                                      (0xff800000 + (0x02b << 2))
+#define SEC_AO_DEBUG_REG3                                      (0xff800000 + (0x02b << 2))
+#define   P_AO_DEBUG_REG3                                      (volatile uint32_t *)(0xff800000 + (0x02b << 2))
+#define     AO_TIMESTAMP_CNTL1                                 (0xff800000 + (0x02c << 2))
+#define SEC_AO_TIMESTAMP_CNTL1                                 (0xff800000 + (0x02c << 2))
+#define   P_AO_TIMESTAMP_CNTL1                                 (volatile uint32_t *)(0xff800000 + (0x02c << 2))
+#define     AO_TIMESTAMP_CNTL                                  (0xff800000 + (0x02d << 2))
+#define SEC_AO_TIMESTAMP_CNTL                                  (0xff800000 + (0x02d << 2))
+#define   P_AO_TIMESTAMP_CNTL                                  (volatile uint32_t *)(0xff800000 + (0x02d << 2))
+#define     AO_TIMESTAMP_RD0                                   (0xff800000 + (0x02e << 2))
+#define SEC_AO_TIMESTAMP_RD0                                   (0xff800000 + (0x02e << 2))
+#define   P_AO_TIMESTAMP_RD0                                   (volatile uint32_t *)(0xff800000 + (0x02e << 2))
+#define     AO_TIMESTAMP_RD1                                   (0xff800000 + (0x02f << 2))
+#define SEC_AO_TIMESTAMP_RD1                                   (0xff800000 + (0x02f << 2))
+#define   P_AO_TIMESTAMP_RD1                                   (volatile uint32_t *)(0xff800000 + (0x02f << 2))
+#define     SP_HOLD_CTRL                                       (0xff800000 + (0x031 << 2))
+#define SEC_SP_HOLD_CTRL                                       (0xff800000 + (0x031 << 2))
+#define   P_SP_HOLD_CTRL                                       (volatile uint32_t *)(0xff800000 + (0x031 << 2))
+#define     AO_FR_EE_WR_ONCE                                   (0xff800000 + (0x032 << 2))
+#define SEC_AO_FR_EE_WR_ONCE                                   (0xff800000 + (0x032 << 2))
+#define   P_AO_FR_EE_WR_ONCE                                   (volatile uint32_t *)(0xff800000 + (0x032 << 2))
+#define     AO_CPU_STAT1                                       (0xff800000 + (0x033 << 2))
+#define SEC_AO_CPU_STAT1                                       (0xff800000 + (0x033 << 2))
+#define   P_AO_CPU_STAT1                                       (volatile uint32_t *)(0xff800000 + (0x033 << 2))
+#define     AO_CPU_STAT2                                       (0xff800000 + (0x034 << 2))
+#define SEC_AO_CPU_STAT2                                       (0xff800000 + (0x034 << 2))
+#define   P_AO_CPU_STAT2                                       (volatile uint32_t *)(0xff800000 + (0x034 << 2))
+#define     AO_CPU_TIMESTAMP                                   (0xff800000 + (0x035 << 2))
+#define SEC_AO_CPU_TIMESTAMP                                   (0xff800000 + (0x035 << 2))
+#define   P_AO_CPU_TIMESTAMP                                   (volatile uint32_t *)(0xff800000 + (0x035 << 2))
+#define     AO_CPU_TIMESTAMP2                                  (0xff800000 + (0x036 << 2))
+#define SEC_AO_CPU_TIMESTAMP2                                  (0xff800000 + (0x036 << 2))
+#define   P_AO_CPU_TIMESTAMP2                                  (volatile uint32_t *)(0xff800000 + (0x036 << 2))
+#define     AO_CPU_CNTL3                                       (0xff800000 + (0x037 << 2))
+#define SEC_AO_CPU_CNTL3                                       (0xff800000 + (0x037 << 2))
+#define   P_AO_CPU_CNTL3                                       (volatile uint32_t *)(0xff800000 + (0x037 << 2))
+// general Power control
+#define     AO_RTI_PWR_SYS_CPU_CNTL0                           (0xff800000 + (0x038 << 2))
+#define SEC_AO_RTI_PWR_SYS_CPU_CNTL0                           (0xff800000 + (0x038 << 2))
+#define   P_AO_RTI_PWR_SYS_CPU_CNTL0                           (volatile uint32_t *)(0xff800000 + (0x038 << 2))
+#define     AO_RTI_PWR_SYS_CPU_CNTL1                           (0xff800000 + (0x039 << 2))
+#define SEC_AO_RTI_PWR_SYS_CPU_CNTL1                           (0xff800000 + (0x039 << 2))
+#define   P_AO_RTI_PWR_SYS_CPU_CNTL1                           (volatile uint32_t *)(0xff800000 + (0x039 << 2))
+#define     AO_RTI_GEN_PWR_SLEEP0                              (0xff800000 + (0x03a << 2))
+#define SEC_AO_RTI_GEN_PWR_SLEEP0                              (0xff800000 + (0x03a << 2))
+#define   P_AO_RTI_GEN_PWR_SLEEP0                              (volatile uint32_t *)(0xff800000 + (0x03a << 2))
+#define     AO_RTI_GEN_PWR_ISO0                                (0xff800000 + (0x03b << 2))
+#define SEC_AO_RTI_GEN_PWR_ISO0                                (0xff800000 + (0x03b << 2))
+#define   P_AO_RTI_GEN_PWR_ISO0                                (volatile uint32_t *)(0xff800000 + (0x03b << 2))
+#define     AO_RTI_GEN_PWR_ACK0                                (0xff800000 + (0x03c << 2))
+#define SEC_AO_RTI_GEN_PWR_ACK0                                (0xff800000 + (0x03c << 2))
+#define   P_AO_RTI_GEN_PWR_ACK0                                (volatile uint32_t *)(0xff800000 + (0x03c << 2))
+#define     AO_RTI_PWR_SYS_CPU_MEM_PD0                         (0xff800000 + (0x03d << 2))
+#define SEC_AO_RTI_PWR_SYS_CPU_MEM_PD0                         (0xff800000 + (0x03d << 2))
+#define   P_AO_RTI_PWR_SYS_CPU_MEM_PD0                         (volatile uint32_t *)(0xff800000 + (0x03d << 2))
+#define     AO_RTI_PWR_SYS_CPU_MEM_PD1                         (0xff800000 + (0x03e << 2))
+#define SEC_AO_RTI_PWR_SYS_CPU_MEM_PD1                         (0xff800000 + (0x03e << 2))
+#define   P_AO_RTI_PWR_SYS_CPU_MEM_PD1                         (volatile uint32_t *)(0xff800000 + (0x03e << 2))
+#define     AO_CPU_CNTL4                                       (0xff800000 + (0x03f << 2))
+#define SEC_AO_CPU_CNTL4                                       (0xff800000 + (0x03f << 2))
+#define   P_AO_CPU_CNTL4                                       (volatile uint32_t *)(0xff800000 + (0x03f << 2))
+#define     AO_CEC_GEN_CNTL                                    (0xff800000 + (0x040 << 2))
+#define SEC_AO_CEC_GEN_CNTL                                    (0xff800000 + (0x040 << 2))
+#define   P_AO_CEC_GEN_CNTL                                    (volatile uint32_t *)(0xff800000 + (0x040 << 2))
+#define     AO_CEC_RW_REG                                      (0xff800000 + (0x041 << 2))
+#define SEC_AO_CEC_RW_REG                                      (0xff800000 + (0x041 << 2))
+#define   P_AO_CEC_RW_REG                                      (volatile uint32_t *)(0xff800000 + (0x041 << 2))
+#define     AO_CEC_INTR_MASKN                                  (0xff800000 + (0x042 << 2))
+#define SEC_AO_CEC_INTR_MASKN                                  (0xff800000 + (0x042 << 2))
+#define   P_AO_CEC_INTR_MASKN                                  (volatile uint32_t *)(0xff800000 + (0x042 << 2))
+#define     AO_CEC_INTR_CLR                                    (0xff800000 + (0x043 << 2))
+#define SEC_AO_CEC_INTR_CLR                                    (0xff800000 + (0x043 << 2))
+#define   P_AO_CEC_INTR_CLR                                    (volatile uint32_t *)(0xff800000 + (0x043 << 2))
+#define     AO_CEC_INTR_STAT                                   (0xff800000 + (0x044 << 2))
+#define SEC_AO_CEC_INTR_STAT                                   (0xff800000 + (0x044 << 2))
+#define   P_AO_CEC_INTR_STAT                                   (volatile uint32_t *)(0xff800000 + (0x044 << 2))
+#define     AO_CPU_CNTL5                                       (0xff800000 + (0x045 << 2))
+#define SEC_AO_CPU_CNTL5                                       (0xff800000 + (0x045 << 2))
+#define   P_AO_CPU_CNTL5                                       (volatile uint32_t *)(0xff800000 + (0x045 << 2))
+#define     AO_WATCHDOG_CNTL                                   (0xff800000 + (0x048 << 2))
+#define SEC_AO_WATCHDOG_CNTL                                   (0xff800000 + (0x048 << 2))
+#define   P_AO_WATCHDOG_CNTL                                   (volatile uint32_t *)(0xff800000 + (0x048 << 2))
+#define     AO_WATCHDOG_CNTL1                                  (0xff800000 + (0x049 << 2))
+#define SEC_AO_WATCHDOG_CNTL1                                  (0xff800000 + (0x049 << 2))
+#define   P_AO_WATCHDOG_CNTL1                                  (volatile uint32_t *)(0xff800000 + (0x049 << 2))
+#define     AO_WATCHDOG_TCNT                                   (0xff800000 + (0x04a << 2))
+#define SEC_AO_WATCHDOG_TCNT                                   (0xff800000 + (0x04a << 2))
+#define   P_AO_WATCHDOG_TCNT                                   (volatile uint32_t *)(0xff800000 + (0x04a << 2))
+#define     AO_WATCHDOG_RESET                                  (0xff800000 + (0x04b << 2))
+#define SEC_AO_WATCHDOG_RESET                                  (0xff800000 + (0x04b << 2))
+#define   P_AO_WATCHDOG_RESET                                  (volatile uint32_t *)(0xff800000 + (0x04b << 2))
+#define     AO_RTI_STICKY_REG0                                 (0xff800000 + (0x04c << 2))
+#define SEC_AO_RTI_STICKY_REG0                                 (0xff800000 + (0x04c << 2))
+#define   P_AO_RTI_STICKY_REG0                                 (volatile uint32_t *)(0xff800000 + (0x04c << 2))
+#define     AO_RTI_STICKY_REG1                                 (0xff800000 + (0x04d << 2))
+#define SEC_AO_RTI_STICKY_REG1                                 (0xff800000 + (0x04d << 2))
+#define   P_AO_RTI_STICKY_REG1                                 (volatile uint32_t *)(0xff800000 + (0x04d << 2))
+#define     AO_RTI_STICKY_REG2                                 (0xff800000 + (0x04e << 2))
+#define SEC_AO_RTI_STICKY_REG2                                 (0xff800000 + (0x04e << 2))
+#define   P_AO_RTI_STICKY_REG2                                 (volatile uint32_t *)(0xff800000 + (0x04e << 2))
+#define     AO_RTI_STICKY_REG3                                 (0xff800000 + (0x04f << 2))
+#define SEC_AO_RTI_STICKY_REG3                                 (0xff800000 + (0x04f << 2))
+#define   P_AO_RTI_STICKY_REG3                                 (volatile uint32_t *)(0xff800000 + (0x04f << 2))
+//
+// Secure APB3 Slot 2 registers
+//
+#define     AO_SEC_REG0                                        (0xff800000 + (0x050 << 2))
+#define SEC_AO_SEC_REG0                                        (0xff800000 + (0x050 << 2))
+#define   P_AO_SEC_REG0                                        (volatile uint32_t *)(0xff800000 + (0x050 << 2))
+//`define AO_SEC_REG1                     8'h51
+#define     AO_IR_BLASTER_ADDR0                                (0xff800000 + (0x053 << 2))
+#define SEC_AO_IR_BLASTER_ADDR0                                (0xff800000 + (0x053 << 2))
+#define   P_AO_IR_BLASTER_ADDR0                                (volatile uint32_t *)(0xff800000 + (0x053 << 2))
+#define     AO_IR_BLASTER_ADDR1                                (0xff800000 + (0x054 << 2))
+#define SEC_AO_IR_BLASTER_ADDR1                                (0xff800000 + (0x054 << 2))
+#define   P_AO_IR_BLASTER_ADDR1                                (volatile uint32_t *)(0xff800000 + (0x054 << 2))
+#define     AO_IR_BLASTER_ADDR2                                (0xff800000 + (0x055 << 2))
+#define SEC_AO_IR_BLASTER_ADDR2                                (0xff800000 + (0x055 << 2))
+#define   P_AO_IR_BLASTER_ADDR2                                (volatile uint32_t *)(0xff800000 + (0x055 << 2))
+#define     AO_IR_BLASTER_ADDR3                                (0xff800000 + (0x056 << 2))
+#define SEC_AO_IR_BLASTER_ADDR3                                (0xff800000 + (0x056 << 2))
+#define   P_AO_IR_BLASTER_ADDR3                                (volatile uint32_t *)(0xff800000 + (0x056 << 2))
+#define     AO_SEC_TMODE_PWD0                                  (0xff800000 + (0x058 << 2))
+#define SEC_AO_SEC_TMODE_PWD0                                  (0xff800000 + (0x058 << 2))
+#define   P_AO_SEC_TMODE_PWD0                                  (volatile uint32_t *)(0xff800000 + (0x058 << 2))
+#define     AO_SEC_TMODE_PWD1                                  (0xff800000 + (0x059 << 2))
+#define SEC_AO_SEC_TMODE_PWD1                                  (0xff800000 + (0x059 << 2))
+#define   P_AO_SEC_TMODE_PWD1                                  (volatile uint32_t *)(0xff800000 + (0x059 << 2))
+#define     AO_SEC_TMODE_PWD2                                  (0xff800000 + (0x05a << 2))
+#define SEC_AO_SEC_TMODE_PWD2                                  (0xff800000 + (0x05a << 2))
+#define   P_AO_SEC_TMODE_PWD2                                  (volatile uint32_t *)(0xff800000 + (0x05a << 2))
+#define     AO_SEC_TMODE_PWD3                                  (0xff800000 + (0x05b << 2))
+#define SEC_AO_SEC_TMODE_PWD3                                  (0xff800000 + (0x05b << 2))
+#define   P_AO_SEC_TMODE_PWD3                                  (volatile uint32_t *)(0xff800000 + (0x05b << 2))
+#define     AO_WRITE_ONCE0                                     (0xff800000 + (0x05c << 2))
+#define SEC_AO_WRITE_ONCE0                                     (0xff800000 + (0x05c << 2))
+#define   P_AO_WRITE_ONCE0                                     (volatile uint32_t *)(0xff800000 + (0x05c << 2))
+#define     AO_WRITE_ONCE1                                     (0xff800000 + (0x05d << 2))
+#define SEC_AO_WRITE_ONCE1                                     (0xff800000 + (0x05d << 2))
+#define   P_AO_WRITE_ONCE1                                     (volatile uint32_t *)(0xff800000 + (0x05d << 2))
+#define     AO_WRITE_ONCE2                                     (0xff800000 + (0x05e << 2))
+#define SEC_AO_WRITE_ONCE2                                     (0xff800000 + (0x05e << 2))
+#define   P_AO_WRITE_ONCE2                                     (volatile uint32_t *)(0xff800000 + (0x05e << 2))
+#define     AO_SEC_SCRATCH                                     (0xff800000 + (0x05f << 2))
+#define SEC_AO_SEC_SCRATCH                                     (0xff800000 + (0x05f << 2))
+#define   P_AO_SEC_SCRATCH                                     (volatile uint32_t *)(0xff800000 + (0x05f << 2))
+#define     AO_MSG_INDEX0                                      (0xff800000 + (0x060 << 2))
+#define SEC_AO_MSG_INDEX0                                      (0xff800000 + (0x060 << 2))
+#define   P_AO_MSG_INDEX0                                      (volatile uint32_t *)(0xff800000 + (0x060 << 2))
+#define     AO_MSG_INDEX1                                      (0xff800000 + (0x061 << 2))
+#define SEC_AO_MSG_INDEX1                                      (0xff800000 + (0x061 << 2))
+#define   P_AO_MSG_INDEX1                                      (volatile uint32_t *)(0xff800000 + (0x061 << 2))
+#define     AO_MSG_INDEX2                                      (0xff800000 + (0x062 << 2))
+#define SEC_AO_MSG_INDEX2                                      (0xff800000 + (0x062 << 2))
+#define   P_AO_MSG_INDEX2                                      (volatile uint32_t *)(0xff800000 + (0x062 << 2))
+#define     AO_MSG_INDEX3                                      (0xff800000 + (0x063 << 2))
+#define SEC_AO_MSG_INDEX3                                      (0xff800000 + (0x063 << 2))
+#define   P_AO_MSG_INDEX3                                      (volatile uint32_t *)(0xff800000 + (0x063 << 2))
+#define     AO_SEC_SHARED_AHB_SRAM_MASK_0                      (0xff800000 + (0x066 << 2))
+#define SEC_AO_SEC_SHARED_AHB_SRAM_MASK_0                      (0xff800000 + (0x066 << 2))
+#define   P_AO_SEC_SHARED_AHB_SRAM_MASK_0                      (volatile uint32_t *)(0xff800000 + (0x066 << 2))
+#define     AO_SEC_SHARED_AHB_SRAM_MASK_1                      (0xff800000 + (0x067 << 2))
+#define SEC_AO_SEC_SHARED_AHB_SRAM_MASK_1                      (0xff800000 + (0x067 << 2))
+#define   P_AO_SEC_SHARED_AHB_SRAM_MASK_1                      (volatile uint32_t *)(0xff800000 + (0x067 << 2))
+#define     AO_SEC_SHARED_AHB_SRAM_MASK_2                      (0xff800000 + (0x068 << 2))
+#define SEC_AO_SEC_SHARED_AHB_SRAM_MASK_2                      (0xff800000 + (0x068 << 2))
+#define   P_AO_SEC_SHARED_AHB_SRAM_MASK_2                      (volatile uint32_t *)(0xff800000 + (0x068 << 2))
+#define     AO_SEC_SHARED_AHB_SRAM_REG0_0                      (0xff800000 + (0x069 << 2))
+#define SEC_AO_SEC_SHARED_AHB_SRAM_REG0_0                      (0xff800000 + (0x069 << 2))
+#define   P_AO_SEC_SHARED_AHB_SRAM_REG0_0                      (volatile uint32_t *)(0xff800000 + (0x069 << 2))
+#define     AO_SEC_SHARED_AHB_SRAM_REG0_1                      (0xff800000 + (0x06a << 2))
+#define SEC_AO_SEC_SHARED_AHB_SRAM_REG0_1                      (0xff800000 + (0x06a << 2))
+#define   P_AO_SEC_SHARED_AHB_SRAM_REG0_1                      (volatile uint32_t *)(0xff800000 + (0x06a << 2))
+#define     AO_SEC_SHARED_AHB_SRAM_REG0_2                      (0xff800000 + (0x06b << 2))
+#define SEC_AO_SEC_SHARED_AHB_SRAM_REG0_2                      (0xff800000 + (0x06b << 2))
+#define   P_AO_SEC_SHARED_AHB_SRAM_REG0_2                      (volatile uint32_t *)(0xff800000 + (0x06b << 2))
+#define     AO_SEC_SHARED_AHB_SRAM_REG1_0                      (0xff800000 + (0x06c << 2))
+#define SEC_AO_SEC_SHARED_AHB_SRAM_REG1_0                      (0xff800000 + (0x06c << 2))
+#define   P_AO_SEC_SHARED_AHB_SRAM_REG1_0                      (volatile uint32_t *)(0xff800000 + (0x06c << 2))
+#define     AO_SEC_SHARED_AHB_SRAM_REG1_1                      (0xff800000 + (0x06d << 2))
+#define SEC_AO_SEC_SHARED_AHB_SRAM_REG1_1                      (0xff800000 + (0x06d << 2))
+#define   P_AO_SEC_SHARED_AHB_SRAM_REG1_1                      (volatile uint32_t *)(0xff800000 + (0x06d << 2))
+#define     AO_SEC_SHARED_AHB_SRAM_REG1_2                      (0xff800000 + (0x06e << 2))
+#define SEC_AO_SEC_SHARED_AHB_SRAM_REG1_2                      (0xff800000 + (0x06e << 2))
+#define   P_AO_SEC_SHARED_AHB_SRAM_REG1_2                      (volatile uint32_t *)(0xff800000 + (0x06e << 2))
+#define     AO_SEC_SHARED_AHB_SRAM_REG2_0                      (0xff800000 + (0x06f << 2))
+#define SEC_AO_SEC_SHARED_AHB_SRAM_REG2_0                      (0xff800000 + (0x06f << 2))
+#define   P_AO_SEC_SHARED_AHB_SRAM_REG2_0                      (volatile uint32_t *)(0xff800000 + (0x06f << 2))
+#define     AO_SEC_SHARED_AHB_SRAM_REG2_1                      (0xff800000 + (0x070 << 2))
+#define SEC_AO_SEC_SHARED_AHB_SRAM_REG2_1                      (0xff800000 + (0x070 << 2))
+#define   P_AO_SEC_SHARED_AHB_SRAM_REG2_1                      (volatile uint32_t *)(0xff800000 + (0x070 << 2))
+#define     AO_SEC_SHARED_AHB_SRAM_REG2_2                      (0xff800000 + (0x071 << 2))
+#define SEC_AO_SEC_SHARED_AHB_SRAM_REG2_2                      (0xff800000 + (0x071 << 2))
+#define   P_AO_SEC_SHARED_AHB_SRAM_REG2_2                      (volatile uint32_t *)(0xff800000 + (0x071 << 2))
+#define     AO_SEC_SHARED_AHB_SRAM_REG3_0                      (0xff800000 + (0x072 << 2))
+#define SEC_AO_SEC_SHARED_AHB_SRAM_REG3_0                      (0xff800000 + (0x072 << 2))
+#define   P_AO_SEC_SHARED_AHB_SRAM_REG3_0                      (volatile uint32_t *)(0xff800000 + (0x072 << 2))
+#define     AO_SEC_SHARED_AHB_SRAM_REG3_1                      (0xff800000 + (0x073 << 2))
+#define SEC_AO_SEC_SHARED_AHB_SRAM_REG3_1                      (0xff800000 + (0x073 << 2))
+#define   P_AO_SEC_SHARED_AHB_SRAM_REG3_1                      (volatile uint32_t *)(0xff800000 + (0x073 << 2))
+#define     AO_SEC_SHARED_AHB_SRAM_REG3_2                      (0xff800000 + (0x074 << 2))
+#define SEC_AO_SEC_SHARED_AHB_SRAM_REG3_2                      (0xff800000 + (0x074 << 2))
+#define   P_AO_SEC_SHARED_AHB_SRAM_REG3_2                      (volatile uint32_t *)(0xff800000 + (0x074 << 2))
+#define     AO_SEC_SHARED_AHB_SRAM_REG4_0                      (0xff800000 + (0x075 << 2))
+#define SEC_AO_SEC_SHARED_AHB_SRAM_REG4_0                      (0xff800000 + (0x075 << 2))
+#define   P_AO_SEC_SHARED_AHB_SRAM_REG4_0                      (volatile uint32_t *)(0xff800000 + (0x075 << 2))
+#define     AO_SEC_SHARED_AHB_SRAM_REG4_1                      (0xff800000 + (0x076 << 2))
+#define SEC_AO_SEC_SHARED_AHB_SRAM_REG4_1                      (0xff800000 + (0x076 << 2))
+#define   P_AO_SEC_SHARED_AHB_SRAM_REG4_1                      (volatile uint32_t *)(0xff800000 + (0x076 << 2))
+#define     AO_SEC_SHARED_AHB_SRAM_REG4_2                      (0xff800000 + (0x077 << 2))
+#define SEC_AO_SEC_SHARED_AHB_SRAM_REG4_2                      (0xff800000 + (0x077 << 2))
+#define   P_AO_SEC_SHARED_AHB_SRAM_REG4_2                      (volatile uint32_t *)(0xff800000 + (0x077 << 2))
+#define     AO_SEC_SHARED_AHB_SRAM_REG5_0                      (0xff800000 + (0x078 << 2))
+#define SEC_AO_SEC_SHARED_AHB_SRAM_REG5_0                      (0xff800000 + (0x078 << 2))
+#define   P_AO_SEC_SHARED_AHB_SRAM_REG5_0                      (volatile uint32_t *)(0xff800000 + (0x078 << 2))
+#define     AO_SEC_SHARED_AHB_SRAM_REG5_1                      (0xff800000 + (0x079 << 2))
+#define SEC_AO_SEC_SHARED_AHB_SRAM_REG5_1                      (0xff800000 + (0x079 << 2))
+#define   P_AO_SEC_SHARED_AHB_SRAM_REG5_1                      (volatile uint32_t *)(0xff800000 + (0x079 << 2))
+#define     AO_SEC_SHARED_AHB_SRAM_REG5_2                      (0xff800000 + (0x07a << 2))
+#define SEC_AO_SEC_SHARED_AHB_SRAM_REG5_2                      (0xff800000 + (0x07a << 2))
+#define   P_AO_SEC_SHARED_AHB_SRAM_REG5_2                      (volatile uint32_t *)(0xff800000 + (0x07a << 2))
+#define     AO_SEC_AO_CPU_SRAM_REG0_0                          (0xff800000 + (0x07c << 2))
+#define SEC_AO_SEC_AO_CPU_SRAM_REG0_0                          (0xff800000 + (0x07c << 2))
+#define   P_AO_SEC_AO_CPU_SRAM_REG0_0                          (volatile uint32_t *)(0xff800000 + (0x07c << 2))
+#define     AO_SEC_AO_CPU_SRAM_REG0_1                          (0xff800000 + (0x07d << 2))
+#define SEC_AO_SEC_AO_CPU_SRAM_REG0_1                          (0xff800000 + (0x07d << 2))
+#define   P_AO_SEC_AO_CPU_SRAM_REG0_1                          (volatile uint32_t *)(0xff800000 + (0x07d << 2))
+#define     AO_SEC_AO_CPU_SRAM_REG1_0                          (0xff800000 + (0x07e << 2))
+#define SEC_AO_SEC_AO_CPU_SRAM_REG1_0                          (0xff800000 + (0x07e << 2))
+#define   P_AO_SEC_AO_CPU_SRAM_REG1_0                          (volatile uint32_t *)(0xff800000 + (0x07e << 2))
+#define     AO_SEC_AO_CPU_SRAM_REG1_1                          (0xff800000 + (0x07f << 2))
+#define SEC_AO_SEC_AO_CPU_SRAM_REG1_1                          (0xff800000 + (0x07f << 2))
+#define   P_AO_SEC_AO_CPU_SRAM_REG1_1                          (volatile uint32_t *)(0xff800000 + (0x07f << 2))
+#define     AO_SEC_SD_CFG0                                     (0xff800000 + (0x080 << 2))
+#define SEC_AO_SEC_SD_CFG0                                     (0xff800000 + (0x080 << 2))
+#define   P_AO_SEC_SD_CFG0                                     (volatile uint32_t *)(0xff800000 + (0x080 << 2))
+#define     AO_SEC_SD_CFG1                                     (0xff800000 + (0x081 << 2))
+#define SEC_AO_SEC_SD_CFG1                                     (0xff800000 + (0x081 << 2))
+#define   P_AO_SEC_SD_CFG1                                     (volatile uint32_t *)(0xff800000 + (0x081 << 2))
+#define     AO_SEC_SD_CFG2                                     (0xff800000 + (0x082 << 2))
+#define SEC_AO_SEC_SD_CFG2                                     (0xff800000 + (0x082 << 2))
+#define   P_AO_SEC_SD_CFG2                                     (volatile uint32_t *)(0xff800000 + (0x082 << 2))
+#define     AO_SEC_SD_CFG3                                     (0xff800000 + (0x083 << 2))
+#define SEC_AO_SEC_SD_CFG3                                     (0xff800000 + (0x083 << 2))
+#define   P_AO_SEC_SD_CFG3                                     (volatile uint32_t *)(0xff800000 + (0x083 << 2))
+#define     AO_SEC_SD_CFG4                                     (0xff800000 + (0x084 << 2))
+#define SEC_AO_SEC_SD_CFG4                                     (0xff800000 + (0x084 << 2))
+#define   P_AO_SEC_SD_CFG4                                     (volatile uint32_t *)(0xff800000 + (0x084 << 2))
+#define     AO_SEC_SD_CFG5                                     (0xff800000 + (0x085 << 2))
+#define SEC_AO_SEC_SD_CFG5                                     (0xff800000 + (0x085 << 2))
+#define   P_AO_SEC_SD_CFG5                                     (volatile uint32_t *)(0xff800000 + (0x085 << 2))
+#define     AO_SEC_SD_CFG6                                     (0xff800000 + (0x086 << 2))
+#define SEC_AO_SEC_SD_CFG6                                     (0xff800000 + (0x086 << 2))
+#define   P_AO_SEC_SD_CFG6                                     (volatile uint32_t *)(0xff800000 + (0x086 << 2))
+#define     AO_SEC_SD_CFG7                                     (0xff800000 + (0x087 << 2))
+#define SEC_AO_SEC_SD_CFG7                                     (0xff800000 + (0x087 << 2))
+#define   P_AO_SEC_SD_CFG7                                     (volatile uint32_t *)(0xff800000 + (0x087 << 2))
+#define     AO_SEC_SD_CFG8                                     (0xff800000 + (0x088 << 2))
+#define SEC_AO_SEC_SD_CFG8                                     (0xff800000 + (0x088 << 2))
+#define   P_AO_SEC_SD_CFG8                                     (volatile uint32_t *)(0xff800000 + (0x088 << 2))
+#define     AO_SEC_SD_CFG9                                     (0xff800000 + (0x089 << 2))
+#define SEC_AO_SEC_SD_CFG9                                     (0xff800000 + (0x089 << 2))
+#define   P_AO_SEC_SD_CFG9                                     (volatile uint32_t *)(0xff800000 + (0x089 << 2))
+#define     AO_SEC_SD_CFG10                                    (0xff800000 + (0x08a << 2))
+#define SEC_AO_SEC_SD_CFG10                                    (0xff800000 + (0x08a << 2))
+#define   P_AO_SEC_SD_CFG10                                    (volatile uint32_t *)(0xff800000 + (0x08a << 2))
+#define     AO_SEC_SD_CFG11                                    (0xff800000 + (0x08b << 2))
+#define SEC_AO_SEC_SD_CFG11                                    (0xff800000 + (0x08b << 2))
+#define   P_AO_SEC_SD_CFG11                                    (volatile uint32_t *)(0xff800000 + (0x08b << 2))
+#define     AO_SEC_SD_CFG12                                    (0xff800000 + (0x08c << 2))
+#define SEC_AO_SEC_SD_CFG12                                    (0xff800000 + (0x08c << 2))
+#define   P_AO_SEC_SD_CFG12                                    (volatile uint32_t *)(0xff800000 + (0x08c << 2))
+#define     AO_SEC_SD_CFG13                                    (0xff800000 + (0x08d << 2))
+#define SEC_AO_SEC_SD_CFG13                                    (0xff800000 + (0x08d << 2))
+#define   P_AO_SEC_SD_CFG13                                    (volatile uint32_t *)(0xff800000 + (0x08d << 2))
+#define     AO_SEC_SD_CFG14                                    (0xff800000 + (0x08e << 2))
+#define SEC_AO_SEC_SD_CFG14                                    (0xff800000 + (0x08e << 2))
+#define   P_AO_SEC_SD_CFG14                                    (volatile uint32_t *)(0xff800000 + (0x08e << 2))
+#define     AO_SEC_SD_CFG15                                    (0xff800000 + (0x08f << 2))
+#define SEC_AO_SEC_SD_CFG15                                    (0xff800000 + (0x08f << 2))
+#define   P_AO_SEC_SD_CFG15                                    (volatile uint32_t *)(0xff800000 + (0x08f << 2))
+#define     AO_SEC_GP_CFG0                                     (0xff800000 + (0x090 << 2))
+#define SEC_AO_SEC_GP_CFG0                                     (0xff800000 + (0x090 << 2))
+#define   P_AO_SEC_GP_CFG0                                     (volatile uint32_t *)(0xff800000 + (0x090 << 2))
+#define     AO_SEC_GP_CFG1                                     (0xff800000 + (0x091 << 2))
+#define SEC_AO_SEC_GP_CFG1                                     (0xff800000 + (0x091 << 2))
+#define   P_AO_SEC_GP_CFG1                                     (volatile uint32_t *)(0xff800000 + (0x091 << 2))
+#define     AO_SEC_GP_CFG2                                     (0xff800000 + (0x092 << 2))
+#define SEC_AO_SEC_GP_CFG2                                     (0xff800000 + (0x092 << 2))
+#define   P_AO_SEC_GP_CFG2                                     (volatile uint32_t *)(0xff800000 + (0x092 << 2))
+#define     AO_SEC_GP_CFG3                                     (0xff800000 + (0x093 << 2))
+#define SEC_AO_SEC_GP_CFG3                                     (0xff800000 + (0x093 << 2))
+#define   P_AO_SEC_GP_CFG3                                     (volatile uint32_t *)(0xff800000 + (0x093 << 2))
+#define     AO_SEC_GP_CFG4                                     (0xff800000 + (0x094 << 2))
+#define SEC_AO_SEC_GP_CFG4                                     (0xff800000 + (0x094 << 2))
+#define   P_AO_SEC_GP_CFG4                                     (volatile uint32_t *)(0xff800000 + (0x094 << 2))
+#define     AO_SEC_GP_CFG5                                     (0xff800000 + (0x095 << 2))
+#define SEC_AO_SEC_GP_CFG5                                     (0xff800000 + (0x095 << 2))
+#define   P_AO_SEC_GP_CFG5                                     (volatile uint32_t *)(0xff800000 + (0x095 << 2))
+#define     AO_SEC_GP_CFG6                                     (0xff800000 + (0x096 << 2))
+#define SEC_AO_SEC_GP_CFG6                                     (0xff800000 + (0x096 << 2))
+#define   P_AO_SEC_GP_CFG6                                     (volatile uint32_t *)(0xff800000 + (0x096 << 2))
+#define     AO_SEC_GP_CFG7                                     (0xff800000 + (0x097 << 2))
+#define SEC_AO_SEC_GP_CFG7                                     (0xff800000 + (0x097 << 2))
+#define   P_AO_SEC_GP_CFG7                                     (volatile uint32_t *)(0xff800000 + (0x097 << 2))
+#define     AO_SEC_GP_CFG8                                     (0xff800000 + (0x098 << 2))
+#define SEC_AO_SEC_GP_CFG8                                     (0xff800000 + (0x098 << 2))
+#define   P_AO_SEC_GP_CFG8                                     (volatile uint32_t *)(0xff800000 + (0x098 << 2))
+#define     AO_SEC_GP_CFG9                                     (0xff800000 + (0x099 << 2))
+#define SEC_AO_SEC_GP_CFG9                                     (0xff800000 + (0x099 << 2))
+#define   P_AO_SEC_GP_CFG9                                     (volatile uint32_t *)(0xff800000 + (0x099 << 2))
+#define     AO_SEC_GP_CFG10                                    (0xff800000 + (0x09a << 2))
+#define SEC_AO_SEC_GP_CFG10                                    (0xff800000 + (0x09a << 2))
+#define   P_AO_SEC_GP_CFG10                                    (volatile uint32_t *)(0xff800000 + (0x09a << 2))
+#define     AO_SEC_GP_CFG11                                    (0xff800000 + (0x09b << 2))
+#define SEC_AO_SEC_GP_CFG11                                    (0xff800000 + (0x09b << 2))
+#define   P_AO_SEC_GP_CFG11                                    (volatile uint32_t *)(0xff800000 + (0x09b << 2))
+#define     AO_SEC_GP_CFG12                                    (0xff800000 + (0x09c << 2))
+#define SEC_AO_SEC_GP_CFG12                                    (0xff800000 + (0x09c << 2))
+#define   P_AO_SEC_GP_CFG12                                    (volatile uint32_t *)(0xff800000 + (0x09c << 2))
+#define     AO_SEC_GP_CFG13                                    (0xff800000 + (0x09d << 2))
+#define SEC_AO_SEC_GP_CFG13                                    (0xff800000 + (0x09d << 2))
+#define   P_AO_SEC_GP_CFG13                                    (volatile uint32_t *)(0xff800000 + (0x09d << 2))
+#define     AO_SEC_GP_CFG14                                    (0xff800000 + (0x09e << 2))
+#define SEC_AO_SEC_GP_CFG14                                    (0xff800000 + (0x09e << 2))
+#define   P_AO_SEC_GP_CFG14                                    (volatile uint32_t *)(0xff800000 + (0x09e << 2))
+#define     AO_SEC_GP_CFG15                                    (0xff800000 + (0x09f << 2))
+#define SEC_AO_SEC_GP_CFG15                                    (0xff800000 + (0x09f << 2))
+#define   P_AO_SEC_GP_CFG15                                    (volatile uint32_t *)(0xff800000 + (0x09f << 2))
+#define     AO_CECB_CLK_CNTL_REG0                              (0xff800000 + (0x0a0 << 2))
+#define SEC_AO_CECB_CLK_CNTL_REG0                              (0xff800000 + (0x0a0 << 2))
+#define   P_AO_CECB_CLK_CNTL_REG0                              (volatile uint32_t *)(0xff800000 + (0x0a0 << 2))
+#define     AO_CECB_CLK_CNTL_REG1                              (0xff800000 + (0x0a1 << 2))
+#define SEC_AO_CECB_CLK_CNTL_REG1                              (0xff800000 + (0x0a1 << 2))
+#define   P_AO_CECB_CLK_CNTL_REG1                              (volatile uint32_t *)(0xff800000 + (0x0a1 << 2))
+#define     AO_CECB_GEN_CNTL                                   (0xff800000 + (0x0a2 << 2))
+#define SEC_AO_CECB_GEN_CNTL                                   (0xff800000 + (0x0a2 << 2))
+#define   P_AO_CECB_GEN_CNTL                                   (volatile uint32_t *)(0xff800000 + (0x0a2 << 2))
+#define     AO_CECB_RW_REG                                     (0xff800000 + (0x0a3 << 2))
+#define SEC_AO_CECB_RW_REG                                     (0xff800000 + (0x0a3 << 2))
+#define   P_AO_CECB_RW_REG                                     (volatile uint32_t *)(0xff800000 + (0x0a3 << 2))
+#define     AO_CECB_INTR_MASKN                                 (0xff800000 + (0x0a4 << 2))
+#define SEC_AO_CECB_INTR_MASKN                                 (0xff800000 + (0x0a4 << 2))
+#define   P_AO_CECB_INTR_MASKN                                 (volatile uint32_t *)(0xff800000 + (0x0a4 << 2))
+#define     AO_CECB_INTR_CLR                                   (0xff800000 + (0x0a5 << 2))
+#define SEC_AO_CECB_INTR_CLR                                   (0xff800000 + (0x0a5 << 2))
+#define   P_AO_CECB_INTR_CLR                                   (volatile uint32_t *)(0xff800000 + (0x0a5 << 2))
+#define     AO_CECB_INTR_STAT                                  (0xff800000 + (0x0a6 << 2))
+#define SEC_AO_CECB_INTR_STAT                                  (0xff800000 + (0x0a6 << 2))
+#define   P_AO_CECB_INTR_STAT                                  (volatile uint32_t *)(0xff800000 + (0x0a6 << 2))
+#define     AO_SEC_M4_CPU_SRAM_REG0_0                          (0xff800000 + (0x0a7 << 2))
+#define SEC_AO_SEC_M4_CPU_SRAM_REG0_0                          (0xff800000 + (0x0a7 << 2))
+#define   P_AO_SEC_M4_CPU_SRAM_REG0_0                          (volatile uint32_t *)(0xff800000 + (0x0a7 << 2))
+#define     AO_SEC_M4_CPU_SRAM_REG0_1                          (0xff800000 + (0x0a8 << 2))
+#define SEC_AO_SEC_M4_CPU_SRAM_REG0_1                          (0xff800000 + (0x0a8 << 2))
+#define   P_AO_SEC_M4_CPU_SRAM_REG0_1                          (volatile uint32_t *)(0xff800000 + (0x0a8 << 2))
+#define     AO_SEC_M4_CPU_SRAM_REG1_0                          (0xff800000 + (0x0a9 << 2))
+#define SEC_AO_SEC_M4_CPU_SRAM_REG1_0                          (0xff800000 + (0x0a9 << 2))
+#define   P_AO_SEC_M4_CPU_SRAM_REG1_0                          (volatile uint32_t *)(0xff800000 + (0x0a9 << 2))
+#define     AO_SEC_M4_CPU_SRAM_REG1_1                          (0xff800000 + (0x0aa << 2))
+#define SEC_AO_SEC_M4_CPU_SRAM_REG1_1                          (0xff800000 + (0x0aa << 2))
+#define   P_AO_SEC_M4_CPU_SRAM_REG1_1                          (volatile uint32_t *)(0xff800000 + (0x0aa << 2))
+#define     AO_SEC_M4_CPU_SRAM_REG2_0                          (0xff800000 + (0x0ab << 2))
+#define SEC_AO_SEC_M4_CPU_SRAM_REG2_0                          (0xff800000 + (0x0ab << 2))
+#define   P_AO_SEC_M4_CPU_SRAM_REG2_0                          (volatile uint32_t *)(0xff800000 + (0x0ab << 2))
+//`define AO_RTC_ADDR0                    8'h70 //TODO: DEFINE IF WE'RE IMPLEMENTING AO_RTC
+//`define AO_RTC_ADDR1                    8'h71 //TODO: DEFINE IF WE'RE IMPLEMENTING AO_RTC
+//`define AO_RTC_ADDR2                    8'h72 //TODO: DEFINE IF WE'RE IMPLEMENTING AO_RTC
+//`define AO_RTC_ADDR3                    8'h73 //TODO: DEFINE IF WE'RE IMPLEMENTING AO_RTC
+//`define AO_RTC_ADDR4                    8'h74 //TODO: DEFINE IF WE'RE IMPLEMENTING AO_RTC
+#define     AO_SEC_JTAG_SP_CTRL                                (0xff800000 + (0x0ac << 2))
+#define SEC_AO_SEC_JTAG_SP_CTRL                                (0xff800000 + (0x0ac << 2))
+#define   P_AO_SEC_JTAG_SP_CTRL                                (volatile uint32_t *)(0xff800000 + (0x0ac << 2))
+#define     AO_SEC_JTAG_PWD_SP_0                               (0xff800000 + (0x0ad << 2))
+#define SEC_AO_SEC_JTAG_PWD_SP_0                               (0xff800000 + (0x0ad << 2))
+#define   P_AO_SEC_JTAG_PWD_SP_0                               (volatile uint32_t *)(0xff800000 + (0x0ad << 2))
+#define     AO_SEC_JTAG_PWD_SP_1                               (0xff800000 + (0x0ae << 2))
+#define SEC_AO_SEC_JTAG_PWD_SP_1                               (0xff800000 + (0x0ae << 2))
+#define   P_AO_SEC_JTAG_PWD_SP_1                               (volatile uint32_t *)(0xff800000 + (0x0ae << 2))
+#define     AO_SEC_JTAG_PWD_SP_2                               (0xff800000 + (0x0af << 2))
+#define SEC_AO_SEC_JTAG_PWD_SP_2                               (0xff800000 + (0x0af << 2))
+#define   P_AO_SEC_JTAG_PWD_SP_2                               (volatile uint32_t *)(0xff800000 + (0x0af << 2))
+#define     AO_SEC_JTAG_PWD_SP_3                               (0xff800000 + (0x0b0 << 2))
+#define SEC_AO_SEC_JTAG_PWD_SP_3                               (0xff800000 + (0x0b0 << 2))
+#define   P_AO_SEC_JTAG_PWD_SP_3                               (volatile uint32_t *)(0xff800000 + (0x0b0 << 2))
+#define     AO_SEC_JTAG_PWD_SP_CNTL                            (0xff800000 + (0x0b1 << 2))
+#define SEC_AO_SEC_JTAG_PWD_SP_CNTL                            (0xff800000 + (0x0b1 << 2))
+#define   P_AO_SEC_JTAG_PWD_SP_CNTL                            (volatile uint32_t *)(0xff800000 + (0x0b1 << 2))
+#define     AO_SEC_JTAG_PWD_SP_ADDR0                           (0xff800000 + (0x0b2 << 2))
+#define SEC_AO_SEC_JTAG_PWD_SP_ADDR0                           (0xff800000 + (0x0b2 << 2))
+#define   P_AO_SEC_JTAG_PWD_SP_ADDR0                           (volatile uint32_t *)(0xff800000 + (0x0b2 << 2))
+#define     AO_SEC_JTAG_PWD_SP_ADDR1                           (0xff800000 + (0x0b3 << 2))
+#define SEC_AO_SEC_JTAG_PWD_SP_ADDR1                           (0xff800000 + (0x0b3 << 2))
+#define   P_AO_SEC_JTAG_PWD_SP_ADDR1                           (volatile uint32_t *)(0xff800000 + (0x0b3 << 2))
+#define     AO_SEC_JTAG_PWD_SP_ADDR2                           (0xff800000 + (0x0b4 << 2))
+#define SEC_AO_SEC_JTAG_PWD_SP_ADDR2                           (0xff800000 + (0x0b4 << 2))
+#define   P_AO_SEC_JTAG_PWD_SP_ADDR2                           (volatile uint32_t *)(0xff800000 + (0x0b4 << 2))
+#define     AO_SEC_JTAG_PWD_SP_ADDR3                           (0xff800000 + (0x0b5 << 2))
+#define SEC_AO_SEC_JTAG_PWD_SP_ADDR3                           (0xff800000 + (0x0b5 << 2))
+#define   P_AO_SEC_JTAG_PWD_SP_ADDR3                           (volatile uint32_t *)(0xff800000 + (0x0b5 << 2))
+#define     AO_SEC_JTAG_SCP_CTRL                               (0xff800000 + (0x0b6 << 2))
+#define SEC_AO_SEC_JTAG_SCP_CTRL                               (0xff800000 + (0x0b6 << 2))
+#define   P_AO_SEC_JTAG_SCP_CTRL                               (volatile uint32_t *)(0xff800000 + (0x0b6 << 2))
+#define     AO_SEC_JTAG_PWD_SCP_0                              (0xff800000 + (0x0b7 << 2))
+#define SEC_AO_SEC_JTAG_PWD_SCP_0                              (0xff800000 + (0x0b7 << 2))
+#define   P_AO_SEC_JTAG_PWD_SCP_0                              (volatile uint32_t *)(0xff800000 + (0x0b7 << 2))
+#define     AO_SEC_JTAG_PWD_SCP_1                              (0xff800000 + (0x0b8 << 2))
+#define SEC_AO_SEC_JTAG_PWD_SCP_1                              (0xff800000 + (0x0b8 << 2))
+#define   P_AO_SEC_JTAG_PWD_SCP_1                              (volatile uint32_t *)(0xff800000 + (0x0b8 << 2))
+#define     AO_SEC_JTAG_PWD_SCP_2                              (0xff800000 + (0x0b9 << 2))
+#define SEC_AO_SEC_JTAG_PWD_SCP_2                              (0xff800000 + (0x0b9 << 2))
+#define   P_AO_SEC_JTAG_PWD_SCP_2                              (volatile uint32_t *)(0xff800000 + (0x0b9 << 2))
+#define     AO_SEC_JTAG_PWD_SCP_3                              (0xff800000 + (0x0ba << 2))
+#define SEC_AO_SEC_JTAG_PWD_SCP_3                              (0xff800000 + (0x0ba << 2))
+#define   P_AO_SEC_JTAG_PWD_SCP_3                              (volatile uint32_t *)(0xff800000 + (0x0ba << 2))
+#define     AO_SEC_JTAG_PWD_SCP_CNTL                           (0xff800000 + (0x0bb << 2))
+#define SEC_AO_SEC_JTAG_PWD_SCP_CNTL                           (0xff800000 + (0x0bb << 2))
+#define   P_AO_SEC_JTAG_PWD_SCP_CNTL                           (volatile uint32_t *)(0xff800000 + (0x0bb << 2))
+#define     AO_SEC_JTAG_PWD_SCP_ADDR0                          (0xff800000 + (0x0bc << 2))
+#define SEC_AO_SEC_JTAG_PWD_SCP_ADDR0                          (0xff800000 + (0x0bc << 2))
+#define   P_AO_SEC_JTAG_PWD_SCP_ADDR0                          (volatile uint32_t *)(0xff800000 + (0x0bc << 2))
+#define     AO_SEC_JTAG_PWD_SCP_ADDR1                          (0xff800000 + (0x0bd << 2))
+#define SEC_AO_SEC_JTAG_PWD_SCP_ADDR1                          (0xff800000 + (0x0bd << 2))
+#define   P_AO_SEC_JTAG_PWD_SCP_ADDR1                          (volatile uint32_t *)(0xff800000 + (0x0bd << 2))
+#define     AO_SEC_JTAG_PWD_SCP_ADDR2                          (0xff800000 + (0x0be << 2))
+#define SEC_AO_SEC_JTAG_PWD_SCP_ADDR2                          (0xff800000 + (0x0be << 2))
+#define   P_AO_SEC_JTAG_PWD_SCP_ADDR2                          (volatile uint32_t *)(0xff800000 + (0x0be << 2))
+#define     AO_SEC_JTAG_PWD_SCP_ADDR3                          (0xff800000 + (0x0bf << 2))
+#define SEC_AO_SEC_JTAG_PWD_SCP_ADDR3                          (0xff800000 + (0x0bf << 2))
+#define   P_AO_SEC_JTAG_PWD_SCP_ADDR3                          (volatile uint32_t *)(0xff800000 + (0x0bf << 2))
+#define     M4_CPU_CNTL                                        (0xff800000 + (0x0c0 << 2))
+#define SEC_M4_CPU_CNTL                                        (0xff800000 + (0x0c0 << 2))
+#define   P_M4_CPU_CNTL                                        (volatile uint32_t *)(0xff800000 + (0x0c0 << 2))
+#define     M4_CPU_CNTL_NS                                     (0xff800000 + (0x0c1 << 2))
+#define SEC_M4_CPU_CNTL_NS                                     (0xff800000 + (0x0c1 << 2))
+#define   P_M4_CPU_CNTL_NS                                     (volatile uint32_t *)(0xff800000 + (0x0c1 << 2))
+#define     M4_CPU_CNTL2                                       (0xff800000 + (0x0c2 << 2))
+#define SEC_M4_CPU_CNTL2                                       (0xff800000 + (0x0c2 << 2))
+#define   P_M4_CPU_CNTL2                                       (volatile uint32_t *)(0xff800000 + (0x0c2 << 2))
+#define     M4_CPU_CNTL3                                       (0xff800000 + (0x0c3 << 2))
+#define SEC_M4_CPU_CNTL3                                       (0xff800000 + (0x0c3 << 2))
+#define   P_M4_CPU_CNTL3                                       (volatile uint32_t *)(0xff800000 + (0x0c3 << 2))
+#define     M4_CPU_CNTL4                                       (0xff800000 + (0x0c4 << 2))
+#define SEC_M4_CPU_CNTL4                                       (0xff800000 + (0x0c4 << 2))
+#define   P_M4_CPU_CNTL4                                       (volatile uint32_t *)(0xff800000 + (0x0c4 << 2))
+#define     M4_CPU_CNTL5                                       (0xff800000 + (0x0c5 << 2))
+#define SEC_M4_CPU_CNTL5                                       (0xff800000 + (0x0c5 << 2))
+#define   P_M4_CPU_CNTL5                                       (volatile uint32_t *)(0xff800000 + (0x0c5 << 2))
+#define     M4_CPU_TIMESTAMP                                   (0xff800000 + (0x0c6 << 2))
+#define SEC_M4_CPU_TIMESTAMP                                   (0xff800000 + (0x0c6 << 2))
+#define   P_M4_CPU_TIMESTAMP                                   (volatile uint32_t *)(0xff800000 + (0x0c6 << 2))
+#define     M4_CPU_TIMESTAMP2                                  (0xff800000 + (0x0c7 << 2))
+#define SEC_M4_CPU_TIMESTAMP2                                  (0xff800000 + (0x0c7 << 2))
+#define   P_M4_CPU_TIMESTAMP2                                  (volatile uint32_t *)(0xff800000 + (0x0c7 << 2))
+#define     M4_CPU_STAT1                                       (0xff800000 + (0x0c8 << 2))
+#define SEC_M4_CPU_STAT1                                       (0xff800000 + (0x0c8 << 2))
+#define   P_M4_CPU_STAT1                                       (volatile uint32_t *)(0xff800000 + (0x0c8 << 2))
+#define     M4_CPU_STAT2                                       (0xff800000 + (0x0c9 << 2))
+#define SEC_M4_CPU_STAT2                                       (0xff800000 + (0x0c9 << 2))
+#define   P_M4_CPU_STAT2                                       (volatile uint32_t *)(0xff800000 + (0x0c9 << 2))
+#define     AO_CEC_STICKY_DATA0                                (0xff800000 + (0x0ca << 2))
+#define SEC_AO_CEC_STICKY_DATA0                                (0xff800000 + (0x0ca << 2))
+#define   P_AO_CEC_STICKY_DATA0                                (volatile uint32_t *)(0xff800000 + (0x0ca << 2))
+#define     AO_CEC_STICKY_DATA1                                (0xff800000 + (0x0cb << 2))
+#define SEC_AO_CEC_STICKY_DATA1                                (0xff800000 + (0x0cb << 2))
+#define   P_AO_CEC_STICKY_DATA1                                (volatile uint32_t *)(0xff800000 + (0x0cb << 2))
+#define     AO_CEC_STICKY_DATA2                                (0xff800000 + (0x0cc << 2))
+#define SEC_AO_CEC_STICKY_DATA2                                (0xff800000 + (0x0cc << 2))
+#define   P_AO_CEC_STICKY_DATA2                                (volatile uint32_t *)(0xff800000 + (0x0cc << 2))
+#define     AO_CEC_STICKY_DATA3                                (0xff800000 + (0x0cd << 2))
+#define SEC_AO_CEC_STICKY_DATA3                                (0xff800000 + (0x0cd << 2))
+#define   P_AO_CEC_STICKY_DATA3                                (volatile uint32_t *)(0xff800000 + (0x0cd << 2))
+#define     AO_CEC_STICKY_DATA4                                (0xff800000 + (0x0ce << 2))
+#define SEC_AO_CEC_STICKY_DATA4                                (0xff800000 + (0x0ce << 2))
+#define   P_AO_CEC_STICKY_DATA4                                (volatile uint32_t *)(0xff800000 + (0x0ce << 2))
+#define     AO_CEC_STICKY_DATA5                                (0xff800000 + (0x0cf << 2))
+#define SEC_AO_CEC_STICKY_DATA5                                (0xff800000 + (0x0cf << 2))
+#define   P_AO_CEC_STICKY_DATA5                                (volatile uint32_t *)(0xff800000 + (0x0cf << 2))
+#define     AO_CEC_STICKY_DATA6                                (0xff800000 + (0x0d0 << 2))
+#define SEC_AO_CEC_STICKY_DATA6                                (0xff800000 + (0x0d0 << 2))
+#define   P_AO_CEC_STICKY_DATA6                                (volatile uint32_t *)(0xff800000 + (0x0d0 << 2))
+#define     AO_CEC_STICKY_DATA7                                (0xff800000 + (0x0d1 << 2))
+#define SEC_AO_CEC_STICKY_DATA7                                (0xff800000 + (0x0d1 << 2))
+#define   P_AO_CEC_STICKY_DATA7                                (volatile uint32_t *)(0xff800000 + (0x0d1 << 2))
+#define     AO_SEC_SP_CFG0                                     (0xff800000 + (0x0e0 << 2))
+#define SEC_AO_SEC_SP_CFG0                                     (0xff800000 + (0x0e0 << 2))
+#define   P_AO_SEC_SP_CFG0                                     (volatile uint32_t *)(0xff800000 + (0x0e0 << 2))
+#define     AO_SEC_SP_CFG1                                     (0xff800000 + (0x0e1 << 2))
+#define SEC_AO_SEC_SP_CFG1                                     (0xff800000 + (0x0e1 << 2))
+#define   P_AO_SEC_SP_CFG1                                     (volatile uint32_t *)(0xff800000 + (0x0e1 << 2))
+#define     AO_SEC_SP_CFG2                                     (0xff800000 + (0x0e2 << 2))
+#define SEC_AO_SEC_SP_CFG2                                     (0xff800000 + (0x0e2 << 2))
+#define   P_AO_SEC_SP_CFG2                                     (volatile uint32_t *)(0xff800000 + (0x0e2 << 2))
+#define     AO_SEC_SP_CFG3                                     (0xff800000 + (0x0e3 << 2))
+#define SEC_AO_SEC_SP_CFG3                                     (0xff800000 + (0x0e3 << 2))
+#define   P_AO_SEC_SP_CFG3                                     (volatile uint32_t *)(0xff800000 + (0x0e3 << 2))
+#define     AO_SEC_SP_CFG4                                     (0xff800000 + (0x0e4 << 2))
+#define SEC_AO_SEC_SP_CFG4                                     (0xff800000 + (0x0e4 << 2))
+#define   P_AO_SEC_SP_CFG4                                     (volatile uint32_t *)(0xff800000 + (0x0e4 << 2))
+#define     AO_SEC_SP_CFG5                                     (0xff800000 + (0x0e5 << 2))
+#define SEC_AO_SEC_SP_CFG5                                     (0xff800000 + (0x0e5 << 2))
+#define   P_AO_SEC_SP_CFG5                                     (volatile uint32_t *)(0xff800000 + (0x0e5 << 2))
+#define     AO_SEC_SP_CFG6                                     (0xff800000 + (0x0e6 << 2))
+#define SEC_AO_SEC_SP_CFG6                                     (0xff800000 + (0x0e6 << 2))
+#define   P_AO_SEC_SP_CFG6                                     (volatile uint32_t *)(0xff800000 + (0x0e6 << 2))
+#define     AO_SEC_SP_CFG7                                     (0xff800000 + (0x0e7 << 2))
+#define SEC_AO_SEC_SP_CFG7                                     (0xff800000 + (0x0e7 << 2))
+#define   P_AO_SEC_SP_CFG7                                     (volatile uint32_t *)(0xff800000 + (0x0e7 << 2))
+#define     AO_SEC_SP_CFG8                                     (0xff800000 + (0x0e8 << 2))
+#define SEC_AO_SEC_SP_CFG8                                     (0xff800000 + (0x0e8 << 2))
+#define   P_AO_SEC_SP_CFG8                                     (volatile uint32_t *)(0xff800000 + (0x0e8 << 2))
+#define     AO_SEC_SP_CFG9                                     (0xff800000 + (0x0e9 << 2))
+#define SEC_AO_SEC_SP_CFG9                                     (0xff800000 + (0x0e9 << 2))
+#define   P_AO_SEC_SP_CFG9                                     (volatile uint32_t *)(0xff800000 + (0x0e9 << 2))
+#define     AO_SEC_SP_CFG10                                    (0xff800000 + (0x0ea << 2))
+#define SEC_AO_SEC_SP_CFG10                                    (0xff800000 + (0x0ea << 2))
+#define   P_AO_SEC_SP_CFG10                                    (volatile uint32_t *)(0xff800000 + (0x0ea << 2))
+#define     AO_SEC_SP_CFG11                                    (0xff800000 + (0x0eb << 2))
+#define SEC_AO_SEC_SP_CFG11                                    (0xff800000 + (0x0eb << 2))
+#define   P_AO_SEC_SP_CFG11                                    (volatile uint32_t *)(0xff800000 + (0x0eb << 2))
+#define     AO_SEC_SP_CFG12                                    (0xff800000 + (0x0ec << 2))
+#define SEC_AO_SEC_SP_CFG12                                    (0xff800000 + (0x0ec << 2))
+#define   P_AO_SEC_SP_CFG12                                    (volatile uint32_t *)(0xff800000 + (0x0ec << 2))
+#define     AO_SEC_SP_CFG13                                    (0xff800000 + (0x0ed << 2))
+#define SEC_AO_SEC_SP_CFG13                                    (0xff800000 + (0x0ed << 2))
+#define   P_AO_SEC_SP_CFG13                                    (volatile uint32_t *)(0xff800000 + (0x0ed << 2))
+#define     AO_SEC_SP_CFG14                                    (0xff800000 + (0x0ee << 2))
+#define SEC_AO_SEC_SP_CFG14                                    (0xff800000 + (0x0ee << 2))
+#define   P_AO_SEC_SP_CFG14                                    (volatile uint32_t *)(0xff800000 + (0x0ee << 2))
+#define     AO_SEC_SP_CFG15                                    (0xff800000 + (0x0ef << 2))
+#define SEC_AO_SEC_SP_CFG15                                    (0xff800000 + (0x0ef << 2))
+#define   P_AO_SEC_SP_CFG15                                    (volatile uint32_t *)(0xff800000 + (0x0ef << 2))
+#define     AO_TIMER_CTRL                                      (0xff800000 + (0x0f0 << 2))
+#define SEC_AO_TIMER_CTRL                                      (0xff800000 + (0x0f0 << 2))
+#define   P_AO_TIMER_CTRL                                      (volatile uint32_t *)(0xff800000 + (0x0f0 << 2))
+#define     AO_TIMER_SEC_SCP_CTRL                              (0xff800000 + (0x0f1 << 2))
+#define SEC_AO_TIMER_SEC_SCP_CTRL                              (0xff800000 + (0x0f1 << 2))
+#define   P_AO_TIMER_SEC_SCP_CTRL                              (volatile uint32_t *)(0xff800000 + (0x0f1 << 2))
+#define     AO_TIMER_SEC_SP_CTRL                               (0xff800000 + (0x0f2 << 2))
+#define SEC_AO_TIMER_SEC_SP_CTRL                               (0xff800000 + (0x0f2 << 2))
+#define   P_AO_TIMER_SEC_SP_CTRL                               (volatile uint32_t *)(0xff800000 + (0x0f2 << 2))
+#define     AO_TIMERA_REG                                      (0xff800000 + (0x0f3 << 2))
+#define SEC_AO_TIMERA_REG                                      (0xff800000 + (0x0f3 << 2))
+#define   P_AO_TIMERA_REG                                      (volatile uint32_t *)(0xff800000 + (0x0f3 << 2))
+#define     AO_TIMERA_CUR_REG                                  (0xff800000 + (0x0f4 << 2))
+#define SEC_AO_TIMERA_CUR_REG                                  (0xff800000 + (0x0f4 << 2))
+#define   P_AO_TIMERA_CUR_REG                                  (volatile uint32_t *)(0xff800000 + (0x0f4 << 2))
+#define     AO_TIMERB_REG                                      (0xff800000 + (0x0f5 << 2))
+#define SEC_AO_TIMERB_REG                                      (0xff800000 + (0x0f5 << 2))
+#define   P_AO_TIMERB_REG                                      (volatile uint32_t *)(0xff800000 + (0x0f5 << 2))
+#define     AO_TIMERB_CUR_REG                                  (0xff800000 + (0x0f6 << 2))
+#define SEC_AO_TIMERB_CUR_REG                                  (0xff800000 + (0x0f6 << 2))
+#define   P_AO_TIMERB_CUR_REG                                  (volatile uint32_t *)(0xff800000 + (0x0f6 << 2))
+#define     AO_TIMERC_REG                                      (0xff800000 + (0x0f7 << 2))
+#define SEC_AO_TIMERC_REG                                      (0xff800000 + (0x0f7 << 2))
+#define   P_AO_TIMERC_REG                                      (volatile uint32_t *)(0xff800000 + (0x0f7 << 2))
+#define     AO_TIMERC_CUR_REG                                  (0xff800000 + (0x0f8 << 2))
+#define SEC_AO_TIMERC_CUR_REG                                  (0xff800000 + (0x0f8 << 2))
+#define   P_AO_TIMERC_CUR_REG                                  (volatile uint32_t *)(0xff800000 + (0x0f8 << 2))
+#define     AO_TIMERE_REG                                      (0xff800000 + (0x0f9 << 2))
+#define SEC_AO_TIMERE_REG                                      (0xff800000 + (0x0f9 << 2))
+#define   P_AO_TIMERE_REG                                      (volatile uint32_t *)(0xff800000 + (0x0f9 << 2))
+#define     AO_TIMERE_HI_REG                                   (0xff800000 + (0x0fa << 2))
+#define SEC_AO_TIMERE_HI_REG                                   (0xff800000 + (0x0fa << 2))
+#define   P_AO_TIMERE_HI_REG                                   (volatile uint32_t *)(0xff800000 + (0x0fa << 2))
+#define     AO_TIMERF_REG                                      (0xff800000 + (0x0fb << 2))
+#define SEC_AO_TIMERF_REG                                      (0xff800000 + (0x0fb << 2))
+#define   P_AO_TIMERF_REG                                      (volatile uint32_t *)(0xff800000 + (0x0fb << 2))
+#define     AO_TIMERF_HI_REG                                   (0xff800000 + (0x0fc << 2))
+#define SEC_AO_TIMERF_HI_REG                                   (0xff800000 + (0x0fc << 2))
+#define   P_AO_TIMERF_HI_REG                                   (volatile uint32_t *)(0xff800000 + (0x0fc << 2))
+#define     AO_TIMERG_REG                                      (0xff800000 + (0x0fd << 2))
+#define SEC_AO_TIMERG_REG                                      (0xff800000 + (0x0fd << 2))
+#define   P_AO_TIMERG_REG                                      (volatile uint32_t *)(0xff800000 + (0x0fd << 2))
+#define     AO_TIMERG_HI_REG                                   (0xff800000 + (0x0fe << 2))
+#define SEC_AO_TIMERG_HI_REG                                   (0xff800000 + (0x0fe << 2))
+#define   P_AO_TIMERG_HI_REG                                   (volatile uint32_t *)(0xff800000 + (0x0fe << 2))
+// ----------------------------
+// PWM C-D
+// ----------------------------
+//#define AO_PWM_CD_REG_BASE 0x02
+// APB4_DECODER_NON_SECURE_BASE     32'hFF802000
+// APB4_DECODER_SECURE_BASE         32'hFF802000
+#define     AO_PWM_PWM_C                                       (0xff802000 + (0x000 << 2))
+#define SEC_AO_PWM_PWM_C                                       (0xff802000 + (0x000 << 2))
+#define   P_AO_PWM_PWM_C                                       (volatile uint32_t *)(0xff802000 + (0x000 << 2))
+#define     AO_PWM_PWM_D                                       (0xff802000 + (0x001 << 2))
+#define SEC_AO_PWM_PWM_D                                       (0xff802000 + (0x001 << 2))
+#define   P_AO_PWM_PWM_D                                       (volatile uint32_t *)(0xff802000 + (0x001 << 2))
+#define     AO_PWM_MISC_REG_CD                                 (0xff802000 + (0x002 << 2))
+#define SEC_AO_PWM_MISC_REG_CD                                 (0xff802000 + (0x002 << 2))
+#define   P_AO_PWM_MISC_REG_CD                                 (volatile uint32_t *)(0xff802000 + (0x002 << 2))
+#define     AO_PWM_DELTA_SIGMA_CD                              (0xff802000 + (0x003 << 2))
+#define SEC_AO_PWM_DELTA_SIGMA_CD                              (0xff802000 + (0x003 << 2))
+#define   P_AO_PWM_DELTA_SIGMA_CD                              (volatile uint32_t *)(0xff802000 + (0x003 << 2))
+#define     AO_PWM_TIME_CD                                     (0xff802000 + (0x004 << 2))
+#define SEC_AO_PWM_TIME_CD                                     (0xff802000 + (0x004 << 2))
+#define   P_AO_PWM_TIME_CD                                     (volatile uint32_t *)(0xff802000 + (0x004 << 2))
+#define     AO_PWM_C2                                          (0xff802000 + (0x005 << 2))
+#define SEC_AO_PWM_C2                                          (0xff802000 + (0x005 << 2))
+#define   P_AO_PWM_C2                                          (volatile uint32_t *)(0xff802000 + (0x005 << 2))
+#define     AO_PWM_D2                                          (0xff802000 + (0x006 << 2))
+#define SEC_AO_PWM_D2                                          (0xff802000 + (0x006 << 2))
+#define   P_AO_PWM_D2                                          (volatile uint32_t *)(0xff802000 + (0x006 << 2))
+#define     AO_PWM_BLINK_CD                                    (0xff802000 + (0x007 << 2))
+#define SEC_AO_PWM_BLINK_CD                                    (0xff802000 + (0x007 << 2))
+#define   P_AO_PWM_BLINK_CD                                    (volatile uint32_t *)(0xff802000 + (0x007 << 2))
+#define     AO_PWM_LOCK_CD                                     (0xff802000 + (0x008 << 2))
+#define SEC_AO_PWM_LOCK_CD                                     (0xff802000 + (0x008 << 2))
+#define   P_AO_PWM_LOCK_CD                                     (volatile uint32_t *)(0xff802000 + (0x008 << 2))
+// ----------------------------
+// UART
+// ----------------------------
+//#define AO_UART_REG_BASE 0x03
+// APB4_DECODER_NON_SECURE_BASE     32'hFF803000
+// APB4_DECODER_SECURE_BASE         32'hFF803000
+#define     AO_UART_WFIFO                                      (0xff803000 + (0x000 << 2))
+#define SEC_AO_UART_WFIFO                                      (0xff803000 + (0x000 << 2))
+#define   P_AO_UART_WFIFO                                      (volatile uint32_t *)(0xff803000 + (0x000 << 2))
+#define     AO_UART_RFIFO                                      (0xff803000 + (0x001 << 2))
+#define SEC_AO_UART_RFIFO                                      (0xff803000 + (0x001 << 2))
+#define   P_AO_UART_RFIFO                                      (volatile uint32_t *)(0xff803000 + (0x001 << 2))
+#define     AO_UART_CONTROL                                    (0xff803000 + (0x002 << 2))
+#define SEC_AO_UART_CONTROL                                    (0xff803000 + (0x002 << 2))
+#define   P_AO_UART_CONTROL                                    (volatile uint32_t *)(0xff803000 + (0x002 << 2))
+#define     AO_UART_STATUS                                     (0xff803000 + (0x003 << 2))
+#define SEC_AO_UART_STATUS                                     (0xff803000 + (0x003 << 2))
+#define   P_AO_UART_STATUS                                     (volatile uint32_t *)(0xff803000 + (0x003 << 2))
+#define     AO_UART_MISC                                       (0xff803000 + (0x004 << 2))
+#define SEC_AO_UART_MISC                                       (0xff803000 + (0x004 << 2))
+#define   P_AO_UART_MISC                                       (volatile uint32_t *)(0xff803000 + (0x004 << 2))
+#define     AO_UART_REG5                                       (0xff803000 + (0x005 << 2))
+#define SEC_AO_UART_REG5                                       (0xff803000 + (0x005 << 2))
+#define   P_AO_UART_REG5                                       (volatile uint32_t *)(0xff803000 + (0x005 << 2))
+// ----------------------------
+// UART2
+// ----------------------------
+//#define AO_UART2_REG_BASE 0x04
+// APB4_DECODER_NON_SECURE_BASE     32'hFF804000
+// APB4_DECODER_SECURE_BASE         32'hFF804000
+#define     AO_UART2_WFIFO                                     (0xff804000 + (0x000 << 2))
+#define SEC_AO_UART2_WFIFO                                     (0xff804000 + (0x000 << 2))
+#define   P_AO_UART2_WFIFO                                     (volatile uint32_t *)(0xff804000 + (0x000 << 2))
+#define     AO_UART2_RFIFO                                     (0xff804000 + (0x001 << 2))
+#define SEC_AO_UART2_RFIFO                                     (0xff804000 + (0x001 << 2))
+#define   P_AO_UART2_RFIFO                                     (volatile uint32_t *)(0xff804000 + (0x001 << 2))
+#define     AO_UART2_CONTROL                                   (0xff804000 + (0x002 << 2))
+#define SEC_AO_UART2_CONTROL                                   (0xff804000 + (0x002 << 2))
+#define   P_AO_UART2_CONTROL                                   (volatile uint32_t *)(0xff804000 + (0x002 << 2))
+#define     AO_UART2_STATUS                                    (0xff804000 + (0x003 << 2))
+#define SEC_AO_UART2_STATUS                                    (0xff804000 + (0x003 << 2))
+#define   P_AO_UART2_STATUS                                    (volatile uint32_t *)(0xff804000 + (0x003 << 2))
+#define     AO_UART2_MISC                                      (0xff804000 + (0x004 << 2))
+#define SEC_AO_UART2_MISC                                      (0xff804000 + (0x004 << 2))
+#define   P_AO_UART2_MISC                                      (volatile uint32_t *)(0xff804000 + (0x004 << 2))
+#define     AO_UART2_REG5                                      (0xff804000 + (0x005 << 2))
+#define SEC_AO_UART2_REG5                                      (0xff804000 + (0x005 << 2))
+#define   P_AO_UART2_REG5                                      (volatile uint32_t *)(0xff804000 + (0x005 << 2))
+// ----------------------------
+// I2C Master (8)
+// ----------------------------
+//#define AO_I2C_M_REG_BASE 0x05
+// APB4_DECODER_NON_SECURE_BASE     32'hFF805000
+// APB4_DECODER_SECURE_BASE         32'hFF805000
+#define     AO_I2C_M_0_CONTROL_REG                             (0xff805000 + (0x000 << 2))
+#define SEC_AO_I2C_M_0_CONTROL_REG                             (0xff805000 + (0x000 << 2))
+#define   P_AO_I2C_M_0_CONTROL_REG                             (volatile uint32_t *)(0xff805000 + (0x000 << 2))
+#define     AO_I2C_M_0_SLAVE_ADDR                              (0xff805000 + (0x001 << 2))
+#define SEC_AO_I2C_M_0_SLAVE_ADDR                              (0xff805000 + (0x001 << 2))
+#define   P_AO_I2C_M_0_SLAVE_ADDR                              (volatile uint32_t *)(0xff805000 + (0x001 << 2))
+#define     AO_I2C_M_0_TOKEN_LIST0                             (0xff805000 + (0x002 << 2))
+#define SEC_AO_I2C_M_0_TOKEN_LIST0                             (0xff805000 + (0x002 << 2))
+#define   P_AO_I2C_M_0_TOKEN_LIST0                             (volatile uint32_t *)(0xff805000 + (0x002 << 2))
+#define     AO_I2C_M_0_TOKEN_LIST1                             (0xff805000 + (0x003 << 2))
+#define SEC_AO_I2C_M_0_TOKEN_LIST1                             (0xff805000 + (0x003 << 2))
+#define   P_AO_I2C_M_0_TOKEN_LIST1                             (volatile uint32_t *)(0xff805000 + (0x003 << 2))
+#define     AO_I2C_M_0_WDATA_REG0                              (0xff805000 + (0x004 << 2))
+#define SEC_AO_I2C_M_0_WDATA_REG0                              (0xff805000 + (0x004 << 2))
+#define   P_AO_I2C_M_0_WDATA_REG0                              (volatile uint32_t *)(0xff805000 + (0x004 << 2))
+#define     AO_I2C_M_0_WDATA_REG1                              (0xff805000 + (0x005 << 2))
+#define SEC_AO_I2C_M_0_WDATA_REG1                              (0xff805000 + (0x005 << 2))
+#define   P_AO_I2C_M_0_WDATA_REG1                              (volatile uint32_t *)(0xff805000 + (0x005 << 2))
+#define     AO_I2C_M_0_RDATA_REG0                              (0xff805000 + (0x006 << 2))
+#define SEC_AO_I2C_M_0_RDATA_REG0                              (0xff805000 + (0x006 << 2))
+#define   P_AO_I2C_M_0_RDATA_REG0                              (volatile uint32_t *)(0xff805000 + (0x006 << 2))
+#define     AO_I2C_M_0_RDATA_REG1                              (0xff805000 + (0x007 << 2))
+#define SEC_AO_I2C_M_0_RDATA_REG1                              (0xff805000 + (0x007 << 2))
+#define   P_AO_I2C_M_0_RDATA_REG1                              (volatile uint32_t *)(0xff805000 + (0x007 << 2))
+#define     AO_I2C_M_0_TIMEOUT_TH                              (0xff805000 + (0x008 << 2))
+#define SEC_AO_I2C_M_0_TIMEOUT_TH                              (0xff805000 + (0x008 << 2))
+#define   P_AO_I2C_M_0_TIMEOUT_TH                              (volatile uint32_t *)(0xff805000 + (0x008 << 2))
+// ----------------------------
+// I2C Slave (3)
+// ----------------------------
+//#define AO_I2C_S_REG_BASE 0x06
+// APB4_DECODER_NON_SECURE_BASE     32'hFF806000
+// APB4_DECODER_SECURE_BASE         32'hFF806000
+#define     AO_I2C_S_CONTROL_REG                               (0xff806000 + (0x000 << 2))
+#define SEC_AO_I2C_S_CONTROL_REG                               (0xff806000 + (0x000 << 2))
+#define   P_AO_I2C_S_CONTROL_REG                               (volatile uint32_t *)(0xff806000 + (0x000 << 2))
+#define     AO_I2C_S_SEND_REG                                  (0xff806000 + (0x001 << 2))
+#define SEC_AO_I2C_S_SEND_REG                                  (0xff806000 + (0x001 << 2))
+#define   P_AO_I2C_S_SEND_REG                                  (volatile uint32_t *)(0xff806000 + (0x001 << 2))
+#define     AO_I2C_S_RECV_REG                                  (0xff806000 + (0x002 << 2))
+#define SEC_AO_I2C_S_RECV_REG                                  (0xff806000 + (0x002 << 2))
+#define   P_AO_I2C_S_RECV_REG                                  (volatile uint32_t *)(0xff806000 + (0x002 << 2))
+#define     AO_I2C_S_CNTL1_REG                                 (0xff806000 + (0x003 << 2))
+#define SEC_AO_I2C_S_CNTL1_REG                                 (0xff806000 + (0x003 << 2))
+#define   P_AO_I2C_S_CNTL1_REG                                 (volatile uint32_t *)(0xff806000 + (0x003 << 2))
+// ----------------------------
+// PWM A-B
+// ----------------------------
+//#define AO_PWM_AB_REG_BASE 0x07
+// APB4_DECODER_NON_SECURE_BASE     32'hFF807000
+// APB4_DECODER_SECURE_BASE         32'hFF807000
+#define     AO_PWM_PWM_A                                       (0xff807000 + (0x000 << 2))
+#define SEC_AO_PWM_PWM_A                                       (0xff807000 + (0x000 << 2))
+#define   P_AO_PWM_PWM_A                                       (volatile uint32_t *)(0xff807000 + (0x000 << 2))
+#define     AO_PWM_PWM_B                                       (0xff807000 + (0x001 << 2))
+#define SEC_AO_PWM_PWM_B                                       (0xff807000 + (0x001 << 2))
+#define   P_AO_PWM_PWM_B                                       (volatile uint32_t *)(0xff807000 + (0x001 << 2))
+#define     AO_PWM_MISC_REG_AB                                 (0xff807000 + (0x002 << 2))
+#define SEC_AO_PWM_MISC_REG_AB                                 (0xff807000 + (0x002 << 2))
+#define   P_AO_PWM_MISC_REG_AB                                 (volatile uint32_t *)(0xff807000 + (0x002 << 2))
+#define     AO_PWM_DELTA_SIGMA_AB                              (0xff807000 + (0x003 << 2))
+#define SEC_AO_PWM_DELTA_SIGMA_AB                              (0xff807000 + (0x003 << 2))
+#define   P_AO_PWM_DELTA_SIGMA_AB                              (volatile uint32_t *)(0xff807000 + (0x003 << 2))
+#define     AO_PWM_TIME_AB                                     (0xff807000 + (0x004 << 2))
+#define SEC_AO_PWM_TIME_AB                                     (0xff807000 + (0x004 << 2))
+#define   P_AO_PWM_TIME_AB                                     (volatile uint32_t *)(0xff807000 + (0x004 << 2))
+#define     AO_PWM_A2                                          (0xff807000 + (0x005 << 2))
+#define SEC_AO_PWM_A2                                          (0xff807000 + (0x005 << 2))
+#define   P_AO_PWM_A2                                          (volatile uint32_t *)(0xff807000 + (0x005 << 2))
+#define     AO_PWM_B2                                          (0xff807000 + (0x006 << 2))
+#define SEC_AO_PWM_B2                                          (0xff807000 + (0x006 << 2))
+#define   P_AO_PWM_B2                                          (volatile uint32_t *)(0xff807000 + (0x006 << 2))
+#define     AO_PWM_BLINK_AB                                    (0xff807000 + (0x007 << 2))
+#define SEC_AO_PWM_BLINK_AB                                    (0xff807000 + (0x007 << 2))
+#define   P_AO_PWM_BLINK_AB                                    (volatile uint32_t *)(0xff807000 + (0x007 << 2))
+#define     AO_PWM_LOCK_AB                                     (0xff807000 + (0x008 << 2))
+#define SEC_AO_PWM_LOCK_AB                                     (0xff807000 + (0x008 << 2))
+#define   P_AO_PWM_LOCK_AB                                     (volatile uint32_t *)(0xff807000 + (0x008 << 2))
+// ----------------------------
+// Multiformat IR Remote
+// ----------------------------
+//#define AO_MF_IR_DEC_REG_BASE 0x08
+// APB4_DECODER_NON_SECURE_BASE     32'hFF808000
+// APB4_DECODER_SECURE_BASE         32'hFF808000
+#define     AO_IR_DEC_LDR_ACTIVE                               (0xff808000 + (0x000 << 2))
+#define SEC_AO_IR_DEC_LDR_ACTIVE                               (0xff808000 + (0x000 << 2))
+#define   P_AO_IR_DEC_LDR_ACTIVE                               (volatile uint32_t *)(0xff808000 + (0x000 << 2))
+#define     AO_IR_DEC_LDR_IDLE                                 (0xff808000 + (0x001 << 2))
+#define SEC_AO_IR_DEC_LDR_IDLE                                 (0xff808000 + (0x001 << 2))
+#define   P_AO_IR_DEC_LDR_IDLE                                 (volatile uint32_t *)(0xff808000 + (0x001 << 2))
+#define     AO_IR_DEC_LDR_REPEAT                               (0xff808000 + (0x002 << 2))
+#define SEC_AO_IR_DEC_LDR_REPEAT                               (0xff808000 + (0x002 << 2))
+#define   P_AO_IR_DEC_LDR_REPEAT                               (volatile uint32_t *)(0xff808000 + (0x002 << 2))
+#define     AO_IR_DEC_BIT_0                                    (0xff808000 + (0x003 << 2))
+#define SEC_AO_IR_DEC_BIT_0                                    (0xff808000 + (0x003 << 2))
+#define   P_AO_IR_DEC_BIT_0                                    (volatile uint32_t *)(0xff808000 + (0x003 << 2))
+#define     AO_IR_DEC_REG0                                     (0xff808000 + (0x004 << 2))
+#define SEC_AO_IR_DEC_REG0                                     (0xff808000 + (0x004 << 2))
+#define   P_AO_IR_DEC_REG0                                     (volatile uint32_t *)(0xff808000 + (0x004 << 2))
+#define     AO_IR_DEC_FRAME                                    (0xff808000 + (0x005 << 2))
+#define SEC_AO_IR_DEC_FRAME                                    (0xff808000 + (0x005 << 2))
+#define   P_AO_IR_DEC_FRAME                                    (volatile uint32_t *)(0xff808000 + (0x005 << 2))
+#define     AO_IR_DEC_STATUS                                   (0xff808000 + (0x006 << 2))
+#define SEC_AO_IR_DEC_STATUS                                   (0xff808000 + (0x006 << 2))
+#define   P_AO_IR_DEC_STATUS                                   (volatile uint32_t *)(0xff808000 + (0x006 << 2))
+#define     AO_IR_DEC_REG1                                     (0xff808000 + (0x007 << 2))
+#define SEC_AO_IR_DEC_REG1                                     (0xff808000 + (0x007 << 2))
+#define   P_AO_IR_DEC_REG1                                     (volatile uint32_t *)(0xff808000 + (0x007 << 2))
+#define     AO_MF_IR_DEC_LDR_ACTIVE                            (0xff808000 + (0x010 << 2))
+#define SEC_AO_MF_IR_DEC_LDR_ACTIVE                            (0xff808000 + (0x010 << 2))
+#define   P_AO_MF_IR_DEC_LDR_ACTIVE                            (volatile uint32_t *)(0xff808000 + (0x010 << 2))
+#define     AO_MF_IR_DEC_LDR_IDLE                              (0xff808000 + (0x011 << 2))
+#define SEC_AO_MF_IR_DEC_LDR_IDLE                              (0xff808000 + (0x011 << 2))
+#define   P_AO_MF_IR_DEC_LDR_IDLE                              (volatile uint32_t *)(0xff808000 + (0x011 << 2))
+#define     AO_MF_IR_DEC_LDR_REPEAT                            (0xff808000 + (0x012 << 2))
+#define SEC_AO_MF_IR_DEC_LDR_REPEAT                            (0xff808000 + (0x012 << 2))
+#define   P_AO_MF_IR_DEC_LDR_REPEAT                            (volatile uint32_t *)(0xff808000 + (0x012 << 2))
+#define     AO_MF_IR_DEC_BIT_0                                 (0xff808000 + (0x013 << 2))
+#define SEC_AO_MF_IR_DEC_BIT_0                                 (0xff808000 + (0x013 << 2))
+#define   P_AO_MF_IR_DEC_BIT_0                                 (volatile uint32_t *)(0xff808000 + (0x013 << 2))
+#define     AO_MF_IR_DEC_REG0                                  (0xff808000 + (0x014 << 2))
+#define SEC_AO_MF_IR_DEC_REG0                                  (0xff808000 + (0x014 << 2))
+#define   P_AO_MF_IR_DEC_REG0                                  (volatile uint32_t *)(0xff808000 + (0x014 << 2))
+#define     AO_MF_IR_DEC_FRAME                                 (0xff808000 + (0x015 << 2))
+#define SEC_AO_MF_IR_DEC_FRAME                                 (0xff808000 + (0x015 << 2))
+#define   P_AO_MF_IR_DEC_FRAME                                 (volatile uint32_t *)(0xff808000 + (0x015 << 2))
+#define     AO_MF_IR_DEC_STATUS                                (0xff808000 + (0x016 << 2))
+#define SEC_AO_MF_IR_DEC_STATUS                                (0xff808000 + (0x016 << 2))
+#define   P_AO_MF_IR_DEC_STATUS                                (volatile uint32_t *)(0xff808000 + (0x016 << 2))
+#define     AO_MF_IR_DEC_REG1                                  (0xff808000 + (0x017 << 2))
+#define SEC_AO_MF_IR_DEC_REG1                                  (0xff808000 + (0x017 << 2))
+#define   P_AO_MF_IR_DEC_REG1                                  (volatile uint32_t *)(0xff808000 + (0x017 << 2))
+#define     AO_MF_IR_DEC_REG2                                  (0xff808000 + (0x018 << 2))
+#define SEC_AO_MF_IR_DEC_REG2                                  (0xff808000 + (0x018 << 2))
+#define   P_AO_MF_IR_DEC_REG2                                  (volatile uint32_t *)(0xff808000 + (0x018 << 2))
+#define     AO_MF_IR_DEC_DURATN2                               (0xff808000 + (0x019 << 2))
+#define SEC_AO_MF_IR_DEC_DURATN2                               (0xff808000 + (0x019 << 2))
+#define   P_AO_MF_IR_DEC_DURATN2                               (volatile uint32_t *)(0xff808000 + (0x019 << 2))
+#define     AO_MF_IR_DEC_DURATN3                               (0xff808000 + (0x01a << 2))
+#define SEC_AO_MF_IR_DEC_DURATN3                               (0xff808000 + (0x01a << 2))
+#define   P_AO_MF_IR_DEC_DURATN3                               (volatile uint32_t *)(0xff808000 + (0x01a << 2))
+#define     AO_MF_IR_DEC_FRAME1                                (0xff808000 + (0x01b << 2))
+#define SEC_AO_MF_IR_DEC_FRAME1                                (0xff808000 + (0x01b << 2))
+#define   P_AO_MF_IR_DEC_FRAME1                                (volatile uint32_t *)(0xff808000 + (0x01b << 2))
+#define     AO_MF_IR_DEC_STATUS1                               (0xff808000 + (0x01c << 2))
+#define SEC_AO_MF_IR_DEC_STATUS1                               (0xff808000 + (0x01c << 2))
+#define   P_AO_MF_IR_DEC_STATUS1                               (volatile uint32_t *)(0xff808000 + (0x01c << 2))
+#define     AO_MF_IR_DEC_STATUS2                               (0xff808000 + (0x01d << 2))
+#define SEC_AO_MF_IR_DEC_STATUS2                               (0xff808000 + (0x01d << 2))
+#define   P_AO_MF_IR_DEC_STATUS2                               (volatile uint32_t *)(0xff808000 + (0x01d << 2))
+#define     AO_MF_IR_DEC_REG3                                  (0xff808000 + (0x01e << 2))
+#define SEC_AO_MF_IR_DEC_REG3                                  (0xff808000 + (0x01e << 2))
+#define   P_AO_MF_IR_DEC_REG3                                  (volatile uint32_t *)(0xff808000 + (0x01e << 2))
+#define     AO_MF_IR_DEC_FRAME_RSV0                            (0xff808000 + (0x01f << 2))
+#define SEC_AO_MF_IR_DEC_FRAME_RSV0                            (0xff808000 + (0x01f << 2))
+#define   P_AO_MF_IR_DEC_FRAME_RSV0                            (volatile uint32_t *)(0xff808000 + (0x01f << 2))
+#define     AO_MF_IR_DEC_FRAME_RSV1                            (0xff808000 + (0x020 << 2))
+#define SEC_AO_MF_IR_DEC_FRAME_RSV1                            (0xff808000 + (0x020 << 2))
+#define   P_AO_MF_IR_DEC_FRAME_RSV1                            (volatile uint32_t *)(0xff808000 + (0x020 << 2))
+#define     AO_MF_IR_DEC_FILTE                                 (0xff808000 + (0x021 << 2))
+#define SEC_AO_MF_IR_DEC_FILTE                                 (0xff808000 + (0x021 << 2))
+#define   P_AO_MF_IR_DEC_FILTE                                 (volatile uint32_t *)(0xff808000 + (0x021 << 2))
+#define     AO_MF_IR_DEC_IRQ_CTL                               (0xff808000 + (0x022 << 2))
+#define SEC_AO_MF_IR_DEC_IRQ_CTL                               (0xff808000 + (0x022 << 2))
+#define   P_AO_MF_IR_DEC_IRQ_CTL                               (volatile uint32_t *)(0xff808000 + (0x022 << 2))
+#define     AO_MF_IR_DEC_FIFO_CTL                              (0xff808000 + (0x023 << 2))
+#define SEC_AO_MF_IR_DEC_FIFO_CTL                              (0xff808000 + (0x023 << 2))
+#define   P_AO_MF_IR_DEC_FIFO_CTL                              (volatile uint32_t *)(0xff808000 + (0x023 << 2))
+#define     AO_MF_IR_DEC_WIDTH_NEW                             (0xff808000 + (0x024 << 2))
+#define SEC_AO_MF_IR_DEC_WIDTH_NEW                             (0xff808000 + (0x024 << 2))
+#define   P_AO_MF_IR_DEC_WIDTH_NEW                             (volatile uint32_t *)(0xff808000 + (0x024 << 2))
+#define     AO_MF_IR_DEC_REPEAT_DET                            (0xff808000 + (0x025 << 2))
+#define SEC_AO_MF_IR_DEC_REPEAT_DET                            (0xff808000 + (0x025 << 2))
+#define   P_AO_MF_IR_DEC_REPEAT_DET                            (volatile uint32_t *)(0xff808000 + (0x025 << 2))
+#define     AO_IR_DEC_DEMOD_CNTL0                              (0xff808000 + (0x030 << 2))
+#define SEC_AO_IR_DEC_DEMOD_CNTL0                              (0xff808000 + (0x030 << 2))
+#define   P_AO_IR_DEC_DEMOD_CNTL0                              (volatile uint32_t *)(0xff808000 + (0x030 << 2))
+#define     AO_IR_DEC_DEMOD_CNTL1                              (0xff808000 + (0x031 << 2))
+#define SEC_AO_IR_DEC_DEMOD_CNTL1                              (0xff808000 + (0x031 << 2))
+#define   P_AO_IR_DEC_DEMOD_CNTL1                              (volatile uint32_t *)(0xff808000 + (0x031 << 2))
+#define     AO_IR_DEC_DEMOD_IIR_THD                            (0xff808000 + (0x032 << 2))
+#define SEC_AO_IR_DEC_DEMOD_IIR_THD                            (0xff808000 + (0x032 << 2))
+#define   P_AO_IR_DEC_DEMOD_IIR_THD                            (volatile uint32_t *)(0xff808000 + (0x032 << 2))
+#define     AO_IR_DEC_DEMOD_THD0                               (0xff808000 + (0x033 << 2))
+#define SEC_AO_IR_DEC_DEMOD_THD0                               (0xff808000 + (0x033 << 2))
+#define   P_AO_IR_DEC_DEMOD_THD0                               (volatile uint32_t *)(0xff808000 + (0x033 << 2))
+#define     AO_IR_DEC_DEMOD_THD1                               (0xff808000 + (0x034 << 2))
+#define SEC_AO_IR_DEC_DEMOD_THD1                               (0xff808000 + (0x034 << 2))
+#define   P_AO_IR_DEC_DEMOD_THD1                               (volatile uint32_t *)(0xff808000 + (0x034 << 2))
+#define     AO_IR_DEC_DEMOD_SUM_CNT0                           (0xff808000 + (0x035 << 2))
+#define SEC_AO_IR_DEC_DEMOD_SUM_CNT0                           (0xff808000 + (0x035 << 2))
+#define   P_AO_IR_DEC_DEMOD_SUM_CNT0                           (volatile uint32_t *)(0xff808000 + (0x035 << 2))
+#define     AO_IR_DEC_DEMOD_SUM_CNT1                           (0xff808000 + (0x036 << 2))
+#define SEC_AO_IR_DEC_DEMOD_SUM_CNT1                           (0xff808000 + (0x036 << 2))
+#define   P_AO_IR_DEC_DEMOD_SUM_CNT1                           (volatile uint32_t *)(0xff808000 + (0x036 << 2))
+#define     AO_IR_DEC_DEMOD_CNT0                               (0xff808000 + (0x037 << 2))
+#define SEC_AO_IR_DEC_DEMOD_CNT0                               (0xff808000 + (0x037 << 2))
+#define   P_AO_IR_DEC_DEMOD_CNT0                               (volatile uint32_t *)(0xff808000 + (0x037 << 2))
+#define     AO_IR_DEC_DEMOD_CNT1                               (0xff808000 + (0x038 << 2))
+#define SEC_AO_IR_DEC_DEMOD_CNT1                               (0xff808000 + (0x038 << 2))
+#define   P_AO_IR_DEC_DEMOD_CNT1                               (volatile uint32_t *)(0xff808000 + (0x038 << 2))
+// ---------------------------
+// SAR ADC
+// ---------------------------
+//#define AO_SAR_ADC_REG_BASE 0x09
+// APB4_DECODER_NON_SECURE_BASE     32'hFF809000
+// APB4_DECODER_SECURE_BASE         32'hFF809000
+#define     AO_SAR_ADC_REG0                                    (0xff809000 + (0x000 << 2))
+#define SEC_AO_SAR_ADC_REG0                                    (0xff809000 + (0x000 << 2))
+#define   P_AO_SAR_ADC_REG0                                    (volatile uint32_t *)(0xff809000 + (0x000 << 2))
+#define     AO_SAR_ADC_CHAN_LIST                               (0xff809000 + (0x001 << 2))
+#define SEC_AO_SAR_ADC_CHAN_LIST                               (0xff809000 + (0x001 << 2))
+#define   P_AO_SAR_ADC_CHAN_LIST                               (volatile uint32_t *)(0xff809000 + (0x001 << 2))
+#define     AO_SAR_ADC_AVG_CNTL                                (0xff809000 + (0x002 << 2))
+#define SEC_AO_SAR_ADC_AVG_CNTL                                (0xff809000 + (0x002 << 2))
+#define   P_AO_SAR_ADC_AVG_CNTL                                (volatile uint32_t *)(0xff809000 + (0x002 << 2))
+#define     AO_SAR_ADC_REG3                                    (0xff809000 + (0x003 << 2))
+#define SEC_AO_SAR_ADC_REG3                                    (0xff809000 + (0x003 << 2))
+#define   P_AO_SAR_ADC_REG3                                    (volatile uint32_t *)(0xff809000 + (0x003 << 2))
+#define     AO_SAR_ADC_DELAY                                   (0xff809000 + (0x004 << 2))
+#define SEC_AO_SAR_ADC_DELAY                                   (0xff809000 + (0x004 << 2))
+#define   P_AO_SAR_ADC_DELAY                                   (volatile uint32_t *)(0xff809000 + (0x004 << 2))
+#define     AO_SAR_ADC_LAST_RD                                 (0xff809000 + (0x005 << 2))
+#define SEC_AO_SAR_ADC_LAST_RD                                 (0xff809000 + (0x005 << 2))
+#define   P_AO_SAR_ADC_LAST_RD                                 (volatile uint32_t *)(0xff809000 + (0x005 << 2))
+#define     AO_SAR_ADC_FIFO_RD                                 (0xff809000 + (0x006 << 2))
+#define SEC_AO_SAR_ADC_FIFO_RD                                 (0xff809000 + (0x006 << 2))
+#define   P_AO_SAR_ADC_FIFO_RD                                 (volatile uint32_t *)(0xff809000 + (0x006 << 2))
+#define     AO_SAR_ADC_AUX_SW                                  (0xff809000 + (0x007 << 2))
+#define SEC_AO_SAR_ADC_AUX_SW                                  (0xff809000 + (0x007 << 2))
+#define   P_AO_SAR_ADC_AUX_SW                                  (volatile uint32_t *)(0xff809000 + (0x007 << 2))
+#define     AO_SAR_ADC_CHAN_10_SW                              (0xff809000 + (0x008 << 2))
+#define SEC_AO_SAR_ADC_CHAN_10_SW                              (0xff809000 + (0x008 << 2))
+#define   P_AO_SAR_ADC_CHAN_10_SW                              (volatile uint32_t *)(0xff809000 + (0x008 << 2))
+#define     AO_SAR_ADC_DETECT_IDLE_SW                          (0xff809000 + (0x009 << 2))
+#define SEC_AO_SAR_ADC_DETECT_IDLE_SW                          (0xff809000 + (0x009 << 2))
+#define   P_AO_SAR_ADC_DETECT_IDLE_SW                          (volatile uint32_t *)(0xff809000 + (0x009 << 2))
+#define     AO_SAR_ADC_DELTA_10                                (0xff809000 + (0x00a << 2))
+#define SEC_AO_SAR_ADC_DELTA_10                                (0xff809000 + (0x00a << 2))
+#define   P_AO_SAR_ADC_DELTA_10                                (volatile uint32_t *)(0xff809000 + (0x00a << 2))
+#define     AO_SAR_ADC_REG11                                   (0xff809000 + (0x00b << 2))
+#define SEC_AO_SAR_ADC_REG11                                   (0xff809000 + (0x00b << 2))
+#define   P_AO_SAR_ADC_REG11                                   (volatile uint32_t *)(0xff809000 + (0x00b << 2))
+#define     AO_SAR_ADC_REG12                                   (0xff809000 + (0x00c << 2))
+#define SEC_AO_SAR_ADC_REG12                                   (0xff809000 + (0x00c << 2))
+#define   P_AO_SAR_ADC_REG12                                   (volatile uint32_t *)(0xff809000 + (0x00c << 2))
+#define     AO_SAR_ADC_REG13                                   (0xff809000 + (0x00d << 2))
+#define SEC_AO_SAR_ADC_REG13                                   (0xff809000 + (0x00d << 2))
+#define   P_AO_SAR_ADC_REG13                                   (volatile uint32_t *)(0xff809000 + (0x00d << 2))
+#define     AO_SAR_ADC_CHNL01                                  (0xff809000 + (0x00e << 2))
+#define SEC_AO_SAR_ADC_CHNL01                                  (0xff809000 + (0x00e << 2))
+#define   P_AO_SAR_ADC_CHNL01                                  (volatile uint32_t *)(0xff809000 + (0x00e << 2))
+#define     AO_SAR_ADC_CHNL23                                  (0xff809000 + (0x00f << 2))
+#define SEC_AO_SAR_ADC_CHNL23                                  (0xff809000 + (0x00f << 2))
+#define   P_AO_SAR_ADC_CHNL23                                  (volatile uint32_t *)(0xff809000 + (0x00f << 2))
+#define     AO_SAR_ADC_CHNL45                                  (0xff809000 + (0x010 << 2))
+#define SEC_AO_SAR_ADC_CHNL45                                  (0xff809000 + (0x010 << 2))
+#define   P_AO_SAR_ADC_CHNL45                                  (volatile uint32_t *)(0xff809000 + (0x010 << 2))
+#define     AO_SAR_ADC_CHNL67                                  (0xff809000 + (0x011 << 2))
+#define SEC_AO_SAR_ADC_CHNL67                                  (0xff809000 + (0x011 << 2))
+#define   P_AO_SAR_ADC_CHNL67                                  (volatile uint32_t *)(0xff809000 + (0x011 << 2))
+// ---------------------------
+// MAIL BOX (M3/M4)
+// ---------------------------
+//#define AO_MAILBOX_REG_BASE 0x0a
+// APB4_DECODER_NON_SECURE_BASE     32'hFF80a000
+// APB4_DECODER_SECURE_BASE         32'hFF80a000
+#define     AO_MAILBOX_SET_0                                   (0xff80a000 + (0x001 << 2))
+#define SEC_AO_MAILBOX_SET_0                                   (0xff80a000 + (0x001 << 2))
+#define   P_AO_MAILBOX_SET_0                                   (volatile uint32_t *)(0xff80a000 + (0x001 << 2))
+#define     AO_MAILBOX_STAT_0                                  (0xff80a000 + (0x002 << 2))
+#define SEC_AO_MAILBOX_STAT_0                                  (0xff80a000 + (0x002 << 2))
+#define   P_AO_MAILBOX_STAT_0                                  (volatile uint32_t *)(0xff80a000 + (0x002 << 2))
+#define     AO_MAILBOX_CLR_0                                   (0xff80a000 + (0x003 << 2))
+#define SEC_AO_MAILBOX_CLR_0                                   (0xff80a000 + (0x003 << 2))
+#define   P_AO_MAILBOX_CLR_0                                   (volatile uint32_t *)(0xff80a000 + (0x003 << 2))
+#define     AO_MAILBOX_SET_1                                   (0xff80a000 + (0x004 << 2))
+#define SEC_AO_MAILBOX_SET_1                                   (0xff80a000 + (0x004 << 2))
+#define   P_AO_MAILBOX_SET_1                                   (volatile uint32_t *)(0xff80a000 + (0x004 << 2))
+#define     AO_MAILBOX_STAT_1                                  (0xff80a000 + (0x005 << 2))
+#define SEC_AO_MAILBOX_STAT_1                                  (0xff80a000 + (0x005 << 2))
+#define   P_AO_MAILBOX_STAT_1                                  (volatile uint32_t *)(0xff80a000 + (0x005 << 2))
+#define     AO_MAILBOX_CLR_1                                   (0xff80a000 + (0x006 << 2))
+#define SEC_AO_MAILBOX_CLR_1                                   (0xff80a000 + (0x006 << 2))
+#define   P_AO_MAILBOX_CLR_1                                   (volatile uint32_t *)(0xff80a000 + (0x006 << 2))
+#define     AO_MAILBOX_SET_2                                   (0xff80a000 + (0x007 << 2))
+#define SEC_AO_MAILBOX_SET_2                                   (0xff80a000 + (0x007 << 2))
+#define   P_AO_MAILBOX_SET_2                                   (volatile uint32_t *)(0xff80a000 + (0x007 << 2))
+#define     AO_MAILBOX_STAT_2                                  (0xff80a000 + (0x008 << 2))
+#define SEC_AO_MAILBOX_STAT_2                                  (0xff80a000 + (0x008 << 2))
+#define   P_AO_MAILBOX_STAT_2                                  (volatile uint32_t *)(0xff80a000 + (0x008 << 2))
+#define     AO_MAILBOX_CLR_2                                   (0xff80a000 + (0x009 << 2))
+#define SEC_AO_MAILBOX_CLR_2                                   (0xff80a000 + (0x009 << 2))
+#define   P_AO_MAILBOX_CLR_2                                   (volatile uint32_t *)(0xff80a000 + (0x009 << 2))
+#define     AO_MAILBOX_SET_3                                   (0xff80a000 + (0x00a << 2))
+#define SEC_AO_MAILBOX_SET_3                                   (0xff80a000 + (0x00a << 2))
+#define   P_AO_MAILBOX_SET_3                                   (volatile uint32_t *)(0xff80a000 + (0x00a << 2))
+#define     AO_MAILBOX_STAT_3                                  (0xff80a000 + (0x00b << 2))
+#define SEC_AO_MAILBOX_STAT_3                                  (0xff80a000 + (0x00b << 2))
+#define   P_AO_MAILBOX_STAT_3                                  (volatile uint32_t *)(0xff80a000 + (0x00b << 2))
+#define     AO_MAILBOX_CLR_3                                   (0xff80a000 + (0x00c << 2))
+#define SEC_AO_MAILBOX_CLR_3                                   (0xff80a000 + (0x00c << 2))
+#define   P_AO_MAILBOX_CLR_3                                   (volatile uint32_t *)(0xff80a000 + (0x00c << 2))
+// ---------------------------
+// RTC (4)
+// ---------------------------
+// Moved to the secure APB3 bus
+// `define AO_RTC_ADDR0                8'hd0
+// `define AO_RTC_ADDR1                8'hd1
+// `define AO_RTC_ADDR2                8'hd2
+// `define AO_RTC_ADDR3                8'hd3
+// `define AO_RTC_ADDR4                8'hd4
+//
+// Closing file:  ./ao_rti_reg.h
+//
+
+#define P_DMA_T0   (volatile uint32_t *)0xff63e000
+#define P_DMA_T1   (volatile uint32_t *)0xff63e004
+#define P_DMA_T2   (volatile uint32_t *)0xff63e008
+#define P_DMA_T3   (volatile uint32_t *)0xff63e00c
+#define P_DMA_T4   (volatile uint32_t *)0xff63e010
+#define P_DMA_T5   (volatile uint32_t *)0xff63e014
+#define P_DMA_STS0 (volatile uint32_t *)0xff63e020
+#define P_DMA_STS1 (volatile uint32_t *)0xff63e024
+#define P_DMA_STS2 (volatile uint32_t *)0xff63e028
+#define P_DMA_STS3 (volatile uint32_t *)0xff63e02c
+#define P_DMA_STS4 (volatile uint32_t *)0xff63e030
+#define P_DMA_STS5 (volatile uint32_t *)0xff63e034
+#define P_DMA_CFG  (volatile uint32_t *)0xff63e040
+#define P_DMA_SEC  (volatile uint32_t *)0xff63e044
+
+#endif // SECURE_APB_H
+
+
diff --git a/include/amlogic/auge_sound.h b/include/amlogic/auge_sound.h
new file mode 100644
index 00000000000..2defa8018ab
--- /dev/null
+++ b/include/amlogic/auge_sound.h
@@ -0,0 +1,24 @@
+/* SPDX-License-Identifier: (GPL-2.0+ OR MIT) */
+/*
+ * include/amlogic/auge_sound.h
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the named License,
+ * or any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ */
+
+#ifndef __AUGE_SOUND_H__
+#define __AUGE_SOUND_H__
+
+/* auge audio register is defined in asm/arch/secure_apb.h */
+
+int aml_audio_init(void);
+
+#endif
diff --git a/include/amlogic/blxx2bl33_param.h b/include/amlogic/blxx2bl33_param.h
new file mode 100644
index 00000000000..b2a5304e148
--- /dev/null
+++ b/include/amlogic/blxx2bl33_param.h
@@ -0,0 +1,27 @@
+#ifndef __BLXX2BL33_PARAM_H__
+#define __BLXX2BL33_PARAM_H__
+#include <common.h>
+
+/* !!! don't try to modify the Micro unless make a consistency with blxx */
+
+#define BL2E2BL33_PARAM_START	(0x0e00000)
+#define BL2E2BL33_PARAM_END	(0x1000000)
+
+#define BLXX2BL33_PARAM_DEBUG	(0)
+
+/* define the parameter type here and make sure the same with blxx */
+enum {
+	STORAGE_PARAM_TPYE = 1,
+	BL2PARMA_PARAM_TYPE = 2,
+	/* other */
+};
+
+struct param_e {
+	unsigned int type;
+	unsigned int len;	/* must be 8 bytes align */
+	unsigned char data[1];	/* user defined parameter */
+};
+
+struct param_e *param_of(int type);
+
+#endif
\ No newline at end of file
diff --git a/include/amlogic/canvas.h b/include/amlogic/canvas.h
new file mode 100644
index 00000000000..dc9ed10f022
--- /dev/null
+++ b/include/amlogic/canvas.h
@@ -0,0 +1,68 @@
+/*
+ * Copyright (C) 2015 Amlogic, Inc. All rights reserved.
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License for
+ * more details.
+ *
+*/
+
+#ifndef CANVAS_H
+#define CANVAS_H
+
+#define CANVAS_ADDR_LMASK       0x1fffffff
+#define CANVAS_WIDTH_LMASK      0x7
+#define CANVAS_WIDTH_LWID       3
+#define CANVAS_WIDTH_LBIT       29
+
+#define CANVAS_WIDTH_HMASK      0x1ff
+#define CANVAS_WIDTH_HBIT       0
+#define CANVAS_HEIGHT_MASK      0x1fff
+#define CANVAS_HEIGHT_BIT       9
+#define CANVAS_YWRAP            (1<<23)
+#define CANVAS_XWRAP            (1<<22)
+#define CANVAS_ADDR_NOWRAP      0x00
+#define CANVAS_ADDR_WRAPX       0x01
+#define CANVAS_ADDR_WRAPY       0x02
+#define CANVAS_BLKMODE_MASK     3
+#define CANVAS_BLKMODE_BIT      24
+#define CANVAS_BLKMODE_LINEAR   0x00
+#define CANVAS_BLKMODE_32X32    0x01
+#define CANVAS_BLKMODE_64X32    0x02
+
+#define CANVAS_LUT_INDEX_BIT    0
+#define CANVAS_LUT_INDEX_MASK   0x7
+#define CANVAS_LUT_WR_EN        (0x2 << 8)
+#define CANVAS_LUT_RD_EN        (0x1 << 8)
+
+typedef struct {
+	ulong addr;
+	u32 width;
+	u32 height;
+	u32 wrap;
+	u32 blkmode;
+} canvas_t;
+
+#define OSD1_CANVAS_INDEX 0x40
+#define OSD2_CANVAS_INDEX 0x43
+
+extern void canvas_init(void);
+
+extern void canvas_config(u32 index, ulong addr, u32 width,
+			  u32 height, u32 wrap, u32 blkmode);
+
+extern void canvas_read(u32 index, canvas_t *p);
+
+extern void canvas_copy(unsigned src, unsigned dst);
+
+extern void canvas_update_addr(u32 index, u32 addr);
+
+extern unsigned int canvas_get_addr(u32 index);
+
+#endif /* CANVAS_H */
diff --git a/include/amlogic/color.h b/include/amlogic/color.h
new file mode 100644
index 00000000000..9839d119997
--- /dev/null
+++ b/include/amlogic/color.h
@@ -0,0 +1,51 @@
+/*
+ * include/linux/amlogic/vout/color.h
+ *
+ * Copyright (C) 2015 Amlogic, Inc. All rights reserved.
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License for
+ * more details.
+ *
+*/
+
+
+#ifndef _COLOR_H_
+#define _COLOR_H_
+
+enum color_index_e {
+	COLOR_INDEX_NULL = 0,
+	COLOR_INDEX_02_PAL4 = 2,
+	COLOR_INDEX_04_PAL16 = 4,
+	COLOR_INDEX_08_PAL256 = 8,
+	COLOR_INDEX_16_655 = 9,
+	COLOR_INDEX_16_844 = 10,
+	COLOR_INDEX_16_6442 = 11 ,
+	COLOR_INDEX_16_4444_R = 12,
+	COLOR_INDEX_16_4642_R = 13,
+	COLOR_INDEX_16_1555_A = 14,
+	COLOR_INDEX_16_4444_A = 15,
+	COLOR_INDEX_16_565 = 16,
+
+	COLOR_INDEX_24_6666_A = 19,
+	COLOR_INDEX_24_6666_R = 20,
+	COLOR_INDEX_24_8565 = 21,
+	COLOR_INDEX_24_5658 = 22,
+	COLOR_INDEX_24_888_B = 23,
+	COLOR_INDEX_24_RGB = 24,
+
+	COLOR_INDEX_32_BGRA = 29,
+	COLOR_INDEX_32_ABGR = 30,
+	COLOR_INDEX_32_RGBA = 31,
+	COLOR_INDEX_32_ARGB = 32,
+
+	COLOR_INDEX_YUV_422 = 33,
+};
+
+#endif
diff --git a/include/amlogic/cpu_id.h b/include/amlogic/cpu_id.h
new file mode 100644
index 00000000000..588c131262d
--- /dev/null
+++ b/include/amlogic/cpu_id.h
@@ -0,0 +1,90 @@
+/*
+ * include/amlogic/cpu_id.h
+ *
+ * Copyright (C) 2015 Amlogic, Inc. All rights reserved.
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License for
+ * more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program; if not, write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
+*/
+
+#define MESON_CPU_MAJOR_ID_M6		0x16
+#define MESON_CPU_MAJOR_ID_M6TV		0x17
+#define MESON_CPU_MAJOR_ID_M6TVL	0x18
+#define MESON_CPU_MAJOR_ID_M8		0x19
+#define MESON_CPU_MAJOR_ID_MTVD		0x1A
+#define MESON_CPU_MAJOR_ID_M8B		0x1B
+#define MESON_CPU_MAJOR_ID_MG9TV	0x1C
+#define MESON_CPU_MAJOR_ID_M8M2		0x1D
+#define MESON_CPU_MAJOR_ID_GXBB		0x1F
+#define MESON_CPU_MAJOR_ID_GXTVBB	0x20
+#define MESON_CPU_MAJOR_ID_GXL		0x21
+#define MESON_CPU_MAJOR_ID_GXM		0x22
+#define MESON_CPU_MAJOR_ID_TXL		0x23
+#define MESON_CPU_MAJOR_ID_TXLX		0x24
+#define MESON_CPU_MAJOR_ID_AXG		0x25
+#define MESON_CPU_MAJOR_ID_GXLX		0x26
+#define MESON_CPU_MAJOR_ID_TXHD		0x27
+#define MESON_CPU_MAJOR_ID_G12A		0x28
+#define MESON_CPU_MAJOR_ID_G12B		0x29
+#define MESON_CPU_MAJOR_ID_SM1		0x2B
+#define MESON_CPU_MAJOR_ID_A1		0x2C
+#define MESON_CPU_MAJOR_ID_TL1		0x2E
+#define MESON_CPU_MAJOR_ID_TM2		0x2F
+#define MESON_CPU_MAJOR_ID_C1		0x30
+#define MESON_CPU_MAJOR_ID_SC2		0x32
+#define MESON_CPU_MAJOR_ID_C2		0x33
+
+
+#define MESON_CPU_PACKAGE_ID_905D	0X00
+#define MESON_CPU_PACKAGE_ID_905M	0x20
+#define MESON_CPU_PACKAGE_ID_905X	0X80
+#define MESON_CPU_PACKAGE_ID_905L	0XC0
+#define MESON_CPU_PACKAGE_ID_905M2	0XE0
+
+#define MESON_CPU_PACKAGE_ID_T962X	0x10
+#define MESON_CPU_PACKAGE_ID_T962E	0x20
+
+#define MESON_CPU_PACKAGE_ID_A113X	0x37
+#define MESON_CPU_PACKAGE_ID_A113D	0xD0
+
+#define MESON_CPU_CHIP_REVISION_A	0xA
+#define MESON_CPU_CHIP_REVISION_B	0xB
+#define MESON_CPU_CHIP_REVISION_C	0xC
+#define MESON_CPU_CHIP_REVISION_D	0xD
+
+typedef struct cpu_id {
+	unsigned int family_id:8;
+	unsigned int package_id:8;
+	unsigned int chip_rev:8; //RevA/RevB etc.
+	unsigned int reserve:4;
+	unsigned int layout_ver:4;
+} cpu_id_t;
+
+typedef struct chip_id {
+	unsigned int version;
+	unsigned char chipid[16];
+} chip_id_t;
+
+cpu_id_t get_cpu_id(void);
+
+extern chip_id_t aml_chip_id;
+int get_chip_id(unsigned char *buff, unsigned int size);
+
+/**
+ * TODO: Remove this API after move static system information to RO
+ * register or SRAM
+ *
+ * Should *NOT* call this API directly, always use get_chip_id()
+ */
+int __get_chip_id(unsigned char *buff, unsigned int size);
diff --git a/include/amlogic/enc_clk_config.h b/include/amlogic/enc_clk_config.h
new file mode 100644
index 00000000000..8b137891791
--- /dev/null
+++ b/include/amlogic/enc_clk_config.h
@@ -0,0 +1 @@
+
diff --git a/include/amlogic/fb.h b/include/amlogic/fb.h
new file mode 100644
index 00000000000..d19e96928e5
--- /dev/null
+++ b/include/amlogic/fb.h
@@ -0,0 +1,399 @@
+#ifndef _LINUX_FB_H
+#define _LINUX_FB_H
+
+/* Definitions of frame buffers						*/
+
+#define FB_MAX			32	/* sufficient for now */
+
+/* ioctls
+   0x46 is 'F'								*/
+#define FBIOGET_VSCREENINFO	0x4600
+#define FBIOPUT_VSCREENINFO	0x4601
+#define FBIOGET_FSCREENINFO	0x4602
+#define FBIOGETCMAP		0x4604
+#define FBIOPUTCMAP		0x4605
+#define FBIOPAN_DISPLAY		0x4606
+#ifdef __KERNEL__
+#define FBIO_CURSOR            _IOWR('F', 0x08, struct fb_cursor_user)
+#else
+#define FBIO_CURSOR            _IOWR('F', 0x08, struct fb_cursor)
+#endif
+/* 0x4607-0x460B are defined below */
+/* #define FBIOGET_MONITORSPEC	0x460C */
+/* #define FBIOPUT_MONITORSPEC	0x460D */
+/* #define FBIOSWITCH_MONIBIT	0x460E */
+#define FBIOGET_CON2FBMAP	0x460F
+#define FBIOPUT_CON2FBMAP	0x4610
+#define FBIOBLANK		0x4611		/* arg: 0 or vesa level + 1 */
+#define FBIOGET_VBLANK		_IOR('F', 0x12, struct fb_vblank)
+#define FBIO_ALLOC              0x4613
+#define FBIO_FREE               0x4614
+#define FBIOGET_GLYPH           0x4615
+#define FBIOGET_HWCINFO         0x4616
+#define FBIOPUT_MODEINFO        0x4617
+#define FBIOGET_DISPINFO        0x4618
+
+
+#define FB_TYPE_PACKED_PIXELS		0	/* Packed Pixels	*/
+#define FB_TYPE_PLANES			1	/* Non interleaved planes */
+#define FB_TYPE_INTERLEAVED_PLANES	2	/* Interleaved planes	*/
+#define FB_TYPE_TEXT			3	/* Text/attributes	*/
+#define FB_TYPE_VGA_PLANES		4	/* EGA/VGA planes	*/
+
+#define FB_AUX_TEXT_MDA		0	/* Monochrome text */
+#define FB_AUX_TEXT_CGA		1	/* CGA/EGA/VGA Color text */
+#define FB_AUX_TEXT_S3_MMIO	2	/* S3 MMIO fasttext */
+#define FB_AUX_TEXT_MGA_STEP16	3	/* MGA Millenium I: text, attr, 14 reserved bytes */
+#define FB_AUX_TEXT_MGA_STEP8	4	/* other MGAs:      text, attr,  6 reserved bytes */
+#define FB_AUX_TEXT_SVGA_GROUP	8	/* 8-15: SVGA tileblit compatible modes */
+#define FB_AUX_TEXT_SVGA_MASK	7	/* lower three bits says step */
+#define FB_AUX_TEXT_SVGA_STEP2	8	/* SVGA text mode:  text, attr */
+#define FB_AUX_TEXT_SVGA_STEP4	9	/* SVGA text mode:  text, attr,  2 reserved bytes */
+#define FB_AUX_TEXT_SVGA_STEP8	10	/* SVGA text mode:  text, attr,  6 reserved bytes */
+#define FB_AUX_TEXT_SVGA_STEP16	11	/* SVGA text mode:  text, attr, 14 reserved bytes */
+#define FB_AUX_TEXT_SVGA_LAST	15	/* reserved up to 15 */
+
+#define FB_AUX_VGA_PLANES_VGA4		0	/* 16 color planes (EGA/VGA) */
+#define FB_AUX_VGA_PLANES_CFB4		1	/* CFB4 in planes (VGA) */
+#define FB_AUX_VGA_PLANES_CFB8		2	/* CFB8 in planes (VGA) */
+
+#define FB_VISUAL_MONO01		0	/* Monochr. 1=Black 0=White */
+#define FB_VISUAL_MONO10		1	/* Monochr. 1=White 0=Black */
+#define FB_VISUAL_TRUECOLOR		2	/* True color	*/
+#define FB_VISUAL_PSEUDOCOLOR		3	/* Pseudo color (like atari) */
+#define FB_VISUAL_DIRECTCOLOR		4	/* Direct color */
+#define FB_VISUAL_STATIC_PSEUDOCOLOR	5	/* Pseudo color readonly */
+
+#define FB_ACCEL_NONE		0	/* no hardware accelerator	*/
+#define FB_ACCEL_ATARIBLITT	1	/* Atari Blitter		*/
+#define FB_ACCEL_AMIGABLITT	2	/* Amiga Blitter                */
+#define FB_ACCEL_S3_TRIO64	3	/* Cybervision64 (S3 Trio64)    */
+#define FB_ACCEL_NCR_77C32BLT	4	/* RetinaZ3 (NCR 77C32BLT)      */
+#define FB_ACCEL_S3_VIRGE	5	/* Cybervision64/3D (S3 ViRGE)	*/
+#define FB_ACCEL_ATI_MACH64GX	6	/* ATI Mach 64GX family		*/
+#define FB_ACCEL_DEC_TGA	7	/* DEC 21030 TGA		*/
+#define FB_ACCEL_ATI_MACH64CT	8	/* ATI Mach 64CT family		*/
+#define FB_ACCEL_ATI_MACH64VT	9	/* ATI Mach 64CT family VT class */
+#define FB_ACCEL_ATI_MACH64GT	10	/* ATI Mach 64CT family GT class */
+#define FB_ACCEL_SUN_CREATOR	11	/* Sun Creator/Creator3D	*/
+#define FB_ACCEL_SUN_CGSIX	12	/* Sun cg6			*/
+#define FB_ACCEL_SUN_LEO	13	/* Sun leo/zx			*/
+#define FB_ACCEL_IMS_TWINTURBO	14	/* IMS Twin Turbo		*/
+#define FB_ACCEL_3DLABS_PERMEDIA2 15	/* 3Dlabs Permedia 2		*/
+#define FB_ACCEL_MATROX_MGA2064W 16	/* Matrox MGA2064W (Millenium)	*/
+#define FB_ACCEL_MATROX_MGA1064SG 17	/* Matrox MGA1064SG (Mystique)	*/
+#define FB_ACCEL_MATROX_MGA2164W 18	/* Matrox MGA2164W (Millenium II) */
+#define FB_ACCEL_MATROX_MGA2164W_AGP 19	/* Matrox MGA2164W (Millenium II) */
+#define FB_ACCEL_MATROX_MGAG100	20	/* Matrox G100 (Productiva G100) */
+#define FB_ACCEL_MATROX_MGAG200	21	/* Matrox G200 (Myst, Mill, ...) */
+#define FB_ACCEL_SUN_CG14	22	/* Sun cgfourteen		 */
+#define FB_ACCEL_SUN_BWTWO	23	/* Sun bwtwo			*/
+#define FB_ACCEL_SUN_CGTHREE	24	/* Sun cgthree			*/
+#define FB_ACCEL_SUN_TCX	25	/* Sun tcx			*/
+#define FB_ACCEL_MATROX_MGAG400	26	/* Matrox G400			*/
+#define FB_ACCEL_NV3		27	/* nVidia RIVA 128              */
+#define FB_ACCEL_NV4		28	/* nVidia RIVA TNT		*/
+#define FB_ACCEL_NV5		29	/* nVidia RIVA TNT2		*/
+#define FB_ACCEL_CT_6555x	30	/* C&T 6555x			*/
+#define FB_ACCEL_3DFX_BANSHEE	31	/* 3Dfx Banshee			*/
+#define FB_ACCEL_ATI_RAGE128	32	/* ATI Rage128 family		*/
+#define FB_ACCEL_IGS_CYBER2000	33	/* CyberPro 2000		*/
+#define FB_ACCEL_IGS_CYBER2010	34	/* CyberPro 2010		*/
+#define FB_ACCEL_IGS_CYBER5000	35	/* CyberPro 5000		*/
+#define FB_ACCEL_SIS_GLAMOUR    36	/* SiS 300/630/540              */
+#define FB_ACCEL_3DLABS_PERMEDIA3 37	/* 3Dlabs Permedia 3		*/
+#define FB_ACCEL_ATI_RADEON	38	/* ATI Radeon family		*/
+#define FB_ACCEL_I810           39      /* Intel 810/815                */
+#define FB_ACCEL_SIS_GLAMOUR_2  40	/* SiS 315, 650, 740		*/
+#define FB_ACCEL_SIS_XABRE      41	/* SiS 330 ("Xabre")		*/
+#define FB_ACCEL_I830           42      /* Intel 830M/845G/85x/865G     */
+#define FB_ACCEL_NV_10          43      /* nVidia Arch 10               */
+#define FB_ACCEL_NV_20          44      /* nVidia Arch 20               */
+#define FB_ACCEL_NV_30          45      /* nVidia Arch 30               */
+#define FB_ACCEL_NV_40          46      /* nVidia Arch 40               */
+#define FB_ACCEL_XGI_VOLARI_V	47	/* XGI Volari V3XT, V5, V8      */
+#define FB_ACCEL_XGI_VOLARI_Z	48	/* XGI Volari Z7                */
+#define FB_ACCEL_OMAP1610	49	/* TI OMAP16xx                  */
+#define FB_ACCEL_TRIDENT_TGUI	50	/* Trident TGUI			*/
+#define FB_ACCEL_TRIDENT_3DIMAGE 51	/* Trident 3DImage		*/
+#define FB_ACCEL_TRIDENT_BLADE3D 52	/* Trident Blade3D		*/
+#define FB_ACCEL_TRIDENT_BLADEXP 53	/* Trident BladeXP		*/
+#define FB_ACCEL_CIRRUS_ALPINE   53	/* Cirrus Logic 543x/544x/5480	*/
+#define FB_ACCEL_NEOMAGIC_NM2070 90	/* NeoMagic NM2070              */
+#define FB_ACCEL_NEOMAGIC_NM2090 91	/* NeoMagic NM2090              */
+#define FB_ACCEL_NEOMAGIC_NM2093 92	/* NeoMagic NM2093              */
+#define FB_ACCEL_NEOMAGIC_NM2097 93	/* NeoMagic NM2097              */
+#define FB_ACCEL_NEOMAGIC_NM2160 94	/* NeoMagic NM2160              */
+#define FB_ACCEL_NEOMAGIC_NM2200 95	/* NeoMagic NM2200              */
+#define FB_ACCEL_NEOMAGIC_NM2230 96	/* NeoMagic NM2230              */
+#define FB_ACCEL_NEOMAGIC_NM2360 97	/* NeoMagic NM2360              */
+#define FB_ACCEL_NEOMAGIC_NM2380 98	/* NeoMagic NM2380              */
+#define FB_ACCEL_PXA3XX		 99	/* PXA3xx			*/
+
+#define FB_ACCEL_SAVAGE4        0x80	/* S3 Savage4                   */
+#define FB_ACCEL_SAVAGE3D       0x81	/* S3 Savage3D                  */
+#define FB_ACCEL_SAVAGE3D_MV    0x82	/* S3 Savage3D-MV               */
+#define FB_ACCEL_SAVAGE2000     0x83	/* S3 Savage2000                */
+#define FB_ACCEL_SAVAGE_MX_MV   0x84	/* S3 Savage/MX-MV              */
+#define FB_ACCEL_SAVAGE_MX      0x85	/* S3 Savage/MX                 */
+#define FB_ACCEL_SAVAGE_IX_MV   0x86	/* S3 Savage/IX-MV              */
+#define FB_ACCEL_SAVAGE_IX      0x87	/* S3 Savage/IX                 */
+#define FB_ACCEL_PROSAVAGE_PM   0x88	/* S3 ProSavage PM133           */
+#define FB_ACCEL_PROSAVAGE_KM   0x89	/* S3 ProSavage KM133           */
+#define FB_ACCEL_S3TWISTER_P    0x8a	/* S3 Twister                   */
+#define FB_ACCEL_S3TWISTER_K    0x8b	/* S3 TwisterK                  */
+#define FB_ACCEL_SUPERSAVAGE    0x8c    /* S3 Supersavage               */
+#define FB_ACCEL_PROSAVAGE_DDR  0x8d	/* S3 ProSavage DDR             */
+#define FB_ACCEL_PROSAVAGE_DDRK 0x8e	/* S3 ProSavage DDR-K           */
+
+struct fb_fix_screeninfo {
+	char id[16];			/* identification string eg "TT Builtin" */
+	unsigned long smem_start;	/* Start of frame buffer mem */
+					/* (physical address) */
+	__u32 smem_len;			/* Length of frame buffer mem */
+	__u32 type;			/* see FB_TYPE_*		*/
+	__u32 type_aux;			/* Interleave for interleaved Planes */
+	__u32 visual;			/* see FB_VISUAL_*		*/
+	__u16 xpanstep;			/* zero if no hardware panning  */
+	__u16 ypanstep;			/* zero if no hardware panning  */
+	__u16 ywrapstep;		/* zero if no hardware ywrap    */
+	__u32 line_length;		/* length of a line in bytes    */
+	unsigned long mmio_start;	/* Start of Memory Mapped I/O   */
+					/* (physical address) */
+	__u32 mmio_len;			/* Length of Memory Mapped I/O  */
+	__u32 accel;			/* Indicate to driver which	*/
+					/*  specific chip/card we have	*/
+	__u16 reserved[3];		/* Reserved for future compatibility */
+};
+
+/* Interpretation of offset for color fields: All offsets are from the right,
+ * inside a "pixel" value, which is exactly 'bits_per_pixel' wide (means: you
+ * can use the offset as right argument to <<). A pixel afterwards is a bit
+ * stream and is written to video memory as that unmodified.
+ *
+ * For pseudocolor: offset and length should be the same for all color
+ * components. Offset specifies the position of the least significant bit
+ * of the pallette index in a pixel value. Length indicates the number
+ * of available palette entries (i.e. # of entries = 1 << length).
+ */
+struct fb_bitfield {
+	__u32 offset;			/* beginning of bitfield	*/
+	__u32 length;			/* length of bitfield		*/
+	__u32 msb_right;		/* != 0 : Most significant bit is */
+					/* right */
+};
+
+#define FB_NONSTD_HAM		1	/* Hold-And-Modify (HAM)        */
+#define FB_NONSTD_REV_PIX_IN_B	2	/* order of pixels in each byte is reversed */
+
+#define FB_ACTIVATE_NOW		0	/* set values immediately (or vbl)*/
+#define FB_ACTIVATE_NXTOPEN	1	/* activate on next open	*/
+#define FB_ACTIVATE_TEST	2	/* don't set, round up impossible */
+#define FB_ACTIVATE_MASK       15
+					/* values			*/
+#define FB_ACTIVATE_VBL	       16	/* activate values on next vbl  */
+#define FB_CHANGE_CMAP_VBL     32	/* change colormap on vbl	*/
+#define FB_ACTIVATE_ALL	       64	/* change all VCs on this fb	*/
+#define FB_ACTIVATE_FORCE     128	/* force apply even when no change*/
+#define FB_ACTIVATE_INV_MODE  256       /* invalidate videomode */
+
+#define FB_ACCELF_TEXT		1	/* (OBSOLETE) see fb_info.flags and vc_mode */
+
+#define FB_SYNC_HOR_HIGH_ACT	1	/* horizontal sync high active	*/
+#define FB_SYNC_VERT_HIGH_ACT	2	/* vertical sync high active	*/
+#define FB_SYNC_EXT		4	/* external sync		*/
+#define FB_SYNC_COMP_HIGH_ACT	8	/* composite sync high active   */
+#define FB_SYNC_BROADCAST	16	/* broadcast video timings      */
+					/* vtotal = 144d/288n/576i => PAL  */
+					/* vtotal = 121d/242n/484i => NTSC */
+#define FB_SYNC_ON_GREEN	32	/* sync on green */
+
+#define FB_VMODE_NONINTERLACED  0	/* non interlaced */
+#define FB_VMODE_INTERLACED	1	/* interlaced	*/
+#define FB_VMODE_DOUBLE		2	/* double scan */
+#define FB_VMODE_ODD_FLD_FIRST	4	/* interlaced: top line first */
+#define FB_VMODE_MASK		255
+
+#define FB_VMODE_YWRAP		256	/* ywrap instead of panning     */
+#define FB_VMODE_SMOOTH_XPAN	512	/* smooth xpan possible (internally used) */
+#define FB_VMODE_CONUPDATE	512	/* don't update x/yoffset	*/
+
+/*
+ * Display rotation support
+ */
+#define FB_ROTATE_UR      0
+#define FB_ROTATE_CW      1
+#define FB_ROTATE_UD      2
+#define FB_ROTATE_CCW     3
+
+#define PICOS2KHZ(a) (1000000000UL/(a))
+#define KHZ2PICOS(a) (1000000000UL/(a))
+
+struct fb_var_screeninfo {
+	__u32 xres;			/* visible resolution		*/
+	__u32 yres;
+	__u32 xres_virtual;		/* virtual resolution		*/
+	__u32 yres_virtual;
+	__u32 xoffset;			/* offset from virtual to visible */
+	__u32 yoffset;			/* resolution			*/
+
+	__u32 bits_per_pixel;		/* guess what			*/
+	__u32 grayscale;		/* != 0 Graylevels instead of colors */
+
+	struct fb_bitfield red;		/* bitfield in fb mem if true color, */
+	struct fb_bitfield green;	/* else only length is significant */
+	struct fb_bitfield blue;
+	struct fb_bitfield transp;	/* transparency			*/
+
+	__u32 nonstd;			/* != 0 Non standard pixel format */
+
+	__u32 activate;			/* see FB_ACTIVATE_*		*/
+
+	__u32 height;			/* height of picture in mm    */
+	__u32 width;			/* width of picture in mm     */
+
+	__u32 accel_flags;		/* (OBSOLETE) see fb_info.flags */
+
+	/* Timing: All values in pixclocks, except pixclock (of course) */
+	__u32 pixclock;			/* pixel clock in ps (pico seconds) */
+	__u32 left_margin;		/* time from sync to picture	*/
+	__u32 right_margin;		/* time from picture to sync	*/
+	__u32 upper_margin;		/* time from sync to picture	*/
+	__u32 lower_margin;
+	__u32 hsync_len;		/* length of horizontal sync	*/
+	__u32 vsync_len;		/* length of vertical sync	*/
+	__u32 sync;			/* see FB_SYNC_*		*/
+	__u32 vmode;			/* see FB_VMODE_*		*/
+	__u32 rotate;			/* angle we rotate counter clockwise */
+	__u32 reserved[5];		/* Reserved for future compatibility */
+};
+
+struct fb_cmap {
+	__u32 start;			/* First entry	*/
+	__u32 len;			/* Number of entries */
+	__u16 *red;			/* Red values	*/
+	__u16 *green;
+	__u16 *blue;
+	__u16 *transp;			/* transparency, can be NULL */
+};
+
+struct fb_con2fbmap {
+	__u32 console;
+	__u32 framebuffer;
+};
+
+/* VESA Blanking Levels */
+#define VESA_NO_BLANKING        0
+#define VESA_VSYNC_SUSPEND      1
+#define VESA_HSYNC_SUSPEND      2
+#define VESA_POWERDOWN          3
+
+#define CANVAS_ALIGNED(x)  (((x) + 63) & ~63)
+
+enum osd_index_e {
+	OSD1 = 0,
+	OSD2,
+	VIU2_OSD1
+};
+
+enum {
+	/* screen: unblanked, hsync: on,  vsync: on */
+	FB_BLANK_UNBLANK       = VESA_NO_BLANKING,
+
+	/* screen: blanked,   hsync: on,  vsync: on */
+	FB_BLANK_NORMAL        = VESA_NO_BLANKING + 1,
+
+	/* screen: blanked,   hsync: on,  vsync: off */
+	FB_BLANK_VSYNC_SUSPEND = VESA_VSYNC_SUSPEND + 1,
+
+	/* screen: blanked,   hsync: off, vsync: on */
+	FB_BLANK_HSYNC_SUSPEND = VESA_HSYNC_SUSPEND + 1,
+
+	/* screen: blanked,   hsync: off, vsync: off */
+	FB_BLANK_POWERDOWN     = VESA_POWERDOWN + 1
+};
+
+#define FB_VBLANK_VBLANKING	0x001	/* currently in a vertical blank */
+#define FB_VBLANK_HBLANKING	0x002	/* currently in a horizontal blank */
+#define FB_VBLANK_HAVE_VBLANK	0x004	/* vertical blanks can be detected */
+#define FB_VBLANK_HAVE_HBLANK	0x008	/* horizontal blanks can be detected */
+#define FB_VBLANK_HAVE_COUNT	0x010	/* global retrace counter is available */
+#define FB_VBLANK_HAVE_VCOUNT	0x020	/* the vcount field is valid */
+#define FB_VBLANK_HAVE_HCOUNT	0x040	/* the hcount field is valid */
+#define FB_VBLANK_VSYNCING	0x080	/* currently in a vsync */
+#define FB_VBLANK_HAVE_VSYNC	0x100	/* verical syncs can be detected */
+
+struct fb_vblank {
+	__u32 flags;			/* FB_VBLANK flags */
+	__u32 count;			/* counter of retraces since boot */
+	__u32 vcount;			/* current scanline position */
+	__u32 hcount;			/* current scandot position */
+	__u32 reserved[4];		/* reserved for future compatibility */
+};
+
+/* Internal HW accel */
+#define ROP_COPY 0
+#define ROP_XOR  1
+
+struct fb_copyarea {
+	__u32 dx;
+	__u32 dy;
+	__u32 width;
+	__u32 height;
+	__u32 sx;
+	__u32 sy;
+};
+
+struct fb_fillrect {
+	__u32 dx;	/* screen-relative */
+	__u32 dy;
+	__u32 width;
+	__u32 height;
+	__u32 color;
+	__u32 rop;
+};
+
+struct fb_image {
+	__u32 dx;		/* Where to place image */
+	__u32 dy;
+	__u32 width;		/* Size of image */
+	__u32 height;
+	__u32 fg_color;		/* Only used when a mono bitmap */
+	__u32 bg_color;
+	__u8  depth;		/* Depth of the image */
+	const char *data;	/* Pointer to image data */
+	struct fb_cmap cmap;	/* color map info */
+};
+
+/*
+ * hardware cursor control
+ */
+
+#define FB_CUR_SETIMAGE 0x01
+#define FB_CUR_SETPOS   0x02
+#define FB_CUR_SETHOT   0x04
+#define FB_CUR_SETCMAP  0x08
+#define FB_CUR_SETSHAPE 0x10
+#define FB_CUR_SETSIZE	0x20
+#define FB_CUR_SETALL   0xFF
+
+struct fbcurpos {
+	__u16 x, y;
+};
+
+struct fb_cursor {
+	__u16 set;		/* what to set */
+	__u16 enable;		/* cursor on/off */
+	__u16 rop;		/* bitop operation */
+	const char *mask;	/* cursor mask bits */
+	struct fbcurpos hot;	/* cursor hot spot */
+	struct fb_image	image;	/* Cursor image */
+};
+
+#ifdef CONFIG_FB_BACKLIGHT
+/* Settings for the generic backlight code */
+#define FB_BACKLIGHT_LEVELS	128
+#define FB_BACKLIGHT_MAX	0xFF
+#endif
+
+#endif /* _LINUX_FB_H */
diff --git a/include/amlogic/instaboot.h b/include/amlogic/instaboot.h
new file mode 100644
index 00000000000..cfcae9ef4a9
--- /dev/null
+++ b/include/amlogic/instaboot.h
@@ -0,0 +1,24 @@
+#ifndef __INSTABOOT_H_
+#define __INSTABOOT_H_
+
+#define __NEW_UTS_LEN 64
+
+struct new_utsname {
+	char sysname[__NEW_UTS_LEN + 1];
+	char nodename[__NEW_UTS_LEN + 1];
+	char release[__NEW_UTS_LEN + 1];
+	char version[__NEW_UTS_LEN + 1];
+	char machine[__NEW_UTS_LEN + 1];
+	char domainname[__NEW_UTS_LEN + 1];
+};
+
+struct instaboot_info {
+	struct new_utsname uts;
+	unsigned int version_code;
+};
+#define INSTABOOT_SIG	"INSTABOOT"
+
+extern int get_instaboot_header(struct instaboot_info* ib_info);
+extern int fdt_instaboot(void *fdt);
+
+#endif /* __INSTABOOT_H_ */
diff --git a/include/amlogic/jtag.h b/include/amlogic/jtag.h
new file mode 100644
index 00000000000..c85c513721c
--- /dev/null
+++ b/include/amlogic/jtag.h
@@ -0,0 +1,61 @@
+#ifndef __MESON_JTAG_H__
+#define __MESON_JTAG_H__
+
+#define INVALID_ID		-1
+
+/* ioctl command */
+#define JTAG_CLRPINMUX		0
+#define JTAG_SETPINMUX		1
+#define JTAG_EANBLE		2
+#define JTAG_DISABLE		3
+
+/* jtag type */
+#define JTAG_A			0
+#define JTAG_B			1
+#define SWD_A			2
+
+/* core type */
+#define	AP			1 /* a35 a53 a72 ... */
+#define SCP			2 /* m3 */
+#define SP			3 /* m4 */
+#define DSPA			4 /* dsp-a */
+#define	DSPB			5 /* dsp-b */
+#define	DIF			6 /* dif */
+#define	AOCPU			7 /* aocpu */
+#define	AUCPU			8 /* aucpu */
+
+/*
+ * bitmap for jtag select ID:
+ *
+ *	|---|---|---|---|---|---|---|------|------|
+ *	| 9 | 8 | 6 | 5 | 4 | 3 | 2 |   1  |   0  |
+ *	|---|---|---|---|---|---|---|------|------|
+ *	|   core type   | jtag type |cluster type |
+ *	|---------------|-----------|-------------|
+ */
+#define CORE_TYPE_SHIFT	5
+#define JTAG_TYPE_SHIFT	2
+#define CLUSTER_TYPE_SHIFT	0
+
+#define CORE_TYPE_MASK	0xf
+#define JTAG_TYPE_MASK	0x7
+#define CLUSTER_TYPE_MASK	0x3
+
+#define JTAG_SELECT_ID(core_type, jtag_type, cluster_type) \
+	(((core_type & CORE_TYPE_MASK) << CORE_TYPE_SHIFT) |\
+	((jtag_type & JTAG_TYPE_MASK) << JTAG_TYPE_SHIFT) |\
+	((cluster_type & CLUSTER_TYPE_MASK) << CLUSTER_TYPE_SHIFT))
+
+#define CLUSTER_TYPE_UPDATE(id, cluster_type) \
+	((id & (~(CLUSTER_TYPE_MASK))) | cluster_type)
+
+#define CORE_TYPE_GET(id) \
+	((id >> CORE_TYPE_SHIFT) & CORE_TYPE_MASK)
+
+#define JTAG_TYPE_GET(id) \
+	((id >> JTAG_TYPE_SHIFT) & JTAG_TYPE_MASK)
+
+#define CLUSTER_TYPE_GET(id) \
+	((id >> CLUSTER_TYPE_SHIFT) & CLUSTER_TYPE_MASK)
+
+#endif /*_MESON_JTAG_H_*/
diff --git a/include/amlogic/keyunify.h b/include/amlogic/keyunify.h
new file mode 100644
index 00000000000..c89865f574d
--- /dev/null
+++ b/include/amlogic/keyunify.h
@@ -0,0 +1,56 @@
+/*
+ * \file        keymanage.h
+ * \brief       API from drivers/keymange
+ *
+ * \version     1.0.0
+ * \date        15/07/7
+ * \author      Sam.Wu <yihui.wu@amlgic.com>
+ *
+ * Copyright (c) 2015 Amlogic. All Rights Reserved.
+ *
+ */
+#ifndef __KEYUNIFY_H__
+#define __KEYUNIFY_H__
+
+//APIs of key_unify*: unify interfaces for nandkeys/emmckeys/efuse keys
+
+int key_unify_init(const char* seednum, const char* dtbaddr);
+
+int key_unify_uninit(void);
+
+//keyType: user type to define how to parse/check the key value before burn to target
+int key_unify_write(const char* keyname, const void* keydata, const unsigned datalen);
+
+int key_unify_read(const char* keyname, void* keydata, const unsigned bufLen);
+
+int key_unify_query_size(const char* keyname, ssize_t* keysize);
+
+int key_unify_query_exist(const char* keyname, int* exist);
+
+int key_unify_query_secure(const char* keyname, int* isSecure);
+
+int key_unify_query_canOverWrite(const char* keyname, int* canOverWrite);
+
+//Does the key configured in dts
+int key_unify_query_key_has_configure(const char* keyname);
+
+//Another APIs with APP concers, like special flower hdcp2
+//These APIs are based on key_unify_*
+//
+int key_manage_init(const char* seednum, const char* dtbaddr);
+int key_manage_exit(void);
+
+int key_manage_write(const char* keyname, const void* keydata, const unsigned datalen);
+
+int key_manage_read(const char* keyname, void* keydata, const unsigned bufLen);
+
+int key_manage_query_size(const char* keyname, ssize_t* keysize);
+
+int key_manage_query_exist(const char* keyname, int* exist);
+
+int key_manage_query_secure(const char* keyname, int* isSecure);
+
+int key_manage_query_canOverWrite(const char* keyname, int* canOverWrite);
+
+#endif// #ifndef __KEYUNIFY_H__
+
diff --git a/include/amlogic/media/vout/aml_cvbs.h b/include/amlogic/media/vout/aml_cvbs.h
new file mode 100644
index 00000000000..e4d0687d9b2
--- /dev/null
+++ b/include/amlogic/media/vout/aml_cvbs.h
@@ -0,0 +1,13 @@
+#ifndef __INC_AML_CVBS_H__
+#define __INC_AML_CVBS_H__
+
+void cvbs_init(void);
+void cvbs_show_valid_vmode(void);
+int cvbs_outputmode_check(char *vmode_name, unsigned int frac);
+int cvbs_set_vmode(char* vmode_name);
+int cvbs_set_bist(char* bist_mode);
+int cvbs_set_vdac(int status);
+int cvbs_reg_debug(int argc, char* const argv[]);
+
+#endif
+
diff --git a/include/amlogic/media/vout/aml_vinfo.h b/include/amlogic/media/vout/aml_vinfo.h
new file mode 100644
index 00000000000..7a453b26d6c
--- /dev/null
+++ b/include/amlogic/media/vout/aml_vinfo.h
@@ -0,0 +1,148 @@
+#ifndef __AML_VINFO_H_
+#define __AML_VINFO_H_
+
+struct vinfo_s {
+	ushort width;  /* Number of columns (i.e. 160) */
+	ushort height; /* Number of rows (i.e. 100) */
+	ushort field_height; /* for interlace */
+	u_char vl_bpix; /* Bits per pixel, 0 = 1 */
+
+	void *vd_base; /* Start of framebuffer memory */
+
+	void *vd_console_address; /* Start of console buffer */
+	short console_col;
+	short console_row;
+
+	int vd_color_fg;
+	int vd_color_bg;
+
+	ushort *cmap; /* Pointer to the colormap */
+	void *priv; /* Pointer to driver-specific data */
+};
+
+
+/************************************************************************/
+/* ** BITMAP DISPLAY SUPPORT						*/
+/************************************************************************/
+#if defined(CONFIG_CMD_BMP) || defined(CONFIG_SPLASH_SCREEN)
+# include <bmp_layout.h>
+# include <asm/byteorder.h>
+#endif
+
+/*
+ *  Information about displays we are using. This is for configuring
+ *  the LCD controller and memory allocation. Someone has to know what
+ *  is connected, as we can't autodetect anything.
+ */
+#define CONFIG_SYS_HIGH	0	/* Pins are active high			*/
+#define CONFIG_SYS_LOW		1	/* Pins are active low			*/
+
+#define LCD_COLOR2	2
+#define LCD_COLOR4	4
+#define LCD_COLOR8	8
+#define LCD_COLOR16	16
+#define LCD_COLOR24	24
+#define LCD_COLOR32	32
+
+
+/*----------------------------------------------------------------------*/
+#if defined(CONFIG_LCD_INFO_BELOW_LOGO)
+# define LCD_INFO_X		0
+# define LCD_INFO_Y		(BMP_LOGO_HEIGHT + VIDEO_FONT_HEIGHT)
+#elif defined(CONFIG_LCD_LOGO)
+# define LCD_INFO_X		(BMP_LOGO_WIDTH + 4 * VIDEO_FONT_WIDTH)
+# define LCD_INFO_Y		(VIDEO_FONT_HEIGHT)
+#else
+# define LCD_INFO_X		(VIDEO_FONT_WIDTH)
+# define LCD_INFO_Y		(VIDEO_FONT_HEIGHT)
+#endif
+
+/* Calculate nr. of bits per pixel  and nr. of colors */
+#define NBITS(bit_code)		(bit_code)
+#define NCOLORS(bit_code)	(1 << NBITS(bit_code))
+
+/************************************************************************/
+/* ** CONSOLE CONSTANTS							*/
+/************************************************************************/
+#if LCD_BPP == LCD_MONOCHROME
+
+/*
+ * Simple black/white definitions
+ */
+# define CONSOLE_COLOR_BLACK	0
+# define CONSOLE_COLOR_WHITE	1	/* Must remain last / highest	*/
+
+#elif LCD_BPP == LCD_COLOR8
+
+/*
+ * 8bpp color definitions
+ */
+# define CONSOLE_COLOR_BLACK	0
+# define CONSOLE_COLOR_RED	1
+# define CONSOLE_COLOR_GREEN	2
+# define CONSOLE_COLOR_YELLOW	3
+# define CONSOLE_COLOR_BLUE	4
+# define CONSOLE_COLOR_MAGENTA	5
+# define CONSOLE_COLOR_CYAN	6
+# define CONSOLE_COLOR_GREY	14
+# define CONSOLE_COLOR_WHITE	15	/* Must remain last / highest	*/
+
+#elif LCD_BPP == LCD_COLOR24
+/*
+ * 24bpp color definitions
+ */
+# define CONSOLE_COLOR_BLACK	 0
+# define CONSOLE_COLOR_RED 	0x0000ff
+# define CONSOLE_COLOR_GREEN	0x00ff00
+# define CONSOLE_COLOR_YELLOW	0x00ffff
+# define CONSOLE_COLOR_BLUE	0xff0000
+# define CONSOLE_COLOR_MAGENTA	0xff00ff
+# define CONSOLE_COLOR_CYAN	0xffff00
+# define CONSOLE_COLOR_GREY	0x808080
+# define CONSOLE_COLOR_WHITE	0xffffff	/* Must remain last / highest	*/
+
+#else
+
+/*
+ * 16bpp color definitions
+ */
+# define CONSOLE_COLOR_BLACK	0x0000
+# define CONSOLE_COLOR_RED 		0xf800
+# define CONSOLE_COLOR_GREEN	0x07e0
+# define CONSOLE_COLOR_YELLOW	0xffe0
+# define CONSOLE_COLOR_BLUE		0x001f
+# define CONSOLE_COLOR_MAGENTA	0xf81f
+# define CONSOLE_COLOR_CYAN		0x07ff
+# define CONSOLE_COLOR_WHITE	0xffff	/* Must remain last / highest	*/
+
+#endif /* color definitions */
+
+/************************************************************************/
+#ifndef PAGE_SIZE
+# define PAGE_SIZE	4096
+#endif
+
+/************************************************************************/
+/* ** CONSOLE DEFINITIONS & FUNCTIONS					*/
+/************************************************************************/
+#if defined(CONFIG_LCD_LOGO) && !defined(CONFIG_LCD_INFO_BELOW_LOGO)
+# define CONSOLE_ROWS		((info->vl_row-BMP_LOGO_HEIGHT) \
+					/ VIDEO_FONT_HEIGHT)
+#else
+# define CONSOLE_ROWS		(info->vl_row / VIDEO_FONT_HEIGHT)
+#endif
+
+#define CONSOLE_COLS		(panel_info.vl_col / VIDEO_FONT_WIDTH)
+#define CONSOLE_ROW_SIZE	(VIDEO_FONT_HEIGHT * lcd_line_length)
+#define CONSOLE_ROW_FIRST	(info->vd_console_address)
+#define CONSOLE_ROW_SECOND	(info->vd_console_address + CONSOLE_ROW_SIZE)
+#define CONSOLE_ROW_LAST	(info->vd_console_address + CONSOLE_SIZE \
+					- CONSOLE_ROW_SIZE)
+#define CONSOLE_SIZE		(CONSOLE_ROW_SIZE * CONSOLE_ROWS)
+#define CONSOLE_SCROLL_SIZE	(CONSOLE_SIZE - CONSOLE_ROW_SIZE)
+
+# define COLOR_MASK(c)		(c)
+
+/************************************************************************/
+
+#endif
diff --git a/include/amlogic/media/vout/aml_vmode.h b/include/amlogic/media/vout/aml_vmode.h
new file mode 100644
index 00000000000..738bcd73b24
--- /dev/null
+++ b/include/amlogic/media/vout/aml_vmode.h
@@ -0,0 +1,98 @@
+
+#ifndef __AML_VMODE_H_
+#define __AML_VMODE_H_
+
+typedef enum vmode_e {
+	VMODE_480I = 0,
+	VMODE_480I_RPT,
+	VMODE_480CVBS,
+	VMODE_480P,
+	VMODE_480P_RPT,
+	VMODE_480P_120HZ,
+	VMODE_576I,
+	VMODE_576I_RPT,
+	VMODE_576CVBS,
+	VMODE_576P,
+	VMODE_576P_RPT,
+	VMODE_576P_100HZ,
+	VMODE_720P,
+	VMODE_768P,
+	VMODE_1080I,
+	VMODE_1080P,
+	VMODE_720P_50HZ,
+	VMODE_720P_100HZ,
+	VMODE_720P_120HZ,
+	VMODE_1080I_50HZ,
+	VMODE_1080I_100HZ,
+	VMODE_1080I_120HZ,
+	VMODE_1080P_30HZ,
+	VMODE_1080P_50HZ,
+	VMODE_1080P_25HZ,
+	VMODE_1080P_24HZ,
+	VMODE_1080P_100HZ,
+	VMODE_1080P_120HZ,
+	VMODE_4K2K_30HZ,
+	VMODE_4K2K_25HZ,
+	VMODE_4K2K_24HZ,
+	VMODE_4K2K_SMPTE,
+	VMODE_4K2K_SMPTE_25HZ,
+	VMODE_4K2K_SMPTE_30HZ,
+	VMODE_4K2K_SMPTE_50HZ,
+	VMODE_4K2K_SMPTE_60HZ,
+	VMODE_4K2K_SMPTE_50HZ_Y420,
+	VMODE_4K2K_SMPTE_60HZ_Y420,
+	VMODE_4K2K_FAKE_5G,
+	VMODE_4K2K_60HZ,
+	VMODE_4K2K_60HZ_Y420,
+	VMODE_4K2K_50HZ,
+	VMODE_4K2K_50HZ_Y420,
+	VMODE_4K2K_5G,
+	VMODE_4K1K_120HZ,
+	VMODE_4K1K_120HZ_Y420,
+	VMODE_4K1K_100HZ,
+	VMODE_4K1K_100HZ_Y420,
+	VMODE_4K05K_240HZ,
+	VMODE_4K05K_240HZ_Y420,
+	VMODE_4K05K_200HZ,
+	VMODE_4K05K_200HZ_Y420,
+	VMODE_640x480p60hz,
+	VMODE_800x480p60hz,
+	VMODE_800x600p60hz,
+	VMODE_852x480p60hz,
+	VMODE_854x480p60hz,
+	VMODE_1024x600p60hz,
+	VMODE_1024x768p60hz,
+	VMODE_1152x864p75hz,
+	VMODE_1280x600p60hz,
+	VMODE_1280x768p60hz,
+	VMODE_1280x800p60hz,
+	VMODE_1280x960p60hz,
+	VMODE_1280x1024p60hz,
+	VMODE_1360x768p60hz,
+	VMODE_1366x768p60hz,
+	VMODE_1400x1050p60hz,
+	VMODE_1440x900p60hz,
+	VMODE_1440x2560p60hz,
+	VMODE_1440x2560p70hz,
+	VMODE_1600x900p60hz,
+	VMODE_1600x1200p60hz,
+	VMODE_1680x1050p60hz,
+	VMODE_1920x1200p60hz,
+	VMODE_2160x1200p90hz,
+	VMODE_2560x1080p60hz,
+	VMODE_2560x1440p60hz,
+	VMODE_2560x1600p60hz,
+	VMODE_3440x1440p60hz,
+	VMODE_VGA,
+	VMODE_SVGA,
+	VMODE_XGA,
+	VMODE_SXGA,
+	VMODE_WSXGA,
+	VMODE_FHDVGA,
+	VMODE_LCD,
+	VMODE_MAX,
+	VMODE_INIT_NULL,
+	VMODE_MASK = 0xFF,
+} vmode_t;
+
+#endif
diff --git a/include/amlogic/media/vout/aml_vout.h b/include/amlogic/media/vout/aml_vout.h
new file mode 100644
index 00000000000..53448bfc1e0
--- /dev/null
+++ b/include/amlogic/media/vout/aml_vout.h
@@ -0,0 +1,25 @@
+#ifndef __AML_VOUT_H_
+#define __AML_VOUT_H_
+
+#include <amlogic/media/vout/aml_vinfo.h>
+
+#define VOUT_VIU1_SEL    1
+#define VOUT_VIU2_SEL    2
+
+enum viu_mux_e {
+	VIU_MUX_ENCL = 0,
+	VIU_MUX_ENCI,
+	VIU_MUX_ENCP,
+	VIU_MUX_MAX,
+};
+
+void vout_init(void);
+void vout_vinfo_dump(void);
+int vout_get_current_vmode(void);
+int vout_get_current_axis(int *axis);
+void vout_set_current_vmode(int mode);
+struct vinfo_s *vout_get_current_vinfo(void);
+void vout_viu_mux(int viu_sel, int venc_sel);
+extern unsigned long get_fb_addr(void);
+#endif
+
diff --git a/include/amlogic/media/vout/hdmitx/hdmi_common.h b/include/amlogic/media/vout/hdmitx/hdmi_common.h
new file mode 100644
index 00000000000..66fdedd1d62
--- /dev/null
+++ b/include/amlogic/media/vout/hdmitx/hdmi_common.h
@@ -0,0 +1,655 @@
+#ifndef __HDMI_COMMON_H__
+#define __HDMI_COMMON_H__
+
+/* Little-Endian format */
+enum scdc_addr {
+	SINK_VER = 0x01,
+	SOURCE_VER, /* RW */
+	UPDATE_0 = 0x10, /* RW */
+	UPDATE_1, /* RW */
+	TMDS_CFG = 0x20, /* RW */
+	SCRAMBLER_ST,
+	CONFIG_0 = 0x30, /* RW */
+	STATUS_FLAGS_0 = 0x40,
+	STATUS_FLAGS_1,
+	ERR_DET_0_L = 0x50,
+	ERR_DET_0_H,
+	ERR_DET_1_L,
+	ERR_DET_1_H,
+	ERR_DET_2_L,
+	ERR_DET_2_H,
+	ERR_DET_CHKSUM,
+	TEST_CONFIG_0 = 0xC0, /* RW */
+	MANUFACT_IEEE_OUI_2 = 0xD0,
+	MANUFACT_IEEE_OUI_1,
+	MANUFACT_IEEE_OUI_0,
+	DEVICE_ID = 0xD3, /* 0xD3 ~ 0xDD */
+	/* RW   0xDE ~ 0xFF */
+	MANUFACT_SPECIFIC = 0xDE,
+};
+
+#define HDMITX_VIC420_OFFSET	0x100
+#define HDMITX_VESA_OFFSET	0x300
+
+/* HDMI VIC definitions */
+enum hdmi_vic {
+	/* Refer to CEA 861-D */
+	HDMI_unkown = 0,
+	HDMI_640x480p60_4x3 = 1,
+	HDMI_720x480p60_4x3 = 2,
+	HDMI_720x480p60_16x9 = 3,
+	HDMI_1280x720p60_16x9 = 4,
+	HDMI_1920x1080i60_16x9 = 5,
+	HDMI_720x480i60_4x3 = 6,
+	HDMI_720x480i60_16x9 = 7,
+	HDMI_720x240p60_4x3 = 8,
+	HDMI_720x240p60_16x9 = 9,
+	HDMI_2880x480i60_4x3 = 10,
+	HDMI_2880x480i60_16x9 = 11,
+	HDMI_2880x240p60_4x3 = 12,
+	HDMI_2880x240p60_16x9 = 13,
+	HDMI_1440x480p60_4x3 = 14,
+	HDMI_1440x480p60_16x9 = 15,
+	HDMI_1920x1080p60_16x9 = 16,
+	HDMI_720x576p50_4x3 = 17,
+	HDMI_720x576p50_16x9 = 18,
+	HDMI_1280x720p50_16x9 = 19,
+	HDMI_1920x1080i50_16x9 = 20,
+	HDMI_720x576i50_4x3 = 21,
+	HDMI_720x576i50_16x9 = 22,
+	HDMI_720x288p_4x3 = 23,
+	HDMI_720x288p_16x9 = 24,
+	HDMI_2880x576i50_4x3 = 25,
+	HDMI_2880x576i50_16x9 = 26,
+	HDMI_2880x288p50_4x3 = 27,
+	HDMI_2880x288p50_16x9 = 28,
+	HDMI_1440x576p_4x3 = 29,
+	HDMI_1440x576p_16x9 = 30,
+	HDMI_1920x1080p50_16x9 = 31,
+	HDMI_1920x1080p24_16x9 = 32,
+	HDMI_1920x1080p25_16x9 = 33,
+	HDMI_1920x1080p30_16x9 = 34,
+	HDMI_2880x480p60_4x3 = 35,
+	HDMI_2880x480p60_16x9 = 36,
+	HDMI_2880x576p50_4x3 = 37,
+	HDMI_2880x576p50_16x9 = 38,
+	HDMI_1920x1080i_t1250_50_16x9 = 39,
+	HDMI_1920x1080i100_16x9 = 40,
+	HDMI_1280x720p100_16x9 = 41,
+	HDMI_720x576p100_4x3 = 42,
+	HDMI_720x576p100_16x9 = 43,
+	HDMI_720x576i100_4x3 = 44,
+	HDMI_720x576i100_16x9 = 45,
+	HDMI_1920x1080i120_16x9 = 46,
+	HDMI_1280x720p120_16x9 = 47,
+	HDMI_720x480p120_4x3 = 48,
+	HDMI_720x480p120_16x9 = 49,
+	HDMI_720x480i120_4x3 = 50,
+	HDMI_720x480i120_16x9 = 51,
+	HDMI_720x576p200_4x3 = 52,
+	HDMI_720x576p200_16x9 = 53,
+	HDMI_720x576i200_4x3 = 54,
+	HDMI_720x576i200_16x9 = 55,
+	HDMI_720x480p240_4x3 = 56,
+	HDMI_720x480p240_16x9 = 57,
+	HDMI_720x480i240_4x3 = 58,
+	HDMI_720x480i240_16x9 = 59,
+	/* Refet to CEA 861-F */
+	HDMI_1280x720p24_16x9 = 60,
+	HDMI_1280x720p25_16x9 = 61,
+	HDMI_1280x720p30_16x9 = 62,
+	HDMI_1920x1080p120_16x9 = 63,
+	HDMI_1920x1080p100_16x9 = 64,
+	HDMI_1280x720p24_64x27 = 65,
+	HDMI_1280x720p25_64x27 = 66,
+	HDMI_1280x720p30_64x27 = 67,
+	HDMI_1280x720p50_64x27 = 68,
+	HDMI_1280x720p60_64x27 = 69,
+	HDMI_1280x720p100_64x27 = 70,
+	HDMI_1280x720p120_64x27 = 71,
+	HDMI_1920x1080p24_64x27 = 72,
+	HDMI_1920x1080p25_64x27 = 73,
+	HDMI_1920x1080p30_64x27 = 74,
+	HDMI_1920x1080p50_64x27 = 75,
+	HDMI_1920x1080p60_64x27 = 76,
+	HDMI_1920x1080p100_64x27 = 77,
+	HDMI_1920x1080p120_64x27 = 78,
+	HDMI_1680x720p24_64x27 = 79,
+	HDMI_1680x720p25_64x27 = 80,
+	HDMI_1680x720p30_64x27 = 81,
+	HDMI_1680x720p50_64x27 = 82,
+	HDMI_1680x720p60_64x27 = 83,
+	HDMI_1680x720p100_64x27 = 84,
+	HDMI_1680x720p120_64x27 = 85,
+	HDMI_2560x1080p24_64x27 = 86,
+	HDMI_2560x1080p25_64x27 = 87,
+	HDMI_2560x1080p30_64x27 = 88,
+	HDMI_2560x1080p50_64x27 = 89,
+	HDMI_2560x1080p60_64x27 = 90,
+	HDMI_2560x1080p100_64x27 = 91,
+	HDMI_2560x1080p120_64x27 = 92,
+	HDMI_3840x2160p24_16x9 = 93,
+	HDMI_3840x2160p25_16x9 = 94,
+	HDMI_3840x2160p30_16x9 = 95,
+	HDMI_3840x2160p50_16x9 = 96,
+	HDMI_3840x2160p60_16x9 = 97,
+	HDMI_4096x2160p24_256x135 = 98,
+	HDMI_4096x2160p25_256x135 = 99,
+	HDMI_4096x2160p30_256x135 = 100,
+	HDMI_4096x2160p50_256x135 = 101,
+	HDMI_4096x2160p60_256x135 = 102,
+	HDMI_3840x2160p24_64x27 = 103,
+	HDMI_3840x2160p25_64x27 = 104,
+	HDMI_3840x2160p30_64x27 = 105,
+	HDMI_3840x2160p50_64x27 = 106,
+	HDMI_3840x2160p60_64x27 = 107,
+	HDMI_RESERVED = 108,
+	/*
+	the following vic is for those y420 mode
+	they are all beyond OFFSET_HDMITX_VIC420(0x1000)
+	and they has same vic with normal vic in the lower bytes.
+	*/
+	HDMI_VIC_Y420 =	HDMITX_VIC420_OFFSET,
+	HDMI_3840x2160p50_16x9_Y420 =
+		HDMITX_VIC420_OFFSET + HDMI_3840x2160p50_16x9,
+	HDMI_3840x2160p60_16x9_Y420 =
+		HDMITX_VIC420_OFFSET + HDMI_3840x2160p60_16x9,
+	HDMI_4096x2160p50_256x135_Y420 =
+		HDMITX_VIC420_OFFSET + HDMI_4096x2160p50_256x135,
+	HDMI_4096x2160p60_256x135_Y420 =
+		HDMITX_VIC420_OFFSET + HDMI_4096x2160p60_256x135,
+	HDMI_3840x2160p50_64x27_Y420 =
+		HDMITX_VIC420_OFFSET + HDMI_3840x2160p50_64x27,
+	HDMI_3840x2160p60_64x27_Y420 =
+		HDMITX_VIC420_OFFSET + HDMI_3840x2160p60_64x27,
+	HDMIV_640x480p60hz = HDMITX_VESA_OFFSET,
+	HDMIV_800x480p60hz,
+	HDMIV_800x600p60hz,
+	HDMIV_852x480p60hz,
+	HDMIV_854x480p60hz,
+	HDMIV_1024x600p60hz,
+	HDMIV_1024x768p60hz,
+	HDMIV_1152x864p75hz,
+	HDMIV_1280x600p60hz,
+	HDMIV_1280x768p60hz,
+	HDMIV_1280x800p60hz,
+	HDMIV_1280x960p60hz,
+	HDMIV_1280x1024p60hz,
+	HDMIV_1360x768p60hz,
+	HDMIV_1366x768p60hz,
+	HDMIV_1400x1050p60hz,
+	HDMIV_1440x900p60hz,
+	HDMIV_1440x2560p60hz,
+	HDMIV_1440x2560p70hz,
+	HDMIV_1600x900p60hz,
+	HDMIV_1600x1200p60hz,
+	HDMIV_1680x1050p60hz,
+	HDMIV_1920x1200p60hz,
+	HDMIV_2160x1200p90hz,
+	HDMIV_2560x1080p60hz,
+	HDMIV_2560x1440p60hz,
+	HDMIV_2560x1600p60hz,
+	HDMIV_3440x1440p60hz,
+	HDMIV_2400x1200p90hz,
+};
+
+/* Compliance with old definitions */
+#define HDMI_640x480p60         HDMI_640x480p60_4x3
+#define HDMI_480p60             HDMI_720x480p60_4x3
+#define HDMI_480p60_16x9        HDMI_720x480p60_16x9
+#define HDMI_720p60             HDMI_1280x720p60_16x9
+#define HDMI_1080i60            HDMI_1920x1080i60_16x9
+#define HDMI_480i60             HDMI_720x480i60_4x3
+#define HDMI_480i60_16x9        HDMI_720x480i60_16x9
+#define HDMI_480i60_16x9_rpt    HDMI_2880x480i60_16x9
+#define HDMI_1440x480p60        HDMI_1440x480p60_4x3
+#define HDMI_1440x480p60_16x9   HDMI_1440x480p60_16x9
+#define HDMI_1080p60            HDMI_1920x1080p60_16x9
+#define HDMI_576p50             HDMI_720x576p50_4x3
+#define HDMI_576p50_16x9        HDMI_720x576p50_16x9
+#define HDMI_720p50             HDMI_1280x720p50_16x9
+#define HDMI_1080i50            HDMI_1920x1080i50_16x9
+#define HDMI_576i50             HDMI_720x576i50_4x3
+#define HDMI_576i50_16x9        HDMI_720x576i50_16x9
+#define HDMI_576i50_16x9_rpt    HDMI_2880x576i50_16x9
+#define HDMI_1080p50            HDMI_1920x1080p50_16x9
+#define HDMI_1080p24            HDMI_1920x1080p24_16x9
+#define HDMI_1080p25            HDMI_1920x1080p25_16x9
+#define HDMI_1080p30            HDMI_1920x1080p30_16x9
+#define HDMI_1080p120           HDMI_1920x1080p120_16x9
+#define HDMI_480p60_16x9_rpt    HDMI_2880x480p60_16x9
+#define HDMI_576p50_16x9_rpt    HDMI_2880x576p50_16x9
+#define HDMI_4k2k_24            HDMI_3840x2160p24_16x9
+#define HDMI_4k2k_25            HDMI_3840x2160p25_16x9
+#define HDMI_4k2k_30            HDMI_3840x2160p30_16x9
+#define HDMI_4k2k_50            HDMI_3840x2160p50_16x9
+#define HDMI_4k2k_60            HDMI_3840x2160p60_16x9
+#define HDMI_4k2k_smpte_24      HDMI_4096x2160p24_256x135
+#define HDMI_4k2k_smpte_50      HDMI_4096x2160p50_256x135
+#define HDMI_4k2k_smpte_60      HDMI_4096x2160p60_256x135
+
+/* CEA TIMING STRUCT DEFINITION */
+struct hdmi_cea_timing {
+	unsigned int pixel_freq; /* Unit: 1000 */
+	unsigned int h_freq; /* Unit: Hz */
+	unsigned int v_freq; /* Unit: 0.001 Hz */
+	unsigned int vsync_polarity:1; /* 1: positive  0: negative */
+	unsigned int hsync_polarity:1;
+	unsigned short h_active;
+	unsigned short h_total;
+	unsigned short h_blank;
+	unsigned short h_front;
+	unsigned short h_sync;
+	unsigned short h_back;
+	unsigned short v_active;
+	unsigned short v_total;
+	unsigned short v_blank;
+	unsigned short v_front;
+	unsigned short v_sync;
+	unsigned short v_back;
+	unsigned short v_sync_ln;
+};
+
+/* Refer CEA861-D Page 116 Table 55 */
+struct dtd {
+	unsigned short pixel_clock;
+	unsigned short h_active;
+	unsigned short h_blank;
+	unsigned short v_active;
+	unsigned short v_blank;
+	unsigned short h_sync_offset;
+	unsigned short h_sync;
+	unsigned short v_sync_offset;
+	unsigned short v_sync;
+	unsigned char h_image_size;
+	unsigned char v_image_size;
+	unsigned char h_border;
+	unsigned char v_border;
+	unsigned char flags;
+	enum hdmi_vic vic;
+};
+
+/* Dolby Version support information from EDID*/
+/* Refer to DV Spec version2.9 page26 to page39*/
+enum block_type {
+	ERROR_NULL = 0,
+	ERROR_LENGTH,
+	ERROR_OUI,
+	ERROR_VER,
+	CORRECT,
+};
+
+
+
+#define DV_IEEE_OUI             0x00D046
+#define HDR10_PLUS_IEEE_OUI	0x90848B
+
+#define HDMI_PACKET_VEND        1
+#define HDMI_PACKET_DRM		0x86
+
+#define CMD_CONF_OFFSET         (0x14 << 24)
+#define CONF_AVI_BT2020         (CMD_CONF_OFFSET + 0X2000 + 0x00)
+	#define CLR_AVI_BT2020          0x0
+	#define SET_AVI_BT2020          0x1
+/* set value as COLORSPACE_RGB444, YUV422, YUV444, YUV420 */
+#define CONF_AVI_RGBYCC_INDIC   (CMD_CONF_OFFSET + 0X2000 + 0x01)
+#define CONF_AVI_Q01            (CMD_CONF_OFFSET + 0X2000 + 0x02)
+	#define RGB_RANGE_DEFAULT       0
+	#define RGB_RANGE_LIM           1
+	#define RGB_RANGE_FUL           2
+	#define RGB_RANGE_RSVD          3
+#define CONF_AVI_YQ01           (CMD_CONF_OFFSET + 0X2000 + 0x03)
+	#define YCC_RANGE_LIM           0
+	#define YCC_RANGE_FUL           1
+	#define YCC_RANGE_RSVD          2
+
+struct hdr_info {
+	unsigned int hdr_sup_eotf_sdr:1;
+	unsigned int hdr_sup_eotf_hdr:1;
+	unsigned int hdr_sup_eotf_smpte_st_2084:1;
+	unsigned int hdr_sup_eotf_hlg:1;
+	unsigned int hdr_sup_SMD_type1:1;
+	unsigned char hdr_lum_max;
+	unsigned char hdr_lum_avg;
+	unsigned char hdr_lum_min;
+	unsigned char rawdata[7];
+};
+
+struct hdr10_plus_info {
+	uint32_t ieeeoui;
+	uint8_t length;
+	uint8_t application_version;
+};
+
+enum hdmi_hdr_transfer {
+	T_UNKNOWN = 0,
+	T_BT709,
+	T_UNDEF,
+	T_BT601,
+	T_BT470M,
+	T_BT470BG,
+	T_SMPTE170M,
+	T_SMPTE240M,
+	T_LINEAR,
+	T_LOG100,
+	T_LOG316,
+	T_IEC61966_2_4,
+	T_BT1361E,
+	T_IEC61966_2_1,
+	T_BT2020_10,
+	T_BT2020_12,
+	T_SMPTE_ST_2084,
+	T_SMPTE_ST_28,
+	T_HLG,
+};
+
+enum hdmi_hdr_color {
+	C_UNKNOWN = 0,
+	C_BT709,
+	C_UNDEF,
+	C_BT601,
+	C_BT470M,
+	C_BT470BG,
+	C_SMPTE170M,
+	C_SMPTE240M,
+	C_FILM,
+	C_BT2020,
+};
+
+/* master_display_info for display device */
+struct master_display_info_s {
+	u32 present_flag;
+	u32 features;			/* feature bits bt2020/2084 */
+	u32 primaries[3][2];		/* normalized 50000 in G,B,R order */
+	u32 white_point[2]; 	/* normalized 50000 */
+	u32 luminance[2];		/* max/min lumin, normalized 10000 */
+	u32 max_content;		/* Maximum Content Light Level */
+	u32 max_frame_average;	/* Maximum Frame-average Light Level */
+};
+
+struct hdr10plus_para {
+	uint8_t application_version;
+	uint8_t targeted_max_lum;
+	uint8_t average_maxrgb;
+	uint8_t distribution_values[9];
+	uint8_t num_bezier_curve_anchors;
+	uint32_t knee_point_x;
+	uint32_t knee_point_y;
+	uint8_t bezier_curve_anchors[9];
+	uint8_t graphics_overlay_flag;
+	uint8_t no_delay_flag;
+};
+
+struct dv_info {
+	unsigned char rawdata[27];
+	enum block_type block_flag;
+	uint32_t ieeeoui;
+	uint8_t ver; /* 0 or 1 or 2*/
+	uint8_t length;/*ver1: 15 or 12*/
+
+	uint8_t sup_yuv422_12bit:1;
+	/* if as 0, then support RGB tunnel mode */
+	uint8_t sup_2160p60hz:1;
+	/* if as 0, then support 2160p30hz */
+	uint8_t sup_global_dimming:1;
+	uint16_t Rx;
+	uint16_t Ry;
+	uint16_t Gx;
+	uint16_t Gy;
+	uint16_t Bx;
+	uint16_t By;
+	uint16_t Wx;
+	uint16_t Wy;
+	uint16_t tminPQ;
+	uint16_t tmaxPQ;
+	uint8_t dm_major_ver;
+	uint8_t dm_minor_ver;
+	uint8_t dm_version;
+	uint8_t tmaxLUM;
+	uint8_t colorimetry:1;/* ver1*/
+	uint8_t tminLUM;
+	uint8_t low_latency;/* ver1_12 and 2*/
+	uint8_t sup_backlight_control:1;/*only ver2*/
+	uint8_t backlt_min_luma;/*only ver2*/
+	uint8_t Interface;/*only ver2*/
+	uint8_t sup_10b_12b_444;/*only ver2*/
+	uint8_t support_DV_RGB_444_8BIT;
+	uint8_t support_LL_YCbCr_422_12BIT;
+	uint8_t support_LL_RGB_444_10BIT;
+	uint8_t support_LL_RGB_444_12BIT;
+};
+
+enum eotf_type {
+	EOTF_T_NULL = 0,
+	EOTF_T_DOLBYVISION,
+	EOTF_T_HDR10,
+	EOTF_T_SDR,
+	EOTF_T_LL_MODE,
+	EOTF_T_MAX,
+};
+
+enum mode_type {
+	YUV422_BIT12 = 0,
+	RGB_8BIT,
+	RGB_10_12BIT,
+	YUV444_10_12BIT,
+};
+
+/* Dolby Version VSIF  parameter*/
+struct dv_vsif_para {
+	uint8_t ver; /* 0 or 1 or 2*/
+	uint8_t length;/*ver1: 15 or 12*/
+	union {
+		struct {
+			uint8_t low_latency:1;
+			uint8_t dobly_vision_signal:1;
+			uint8_t backlt_ctrl_MD_present:1;
+			uint8_t auxiliary_MD_present:1;
+			uint8_t eff_tmax_PQ_hi;
+			uint8_t eff_tmax_PQ_low;
+			uint8_t auxiliary_runmode;
+			uint8_t auxiliary_runversion;
+			uint8_t auxiliary_debug0;
+		} ver2;
+	} vers;
+};
+
+#define Y420CMDB_MAX 32
+#define VIC_MAX_NUM  256
+struct rx_cap {
+	unsigned int native_Mode;
+	/*video*/
+	unsigned int VIC[VIC_MAX_NUM];
+	unsigned int VIC_count;
+	unsigned int native_VIC;
+	/*vendor*/
+	unsigned int IEEEOUI;
+	unsigned int Max_TMDS_Clock1; /* HDMI1.4b TMDS_CLK */
+	unsigned int HF_IEEEOUI;	/* For HDMI Forum */
+	unsigned int Max_TMDS_Clock2; /* HDMI2.0 TMDS_CLK */
+	/* CEA861-F, Table 56, Colorimetry Data Block */
+	unsigned int colorimetry_data;
+	unsigned int scdc_present:1;
+	unsigned int scdc_rr_capable:1; /* SCDC read request */
+	unsigned int lte_340mcsc_scramble:1;
+	unsigned support_ycbcr444_flag:1;
+	unsigned support_ycbcr422_flag:1;
+	unsigned int dc_y444:1;
+	unsigned int dc_30bit:1;
+	unsigned int dc_36bit:1;
+	unsigned int dc_48bit:1;
+	unsigned int dc_y420:1;
+	unsigned int dc_30bit_420:1;
+	unsigned int dc_36bit_420:1;
+	unsigned int dc_48bit_420:1;
+	unsigned char edid_version;
+	unsigned char edid_revision;
+	unsigned int ColorDeepSupport;
+	unsigned int Video_Latency;
+	unsigned int Audio_Latency;
+	unsigned int Interlaced_Video_Latency;
+	unsigned int Interlaced_Audio_Latency;
+	unsigned int threeD_present;
+	unsigned int threeD_Multi_present;
+	unsigned int hdmi_vic_LEN;
+	enum hdmi_vic preferred_mode;
+	struct dtd dtd[16];
+	unsigned char dtd_idx;
+	unsigned char flag_vfpdb;
+	unsigned char number_of_dtd;
+	unsigned char pref_colorspace;
+	struct hdr_info hdr_info;
+	struct dv_info dv_info;
+	struct hdr10_plus_info hdr10plus_info;
+	/*blk0 check sum*/
+	unsigned char chksum;
+	/*blk0-3 check sum*/
+	char checksum[10];
+	unsigned char edid_changed;
+	/* for total = 32*8 = 256 VICs */
+	/* for Y420CMDB bitmap */
+	unsigned char bitmap_valid;
+	unsigned char bitmap_length;
+	unsigned char y420_all_vic;
+	unsigned char y420cmdb_bitmap[Y420CMDB_MAX];
+};
+
+enum color_attr_type {
+	COLOR_ATTR_YCBCR444_12BIT = 0,
+	COLOR_ATTR_YCBCR422_12BIT,
+	COLOR_ATTR_YCBCR420_12BIT,
+	COLOR_ATTR_RGB_12BIT,
+	COLOR_ATTR_YCBCR444_10BIT,
+	COLOR_ATTR_YCBCR422_10BIT,
+	COLOR_ATTR_YCBCR420_10BIT,
+	COLOR_ATTR_RGB_10BIT,
+	COLOR_ATTR_YCBCR444_8BIT,
+	COLOR_ATTR_YCBCR422_8BIT,
+	COLOR_ATTR_YCBCR420_8BIT,
+	COLOR_ATTR_RGB_8BIT,
+	COLOR_ATTR_RESERVED,
+};
+
+struct color_attr_to_string {
+	enum color_attr_type color_attr;
+	const char *color_attr_string;
+};
+
+enum hdmi_color_depth {
+	HDMI_COLOR_DEPTH_24B = 4,
+	HDMI_COLOR_DEPTH_30B = 5,
+	HDMI_COLOR_DEPTH_36B = 6,
+	HDMI_COLOR_DEPTH_48B = 7,
+};
+
+enum hdmi_color_format {
+	HDMI_COLOR_FORMAT_RGB,
+	HDMI_COLOR_FORMAT_422,
+	HDMI_COLOR_FORMAT_444,
+	HDMI_COLOR_FORMAT_420,
+};
+
+enum hdmi_color_range {
+	HDMI_COLOR_RANGE_LIM,
+	HDMI_COLOR_RANGE_FUL,
+};
+
+enum hdmi_audio_packet {
+	HDMI_AUDIO_PACKET_SMP = 0x02,
+	HDMI_AUDIO_PACKET_1BT = 0x07,
+	HDMI_AUDIO_PACKET_DST = 0x08,
+	HDMI_AUDIO_PACKET_HBR = 0x09,
+};
+
+enum hdmi_phy_para {
+	HDMI_PHYPARA_6G = 1, /* 2160p60hz 444 8bit */
+	HDMI_PHYPARA_4p5G, /* 2160p50hz 420 12bit */
+	HDMI_PHYPARA_3p7G, /* 2160p30hz 444 10bit */
+	HDMI_PHYPARA_3G, /* 2160p24hz 444 8bit */
+	HDMI_PHYPARA_LT3G, /* 1080p60hz 444 12bit */
+	HDMI_PHYPARA_DEF = HDMI_PHYPARA_LT3G,
+	HDMI_PHYPARA_270M, /* 480p60hz 444 8bit */
+};
+
+/* get hdmi cea timing
+ * t: struct hdmi_cea_timing *
+ */
+#define GET_TIMING(name) (t->name)
+
+struct parse_cd {
+	enum hdmi_color_depth cd;
+	const char *name;
+};
+
+struct parse_cs {
+	enum hdmi_color_format cs;
+	const char *name;
+};
+
+struct parse_cr {
+	enum hdmi_color_format cr;
+	const char *name;
+};
+
+#define EDID_BLK_NO	4
+#define EDID_BLK_SIZE	128
+struct hdmi_format_para {
+	enum hdmi_vic vic;
+	char *name; /* full name, 1280x720p60hz */
+	char *sname; /* short name, 1280x720p60hz -> 720p60hz */
+	char ext_name[32];
+	enum hdmi_color_depth cd; /* cd8, cd10 or cd12 */
+	enum hdmi_color_format cs; /* rgb, y444, y422, y420 */
+	enum hdmi_color_range cr; /* limit, full */
+	unsigned int pixel_repetition_factor;
+	unsigned int progress_mode:1; /* 0: Interlace  1: Progressive */
+	unsigned int scrambler_en:1;
+	unsigned int tmds_clk_div40:1;
+	unsigned int tmds_clk; /* Unit: 1000 */
+	struct hdmi_cea_timing timing;
+};
+
+struct hdmi_support_mode {
+	enum hdmi_vic vic;
+	char *sname;
+	char y420;
+};
+
+#define DOLBY_VISION_LL_RGB             3
+#define DOLBY_VISION_LL_YUV             2
+#define DOLBY_VISION_STD_ENABLE         1
+#define DOLBY_VISION_DISABLE            0
+#define DOLBY_VISION_ENABLE	1
+
+#define HDMI_IEEEOUI 0x000C03
+#define MODE_LEN	32
+#define VESA_MAX_TIMING 64
+
+typedef struct input_hdmi_data {
+	char ubootenv_hdmimode[MODE_LEN];
+	char ubootenv_colorattribute[MODE_LEN];
+	int ubootenv_dv_type;
+	#if 0
+	bool isbestpolicy;
+	bool isSupport4K30Hz;
+	bool isSupport4K;
+	bool isDeepColor;
+	bool isframeratepriority;
+	bool isLowPowerMode;
+	#endif
+	struct rx_cap *pRXCap;
+} hdmi_data_t;
+
+typedef struct scene_output_info {
+	char final_displaymode[MODE_LEN];
+	char final_deepcolor[MODE_LEN];
+	int final_dv_type;
+} scene_output_info_t;
+
+struct dispmode_vic {
+	const char *disp_mode;
+	enum hdmi_vic VIC;
+};
+
+#endif
+
diff --git a/include/amlogic/media/vout/hdmitx/hdmitx.h b/include/amlogic/media/vout/hdmitx/hdmitx.h
new file mode 100644
index 00000000000..1458741089b
--- /dev/null
+++ b/include/amlogic/media/vout/hdmitx/hdmitx.h
@@ -0,0 +1,11 @@
+#ifndef __HDMITX_H_
+#define __HDMITX_H_
+#include "hdmi_common.h"
+#include "hdmitx_module.h"
+#include "hdmitx_reg.h"
+#include "mach_reg.h"
+
+int hdmitx_likely_frac_rate_mode(char *m);
+int hdmi_outputmode_check(char *mode, unsigned int frac);
+
+#endif
diff --git a/include/amlogic/media/vout/hdmitx/hdmitx_ext.h b/include/amlogic/media/vout/hdmitx/hdmitx_ext.h
new file mode 100644
index 00000000000..acf58a80910
--- /dev/null
+++ b/include/amlogic/media/vout/hdmitx/hdmitx_ext.h
@@ -0,0 +1,6 @@
+#ifndef __HDMITX_EXT_H__
+#define __HDMITX_EXT_H__
+
+void hdmitx_init(void);
+
+#endif
diff --git a/include/amlogic/media/vout/hdmitx/hdmitx_module.h b/include/amlogic/media/vout/hdmitx/hdmitx_module.h
new file mode 100644
index 00000000000..60d22f63e3f
--- /dev/null
+++ b/include/amlogic/media/vout/hdmitx/hdmitx_module.h
@@ -0,0 +1,106 @@
+#ifndef __HDMITX_MODULE_H__
+#define __HDMITX_MODULE_H__
+
+#include "hdmi_common.h"
+#include "hdmitx_ext.h"
+
+struct hdmitx_dev {
+	unsigned char rx_edid[512]; /* some RX may exceeds 256Bytes */
+	struct {
+		int (*get_hpd_state)(void);
+		int (*read_edid)(unsigned char *buf, unsigned char addr,
+				 unsigned char blk_no);
+		void (*turn_off)(void);
+		void (*list_support_modes)(void);
+		void (*dump_regs)(void);
+		void (*test_bist)(unsigned int mode);
+		void (*test_prbs)(void);
+		void (*set_div40)(bool div40);
+		void (*output_blank)(unsigned int blank);
+	} hwop;
+	unsigned char rawedid[EDID_BLK_SIZE * EDID_BLK_NO];
+	struct rx_cap RXCap;
+	struct hdmi_format_para *para;
+	enum hdmi_vic vic;
+	unsigned int frac_rate_policy;
+	unsigned int mode420;
+	unsigned int dc30;
+	enum eotf_type hdmi_current_eotf_type;
+	enum mode_type hdmi_current_tunnel_mode;
+	/* Add dongle_mode, clock, phy may be different from mbox */
+	unsigned int dongle_mode;
+};
+
+struct hdmitx_dev *hdmitx_get_hdev(void);
+
+struct hdmi_format_para *hdmi_get_fmt_paras(enum hdmi_vic vic);
+enum hdmi_vic hdmi_get_fmt_vic(char const *name);
+void hdmi_parse_attr(struct hdmi_format_para *para, char const *name);
+int hdmitx_edid_VIC_support(enum hdmi_vic vic);
+enum hdmi_vic hdmitx_edid_vic_tab_map_vic(const char *disp_mode);
+const char *hdmitx_edid_vic_tab_map_string(enum hdmi_vic vic);
+const char *hdmitx_edid_vic_to_string(enum hdmi_vic vic);
+bool hdmitx_edid_check_valid_mode(struct hdmitx_dev *hdev,
+	struct hdmi_format_para *para);
+enum hdmi_vic hdmitx_edid_get_VIC(struct hdmitx_dev *hdev,
+	const char *disp_mode, char force_flag);
+bool edid_parsing_ok(struct hdmitx_dev *hdev);
+bool is_dolby_enabled(void);
+bool is_tv_support_dv(struct hdmitx_dev *hdev);
+void dolbyvision_scene_process(hdmi_data_t *hdmi_data,
+	scene_output_info_t *output_info);
+void sdr_scene_process(hdmi_data_t *hdmi_data,
+	scene_output_info_t *output_info);
+void get_hdmi_data(struct hdmitx_dev *hdev, hdmi_data_t *data);
+bool pre_process_str(char *name);
+struct hdmi_format_para *hdmi_tst_fmt_name(char const *name, char const *attr);
+bool is_supported_mode_attr(hdmi_data_t *hdmi_data, char *mode_attr);
+int get_ubootenv_dv_type(void);
+void hdmi_tx_set(struct hdmitx_dev *hdev);
+/* Parsing RAW EDID data from edid to pRXCap */
+unsigned int hdmi_edid_parsing(unsigned char *edid, struct rx_cap *pRXCap);
+struct hdmi_format_para *hdmi_match_dtd_paras(struct dtd *t);
+bool hdmimode_is_interlaced(enum hdmi_vic vic);
+void hdmitx_ddc_init(void);
+void hdmitx_set_clk(struct hdmitx_dev *hdev);
+void hdmitx_turnoff(void);
+int hdmitx_get_hpd_state(void);
+void hdmitx_prbs(void);
+unsigned int hdmitx_rd_check_reg(unsigned int addr, unsigned int exp_data,
+	unsigned int mask);
+void hdmitx_hdcp_init(void);
+void hdmitx_set_phypara(enum hdmi_phy_para mode);
+void hdmitx_test_prbs(void);
+void hdmitx_set_div40(bool div40);
+
+extern void hdmitx_set_drm_pkt(struct master_display_info_s *data);
+bool hdmitx_find_vendor(struct hdmitx_dev *hdev);
+#ifndef CONFIG_AML_HDMITX20
+void __attribute__((weak))hdmitx_set_drm_pkt(struct master_display_info_s *data)
+{
+}
+#endif
+
+void hdmitx_set_vsif_pkt(enum eotf_type type, enum mode_type tunnel_mode,
+	struct dv_vsif_para *data);
+void hdmitx_set_hdr10plus_pkt(unsigned int flag,
+	struct hdr10plus_para *data);
+
+#ifndef printk
+#define printk printf
+#endif
+#ifndef pr_info
+#define pr_info printf
+#endif
+
+#define hdmitx_debug() /* printf("hd: %s[%d]\n", __func__, __LINE__) */
+
+extern struct hdr_info *hdmitx_get_rx_hdr_info(void);
+#ifndef CONFIG_AML_HDMITX20
+struct hdr_info * __attribute__((weak))hdmitx_get_rx_hdr_info(void)
+{
+	return NULL;
+}
+#endif
+
+#endif
diff --git a/include/amlogic/media/vout/hdmitx/hdmitx_reg.h b/include/amlogic/media/vout/hdmitx/hdmitx_reg.h
new file mode 100644
index 00000000000..b13e4ab986a
--- /dev/null
+++ b/include/amlogic/media/vout/hdmitx/hdmitx_reg.h
@@ -0,0 +1,1041 @@
+/*
+ * driver/amlogic/media/vout/hdmitx/hdmitx_reg.h
+ *
+ * Copyright (C) 2018 Amlogic, Inc. All rights reserved.
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License for
+ * more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program; if not, write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
+*/
+
+#ifndef _HDMI_TX_REG_H
+#define _HDMI_TX_REG_H
+
+/* TOP-level wrapper registers addresses */
+/* bit24: 1 means secure access */
+/* bit28: 1 means DWC, 0 means TOP */
+#define SEC_OFFSET           (0x1UL << 24)
+#define TOP_OFFSET_MASK      (0x0UL << 24)
+#define TOP_SEC_OFFSET_MASK  ((TOP_OFFSET_MASK) | (SEC_OFFSET))
+#define DWC_OFFSET_MASK      (0x10UL << 24)
+#define DWC_SEC_OFFSET_MASK  ((DWC_OFFSET_MASK) | (SEC_OFFSET))
+
+/* Bit 7 RW Reserved. Default 1. */
+/* Bit 6 RW Reserved. Default 1. */
+/* Bit 5 RW Reserved. Default 1. */
+/* Bit 4 RW sw_reset_phyif: PHY interface. 1=Apply reset; 0=Release from reset.
+ *     Default 1.
+ * Bit 3 RW sw_reset_intr:  interrupt module. 1=Apply reset;
+ *     0=Release from reset. Default 1.
+ * Bit 2 RW sw_reset_mem:   KSV/REVOC mem. 1=Apply reset; 0=Release from reset.
+ *     Default 1.
+ * Bit 1 RW sw_reset_rnd:   random number interface to HDCP. 1=Apply reset;
+ *     0=Release from reset. Default 1.
+ * Bit 0 RW sw_reset_core: connects to IP's ~irstz. 1=Apply reset;
+ *     0=Release from reset. Default 1.
+ */
+#define HDMITX_TOP_SW_RESET                     (TOP_OFFSET_MASK + 0x000)
+
+/* Bit 12 RW i2s_ws_inv:1=Invert i2s_ws; 0=No invert. Default 0. */
+/* Bit 11 RW i2s_clk_inv: 1=Invert i2s_clk; 0=No invert. Default 0. */
+/* Bit 10 RW spdif_clk_inv: 1=Invert spdif_clk; 0=No invert. Default 0. */
+/* Bit 9 RW tmds_clk_inv: 1=Invert tmds_clk; 0=No invert. Default 0. */
+/* Bit 8 RW pixel_clk_inv: 1=Invert pixel_clk; 0=No invert. Default 0. */
+/* Bit 4 RW cec_clk_en: 1=enable cec_clk; 0=disable. Default 0. */
+/* Bit 3 RW i2s_clk_en: 1=enable i2s_clk; 0=disable. Default 0. */
+/* Bit 2 RW spdif_clk_en: 1=enable spdif_clk; 0=disable. Default 0. */
+/* Bit 1 RW tmds_clk_en: 1=enable tmds_clk;  0=disable. Default 0. */
+/* Bit 0 RW pixel_clk_en: 1=enable pixel_clk; 0=disable. Default 0. */
+#define HDMITX_TOP_CLK_CNTL                     (TOP_OFFSET_MASK + 0x001)
+
+/* Bit 11: 0 RW hpd_valid_width: filter out width <= M*1024.    Default 0. */
+/* Bit 15:12 RW hpd_glitch_width: filter out glitch <= N.       Default 0. */
+#define HDMITX_TOP_HPD_FILTER                   (TOP_OFFSET_MASK + 0x002)
+
+/* intr_maskn: MASK_N, one bit per interrupt source.
+ *     1=Enable interrupt source; 0=Disable interrupt source. Default 0.
+ * [  4] hdcp22_rndnum_err
+ * [  3] nonce_rfrsh_rise
+ * [  2] hpd_fall_intr
+ * [  1] hpd_rise_intr
+ * [  0] core_intr
+ */
+#define HDMITX_TOP_INTR_MASKN                   (TOP_OFFSET_MASK + 0x003)
+
+/* Bit 30: 0 RW intr_stat: For each bit, write 1 to manually set the interrupt
+ *     bit, read back the interrupt status. */
+/* Bit    31 R  IP interrupt status */
+/* Bit     2 RW hpd_fall */
+/* Bit     1 RW hpd_rise */
+/* Bit     0 RW IP interrupt */
+#define HDMITX_TOP_INTR_STAT                    (TOP_OFFSET_MASK + 0x004)
+
+/* [4]	  hdcp22_rndnum_err */
+/* [3]	  nonce_rfrsh_rise */
+/* [2]	  hpd_fall */
+/* [1]	  hpd_rise */
+/* [0]	  core_intr_rise */
+#define HDMITX_TOP_INTR_STAT_CLR                (TOP_OFFSET_MASK + 0x005)
+
+/* Bit 14:12 RW tmds_sel: 3'b000=Output zero; 3'b001=Output normal TMDS data;
+ *     3'b010=Output PRBS data; 3'b100=Output shift pattern.         Default 0.
+ * Bit 11: 9 RW shift_pttn_repeat: 0=New pattern every clk cycle; 1=New pattern
+ *     every 2 clk cycles; ...; 7=New pattern every 8 clk cycles.  Default 0.
+ * Bit 8 RW shift_pttn_en: 1= Eanble shift pattern generator; 0=Disable.
+ *     Default 0.
+ * Bit 4: 3 RW prbs_pttn_mode: 0=PRBS11; 1=PRBS15; 2=PRBS7; 3=PRBS31. Default 0.
+ * Bit 2: 1 RW prbs_pttn_width: 0=idle; 1=output 8-bit pattern;
+ *     2=Output 1-bit pattern; 3=output 10-bit pattern. Default 0.
+ * Bit 0 RW prbs_pttn_en: 1=Enable PRBS generator; 0=Disable. Default 0.
+ */
+#define HDMITX_TOP_BIST_CNTL                    (TOP_OFFSET_MASK + 0x006)
+
+/* Bit 29:20 RW shift_pttn_data[59:50]. Default 0. */
+/* Bit 19:10 RW shift_pttn_data[69:60]. Default 0. */
+/* Bit  9: 0 RW shift_pttn_data[79:70]. Default 0. */
+#define HDMITX_TOP_SHIFT_PTTN_012               (TOP_OFFSET_MASK + 0x007)
+
+/* Bit 29:20 RW shift_pttn_data[29:20]. Default 0. */
+/* Bit 19:10 RW shift_pttn_data[39:30]. Default 0. */
+/* Bit  9: 0 RW shift_pttn_data[49:40]. Default 0. */
+#define HDMITX_TOP_SHIFT_PTTN_345               (TOP_OFFSET_MASK + 0x008)
+
+/* Bit 19:10 RW shift_pttn_data[ 9: 0]. Default 0. */
+/* Bit  9: 0 RW shift_pttn_data[19:10]. Default 0. */
+#define HDMITX_TOP_SHIFT_PTTN_67                (TOP_OFFSET_MASK + 0x009)
+
+/* Bit 25:16 RW tmds_clk_pttn[19:10]. Default 0. */
+/* Bit  9: 0 RW tmds_clk_pttn[ 9: 0]. Default 0. */
+#define HDMITX_TOP_TMDS_CLK_PTTN_01             (TOP_OFFSET_MASK + 0x00A)
+
+/* Bit 25:16 RW tmds_clk_pttn[39:30]. Default 0. */
+/* Bit  9: 0 RW tmds_clk_pttn[29:20]. Default 0. */
+#define HDMITX_TOP_TMDS_CLK_PTTN_23             (TOP_OFFSET_MASK + 0x00B)
+
+/* Bit 1 RW shift_tmds_clk_pttn:1=Enable shifting clk pattern,
+ * used when TMDS CLK rate = TMDS character rate /4.    Default 0.
+ * Bit 0 R  Reserved. Default 0.
+ */
+/* [	1] shift_tmds_clk_pttn */
+/* [	0] load_tmds_clk_pttn */
+#define HDMITX_TOP_TMDS_CLK_PTTN_CNTL           (TOP_OFFSET_MASK + 0x00C)
+
+/* Bit 0 RW revocmem_wr_fail: Read back 1 to indicate Host write REVOC MEM
+ * failure, write 1 to clear the failure flag.  Default 0.
+ */
+#define HDMITX_TOP_REVOCMEM_STAT                (TOP_OFFSET_MASK + 0x00D)
+
+/* Bit     0 R  filtered HPD status. */
+#define HDMITX_TOP_STAT0                        (TOP_OFFSET_MASK + 0x00E)
+#define HDMITX_TOP_SKP_CNTL_STAT                (TOP_SEC_OFFSET_MASK + 0x010)
+#define HDMITX_TOP_NONCE_0                      (TOP_SEC_OFFSET_MASK + 0x011)
+#define HDMITX_TOP_NONCE_1                      (TOP_SEC_OFFSET_MASK + 0x012)
+#define HDMITX_TOP_NONCE_2                      (TOP_SEC_OFFSET_MASK + 0x013)
+#define HDMITX_TOP_NONCE_3                      (TOP_SEC_OFFSET_MASK + 0x014)
+#define HDMITX_TOP_PKF_0                        (TOP_SEC_OFFSET_MASK + 0x015)
+#define HDMITX_TOP_PKF_1                        (TOP_SEC_OFFSET_MASK + 0x016)
+#define HDMITX_TOP_PKF_2                        (TOP_SEC_OFFSET_MASK + 0x017)
+#define HDMITX_TOP_PKF_3                        (TOP_SEC_OFFSET_MASK + 0x018)
+#define HDMITX_TOP_DUK_0                        (TOP_SEC_OFFSET_MASK + 0x019)
+#define HDMITX_TOP_DUK_1                        (TOP_SEC_OFFSET_MASK + 0x01A)
+#define HDMITX_TOP_DUK_2                        (TOP_SEC_OFFSET_MASK + 0x01B)
+#define HDMITX_TOP_DUK_3                        (TOP_SEC_OFFSET_MASK + 0x01C)
+/* [26:24] infilter_ddc_intern_clk_divide */
+/* [23:16] infilter_ddc_sample_clk_divide */
+/* [10: 8] infilter_cec_intern_clk_divide */
+/* [ 7: 0] infilter_cec_sample_clk_divide */
+#define HDMITX_TOP_INFILTER                     (TOP_OFFSET_MASK + 0x01D)
+#define HDMITX_TOP_NSEC_SCRATCH                 (TOP_OFFSET_MASK + 0x01E)
+#define HDMITX_TOP_SEC_SCRATCH                  (TOP_SEC_OFFSET_MASK + 0x01F)
+#define HDMITX_TOP_EMP_CNTL0                  (TOP_OFFSET_MASK + 0x020)
+#define HDMITX_TOP_EMP_CNTL1                  (TOP_OFFSET_MASK + 0x021)
+#define HDMITX_TOP_EMP_MEMADDR_START                  (TOP_OFFSET_MASK + 0x022)
+#define HDMITX_TOP_EMP_STAT0                  (TOP_OFFSET_MASK + 0x023)
+#define HDMITX_TOP_EMP_STAT1                  (TOP_OFFSET_MASK + 0x024)
+#define HDMITX_TOP_AXI_ASYNC_CNTL0                  (TOP_OFFSET_MASK + 0x025)
+#define HDMITX_TOP_AXI_ASYNC_CNTL1                  (TOP_OFFSET_MASK + 0x026)
+#define HDMITX_TOP_AXI_ASYNC_STAT0                  (TOP_OFFSET_MASK + 0x027)
+#define HDMITX_TOP_I2C_BUSY_CNT_MAX                  (TOP_OFFSET_MASK + 0x028)
+#define HDMITX_TOP_I2C_BUSY_CNT_STAT                  (TOP_OFFSET_MASK + 0x029)
+#define HDMITX_TOP_HDCP22_BSOD                  (TOP_OFFSET_MASK + 0x02A)
+#define HDMITX_TOP_DDC_CNTL                  (TOP_OFFSET_MASK + 0x02B)
+#define HDMITX_TOP_REVOCMEM_ADDR_S                  (TOP_OFFSET_MASK + 0x2000 >> 2)
+#define HDMITX_TOP_REVOCMEM_ADDR_E                  (TOP_OFFSET_MASK + 0x365E >> 2)
+
+#define HDMITX_TOP_DONT_TOUCH0                  (TOP_OFFSET_MASK + 0x0FE)
+#define HDMITX_TOP_DONT_TOUCH1                  (TOP_OFFSET_MASK + 0x0FF)
+
+/* DWC_HDMI_TX Controller registers addresses */
+
+/* Identification Registers */
+#define HDMITX_DWC_DESIGN_ID                    (DWC_OFFSET_MASK + 0x0000)
+#define HDMITX_DWC_REVISION_ID                  (DWC_OFFSET_MASK + 0x0001)
+#define HDMITX_DWC_PRODUCT_ID0                  (DWC_OFFSET_MASK + 0x0002)
+#define HDMITX_DWC_PRODUCT_ID1                  (DWC_OFFSET_MASK + 0x0003)
+#define HDMITX_DWC_CONFIG0_ID                   (DWC_OFFSET_MASK + 0x0004)
+#define HDMITX_DWC_CONFIG1_ID                   (DWC_OFFSET_MASK + 0x0005)
+#define HDMITX_DWC_CONFIG2_ID                   (DWC_OFFSET_MASK + 0x0006)
+#define HDMITX_DWC_CONFIG3_ID                   (DWC_OFFSET_MASK + 0x0007)
+
+/* Interrupt Registers */
+#define HDMITX_DWC_IH_FC_STAT0                  (DWC_OFFSET_MASK + 0x0100)
+#define HDMITX_DWC_IH_FC_STAT1                  (DWC_OFFSET_MASK + 0x0101)
+#define HDMITX_DWC_IH_FC_STAT2                  (DWC_OFFSET_MASK + 0x0102)
+#define HDMITX_DWC_IH_AS_STAT0                  (DWC_OFFSET_MASK + 0x0103)
+#define HDMITX_DWC_IH_PHY_STAT0                 (DWC_OFFSET_MASK + 0x0104)
+#define HDMITX_DWC_IH_I2CM_STAT0                (DWC_OFFSET_MASK + 0x0105)
+#define HDMITX_DWC_IH_CEC_STAT0                 (DWC_OFFSET_MASK + 0x0106)
+#define HDMITX_DWC_IH_VP_STAT0                  (DWC_OFFSET_MASK + 0x0107)
+#define HDMITX_DWC_IH_I2CMPHY_STAT0             (DWC_OFFSET_MASK + 0x0108)
+#define HDMITX_DWC_IH_DECODE                    (DWC_OFFSET_MASK + 0x0170)
+/* [  7] mute_AUDI */
+/* [  6] mute_ACP */
+/* [  5] mute_HBR */
+/* [  4] mute_MAS */
+/* [  3] mute_NVBI */
+/* [  2] mute_AUDS */
+/* [  1] mute_ACR */
+/* [  0] mute_NULL */
+#define HDMITX_DWC_IH_MUTE_FC_STAT0             (DWC_OFFSET_MASK + 0x0180)
+/* [  7] mute_GMD */
+/* [  6] mute_ISRC1 */
+/* [  5] mute_ISRC2 */
+/* [  4] mute_VSD */
+/* [  3] mute_SPD */
+/* [  2] mute_AMP */
+/* [  1] mute_AVI */
+/* [  0] mute_GCP */
+#define HDMITX_DWC_IH_MUTE_FC_STAT1             (DWC_OFFSET_MASK + 0x0181)
+/* [  1] mute_LowPriority_fifo_full */
+/* [  0] mute_HighPriority_fifo_full */
+#define HDMITX_DWC_IH_MUTE_FC_STAT2             (DWC_OFFSET_MASK + 0x0182)
+/* [  4] mute_aud_fifo_underrun */
+/* [  3] mute_aud_fifo_overrun */
+/* [  2] mute_aud_fifo_empty_thr. oififoemptythr tied to 0. */
+/* [  1] mute_aud_fifo_empty */
+/* [  0] mute_aud_fifo_full */
+#define HDMITX_DWC_IH_MUTE_AS_STAT0             (DWC_OFFSET_MASK + 0x0183)
+#define HDMITX_DWC_IH_MUTE_PHY_STAT0            (DWC_OFFSET_MASK + 0x0184)
+/* [  2] mute_scdc_readreq */
+/* [  1] mute_edid_i2c_master_done */
+/* [  0] mute_edid_i2c_master_error */
+#define HDMITX_DWC_IH_MUTE_I2CM_STAT0           (DWC_OFFSET_MASK + 0x0185)
+/* [  6] cec_wakeup */
+/* [  5] cec_error_follower */
+/* [  4] cec_error_initiator */
+/* [  3] cec_arb_lost */
+/* [  2] cec_nack */
+/* [  1] cec_eom */
+/* [  0] cec_done */
+#define HDMITX_DWC_IH_MUTE_CEC_STAT0            (DWC_OFFSET_MASK + 0x0186)
+#define HDMITX_DWC_IH_MUTE_VP_STAT0             (DWC_OFFSET_MASK + 0x0187)
+#define HDMITX_DWC_IH_MUTE_I2CMPHY_STAT0        (DWC_OFFSET_MASK + 0x0188)
+/* [  1] mute_wakeup_interrupt */
+/* [  0] mute_all_interrupt */
+#define HDMITX_DWC_IH_MUTE                      (DWC_OFFSET_MASK + 0x01FF)
+
+/* Video Sampler Registers */
+/* [  7] internal_de_generator */
+/* [4:0] video_mapping */
+#define HDMITX_DWC_TX_INVID0                    (DWC_OFFSET_MASK + 0x0200)
+/* [  2] bcbdata_stuffing */
+/* [  1] rcrdata_stuffing */
+/* [  0] gydata_stuffing */
+#define HDMITX_DWC_TX_INSTUFFING                (DWC_OFFSET_MASK + 0x0201)
+#define HDMITX_DWC_TX_GYDATA0                   (DWC_OFFSET_MASK + 0x0202)
+#define HDMITX_DWC_TX_GYDATA1                   (DWC_OFFSET_MASK + 0x0203)
+#define HDMITX_DWC_TX_RCRDATA0                  (DWC_OFFSET_MASK + 0x0204)
+#define HDMITX_DWC_TX_RCRDATA1                  (DWC_OFFSET_MASK + 0x0205)
+#define HDMITX_DWC_TX_BCBDATA0                  (DWC_OFFSET_MASK + 0x0206)
+#define HDMITX_DWC_TX_BCBDATA1                  (DWC_OFFSET_MASK + 0x0207)
+
+/* Video Packetizer Registers */
+#define HDMITX_DWC_VP_STATUS                    (DWC_OFFSET_MASK + 0x0800)
+/* [3:0] desired_pr_factor */
+#define HDMITX_DWC_VP_PR_CD                     (DWC_OFFSET_MASK + 0x0801)
+/* [  5] default_phase */
+/* [  2] ycc422_stuffing */
+/* [  1] pp_stuffing */
+/* [  0] pr_stuffing */
+#define HDMITX_DWC_VP_STUFF                     (DWC_OFFSET_MASK + 0x0802)
+#define HDMITX_DWC_VP_REMAP                     (DWC_OFFSET_MASK + 0x0803)
+#define HDMITX_DWC_VP_CONF                      (DWC_OFFSET_MASK + 0x0804)
+/* [  7] mask_int_full_prpt */
+/* [  6] mask_int_empty_prpt */
+/* [  5] mask_int_full_ppack */
+/* [  4] mask_int_empty_ppack */
+/* [  3] mask_int_full_remap */
+/* [  2] mask_int_empty_remap */
+/* [  1] mask_int_full_byp */
+/* [  0] mask_int_empty_byp */
+#define HDMITX_DWC_VP_MASK                      (DWC_OFFSET_MASK + 0x0807)
+
+/* Frmae Composer Registers */
+/* [  7] HDCP_keepout */
+/* [  6] vs_in_pol: 0=active low; 1=active high. */
+/* [  5] hs_in_pol: 0=active low; 1=active high. */
+/* [  4] de_in_pol: 0=active low; 1=active high. */
+/* [  3] dvi_modez: 0=dvi; 1=hdmi. */
+/* [  1] r_v_blank_in_osc */
+/* [  0] in_I_P: 0=progressive; 1=interlaced. */
+#define HDMITX_DWC_FC_INVIDCONF                 (DWC_OFFSET_MASK + 0x1000)
+/* [7:0] H_in_active[7:0] */
+#define HDMITX_DWC_FC_INHACTV0                  (DWC_OFFSET_MASK + 0x1001)
+/* [5:0] H_in_active[13:8] */
+#define HDMITX_DWC_FC_INHACTV1                  (DWC_OFFSET_MASK + 0x1002)
+/* [7:0] H_in_blank[7:0] */
+#define HDMITX_DWC_FC_INHBLANK0                 (DWC_OFFSET_MASK + 0x1003)
+/* [4:0] H_in_blank[12:8] */
+#define HDMITX_DWC_FC_INHBLANK1                 (DWC_OFFSET_MASK + 0x1004)
+/* [7:0] V_in_active[7:0] */
+#define HDMITX_DWC_FC_INVACTV0                  (DWC_OFFSET_MASK + 0x1005)
+/* [4:0] V_in_active[12:8] */
+#define HDMITX_DWC_FC_INVACTV1                  (DWC_OFFSET_MASK + 0x1006)
+/* [7:0] V_in_blank */
+#define HDMITX_DWC_FC_INVBLANK                  (DWC_OFFSET_MASK + 0x1007)
+/* [7:0] H_in_delay[7:0] */
+#define HDMITX_DWC_FC_HSYNCINDELAY0             (DWC_OFFSET_MASK + 0x1008)
+/* [4:0] H_in_delay[12:8] */
+#define HDMITX_DWC_FC_HSYNCINDELAY1             (DWC_OFFSET_MASK + 0x1009)
+/* [7:0] H_in_width[7:0] */
+#define HDMITX_DWC_FC_HSYNCINWIDTH0             (DWC_OFFSET_MASK + 0x100A)
+/* [1:0] H_in_width[9:8] */
+#define HDMITX_DWC_FC_HSYNCINWIDTH1             (DWC_OFFSET_MASK + 0x100B)
+/* [7:0] V_in_delay */
+#define HDMITX_DWC_FC_VSYNCINDELAY              (DWC_OFFSET_MASK + 0x100C)
+/* [5:0] V_in_width */
+#define HDMITX_DWC_FC_VSYNCINWIDTH              (DWC_OFFSET_MASK + 0x100D)
+#define HDMITX_DWC_FC_INFREQ0                   (DWC_OFFSET_MASK + 0x100E)
+#define HDMITX_DWC_FC_INFREQ1                   (DWC_OFFSET_MASK + 0x100F)
+#define HDMITX_DWC_FC_INFREQ2                   (DWC_OFFSET_MASK + 0x1010)
+#define HDMITX_DWC_FC_CTRLDUR                   (DWC_OFFSET_MASK + 0x1011)
+#define HDMITX_DWC_FC_EXCTRLDUR                 (DWC_OFFSET_MASK + 0x1012)
+#define HDMITX_DWC_FC_EXCTRLSPAC                (DWC_OFFSET_MASK + 0x1013)
+#define HDMITX_DWC_FC_CH0PREAM                  (DWC_OFFSET_MASK + 0x1014)
+#define HDMITX_DWC_FC_CH1PREAM                  (DWC_OFFSET_MASK + 0x1015)
+#define HDMITX_DWC_FC_CH2PREAM                  (DWC_OFFSET_MASK + 0x1016)
+/* [3:2] YQ */
+/* [1:0] CN */
+#define HDMITX_DWC_FC_AVICONF3                  (DWC_OFFSET_MASK + 0x1017)
+/* [  2] default_phase */
+/* [  1] set_avmute */
+/* [  0] clear_avmute */
+#define HDMITX_DWC_FC_GCP                       (DWC_OFFSET_MASK + 0x1018)
+/* [  7] rgb_ycc_indication[2] */
+/* [  6] active_format_present */
+/* [5:4] scan_information */
+/* [3:2] bar_information */
+/* [1:0] rgb_ycc_indication[1:0] */
+#define HDMITX_DWC_FC_AVICONF0                  (DWC_OFFSET_MASK + 0x1019)
+/* [7:6] colorimetry */
+/* [5:4] picture_aspect_ratio */
+/* [3:0] active_aspect_ratio */
+#define HDMITX_DWC_FC_AVICONF1                  (DWC_OFFSET_MASK + 0x101A)
+/* [  7] IT_content */
+/* [6:4] extended_colorimetry */
+/* [3:2] quantization_range */
+/* [1:0] non_uniform_picture_scaling */
+#define HDMITX_DWC_FC_AVICONF2                  (DWC_OFFSET_MASK + 0x101B)
+#define HDMITX_DWC_FC_AVIVID                    (DWC_OFFSET_MASK + 0x101C)
+#define HDMITX_DWC_FC_AVIETB0                   (DWC_OFFSET_MASK + 0x101D)
+#define HDMITX_DWC_FC_AVIETB1                   (DWC_OFFSET_MASK + 0x101E)
+#define HDMITX_DWC_FC_AVISBB0                   (DWC_OFFSET_MASK + 0x101F)
+#define HDMITX_DWC_FC_AVISBB1                   (DWC_OFFSET_MASK + 0x1020)
+#define HDMITX_DWC_FC_AVIELB0                   (DWC_OFFSET_MASK + 0x1021)
+#define HDMITX_DWC_FC_AVIELB1                   (DWC_OFFSET_MASK + 0x1022)
+#define HDMITX_DWC_FC_AVISRB0                   (DWC_OFFSET_MASK + 0x1023)
+#define HDMITX_DWC_FC_AVISRB1                   (DWC_OFFSET_MASK + 0x1024)
+/* [3:0] CT: coding type */
+#define HDMITX_DWC_FC_AUDICONF0                 (DWC_OFFSET_MASK + 0x1025)
+/* [5:4] SS: sampling size */
+/* [2:0] SF: sampling frequency */
+#define HDMITX_DWC_FC_AUDICONF1                 (DWC_OFFSET_MASK + 0x1026)
+/* CA: channel allocation */
+#define HDMITX_DWC_FC_AUDICONF2                 (DWC_OFFSET_MASK + 0x1027)
+/* [6:5] LFEPBL: LFE playback info */
+/* [  4] DM_INH: down mix enable */
+/* [3:0] LSv: Level shift value */
+#define HDMITX_DWC_FC_AUDICONF3                 (DWC_OFFSET_MASK + 0x1028)
+#define HDMITX_DWC_FC_VSDIEEEID0                (DWC_OFFSET_MASK + 0x1029)
+#define HDMITX_DWC_FC_VSDSIZE                   (DWC_OFFSET_MASK + 0x102A)
+#define HDMITX_DWC_FC_VSDIEEEID1                (DWC_OFFSET_MASK + 0x1030)
+#define HDMITX_DWC_FC_VSDIEEEID2                (DWC_OFFSET_MASK + 0x1031)
+#define HDMITX_DWC_FC_VSDPAYLOAD0               (DWC_OFFSET_MASK + 0x1032)
+#define HDMITX_DWC_FC_VSDPAYLOAD1               (DWC_OFFSET_MASK + 0x1033)
+#define HDMITX_DWC_FC_VSDPAYLOAD2               (DWC_OFFSET_MASK + 0x1034)
+#define HDMITX_DWC_FC_VSDPAYLOAD3               (DWC_OFFSET_MASK + 0x1035)
+#define HDMITX_DWC_FC_VSDPAYLOAD4               (DWC_OFFSET_MASK + 0x1036)
+#define HDMITX_DWC_FC_VSDPAYLOAD5               (DWC_OFFSET_MASK + 0x1037)
+#define HDMITX_DWC_FC_VSDPAYLOAD6               (DWC_OFFSET_MASK + 0x1038)
+#define HDMITX_DWC_FC_VSDPAYLOAD7               (DWC_OFFSET_MASK + 0x1039)
+#define HDMITX_DWC_FC_VSDPAYLOAD8               (DWC_OFFSET_MASK + 0x103A)
+#define HDMITX_DWC_FC_VSDPAYLOAD9               (DWC_OFFSET_MASK + 0x103B)
+#define HDMITX_DWC_FC_VSDPAYLOAD10              (DWC_OFFSET_MASK + 0x103C)
+#define HDMITX_DWC_FC_VSDPAYLOAD11              (DWC_OFFSET_MASK + 0x103D)
+#define HDMITX_DWC_FC_VSDPAYLOAD12              (DWC_OFFSET_MASK + 0x103E)
+#define HDMITX_DWC_FC_VSDPAYLOAD13              (DWC_OFFSET_MASK + 0x103F)
+#define HDMITX_DWC_FC_VSDPAYLOAD14              (DWC_OFFSET_MASK + 0x1040)
+#define HDMITX_DWC_FC_VSDPAYLOAD15              (DWC_OFFSET_MASK + 0x1041)
+#define HDMITX_DWC_FC_VSDPAYLOAD16              (DWC_OFFSET_MASK + 0x1042)
+#define HDMITX_DWC_FC_VSDPAYLOAD17              (DWC_OFFSET_MASK + 0x1043)
+#define HDMITX_DWC_FC_VSDPAYLOAD18              (DWC_OFFSET_MASK + 0x1044)
+#define HDMITX_DWC_FC_VSDPAYLOAD19              (DWC_OFFSET_MASK + 0x1045)
+#define HDMITX_DWC_FC_VSDPAYLOAD20              (DWC_OFFSET_MASK + 0x1046)
+#define HDMITX_DWC_FC_VSDPAYLOAD21              (DWC_OFFSET_MASK + 0x1047)
+#define HDMITX_DWC_FC_VSDPAYLOAD22              (DWC_OFFSET_MASK + 0x1048)
+#define HDMITX_DWC_FC_VSDPAYLOAD23              (DWC_OFFSET_MASK + 0x1049)
+#define HDMITX_DWC_FC_SPDVENDORNAME0            (DWC_OFFSET_MASK + 0x104A)
+#define HDMITX_DWC_FC_SPDVENDORNAME1            (DWC_OFFSET_MASK + 0x104B)
+#define HDMITX_DWC_FC_SPDVENDORNAME2            (DWC_OFFSET_MASK + 0x104C)
+#define HDMITX_DWC_FC_SPDVENDORNAME3            (DWC_OFFSET_MASK + 0x104D)
+#define HDMITX_DWC_FC_SPDVENDORNAME4            (DWC_OFFSET_MASK + 0x104E)
+#define HDMITX_DWC_FC_SPDVENDORNAME5            (DWC_OFFSET_MASK + 0x104F)
+#define HDMITX_DWC_FC_SPDVENDORNAME6            (DWC_OFFSET_MASK + 0x1050)
+#define HDMITX_DWC_FC_SPDVENDORNAME7            (DWC_OFFSET_MASK + 0x1051)
+#define HDMITX_DWC_FC_SDPPRODUCTNAME0           (DWC_OFFSET_MASK + 0x1052)
+#define HDMITX_DWC_FC_SDPPRODUCTNAME1           (DWC_OFFSET_MASK + 0x1053)
+#define HDMITX_DWC_FC_SDPPRODUCTNAME2           (DWC_OFFSET_MASK + 0x1054)
+#define HDMITX_DWC_FC_SDPPRODUCTNAME3           (DWC_OFFSET_MASK + 0x1055)
+#define HDMITX_DWC_FC_SDPPRODUCTNAME4           (DWC_OFFSET_MASK + 0x1056)
+#define HDMITX_DWC_FC_SDPPRODUCTNAME5           (DWC_OFFSET_MASK + 0x1057)
+#define HDMITX_DWC_FC_SDPPRODUCTNAME6           (DWC_OFFSET_MASK + 0x1058)
+#define HDMITX_DWC_FC_SDPPRODUCTNAME7           (DWC_OFFSET_MASK + 0x1059)
+#define HDMITX_DWC_FC_SDPPRODUCTNAME8           (DWC_OFFSET_MASK + 0x105A)
+#define HDMITX_DWC_FC_SDPPRODUCTNAME9           (DWC_OFFSET_MASK + 0x105B)
+#define HDMITX_DWC_FC_SDPPRODUCTNAME10          (DWC_OFFSET_MASK + 0x105C)
+#define HDMITX_DWC_FC_SDPPRODUCTNAME11          (DWC_OFFSET_MASK + 0x105D)
+#define HDMITX_DWC_FC_SDPPRODUCTNAME12          (DWC_OFFSET_MASK + 0x105E)
+#define HDMITX_DWC_FC_SDPPRODUCTNAME13          (DWC_OFFSET_MASK + 0x105F)
+#define HDMITX_DWC_FC_SDPPRODUCTNAME14          (DWC_OFFSET_MASK + 0x1060)
+#define HDMITX_DWC_FC_SPDPRODUCTNAME15          (DWC_OFFSET_MASK + 0x1061)
+#define HDMITX_DWC_FC_SPDDEVICEINF              (DWC_OFFSET_MASK + 0x1062)
+/* [7:4] aud_packet_sampflat */
+/* [  0] aud_packet_layout */
+#define HDMITX_DWC_FC_AUDSCONF                  (DWC_OFFSET_MASK + 0x1063)
+#define HDMITX_DWC_FC_AUDSSTAT                  (DWC_OFFSET_MASK + 0x1064)
+/* [  7] V3r */
+/* [  6] V2r */
+/* [  5] V1r */
+/* [  4] V0r */
+/* [  3] V3l */
+/* [  2] V2l */
+/* [  1] V1l */
+/* [  0] V0l */
+#define HDMITX_DWC_FC_AUDSV                     (DWC_OFFSET_MASK + 0x1065)
+#define HDMITX_DWC_FC_AUDSU                     (DWC_OFFSET_MASK + 0x1066)
+#define HDMITX_DWC_FC_AUDSCHNLS0                (DWC_OFFSET_MASK + 0x1067)
+#define HDMITX_DWC_FC_AUDSCHNLS1                (DWC_OFFSET_MASK + 0x1068)
+#define HDMITX_DWC_FC_AUDSCHNLS2                (DWC_OFFSET_MASK + 0x1069)
+#define HDMITX_DWC_FC_AUDSCHNLS3                (DWC_OFFSET_MASK + 0x106A)
+#define HDMITX_DWC_FC_AUDSCHNLS4                (DWC_OFFSET_MASK + 0x106B)
+#define HDMITX_DWC_FC_AUDSCHNLS5                (DWC_OFFSET_MASK + 0x106C)
+#define HDMITX_DWC_FC_AUDSCHNLS6                (DWC_OFFSET_MASK + 0x106D)
+#define HDMITX_DWC_FC_AUDSCHNLS7                (DWC_OFFSET_MASK + 0x106E)
+#define HDMITX_DWC_FC_AUDSCHNLS8                (DWC_OFFSET_MASK + 0x106F)
+#define HDMITX_DWC_FC_DATACH0FILL               (DWC_OFFSET_MASK + 0x1070)
+#define HDMITX_DWC_FC_DATACH1FILL               (DWC_OFFSET_MASK + 0x1071)
+#define HDMITX_DWC_FC_DATACH2FILL               (DWC_OFFSET_MASK + 0x1072)
+#define HDMITX_DWC_FC_CTRLQHIGH                 (DWC_OFFSET_MASK + 0x1073)
+#define HDMITX_DWC_FC_CTRLQLOW                  (DWC_OFFSET_MASK + 0x1074)
+#define HDMITX_DWC_FC_ACP0                      (DWC_OFFSET_MASK + 0x1075)
+#define HDMITX_DWC_FC_ACP16                     (DWC_OFFSET_MASK + 0x1082)
+#define HDMITX_DWC_FC_ACP15                     (DWC_OFFSET_MASK + 0x1083)
+#define HDMITX_DWC_FC_ACP14                     (DWC_OFFSET_MASK + 0x1084)
+#define HDMITX_DWC_FC_ACP13                     (DWC_OFFSET_MASK + 0x1085)
+#define HDMITX_DWC_FC_ACP12                     (DWC_OFFSET_MASK + 0x1086)
+#define HDMITX_DWC_FC_ACP11                     (DWC_OFFSET_MASK + 0x1087)
+#define HDMITX_DWC_FC_ACP10                     (DWC_OFFSET_MASK + 0x1088)
+#define HDMITX_DWC_FC_ACP9                      (DWC_OFFSET_MASK + 0x1089)
+#define HDMITX_DWC_FC_ACP8                      (DWC_OFFSET_MASK + 0x108A)
+#define HDMITX_DWC_FC_ACP7                      (DWC_OFFSET_MASK + 0x108B)
+#define HDMITX_DWC_FC_ACP6                      (DWC_OFFSET_MASK + 0x108C)
+#define HDMITX_DWC_FC_ACP5                      (DWC_OFFSET_MASK + 0x108D)
+#define HDMITX_DWC_FC_ACP4                      (DWC_OFFSET_MASK + 0x108E)
+#define HDMITX_DWC_FC_ACP3                      (DWC_OFFSET_MASK + 0x108F)
+#define HDMITX_DWC_FC_ACP2                      (DWC_OFFSET_MASK + 0x1090)
+#define HDMITX_DWC_FC_ACP1                      (DWC_OFFSET_MASK + 0x1091)
+#define HDMITX_DWC_FC_ISCR1_0                   (DWC_OFFSET_MASK + 0x1092)
+#define HDMITX_DWC_FC_ISCR1_16                  (DWC_OFFSET_MASK + 0x1093)
+#define HDMITX_DWC_FC_ISCR1_15                  (DWC_OFFSET_MASK + 0x1094)
+#define HDMITX_DWC_FC_ISCR1_14                  (DWC_OFFSET_MASK + 0x1095)
+#define HDMITX_DWC_FC_ISCR1_13                  (DWC_OFFSET_MASK + 0x1096)
+#define HDMITX_DWC_FC_ISCR1_12                  (DWC_OFFSET_MASK + 0x1097)
+#define HDMITX_DWC_FC_ISCR1_11                  (DWC_OFFSET_MASK + 0x1098)
+#define HDMITX_DWC_FC_ISCR1_10                  (DWC_OFFSET_MASK + 0x1099)
+#define HDMITX_DWC_FC_ISCR1_9                   (DWC_OFFSET_MASK + 0x109A)
+#define HDMITX_DWC_FC_ISCR1_8                   (DWC_OFFSET_MASK + 0x109B)
+#define HDMITX_DWC_FC_ISCR1_7                   (DWC_OFFSET_MASK + 0x109C)
+#define HDMITX_DWC_FC_ISCR1_6                   (DWC_OFFSET_MASK + 0x109D)
+#define HDMITX_DWC_FC_ISCR1_5                   (DWC_OFFSET_MASK + 0x109E)
+#define HDMITX_DWC_FC_ISCR1_4                   (DWC_OFFSET_MASK + 0x109F)
+#define HDMITX_DWC_FC_ISCR1_3                   (DWC_OFFSET_MASK + 0x10A0)
+#define HDMITX_DWC_FC_ISCR1_2                   (DWC_OFFSET_MASK + 0x10A1)
+#define HDMITX_DWC_FC_ISCR1_1                   (DWC_OFFSET_MASK + 0x10A2)
+#define HDMITX_DWC_FC_ISCR0_15                  (DWC_OFFSET_MASK + 0x10A3)
+#define HDMITX_DWC_FC_ISCR0_14                  (DWC_OFFSET_MASK + 0x10A4)
+#define HDMITX_DWC_FC_ISCR0_13                  (DWC_OFFSET_MASK + 0x10A5)
+#define HDMITX_DWC_FC_ISCR0_12                  (DWC_OFFSET_MASK + 0x10A6)
+#define HDMITX_DWC_FC_ISCR0_11                  (DWC_OFFSET_MASK + 0x10A7)
+#define HDMITX_DWC_FC_ISCR0_10                  (DWC_OFFSET_MASK + 0x10A8)
+#define HDMITX_DWC_FC_ISCR0_9                   (DWC_OFFSET_MASK + 0x10A9)
+#define HDMITX_DWC_FC_ISCR0_8                   (DWC_OFFSET_MASK + 0x10AA)
+#define HDMITX_DWC_FC_ISCR0_7                   (DWC_OFFSET_MASK + 0x10AB)
+#define HDMITX_DWC_FC_ISCR0_6                   (DWC_OFFSET_MASK + 0x10AC)
+#define HDMITX_DWC_FC_ISCR0_5                   (DWC_OFFSET_MASK + 0x10AD)
+#define HDMITX_DWC_FC_ISCR0_4                   (DWC_OFFSET_MASK + 0x10AE)
+#define HDMITX_DWC_FC_ISCR0_3                   (DWC_OFFSET_MASK + 0x10AF)
+#define HDMITX_DWC_FC_ISCR0_2                   (DWC_OFFSET_MASK + 0x10B0)
+#define HDMITX_DWC_FC_ISCR0_1                   (DWC_OFFSET_MASK + 0x10B1)
+#define HDMITX_DWC_FC_ISCR0_0                   (DWC_OFFSET_MASK + 0x10B2)
+/* [  4] spd_auto */
+/* [  3] vsd_auto */
+/* [  2] isrc2_auto */
+/* [  1] isrc1_auto */
+/* [  0] acp_auto */
+#define HDMITX_DWC_FC_DATAUTO0                  (DWC_OFFSET_MASK + 0x10B3)
+#define HDMITX_DWC_FC_DATAUTO1                  (DWC_OFFSET_MASK + 0x10B4)
+#define HDMITX_DWC_FC_DATAUTO2                  (DWC_OFFSET_MASK + 0x10B5)
+#define HDMITX_DWC_FC_DATMAN                    (DWC_OFFSET_MASK + 0x10B6)
+/* [  5] nvbi_auto: insert on Vsync */
+/* [  4] amp_auto: insert on Vsync */
+/* [  3] avi_auto: insert on Vsync */
+/* [  2] gcp_auto: insert on Vsync */
+/* [  1] audi_auto: insert on Vsync */
+/* [  0] acr_auto: insert on CTS update. Assert this bit later to avoid
+ * inital packets with false CTS value
+ */
+#define HDMITX_DWC_FC_DATAUTO3                  (DWC_OFFSET_MASK + 0x10B7)
+#define HDMITX_DWC_FC_RDRB0                     (DWC_OFFSET_MASK + 0x10B8)
+#define HDMITX_DWC_FC_RDRB1                     (DWC_OFFSET_MASK + 0x10B9)
+#define HDMITX_DWC_FC_RDRB2                     (DWC_OFFSET_MASK + 0x10BA)
+#define HDMITX_DWC_FC_RDRB3                     (DWC_OFFSET_MASK + 0x10BB)
+#define HDMITX_DWC_FC_RDRB4                     (DWC_OFFSET_MASK + 0x10BC)
+#define HDMITX_DWC_FC_RDRB5                     (DWC_OFFSET_MASK + 0x10BD)
+#define HDMITX_DWC_FC_RDRB6                     (DWC_OFFSET_MASK + 0x10BE)
+#define HDMITX_DWC_FC_RDRB7                     (DWC_OFFSET_MASK + 0x10BF)
+#define HDMITX_DWC_FC_RDRB8                     (DWC_OFFSET_MASK + 0x10C0)
+#define HDMITX_DWC_FC_RDRB9                     (DWC_OFFSET_MASK + 0x10C1)
+#define HDMITX_DWC_FC_RDRB10                    (DWC_OFFSET_MASK + 0x10C2)
+#define HDMITX_DWC_FC_RDRB11                    (DWC_OFFSET_MASK + 0x10C3)
+/* [  7] AUDI_int_mask */
+/* [  6] ACP_int_mask */
+/* [  5] HBR_int_mask */
+/* [  2] AUDS_int_mask */
+/* [  1] ACR_int_mask */
+/* [  0] NULL_int_mask */
+#define HDMITX_DWC_FC_MASK0                     (DWC_OFFSET_MASK + 0x10D2)
+/* [  7] GMD_int_mask */
+/* [  6] ISRC1_int_mask */
+/* [  5] ISRC2_int_mask */
+/* [  4] VSD_int_mask */
+/* [  3] SPD_int_mask */
+/* [  1] AVI_int_mask */
+/* [  0] GCP_int_mask */
+#define HDMITX_DWC_FC_MASK1                     (DWC_OFFSET_MASK + 0x10D6)
+/* [  1] LowPriority_fifo_full */
+/* [  0] HighPriority_fifo_full */
+#define HDMITX_DWC_FC_MASK2                     (DWC_OFFSET_MASK + 0x10DA)
+/* [7:4] incoming_pr_factor */
+/* [3:0] output_pr_factor */
+#define HDMITX_DWC_FC_PRCONF                    (DWC_OFFSET_MASK + 0x10E0)
+/* [  4] scrambler_ucp_line */
+/* [  0] scrambler_en. Only update this bit once we've sent SCDC message*/
+#define HDMITX_DWC_FC_SCRAMBLER_CTRL            (DWC_OFFSET_MASK + 0x10E1)
+#define HDMITX_DWC_FC_MULTISTREAM_CTRL          (DWC_OFFSET_MASK + 0x10E2)
+/* [  6] nvbi_tx_en */
+/* [  5] amp_tx_en */
+/* [  4] aut_tx_en */
+/* [  3] audi_tx_en */
+/* [  2] avi_tx_en */
+/* [  1] gcp_tx_en */
+/* [  0] acr_tx_en */
+#define HDMITX_DWC_FC_PACKET_TX_EN              (DWC_OFFSET_MASK + 0x10E3)
+/* [  1] actspc_hdlr_tgl */
+/* [  0] actspc_hdlr_en */
+#define HDMITX_DWC_FC_ACTSPC_HDLR_CFG           (DWC_OFFSET_MASK + 0x10E8)
+#define HDMITX_DWC_FC_INVACT_2D_0               (DWC_OFFSET_MASK + 0x10E9)
+/* [3:0] fc_invact_2d_0[11:8] */
+/* [7:0] fc_invact_2d_0[7:0] */
+#define HDMITX_DWC_FC_INVACT_2D_1               (DWC_OFFSET_MASK + 0x10EA)
+
+#define HDMITX_DWC_FC_GMD_STAT                  (DWC_OFFSET_MASK + 0x1100)
+#define HDMITX_DWC_FC_GMD_EN                    (DWC_OFFSET_MASK + 0x1101)
+#define HDMITX_DWC_FC_GMD_UP                    (DWC_OFFSET_MASK + 0x1102)
+#define HDMITX_DWC_FC_GMD_CONF                  (DWC_OFFSET_MASK + 0x1103)
+#define HDMITX_DWC_FC_GMD_HB                    (DWC_OFFSET_MASK + 0x1104)
+#define HDMITX_DWC_FC_GMD_PB0                   (DWC_OFFSET_MASK + 0x1105)
+#define HDMITX_DWC_FC_GMD_PB1                   (DWC_OFFSET_MASK + 0x1106)
+#define HDMITX_DWC_FC_GMD_PB2                   (DWC_OFFSET_MASK + 0x1107)
+#define HDMITX_DWC_FC_GMD_PB3                   (DWC_OFFSET_MASK + 0x1108)
+#define HDMITX_DWC_FC_GMD_PB4                   (DWC_OFFSET_MASK + 0x1109)
+#define HDMITX_DWC_FC_GMD_PB5                   (DWC_OFFSET_MASK + 0x110A)
+#define HDMITX_DWC_FC_GMD_PB6                   (DWC_OFFSET_MASK + 0x110B)
+#define HDMITX_DWC_FC_GMD_PB7                   (DWC_OFFSET_MASK + 0x110C)
+#define HDMITX_DWC_FC_GMD_PB8                   (DWC_OFFSET_MASK + 0x110D)
+#define HDMITX_DWC_FC_GMD_PB9                   (DWC_OFFSET_MASK + 0x110E)
+#define HDMITX_DWC_FC_GMD_PB10                  (DWC_OFFSET_MASK + 0x110F)
+#define HDMITX_DWC_FC_GMD_PB11                  (DWC_OFFSET_MASK + 0x1110)
+#define HDMITX_DWC_FC_GMD_PB12                  (DWC_OFFSET_MASK + 0x1111)
+#define HDMITX_DWC_FC_GMD_PB13                  (DWC_OFFSET_MASK + 0x1112)
+#define HDMITX_DWC_FC_GMD_PB14                  (DWC_OFFSET_MASK + 0x1113)
+#define HDMITX_DWC_FC_GMD_PB15                  (DWC_OFFSET_MASK + 0x1114)
+#define HDMITX_DWC_FC_GMD_PB16                  (DWC_OFFSET_MASK + 0x1115)
+#define HDMITX_DWC_FC_GMD_PB17                  (DWC_OFFSET_MASK + 0x1116)
+#define HDMITX_DWC_FC_GMD_PB18                  (DWC_OFFSET_MASK + 0x1117)
+#define HDMITX_DWC_FC_GMD_PB19                  (DWC_OFFSET_MASK + 0x1118)
+#define HDMITX_DWC_FC_GMD_PB20                  (DWC_OFFSET_MASK + 0x1119)
+#define HDMITX_DWC_FC_GMD_PB21                  (DWC_OFFSET_MASK + 0x111A)
+#define HDMITX_DWC_FC_GMD_PB22                  (DWC_OFFSET_MASK + 0x111B)
+#define HDMITX_DWC_FC_GMD_PB23                  (DWC_OFFSET_MASK + 0x111C)
+#define HDMITX_DWC_FC_GMD_PB24                  (DWC_OFFSET_MASK + 0x111D)
+#define HDMITX_DWC_FC_GMD_PB25                  (DWC_OFFSET_MASK + 0x111E)
+#define HDMITX_DWC_FC_GMD_PB26                  (DWC_OFFSET_MASK + 0x111F)
+#define HDMITX_DWC_FC_GMD_PB27                  (DWC_OFFSET_MASK + 0x1120)
+
+/* Audio Metadata Packet Registers */
+#define HDMITX_DWC_FC_AMP_HB01                  (DWC_OFFSET_MASK + 0x1128)
+#define HDMITX_DWC_FC_AMP_HB02                  (DWC_OFFSET_MASK + 0x1129)
+#define HDMITX_DWC_FC_AMP_PB00                  (DWC_OFFSET_MASK + 0x112A)
+#define HDMITX_DWC_FC_AMP_PB01                  (DWC_OFFSET_MASK + 0x112B)
+#define HDMITX_DWC_FC_AMP_PB02                  (DWC_OFFSET_MASK + 0x112C)
+#define HDMITX_DWC_FC_AMP_PB03                  (DWC_OFFSET_MASK + 0x112D)
+#define HDMITX_DWC_FC_AMP_PB04                  (DWC_OFFSET_MASK + 0x112E)
+#define HDMITX_DWC_FC_AMP_PB05                  (DWC_OFFSET_MASK + 0x112F)
+#define HDMITX_DWC_FC_AMP_PB06                  (DWC_OFFSET_MASK + 0x1130)
+#define HDMITX_DWC_FC_AMP_PB07                  (DWC_OFFSET_MASK + 0x1131)
+#define HDMITX_DWC_FC_AMP_PB08                  (DWC_OFFSET_MASK + 0x1132)
+#define HDMITX_DWC_FC_AMP_PB09                  (DWC_OFFSET_MASK + 0x1133)
+#define HDMITX_DWC_FC_AMP_PB10                  (DWC_OFFSET_MASK + 0x1134)
+#define HDMITX_DWC_FC_AMP_PB11                  (DWC_OFFSET_MASK + 0x1135)
+#define HDMITX_DWC_FC_AMP_PB12                  (DWC_OFFSET_MASK + 0x1136)
+#define HDMITX_DWC_FC_AMP_PB13                  (DWC_OFFSET_MASK + 0x1137)
+#define HDMITX_DWC_FC_AMP_PB14                  (DWC_OFFSET_MASK + 0x1138)
+#define HDMITX_DWC_FC_AMP_PB15                  (DWC_OFFSET_MASK + 0x1139)
+#define HDMITX_DWC_FC_AMP_PB16                  (DWC_OFFSET_MASK + 0x113A)
+#define HDMITX_DWC_FC_AMP_PB17                  (DWC_OFFSET_MASK + 0x113B)
+#define HDMITX_DWC_FC_AMP_PB18                  (DWC_OFFSET_MASK + 0x113C)
+#define HDMITX_DWC_FC_AMP_PB19                  (DWC_OFFSET_MASK + 0x113D)
+#define HDMITX_DWC_FC_AMP_PB20                  (DWC_OFFSET_MASK + 0x113E)
+#define HDMITX_DWC_FC_AMP_PB21                  (DWC_OFFSET_MASK + 0x113F)
+#define HDMITX_DWC_FC_AMP_PB22                  (DWC_OFFSET_MASK + 0x1140)
+#define HDMITX_DWC_FC_AMP_PB23                  (DWC_OFFSET_MASK + 0x1141)
+#define HDMITX_DWC_FC_AMP_PB24                  (DWC_OFFSET_MASK + 0x1142)
+#define HDMITX_DWC_FC_AMP_PB25                  (DWC_OFFSET_MASK + 0x1143)
+#define HDMITX_DWC_FC_AMP_PB26                  (DWC_OFFSET_MASK + 0x1144)
+#define HDMITX_DWC_FC_AMP_PB27                  (DWC_OFFSET_MASK + 0x1145)
+
+/* NTSC VBI Packet Registers */
+#define HDMITX_DWC_FC_NVBI_HB01                 (DWC_OFFSET_MASK + 0x1148)
+#define HDMITX_DWC_FC_NVBI_HB02                 (DWC_OFFSET_MASK + 0x1149)
+#define HDMITX_DWC_FC_NVBI_PB01                 (DWC_OFFSET_MASK + 0x114A)
+#define HDMITX_DWC_FC_NVBI_PB02                 (DWC_OFFSET_MASK + 0x114B)
+#define HDMITX_DWC_FC_NVBI_PB03                 (DWC_OFFSET_MASK + 0x114C)
+#define HDMITX_DWC_FC_NVBI_PB04                 (DWC_OFFSET_MASK + 0x114D)
+#define HDMITX_DWC_FC_NVBI_PB05                 (DWC_OFFSET_MASK + 0x114E)
+#define HDMITX_DWC_FC_NVBI_PB06                 (DWC_OFFSET_MASK + 0x114F)
+#define HDMITX_DWC_FC_NVBI_PB07                 (DWC_OFFSET_MASK + 0x1150)
+#define HDMITX_DWC_FC_NVBI_PB08                 (DWC_OFFSET_MASK + 0x1151)
+#define HDMITX_DWC_FC_NVBI_PB09                 (DWC_OFFSET_MASK + 0x1152)
+#define HDMITX_DWC_FC_NVBI_PB10                 (DWC_OFFSET_MASK + 0x1153)
+#define HDMITX_DWC_FC_NVBI_PB11                 (DWC_OFFSET_MASK + 0x1154)
+#define HDMITX_DWC_FC_NVBI_PB12                 (DWC_OFFSET_MASK + 0x1155)
+#define HDMITX_DWC_FC_NVBI_PB13                 (DWC_OFFSET_MASK + 0x1156)
+#define HDMITX_DWC_FC_NVBI_PB14                 (DWC_OFFSET_MASK + 0x1157)
+#define HDMITX_DWC_FC_NVBI_PB15                 (DWC_OFFSET_MASK + 0x1158)
+#define HDMITX_DWC_FC_NVBI_PB16                 (DWC_OFFSET_MASK + 0x1159)
+#define HDMITX_DWC_FC_NVBI_PB17                 (DWC_OFFSET_MASK + 0x115A)
+#define HDMITX_DWC_FC_NVBI_PB18                 (DWC_OFFSET_MASK + 0x115B)
+#define HDMITX_DWC_FC_NVBI_PB19                 (DWC_OFFSET_MASK + 0x115C)
+#define HDMITX_DWC_FC_NVBI_PB20                 (DWC_OFFSET_MASK + 0x115D)
+#define HDMITX_DWC_FC_NVBI_PB21                 (DWC_OFFSET_MASK + 0x115E)
+#define HDMITX_DWC_FC_NVBI_PB22                 (DWC_OFFSET_MASK + 0x115F)
+#define HDMITX_DWC_FC_NVBI_PB23                 (DWC_OFFSET_MASK + 0x1160)
+#define HDMITX_DWC_FC_NVBI_PB24                 (DWC_OFFSET_MASK + 0x1161)
+#define HDMITX_DWC_FC_NVBI_PB25                 (DWC_OFFSET_MASK + 0x1162)
+#define HDMITX_DWC_FC_NVBI_PB26                 (DWC_OFFSET_MASK + 0x1163)
+#define HDMITX_DWC_FC_NVBI_PB27                 (DWC_OFFSET_MASK + 0x1164)
+#define HDMITX_DWC_FC_DRM_HB01                  (DWC_OFFSET_MASK + 0x1168)
+#define HDMITX_DWC_FC_DRM_HB02                  (DWC_OFFSET_MASK + 0x1169)
+#define HDMITX_DWC_FC_DRM_PB00                  (DWC_OFFSET_MASK + 0x116A)
+#define HDMITX_DWC_FC_DRM_PB01                  (DWC_OFFSET_MASK + 0x116B)
+#define HDMITX_DWC_FC_DRM_PB02                  (DWC_OFFSET_MASK + 0x116C)
+#define HDMITX_DWC_FC_DRM_PB03                  (DWC_OFFSET_MASK + 0x116D)
+#define HDMITX_DWC_FC_DRM_PB04                  (DWC_OFFSET_MASK + 0x116E)
+#define HDMITX_DWC_FC_DRM_PB05                  (DWC_OFFSET_MASK + 0x116F)
+#define HDMITX_DWC_FC_DRM_PB06                  (DWC_OFFSET_MASK + 0x1170)
+#define HDMITX_DWC_FC_DRM_PB07                  (DWC_OFFSET_MASK + 0x1171)
+#define HDMITX_DWC_FC_DRM_PB08                  (DWC_OFFSET_MASK + 0x1172)
+#define HDMITX_DWC_FC_DRM_PB09                  (DWC_OFFSET_MASK + 0x1173)
+#define HDMITX_DWC_FC_DRM_PB10                  (DWC_OFFSET_MASK + 0x1174)
+#define HDMITX_DWC_FC_DRM_PB11                  (DWC_OFFSET_MASK + 0x1175)
+#define HDMITX_DWC_FC_DRM_PB12                  (DWC_OFFSET_MASK + 0x1176)
+#define HDMITX_DWC_FC_DRM_PB13                  (DWC_OFFSET_MASK + 0x1177)
+#define HDMITX_DWC_FC_DRM_PB14                  (DWC_OFFSET_MASK + 0x1178)
+#define HDMITX_DWC_FC_DRM_PB15                  (DWC_OFFSET_MASK + 0x1179)
+#define HDMITX_DWC_FC_DRM_PB16                  (DWC_OFFSET_MASK + 0x117A)
+#define HDMITX_DWC_FC_DRM_PB17                  (DWC_OFFSET_MASK + 0x117B)
+#define HDMITX_DWC_FC_DRM_PB18                  (DWC_OFFSET_MASK + 0x117C)
+#define HDMITX_DWC_FC_DRM_PB19                  (DWC_OFFSET_MASK + 0x117D)
+#define HDMITX_DWC_FC_DRM_PB20                  (DWC_OFFSET_MASK + 0x117E)
+#define HDMITX_DWC_FC_DRM_PB21                  (DWC_OFFSET_MASK + 0x117F)
+#define HDMITX_DWC_FC_DRM_PB22                  (DWC_OFFSET_MASK + 0x1180)
+#define HDMITX_DWC_FC_DRM_PB23                  (DWC_OFFSET_MASK + 0x1181)
+#define HDMITX_DWC_FC_DRM_PB24                  (DWC_OFFSET_MASK + 0x1182)
+#define HDMITX_DWC_FC_DRM_PB25                  (DWC_OFFSET_MASK + 0x1183)
+#define HDMITX_DWC_FC_DRM_PB26                  (DWC_OFFSET_MASK + 0x1184)
+
+#define HDMITX_DWC_FC_DBGFORCE                  (DWC_OFFSET_MASK + 0x1200)
+#define HDMITX_DWC_FC_DBGAUD0CH0                (DWC_OFFSET_MASK + 0x1201)
+#define HDMITX_DWC_FC_DBGAUD1CH0                (DWC_OFFSET_MASK + 0x1202)
+#define HDMITX_DWC_FC_DBGAUD2CH0                (DWC_OFFSET_MASK + 0x1203)
+#define HDMITX_DWC_FC_DBGAUD0CH1                (DWC_OFFSET_MASK + 0x1204)
+#define HDMITX_DWC_FC_DBGAUD1CH1                (DWC_OFFSET_MASK + 0x1205)
+#define HDMITX_DWC_FC_DBGAUD2CH1                (DWC_OFFSET_MASK + 0x1206)
+#define HDMITX_DWC_FC_DBGAUD0CH2                (DWC_OFFSET_MASK + 0x1207)
+#define HDMITX_DWC_FC_DBGAUD1CH2                (DWC_OFFSET_MASK + 0x1208)
+#define HDMITX_DWC_FC_DBGAUD2CH2                (DWC_OFFSET_MASK + 0x1209)
+#define HDMITX_DWC_FC_DBGAUD0CH3                (DWC_OFFSET_MASK + 0x120A)
+#define HDMITX_DWC_FC_DBGAUD1CH3                (DWC_OFFSET_MASK + 0x120B)
+#define HDMITX_DWC_FC_DBGAUD2CH3                (DWC_OFFSET_MASK + 0x120C)
+#define HDMITX_DWC_FC_DBGAUD0CH4                (DWC_OFFSET_MASK + 0x120D)
+#define HDMITX_DWC_FC_DBGAUD1CH4                (DWC_OFFSET_MASK + 0x120E)
+#define HDMITX_DWC_FC_DBGAUD2CH4                (DWC_OFFSET_MASK + 0x120F)
+#define HDMITX_DWC_FC_DBGAUD0CH5                (DWC_OFFSET_MASK + 0x1210)
+#define HDMITX_DWC_FC_DBGAUD1CH5                (DWC_OFFSET_MASK + 0x1211)
+#define HDMITX_DWC_FC_DBGAUD2CH5                (DWC_OFFSET_MASK + 0x1212)
+#define HDMITX_DWC_FC_DBGAUD0CH6                (DWC_OFFSET_MASK + 0x1213)
+#define HDMITX_DWC_FC_DBGAUD1CH6                (DWC_OFFSET_MASK + 0x1214)
+#define HDMITX_DWC_FC_DBGAUD2CH6                (DWC_OFFSET_MASK + 0x1215)
+#define HDMITX_DWC_FC_DBGAUD0CH7                (DWC_OFFSET_MASK + 0x1216)
+#define HDMITX_DWC_FC_DBGAUD1CH7                (DWC_OFFSET_MASK + 0x1217)
+#define HDMITX_DWC_FC_DBGAUD2CH7                (DWC_OFFSET_MASK + 0x1218)
+#define HDMITX_DWC_FC_DBGTMDS0                  (DWC_OFFSET_MASK + 0x1219)
+#define HDMITX_DWC_FC_DBGTMDS1                  (DWC_OFFSET_MASK + 0x121A)
+#define HDMITX_DWC_FC_DBGTMDS2                  (DWC_OFFSET_MASK + 0x121B)
+
+/* HDMI Source PHY Registers */
+#define HDMITX_DWC_PHY_CONF0                    (DWC_OFFSET_MASK + 0x3000)
+#define HDMITX_DWC_PHY_TST0                     (DWC_OFFSET_MASK + 0x3001)
+#define HDMITX_DWC_PHY_TST1                     (DWC_OFFSET_MASK + 0x3002)
+#define HDMITX_DWC_PHY_TST2                     (DWC_OFFSET_MASK + 0x3003)
+#define HDMITX_DWC_PHY_STAT0                    (DWC_OFFSET_MASK + 0x3004)
+#define HDMITX_DWC_PHY_INT0                     (DWC_OFFSET_MASK + 0x3005)
+#define HDMITX_DWC_PHY_MASK0                    (DWC_OFFSET_MASK + 0x3006)
+#define HDMITX_DWC_PHY_POL0                     (DWC_OFFSET_MASK + 0x3007)
+
+/* I2C Master PHY Registers */
+#define HDMITX_DWC_I2CM_PHY_SLAVE               (DWC_OFFSET_MASK + 0x3020)
+#define HDMITX_DWC_I2CM_PHY_ADDRESS             (DWC_OFFSET_MASK + 0x3021)
+#define HDMITX_DWC_I2CM_PHY_DATAO_1             (DWC_OFFSET_MASK + 0x3022)
+#define HDMITX_DWC_I2CM_PHY_DATAO_0             (DWC_OFFSET_MASK + 0x3023)
+#define HDMITX_DWC_I2CM_PHY_DATAI_1             (DWC_OFFSET_MASK + 0x3024)
+#define HDMITX_DWC_I2CM_PHY_DATAI_0             (DWC_OFFSET_MASK + 0x3025)
+#define HDMITX_DWC_I2CM_PHY_OPERATION           (DWC_OFFSET_MASK + 0x3026)
+#define HDMITX_DWC_I2CM_PHY_INT                 (DWC_OFFSET_MASK + 0x3027)
+#define HDMITX_DWC_I2CM_PHY_CTLINT              (DWC_OFFSET_MASK + 0x3028)
+#define HDMITX_DWC_I2CM_PHY_DIV                 (DWC_OFFSET_MASK + 0x3029)
+#define HDMITX_DWC_I2CM_PHY_SOFTRSTZ            (DWC_OFFSET_MASK + 0x302A)
+#define HDMITX_DWC_I2CM_PHY_SS_SCL_HCNT_1       (DWC_OFFSET_MASK + 0x302B)
+#define HDMITX_DWC_I2CM_PHY_SS_SCL_HCNT_0       (DWC_OFFSET_MASK + 0x302C)
+#define HDMITX_DWC_I2CM_PHY_SS_SCL_LCNT_1       (DWC_OFFSET_MASK + 0x302D)
+#define HDMITX_DWC_I2CM_PHY_SS_SCL_LCNT_0       (DWC_OFFSET_MASK + 0x302E)
+#define HDMITX_DWC_I2CM_PHY_FS_SCL_HCNT_1       (DWC_OFFSET_MASK + 0x302F)
+#define HDMITX_DWC_I2CM_PHY_FS_SCL_HCNT_0       (DWC_OFFSET_MASK + 0x3030)
+#define HDMITX_DWC_I2CM_PHY_FS_SCL_LCNT_1       (DWC_OFFSET_MASK + 0x3031)
+#define HDMITX_DWC_I2CM_PHY_FS_SCL_LCNT_0       (DWC_OFFSET_MASK + 0x3032)
+#define HDMITX_DWC_I2CM_PHY_SDA_HOLD            (DWC_OFFSET_MASK + 0x3033)
+
+/* Audio Sampler Registers */
+
+  /* [  7] sw_audio_fifo_rst */
+  /* [  5] 0=select SPDIF; 1=select I2S. */
+  /* [3:0] i2s_in_en: enable it later in test.c */
+
+#define HDMITX_DWC_AUD_CONF0                    (DWC_OFFSET_MASK + 0x3100)
+/* [4:0] i2s_width */
+/* [7:5] i2s_mode: 0=standard I2S mode */
+#define HDMITX_DWC_AUD_CONF1                    (DWC_OFFSET_MASK + 0x3101)
+/* [  3] fifo_empty_mask: 0=enable int; 1=mask int. */
+/* [  2] fifo_full_mask: 0=enable int; 1=mask int. */
+#define HDMITX_DWC_AUD_INT                      (DWC_OFFSET_MASK + 0x3102)
+  /* [  1] NLPCM */
+#define HDMITX_DWC_AUD_CONF2                    (DWC_OFFSET_MASK + 0x3103)
+
+/* [  4] fifo_overrun_mask: 0=enable int; 1=mask int.
+ * Enable it later when audio starts.
+ */
+#define HDMITX_DWC_AUD_INT1                     (DWC_OFFSET_MASK + 0x3104)
+
+#define HDMITX_DWC_AUD_N1                       (DWC_OFFSET_MASK + 0x3200)
+#define HDMITX_DWC_AUD_N2                       (DWC_OFFSET_MASK + 0x3201)
+#define HDMITX_DWC_AUD_N3                       (DWC_OFFSET_MASK + 0x3202)
+#define HDMITX_DWC_AUD_CTS1                     (DWC_OFFSET_MASK + 0x3203)
+#define HDMITX_DWC_AUD_CTS2                     (DWC_OFFSET_MASK + 0x3204)
+#define HDMITX_DWC_AUD_CTS3                     (DWC_OFFSET_MASK + 0x3205)
+#define HDMITX_DWC_AUD_INPUTCLKFS               (DWC_OFFSET_MASK + 0x3206)
+/* [  7] sw_audio_fifo_rst */
+#define HDMITX_DWC_AUD_SPDIF0                   (DWC_OFFSET_MASK + 0x3300)
+/* [4:0] spdif_width */
+/* [  7] setnlpcm */
+#define HDMITX_DWC_AUD_SPDIF1                   (DWC_OFFSET_MASK + 0x3301)
+/* [  3] SPDIF fifo_empty_mask: 0=enable int; 1=mask int. */
+/* [  2] SPDIF fifo_full_mask: 0=enable int; 1=mask int. */
+#define HDMITX_DWC_AUD_SPDIFINT                 (DWC_OFFSET_MASK + 0x3302)
+/* [  4] SPDIF fifo_overrun_mask: 0=enable int; 1=mask int. */
+#define HDMITX_DWC_AUD_SPDIFINT1                (DWC_OFFSET_MASK + 0x3303)
+
+/* Generic Parallel Audio Interface Registers   (DWC_OFFSET_MASK + 0x3500) */
+/* Audio DMA Registers                          (DWC_OFFSET_MASK + 0x3600) */
+
+/* Main Controller Registers */
+/* [  6] hdcpclk_disable */
+/* [  5] cecclk_disable */
+/* [  4] cscclk_disable */
+/* [  3] audclk_disable */
+/* [  2] prepclk_disable */
+/* [  1] tmdsclk_disable */
+/* [  0] pixelclk_disable */
+#define HDMITX_DWC_MC_CLKDIS                    (DWC_OFFSET_MASK + 0x4001)
+/*
+ * [  7] gpaswrst_req: 0=generate reset pulse; 1=no reset.
+ * [  6] cecswrst_req: 0=generate reset pulse; 1=no reset.
+ * [  4] spdifswrst_req: 0=generate reset pulse; 1=no reset.
+ * [  3] i2sswrst_req: 0=generate reset pulse; 1=no reset.
+ * [  2] prepswrst_req: 0=generate reset pulse; 1=no reset.
+ * [  1] tmdsswrst_req: 0=generate reset pulse; 1=no reset.
+ * [  0] pixelswrst_req: 0=generate reset pulse; 1=no reset.
+ */
+#define HDMITX_DWC_MC_SWRSTZREQ                 (DWC_OFFSET_MASK + 0x4002)
+#define HDMITX_DWC_MC_OPCTRL                    (DWC_OFFSET_MASK + 0x4003)
+/* [  0] CSC enable */
+#define HDMITX_DWC_MC_FLOWCTRL                  (DWC_OFFSET_MASK + 0x4004)
+#define HDMITX_DWC_MC_PHYRSTZ                   (DWC_OFFSET_MASK + 0x4005)
+#define HDMITX_DWC_MC_LOCKONCLOCK               (DWC_OFFSET_MASK + 0x4006)
+
+/* Color Space Converter Registers */
+/* [  7] csc_limit */
+#define HDMITX_DWC_CSC_CFG                      (DWC_OFFSET_MASK + 0x4100)
+#define HDMITX_DWC_CSC_SCALE                    (DWC_OFFSET_MASK + 0x4101)
+#define HDMITX_DWC_CSC_COEF_A1_MSB              (DWC_OFFSET_MASK + 0x4102)
+#define HDMITX_DWC_CSC_COEF_A1_LSB              (DWC_OFFSET_MASK + 0x4103)
+#define HDMITX_DWC_CSC_COEF_A2_MSB              (DWC_OFFSET_MASK + 0x4104)
+#define HDMITX_DWC_CSC_COEF_A2_LSB              (DWC_OFFSET_MASK + 0x4105)
+#define HDMITX_DWC_CSC_COEF_A3_MSB              (DWC_OFFSET_MASK + 0x4106)
+#define HDMITX_DWC_CSC_COEF_A3_LSB              (DWC_OFFSET_MASK + 0x4107)
+#define HDMITX_DWC_CSC_COEF_A4_MSB              (DWC_OFFSET_MASK + 0x4108)
+#define HDMITX_DWC_CSC_COEF_A4_LSB              (DWC_OFFSET_MASK + 0x4109)
+#define HDMITX_DWC_CSC_COEF_B1_MSB              (DWC_OFFSET_MASK + 0x410A)
+#define HDMITX_DWC_CSC_COEF_B1_LSB              (DWC_OFFSET_MASK + 0x410B)
+#define HDMITX_DWC_CSC_COEF_B2_MSB              (DWC_OFFSET_MASK + 0x410C)
+#define HDMITX_DWC_CSC_COEF_B2_LSB              (DWC_OFFSET_MASK + 0x410D)
+#define HDMITX_DWC_CSC_COEF_B3_MSB              (DWC_OFFSET_MASK + 0x410E)
+#define HDMITX_DWC_CSC_COEF_B3_LSB              (DWC_OFFSET_MASK + 0x410F)
+#define HDMITX_DWC_CSC_COEF_B4_MSB              (DWC_OFFSET_MASK + 0x4110)
+#define HDMITX_DWC_CSC_COEF_B4_LSB              (DWC_OFFSET_MASK + 0x4111)
+#define HDMITX_DWC_CSC_COEF_C1_MSB              (DWC_OFFSET_MASK + 0x4112)
+#define HDMITX_DWC_CSC_COEF_C1_LSB              (DWC_OFFSET_MASK + 0x4113)
+#define HDMITX_DWC_CSC_COEF_C2_MSB              (DWC_OFFSET_MASK + 0x4114)
+#define HDMITX_DWC_CSC_COEF_C2_LSB              (DWC_OFFSET_MASK + 0x4115)
+#define HDMITX_DWC_CSC_COEF_C3_MSB              (DWC_OFFSET_MASK + 0x4116)
+#define HDMITX_DWC_CSC_COEF_C3_LSB              (DWC_OFFSET_MASK + 0x4117)
+#define HDMITX_DWC_CSC_COEF_C4_MSB              (DWC_OFFSET_MASK + 0x4118)
+#define HDMITX_DWC_CSC_COEF_C4_LSB              (DWC_OFFSET_MASK + 0x4119)
+#define HDMITX_DWC_CSC_LIMIT_UP_MSB             (DWC_OFFSET_MASK + 0x411A)
+#define HDMITX_DWC_CSC_LIMIT_UP_LSB             (DWC_OFFSET_MASK + 0x411B)
+#define HDMITX_DWC_CSC_LIMIT_DN_MSB             (DWC_OFFSET_MASK + 0x411C)
+#define HDMITX_DWC_CSC_LIMIT_DN_LSB             (DWC_OFFSET_MASK + 0x411D)
+
+/* HDCP Encryption Engine Registers */
+#define HDMITX_DWC_A_HDCPCFG0                   (DWC_SEC_OFFSET_MASK + 0x5000)
+/* [  4] hdcp_lock */
+/* [  3] dissha1check */
+/* [  2] ph2upshiftenc */
+/* [  1] encryptiondisable */
+/* [  0] swresetn. Write 0 to activate, self-clear to 1. */
+#define HDMITX_DWC_A_HDCPCFG1                   (DWC_SEC_OFFSET_MASK + 0x5001)
+#define HDMITX_DWC_A_HDCPOBS0                   (DWC_OFFSET_MASK + 0x5002)
+#define HDMITX_DWC_A_HDCPOBS1                   (DWC_OFFSET_MASK + 0x5003)
+#define HDMITX_DWC_A_HDCPOBS2                   (DWC_OFFSET_MASK + 0x5004)
+#define HDMITX_DWC_A_HDCPOBS3                   (DWC_OFFSET_MASK + 0x5005)
+#define HDMITX_DWC_A_APIINTCLR                  (DWC_OFFSET_MASK + 0x5006)
+#define HDMITX_DWC_A_APIINTSTAT                 (DWC_OFFSET_MASK + 0x5007)
+/* [  7] hdcp_engaged_int_mask */
+/* [  6] hdcp_failed_int_mask */
+/* [  4] i2c_nack_int_mask */
+/* [  3] lost_arbitration_int_mask */
+/* [  2] keepout_error_int_mask */
+/* [  1] ksv_sha1_calc_int_mask */
+/* [  0] ksv_access_int_mask */
+#define HDMITX_DWC_A_APIINTMSK                  (DWC_OFFSET_MASK + 0x5008)
+/* [6:5] unencryptconf */
+/* [  4] dataenpol */
+/* [  3] vsyncpol */
+/* [  1] hsyncpol */
+#define HDMITX_DWC_A_VIDPOLCFG                  (DWC_OFFSET_MASK + 0x5009)
+#define HDMITX_DWC_A_OESSWCFG                   (DWC_OFFSET_MASK + 0x500A)
+#define HDMITX_DWC_A_COREVERLSB                 (DWC_OFFSET_MASK + 0x5014)
+#define HDMITX_DWC_A_COREVERMSB                 (DWC_OFFSET_MASK + 0x5015)
+/* [  3] sha1_fail */
+/* [  2] ksv_ctrl_update */
+/* [  1] Rsvd for read-only ksv_mem_access */
+/* [  0] ksv_mem_request */
+#define HDMITX_DWC_A_KSVMEMCTRL                 (DWC_OFFSET_MASK + 0x5016)
+
+#define HDMITX_DWC_HDCP_BSTATUS_0               (DWC_OFFSET_MASK + 0x5020)
+#define HDMITX_DWC_HDCP_BSTATUS_1               (DWC_OFFSET_MASK + 0x5021)
+#define HDMITX_DWC_HDCP_M0_0                    (DWC_OFFSET_MASK + 0x5022)
+#define HDMITX_DWC_HDCP_M0_1                    (DWC_OFFSET_MASK + 0x5023)
+#define HDMITX_DWC_HDCP_M0_2                    (DWC_OFFSET_MASK + 0x5024)
+#define HDMITX_DWC_HDCP_M0_3                    (DWC_OFFSET_MASK + 0x5025)
+#define HDMITX_DWC_HDCP_M0_4                    (DWC_OFFSET_MASK + 0x5026)
+#define HDMITX_DWC_HDCP_M0_5                    (DWC_OFFSET_MASK + 0x5027)
+#define HDMITX_DWC_HDCP_M0_6                    (DWC_OFFSET_MASK + 0x5028)
+#define HDMITX_DWC_HDCP_M0_7                    (DWC_OFFSET_MASK + 0x5029)
+#define HDMITX_DWC_HDCP_KSV                     (DWC_OFFSET_MASK + 0x502A)
+#define HDMITX_DWC_HDCP_VH                      (DWC_OFFSET_MASK + 0x52A5)
+#define HDMITX_DWC_HDCP_REVOC_SIZE_0            (DWC_OFFSET_MASK + 0x52B9)
+#define HDMITX_DWC_HDCP_REVOC_SIZE_1            (DWC_OFFSET_MASK + 0x52BA)
+#define HDMITX_DWC_HDCP_REVOC_LIST              (DWC_OFFSET_MASK + 0x52BB)
+
+/* HDCP BKSV Registers */
+#define HDMITX_DWC_HDCPREG_BKSV0                (DWC_OFFSET_MASK + 0x7800)
+#define HDMITX_DWC_HDCPREG_BKSV1                (DWC_OFFSET_MASK + 0x7801)
+#define HDMITX_DWC_HDCPREG_BKSV2                (DWC_OFFSET_MASK + 0x7802)
+#define HDMITX_DWC_HDCPREG_BKSV3                (DWC_OFFSET_MASK + 0x7803)
+#define HDMITX_DWC_HDCPREG_BKSV4                (DWC_OFFSET_MASK + 0x7804)
+
+/* HDCP AN Registers */
+#define HDMITX_DWC_HDCPREG_ANCONF               (DWC_OFFSET_MASK + 0x7805)
+#define HDMITX_DWC_HDCPREG_AN0                  (DWC_OFFSET_MASK + 0x7806)
+#define HDMITX_DWC_HDCPREG_AN1                  (DWC_OFFSET_MASK + 0x7807)
+#define HDMITX_DWC_HDCPREG_AN2                  (DWC_OFFSET_MASK + 0x7808)
+#define HDMITX_DWC_HDCPREG_AN3                  (DWC_OFFSET_MASK + 0x7809)
+#define HDMITX_DWC_HDCPREG_AN4                  (DWC_OFFSET_MASK + 0x780A)
+#define HDMITX_DWC_HDCPREG_AN5                  (DWC_OFFSET_MASK + 0x780B)
+#define HDMITX_DWC_HDCPREG_AN6                  (DWC_OFFSET_MASK + 0x780C)
+#define HDMITX_DWC_HDCPREG_AN7                  (DWC_OFFSET_MASK + 0x780D)
+#define HDMITX_DWC_HDCPREG_RMLCTL               (DWC_OFFSET_MASK + 0x780E)
+
+/* Encrypted DPK Embedded Storage Registers */
+#define HDMITX_DWC_HDCPREG_RMLSTS               (DWC_OFFSET_MASK + 0x780F)
+#define HDMITX_DWC_HDCPREG_SEED0                (DWC_SEC_OFFSET_MASK + 0x7810)
+#define HDMITX_DWC_HDCPREG_SEED1                (DWC_SEC_OFFSET_MASK + 0x7811)
+#define HDMITX_DWC_HDCPREG_DPK0                 (DWC_SEC_OFFSET_MASK + 0x7812)
+#define HDMITX_DWC_HDCPREG_DPK1                 (DWC_SEC_OFFSET_MASK + 0x7813)
+#define HDMITX_DWC_HDCPREG_DPK2                 (DWC_SEC_OFFSET_MASK + 0x7814)
+#define HDMITX_DWC_HDCPREG_DPK3                 (DWC_SEC_OFFSET_MASK + 0x7815)
+#define HDMITX_DWC_HDCPREG_DPK4                 (DWC_SEC_OFFSET_MASK + 0x7816)
+#define HDMITX_DWC_HDCPREG_DPK5                 (DWC_SEC_OFFSET_MASK + 0x7817)
+#define HDMITX_DWC_HDCPREG_DPK6                 (DWC_SEC_OFFSET_MASK + 0x7818)
+
+/* HDCP22 Registers */
+#define HDMITX_DWC_HDCP22REG_ID                 (DWC_OFFSET_MASK + 0x7900)
+#define HDMITX_DWC_HDCP22REG_CTRL               (DWC_SEC_OFFSET_MASK + 0x7904)
+#define HDMITX_DWC_HDCP22REG_CTRL1              (DWC_OFFSET_MASK + 0x7905)
+#define HDMITX_DWC_HDCP22REG_STS                (DWC_OFFSET_MASK + 0x7908)
+#define HDMITX_DWC_HDCP22REG_MASK               (DWC_OFFSET_MASK + 0x790C)
+#define HDMITX_DWC_HDCP22REG_STAT               (DWC_OFFSET_MASK + 0x790D)
+#define HDMITX_DWC_HDCP22REG_MUTE               (DWC_OFFSET_MASK + 0x790E)
+
+
+/* ********** CEC related ********** */
+
+/* CEC 2.0 Engine Registers */
+#define HDMITX_DWC_CEC_CTRL                     (DWC_OFFSET_MASK + 0x7D00)
+#define HDMITX_DWC_CEC_INTR_MASK                (DWC_OFFSET_MASK + 0x7D02)
+#define HDMITX_DWC_CEC_LADD_LOW                 (DWC_OFFSET_MASK + 0x7D05)
+#define HDMITX_DWC_CEC_LADD_HIGH                (DWC_OFFSET_MASK + 0x7D06)
+#define HDMITX_DWC_CEC_TX_CNT                   (DWC_OFFSET_MASK + 0x7D07)
+#define HDMITX_DWC_CEC_RX_CNT                   (DWC_OFFSET_MASK + 0x7D08)
+#define HDMITX_DWC_CEC_TX_DATA00                (DWC_OFFSET_MASK + 0x7D10)
+#define HDMITX_DWC_CEC_TX_DATA01                (DWC_OFFSET_MASK + 0x7D11)
+#define HDMITX_DWC_CEC_TX_DATA02                (DWC_OFFSET_MASK + 0x7D12)
+#define HDMITX_DWC_CEC_TX_DATA03                (DWC_OFFSET_MASK + 0x7D13)
+#define HDMITX_DWC_CEC_TX_DATA04                (DWC_OFFSET_MASK + 0x7D14)
+#define HDMITX_DWC_CEC_TX_DATA05                (DWC_OFFSET_MASK + 0x7D15)
+#define HDMITX_DWC_CEC_TX_DATA06                (DWC_OFFSET_MASK + 0x7D16)
+#define HDMITX_DWC_CEC_TX_DATA07                (DWC_OFFSET_MASK + 0x7D17)
+#define HDMITX_DWC_CEC_TX_DATA08                (DWC_OFFSET_MASK + 0x7D18)
+#define HDMITX_DWC_CEC_TX_DATA09                (DWC_OFFSET_MASK + 0x7D19)
+#define HDMITX_DWC_CEC_TX_DATA10                (DWC_OFFSET_MASK + 0x7D1A)
+#define HDMITX_DWC_CEC_TX_DATA11                (DWC_OFFSET_MASK + 0x7D1B)
+#define HDMITX_DWC_CEC_TX_DATA12                (DWC_OFFSET_MASK + 0x7D1C)
+#define HDMITX_DWC_CEC_TX_DATA13                (DWC_OFFSET_MASK + 0x7D1D)
+#define HDMITX_DWC_CEC_TX_DATA14                (DWC_OFFSET_MASK + 0x7D1E)
+#define HDMITX_DWC_CEC_TX_DATA15                (DWC_OFFSET_MASK + 0x7D1F)
+#define HDMITX_DWC_CEC_RX_DATA00                (DWC_OFFSET_MASK + 0x7D20)
+#define HDMITX_DWC_CEC_RX_DATA01                (DWC_OFFSET_MASK + 0x7D21)
+#define HDMITX_DWC_CEC_RX_DATA02                (DWC_OFFSET_MASK + 0x7D22)
+#define HDMITX_DWC_CEC_RX_DATA03                (DWC_OFFSET_MASK + 0x7D23)
+#define HDMITX_DWC_CEC_RX_DATA04                (DWC_OFFSET_MASK + 0x7D24)
+#define HDMITX_DWC_CEC_RX_DATA05                (DWC_OFFSET_MASK + 0x7D25)
+#define HDMITX_DWC_CEC_RX_DATA06                (DWC_OFFSET_MASK + 0x7D26)
+#define HDMITX_DWC_CEC_RX_DATA07                (DWC_OFFSET_MASK + 0x7D27)
+#define HDMITX_DWC_CEC_RX_DATA08                (DWC_OFFSET_MASK + 0x7D28)
+#define HDMITX_DWC_CEC_RX_DATA09                (DWC_OFFSET_MASK + 0x7D29)
+#define HDMITX_DWC_CEC_RX_DATA10                (DWC_OFFSET_MASK + 0x7D2A)
+#define HDMITX_DWC_CEC_RX_DATA11                (DWC_OFFSET_MASK + 0x7D2B)
+#define HDMITX_DWC_CEC_RX_DATA12                (DWC_OFFSET_MASK + 0x7D2C)
+#define HDMITX_DWC_CEC_RX_DATA13                (DWC_OFFSET_MASK + 0x7D2D)
+#define HDMITX_DWC_CEC_RX_DATA14                (DWC_OFFSET_MASK + 0x7D2E)
+#define HDMITX_DWC_CEC_RX_DATA15                (DWC_OFFSET_MASK + 0x7D2F)
+#define HDMITX_DWC_CEC_LOCK_BUF                 (DWC_OFFSET_MASK + 0x7D30)
+#define HDMITX_DWC_CEC_WAKEUPCTRL               (DWC_OFFSET_MASK + 0x7D31)
+
+/* I2C Master Registers(E-DDC/SCDC) */
+#define HDMITX_DWC_I2CM_SLAVE                   (DWC_OFFSET_MASK + 0x7E00)
+#define HDMITX_DWC_I2CM_ADDRESS                 (DWC_OFFSET_MASK + 0x7E01)
+#define HDMITX_DWC_I2CM_DATAO                   (DWC_OFFSET_MASK + 0x7E02)
+#define HDMITX_DWC_I2CM_DATAI                   (DWC_OFFSET_MASK + 0x7E03)
+#define HDMITX_DWC_I2CM_OPERATION               (DWC_OFFSET_MASK + 0x7E04)
+/* [  2] done_mask */
+/* [  6] read_req_mask */
+#define HDMITX_DWC_I2CM_INT                     (DWC_OFFSET_MASK + 0x7E05)
+/* [  6] nack_mask */
+/* [  2] arbitration_error_mask */
+#define HDMITX_DWC_I2CM_CTLINT                  (DWC_OFFSET_MASK + 0x7E06)
+/* [  3] i2c_fast_mode: 0=standard mode; 1=fast mode. */
+#define HDMITX_DWC_I2CM_DIV                     (DWC_OFFSET_MASK + 0x7E07)
+#define HDMITX_DWC_I2CM_SEGADDR                 (DWC_OFFSET_MASK + 0x7E08)
+#define HDMITX_DWC_I2CM_SOFTRSTZ                (DWC_OFFSET_MASK + 0x7E09)
+#define HDMITX_DWC_I2CM_SEGPTR                  (DWC_OFFSET_MASK + 0x7E0A)
+/* I2CM_SS_SCL_HCNT = RndUp(min_ss_scl_htime*Freq(sfrclkInMHz)/1000) */
+/* I2CM_SS_SCL_LCNT = RndUp(min_ss_scl_ltime*Freq(sfrclkInMHz)/1000) */
+/* I2CM_FS_SCL_HCNT = RndUp(min_fs_scl_htime*Freq(sfrclkInMHz)/1000) */
+/* I2CM_FS_SCL_LCNT = RndUp(min_fs_scl_ltime*Freq(sfrclkInMHz)/1000) */
+/* Where Freq(sfrclkInMHz)=24; */
+#define HDMITX_DWC_I2CM_SS_SCL_HCNT_1           (DWC_OFFSET_MASK + 0x7E0B)
+#define HDMITX_DWC_I2CM_SS_SCL_HCNT_0           (DWC_OFFSET_MASK + 0x7E0C)
+#define HDMITX_DWC_I2CM_SS_SCL_LCNT_1           (DWC_OFFSET_MASK + 0x7E0D)
+#define HDMITX_DWC_I2CM_SS_SCL_LCNT_0           (DWC_OFFSET_MASK + 0x7E0E)
+#define HDMITX_DWC_I2CM_FS_SCL_HCNT_1           (DWC_OFFSET_MASK + 0x7E0F)
+#define HDMITX_DWC_I2CM_FS_SCL_HCNT_0           (DWC_OFFSET_MASK + 0x7E10)
+#define HDMITX_DWC_I2CM_FS_SCL_LCNT_1           (DWC_OFFSET_MASK + 0x7E11)
+#define HDMITX_DWC_I2CM_FS_SCL_LCNT_0           (DWC_OFFSET_MASK + 0x7E12)
+#define HDMITX_DWC_I2CM_SDA_HOLD                (DWC_OFFSET_MASK + 0x7E13)
+/* [  5] updt_rd_vsyncpoll_en */
+/* [  4] read_request_en */
+/* [  0] read_update */
+#define HDMITX_DWC_I2CM_SCDC_UPDATE             (DWC_OFFSET_MASK + 0x7E14)
+#define HDMITX_DWC_I2CM_READ_BUFF0              (DWC_OFFSET_MASK + 0x7E20)
+#define HDMITX_DWC_I2CM_READ_BUFF1              (DWC_OFFSET_MASK + 0x7E21)
+#define HDMITX_DWC_I2CM_READ_BUFF2              (DWC_OFFSET_MASK + 0x7E22)
+#define HDMITX_DWC_I2CM_READ_BUFF3              (DWC_OFFSET_MASK + 0x7E23)
+#define HDMITX_DWC_I2CM_READ_BUFF4              (DWC_OFFSET_MASK + 0x7E24)
+#define HDMITX_DWC_I2CM_READ_BUFF5              (DWC_OFFSET_MASK + 0x7E25)
+#define HDMITX_DWC_I2CM_READ_BUFF6              (DWC_OFFSET_MASK + 0x7E26)
+#define HDMITX_DWC_I2CM_READ_BUFF7              (DWC_OFFSET_MASK + 0x7E27)
+#define HDMITX_DWC_I2CM_SCDC_UPDATE0            (DWC_OFFSET_MASK + 0x7E30)
+#define HDMITX_DWC_I2CM_SCDC_UPDATE1            (DWC_OFFSET_MASK + 0x7E31)
+
+#endif  /* __HDMI_TX_REG_H_ */
diff --git a/include/amlogic/media/vout/hdmitx/mach_reg.h b/include/amlogic/media/vout/hdmitx/mach_reg.h
new file mode 100644
index 00000000000..865eddb198e
--- /dev/null
+++ b/include/amlogic/media/vout/hdmitx/mach_reg.h
@@ -0,0 +1,625 @@
+#ifndef __MACH_REG_H__
+#define __MACH_REG_H__
+
+/*
+ * RePacket HDMI related registers rd/wr
+ */
+struct reg_map {
+        uint32_t base_addr;
+};
+
+#define CBUS_REG_IDX            0
+#define PERIPHS_REG_IDX         1
+#define VCBUS_REG_IDX           2
+#define AOBUS_REG_IDX           3
+#define HHI_REG_IDX             4
+#define RESET_CBUS_REG_IDX      5
+#define HDMITX_REG_IDX          6
+#define HDMITX_SEC_REG_IDX      7
+#define ELP_ESM_REG_IDX         8
+/* new added in SC2 */
+#define ANACTRL_REG_IDX		9
+#define PWRCTRL_REG_IDX		10
+#define RESETCTRL_REG_IDX	11
+#define SYSCTRL_REG_IDX		12
+#define REG_IDX_END		13
+
+#define BASE_REG_OFFSET              24
+
+#define PERIPHS_REG_ADDR(reg) \
+	((PERIPHS_REG_IDX << BASE_REG_OFFSET) + ((reg) << 2))
+#define VCBUS_REG_ADDR(reg) \
+	((VCBUS_REG_IDX << BASE_REG_OFFSET) + ((reg) << 2))
+#define AOBUS_REG_ADDR(reg) \
+	((AOBUS_REG_IDX << BASE_REG_OFFSET) + ((reg) << 2))
+#define HHI_REG_ADDR(reg) \
+	((HHI_REG_IDX << BASE_REG_OFFSET) + ((reg) << 2))
+#define RESET_CBUS_REG_ADDR(reg) \
+	((RESET_CBUS_REG_IDX << BASE_REG_OFFSET) + ((reg) << 2))
+#define HDMITX_SEC_REG_ADDR(reg) \
+	((HDMITX_SEC_REG_IDX << BASE_REG_OFFSET) + (reg))/*DWC*/
+#define HDMITX_REG_ADDR(reg) \
+        ((HDMITX_REG_IDX << BASE_REG_OFFSET) + (reg))/*TOP*/
+#define ELP_ESM_REG_ADDR(reg) \
+	((ELP_ESM_REG_IDX << BASE_REG_OFFSET) + ((reg) << 2))
+#define ANACTRL_REG_ADDR(reg) \
+	((ANACTRL_REG_IDX << BASE_REG_OFFSET) + ((reg) << 2))
+#define PWRCTRL_REG_ADDR(reg) \
+	((PWRCTRL_REG_IDX << BASE_REG_OFFSET) + ((reg) << 2))
+#define RESETCTRL_REG_ADDR(reg) \
+	((RESETCTRL_REG_IDX << BASE_REG_OFFSET) + ((reg) << 2))
+#define SYSCTRL_REG_ADDR(reg) \
+	((SYSCTRL_REG_IDX << BASE_REG_OFFSET) + ((reg) << 2))
+
+struct reg_s {
+	unsigned int reg;
+	unsigned int val;
+};
+
+unsigned int hd_read_reg(unsigned int addr);
+void hd_write_reg(unsigned int addr, unsigned int val);
+void hd_set_reg_bits(unsigned int addr, unsigned int value, unsigned int offset,
+	unsigned int len);
+uint32_t hd_get_paddr(uint32_t addr);
+unsigned int hdmitx_rd_reg(unsigned int addr);
+void hdmitx_wr_reg(unsigned int addr, unsigned int data);
+void hdmitx_set_reg_bits(unsigned int addr, unsigned int value,
+        unsigned int offset, unsigned int len);
+void hdmitx_poll_reg(unsigned int addr, unsigned int val, unsigned long timeout);
+
+/* REG_BASE:  REGISTER_BASE_ADDR = 0xfe000000 */
+#define CLKCTRL_SYS_CLK_EN0_REG2 0x0013
+#define P_CLKCTRL_SYS_CLK_EN0_REG2 HHI_REG_ADDR(CLKCTRL_SYS_CLK_EN0_REG2)
+#define CLKCTRL_VID_CLK_CTRL 0x0030
+#define P_CLKCTRL_VID_CLK_CTRL HHI_REG_ADDR(CLKCTRL_VID_CLK_CTRL)
+#define CLKCTRL_VID_CLK_CTRL2 0x0031
+#define P_CLKCTRL_VID_CLK_CTRL2 HHI_REG_ADDR(CLKCTRL_VID_CLK_CTRL2)
+#define CLKCTRL_VID_CLK_DIV 0x0032
+#define P_CLKCTRL_VID_CLK_DIV HHI_REG_ADDR(CLKCTRL_VID_CLK_DIV)
+#define CLKCTRL_HDMI_CLK_CTRL 0x0038
+#define P_CLKCTRL_HDMI_CLK_CTRL HHI_REG_ADDR(CLKCTRL_HDMI_CLK_CTRL)
+#define CLKCTRL_VID_PLL_CLK_DIV 0x0039
+#define P_CLKCTRL_VID_PLL_CLK_DIV HHI_REG_ADDR(CLKCTRL_VID_PLL_CLK_DIV)
+#define CLKCTRL_HDCP22_CLK_CTRL 0x0040
+#define P_CLKCTRL_HDCP22_CLK_CTRL HHI_REG_ADDR(CLKCTRL_HDCP22_CLK_CTRL)
+
+/* REG_BASE:  REGISTER_BASE_ADDR = 0xfe002000 */
+#define RESETCTRL_RESET0 0x0000
+#define P_RESETCTRL_RESET0 RESETCTRL_REG_ADDR(RESETCTRL_RESET0)
+#define RESETCTRL_RESET2 0x0002
+#define P_RESETCTRL_RESET2 RESETCTRL_REG_ADDR(RESETCTRL_RESET2)
+
+/* REG_BASE:  REGISTER_BASE_ADDR = 0xfe004000 */
+#define PADCTRL_PIN_MUX_REGB 0x0b
+#define P_PADCTRL_PIN_MUX_REGB PERIPHS_REG_ADDR(PADCTRL_PIN_MUX_REGB)
+#define PADCTRL_GPIOH_I 0x50
+#define P_PADCTRL_GPIOH_I PERIPHS_REG_ADDR(PADCTRL_GPIOH_I)
+
+/* REG_BASE:  REGISTER_BASE_ADDR = 0xfe008000 */
+#define ANACTRL_HDMIPLL_CTRL0 0x0070
+#define P_ANACTRL_HDMIPLL_CTRL0 ANACTRL_REG_ADDR(ANACTRL_HDMIPLL_CTRL0)
+#define ANACTRL_HDMIPLL_CTRL1 0x0071
+#define P_ANACTRL_HDMIPLL_CTRL1 ANACTRL_REG_ADDR(ANACTRL_HDMIPLL_CTRL1)
+#define ANACTRL_HDMIPLL_CTRL2 0x0072
+#define P_ANACTRL_HDMIPLL_CTRL2 ANACTRL_REG_ADDR(ANACTRL_HDMIPLL_CTRL2)
+#define ANACTRL_HDMIPLL_CTRL3 0x0073
+#define P_ANACTRL_HDMIPLL_CTRL3 ANACTRL_REG_ADDR(ANACTRL_HDMIPLL_CTRL3)
+#define ANACTRL_HDMIPLL_CTRL4 0x0074
+#define P_ANACTRL_HDMIPLL_CTRL4 ANACTRL_REG_ADDR(ANACTRL_HDMIPLL_CTRL4)
+#define ANACTRL_HDMIPLL_CTRL5 0x0075
+#define P_ANACTRL_HDMIPLL_CTRL5 ANACTRL_REG_ADDR(ANACTRL_HDMIPLL_CTRL5)
+#define ANACTRL_HDMIPLL_CTRL6 0x0076
+#define P_ANACTRL_HDMIPLL_CTRL6 ANACTRL_REG_ADDR(ANACTRL_HDMIPLL_CTRL6)
+#define ANACTRL_HDMIPLL_STS 0x0077
+#define P_ANACTRL_HDMIPLL_STS ANACTRL_REG_ADDR(ANACTRL_HDMIPLL_STS)
+#define ANACTRL_HDMIPLL_VLOCK 0x0079
+#define P_ANACTRL_HDMIPLL_VLOCK ANACTRL_REG_ADDR(ANACTRL_HDMIPLL_VLOCK)
+#define ANACTRL_HDMIPHY_CTRL0 0x0080
+#define P_ANACTRL_HDMIPHY_CTRL0 ANACTRL_REG_ADDR(ANACTRL_HDMIPHY_CTRL0)
+#define ANACTRL_HDMIPHY_CTRL1 0x0081
+#define P_ANACTRL_HDMIPHY_CTRL1 ANACTRL_REG_ADDR(ANACTRL_HDMIPHY_CTRL1)
+#define ANACTRL_HDMIPHY_CTRL2 0x0082
+#define P_ANACTRL_HDMIPHY_CTRL2 ANACTRL_REG_ADDR(ANACTRL_HDMIPHY_CTRL2)
+#define ANACTRL_HDMIPHY_CTRL3 0x0083
+#define P_ANACTRL_HDMIPHY_CTRL3 ANACTRL_REG_ADDR(ANACTRL_HDMIPHY_CTRL3)
+#define ANACTRL_HDMIPHY_CTRL4 0x0084
+#define P_ANACTRL_HDMIPHY_CTRL4 ANACTRL_REG_ADDR(ANACTRL_HDMIPHY_CTRL4)
+#define ANACTRL_HDMIPHY_CTRL5 0x0085
+#define P_ANACTRL_HDMIPHY_CTRL5 ANACTRL_REG_ADDR(ANACTRL_HDMIPHY_CTRL5)
+#define ANACTRL_HDMIPHY_STS 0x0086
+#define P_ANACTRL_HDMIPHY_STS ANACTRL_REG_ADDR(ANACTRL_HDMIPHY_STS)
+
+/* REG_BASE:  REGISTER_BASE_ADDR = 0xfe00c000 */
+#define PWRCTRL_MEM_PD11 0x001b
+#define P_PWRCTRL_MEM_PD11 PWRCTRL_REG_ADDR(PWRCTRL_MEM_PD11)
+
+/* REG_BASE:  REGISTER_BASE_ADDR = 0xfe010000 */
+#define SYSCTRL_DEBUG_REG0 0x90
+#define P_SYSCTRL_DEBUG_REG0 SYSCTRL_REG_ADDR(SYSCTRL_DEBUG_REG0)
+
+/* REG_BASE:  REGISTER_BASE_ADDR = 0xff000000 */
+#define VENC_DVI_SETTING 0x1b62	/* register.h:8014 */
+#define P_VENC_DVI_SETTING VCBUS_REG_ADDR(VENC_DVI_SETTING)
+
+#define VENC_VIDEO_TST_EN 0x1b70
+#define P_VENC_VIDEO_TST_EN VCBUS_REG_ADDR(VENC_VIDEO_TST_EN)
+#define VENC_VIDEO_TST_MDSEL 0x1b71
+#define P_VENC_VIDEO_TST_MDSEL VCBUS_REG_ADDR(VENC_VIDEO_TST_MDSEL)
+#define VENC_VIDEO_TST_Y 0x1b72
+#define P_VENC_VIDEO_TST_Y VCBUS_REG_ADDR(VENC_VIDEO_TST_Y)
+#define VENC_VIDEO_TST_CB 0x1b73
+#define P_VENC_VIDEO_TST_CB VCBUS_REG_ADDR(VENC_VIDEO_TST_CB)
+#define VENC_VIDEO_TST_CR 0x1b74
+#define P_VENC_VIDEO_TST_CR VCBUS_REG_ADDR(VENC_VIDEO_TST_CR)
+#define VENC_VIDEO_TST_CLRBAR_STRT 0x1b75
+#define P_VENC_VIDEO_TST_CLRBAR_STRT VCBUS_REG_ADDR(VENC_VIDEO_TST_CLRBAR_STRT)
+#define VENC_VIDEO_TST_CLRBAR_WIDTH 0x1b76
+#define P_VENC_VIDEO_TST_CLRBAR_WIDTH \
+		VCBUS_REG_ADDR(VENC_VIDEO_TST_CLRBAR_WIDTH)
+#define VENC_VIDEO_TST_VDCNT_STSET 0x1b77
+#define P_VENC_VIDEO_TST_VDCNT_STSET VCBUS_REG_ADDR(VENC_VIDEO_TST_VDCNT_STSET)
+#define VENC_VDAC_SETTING 0x1b7e
+#define P_VENC_VDAC_SETTING VCBUS_REG_ADDR(VENC_VDAC_SETTING)
+#define ENCP_VIDEO_EN 0x1b80	/* register.h:8078 */
+#define P_ENCP_VIDEO_EN VCBUS_REG_ADDR(ENCP_VIDEO_EN)
+#define ENCP_VIDEO_SYNC_MODE 0x1b81	/* register.h:8079 */
+#define P_ENCP_VIDEO_SYNC_MODE VCBUS_REG_ADDR(ENCP_VIDEO_SYNC_MODE)
+#define ENCP_MACV_EN 0x1b82	/* register.h:8080 */
+#define P_ENCP_MACV_EN VCBUS_REG_ADDR(ENCP_MACV_EN)
+#define ENCP_VIDEO_Y_SCL 0x1b83	/* register.h:8081 */
+#define P_ENCP_VIDEO_Y_SCL VCBUS_REG_ADDR(ENCP_VIDEO_Y_SCL)
+#define ENCP_VIDEO_PB_SCL 0x1b84	/* register.h:8082 */
+#define P_ENCP_VIDEO_PB_SCL VCBUS_REG_ADDR(ENCP_VIDEO_PB_SCL)
+#define ENCP_VIDEO_PR_SCL 0x1b85	/* register.h:8083 */
+#define P_ENCP_VIDEO_PR_SCL VCBUS_REG_ADDR(ENCP_VIDEO_PR_SCL)
+#define ENCP_VIDEO_SYNC_SCL 0x1b86	/* register.h:8084 */
+#define P_ENCP_VIDEO_SYNC_SCL VCBUS_REG_ADDR(ENCP_VIDEO_SYNC_SCL)
+#define ENCP_VIDEO_MACV_SCL 0x1b87	/* register.h:8085 */
+#define P_ENCP_VIDEO_MACV_SCL VCBUS_REG_ADDR(ENCP_VIDEO_MACV_SCL)
+#define ENCP_VIDEO_Y_OFFST 0x1b88	/* register.h:8086 */
+#define P_ENCP_VIDEO_Y_OFFST VCBUS_REG_ADDR(ENCP_VIDEO_Y_OFFST)
+#define ENCP_VIDEO_PB_OFFST 0x1b89	/* register.h:8087 */
+#define P_ENCP_VIDEO_PB_OFFST VCBUS_REG_ADDR(ENCP_VIDEO_PB_OFFST)
+#define ENCP_VIDEO_PR_OFFST 0x1b8a	/* register.h:8088 */
+#define P_ENCP_VIDEO_PR_OFFST VCBUS_REG_ADDR(ENCP_VIDEO_PR_OFFST)
+#define ENCP_VIDEO_SYNC_OFFST 0x1b8b	/* register.h:8089 */
+#define P_ENCP_VIDEO_SYNC_OFFST VCBUS_REG_ADDR(ENCP_VIDEO_SYNC_OFFST)
+#define ENCP_VIDEO_MACV_OFFST 0x1b8c	/* register.h:8090 */
+#define P_ENCP_VIDEO_MACV_OFFST VCBUS_REG_ADDR(ENCP_VIDEO_MACV_OFFST)
+#define ENCP_VIDEO_MODE 0x1b8d	/* register.h:8092 */
+#define P_ENCP_VIDEO_MODE VCBUS_REG_ADDR(ENCP_VIDEO_MODE)
+#define ENCP_VIDEO_MODE_ADV 0x1b8e	/* register.h:8093 */
+#define P_ENCP_VIDEO_MODE_ADV VCBUS_REG_ADDR(ENCP_VIDEO_MODE_ADV)
+#define ENCP_DBG_PX_RST 0x1b90	/* register.h:8095 */
+#define P_ENCP_DBG_PX_RST VCBUS_REG_ADDR(ENCP_DBG_PX_RST)
+#define ENCP_DBG_LN_RST 0x1b91	/* register.h:8096 */
+#define P_ENCP_DBG_LN_RST VCBUS_REG_ADDR(ENCP_DBG_LN_RST)
+#define ENCP_DBG_PX_INT 0x1b92	/* register.h:8097 */
+#define P_ENCP_DBG_PX_INT VCBUS_REG_ADDR(ENCP_DBG_PX_INT)
+#define ENCP_DBG_LN_INT 0x1b93	/* register.h:8098 */
+#define P_ENCP_DBG_LN_INT VCBUS_REG_ADDR(ENCP_DBG_LN_INT)
+#define ENCP_VIDEO_YFP1_HTIME 0x1b94	/* register.h:8100 */
+#define P_ENCP_VIDEO_YFP1_HTIME VCBUS_REG_ADDR(ENCP_VIDEO_YFP1_HTIME)
+#define ENCP_VIDEO_YFP2_HTIME 0x1b95	/* register.h:8101 */
+#define P_ENCP_VIDEO_YFP2_HTIME VCBUS_REG_ADDR(ENCP_VIDEO_YFP2_HTIME)
+#define ENCP_VIDEO_YC_DLY 0x1b96	/* register.h:8102 */
+#define P_ENCP_VIDEO_YC_DLY VCBUS_REG_ADDR(ENCP_VIDEO_YC_DLY)
+#define ENCP_VIDEO_MAX_PXCNT 0x1b97	/* register.h:8103 */
+#define P_ENCP_VIDEO_MAX_PXCNT VCBUS_REG_ADDR(ENCP_VIDEO_MAX_PXCNT)
+#define ENCP_VIDEO_HSPULS_BEGIN 0x1b98	/* register.h:8104 */
+#define P_ENCP_VIDEO_HSPULS_BEGIN VCBUS_REG_ADDR(ENCP_VIDEO_HSPULS_BEGIN)
+#define ENCP_VIDEO_HSPULS_END 0x1b99	/* register.h:8105 */
+#define P_ENCP_VIDEO_HSPULS_END VCBUS_REG_ADDR(ENCP_VIDEO_HSPULS_END)
+#define ENCP_VIDEO_HSPULS_SWITCH 0x1b9a	/* register.h:8106 */
+#define P_ENCP_VIDEO_HSPULS_SWITCH VCBUS_REG_ADDR(ENCP_VIDEO_HSPULS_SWITCH)
+#define ENCP_VIDEO_VSPULS_BEGIN 0x1b9b	/* register.h:8107 */
+#define P_ENCP_VIDEO_VSPULS_BEGIN VCBUS_REG_ADDR(ENCP_VIDEO_VSPULS_BEGIN)
+#define ENCP_VIDEO_VSPULS_END 0x1b9c	/* register.h:8108 */
+#define P_ENCP_VIDEO_VSPULS_END VCBUS_REG_ADDR(ENCP_VIDEO_VSPULS_END)
+#define ENCP_VIDEO_VSPULS_BLINE 0x1b9d	/* register.h:8109 */
+#define P_ENCP_VIDEO_VSPULS_BLINE VCBUS_REG_ADDR(ENCP_VIDEO_VSPULS_BLINE)
+#define ENCP_VIDEO_VSPULS_ELINE 0x1b9e	/* register.h:8110 */
+#define P_ENCP_VIDEO_VSPULS_ELINE VCBUS_REG_ADDR(ENCP_VIDEO_VSPULS_ELINE)
+#define ENCP_VIDEO_EQPULS_BEGIN 0x1b9f	/* register.h:8111 */
+#define P_ENCP_VIDEO_EQPULS_BEGIN VCBUS_REG_ADDR(ENCP_VIDEO_EQPULS_BEGIN)
+#define ENCP_VIDEO_EQPULS_END 0x1ba0	/* register.h:8112 */
+#define P_ENCP_VIDEO_EQPULS_END VCBUS_REG_ADDR(ENCP_VIDEO_EQPULS_END)
+#define ENCP_VIDEO_EQPULS_BLINE 0x1ba1	/* register.h:8113 */
+#define P_ENCP_VIDEO_EQPULS_BLINE VCBUS_REG_ADDR(ENCP_VIDEO_EQPULS_BLINE)
+#define ENCP_VIDEO_EQPULS_ELINE 0x1ba2	/* register.h:8114 */
+#define P_ENCP_VIDEO_EQPULS_ELINE VCBUS_REG_ADDR(ENCP_VIDEO_EQPULS_ELINE)
+#define ENCP_VIDEO_HAVON_END 0x1ba3	/* register.h:8115 */
+#define P_ENCP_VIDEO_HAVON_END VCBUS_REG_ADDR(ENCP_VIDEO_HAVON_END)
+#define ENCP_VIDEO_HAVON_BEGIN 0x1ba4	/* register.h:8116 */
+#define P_ENCP_VIDEO_HAVON_BEGIN VCBUS_REG_ADDR(ENCP_VIDEO_HAVON_BEGIN)
+#define ENCP_VIDEO_VAVON_ELINE 0x1baf	/* register.h:8117 */
+#define P_ENCP_VIDEO_VAVON_ELINE VCBUS_REG_ADDR(ENCP_VIDEO_VAVON_ELINE)
+#define ENCP_VIDEO_VAVON_BLINE 0x1ba6	/* register.h:8118 */
+#define P_ENCP_VIDEO_VAVON_BLINE VCBUS_REG_ADDR(ENCP_VIDEO_VAVON_BLINE)
+#define ENCP_VIDEO_HSO_BEGIN 0x1ba7	/* register.h:8119 */
+#define P_ENCP_VIDEO_HSO_BEGIN VCBUS_REG_ADDR(ENCP_VIDEO_HSO_BEGIN)
+#define ENCP_VIDEO_HSO_END 0x1ba8	/* register.h:8120 */
+#define P_ENCP_VIDEO_HSO_END VCBUS_REG_ADDR(ENCP_VIDEO_HSO_END)
+#define ENCP_VIDEO_VSO_BEGIN 0x1ba9	/* register.h:8121 */
+#define P_ENCP_VIDEO_VSO_BEGIN VCBUS_REG_ADDR(ENCP_VIDEO_VSO_BEGIN)
+#define ENCP_VIDEO_VSO_END 0x1baa	/* register.h:8122 */
+#define P_ENCP_VIDEO_VSO_END VCBUS_REG_ADDR(ENCP_VIDEO_VSO_END)
+#define ENCP_VIDEO_VSO_BLINE 0x1bab	/* register.h:8123 */
+#define P_ENCP_VIDEO_VSO_BLINE VCBUS_REG_ADDR(ENCP_VIDEO_VSO_BLINE)
+#define ENCP_VIDEO_VSO_ELINE 0x1bac	/* register.h:8124 */
+#define P_ENCP_VIDEO_VSO_ELINE VCBUS_REG_ADDR(ENCP_VIDEO_VSO_ELINE)
+#define ENCP_VIDEO_SYNC_WAVE_CURVE 0x1bad	/* register.h:8125 */
+#define P_ENCP_VIDEO_SYNC_WAVE_CURVE VCBUS_REG_ADDR(ENCP_VIDEO_SYNC_WAVE_CURVE)
+#define ENCP_VIDEO_MAX_LNCNT 0x1bae	/* register.h:8126 */
+#define P_ENCP_VIDEO_MAX_LNCNT VCBUS_REG_ADDR(ENCP_VIDEO_MAX_LNCNT)
+#define ENCP_VIDEO_SY_VAL 0x1bb0	/* register.h:8127 */
+#define P_ENCP_VIDEO_SY_VAL VCBUS_REG_ADDR(ENCP_VIDEO_SY_VAL)
+#define ENCP_VIDEO_SY2_VAL 0x1bb1	/* register.h:8128 */
+#define P_ENCP_VIDEO_SY2_VAL VCBUS_REG_ADDR(ENCP_VIDEO_SY2_VAL)
+#define ENCP_VIDEO_BLANKY_VAL 0x1bb2	/* register.h:8129 */
+#define P_ENCP_VIDEO_BLANKY_VAL VCBUS_REG_ADDR(ENCP_VIDEO_BLANKY_VAL)
+#define ENCP_VIDEO_BLANKPB_VAL 0x1bb3	/* register.h:8130 */
+#define P_ENCP_VIDEO_BLANKPB_VAL VCBUS_REG_ADDR(ENCP_VIDEO_BLANKPB_VAL)
+#define ENCP_VIDEO_BLANKPR_VAL 0x1bb4	/* register.h:8131 */
+#define P_ENCP_VIDEO_BLANKPR_VAL VCBUS_REG_ADDR(ENCP_VIDEO_BLANKPR_VAL)
+#define ENCP_VIDEO_HOFFST 0x1bb5	/* register.h:8132 */
+#define P_ENCP_VIDEO_HOFFST VCBUS_REG_ADDR(ENCP_VIDEO_HOFFST)
+#define ENCP_VIDEO_VOFFST 0x1bb6	/* register.h:8133 */
+#define P_ENCP_VIDEO_VOFFST VCBUS_REG_ADDR(ENCP_VIDEO_VOFFST)
+#define ENCP_VIDEO_RGB_CTRL 0x1bb7	/* register.h:8134 */
+#define P_ENCP_VIDEO_RGB_CTRL VCBUS_REG_ADDR(ENCP_VIDEO_RGB_CTRL)
+#define ENCP_VIDEO_FILT_CTRL 0x1bb8	/* register.h:8135 */
+#define P_ENCP_VIDEO_FILT_CTRL VCBUS_REG_ADDR(ENCP_VIDEO_FILT_CTRL)
+#define ENCP_VIDEO_OFLD_VPEQ_OFST 0x1bb9	/* register.h:8136 */
+#define P_ENCP_VIDEO_OFLD_VPEQ_OFST VCBUS_REG_ADDR(ENCP_VIDEO_OFLD_VPEQ_OFST)
+#define ENCP_VIDEO_OFLD_VOAV_OFST 0x1bba	/* register.h:8137 */
+#define P_ENCP_VIDEO_OFLD_VOAV_OFST VCBUS_REG_ADDR(ENCP_VIDEO_OFLD_VOAV_OFST)
+#define ENCP_VIDEO_MATRIX_CB 0x1bbb	/* register.h:8138 */
+#define P_ENCP_VIDEO_MATRIX_CB VCBUS_REG_ADDR(ENCP_VIDEO_MATRIX_CB)
+#define ENCP_VIDEO_MATRIX_CR 0x1bbc	/* register.h:8139 */
+#define P_ENCP_VIDEO_MATRIX_CR VCBUS_REG_ADDR(ENCP_VIDEO_MATRIX_CR)
+#define ENCP_VIDEO_RGBIN_CTRL 0x1bbd	/* register.h:8140 */
+#define P_ENCP_VIDEO_RGBIN_CTRL VCBUS_REG_ADDR(ENCP_VIDEO_RGBIN_CTRL)
+#define ENCP_MACV_BLANKY_VAL 0x1bc0	/* register.h:8142 */
+#define P_ENCP_MACV_BLANKY_VAL VCBUS_REG_ADDR(ENCP_MACV_BLANKY_VAL)
+#define ENCP_MACV_MAXY_VAL 0x1bc1	/* register.h:8143 */
+#define P_ENCP_MACV_MAXY_VAL VCBUS_REG_ADDR(ENCP_MACV_MAXY_VAL)
+#define ENCP_MACV_1ST_PSSYNC_STRT 0x1bc2	/* register.h:8144 */
+#define P_ENCP_MACV_1ST_PSSYNC_STRT VCBUS_REG_ADDR(ENCP_MACV_1ST_PSSYNC_STRT)
+#define ENCP_MACV_PSSYNC_STRT 0x1bc3	/* register.h:8145 */
+#define P_ENCP_MACV_PSSYNC_STRT VCBUS_REG_ADDR(ENCP_MACV_PSSYNC_STRT)
+#define ENCP_MACV_AGC_STRT 0x1bc4	/* register.h:8146 */
+#define P_ENCP_MACV_AGC_STRT VCBUS_REG_ADDR(ENCP_MACV_AGC_STRT)
+#define ENCP_MACV_AGC_END 0x1bc5	/* register.h:8147 */
+#define P_ENCP_MACV_AGC_END VCBUS_REG_ADDR(ENCP_MACV_AGC_END)
+#define ENCP_MACV_WAVE_END 0x1bc6	/* register.h:8148 */
+#define P_ENCP_MACV_WAVE_END VCBUS_REG_ADDR(ENCP_MACV_WAVE_END)
+#define ENCP_MACV_STRTLINE 0x1bc7	/* register.h:8149 */
+#define P_ENCP_MACV_STRTLINE VCBUS_REG_ADDR(ENCP_MACV_STRTLINE)
+#define ENCP_MACV_ENDLINE 0x1bc8	/* register.h:8150 */
+#define P_ENCP_MACV_ENDLINE VCBUS_REG_ADDR(ENCP_MACV_ENDLINE)
+#define ENCP_MACV_TS_CNT_MAX_L 0x1bc9	/* register.h:8151 */
+#define P_ENCP_MACV_TS_CNT_MAX_L VCBUS_REG_ADDR(ENCP_MACV_TS_CNT_MAX_L)
+#define ENCP_MACV_TS_CNT_MAX_H 0x1bca	/* register.h:8152 */
+#define P_ENCP_MACV_TS_CNT_MAX_H VCBUS_REG_ADDR(ENCP_MACV_TS_CNT_MAX_H)
+#define ENCP_MACV_TIME_DOWN 0x1bcb	/* register.h:8153 */
+#define P_ENCP_MACV_TIME_DOWN VCBUS_REG_ADDR(ENCP_MACV_TIME_DOWN)
+#define ENCP_MACV_TIME_LO 0x1bcc	/* register.h:8154 */
+#define P_ENCP_MACV_TIME_LO VCBUS_REG_ADDR(ENCP_MACV_TIME_LO)
+#define ENCP_MACV_TIME_UP 0x1bcd	/* register.h:8155 */
+#define P_ENCP_MACV_TIME_UP VCBUS_REG_ADDR(ENCP_MACV_TIME_UP)
+#define ENCP_MACV_TIME_RST 0x1bce	/* register.h:8156 */
+#define P_ENCP_MACV_TIME_RST VCBUS_REG_ADDR(ENCP_MACV_TIME_RST)
+#define ENCP_VBI_CTRL 0x1bd0	/* register.h:8158 */
+#define P_ENCP_VBI_CTRL VCBUS_REG_ADDR(ENCP_VBI_CTRL)
+#define ENCP_VBI_SETTING 0x1bd1	/* register.h:8159 */
+#define P_ENCP_VBI_SETTING VCBUS_REG_ADDR(ENCP_VBI_SETTING)
+#define ENCP_VBI_BEGIN 0x1bd2	/* register.h:8160 */
+#define P_ENCP_VBI_BEGIN VCBUS_REG_ADDR(ENCP_VBI_BEGIN)
+#define ENCP_VBI_WIDTH 0x1bd3	/* register.h:8161 */
+#define P_ENCP_VBI_WIDTH VCBUS_REG_ADDR(ENCP_VBI_WIDTH)
+#define ENCP_VBI_HVAL 0x1bd4	/* register.h:8162 */
+#define P_ENCP_VBI_HVAL VCBUS_REG_ADDR(ENCP_VBI_HVAL)
+#define ENCP_VBI_DATA0 0x1bd5	/* register.h:8163 */
+#define P_ENCP_VBI_DATA0 VCBUS_REG_ADDR(ENCP_VBI_DATA0)
+#define ENCP_VBI_DATA1 0x1bd6	/* register.h:8164 */
+#define P_ENCP_VBI_DATA1 VCBUS_REG_ADDR(ENCP_VBI_DATA1)
+
+#define ENCI_VIDEO_MODE 0x1b00	/* register.h:8185 */
+#define P_ENCI_VIDEO_MODE VCBUS_REG_ADDR(ENCI_VIDEO_MODE)
+#define ENCI_VIDEO_MODE_ADV 0x1b01	/* register.h:8186 */
+#define P_ENCI_VIDEO_MODE_ADV VCBUS_REG_ADDR(ENCI_VIDEO_MODE_ADV)
+#define ENCI_VIDEO_FSC_ADJ 0x1b02	/* register.h:8187 */
+#define P_ENCI_VIDEO_FSC_ADJ VCBUS_REG_ADDR(ENCI_VIDEO_FSC_ADJ)
+#define ENCI_VIDEO_BRIGHT 0x1b03	/* register.h:8188 */
+#define P_ENCI_VIDEO_BRIGHT VCBUS_REG_ADDR(ENCI_VIDEO_BRIGHT)
+#define ENCI_VIDEO_CONT 0x1b04	/* register.h:8189 */
+#define P_ENCI_VIDEO_CONT VCBUS_REG_ADDR(ENCI_VIDEO_CONT)
+#define ENCI_VIDEO_SAT 0x1b05	/* register.h:8190 */
+#define P_ENCI_VIDEO_SAT VCBUS_REG_ADDR(ENCI_VIDEO_SAT)
+#define ENCI_VIDEO_HUE 0x1b06	/* register.h:8191 */
+#define P_ENCI_VIDEO_HUE VCBUS_REG_ADDR(ENCI_VIDEO_HUE)
+#define ENCI_VIDEO_SCH 0x1b07	/* register.h:8192 */
+#define P_ENCI_VIDEO_SCH VCBUS_REG_ADDR(ENCI_VIDEO_SCH)
+#define ENCI_SYNC_MODE 0x1b08	/* register.h:8193 */
+#define P_ENCI_SYNC_MODE VCBUS_REG_ADDR(ENCI_SYNC_MODE)
+#define ENCI_SYNC_CTRL 0x1b09	/* register.h:8194 */
+#define P_ENCI_SYNC_CTRL VCBUS_REG_ADDR(ENCI_SYNC_CTRL)
+#define ENCI_SYNC_HSO_BEGIN 0x1b0a	/* register.h:8195 */
+#define P_ENCI_SYNC_HSO_BEGIN VCBUS_REG_ADDR(ENCI_SYNC_HSO_BEGIN)
+#define ENCI_SYNC_HSO_END 0x1b0b	/* register.h:8196 */
+#define P_ENCI_SYNC_HSO_END VCBUS_REG_ADDR(ENCI_SYNC_HSO_END)
+#define ENCI_SYNC_VSO_EVN 0x1b0c	/* register.h:8197 */
+#define P_ENCI_SYNC_VSO_EVN VCBUS_REG_ADDR(ENCI_SYNC_VSO_EVN)
+#define ENCI_SYNC_VSO_ODD 0x1b0d	/* register.h:8198 */
+#define P_ENCI_SYNC_VSO_ODD VCBUS_REG_ADDR(ENCI_SYNC_VSO_ODD)
+#define ENCI_SYNC_VSO_EVNLN 0x1b0e	/* register.h:8199 */
+#define P_ENCI_SYNC_VSO_EVNLN VCBUS_REG_ADDR(ENCI_SYNC_VSO_EVNLN)
+#define ENCI_SYNC_VSO_ODDLN 0x1b0f	/* register.h:8200 */
+#define P_ENCI_SYNC_VSO_ODDLN VCBUS_REG_ADDR(ENCI_SYNC_VSO_ODDLN)
+#define ENCI_SYNC_HOFFST 0x1b10	/* register.h:8201 */
+#define P_ENCI_SYNC_HOFFST VCBUS_REG_ADDR(ENCI_SYNC_HOFFST)
+#define ENCI_SYNC_VOFFST 0x1b11	/* register.h:8202 */
+#define P_ENCI_SYNC_VOFFST VCBUS_REG_ADDR(ENCI_SYNC_VOFFST)
+#define ENCI_SYNC_ADJ 0x1b12	/* register.h:8203 */
+#define P_ENCI_SYNC_ADJ VCBUS_REG_ADDR(ENCI_SYNC_ADJ)
+#define ENCI_RGB_SETTING 0x1b13	/* register.h:8204 */
+#define P_ENCI_RGB_SETTING VCBUS_REG_ADDR(ENCI_RGB_SETTING)
+#define ENCI_DE_H_BEGIN 0x1b16	/* register.h:8207 */
+#define P_ENCI_DE_H_BEGIN VCBUS_REG_ADDR(ENCI_DE_H_BEGIN)
+#define ENCI_DE_H_END 0x1b17	/* register.h:8208 */
+#define P_ENCI_DE_H_END VCBUS_REG_ADDR(ENCI_DE_H_END)
+#define ENCI_DE_V_BEGIN_EVEN 0x1b18	/* register.h:8209 */
+#define P_ENCI_DE_V_BEGIN_EVEN VCBUS_REG_ADDR(ENCI_DE_V_BEGIN_EVEN)
+#define ENCI_DE_V_END_EVEN 0x1b19	/* register.h:8210 */
+#define P_ENCI_DE_V_END_EVEN VCBUS_REG_ADDR(ENCI_DE_V_END_EVEN)
+#define ENCI_DE_V_BEGIN_ODD 0x1b1a	/* register.h:8211 */
+#define P_ENCI_DE_V_BEGIN_ODD VCBUS_REG_ADDR(ENCI_DE_V_BEGIN_ODD)
+#define ENCI_DE_V_END_ODD 0x1b1b	/* register.h:8212 */
+#define P_ENCI_DE_V_END_ODD VCBUS_REG_ADDR(ENCI_DE_V_END_ODD)
+#define ENCI_VBI_SETTING 0x1b20	/* register.h:8213 */
+#define P_ENCI_VBI_SETTING VCBUS_REG_ADDR(ENCI_VBI_SETTING)
+#define ENCI_VBI_CCDT_EVN 0x1b21	/* register.h:8214 */
+#define P_ENCI_VBI_CCDT_EVN VCBUS_REG_ADDR(ENCI_VBI_CCDT_EVN)
+#define ENCI_VBI_CCDT_ODD 0x1b22	/* register.h:8215 */
+#define P_ENCI_VBI_CCDT_ODD VCBUS_REG_ADDR(ENCI_VBI_CCDT_ODD)
+#define ENCI_VBI_CC525_LN 0x1b23	/* register.h:8216 */
+#define P_ENCI_VBI_CC525_LN VCBUS_REG_ADDR(ENCI_VBI_CC525_LN)
+#define ENCI_VBI_CC625_LN 0x1b24	/* register.h:8217 */
+#define P_ENCI_VBI_CC625_LN VCBUS_REG_ADDR(ENCI_VBI_CC625_LN)
+#define ENCI_VBI_WSSDT 0x1b25	/* register.h:8218 */
+#define P_ENCI_VBI_WSSDT VCBUS_REG_ADDR(ENCI_VBI_WSSDT)
+#define ENCI_VBI_WSS_LN 0x1b26	/* register.h:8219 */
+#define P_ENCI_VBI_WSS_LN VCBUS_REG_ADDR(ENCI_VBI_WSS_LN)
+#define ENCI_VBI_CGMSDT_L 0x1b27	/* register.h:8220 */
+#define P_ENCI_VBI_CGMSDT_L VCBUS_REG_ADDR(ENCI_VBI_CGMSDT_L)
+#define ENCI_VBI_CGMSDT_H 0x1b28	/* register.h:8221 */
+#define P_ENCI_VBI_CGMSDT_H VCBUS_REG_ADDR(ENCI_VBI_CGMSDT_H)
+#define ENCI_VBI_CGMS_LN 0x1b29	/* register.h:8222 */
+#define P_ENCI_VBI_CGMS_LN VCBUS_REG_ADDR(ENCI_VBI_CGMS_LN)
+#define ENCI_VBI_TTX_HTIME 0x1b2a	/* register.h:8223 */
+#define P_ENCI_VBI_TTX_HTIME VCBUS_REG_ADDR(ENCI_VBI_TTX_HTIME)
+#define ENCI_VBI_TTX_LN 0x1b2b	/* register.h:8224 */
+#define P_ENCI_VBI_TTX_LN VCBUS_REG_ADDR(ENCI_VBI_TTX_LN)
+#define ENCI_VBI_TTXDT0 0x1b2c	/* register.h:8225 */
+#define P_ENCI_VBI_TTXDT0 VCBUS_REG_ADDR(ENCI_VBI_TTXDT0)
+#define ENCI_VBI_TTXDT1 0x1b2d	/* register.h:8226 */
+#define P_ENCI_VBI_TTXDT1 VCBUS_REG_ADDR(ENCI_VBI_TTXDT1)
+#define ENCI_VBI_TTXDT2 0x1b2e	/* register.h:8227 */
+#define P_ENCI_VBI_TTXDT2 VCBUS_REG_ADDR(ENCI_VBI_TTXDT2)
+#define ENCI_VBI_TTXDT3 0x1b2f	/* register.h:8228 */
+#define P_ENCI_VBI_TTXDT3 VCBUS_REG_ADDR(ENCI_VBI_TTXDT3)
+#define ENCI_MACV_N0 0x1b30	/* register.h:8229 */
+#define P_ENCI_MACV_N0 VCBUS_REG_ADDR(ENCI_MACV_N0)
+#define ENCI_MACV_N1 0x1b31	/* register.h:8230 */
+#define P_ENCI_MACV_N1 VCBUS_REG_ADDR(ENCI_MACV_N1)
+#define ENCI_MACV_N2 0x1b32	/* register.h:8231 */
+#define P_ENCI_MACV_N2 VCBUS_REG_ADDR(ENCI_MACV_N2)
+#define ENCI_MACV_N3 0x1b33	/* register.h:8232 */
+#define P_ENCI_MACV_N3 VCBUS_REG_ADDR(ENCI_MACV_N3)
+#define ENCI_MACV_N4 0x1b34	/* register.h:8233 */
+#define P_ENCI_MACV_N4 VCBUS_REG_ADDR(ENCI_MACV_N4)
+#define ENCI_MACV_N5 0x1b35	/* register.h:8234 */
+#define P_ENCI_MACV_N5 VCBUS_REG_ADDR(ENCI_MACV_N5)
+#define ENCI_MACV_N6 0x1b36	/* register.h:8235 */
+#define P_ENCI_MACV_N6 VCBUS_REG_ADDR(ENCI_MACV_N6)
+#define ENCI_MACV_N7 0x1b37	/* register.h:8236 */
+#define P_ENCI_MACV_N7 VCBUS_REG_ADDR(ENCI_MACV_N7)
+#define ENCI_MACV_N8 0x1b38	/* register.h:8237 */
+#define P_ENCI_MACV_N8 VCBUS_REG_ADDR(ENCI_MACV_N8)
+#define ENCI_MACV_N9 0x1b39	/* register.h:8238 */
+#define P_ENCI_MACV_N9 VCBUS_REG_ADDR(ENCI_MACV_N9)
+#define ENCI_MACV_N10 0x1b3a	/* register.h:8239 */
+#define P_ENCI_MACV_N10 VCBUS_REG_ADDR(ENCI_MACV_N10)
+#define ENCI_MACV_N11 0x1b3b	/* register.h:8240 */
+#define P_ENCI_MACV_N11 VCBUS_REG_ADDR(ENCI_MACV_N11)
+#define ENCI_MACV_N12 0x1b3c	/* register.h:8241 */
+#define P_ENCI_MACV_N12 VCBUS_REG_ADDR(ENCI_MACV_N12)
+#define ENCI_MACV_N13 0x1b3d	/* register.h:8242 */
+#define P_ENCI_MACV_N13 VCBUS_REG_ADDR(ENCI_MACV_N13)
+#define ENCI_MACV_N14 0x1b3e	/* register.h:8243 */
+#define P_ENCI_MACV_N14 VCBUS_REG_ADDR(ENCI_MACV_N14)
+#define ENCI_MACV_N15 0x1b3f	/* register.h:8244 */
+#define P_ENCI_MACV_N15 VCBUS_REG_ADDR(ENCI_MACV_N15)
+#define ENCI_MACV_N16 0x1b40	/* register.h:8245 */
+#define P_ENCI_MACV_N16 VCBUS_REG_ADDR(ENCI_MACV_N16)
+#define ENCI_MACV_N17 0x1b41	/* register.h:8246 */
+#define P_ENCI_MACV_N17 VCBUS_REG_ADDR(ENCI_MACV_N17)
+#define ENCI_MACV_N18 0x1b42	/* register.h:8247 */
+#define P_ENCI_MACV_N18 VCBUS_REG_ADDR(ENCI_MACV_N18)
+#define ENCI_MACV_N19 0x1b43	/* register.h:8248 */
+#define P_ENCI_MACV_N19 VCBUS_REG_ADDR(ENCI_MACV_N19)
+#define ENCI_MACV_N20 0x1b44	/* register.h:8249 */
+#define P_ENCI_MACV_N20 VCBUS_REG_ADDR(ENCI_MACV_N20)
+#define ENCI_MACV_N21 0x1b45	/* register.h:8250 */
+#define P_ENCI_MACV_N21 VCBUS_REG_ADDR(ENCI_MACV_N21)
+#define ENCI_MACV_N22 0x1b46	/* register.h:8251 */
+#define P_ENCI_MACV_N22 VCBUS_REG_ADDR(ENCI_MACV_N22)
+#define ENCI_DBG_PX_RST 0x1b48	/* register.h:8253 */
+#define P_ENCI_DBG_PX_RST VCBUS_REG_ADDR(ENCI_DBG_PX_RST)
+#define ENCI_DBG_FLDLN_RST 0x1b49	/* register.h:8254 */
+#define P_ENCI_DBG_FLDLN_RST VCBUS_REG_ADDR(ENCI_DBG_FLDLN_RST)
+#define ENCI_DBG_PX_INT 0x1b4a	/* register.h:8255 */
+#define P_ENCI_DBG_PX_INT VCBUS_REG_ADDR(ENCI_DBG_PX_INT)
+#define ENCI_DBG_FLDLN_INT 0x1b4b	/* register.h:8256 */
+#define P_ENCI_DBG_FLDLN_INT VCBUS_REG_ADDR(ENCI_DBG_FLDLN_INT)
+#define ENCI_DBG_MAXPX 0x1b4c	/* register.h:8257 */
+#define P_ENCI_DBG_MAXPX VCBUS_REG_ADDR(ENCI_DBG_MAXPX)
+#define ENCI_DBG_MAXLN 0x1b4d	/* register.h:8258 */
+#define P_ENCI_DBG_MAXLN VCBUS_REG_ADDR(ENCI_DBG_MAXLN)
+#define ENCI_MACV_MAX_AMP 0x1b50	/* register.h:8259 */
+#define P_ENCI_MACV_MAX_AMP VCBUS_REG_ADDR(ENCI_MACV_MAX_AMP)
+#define ENCI_MACV_PULSE_LO 0x1b51	/* register.h:8260 */
+#define P_ENCI_MACV_PULSE_LO VCBUS_REG_ADDR(ENCI_MACV_PULSE_LO)
+#define ENCI_MACV_PULSE_HI 0x1b52	/* register.h:8261 */
+#define P_ENCI_MACV_PULSE_HI VCBUS_REG_ADDR(ENCI_MACV_PULSE_HI)
+#define ENCI_MACV_BKP_MAX 0x1b53	/* register.h:8262 */
+#define P_ENCI_MACV_BKP_MAX VCBUS_REG_ADDR(ENCI_MACV_BKP_MAX)
+#define ENCI_CFILT_CTRL 0x1b54	/* register.h:8263 */
+#define P_ENCI_CFILT_CTRL VCBUS_REG_ADDR(ENCI_CFILT_CTRL)
+#define ENCI_CFILT7 0x1b55	/* register.h:8264 */
+#define P_ENCI_CFILT7 VCBUS_REG_ADDR(ENCI_CFILT7)
+#define ENCI_YC_DELAY 0x1b56	/* register.h:8265 */
+#define P_ENCI_YC_DELAY VCBUS_REG_ADDR(ENCI_YC_DELAY)
+#define ENCI_VIDEO_EN 0x1b57	/* register.h:8266 */
+#define P_ENCI_VIDEO_EN VCBUS_REG_ADDR(ENCI_VIDEO_EN)
+#define VENC_VIDEO_PROG_MODE 0x1b68	/* /../ucode/register.h:8023 */
+#define P_VENC_VIDEO_PROG_MODE		VCBUS_REG_ADDR(VENC_VIDEO_PROG_MODE)
+
+#define ENCI_DVI_HSO_BEGIN 0x1c00	/* register.h:8280 */
+#define P_ENCI_DVI_HSO_BEGIN VCBUS_REG_ADDR(ENCI_DVI_HSO_BEGIN)
+#define ENCI_DVI_HSO_END 0x1c01	/* register.h:8281 */
+#define P_ENCI_DVI_HSO_END VCBUS_REG_ADDR(ENCI_DVI_HSO_END)
+#define ENCI_DVI_VSO_BLINE_EVN 0x1c02	/* register.h:8282 */
+#define P_ENCI_DVI_VSO_BLINE_EVN VCBUS_REG_ADDR(ENCI_DVI_VSO_BLINE_EVN)
+#define ENCI_DVI_VSO_BLINE_ODD 0x1c03	/* register.h:8283 */
+#define P_ENCI_DVI_VSO_BLINE_ODD VCBUS_REG_ADDR(ENCI_DVI_VSO_BLINE_ODD)
+#define ENCI_DVI_VSO_ELINE_EVN 0x1c04	/* register.h:8284 */
+#define P_ENCI_DVI_VSO_ELINE_EVN VCBUS_REG_ADDR(ENCI_DVI_VSO_ELINE_EVN)
+#define ENCI_DVI_VSO_ELINE_ODD 0x1c05	/* register.h:8285 */
+#define P_ENCI_DVI_VSO_ELINE_ODD VCBUS_REG_ADDR(ENCI_DVI_VSO_ELINE_ODD)
+#define ENCI_DVI_VSO_BEGIN_EVN 0x1c06	/* register.h:8286 */
+#define P_ENCI_DVI_VSO_BEGIN_EVN VCBUS_REG_ADDR(ENCI_DVI_VSO_BEGIN_EVN)
+#define ENCI_DVI_VSO_BEGIN_ODD 0x1c07	/* register.h:8287 */
+#define P_ENCI_DVI_VSO_BEGIN_ODD VCBUS_REG_ADDR(ENCI_DVI_VSO_BEGIN_ODD)
+#define ENCI_DVI_VSO_END_EVN 0x1c08	/* register.h:8288 */
+#define P_ENCI_DVI_VSO_END_EVN VCBUS_REG_ADDR(ENCI_DVI_VSO_END_EVN)
+#define ENCI_DVI_VSO_END_ODD 0x1c09	/* register.h:8289 */
+#define P_ENCI_DVI_VSO_END_ODD VCBUS_REG_ADDR(ENCI_DVI_VSO_END_ODD)
+#define ENCI_CFILT_CTRL2 0x1c0a	/* register.h:8295 */
+#define P_ENCI_CFILT_CTRL2 VCBUS_REG_ADDR(ENCI_CFILT_CTRL2)
+#define ENCI_DACSEL_0 0x1c0b	/* register.h:8296 */
+#define P_ENCI_DACSEL_0 VCBUS_REG_ADDR(ENCI_DACSEL_0)
+#define ENCI_DACSEL_1 0x1c0c	/* register.h:8297 */
+#define P_ENCI_DACSEL_1 VCBUS_REG_ADDR(ENCI_DACSEL_1)
+#define ENCP_DACSEL_0 0x1c0d	/* register.h:8298 */
+#define P_ENCP_DACSEL_0 VCBUS_REG_ADDR(ENCP_DACSEL_0)
+#define ENCP_DACSEL_1 0x1c0e	/* register.h:8299 */
+#define P_ENCP_DACSEL_1 VCBUS_REG_ADDR(ENCP_DACSEL_1)
+#define ENCP_MAX_LINE_SWITCH_POINT 0x1c0f	/* register.h:8300 */
+#define P_ENCP_MAX_LINE_SWITCH_POINT VCBUS_REG_ADDR(ENCP_MAX_LINE_SWITCH_POINT)
+#define ENCI_TST_EN 0x1c10	/* register.h:8301 */
+#define P_ENCI_TST_EN VCBUS_REG_ADDR(ENCI_TST_EN)
+#define ENCI_TST_MDSEL 0x1c11	/* register.h:8302 */
+#define P_ENCI_TST_MDSEL VCBUS_REG_ADDR(ENCI_TST_MDSEL)
+#define ENCI_TST_Y 0x1c12	/* register.h:8303 */
+#define P_ENCI_TST_Y VCBUS_REG_ADDR(ENCI_TST_Y)
+#define ENCI_TST_CB 0x1c13	/* register.h:8304 */
+#define P_ENCI_TST_CB VCBUS_REG_ADDR(ENCI_TST_CB)
+#define ENCI_TST_CR 0x1c14	/* register.h:8305 */
+#define P_ENCI_TST_CR VCBUS_REG_ADDR(ENCI_TST_CR)
+#define ENCI_TST_CLRBAR_STRT 0x1c15	/* register.h:8306 */
+#define P_ENCI_TST_CLRBAR_STRT VCBUS_REG_ADDR(ENCI_TST_CLRBAR_STRT)
+#define ENCI_TST_CLRBAR_WIDTH 0x1c16	/* register.h:8307 */
+#define P_ENCI_TST_CLRBAR_WIDTH VCBUS_REG_ADDR(ENCI_TST_CLRBAR_WIDTH)
+#define ENCI_TST_VDCNT_STSET 0x1c17	/* register.h:8308 */
+#define P_ENCI_TST_VDCNT_STSET VCBUS_REG_ADDR(ENCI_TST_VDCNT_STSET)
+#define ENCI_VFIFO2VD_CTL 0x1c18	/* register.h:8313 */
+#define P_ENCI_VFIFO2VD_CTL VCBUS_REG_ADDR(ENCI_VFIFO2VD_CTL)
+#define ENCI_VFIFO2VD_PIXEL_START 0x1c19	/* register.h:8315 */
+#define P_ENCI_VFIFO2VD_PIXEL_START \
+	VCBUS_REG_ADDR(ENCI_VFIFO2VD_PIXEL_START)
+#define ENCI_VFIFO2VD_PIXEL_END 0x1c1a	/* register.h:8317 */
+#define P_ENCI_VFIFO2VD_PIXEL_END VCBUS_REG_ADDR(ENCI_VFIFO2VD_PIXEL_END)
+#define ENCI_VFIFO2VD_LINE_TOP_START 0x1c1b	/* register.h:8319 */
+#define P_ENCI_VFIFO2VD_LINE_TOP_START \
+	VCBUS_REG_ADDR(ENCI_VFIFO2VD_LINE_TOP_START)
+#define ENCI_VFIFO2VD_LINE_TOP_END 0x1c1c	/* register.h:8321 */
+#define P_ENCI_VFIFO2VD_LINE_TOP_END \
+	VCBUS_REG_ADDR(ENCI_VFIFO2VD_LINE_TOP_END)
+#define ENCI_VFIFO2VD_LINE_BOT_START 0x1c1d	/* register.h:8323 */
+#define P_ENCI_VFIFO2VD_LINE_BOT_START \
+	VCBUS_REG_ADDR(ENCI_VFIFO2VD_LINE_BOT_START)
+#define ENCI_VFIFO2VD_LINE_BOT_END 0x1c1e	/* register.h:8325 */
+#define P_ENCI_VFIFO2VD_LINE_BOT_END \
+	VCBUS_REG_ADDR(ENCI_VFIFO2VD_LINE_BOT_END)
+#define ENCI_VFIFO2VD_CTL2 0x1c1f	/* register.h:8326 */
+#define P_ENCI_VFIFO2VD_CTL2 VCBUS_REG_ADDR(ENCI_VFIFO2VD_CTL2)
+
+#define ENCP_DVI_HSO_BEGIN 0x1c30	/* register.h:8354 */
+#define P_ENCP_DVI_HSO_BEGIN VCBUS_REG_ADDR(ENCP_DVI_HSO_BEGIN)
+#define ENCP_DVI_HSO_END 0x1c31	/* register.h:8355 */
+#define P_ENCP_DVI_HSO_END VCBUS_REG_ADDR(ENCP_DVI_HSO_END)
+#define ENCP_DVI_VSO_BLINE_EVN 0x1c32	/* register.h:8356 */
+#define P_ENCP_DVI_VSO_BLINE_EVN VCBUS_REG_ADDR(ENCP_DVI_VSO_BLINE_EVN)
+#define ENCP_DVI_VSO_BLINE_ODD 0x1c33	/* register.h:8357 */
+#define P_ENCP_DVI_VSO_BLINE_ODD VCBUS_REG_ADDR(ENCP_DVI_VSO_BLINE_ODD)
+#define ENCP_DVI_VSO_ELINE_EVN 0x1c34	/* register.h:8358 */
+#define P_ENCP_DVI_VSO_ELINE_EVN VCBUS_REG_ADDR(ENCP_DVI_VSO_ELINE_EVN)
+#define ENCP_DVI_VSO_ELINE_ODD 0x1c35	/* register.h:8359 */
+#define P_ENCP_DVI_VSO_ELINE_ODD VCBUS_REG_ADDR(ENCP_DVI_VSO_ELINE_ODD)
+#define ENCP_DVI_VSO_BEGIN_EVN 0x1c36	/* register.h:8360 */
+#define P_ENCP_DVI_VSO_BEGIN_EVN VCBUS_REG_ADDR(ENCP_DVI_VSO_BEGIN_EVN)
+#define ENCP_DVI_VSO_BEGIN_ODD 0x1c37	/* register.h:8361 */
+#define P_ENCP_DVI_VSO_BEGIN_ODD VCBUS_REG_ADDR(ENCP_DVI_VSO_BEGIN_ODD)
+#define ENCP_DVI_VSO_END_EVN 0x1c38	/* register.h:8362 */
+#define P_ENCP_DVI_VSO_END_EVN VCBUS_REG_ADDR(ENCP_DVI_VSO_END_EVN)
+#define ENCP_DVI_VSO_END_ODD 0x1c39	/* register.h:8363 */
+#define P_ENCP_DVI_VSO_END_ODD VCBUS_REG_ADDR(ENCP_DVI_VSO_END_ODD)
+#define ENCP_DE_H_BEGIN 0x1c3a	/* register.h:8364 */
+#define P_ENCP_DE_H_BEGIN VCBUS_REG_ADDR(ENCP_DE_H_BEGIN)
+#define ENCP_DE_H_END 0x1c3b	/* register.h:8365 */
+#define P_ENCP_DE_H_END VCBUS_REG_ADDR(ENCP_DE_H_END)
+#define ENCP_DE_V_BEGIN_EVEN 0x1c3c	/* register.h:8366 */
+#define P_ENCP_DE_V_BEGIN_EVEN VCBUS_REG_ADDR(ENCP_DE_V_BEGIN_EVEN)
+#define ENCP_DE_V_END_EVEN 0x1c3d	/* register.h:8367 */
+#define P_ENCP_DE_V_END_EVEN VCBUS_REG_ADDR(ENCP_DE_V_END_EVEN)
+#define ENCP_DE_V_BEGIN_ODD 0x1c3e	/* register.h:8368 */
+#define P_ENCP_DE_V_BEGIN_ODD VCBUS_REG_ADDR(ENCP_DE_V_BEGIN_ODD)
+#define ENCP_DE_V_END_ODD 0x1c3f	/* register.h:8369 */
+#define P_ENCP_DE_V_END_ODD VCBUS_REG_ADDR(ENCP_DE_V_END_ODD)
+#define ENCI_SYNC_LINE_LENGTH 0x1c40	/* register.h:8372 */
+#define P_ENCI_SYNC_LINE_LENGTH VCBUS_REG_ADDR(ENCI_SYNC_LINE_LENGTH)
+#define ENCI_SYNC_PIXEL_EN 0x1c41	/* register.h:8375 */
+#define P_ENCI_SYNC_PIXEL_EN VCBUS_REG_ADDR(ENCI_SYNC_PIXEL_EN)
+#define ENCI_SYNC_TO_LINE_EN 0x1c42	/* register.h:8382 */
+#define P_ENCI_SYNC_TO_LINE_EN VCBUS_REG_ADDR(ENCI_SYNC_TO_LINE_EN)
+#define ENCI_SYNC_TO_PIXEL 0x1c43	/* register.h:8384 */
+#define P_ENCI_SYNC_TO_PIXEL VCBUS_REG_ADDR(ENCI_SYNC_TO_PIXEL)
+#define ENCP_SYNC_LINE_LENGTH 0x1c44	/* register.h:8387 */
+#define P_ENCP_SYNC_LINE_LENGTH VCBUS_REG_ADDR(ENCP_SYNC_LINE_LENGTH)
+#define ENCP_SYNC_PIXEL_EN 0x1c45	/* register.h:8390 */
+#define P_ENCP_SYNC_PIXEL_EN VCBUS_REG_ADDR(ENCP_SYNC_PIXEL_EN)
+#define ENCP_SYNC_TO_LINE_EN 0x1c46	/* register.h:8397 */
+#define P_ENCP_SYNC_TO_LINE_EN VCBUS_REG_ADDR(ENCP_SYNC_TO_LINE_EN)
+#define ENCP_SYNC_TO_PIXEL 0x1c47	/* register.h:8399 */
+#define P_ENCP_SYNC_TO_PIXEL VCBUS_REG_ADDR(ENCP_SYNC_TO_PIXEL)
+
+#define VPP_POSTBLEND_H_SIZE 0x1d21
+#define P_VPP_POSTBLEND_H_SIZE VCBUS_REG_ADDR(VPP_POSTBLEND_H_SIZE)
+
+
+#define VPU_VIU_VENC_MUX_CTRL 0x271a	/* register.h:9214 */
+#define P_VPU_VIU_VENC_MUX_CTRL VCBUS_REG_ADDR(VPU_VIU_VENC_MUX_CTRL)
+#define VPU_HDMI_SETTING 0x271b	/* register.h:9229 */
+#define P_VPU_HDMI_SETTING VCBUS_REG_ADDR(VPU_HDMI_SETTING)
+
+#define VPU_HDMI_DATA_OVR 0x2727	/* register.h:9270 */
+#define P_VPU_HDMI_DATA_OVR VCBUS_REG_ADDR(VPU_HDMI_DATA_OVR)
+#define VPU_HDMI_FMT_CTRL 0x2743
+#define P_VPU_HDMI_FMT_CTRL VCBUS_REG_ADDR(VPU_HDMI_FMT_CTRL)
+/* For GXM and later */
+#define VPU_HDMI_DITH_CNTL 0x27fc
+#define P_VPU_HDMI_DITH_CNTL VCBUS_REG_ADDR(VPU_HDMI_DITH_CNTL)
+
+#endif
diff --git a/include/amlogic/media/vout/lcd/aml_lcd.h b/include/amlogic/media/vout/lcd/aml_lcd.h
new file mode 100644
index 00000000000..ef3334a5fb0
--- /dev/null
+++ b/include/amlogic/media/vout/lcd/aml_lcd.h
@@ -0,0 +1,168 @@
+/*
+ * include/amlogic/media/vout/lcd/aml_lcd.h
+ *
+ * Copyright (C) 2015 Amlogic, Inc. All rights reserved.
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License for
+ * more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program; if not, write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
+ */
+
+#ifndef INC_AML_LCD_H
+#define INC_AML_LCD_H
+
+#include <common.h>
+#include <linux/list.h>
+#include <amlogic/media/vout/lcd/lcd_vout.h>
+#ifdef CONFIG_AML_LCD_EXTERN
+#include <amlogic/media/vout/lcd/lcd_extern.h>
+#endif
+#ifdef CONFIG_AML_BL_EXTERN
+#include <amlogic/media/vout/lcd/bl_extern.h>
+#endif
+
+#define LCD_GPIO_MAX                  0xff
+#define LCD_GPIO_OUTPUT_LOW           0
+#define LCD_GPIO_OUTPUT_HIGH          1
+#define LCD_GPIO_INPUT                2
+
+
+#define LCD_EXT_I2C_BUS_0             0  //A
+#define LCD_EXT_I2C_BUS_1             1  //B
+#define LCD_EXT_I2C_BUS_2             2  //C
+#define LCD_EXT_I2C_BUS_3             3  //D
+#define LCD_EXT_I2C_BUS_4             4  //AO
+#define LCD_EXT_I2C_BUS_MAX           0xff
+
+
+#define LCD_EXT_I2C_BUS_INVALID       0xff
+#define LCD_EXT_I2C_ADDR_INVALID      0xff
+#define LCD_EXT_GPIO_INVALID          0xff
+
+#define LCD_EXT_SPI_CLK_FREQ_DFT      10 /* unit: KHz */
+
+
+#define LCD_EXT_CMD_TYPE_CMD_DELAY    0x00
+#define LCD_EXT_CMD_TYPE_CMD2_DELAY   0x01  /* for i2c device 2nd addr */
+#define LCD_EXT_CMD_TYPE_NONE         0x10
+#define LCD_EXT_CMD_TYPE_CMD          0xc0
+#define LCD_EXT_CMD_TYPE_CMD2         0xc1  /* for i2c device 2nd addr */
+#define LCD_EXT_CMD_TYPE_GPIO         0xf0
+#define LCD_EXT_CMD_TYPE_CHECK        0xfc
+#define LCD_EXT_CMD_TYPE_DELAY        0xfd
+#define LCD_EXT_CMD_TYPE_END          0xff
+
+#define LCD_EXT_CMD_SIZE_DYNAMIC      0xff
+#define LCD_EXT_DYNAMIC_SIZE_INDEX    1
+
+
+#define LCD_GPIO_NAME_MAX             15
+struct lcd_cpu_gpio_s {
+	char name[LCD_GPIO_NAME_MAX];
+	struct gpio_desc gpio;
+	int probe_flag;
+	int register_flag;
+};
+
+
+#define Rsv_val 0xffffffff
+struct ext_lcd_config_s {
+	const char panel_type[20];
+	int lcd_type;
+	unsigned char lcd_bits;
+
+	unsigned short h_active;
+	unsigned short v_active;
+	unsigned short h_period;
+	unsigned short v_period;
+	unsigned short hsync_width;
+	unsigned short hsync_bp;
+	unsigned short hsync_pol;
+	unsigned short vsync_width;
+	unsigned short vsync_bp;
+	unsigned short vsync_pol;
+
+	unsigned int customer_val_0; //fr_adjust_type
+	unsigned int customer_val_1; //ss_level
+	unsigned int customer_val_2; //clk_auto_generate
+	unsigned int customer_val_3; //pixel clock(unit in Hz)
+	unsigned int customer_val_4;
+	unsigned int customer_val_5;
+	unsigned int customer_val_6;
+	unsigned int customer_val_7;
+	unsigned int customer_val_8;
+	unsigned int customer_val_9;
+
+	unsigned int if_attr_val0;
+	unsigned int if_attr_val1;
+	unsigned int if_attr_val2;
+	unsigned int if_attr_val3;
+	unsigned int if_attr_val4;
+	unsigned int if_attr_val5;
+	unsigned int if_attr_val6;
+	unsigned int if_attr_val7;
+	unsigned int if_attr_val8;
+	unsigned int if_attr_val9;
+
+	unsigned char *cmd_init_on;
+	unsigned char *cmd_init_off;
+	struct lcd_power_step_s *power_on_step;
+	struct lcd_power_step_s *power_off_step;
+
+	/* backlight */
+	unsigned int level_default;
+	unsigned int level_max;
+	unsigned int level_min;
+	unsigned int level_mid;
+	unsigned int level_mid_mapping;
+
+	unsigned int bl_method;
+	unsigned int bl_en_gpio;
+	unsigned short bl_en_gpio_on;
+	unsigned short bl_en_gpio_off;
+	unsigned short bl_power_on_delay;
+	unsigned short bl_power_off_delay;
+
+	unsigned int pwm_method;
+	unsigned int pwm_port;
+	unsigned int pwm_freq;
+	unsigned int pwm_duty_max;
+	unsigned int pwm_duty_min;
+	unsigned int pwm_gpio;
+	unsigned int pwm_gpio_off;
+
+	unsigned int pwm2_method;
+	unsigned int pwm2_port;
+	unsigned int pwm2_freq;
+	unsigned int pwm2_duty_max;
+	unsigned int pwm2_duty_min;
+	unsigned int pwm2_gpio;
+	unsigned int pwm2_gpio_off;
+
+	unsigned int pwm_level_max;
+	unsigned int pwm_level_min;
+	unsigned int pwm2_level_max;
+	unsigned int pwm2_level_min;
+
+	unsigned int pwm_on_delay;
+	unsigned int pwm_off_delay;
+
+	/* backlight extern */
+	unsigned int bl_ext_index;
+};
+
+#define LCD_NUM_MAX         10
+
+extern struct ext_lcd_config_s ext_lcd_config[LCD_NUM_MAX];
+
+#endif /* INC_AML_LCD_H */
diff --git a/include/amlogic/media/vout/lcd/bl_extern.h b/include/amlogic/media/vout/lcd/bl_extern.h
new file mode 100644
index 00000000000..6604672cea4
--- /dev/null
+++ b/include/amlogic/media/vout/lcd/bl_extern.h
@@ -0,0 +1,88 @@
+/*
+ * include/amlogicmedia/vout/lcd/bl_extern.h
+ *
+ * Copyright (C) 2015 Amlogic, Inc. All rights reserved.
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License for
+ * more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program; if not, write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
+ */
+
+#ifndef _INC_AML_BL_EXTERN_H_
+#define _INC_AML_BL_EXTERN_H_
+
+enum bl_extern_type_e {
+	BL_EXTERN_I2C = 0,
+	BL_EXTERN_SPI,
+	BL_EXTERN_MIPI,
+	BL_EXTERN_MAX,
+};
+
+#define BL_EXTERN_I2C_BUS_A          0
+#define BL_EXTERN_I2C_BUS_B          1
+#define BL_EXTERN_I2C_BUS_C          2
+#define BL_EXTERN_I2C_BUS_D          3
+#define BL_EXTERN_I2C_BUS_AO         4
+
+#define BL_EXTERN_I2C_BUS_0          BL_EXTERN_I2C_BUS_A
+#define BL_EXTERN_I2C_BUS_1          BL_EXTERN_I2C_BUS_B
+#define BL_EXTERN_I2C_BUS_2          BL_EXTERN_I2C_BUS_C
+#define BL_EXTERN_I2C_BUS_3          BL_EXTERN_I2C_BUS_D
+#define BL_EXTERN_I2C_BUS_4          BL_EXTERN_I2C_BUS_AO
+#define BL_EXTERN_I2C_BUS_MAX        5
+
+#define BL_EXTERN_INIT_ON_MAX       200
+#define BL_EXTERN_INIT_OFF_MAX      50
+
+#define BL_EXTERN_GPIO_NUM_MAX      6
+#define BL_EXTERN_INDEX_INVALID     0xff
+#define BL_EXTERN_NAME_LEN_MAX      30
+struct bl_extern_config_s {
+	unsigned char index;
+	char name[BL_EXTERN_NAME_LEN_MAX];
+	enum bl_extern_type_e type;
+	unsigned char i2c_addr;
+	unsigned char i2c_bus;
+	unsigned int dim_min;
+	unsigned int dim_max;
+
+	unsigned char init_loaded;
+	unsigned char cmd_size;
+	unsigned char *init_on;
+	unsigned char *init_off;
+	unsigned int init_on_cnt;
+	unsigned int init_off_cnt;
+};
+
+/* global API */
+#define BL_EXT_DRIVER_MAX    10
+struct aml_bl_extern_driver_s {
+	int (*power_on)(void);
+	int (*power_off)(void);
+	int (*set_level)(unsigned int level);
+	void (*config_print)(void);
+	int (*device_power_on)(void);
+	int (*device_power_off)(void);
+	int (*device_bri_update)(unsigned int level);
+	struct bl_extern_config_s *config;
+};
+
+extern struct aml_bl_extern_driver_s *aml_bl_extern_get_driver(void);
+extern int aml_bl_extern_device_load(const void *dt_blob, int index);
+extern struct bl_extern_config_s bl_extern_config_dtf;
+#ifdef CONFIG_AML_LCD_TABLET
+extern int dsi_write_cmd(unsigned char *payload);
+#endif
+
+#endif
+
diff --git a/include/amlogic/media/vout/lcd/bl_ldim.h b/include/amlogic/media/vout/lcd/bl_ldim.h
new file mode 100644
index 00000000000..fb42eb3f71d
--- /dev/null
+++ b/include/amlogic/media/vout/lcd/bl_ldim.h
@@ -0,0 +1,118 @@
+/*
+ * include/amlogic/media/vout/lcd/bl_ldim.h
+ *
+ * Copyright (C) 2015 Amlogic, Inc. All rights reserved.
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License for
+ * more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program; if not, write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
+ */
+
+#ifndef INC_AML_BL_LDIM_H
+#define INC_AML_BL_LDIM_H
+
+#include <common.h>
+#include <linux/list.h>
+#include <amlogic/media/vout/lcd/aml_lcd.h>
+#include <spi.h>
+
+enum ldim_dev_type_e {
+	LDIM_DEV_TYPE_NORMAL = 0,
+	LDIM_DEV_TYPE_SPI,
+	LDIM_DEV_TYPE_I2C,
+	LDIM_DEV_TYPE_MAX,
+};
+
+#define LDIM_INIT_ON_MAX     300
+#define LDIM_INIT_OFF_MAX    20
+
+struct ldim_pinmux_ctrl_s {
+	char *name;
+	unsigned int pinmux_set[LCD_PINMUX_NUM][2];
+	unsigned int pinmux_clr[LCD_PINMUX_NUM][2];
+};
+
+struct ldim_config_s {
+	unsigned char row;
+	unsigned char col;
+};
+
+struct ldim_dev_config_s {
+	char name[20];
+	char pinmux_name[20];
+	unsigned char type;
+	int cs_hold_delay;
+	int cs_clk_delay;
+	int en_gpio;
+	int en_gpio_on;
+	int en_gpio_off;
+	int lamp_err_gpio;
+	unsigned char fault_check;
+	unsigned char write_check;
+
+	unsigned int dim_min;
+	unsigned int dim_max;
+
+	unsigned char init_loaded;
+	unsigned char cmd_size;
+	unsigned char *init_on;
+	unsigned char *init_off;
+	unsigned int init_on_cnt;
+	unsigned int init_off_cnt;
+
+	unsigned char pinctrl_ver;
+	struct ldim_pinmux_ctrl_s *ldim_pinmux;
+	struct bl_pwm_config_s pwm_config;
+	char gpio_name[BL_GPIO_NUM_MAX][LCD_GPIO_NAME_MAX];
+
+	unsigned short bl_regnum;
+};
+
+#define LDIM_SPI_NAME_MAX    30
+struct ldim_spi_dev_info_s {
+	char modalias[20];
+	char spi_name[LDIM_SPI_NAME_MAX];
+	int mode;
+	int max_speed_hz;
+	int bus_num;
+	int chip_select;
+	int wordlen;
+
+	struct spi_slave *spi;
+};
+
+/*******global API******/
+struct aml_ldim_driver_s {
+	int valid_flag;
+	int dev_index;
+	struct ldim_config_s *ldim_conf;
+	struct ldim_dev_config_s *ldev_conf;
+	unsigned short *ldim_matrix_buf;
+	int (*power_on)(void);
+	int (*power_off)(void);
+	int (*set_level)(unsigned int level);
+	void (*config_print)(void);
+	int (*pinmux_ctrl)(int status);
+	void (*device_config_print)(void);
+	int (*device_power_on)(void);
+	int (*device_power_off)(void);
+	int (*device_bri_update)(unsigned short *buf, unsigned char len);
+	struct ldim_spi_dev_info_s *spi_info;
+};
+
+extern struct ldim_dev_config_s ldim_config_dft;
+
+extern struct aml_ldim_driver_s *aml_ldim_get_driver(void);
+extern int aml_ldim_probe(char *dt_addr, int flag); /* flag: 0=dts, 1=bsp, 2=unifykey */
+
+#endif /* INC_AML_BL_LDIM_H */
diff --git a/include/amlogic/media/vout/lcd/lcd_extern.h b/include/amlogic/media/vout/lcd/lcd_extern.h
new file mode 100644
index 00000000000..dc6ef565a8a
--- /dev/null
+++ b/include/amlogic/media/vout/lcd/lcd_extern.h
@@ -0,0 +1,116 @@
+/*
+ * include/amlogic/media/vout/lcd/lcd_extern.h
+ *
+ * Copyright (C) 2015 Amlogic, Inc. All rights reserved.
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License for
+ * more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program; if not, write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
+ */
+
+#ifndef _INC_AML_LCD_EXTERN_H_
+#define _INC_AML_LCD_EXTERN_H_
+#include <amlogic/media/vout/lcd/lcd_vout.h>
+
+enum lcd_extern_type_e {
+	LCD_EXTERN_I2C = 0,
+	LCD_EXTERN_SPI,
+	LCD_EXTERN_MIPI,
+	LCD_EXTERN_MAX,
+};
+
+#define LCD_EXTERN_I2C_BUS_A          0
+#define LCD_EXTERN_I2C_BUS_B          1
+#define LCD_EXTERN_I2C_BUS_C          2
+#define LCD_EXTERN_I2C_BUS_D          3
+#define LCD_EXTERN_I2C_BUS_AO         4
+
+#define LCD_EXTERN_I2C_BUS_0          LCD_EXTERN_I2C_BUS_A
+#define LCD_EXTERN_I2C_BUS_1          LCD_EXTERN_I2C_BUS_B
+#define LCD_EXTERN_I2C_BUS_2          LCD_EXTERN_I2C_BUS_C
+#define LCD_EXTERN_I2C_BUS_3          LCD_EXTERN_I2C_BUS_D
+#define LCD_EXTERN_I2C_BUS_4          LCD_EXTERN_I2C_BUS_AO
+#define LCD_EXTERN_I2C_BUS_MAX        5
+
+
+#define LCD_EXTERN_INIT_ON_MAX        3000
+#define LCD_EXTERN_INIT_OFF_MAX       100
+
+#define LCD_EXTERN_GPIO_NUM_MAX       6
+#define LCD_EXTERN_GPIO_LEN_MAX       10
+#define LCD_EXTERN_INDEX_INVALID      0xff
+#define LCD_EXTERN_NAME_LEN_MAX       30
+
+#define LCD_EXTERN_NUM_MAX            20
+
+struct lcd_extern_config_s {
+	unsigned char index;
+	char name[LCD_EXTERN_NAME_LEN_MAX];
+	enum lcd_extern_type_e type;
+	unsigned char status;
+
+	unsigned char i2c_addr;
+	unsigned char i2c_addr2;
+	unsigned char i2c_bus;
+
+	unsigned char spi_clk_pol;
+	unsigned short spi_clk_freq; /*KHz */
+	unsigned short spi_delay_us;
+
+	unsigned char cmd_size;
+	unsigned char table_init_loaded; /* internal use */
+	unsigned int table_init_on_cnt;
+	unsigned int table_init_off_cnt;
+	unsigned char *table_init_on;
+	unsigned char *table_init_off;
+};
+
+struct lcd_extern_common_s {
+	unsigned char lcd_ext_key_valid;
+	char gpio_name[LCD_EXTERN_GPIO_NUM_MAX][LCD_EXTERN_GPIO_LEN_MAX];
+
+	unsigned char i2c_bus;
+	unsigned char i2c_gpio_sck;
+	unsigned char i2c_gpio_sda;
+
+	unsigned char spi_gpio_cs;
+	unsigned char spi_gpio_clk;
+	unsigned char spi_gpio_data;
+
+	struct lcd_pinmux_ctrl_s *lcd_ext_pinmux;
+	unsigned int pinmux_set[LCD_PINMUX_NUM][2];
+	unsigned int pinmux_clr[LCD_PINMUX_NUM][2];
+	unsigned char pinmux_gpio_off;
+	unsigned char pinmux_valid;
+};
+
+//global API
+struct aml_lcd_extern_driver_s {
+	struct lcd_extern_config_s *config;
+	struct lcd_extern_common_s *common;
+	int (*reg_read)  (unsigned char reg, unsigned char *buf);
+	int (*reg_write) (unsigned char reg, unsigned char value);
+	int (*power_on)(void);
+	int (*power_off)(void);
+	void (*info_print)(void);
+};
+
+extern struct aml_lcd_extern_driver_s *aml_lcd_extern_get_driver(void);
+extern int aml_lcd_extern_probe(const void *dt_blob, int index);
+extern int aml_lcd_extern_remove(void);
+
+extern struct lcd_extern_config_s ext_config_dtf;
+extern struct lcd_extern_common_s ext_common_dft;
+
+#endif
+
diff --git a/include/amlogic/media/vout/lcd/lcd_vout.h b/include/amlogic/media/vout/lcd/lcd_vout.h
new file mode 100644
index 00000000000..a5c0f3d817a
--- /dev/null
+++ b/include/amlogic/media/vout/lcd/lcd_vout.h
@@ -0,0 +1,520 @@
+/*
+ * include/amlogic/media/vout/lcd/lcd_vout.h
+ *
+ * Copyright (C) 2015 Amlogic, Inc. All rights reserved.
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License for
+ * more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program; if not, write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
+ */
+
+#ifndef INC_AML_LCD_VOUT_H
+#define INC_AML_LCD_VOUT_H
+
+#include <common.h>
+#include <linux/list.h>
+#include <dm.h>
+#include <asm/gpio.h>
+
+/* **********************************
+ * debug print define
+ * ********************************** */
+//#define LCD_DEBUG_INFO
+extern unsigned int lcd_debug_print_flag;
+
+#define LCDPR(fmt, args...)     printf("lcd: "fmt"", ## args)
+#define LCDERR(fmt, args...)    printf("lcd: error: "fmt"", ## args)
+
+/* **********************************
+ * clk parameter bit define
+ * pll_ctrl, div_ctrl, clk_ctrl
+ * ********************************** */
+/* ******** pll_ctrl ******** */
+#define PLL_CTRL_OD3                20 /* [21:20] */
+#define PLL_CTRL_OD2                18 /* [19:18] */
+#define PLL_CTRL_OD1                16 /* [17:16] */
+#define PLL_CTRL_N                  9  /* [13:9] */
+#define PLL_CTRL_M                  0  /* [8:0] */
+
+/* ******** div_ctrl ******** */
+#define DIV_CTRL_EDP_DIV1           24 /* [26:24] */
+#define DIV_CTRL_EDP_DIV0           20 /* [23:20] */
+#define DIV_CTRL_DIV_SEL            8 /* [15:8] */
+#define DIV_CTRL_XD                 0 /* [7:0] */
+
+/* ******** clk_ctrl ******** */
+#define CLK_CTRL_LEVEL              28 /* [30:28] */
+#define CLK_CTRL_FRAC               0  /* [18:0] */
+
+
+#define LCD_PINMUX_END          0xff
+#define LCD_PINMUX_NUM          15
+
+/* **********************************
+ * VENC to TCON sync delay
+ * ********************************** */
+#define TTL_DELAY                   13
+
+
+/* **********************************
+ * global control define
+ * ********************************** */
+enum lcd_mode_e {
+	LCD_MODE_TV = 0,
+	LCD_MODE_TABLET,
+	LCD_MODE_MAX,
+};
+
+enum lcd_chip_e {
+	LCD_CHIP_G12A = 0,
+	LCD_CHIP_G12B, 	/* 1 */
+	LCD_CHIP_TL1,
+	LCD_CHIP_SM1,
+	LCD_CHIP_MAX,
+};
+
+enum lcd_type_e {
+	LCD_TTL = 0,
+	LCD_LVDS,
+	LCD_VBYONE,
+	LCD_MIPI,
+	LCD_MLVDS,
+	LCD_TYPE_MAX,
+};
+
+#define MOD_LEN_MAX        30
+struct lcd_basic_s {
+	char model_name[MOD_LEN_MAX];
+	enum lcd_type_e lcd_type;
+	unsigned char lcd_bits;
+
+	unsigned short h_active; /* Horizontal display area */
+	unsigned short v_active; /* Vertical display area */
+	unsigned short h_period; /* Horizontal total period time */
+	unsigned short v_period; /* Vertical total period time */
+	unsigned short h_period_min;
+	unsigned short h_period_max;
+	unsigned short v_period_min;
+	unsigned short v_period_max;
+	unsigned int lcd_clk_min;
+	unsigned int lcd_clk_max;
+
+	unsigned short screen_width;  /* screen physical width in "mm" unit */
+	unsigned short screen_height; /* screen physical height in "mm" unit */
+};
+
+#define LCD_CLK_FRAC_UPDATE     (1 << 0)
+#define LCD_CLK_PLL_CHANGE      (1 << 1)
+struct lcd_timing_s {
+	unsigned char clk_auto; /* clk parameters auto generation */
+	unsigned char fr_adjust_type; /* 0=clock, 1=htotal, 2=vtotal */
+	unsigned char clk_change; /* internal used */
+	unsigned int lcd_clk;   /* pixel clock(unit: Hz) */
+	unsigned int lcd_clk_dft; /* internal used */
+	unsigned int h_period_dft; /* internal used */
+	unsigned int v_period_dft; /* internal used */
+	unsigned int pll_ctrl;  /* pll settings */
+	unsigned int div_ctrl;  /* divider settings */
+	unsigned int clk_ctrl;  /* clock settings */
+
+	unsigned int ss_level;
+
+	unsigned short sync_duration_num;
+	unsigned short sync_duration_den;
+
+	unsigned short video_on_pixel;
+	unsigned short video_on_line;
+
+	unsigned short hsync_width;
+	unsigned short hsync_bp;
+	unsigned short hsync_pol;
+	unsigned short vsync_width;
+	unsigned short vsync_bp;
+	unsigned short vsync_pol;
+	/* unsigned int vsync_h_phase; // [31]sign, [15:0]value */
+	unsigned int h_offset;
+	unsigned int v_offset;
+
+	unsigned short de_hs_addr;
+	unsigned short de_he_addr;
+	unsigned short de_vs_addr;
+	unsigned short de_ve_addr;
+
+	unsigned short hs_hs_addr;
+	unsigned short hs_he_addr;
+	unsigned short hs_vs_addr;
+	unsigned short hs_ve_addr;
+
+	unsigned short vs_hs_addr;
+	unsigned short vs_he_addr;
+	unsigned short vs_vs_addr;
+	unsigned short vs_ve_addr;
+};
+
+struct ttl_config_s {
+	unsigned int clk_pol;
+	unsigned int sync_valid; /* [1]DE, [0]hvsync */
+	unsigned int swap_ctrl; /* [1]rb swap, [0]bit swap */
+};
+
+#define LVDS_PHY_VSWING_DFT        3
+#define LVDS_PHY_PREEM_DFT         0
+#define LVDS_PHY_CLK_VSWING_DFT    0
+#define LVDS_PHY_CLK_PREEM_DFT     0
+struct lvds_config_s {
+	unsigned int lvds_repack;
+	unsigned int dual_port;
+	unsigned int pn_swap;
+	unsigned int port_swap;
+	unsigned int lane_reverse;
+	unsigned int port_sel;
+	unsigned int phy_vswing;
+	unsigned int phy_preem;
+	unsigned int phy_clk_vswing;
+	unsigned int phy_clk_preem;
+};
+
+#define VX1_PHY_VSWING_DFT           3
+#define VX1_PHY_PREEM_DFT            0
+
+#define VX1_PWR_ON_RESET_DLY_DFT     500 /* 500ms */
+#define VX1_HPD_DATA_DELAY_DFT       10 /* 10ms */
+#define VX1_CDR_TRAINING_HOLD_DFT    200 /* 200ms */
+
+#define VX1_SW_FILTER_TIME_DFT       10 /* 10*100us=1ms */
+#define VX1_SW_FILTER_CNT_DFT        6
+#define VX1_SW_FILTER_RETRY_CNT_DFT  2
+#define VX1_SW_FILTER_RETRY_DLY_DFT  100 /* 100ms */
+#define VX1_SW_CDR_DET_TIME_DFT      20 /* 20us*100=2ms */
+#define VX1_SW_CDR_DET_CNT_DFT       100
+#define VX1_SW_CDR_TIMEOUT_CNT_DFT   100
+
+struct vbyone_config_s {
+	unsigned int lane_count;
+	unsigned int region_num;
+	unsigned int byte_mode;
+	unsigned int color_fmt;
+	unsigned int phy_div;
+	unsigned int bit_rate;
+	unsigned int phy_vswing; /*[5:4]:ext_pullup, [3:0]vswing*/
+	unsigned int phy_preem;
+	unsigned int ctrl_flag;
+		/* bit[0]:power_on_reset_en
+		   bit[1]:hpd_data_delay_en
+		   bit[2]:cdr_training_hold_en
+		   bit[3]:hw_filter_en
+		   bit[5:4]:sw_filter */
+
+	/* ctrl timing */
+	unsigned int power_on_reset_delay; /* ms */
+	unsigned int hpd_data_delay; /* ms */
+	unsigned int cdr_training_hold; /* ms */
+	/* hw filter */
+	unsigned int hpd_hw_filter_time; /* ms */
+	unsigned int hpd_hw_filter_cnt;
+	unsigned int lockn_hw_filter_time; /* ms */
+	unsigned int lockn_hw_filter_cnt;
+	/* sw filter */
+	unsigned int vx1_sw_filter_en; /* 0=disable, 1=sw_filter, 2=sw_filter with sw_reset */
+	unsigned int vx1_sw_filter_time; /* 100us base */
+	unsigned int vx1_sw_filter_cnt;
+	unsigned int vx1_sw_filter_retry_cnt;
+	unsigned int vx1_sw_filter_retry_delay; /* ms base */
+	unsigned int vx1_sw_cdr_detect_time; /* us base * 100 times, must cover tcon lockn pulse */
+	unsigned int vx1_sw_cdr_detect_cnt;
+	unsigned int vx1_sw_cdr_timeout_cnt;
+};
+
+/* mipi-dsi config */
+/* Operation mode parameters */
+#define OPERATION_VIDEO_MODE     0
+#define OPERATION_COMMAND_MODE   1
+
+#define SYNC_PULSE               0x0
+#define SYNC_EVENT               0x1
+#define BURST_MODE               0x2
+
+/* command config */
+#define DSI_CMD_SIZE_INDEX       1  /* byte[1] */
+#define DSI_GPIO_INDEX           2  /* byte[2] */
+
+#define DSI_INIT_ON_MAX          100
+#define DSI_INIT_OFF_MAX         30
+
+struct dsi_config_s {
+	unsigned char lane_num;
+	unsigned int bit_rate_max; /* MHz */
+	unsigned int bit_rate_min; /* MHz*/
+	unsigned int bit_rate; /* Hz */
+	unsigned int clk_factor; /* bit_rate/pclk */
+	unsigned int factor_numerator;
+	unsigned int factor_denominator; /* 100 */
+	unsigned char operation_mode_init; /* 0=video mode, 1=command mode */
+	unsigned char operation_mode_display; /* 0=video mode, 1=command mode */
+	unsigned char video_mode_type; /* 0=sync_pulse, 1=sync_event, 2=burst */
+	unsigned char clk_always_hs; /* 0=disable, 1=enable */
+	unsigned char phy_switch; /* 0=auto, 1=standard, 2=slow */
+
+	unsigned int venc_data_width;
+	unsigned int dpi_data_format;
+
+	unsigned char *dsi_init_on;
+	unsigned char *dsi_init_off;
+	unsigned char extern_init;
+
+	unsigned char check_en;
+	unsigned char check_reg;
+	unsigned char check_cnt;
+	unsigned char check_state;
+};
+
+struct mlvds_config_s {
+	unsigned int channel_num;
+	unsigned int channel_sel0;
+	unsigned int channel_sel1;
+	unsigned int clk_phase; /* [13:12]=clk01_sel, [11:8]=pi2, [7:4]=pi1, [3:0]=pi0 */
+	unsigned int pn_swap;
+	unsigned int bit_swap; /* MSB/LSB reverse */
+	unsigned int phy_vswing;
+	unsigned int phy_preem;
+
+	/* internal used */
+	unsigned int pi_clk_sel; /* bit[9:0] */
+	unsigned int bit_rate; /* Hz */
+};
+
+struct lcd_ctrl_config_s {
+	struct ttl_config_s *ttl_config;
+	struct lvds_config_s *lvds_config;
+	struct vbyone_config_s *vbyone_config;
+	struct dsi_config_s *mipi_config;
+	struct mlvds_config_s *mlvds_config;
+};
+
+/* **********************************
+ * power control define
+ * ********************************** */
+enum lcd_power_type_e {
+	LCD_POWER_TYPE_CPU = 0,
+	LCD_POWER_TYPE_PMU,
+	LCD_POWER_TYPE_SIGNAL,
+	LCD_POWER_TYPE_EXTERN,
+	LCD_POWER_TYPE_MAX,
+};
+
+#define LCD_CPU_GPIO_NAME_MAX        15
+
+/* Power Control */
+#define LCD_CPU_GPIO_NUM_MAX         10
+
+#define LCD_PWR_STEP_MAX             15
+struct lcd_power_step_s {
+	unsigned char type;
+	int index; /* point to lcd_cpu_gpio or lcd_extern */
+	unsigned short value;
+	unsigned short delay;
+};
+
+struct lcd_power_ctrl_s {
+	char cpu_gpio[LCD_CPU_GPIO_NUM_MAX][LCD_CPU_GPIO_NAME_MAX];
+	struct lcd_power_step_s power_on_step[LCD_PWR_STEP_MAX];
+	struct lcd_power_step_s power_off_step[LCD_PWR_STEP_MAX];
+};
+
+#define LCD_PINMX_MAX              20
+#define BL_PINMUX_MAX              20
+#define LCD_PINMUX_NAME_LEN_MAX    30
+struct lcd_pinmux_ctrl_s {
+	char *name;
+	unsigned int pinmux_set[LCD_PINMUX_NUM][2];
+	unsigned int pinmux_clr[LCD_PINMUX_NUM][2];
+};
+
+#define LCD_ENABLE_RETRY_MAX    3
+struct lcd_config_s {
+	unsigned char lcd_mode;
+	unsigned char lcd_key_valid;
+	unsigned char lcd_clk_path; /* 0=hpll, 1=gp0_pll */
+	unsigned char retry_enable_flag;
+	unsigned char retry_enable_cnt;
+	unsigned int backlight_index;
+	struct lcd_basic_s lcd_basic;
+	struct lcd_timing_s lcd_timing;
+	struct lcd_ctrl_config_s lcd_control;
+	struct lcd_power_ctrl_s *lcd_power;
+	unsigned char pinctrl_ver;
+	struct lcd_pinmux_ctrl_s *lcd_pinmux;
+	unsigned int pinmux_set[LCD_PINMUX_NUM][2];
+	unsigned int pinmux_clr[LCD_PINMUX_NUM][2];
+};
+
+extern struct lcd_config_s lcd_config_dft;
+
+/* ==============backlight control config================== */
+enum bl_ctrl_method_e {
+	BL_CTRL_GPIO = 0,
+	BL_CTRL_PWM,
+	BL_CTRL_PWM_COMBO,
+	BL_CTRL_LOCAL_DIMMING,
+	BL_CTRL_EXTERN,
+	BL_CTRL_MAX,
+};
+
+enum bl_pwm_method_e {
+	BL_PWM_NEGATIVE = 0,
+	BL_PWM_POSITIVE,
+	BL_PWM_METHOD_MAX,
+};
+
+enum bl_pwm_port_e {
+	BL_PWM_A = 0,
+	BL_PWM_B,
+	BL_PWM_C,
+	BL_PWM_D,
+	BL_PWM_E,
+	BL_PWM_F,
+	BL_PWM_VS,
+	BL_PWM_MAX,
+};
+
+enum bl_off_policy_e {
+	BL_OFF_POLICY_NONE = 0,
+	BL_OFF_POLICY_ALWAYS,
+	BL_OFF_POLICY_ONCE,
+	BL_OFF_POLICY_MAX,
+};
+
+#define XTAL_FREQ_HZ		(24*1000*1000) /* 24M in HZ */
+#define XTAL_HALF_FREQ_HZ	(24*1000*500)  /* 24M/2 in HZ */
+
+#define BL_FREQ_DEFAULT			1000 /* unit: HZ */
+#define BL_FREQ_VS_DEFAULT		2    /* multiple 2 of vfreq */
+
+#define BL_LEVEL_MAX		255
+#define BL_LEVEL_MIN		10
+#define BL_LEVEL_OFF		1
+
+#define BL_LEVEL_MID		128
+#define BL_LEVEL_MID_MAPPED	BL_LEVEL_MID //102
+#define BL_LEVEL_DEFAULT	BL_LEVEL_MID
+
+#define BL_GPIO_NUM_MAX		5
+
+struct bl_pwm_config_s {
+	unsigned int index;
+	enum bl_pwm_method_e pwm_method;
+	enum bl_pwm_port_e pwm_port;
+	unsigned int level_max;
+	unsigned int level_min;
+	unsigned int pwm_freq; /* pwm_vs: 1~4(vfreq), pwm: freq(unit: Hz) */
+	unsigned int pwm_duty; /* unit: % */
+	unsigned int pwm_duty_max; /* unit: % */
+	unsigned int pwm_duty_min; /* unit: % */
+	unsigned int pwm_cnt; /* internal used for pwm control */
+	unsigned int pwm_pre_div; /* internal used for pwm control */
+	unsigned int pwm_max; /* internal used for pwm control */
+	unsigned int pwm_min; /* internal used for pwm control */
+	unsigned int pwm_level; /* internal used for pwm control */
+	unsigned int pwm_gpio;
+	unsigned int pwm_gpio_off;
+	unsigned int pinmux_flag;
+	unsigned int pinmux_set[10][2];
+	unsigned int pinmux_clr[10][2];
+};
+
+struct bl_config_s {
+	unsigned char bl_key_valid;
+	char name[20];
+	int level_default;
+	int level_min;
+	int level_max;
+	int level_mid;
+	int level_mid_mapping;
+	int level;
+
+	enum bl_ctrl_method_e method;
+	unsigned int en_gpio;
+	unsigned int en_gpio_on;
+	unsigned int en_gpio_off;
+	unsigned short power_on_delay;
+	unsigned short power_off_delay;
+	unsigned int dim_max;
+	unsigned int dim_min;
+	unsigned int en_sequence_reverse;
+
+	struct bl_pwm_config_s *bl_pwm;
+	struct bl_pwm_config_s *bl_pwm_combo0;
+	struct bl_pwm_config_s *bl_pwm_combo1;
+	unsigned int pwm_on_delay;
+	unsigned int pwm_off_delay;
+
+	char gpio_name[BL_GPIO_NUM_MAX][LCD_CPU_GPIO_NAME_MAX];
+	unsigned char pinctrl_ver;
+	struct lcd_pinmux_ctrl_s *bl_pinmux;
+	unsigned int pinmux_set[10][2];
+	unsigned int pinmux_clr[10][2];
+	int bl_extern_index;
+};
+
+extern struct bl_config_s bl_config_dft;
+
+/* ==============lcd driver================== */
+struct aml_lcd_drv_s {
+	char version[15];
+	enum lcd_chip_e chip_type;
+	unsigned char lcd_status;
+
+	struct lcd_config_s *lcd_config;
+	struct bl_config_s *bl_config;
+
+	int  (*outputmode_check)(char *mode, unsigned int frac);
+	int  (*config_check)(char *mode, unsigned int frac);
+	void (*driver_init_pre)(void);
+	int  (*driver_init)(void);
+	void (*driver_disable)(void);
+	void (*list_support_mode)(void);
+	int  (*lcd_probe)(void);
+	int  (*lcd_outputmode_check)(char *mode, unsigned int frac);
+	void (*lcd_prepare)(char *mode, unsigned int frac);
+	void (*lcd_enable)(char *mode, unsigned int frac);
+	void (*lcd_disable)(void);
+	void (*lcd_set_ss)(int level);
+	char *(*lcd_get_ss)(void);
+	void (*lcd_test)(int num);
+	void (*lcd_clk)(void);
+	void (*lcd_info)(void);
+	void (*lcd_reg)(void);
+	void (*lcd_tcon_reg)(void);
+	void (*lcd_tcon_table)(void);
+	void (*bl_power_ctrl)(int status);
+	void (*bl_set_level)(unsigned int level);
+	unsigned int (*bl_get_level)(void);
+	void (*bl_config_print)(void);
+	int unifykey_test_flag;
+	void (*unifykey_test)(void);
+	void (*unifykey_tcon_test)(void);
+	void (*unifykey_dump)(void);
+	void (*lcd_extern_info)(void);
+
+	/* for factory test */
+	struct lcd_power_step_s *factory_lcd_power_on_step;
+	int factory_bl_power_on_delay;
+};
+
+extern void lcd_config_bsp_init(void);
+
+extern struct aml_lcd_drv_s *aml_lcd_get_driver(void);
+
+extern int lcd_probe(void);
+
+#endif /* INC_AML_LCD_VOUT_H */
diff --git a/include/amlogic/media/vpp/vpp.h b/include/amlogic/media/vpp/vpp.h
new file mode 100644
index 00000000000..d77ddd3879d
--- /dev/null
+++ b/include/amlogic/media/vpp/vpp.h
@@ -0,0 +1,24 @@
+#ifndef _VPP_INC_H_
+#define _VPP_INC_H_
+
+extern void vpp_init(void);
+void vpp_pq_init(int brightness, int contrast, int sat, int hue);
+void vpp_pq_load(void);
+
+#define VPP_CM_RGB    0   /* same as COLOR_FMT_RGB444*/
+#define VPP_CM_YUV    2   /* same as COLOR_FMT_YUV444*/
+
+enum vpp_gamma_sel_e {
+	VPP_GAMMA_R = 0,
+	VPP_GAMMA_G,
+	VPP_GAMMA_B
+};
+
+extern void vpp_load_gamma_table(unsigned short *data, unsigned int len, enum vpp_gamma_sel_e flag);
+extern void vpp_init_lcd_gamma_table(void);
+
+extern void vpp_matrix_update(int type);
+extern void vpp_viu2_matrix_update(int type);
+extern void hdr_tx_pkt_cb(void);
+
+#endif
diff --git a/include/amlogic/media/vpu/vpu.h b/include/amlogic/media/vpu/vpu.h
new file mode 100644
index 00000000000..26bd575e07f
--- /dev/null
+++ b/include/amlogic/media/vpu/vpu.h
@@ -0,0 +1,11 @@
+#ifndef _VPU_INC_H_
+#define _VPU_INC_H_
+
+extern void vcbus_test(void);
+extern int vpu_probe(void);
+extern int vpu_remove(void);
+extern int vpu_clk_change(int level);
+extern void vpu_clk_get(void);
+extern void vpu_info_print(void);
+
+#endif
diff --git a/include/amlogic/saradc.h b/include/amlogic/saradc.h
new file mode 100644
index 00000000000..7344a2bfa1a
--- /dev/null
+++ b/include/amlogic/saradc.h
@@ -0,0 +1,103 @@
+#ifndef __MESON_SARADC_H__
+#define __MESON_SARADC_H__
+
+#include <common.h>
+#include <adc.h>
+#include <clk.h>
+
+enum ADC_CHANNEL_TYPE {
+	MESON_SARADC_CH0 = 0,
+	MESON_SARADC_CH1,
+	MESON_SARADC_CH2,
+	MESON_SARADC_CH3,
+	MESON_SARADC_CH4,
+	MESON_SARADC_CH5,
+	MESON_SARADC_CH6,
+	MESON_SARADC_CH7,
+	MESON_SARADC_CH_MAX,
+};
+
+enum MESON_SARADC_AVG_MODE {
+	NO_AVERAGING = 0x0,
+	MEAN_AVERAGING = 0x1,
+	MEDIAN_AVERAGING = 0x2,
+};
+
+enum MESON_SARADC_NUM_SAMPLES {
+	ONE_SAMPLE = 0x0,
+	TWO_SAMPLES = 0x1,
+	FOUR_SAMPLES = 0x2,
+	EIGHT_SAMPLES = 0x3,
+};
+
+enum MESON_SARADC_RESOLUTION {
+	SARADC_10BIT = 10,
+	SARADC_12BIT = 12,
+	SARADC_22BIT = 22,
+};
+
+enum MESON_SARADC_BIT_STATE {
+	BIT_LOW = 0,
+	BIT_HIGH = 1,
+};
+
+struct meson_saradc;
+
+struct meson_saradc_diff_ops {
+	void (*extra_init)(struct meson_saradc *priv);
+	void (*set_ch7_mux)(struct meson_saradc *priv, int ch, int mux);
+	void (*enable_decim_filter)(struct meson_saradc *priv,
+				    int ch, unsigned int mode);
+	void (*set_ref_voltage)(struct meson_saradc *priv, unsigned int mode);
+	int (*get_fifo_channel)(int val);
+	int (*get_fifo_data)(struct meson_saradc *priv,
+			     struct adc_uclass_platdata *uc_pdata, int val);
+};
+
+/*
+ * struct meson_saradc_data - describe the differences of different platform
+ *
+ * @reg3_ring_counter_disable: to disable continuous ring counter.
+ * gxl and later: 1; others(gxtvbb etc): 0
+ * @reg11_vref_en: g12a and later: 0; others(axg etc): 1
+ * @reg11_cmv_sel: g12a and later: 0; others(axg etc): 1
+ * @reg11_eoc:     g12a and later: 1; others(axg etc): 0
+ * @has_bl30_integration:
+ * @num_channels: the number of adc channels
+ * @self_test_channel: channel of self-test
+ * @resolution: gxl and later: 12bit; others(gxtvbb etc): 10bit
+ * @clock_rate: saradc clock rate
+ */
+struct meson_saradc_data {
+	bool reg3_ring_counter_disable;
+	bool reg11_vref_en;
+	bool reg11_cmv_sel;
+	bool reg11_eoc;
+	bool has_bl30_integration;
+	unsigned char self_test_channel;
+	unsigned char num_channels;
+	unsigned int resolution;
+	const struct meson_saradc_diff_ops *dops;
+	unsigned int capacity;
+	unsigned long clock_rate;
+};
+
+struct meson_saradc {
+	phys_addr_t base;
+	int active_channel;
+	unsigned int current_mode;
+	struct clk xtal;
+	struct clk adc_mux;
+	struct clk adc_div;
+	struct clk adc_gate;
+	struct meson_saradc_data *data;
+};
+
+extern const struct adc_ops meson_saradc_ops;
+int meson_saradc_probe(struct udevice *dev);
+int meson_saradc_remove(struct udevice *dev);
+int meson_saradc_ofdata_to_platdata(struct udevice *dev);
+
+#define SARADC_CH_SELF_TEST	MESON_SARADC_CH7
+
+#endif /*_MESON_SARADC_H_*/
diff --git a/include/amlogic/secure_storage.h b/include/amlogic/secure_storage.h
new file mode 100644
index 00000000000..3a0148204b2
--- /dev/null
+++ b/include/amlogic/secure_storage.h
@@ -0,0 +1,46 @@
+#ifndef __SECURE_STORAGE_H__
+#define __SECURE_STORAGE_H__
+
+/* return value*/
+#define RET_OK		0
+#define RET_EFAIL	1
+#define RET_EINVAL	2
+#define RET_EMEM	3
+
+#define RET_EUND	-1
+#define SMC_UNK		0xffffffff
+
+
+#ifdef CONFIG_SECURE_STORAGE
+/* funtion name: secure_storage_write
+ * keyname : key name is ascii string
+ * keybuf : key buf
+ * keylen : key buf len
+ * keyattr: Secure/Normal, ...
+ *
+ * return  0: ok, 0x1fe: no space, other fail
+ * */
+int32_t secure_storage_write(uint8_t *keyname, uint8_t *keybuf,
+				uint32_t keylen, uint32_t keyattr);
+int32_t secure_storage_read(uint8_t *keyname, uint8_t *keybuf,
+				uint32_t keylen, uint32_t *reallen);
+int32_t secure_storage_query(uint8_t *keyname, uint32_t *retval);
+int32_t secure_storage_tell(uint8_t *keyname, uint32_t *retval);
+int32_t secure_storage_verify(uint8_t *keyname, uint8_t *hashbuf);
+int32_t secure_storage_status(uint8_t *keyname, uint32_t *retval);
+void *secure_storage_getbuffer(uint32_t *size);
+void secure_storage_notifier(void);
+void secure_storage_notifier_ex(uint32_t storagesize, uint32_t rsvarg);
+int32_t secure_storage_list(uint8_t *listbuf, uint32_t buflen,
+				uint32_t *readlen);
+int32_t secure_storage_remove(uint8_t *keyname);
+void secure_storage_set_info(uint32_t info);
+int32_t secure_storage_set_enctype(uint32_t type);
+/* return 0: success, -1: fail*/
+int32_t secure_storage_get_enctype(void);
+/*return -1: no storage, 0: default enc, 1: efuse enc, 2: fixed enc*/
+int32_t secure_storage_version(void);
+/*return -1: no storage, others: version*/
+#endif
+
+#endif
diff --git a/include/amlogic/sound.h b/include/amlogic/sound.h
new file mode 100644
index 00000000000..4aceb7c9fd3
--- /dev/null
+++ b/include/amlogic/sound.h
@@ -0,0 +1,180 @@
+/*
+ * include/amlogic/sound.h
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the named License,
+ * or any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ */
+
+#ifndef _SOUND_H_
+#define _SOUND_H_
+
+#define AIU_958_BPF			0x1500
+#define AIU_958_BRST		0x1501
+#define AIU_958_LENGTH		0x1502
+#define AIU_958_PADDSIZE	0x1503
+#define AIU_958_MISC		0x1504
+#define AIU_958_FORCE_LEFT	0x1505
+#define AIU_958_DISCARD_NUM	0x1506
+#define AIU_958_DCU_FF_CTRL	0x1507
+#define AIU_958_CHSTAT_L0	0x1508
+#define AIU_958_CHSTAT_L1	0x1509
+#define AIU_958_CTRL		0x150a
+#define AIU_958_RPT			0x150b
+#define AIU_I2S_MUTE_SWAP	0x150c
+#define AIU_I2S_SOURCE_DESC	0x150d
+#define AIU_I2S_MED_CTRL	0x150e
+#define AIU_I2S_MED_THRESH	0x150f
+#define AIU_I2S_DAC_CFG		0x1510
+#define AIU_I2S_SYNC		0x1511
+#define AIU_I2S_MISC		0x1512
+#define AIU_I2S_OUT_CFG		0x1513
+#define AIU_I2S_FF_CTRL		0x1514
+#define AIU_RST_SOFT		0x1515
+#define AIU_CLK_CTRL		0x1516
+#define AIU_MIX_ADCCFG		0x1517
+#define AIU_MIX_CTRL		0x1518
+#define AIU_CLK_CTRL_MORE	0x1519
+#define AIU_958_POP			0x151a
+#define AIU_MIX_GAIN		0x151b
+#define AIU_958_SYNWORD1	0x151c
+#define AIU_958_SYNWORD2	0x151d
+#define AIU_958_SYNWORD3	0x151e
+#define AIU_958_SYNWORD1_MASK	0x151f
+#define AIU_958_SYNWORD2_MASK	0x1520
+#define AIU_958_SYNWORD3_MASK	0x1521
+#define AIU_958_FFRDOUT_THD		0x1522
+#define AIU_958_LENGTH_PER_PAUSE	0x1523
+#define AIU_958_PAUSE_NUM		0x1524
+#define AIU_958_PAUSE_PAYLOAD	0x1525
+#define AIU_958_AUTO_PAUSE		0x1526
+#define AIU_958_PAUSE_PD_LENGTH	0x1527
+#define AIU_CODEC_DAC_LRCLK_CTRL	0x1528
+#define AIU_CODEC_ADC_LRCLK_CTRL	0x1529
+#define AIU_HDMI_CLK_DATA_CTRL		0x152a
+#define AIU_CODEC_CLK_DATA_CTRL		0x152b
+#define AIU_ACODEC_CTRL			0x152c
+#define AIU_958_CHSTAT_R0		0x1530
+#define AIU_958_CHSTAT_R1		0x1531
+#define AIU_958_VALID_CTRL		0x1532
+#define AIU_AUDIO_AMP_REG0		0x153c
+#define AIU_AUDIO_AMP_REG1		0x153d
+#define AIU_AUDIO_AMP_REG2		0x153e
+#define AIU_AUDIO_AMP_REG3		0x153f
+#define AIU_AIFIFO2_CTRL		0x1540
+#define AIU_AIFIFO2_STATUS		0x1541
+#define AIU_AIFIFO2_GBIT		0x1542
+#define AIU_AIFIFO2_CLB			0x1543
+#define AIU_CRC_CTRL			0x1544
+#define AIU_CRC_STATUS			0x1545
+#define AIU_CRC_SHIFT_REG		0x1546
+#define AIU_CRC_IREG			0x1547
+#define AIU_CRC_CAL_REG1		0x1548
+#define AIU_CRC_CAL_REG0		0x1549
+#define AIU_CRC_POLY_COEF1		0x154a
+#define AIU_CRC_POLY_COEF0		0x154b
+#define AIU_CRC_BIT_SIZE1		0x154c
+#define AIU_CRC_BIT_SIZE0		0x154d
+#define AIU_CRC_BIT_CNT1		0x154e
+#define AIU_CRC_BIT_CNT0		0x154f
+#define AIU_AMCLK_GATE_HI		0x1550
+#define AIU_AMCLK_GATE_LO		0x1551
+#define AIU_AMCLK_MSR			0x1552
+#define AIU_AUDAC_CTRL0			0x1553
+#define AIU_DELTA_SIGMA0		0x1555
+#define AIU_DELTA_SIGMA1		0x1556
+#define AIU_DELTA_SIGMA2		0x1557
+#define AIU_DELTA_SIGMA3		0x1558
+#define AIU_DELTA_SIGMA4		0x1559
+#define AIU_DELTA_SIGMA5		0x155a
+#define AIU_DELTA_SIGMA6		0x155b
+#define AIU_DELTA_SIGMA7		0x155c
+#define AIU_DELTA_SIGMA_LCNTS	0x155d
+#define AIU_DELTA_SIGMA_RCNTS	0x155e
+#define AIU_MEM_I2S_START_PTR	0x1560
+#define AIU_MEM_I2S_RD_PTR		0x1561
+#define AIU_MEM_I2S_END_PTR		0x1562
+#define AIU_MEM_I2S_MASKS		0x1563
+#define AIU_MEM_I2S_CONTROL		0x1564
+#define AIU_MEM_IEC958_START_PTR	0x1565
+#define AIU_MEM_IEC958_RD_PTR		0x1566
+#define AIU_MEM_IEC958_END_PTR		0x1567
+#define AIU_MEM_IEC958_MASKS		0x1568
+#define AIU_MEM_IEC958_CONTROL		0x1569
+#define AIU_MEM_AIFIFO2_START_PTR	0x156a
+#define AIU_MEM_AIFIFO2_CURR_PTR	0x156b
+#define AIU_MEM_AIFIFO2_END_PTR		0x156c
+#define AIU_MEM_AIFIFO2_BYTES_AVAIL	0x156d
+#define AIU_MEM_AIFIFO2_CONTROL		0x156e
+#define AIU_MEM_AIFIFO2_MAN_WP		0x156f
+#define AIU_MEM_AIFIFO2_MAN_RP		0x1570
+#define AIU_MEM_AIFIFO2_LEVEL		0x1571
+#define AIU_MEM_AIFIFO2_BUF_CNTL	0x1572
+#define AIU_MEM_I2S_MAN_WP		0x1573
+#define AIU_MEM_I2S_MAN_RP		0x1574
+#define AIU_MEM_I2S_LEVEL		0x1575
+#define AIU_MEM_I2S_BUF_CNTL	0x1576
+#define AIU_MEM_I2S_BUF_WRAP_COUNT	0x1577
+#define AIU_MEM_I2S_MEM_CTL			0x1578
+#define AIU_MEM_IEC958_MEM_CTL		0x1579
+#define AIU_MEM_IEC958_WRAP_COUNT	0x157a
+#define AIU_MEM_IEC958_IRQ_LEVEL	0x157b
+#define AIU_MEM_IEC958_MAN_WP		0x157c
+#define AIU_MEM_IEC958_MAN_RP		0x157d
+#define AIU_MEM_IEC958_LEVEL		0x157e
+#define AIU_MEM_IEC958_BUF_CNTL		0x157f
+#define AIU_AIFIFO_CTRL		0x1580
+#define AIU_AIFIFO_STATUS	0x1581
+#define AIU_AIFIFO_GBIT		0x1582
+#define AIU_AIFIFO_CLB		0x1583
+#define AIU_MEM_AIFIFO_START_PTR	0x1584
+#define AIU_MEM_AIFIFO_CURR_PTR		0x1585
+#define AIU_MEM_AIFIFO_END_PTR		0x1586
+#define AIU_MEM_AIFIFO_BYTES_AVAIL	0x1587
+#define AIU_MEM_AIFIFO_CONTROL		0x1588
+#define AIU_MEM_AIFIFO_MAN_WP		0x1589
+#define AIU_MEM_AIFIFO_MAN_RP		0x158a
+#define AIU_MEM_AIFIFO_LEVEL		0x158b
+#define AIU_MEM_AIFIFO_BUF_CNTL		0x158c
+#define AIU_MEM_AIFIFO_BUF_WRAP_COUNT	0x158d
+#define AIU_MEM_AIFIFO2_BUF_WRAP_COUNT	0x158e
+#define AIU_MEM_AIFIFO_MEM_CTL		0x158f
+#define AIFIFO_TIME_STAMP_CNTL		0x1590
+#define AIFIFO_TIME_STAMP_SYNC_0	0x1591
+#define AIFIFO_TIME_STAMP_SYNC_1	0x1592
+#define AIFIFO_TIME_STAMP_0			0x1593
+#define AIFIFO_TIME_STAMP_1			0x1594
+#define AIFIFO_TIME_STAMP_2			0x1595
+#define AIFIFO_TIME_STAMP_3			0x1596
+#define AIFIFO_TIME_STAMP_LENGTH	0x1597
+#define AIFIFO2_TIME_STAMP_CNTL		0x1598
+#define AIFIFO2_TIME_STAMP_SYNC_0	0x1599
+#define AIFIFO2_TIME_STAMP_SYNC_1	0x159a
+#define AIFIFO2_TIME_STAMP_0		0x159b
+#define AIFIFO2_TIME_STAMP_1		0x159c
+#define AIFIFO2_TIME_STAMP_2		0x159d
+#define AIFIFO2_TIME_STAMP_3		0x159e
+#define AIFIFO2_TIME_STAMP_LENGTH	0x159f
+#define IEC958_TIME_STAMP_CNTL		0x15a0
+#define IEC958_TIME_STAMP_SYNC_0	0x15a1
+#define IEC958_TIME_STAMP_SYNC_1	0x15a2
+#define IEC958_TIME_STAMP_0		0x15a3
+#define IEC958_TIME_STAMP_1		0x15a4
+#define IEC958_TIME_STAMP_2		0x15a5
+#define IEC958_TIME_STAMP_3		0x15a6
+#define IEC958_TIME_STAMP_LENGTH	0x15a7
+#define AIU_MEM_AIFIFO2_MEM_CTL		0x15a8
+#define AIU_I2S_CBUS_DDR_CNTL		0x15a9
+#define AIU_I2S_CBUS_DDR_WDATA		0x15aa
+#define AIU_I2S_CBUS_DDR_ADDR		0x15ab
+
+int aml_audio_init(void);
+
+#endif /* _SOUND_H_ */
diff --git a/include/amlogic/spicc.h b/include/amlogic/spicc.h
new file mode 100644
index 00000000000..282af845c5f
--- /dev/null
+++ b/include/amlogic/spicc.h
@@ -0,0 +1,44 @@
+/*
+ * Amlogic Meson SPI communication controller(SPICC)
+ *
+ * Copyright (C) 2017 Amlogic Corporation
+ *
+ * Licensed under the GPL-2 or later.
+ *
+ */
+
+#ifndef __SPICC_H__
+#define __SPICC_H__
+
+#define SPICC_DEFAULT_CLK_RATE 166666666
+#define CS_GPIO_MAX 2
+
+/*
+ * @compatible:
+ * @reg: controller registers address.
+ * @mem_map: memory_mapped for read operations.
+ * @clk_rate:
+ * @clk_set_rate:
+ * @pinctrl_enable:
+ * @num_chipselect:
+ * @cs_gpios:
+ */
+struct spicc_platdata {
+#ifndef CONFIG_OF_CONTROL
+	char *compatible;
+	int clk_rate;
+	int (*clk_set_rate)(int rate);
+	int (*clk_enable)(bool enable);
+	int (*pinctrl_enable)(bool enable);
+#endif
+	void __iomem *reg;
+	const char *cs_gpio_names[CS_GPIO_MAX];
+	unsigned int clk_cs_delay;
+	unsigned int mo_delay;
+	unsigned int mi_delay;
+	unsigned int mi_capture_delay;
+	unsigned int tt_delay;
+	unsigned int ti_delay;
+};
+
+#endif /* __SPICC_H__ */
\ No newline at end of file
diff --git a/include/amlogic/spifc.h b/include/amlogic/spifc.h
new file mode 100644
index 00000000000..0eb759896a2
--- /dev/null
+++ b/include/amlogic/spifc.h
@@ -0,0 +1,44 @@
+/*
+ * Amlogic SPI flash controller(SPIFC)
+ *
+ * Copyright (C) 2018 Amlogic Corporation
+ *
+ * Licensed under the GPL-2 or later.
+ *
+ */
+
+#ifndef __SPIFC_H__
+#define __SPIFC_H__
+
+/*
+ * @reg: controller registers base address.
+ * @mem_map: memory_mapped for read operations.
+ * @core: clk source, usually clk_81, 166M max.
+ * @speed: spi bus frequency, and you should know
+ *			we use clk_81 as the clk source now, max
+ *	  		speed is 166M.
+ * @io_num: max io number, SIO0 SIO1 SIO2 SIO3.
+ * @max_cs: the max slave device number, we support
+ * 			spi-nor, spi-nand now.
+ * @cs_gpios: gpio array, we use the cs pin as
+ *            gpio, cause the spifc controller
+ *            can not hold enough time sometimes.
+ */
+
+struct spifc_platdata {
+	ulong reg;
+	ulong mem_map;
+	u32 speed;
+	u32 mode;
+	u32 io_num;
+	u32 max_cs;
+};
+
+/* this is cs pin number, not slave device cs number */
+/* #define SPIFC_MAX_CS	1 */
+#define SPIFC_BUS_NUM	0
+/* slave device cs number */
+#define SPIFC_SNOR_CS	0
+#define SPIFC_SNAND_CS	1
+
+#endif /* __SPIFC_H__ */
\ No newline at end of file
diff --git a/include/amlogic/storage.h b/include/amlogic/storage.h
new file mode 100644
index 00000000000..5bdb4cb00e0
--- /dev/null
+++ b/include/amlogic/storage.h
@@ -0,0 +1,501 @@
+/* SPDX-License-Identifier: GPL-2.0+ */
+/*
+ * Header file of storage interface module
+ *
+ * Copyright (C) 2018 Amlogic Corporation
+ *
+ * Licensed under the GPL-2 or later.
+ *
+ */
+
+#ifndef __STORAGE_H__
+#define __STORAGE_H__
+
+#include <common.h>
+#include <command.h>
+#include <console.h>
+#include <watchdog.h>
+#include <malloc.h>
+#include <asm/byteorder.h>
+#include <jffs2/jffs2.h>
+
+#define RSV_UNVAIL	140	/* rsv unvail error */
+
+#define DISPROTECT_KEY			BIT(0)
+#define DISPROTECT_SECURE		BIT(1)
+#define DISPROTECT_FBBT			BIT(2)
+#define DISPROTECT_HYNIX		BIT(3)
+
+#define PART_PROTECT_FLAG		BIT(4)
+enum boot_type_e {
+	BOOT_EMMC = 1,
+	BOOT_SD = 1 << 1,
+	BOOT_NAND_NFTL = 1 << 2,
+	BOOT_NAND_MTD = 1 << 3,
+	BOOT_SNAND = 1 << 4,/* spi nand */
+	BOOT_SNOR = 1 << 5,/* spi nor */
+	BOOT_NONE = 0xFF
+};
+
+#define RSV_KEY "key"
+#define RSV_ENV "env"
+#define RSV_DTB "dtb"
+#define RSV_BBT "bbt"
+
+#define DISCRETE_BOOTLOADER 1
+#define COMPACT_BOOTLOADER 0
+
+struct nand_startup_parameter {
+	int page_size;
+	int block_size;
+	int layout_reserve_size;
+	int pages_per_block;
+	int setup_data;
+	/* */
+	int page0_disable;
+};
+
+#define BL2E_STORAGE_PARAM_SIZE		(0x80)
+#define BOOT_FIRST_BLOB_SIZE        (254*1024)
+#define BOOT_FILLER_SIZE            (4*1024)
+#define BOOT_RESERVED_SIZE          (4*1024)
+#define BOOT_RANDOM_NONCE           (16)
+#define BOOT_BL2E_SIZE              (66672) //74864-8K
+#define BOOT_EBL2E_SIZE             (BOOT_FILLER_SIZE + BOOT_RESERVED_SIZE + BOOT_BL2E_SIZE)
+#define BOOT_BL2X_SIZE              (66672)
+#define MAX_BOOT_AREA_ENTRIES		(8)
+/* bl2 core address base */
+#define BL2_CORE_BASE_OFFSET_EMMC	(0x200)
+/* boot area entry index */
+#define BOOT_AREA_BB1ST             (0)
+/* filler and reserved are considered part of the bl2E in storage view */
+#define BOOT_AREA_BL2E              (1)
+#define BOOT_AREA_BL2X              (2)
+#define BOOT_AREA_DDRFIP            (3)
+#define BOOT_AREA_DEVFIP            (4)
+#define BOOT_AREA_INVALID           (MAX_BOOT_AREA_ENTRIES)
+
+typedef struct boot_area_entry {
+    /* name */
+    char name[11];
+    /* index */
+    uint8_t idx;
+    uint64_t offset;
+    uint64_t size;
+} boot_area_entry_t;
+
+struct boot_layout {
+    boot_area_entry_t *boot_entry;
+};
+
+struct emmc_startup_parameter {
+	//sd_emmc_setup_t setup;
+};
+
+struct spi_nand_startup_parameter {
+	uint32_t pagesize;
+	uint32_t pages_per_eraseblock;
+	uint32_t eraseblocks_per_lun;
+	uint32_t planes_per_lun;
+	uint32_t luns_per_target;
+	uint32_t ntargets;
+	int layout_reserve_size;
+};
+
+struct storage_boot_entry {
+	uint32_t offset;
+	uint32_t size;
+};
+
+union storage_independent_parameter {
+	struct nand_startup_parameter nsp;
+	struct emmc_startup_parameter esp;
+	struct spi_nand_startup_parameter snasp;
+};
+
+struct storage_startup_parameter {
+	uint8_t boot_device;
+	uint8_t	boot_seq;
+	uint8_t	boot_bakups;
+	uint8_t reserved;
+	struct storage_boot_entry boot_entry[MAX_BOOT_AREA_ENTRIES];
+	union storage_independent_parameter sip;
+};
+
+struct storage_info_t {
+	u8 name[32];
+	u8 id[8];
+	u32 read_unit;
+	u32 write_unit;
+	u32 erase_unit;
+	u64 caps;/* total size */
+	u8 mode;/* bootloader mode, compact or  discrete */
+};
+
+struct storage_t {
+	enum boot_type_e type;
+	struct storage_info_t info;
+	u32 init_flag;
+	struct list_head list;
+	int (*get_part_count)(void);
+	int (*list_part_name)(int idx, char *part_name);
+	/* when part_name is null, default to ops in whole chip */
+	/* int (*block_is_bad)(const char *part_name, loff_t off); */
+	u64 (*get_part_size)(const char *part_name);
+	int (*read)(const char *part_name, loff_t off,
+		    size_t size, void *dest);
+	int (*write)(const char *part_name, loff_t off,
+		     size_t size, void *source);
+	int (*erase)(const char *part_name, loff_t off,
+		     size_t size, int scrub_flag);
+
+#define BOOT_OPS_ALL 0xFF/* for cpy parameter operates all copies */
+	u8 (*get_copies)(const char *part_name);
+	u64 (*get_copy_size)(const char *part_name);
+	int (*boot_read)(const char *part_name,
+			 u8 cpy, size_t size, void *dest);
+	int (*boot_write)(const char *part_name,
+			  u8 cpy, size_t size, void *source);
+	int (*boot_erase)(const char *part_name, u8 cpy);
+
+	u32 (*get_rsv_size)(const char *rsv_name);
+	int (*read_rsv)(const char *rsv_name, size_t size, void *buf);
+	int (*write_rsv)(const char *rsv_name, size_t size, void *buf);
+	int (*erase_rsv)(const char *rsv_name);
+	int (*protect_rsv)(const char *rsv_name,
+			   bool ops);/*true:on false:off*/
+};
+
+struct device_node_t {
+	enum boot_type_e index;
+	char *type;
+	int (*pre)(void);
+	int (*probe)(u32 init_flag);
+};
+
+/**
+ * we use a valid device list to manage the storage devices,
+ * and every type of device can only exist ONE in this list.
+ * we will scan and add the valid storage device to the list
+ * in the init process, and of cause you can register the device
+ * by you own.
+ */
+#define NAND_BOOT_NORMAL                0
+#define NAND_BOOT_UPGRATE               1
+#define NAND_BOOT_ERASE_PROTECT_CACHE   2
+#define NAND_BOOT_ERASE_ALL             3
+#define NAND_BOOT_SCRUB_ALL             4
+#define NAND_SCAN_ID_INIT               5
+/**
+ * @usage: init all the valid storage device
+ *
+ * @init_flag: it's only works for MLC/EMMC driver
+ * 0 NAND_BOOT_NORMAL:normal init, but can't operates the phy data area
+ * 1 NAND_BOOT_UPGRATE:same as 0, but operation on phy data area is allowed
+ * 2 NAND_BOOT_ERASE_PROTECT_CACHE:only erase rsv area
+ * 3 NAND_BOOT_ERASE_ALL:erase whole device
+ * 4 NAND_BOOT_SCRUB_ALL:erase whole device
+ * 5 NAND_SCAN_ID_INIT:only read nand id
+ *
+ * @return: init result
+ *          0 = failed
+ *          other = device_index that device probe successfully
+ */
+int store_init(u32 init_flag);
+
+/**
+ * @usage: register a storage device to the valid list
+ *
+ * @param: the description pointer of your storage device
+ *
+ * @return: registration result
+ *          0 = success
+ *          1 = fail
+ */
+int store_register(struct storage_t *store_dev);
+
+/**
+ * @usage: unregister a storage device from the valid list
+ *
+ * @store_dev: the description pointer of your storage device
+ */
+void store_unregister(struct storage_t *store_dev);
+
+/**
+ * @usage: check the type of device is valid on this board
+ *
+ * @type: the device type that you want to check
+ *
+ * @return: is the device valid
+ *          0 = invalid
+ *          1 = valid
+ */
+u8 store_device_valid(enum boot_type_e type);
+
+/**
+ * @usage: set the 'type' device as current device, and you can operates it
+ *
+ * @type: the device type that you want to set
+ *
+ * @return: result of the operation
+ *          0 = success
+ *          other = fail
+ */
+int store_set_device(enum boot_type_e type);
+
+/**
+ * @usage: get the type of current storage device
+ *
+ * @return: storage device type
+ */
+enum boot_type_e store_get_type(void);
+
+/**
+ * @usage: get information about the current device
+ *
+ * @info: the pointer for the information
+ *
+ * @return: result of the operation
+ *          0 = success
+ *          other = fail
+ */
+int store_get_device_info(struct storage_info_t *info);
+
+/**
+ * @usage: read data from storage device
+ *
+ * @name: partition name, when it's null the target
+ *        will regards as whole device.
+ * @off: offset to the 0 address of partition/device
+ * @size: the amount of bytes to read
+ * @buf: pointer of target buffer
+ *
+ * @return: result of the operation
+ *          0 = success
+ *          other = fail
+ */
+int store_read(const char *name, loff_t off, size_t size, void *buf);
+
+/**
+ * @usage: write data to storage device
+ *
+ * @name: partition name, when it's null the target
+ *        will regards as whole device.
+ * @off: offset to the 0 address of partition/device
+ * @size: the amount of bytes to write
+ * @buf: pointer of source buffer
+ *
+ * @return: result of the operation
+ *          0 = success
+ *          other = fail
+ */
+int store_write(const char *name, loff_t off, size_t size, void *buf);
+
+/**
+ * @usage: erase the storage device
+ *
+ * @name: partition name, when it's null the target
+ *        will regards as whole device.
+ * @off: offset to the 0 address of partition/device
+ * @size: the amount of bytes to erase
+ * @scrub: scrub flag(scrub operates will works only when the device support)
+ *          0 = no scrub, just erase
+ *          1 = use scrub operates instead of erase
+ * @return: result of the operation
+ *          0 = success
+ *          other = fail
+ */
+int store_erase(const char *name, loff_t off, size_t size, int scrub);
+
+/**
+ * @usage: get the partition size or capacity of device
+ *
+ * @name: partition name, when it's null the target
+ *        will regards as whole device.
+ *
+ * @return: the amount of bytes to the partition or device size
+ */
+u64 store_part_size(const char *name);
+
+/**
+ * @usage: get the copy number of [name]
+ *
+ * @name: only can be "bl2" or "tpl"/"fip" in discrete mode
+ *        be "bootloader" in compact mode
+ * @return: the copy number of the "bootloader" or "tpl"
+ */
+u8 store_boot_copy_num(const char *name);
+
+/**
+ * @usage: get the 1st boot copy nubmer of current device.
+ * for eMMC: 0 -> user partition; 1 -> boot0; 2 -> boot1
+ */
+u8 store_boot_copy_start(void);
+
+/**
+ * @usage: get the bootup index of [name]
+ *
+ * @name: do not care discrete mode or compact mode
+ * 		"bl2" "spl" could be used as the one romboot loaded
+ * 		"fip" "devfip" "tpl" or "bootloader" would be the main u-boot.
+ * @return: the copy number of the "bootloader" or "tpl"
+ */
+u8 store_bootup_bootidx(const char *name);
+
+/**
+ * @usage: restore the bootidx/bootdev etc.
+ */
+void store_restore_bootidx(void);
+
+/**
+ * @usage: get the copy size of [name]
+ *
+ * @name: name: only can be "bl2" or "tpl"/"fip" in discrete mode
+ *        be "bootloader" in compact mode
+ *
+ * @return: the size of every copy
+ */
+u64 store_boot_copy_size(const char *name);
+
+/**
+ * @usage: read the [name] data from storage device
+ *
+ * @name: only can be "bl2" or "tpl"/"fip" in discrete mode
+ *        be "bootloader" in compact mode
+ * @copy: which copy you want read
+ * @size: the amount of bytes to read
+ * @buf: pointer of the target buffer
+ *
+ * @return: result of the operation
+ *          0 = success
+ *          other = fail
+ */
+int store_boot_read(const char *name, u8 copy, size_t size, void *buf);
+
+/**
+ * @usage: write the [name] data into storage device
+ *
+ * @name: only can be "bl2" or "tpl"/"fip" in discrete mode
+ *        be "bootloader" in compact mode
+ * @copy: which copy you want write,
+ *        it will write to all copies when copy = BOOT_OPS_ALL
+ * @size: the amount of bytes to write
+ * @buf: pointer of the source buffer
+ *
+ * @return: result of the operation
+ *          0 = success
+ *          other = fail
+ */
+int store_boot_write(const char *name, u8 copy, size_t size, void *buf);
+
+/**
+ * @usage: erase the [name] data
+ *
+ * @name: only can be "bl2" or "tpl"/"fip" in discrete mode
+ *        be "bootloader" in compact mode
+ * @copy: which copy you want erase,
+ *        it will erase all copies when copy = BOOT_OPS_ALL
+ *
+ * @return: result of the operation
+ *          0 = success
+ *          other = fail
+ */
+int store_boot_erase(const char *name, u8 copy);
+
+/**
+ * @usage: get the rsv info size
+ *
+ * @name: rsv info name, please refer to
+ *        RSV_KEY   "key"
+ *        RSV_ENV   "env"
+ *        RSV_DTB   "dtb"
+ *        RSV_BBT   "bbt"
+ *
+ * @return: the amount bytes of the rsv info
+ */
+u32 store_rsv_size(const char *name);
+
+/**
+ * @usage: read the rsv info from storage device
+ *
+ * @name: rsv info name, please refer to
+ *        RSV_KEY   "key"
+ *        RSV_ENV   "env"
+ *        RSV_DTB   "dtb"
+ *        RSV_BBT   "bbt"
+ * @size: the amount of bytes to read
+ * @buf: pointer of the target buffer
+ *
+ * @return: result of the operation
+ *          0 = success
+ *          other = fail
+ */
+int store_rsv_read(const char *name, size_t size, void *buf);
+
+/**
+ * @usage: write the rsv info to the storage device
+ *
+ * @name: rsv info name, please refer to
+ *        RSV_KEY   "key"
+ *        RSV_ENV   "env"
+ *        RSV_DTB   "dtb"
+ *        RSV_BBT   "bbt"
+ * @size: the amount of bytes to write
+ * @buf: pointer of the source buffer
+ *
+ * @return: result of the operation
+ *          0 = success
+ *          other = fail
+ */
+int store_rsv_write(const char *name, size_t size, void *buf);
+
+/**
+ * @usage: erase the rsv info
+ *
+ * @name: rsv info name, please refer to
+ *        RSV_KEY   "key"
+ *        RSV_ENV   "env"
+ *        RSV_DTB   "dtb"
+ *        RSV_BBT   "bbt"
+ *        it will erase all reserve information
+ *        when name is null
+ *
+ * @return: result of the operation
+ *          0 = success
+ *          other = fail
+ */
+int store_rsv_erase(const char *name);
+
+/**
+ * @usage: turn on/off the protection of rsv info
+ *
+ * @name: rsv info name, please refer to
+ *        RSV_KEY   "key"
+ *        RSV_ENV   "env"
+ *        RSV_DTB   "dtb"
+ *        RSV_BBT   "bbt"
+ *        it will operates all reserve information
+ *        when name is null
+ * @ops: turn on/off the rsv info protection
+ *       true = turn on the protection
+ *       flase = turn off the protection
+ *
+ * @return: result of the operation
+ *          0 = success
+ *          other = fail
+ */
+int store_rsv_protect(const char *name, bool ops);
+
+/**
+ * @usage: get bootloader mode for current storage
+ *
+ * @return: result of the operation
+ *          0 = COMPACT_BOOTLOADER
+ *          1 = DISCRETE_BOOTLOADER
+ */
+int store_get_device_bootloader_mode(void);
+
+int sheader_need(void);
+void sheader_load(void *addr);
+
+#endif/* __STORAGE_H__ */
diff --git a/include/amlogic/storagekey.h b/include/amlogic/storagekey.h
new file mode 100644
index 00000000000..f258b82c95c
--- /dev/null
+++ b/include/amlogic/storagekey.h
@@ -0,0 +1,57 @@
+#ifndef __STORAGEKEY_H__
+#define __STORAGEKEY_H__
+
+
+/* storage key interface */
+/**
+ *1.amlkey_init: init storage key
+ * return ok 0, fail not 0
+ */
+extern int32_t amlkey_init(uint8_t *seed, uint32_t len);
+
+/**
+ *2. amlkey_isexsit: query key, already programmed ?
+ * return: exsit 1, non 0
+ */
+extern int32_t amlkey_isexsit(const uint8_t * name);
+
+/**
+ * 3. query if the key is secure
+ * return secure 1, non 0;
+ */
+extern int32_t amlkey_issecure(const uint8_t * name);
+
+/**
+ * 4. amlkey_size: actual bytes of key value
+ *  return actual size.
+ */
+extern ssize_t amlkey_size(const uint8_t *name);
+
+/**
+ *5. amlkey_read: read non-secure key in bytes.
+ * return actual size read back; 0 means read failed!
+ */
+extern ssize_t amlkey_read(const uint8_t *name,
+				uint8_t *buffer, uint32_t len);
+
+/**
+ * 6. amlkey_write: write secure/non-secure key in bytes.
+ * return actual size write down. 0 means write failed!
+ */
+extern ssize_t amlkey_write(const uint8_t *name,
+				uint8_t *buffer, uint32_t len, uint32_t secure);
+
+/**
+ * 7. get the hash value of programmed secure key | 32bytes length, sha256
+ * return success 0, fail -1
+ */
+extern int32_t amlkey_hash_4_secure(const uint8_t * name, uint8_t * hash);
+
+/**
+ * 8. amlkey_del: del key by name
+ * return success 0, fail non-0.
+ */
+extern int32_t amlkey_del(const uint8_t * name);
+
+
+#endif /* __STORAGEKEY_H__ */
diff --git a/include/amlogic/store_wrapper.h b/include/amlogic/store_wrapper.h
new file mode 100644
index 00000000000..0f3007de959
--- /dev/null
+++ b/include/amlogic/store_wrapper.h
@@ -0,0 +1,56 @@
+/*
+ * \file        store_wrapper.h
+ * \brief       wraaper for storage apis
+ *
+ * \version     1.0.0
+ * \date        2019/5/30
+ * \author      Sam.Wu <yihui.wu@amlgic.com>
+ *
+ * Copyright (c) 2019 Amlogic. All Rights Reserved.
+ *
+ */
+#ifndef __STORE_WRAPPER_H__
+#define __STORE_WRAPPER_H__
+#include <amlogic/storage.h>
+
+//logic write/read, if not MTD, same as store_write
+int store_logic_write(const char *name, loff_t off, size_t size, void *buf);
+
+int store_logic_read(const char *name, loff_t off, size_t size, void *buf);
+
+u64 store_logic_cap(const char* partName);
+
+#define AML_MAGIC_HDR_L       (0x4c4d4140) //"@AML"
+#define AML_MAGIC_HDR_R       (0x544f4f42) //"BOOT"
+
+#define AML_MAGIC_CORE        (0X54534242) //"BBST"
+#define AML_MAGIC_BL2E        (0x45324c42) //"BL2E"
+#define AML_MAGIC_BL2X        (0x58324c42) //"BL2X"
+#define AML_MAGIC_DDRF        (0x46524444) //"DDRF"
+#define AML_MAGIC_DEVF        (0x46564544) //"DEVF"
+typedef struct{
+	unsigned int  nMagic;          //"BBST", "BL2E", "BL2X", "DDRF", "DEVF"
+	unsigned int  nOffset;         //offset from file head of file
+	unsigned int  nPayLoadSize;    //size of payload
+	unsigned int  nReserved;       //reserved for future
+}payload_info_item_t, *p_payload_info_item_t;
+
+typedef struct{
+	unsigned char  szSHA2[32];     //sha256 of sizeof(payload_info_t) - sizeof(szSHA2)
+	unsigned int   nMagicL;        //"@AML"
+	unsigned int   nMagicR;        //"BOOT"
+	unsigned char  byVersion;      //version:0,1,2,....
+	unsigned char  byItemNum;      //number of items
+	unsigned short nSize;          //sizeof(this) = sizeof(hdr) + sizeof(item) * byItemNum
+	unsigned char  szReserved1[4];
+	char           szTimeStamp[16];//"SC2-YYYYMMDDHHmm" e.g "SC2-202007082259"
+
+}payload_info_hdr_t, *p_payload_info_hdr_t;
+
+typedef struct{
+	payload_info_hdr_t  hdr;         //header
+	payload_info_item_t arrItems[1]; //items
+}payload_info_t, *p_payload_info_t;
+
+#endif//#ifndef __STORE_WRAPPER_H__
+
diff --git a/include/amlstorage/emmc_partitions.h b/include/amlstorage/emmc_partitions.h
new file mode 100644
index 00000000000..5edc1f89c8f
--- /dev/null
+++ b/include/amlstorage/emmc_partitions.h
@@ -0,0 +1,271 @@
+#ifndef _AML_MMC_H
+#define _AML_MMC_H
+
+#include <asm/io.h>
+#include <config.h>
+#include <common.h>
+#include <command.h>
+#include <mmc.h>
+#include <part.h>
+#include <malloc.h>
+#include <linux/list.h>
+#include <mmc.h>
+#include <div64.h>
+#include <env.h>
+#include <malloc.h>
+#include <asm/cache.h>
+//#include <amlogic/asm/clock.h>
+#include <amlstorage/partition_table.h>
+#include <amlstorage/emmc_storage.h>
+#include <linux/sizes.h>
+
+#define     AML_MMC_DBG
+
+#define     MAX_DEVICE_NUM                  32
+#define     MAX_DEVICE_NAME_LEN             16
+#define     MAX_MMC_PART_NUM                32
+#define     MAX_MMC_PART_NAME_LEN           16
+
+#ifndef CONFIG_AML_MMC_INHERENT_PART
+#define     PARTITION_RESERVED              (8*SZ_1M)  // 8MB
+#define     MMC_BOOT_PARTITION_RESERVED     (32*SZ_1M) // 32MB
+#define     RESERVED_GPT_OFFSET     (36*SZ_1M) // 36MB
+
+#define     MMC_BOOT_NAME                   "bootloader"
+#define     MMC_BOOT_NAME0                   "bootloader-boot0"
+#define     MMC_BOOT_NAME1                   "bootloader-boot1"
+#define     MMC_BOOT_DEVICE_SIZE            (0x4*SZ_1M)
+
+#define     MMC_RESERVED_NAME               "reserved"
+#define     MMC_RESERVED_SIZE               (64*SZ_1M)
+#define		MMC_BOTTOM_RSV_SIZE				(0)
+#endif		/* CONFIG_AML_MMC_INHERENT_PART */
+
+#define     MMC_FREERTOS_NAME               "rtos-0"
+#define		MMC_NBG_NAME					"NBG"
+
+#define     MMC_CACHE_NAME                  "cache"
+// #define     MMC_CACHE_SIZE                  (512*SZ_1M) // this is not used and should be get from spl
+
+#define     MMC_ENV_NAME                    "env"
+#define     MMC_ENV_SIZE                    (8*SZ_1M)
+
+#define     MMC_KEY_NAME                    "key"
+#define     MMC_KEY_SIZE                    (256*1024)
+#define     EMMCKEY_RESERVE_OFFSET           (0x4000)
+#define     MMC_RESERVED_OFFSET              (36*SZ_1M)
+#define     MMC_BLOCK_SIZE                   (512)
+// #define     MMC_SECURE_NAME                 "secure"
+// #define     MMC_SECURE_SIZE                 (0x1*SZ_1M)
+
+#define MMC_DDR_PARAMETER_NAME	"ddr-parameter"
+#define DDR_PARAMETER_OFFSET	(SZ_1M * 8)
+#define DDR_PARAMETER_SIZE	(4 * 512)
+
+#define     MMC_MPT_VERSION_1               "01.00.00"
+#define     MMC_MPT_VERSION_2               "01.02.00"
+/* version in use, fixme when kenel driver is updated. */
+#define		MMC_MPT_VERSION					MMC_MPT_VERSION_1
+
+#define     MMC_PARTITIONS_MAGIC            "MPT" // MMC Partition Table
+#define     MMC_CARD_PARTITION_NAME         "card"
+
+/* virtual partitions*/
+
+#define MMC_MBR_NAME    ("AML_MBR")
+/* offset&size of mbr will not be used */
+#define MMC_MBR_OFFSET  (0x0)
+#define MMC_MBR_SIZE    (0x200)
+
+/*
+* partition table
+* |<----partition_table---->|<----key---->|
+*
+*/
+#define MMC_TABLE_NAME		("AML_TABLE")
+#define MMC_TABLE_OFFSET		(0x0)
+#define MMC_TABLE_SIZE		(16*1024)
+
+/*
+* write 128KB data pattern
+* |<----pattern---->||<------DTB------>|
+*/
+#define	MMC_PATTERN_NAME		"pattern"
+#define CALI_PATTERN_OFFSET	(SZ_1M * 3)
+#define CALI_PATTERN_SIZE	(256 * 512)
+#define CALI_BLOCK_SIZE		(512)
+#define CALI_PATTERN		(0x55aa55aa)
+
+#define	MMC_MAGIC_NAME		"magic"
+#define MAGIC_OFFSET	(SZ_1M * 6)
+#define MAGIC_SIZE	(256 * 512)
+#define MAGIC_BLOCK_SIZE		(512)
+#define MAGIC_PATTERN	(0X00FF00FF)
+
+#define	MMC_RANDOM_NAME		"random"
+#define RANDOM_OFFSET	(SZ_1M * 7)
+#define RANDOM_SIZE	(256 * 512)
+#define RANDOM_BLOCK_SIZE		(512)
+#define RANDOM_PATTERN	(0X52414E44)
+/*
+ * 2 copies dtb were stored in dtb area.
+ * each is 256K.
+ * timestamp&checksum are in the tail.
+ * |<--------------DTB Area-------------->|
+ * |<------DTB1------->|<------DTB2------>|
+ */
+#define MMC_DTB_NAME		"dtb"
+#define DTB_OFFSET		(SZ_1M * 4)
+#define DTB_BLK_SIZE		(512)
+#define DTB_BLK_CNT			(512)
+#define DTB_SIZE			(DTB_BLK_CNT * DTB_BLK_SIZE)
+#define DTB_COPIES			(2)
+#define DTB_AREA_BLK_CNT	(DTB_BLK_CNT * DTB_COPIES)
+#define EMMC_DTB_DEV		(1)
+#define EMMC_FASTBOOT_CONTEXT_DEV         (1)
+
+#define MMC_FASTBOOT_CONTEXT_NAME     "fastboot_context"
+#define FASTBOOT_CONTEXT_OFFSET  (SZ_1M * 5)
+#define FASTBOOT_CONTEXT_SIZE    (512)
+#define GPT_LBA_COUNT 34
+#define GPT_TOTAL_SIZE (GPT_LBA_COUNT * 512)
+
+struct virtual_partition {
+	char name[MAX_MMC_PART_NAME_LEN];
+	uint64_t offset;
+	uint64_t size;
+};
+
+#define VIRTUAL_PARTITION_ELEMENT(na, of, sz) {.name = na, .offset = of, .size = sz,}
+
+struct aml_pattern {
+	char name[MAX_MMC_PART_NAME_LEN];
+	unsigned int pattern;
+};
+#define AML_PATTERN_ELEMENT(na, pa) {.name = na, .pattern = pa,}
+
+#ifdef AML_MMC_DBG
+#define aml_mmc_dbg(fmt, ...) printk( "%s: line:%d " fmt "\n", \
+                  __func__, __LINE__, ##__VA_ARGS__)
+
+#define aml_mmc_msg(fmt, ...) printk( "%s: line:%d " fmt "\n", \
+                  __func__, __LINE__, ##__VA_ARGS__)
+#else
+#define aml_mmc_dbg(fmt, ...)
+#define aml_mmc_msg(fmt, ...) printk( fmt "\n",  ##__VA_ARGS__)
+#endif
+
+#define DOS_MBR	0
+#define DOS_PBR	1
+
+#define DOS_PBR_FSTYPE_OFFSET	0x36
+#define DOS_PBR32_FSTYPE_OFFSET	0x52
+
+#define DOS_PART_DISKSIG_OFFSET	0x1b8
+#define DOS_PART_TBL_OFFSET	0x1be
+#define DOS_PART_MAGIC_OFFSET	0x1fe
+#define DOS_PBR_MEDIA_TYPE_OFFSET	0x15
+
+#define DOS_PARTITION_COUNT 32
+
+typedef struct dos_partition {
+	unsigned char boot_ind;		/* 0x80 - active			*/
+	unsigned char head;		/* starting head			*/
+	unsigned char sector;		/* starting sector			*/
+	unsigned char cyl;		/* starting cylinder			*/
+	unsigned char sys_ind;		/* What partition type			*/
+	unsigned char end_head;		/* end head				*/
+	unsigned char end_sector;	/* end sector				*/
+	unsigned char end_cyl;		/* end cylinder				*/
+	unsigned char start4[4];	/* starting sector counting from 0	*/
+	unsigned char size4[4];		/* nr of sectors in partition		*/
+} dos_partition_t;
+
+struct dos_mbr_or_ebr{
+	unsigned char bootstart[446];
+	struct dos_partition part_entry[4];
+	unsigned char magic[2];
+};
+
+struct mmc_partitions_fmt {
+    char magic[4];
+    unsigned char version[12];
+    int part_num;
+    int checksum;
+    struct partitions partitions[MAX_MMC_PART_NUM];
+};
+
+struct mmc_partition_config{
+    unsigned char version[12];
+    int part_num;
+    struct partitions partitions[MAX_MMC_PART_NUM];
+    unsigned option;
+    void * private_data;
+};
+
+/*
+struct _mmc_device{
+    char name[MAX_DEVICE_NAME_LEN];
+    uint64_t  offset;
+    uint64_t  size;
+    void * private_data;
+    struct list_head list;
+};
+*/
+
+#define LOCK_MAJOR_VERSION 1
+#define LOCK_MINOR_VERSION 0
+
+#define LOCK_DATA_SIZE 16
+
+typedef struct LockData {
+	uint8_t version_major;
+	uint8_t version_minor;
+	uint8_t unlock_ability;
+
+	/* Padding to eight bytes. */
+	uint8_t reserved1;
+
+	/* 0: unlock    1: lock*/
+	uint8_t lock_state;
+
+	/* 0: unlock    1: lock*/
+	uint8_t lock_critical_state;
+
+	/* 0: enable bootloader version rollback 1: prevent bootloader version rollback*/
+	uint8_t lock_bootloader;
+	uint8_t reserved2[1];
+} LockData_t;
+
+/*512Bytes*/
+typedef struct FastbootContext {
+	/* locks */
+	LockData_t lock;
+	uint8_t rsv[248];
+	/* checksum, storage driver care */
+	uint32_t crc32;
+} FastbootContext_t;
+
+extern bool is_partition_checked;
+extern struct partitions emmc_partition_table[];
+
+extern int get_emmc_partition_arraysize(void);
+
+/*
+ * get the partition number by name
+ * return value
+ *	< 0 means no partition found
+ *	>= 0 means valid partition
+ */
+extern int get_partition_num_by_name(char const *name);
+
+struct partitions* find_mmc_partition_by_name (char const *name);
+struct partitions *aml_get_partition_by_name(const char *name);
+int mmc_boot_size(char *name, uint64_t* size);
+struct virtual_partition *aml_get_virtual_partition_by_name(const char *name);
+bool aml_is_emmc_tsd (struct mmc *mmc);
+int mmc_device_init (struct mmc *mmc);
+
+#define PARTITION_ELEMENT(na, sz, flags) {.name = na, .size = sz, .mask_flags = flags,}
+
+#endif
diff --git a/include/amlstorage/emmc_storage.h b/include/amlstorage/emmc_storage.h
new file mode 100644
index 00000000000..f2dc55fde77
--- /dev/null
+++ b/include/amlstorage/emmc_storage.h
@@ -0,0 +1,76 @@
+/***********************************************
+*****Storage config of board, for ACS use.*****
+***********************************************/
+
+#ifndef __STORAGE_H
+#define __STORAGE_H
+
+#include <linux/types.h>
+#include <amlogic/asm/romboot.h>
+#ifndef __ASSEMBLY__
+
+//Partition table defines
+#define NAND_PART_SIZE_FULL		-1
+#define MAX_PART_NUM			32
+#define	 MAX_PART_NAME_LEN		16
+//#define 	SZ_1M 					0x100000
+
+#define STORE_CODE		1
+#define	STORE_CACHE		(1<<1)
+#define STORE_DATA		(1<<2)
+
+#define SPI_BOOT_FLAG		0
+#define NAND_BOOT_FLAG 		1
+#define EMMC_BOOT_FLAG 		2
+#define CARD_BOOT_FLAG 		3
+#define SPI_NAND_FLAG		4
+#define SPI_EMMC_FLAG		5
+
+#define CARD_TYPE_SHIFT		4
+#define CARD_TYPE_MASK		0xf
+#define CARD_TYPE_UNKNOWN	0        /* unknown */
+//#define CARD_TYPE_MMC		1        /* MMC card */
+//#define CARD_TYPE_SD		2        /* SD card */
+#define CARD_TYPE_SDIO		3        /* SDIO card */
+#define CARD_TYPE_SD_COMBO	4        /* SD combo (IO+mem) card */
+#define CARD_TYPE_NON_SDIO	5        /* NON sdio device (means SD/MMC card) */
+
+#define AML_GET_CARD_TYPE(val, port)    ((val >> (port * CARD_TYPE_SHIFT)) & CARD_TYPE_MASK)
+#define AML_SET_CARD_TYPE(val, port, type)   \
+    (val |= ((type & CARD_TYPE_MASK) << (port * CARD_TYPE_SHIFT)))
+
+/* storage device */
+#define STORAGE_DEV_NOSET	(0)
+#define STORAGE_DEV_EMMC	(1)
+#define STORAGE_DEV_NAND	(2)
+#define STORAGE_DEV_SPI		(3)
+#define STORAGE_DEV_SDCARD	(4)
+#define STORAGE_DEV_USB		(5)
+
+struct partitions {
+	char name[MAX_PART_NAME_LEN];			/* identifier string */
+	uint64_t size;			/* partition size */
+	uint64_t offset;		/* offset within the master space */
+	unsigned mask_flags;		/* master flags to mask out for this partition */
+};
+
+struct config_nand {
+	unsigned enable_slc;
+	unsigned order_ce;
+	unsigned reserved[2];
+};
+
+struct config_mmc {
+	unsigned type;
+	unsigned port;
+	unsigned reserved[2];
+};
+
+struct store_config {
+	unsigned  store_device_flag;			// indicate storage devices on each board
+	struct config_nand  nand_configs;			// specital config for nand
+	struct config_mmc  mmc_configs;			// specital config for mmc
+};
+
+#endif
+#endif
diff --git a/include/amlstorage/partition_table.h b/include/amlstorage/partition_table.h
new file mode 100644
index 00000000000..4e170f3748e
--- /dev/null
+++ b/include/amlstorage/partition_table.h
@@ -0,0 +1,72 @@
+#ifndef _PARTITION_TABLE_H
+#define _PARTITION_TABLE_H
+// #ifdef CONFIG_STORE_COMPATIBLE
+#include <amlstorage/emmc_storage.h>
+#include <amlogic/storage.h>
+// #endif
+//#include <asm/arch/nand.h>
+//#include <asm/arch/poc.h>
+
+
+#define STORE_DBG
+#ifdef STORE_DBG
+#define store_dbg(fmt, ...) printk( "%s: line:%d " fmt "\n", \
+				  __func__, __LINE__, ##__VA_ARGS__)
+
+#define store_msg(fmt, ...) printk( "%s: line:%d " fmt "\n", \
+				  __func__, __LINE__, ##__VA_ARGS__)
+#else
+#define store_dbg(fmt, ...)
+#define store_msg(fmt, ...) printk( fmt "\n",  ##__VA_ARGS__)
+#endif
+
+//boot_flag
+//#define R_BOOT_DEVICE_FLAG  READ_CBUS_REG(ASSIST_POR_CONFIG)
+
+//#if MESON_CPU_TYPE >= MESON_CPU_TYPE_MESON8
+//#define POR_BOOT_VALUE 	((((R_BOOT_DEVICE_FLAG>>9)&1)<<2)|((R_BOOT_DEVICE_FLAG>>6)&3))
+//#else
+//#define POR_BOOT_VALUE 	(R_BOOT_DEVICE_FLAG & 7)
+//#endif
+
+//#if 1 /*defined in poc.h*/
+//#define POR_NAND_BOOT()	 ((POR_BOOT_VALUE == 7) || (POR_BOOT_VALUE == 6))
+//#define POR_SPI_BOOT()  		((POR_BOOT_VALUE == 5) || (POR_BOOT_VALUE == 4))
+//#define POR_EMMC_BOOT()	((IS_MESON_M8M2_CPU | IS_MESON_M8BABY_CPU)?((POR_BOOT_VALUE == 3) || ((POR_BOOT_VALUE == 1))):(POR_BOOT_VALUE == 3))
+//#define POR_CARD_BOOT() 	(POR_BOOT_VALUE == 0)
+//#endif
+
+#define SPI_BOOT_FLAG 			0
+#define NAND_BOOT_FLAG 		1
+#define EMMC_BOOT_FLAG 		2
+#define CARD_BOOT_FLAG 		3
+#define SPI_NAND_FLAG			4
+#define SPI_EMMC_FLAG			5
+
+#define _AML_DEVICE_BOOT_FLAG_DEFAULT   (0XFFFFFFFF)
+
+#define START_ADDR 			0xd9000200
+#define TABLE_MAGIC_NAME  		"part"
+#define STORE_MAGIC_NAME  		"stor"
+#define ACS_SET_LEN 			 128
+
+extern int info_disprotect;
+
+extern int has_boot_slot;
+extern int has_system_slot;
+extern bool dynamic_partition;
+extern bool vendor_boot_partition;
+
+extern int get_partition_from_dts(unsigned char * buffer);
+
+extern int get_partitions_table(struct partitions **table);
+
+#define AML_DTB_IMG_MAX_SZ  ((256<<10) - 512)
+extern struct partitions *get_partitions(void);
+
+extern int get_partition_count(void);
+extern void free_partitions(void);
+/* only nand&emmc for gxb and later soc */
+
+#endif// #ifndef _PARTITION_TABLE_H
+
-- 
2.43.2

