|  | /* SPDX-License-Identifier: (GPL-2.0+ OR MIT) */ | 
|  | /* | 
|  | * arch/arm/include/asm/arch-txlx/io.h | 
|  | * | 
|  | * Copyright (C) 2020 Amlogic, Inc. All rights reserved. | 
|  | * | 
|  | */ | 
|  |  | 
|  | #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 |