blob: 1b7179ccdb03e01de242f8059bef94d2bc8f99d5 [file] [log] [blame]
/*
* Copyright 2017 NXP
*
* SPDX-License-Identifier: BSD-3-Clause
*/
#ifndef __IMX_RDC_H__
#define __IMX_RDC_H__
/* Masters index */
enum rdc_mda_idx {
RDC_MDA_A53 = 0,
RDC_MDA_M4 = 1,
RDC_MDA_PCIE_CTRL1 = 2,
RDC_MDA_PCIE_CTRL2 = 3,
RDC_MDA_VPU_DEC = 4,
RDC_MDA_LCDIF = 5,
RDC_MDA_CSI1 = 6,
RDC_MDA_CSI2 = 7,
RDC_MDA_Coresight = 8,
RDC_MDA_DAP = 9,
RDC_MDA_CAAM = 10,
RDC_MDA_SDMAp = 11,
RDC_MDA_SDMAb = 12,
RDC_MDA_APBHDMA = 13,
RDC_MDA_RAWNAND = 14,
RDC_MDA_uSDHC1 = 15,
RDC_MDA_uSDHC2 = 16,
RDC_MDA_DCSS = 17,
RDC_MDA_GPU = 18,
RDC_MDA_USB1 = 19,
RDC_MDA_USB2 = 20,
RDC_MDA_TESTPORT = 21,
RDC_MDA_ENET1_TX = 22,
RDC_MDA_ENET1_RX = 23,
RDC_MDA_SDMA2 = 24,
RDC_MDA_Reserved = 25,
RDC_MDA_SDMA1 = 26,
};
/* Peripherals index */
enum rdc_pdap_idx {
RDC_PDAP_GPIO1 = 0,
RDC_PDAP_GPIO2 = 1,
RDC_PDAP_GPIO3 = 2,
RDC_PDAP_GPIO4 = 3,
RDC_PDAP_GPIO5 = 4,
RDC_PDAP_Reserved1 = 5,
RDC_PDAP_ANA_TSENSOR = 6,
RDC_PDAP_ANA_OSC = 7,
RDC_PDAP_WDOG1 = 8,
RDC_PDAP_WDOG2 = 9,
RDC_PDAP_WDOG3 = 10,
RDC_PDAP_Reserved2 = 11,
RDC_PDAP_SDMA2 = 12,
RDC_PDAP_GPT1 = 13,
RDC_PDAP_GPT2 = 14,
RDC_PDAP_GPT3 = 15,
RDC_PDAP_Reserved3 = 16,
RDC_PDAP_ROMCP = 17,
RDC_PDAP_LCDIF = 18,
RDC_PDAP_IOMUXC = 19,
RDC_PDAP_IOMUXC_GPR = 20,
RDC_PDAP_OCOTP_CTRL = 21,
RDC_PDAP_ANATOP_PLL = 22,
RDC_PDAP_SNVS_HP = 23,
RDC_PDAP_CCM = 24,
RDC_PDAP_SRC = 25,
RDC_PDAP_GPC = 26,
RDC_PDAP_SEMAPHORE1 = 27,
RDC_PDAP_SEMAPHORE2 = 28,
RDC_PDAP_RDC = 29,
RDC_PDAP_CSU = 30,
RDC_PDAP_Reserved4 = 31,
RDC_PDAP_MST0 = 32,
RDC_PDAP_MST1 = 33,
RDC_PDAP_MST2 = 34,
RDC_PDAP_MST3 = 35,
RDC_PDAP_HDMI_SEC = 36,
RDC_PDAP_Reserved5 = 37,
RDC_PDAP_PWM1 = 38,
RDC_PDAP_PWM2 = 39,
RDC_PDAP_PWM3 = 40,
RDC_PDAP_PWM4 = 41,
RDC_PDAP_SysCounter_RD = 42,
RDC_PDAP_SysCounter_CMP = 43,
RDC_PDAP_SysCounter_CTRL = 44,
RDC_PDAP_HDMI_CTRL = 45,
RDC_PDAP_GPT6 = 46,
RDC_PDAP_GPT5 = 47,
RDC_PDAP_GPT4 = 48,
RDC_PDAP_TZASC = 56,
RDC_PDAP_MTR = 59,
RDC_PDAP_PERFMON1 = 60,
RDC_PDAP_PERFMON2 = 61,
RDC_PDAP_PLATFORM_CTRL = 62,
RDC_PDAP_QoSC = 63,
RDC_PDAP_MIPI_PHY = 64,
RDC_PDAP_MIPI_DSI = 65,
RDC_PDAP_I2C1 = 66,
RDC_PDAP_I2C2 = 67,
RDC_PDAP_I2C3 = 68,
RDC_PDAP_I2C4 = 69,
RDC_PDAP_UART4 = 70,
RDC_PDAP_MIPI_CSI1 = 71,
RDC_PDAP_MIPI_CSI_PHY1 = 72,
RDC_PDAP_CSI1 = 73,
RDC_PDAP_MU_A = 74,
RDC_PDAP_MU_B = 75,
RDC_PDAP_SEMAPHORE_HS = 76,
RDC_PDAP_Reserved6 = 77,
RDC_PDAP_SAI1 = 78,
RDC_PDAP_Reserved7 = 79,
RDC_PDAP_SAI6 = 80,
RDC_PDAP_SAI5 = 81,
RDC_PDAP_SAI4 = 82,
RDC_PDAP_Reserved8 = 83,
RDC_PDAP_USDHC1 = 84,
RDC_PDAP_USDHC2 = 85,
RDC_PDAP_MIPI_CSI2 = 86,
RDC_PDAP_MIPI_CSI_PHY2 = 87,
RDC_PDAP_CSI2 = 88,
RDC_PDAP_Reserved9 = 89,
RDC_PDAP_Reserved10 = 90,
RDC_PDAP_QSPI = 91,
RDC_PDAP_Reserved11 = 92,
RDC_PDAP_SDMA1 = 93,
RDC_PDAP_ENET1 = 94,
RDC_PDAP_Reserved12 = 95,
RDC_PDAP_Reserved13 = 96,
RDC_PDAP_SPDIF1 = 97,
RDC_PDAP_ECSPI1 = 98,
RDC_PDAP_ECSPI2 = 99,
RDC_PDAP_ECSPI3 = 100,
RDC_PDAP_Reserved14 = 101,
RDC_PDAP_UART1 = 102,
RDC_PDAP_Reserved15 = 103,
RDC_PDAP_UART3 = 104,
RDC_PDAP_UART2 = 105,
RDC_PDAP_SPDIF2 = 106,
RDC_PDAP_SAI2 = 107,
RDC_PDAP_SAI3 = 108,
RDC_PDAP_Reserved16 = 109,
RDC_PDAP_Reserved17 = 110,
RDC_PDAP_SPBA1 = 111,
RDC_PDAP_CAAM = 114,
RDC_PDAP_DDRC_SEC = 115,
RDC_PDAP_GIC_EXSC = 116,
RDC_PDAP_USB_EXSC = 117,
RDC_PDAP_OCRAM_TZ = 118,
RDC_PDAP_OCRAM_S_TZ = 119,
RDC_PDAP_VPU_SEC = 120,
RDC_PDAP_DAP_EXSC = 121,
RDC_PDAP_ROMCP_SEC = 122,
RDC_PDAP_APBHDMA_SEC = 123,
RDC_PDAP_M4_SEC = 124,
RDC_PDAP_QSPI_SEC = 125,
RDC_PDAP_GPU_EXSC = 126,
RDC_PDAP_PCIE = 127,
};
/* RDC registers mapping */
struct imx_rdc_regs {
uint32_t vir; /* Version information */
uint32_t reserved1[8];
uint32_t stat; /* Status */
uint32_t intctrl; /* Interrupt and Control */
uint32_t intstat; /* Interrupt Status */
uint32_t reserved2[116];
uint32_t mda[27]; /* Master Domain Assignment */
uint32_t reserved3[101];
uint32_t pdap[118]; /* Peripheral Domain Access Permissions */
uint32_t reserved4[138];
struct {
uint32_t mrsa; /* Memory Region Start Address */
uint32_t mrea; /* Memory Region End Address */
uint32_t mrc; /* Memory Region Control */
uint32_t mrvs; /* Memory Region Violation Status */
} mem_region[52];
};
struct rdc_pdap_conf {
enum rdc_pdap_idx index; /* Peripheral index */
uint8_t domains; /* Assigned domains */
uint8_t lock; /* Lock */
};
struct rdc_mda_conf {
enum rdc_mda_idx index; /* Master index */
uint8_t domain; /* Assigned domain */
uint8_t lock; /* Lock */
};
#define RDC_MDA_DID_SHIFT 0
#define RDC_MDA_DID_MASK (0x3 << RDC_MDA_DID_SHIFT)
#define RDC_MDA_LCK_SHIFT 31
#define RDC_MDA_LCK_MASK (0x1 << RDC_MDA_LCK_SHIFT)
#define RDC_PDAP_DW_SHIFT(domain) ((domain) << 1)
#define RDC_PDAP_DR_SHIFT(domain) (1 + RDC_PDAP_DW_SHIFT(domain))
#define RDC_PDAP_DW_MASK(domain) (1 << RDC_PDAP_DW_SHIFT(domain))
#define RDC_PDAP_DR_MASK(domain) (1 << RDC_PDAP_DR_SHIFT(domain))
#define RDC_PDAP_DRW_MASK(domain) (RDC_PDAP_DW_MASK(domain) | \
RDC_PDAP_DR_MASK(domain))
#define RDC_PDAP_SREQ_SHIFT 30
#define RDC_PDAP_SREQ_MASK (0x1 << RDC_PDAP_SREQ_SHIFT)
#define RDC_PDAP_LCK_SHIFT 31
#define RDC_PDAP_LCK_MASK (0x1 << RDC_PDAP_LCK_SHIFT)
int imx_rdc_get_pdap(struct rdc_pdap_conf *p);
int imx_rdc_set_pdap(struct rdc_pdap_conf *p);
int imx_rdc_set_peripherals(struct rdc_pdap_conf *peripheral_list,
uint32_t count);
void imx_rdc_set_peripherals_default(void);
int imx_rdc_get_mda(struct rdc_mda_conf *p);
int imx_rdc_set_mda(struct rdc_mda_conf *p);
int imx_rdc_set_masters(struct rdc_mda_conf *masters_list, uint32_t count);
void imx_rdc_set_masters_default(void);
#if defined (CSU_RDC_TEST)
void rdc_test(void);
#endif
#endif /* __IMX_RDC_H__*/