[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"project-78371":3},{"id":4,"name":5,"fullName":6,"owner":7,"repo":5,"description":8,"homepage":9,"htmlUrl":9,"language":10,"languages":9,"totalLinesOfCode":9,"stars":11,"forks":12,"watchers":13,"openIssues":14,"contributorsCount":15,"subscribersCount":15,"size":15,"stars1d":16,"stars7d":17,"stars30d":18,"stars90d":15,"forks30d":15,"starsTrendScore":19,"compositeScore":20,"rankGlobal":9,"rankLanguage":9,"license":9,"archived":21,"fork":21,"defaultBranch":22,"hasWiki":23,"hasPages":21,"topics":24,"createdAt":9,"pushedAt":9,"updatedAt":25,"readmeContent":26,"aiSummary":27,"trendingCount":15,"starSnapshotCount":15,"syncStatus":28,"lastSyncTime":29,"discoverSource":30},78371,"bc250-40cu-unlock","duggasco\u002Fbc250-40cu-unlock","duggasco","Re-enable all 40 CUs on the AMD BC-250 (gfx1013 \u002F Cyan Skillfish). Kernel patch + build script. 1.61x compute scaling verified.",null,"Shell",229,22,12,7,0,4,40,120,28,4.09,false,"main",true,[],"2026-06-12 02:03:46","# BC-250 40 CU Unlock\n\nRe-enable all 40 CUs on the AMD BC-250 (gfx1013 \u002F Cyan Skillfish \u002F salvaged PS5 APU).\n\nThe BC-250 ships with 24 of 40 RDNA2 CUs active. This patch unlocks all 40 by writing two hardware registers during amdgpu driver init. No firmware mods, no permanent changes — just a kernel module parameter.\n\n## Results\n\n**pp512 (Vulkan LLM inference, Qwen3.5-9B Q4_K_XL):**\n\n| Config | pp512 tok\u002Fs | Power | Temp | SCLK |\n|--------|------------|-------|------|------|\n| Stock 24 CU | 230 | 95W | 79C | 1500MHz |\n| **40 CU unlocked** | **372** | **125W** | **83C** | **1500MHz** |\n| **Ratio** | **1.61x** | +30W | +4C | same |\n\nAt 2 GHz (governor default): 302 → 466 tok\u002Fs = 1.54x, but hits 96C. 1500 MHz \u002F 900 mV is the recommended sweet spot.\n\n## How It Works\n\nTwo registers control CU availability — both must be modified:\n\n| Register | What it does | Stock | Unlocked |\n|----------|-------------|-------|----------|\n| `CC_GC_SHADER_ARRAY_CONFIG` | Enumeration mask (tells driver how many CUs) | `0xfff80000` (24 CU) | `0xffe00000` (40 CU) |\n| `SPI_PG_ENABLE_STATIC_WGP_MASK` | Dispatch gate (tells SPI where to send waves) | `0x7` (WGP 0-2) | `0x1F` (WGP 0-4) |\n\n**Neither alone is sufficient.** CC alone changes what the driver reports but SPI still dispatches to 24 CUs. SPI alone enables hardware dispatch but the driver only generates work for 24 CUs.\n\nThe patch writes both during `gfx_v10_0_get_cu_info()`, guarded by `device == 0x13FE` (BC-250 only) and `bc250_cc_write_mode=3` (off by default).\n\n## Quick Start\n\n### Option 1: Build Script (any distro)\n\n```bash\ngit clone https:\u002F\u002Fgithub.com\u002Fduggasco\u002Fbc250-40cu-unlock.git\ncd bc250-40cu-unlock\nsudo .\u002Fscripts\u002Fbc250-enable-40cu.sh build\nsudo .\u002Fscripts\u002Fbc250-enable-40cu.sh enable   # reboots\n```\n\nRequirements: `gcc`, `make`, `zstd`, kernel headers (`linux-headers-$(uname -r)`)\n\n### Option 2: Apply Patch Manually\n\n```bash\n# Get your kernel source\ncd \u002Fpath\u002Fto\u002Flinux-source\u002Fdrivers\u002Fgpu\u002Fdrm\u002Famd\u002Famdgpu\u002F\n\n# Apply\npatch -p5 \u003C \u002Fpath\u002Fto\u002Fbc250-40cu-unlock\u002Fpatch\u002Fbc250-40cu-amdgpu.patch\n\n# Build just amdgpu\nmake -C \u002Flib\u002Fmodules\u002F$(uname -r)\u002Fbuild M=$(pwd) -j$(nproc) modules\n\n# Install\nsudo cp amdgpu.ko.zst \u002Flib\u002Fmodules\u002F$(uname -r)\u002Fkernel\u002Fdrivers\u002Fgpu\u002Fdrm\u002Famd\u002Famdgpu\u002F\nsudo depmod -a\n\n# Enable\necho 'options amdgpu bc250_cc_write_mode=3' | sudo tee \u002Fetc\u002Fmodprobe.d\u002Fbc250-40cu.conf\nsudo reboot\n```\n\n### Option 3: CachyOS \u002F Arch\n\nApply `patch\u002Fbc250-40cu-amdgpu.patch` to your kernel PKGBUILD patch set, rebuild, add the modprobe config.\n\n## Verification\n\nAfter reboot:\n\n```bash\n# Check CU count\ndmesg | grep active_cu_number\n# Expected: active_cu_number 40\n\n# Check register writes\ndmesg | grep bc250-40cu\n# Expected: bc250-40cu-enable: mode=3 se=0 sh=0 CC=0xfff80000->0xffe00000 SPI=0x00000007->0x0000001f\n\n# Check RADV\nRADV_DEBUG=info vulkaninfo --summary 2>&1 | grep num_cu\n# Expected: num_cu = 40\n```\n\n## CU Harvest Map\n\nCheck your board's stock CU layout (run without the patch):\n\n```bash\n.\u002Fscripts\u002Fcu_map.sh\n```\n\nOur boards show contiguous harvesting:\n```\nSE0 SH0: ■■■■■■□□□□\nSE0 SH1: ■■■■■■□□□□\nSE1 SH0: ■■■■■■□□□□\nSE1 SH1: ■■■■■■□□□□\n24\u002F40 CUs active, 16 harvested\n```\n\nWe're collecting maps from across the fleet to find out if all BC-250s share this pattern.\n\n## Governor \u002F Thermal\n\n40 CU at 2 GHz draws ~181W and hits 96C. Recommended: cap at 1500 MHz \u002F 900 mV via `cyan-skillfish-governor`:\n\n```toml\n# \u002Fetc\u002Fcyan-skillfish-governor\u002Fconfig.toml\n[[safe-points]]\nfrequency = 350\nvoltage = 700\n\n[[safe-points]]\nfrequency = 1500\nvoltage = 900\n```\n\n## Selective CU Masking\n\nNot all unlocked CUs may be healthy — boards with scattered harvest patterns (`■■□□■■□□■■`) may have defective silicon. You can enable all 40 CUs but selectively mask bad ones via `amdgpu.disable_cu`.\n\n### WGP \u002F CU Mapping (per shader array)\n\n```\nWGP 0 = CU 0,1    (stock active)\nWGP 1 = CU 2,3    (stock active)\nWGP 2 = CU 4,5    (stock active)\nWGP 3 = CU 6,7    (unlocked — test these)\nWGP 4 = CU 8,9    (unlocked — test these)\n\nWGP CU Map Preview Example:\n0 1 2 3 4 \n■■■■■■□□□□\n```\n\nDisabling works at **WGP granularity** — disabling CU 6 also disables CU 7 (same WGP).\n\nFormat: `amdgpu.disable_cu=SE.SH.WGP` (comma-separated, added to modprobe config)\n\n### Examples\n\n```bash\n# Enable all 40, but mask WGP 3 in SE1\u002FSH0 (CUs 6-7) — gives 38 CUs\noptions amdgpu bc250_cc_write_mode=3 disable_cu=1.0.3\n\n# Mask WGP 4 across all shader arrays — gives 32 CUs\noptions amdgpu bc250_cc_write_mode=3 disable_cu=0.0.4,0.1.4,1.0.4,1.1.4\n```\n\n### Automated Health Testing\n\n```bash\n# Run per-WGP isolation test (20 reboots, tests each WGP individually)\nsudo .\u002Fscripts\u002Fbc250-cu-health-test.sh start\n\n# Quick correctness test on current config (no reboot)\n.\u002Fscripts\u002Fbc250-compute-verify.sh\n\n# Generate disable_cu config from health results\n.\u002Fscripts\u002Fbc250-cu-mask.sh --results \u002Fvar\u002Flib\u002Fbc250-cu-health-test\u002Fresults.tsv\n\n# Install the mask (adds to modprobe config)\nsudo .\u002Fscripts\u002Fbc250-cu-mask.sh --results \u002Fvar\u002Flib\u002Fbc250-cu-health-test\u002Fresults.tsv --install\n\n# View harvest map with health overlay\n.\u002Fscripts\u002Fcu_map.sh --health \u002Fvar\u002Flib\u002Fbc250-cu-health-test\u002Fresults.tsv\n```\n\n## Disabling\n\n```bash\nsudo .\u002Fscripts\u002Fbc250-enable-40cu.sh disable   # removes config, reboots to 24 CU\nsudo .\u002Fscripts\u002Fbc250-enable-40cu.sh restore   # restores original amdgpu module\n```\n\n## Whitepaper\n\nThe full academic writeup is available as a PDF:\n\n**[Re-enabling Fused-Off Compute Units on the AMD BC-250 APU via Register-Level Modification](docs\u002Fwhitepaper-cu-unlock.pdf)** (8 pages)\n\nCovers the complete methodology, 4-state controlled experiment, community harvest map survey (n=58), performance characterization, and dual-register gating architecture analysis. LaTeX source included at [docs\u002Fwhitepaper-cu-unlock.tex](docs\u002Fwhitepaper-cu-unlock.tex).\n\n## Technical Details\n\nSee [docs\u002Ftechnical-report.md](docs\u002Ftechnical-report.md) for additional technical notes including:\n- Register map (UMR dumps)\n- Architecture analysis (CC vs SPI vs RLC vs SMU)\n- Why `ignore_cu_harvest` doesn't work\n- Power\u002Fthermal characterization\n\n## Safety\n\n- Default off (`bc250_cc_write_mode=0`) — does nothing unless explicitly enabled\n- Guarded by PCI device ID `0x13FE` — only fires on BC-250\n- No permanent hardware changes — reboot without the config returns to stock 24 CU\n- The harvested CUs have power, clocks, and matching CGTS config — they were disabled by firmware policy, not silicon defects (RLC_PG_CNTL = 0, no power gating active)\n\n## Credits\n\n- **duggasco** — research, testing, documentation\n- **filippor** — independent testing, `ignore_cu_harvest` kernel patch, cyan-skillfish-governor\n- **Claude** — analysis, tooling, SPI register discovery\n- **Codex** — identified SPI_PG_ENABLE_STATIC_WGP_MASK architecture\n- **BC-250 Discord** — thermal\u002Fvoltage guidance, fleet testing\n\n## License\n\nGPL-2.0 (same as the Linux kernel)\n","该项目旨在重新激活AMD BC-250（gfx1013 \u002F Cyan Skillfish）上的全部40个计算单元。通过修改两个硬件寄存器，此内核补丁和构建脚本能够解锁原本被限制的16个计算单元，从而实现高达1.61倍的计算性能提升。项目不涉及固件修改或永久性更改，仅需在amdgpu驱动初始化时设置一个内核模块参数即可完成。适用于需要最大化利用BC-250 GPU资源以提高计算密集型任务效率的场景，如机器学习推理等。",2,"2026-06-11 03:56:43","CREATED_QUERY"]