hw/riscv: Support the official CLINT DT bindings
Linux kernel commit a2770b57d083 ("dt-bindings: timer: Add CLINT bindings") adds the official DT bindings for CLINT, which uses "sifive,clint0" as the compatible string. "riscv,clint0" is now legacy and has to be kept for backward compatibility of legacy systems. Signed-off-by: Bin Meng <bin.meng@windriver.com> Reviewed-by: Alistair Francis <alistair.francis@wdc.com> Message-id: 20210430071302.1489082-3-bmeng.cn@gmail.com Signed-off-by: Alistair Francis <alistair.francis@wdc.com>
This commit is contained in:
parent
2cc04550ac
commit
7cfbb17f02
@ -98,6 +98,9 @@ static void create_fdt(SiFiveUState *s, const MemMapEntry *memmap,
|
|||||||
uint32_t plic_phandle, prci_phandle, gpio_phandle, phandle = 1;
|
uint32_t plic_phandle, prci_phandle, gpio_phandle, phandle = 1;
|
||||||
uint32_t hfclk_phandle, rtcclk_phandle, phy_phandle;
|
uint32_t hfclk_phandle, rtcclk_phandle, phy_phandle;
|
||||||
static const char * const ethclk_names[2] = { "pclk", "hclk" };
|
static const char * const ethclk_names[2] = { "pclk", "hclk" };
|
||||||
|
static const char * const clint_compat[2] = {
|
||||||
|
"sifive,clint0", "riscv,clint0"
|
||||||
|
};
|
||||||
|
|
||||||
if (ms->dtb) {
|
if (ms->dtb) {
|
||||||
fdt = s->fdt = load_device_tree(ms->dtb, &s->fdt_size);
|
fdt = s->fdt = load_device_tree(ms->dtb, &s->fdt_size);
|
||||||
@ -209,7 +212,8 @@ static void create_fdt(SiFiveUState *s, const MemMapEntry *memmap,
|
|||||||
nodename = g_strdup_printf("/soc/clint@%lx",
|
nodename = g_strdup_printf("/soc/clint@%lx",
|
||||||
(long)memmap[SIFIVE_U_DEV_CLINT].base);
|
(long)memmap[SIFIVE_U_DEV_CLINT].base);
|
||||||
qemu_fdt_add_subnode(fdt, nodename);
|
qemu_fdt_add_subnode(fdt, nodename);
|
||||||
qemu_fdt_setprop_string(fdt, nodename, "compatible", "riscv,clint0");
|
qemu_fdt_setprop_string_array(fdt, nodename, "compatible",
|
||||||
|
(char **)&clint_compat, ARRAY_SIZE(clint_compat));
|
||||||
qemu_fdt_setprop_cells(fdt, nodename, "reg",
|
qemu_fdt_setprop_cells(fdt, nodename, "reg",
|
||||||
0x0, memmap[SIFIVE_U_DEV_CLINT].base,
|
0x0, memmap[SIFIVE_U_DEV_CLINT].base,
|
||||||
0x0, memmap[SIFIVE_U_DEV_CLINT].size);
|
0x0, memmap[SIFIVE_U_DEV_CLINT].size);
|
||||||
|
@ -59,6 +59,9 @@ static void create_fdt(SpikeState *s, const MemMapEntry *memmap,
|
|||||||
uint32_t cpu_phandle, intc_phandle, phandle = 1;
|
uint32_t cpu_phandle, intc_phandle, phandle = 1;
|
||||||
char *name, *mem_name, *clint_name, *clust_name;
|
char *name, *mem_name, *clint_name, *clust_name;
|
||||||
char *core_name, *cpu_name, *intc_name;
|
char *core_name, *cpu_name, *intc_name;
|
||||||
|
static const char * const clint_compat[2] = {
|
||||||
|
"sifive,clint0", "riscv,clint0"
|
||||||
|
};
|
||||||
|
|
||||||
fdt = s->fdt = create_device_tree(&s->fdt_size);
|
fdt = s->fdt = create_device_tree(&s->fdt_size);
|
||||||
if (!fdt) {
|
if (!fdt) {
|
||||||
@ -152,7 +155,8 @@ static void create_fdt(SpikeState *s, const MemMapEntry *memmap,
|
|||||||
(memmap[SPIKE_CLINT].size * socket);
|
(memmap[SPIKE_CLINT].size * socket);
|
||||||
clint_name = g_strdup_printf("/soc/clint@%lx", clint_addr);
|
clint_name = g_strdup_printf("/soc/clint@%lx", clint_addr);
|
||||||
qemu_fdt_add_subnode(fdt, clint_name);
|
qemu_fdt_add_subnode(fdt, clint_name);
|
||||||
qemu_fdt_setprop_string(fdt, clint_name, "compatible", "riscv,clint0");
|
qemu_fdt_setprop_string_array(fdt, clint_name, "compatible",
|
||||||
|
(char **)&clint_compat, ARRAY_SIZE(clint_compat));
|
||||||
qemu_fdt_setprop_cells(fdt, clint_name, "reg",
|
qemu_fdt_setprop_cells(fdt, clint_name, "reg",
|
||||||
0x0, clint_addr, 0x0, memmap[SPIKE_CLINT].size);
|
0x0, clint_addr, 0x0, memmap[SPIKE_CLINT].size);
|
||||||
qemu_fdt_setprop(fdt, clint_name, "interrupts-extended",
|
qemu_fdt_setprop(fdt, clint_name, "interrupts-extended",
|
||||||
|
@ -194,6 +194,9 @@ static void create_fdt(RISCVVirtState *s, const MemMapEntry *memmap,
|
|||||||
char *name, *clint_name, *plic_name, *clust_name;
|
char *name, *clint_name, *plic_name, *clust_name;
|
||||||
hwaddr flashsize = virt_memmap[VIRT_FLASH].size / 2;
|
hwaddr flashsize = virt_memmap[VIRT_FLASH].size / 2;
|
||||||
hwaddr flashbase = virt_memmap[VIRT_FLASH].base;
|
hwaddr flashbase = virt_memmap[VIRT_FLASH].base;
|
||||||
|
static const char * const clint_compat[2] = {
|
||||||
|
"sifive,clint0", "riscv,clint0"
|
||||||
|
};
|
||||||
|
|
||||||
if (mc->dtb) {
|
if (mc->dtb) {
|
||||||
fdt = mc->fdt = load_device_tree(mc->dtb, &s->fdt_size);
|
fdt = mc->fdt = load_device_tree(mc->dtb, &s->fdt_size);
|
||||||
@ -299,7 +302,8 @@ static void create_fdt(RISCVVirtState *s, const MemMapEntry *memmap,
|
|||||||
(memmap[VIRT_CLINT].size * socket);
|
(memmap[VIRT_CLINT].size * socket);
|
||||||
clint_name = g_strdup_printf("/soc/clint@%lx", clint_addr);
|
clint_name = g_strdup_printf("/soc/clint@%lx", clint_addr);
|
||||||
qemu_fdt_add_subnode(fdt, clint_name);
|
qemu_fdt_add_subnode(fdt, clint_name);
|
||||||
qemu_fdt_setprop_string(fdt, clint_name, "compatible", "riscv,clint0");
|
qemu_fdt_setprop_string_array(fdt, clint_name, "compatible",
|
||||||
|
(char **)&clint_compat, ARRAY_SIZE(clint_compat));
|
||||||
qemu_fdt_setprop_cells(fdt, clint_name, "reg",
|
qemu_fdt_setprop_cells(fdt, clint_name, "reg",
|
||||||
0x0, clint_addr, 0x0, memmap[VIRT_CLINT].size);
|
0x0, clint_addr, 0x0, memmap[VIRT_CLINT].size);
|
||||||
qemu_fdt_setprop(fdt, clint_name, "interrupts-extended",
|
qemu_fdt_setprop(fdt, clint_name, "interrupts-extended",
|
||||||
|
Loading…
Reference in New Issue
Block a user