[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[PULL 1/5] riscv/virt: Add syscon reboot and poweroff DT nodes
From: |
Palmer Dabbelt |
Subject: |
[PULL 1/5] riscv/virt: Add syscon reboot and poweroff DT nodes |
Date: |
Wed, 12 Feb 2020 09:29:17 -0800 |
From: Anup Patel <address@hidden>
The SiFive test device found on virt machine can be used by
generic syscon reboot and poweroff drivers available in Linux
kernel.
This patch updates FDT generation in virt machine so that
Linux kernel can probe and use generic syscon drivers.
Signed-off-by: Anup Patel <address@hidden>
Reviewed-by: Palmer Dabbelt <address@hidden>
Signed-off-by: Palmer Dabbelt <address@hidden>
---
hw/riscv/virt.c | 26 ++++++++++++++++++++++----
1 file changed, 22 insertions(+), 4 deletions(-)
diff --git a/hw/riscv/virt.c b/hw/riscv/virt.c
index c44b865959..6d682f8a78 100644
--- a/hw/riscv/virt.c
+++ b/hw/riscv/virt.c
@@ -182,11 +182,10 @@ static void create_fdt(RISCVVirtState *s, const struct
MemmapEntry *memmap,
uint64_t mem_size, const char *cmdline)
{
void *fdt;
- int cpu;
+ int cpu, i;
uint32_t *cells;
char *nodename;
- uint32_t plic_phandle, phandle = 1;
- int i;
+ uint32_t plic_phandle, test_phandle, phandle = 1;
hwaddr flashsize = virt_memmap[VIRT_FLASH].size / 2;
hwaddr flashbase = virt_memmap[VIRT_FLASH].base;
@@ -356,16 +355,35 @@ static void create_fdt(RISCVVirtState *s, const struct
MemmapEntry *memmap,
create_pcie_irq_map(fdt, nodename, plic_phandle);
g_free(nodename);
+ test_phandle = phandle++;
nodename = g_strdup_printf("/test@%lx",
(long)memmap[VIRT_TEST].base);
qemu_fdt_add_subnode(fdt, nodename);
{
- const char compat[] = "sifive,test1\0sifive,test0";
+ const char compat[] = "sifive,test1\0sifive,test0\0syscon";
qemu_fdt_setprop(fdt, nodename, "compatible", compat, sizeof(compat));
}
qemu_fdt_setprop_cells(fdt, nodename, "reg",
0x0, memmap[VIRT_TEST].base,
0x0, memmap[VIRT_TEST].size);
+ qemu_fdt_setprop_cell(fdt, nodename, "phandle", test_phandle);
+ test_phandle = qemu_fdt_get_phandle(fdt, nodename);
+ g_free(nodename);
+
+ nodename = g_strdup_printf("/reboot");
+ qemu_fdt_add_subnode(fdt, nodename);
+ qemu_fdt_setprop_string(fdt, nodename, "compatible", "syscon-reboot");
+ qemu_fdt_setprop_cell(fdt, nodename, "regmap", test_phandle);
+ qemu_fdt_setprop_cell(fdt, nodename, "offset", 0x0);
+ qemu_fdt_setprop_cell(fdt, nodename, "value", FINISHER_RESET);
+ g_free(nodename);
+
+ nodename = g_strdup_printf("/poweroff");
+ qemu_fdt_add_subnode(fdt, nodename);
+ qemu_fdt_setprop_string(fdt, nodename, "compatible", "syscon-poweroff");
+ qemu_fdt_setprop_cell(fdt, nodename, "regmap", test_phandle);
+ qemu_fdt_setprop_cell(fdt, nodename, "offset", 0x0);
+ qemu_fdt_setprop_cell(fdt, nodename, "value", FINISHER_PASS);
g_free(nodename);
nodename = g_strdup_printf("/uart@%lx",
--
2.25.0.225.g125e21ebc7-goog
- [PULL] RISC-V Patches for the 5.0 Soft Freeze, Part 2, Palmer Dabbelt, 2020/02/12
- [PULL 2/5] riscv: Separate FPU register size from core register size in gdbstub [v2], Palmer Dabbelt, 2020/02/12
- [PULL 1/5] riscv/virt: Add syscon reboot and poweroff DT nodes,
Palmer Dabbelt <=
- [PULL 4/5] riscv: virt: Use Goldfish RTC device, Palmer Dabbelt, 2020/02/12
- [PULL 3/5] hw: rtc: Add Goldfish RTC device, Palmer Dabbelt, 2020/02/12
- [PULL 5/5] MAINTAINERS: Add maintainer entry for Goldfish RTC, Palmer Dabbelt, 2020/02/12
- Re: [PULL] RISC-V Patches for the 5.0 Soft Freeze, Part 2, Bin Meng, 2020/02/13
- Re: [PULL] RISC-V Patches for the 5.0 Soft Freeze, Part 2, Peter Maydell, 2020/02/16