mirror of https://gitee.com/openkylin/qemu.git
hw/arm/raspi: Introduce RaspiProcessorId enum
As we only support a reduced set of the REV_CODE_PROCESSOR id encoded in the board revision, define the PROCESSOR_ID values as an enum. We can simplify the board_soc_type and cores_count methods. Reviewed-by: Luc Michel <luc.michel@greensocs.com> Signed-off-by: Philippe Mathieu-Daudé <f4bug@amsat.org> Message-id: 20200924111808.77168-7-f4bug@amsat.org Signed-off-by: Peter Maydell <peter.maydell@linaro.org>
This commit is contained in:
parent
aa35ec2213
commit
696788d6a9
|
@ -69,16 +69,33 @@ FIELD(REV_CODE, MANUFACTURER, 16, 4);
|
||||||
FIELD(REV_CODE, MEMORY_SIZE, 20, 3);
|
FIELD(REV_CODE, MEMORY_SIZE, 20, 3);
|
||||||
FIELD(REV_CODE, STYLE, 23, 1);
|
FIELD(REV_CODE, STYLE, 23, 1);
|
||||||
|
|
||||||
|
typedef enum RaspiProcessorId {
|
||||||
|
PROCESSOR_ID_BCM2836 = 1,
|
||||||
|
PROCESSOR_ID_BCM2837 = 2,
|
||||||
|
} RaspiProcessorId;
|
||||||
|
|
||||||
|
static const struct {
|
||||||
|
const char *type;
|
||||||
|
int cores_count;
|
||||||
|
} soc_property[] = {
|
||||||
|
[PROCESSOR_ID_BCM2836] = {TYPE_BCM2836, BCM283X_NCPUS},
|
||||||
|
[PROCESSOR_ID_BCM2837] = {TYPE_BCM2837, BCM283X_NCPUS},
|
||||||
|
};
|
||||||
|
|
||||||
static uint64_t board_ram_size(uint32_t board_rev)
|
static uint64_t board_ram_size(uint32_t board_rev)
|
||||||
{
|
{
|
||||||
assert(FIELD_EX32(board_rev, REV_CODE, STYLE)); /* Only new style */
|
assert(FIELD_EX32(board_rev, REV_CODE, STYLE)); /* Only new style */
|
||||||
return 256 * MiB << FIELD_EX32(board_rev, REV_CODE, MEMORY_SIZE);
|
return 256 * MiB << FIELD_EX32(board_rev, REV_CODE, MEMORY_SIZE);
|
||||||
}
|
}
|
||||||
|
|
||||||
static int board_processor_id(uint32_t board_rev)
|
static RaspiProcessorId board_processor_id(uint32_t board_rev)
|
||||||
{
|
{
|
||||||
|
int proc_id = FIELD_EX32(board_rev, REV_CODE, PROCESSOR);
|
||||||
|
|
||||||
assert(FIELD_EX32(board_rev, REV_CODE, STYLE)); /* Only new style */
|
assert(FIELD_EX32(board_rev, REV_CODE, STYLE)); /* Only new style */
|
||||||
return FIELD_EX32(board_rev, REV_CODE, PROCESSOR);
|
assert(proc_id < ARRAY_SIZE(soc_property) && soc_property[proc_id].type);
|
||||||
|
|
||||||
|
return proc_id;
|
||||||
}
|
}
|
||||||
|
|
||||||
static int board_version(uint32_t board_rev)
|
static int board_version(uint32_t board_rev)
|
||||||
|
@ -88,32 +105,12 @@ static int board_version(uint32_t board_rev)
|
||||||
|
|
||||||
static const char *board_soc_type(uint32_t board_rev)
|
static const char *board_soc_type(uint32_t board_rev)
|
||||||
{
|
{
|
||||||
static const char *soc_types[] = {
|
return soc_property[board_processor_id(board_rev)].type;
|
||||||
NULL, TYPE_BCM2836, TYPE_BCM2837,
|
|
||||||
};
|
|
||||||
int proc_id = board_processor_id(board_rev);
|
|
||||||
|
|
||||||
if (proc_id >= ARRAY_SIZE(soc_types) || !soc_types[proc_id]) {
|
|
||||||
error_report("Unsupported processor id '%d' (board revision: 0x%x)",
|
|
||||||
proc_id, board_rev);
|
|
||||||
exit(1);
|
|
||||||
}
|
|
||||||
return soc_types[proc_id];
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static int cores_count(uint32_t board_rev)
|
static int cores_count(uint32_t board_rev)
|
||||||
{
|
{
|
||||||
static const int soc_cores_count[] = {
|
return soc_property[board_processor_id(board_rev)].cores_count;
|
||||||
0, BCM283X_NCPUS, BCM283X_NCPUS,
|
|
||||||
};
|
|
||||||
int proc_id = board_processor_id(board_rev);
|
|
||||||
|
|
||||||
if (proc_id >= ARRAY_SIZE(soc_cores_count) || !soc_cores_count[proc_id]) {
|
|
||||||
error_report("Unsupported processor id '%d' (board revision: 0x%x)",
|
|
||||||
proc_id, board_rev);
|
|
||||||
exit(1);
|
|
||||||
}
|
|
||||||
return soc_cores_count[proc_id];
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static const char *board_type(uint32_t board_rev)
|
static const char *board_type(uint32_t board_rev)
|
||||||
|
|
Loading…
Reference in New Issue