#
# Kernel configuration fragment for ASUS ROG Strix G15 Advantage Edition (G513QY)
# AMD Ryzen 9 5900HX (Zen 3) + Radeon RX 6800M (Navi 22, RDNA2) + Cezanne iGPU
#
# This fragment is merged with defconfig via scripts/kconfig/merge_config.sh
# All decisions derive from the Design Targets research document.
#
# Applied on top of: make defconfig (x86_64)
# Merge command: scripts/kconfig/merge_config.sh -m .config this-file
# Finalize: make olddefconfig
#

# ═══════════════════════════════════════════════════════════════════
# DESIGN TARGET 1: AMD Ryzen 9 5900HX / RX 6800M optimization
# ═══════════════════════════════════════════════════════════════════

# --- CPU platform (requires graysky2 kernel_compiler_patch) ---
CONFIG_MZEN3=y

# --- CPU topology ---
CONFIG_SMP=y
CONFIG_NR_CPUS=16
CONFIG_SCHED_MC=y
CONFIG_SCHED_SMT=y
CONFIG_SCHED_CLUSTER=y
CONFIG_X86_X2APIC=y

# --- AMD frequency scaling ---
CONFIG_X86_AMD_PSTATE=y
CONFIG_CPU_FREQ_DEFAULT_GOV_SCHEDUTIL=y
# CONFIG_CPU_FREQ_DEFAULT_GOV_PERFORMANCE is not set
# CONFIG_CPU_FREQ_DEFAULT_GOV_ONDEMAND is not set

# --- AMD platform drivers ---
CONFIG_AMD_PMC=y
CONFIG_AMD_NB=y
CONFIG_SENSORS_K10TEMP=y
CONFIG_X86_AMD_FREQ_SENSITIVITY=m
CONFIG_PINCTRL_AMD=y
CONFIG_X86_AMD_PLATFORM_DEVICE=y
CONFIG_PERF_EVENTS_AMD_POWER=m
CONFIG_PERF_EVENTS_AMD_UNCORE=m
CONFIG_EDAC_AMD64=m

# --- AMD IOMMU ---
CONFIG_AMD_IOMMU=y
CONFIG_AMD_IOMMU_V2=y

# --- AMD microcode and MCE ---
CONFIG_MICROCODE_AMD=y
CONFIG_X86_MCE_AMD=y

# --- AMD memory encryption (available but not active by default) ---
CONFIG_AMD_MEM_ENCRYPT=y
# CONFIG_AMD_MEM_ENCRYPT_ACTIVE_BY_DEFAULT is not set

# --- AMD Cryptographic Coprocessor ---
CONFIG_CRYPTO_DEV_CCP=y
CONFIG_CRYPTO_DEV_CCP_DD=y
CONFIG_CRYPTO_DEV_CCP_CRYPTO=m
CONFIG_CRYPTO_DEV_SP_PSP=y

# --- AMD SMBus (required despite PIIX4 name) ---
CONFIG_I2C_PIIX4=y

# --- AMD GPU: amdgpu with full RDNA2 and Vega support ---
CONFIG_DRM_AMDGPU=m
# CONFIG_DRM_AMDGPU_SI is not set
# CONFIG_DRM_AMDGPU_CIK is not set
# CONFIG_DRM_AMDGPU_GART_DEBUGFS is not set
# CONFIG_DRM_AMDGPU_WERROR is not set
# CONFIG_DRM_AMD_DC_SI is not set
CONFIG_DRM_AMD_DC=y

# --- GPU compute: HSA/KFD for ROCm + dGPU↔iGPU P2P ---
CONFIG_HSA_AMD=y
CONFIG_HSA_AMD_SVM=y
CONFIG_HSA_AMD_P2P=y

# --- Vulkan compute: GPU access to userspace memory (zero-copy mmap'd model weights) ---
CONFIG_DRM_AMDGPU_USERPTR=y

# --- IOMMU: GPU memory management and DMA performance ---
CONFIG_IOMMU_SUPPORT=y
CONFIG_IOMMU_SVA=y
CONFIG_IOMMU_DEFAULT_DMA_LAZY=y

# --- HMM: CPU↔GPU page table mirroring for shared virtual addressing ---
# HMM_MIRROR and MMU_NOTIFIER auto-selected by USERPTR, listed for clarity
CONFIG_ZONE_DEVICE=y
CONFIG_DEVICE_PRIVATE=y
CONFIG_DMABUF_MOVE_NOTIFY=y

# --- Smart Access Memory: PCI subsystem handles Resizable BAR natively ---
CONFIG_PCI=y

# ═══════════════════════════════════════════════════════════════════
# DESIGN TARGET 2: Intel-specific deprecation
# ═══════════════════════════════════════════════════════════════════

# --- Intel CPU drivers: REMOVE ---
# CONFIG_MICROCODE_INTEL is not set
# CONFIG_INTEL_PSTATE is not set
# CONFIG_INTEL_IDLE is not set
# CONFIG_INTEL_IOMMU is not set
# CONFIG_X86_INTEL_TSX_MODE_OFF is not set
# CONFIG_X86_INTEL_TSX_MODE_ON is not set
# CONFIG_X86_INTEL_TSX_MODE_AUTO is not set
# CONFIG_INTEL_TXT is not set
# CONFIG_X86_MCE_INTEL is not set

# --- Intel ME, thermal, power: REMOVE ---
# CONFIG_INTEL_MEI is not set
# CONFIG_INTEL_MEI_ME is not set
# CONFIG_INTEL_TH is not set
# CONFIG_INTEL_PCH_THERMAL is not set
# CONFIG_INTEL_POWERCLAMP is not set
# CONFIG_X86_PKG_TEMP_THERMAL is not set
# CONFIG_INTEL_SPEED_SELECT_INTERFACE is not set
# CONFIG_INT340X_THERMAL is not set
# CONFIG_INTEL_HFI_THERMAL is not set

# --- Intel perf: REMOVE (keep AMD equivalents) ---
# CONFIG_PERF_EVENTS_INTEL_CSTATE is not set
# CONFIG_PERF_EVENTS_INTEL_UNCORE is not set

# --- Intel SoC/LPSS: REMOVE ---
# CONFIG_X86_INTEL_LPSS is not set
# CONFIG_INTEL_VSEC is not set

# --- Intel GPU: REMOVE ---
# CONFIG_DRM_I915 is not set

# --- CRITICAL: "Intel"-named options that AMD REQUIRES ---
CONFIG_SND_HDA_INTEL=y
CONFIG_CRYPTO_AES_NI_INTEL=y
CONFIG_CRYPTO_GHASH_CLMUL_NI_INTEL=y
CONFIG_CRYPTO_CRC32C_INTEL=y
CONFIG_CRYPTO_SHA256_SSSE3=y
CONFIG_CRYPTO_SHA512_SSSE3=y
CONFIG_PERF_EVENTS_INTEL_RAPL=y
CONFIG_X86_CPU_RESCTRL=y

# ═══════════════════════════════════════════════════════════════════
# DESIGN TARGET 3: General non-AMD deprecation
# ═══════════════════════════════════════════════════════════════════

# --- GPU drivers: REMOVE all non-AMD ---
# CONFIG_DRM_NOUVEAU is not set
# CONFIG_DRM_RADEON is not set
# CONFIG_DRM_VIRTIO_GPU is not set
# CONFIG_DRM_VMWGFX is not set
# CONFIG_DRM_QXL is not set
# CONFIG_DRM_BOCHS is not set
# CONFIG_DRM_AST is not set
# CONFIG_DRM_MGAG200 is not set

# --- Keep simpledrm for early boot ---
CONFIG_DRM_SIMPLEDRM=y

# --- Virtualization guest drivers: REMOVE (bare metal) ---
# CONFIG_HYPERV is not set
# CONFIG_XEN is not set
# CONFIG_VMWARE_VMCI is not set
# CONFIG_VMXNET3 is not set
# CONFIG_VIRTIO_PCI is not set
# CONFIG_VIRTIO_BALLOON is not set
# CONFIG_VIRTIO_NET is not set
# CONFIG_VIRTIO_BLK is not set

# --- Keep KVM host support for AMD ---
CONFIG_KVM=m
CONFIG_KVM_AMD=m

# --- Legacy filesystems: REMOVE ---
# CONFIG_HFS_FS is not set
# CONFIG_HFSPLUS_FS is not set
# CONFIG_JFFS2_FS is not set
# CONFIG_CRAMFS is not set
# CONFIG_ROMFS_FS is not set
# CONFIG_UFS_FS is not set
# CONFIG_MINIX_FS is not set
# CONFIG_AFFS_FS is not set
# CONFIG_BEFS_FS is not set
# CONFIG_ADFS_FS is not set
# CONFIG_QNX4FS_FS is not set
# CONFIG_QNX6FS_FS is not set
# CONFIG_SYSV_FS is not set
# CONFIG_OMFS_FS is not set

# --- Legacy network protocols: REMOVE ---
# CONFIG_ATALK is not set
# CONFIG_IPX is not set
# CONFIG_DECNET is not set
# CONFIG_PHONET is not set
# CONFIG_6LOWPAN is not set
# CONFIG_IEEE802154 is not set
# CONFIG_CAIF is not set
# CONFIG_NFC is not set

# --- Legacy bus/input: REMOVE ---
# CONFIG_PCCARD is not set
# CONFIG_PARPORT is not set
# CONFIG_GAMEPORT is not set
# CONFIG_INPUT_TOUCHSCREEN is not set
# CONFIG_INPUT_MOUSEDEV is not set

# --- Networking: keep what G513QY needs ---
CONFIG_R8169=m
CONFIG_MT7921E=m
CONFIG_MT7921_COMMON=m
CONFIG_MT76_CONNAC_LIB=m
CONFIG_BT=m
CONFIG_BT_HCIBTUSB=m

# ═══════════════════════════════════════════════════════════════════
# DESIGN TARGET 4: Scheduler — BORE + sched_ext + scx_lavd ready
# ═══════════════════════════════════════════════════════════════════

# --- BORE scheduler (requires BORE patch) ---
CONFIG_SCHED_BORE=y

# --- sched_ext for runtime BPF schedulers (scx_lavd, scx_bpfland) ---
CONFIG_SCHED_CLASS_EXT=y
CONFIG_BPF=y
CONFIG_BPF_SYSCALL=y
CONFIG_BPF_JIT=y
CONFIG_BPF_JIT_ALWAYS_ON=y
CONFIG_DEBUG_INFO_BTF=y

# --- Scheduling tunables ---
CONFIG_SCHED_AUTOGROUP=y
CONFIG_CGROUP_SCHED=y
CONFIG_FAIR_GROUP_SCHED=y
# CONFIG_RT_GROUP_SCHED is not set
CONFIG_SCHED_CORE=y

# --- Preemption: dynamic with lazy available ---
CONFIG_PREEMPT_DYNAMIC=y

# --- Timer: 1000Hz for JACK audio and compositor frame timing ---
CONFIG_HZ_1000=y
CONFIG_HZ=1000
CONFIG_HIGH_RES_TIMERS=y

# --- Tickless: idle only (not full, which adds overhead on desktop) ---
CONFIG_NO_HZ_IDLE=y
# CONFIG_NO_HZ_FULL is not set

# --- IRQ threading and RCU ---
CONFIG_IRQ_FORCED_THREADING=y
CONFIG_RCU_NOCB_CPU=y
CONFIG_RCU_BOOST=y

# ═══════════════════════════════════════════════════════════════════
# DESIGN TARGET 5: NVMe optimization
# ═══════════════════════════════════════════════════════════════════

# --- NVMe driver: built-in for boot device ---
CONFIG_BLK_DEV_NVME=y
CONFIG_NVME_MULTIPATH=y
CONFIG_NVME_HWMON=y
CONFIG_NVME_VERBOSE_ERRORS=y
# CONFIG_NVME_TCP is not set
# CONFIG_NVME_RDMA is not set
# CONFIG_NVME_FC is not set
# CONFIG_NVME_HOST_AUTH is not set
# CONFIG_NVME_TARGET is not set

# --- I/O schedulers: all as modules, kernel auto-selects none for NVMe ---
CONFIG_MQ_IOSCHED_DEADLINE=m
CONFIG_MQ_IOSCHED_KYBER=m
CONFIG_IOSCHED_BFQ=m

# --- Block layer ---
CONFIG_BLK_WBT=y
CONFIG_BLK_WBT_MQ=y
CONFIG_BLK_CGROUP=y
# CONFIG_BLK_DEV_THROTTLING is not set
CONFIG_BLK_DEV_BSG=y
# CONFIG_BLK_DEV_INTEGRITY is not set
# CONFIG_BLK_SED_OPAL is not set

# --- Async I/O ---
CONFIG_IO_URING=y
CONFIG_AIO=y

# --- Filesystems: Btrfs built-in for root, XFS/JFS as modules ---
CONFIG_BTRFS_FS=y
CONFIG_BTRFS_FS_POSIX_ACL=y
# CONFIG_BTRFS_FS_CHECK_INTEGRITY is not set
# CONFIG_BTRFS_DEBUG is not set
CONFIG_XFS_FS=m
CONFIG_XFS_POSIX_ACL=y
CONFIG_JFS_FS=m
CONFIG_JFS_POSIX_ACL=y
CONFIG_EXT4_FS=y
CONFIG_F2FS_FS=m
CONFIG_NTFS3_FS=m
# CONFIG_FS_DAX is not set

# ═══════════════════════════════════════════════════════════════════
# DESIGN TARGET 6: Enlightenment Wayland compositor optimization
# ═══════════════════════════════════════════════════════════════════

# --- DRM/KMS core ---
CONFIG_DRM=y
CONFIG_DRM_FBDEV_EMULATION=y
CONFIG_DRM_LOAD_EDID_FIRMWARE=y
# CONFIG_FB is not set
# CONFIG_FB_EFI is not set
CONFIG_DMA_BUF=y
CONFIG_SYNC_FILE=y

# --- Input for libinput ---
CONFIG_INPUT_EVDEV=y
CONFIG_INPUT_UINPUT=m
CONFIG_INPUT_JOYDEV=m

# --- GPU memory management ---
CONFIG_TRANSPARENT_HUGEPAGE=y
CONFIG_TRANSPARENT_HUGEPAGE_MADVISE=y
CONFIG_COMPACTION=y
CONFIG_CMA=y
CONFIG_DMA_CMA=y
CONFIG_HUGETLBFS=y
CONFIG_SHMEM=y

# --- Seat management (systemd-logind requirements) ---
CONFIG_CGROUPS=y
CONFIG_TMPFS=y
CONFIG_DEVTMPFS=y
CONFIG_DEVTMPFS_MOUNT=y
CONFIG_INOTIFY_USER=y
CONFIG_SIGNALFD=y
CONFIG_TIMERFD=y
CONFIG_EPOLL=y
CONFIG_FHANDLE=y
CONFIG_SYSFS=y
CONFIG_PROC_FS=y
CONFIG_UNIX=y
CONFIG_DMIID=y
CONFIG_SECCOMP=y

# ═══════════════════════════════════════════════════════════════════
# DESIGN TARGET 7: Cutting-edge memory and performance
# ═══════════════════════════════════════════════════════════════════

# --- Multi-Gen LRU ---
CONFIG_LRU_GEN=y
CONFIG_LRU_GEN_ENABLED=y
# CONFIG_LRU_GEN_STATS is not set

# --- DAMON ---
CONFIG_DAMON=y
CONFIG_DAMON_VADDR=y
CONFIG_DAMON_PADDR=y
CONFIG_DAMON_SYSFS=y
# CONFIG_DAMON_DBGFS is not set
CONFIG_DAMON_RECLAIM=y
CONFIG_DAMON_LRU_SORT=y

# --- Per-VMA locking ---
CONFIG_PER_VMA_LOCK=y

# --- Pressure Stall Information ---
CONFIG_PSI=y

# --- ZSWAP/ZRAM available but not default-on ---
CONFIG_ZSWAP=y
# CONFIG_ZSWAP_DEFAULT_ON is not set
CONFIG_ZRAM=m

# --- Modern networking ---
CONFIG_TCP_CONG_BBR=m
CONFIG_NET_SCH_FQ=m
CONFIG_TLS=m

# --- BPF ecosystem ---
CONFIG_BPF_LSM=y

# --- FUSE over io_uring ---
CONFIG_FUSE_FS=m
CONFIG_FUSE_IO_URING=y

# ═══════════════════════════════════════════════════════════════════
# DESIGN TARGET 8: AMD instruction set optimization
# ═══════════════════════════════════════════════════════════════════

# --- Crypto acceleration using Zen 3 ISA extensions ---
CONFIG_CRYPTO_POLY1305_X86_64=y
CONFIG_CRYPTO_CHACHA20_X86_64=y
CONFIG_CRYPTO_BLAKE2S_X86=y

# --- AMD CCP hardware offload ---
# (declared above in DT1)

# ═══════════════════════════════════════════════════════════════════
# DESIGN TARGET 9: Irrelevant instruction set exclusion
# ═══════════════════════════════════════════════════════════════════

# --- Intel-only crypto hardware: REMOVE ---
# CONFIG_CRYPTO_DEV_QAT is not set
# CONFIG_CRYPTO_DEV_PADLOCK is not set

# --- 32-bit emulation: keep available but boot-disable option ---
CONFIG_IA32_EMULATION=y

# ═══════════════════════════════════════════════════════════════════
# DESIGN TARGET 10: Cognitive kernel / edge case options
# ═══════════════════════════════════════════════════════════════════

# --- NUMA balancing for memory locality ---
CONFIG_NUMA=y
CONFIG_NUMA_BALANCING=y

# --- Memory resilience ---
CONFIG_MEMORY_FAILURE=y
# CONFIG_MEMORY_HOTPLUG is not set
# CONFIG_CXL_BUS is not set

# ═══════════════════════════════════════════════════════════════════
# DESIGN TARGET 11: Mesa / Vulkan compute (RADV, RadeonSI, llama.cpp)
# ═══════════════════════════════════════════════════════════════════

# --- DRM subsystem: auto-selected by AMDGPU but listed for audit trail ---
# DRM_SCHED, DRM_TTM, DRM_BUDDY auto-selected by DRM_AMDGPU
# DMA_SHARED_BUFFER, SYNC_FILE auto-selected by DRM

# --- Vulkan WSI: Wayland buffer sharing via DMA-BUF ---
# VK_KHR_external_memory_fd and VK_EXT_image_drm_format_modifier
# operate through DMA_BUF + SYNC_FILE, both auto-selected above

# --- Dual-GPU compute architecture ---
# iGPU (card2/Cezanne) → compositor on HDMI-A-1 via EGL/GLES
# dGPU (card1/Navi 22) → Vulkan/ROCm compute via renderD128
# P2P (CONFIG_HSA_AMD_P2P) → declared in DT1 GPU section
# Selection: HIP_VISIBLE_DEVICES=0 or GGML_VK_DEVICE=0

# --- RLIMIT_MEMLOCK: llama.cpp --mlock requires sufficient limit ---
# Controlled via /etc/security/limits.conf, not kernel CONFIG
# Kernel always supports mlock(); limit is per-user

# ═══════════════════════════════════════════════════════════════════
# SECURITY: SELinux OUT, AppArmor + Landlock IN
# ═══════════════════════════════════════════════════════════════════

# CONFIG_SECURITY_SELINUX is not set
# CONFIG_SECURITY_TOMOYO is not set
# CONFIG_SECURITY_SMACK is not set
# CONFIG_SECURITY_LOADPIN is not set
# CONFIG_SECURITY_SAFESETID is not set
CONFIG_SECURITY_APPARMOR=y
CONFIG_SECURITY_LANDLOCK=y
CONFIG_SECURITY_YAMA=y
CONFIG_SECURITY_LOCKDOWN_LSM=y
CONFIG_INTEGRITY=y
CONFIG_IMA=y
CONFIG_LSM="landlock,lockdown,yama,integrity,apparmor,bpf"

# --- Hardening: high-value, low-overhead ---
CONFIG_RANDOMIZE_BASE=y
CONFIG_STACKPROTECTOR_STRONG=y
CONFIG_FORTIFY_SOURCE=y
CONFIG_HARDENED_USERCOPY=y
CONFIG_INIT_ON_ALLOC_DEFAULT_ON=y
# CONFIG_INIT_ON_FREE_DEFAULT_ON is not set

# --- CPU mitigations: leave enabled, individual control via boot params ---
CONFIG_CPU_MITIGATIONS=y

# ═══════════════════════════════════════════════════════════════════
# AUDIO: Pure ALSA/JACK — no PulseAudio, no PipeWire kernel deps
# ═══════════════════════════════════════════════════════════════════

CONFIG_SOUND=y
CONFIG_SND=y
# CONFIG_SND_HDA_INTEL declared above (required for AMD HD Audio)
CONFIG_SND_HDA_CODEC_REALTEK=y
CONFIG_SND_HDA_CODEC_HDMI=y
CONFIG_SND_HDA_GENERIC=y
CONFIG_SND_HRTIMER=y
CONFIG_SND_USB_AUDIO=m
CONFIG_SND_ALOOP=m
CONFIG_SND_DYNAMIC_MINORS=y
CONFIG_SND_HDA_POWER_SAVE_DEFAULT=0
# CONFIG_SOUND_OSS_CORE is not set

# ═══════════════════════════════════════════════════════════════════
# MISC: Debug, firmware, console
# ═══════════════════════════════════════════════════════════════════

# --- Firmware loading ---
CONFIG_FW_LOADER=y
CONFIG_FW_LOADER_USER_HELPER=y
CONFIG_FW_LOADER_COMPRESS=y
CONFIG_FW_LOADER_COMPRESS_ZSTD=y
CONFIG_EXTRA_FIRMWARE=""

# --- Console ---
CONFIG_FRAMEBUFFER_CONSOLE=y
CONFIG_VT=y
CONFIG_VT_CONSOLE=y

# --- Disable debug overhead for production ---
# CONFIG_DEBUG_KERNEL is not set
# CONFIG_KPROBES is not set
# CONFIG_FTRACE is not set
CONFIG_MAGIC_SYSRQ=y
