On Thu, Mar 19, 2026 at 10:35 AM lixianglai <[email protected]> wrote: > > Hi huacai : > > Hi, Xianglai, > > > > On Thu, Mar 12, 2026 at 10:40 AM Xianglai Li <[email protected]> wrote: > >> Add the acpi table to the loongson rtc hardware so that the virtual machine > >> kernel can use the loongson RTC-related drivers. > >> > >> Delete the interrupt information in the rtc fdt table. > > Why not use virtio-rtc? In this way we don't need to modify the ls7a rtc > > driver. > Sorry for the late reply. > However, I did not find the device simulation model of virtio-rtc under > the hw/rtc directory. virtio-rtc was added to the Linux kernel some time ago, it is very new. But goldfish_rtc is another virtual rtc which is widely used and has a long time in QEMU, you can consider it.
> > But, there is a simulation model for the ls7a rtc device, which is > strongly related to > the virtualization of our loongarch platform. > > So it makes perfect sense to use the ls7a rtc here. Otherwise, no > platform would need to use the ls7a rtc, > and changing the simulation model of the rtc device at this stage, > our bios would also need to be modified accordingly. This would result > in a very high cost of modification. I don't strongly object to ls7a rtc, but if you use it please try your best to make it the same as real hardware. It is unacceptable to modify the kernel driver to adapt the virtual ls7a rtc. Huacai > > Thanks! > Xianglai. > > > Huacai > > > >> Signed-off-by: Xianglai Li <[email protected]> > >> --- > >> Cc: Song Gao <[email protected]> > >> Cc: Bibo Mao <[email protected]> > >> Cc: Jiaxun Yang <[email protected]> > >> > >> change: > >> V1->V2: > >> 1.Add a comment to explain why the acpi table no longer provides interrupt > >> numbers > >> 2.Delete the interrupt number from the rtc fdt table > >> > >> hw/loongarch/virt-acpi-build.c | 25 +++++++++++++++++++++++++ > >> hw/loongarch/virt-fdt-build.c | 16 ++++++++-------- > >> 2 files changed, 33 insertions(+), 8 deletions(-) > >> > >> diff --git a/hw/loongarch/virt-acpi-build.c > >> b/hw/loongarch/virt-acpi-build.c > >> index 3e34bedcd6..42820001d7 100644 > >> --- a/hw/loongarch/virt-acpi-build.c > >> +++ b/hw/loongarch/virt-acpi-build.c > >> @@ -460,6 +460,30 @@ static void acpi_dsdt_add_tpm(Aml *scope, > >> LoongArchVirtMachineState *vms) > >> } > >> #endif > >> > >> +static void acpi_dsdt_add_rtc(Aml *scope) > >> +{ > >> + Aml *dev = aml_device("RTC"); > >> + > >> + aml_append(dev, aml_name_decl("_HID", aml_string("LOON0001"))); > >> + aml_append(dev, aml_name_decl("_UID", aml_int(0))); > >> + > >> + Aml *crs = aml_resource_template(); > >> + aml_append(crs, > >> + aml_qword_memory(AML_POS_DECODE, AML_MIN_FIXED, AML_MAX_FIXED, > >> + AML_NON_CACHEABLE, AML_READ_WRITE, > >> + 0, VIRT_RTC_REG_BASE, > >> + VIRT_RTC_REG_BASE + VIRT_RTC_LEN - 1, > >> + 0, VIRT_RTC_LEN)); > >> + /* > >> + * The virtual machine model does not support suspend and wake-up, > >> + * and rtc is no longer the wake-up source. Therefore, the current > >> + * rtc table no longer provides the rtc alarm interrupt number to > >> + * avoid the software initializing alarm. > >> + */ > >> + aml_append(dev, aml_name_decl("_CRS", crs)); > >> + aml_append(scope, dev); > >> +} > >> + > >> /* build DSDT */ > >> static void > >> build_dsdt(GArray *table_data, BIOSLinker *linker, MachineState *machine) > >> @@ -475,6 +499,7 @@ build_dsdt(GArray *table_data, BIOSLinker *linker, > >> MachineState *machine) > >> for (i = 0; i < VIRT_UART_COUNT; i++) { > >> build_uart_device_aml(dsdt, i); > >> } > >> + acpi_dsdt_add_rtc(dsdt); > >> build_pci_device_aml(dsdt, lvms); > >> build_la_ged_aml(dsdt, machine); > >> build_flash_aml(dsdt, lvms); > >> diff --git a/hw/loongarch/virt-fdt-build.c b/hw/loongarch/virt-fdt-build.c > >> index 6c06b36fca..42f014a7bd 100644 > >> --- a/hw/loongarch/virt-fdt-build.c > >> +++ b/hw/loongarch/virt-fdt-build.c > >> @@ -458,8 +458,7 @@ static void > >> fdt_add_uart_node(LoongArchVirtMachineState *lvms, > >> g_free(nodename); > >> } > >> > >> -static void fdt_add_rtc_node(LoongArchVirtMachineState *lvms, > >> - uint32_t *pch_pic_phandle) > >> +static void fdt_add_rtc_node(LoongArchVirtMachineState *lvms) > >> { > >> char *nodename; > >> hwaddr base = VIRT_RTC_REG_BASE; > >> @@ -470,12 +469,13 @@ static void > >> fdt_add_rtc_node(LoongArchVirtMachineState *lvms, > >> qemu_fdt_add_subnode(ms->fdt, nodename); > >> qemu_fdt_setprop_string(ms->fdt, nodename, "compatible", > >> "loongson,ls7a-rtc"); > >> + /* > >> + * The virtual machine model does not support suspend and wake-up, > >> + * and rtc is no longer the wake-up source. Therefore, the current > >> + * rtc table no longer provides the rtc alarm interrupt number to > >> + * avoid the software initializing alarm. > >> + */ > >> qemu_fdt_setprop_sized_cells(ms->fdt, nodename, "reg", 2, base, 2, > >> size); > >> - qemu_fdt_setprop_cells(ms->fdt, nodename, "interrupts", > >> - VIRT_RTC_IRQ - VIRT_GSI_BASE , > >> - FDT_IRQ_TYPE_LEVEL_HIGH); > >> - qemu_fdt_setprop_cell(ms->fdt, nodename, "interrupt-parent", > >> - *pch_pic_phandle); > >> g_free(nodename); > >> } > >> > >> @@ -550,7 +550,7 @@ void virt_fdt_setup(LoongArchVirtMachineState *lvms) > >> fdt_add_uart_node(lvms, &pch_pic_phandle, base, irq, i == 0); > >> } > >> > >> - fdt_add_rtc_node(lvms, &pch_pic_phandle); > >> + fdt_add_rtc_node(lvms); > >> fdt_add_ged_reset(lvms); > >> platform_bus_add_all_fdt_nodes(machine->fdt, "/platic", > >> VIRT_PLATFORM_BUS_BASEADDRESS, > >> -- > >> 2.39.1 > >> > >> > > > -- Huacai Chen
