xref: /openbmc/u-boot/arch/arm/include/asm/mach-imx/rdc-sema.h (revision 83d290c56fab2d38cd1ab4c4cc7099559c1d5046)
1*83d290c5STom Rini /* SPDX-License-Identifier: GPL-2.0+ */
2552a848eSStefano Babic /*
3552a848eSStefano Babic  * Copyright (C) 2016 Freescale Semiconductor, Inc.
4552a848eSStefano Babic  */
5552a848eSStefano Babic 
6552a848eSStefano Babic #ifndef __RDC_SEMA_H__
7552a848eSStefano Babic #define __RDC_SEMA_H__
8552a848eSStefano Babic 
9552a848eSStefano Babic /*
10552a848eSStefano Babic  * rdc_peri_cfg_t and rdc_ma_cft_t use the same layout.
11552a848eSStefano Babic  *
12552a848eSStefano Babic  *   [ 23 22 | 21 20 | 19 18 | 17 16 ] | [ 15 - 8 ] | [ 7 - 0 ]
13552a848eSStefano Babic  *      d3      d2      d1       d0    | master id  |  peri id
14552a848eSStefano Babic  *   d[x] means domain[x], x can be [3 - 0].
15552a848eSStefano Babic  */
16552a848eSStefano Babic typedef u32 rdc_peri_cfg_t;
17552a848eSStefano Babic typedef u32 rdc_ma_cfg_t;
18552a848eSStefano Babic 
19552a848eSStefano Babic #define RDC_PERI_SHIFT		0
20552a848eSStefano Babic #define RDC_PERI_MASK		0xFF
21552a848eSStefano Babic 
22552a848eSStefano Babic #define RDC_DOMAIN_SHIFT_BASE	16
23552a848eSStefano Babic #define RDC_DOMAIN_MASK		0xFF0000
24552a848eSStefano Babic #define RDC_DOMAIN_SHIFT(x)	(RDC_DOMAIN_SHIFT_BASE + ((x << 1)))
25552a848eSStefano Babic #define RDC_DOMAIN(x)		((rdc_peri_cfg_t)(0x3 << RDC_DOMAIN_SHIFT(x)))
26552a848eSStefano Babic 
27552a848eSStefano Babic #define RDC_MASTER_SHIFT	8
28552a848eSStefano Babic #define RDC_MASTER_MASK		0xFF00
29552a848eSStefano Babic #define RDC_MASTER_CFG(master_id, domain_id) (rdc_ma_cfg_t)((master_id << 8) | \
30552a848eSStefano Babic 					(domain_id << RDC_DOMAIN_SHIFT_BASE))
31552a848eSStefano Babic 
32552a848eSStefano Babic /* The Following macro definitions are common to i.MX6SX and i.MX7D */
33552a848eSStefano Babic #define SEMA_GATES_NUM		64
34552a848eSStefano Babic 
35552a848eSStefano Babic #define RDC_MDA_DID_SHIFT	0
36552a848eSStefano Babic #define RDC_MDA_DID_MASK	(0x3 << RDC_MDA_DID_SHIFT)
37552a848eSStefano Babic #define RDC_MDA_LCK_SHIFT	31
38552a848eSStefano Babic #define RDC_MDA_LCK_MASK	(0x1 << RDC_MDA_LCK_SHIFT)
39552a848eSStefano Babic 
40552a848eSStefano Babic #define RDC_PDAP_DW_SHIFT(domain)	((domain) << 1)
41552a848eSStefano Babic #define RDC_PDAP_DR_SHIFT(domain)	(1 + RDC_PDAP_DW_SHIFT(domain))
42552a848eSStefano Babic #define RDC_PDAP_DW_MASK(domain)	(1 << RDC_PDAP_DW_SHIFT(domain))
43552a848eSStefano Babic #define RDC_PDAP_DR_MASK(domain)	(1 << RDC_PDAP_DR_SHIFT(domain))
44552a848eSStefano Babic #define RDC_PDAP_DRW_MASK(domain)	(RDC_PDAP_DW_MASK(domain) | \
45552a848eSStefano Babic 					 RDC_PDAP_DR_MASK(domain))
46552a848eSStefano Babic 
47552a848eSStefano Babic #define RDC_PDAP_SREQ_SHIFT	30
48552a848eSStefano Babic #define RDC_PDAP_SREQ_MASK	(0x1 << RDC_PDAP_SREQ_SHIFT)
49552a848eSStefano Babic #define RDC_PDAP_LCK_SHIFT	31
50552a848eSStefano Babic #define RDC_PDAP_LCK_MASK	(0x1 << RDC_PDAP_LCK_SHIFT)
51552a848eSStefano Babic 
52552a848eSStefano Babic #define RDC_MRSA_SADR_SHIFT	7
53552a848eSStefano Babic #define RDC_MRSA_SADR_MASK	(0x1ffffff << RDC_MRSA_SADR_SHIFT)
54552a848eSStefano Babic 
55552a848eSStefano Babic #define RDC_MREA_EADR_SHIFT	7
56552a848eSStefano Babic #define RDC_MREA_EADR_MASK	(0x1ffffff << RDC_MREA_EADR_SHIFT)
57552a848eSStefano Babic 
58552a848eSStefano Babic #define RDC_MRC_DW_SHIFT(domain)	(domain)
59552a848eSStefano Babic #define RDC_MRC_DR_SHIFT(domain)	(1 + RDC_MRC_DW_SHIFT(domain))
60552a848eSStefano Babic #define RDC_MRC_DW_MASK(domain)		(1 << RDC_MRC_DW_SHIFT(domain))
61552a848eSStefano Babic #define RDC_MRC_DR_MASK(domain)		(1 << RDC_MRC_DR_SHIFT(domain))
62552a848eSStefano Babic #define RDC_MRC_DRW_MASK(domain)	(RDC_MRC_DW_MASK(domain) | \
63552a848eSStefano Babic 					 RDC_MRC_DR_MASK(domain))
64552a848eSStefano Babic #define RDC_MRC_ENA_SHIFT	30
65552a848eSStefano Babic #define RDC_MRC_ENA_MASK	(0x1 << RDC_MRC_ENA_SHIFT)
66552a848eSStefano Babic #define RDC_MRC_LCK_SHIFT	31
67552a848eSStefano Babic #define RDC_MRC_LCK_MASK	(0x1 << RDC_MRC_LCK_SHIFT)
68552a848eSStefano Babic 
69552a848eSStefano Babic #define RDC_MRVS_VDID_SHIFT	0
70552a848eSStefano Babic #define RDC_MRVS_VDID_MASK	(0x3 << RDC_MRVS_VDID_SHIFT)
71552a848eSStefano Babic #define RDC_MRVS_AD_SHIFT	4
72552a848eSStefano Babic #define RDC_MRVS_AD_MASK	(0x1 << RDC_MRVS_AD_SHIFT)
73552a848eSStefano Babic #define RDC_MRVS_VADDR_SHIFT	5
74552a848eSStefano Babic #define RDC_MRVS_VADDR_MASK	(0x7ffffff << RDC_MRVS_VADDR_SHIFT)
75552a848eSStefano Babic 
76552a848eSStefano Babic #define RDC_SEMA_GATE_GTFSM_SHIFT	0
77552a848eSStefano Babic #define RDC_SEMA_GATE_GTFSM_MASK	(0xf << RDC_SEMA_GATE_GTFSM_SHIFT)
78552a848eSStefano Babic #define RDC_SEMA_GATE_LDOM_SHIFT	5
79552a848eSStefano Babic #define RDC_SEMA_GATE_LDOM_MASK		(0x3 << RDC_SEMA_GATE_LDOM_SHIFT)
80552a848eSStefano Babic 
81552a848eSStefano Babic #define RDC_SEMA_RSTGT_RSTGDP_SHIFT	0
82552a848eSStefano Babic #define RDC_SEMA_RSTGT_RSTGDP_MASK	(0xff << RDC_SEMA_RSTGT_RSTGDP_SHIFT)
83552a848eSStefano Babic #define RDC_SEMA_RSTGT_RSTGSM_SHIFT	2
84552a848eSStefano Babic #define RDC_SEMA_RSTGT_RSTGSM_MASK	(0x3 << RDC_SEMA_RSTGT_RSTGSM_SHIFT)
85552a848eSStefano Babic #define RDC_SEMA_RSTGT_RSTGMS_SHIFT	4
86552a848eSStefano Babic #define RDC_SEMA_RSTGT_RSTGMS_MASK	(0xf << RDC_SEMA_RSTGT_RSTGMS_SHIFT)
87552a848eSStefano Babic #define RDC_SEMA_RSTGT_RSTGTN_SHIFT	8
88552a848eSStefano Babic #define RDC_SEMA_RSTGT_RSTGTN_MASK	(0xff << RDC_SEMA_RSTGT_RSTGTN_SHIFT)
89552a848eSStefano Babic 
90552a848eSStefano Babic int imx_rdc_check_permission(int per_id, int dom_id);
91552a848eSStefano Babic int imx_rdc_sema_lock(int per_id);
92552a848eSStefano Babic int imx_rdc_sema_unlock(int per_id);
93552a848eSStefano Babic int imx_rdc_setup_peri(rdc_peri_cfg_t p);
94552a848eSStefano Babic int imx_rdc_setup_peripherals(rdc_peri_cfg_t const *peripherals_list,
95552a848eSStefano Babic 			      unsigned count);
96552a848eSStefano Babic int imx_rdc_setup_ma(rdc_ma_cfg_t p);
97552a848eSStefano Babic int imx_rdc_setup_masters(rdc_ma_cfg_t const *masters_list, unsigned count);
98552a848eSStefano Babic 
99552a848eSStefano Babic #endif	/* __RDC_SEMA_H__*/
100