aboutsummaryrefslogtreecommitdiff
path: root/product
diff options
context:
space:
mode:
Diffstat (limited to 'product')
-rw-r--r--product/rdn1e1/scp_ramfw/config_ppu_v1.c14
-rw-r--r--product/rdn1e1/src/config_sid.c21
-rw-r--r--product/sgi575/module/sgi575_system/src/mod_sgi575_system.c5
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
*/