diff --git a/docs/bios/overclocking.md b/docs/bios/overclocking.md index 51d63d2..8dfe424 100644 --- a/docs/bios/overclocking.md +++ b/docs/bios/overclocking.md @@ -19,7 +19,7 @@ Overclocking the BC-250 GPU beyond the default 1500 MHz lock. ### What Can Be Overclocked - **GPU Frequency:** 1500 MHz (locked) → 2000-2230 MHz (with governor) -- **GPU Voltage:** 700-1100 mV +- **GPU Voltage:** 700-1129 mV (stock kernel OD_RANGE) - **Memory:** Adjustable via community Mem Timing Utility (advanced — incorrect settings will crash the system) --- @@ -257,17 +257,17 @@ Start at 2000 MHz @ 1000 mV and work up. Stability varies by board (silicon lott ```bash # View current frequency/voltage table -cat /sys/class/drm/card0/device/pp_od_clk_voltage +cat /sys/class/drm/card1/device/pp_od_clk_voltage # Set voltage and frequency # Format: vc -echo "vc 0 2100 1025" | sudo tee /sys/class/drm/card0/device/pp_od_clk_voltage +echo "vc 0 2100 1025" | sudo tee /sys/class/drm/card1/device/pp_od_clk_voltage # Commit changes -echo "c" | sudo tee /sys/class/drm/card0/device/pp_od_clk_voltage +echo "c" | sudo tee /sys/class/drm/card1/device/pp_od_clk_voltage # Verify -cat /sys/class/drm/card0/device/pp_od_clk_voltage +cat /sys/class/drm/card1/device/pp_od_clk_voltage ``` **Test with benchmark:** @@ -435,7 +435,7 @@ systemctl status cyan-skillfish-governor-tt sudo systemctl restart cyan-skillfish-governor-tt # Check applied settings -cat /sys/class/drm/card0/device/pp_od_clk_voltage +cat /sys/class/drm/card1/device/pp_od_clk_voltage ``` ## Advanced: Multiple Voltage Points @@ -447,13 +447,13 @@ For Cyan-Skillfish Governor or manual tuning: 1. Test each frequency point: ```bash # Test 1500 MHz -echo "vc 0 1500 875" | sudo tee /sys/class/drm/card0/device/pp_od_clk_voltage -echo "c" | sudo tee /sys/class/drm/card0/device/pp_od_clk_voltage +echo "vc 0 1500 875" | sudo tee /sys/class/drm/card1/device/pp_od_clk_voltage +echo "c" | sudo tee /sys/class/drm/card1/device/pp_od_clk_voltage # Run benchmark, find minimum stable voltage # Test 1750 MHz -echo "vc 0 1750 950" | sudo tee /sys/class/drm/card0/device/pp_od_clk_voltage -echo "c" | sudo tee /sys/class/drm/card0/device/pp_od_clk_voltage +echo "vc 0 1750 950" | sudo tee /sys/class/drm/card1/device/pp_od_clk_voltage +echo "c" | sudo tee /sys/class/drm/card1/device/pp_od_clk_voltage # Run benchmark, find minimum stable voltage # Repeat for 2000, 2100, 2175, 2230 MHz diff --git a/docs/bios/vram.md b/docs/bios/vram.md index 1a7cfbb..02c1573 100644 --- a/docs/bios/vram.md +++ b/docs/bios/vram.md @@ -132,7 +132,7 @@ free -h # Should show ~10-15GB depending on allocation # Check VRAM -cat /sys/class/drm/card0/device/mem_info_vram_total +cat /sys/class/drm/card1/device/mem_info_vram_total # Shows GPU memory in bytes # Check both @@ -245,7 +245,7 @@ After changing allocation, verify it works: ```bash # 1. Check allocation took effect free -h -cat /sys/class/drm/card0/device/mem_info_vram_total +cat /sys/class/drm/card1/device/mem_info_vram_total # 2. Run stress test vkmark # Vulkan benchmark diff --git a/docs/drivers/radv.md b/docs/drivers/radv.md index ce58bbe..a6a2262 100644 --- a/docs/drivers/radv.md +++ b/docs/drivers/radv.md @@ -38,13 +38,13 @@ The BC-250 **only works on Linux** for gaming and desktop use. There is no Windo BC-250 support was added upstream in Mesa 25.1.0. **Do not use older versions** - they will not work properly or at all. -### Recommended: Mesa 25.2.4+ +### Recommended: Mesa 25.3.6+ -For stability and performance, use Mesa 25.2.4 or newer: +For stability and performance, use Mesa 25.3.6 or newer: - **25.1.0** - Initial BC-250 support - **25.1.3+** - Minimum recommended -- **25.2.4** - Confirmed working (Bazzite Feb 2026), current stable target +- **25.3.6** - Confirmed working (Fedora 43, March 2026), current stable target ### What Changed in Mesa 25.1? @@ -727,7 +727,7 @@ unset MESA_SHADER_CACHE_DISABLE **Quick Check:** ```bash # Check GPU frequency -cat /sys/class/drm/card0/device/pp_dpm_sclk +cat /sys/class/drm/card1/device/pp_dpm_sclk # Should show multiple frequency levels with * at current: # 0: 1000Mhz diff --git a/docs/getting-started/introduction.md b/docs/getting-started/introduction.md index 751187b..0caf162 100644 --- a/docs/getting-started/introduction.md +++ b/docs/getting-started/introduction.md @@ -9,7 +9,7 @@ The BC-250 was originally designed for cryptocurrency mining, likely Ethereum, b - **CPU:** 6x Zen 2 cores running at ~3.5GHz - **GPU:** 24 RDNA2 Compute Units (codename "Cyan Skillfish") - **Memory:** 16GB GDDR6 shared between CPU and GPU -- **Connectivity:** DisplayPort, M.2 NVMe slot, USB 3.0 ports +- **Connectivity:** 1x DisplayPort, 2x USB 3.0, 2x USB 2.0, 1x GbE Ethernet, M.2 NVMe/SATA slot - **Power:** PCIe 8-pin connector, 220W TDP ## Key Capabilities diff --git a/docs/getting-started/quick-start.md b/docs/getting-started/quick-start.md index a90ebdc..21ae3b9 100644 --- a/docs/getting-started/quick-start.md +++ b/docs/getting-started/quick-start.md @@ -71,8 +71,8 @@ sudo systemctl enable --now cyan-skillfish-governor-tt.service !!!info "SMU Governor Alternative (No Kernel Patch Needed)" The `cyan-skillfish-governor-smu` bypasses kernel patches entirely via SMU firmware calls. Best option for CachyOS/Arch. Install via AUR: `yay -S cyan-skillfish-governor-smu` -!!!danger "ACPI Fix is Essential" - Install the BC-250 ACPI fix for proper C-State support and power management: [bc250-collective/bc250-acpi-fix](https://github.com/bc250-collective/bc250-acpi-fix) +!!!success "ACPI Fix — Recommended" + The [bc250-collective/bc250-acpi-fix](https://github.com/bc250-collective/bc250-acpi-fix) enables CPU C-States (idle power savings) and P-States (CPU frequency scaling 800-3200 MHz). Loaded via initrd override. See the [Governor page](../system/governor.md) for installation instructions. !!!warning "Governor Device Targeting" **Known Issue:** Governor may target incorrect device (card0 vs card1). Verify correct device assignment in governor configuration. @@ -140,7 +140,7 @@ systemctl status cyan-skillfish-governor-tt # Should show: active (running) # Check GPU frequency -cat /sys/class/drm/card0/device/pp_dpm_sclk +cat /sys/class/drm/card1/device/pp_dpm_sclk # Should show multiple frequencies, one marked with * ``` @@ -189,7 +189,7 @@ This fixes graphical glitches in some games. **Solution:** 1. Check governor is running: `systemctl status cyan-skillfish-governor-tt` -2. Check GPU frequency: `cat /sys/class/drm/card0/device/pp_dpm_sclk` +2. Check GPU frequency: `cat /sys/class/drm/card1/device/pp_dpm_sclk` 3. Should NOT be stuck at 1500MHz ### High Temperatures diff --git a/docs/hardware/cooling.md b/docs/hardware/cooling.md index a92e126..12a8cc3 100644 --- a/docs/hardware/cooling.md +++ b/docs/hardware/cooling.md @@ -315,16 +315,21 @@ Quick DIY solution using cardboard or foam board. ## Fan Control -### PWM Control with nct6683 +### PWM Control with nct6687 -The BC-250 uses the NCT6683 Super I/O chip for fan and sensor control. +The BC-250 uses the NCT6686D Super I/O chip. For PWM fan control, you need the `nct6687` module ([Fred78290/nct6687d](https://github.com/Fred78290/nct6687d)). The in-kernel `nct6683` module is read-only and cannot set fan speeds. **Driver Installation:** ```bash -# Load kernel module (requires force=true) -echo 'nct6683' | sudo tee /etc/modules-load.d/nct6683.conf -echo 'options nct6683 force=true' | sudo tee /etc/modprobe.d/sensors.conf +# Build and install nct6687 module +git clone https://github.com/Fred78290/nct6687d.git +cd nct6687d && make && sudo make install + +# Blacklist nct6683 and enable nct6687 +echo 'blacklist nct6683' | sudo tee /etc/modprobe.d/sensors.conf +echo 'options nct6687 force=true' | sudo tee -a /etc/modprobe.d/sensors.conf +echo 'nct6687' | sudo tee /etc/modules-load.d/99-sensors.conf # Rebuild initramfs sudo dracut --regenerate-all --force # Fedora @@ -338,7 +343,7 @@ sudo reboot **Verify:** ```bash sensors -# Should show nct6686-isa-0a20 with fan speeds +# Should show nct6686-isa-0a20 with named fan speeds and temperatures ``` ### CoolerControl (GUI Fan Curves) @@ -393,13 +398,26 @@ The BIOS offers three fan modes: Set fan speed manually (for testing): ```bash -# Set fan 1 to 80% speed -echo 80 | sudo tee /sys/class/hwmon/hwmon*/pwm1 +# Find the hwmon for the nct6686 chip +HWMON=$(grep -l nct6686 /sys/class/hwmon/hwmon*/name | head -1 | xargs dirname) + +# Enable manual PWM mode (required before writing PWM values) +# Main fan is on pwm2 (Pump Fan header) +echo 1 | sudo tee $HWMON/pwm2_enable + +# Set fan to 80% speed (value 0-255) +echo 200 | sudo tee $HWMON/pwm2 # Set to 100% (255 = full speed) -echo 255 | sudo tee /sys/class/hwmon/hwmon*/pwm1 +echo 255 | sudo tee $HWMON/pwm2 ``` +!!!warning "Requires nct6687 Module" + PWM fan control requires the `nct6687` module. The in-kernel `nct6683` module is read-only. + +!!!info "Fan Header Mapping" + The main cooling fan is typically connected to the **Pump Fan** header, which is `fan2`/`pwm2` in sysfs. `CPU Fan` (fan1) and `System Fan` headers (fan3+) are usually unused. + ## Cooling Solutions by Budget | Budget | Solution | Expected Temps | diff --git a/docs/hardware/specifications.md b/docs/hardware/specifications.md index 2b70e65..c1840d9 100644 --- a/docs/hardware/specifications.md +++ b/docs/hardware/specifications.md @@ -23,13 +23,13 @@ The BC-250 features a cut-down PS5 APU (codenamed "Oberon" / "Cyan Skillfish"): - **Compute Units:** 24 CUs (down from 36 CUs in full PS5 APU) - **Codename:** Cyan Skillfish (gfx1013) - **Base Frequency:** 1500 MHz (locked without governor) -- **Maximum Frequency:** 2000-2230 MHz (with kernel patch and governor) +- **Maximum Frequency:** 2000 MHz stock kernel, up to 2230 MHz with kernel patch and governor - **Performance:** Comparable to RX 6600 / GTX 1660 Ti in gaming workloads !!!success "GPU Features" - Hardware ray tracing support (RDNA 2 RT cores) - FSR (FidelityFX Super Resolution) compatible - - Vulkan 1.3 support + - Vulkan 1.4 support (1.4.328 with Mesa 25.3+) - No video encoding/decoding (VCN disabled) ### Memory Configuration @@ -79,10 +79,10 @@ The BC-250 features a cut-down PS5 APU (codenamed "Oberon" / "Cyan Skillfish"): #### Storage -- **M.2 Slot:** 1x M.2 2280 slot (PCIe Gen 2 x2) -- **Speed:** ~1 GB/s maximum -- **USB:** 1x USB 3.0 port (Type-A) -- **USB Speed:** ~480 MB/s (SATA speed equivalent) +- **M.2 Slot:** 1x M.2 2280 slot (PCIe 2.0 x2 or SATA III) +- **Speed:** ~1 GB/s maximum (NVMe) or ~550 MB/s (SATA) +- **USB:** 2x USB 3.0 + 2x USB 2.0 (4 ports total) +- **Ethernet:** 1x Gigabit Ethernet (Realtek RTL8111H) #### Fan Headers @@ -92,14 +92,15 @@ The BC-250 features a cut-down PS5 APU (codenamed "Oberon" / "Cyan Skillfish"): - **Control:** PWM (Pulse Width Modulation) !!!tip "Fan Control" - The nct6683 kernel module (with `force=true`) enables sensor and PWM control. + For **read-only** sensor monitoring: use the `nct6683` kernel module (with `force=true`). + For **read+write PWM fan control**: use the `nct6687` module ([Fred78290/nct6687d](https://github.com/Fred78290/nct6687d)) with `force=true`. The in-kernel `nct6683` driver cannot write PWM values. #### Other Headers - **Power Button:** Onboard button only (no header - soldering required for external switch) - **Debug Header:** 20-pin AMD HDT1 debug connector - **SPI Flash:** Header for BIOS flashing -- **Super I/O:** NCT6683 chip for sensors and fan control (module: `nct6683` with `force=true`) +- **Super I/O:** NCT6686D chip for sensors and fan control (sensor module: `nct6683`, PWM control module: `nct6687` — both require `force=true`) ## Heatsink and Cooling diff --git a/docs/linux/arch.md b/docs/linux/arch.md index f9446a4..45cdc11 100644 --- a/docs/linux/arch.md +++ b/docs/linux/arch.md @@ -173,16 +173,16 @@ sudo ./bc520-manjaro.sh 2. **RADV Environment Configuration** - Creates `/etc/environment.d/99-radv-bc250.conf`: ```bash - RADV_DEBUG=nocompute + RADV_DEBUG=nohiz ``` - - Disables broken compute queue (prevents glitches) + - Fixes Z-buffer glitches. Note: `nocompute` is no longer needed on Mesa 25.1+ (compute queue disabled automatically) 3. **AMD GPU Kernel Module** - - Creates `/etc/modprobe.d/amdgpu-bc250.conf`: + - May create `/etc/modprobe.d/amdgpu-bc250.conf`: ```bash options amdgpu sg_display=0 ``` - - Only required for kernels < 6.10, safe to keep + - Only required for kernels < 6.10, harmless to keep on modern kernels 4. **Temperature Sensors** - Loads nct6683 module @@ -211,23 +211,26 @@ Find `GRUB_CMDLINE_LINUX_DEFAULT` and update: **Basic:** ``` -GRUB_CMDLINE_LINUX_DEFAULT="quiet amdgpu.sg_display=0" +GRUB_CMDLINE_LINUX_DEFAULT="quiet" ``` **With performance boost:** ``` -GRUB_CMDLINE_LINUX_DEFAULT="quiet amdgpu.sg_display=0 mitigations=off" +GRUB_CMDLINE_LINUX_DEFAULT="quiet mitigations=off" ``` **Remove nomodeset** (if added during install): ``` # WRONG: -GRUB_CMDLINE_LINUX_DEFAULT="quiet nomodeset amdgpu.sg_display=0" +GRUB_CMDLINE_LINUX_DEFAULT="quiet nomodeset" # CORRECT: -GRUB_CMDLINE_LINUX_DEFAULT="quiet amdgpu.sg_display=0" +GRUB_CMDLINE_LINUX_DEFAULT="quiet" ``` +!!!info "amdgpu.sg_display=0" + This parameter is only needed for kernels older than 6.10. On modern kernels (6.16+) it can be omitted. + Update GRUB: ```bash sudo grub-mkconfig -o /boot/grub/grub.cfg @@ -294,7 +297,7 @@ systemctl status oberon-governor # legacy ### Check Frequency Scaling ```bash -cat /sys/class/drm/card0/device/pp_dpm_sclk +cat /sys/class/drm/card1/device/pp_dpm_sclk # Example output: # 0: 1000MHz @@ -327,17 +330,15 @@ sudo systemctl restart cyan-skillfish-governor-tt # or oberon-governor sensors # Expected output: -# nct6683-isa-0a20 -# GPU Temp: +45.0°C -# SoC Temp: +42.0°C -# Fan1: 1800 RPM -# Fan2: 1800 RPM +# nct6686-isa-0a20 +# With nct6687: CPU: +XX°C, System: +XX°C, Pump Fan: XXXX RPM +# With nct6683: VIN0-16, fan1-fan5, AMD TSI, Thermistors ``` **If not showing:** ```bash -lsmod | grep nct6683 -sudo modprobe nct6683 +lsmod | grep -E 'nct6683|nct6687' +# Load the appropriate module (see sensors guide for nct6687 PWM option) dmesg | grep nct6683 ``` @@ -469,7 +470,7 @@ fastfetch nvtop # Check GPU frequency -cat /sys/class/drm/card0/device/pp_dpm_sclk +cat /sys/class/drm/card1/device/pp_dpm_sclk # Check governor (use whichever you installed) systemctl status cyan-skillfish-governor-tt diff --git a/docs/linux/bazzite.md b/docs/linux/bazzite.md index 375123f..363952b 100644 --- a/docs/linux/bazzite.md +++ b/docs/linux/bazzite.md @@ -225,7 +225,7 @@ systemctl reboot ### Temperature Sensors -Enable the nct6683 sensor module for temperature and fan monitoring: +For **read-only monitoring** (temperatures, voltages, fan speeds): ```bash echo 'nct6683' | sudo tee /etc/modules-load.d/nct6683.conf @@ -233,11 +233,13 @@ echo 'options nct6683 force=true' | sudo tee /etc/modprobe.d/sensors.conf systemctl reboot ``` +For **PWM fan control**, use the `nct6687` module instead — see the [Sensors Guide](../system/sensors.md) for full instructions. + Verify: ```bash sensors -# Should show nct6686-isa-0a20 with GPU temp, fan speeds +# Should show nct6686-isa-0a20 with temperatures and fan speeds ``` ### CoolerControl (Optional) @@ -342,7 +344,7 @@ sudo systemctl enable --now cyan-skillfish-governor-tt.service sudo systemctl restart cyan-skillfish-governor-tt # Verify frequency scaling -cat /sys/class/drm/card0/device/pp_dpm_sclk +cat /sys/class/drm/card1/device/pp_dpm_sclk ``` ### Boot Slow / Black Screen During Boot @@ -386,7 +388,7 @@ vulkaninfo | grep deviceName # Should show: AMD Radeon Graphics (RADV GFX1013) # Check GPU frequency -cat /sys/class/drm/card0/device/pp_dpm_sclk +cat /sys/class/drm/card1/device/pp_dpm_sclk # Check temperatures sensors @@ -406,7 +408,7 @@ vulkaninfo | grep deviceName nvtop # Check governor scaling -watch -n 1 cat /sys/class/drm/card0/device/pp_dpm_sclk +watch -n 1 cat /sys/class/drm/card1/device/pp_dpm_sclk ``` --- @@ -421,7 +423,7 @@ ujust update systemctl status cyan-skillfish-governor-tt # Check GPU frequency -cat /sys/class/drm/card0/device/pp_dpm_sclk +cat /sys/class/drm/card1/device/pp_dpm_sclk # Check temps sensors diff --git a/docs/linux/cachyos.md b/docs/linux/cachyos.md index 7ff7ee9..78af7c7 100644 --- a/docs/linux/cachyos.md +++ b/docs/linux/cachyos.md @@ -183,7 +183,7 @@ sudo systemctl enable --now oberon-governor.service **Verify it's working:** ```bash -cat /sys/class/drm/card0/device/pp_dpm_sclk +cat /sys/class/drm/card1/device/pp_dpm_sclk # Should show multiple frequencies, * moves based on load # Note: Your GPU may be card1 instead - check /sys/class/drm/ if card0 doesn't work ``` @@ -195,17 +195,24 @@ cat /sys/class/drm/card0/device/pp_dpm_sclk ```bash # Install lm_sensors sudo pacman -S lm_sensors +``` -# Load nct6683 sensor module (requires force=true) +For **read-only monitoring** (temperatures, voltages, fan speeds): + +```bash echo 'nct6683' | sudo tee /etc/modules-load.d/nct6683.conf echo 'options nct6683 force=true' | sudo tee /etc/modprobe.d/sensors.conf - -# Rebuild initramfs sudo mkinitcpio -P sudo reboot +``` -# Verify +For **PWM fan control**, use the `nct6687` module instead — see the [Sensors Guide](../system/sensors.md) for full instructions. + +Verify: + +```bash sensors +# Should show nct6686-isa-0a20 with temperatures and fan speeds ``` --- @@ -345,7 +352,7 @@ vulkaninfo | grep deviceName # Expected: AMD Radeon Graphics (RADV GFX1013) systemctl status cyan-skillfish-governor-tt # Expected: active (running) # 5. Check GPU frequency -cat /sys/class/drm/card0/device/pp_dpm_sclk # Expected: Multiple frequencies +cat /sys/class/drm/card1/device/pp_dpm_sclk # Expected: Multiple frequencies # 6. Check sensors sensors # Expected: nct6686-isa-0a20, GPU temp, fan speeds diff --git a/docs/linux/debian.md b/docs/linux/debian.md index 7ec44a8..e647268 100644 --- a/docs/linux/debian.md +++ b/docs/linux/debian.md @@ -254,7 +254,7 @@ Verify: ```bash systemctl status oberon-governor -cat /sys/class/drm/card0/device/pp_dpm_sclk +cat /sys/class/drm/card1/device/pp_dpm_sclk ``` --- @@ -264,16 +264,23 @@ cat /sys/class/drm/card0/device/pp_dpm_sclk ```bash # Install lm-sensors sudo apt install lm-sensors +``` -# Load nct6683 sensor module (requires force=true) +For **read-only monitoring** (temperatures, voltages, fan speeds): + +```bash echo 'nct6683' | sudo tee /etc/modules-load.d/nct6683.conf echo 'options nct6683 force=true' | sudo tee /etc/modprobe.d/sensors.conf - -# Load module now sudo modprobe nct6683 force=true +``` -# Verify +For **PWM fan control**, use the `nct6687` module instead — see the [Sensors Guide](../system/sensors.md) for full instructions. + +Verify: + +```bash sensors +# Should show nct6686-isa-0a20 with temperatures and fan speeds ``` --- @@ -368,7 +375,7 @@ uname -r systemctl status cyan-skillfish-governor-smu # or oberon-governor # GPU frequency -cat /sys/class/drm/card0/device/pp_dpm_sclk +cat /sys/class/drm/card1/device/pp_dpm_sclk # Should show multiple frequencies with * moving ``` @@ -556,7 +563,7 @@ vulkaninfo | grep deviceName systemctl status cyan-skillfish-governor-smu # or oberon-governor # Check GPU frequency -cat /sys/class/drm/card0/device/pp_dpm_sclk +cat /sys/class/drm/card1/device/pp_dpm_sclk # Check temps sensors diff --git a/docs/linux/fedora.md b/docs/linux/fedora.md index 7de4d89..cd88639 100644 --- a/docs/linux/fedora.md +++ b/docs/linux/fedora.md @@ -145,15 +145,16 @@ sudo systemctl enable --now oberon-governor.service ### Step 5: Configure Sensors +For **read-only monitoring** (temperatures, voltages, fan speeds): + ```bash -# Load sensor module echo 'nct6683' | sudo tee /etc/modules-load.d/99-sensors.conf echo 'options nct6683 force=true' | sudo tee /etc/modprobe.d/options-sensors.conf - -# Regenerate initramfs sudo dracut --regenerate-all --force ``` +For **PWM fan control** (recommended), use `nct6687` instead — see the [Sensors Guide](../system/sensors.md) for full setup instructions. + ### Step 6: Remove nomodeset and Configure GRUB ```bash @@ -296,7 +297,7 @@ sudo systemctl restart cyan-skillfish-governor-tt mangohud steam # Check GPU frequency scaling -cat /sys/class/drm/card0/device/pp_dpm_sclk +cat /sys/class/drm/card1/device/pp_dpm_sclk # Should show frequencies changing under load ``` @@ -330,12 +331,14 @@ sudo dnf install kernel-6.18.18-200 ## Performance Tuning -### Enable Performance Governor +### CPU Frequency Scaling -```bash -# For better gaming performance -sudo cpupower frequency-set -g performance -``` +!!!info "Requires ACPI Fix" + CPU frequency scaling is not available by default on BC-250. Install the [bc250-acpi-fix](https://github.com/bc250-collective/bc250-acpi-fix) SSDT-PST table to enable cpufreq with 8 P-states (800-3200 MHz). With the fix, `schedutil` governor is recommended: + + ```bash + echo schedutil | sudo tee /sys/devices/system/cpu/cpu*/cpufreq/scaling_governor + ``` ### Optimize for Low Latency diff --git a/docs/linux/kernel.md b/docs/linux/kernel.md index 63a5315..df6a79c 100644 --- a/docs/linux/kernel.md +++ b/docs/linux/kernel.md @@ -63,16 +63,16 @@ Add these to GRUB configuration: sudo nano /etc/default/grub # Add to GRUB_CMDLINE_LINUX_DEFAULT: -GRUB_CMDLINE_LINUX_DEFAULT="quiet amdgpu.sg_display=0" +GRUB_CMDLINE_LINUX_DEFAULT="quiet" ``` **Parameter Explanations:** - `quiet` - Reduces boot messages (optional) -- `amdgpu.sg_display=0` - **Required for kernels < 6.10** - disables scatter-gather display +- `amdgpu.sg_display=0` - **Only needed for kernels < 6.10** (disables scatter-gather display). On kernel 6.10+ (including current Fedora 43 kernel 6.19.x), this parameter is not needed and can be omitted. !!!info "amdgpu.sg_display" - This parameter is only needed for kernels older than 6.10. If using 6.11+, it doesn't hurt to leave it, but it's not strictly necessary. + This parameter is only required for kernels older than 6.10. Modern distros running 6.16+ do not need it. The modprobe option `options amdgpu sg_display=0` achieves the same thing and is still safe to keep as a fallback. ### Performance Parameters (Optional) @@ -92,7 +92,8 @@ Disabling CPU security mitigations provides a noticeable performance boost for g sudo nano /etc/default/grub # Add mitigations=off to GRUB_CMDLINE_LINUX_DEFAULT: -GRUB_CMDLINE_LINUX_DEFAULT="quiet amdgpu.sg_display=0 mitigations=off" +GRUB_CMDLINE_LINUX_DEFAULT="quiet mitigations=off" +# Note: amdgpu.sg_display=0 only needed for kernels < 6.10 # Update GRUB sudo grub2-mkconfig -o /boot/grub2/grub.cfg # Fedora @@ -456,7 +457,7 @@ glxinfo | grep "OpenGL renderer" | 6.17.8-6.17.10 | ❌ **Broken** | GPU driver broken | | 6.17.11+ | ✅ **Recommended** | Kernel fix applied | | 6.18.x LTS | ✅ **Best** | 6.18.18 is current LTS, 5-10% faster than 6.17 | -| 6.19.x (6.19.8 stable) | ✅ **Good** | Current stable, works well | +| 6.19.x | ✅ **Good** | Current stable (6.19.8 confirmed working on Fedora 43, March 2026) | | 7.0-rc | 🔬 **Mainline** | Not tested on BC-250, do not use in production | ## See Also diff --git a/docs/linux/mesa.md b/docs/linux/mesa.md index d66357a..e2c996f 100644 --- a/docs/linux/mesa.md +++ b/docs/linux/mesa.md @@ -14,12 +14,12 @@ Mesa provides the OpenGL and Vulkan drivers (RADV) required for BC-250 GPU suppo ### Recommended Version -**Mesa 25.2.4+ recommended for stability** +**Mesa 25.3.x+ recommended for stability** -- Bug fixes and performance improvements over 25.1 -- Better compatibility -- Mesa 25.2.4 confirmed working on Bazzite (Feb 2026) -- Mesa 25.1.3+ is minimum, but 25.2.x is the validated stable target +- Bug fixes and performance improvements over earlier versions +- Better compatibility and performance +- Mesa 25.3.6 confirmed working on Fedora 43 (March 2026) +- Mesa 25.1.3+ is minimum, but 25.3.x is the current validated stable target !!!info "Mesa and Governor Independence" The cyan-skillfish-governor tool works independently of Mesa version and kernel version. Mesa 25.1+ is specifically required for GPU 3D acceleration (OpenGL/Vulkan), not for power management or fan control. These are separate concerns. @@ -455,7 +455,8 @@ sudo dnf versionlock add mesa\* | 25.1.0 | ✅ Yes | First official support | | 25.1.3+ | ✅ Minimum | Stable, bug fixes | | 25.1.5+ | ✅ Good | Improvements over 25.1.3 | -| 25.2.4+ | ✅ **Recommended** | Current stable (Feb 2026) | +| 25.2.x | ✅ Good | Stable, Feb 2026 | +| 25.3.x | ✅ **Recommended** | Current stable (March 2026, e.g. 25.3.6 on Fedora 43) | | 26.0 | ✅ Latest | Available on Debian sid/Ubuntu 26.04 daily | ## See Also diff --git a/docs/reference/quick-reference.md b/docs/reference/quick-reference.md index aa71b3c..a3a17d4 100644 --- a/docs/reference/quick-reference.md +++ b/docs/reference/quick-reference.md @@ -51,13 +51,13 @@ Fast answers to common questions. For detailed information, see the full documen ### Kernel Parameters ```bash -# Required in /etc/default/grub GRUB_CMDLINE_LINUX_DEFAULT: +# Standard in /etc/default/grub GRUB_CMDLINE_LINUX_DEFAULT: quiet -# Optional performance boost: +# Optional performance boost (+18 FPS in some games): mitigations=off -# For older kernels <6.10 only: +# For older kernels < 6.10 only (not needed on 6.10+): amdgpu.sg_display=0 ``` @@ -117,8 +117,8 @@ amdgpu.sg_display=0 | Component | Minimum | Recommended | |-----------|---------|-------------| -| Mesa | 25.1.0 | 25.2.4+ | -| Kernel | 6.12.x | 6.18.18 LTS or 6.17.11+ | +| Mesa | 25.1.0 | 25.3.x+ (25.3.6 on Fedora 43) | +| Kernel | 6.12.x | 6.18.18 LTS or 6.19.x stable | | Governor | Any | cyan-skillfish-governor-tt or -smu | [Linux setup guide →](../linux/distributions.md) @@ -202,8 +202,11 @@ sudo systemctl restart cyan-skillfish-governor-tt ### Check GPU Frequency +!!!note "GPU Card Number" + The BC-250 GPU is typically `card1` (not `card0`). Verify with: `ls /sys/class/drm/ | grep "^card"`. All sysfs paths in this documentation use `card1`. + ```bash -cat /sys/class/drm/card0/device/pp_dpm_sclk +cat /sys/class/drm/card1/device/pp_dpm_sclk # Should show multiple frequencies, current one marked with * ``` @@ -227,7 +230,7 @@ vulkaninfo | grep deviceName # Check RAM/VRAM split free -h -cat /sys/class/drm/card0/device/mem_info_vram_total +cat /sys/class/drm/card1/device/mem_info_vram_total # Check temperatures sensors @@ -281,9 +284,9 @@ For most games: RADV_DEBUG=nohiz %command% ``` -For games with visual glitches: +For games with visual glitches (Mesa < 25.1 only — `nocompute` is automatic on 25.1+): ``` -RADV_DEBUG=nohiz,nocompute %command% +RADV_DEBUG=nohiz %command% ``` ### Expected FPS (1080p) @@ -359,7 +362,7 @@ RADV_DEBUG=nohiz,nocompute %command% 4. **Avoid kernel 6.15.0-6.15.6, 6.17.8-6.17.10** (GPU driver fails) 5. **700mV minimum voltage** (GPU locks to 1500MHz below this) 6. **Active DP-HDMI adapters break audio** - 7. **ACPI fix is essential** — required for C-State support and power management ([bc250-acpi-fix](https://github.com/bc250-collective/bc250-acpi-fix)) + 7. **ACPI fix recommended** — SSDT tables enable CPU C-States (idle power) and P-States (frequency scaling 800-3200 MHz). Confirmed working on kernel 6.19.8. ([bc250-acpi-fix](https://github.com/bc250-collective/bc250-acpi-fix)) 8. **No HW video encode/decode** — VCN firmware blocked by Sony, software decoding only 9. **Do NOT use Smokeless_UMAF** — may cause permanent damage to the board diff --git a/docs/system/governor.md b/docs/system/governor.md index 8bf0a3c..50a204c 100644 --- a/docs/system/governor.md +++ b/docs/system/governor.md @@ -24,8 +24,13 @@ The GPU governor is essential for BC-250 performance, enabling dynamic frequency !!!success "Essential for Performance" The governor is not optional for good gaming performance. Without it, you're stuck at 1500 MHz. -!!!danger "ACPI Fix is Essential" - The BC-250 ACPI fix is required for proper C-State support and power management. Without it, you won't get proper idle power states. Install from [bc250-collective/bc250-acpi-fix](https://github.com/bc250-collective/bc250-acpi-fix). +!!!success "ACPI Fix — Recommended" + The [bc250-collective/bc250-acpi-fix](https://github.com/bc250-collective/bc250-acpi-fix) provides SSDT tables for CPU C-State and P-State support: + + - **SSDT-CST (C-States):** Enables C1/C2/C3 CPU idle states. Without this, CPU cores never enter sleep at idle. + - **SSDT-PST (P-States):** Enables CPU frequency scaling from 800 MHz to 3200 MHz via standard Linux cpufreq governors (schedutil, powersave, etc.). Confirmed working on kernel 6.19.8. + + Both tables are loaded via initrd override — see the [ACPI fix installation section](#acpi-fix-installation) below. Not required for GPU governor operation, but significantly improves CPU idle power and enables CPU frequency scaling. !!!danger "Minimum Voltage: 700mV" Never set minimum GPU voltage below 700mV. This locks the GPU to 1500MHz and defeats the purpose of the governor. @@ -337,7 +342,7 @@ systemctl status cyan-skillfish-governor-tt ```bash # View current GPU frequencies -cat /sys/class/drm/card0/device/pp_dpm_sclk +cat /sys/class/drm/card1/device/pp_dpm_sclk # Example output: # 0: 1000Mhz @@ -369,7 +374,7 @@ Shows real-time GPU frequency, voltage, and temperature. **Command Line:** ```bash # Watch frequency changes -watch -n 1 'cat /sys/class/drm/card0/device/pp_dpm_sclk' +watch -n 1 'cat /sys/class/drm/card1/device/pp_dpm_sclk' ``` **MangoHud (In-Game Overlay):** @@ -645,6 +650,77 @@ sudo systemctl restart cyan-skillfish-governor-tt !!!warning "Overclocking Risks" Overclocking can cause instability, crashes, and potentially hardware damage. Always monitor temperatures and test thoroughly. +## ACPI Fix Installation + +The [bc250-acpi-fix](https://github.com/bc250-collective/bc250-acpi-fix) provides SSDT tables that enable CPU C-States (idle sleep) and P-States (frequency scaling). Both are confirmed working on kernel 6.19.8. + +### What It Enables + +- **C-States (SSDT-CST):** CPU cores enter C1/C2/C3 sleep states at idle, reducing power consumption +- **P-States (SSDT-PST):** CPU frequency scales from 800 MHz to 3200 MHz using standard Linux cpufreq governors (schedutil, powersave, performance, etc.) + +### Installation + +**Step 1: Clone and build the initrd override** + +```bash +git clone https://github.com/bc250-collective/bc250-acpi-fix.git +cd bc250-acpi-fix + +# Create ACPI override cpio archive +mkdir -p kernel/firmware/acpi +cp SSDT-CST.aml SSDT-PST.aml kernel/firmware/acpi/ +find kernel | cpio -o -H newc > /tmp/acpi_override.cpio + +# Copy to /boot +sudo cp /tmp/acpi_override.cpio /boot/acpi_override.cpio +``` + +**Step 2: Add to boot loader** + +On Fedora (BLS entries): + +```bash +# Edit the BLS entry for your current kernel +sudo nano /boot/loader/entries/$(cat /etc/machine-id)-$(uname -r).conf + +# Prepend /acpi_override.cpio to the initrd line: +# Before: initrd /initramfs-6.19.8-200.fc43.x86_64.img +# After: initrd /acpi_override.cpio /initramfs-6.19.8-200.fc43.x86_64.img +``` + +On Arch/Debian (GRUB): + +```bash +# Add to /etc/default/grub: +GRUB_EARLY_INITRD_LINUX_CUSTOM="acpi_override.cpio" + +# Regenerate GRUB +sudo grub2-mkconfig -o /boot/grub2/grub.cfg # Fedora +sudo grub-mkconfig -o /boot/grub/grub.cfg # Arch +sudo update-grub # Debian +``` + +**Step 3: Reboot and verify** + +```bash +sudo reboot + +# After reboot, check C-states: +ls /sys/devices/system/cpu/cpu0/cpuidle/ +# Should show state0, state1, state2, state3 + +# Check P-states: +cat /sys/devices/system/cpu/cpu0/cpufreq/scaling_available_frequencies +# Should show: 3200000 2550000 2325000 1960000 1820000 1600000 1271000 800000 + +# Set recommended CPU governor: +echo schedutil | sudo tee /sys/devices/system/cpu/cpu*/cpufreq/scaling_governor +``` + +!!!warning "Kernel Update Note" + When you update to a new kernel, the BLS entry for the new kernel won't include the ACPI override. You'll need to edit the new entry or automate this with a kernel-install hook. + ## Community Resources - [NexGen3D SteamMachine Scripts](https://github.com/NexGen-3D-Printing/SteamMachine) — automated Bazzite setup (governor + zram + CPU mitigations) diff --git a/docs/system/power.md b/docs/system/power.md index b2d3b8d..66cd188 100644 --- a/docs/system/power.md +++ b/docs/system/power.md @@ -291,22 +291,19 @@ max_voltage = 950 # Reduced max voltage Result: 60-70W idle possible -**Step 3: CPU Power Management (Advanced)** +**Step 3: CPU Power Management** -Enable CPU idle states: +!!!info "CPU Frequency Scaling — Requires ACPI Fix" + By default, the BC-250 does not expose CPU frequency scaling (no cpufreq interface). However, installing the [bc250-acpi-fix](https://github.com/bc250-collective/bc250-acpi-fix) SSDT-PST table enables standard Linux cpufreq with 8 P-states from 800 MHz to 3200 MHz. With the ACPI fix installed: -```bash -# Check current CPU governor -cat /sys/devices/system/cpu/cpu0/cpufreq/scaling_governor + ```bash + # Set CPU governor (schedutil recommended for balanced power/performance) + echo schedutil | sudo tee /sys/devices/system/cpu/cpu*/cpufreq/scaling_governor -# Set to powersave or schedutil -echo "powersave" | sudo tee /sys/devices/system/cpu/cpu*/cpufreq/scaling_governor + # Available: conservative, ondemand, userspace, powersave, performance, schedutil + ``` -# Check idle states -sudo cpupower idle-info -``` - -Result: Additional 2-3W savings (65W idle achievable) + Without the ACPI fix, `cpupower frequency-set` will not work. **Best Case Scenario:** diff --git a/docs/system/sensors.md b/docs/system/sensors.md index fe53341..9cc70b8 100644 --- a/docs/system/sensors.md +++ b/docs/system/sensors.md @@ -8,7 +8,9 @@ Guide to monitoring temperatures, fan speeds, voltages, and performance metrics The BC-250 includes multiple hardware monitoring components: -- **Nuvoton NCT6686 SuperIO chip** - Motherboard sensors (temperatures, voltages, fan speeds). Linux driver: `nct6683` (with `force=true`) +- **Nuvoton NCT6686D SuperIO chip** - Motherboard sensors (temperatures, voltages, fan speeds) + - For **read-only monitoring**: use the in-kernel `nct6683` driver (with `force=true`) + - For **read+write PWM fan control**: use the out-of-tree `nct6687` driver ([Fred78290/nct6687d](https://github.com/Fred78290/nct6687d)) with `force=true` - **AMD GPU sensors** - GPU temperature, voltage, power consumption - **k10temp** - CPU temperature monitoring - **NVMe sensors** - M.2 drive temperature @@ -17,64 +19,73 @@ Proper monitoring is essential to ensure your BC-250 stays within safe operating --- -## NCT6683 SuperIO Driver Setup +## SuperIO Driver Setup ### About the SuperIO Chip -The BC-250 uses a Nuvoton NCT6686 Super I/O chip for hardware monitoring. The Linux kernel driver for this chip is `nct6683` (not `nct6686` — there is no kernel module by that name). The `force=true` option is required because the chip isn't auto-detected. +The BC-250 uses a **Nuvoton NCT6686D** Super I/O chip for hardware monitoring. There are two Linux driver options: + +- **`nct6683`** (in-kernel) — Read-only access to sensors (temperatures, voltages, fan speeds). Cannot control fan PWM. +- **`nct6687`** (out-of-tree, [Fred78290/nct6687d](https://github.com/Fred78290/nct6687d)) — Full read+write access including PWM fan control. **Required if you want software fan control.** + +Both require `force=true` because the chip isn't auto-detected. Regardless of which module is loaded, sensors will report as `nct6686-isa-0a20`. The chip provides: -- Multiple temperature sensors (thermistors, AMD TSI) -- Voltage rails monitoring -- Fan speed monitoring (up to 5 fan headers) -- Fan control capabilities +- Multiple temperature sensors (CPU, System, VRM MOS, and more) +- Voltage rails monitoring (+12V, +5V, +3.3V, CPU Soc, CPU Vcore, etc.) +- Fan speed monitoring (up to 8 fan headers) +- PWM fan control (only with `nct6687` module) ### Loading the Sensor Module By default, Linux may not automatically load the driver for this chip. You need to manually enable it. -#### Step 1: Load the Module Temporarily +#### Option A: Read-Only Sensors (nct6683) -Test if the module loads correctly: +Use this if you only need temperature/voltage/fan speed monitoring without PWM fan control. + +**Step 1:** Test if the module loads correctly: ```bash sudo modprobe nct6683 force=true ``` -Verify it loaded: +**Step 2:** Make it permanent: ```bash -lsmod | grep nct6683 +echo 'options nct6683 force=true' | sudo tee /etc/modprobe.d/sensors.conf +echo 'nct6683' | sudo tee /etc/modules-load.d/99-sensors.conf ``` -#### Step 2: Make it Permanent +#### Option B: Full PWM Fan Control (nct6687 — Recommended) -Create a modprobe configuration file: +Use this if you want software fan speed control (CoolerControl, manual PWM, etc.). + +**Step 1:** Build and install the nct6687 module: ```bash -sudo nano /etc/modprobe.d/sensors.conf +git clone https://github.com/Fred78290/nct6687d.git +cd nct6687d +make +sudo make install ``` -Add the following line: - -``` -options nct6683 force=true -``` - -Create a modules load file: +**Step 2:** Configure modprobe to use nct6687 and blacklist nct6683: ```bash -sudo nano /etc/modules-load.d/99-sensors.conf +# Blacklist nct6683 (conflicts with nct6687) +echo 'blacklist nct6683' | sudo tee /etc/modprobe.d/sensors.conf +echo 'options nct6687 force=true' | sudo tee -a /etc/modprobe.d/sensors.conf + +# Load nct6687 on boot +echo 'nct6687' | sudo tee /etc/modules-load.d/99-sensors.conf ``` -Add: +!!!warning "Choose One Module" + Do not load both `nct6683` and `nct6687` simultaneously — they conflict. Blacklist whichever you're not using. -``` -nct6683 -``` - -#### Step 3: Regenerate Initramfs +#### Regenerate Initramfs **On Fedora/Bazzite:** ```bash @@ -97,6 +108,9 @@ Reboot for changes to take effect: sudo reboot ``` +!!!info "PWM Values Reset on Reboot" + The `nct6687` module does not persist PWM values across reboots. You'll need CoolerControl, a systemd service, or a udev rule to set your desired fan speed at boot. + --- ## Using lm-sensors @@ -138,52 +152,62 @@ sensors ### Expected Output -Here's what you should see on a properly configured BC-250: +The output varies depending on which Super I/O module you loaded. -```bash +**With `nct6687` module (recommended — enables PWM fan control):** + +``` amdgpu-pci-0100 Adapter: PCI adapter -vddgfx: 906.00 mV -vddnb: 824.00 mV -edge: +63.0°C -PPT: 55.12 W (avg = 0.00 W) +vddgfx: 699.00 mV +vddnb: 1.10 V +edge: +46.0°C +PPT: 38.01 W (avg = 40.25 W) nvme-pci-0300 Adapter: PCI adapter -Composite: +51.9°C (low = -0.1°C, high = +79.8°C) - (crit = +81.8°C) -Sensor 1: +51.9°C (low = -273.1°C, high = +65261.8°C) +Composite: +38.9°C (low = -0.1°C, high = +82.8°C) + (crit = +84.8°C) +Sensor 1: +38.9°C (low = -273.1°C, high = +65261.8°C) k10temp-pci-00c3 Adapter: PCI adapter -Tctl: +51.5°C +Tctl: +47.9°C +nct6686-isa-0a20 +Adapter: ISA adapter ++12V: 0.00 V (min = +0.00 V, max = +0.00 V) ++5V: 0.00 V (min = +0.00 V, max = +0.00 V) ++3.3V: 3.36 V (min = +0.00 V, max = +3.36 V) +CPU Soc: 0.00 V (min = +0.00 V, max = +0.00 V) +CPU Vcore: 0.00 V (min = +0.00 V, max = +0.00 V) +CPU Fan: 0 RPM (min = 0 RPM, max = 0 RPM) +Pump Fan: 1907 RPM (min = 1866 RPM, max = 1907 RPM) +System Fan #1: 0 RPM (min = 0 RPM, max = 0 RPM) +... +CPU: +47.0°C (low = +35.0°C, high = +47.0°C) +System: +42.5°C (low = +20.0°C, high = +42.5°C) +VRM MOS: +42.0°C (low = +20.0°C, high = +42.0°C) +``` + +**With `nct6683` module (read-only, no fan control):** + +``` nct6686-isa-0a20 Adapter: ISA adapter VIN0: 832.00 mV (min = +0.00 V, max = +0.00 V) -VIN1: 1.02 V (min = +0.00 V, max = +0.00 V) -VIN2: 976.00 mV (min = +0.00 V, max = +0.00 V) -VIN6: 1.39 V (min = +0.00 V, max = +0.00 V) -VIN7: 928.00 mV (min = +0.00 V, max = +0.00 V) -VIN16: 896.00 mV (min = +0.00 V, max = +0.00 V) +... fan1: 0 RPM (min = 0 RPM) fan2: 1372 RPM (min = 0 RPM) -fan3: 0 RPM (min = 0 RPM) -fan4: 0 RPM (min = 0 RPM) -fan5: 0 RPM (min = 0 RPM) -AMD TSI Addr 98h: +63.0°C (low = +0.0°C) - (high = +0.0°C, hyst = +0.0°C) - (crit = +0.0°C) sensor = AMD AMDSI -Thermistor 14: +57.5°C (low = +0.0°C) - (high = +0.0°C, hyst = +0.0°C) - (crit = +0.0°C) sensor = thermistor -Thermistor 15: +57.0°C (low = +0.0°C) - (high = +0.0°C, hyst = +0.0°C) - (crit = +0.0°C) sensor = thermistor -intrusion0: OK -beep_enable: disabled +... +AMD TSI Addr 98h: +63.0°C ... sensor = AMD AMDSI +Thermistor 14: +57.5°C ... sensor = thermistor +Thermistor 15: +57.0°C ... sensor = thermistor ``` +!!!info "Sensor Names Differ By Module" + Both modules report as `nct6686-isa-0a20`, but the `nct6687` module provides named labels (CPU Fan, Pump Fan, CPU Soc, etc.) while `nct6683` shows generic names (VIN0, fan1, Thermistor 14, etc.). + ### Understanding the Sensors **GPU Sensors (amdgpu-pci-0100):** @@ -196,9 +220,18 @@ beep_enable: disabled - `Tctl` - CPU temperature (Zen 2 control temperature) **SuperIO Sensors (nct6686-isa-0a20):** -- `VIN0-VIN16` - Various voltage rails + +With `nct6687` module: + +- `+12V`, `+5V`, `+3.3V`, `CPU Soc`, `CPU Vcore` etc. - Named voltage rails +- `CPU Fan`, `Pump Fan`, `System Fan #1-6` - Named fan speed monitoring (RPM), up to 8 channels +- `CPU`, `System`, `VRM MOS` - Named temperature sensors + +With `nct6683` module: + +- `VIN0-VIN16` - Voltage rails (generic names) - `fan1-fan5` - Fan speed monitoring (RPM) -- `AMD TSI Addr 98h` - AMD Temperature Sensor Interface (alternative CPU temp reading) +- `AMD TSI Addr 98h` - AMD Temperature Sensor Interface (CPU temp) - `Thermistor 14/15` - Board temperature sensors ### Watch Sensors in Real-Time @@ -220,7 +253,7 @@ This updates every second. Press `Ctrl+C` to exit. Read GPU temperature directly: ```bash -cat /sys/class/drm/card0/device/hwmon/hwmon*/temp1_input +cat /sys/class/drm/card1/device/hwmon/hwmon*/temp1_input ``` This returns temperature in millidegrees Celsius (e.g., `63000` = 63°C) @@ -228,7 +261,7 @@ This returns temperature in millidegrees Celsius (e.g., `63000` = 63°C) Convert to Celsius: ```bash -awk '{print $1/1000 "°C"}' /sys/class/drm/card0/device/hwmon/hwmon*/temp1_input +awk '{print $1/1000 "°C"}' /sys/class/drm/card1/device/hwmon/hwmon*/temp1_input ``` ### GPU Power Consumption @@ -236,13 +269,13 @@ awk '{print $1/1000 "°C"}' /sys/class/drm/card0/device/hwmon/hwmon*/temp1_input Read current GPU power draw: ```bash -cat /sys/class/drm/card0/device/hwmon/hwmon*/power1_average +cat /sys/class/drm/card1/device/hwmon/hwmon*/power1_average ``` Returns power in microwatts. Convert to watts: ```bash -awk '{print $1/1000000 "W"}' /sys/class/drm/card0/device/hwmon/hwmon*/power1_average +awk '{print $1/1000000 "W"}' /sys/class/drm/card1/device/hwmon/hwmon*/power1_average ``` ### GPU Clock Speeds @@ -250,7 +283,7 @@ awk '{print $1/1000000 "W"}' /sys/class/drm/card0/device/hwmon/hwmon*/power1_ave Check current GPU frequency: ```bash -cat /sys/class/drm/card0/device/pp_dpm_sclk +cat /sys/class/drm/card1/device/pp_dpm_sclk ``` Example output: @@ -276,10 +309,12 @@ sensors | grep -A 5 "fan" ### Fan Headers on BC-250 -The board has **5 fan headers** (shown as fan1-fan5 in sensors): +The board has two physical fan headers: **J1** (primary) and **J4003** (secondary). -- Usually only **fan2** is used for the main cooling fan -- Other headers may show 0 RPM if not connected +The Super I/O chip exposes up to 8 fan channels in software (fan1-fan8), but only the connected headers will show RPM readings: + +- The main cooling fan typically reads as **Pump Fan** (fan2 in `nct6687` output, or fan2 in `nct6683` output) +- Other channels show 0 RPM if not connected ### BIOS Fan Control Settings @@ -293,6 +328,9 @@ The BC-250 BIOS has three fan control modes: ### Manual Fan Control via PWM +!!!warning "Requires nct6687 Module" + PWM fan control requires the `nct6687` module. The in-kernel `nct6683` module provides read-only access and cannot set PWM values. + Check available PWM controls: ```bash @@ -302,14 +340,15 @@ ls /sys/class/hwmon/hwmon*/pwm* Set fan speed manually (value 0-255, where 255 = 100%): ```bash -echo 200 | sudo tee /sys/class/hwmon/hwmon*/pwm2 +# Find the hwmon for nct6686 +HWMON=$(grep -l nct6686 /sys/class/hwmon/hwmon*/name | head -1 | xargs dirname) + +# Set PWM (0=off, 127=50%, 255=100%) +echo 80 | sudo tee $HWMON/pwm2 ``` -Enable manual PWM control: - -```bash -echo 1 | sudo tee /sys/class/hwmon/hwmon*/pwm2_enable -``` +!!!info "PWM Resets on Reboot" + PWM values set manually are not persistent across reboots. Use CoolerControl or a systemd service to set fan speed at boot. --- @@ -590,9 +629,9 @@ From Discord testing: sensors --version ``` -### NCT6683 Module Won't Load +### Sensor Module Won't Load -**Problem:** `modprobe nct6683 force=true` fails or doesn't work. +**Problem:** `modprobe nct6683 force=true` or `modprobe nct6687 force=true` fails. **Solutions:** @@ -601,21 +640,31 @@ From Discord testing: uname -r ``` -2. Verify chip detection: +2. Check dmesg for errors: ```bash - sudo sensors-detect + dmesg | grep -i nct ``` -3. Check dmesg for errors: - ```bash - dmesg | grep nct6683 - ``` - -4. If `nct6683` doesn't provide PWM fan control, try `nct6687` (provides read-write PWM on some kernels): +3. Ensure the modules are not conflicting — only load one at a time: ```bash + # Check what's loaded + lsmod | grep nct + + # If nct6683 is loaded but you want nct6687: + sudo rmmod nct6683 sudo modprobe nct6687 force=true ``` +4. For nct6687, you may need to build from source if it's not packaged for your distro: + ```bash + git clone https://github.com/Fred78290/nct6687d.git + cd nct6687d && make && sudo make install + sudo modprobe nct6687 force=true + ``` + +!!!info "nct6683 vs nct6687" + `nct6683` is read-only (temperature, voltage, fan speed monitoring). `nct6687` provides full read+write access including PWM fan control. For fan curves and manual speed control, you need `nct6687`. + ### GPU Temperature Not Showing **Problem:** No GPU temperature in `sensors` output. @@ -634,7 +683,7 @@ From Discord testing: 3. Check amdgpu sysfs directly: ```bash - cat /sys/class/drm/card0/device/hwmon/hwmon*/temp1_input + cat /sys/class/drm/card1/device/hwmon/hwmon*/temp1_input ``` 4. Ensure Mesa 25.1+ is installed: @@ -692,9 +741,9 @@ echo "Timestamp,GPU_Temp,CPU_Temp,GPU_Power" > "$LOGFILE" while true; do TIMESTAMP=$(date +%s) - GPU_TEMP=$(cat /sys/class/drm/card0/device/hwmon/hwmon*/temp1_input 2>/dev/null | awk '{print $1/1000}') + GPU_TEMP=$(cat /sys/class/drm/card1/device/hwmon/hwmon*/temp1_input 2>/dev/null | awk '{print $1/1000}') CPU_TEMP=$(sensors k10temp-pci-00c3 -u 2>/dev/null | grep temp1_input | awk '{print $2}') - GPU_POWER=$(cat /sys/class/drm/card0/device/hwmon/hwmon*/power1_average 2>/dev/null | awk '{print $1/1000000}') + GPU_POWER=$(cat /sys/class/drm/card1/device/hwmon/hwmon*/power1_average 2>/dev/null | awk '{print $1/1000000}') echo "$TIMESTAMP,$GPU_TEMP,$CPU_TEMP,$GPU_POWER" >> "$LOGFILE" sleep 5 @@ -722,7 +771,7 @@ Save as `~/temp-alert.sh`: THRESHOLD=85 while true; do - GPU_TEMP=$(cat /sys/class/drm/card0/device/hwmon/hwmon*/temp1_input 2>/dev/null | awk '{print $1/1000}') + GPU_TEMP=$(cat /sys/class/drm/card1/device/hwmon/hwmon*/temp1_input 2>/dev/null | awk '{print $1/1000}') if (( $(echo "$GPU_TEMP > $THRESHOLD" | bc -l) )); then notify-send -u critical "BC-250 Temperature Alert" "GPU temp: ${GPU_TEMP}°C (threshold: ${THRESHOLD}°C)" @@ -746,13 +795,13 @@ sensors watch -n 1 sensors # GPU temperature only -cat /sys/class/drm/card0/device/hwmon/hwmon*/temp1_input | awk '{print $1/1000 "°C"}' +cat /sys/class/drm/card1/device/hwmon/hwmon*/temp1_input | awk '{print $1/1000 "°C"}' # GPU power consumption -cat /sys/class/drm/card0/device/hwmon/hwmon*/power1_average | awk '{print $1/1000000 "W"}' +cat /sys/class/drm/card1/device/hwmon/hwmon*/power1_average | awk '{print $1/1000000 "W"}' # GPU clock speed -cat /sys/class/drm/card0/device/pp_dpm_sclk +cat /sys/class/drm/card1/device/pp_dpm_sclk # Launch nvtop nvtop diff --git a/docs/troubleshooting/boot.md b/docs/troubleshooting/boot.md index cd3cec7..d72b78e 100644 --- a/docs/troubleshooting/boot.md +++ b/docs/troubleshooting/boot.md @@ -760,7 +760,7 @@ xrandr --listproviders # DRM devices ls -la /sys/class/drm/ -# Should show card0, card0-DP-1 +# Should show card1, card1-DP-1 # Current display mode xrandr diff --git a/docs/troubleshooting/display.md b/docs/troubleshooting/display.md index 770ec24..a5b2d82 100644 --- a/docs/troubleshooting/display.md +++ b/docs/troubleshooting/display.md @@ -505,7 +505,7 @@ xrandr # Check DRM ls /sys/class/drm/ -# Should show card0, card0-DP-1, etc. +# Should show card1, card1-DP-1, etc. ``` ### Check GPU Initialization diff --git a/docs/troubleshooting/performance.md b/docs/troubleshooting/performance.md index 8bdef7d..718f233 100644 --- a/docs/troubleshooting/performance.md +++ b/docs/troubleshooting/performance.md @@ -14,7 +14,7 @@ sensors # Check GPU utilization and frequency watch -n 1 cat /sys/devices/pci0000:00/0000:00:08.1/0000:01:00.0/gpu_busy_percent -watch -n 1 cat /sys/class/drm/card0/device/pp_dmu_clock +watch -n 1 cat /sys/class/drm/card1/device/pp_dpm_mclk # Check if GPU driver is loaded lspci -k | grep -A 3 VGA @@ -147,7 +147,7 @@ Apply to kernel source and recompile, or use a tool like `dkms` or CachyOS kerne **Verification:** ```bash -cat /sys/class/drm/card0/device/pp_od_clk_voltage +cat /sys/class/drm/card1/device/pp_od_clk_voltage # Should show range up to 2300MHz or higher ``` @@ -229,7 +229,7 @@ dmesg | grep amdgpu Common fix - ensure these kernel parameters are set (and `nomodeset` is removed): ```bash -# Edit /etc/default/grub +# Edit /etc/default/grub (sg_display=0 only needed for kernels < 6.10) GRUB_CMDLINE_LINUX_DEFAULT="amdgpu.sg_display=0" # Regenerate grub config @@ -662,7 +662,7 @@ Use this checklist to verify your system is properly configured: **Quick test:** ```bash # This should show GPU scaling dynamically -watch -n 0.5 'cat /sys/class/drm/card0/device/pp_dmu_clock && cat /sys/devices/pci0000:00/0000:00:08.1/0000:01:00.0/gpu_busy_percent' +watch -n 0.5 'cat /sys/class/drm/card1/device/pp_dpm_mclk && cat /sys/devices/pci0000:00/0000:00:08.1/0000:01:00.0/gpu_busy_percent' # Run a game or benchmark # Frequency should scale from ~1000MHz idle to 2000+MHz under load diff --git a/docs/troubleshooting/stability.md b/docs/troubleshooting/stability.md index 9206c8a..5fc9b9e 100644 --- a/docs/troubleshooting/stability.md +++ b/docs/troubleshooting/stability.md @@ -648,7 +648,7 @@ watch -n 1 sensors **Terminal 2 - Frequencies and voltages**: ```bash -watch -n 1 'cat /sys/class/drm/card0/device/pp_od_clk_voltage' +watch -n 1 'cat /sys/class/drm/card1/device/pp_od_clk_voltage' ``` **Terminal 3 - Memory**: