diff options
Diffstat (limited to 'product')
-rw-r--r-- | product/rdn1e1/scp_ramfw/config_ppu_v1.c | 14 | ||||
-rw-r--r-- | product/rdn1e1/src/config_sid.c | 21 | ||||
-rw-r--r-- | product/sgi575/module/sgi575_system/src/mod_sgi575_system.c | 5 |
3 files changed, 39 insertions, 1 deletions
diff --git a/product/rdn1e1/scp_ramfw/config_ppu_v1.c b/product/rdn1e1/scp_ramfw/config_ppu_v1.c index a6e791a0..ba30cddc 100644 --- a/product/rdn1e1/scp_ramfw/config_ppu_v1.c +++ b/product/rdn1e1/scp_ramfw/config_ppu_v1.c @@ -65,6 +65,7 @@ static const struct fwk_element *ppu_v1_get_element_table(fwk_id_t module_id) unsigned int core_count; unsigned int cluster_count; unsigned int core_element_count = 0; + unsigned int idx = 0; core_count = rdn1e1_core_get_core_count(); cluster_count = rdn1e1_core_get_cluster_count(); @@ -90,6 +91,7 @@ static const struct fwk_element *ppu_v1_get_element_table(fwk_id_t module_id) return NULL; for (cluster_idx = 0; cluster_idx < cluster_count; cluster_idx++) { + idx = 0; for (core_idx = 0; core_idx < rdn1e1_core_get_core_per_cluster_count(cluster_idx); core_idx++) { @@ -105,8 +107,18 @@ static const struct fwk_element *ppu_v1_get_element_table(fwk_id_t module_id) element->data = pd_config; + if (core_count == 32) { + // Increment PPU REG BASE for even core_idx + if ((core_idx != 0) && (core_idx % 2 == 0)) { + idx = core_idx; + idx = idx - (idx/2); + } + pd_config->ppu.reg_base = SCP_PPU_CORE_BASE(cluster_idx, idx); + } else { + pd_config->ppu.reg_base = SCP_PPU_CORE_BASE(cluster_idx, core_idx); + } + pd_config->pd_type = MOD_PD_TYPE_CORE; - pd_config->ppu.reg_base = SCP_PPU_CORE_BASE(cluster_idx, core_idx); pd_config->ppu.irq = FWK_INTERRUPT_NONE; pd_config->cluster_id = FWK_ID_ELEMENT(FWK_MODULE_IDX_PPU_V1, diff --git a/product/rdn1e1/src/config_sid.c b/product/rdn1e1/src/config_sid.c index 2e57223d..af33311a 100644 --- a/product/rdn1e1/src/config_sid.c +++ b/product/rdn1e1/src/config_sid.c @@ -10,6 +10,27 @@ #include <mod_sid.h> #include <scp_rdn1e1_mmap.h> +#define RDN1E1_CORE_PER_CLUSTER_MAX 16 +#define CORES_PER_CLUSTER_RDN1 4 +#define CORES_PER_CLUSTER_RDE1 16 +#define NUMBER_OF_CLUSTERS 2 +#define RDE1EDGE_CONFIG_NUM 2 + +unsigned int infra_get_core_count(void) +{ + int status; + const struct mod_sid_info *system_info; + + status = mod_sid_get_system_info(&system_info); + if (status != FWK_SUCCESS) + return status; + + if (system_info->config_number == RDE1EDGE_CONFIG_NUM) + return NUMBER_OF_CLUSTERS * CORES_PER_CLUSTER_RDE1; + else + return NUMBER_OF_CLUSTERS * CORES_PER_CLUSTER_RDN1; +} + static const struct fwk_element subsystem_table[] = { { .name = "RDN1E1", diff --git a/product/sgi575/module/sgi575_system/src/mod_sgi575_system.c b/product/sgi575/module/sgi575_system/src/mod_sgi575_system.c index be6ab856..950be080 100644 --- a/product/sgi575/module/sgi575_system/src/mod_sgi575_system.c +++ b/product/sgi575/module/sgi575_system/src/mod_sgi575_system.c @@ -72,6 +72,11 @@ static const uint32_t feature_flags = (SGI575_SDS_FEATURE_FIRMWARE_MASK | static fwk_id_t sds_feature_availability_id = FWK_ID_ELEMENT_INIT(FWK_MODULE_IDX_SDS, 4); +unsigned int infra_get_core_count(void) +{ + return SGI575_CLUSTERS_MAX * SGI575_CORES_PER_CLUSTER_MAX; +} + /* * SCMI Messaging stack */ |