2 * Copyright (c) 2018, ARM Limited and Contributors. All rights reserved.
4 * SPDX-License-Identifier: BSD-3-Clause
10 #include "platform_def.h"
11 #include "soc_tzasc.h"
13 int tzc380_set_region(unsigned int tzasc_base
, unsigned int region_id
,
14 unsigned int enabled
, unsigned int low_addr
,
15 unsigned int high_addr
, unsigned int size
,
16 unsigned int security
, unsigned int subreg_disable_mask
)
19 unsigned int reg_base
;
20 unsigned int attr_value
;
22 reg_base
= (tzasc_base
+ TZASC_REGIONS_REG
+ (region_id
<< 4));
25 reg
= (reg_base
+ TZASC_REGION_ATTR_OFFSET
);
26 mmio_write_32((uintptr_t)reg
, ((security
& 0xF) << 28));
28 reg
= reg_base
+ TZASC_REGION_LOWADDR_OFFSET
;
29 mmio_write_32((uintptr_t)reg
,
30 (low_addr
& TZASC_REGION_LOWADDR_MASK
));
32 reg
= reg_base
+ TZASC_REGION_HIGHADDR_OFFSET
;
33 mmio_write_32((uintptr_t)reg
, high_addr
);
35 reg
= reg_base
+ TZASC_REGION_ATTR_OFFSET
;
36 attr_value
= ((security
& 0xF) << 28) |
37 ((subreg_disable_mask
& 0xFF) << 8) |
38 ((size
& 0x3F) << 1) | (enabled
& 0x1);
39 mmio_write_32((uintptr_t)reg
, attr_value
);
45 int tzc380_setup(void)
49 INFO("Configuring TZASC-380\n");
52 * Configure CCI control override register to terminate all barrier
55 mmio_write_32(PLAT_LS1043_CCI_BASE
, CCI_TERMINATE_BARRIER_TX
);
57 /* Configure CSU secure access register to disable TZASC bypass mux */
58 mmio_write_32((uintptr_t)(CONFIG_SYS_FSL_CSU_ADDR
+
59 CSU_SEC_ACCESS_REG_OFFSET
),
60 bswap32(TZASC_BYPASS_MUX_DISABLE
));
62 for (reg_id
= 0; reg_id
< MAX_NUM_TZC_REGION
; reg_id
++) {
63 tzc380_set_region(CONFIG_SYS_FSL_TZASC_ADDR
,
65 tzc380_reg_list
[reg_id
].enabled
,
66 tzc380_reg_list
[reg_id
].low_addr
,
67 tzc380_reg_list
[reg_id
].high_addr
,
68 tzc380_reg_list
[reg_id
].size
,
69 tzc380_reg_list
[reg_id
].secure
,
70 tzc380_reg_list
[reg_id
].sub_mask
);