#!/usr/bin/env bash # BIOS VRAM guidance + GTT verification set -euo pipefail SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" source "$SCRIPT_DIR/../../lib/common.sh" source "$SCRIPT_DIR/../../lib/detect.sh" source "$SCRIPT_DIR/../../lib/format.sh" log_header "VRAM / GTT Memory Optimization" vram_total="$(detect_vram_total)" gtt_total="$(detect_gtt_total)" vram_gib=$(echo "scale=1; $vram_total / 1073741824" | bc) gtt_gib=$(echo "scale=1; $gtt_total / 1073741824" | bc) log_info "Current memory allocation:" print_kv "VRAM (dedicated)" "${vram_gib} GiB" print_kv "GTT (dynamic)" "${gtt_gib} GiB" print_kv "System RAM (visible)" "$(echo "scale=1; $(detect_system_ram_kb) / 1048576" | bc) GiB" echo "" # ── Check if BIOS VRAM change is needed ────────────────── # Optimal: VRAM <= 1 GiB (0.5 GiB ideal), rest dynamically via GTT if (( vram_total > 1073741824 )); then log_warn "VRAM is ${vram_gib} GiB — this permanently locks memory away from the OS." log_info "AMD recommends 512 MB dedicated VRAM for Strix Halo." log_info "The GPU accesses additional memory dynamically via GTT (kernel params)." echo "" printf "${BOLD}BIOS Configuration Steps (HP ZBook Ultra G1a):${RESET}\n" echo "" echo " 1. Reboot the laptop" echo " 2. Press F10 repeatedly during boot to enter BIOS Setup" echo " 3. Navigate to: Advanced > Built-in Device Options" echo " (or Advanced > Display > UMA Frame Buffer Size)" echo " 4. Set UMA Frame Buffer Size to: 512 MB (or smallest available)" echo " 5. Save and Exit (F10)" echo "" echo " NOTE: The exact menu path may vary by BIOS version." echo " Look for 'UMA', 'Frame Buffer', 'VRAM', or 'iGPU Memory'." echo "" log_info "After BIOS change + reboot with kernel params, expected state:" echo " VRAM: ~512 MiB" echo " GTT: ~$(human_mib "$(recommended_gttsize_mib)") (with kernel params)" echo " System RAM: ~$(echo "scale=1; $(detect_total_physical_ram_kb) / 1048576 - 0.5" | bc) GiB visible" echo "" elif (( vram_total <= 1073741824 )); then log_success "VRAM is ${vram_gib} GiB — already optimal!" fi # ── Check GTT ──────────────────────────────────────────── rec_gttsize="$(recommended_gttsize_mib)" rec_gtt_bytes=$(( rec_gttsize * 1048576 )) if (( gtt_total >= rec_gtt_bytes * 3 / 4 )); then log_success "GTT is ${gtt_gib} GiB — good (recommended: ~$(human_mib "$rec_gttsize"))" else log_warn "GTT is ${gtt_gib} GiB — low (recommended: ~$(human_mib "$rec_gttsize"))" log_info "This requires kernel boot parameters. Run: make optimize-kernel" fi # ── Optional: amd-debug-tools ──────────────────────────── echo "" log_header "Optional: amd-debug-tools (amd-ttm)" log_info "AMD provides 'amd-debug-tools' for runtime GTT/TTM inspection." if is_cmd amd-ttm; then log_success "amd-ttm is installed" log_info "Current GTT settings:" amd-ttm 2>/dev/null || true elif is_cmd pipx; then log_info "Install with: pipx install amd-debug-tools" if confirm "Install amd-debug-tools via pipx?"; then pipx install amd-debug-tools log_success "Installed. Run 'amd-ttm' to inspect GTT allocation." fi else log_info "Install pipx first: sudo dnf install pipx" log_info "Then: pipx install amd-debug-tools" fi