1 /* 2 * Copyright (c) 2019-2022 NXP. All rights reserved. 3 * 4 * SPDX-License-Identifier: BSD-3-Clause 5 */ 6 7 #ifndef IMX_RDC_H 8 #define IMX_RDC_H 9 10 #include <lib/utils_def.h> 11 12 #include <imx_sec_def.h> 13 #include <platform_def.h> 14 15 #define MDAn(x) (IMX_RDC_BASE + 0x200 + (x) * 4) 16 #define PDAPn(x) (IMX_RDC_BASE + 0x400 + (x) * 4) 17 #define MRSAn(x) (IMX_RDC_BASE + 0x800 + (x) * 0x10) 18 #define MREAn(x) (IMX_RDC_BASE + 0x804 + (x) * 0x10) 19 #define MRCn(x) (IMX_RDC_BASE + 0x808 + (x) * 0x10) 20 21 #define LCK BIT(31) 22 #define SREQ BIT(30) 23 #define ENA BIT(30) 24 25 #define DID0 U(0x0) 26 #define DID1 U(0x1) 27 #define DID2 U(0x2) 28 #define DID3 U(0x3) 29 30 #define D3R BIT(7) 31 #define D3W BIT(6) 32 #define D2R BIT(5) 33 #define D2W BIT(4) 34 #define D1R BIT(3) 35 #define D1W BIT(2) 36 #define D0R BIT(1) 37 #define D0W BIT(0) 38 39 union rdc_setting { 40 uint32_t rdc_mda; /* Master Domain Assignment */ 41 uint32_t rdc_pdap; /* Peripheral Domain Access Permissions */ 42 uint32_t rdc_mem_region[3]; /* Memory Region Access Control */ 43 }; 44 45 enum rdc_type { 46 RDC_INVALID, 47 RDC_MDA, 48 RDC_PDAP, 49 RDC_MEM_REGION, 50 }; 51 52 struct imx_rdc_cfg { 53 enum rdc_type type; /* config type Master, Peripheral or Memory region */ 54 int index; 55 union rdc_setting setting; 56 }; 57 58 #define RDC_MDAn(i, mda) \ 59 {RDC_MDA, (i), .setting.rdc_mda = (mda), } 60 #define RDC_PDAPn(i, pdap) \ 61 {RDC_PDAP, (i), .setting.rdc_pdap = (pdap), } 62 63 #define RDC_MEM_REGIONn(i, msa, mea, mrc) \ 64 { RDC_MEM_REGION, (i), \ 65 .setting.rdc_mem_region[0] = (msa), \ 66 .setting.rdc_mem_region[1] = (mea), \ 67 .setting.rdc_mem_region[2] = (mrc), \ 68 } 69 70 void imx_rdc_init(const struct imx_rdc_cfg *cfg); 71 72 #endif /* IMX_RDC_H */ 73 74