summaryrefslogtreecommitdiffstats
Commit message (Collapse)AuthorAge
* gsp-phys: rm-call diagnostics (failed-reply payload, RM log dump) and the ↵Arthur Hanson Rasmusson11 days
| | | | static-config-handle ladder path
* gsp-phys: add the host RM-client ladder (gsp-phys-rm-call) for real object ↵Arthur Hanson Rasmusson11 days
| | | | allocation and a first real copy
* STATE-CURRENT: 16:47 check-back - ladder row updated for the GSP-RM init ↵Arthur Hanson Rasmusson11 days
| | | | milestone (log-ring and identity fixes)
* STATE-CURRENT: physical GSP-RM completes initialization and serves the ↵Arthur Hanson Rasmusson11 days
| | | | static-config RPC
* gsp-phys: register the RM log ring correctly, send raw config-space ↵Arthur Hanson Rasmusson11 days
| | | | | | | | | | | | | | | | | | | identity, and request the full static-config payload The RM log-ring init argument carried a malformed libos id (LOGM), so the server never mapped the ring and its early failure path was invisible. The pre-boot system-info payload carried unpacked 16-bit identity fields; the server expects the raw config-space dwords (device<<16|vendor), so its GPU device-id read back as zero and the static-config device-name lookup returned NOT_SUPPORTED. The static-config RPC must be sized to the full reply payload, and the guest-system-info RPC is sent first, matching the reference order. Live result: GSP-RM completes initialization (init-done rpc_result=0), serves the 1656-byte static config (name, FB size, handles, PDE bases), and shuts down cleanly through the unload RPC.
* guest-diag: treat the benign TX-header status line as non-fatal in the claim ↵Arthur Hanson Rasmusson11 days
| | | | harness
* STATE-CURRENT: 15:47 check-back - source campaign closes host-side inputs; ↵Arthur Hanson Rasmusson11 days
| | | | PMU-provisioned chip identity is the one hard dependency
* STATE-CURRENT: cycles 4-10 - pre-boot RPCs/registry/timer/chipset landed; RM ↵Arthur Hanson Rasmusson11 days
| | | | init wall narrowed to static-config collection
* gsp-phys: populate the chipset/CL block of the pre-boot system infoArthur Hanson Rasmusson11 days
| | | | | | | | | | | | | | | | | | | | | | Fill the GspSystemInfo chipset fields the production client syncs before the GSP boot instead of leaving them zero: - clPdbProperties (bitmask in the client's clSyncWithGsp order): bit 0 (config space accessible, from the OS MCFG/ECAM availability), bit 7 and bit 21 (Intel Skylake-family upstream-port setup: ASPM POR list, root-port nosnoop WAR), bit 13 (upstream port ASPM L1 capable), bit 27 (LTR supported+enabled up to the root port) and bit 32 (IO coherent). PDB_PROP_CL_UNSUPPORTED_CHIPSET is never assigned by the client, so the faithful unmatched-chipset value is 0. - Chipset = 0 (CS_UNKNOWN) for a host bridge with no chipsetInfo[] entry, the reference's no-match fallback. - FHBBusInfo/chipsetIDInfo: 10-byte BUSINFO blobs of the first host bridge of the GPU's domain (device, vendor, subdevice, subvendor, revision), with the subsystem-capability fallback on chipsetIDInfo. acpiMethodData is intentionally sent all-zero (bValid=0): no ACPI/AML calls are made and every consumer tolerates the no-data encoding. All device lookups use refcounted pci_get_device()/pci_dev_put().
* gsp-phys: drop RmDisableDisplay from the registry profile (display-enabled ↵Arthur Hanson Rasmusson11 days
| | | | | | | | | | | | | | | | experiment) The working distribution driver runs with display enabled; the RmDisableDisplay=1 deviation changes board/display state and may be implicated in the devid/board validation failure blocking GSP-RM init. Regenerate the profile without it: the 35 host default parameters plus RMDevidCheckIgnore=1, 36 entries total, display brought up as a stock boot would. Same canonical packing: size 1344, numEntries 36, rpc.length 1376, record 1392 (8-byte aligned), one 4 KB element. The module is unchanged apart from comments and the prepared log line, which now reports 'host default profile + RMDevidCheckIgnore=1, display enabled'.
* STATE-CURRENT: physical GSP-RM init root-caused to devid validation; cycle 8 ↵Arthur Hanson Rasmusson11 days
| | | | under test
* gsp-phys: add RMDevidCheckIgnore to the registry profileArthur Hanson Rasmusson11 days
| | | | | | | | | | | | | Append RMDevidCheckIgnore=1 (dword) to the pre-boot SET_REGISTRY profile, after the 35 host default parameters and RmDisableDisplay=1. The key is the registry escape for the static-config devid/board check that currently fails GSP-RM init; every existing entry is unchanged. Regenerated kernel/gsp_phys_registry_img.h with the same canonical packing (values inline, names-only blob): size 1377, numEntries 37, rpc.length 1409, one 4 KB element. The module code is unchanged apart from comments: the submission and the prepared log line read the size and entry count from the generated blob/macros.
* STATE-CURRENT: 14:07 check-back - 0x59 root-caused (missing pre-boot init ↵Arthur Hanson Rasmusson11 days
| | | | handshake); error journal collapsed 851->4; cycles 4-7 release clean
* gsp-phys: program the GPU timer before the GSP kickArthur Hanson Rasmusson11 days
|
* gsp-phys: send the host default registry profile with RmDisableDisplay for ↵Arthur Hanson Rasmusson11 days
| | | | | | | | | | | | | | | | | | | | | | | | | GSP-RM init The pre-boot SET_REGISTRY (function 73) submitted an empty PACKED_REGISTRY_TABLE. Replace it with the default registry profile the host driver sends before boot: the 35 default dword parameters from its parameter table plus RmDisableDisplay=1. The display key makes the GSP-RM display-presence check treat display as absent, so the display engine is removed during pre-init instead of being brought up on a headless boot. The payload is generated into kernel/gsp_phys_registry_img.h as a PACKED_REGISTRY_TABLE blob (8-byte header, 36 16-byte dword entries, NUL-terminated names after the array; values inline; no value bytes in the name blob, matching the reference packer): size 1342, numEntries 36, rpc.length 1374, one 4 KB element. fn72 is unchanged. The payload length is not 8-byte aligned (record 1390 -> 1392); the TX producer already zero-pads the kvzalloc'd staging record and folds the XOR checksum over the padded length, exactly like the reference producer zero-pads before _checkSum32, so no producer change is needed. The blob is static const data: no heap, no new stack frame, and a submit failure still aborts the boot. The prepared log line now prints the payload size and entry count.
* gsp-phys: queue the pre-boot GSP_SET_SYSTEM_INFO and SET_REGISTRY async RPCsArthur Hanson Rasmusson11 days
| | | | | | | | | | | | | | | | | | | The real-GSP boot path staged the message queue but never queued the two fire-and-forget init RPCs the production client places in it before the booter starts. GSP-RM therefore created its GPU object without any system information and aborted RM init (live GSP_INIT_DONE rpc_result=0x59), with the resource-manager's object-database lookups asserting from the first journal record. Submit function 72 (GSP_SET_SYSTEM_INFO, 928-byte v17_00 payload carrying the BAR physical bases, domain/bus/slot, PCI IDs, the BAR0 config-mirror offset, link/FLR capabilities and upstream-port flags read from the pci_dev) and function 73 (SET_REGISTRY, header-only empty table, which the server explicitly accepts) through the existing submit-only queue producer after all stage-3d preconditions and before the GSP falcon reset/Booter Load kick. The wire layouts are re-declared in the module with per-field static asserts against the reference ABI; payloads are heap-allocated, so no new stack frames are introduced.
* STATE-CURRENT: 12:12 check-back - cycles 2-3 ran the real GSP-RM sequencer; ↵Arthur Hanson Rasmusson11 days
| | | | RM init fails 0x59; clean release without reboot; NOCAT capture next
* gsp-phys: key the NOCAT summary on the truncated stringsArthur Hanson Rasmusson11 days
|
* guest-diag: add --nocat for the next diagnostic bootArthur Hanson Rasmusson11 days
|
* gsp-phys: capture GSP-RM NOCAT journal records from the status queueArthur Hanson Rasmusson11 days
|
* STATE-CURRENT: cycles 2-3 results - clean release without reboot; RM init ↵Arthur Hanson Rasmusson11 days
| | | | failure 0x59 under diagnosis
* guest-diag: allow selecting the staged GSP firmware with --fwArthur Hanson Rasmusson11 days
|
* gsp-phys: use the reference default for a zero sequencer poll timeoutArthur Hanson Rasmusson11 days
| | | | | | | | | | | | A zero REG_POLL timeout dword is the reference's GPU_TIMEOUT_DEFAULT sentinel: the reference substitutes the platform default (microseconds; 4 s in graphics mode, the default platform) before waiting. The executor clamped zero to the 1 us floor, i.e. one jiffy, so a poll that was not already satisfied failed the boot in 1 ms. The live 0x1002 sequencer element contains exactly one REG_POLL with timeout=0 (addr 0x110040); substitute the 4 s graphics-mode default and then keep the existing 1 us .. 10 s clamp.
* STATE-CURRENT: stage 3e parser fix after the live GSP-RM sequencer request; ↵Arthur Hanson Rasmusson11 days
| | | | next cycle prepared
* gsp-phys: accept the real GSP-RM sequencer buffer size in stage 3eArthur Hanson Rasmusson11 days
| | | | | | | | | The live 0x1002 element carries bufferSizeDWord=0x3FE2 (16354) - the size of GSP-RM's own command buffer, not the message. The executor's 0x1000 sanity cap refused it, so the sequencer was never run and GSP_INIT_DONE was never observed. The reference imposes no upper bound (only nonzero and greater than cmdIndex); raise the cap to a sanity ceiling and document that the real execution bound is cmdIndex against the element payload.
* docs: record next-cycle readiness for the physical GSP bootArthur Hanson Rasmusson11 days
| | | | STATE-CURRENT and the integration page reflect the implemented sequencer, clean-shutdown RPC and static-info probe awaiting the next supervised live cycle.
* gsp-phys: harden the RM transport and add the static-info probeArthur Hanson Rasmusson11 days
| | | | | | Applies the adversarial review fixes for the command-queue TX and unload RPC: the unload RPC is gated on GSP-RM init-done, debugfs fops pin the module, REG_POLL timeouts use microseconds, the host status readPtr is published, TX free space is checked, swap flags and barriers are corrected, and the legacy payload fallback is opt-in. Generalizes the transport to multi-element records and a reply-matching status-queue reader, and adds a debugfs probe that round-trips GET_GSP_STATIC_INFO (with a SET_GUEST_SYSTEM_INFO fallback), decodes the server configuration, and a read-only state snapshot file. All gated by gsp_phys_boot; the normal load path is unchanged.
* gsp-phys: command-queue TX and the GSP-RM unload RPC for clean teardownArthur Hanson Rasmusson11 days
| | | | Adds a minimal msgq producer on the command queue (element layout, checksum, sequence, dma_wmb before writePtr, doorbell) and submits the UNLOADING_GUEST_DRIVER RPC so GSP-RM shuts down and sets the scratch14 handoff bit the Booter Unload gate needs. Release attempts the RPC once before quiescing when a boot ran; on-demand testing is available through the debugfs file gsp-phys-unload-rpc while the module owns the GPU. GSP-RM processor suspend is polled on the GSP mailbox.
* STATE-CURRENT: 10:08 check-back snapshot (first real GSP boot recorded; ↵Arthur Hanson Rasmusson11 days
| | | | sequencer executor next)
* docs: record the first real GSP boot and the live GSP-RM sessionArthur Hanson Rasmusson11 days
| | | | STATE-CURRENT and the architecture docs now describe the observed order (FWSEC -> Booter Load -> RISC-V active -> event 0x1002 run-sequencer -> 0x1001 init-done), the four-handoff-bit clean-release constraint, and the --boot/--keep harness contract.
* guest-diag: add --boot/--boot-dryrun/--keep to the claim harnessArthur Hanson Rasmusson11 days
| | | | --boot is the only device-writing mode (full boot lifecycle: FWSEC, Booter Load, RISC-V start, FALCON_OS, RM-init poll). --boot-dryrun rehearses the host staging read-only. --keep leaves a green claimed session running. --fwsec is retired and refused at parse time: a FWSEC-only carve is not host-recoverable on this part.
* gsp-phys: real GSP boot stages 3d/3e and the GSP-RM run-sequencer eventArthur Hanson Rasmusson11 days
| | | | | | | | Stage 3d stages the GSP-RM boot from host sysmem (FMC, radix3 over the GSP-RM ELF, signature, message queues, libos LOGINIT/LOGRM/RMARGS and GSP arguments) and runs Booter Load on SEC2: GSP RISC-V reset, libos mailbox, IMEM/DMEM direct load, BOOTVEC=0, M0==0, FALCON_OS, RISC-V active. Stage 3e links the status queue and polls for GSP-RM events; it now also executes the inline run-sequencer command buffer (event 0x1002) against BAR0 (REG_WRITE/MODIFY/POLL, DELAY, STORE, CORE_* including CORE_RESUME) and then waits for GSP_INIT_DONE 0x1001. Gated by gsp_phys_boot / gsp_phys_boot_dryrun (default off; the normal load path writes nothing). gsp_phys_fwsec=1 without gsp_phys_boot=1 is refused: a FWSEC-only carve cannot pass the booter-unload handoff gate. Release quiesces the GSP, runs the existing FWSEC-SB/booter-unload teardown and frees all staging. tools/gen_gsp_bindata.py decodes the public generated archives into the Booter Load image (prod signature patched at 0x8700) and the GSP-RM boot (FMC) image; both are self-checked at build time.
* STATE-CURRENT: recovery complete (approved reboot restored GPU); ↵Arthur Hanson Rasmusson11 days
| | | | secure-verification-only retired; full boot lifecycle next
* STATE-CURRENT: FWSEC carve milestone; fail-safe teardown limit; approved ↵Arthur Hanson Rasmusson11 days
| | | | reboot for restoration
* gsp-phys: fix the booter-unload handoff seed (correct scratch register/access)Arthur Hanson Rasmusson11 days
|
* STATE-CURRENT: live secure-verification succeeded (WPR2 up); fail-safe holds ↵Arthur Hanson Rasmusson11 days
| | | | device pending rescue
* gsp-phys: fix booter-unload teardown (WPR meta/args) so WPR2 is cleared on ↵Arthur Hanson Rasmusson11 days
| | | | release
* gsp-phys: set PCI bus-master for the claimed GPU (bootloader host DMA)Arthur Hanson Rasmusson11 days
|
* gsp-phys: FWSEC failure diagnostics (falcon scratch/mailbox, DMEM/IMEM readback)Arthur Hanson Rasmusson11 days
|
* guest-diag: add --fwsec to the supervised claim harness (stage-3c write run)Arthur Hanson Rasmusson11 days
|
* gsp-phys: correct the FWSEC interface-patch size and staging loggingArthur Hanson Rasmusson11 days
|
* gsp-phys: read-only FWSEC dry-run mode; match the 6-byte BIT token decodeArthur Hanson Rasmusson11 days
|
* STATE-CURRENT: supervised D0 claim mitigation verified (3/3); FB 8 GiB; ↵Arthur Hanson Rasmusson11 days
| | | | FWSEC dry-run stage
* STATE-CURRENT: 07:12 check-back snapshot (backend hardening/read-only ↵Arthur Hanson Rasmusson11 days
| | | | dry-run stage before live boot)
* gsp-phys: fix the WPR2-up release hand-back and tighten FWSEC/VBIOS checksArthur Hanson Rasmusson11 days
|
* STATE-CURRENT: PLAN B claim path proven safe 3/3; real FB size 8 GiB; ↵Arthur Hanson Rasmusson11 days
| | | | secure-verification stage coded (build-only)
* gsp-phys: stage 3c FWSEC via VBIOS BIT image plus failure recoveryArthur Hanson Rasmusson11 days
|
* gsp-phys: decode the real FB size for the boot layout (stage 3b-prime)Arthur Hanson Rasmusson11 days
|
* STATE-CURRENT: claim harness verified; rung-3 boot spec complete; FB-size ↵Arthur Hanson Rasmusson11 days
| | | | decode identified
* guest-diag: reusable supervised physical-claim cycle harness (D0 pre-lock + ↵Arthur Hanson Rasmusson11 days
| | | | abort checks)