common/cnxk: add helpers for reading runplatform
Add helper functions that allow one to check platform ROC is running on. Platform type is retrieved from device tree attribute runplatform which is updated by EBF accordingly. Signed-off-by: Tomasz Duszynski <tduszynski@marvell.com> Reviewed-by: Jerin Jacob <jerinj@marvell.com>
This commit is contained in:
parent
3d1cd3a803
commit
b89f023e54
@ -178,6 +178,55 @@ detect_invalid_config(void)
|
||||
#endif
|
||||
}
|
||||
|
||||
static uint64_t
|
||||
env_lookup_flag(const char *name)
|
||||
{
|
||||
unsigned int i;
|
||||
struct {
|
||||
const char *name;
|
||||
uint64_t flag;
|
||||
} envs[] = {
|
||||
{"HW_PLATFORM", ROC_ENV_HW},
|
||||
{"EMUL_PLATFORM", ROC_ENV_EMUL},
|
||||
{"ASIM_PLATFORM", ROC_ENV_ASIM},
|
||||
};
|
||||
|
||||
for (i = 0; i < PLT_DIM(envs); i++)
|
||||
if (!strncmp(envs[i].name, name, strlen(envs[i].name)))
|
||||
return envs[i].flag;
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
static void
|
||||
of_env_get(struct roc_model *model)
|
||||
{
|
||||
const char *const path = "/proc/device-tree/soc@0/runplatform";
|
||||
uint64_t flag;
|
||||
FILE *fp;
|
||||
|
||||
fp = fopen(path, "r");
|
||||
if (!fp) {
|
||||
plt_err("Failed to open %s", path);
|
||||
return;
|
||||
}
|
||||
|
||||
if (!fgets(model->env, sizeof(model->env), fp)) {
|
||||
plt_err("Failed to read %s", path);
|
||||
goto err;
|
||||
}
|
||||
|
||||
flag = env_lookup_flag(model->env);
|
||||
if (flag == 0) {
|
||||
plt_err("Unknown platform: %s", model->env);
|
||||
goto err;
|
||||
}
|
||||
|
||||
model->flag |= flag;
|
||||
err:
|
||||
fclose(fp);
|
||||
}
|
||||
|
||||
int
|
||||
roc_model_init(struct roc_model *model)
|
||||
{
|
||||
@ -197,8 +246,10 @@ roc_model_init(struct roc_model *model)
|
||||
if (!populate_model(model, midr))
|
||||
goto err;
|
||||
|
||||
of_env_get(model);
|
||||
|
||||
rc = 0;
|
||||
plt_info("RoC Model: %s", model->name);
|
||||
plt_info("RoC Model: %s (%s)", model->name, model->env);
|
||||
roc_model = model;
|
||||
err:
|
||||
return rc;
|
||||
|
@ -23,10 +23,15 @@ struct roc_model {
|
||||
#define ROC_MODEL_CN106xx_A0 BIT_ULL(20)
|
||||
#define ROC_MODEL_CNF105xx_A0 BIT_ULL(21)
|
||||
#define ROC_MODEL_CNF105xxN_A0 BIT_ULL(22)
|
||||
/* Following flags describe platform code is running on */
|
||||
#define ROC_ENV_HW BIT_ULL(61)
|
||||
#define ROC_ENV_EMUL BIT_ULL(62)
|
||||
#define ROC_ENV_ASIM BIT_ULL(63)
|
||||
|
||||
uint64_t flag;
|
||||
#define ROC_MODEL_STR_LEN_MAX 128
|
||||
char name[ROC_MODEL_STR_LEN_MAX];
|
||||
char env[ROC_MODEL_STR_LEN_MAX];
|
||||
} __plt_cache_aligned;
|
||||
|
||||
#define ROC_MODEL_CN96xx_Ax (ROC_MODEL_CN96xx_A0 | ROC_MODEL_CN96xx_B0)
|
||||
@ -158,6 +163,30 @@ roc_model_is_cnf10kb_a0(void)
|
||||
return roc_model->flag & ROC_MODEL_CNF105xxN_A0;
|
||||
}
|
||||
|
||||
static inline bool
|
||||
roc_env_is_hw(void)
|
||||
{
|
||||
return roc_model->flag & ROC_ENV_HW;
|
||||
}
|
||||
|
||||
static inline bool
|
||||
roc_env_is_emulator(void)
|
||||
{
|
||||
return roc_model->flag & ROC_ENV_EMUL;
|
||||
}
|
||||
|
||||
static inline bool
|
||||
roc_env_is_asim(void)
|
||||
{
|
||||
return roc_model->flag & ROC_ENV_ASIM;
|
||||
}
|
||||
|
||||
static inline const char *
|
||||
roc_env_get(void)
|
||||
{
|
||||
return roc_model->env;
|
||||
}
|
||||
|
||||
int roc_model_init(struct roc_model *model);
|
||||
|
||||
#endif
|
||||
|
Loading…
Reference in New Issue
Block a user