xref: /rk3399_ARM-atf/plat/imx/imx8m/include/imx_rdc.h (revision 97600cb586af32ddbe164aca61a0c6a61e115bbe)
13d660799SJacky Bai /*
23d660799SJacky Bai  * Copyright (c) 2019, NXP. All rights reserved.
33d660799SJacky Bai  *
43d660799SJacky Bai  * SPDX-License-Identifier: BSD-3-Clause
53d660799SJacky Bai  */
63d660799SJacky Bai 
73d660799SJacky Bai #ifndef IMX_RDC_H
83d660799SJacky Bai #define IMX_RDC_H
93d660799SJacky Bai 
103d660799SJacky Bai #include <lib/utils_def.h>
113d660799SJacky Bai 
123d660799SJacky Bai #include <platform_def.h>
133d660799SJacky Bai 
143d660799SJacky Bai #define MDAn(x)		(IMX_RDC_BASE + 0x200 + (x) * 4)
153d660799SJacky Bai #define PDAPn(x)	(IMX_RDC_BASE + 0x400 + (x) * 4)
16*97600cb5SJacky Bai #define MRSAn(x)	(IMX_RDC_BASE + 0x800 + (x) * 0x10)
17*97600cb5SJacky Bai #define MREAn(x)	(IMX_RDC_BASE + 0x804 + (x) * 0x10)
18*97600cb5SJacky Bai #define MRCn(x)		(IMX_RDC_BASE + 0x808 + (x) * 0x10)
193d660799SJacky Bai 
203d660799SJacky Bai #define LCK		BIT(31)
213d660799SJacky Bai #define SREQ		BIT(30)
223d660799SJacky Bai #define ENA		BIT(30)
233d660799SJacky Bai 
243d660799SJacky Bai #define DID0		U(0x0)
253d660799SJacky Bai #define DID1		U(0x1)
263d660799SJacky Bai #define DID2		U(0x2)
273d660799SJacky Bai #define DID3		U(0x3)
283d660799SJacky Bai 
293d660799SJacky Bai #define D3R		BIT(7)
303d660799SJacky Bai #define D3W		BIT(6)
313d660799SJacky Bai #define D2R		BIT(5)
323d660799SJacky Bai #define D2W		BIT(4)
333d660799SJacky Bai #define D1R		BIT(3)
343d660799SJacky Bai #define D1W		BIT(2)
353d660799SJacky Bai #define D0R		BIT(1)
363d660799SJacky Bai #define D0W		BIT(0)
373d660799SJacky Bai 
383d660799SJacky Bai union rdc_setting {
393d660799SJacky Bai 	uint32_t rdc_mda; /* Master Domain Assignment */
403d660799SJacky Bai 	uint32_t rdc_pdap; /* Peripheral Domain Access Permissions */
413d660799SJacky Bai 	uint32_t rdc_mem_region[3]; /* Memory Region Access Control */
423d660799SJacky Bai };
433d660799SJacky Bai 
443d660799SJacky Bai enum rdc_type {
453d660799SJacky Bai 	RDC_INVALID,
463d660799SJacky Bai 	RDC_MDA,
473d660799SJacky Bai 	RDC_PDAP,
483d660799SJacky Bai 	RDC_MEM_REGION,
493d660799SJacky Bai };
503d660799SJacky Bai 
513d660799SJacky Bai struct imx_rdc_cfg {
523d660799SJacky Bai 	enum rdc_type type; /* config type Master, Peripheral or Memory region */
533d660799SJacky Bai 	int index;
543d660799SJacky Bai 	union rdc_setting setting;
553d660799SJacky Bai };
563d660799SJacky Bai 
573d660799SJacky Bai #define RDC_MDAn(i, mda)	\
583d660799SJacky Bai 	{RDC_MDA, (i), .setting.rdc_mda = (mda), }
593d660799SJacky Bai #define RDC_PDAPn(i, pdap)	\
603d660799SJacky Bai 	{RDC_PDAP, (i), .setting.rdc_pdap = (pdap), }
613d660799SJacky Bai 
623d660799SJacky Bai #define RDC_MEM_REGIONn(i, msa, mea, mrc)	\
633d660799SJacky Bai 	{ RDC_MEM_REGION, (i), 			\
643d660799SJacky Bai 	  .setting.rdc_mem_region[0] = (msa),	\
653d660799SJacky Bai 	  .setting.rdc_mem_region[1] = (mea),	\
663d660799SJacky Bai 	  .setting.rdc_mem_region[2] = (mrc),	\
673d660799SJacky Bai 	}
683d660799SJacky Bai 
693d660799SJacky Bai void imx_rdc_init(const struct imx_rdc_cfg *cfg);
703d660799SJacky Bai 
713d660799SJacky Bai #endif /* IMX_RDC_H */
723d660799SJacky Bai 
73