blob: a982a8db9ad5fc61ca8e57d923675c67e33eacb0 (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
|
/*
* Arm SCP/MCP Software
* Copyright (c) 2018-2020, Arm Limited and Contributors. All rights reserved.
*
* SPDX-License-Identifier: BSD-3-Clause
*/
#include "low_level_access.h"
#include "synquacer_mmap.h"
#include <sysdef_option.h>
#include <internal/nic400.h>
#include <mod_synquacer_system.h>
#include <fwk_log.h>
#include <fwk_macros.h>
#include <inttypes.h>
#include <stdint.h>
#define NIC_TOP_ADDR_SEC_REG (0x00000008)
#define NIC_SEC_REG_OFFSET (0x04)
static void nic_sec_slave_security(
uint32_t nic_top_addr,
uint32_t slave_index,
uint32_t value)
{
FWK_LOG_INFO(
"%s addr 0x%08" PRIx32 " value 0x%08" PRIx32,
__func__,
(nic_top_addr + NIC_TOP_ADDR_SEC_REG +
NIC_SEC_REG_OFFSET * slave_index),
value);
writel(
(nic_top_addr + NIC_TOP_ADDR_SEC_REG +
NIC_SEC_REG_OFFSET * slave_index),
value);
}
void nic_secure_access_ctrl_init(void)
{
uint32_t n, m;
static const uint32_t nic_base_addr[] = CONFIG_SOC_NIC_ADDR_INFO;
static const uint32_t nic_config[][32] = CONFIG_SCB_NIC_INFO;
const uint32_t *config;
for (n = 0; n < FWK_ARRAY_SIZE(nic_base_addr); n++) {
for (m = 0; nic_config[n][m] != END_OF_NIC_LIST; m++) {
if (nic_config[n][m] == NIC_SETUP_SKIP)
continue;
nic_sec_slave_security(nic_base_addr[n], m, nic_config[n][m]);
}
}
config = sysdef_option_get_scbm_mv_nic_config();
for (n = 0; config[n] != END_OF_NIC_LIST; n++) {
if (config[n] == NIC_SETUP_SKIP)
continue;
nic_sec_slave_security(SCBM_MV_NIC, n, config[n]);
}
}
|