code wiki / _hdl_build / _gpu_bm_boot_gate.nx
_gpu_bm_boot_gate.nx source
↩ module page · 91 lines · 7501 B
1// _gpu_bm_boot_gate.nx -- BARE-METAL SOVEREIGN-GPU rung BM-GPU-3: GPU bring-up over the BAR0 MMIO register file.
2//
3// A sovereign driver does the nouveau-style nvkm boot sequence against a spec-faithful BAR0 register MODEL:
4// 1. read NV_PMC_BOOT_0 @0x000000 -> chip id; decode chipset+arch family (Blackwell GB20x ~0x1B0). A read of
5// ALL-1s (0xFFFFFFFF) = the GPU fell off the bus (real nouveau liveness check) -> dead.
6// 2. read NV_PTIMER_TIME_0 @0x009400 twice -> the ns clock must ADVANCE (GPU core clock alive).
7// 3. read VRAM size @0x100000 (PFB) -> 16384 MiB (16 GiB, the 5080; cf. R4b measured ~14.88GiB usable).
8// 4. write NV_PMC_ENABLE @0x000200 (turn engines on) -> read-back latches (engines enabled).
9// NISHI-ECOSYSTEM-ONLY: our model + our driver; the NV register map is the last-mile hardware spec (open-gpu-
10// kernel-modules / nouveau). HONEST SCOPE: bring-up LOGIC vs a spec-faithful model; real MMIO = BM-GPU-6 on native Linux.
11//
12// GREEN iff: BOOT_0 alive + chipset!=0 + arch-family==0x1B0 (Blackwell); PTIMER advances (clock alive);
13// VRAM==16384MiB; PMC_ENABLE write read-back latches; AND tampers (BOOT_0=0xFFFFFFFF off-bus / stuck PTIMER)
14// are correctly detected as dead.
15// Marker -> knowledge/status/gpu_baremetal.log (BMBOOTGATE). license_tier: ORIGINAL
16import "nx_syscalls.nx"
17
18func p(s: *u8) -> i64 { var nn: i64=0; while s[nn]!=(0 as u8){nn=nn+1} sys_write(1,s,nn); return 0 }
19func fp(fd: i64, s: *u8) -> i64 { var nn: i64=0; while s[nn]!=(0 as u8){nn=nn+1} sys_write(fd,s,nn); return 0 }
20func n(v: i64) -> i64 { let bb: *u8=sys_mmap(28); var m: i64=v; if m<0{m=0-m;sys_write(1,"-" as *u8,1)}; let t: *u8=sys_mmap(28); var k: i64=0; if m==0{t[0]=48;k=1}; while m>0{t[k]=(48+(m%10)) as u8;m=m/10;k=k+1}; var i: i64=0; while i<k{bb[i]=t[k-1-i];i=i+1}; sys_write(1,bb,k); return 0 }
21func x(v: i64) -> i64 { p("0x" as *u8); let bb:*u8=sys_mmap(20); var k:i64=0; var m:i64=v; if m==0{bb[0]=48;k=1}; while m>0{ let d:i64=m&15; if d<10{bb[k]=(48+d) as u8}else{bb[k]=(87+d) as u8}; m=(m>>4); k=k+1 } var i:i64=0; let o:*u8=sys_mmap(20); while i<k{o[i]=bb[k-1-i];i=i+1} sys_write(1,o,k); return 0 }
22func fx(fd: i64, v: i64) -> i64 { let bb:*u8=sys_mmap(20); var k:i64=0; var m:i64=v; if m==0{bb[0]=48;k=1}; while m>0{ let d:i64=m&15; if d<10{bb[k]=(48+d) as u8}else{bb[k]=(87+d) as u8}; m=(m>>4); k=k+1 } let o:*u8=sys_mmap(20); var i:i64=0; while i<k{o[i]=bb[k-1-i];i=i+1} fp(fd,"0x" as *u8); sys_write(fd,o,k); return 0 }
23
24// ===== sovereign BAR0 MMIO register MODEL =====
25// state: [0]=boot0 [1]=ptimer [2]=vram_mb [3]=pmc_enable [4]=alive(1/0) [5]=ptimer_stuck(1/0)
26func bar0_read(st: *i64, off: i64) -> i64 {
27 if off == 0x000000 { if st[4] == 1 { return st[0] } else { return 0xFFFFFFFF } } // NV_PMC_BOOT_0 (off-bus=all-1s)
28 if off == 0x009400 { if st[5] == 0 { st[1] = st[1] + 0x100 } return st[1] } // NV_PTIMER_TIME_0 (advances unless stuck)
29 if off == 0x100000 { return st[2] } // PFB VRAM size (MiB)
30 if off == 0x000200 { return st[3] } // NV_PMC_ENABLE (latched)
31 return 0
32}
33func bar0_write(st: *i64, off: i64, val: i64) -> i64 { if off == 0x000200 { st[3] = val } return 0 }
34
35func make_gpu(st: *i64, alive: i64, stuck: i64) -> i64 {
36 st[0] = 0x1B3000A1 // NV_PMC_BOOT_0: chipset 0x1B3 (Blackwell GB203, bits 20:28), revision 0xA1
37 st[1] = 0; st[2] = 16384; st[3] = 0; st[4] = alive; st[5] = stuck
38 return 0
39}
40
41// the sovereign DRIVER bring-up. out: [alive, chipset, arch_family, clock_alive, vram_mb, engines_on]
42func bring_up(st: *i64, out: *i64) -> i64 {
43 let boot0: i64 = bar0_read(st, 0x000000)
44 var alive: i64 = 1; if boot0 == 0xFFFFFFFF { alive = 0 } if boot0 == 0 { alive = 0 }
45 let chipset: i64 = (boot0 >> 20) & 0x1ff
46 let arch_family: i64 = chipset & 0x1f0
47 let t1: i64 = bar0_read(st, 0x009400); let t2: i64 = bar0_read(st, 0x009400)
48 var clock_alive: i64 = 0; if t2 > t1 { clock_alive = 1 }
49 let vram_mb: i64 = bar0_read(st, 0x100000)
50 bar0_write(st, 0x000200, 0x10001111) // enable GR+FIFO+COPY engines (representative mask)
51 var engines_on: i64 = 0; if bar0_read(st, 0x000200) == 0x10001111 { engines_on = 1 }
52 out[0] = alive; out[1] = chipset; out[2] = arch_family; out[3] = clock_alive; out[4] = vram_mb; out[5] = engines_on
53 return 0
54}
55
56func main() -> i64 {
57 p("=== BARE-METAL SOVEREIGN-GPU BM-GPU-3: BAR0 register bring-up (PMC_BOOT_0 + PTIMER + PFB + PMC_ENABLE) ===\n" as *u8)
58 let st: *i64 = sys_mmap(128); let o: *i64 = sys_mmap(128)
59 make_gpu(st, 1, 0); bring_up(st, o)
60 let alive: i64 = o[0]; let chipset: i64 = o[1]; let arch: i64 = o[2]; let clk: i64 = o[3]; let vram: i64 = o[4]; let eng: i64 = o[5]
61 p(" NV_PMC_BOOT_0 -> alive=" as *u8); n(alive); p(" chipset=" as *u8); x(chipset); p(" arch_family=" as *u8); x(arch); p(" (Blackwell=0x1B0)\n" as *u8)
62 p(" PTIMER advances (clock alive)=" as *u8); n(clk); p(" | VRAM=" as *u8); n(vram); p("MiB (" as *u8); n(vram/1024); p("GiB) | engines_enabled=" as *u8); n(eng); p("\n" as *u8)
63
64 // ---- TAMPERS: dead/off-bus GPU + stuck clock must be detected ----
65 let st2: *i64 = sys_mmap(128); let o2: *i64 = sys_mmap(128); make_gpu(st2, 0, 0); bring_up(st2, o2)
66 var t_dead: i64 = 0; if o2[0] == 0 { t_dead = 1 } // off-bus (boot0=0xFFFFFFFF) -> alive=0
67 let st3: *i64 = sys_mmap(128); let o3: *i64 = sys_mmap(128); make_gpu(st3, 1, 1); bring_up(st3, o3)
68 var t_stuck: i64 = 0; if o3[3] == 0 { t_stuck = 1 } // stuck PTIMER -> clock_alive=0
69 p(" [tamper] off-bus-detected=" as *u8); n(t_dead); p(" stuck-clock-detected=" as *u8); n(t_stuck); p("\n" as *u8)
70
71 var pass: i64 = 0
72 if alive == 1 { if chipset != 0 { if arch == 0x1B0 { if clk == 1 { if vram == 16384 { if eng == 1 {
73 if t_dead == 1 { if t_stuck == 1 { pass = 1 } } } } } } } }
74 p(" checks: alive=" as *u8); n(alive); p(" blackwell_arch=" as *u8); n(arch==0x1B0); p(" clock_alive=" as *u8); n(clk); p(" vram_16GiB=" as *u8); n(vram==16384); p(" engines_on=" as *u8); n(eng); p(" tampers_ok=" as *u8); var tk: i64=0; if t_dead==1 { if t_stuck==1 { tk=1 } } n(tk); p("\n" as *u8)
75
76 let lfd: i64 = sys_openat_append("knowledge/status/gpu_baremetal.log" as *u8, 0x1a4)
77 if pass == 1 {
78 p("BMBOOTGATE verdict=GREEN reason=sovereign-driver-brings-up-GPU-over-BAR0 (NV_PMC_BOOT_0->Blackwell chipset 0x1B3/arch 0x1B0; PTIMER ns-clock advances=alive; PFB VRAM=16GiB; NV_PMC_ENABLE latches=engines on; off-bus[0xFFFFFFFF]+stuck-clock tampers detected) SCOPE=bringup-LOGIC-vs-spec-model-NOT-real-silicon; real-MMIO=BM-GPU-6\n" as *u8)
79 if lfd >= 0 {
80 fp(lfd, "BMBOOTGATE verdict=GREEN rung=BM-GPU-3-bar0-bringup device=sovereign-NVIDIA-BAR0-model boot0=" as *u8); fx(lfd, st[0])
81 fp(lfd, " chipset=" as *u8); fx(lfd, chipset); fp(lfd, " arch_family=0x1B0(Blackwell) ptimer=alive vram_mb=" as *u8); fx(lfd, vram)
82 fp(lfd, " pmc_enable=latched tampers=detected(off-bus+stuck-clock) scope=bringup-logic-vs-spec-model-NOT-real-silicon next=BM-GPU-4-channel/RAMFC/USERD; real-MMIO=native-Linux\n" as *u8)
83 sys_close(lfd)
84 }
85 sys_exit(0); return 0
86 }
87 p("BMBOOTGATE verdict=RED (bring-up/identify/tamper not satisfied)\n" as *u8)
88 if lfd >= 0 { fp(lfd, "BMBOOTGATE verdict=RED see-console\n" as *u8); sys_close(lfd) }
89 sys_exit(1)
90 return 1
91}