mirror of https://github.com/xemu-project/xemu.git
riscv: virt: Use Goldfish RTC device
We extend QEMU RISC-V virt machine by adding Goldfish RTC device to it. This will allow Guest Linux to sync it's local date/time with Host date/time via RTC device. Signed-off-by: Anup Patel <anup.patel@wdc.com> Reviewed-by: Palmer Dabbelt <palmer@sifive.com> Acked-by: Palmer Dabbelt <palmer@sifive.com> Reviewed-by: Alistair Francis <alistair.francis@wdc.com> Signed-off-by: Palmer Dabbelt <palmerdabbelt@google.com>
This commit is contained in:
parent
9a5b40b842
commit
67b5ef3049
|
@ -34,6 +34,7 @@ config RISCV_VIRT
|
|||
select PCI
|
||||
select HART
|
||||
select SERIAL
|
||||
select GOLDFISH_RTC
|
||||
select VIRTIO_MMIO
|
||||
select PCI_EXPRESS_GENERIC_BRIDGE
|
||||
select PFLASH_CFI01
|
||||
|
|
|
@ -58,6 +58,7 @@ static const struct MemmapEntry {
|
|||
[VIRT_DEBUG] = { 0x0, 0x100 },
|
||||
[VIRT_MROM] = { 0x1000, 0x11000 },
|
||||
[VIRT_TEST] = { 0x100000, 0x1000 },
|
||||
[VIRT_RTC] = { 0x101000, 0x1000 },
|
||||
[VIRT_CLINT] = { 0x2000000, 0x10000 },
|
||||
[VIRT_PLIC] = { 0xc000000, 0x4000000 },
|
||||
[VIRT_UART0] = { 0x10000000, 0x100 },
|
||||
|
@ -404,6 +405,18 @@ static void create_fdt(RISCVVirtState *s, const struct MemmapEntry *memmap,
|
|||
}
|
||||
g_free(nodename);
|
||||
|
||||
nodename = g_strdup_printf("/rtc@%lx",
|
||||
(long)memmap[VIRT_RTC].base);
|
||||
qemu_fdt_add_subnode(fdt, nodename);
|
||||
qemu_fdt_setprop_string(fdt, nodename, "compatible",
|
||||
"google,goldfish-rtc");
|
||||
qemu_fdt_setprop_cells(fdt, nodename, "reg",
|
||||
0x0, memmap[VIRT_RTC].base,
|
||||
0x0, memmap[VIRT_RTC].size);
|
||||
qemu_fdt_setprop_cell(fdt, nodename, "interrupt-parent", plic_phandle);
|
||||
qemu_fdt_setprop_cell(fdt, nodename, "interrupts", RTC_IRQ);
|
||||
g_free(nodename);
|
||||
|
||||
nodename = g_strdup_printf("/flash@%" PRIx64, flashbase);
|
||||
qemu_fdt_add_subnode(s->fdt, nodename);
|
||||
qemu_fdt_setprop_string(s->fdt, nodename, "compatible", "cfi-flash");
|
||||
|
@ -601,6 +614,9 @@ static void riscv_virt_board_init(MachineState *machine)
|
|||
0, qdev_get_gpio_in(DEVICE(s->plic), UART0_IRQ), 399193,
|
||||
serial_hd(0), DEVICE_LITTLE_ENDIAN);
|
||||
|
||||
sysbus_create_simple("goldfish_rtc", memmap[VIRT_RTC].base,
|
||||
qdev_get_gpio_in(DEVICE(s->plic), RTC_IRQ));
|
||||
|
||||
virt_flash_create(s);
|
||||
|
||||
for (i = 0; i < ARRAY_SIZE(s->flash); i++) {
|
||||
|
|
|
@ -44,6 +44,7 @@ enum {
|
|||
VIRT_DEBUG,
|
||||
VIRT_MROM,
|
||||
VIRT_TEST,
|
||||
VIRT_RTC,
|
||||
VIRT_CLINT,
|
||||
VIRT_PLIC,
|
||||
VIRT_UART0,
|
||||
|
@ -57,6 +58,7 @@ enum {
|
|||
|
||||
enum {
|
||||
UART0_IRQ = 10,
|
||||
RTC_IRQ = 11,
|
||||
VIRTIO_IRQ = 1, /* 1 to 8 */
|
||||
VIRTIO_COUNT = 8,
|
||||
PCIE_IRQ = 0x20, /* 32 to 35 */
|
||||
|
|
Loading…
Reference in New Issue