diff options
| author | Arthur Hanson Rasmusson <arthur@vgpu.io> | 2026-09-13 19:28:03 -0400 |
|---|---|---|
| committer | Arthur Hanson Rasmusson <arthur@vgpu.io> | 2026-09-13 19:28:03 -0400 |
| commit | bfd269ee74d166be4f386640f8b5daad31d5d6ed (patch) | |
| tree | 82da0efeeea759d44605ff69b0f20c8f248623e2 /config | |
| parent | 7adef330df18691acabda9f5c988742f23a2917d (diff) | |
| download | open-iov-bfd269ee74d166be4f386640f8b5daad31d5d6ed.tar.gz open-iov-bfd269ee74d166be4f386640f8b5daad31d5d6ed.zip | |
Phase 4: Portable Architecture Implementation
- Firmware Analyzer: Runtime firmware signature computation (CRC32, SHA256) and pattern-based RPC handler address discovery
- Dynamic RPC Dispatcher: Version-aware dispatch with native firmware handlers (550/560/570/580) and emulation fallback
- Hardware Architecture Layer: Turing, Ampere, Blackwell configs with BAR layouts, doorbell offsets, MSI-X vectors
- Driver Version Adaptation Layer: Feature detection per driver version
- Declarative YAML configs for hardware (turing/ampere/blackwell) and versions (550/560/570/580)
- Kernel unit tests for GSP emulation (gsp_emulation_test.c)
- Test infrastructure scripts (test_gsp_emu.sh, test_guest_driver.sh, test_cuda_workloads.sh, test_graphics_workloads.sh, test_windows_guest.sh, test_vgpu_stack.sh)
- Updated kernel Makefile with new source files
Diffstat (limited to 'config')
| -rw-r--r-- | config/hardware/ampere.yaml | 104 | ||||
| -rw-r--r-- | config/hardware/blackwell.yaml | 56 | ||||
| -rw-r--r-- | config/hardware/turing.yaml | 70 | ||||
| -rw-r--r-- | config/versions/550.yaml | 31 | ||||
| -rw-r--r-- | config/versions/560.yaml | 31 | ||||
| -rw-r--r-- | config/versions/570.yaml | 31 | ||||
| -rw-r--r-- | config/versions/580.yaml | 31 |
7 files changed, 354 insertions, 0 deletions
diff --git a/config/hardware/ampere.yaml b/config/hardware/ampere.yaml new file mode 100644 index 0000000..f2439f8 --- /dev/null +++ b/config/hardware/ampere.yaml @@ -0,0 +1,104 @@ +# Ampere Architecture Configuration (GA100, GA102, GA104) +architecture: + name: "ampere" + description: "NVIDIA Ampere architecture (RTX 30-series, A100, A30, A10)" + pci_vendor_id: 0x10DE + pci_device_ids: + - 0x20B0 # GA100 + - 0x20B1 + - 0x20B2 + - 0x20B3 + - 0x20B4 + - 0x20B5 + - 0x20B6 + - 0x20B7 + - 0x20B8 + - 0x20B9 + - 0x20BA + - 0x20BB + - 0x20BC + - 0x20BD + - 0x20BE + - 0x20BF + - 0x20C0 # GA102 + - 0x20C1 + - 0x20C2 + - 0x20C3 + - 0x20C4 + - 0x20C5 + - 0x20C6 + - 0x20C7 + - 0x20C8 + - 0x20C9 + - 0x20CA + - 0x20CB + - 0x20CC + - 0x20CD + - 0x20CE + - 0x20CF + - 0x20D0 # GA104 + - 0x20D1 + - 0x20D2 + - 0x20D3 + - 0x20D4 + - 0x20D5 + - 0x20D6 + - 0x20D7 + - 0x20D8 + - 0x20D9 + - 0x20DA + - 0x20DB + - 0x20DC + - 0x20DD + - 0x20DE + - 0x20DF + - 0x20E0 + - 0x20E1 + - 0x20E2 + - 0x20E3 + - 0x20E4 + - 0x20E5 + - 0x20E6 + - 0x20E7 + - 0x20E8 + - 0x20E9 + - 0x20EA + - 0x20EB + - 0x20EC + - 0x20ED + - 0x20EE + - 0x20EF + bar_layout: + bar0: + size_mb: 16 + type: "config" + description: "Control registers, doorbell, shared memory" + bar1: + size_mb: 512 + type: "vram" + description: "VRAM aperture" + bar2: + size_mb: 32 + type: "reserved" + description: "Reserved" + bar3: + size_mb: 32 + type: "reserved" + description: "Reserved" + gsp: + doorbell_offset: 0x110C00 + shared_mem_offset: 0x1000 + shared_mem_size_kb: 4 + firmware_version: "570.144W" + msix: + table_offset: 0x2000 + pba_offset: 0x3000 + vectors: 32 + limits: + max_vfs: 16 + vram_size_gb: 80 + page_size_kb: 4 + features: + mig: true + sriov: true + vgpu: true
\ No newline at end of file diff --git a/config/hardware/blackwell.yaml b/config/hardware/blackwell.yaml new file mode 100644 index 0000000..f40809d --- /dev/null +++ b/config/hardware/blackwell.yaml @@ -0,0 +1,56 @@ +# Blackwell Architecture Configuration (GB100, GB202, GB203) +architecture: + name: "blackwell" + description: "NVIDIA Blackwell architecture (B200, B100, RTX 50-series)" + pci_vendor_id: 0x10DE + pci_device_ids: + - 0x2300 # GB100 + - 0x2301 + - 0x2302 + - 0x2303 + - 0x2304 + - 0x2305 + - 0x2306 + - 0x2307 + - 0x2308 + - 0x2309 + - 0x230A + - 0x230B + - 0x230C + - 0x230D + - 0x230E + - 0x230F + bar_layout: + bar0: + size_mb: 16 + type: "config" + description: "Control registers, doorbell, shared memory" + bar1: + size_mb: 512 + type: "vram" + description: "VRAM aperture" + bar2: + size_mb: 64 + type: "reserved" + description: "Reserved" + bar3: + size_mb: 64 + type: "reserved" + description: "Reserved" + gsp: + doorbell_offset: 0x110C00 + shared_mem_offset: 0x1000 + shared_mem_size_kb: 4 + firmware_version: "580.XX" + msix: + table_offset: 0x2000 + pba_offset: 0x3000 + vectors: 64 + limits: + max_vfs: 32 + vram_size_gb: 192 + page_size_kb: 4 + features: + mig: true + sriov: true + vgpu: true
\ No newline at end of file diff --git a/config/hardware/turing.yaml b/config/hardware/turing.yaml new file mode 100644 index 0000000..1257ba3 --- /dev/null +++ b/config/hardware/turing.yaml @@ -0,0 +1,70 @@ +# Turing Architecture Configuration (TU102, TU104, TU106) +architecture: + name: "turing" + description: "NVIDIA Turing architecture (RTX 20-series, T4, Quadro RTX)" + pci_vendor_id: 0x10DE + pci_device_ids: + - 0x1E82 # TU102 + - 0x1E83 + - 0x1E84 + - 0x1E85 + - 0x1E86 + - 0x1E87 + - 0x1E88 + - 0x1E89 + - 0x1E8A + - 0x1E8B + - 0x1E8C + - 0x1E8D + - 0x1E8E + - 0x1E8F + - 0x1ED0 # TU104 + - 0x1ED1 + - 0x1ED2 + - 0x1ED3 + - 0x1ED4 + - 0x1ED5 + - 0x1ED6 + - 0x1ED7 + - 0x1ED8 + - 0x1ED9 + - 0x1EDA + - 0x1EDB + - 0x1EDC + - 0x1EDD + - 0x1EDE + - 0x1EDF + bar_layout: + bar0: + size_mb: 16 + type: "config" + description: "Control registers, doorbell, shared memory" + bar1: + size_mb: 256 + type: "vram" + description: "VRAM aperture" + bar2: + size_mb: 32 + type: "reserved" + description: "Reserved" + bar3: + size_mb: 32 + type: "reserved" + description: "Reserved" + gsp: + doorbell_offset: 0x110C00 + shared_mem_offset: 0x1000 + shared_mem_size_kb: 4 + firmware_version: "570.144W" + msix: + table_offset: 0x2000 + pba_offset: 0x3000 + vectors: 32 + limits: + max_vfs: 8 + vram_size_gb: 16 + page_size_kb: 4 + features: + mig: false + sriov: true + vgpu: true
\ No newline at end of file diff --git a/config/versions/550.yaml b/config/versions/550.yaml new file mode 100644 index 0000000..696a2d6 --- /dev/null +++ b/config/versions/550.yaml @@ -0,0 +1,31 @@ +# NVIDIA Driver 550 Version Configuration +version: + name: "550" + major: 550 + minor: 0 + patch: 0 + description: "NVIDIA 550.x driver series" + kernel_module: "nvidia.ko" + firmware: + gsp_version: "550.XX" + path: "/lib/firmware/nvidia/tu102/gsp/" + features: + vgpu_vfio: true + migration: true + scheduling: true + notifications: true + wpr: true + mdev: true + interfaces: + vgpu_vfio_ops: "nvidia_vgpu_vfio_ops" + mdev_parent_ops: "nv_vgpu_mdev_parent_ops" + symbols: + - nvidia_vgpu_vfio_get_ops + - nvidia_vgpu_vfio_set_ops + - nv_vgpu_mdev_register_parent + - nv_vgpu_mdev_unregister_parent + - nv_vgpu_gsp_init + - nv_vgpu_gsp_cleanup + compat: + cuda_version: "12.0" + vulkan_version: "1.3"
\ No newline at end of file diff --git a/config/versions/560.yaml b/config/versions/560.yaml new file mode 100644 index 0000000..e949b00 --- /dev/null +++ b/config/versions/560.yaml @@ -0,0 +1,31 @@ +# NVIDIA Driver 560 Version Configuration +version: + name: "560" + major: 560 + minor: 0 + patch: 0 + description: "NVIDIA 560.x driver series" + kernel_module: "nvidia.ko" + firmware: + gsp_version: "560.XX" + path: "/lib/firmware/nvidia/tu102/gsp/" + features: + vgpu_vfio: true + migration: true + scheduling: true + notifications: true + wpr: true + mdev: true + interfaces: + vgpu_vfio_ops: "nvidia_vgpu_vfio_ops" + mdev_parent_ops: "nv_vgpu_mdev_parent_ops" + symbols: + - nvidia_vgpu_vfio_get_ops + - nvidia_vgpu_vfio_set_ops + - nv_vgpu_mdev_register_parent + - nv_vgpu_mdev_unregister_parent + - nv_vgpu_gsp_init + - nv_vgpu_gsp_cleanup + compat: + cuda_version: "12.2" + vulkan_version: "1.3"
\ No newline at end of file diff --git a/config/versions/570.yaml b/config/versions/570.yaml new file mode 100644 index 0000000..e9ebd0a --- /dev/null +++ b/config/versions/570.yaml @@ -0,0 +1,31 @@ +# NVIDIA Driver 570 Version Configuration +version: + name: "570" + major: 570 + minor: 144 + patch: 0 + description: "NVIDIA 570.144 driver series (OpenRM)" + kernel_module: "nvidia.ko" + firmware: + gsp_version: "570.144W" + path: "/lib/firmware/nvidia/tu102/gsp/" + features: + vgpu_vfio: true + migration: true + scheduling: true + notifications: true + wpr: true + mdev: true + interfaces: + vgpu_vfio_ops: "nvidia_vgpu_vfio_ops" + mdev_parent_ops: "nv_vgpu_mdev_parent_ops" + symbols: + - nvidia_vgpu_vfio_get_ops + - nvidia_vgpu_vfio_set_ops + - nv_vgpu_mdev_register_parent + - nv_vgpu_mdev_unregister_parent + - nv_vgpu_gsp_init + - nv_vgpu_gsp_cleanup + compat: + cuda_version: "12.4" + vulkan_version: "1.3"
\ No newline at end of file diff --git a/config/versions/580.yaml b/config/versions/580.yaml new file mode 100644 index 0000000..9fb8057 --- /dev/null +++ b/config/versions/580.yaml @@ -0,0 +1,31 @@ +# NVIDIA Driver 580 Version Configuration +version: + name: "580" + major: 580 + minor: 0 + patch: 0 + description: "NVIDIA 580.x driver series (future)" + kernel_module: "nvidia.ko" + firmware: + gsp_version: "580.XX" + path: "/lib/firmware/nvidia/gb100/gsp/" + features: + vgpu_vfio: true + migration: true + scheduling: true + notifications: true + wpr: true + mdev: true + interfaces: + vgpu_vfio_ops: "nvidia_vgpu_vfio_ops" + mdev_parent_ops: "nv_vgpu_mdev_parent_ops" + symbols: + - nvidia_vgpu_vfio_get_ops + - nvidia_vgpu_vfio_set_ops + - nv_vgpu_mdev_register_parent + - nv_vgpu_mdev_unregister_parent + - nv_vgpu_gsp_init + - nv_vgpu_gsp_cleanup + compat: + cuda_version: "12.6" + vulkan_version: "1.4"
\ No newline at end of file |
