diff --git a/BIOS-FLASH.md b/BIOS-FLASH.md new file mode 100644 index 0000000..112b260 --- /dev/null +++ b/BIOS-FLASH.md @@ -0,0 +1,98 @@ +# BC-250 Console — BIOS Flash Guide + +Why this is needed: stock firmware locks the RAM split at 8/8 or 4/12 +(CPU/GPU) and hides the menu that changes it. The console needs +**512 MB VRAM** (the GPU then shares the rest dynamically), and that setting +only exists in Segfault's modded firmware. + +Files (local `firmware/` folder, NOT in this repo): + +| File | Purpose | +|---|---| +| `BC250_3.00_CHIPSETMENU.ROM` | **Flash this** — P3.00 with the chipset menu exposed | +| `BC250_3.00.ROM` | Segfault's stock P3.00 dump — reference/recovery only | +| `SHA256SUMS` | Verify both before flashing | + +> ⚠️ A bad flash without a backup = brick. The rules: **dump your own +> board's firmware first**, verify the dump twice, and never flash with the +> board powered. + +## 0. What you need + +- CH347 programmer (or Raspberry Pi Pico running serprog firmware) +- 6 female-female DuPont jumper wires (short ones — SPI hates long wires) +- `flashrom` on the PC driving the programmer: `sudo apt install flashrom` +- The board **completely disconnected from the PSU** (not just "off") + +The BIOS chip is a Winbond 16 MiB SPI flash (`BIOS_A1`), but you don't touch +the chip itself — the board exposes it on the **J4004** 2.54 mm header: + +``` +[ GND SCLK MOSI UNK ] UNK: leave unconnected +[ VCC CS MISO ] VCC is 3.3 V — NEVER connect a 5 V programmer line + ^ (pin-1 triangle) +``` + +Wire GND, SCLK, MOSI, VCC, CS, MISO to the matching pins on the programmer +(CH347: use its 3.3 V setting/jumper). The programmer's 3.3 V powers just +the flash chip while the board itself stays dead. + +## 1. Backup (do not skip, do not rush) + +```bash +flashrom -p ch347_spi # should detect a W25Q128-series chip +flashrom -p ch347_spi -r stock-A.rom +flashrom -p ch347_spi -r stock-B.rom +cmp stock-A.rom stock-B.rom && echo "backup consistent" +``` + +(Pi Pico instead: `-p serprog:dev=/dev/ttyACM0:115200`.) + +- Two identical reads = wiring is solid. If they differ, fix wiring/wire + length before going further — a flaky read means a flaky write. +- Copy `stock-A.rom` somewhere safe (this folder + another machine). This is + YOUR board's firmware, including any board-specific data — Segfault's + stock dump is not a substitute. + +## 2. Flash + +```bash +sha256sum -c SHA256SUMS # verify the modded ROM first +flashrom -p ch347_spi -w BC250_3.00_CHIPSETMENU.ROM +``` + +flashrom verifies after writing and prints `VERIFIED`. If the write or +verify fails: do not power the board — re-check wiring and re-flash. The +board is only bricked if you power it up with a half-written chip and give +up; the same header always lets you write again. + +Disconnect the programmer completely before connecting the PSU. + +## 3. BIOS settings (first boot after the flash) + +Connect DisplayPort + keyboard, power on, mash `Del` to enter setup. + +1. `Chipset → GFX Configuration → GFX Configuration`: + - `Integrated Graphics Controller` = **Forced** + - `UMA Mode` = **UMA_SPECIFIED** + - `UMA Frame Buffer Size` = **512M** +2. **Disable IOMMU** (in the newly exposed chipset/NBIO menus). +3. Confirm the `AUTO_PWRON1` jumper is on pins 1-2 (factory default) so the + board boots when the PSU switches on — this is the console's power-switch + design (see WIRING.md §5). +4. Save & exit. + +Note: if your board shipped on firmware P4.00G, the memory split can get +"stuck" — pull the CR2032 coin cell and use the `CLRCMOS1` jumper (pins 2-3 +momentarily, then back to 1-2), then redo the settings. + +## 4. Sanity check + +Boot the Bazzite installer USB (or the installed console). Once in Linux: + +```bash +free -h # total RAM should be ~15 GB (16 GB minus 512 MB VRAM) +``` + +If you see ~8 GB or ~4 GB, the UMA setting didn't take — revisit §3/§4. +Then proceed with the install per BUILD-CONSOLE.md.