riscv64: integrate minimal flattened devicetree reader and switch timer to time CSR
Punch list §25 item 0.3 NOT complete. - Added `starkernel/fdt.h` and `fdt.c` for minimal read-only devicetree parsing: sufficient for boot-time lookups such as `timebase-frequency`. - Bootloader now captures the devicetree blob (DTB) from `EFI_DTB_TABLE_GUID` into `BootInfo::dtb`. - RISC-V timer subsystem now uses the `time` CSR as the primary timestamp source, abandoning the hardcoded `cycle` frequency assumption. - Timer rate is read from `timebase-frequency` in the DTB when accessible; otherwise, a fallback value is used with a RELATIVE trust level. - Integrated the SBI TIME extension for one-shot timer deadlines, ensuring re-arming occurs after each tick to avoid missing heartbeats. Verified: riscv64 builds clean, boots to the ok> prompt with no regression; `riscv64/timer.c` reports accurate frequencies on QEMU's default firmware. Signed-off-by: Robert Allan James <robert.allan.james@gmail.com>
This commit is contained in:
@@ -383,6 +383,14 @@ typedef struct {
|
||||
static const EFI_GUID EFI_ACPI_20_TABLE_GUID = {0x8868e871,0xe4f1,0x11d3,{0xbc,0x22,0x00,0x80,0xc7,0x3c,0x88,0x81}};
|
||||
static const EFI_GUID EFI_ACPI_TABLE_GUID = {0xeb9d2d30,0x2d88,0x11d3,{0x9a,0x16,0x00,0x90,0x27,0x3f,0xc1,0x4d}};
|
||||
|
||||
/* Devicetree Blob GUID (UEFI 2.10 §4.6, "Devicetree Tables").
|
||||
* On QEMU virt for riscv64 and aarch64 the firmware publishes the FDT here;
|
||||
* it is the only route to timebase-frequency (riscv64, item 0.3) and to the
|
||||
* GIC base addresses and timer PPI (aarch64, item 0.6). */
|
||||
static const EFI_GUID EFI_DTB_TABLE_GUID = {
|
||||
0xb1b621d5, 0xf19c, 0x41a5, {0x83, 0x0b, 0xd9, 0x15, 0x2c, 0x69, 0xaa, 0xe0}
|
||||
};
|
||||
|
||||
/* Graphics Output Protocol */
|
||||
typedef enum {
|
||||
PixelRedGreenBlueReserved8BitPerColor,
|
||||
@@ -627,6 +635,11 @@ typedef struct {
|
||||
UINTN memory_map_descriptor_size;
|
||||
EFI_RUNTIME_SERVICES *runtime_services;
|
||||
void *acpi_table;
|
||||
/* Devicetree blob, located by EFI_DTB_TABLE_GUID in the configuration
|
||||
* table; NULL when the firmware publishes none (amd64 typically, and any
|
||||
* platform that is ACPI-only). Consumers must handle NULL rather than
|
||||
* assume presence. */
|
||||
void* dtb;
|
||||
FramebufferInfo framebuffer;
|
||||
UINT8 uefi_boot_services_exited;
|
||||
|
||||
|
||||
Reference in New Issue
Block a user