commit 2a39fc1294afd4ee1c587b335d1c146fa0e33851 Author: Dan Date: Sun Apr 26 10:25:41 2026 +0200 Initial commit diff --git a/.dockerignore b/.dockerignore new file mode 100644 index 0000000..346655e --- /dev/null +++ b/.dockerignore @@ -0,0 +1,7 @@ +linux_deb/ +linux-bin/ +work/ +work-alpine/ +output/ +.git/ +ps5-linux-patches/ diff --git a/README.md b/README.md new file mode 100644 index 0000000..a9ed47e --- /dev/null +++ b/README.md @@ -0,0 +1,131 @@ +# PS5 Linux Image Builder + +Builds bootable Linux USB images for PlayStation 5 using Docker containers. Supports Ubuntu 24.04, Ubuntu 26.04, Arch, and Alpine, individually or as a multi-distro image with kexec switching. + +## Prerequisites + +- Docker (with permission to run `--privileged` containers) — install as per your distro's instructions +- ~30GB free disk space + +Once Docker is installed, add your user to the docker group and apply it without logging out: + +```bash +sudo usermod -aG docker $USER +newgrp docker +``` + +## Quick Start + +```bash +# Build a single Ubuntu 24.04 image +./build_image.sh --distro ubuntu + +# Build a single Ubuntu 26.04 image +./build_image.sh --distro ubuntu2604 + +# Build a multi-distro image (ubuntu + ubuntu2604 + arch + alpine) +./build_image.sh --distro all +``` + +The script auto-clones the kernel source, applies PS5 patches, compiles, and builds the image. Subsequent runs reuse cached artifacts automatically. Press Ctrl+C at any time to abort cleanly. + +## Flash to USB + +```bash +sudo dd if=output/ps5-ubuntu.img of=/dev/sdX bs=4M status=progress +``` + +## Options + +| Flag | Description | Default | +|------|-------------|---------| +| `--distro` | `ubuntu`, `ubuntu2604`, `arch`, `alpine`, or `all` | `ubuntu` | +| `--kernel` | Path to kernel source directory | auto-clone `v6.19.10` | +| `--img-size` | Disk image size in MB | `12000` (`32000` for `all`) | +| `--clean` | Remove all cached build artifacts and start fresh | off | + +## Caching + +The build automatically skips stages that have already completed: + +- **Kernel source** — reused if `work/linux/` exists +- **Kernel packages** — reused if `.deb`/`.pkg.tar.zst` files exist in `linux-bin/` +- **Root filesystem** — reused if chroot directories are populated + +Use `--clean` to wipe everything and rebuild from scratch. The build will also suggest `--clean` if a stage fails. + +## Build Output + +``` +PS5 Linux Image Builder +======================= + Distro: all + (ubuntu ubuntu2604 arch alpine) + Image size: 32000MB + Kernel src: /path/to/work/linux + +Stages: + 1. Kernel cached + 2. Root filesystem build + 3. Disk image build + +Logs: /path/to/build.log + + ✓ Kernel packages (cached) + ✓ Build image builder image + ⠹ Building arch rootfs +``` + +All verbose output goes to `build.log`. The terminal shows a spinner with live progress. + +## Distributions + +| Distro | Desktop | Kernel format | Init | +|--------|---------|---------------|------| +| Ubuntu 24.04 (Noble) | GNOME | `.deb` | systemd | +| Ubuntu 26.04 (Resolute) | GNOME | `.deb` | systemd | +| Arch | Sway | `.pkg.tar.zst` | systemd | +| Alpine (3.21) | GNOME | extracted from `.deb` | OpenRC | + +## Multi-distro Image + +`--distro all` builds a 32GB image with 5 partitions: + +| Partition | Type | Label | Content | +|-----------|------|-------|---------| +| p1 | FAT32 | boot | Shared kernel, per-distro initrds, kexec scripts | +| p2 | ext4 | ubuntu | Ubuntu 24.04 rootfs | +| p3 | ext4 | ubuntu2604 | Ubuntu 26.04 rootfs | +| p4 | ext4 | arch | Arch rootfs | +| p5 | ext4 | alpine | Alpine rootfs | + +The boot partition contains kexec scripts to switch between distros at runtime. Ubuntu 24.04 is the default boot target. + +## Directory Layout + +``` +build_image.sh # Main build script +docker/ + kernel-builder/ # Kernel compilation container + kernel-builder-arch/ # Repackages .deb kernel as .pkg.tar.zst + image-builder/ + Dockerfile # Image building container (distrobuilder) + entrypoint.sh # Single-distro build logic + entrypoint-multi.sh # Multi-distro build logic +distros/ + ubuntu/ # Ubuntu 24.04 (Noble) + ubuntu2604/ # Ubuntu 26.04 (Resolute) + arch/ # Arch Linux + alpine/ # Alpine 3.21 + shared/ # Kernel postinst hooks (single + multi) +boot/ + cmdline.txt # Kernel cmdline template (__DISTRO__ placeholder) + vram.txt # VRAM allocation + kexec-{ubuntu,ubuntu2604,arch,alpine}.sh +patches/ + linux.patch # PS5 kernel patches + config # Kernel .config +work/ # Build artifacts (auto-created) +linux-bin/ # Compiled kernel packages +output/ # Final .img files +``` diff --git a/boot/cmdline.txt b/boot/cmdline.txt new file mode 100644 index 0000000..32fbe69 --- /dev/null +++ b/boot/cmdline.txt @@ -0,0 +1 @@ +root=LABEL=__DISTRO__ rw rootwait console=ttyTitania0 console=tty0 video=DP-1:1920x1080@60 mitigations=off idle=halt rootfstype=ext4 diff --git a/boot/kexec-alpine.sh b/boot/kexec-alpine.sh new file mode 100644 index 0000000..0de845f --- /dev/null +++ b/boot/kexec-alpine.sh @@ -0,0 +1,6 @@ +#!/bin/sh +# Switch to Alpine Linux via kexec +set -e +BOOT=/boot/efi +kexec -l "$BOOT/bzImage" --initrd="$BOOT/initrd-alpine.img" --command-line="$(cat $BOOT/cmdline-alpine.txt)" +kexec -e diff --git a/boot/kexec-arch.sh b/boot/kexec-arch.sh new file mode 100644 index 0000000..060b1d3 --- /dev/null +++ b/boot/kexec-arch.sh @@ -0,0 +1,6 @@ +#!/bin/sh +# Switch to Arch Linux via kexec +set -e +BOOT=/boot/efi +kexec -l "$BOOT/bzImage" --initrd="$BOOT/initrd-arch.img" --command-line="$(cat $BOOT/cmdline-arch.txt)" +kexec -e diff --git a/boot/kexec-ubuntu.sh b/boot/kexec-ubuntu.sh new file mode 100644 index 0000000..ab8f13b --- /dev/null +++ b/boot/kexec-ubuntu.sh @@ -0,0 +1,6 @@ +#!/bin/sh +# Switch to Ubuntu via kexec +set -e +BOOT=/boot/efi +kexec -l "$BOOT/bzImage" --initrd="$BOOT/initrd-ubuntu.img" --command-line="$(cat $BOOT/cmdline-ubuntu.txt)" +kexec -e diff --git a/boot/kexec-ubuntu2604.sh b/boot/kexec-ubuntu2604.sh new file mode 100755 index 0000000..5cd10c7 --- /dev/null +++ b/boot/kexec-ubuntu2604.sh @@ -0,0 +1,6 @@ +#!/bin/sh +# Switch to Ubuntu 26.04 via kexec +set -e +BOOT=/boot/efi +kexec -l "$BOOT/bzImage" --initrd="$BOOT/initrd-ubuntu2604.img" --command-line="$(cat $BOOT/cmdline-ubuntu2604.txt)" +kexec -e diff --git a/boot/vram.txt b/boot/vram.txt new file mode 100644 index 0000000..2d34f73 --- /dev/null +++ b/boot/vram.txt @@ -0,0 +1 @@ +0x20000000 diff --git a/build_image.sh b/build_image.sh new file mode 100755 index 0000000..c7a1495 --- /dev/null +++ b/build_image.sh @@ -0,0 +1,343 @@ +#!/bin/bash +set -e + +SCRIPT_DIR="$(cd "$(dirname "$0")" && pwd)" +DISTRO="ubuntu" +KERNEL_SRC="" +CLEAN=false +IMG_SIZE=12000 + +MULTI_DISTROS="ubuntu ubuntu2604 arch alpine" + +usage() { + echo "Usage: $0 [--distro ] [--kernel ] [--img-size ] [--clean]" + echo "" + echo "Options:" + echo " --distro Distribution to build: ubuntu, ubuntu2604, arch, alpine, all (default: ubuntu)" + echo " --kernel Path to kernel source directory (default: auto-clone to work/linux/)" + echo " --img-size Disk image size in MB (default: 12000, 32000 for --distro all)" + echo " --clean Remove all cached build artifacts and start from scratch" + exit 1 +} + +while [[ $# -gt 0 ]]; do + case $1 in + --distro) DISTRO="$2"; shift 2 ;; + --kernel) KERNEL_SRC="$2"; shift 2 ;; + --img-size) IMG_SIZE="$2"; shift 2 ;; + --clean) CLEAN=true; shift ;; + -h|--help) usage ;; + *) echo "Unknown option: $1"; usage ;; + esac +done + +LINUX_REPO="https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git" +LINUX_DEFAULT_DIR="$SCRIPT_DIR/work/linux" + +# TODO: switch to https://github.com/ps5-linux/ps5-linux-patches.git once repo is public +PATCHES_REPO="git@github.com:ps5-linux/ps5-linux-patches.git" +PATCHES_DIR="$SCRIPT_DIR/work/ps5-linux-patches" +PATCHES_CONFIG=".config" + +if [ -z "$KERNEL_SRC" ]; then + KERNEL_SRC="$LINUX_DEFAULT_DIR" +fi + +KERNEL_OUT="$SCRIPT_DIR/linux-bin" +OUTPUT_DIR="$SCRIPT_DIR/output" +CHROOT_DIR="$SCRIPT_DIR/work/chroot" +CACHE_DIR="$SCRIPT_DIR/work/cache" +CCACHE_DIR="$SCRIPT_DIR/cache/ccache" +LOG_FILE="$SCRIPT_DIR/build.log" +DOCKER_NAME="ps5-build-$$" + +if [ "$DISTRO" = "all" ] && [ "$IMG_SIZE" = "12000" ]; then + IMG_SIZE=32000 +fi + +# --- Signal trap: clean up docker containers and background jobs on exit --- +BUILD_PID="" + +cleanup() { + echo "" + echo "Interrupted. Cleaning up..." + docker kill "$DOCKER_NAME" 2>/dev/null || true + [ -n "$BUILD_PID" ] && kill "$BUILD_PID" 2>/dev/null || true + wait "$BUILD_PID" 2>/dev/null || true + exit 130 +} +trap cleanup INT TERM + +# --- Clean --- +if [ "$CLEAN" = true ]; then + echo "Cleaning all build artifacts..." + # Build artifacts contain root-owned files from Docker — use a container to remove them + for dir in "$SCRIPT_DIR/work" "$KERNEL_OUT" "$SCRIPT_DIR/cache"; do + if [ -d "$dir" ]; then + docker run --rm --privileged -v "$dir":/clean alpine sh -c 'rm -rf /clean/*' + rmdir "$dir" 2>/dev/null || true + fi + done + rm -rf "$OUTPUT_DIR" + echo "Done." + echo "" +fi + +# --- Auto-detect what can be skipped --- +SKIP_KERNEL=false +SKIP_CHROOT=false + +# Kernel packages already built? +if [ "$DISTRO" = "arch" ]; then + ls "$KERNEL_OUT"/*.pkg.tar.zst 1>/dev/null 2>&1 && SKIP_KERNEL=true +elif [ "$DISTRO" = "all" ]; then + ls "$KERNEL_OUT"/*.deb 1>/dev/null 2>&1 && \ + ls "$KERNEL_OUT"/*.pkg.tar.zst 1>/dev/null 2>&1 && SKIP_KERNEL=true +else + ls "$KERNEL_OUT"/*.deb 1>/dev/null 2>&1 && SKIP_KERNEL=true +fi + +# Chroot already populated? +if [ "$DISTRO" = "all" ]; then + SKIP_CHROOT=true + for d in $MULTI_DISTROS; do + [ -d "$SCRIPT_DIR/work/chroot-$d/bin" ] || SKIP_CHROOT=false + done +else + [ -d "$CHROOT_DIR/bin" ] && SKIP_CHROOT=true +fi + +if [ "$DISTRO" = "arch" ]; then + PKG_EXT="pkg.tar.zst" +else + PKG_EXT="deb" +fi + +# --- Build plan summary --- +echo "" +echo "PS5 Linux Image Builder" +echo "=======================" +echo " Distro: $DISTRO" +if [ "$DISTRO" = "all" ]; then + echo " ($MULTI_DISTROS)" +fi +echo " Image size: ${IMG_SIZE}MB" +if [ -f "$PATCHES_DIR/.config" ]; then + LINUX_BRANCH="v$(grep -m1 "^# Linux/" "$PATCHES_DIR/.config" | grep -oP '\d+\.\d+(\.\d+)?')" + echo " Kernel: $LINUX_BRANCH" +else + echo " Kernel: (will fetch)" +fi +echo " Kernel src: $KERNEL_SRC" +echo "" +echo "Stages:" +if [ "$SKIP_KERNEL" = true ]; then + echo " 1. Kernel cached" +else + if [ -d "$KERNEL_SRC/.git" ]; then + echo " 1. Kernel build (source cached)" + else + echo " 1. Kernel clone + build" + fi +fi +if [ "$SKIP_CHROOT" = true ]; then + echo " 2. Root filesystem cached" +else + echo " 2. Root filesystem build" +fi +echo " 3. Disk image build" +echo "" +echo "Logs: $LOG_FILE" +echo "" + +# --- Logging + stage runner --- +: > "$LOG_FILE" + +SPIN_CHARS='⠋⠙⠹⠸⠼⠴⠦⠧⠇⠏' + +run_stage() { + local name="$1" + shift + local status_msg="$name" + local spin_i=0 + + # Record log position so we only scan new lines for status updates + local log_start + log_start=$(wc -l < "$LOG_FILE") + + # Run command in background + "$@" >> "$LOG_FILE" 2>&1 & + BUILD_PID=$! + + # Spinner loop — pick up === status lines from the log + while kill -0 "$BUILD_PID" 2>/dev/null; do + if (( spin_i % 10 == 0 )); then + local new + new=$(tail -n +$((log_start + 1)) "$LOG_FILE" 2>/dev/null \ + | grep -oP '(?<=^=== ).*(?= ===$)' | tail -1) + [ -n "$new" ] && status_msg="$new" + fi + printf "\r %s %-60s" "${SPIN_CHARS:spin_i%${#SPIN_CHARS}:1}" "$status_msg" + spin_i=$((spin_i + 1)) + sleep 0.1 + done + + local rc=0 + wait "$BUILD_PID" || rc=$? + BUILD_PID="" + + if [ $rc -eq 0 ]; then + printf "\r ✓ %-60s\n" "$name" + else + printf "\r ✗ %-60s\n" "$status_msg" + echo "" + echo "Build failed at: $status_msg" + echo "Logs: $LOG_FILE" + echo "Try running with --clean to start fresh." + exit 1 + fi +} + +# --- Setup directories --- +mkdir -p "$KERNEL_OUT" "$OUTPUT_DIR" "$CHROOT_DIR" "$CACHE_DIR" "$CCACHE_DIR" +if [ "$DISTRO" = "all" ]; then + for d in $MULTI_DISTROS; do + mkdir -p "$SCRIPT_DIR/work/chroot-$d" + done +fi + +# --- Step 1: Kernel --- +if [ "$SKIP_KERNEL" = true ]; then + printf " ✓ %-60s\n" "Kernel packages (cached)" +else + if [ ! -d "$KERNEL_SRC/.git" ]; then + LINUX_TMP_DIR="${LINUX_DEFAULT_DIR}.tmp" + rm -rf "$LINUX_TMP_DIR" + + mkdir -p "$PATCHES_DIR" + if [ ! -d "$PATCHES_DIR/.git" ]; then + run_stage "Clone ps5-linux-patches" \ + git clone --depth 1 "$PATCHES_REPO" "$PATCHES_DIR" + else + run_stage "Update ps5-linux-patches" bash -c ' + git -C "'"$PATCHES_DIR"'" fetch --depth 1 origin + git -C "'"$PATCHES_DIR"'" reset --hard FETCH_HEAD' + fi + LINUX_BRANCH="v$(grep -m1 "^# Linux/" "$PATCHES_DIR/.config" | grep -oP '\d+\.\d+(\.\d+)?')" + + run_stage "Clone kernel $LINUX_BRANCH" \ + git clone --branch "$LINUX_BRANCH" --depth 1 "$LINUX_REPO" "$LINUX_TMP_DIR" + + run_stage "Apply patches" bash -c ' + set -e + shopt -s nullglob + patches=("'"$PATCHES_DIR"'"/*.patch) + [ ${#patches[@]} -eq 0 ] && { echo "No .patch files found in '"$PATCHES_DIR"'"; exit 1; } + for p in "${patches[@]}"; do + echo "Applying $p" + git -C "'"$LINUX_TMP_DIR"'" apply --exclude=Makefile "$p" + done' + + run_stage "Copy kernel config" \ + cp "$PATCHES_DIR/$PATCHES_CONFIG" "$LINUX_TMP_DIR/.config" + + mv "$LINUX_TMP_DIR" "$LINUX_DEFAULT_DIR" + else + printf " ✓ %-60s\n" "Kernel source (cached)" + fi + + KERNEL_SRC="$(cd "$KERNEL_SRC" && pwd)" + + rm -f "$KERNEL_OUT"/*.$PKG_EXT + + run_stage "Build kernel builder image" \ + docker build -t ps5-kernel-builder -f "$SCRIPT_DIR/docker/kernel-builder/Dockerfile" "$SCRIPT_DIR" + + run_stage "Compile kernel" \ + docker run --rm --name "$DOCKER_NAME" \ + -v "$KERNEL_SRC":/src \ + -v "$KERNEL_OUT":/out \ + -v "$CCACHE_DIR":/ccache \ + ps5-kernel-builder + + if [ "$DISTRO" = "all" ]; then + run_stage "Package kernel (.deb)" \ + docker run --rm --name "$DOCKER_NAME" \ + -v "$KERNEL_SRC":/src \ + -v "$KERNEL_OUT":/out \ + -v "$CCACHE_DIR":/ccache \ + ps5-kernel-builder \ + bash -c 'make -j$(nproc) bindeb-pkg && cp /*.deb /out/' + + run_stage "Build arch packager image" \ + docker build -t ps5-kernel-packager-arch \ + -f "$SCRIPT_DIR/docker/kernel-builder-arch/Dockerfile" "$SCRIPT_DIR" + + run_stage "Package kernel (.pkg.tar.zst)" \ + docker run --rm --name "$DOCKER_NAME" \ + -v "$KERNEL_OUT":/out \ + ps5-kernel-packager-arch + + elif [ "$DISTRO" = "arch" ]; then + run_stage "Build arch packager image" \ + docker build -t ps5-kernel-packager-arch \ + -f "$SCRIPT_DIR/docker/kernel-builder-arch/Dockerfile" "$SCRIPT_DIR" + + run_stage "Package kernel (.pkg.tar.zst)" \ + docker run --rm --name "$DOCKER_NAME" \ + -v "$KERNEL_OUT":/out \ + ps5-kernel-packager-arch + else + run_stage "Package kernel (.deb)" \ + docker run --rm --name "$DOCKER_NAME" \ + -v "$KERNEL_SRC":/src \ + -v "$KERNEL_OUT":/out \ + -v "$CCACHE_DIR":/ccache \ + ps5-kernel-builder \ + bash -c 'make -j$(nproc) bindeb-pkg && cp /*.deb /out/' + fi +fi + +# --- Step 2: Build distribution image --- +run_stage "Build image builder image" \ + docker build -t ps5-image-builder -f "$SCRIPT_DIR/docker/image-builder/Dockerfile" "$SCRIPT_DIR" + +if [ "$DISTRO" = "all" ]; then + DOCKER_ARGS=( + docker run --rm --privileged --name "$DOCKER_NAME" + --entrypoint /entrypoint-multi.sh + -v "$SCRIPT_DIR":/repo:ro + -v "$KERNEL_OUT":/kernel-debs:ro + -v "$OUTPUT_DIR":/output + -v "$CACHE_DIR":/build/cache + -e IMG_SIZE="$IMG_SIZE" + -e SKIP_CHROOT="$SKIP_CHROOT" + -e "DISTROS=$MULTI_DISTROS" + ) + for d in $MULTI_DISTROS; do + DOCKER_ARGS+=(-v "$SCRIPT_DIR/work/chroot-$d:/build/chroot-$d") + done + DOCKER_ARGS+=(ps5-image-builder) + + run_stage "Build multi-distro image (${IMG_SIZE}MB)" "${DOCKER_ARGS[@]}" + + IMG_PATH="$OUTPUT_DIR/ps5-multi.img" +else + run_stage "Build $DISTRO image (${IMG_SIZE}MB)" \ + docker run --rm --privileged --name "$DOCKER_NAME" \ + -v "$SCRIPT_DIR":/repo:ro \ + -v "$KERNEL_OUT":/kernel-debs:ro \ + -v "$OUTPUT_DIR":/output \ + -v "$CHROOT_DIR":/build/chroot \ + -v "$CACHE_DIR":/build/cache \ + -e DISTRO="$DISTRO" \ + -e IMG_SIZE="$IMG_SIZE" \ + -e SKIP_CHROOT="$SKIP_CHROOT" \ + ps5-image-builder + + IMG_PATH="$OUTPUT_DIR/ps5-${DISTRO}.img" +fi + +echo "" +echo "Done! Image: $IMG_PATH" +echo "Flash: sudo dd if=$IMG_PATH of=/dev/sdX bs=4M status=progress" diff --git a/distros/alpine/grow-rootfs b/distros/alpine/grow-rootfs new file mode 100644 index 0000000..dadc49a --- /dev/null +++ b/distros/alpine/grow-rootfs @@ -0,0 +1,13 @@ +#!/bin/sh +# Grows the root partition and filesystem to fill the disk. +# Runs once on first boot, then disables itself. +set -e + +ROOT_DEV=$(findmnt -no SOURCE /) +DISK=$(lsblk -ndo PKNAME "$ROOT_DEV") +PART_NUM=$(cat /sys/class/block/$(basename "$ROOT_DEV")/partition) + +growpart "/dev/$DISK" "$PART_NUM" || true +resize2fs "$ROOT_DEV" || true + +rc-update del grow-rootfs default diff --git a/distros/alpine/grow-rootfs.openrc b/distros/alpine/grow-rootfs.openrc new file mode 100644 index 0000000..205e534 --- /dev/null +++ b/distros/alpine/grow-rootfs.openrc @@ -0,0 +1,13 @@ +#!/sbin/openrc-run + +description="Grow root filesystem to fill disk" + +depend() { + need localmount +} + +start() { + ebegin "Growing root filesystem" + /usr/local/sbin/grow-rootfs + eend $? +} diff --git a/distros/alpine/image.yaml b/distros/alpine/image.yaml new file mode 100644 index 0000000..1378a39 --- /dev/null +++ b/distros/alpine/image.yaml @@ -0,0 +1,175 @@ +image: + name: ps5-alpine + distribution: alpine + release: "3.21" + description: Alpine Linux with Weston + architecture: x86_64 + +source: + downloader: alpinelinux-http + url: https://dl-cdn.alpinelinux.org/alpine + skip_verification: true + +packages: + manager: apk + update: true + cleanup: true + + repositories: + - name: repositories + url: |- + https://dl-cdn.alpinelinux.org/alpine/v3.21/main + https://dl-cdn.alpinelinux.org/alpine/v3.21/community + + sets: + - packages: + # Wayland compositor + basics + - weston + - weston-shell-desktop + - weston-backend-drm + - weston-xwayland + - weston-terminal + - foot + - xwayland + + # Wayland support + - dbus + - eudev + - elogind + - polkit-elogind + - seatd + + # Audio / media + - pipewire + - wireplumber + - pipewire-pulse + + # Display / GPU + - mesa-gbm + - mesa-egl + - mesa-gl + - mesa-dri-gallium + - mesa-va-gallium + - mesa-vulkan-ati + - libinput + - xkeyboard-config + + # Networking + - networkmanager + - networkmanager-wifi + - wpa_supplicant + - linux-firmware + - linux-firmware-amdgpu + - xf86-video-amdgpu + + # System + - openrc + - openssh + - sudo + - shadow + - nano + - bash + - coreutils + - util-linux + - e2fsprogs + - e2fsprogs-extra + - cloud-utils-growpart + - mkinitfs + - kmod + - kexec-tools + - syslog-ng + + # Fonts + - font-ubuntu + - font-liberation + - font-dejavu + - fontconfig + action: install + +files: +- path: /etc/hostname + generator: hostname + +- path: /etc/hosts + generator: hosts + +- path: /etc/kernel/postinst.d/zz-update-boot + generator: copy + source: /tmp/build-staging/zz-update-boot + mode: "0755" + +- path: /etc/fstab + generator: copy + source: /tmp/build-staging/fstab + +- path: /usr/local/sbin/grow-rootfs + generator: copy + source: /tmp/build-staging/grow-rootfs + mode: "0755" + +- path: /etc/init.d/grow-rootfs + generator: copy + source: /tmp/build-staging/grow-rootfs.openrc + mode: "0755" + +actions: +- trigger: post-unpack + action: |- + #!/bin/sh + set -eux + # Retry up to 10 times on transient network errors + echo "retries = 10" >> /etc/apk/apk.conf 2>/dev/null || true + # dbus post-install chokes on an empty machine-id + rm -f /etc/machine-id + + +- trigger: post-packages + action: |- + #!/bin/sh + set -eux + fc-cache -f -v + + # SSH + sed -i 's/^#*PermitRootLogin.*/PermitRootLogin no/' /etc/ssh/sshd_config + sed -i 's/^#*PasswordAuthentication.*/PasswordAuthentication yes/' /etc/ssh/sshd_config + rc-update add syslog-ng default + rc-update add udev sysinit + rc-update add udev-trigger sysinit + rc-update add udev-settle sysinit + rc-update add sshd default + rc-update add dbus default + rc-update add elogind default + rc-update add seatd default + rc-update add networkmanager default + +- trigger: post-files + action: |- + #!/bin/sh + set -eux + rc-update add grow-rootfs default + + # Create default user (ps5/ps5) in groups needed for Wayland/input + addgroup ps5 + adduser -D -s /bin/bash -G ps5 ps5 + echo "ps5:ps5" | chpasswd + addgroup ps5 wheel + addgroup ps5 video + addgroup ps5 input + addgroup ps5 seat + echo "%wheel ALL=(ALL:ALL) NOPASSWD: ALL" > /etc/sudoers.d/wheel + + # Auto-start weston on tty1 login + { + echo 'if [ "$(tty)" = "/dev/tty1" ] && [ -z "$WAYLAND_DISPLAY" ]; then' + echo ' export XDG_RUNTIME_DIR="/tmp/xdg-runtime-$(id -u)"' + echo ' mkdir -p "$XDG_RUNTIME_DIR"' + echo ' chmod 700 "$XDG_RUNTIME_DIR"' + echo ' exec weston --backend=drm-backend.so' + echo 'fi' + } >> /home/ps5/.bash_profile + chown -R ps5:ps5 /home/ps5 + + mkdir -p /boot/efi + +mappings: + architecture_map: alpinelinux diff --git a/distros/arch/first-boot-setup b/distros/arch/first-boot-setup new file mode 100644 index 0000000..67de42d --- /dev/null +++ b/distros/arch/first-boot-setup @@ -0,0 +1,67 @@ +#!/bin/bash +# First-boot interactive setup: creates user account. +set -e + +clear +echo "=========================================" +echo " Welcome! Let's set up your account." +echo "=========================================" +echo + +# --- Username --- +while true; do + read -rp "Username: " USERNAME + if [[ -z "$USERNAME" ]]; then + echo "Username cannot be empty." + elif ! [[ "$USERNAME" =~ ^[a-z_][a-z0-9_-]*$ ]]; then + echo "Invalid username. Use lowercase letters, digits, hyphens, underscores." + else + break + fi +done + +# --- Password --- +while true; do + read -rsp "Password: " PASSWORD; echo + read -rsp "Confirm: " PASSWORD2; echo + if [[ -z "$PASSWORD" ]]; then + echo "Password cannot be empty." + elif [[ "$PASSWORD" != "$PASSWORD2" ]]; then + echo "Passwords do not match. Try again." + else + break + fi +done + +echo +echo "Creating user $USERNAME ..." + +useradd -m -G wheel,seat -s /bin/bash "$USERNAME" +echo "$USERNAME:$PASSWORD" | chpasswd + +# Sudoers +echo "%wheel ALL=(ALL:ALL) NOPASSWD: ALL" > /etc/sudoers.d/wheel + +# Sway config +mkdir -p "/home/$USERNAME/.config/sway" +cp /etc/sway/config "/home/$USERNAME/.config/sway/config" + +# Auto-start sway on tty1 login +cat >> "/home/$USERNAME/.bash_profile" << 'EOF' +if [ "$(tty)" = "/dev/tty1" ] && [ -z "$WAYLAND_DISPLAY" ]; then + exec sway +fi +EOF + +chown -R "$USERNAME:$USERNAME" "/home/$USERNAME" + +# Remove the getty override so tty1 returns to normal login prompt. +# When this script exits, systemd's Restart=always on getty@tty1 +# restarts getty with the original agetty config. +rm -f /etc/systemd/system/getty@tty1.service.d/first-boot.conf +rmdir /etc/systemd/system/getty@tty1.service.d 2>/dev/null || true +systemctl daemon-reload + +echo +echo "Done!" +sleep 1 diff --git a/distros/arch/grow-rootfs b/distros/arch/grow-rootfs new file mode 100644 index 0000000..b8982e3 --- /dev/null +++ b/distros/arch/grow-rootfs @@ -0,0 +1,13 @@ +#!/bin/bash +# Grows the root partition and filesystem to fill the disk. +# Runs once on first boot, then disables itself. +set -e + +ROOT_DEV=$(findmnt -no SOURCE /) +DISK="/dev/$(lsblk -ndo PKNAME "$ROOT_DEV")" +PART_NUM=$(cat /sys/class/block/$(basename "$ROOT_DEV")/partition) + +parted -s "$DISK" resizepart "$PART_NUM" 100% +resize2fs "$ROOT_DEV" + +systemctl disable grow-rootfs.service diff --git a/distros/arch/grow-rootfs.service b/distros/arch/grow-rootfs.service new file mode 100644 index 0000000..722eca7 --- /dev/null +++ b/distros/arch/grow-rootfs.service @@ -0,0 +1,13 @@ +[Unit] +Description=Grow root filesystem to fill disk +DefaultDependencies=no +Before=local-fs.target +After=local-fs-pre.target + +[Service] +Type=oneshot +ExecStart=/usr/local/sbin/grow-rootfs +RemainAfterExit=yes + +[Install] +WantedBy=local-fs.target diff --git a/distros/arch/image.yaml b/distros/arch/image.yaml new file mode 100644 index 0000000..4c52990 --- /dev/null +++ b/distros/arch/image.yaml @@ -0,0 +1,189 @@ +image: + name: ps5-arch + distribution: archlinux + description: Arch Linux with Sway desktop + architecture: x86_64 + +source: + downloader: archlinux-http + url: https://geo.mirror.pkgbuild.com/iso + skip_verification: true + +packages: + manager: pacman + update: true + cleanup: true + + repositories: + - name: mirrorlist + url: |- + Server = https://geo.mirror.pkgbuild.com/$repo/os/$arch + + sets: + - packages: + # Sway / Wayland desktop + - sway + - swaylock + - swayidle + - swaybg + - foot + - wofi + - waybar + - mako + - grim + - slurp + - wl-clipboard + - xorg-xwayland + + # Audio / media + - pipewire + - wireplumber + - pipewire-pulse + + # Display / GPU (AMD) + - mesa + - vulkan-radeon + - libva-mesa-driver + - xf86-video-amdgpu + - libinput + - xkeyboard-config + + # File manager / apps + - thunar + - firefox + + # Networking + - networkmanager + - linux-firmware + + # System + - base + - openssh + - sudo + - nano + - bash + - mkinitcpio + - kmod + - e2fsprogs + - parted + - polkit + - dbus + - seatd + - kexec-tools + + # Fonts + - ttf-dejavu + - ttf-liberation + - noto-fonts + - ttf-font-awesome + - fontconfig + action: install + +files: +- path: /etc/hostname + generator: hostname + +- path: /etc/hosts + generator: hosts + +- path: /etc/kernel/postinst.d/zz-update-boot + generator: copy + source: /tmp/build-staging/zz-update-boot + mode: "0755" + +- path: /etc/fstab + generator: copy + source: /tmp/build-staging/fstab + +- path: /usr/local/sbin/grow-rootfs + generator: copy + source: /tmp/build-staging/grow-rootfs + mode: "0755" + +- path: /etc/systemd/system/grow-rootfs.service + generator: copy + source: /tmp/build-staging/grow-rootfs.service + +- path: /opt/pkgs/ + generator: copy + source: /tmp/build-staging/pkgs + +- path: /usr/local/sbin/first-boot-setup + generator: copy + source: /tmp/build-staging/first-boot-setup + mode: "0755" + +actions: +- trigger: post-unpack + action: |- + #!/bin/bash + set -eux + # Initialise pacman keyring + pacman-key --init + pacman-key --populate archlinux + + # Fetch up-to-date HTTPS mirrors ranked by score, force-refresh package DBs + curl -fsSL "https://archlinux.org/mirrorlist/?country=all&protocol=https&use_mirror_status=on" \ + | sed 's/^#Server/Server/' > /etc/pacman.d/mirrorlist + pacman -Syy --noconfirm + + +- trigger: post-packages + action: |- + #!/bin/bash + set -eux + fc-cache -f -v + + # SSH + sed -i 's/^#*PermitRootLogin.*/PermitRootLogin no/' /etc/ssh/sshd_config + sed -i 's/^#*PasswordAuthentication.*/PasswordAuthentication yes/' /etc/ssh/sshd_config + systemctl enable sshd + systemctl enable NetworkManager + systemctl enable seatd + systemctl enable pipewire pipewire-pulse wireplumber || true + +- trigger: post-files + action: |- + #!/bin/bash + set -eux + systemctl enable grow-rootfs.service + + # Create default user (ps5/ps5) + useradd -m -G wheel,seat -s /bin/bash ps5 + echo "ps5:ps5" | chpasswd + echo "%wheel ALL=(ALL:ALL) NOPASSWD: ALL" > /etc/sudoers.d/wheel + + # Sway config + auto-start on tty1 login + mkdir -p /home/ps5/.config/sway + cp /etc/sway/config /home/ps5/.config/sway/config + { + echo 'if [ "$(tty)" = "/dev/tty1" ] && [ -z "$WAYLAND_DISPLAY" ]; then' + echo ' export XDG_RUNTIME_DIR="/tmp/xdg-runtime-$(id -u)"' + echo ' mkdir -p "$XDG_RUNTIME_DIR"' + echo ' chmod 700 "$XDG_RUNTIME_DIR"' + echo ' exec sway' + echo 'fi' + } >> /home/ps5/.bash_profile + chown -R ps5:ps5 /home/ps5 + + # Ensure vconsole.conf exists (needed by mkinitcpio sd-vconsole hook) + [ -f /etc/vconsole.conf ] || echo "KEYMAP=us" > /etc/vconsole.conf + + # Drop autodetect — it detects the build host's hardware, not the target. + # This produces a larger but hardware-independent initramfs. + sed -i 's/ autodetect//' /etc/mkinitcpio.conf + + # Install custom kernel packages + if ls /opt/pkgs/*.pkg.tar.zst 1>/dev/null 2>&1; then + pacman -U --noconfirm /opt/pkgs/*.pkg.tar.zst + rm -rf /opt/pkgs + KVER=$(ls -1t /lib/modules | head -1) + # mkinitcpio may warn about missing optional modules; don't fail on those + mkinitcpio -k "$KVER" -g "/boot/initrd.img-$KVER" || true + fi + + mkdir -p /boot/efi + /etc/kernel/postinst.d/zz-update-boot + +mappings: + architecture_map: archlinux diff --git a/distros/shared/fstab b/distros/shared/fstab new file mode 100644 index 0000000..251d832 --- /dev/null +++ b/distros/shared/fstab @@ -0,0 +1,2 @@ +LABEL=__DISTRO__ / ext4 rw,relatime 0 1 +LABEL=boot /boot/efi vfat rw,relatime 0 2 diff --git a/distros/shared/zz-update-boot b/distros/shared/zz-update-boot new file mode 100755 index 0000000..4124fc7 --- /dev/null +++ b/distros/shared/zz-update-boot @@ -0,0 +1,10 @@ +#!/bin/bash +# Copies the latest kernel + initrd to the EFI partition. +# Runs on every kernel install/update. +set -e +BOOT_PART="/boot/efi" +KVER="$1" +[ -z "$KVER" ] && KVER="$(ls -1t /lib/modules | head -1)" +cp "/boot/vmlinuz-$KVER" "$BOOT_PART/bzImage" +cp "/boot/initrd.img-$KVER" "$BOOT_PART/initrd.img" +echo ">> Kernel $KVER deployed to $BOOT_PART" diff --git a/distros/shared/zz-update-boot-multi b/distros/shared/zz-update-boot-multi new file mode 100644 index 0000000..0760577 --- /dev/null +++ b/distros/shared/zz-update-boot-multi @@ -0,0 +1,20 @@ +#!/bin/bash +# Multi-distro boot hook: copies kernel + initrd to the EFI partition +# using distro-specific names. Reads /etc/ps5-distro for current distro. +set -e +BOOT_PART="/boot/efi" +KVER="$1" +[ -z "$KVER" ] && KVER="$(ls -1t /lib/modules | head -1)" + +DISTRO="unknown" +[ -f /etc/ps5-distro ] && DISTRO="$(cat /etc/ps5-distro)" + +cp "/boot/vmlinuz-$KVER" "$BOOT_PART/bzImage" +cp "/boot/initrd.img-$KVER" "$BOOT_PART/initrd-${DISTRO}.img" + +# Ubuntu is default boot — also update the generic initrd.img +if [ "$DISTRO" = "ubuntu" ]; then + cp "/boot/initrd.img-$KVER" "$BOOT_PART/initrd.img" +fi + +echo ">> Kernel $KVER deployed to $BOOT_PART (distro=$DISTRO)" diff --git a/distros/ubuntu/grow-rootfs b/distros/ubuntu/grow-rootfs new file mode 100644 index 0000000..23ee936 --- /dev/null +++ b/distros/ubuntu/grow-rootfs @@ -0,0 +1,13 @@ +#!/bin/bash +# Grows the root partition and filesystem to fill the disk. +# Runs once on first boot, then disables itself. +set -e + +ROOT_DEV=$(findmnt -no SOURCE /) +DISK=$(lsblk -ndo PKNAME "$ROOT_DEV") +PART_NUM=$(cat /sys/class/block/$(basename "$ROOT_DEV")/partition) + +growpart "/dev/$DISK" "$PART_NUM" || true +resize2fs "$ROOT_DEV" || true + +systemctl disable grow-rootfs.service diff --git a/distros/ubuntu/grow-rootfs.service b/distros/ubuntu/grow-rootfs.service new file mode 100644 index 0000000..722eca7 --- /dev/null +++ b/distros/ubuntu/grow-rootfs.service @@ -0,0 +1,13 @@ +[Unit] +Description=Grow root filesystem to fill disk +DefaultDependencies=no +Before=local-fs.target +After=local-fs-pre.target + +[Service] +Type=oneshot +ExecStart=/usr/local/sbin/grow-rootfs +RemainAfterExit=yes + +[Install] +WantedBy=local-fs.target diff --git a/distros/ubuntu/image-minimal.yaml b/distros/ubuntu/image-minimal.yaml new file mode 100644 index 0000000..0bf324f --- /dev/null +++ b/distros/ubuntu/image-minimal.yaml @@ -0,0 +1,137 @@ +image: + name: ps5-ubuntu-minimal + distribution: ubuntu + release: noble + description: Ubuntu Noble minimal (for testing) + architecture: x86_64 + +source: + downloader: debootstrap + url: http://archive.ubuntu.com/ubuntu + variant: minbase + keyserver: keyserver.ubuntu.com + keys: + - 0x790BC7277767219C42C86F933B4FE6ACC0B21F32 + - 0xf6ecb3762474eda9d21b7022871920d1991bc93c + +packages: + manager: apt + update: true + cleanup: true + + repositories: + - name: sources.list + url: |- + deb http://archive.ubuntu.com/ubuntu {{ image.release }} main restricted universe multiverse + deb http://archive.ubuntu.com/ubuntu {{ image.release }}-updates main restricted universe multiverse + deb http://security.ubuntu.com/ubuntu {{ image.release }}-security main restricted universe multiverse + architectures: + - amd64 + + sets: + - packages: + - ubuntu-desktop-minimal + - firefox + - openssh-server + - network-manager + - linux-firmware + - initramfs-tools + - kmod + - sudo + - nano + - cloud-guest-utils + - kexec-tools + action: install + +files: +- path: /etc/hostname + generator: hostname + +- path: /etc/hosts + generator: hosts + +- path: /etc/machine-id + generator: dump + +- path: /etc/NetworkManager/conf.d/dns.conf + generator: copy + source: /tmp/build-staging/nm-dns.conf + +- path: /etc/kernel/postinst.d/zz-update-boot + generator: copy + source: /tmp/build-staging/zz-update-boot + mode: "0755" + +- path: /etc/fstab + generator: copy + source: /tmp/build-staging/fstab + +- path: /usr/local/sbin/grow-rootfs + generator: copy + source: /tmp/build-staging/grow-rootfs + mode: "0755" + +- path: /etc/systemd/system/grow-rootfs.service + generator: copy + source: /tmp/build-staging/grow-rootfs.service + +- path: /opt/debs/ + generator: copy + source: /tmp/build-staging/debs + +actions: +- trigger: post-unpack + action: |- + #!/bin/bash + set -eux + # Install gnupg + dirmngr so we can fetch the Mozilla PPA key + apt-get update + apt-get install -y gnupg dirmngr curl + + # Import Mozilla PPA signing key and add repository + mkdir -p /root/.gnupg /etc/apt/keyrings + chmod 700 /root/.gnupg + curl -fsSL "https://keyserver.ubuntu.com/pks/lookup?op=get&search=0x0AB215679C571D1C8325275B9BDB3D89CE49EC21" | \ + gpg --no-default-keyring --keyring gnupg-ring:/etc/apt/keyrings/mozillateam.gpg --import + chmod 644 /etc/apt/keyrings/mozillateam.gpg + + echo "deb [signed-by=/etc/apt/keyrings/mozillateam.gpg] http://ppa.launchpad.net/mozillateam/ppa/ubuntu noble main" \ + > /etc/apt/sources.list.d/mozilla-ppa.list + + # Pin PPA firefox over snap transitional package + cat > /etc/apt/preferences.d/mozilla-ppa << 'PINEOF' + Package: firefox* + Pin: release o=LP-PPA-mozillateam + Pin-Priority: 1001 + PINEOF + +- trigger: post-update + action: |- + #!/bin/bash + set -eux + passwd -l root + +- trigger: post-packages + action: |- + #!/bin/bash + set -eux + # SSH — password auth only, root login via sudo + sed -i 's/^#*PermitRootLogin.*/PermitRootLogin no/' /etc/ssh/sshd_config + sed -i 's/^#*PasswordAuthentication.*/PasswordAuthentication yes/' /etc/ssh/sshd_config + systemctl enable ssh + +- trigger: post-files + action: |- + #!/bin/bash + set -eux + systemctl enable grow-rootfs.service + systemctl enable systemd-resolved + mkdir -p /boot/efi + dpkg -i /opt/debs/*.deb + rm -rf /opt/debs + KVER=$(ls -1t /lib/modules | head -1) + update-initramfs -c -k "$KVER" + /etc/kernel/postinst.d/zz-update-boot "$KVER" + +mappings: + architecture_map: debian diff --git a/distros/ubuntu/image.yaml b/distros/ubuntu/image.yaml new file mode 100644 index 0000000..d084f16 --- /dev/null +++ b/distros/ubuntu/image.yaml @@ -0,0 +1,148 @@ +image: + name: ps5-ubuntu + distribution: ubuntu + release: noble + description: Ubuntu Noble desktop + architecture: x86_64 + +source: + downloader: debootstrap + url: http://archive.ubuntu.com/ubuntu + variant: minbase + keyserver: keyserver.ubuntu.com + keys: + - 0x790BC7277767219C42C86F933B4FE6ACC0B21F32 + - 0xf6ecb3762474eda9d21b7022871920d1991bc93c + +packages: + manager: apt + update: true + cleanup: true + + repositories: + - name: sources.list + url: |- + deb http://archive.ubuntu.com/ubuntu {{ image.release }} main restricted universe multiverse + deb http://archive.ubuntu.com/ubuntu {{ image.release }}-updates main restricted universe multiverse + deb http://security.ubuntu.com/ubuntu {{ image.release }}-security main restricted universe multiverse + architectures: + - amd64 + + sets: + - packages: + - ubuntu-desktop + - firefox + - openssh-server + - build-essential + - network-manager + - linux-firmware + - initramfs-tools + - kmod + - sudo + - nano + - cloud-guest-utils + - kexec-tools + - fonts-ubuntu + - fonts-liberation + - fonts-dejavu + - fontconfig + action: install + +files: +- path: /etc/hostname + generator: hostname + +- path: /etc/hosts + generator: hosts + +- path: /etc/machine-id + generator: dump + +- path: /etc/NetworkManager/conf.d/dns.conf + generator: copy + source: /tmp/build-staging/nm-dns.conf + +- path: /etc/kernel/postinst.d/zz-update-boot + generator: copy + source: /tmp/build-staging/zz-update-boot + mode: "0755" + +- path: /etc/fstab + generator: copy + source: /tmp/build-staging/fstab + +- path: /usr/local/sbin/grow-rootfs + generator: copy + source: /tmp/build-staging/grow-rootfs + mode: "0755" + +- path: /etc/systemd/system/grow-rootfs.service + generator: copy + source: /tmp/build-staging/grow-rootfs.service + +- path: /opt/debs/ + generator: copy + source: /tmp/build-staging/debs + +actions: +- trigger: post-unpack + action: |- + #!/bin/bash + set -eux + # Clear stale apt lists to avoid InRelease split errors after debootstrap + rm -f /var/lib/apt/lists/*InRelease /var/lib/apt/lists/*Release /var/lib/apt/lists/*Packages* || true + # Retry up to 10 times on transient 429/network errors + echo 'Acquire::Retries "10";' > /etc/apt/apt.conf.d/80retry + # Install gnupg + dirmngr so we can fetch the Mozilla PPA key + apt-get update + apt-get install -y gnupg dirmngr curl + + # Import Mozilla PPA signing key and add repository + mkdir -p /root/.gnupg /etc/apt/keyrings + chmod 700 /root/.gnupg + curl -fsSL "https://keyserver.ubuntu.com/pks/lookup?op=get&search=0x0AB215679C571D1C8325275B9BDB3D89CE49EC21" | \ + gpg --no-default-keyring --keyring gnupg-ring:/etc/apt/keyrings/mozillateam.gpg --import + chmod 644 /etc/apt/keyrings/mozillateam.gpg + + echo "deb [signed-by=/etc/apt/keyrings/mozillateam.gpg] http://ppa.launchpad.net/mozillateam/ppa/ubuntu noble main" \ + > /etc/apt/sources.list.d/mozilla-ppa.list + + # Pin PPA firefox over snap transitional package + cat > /etc/apt/preferences.d/mozilla-ppa << 'PINEOF' + Package: firefox* + Pin: release o=LP-PPA-mozillateam + Pin-Priority: 1001 + PINEOF + +- trigger: post-update + action: |- + #!/bin/bash + set -eux + passwd -l root + +- trigger: post-packages + action: |- + #!/bin/bash + set -eux + fc-cache -f -v + + # SSH — password auth only, root login via sudo + sed -i 's/^#*PermitRootLogin.*/PermitRootLogin no/' /etc/ssh/sshd_config + sed -i 's/^#*PasswordAuthentication.*/PasswordAuthentication yes/' /etc/ssh/sshd_config + systemctl enable ssh + +- trigger: post-files + action: |- + #!/bin/bash + set -eux + systemctl enable grow-rootfs.service + systemctl enable systemd-resolved + mkdir -p /boot/efi + dpkg -i /opt/debs/*.deb + rm -rf /opt/debs + KVER=$(ls -1t /lib/modules | head -1) + update-initramfs -c -k "$KVER" + /etc/kernel/postinst.d/zz-update-boot "$KVER" + +mappings: + architecture_map: debian diff --git a/distros/ubuntu/nm-dns.conf b/distros/ubuntu/nm-dns.conf new file mode 100644 index 0000000..c81a643 --- /dev/null +++ b/distros/ubuntu/nm-dns.conf @@ -0,0 +1,2 @@ +[main] +dns=systemd-resolved diff --git a/distros/ubuntu2604/grow-rootfs b/distros/ubuntu2604/grow-rootfs new file mode 100644 index 0000000..23ee936 --- /dev/null +++ b/distros/ubuntu2604/grow-rootfs @@ -0,0 +1,13 @@ +#!/bin/bash +# Grows the root partition and filesystem to fill the disk. +# Runs once on first boot, then disables itself. +set -e + +ROOT_DEV=$(findmnt -no SOURCE /) +DISK=$(lsblk -ndo PKNAME "$ROOT_DEV") +PART_NUM=$(cat /sys/class/block/$(basename "$ROOT_DEV")/partition) + +growpart "/dev/$DISK" "$PART_NUM" || true +resize2fs "$ROOT_DEV" || true + +systemctl disable grow-rootfs.service diff --git a/distros/ubuntu2604/grow-rootfs.service b/distros/ubuntu2604/grow-rootfs.service new file mode 100644 index 0000000..722eca7 --- /dev/null +++ b/distros/ubuntu2604/grow-rootfs.service @@ -0,0 +1,13 @@ +[Unit] +Description=Grow root filesystem to fill disk +DefaultDependencies=no +Before=local-fs.target +After=local-fs-pre.target + +[Service] +Type=oneshot +ExecStart=/usr/local/sbin/grow-rootfs +RemainAfterExit=yes + +[Install] +WantedBy=local-fs.target diff --git a/distros/ubuntu2604/image.yaml b/distros/ubuntu2604/image.yaml new file mode 100644 index 0000000..e6b106b --- /dev/null +++ b/distros/ubuntu2604/image.yaml @@ -0,0 +1,131 @@ +image: + name: ps5-ubuntu2604 + distribution: ubuntu + release: resolute + description: Ubuntu Resolute desktop + architecture: x86_64 + +source: + downloader: debootstrap + url: http://archive.ubuntu.com/ubuntu + variant: minbase + keyserver: keyserver.ubuntu.com + keys: + - 0x790BC7277767219C42C86F933B4FE6ACC0B21F32 + - 0xf6ecb3762474eda9d21b7022871920d1991bc93c + +packages: + manager: apt + update: true + cleanup: true + + repositories: + - name: sources.list + url: |- + deb http://archive.ubuntu.com/ubuntu {{ image.release }} main restricted universe multiverse + deb http://archive.ubuntu.com/ubuntu {{ image.release }}-updates main restricted universe multiverse + deb http://security.ubuntu.com/ubuntu {{ image.release }}-security main restricted universe multiverse + architectures: + - amd64 + + sets: + - packages: + - ubuntu-desktop + - firefox + - openssh-server + - build-essential + - network-manager + - linux-firmware + - initramfs-tools + - kmod + - sudo + - nano + - cloud-guest-utils + - kexec-tools + - fonts-ubuntu + - fonts-liberation + - fonts-dejavu + - fontconfig + action: install + +files: +- path: /etc/hostname + generator: hostname + +- path: /etc/hosts + generator: hosts + +- path: /etc/machine-id + generator: dump + +- path: /etc/NetworkManager/conf.d/dns.conf + generator: copy + source: /tmp/build-staging/nm-dns.conf + +- path: /etc/kernel/postinst.d/zz-update-boot + generator: copy + source: /tmp/build-staging/zz-update-boot + mode: "0755" + +- path: /etc/fstab + generator: copy + source: /tmp/build-staging/fstab + +- path: /usr/local/sbin/grow-rootfs + generator: copy + source: /tmp/build-staging/grow-rootfs + mode: "0755" + +- path: /etc/systemd/system/grow-rootfs.service + generator: copy + source: /tmp/build-staging/grow-rootfs.service + +- path: /opt/debs/ + generator: copy + source: /tmp/build-staging/debs + +actions: +- trigger: post-unpack + action: |- + #!/bin/bash + set -eux + # Clear stale apt lists to avoid InRelease split errors after debootstrap + rm -f /var/lib/apt/lists/*InRelease /var/lib/apt/lists/*Release /var/lib/apt/lists/*Packages* || true + # Retry up to 10 times on transient 429/network errors + echo 'Acquire::Retries "10";' > /etc/apt/apt.conf.d/80retry + apt-get update + +- trigger: post-update + action: |- + #!/bin/bash + set -eux + passwd -l root + +- trigger: post-packages + action: |- + #!/bin/bash + set -eux + fc-cache -f -v + + # SSH — password auth only, root login via sudo + sed -i 's/^#*PermitRootLogin.*/PermitRootLogin no/' /etc/ssh/sshd_config + sed -i 's/^#*PasswordAuthentication.*/PasswordAuthentication yes/' /etc/ssh/sshd_config + systemctl enable ssh + +- trigger: post-files + action: |- + #!/bin/bash + set -eux + systemctl enable grow-rootfs.service + systemctl enable systemd-resolved + mkdir -p /boot/efi + # Disable kdump postinst hook — it fails in chroot (can't resolve root device) + rm -f /etc/kernel/postinst.d/kdump-tools + dpkg -i /opt/debs/*.deb + rm -rf /opt/debs + KVER=$(ls -1t /lib/modules | head -1) + update-initramfs -c -k "$KVER" + /etc/kernel/postinst.d/zz-update-boot "$KVER" + +mappings: + architecture_map: debian diff --git a/distros/ubuntu2604/nm-dns.conf b/distros/ubuntu2604/nm-dns.conf new file mode 100644 index 0000000..c81a643 --- /dev/null +++ b/distros/ubuntu2604/nm-dns.conf @@ -0,0 +1,2 @@ +[main] +dns=systemd-resolved diff --git a/docker/image-builder/Dockerfile b/docker/image-builder/Dockerfile new file mode 100644 index 0000000..2fc6f96 --- /dev/null +++ b/docker/image-builder/Dockerfile @@ -0,0 +1,35 @@ +FROM ubuntu:24.04 + +ENV DEBIAN_FRONTEND=noninteractive + +# System dependencies for distrobuilder and image creation +RUN apt-get update && apt-get install -y --no-install-recommends \ + ca-certificates wget git make gcc libc6-dev build-essential \ + debootstrap rsync gpg dirmngr squashfs-tools \ + parted dosfstools e2fsprogs kmod \ + initramfs-tools fdisk gdisk udev kpartx \ + xz-utils bzip2 zstd \ + && rm -rf /var/lib/apt/lists/* + +# Install Go (Ubuntu 24.04 only has 1.22, distrobuilder needs newer) +RUN wget -q https://go.dev/dl/go1.25.6.linux-amd64.tar.gz -O /tmp/go.tar.gz && \ + tar -C /usr/local -xzf /tmp/go.tar.gz && \ + rm /tmp/go.tar.gz +ENV PATH="/usr/local/go/bin:/root/go/bin:${PATH}" + +# Build distrobuilder from source per upstream instructions +RUN mkdir -p /root/go/src/github.com/lxc/ && \ + cd /root/go/src/github.com/lxc/ && \ + git clone --depth 1 --branch v3.3.1 https://github.com/lxc/distrobuilder && \ + cd distrobuilder && \ + make && \ + cp /root/go/bin/distrobuilder /usr/local/bin/ && \ + rm -rf /root/go/src /root/go/pkg + +WORKDIR /build + +COPY docker/image-builder/entrypoint.sh /entrypoint.sh +COPY docker/image-builder/entrypoint-multi.sh /entrypoint-multi.sh +RUN chmod +x /entrypoint.sh /entrypoint-multi.sh + +ENTRYPOINT ["/entrypoint.sh"] diff --git a/docker/image-builder/entrypoint-multi.sh b/docker/image-builder/entrypoint-multi.sh new file mode 100644 index 0000000..b61b080 --- /dev/null +++ b/docker/image-builder/entrypoint-multi.sh @@ -0,0 +1,292 @@ +#!/bin/bash +# Multi-distro image builder: builds multiple distros into a single +# GPT image (shared FAT32 boot + one ext4 rootfs partition per distro). +set -ex + +IMG_SIZE="${IMG_SIZE:-32000}" +SKIP_CHROOT="${SKIP_CHROOT:-false}" +DISTROS="${DISTROS:-ubuntu ubuntu2604 arch alpine}" +STAGING="/tmp/build-staging" +EFI_LABEL="boot" +IMG="/output/ps5-multi.img" +NUM_DISTROS=$(echo $DISTROS | wc -w) + +# ====================================================================== +# Step 1: Build each distro's rootfs via distrobuilder +# ====================================================================== +for DISTRO in $DISTROS; do + CHROOT="/build/chroot-${DISTRO}" + ROOT_LABEL="$DISTRO" + + if [ "$SKIP_CHROOT" = "true" ] && [ -d "$CHROOT/bin" ]; then + echo "=== Skipping $DISTRO chroot build, reusing existing rootfs ===" + else + echo "=== Building $DISTRO rootfs ===" + + # --- Stage files for distrobuilder's copy generators --- + rm -rf "$STAGING" + mkdir -p "$STAGING/debs" "$STAGING/pkgs" + + # Use the multi-boot hook instead of the single-distro one + cp /repo/distros/shared/zz-update-boot-multi "$STAGING/zz-update-boot" + + # Generate per-distro fstab with partition labels + printf 'LABEL=%-14s / ext4 rw,relatime 0 1\nLABEL=%-14s /boot/efi vfat rw,relatime 0 2\n' \ + "$ROOT_LABEL" "$EFI_LABEL" > "$STAGING/fstab" + + cp /repo/distros/${DISTRO}/grow-rootfs "$STAGING/" + cp /repo/distros/${DISTRO}/nm-dns.conf "$STAGING/" 2>/dev/null || true + + case "$DISTRO" in + ubuntu*) + cp /repo/distros/${DISTRO}/grow-rootfs.service "$STAGING/" + cp /kernel-debs/*.deb "$STAGING/debs/" + ;; + alpine) + cp /repo/distros/alpine/grow-rootfs.openrc "$STAGING/" + ;; + arch) + cp /repo/distros/arch/grow-rootfs.service "$STAGING/" + cp /repo/distros/arch/first-boot-setup "$STAGING/" + cp /kernel-debs/*.pkg.tar.zst "$STAGING/pkgs/" + ;; + esac + + # --- Build rootfs --- + rm -rf "$CHROOT"/* "$CHROOT"/.[!.]* 2>/dev/null || true + mkdir -p "$CHROOT" + + YAML="/repo/distros/${DISTRO}/image.yaml" + distrobuilder build-dir "$YAML" "$CHROOT" --with-post-files --cache-dir /build/cache --cleanup=false + + # --- Post-distrobuilder fixups --- + case "$DISTRO" in + ubuntu*) + rm -f "$CHROOT/etc/resolv.conf" + ln -sf /run/systemd/resolve/stub-resolv.conf "$CHROOT/etc/resolv.conf" + ;; + esac + + # Write distro marker + echo "$DISTRO" > "$CHROOT/etc/ps5-distro" + fi + + # --- Alpine kernel gap: no kernel installed via image.yaml --- + # This runs even with --skip-chroot because Alpine's rootfs never includes a kernel; + # we must always extract it from the .deb artifacts and generate an initrd. + if [ "$DISTRO" = "alpine" ]; then + echo "=== Alpine: installing kernel from .deb artifacts ===" + + # Extract modules + vmlinuz from the linux-image .deb + ALPINE_STAGING="/tmp/alpine-kernel-staging" + rm -rf "$ALPINE_STAGING" + mkdir -p "$ALPINE_STAGING" + for deb in /kernel-debs/linux-image-*.deb; do + [ -f "$deb" ] || continue + dpkg-deb -x "$deb" "$ALPINE_STAGING" + done + + # Identify kernel version from the extracted .deb before copying + KVER=$(ls -1 "$ALPINE_STAGING/lib/modules" 2>/dev/null | head -1) + + if [ -n "$KVER" ]; then + # Resolve the real modules path inside the chroot. + # Alpine may use usr-merge (/lib -> usr/lib), so we must follow + # symlinks to find the actual directory on disk. + if [ -L "$CHROOT/lib" ]; then + MODDIR="$CHROOT/usr/lib/modules" + else + MODDIR="$CHROOT/lib/modules" + fi + mkdir -p "$MODDIR" + # Remove any stale modules from a previous build + rm -rf "$MODDIR/$KVER" + cp -a "$ALPINE_STAGING/lib/modules/$KVER" "$MODDIR/" + mkdir -p "$CHROOT/boot" + cp "$ALPINE_STAGING/boot/vmlinuz-$KVER" "$CHROOT/boot/vmlinuz-$KVER" + echo ">> Alpine: modules copied to $MODDIR/$KVER" + ls -la "$MODDIR/" + fi + rm -rf "$ALPINE_STAGING" + + if [ -n "$KVER" ]; then + echo "=== Alpine: generating initrd ===" + chroot "$CHROOT" depmod -a "$KVER" 2>/dev/null || true + + # Bind-mount essentials and run mkinitfs inside the alpine chroot + mount --bind /dev "$CHROOT/dev" + mount --bind /proc "$CHROOT/proc" + mount --bind /sys "$CHROOT/sys" + chroot "$CHROOT" mkinitfs -k "$KVER" -o "/boot/initrd.img-$KVER" "$KVER" || true + umount "$CHROOT/sys" "$CHROOT/proc" "$CHROOT/dev" + + # Populate /boot/efi/ for boot partition assembly + mkdir -p "$CHROOT/boot/efi" + cp "$CHROOT/boot/vmlinuz-$KVER" "$CHROOT/boot/efi/bzImage" + # mkinitfs may output as initramfs- — find whatever was generated + if [ -f "$CHROOT/boot/initrd.img-$KVER" ]; then + cp "$CHROOT/boot/initrd.img-$KVER" "$CHROOT/boot/efi/initrd.img" + else + # mkinitfs default output: /boot/initramfs-vanilla or similar + INITRD=$(ls -1t "$CHROOT"/boot/initramfs-* "$CHROOT"/boot/initrd* 2>/dev/null | head -1) + if [ -n "$INITRD" ]; then + cp "$INITRD" "$CHROOT/boot/efi/initrd.img" + else + echo "WARNING: No initrd found for alpine after mkinitfs" + fi + fi + echo ">> Alpine: kernel $KVER staged to boot/efi/" + else + echo "WARNING: No kernel modules found in .deb for alpine, skipping initrd generation" + fi + fi +done + +# ====================================================================== +# Step 2: Create GPT image with dynamic partition layout +# ====================================================================== +echo "=== Creating ${IMG_SIZE}MB GPT image ===" +TMPIMG="/build/ps5-multi.img" +dd if=/dev/zero of="$TMPIMG" bs=1M count=$IMG_SIZE conv=fsync status=progress + +BOOT_END=500 # MiB +USABLE=$((IMG_SIZE - BOOT_END)) +PER_DISTRO=$((USABLE / NUM_DISTROS)) + +parted -s "$TMPIMG" mklabel gpt +parted -s "$TMPIMG" mkpart primary fat32 1MiB ${BOOT_END}MiB +parted -s "$TMPIMG" set 1 esp on + +PART_START=$BOOT_END +PART_I=1 +for DISTRO in $DISTROS; do + if [ $PART_I -lt $NUM_DISTROS ]; then + PART_END=$((PART_START + PER_DISTRO)) + parted -s "$TMPIMG" mkpart primary ext4 ${PART_START}MiB ${PART_END}MiB + else + parted -s "$TMPIMG" mkpart primary ext4 ${PART_START}MiB 100% + fi + PART_START=$((PART_START + PER_DISTRO)) + PART_I=$((PART_I + 1)) +done + +# ====================================================================== +# Step 3: Setup loop device + format partitions +# ====================================================================== +LOOP_PATH=$(losetup -f) +if [ ! -e "$LOOP_PATH" ]; then + LOOP_NUM=${LOOP_PATH#/dev/loop} + mknod "$LOOP_PATH" b 7 "$LOOP_NUM" +fi + +LOOPDEV=$(losetup -f --show "$TMPIMG") +kpartx -av "$LOOPDEV" +sleep 1 + +LOOP_BASE=$(basename "$LOOPDEV") +PART_BOOT="/dev/mapper/${LOOP_BASE}p1" + +echo "=== Formatting partitions ===" +mkfs.vfat -n "$EFI_LABEL" -F32 "$PART_BOOT" + +PART_NUM=2 +for DISTRO in $DISTROS; do + PART="/dev/mapper/${LOOP_BASE}p${PART_NUM}" + mkfs.ext4 -L "$DISTRO" -m 1 "$PART" + PART_NUM=$((PART_NUM + 1)) +done + +# ====================================================================== +# Step 4: Copy each rootfs to its partition +# ====================================================================== +mkdir -p /tmp/mnt_boot /tmp/mnt_root + +PART_NUM=2 +for DISTRO in $DISTROS; do + echo "=== Copying $DISTRO rootfs ===" + PART="/dev/mapper/${LOOP_BASE}p${PART_NUM}" + mount "$PART" /tmp/mnt_root + cp -a "/build/chroot-${DISTRO}"/* /tmp/mnt_root/ + sync + umount /tmp/mnt_root + PART_NUM=$((PART_NUM + 1)) +done + +# ====================================================================== +# Step 5: Assemble boot partition +# ====================================================================== +echo "=== Assembling boot partition ===" +mount "$PART_BOOT" /tmp/mnt_boot + +# Collect boot files from each distro's chroot. +# Prefer /boot/efi/ (populated by fresh builds), fallback to /boot/ (skip-chroot reruns). +for DISTRO in $DISTROS; do + CHROOT="/build/chroot-${DISTRO}" + EFIDIR="$CHROOT/boot/efi" + BOOTDIR="$CHROOT/boot" + # Find kernel version: look for versioned directories (not 'kernel'), following symlinks + MODBASE="$CHROOT/lib/modules" + [ -L "$CHROOT/lib" ] && MODBASE="$CHROOT/usr/lib/modules" + KVER=$(find "$MODBASE" -maxdepth 1 -mindepth 1 -type d -not -name 'kernel' -printf '%f\n' 2>/dev/null | sort -V | tail -1) + + # Copy bzImage (shared kernel — same for all, just copy once) + if [ ! -f /tmp/mnt_boot/bzImage ]; then + if [ -f "$EFIDIR/bzImage" ]; then + cp "$EFIDIR/bzImage" /tmp/mnt_boot/ + elif [ -n "$KVER" ] && [ -f "$BOOTDIR/vmlinuz-$KVER" ]; then + cp "$BOOTDIR/vmlinuz-$KVER" /tmp/mnt_boot/bzImage + fi + fi + + # Copy distro-specific initrd + if [ -f "$EFIDIR/initrd.img" ]; then + cp "$EFIDIR/initrd.img" "/tmp/mnt_boot/initrd-${DISTRO}.img" + elif [ -n "$KVER" ] && [ -f "$BOOTDIR/initrd.img-$KVER" ]; then + cp "$BOOTDIR/initrd.img-$KVER" "/tmp/mnt_boot/initrd-${DISTRO}.img" + elif [ -f "$BOOTDIR/initramfs-vanilla" ]; then + # Alpine mkinitfs names its output initramfs-vanilla + cp "$BOOTDIR/initramfs-vanilla" "/tmp/mnt_boot/initrd-${DISTRO}.img" + fi + + # Clean up /boot/efi contents from the rootfs (they're on the boot partition now) + rm -rf "$CHROOT/boot/efi"/* +done + +# Ubuntu is default boot — copy its initrd as the generic initrd.img +if [ -f /tmp/mnt_boot/initrd-ubuntu.img ]; then + cp /tmp/mnt_boot/initrd-ubuntu.img /tmp/mnt_boot/initrd.img +fi + +# Generate per-distro cmdline files +for DISTRO in $DISTROS; do + sed "s|__DISTRO__|${DISTRO}|" /repo/boot/cmdline.txt > "/tmp/mnt_boot/cmdline-${DISTRO}.txt" +done + +# Default cmdline points to ubuntu +sed "s|__DISTRO__|ubuntu|" /repo/boot/cmdline.txt > /tmp/mnt_boot/cmdline.txt + +# Copy kexec scripts +for DISTRO in $DISTROS; do + cp "/repo/boot/kexec-${DISTRO}.sh" /tmp/mnt_boot/ + chmod +x "/tmp/mnt_boot/kexec-${DISTRO}.sh" +done + +# Copy vram.txt +cp /repo/boot/vram.txt /tmp/mnt_boot/ +sync + +# ====================================================================== +# Step 6: Cleanup +# ====================================================================== +umount /tmp/mnt_boot +rmdir /tmp/mnt_boot /tmp/mnt_root +kpartx -dv "$LOOPDEV" +losetup -d "$LOOPDEV" + +mv "$TMPIMG" "$IMG" +sync + +echo "========================================" +echo "Done! $IMG (${IMG_SIZE}MB) — $(echo $DISTROS | tr ' ' ' + ')" +echo "Flash: sudo dd if=$IMG of=/dev/sdX bs=4M status=progress" +echo "========================================" diff --git a/docker/image-builder/entrypoint.sh b/docker/image-builder/entrypoint.sh new file mode 100755 index 0000000..bb896e9 --- /dev/null +++ b/docker/image-builder/entrypoint.sh @@ -0,0 +1,175 @@ +#!/bin/bash +set -ex + +DISTRO="${DISTRO:-ubuntu}" +IMG_SIZE="${IMG_SIZE:-12000}" +SKIP_CHROOT="${SKIP_CHROOT:-false}" +STAGING="/tmp/build-staging" +ROOT_LABEL="${DISTRO}" +EFI_LABEL="boot" +CHROOT="/build/chroot" +IMG="/output/ps5-${DISTRO}.img" + +if [ "$SKIP_CHROOT" = "true" ] && [ -d "$CHROOT/bin" ]; then + echo "=== Reusing cached $DISTRO rootfs ===" +else + echo "=== Building $DISTRO rootfs ===" + # --- Stage files for distrobuilder's copy generators --- + rm -rf "$STAGING" + mkdir -p "$STAGING/debs" + cp /repo/distros/shared/zz-update-boot "$STAGING/" + # Generate per-distro fstab with partition labels + printf 'LABEL=%-14s / ext4 rw,relatime 0 1\nLABEL=%-14s /boot/efi vfat rw,relatime 0 2\n' \ + "$ROOT_LABEL" "$EFI_LABEL" > "$STAGING/fstab" + cp /repo/distros/${DISTRO}/grow-rootfs "$STAGING/" + cp /repo/distros/${DISTRO}/nm-dns.conf "$STAGING/" 2>/dev/null || true + + case "$DISTRO" in + ubuntu*) + cp /repo/distros/${DISTRO}/grow-rootfs.service "$STAGING/" + cp /kernel-debs/*.deb "$STAGING/debs/" + ;; + alpine) + cp /repo/distros/alpine/grow-rootfs.openrc "$STAGING/" + ;; + arch) + cp /repo/distros/arch/grow-rootfs.service "$STAGING/" + cp /repo/distros/arch/first-boot-setup "$STAGING/" + mkdir -p "$STAGING/pkgs" + cp /kernel-debs/*.pkg.tar.zst "$STAGING/pkgs/" + ;; + esac + + # --- Build rootfs --- + rm -rf "$CHROOT"/* "$CHROOT"/.[!.]* 2>/dev/null || true + + YAML="/repo/distros/${DISTRO}/image.yaml" + distrobuilder build-dir "$YAML" "$CHROOT" --with-post-files --cache-dir /build/cache --cleanup=false +fi + +# --- Post-distrobuilder fixups --- +case "$DISTRO" in + ubuntu*) + rm -f "$CHROOT/etc/resolv.conf" + ln -sf /run/systemd/resolve/stub-resolv.conf "$CHROOT/etc/resolv.conf" + ;; +esac + +# --- Alpine kernel gap: no kernel installed via image.yaml --- +# Extract kernel from .deb, copy modules + bzImage, then chroot to run mkinitfs +if [ "$DISTRO" = "alpine" ]; then + echo "=== Alpine: installing kernel from .deb artifacts ===" + + ALPINE_STAGING="/tmp/alpine-kernel-staging" + rm -rf "$ALPINE_STAGING" + mkdir -p "$ALPINE_STAGING" + for deb in /kernel-debs/linux-image-*.deb; do + [ -f "$deb" ] || continue + dpkg-deb -x "$deb" "$ALPINE_STAGING" + done + + KVER=$(ls -1 "$ALPINE_STAGING/lib/modules" 2>/dev/null | head -1) + + if [ -n "$KVER" ]; then + # Resolve the real modules path (Alpine may use usr-merge: /lib -> usr/lib) + if [ -L "$CHROOT/lib" ]; then + MODDIR="$CHROOT/usr/lib/modules" + else + MODDIR="$CHROOT/lib/modules" + fi + mkdir -p "$MODDIR" + rm -rf "$MODDIR/$KVER" + cp -a "$ALPINE_STAGING/lib/modules/$KVER" "$MODDIR/" + mkdir -p "$CHROOT/boot" + cp "$ALPINE_STAGING/boot/vmlinuz-$KVER" "$CHROOT/boot/vmlinuz-$KVER" + echo ">> Alpine: modules copied to $MODDIR/$KVER" + fi + rm -rf "$ALPINE_STAGING" + + if [ -n "$KVER" ]; then + chroot "$CHROOT" depmod -a "$KVER" 2>/dev/null || true + + mount --bind /dev "$CHROOT/dev" + mount --bind /proc "$CHROOT/proc" + mount --bind /sys "$CHROOT/sys" + chroot "$CHROOT" mkinitfs -k "$KVER" -o "/boot/initrd.img-$KVER" "$KVER" || true + umount "$CHROOT/sys" "$CHROOT/proc" "$CHROOT/dev" + + # Populate /boot/efi/ for boot partition assembly + mkdir -p "$CHROOT/boot/efi" + cp "$CHROOT/boot/vmlinuz-$KVER" "$CHROOT/boot/efi/bzImage" + if [ -f "$CHROOT/boot/initrd.img-$KVER" ]; then + cp "$CHROOT/boot/initrd.img-$KVER" "$CHROOT/boot/efi/initrd.img" + else + INITRD=$(ls -1t "$CHROOT"/boot/initramfs-* "$CHROOT"/boot/initrd* 2>/dev/null | head -1) + if [ -n "$INITRD" ]; then + cp "$INITRD" "$CHROOT/boot/efi/initrd.img" + else + echo "WARNING: No initrd found for alpine after mkinitfs" + fi + fi + echo ">> Alpine: kernel $KVER staged to boot/efi/" + else + echo "WARNING: No kernel modules found in .deb for alpine" + fi +fi + +# --- Create GPT disk image --- +echo "=== Creating ${IMG_SIZE}MB disk image ===" +TMPIMG="/build/ps5-${DISTRO}.img" +dd if=/dev/zero of="$TMPIMG" bs=1M count=$IMG_SIZE conv=fsync status=progress + +parted -s "$TMPIMG" mklabel gpt +parted -s "$TMPIMG" mkpart primary ext4 500MiB 100% +parted -s "$TMPIMG" mkpart primary fat32 1MiB 500MiB +parted -s "$TMPIMG" set 2 esp on + +# Ensure the free loop device node exists (udev doesn't run inside containers, +# so when the kernel allocates a new loop number it may lack a /dev node) +LOOP_PATH=$(losetup -f) +if [ ! -e "$LOOP_PATH" ]; then + LOOP_NUM=${LOOP_PATH#/dev/loop} + mknod "$LOOP_PATH" b 7 "$LOOP_NUM" +fi + +LOOPDEV=$(losetup -f --show "$TMPIMG") +# Use kpartx to create partition device mappings (more reliable in containers) +kpartx -av "$LOOPDEV" +sleep 1 + +# kpartx creates /dev/mapper/loopXp1, /dev/mapper/loopXp2 +LOOP_BASE=$(basename "$LOOPDEV") +PART1="/dev/mapper/${LOOP_BASE}p1" +PART2="/dev/mapper/${LOOP_BASE}p2" + +echo "=== Formatting partitions ===" +mkfs.ext4 -L "$ROOT_LABEL" -m 1 "$PART1" +mkfs.vfat -n "$EFI_LABEL" -F32 "$PART2" + +mkdir -p /tmp/usb_root /tmp/usb_efi +mount "$PART1" /tmp/usb_root +mount "$PART2" /tmp/usb_efi + +echo "=== Copying rootfs to image ===" +cp -a "$CHROOT"/* /tmp/usb_root/ +sync + +echo "=== Assembling boot partition ===" +mv /tmp/usb_root/boot/efi/* /tmp/usb_efi/ 2>/dev/null || true +sed "s|__DISTRO__|$ROOT_LABEL|" /repo/boot/cmdline.txt > /tmp/usb_efi/cmdline.txt +cp /repo/boot/vram.txt /tmp/usb_efi/ +sync + +umount /tmp/usb_root /tmp/usb_efi +rmdir /tmp/usb_root /tmp/usb_efi +kpartx -dv "$LOOPDEV" +losetup -d "$LOOPDEV" + +# Move finished image to output volume +mv "$TMPIMG" "$IMG" +sync + +echo "========================================" +echo "Done! $IMG (${IMG_SIZE}MB)" +echo "Flash: sudo dd if=$IMG of=/dev/sdX bs=4M status=progress" +echo "========================================" diff --git a/docker/kernel-builder-arch/Dockerfile b/docker/kernel-builder-arch/Dockerfile new file mode 100644 index 0000000..5520a5e --- /dev/null +++ b/docker/kernel-builder-arch/Dockerfile @@ -0,0 +1,16 @@ +FROM archlinux:latest + +# Only packaging tools needed — kernel is already compiled +RUN pacman -Syu --noconfirm && pacman -S --noconfirm \ + zstd libarchive && \ + pacman -Scc --noconfirm + +WORKDIR /out/staging + +# Pre-built artifacts are bind-mounted at /out/staging +# Output packages go to /out + +COPY docker/kernel-builder-arch/build.sh /build.sh +RUN chmod +x /build.sh + +CMD ["/build.sh"] diff --git a/docker/kernel-builder-arch/build.sh b/docker/kernel-builder-arch/build.sh new file mode 100644 index 0000000..474e061 --- /dev/null +++ b/docker/kernel-builder-arch/build.sh @@ -0,0 +1,58 @@ +#!/bin/bash +# Packages pre-built kernel artifacts as a pacman .pkg.tar.zst. +# Runs inside Docker as root; packages manually (makepkg refuses root). +# Expects build artifacts staged in /out/staging by the ubuntu build step. +set -e + +if [ ! -f /out/staging/boot/bzImage ]; then + echo "Error: no staged artifacts in /out/staging — run the kernel build step first" + exit 1 +fi + +# Determine version from staged modules directory +KVER=$(ls /out/staging/lib/modules/) +PKGNAME="linux-custom" +VERSION=${KVER%%-*} + +echo "==> Packaging kernel $KVER as pacman package" + +STAGING=$(mktemp -d) + +# Copy staged boot artifacts +mkdir -p "$STAGING/boot" +cp /out/staging/boot/bzImage "$STAGING/boot/vmlinuz-$KVER" +cp /out/staging/System.map "$STAGING/boot/System.map-$KVER" +cp /out/staging/.config "$STAGING/boot/config-$KVER" + +# Copy pre-installed modules (Arch uses /lib -> /usr/lib) +mkdir -p "$STAGING/usr/lib/modules" +cp -a "/out/staging/lib/modules/$KVER" "$STAGING/usr/lib/modules/" + +# Create .PKGINFO +BUILDDATE=$(date -u +%s) +INSTALLED_SIZE=$(du -sb "$STAGING" | awk '{print $1}') +cat > "$STAGING/.PKGINFO" << EOF +pkgname = $PKGNAME +pkgbase = $PKGNAME +pkgver = ${VERSION}-1 +pkgdesc = Custom Linux kernel $KVER for PS5 +url = https://kernel.org +builddate = $BUILDDATE +packager = bootstrap_docker +size = $INSTALLED_SIZE +arch = x86_64 +license = GPL-2.0-only +provides = linux=$VERSION +provides = linux-custom=$VERSION +EOF + +# Create .MTREE (required by newer pacman) +cd "$STAGING" +LANG=C bsdtar -czf .MTREE --format=mtree \ + --options='!all,use-set,type,uid,gid,mode,time,size,md5,sha256,link' \ + .PKGINFO * + +# Build the package +LANG=C bsdtar -cf - .PKGINFO .MTREE * | zstd -c -T0 > "/out/${PKGNAME}-${VERSION}-1-x86_64.pkg.tar.zst" + +echo "==> Done: /out/${PKGNAME}-${VERSION}-1-x86_64.pkg.tar.zst" diff --git a/docker/kernel-builder/Dockerfile b/docker/kernel-builder/Dockerfile new file mode 100644 index 0000000..ed96972 --- /dev/null +++ b/docker/kernel-builder/Dockerfile @@ -0,0 +1,23 @@ +FROM ubuntu:24.04 + +ENV DEBIAN_FRONTEND=noninteractive + +RUN apt-get update && apt-get install -y --no-install-recommends \ + build-essential bc bison flex kmod cpio gawk \ + libdw-dev libelf-dev libssl-dev \ + python3 rsync dpkg-dev debhelper zstd \ + perl git xz-utils ccache \ + && rm -rf /var/lib/apt/lists/* + +ENV PATH="/usr/lib/ccache:${PATH}" +ENV CCACHE_DIR=/ccache + +WORKDIR /src + +# Kernel source is bind-mounted at /src +# Build artifacts are staged to /out/staging + +COPY docker/kernel-builder/build.sh /build.sh +RUN chmod +x /build.sh + +CMD ["/build.sh"] diff --git a/docker/kernel-builder/build.sh b/docker/kernel-builder/build.sh new file mode 100644 index 0000000..998cee5 --- /dev/null +++ b/docker/kernel-builder/build.sh @@ -0,0 +1,28 @@ +#!/bin/bash +# Compiles the kernel and stages all artifacts into /out/staging. +# Runs inside Docker; kernel source is bind-mounted at /src. +set -e + +# Clean host-built tool artifacts that may reference wrong include paths +make -C tools/objtool clean 2>/dev/null || true + +make olddefconfig +make -j"$(nproc)" bzImage modules + +# Stage all artifacts so downstream packagers don't need to run make +echo "=== Staging build artifacts ===" +rm -rf /out/staging +mkdir -p /out/staging/boot + +cp arch/x86/boot/bzImage /out/staging/boot/ +cp System.map /out/staging/ +cp .config /out/staging/ + +make modules_install INSTALL_MOD_PATH=/out/staging INSTALL_MOD_STRIP=1 + +# Remove dangling symlinks back into the source tree +KVER=$(make -s kernelrelease) +rm -f "/out/staging/lib/modules/$KVER/build" \ + "/out/staging/lib/modules/$KVER/source" + +echo "=== Build artifacts staged in /out/staging ===" diff --git a/patches/config b/patches/config new file mode 100644 index 0000000..b23d253 --- /dev/null +++ b/patches/config @@ -0,0 +1,5834 @@ +# +# Automatically generated file; DO NOT EDIT. +# Linux/x86 6.19.12 Kernel Configuration +# +CONFIG_CC_VERSION_TEXT="gcc (Ubuntu 13.3.0-6ubuntu2~24.04.1) 13.3.0" +CONFIG_CC_IS_GCC=y +CONFIG_GCC_VERSION=130300 +CONFIG_CLANG_VERSION=0 +CONFIG_AS_IS_GNU=y +CONFIG_AS_VERSION=24200 +CONFIG_LD_IS_BFD=y +CONFIG_LD_VERSION=24200 +CONFIG_LLD_VERSION=0 +CONFIG_RUSTC_VERSION=0 +CONFIG_RUSTC_LLVM_VERSION=0 +CONFIG_CC_CAN_LINK=y +CONFIG_CC_HAS_ASM_GOTO_OUTPUT=y +CONFIG_CC_HAS_ASM_GOTO_TIED_OUTPUT=y +CONFIG_TOOLS_SUPPORT_RELR=y +CONFIG_CC_HAS_ASM_INLINE=y +CONFIG_CC_HAS_ASSUME=y +CONFIG_CC_HAS_NO_PROFILE_FN_ATTR=y +CONFIG_LD_CAN_USE_KEEP_IN_OVERLAY=y +CONFIG_PAHOLE_VERSION=125 +CONFIG_IRQ_WORK=y +CONFIG_BUILDTIME_TABLE_SORT=y +CONFIG_THREAD_INFO_IN_TASK=y + +# +# General setup +# +CONFIG_INIT_ENV_ARG_LIMIT=32 +# CONFIG_COMPILE_TEST is not set +# CONFIG_WERROR is not set +CONFIG_LOCALVERSION="" +# CONFIG_LOCALVERSION_AUTO is not set +CONFIG_BUILD_SALT="" +CONFIG_HAVE_KERNEL_GZIP=y +CONFIG_HAVE_KERNEL_BZIP2=y +CONFIG_HAVE_KERNEL_LZMA=y +CONFIG_HAVE_KERNEL_XZ=y +CONFIG_HAVE_KERNEL_LZO=y +CONFIG_HAVE_KERNEL_LZ4=y +CONFIG_HAVE_KERNEL_ZSTD=y +# CONFIG_KERNEL_GZIP is not set +# CONFIG_KERNEL_BZIP2 is not set +# CONFIG_KERNEL_LZMA is not set +# CONFIG_KERNEL_XZ is not set +# CONFIG_KERNEL_LZO is not set +# CONFIG_KERNEL_LZ4 is not set +CONFIG_KERNEL_ZSTD=y +CONFIG_DEFAULT_INIT="" +CONFIG_DEFAULT_HOSTNAME="ps5" +CONFIG_SYSVIPC=y +CONFIG_SYSVIPC_SYSCTL=y +CONFIG_SYSVIPC_COMPAT=y +CONFIG_POSIX_MQUEUE=y +CONFIG_POSIX_MQUEUE_SYSCTL=y +CONFIG_WATCH_QUEUE=y +CONFIG_CROSS_MEMORY_ATTACH=y +CONFIG_AUDIT=y +CONFIG_HAVE_ARCH_AUDITSYSCALL=y +CONFIG_AUDITSYSCALL=y + +# +# IRQ subsystem +# +CONFIG_GENERIC_IRQ_PROBE=y +CONFIG_GENERIC_IRQ_SHOW=y +CONFIG_GENERIC_IRQ_EFFECTIVE_AFF_MASK=y +CONFIG_GENERIC_PENDING_IRQ=y +CONFIG_GENERIC_IRQ_MIGRATION=y +CONFIG_HARDIRQS_SW_RESEND=y +CONFIG_IRQ_DOMAIN=y +CONFIG_IRQ_DOMAIN_HIERARCHY=y +CONFIG_GENERIC_MSI_IRQ=y +CONFIG_GENERIC_IRQ_MATRIX_ALLOCATOR=y +CONFIG_GENERIC_IRQ_RESERVATION_MODE=y +CONFIG_IRQ_FORCED_THREADING=y +CONFIG_SPARSE_IRQ=y +# CONFIG_GENERIC_IRQ_DEBUGFS is not set +# end of IRQ subsystem + +CONFIG_CLOCKSOURCE_WATCHDOG=y +CONFIG_ARCH_CLOCKSOURCE_INIT=y +CONFIG_GENERIC_TIME_VSYSCALL=y +CONFIG_GENERIC_CLOCKEVENTS=y +CONFIG_GENERIC_CLOCKEVENTS_BROADCAST=y +CONFIG_GENERIC_CLOCKEVENTS_BROADCAST_IDLE=y +CONFIG_GENERIC_CLOCKEVENTS_MIN_ADJUST=y +CONFIG_GENERIC_CMOS_UPDATE=y +CONFIG_HAVE_POSIX_CPU_TIMERS_TASK_WORK=y +CONFIG_POSIX_CPU_TIMERS_TASK_WORK=y +CONFIG_CONTEXT_TRACKING=y +CONFIG_CONTEXT_TRACKING_IDLE=y + +# +# Timers subsystem +# +CONFIG_TICK_ONESHOT=y +CONFIG_NO_HZ_COMMON=y +# CONFIG_HZ_PERIODIC is not set +# CONFIG_NO_HZ_IDLE is not set +CONFIG_NO_HZ_FULL=y +CONFIG_CONTEXT_TRACKING_USER=y +# CONFIG_CONTEXT_TRACKING_USER_FORCE is not set +CONFIG_NO_HZ=y +CONFIG_HIGH_RES_TIMERS=y +CONFIG_CLOCKSOURCE_WATCHDOG_MAX_SKEW_US=100 +CONFIG_POSIX_AUX_CLOCKS=y +# end of Timers subsystem + +CONFIG_BPF=y +CONFIG_HAVE_EBPF_JIT=y +CONFIG_ARCH_WANT_DEFAULT_BPF_JIT=y + +# +# BPF subsystem +# +CONFIG_BPF_SYSCALL=y +CONFIG_BPF_JIT=y +CONFIG_BPF_JIT_ALWAYS_ON=y +CONFIG_BPF_JIT_DEFAULT_ON=y +CONFIG_BPF_UNPRIV_DEFAULT_OFF=y +# CONFIG_BPF_PRELOAD is not set +CONFIG_BPF_LSM=y +# end of BPF subsystem + +CONFIG_PREEMPT_BUILD=y +CONFIG_ARCH_HAS_PREEMPT_LAZY=y +# CONFIG_PREEMPT_NONE is not set +CONFIG_PREEMPT_VOLUNTARY=y +# CONFIG_PREEMPT is not set +# CONFIG_PREEMPT_LAZY is not set +# CONFIG_PREEMPT_RT is not set +CONFIG_PREEMPT_COUNT=y +CONFIG_PREEMPTION=y +CONFIG_PREEMPT_DYNAMIC=y +CONFIG_SCHED_CORE=y + +# +# CPU/Task time and stats accounting +# +CONFIG_VIRT_CPU_ACCOUNTING=y +CONFIG_VIRT_CPU_ACCOUNTING_GEN=y +# CONFIG_IRQ_TIME_ACCOUNTING is not set +CONFIG_BSD_PROCESS_ACCT=y +CONFIG_BSD_PROCESS_ACCT_V3=y +CONFIG_TASKSTATS=y +CONFIG_TASK_DELAY_ACCT=y +CONFIG_TASK_XACCT=y +CONFIG_TASK_IO_ACCOUNTING=y +CONFIG_PSI=y +# CONFIG_PSI_DEFAULT_DISABLED is not set +# end of CPU/Task time and stats accounting + +CONFIG_CPU_ISOLATION=y + +# +# RCU Subsystem +# +CONFIG_TREE_RCU=y +CONFIG_PREEMPT_RCU=y +# CONFIG_RCU_EXPERT is not set +CONFIG_TREE_SRCU=y +CONFIG_TASKS_RCU_GENERIC=y +CONFIG_NEED_TASKS_RCU=y +CONFIG_TASKS_RCU=y +CONFIG_TASKS_TRACE_RCU=y +CONFIG_RCU_STALL_COMMON=y +CONFIG_RCU_NEED_SEGCBLIST=y +CONFIG_RCU_NOCB_CPU=y +# CONFIG_RCU_NOCB_CPU_DEFAULT_ALL is not set +CONFIG_RCU_LAZY=y +CONFIG_RCU_LAZY_DEFAULT_OFF=y +# end of RCU Subsystem + +# CONFIG_IKCONFIG is not set +CONFIG_IKHEADERS=m +CONFIG_LOG_BUF_SHIFT=18 +CONFIG_LOG_CPU_MAX_BUF_SHIFT=12 +# CONFIG_PRINTK_INDEX is not set +CONFIG_HAVE_UNSTABLE_SCHED_CLOCK=y + +# +# Scheduler features +# +CONFIG_UCLAMP_TASK=y +CONFIG_UCLAMP_BUCKETS_COUNT=5 +# CONFIG_SCHED_PROXY_EXEC is not set +# end of Scheduler features + +CONFIG_ARCH_SUPPORTS_NUMA_BALANCING=y +CONFIG_ARCH_WANT_BATCHED_UNMAP_TLB_FLUSH=y +CONFIG_CC_HAS_INT128=y +CONFIG_CC_IMPLICIT_FALLTHROUGH="-Wimplicit-fallthrough=5" +CONFIG_GCC10_NO_ARRAY_BOUNDS=y +CONFIG_CC_NO_ARRAY_BOUNDS=y +CONFIG_GCC_NO_STRINGOP_OVERFLOW=y +CONFIG_CC_NO_STRINGOP_OVERFLOW=y +CONFIG_ARCH_SUPPORTS_INT128=y +CONFIG_NUMA_BALANCING=y +CONFIG_NUMA_BALANCING_DEFAULT_ENABLED=y +CONFIG_SLAB_OBJ_EXT=y +CONFIG_CGROUPS=y +CONFIG_PAGE_COUNTER=y +# CONFIG_CGROUP_FAVOR_DYNMODS is not set +CONFIG_MEMCG=y +CONFIG_MEMCG_V1=y +CONFIG_BLK_CGROUP=y +CONFIG_CGROUP_WRITEBACK=y +CONFIG_CGROUP_SCHED=y +CONFIG_GROUP_SCHED_WEIGHT=y +CONFIG_GROUP_SCHED_BANDWIDTH=y +CONFIG_FAIR_GROUP_SCHED=y +CONFIG_CFS_BANDWIDTH=y +# CONFIG_RT_GROUP_SCHED is not set +CONFIG_SCHED_MM_CID=y +CONFIG_UCLAMP_TASK_GROUP=y +CONFIG_CGROUP_PIDS=y +CONFIG_CGROUP_RDMA=y +CONFIG_CGROUP_DMEM=y +CONFIG_CGROUP_FREEZER=y +CONFIG_CGROUP_HUGETLB=y +CONFIG_CPUSETS=y +CONFIG_CPUSETS_V1=y +CONFIG_PROC_PID_CPUSET=y +CONFIG_CGROUP_DEVICE=y +CONFIG_CGROUP_CPUACCT=y +CONFIG_CGROUP_PERF=y +CONFIG_CGROUP_BPF=y +CONFIG_CGROUP_MISC=y +# CONFIG_CGROUP_DEBUG is not set +CONFIG_SOCK_CGROUP_DATA=y +CONFIG_NAMESPACES=y +CONFIG_UTS_NS=y +CONFIG_TIME_NS=y +CONFIG_IPC_NS=y +CONFIG_USER_NS=y +CONFIG_PID_NS=y +CONFIG_NET_NS=y +CONFIG_CHECKPOINT_RESTORE=y +CONFIG_SCHED_AUTOGROUP=y +CONFIG_RELAY=y +CONFIG_BLK_DEV_INITRD=y +CONFIG_INITRAMFS_SOURCE="" +CONFIG_RD_GZIP=y +CONFIG_RD_BZIP2=y +CONFIG_RD_LZMA=y +CONFIG_RD_XZ=y +CONFIG_RD_LZO=y +CONFIG_RD_LZ4=y +CONFIG_RD_ZSTD=y +# CONFIG_BOOT_CONFIG is not set +CONFIG_CMDLINE_LOG_WRAP_IDEAL_LEN=1021 +CONFIG_INITRAMFS_PRESERVE_MTIME=y +CONFIG_CC_OPTIMIZE_FOR_PERFORMANCE=y +# CONFIG_CC_OPTIMIZE_FOR_SIZE is not set +CONFIG_LD_ORPHAN_WARN=y +CONFIG_LD_ORPHAN_WARN_LEVEL="warn" +CONFIG_SYSCTL=y +CONFIG_HAVE_UID16=y +CONFIG_SYSCTL_EXCEPTION_TRACE=y +CONFIG_SYSFS_SYSCALL=y +CONFIG_HAVE_PCSPKR_PLATFORM=y +CONFIG_EXPERT=y +CONFIG_UID16=y +CONFIG_MULTIUSER=y +CONFIG_SGETMASK_SYSCALL=y +CONFIG_FHANDLE=y +CONFIG_POSIX_TIMERS=y +CONFIG_PRINTK=y +CONFIG_BUG=y +CONFIG_ELF_CORE=y +CONFIG_PCSPKR_PLATFORM=y +# CONFIG_BASE_SMALL is not set +CONFIG_FUTEX=y +CONFIG_FUTEX_PI=y +CONFIG_FUTEX_PRIVATE_HASH=y +CONFIG_FUTEX_MPOL=y +CONFIG_EPOLL=y +CONFIG_SIGNALFD=y +CONFIG_TIMERFD=y +CONFIG_EVENTFD=y +CONFIG_SHMEM=y +CONFIG_AIO=y +CONFIG_IO_URING=y +# CONFIG_IO_URING_MOCK_FILE is not set +CONFIG_ADVISE_SYSCALLS=y +CONFIG_MEMBARRIER=y +CONFIG_KCMP=y +CONFIG_RSEQ=y +# CONFIG_RSEQ_STATS is not set +# CONFIG_RSEQ_DEBUG_DEFAULT_ENABLE is not set +CONFIG_CACHESTAT_SYSCALL=y +CONFIG_KALLSYMS=y +# CONFIG_KALLSYMS_SELFTEST is not set +CONFIG_KALLSYMS_ALL=y +CONFIG_ARCH_HAS_MEMBARRIER_SYNC_CORE=y +CONFIG_ARCH_SUPPORTS_MSEAL_SYSTEM_MAPPINGS=y +CONFIG_HAVE_PERF_EVENTS=y +CONFIG_GUEST_PERF_EVENTS=y + +# +# Kernel Performance Events And Counters +# +CONFIG_PERF_EVENTS=y +# CONFIG_DEBUG_PERF_USE_VMALLOC is not set +# end of Kernel Performance Events And Counters + +CONFIG_SYSTEM_DATA_VERIFICATION=y +CONFIG_PROFILING=y +CONFIG_TRACEPOINTS=y + +# +# Kexec and crash features +# +CONFIG_CRASH_RESERVE=y +CONFIG_VMCORE_INFO=y +CONFIG_KEXEC_CORE=y +CONFIG_KEXEC=y +CONFIG_KEXEC_FILE=y +CONFIG_KEXEC_SIG=y +# CONFIG_KEXEC_SIG_FORCE is not set +# CONFIG_KEXEC_BZIMAGE_VERIFY_SIG is not set +CONFIG_CRASH_DUMP=y +CONFIG_CRASH_HOTPLUG=y +CONFIG_CRASH_MAX_MEMORY_RANGES=8192 +# end of Kexec and crash features + +# +# Live Update and Kexec HandOver +# +# CONFIG_KEXEC_HANDOVER is not set +# end of Live Update and Kexec HandOver +# end of General setup + +CONFIG_64BIT=y +CONFIG_X86_64=y +CONFIG_X86=y +CONFIG_INSTRUCTION_DECODER=y +CONFIG_OUTPUT_FORMAT="elf64-x86-64" +CONFIG_LOCKDEP_SUPPORT=y +CONFIG_STACKTRACE_SUPPORT=y +CONFIG_MMU=y +CONFIG_ARCH_MMAP_RND_BITS_MIN=28 +CONFIG_ARCH_MMAP_RND_BITS_MAX=32 +CONFIG_ARCH_MMAP_RND_COMPAT_BITS_MIN=8 +CONFIG_ARCH_MMAP_RND_COMPAT_BITS_MAX=16 +CONFIG_GENERIC_ISA_DMA=y +CONFIG_GENERIC_BUG=y +CONFIG_GENERIC_BUG_RELATIVE_POINTERS=y +CONFIG_ARCH_MAY_HAVE_PC_FDC=y +CONFIG_GENERIC_CALIBRATE_DELAY=y +CONFIG_ARCH_HAS_CPU_RELAX=y +CONFIG_ARCH_HIBERNATION_POSSIBLE=y +CONFIG_ARCH_SUSPEND_POSSIBLE=y +CONFIG_AUDIT_ARCH=y +CONFIG_ARCH_SUPPORTS_UPROBES=y +CONFIG_FIX_EARLYCON_MEM=y +CONFIG_PGTABLE_LEVELS=5 + +# +# Processor type and features +# +CONFIG_SMP=y +CONFIG_X86_X2APIC=y +# CONFIG_X86_POSTED_MSI is not set +CONFIG_X86_MPPARSE=y +CONFIG_X86_CPU_RESCTRL=y +CONFIG_X86_FRED=y +CONFIG_X86_EXTENDED_PLATFORM=y +# CONFIG_X86_NUMACHIP is not set +CONFIG_X86_PS5=y +# CONFIG_X86_VSMP is not set +# CONFIG_X86_UV is not set +# CONFIG_X86_INTEL_MID is not set +# CONFIG_X86_GOLDFISH is not set +# CONFIG_X86_INTEL_LPSS is not set +CONFIG_X86_AMD_PLATFORM_DEVICE=y +# CONFIG_IOSF_MBI is not set +CONFIG_X86_SUPPORTS_MEMORY_FAILURE=y +CONFIG_SCHED_OMIT_FRAME_POINTER=y +CONFIG_HYPERVISOR_GUEST=y +CONFIG_PARAVIRT=y +CONFIG_ARCH_CPUIDLE_HALTPOLL=y +# CONFIG_PVH is not set +# CONFIG_JAILHOUSE_GUEST is not set +# CONFIG_ACRN_GUEST is not set +# CONFIG_BHYVE_GUEST is not set +CONFIG_CC_HAS_MARCH_NATIVE=y +# CONFIG_X86_NATIVE_CPU is not set +CONFIG_X86_INTERNODE_CACHE_SHIFT=6 +CONFIG_X86_L1_CACHE_SHIFT=6 +CONFIG_X86_TSC=y +CONFIG_X86_HAVE_PAE=y +CONFIG_X86_CX8=y +CONFIG_X86_CMOV=y +CONFIG_X86_MINIMUM_CPU_FAMILY=64 +CONFIG_X86_DEBUGCTLMSR=y +CONFIG_IA32_FEAT_CTL=y +CONFIG_X86_VMX_FEATURE_NAMES=y +# CONFIG_PROCESSOR_SELECT is not set +CONFIG_BROADCAST_TLB_FLUSH=y +CONFIG_CPU_SUP_INTEL=y +CONFIG_CPU_SUP_AMD=y +CONFIG_CPU_SUP_HYGON=y +CONFIG_CPU_SUP_CENTAUR=y +CONFIG_CPU_SUP_ZHAOXIN=y +CONFIG_HPET_TIMER=y +CONFIG_DMI=y +# CONFIG_GART_IOMMU is not set +CONFIG_BOOT_VESA_SUPPORT=y +# CONFIG_MAXSMP is not set +CONFIG_NR_CPUS_RANGE_BEGIN=2 +CONFIG_NR_CPUS_RANGE_END=512 +CONFIG_NR_CPUS_DEFAULT=64 +CONFIG_NR_CPUS=16 +CONFIG_SCHED_MC_PRIO=y +CONFIG_X86_LOCAL_APIC=y +CONFIG_ACPI_MADT_WAKEUP=y +CONFIG_X86_IO_APIC=y +CONFIG_X86_REROUTE_FOR_BROKEN_BOOT_IRQS=y +CONFIG_X86_MCE=y +# CONFIG_X86_MCELOG_LEGACY is not set +# CONFIG_X86_MCE_INTEL is not set +CONFIG_X86_MCE_AMD=y +CONFIG_X86_MCE_THRESHOLD=y +# CONFIG_X86_MCE_INJECT is not set + +# +# Performance monitoring +# +# CONFIG_PERF_EVENTS_INTEL_UNCORE is not set +# CONFIG_PERF_EVENTS_INTEL_RAPL is not set +# CONFIG_PERF_EVENTS_INTEL_CSTATE is not set +# CONFIG_PERF_EVENTS_AMD_POWER is not set +CONFIG_PERF_EVENTS_AMD_UNCORE=m +# CONFIG_PERF_EVENTS_AMD_BRS is not set +# end of Performance monitoring + +CONFIG_X86_16BIT=y +CONFIG_X86_ESPFIX64=y +CONFIG_X86_VSYSCALL_EMULATION=y +CONFIG_X86_IOPL_IOPERM=y +CONFIG_MICROCODE=y +# CONFIG_MICROCODE_LATE_LOADING is not set +# CONFIG_MICROCODE_DBG is not set +CONFIG_X86_MSR=m +CONFIG_X86_CPUID=m +CONFIG_X86_DIRECT_GBPAGES=y +# CONFIG_X86_CPA_STATISTICS is not set +CONFIG_AMD_MEM_ENCRYPT=y +CONFIG_NUMA=y +CONFIG_AMD_NUMA=y +CONFIG_X86_64_ACPI_NUMA=y +CONFIG_NODES_SHIFT=10 +CONFIG_ARCH_SPARSEMEM_ENABLE=y +CONFIG_ARCH_SPARSEMEM_DEFAULT=y +# CONFIG_ARCH_MEMORY_PROBE is not set +CONFIG_ARCH_PROC_KCORE_TEXT=y +CONFIG_ILLEGAL_POINTER_VALUE=0xdead000000000000 +# CONFIG_X86_PMEM_LEGACY is not set +CONFIG_X86_CHECK_BIOS_CORRUPTION=y +CONFIG_X86_BOOTPARAM_MEMORY_CORRUPTION_CHECK=y +CONFIG_MTRR=y +CONFIG_MTRR_SANITIZER=y +CONFIG_MTRR_SANITIZER_ENABLE_DEFAULT=1 +CONFIG_MTRR_SANITIZER_SPARE_REG_NR_DEFAULT=1 +CONFIG_X86_PAT=y +CONFIG_X86_UMIP=y +CONFIG_CC_HAS_IBT=y +CONFIG_X86_CET=y +CONFIG_X86_KERNEL_IBT=y +# CONFIG_X86_INTEL_MEMORY_PROTECTION_KEYS is not set +CONFIG_ARCH_PKEY_BITS=4 +CONFIG_X86_INTEL_TSX_MODE_OFF=y +# CONFIG_X86_INTEL_TSX_MODE_ON is not set +# CONFIG_X86_INTEL_TSX_MODE_AUTO is not set +# CONFIG_X86_SGX is not set +# CONFIG_X86_USER_SHADOW_STACK is not set +CONFIG_EFI=y +CONFIG_EFI_STUB=y +CONFIG_EFI_HANDOVER_PROTOCOL=y +CONFIG_EFI_MIXED=y +CONFIG_EFI_RUNTIME_MAP=y +# CONFIG_HZ_100 is not set +# CONFIG_HZ_250 is not set +# CONFIG_HZ_300 is not set +CONFIG_HZ_1000=y +CONFIG_HZ=1000 +CONFIG_SCHED_HRTICK=y +CONFIG_ARCH_SUPPORTS_KEXEC=y +CONFIG_ARCH_SUPPORTS_KEXEC_FILE=y +CONFIG_ARCH_SELECTS_KEXEC_FILE=y +CONFIG_ARCH_SUPPORTS_KEXEC_PURGATORY=y +CONFIG_ARCH_SUPPORTS_KEXEC_SIG=y +CONFIG_ARCH_SUPPORTS_KEXEC_SIG_FORCE=y +CONFIG_ARCH_SUPPORTS_KEXEC_BZIMAGE_VERIFY_SIG=y +CONFIG_ARCH_SUPPORTS_KEXEC_JUMP=y +CONFIG_ARCH_SUPPORTS_KEXEC_HANDOVER=y +CONFIG_ARCH_SUPPORTS_CRASH_DUMP=y +CONFIG_ARCH_DEFAULT_CRASH_DUMP=y +CONFIG_ARCH_SUPPORTS_CRASH_HOTPLUG=y +CONFIG_ARCH_HAS_GENERIC_CRASHKERNEL_RESERVATION=y +CONFIG_PHYSICAL_START=0x1000000 +CONFIG_RELOCATABLE=y +CONFIG_RANDOMIZE_BASE=y +CONFIG_X86_NEED_RELOCS=y +CONFIG_PHYSICAL_ALIGN=0x200000 +CONFIG_RANDOMIZE_MEMORY=y +CONFIG_RANDOMIZE_MEMORY_PHYSICAL_PADDING=0xa +CONFIG_HOTPLUG_CPU=y +# CONFIG_COMPAT_VDSO is not set +CONFIG_LEGACY_VSYSCALL_XONLY=y +# CONFIG_LEGACY_VSYSCALL_NONE is not set +# CONFIG_CMDLINE_BOOL is not set +CONFIG_MODIFY_LDT_SYSCALL=y +# CONFIG_STRICT_SIGALTSTACK_SIZE is not set +CONFIG_HAVE_LIVEPATCH=y +CONFIG_HAVE_KLP_BUILD=y +CONFIG_X86_BUS_LOCK_DETECT=y +# end of Processor type and features + +CONFIG_CC_HAS_NAMED_AS=y +CONFIG_CC_HAS_NAMED_AS_FIXED_SANITIZERS=y +CONFIG_USE_X86_SEG_SUPPORT=y +CONFIG_CC_HAS_SLS=y +CONFIG_CC_HAS_RETURN_THUNK=y +CONFIG_CC_HAS_ENTRY_PADDING=y +CONFIG_FUNCTION_PADDING_CFI=11 +CONFIG_FUNCTION_PADDING_BYTES=16 +CONFIG_CALL_PADDING=y +CONFIG_HAVE_CALL_THUNKS=y +CONFIG_CALL_THUNKS=y +CONFIG_PREFIX_SYMBOLS=y +CONFIG_CPU_MITIGATIONS=y +CONFIG_MITIGATION_PAGE_TABLE_ISOLATION=y +CONFIG_MITIGATION_RETPOLINE=y +CONFIG_MITIGATION_RETHUNK=y +CONFIG_MITIGATION_UNRET_ENTRY=y +CONFIG_MITIGATION_CALL_DEPTH_TRACKING=y +# CONFIG_CALL_THUNKS_DEBUG is not set +CONFIG_MITIGATION_IBPB_ENTRY=y +CONFIG_MITIGATION_IBRS_ENTRY=y +CONFIG_MITIGATION_SRSO=y +CONFIG_MITIGATION_SLS=y +# CONFIG_MITIGATION_GDS is not set +CONFIG_MITIGATION_RFDS=y +CONFIG_MITIGATION_SPECTRE_BHI=y +CONFIG_MITIGATION_MDS=y +CONFIG_MITIGATION_TAA=y +CONFIG_MITIGATION_MMIO_STALE_DATA=y +CONFIG_MITIGATION_L1TF=y +CONFIG_MITIGATION_RETBLEED=y +CONFIG_MITIGATION_SPECTRE_V1=y +CONFIG_MITIGATION_SPECTRE_V2=y +CONFIG_MITIGATION_SRBDS=y +CONFIG_MITIGATION_SSB=y +CONFIG_MITIGATION_ITS=y +CONFIG_MITIGATION_TSA=y +CONFIG_MITIGATION_VMSCAPE=y +CONFIG_ARCH_HAS_ADD_PAGES=y + +# +# Power management and ACPI options +# +# CONFIG_SUSPEND is not set +# CONFIG_HIBERNATION is not set +# CONFIG_PM_QOS_CPU_SYSTEM_WAKEUP is not set +CONFIG_PM=y +# CONFIG_PM_DEBUG is not set +CONFIG_PM_CLK=y +CONFIG_PM_GENERIC_DOMAINS=y +CONFIG_WQ_POWER_EFFICIENT_DEFAULT=y +CONFIG_ENERGY_MODEL=y +CONFIG_ARCH_SUPPORTS_ACPI=y +CONFIG_ACPI=y +CONFIG_ACPI_LEGACY_TABLES_LOOKUP=y +CONFIG_ARCH_MIGHT_HAVE_ACPI_PDC=y +CONFIG_ACPI_SYSTEM_POWER_STATES_SUPPORT=y +CONFIG_ACPI_THERMAL_LIB=y +# CONFIG_ACPI_DEBUGGER is not set +# CONFIG_ACPI_SPCR_TABLE is not set +# CONFIG_ACPI_FPDT is not set +CONFIG_ACPI_LPIT=y +CONFIG_ACPI_REV_OVERRIDE_POSSIBLE=y +CONFIG_ACPI_EC=y +# CONFIG_ACPI_AC is not set +# CONFIG_ACPI_BATTERY is not set +CONFIG_ACPI_BUTTON=y +CONFIG_ACPI_VIDEO=m +# CONFIG_ACPI_FAN is not set +# CONFIG_ACPI_DOCK is not set +CONFIG_ACPI_CPU_FREQ_PSS=y +CONFIG_ACPI_PROCESSOR_CSTATE=y +CONFIG_ACPI_PROCESSOR_IDLE=y +CONFIG_ACPI_CPPC_LIB=y +CONFIG_ACPI_PROCESSOR=y +CONFIG_ACPI_HOTPLUG_CPU=y +CONFIG_ACPI_PROCESSOR_AGGREGATOR=m +CONFIG_ACPI_THERMAL=y +CONFIG_ACPI_CUSTOM_DSDT_FILE="" +CONFIG_ARCH_HAS_ACPI_TABLE_UPGRADE=y +CONFIG_ACPI_TABLE_UPGRADE=y +CONFIG_ACPI_DEBUG=y +# CONFIG_ACPI_PCI_SLOT is not set +CONFIG_ACPI_CONTAINER=y +# CONFIG_ACPI_HOTPLUG_MEMORY is not set +CONFIG_ACPI_HOTPLUG_IOAPIC=y +# CONFIG_ACPI_HED is not set +# CONFIG_ACPI_BGRT is not set +# CONFIG_ACPI_REDUCED_HARDWARE_ONLY is not set +CONFIG_ACPI_NHLT=y +# CONFIG_ACPI_NFIT is not set +CONFIG_ACPI_NUMA=y +# CONFIG_ACPI_HMAT is not set +CONFIG_HAVE_ACPI_APEI=y +CONFIG_HAVE_ACPI_APEI_NMI=y +# CONFIG_ACPI_APEI is not set +# CONFIG_ACPI_DPTF is not set +# CONFIG_ACPI_CONFIGFS is not set +# CONFIG_ACPI_PFRUT is not set +CONFIG_ACPI_PCC=y +# CONFIG_ACPI_FFH is not set +CONFIG_ACPI_MRRM=y +# CONFIG_PMIC_OPREGION is not set +CONFIG_ACPI_PRMT=y +CONFIG_X86_PM_TIMER=y + +# +# CPU Frequency scaling +# +CONFIG_CPU_FREQ=y +CONFIG_CPU_FREQ_GOV_ATTR_SET=y +CONFIG_CPU_FREQ_GOV_COMMON=y +CONFIG_CPU_FREQ_STAT=y +# CONFIG_CPU_FREQ_DEFAULT_GOV_PERFORMANCE is not set +# CONFIG_CPU_FREQ_DEFAULT_GOV_POWERSAVE is not set +# CONFIG_CPU_FREQ_DEFAULT_GOV_USERSPACE is not set +CONFIG_CPU_FREQ_DEFAULT_GOV_SCHEDUTIL=y +CONFIG_CPU_FREQ_GOV_PERFORMANCE=y +CONFIG_CPU_FREQ_GOV_POWERSAVE=y +CONFIG_CPU_FREQ_GOV_USERSPACE=y +CONFIG_CPU_FREQ_GOV_ONDEMAND=y +CONFIG_CPU_FREQ_GOV_CONSERVATIVE=y +CONFIG_CPU_FREQ_GOV_SCHEDUTIL=y + +# +# CPU frequency scaling drivers +# +CONFIG_X86_INTEL_PSTATE=y +# CONFIG_X86_PCC_CPUFREQ is not set +CONFIG_X86_AMD_PSTATE=y +CONFIG_X86_AMD_PSTATE_DEFAULT_MODE=3 +# CONFIG_X86_AMD_PSTATE_UT is not set +CONFIG_X86_ACPI_CPUFREQ=y +CONFIG_X86_ACPI_CPUFREQ_CPB=y +# CONFIG_X86_POWERNOW_K8 is not set +# CONFIG_X86_AMD_FREQ_SENSITIVITY is not set +# CONFIG_X86_SPEEDSTEP_CENTRINO is not set +# CONFIG_X86_P4_CLOCKMOD is not set + +# +# shared options +# +CONFIG_CPUFREQ_ARCH_CUR_FREQ=y +# end of CPU Frequency scaling + +# +# CPU Idle +# +CONFIG_CPU_IDLE=y +CONFIG_CPU_IDLE_GOV_LADDER=y +CONFIG_CPU_IDLE_GOV_MENU=y +CONFIG_CPU_IDLE_GOV_TEO=y +# end of CPU Idle + +# CONFIG_INTEL_IDLE is not set +# end of Power management and ACPI options + +# +# Bus options (PCI etc.) +# +CONFIG_PCI_DIRECT=y +CONFIG_PCI_MMCONFIG=y +CONFIG_MMCONF_FAM10H=y +# CONFIG_ISA_BUS is not set +CONFIG_ISA_DMA_API=y +CONFIG_AMD_NB=y +CONFIG_AMD_NODE=y +# end of Bus options (PCI etc.) + +# +# Binary Emulations +# +CONFIG_IA32_EMULATION=y +# CONFIG_IA32_EMULATION_DEFAULT_DISABLED is not set +# CONFIG_X86_X32_ABI is not set +CONFIG_COMPAT_32=y +CONFIG_COMPAT=y +CONFIG_COMPAT_FOR_U64_ALIGNMENT=y +# end of Binary Emulations + +CONFIG_KVM_COMMON=y +CONFIG_HAVE_KVM_PFNCACHE=y +CONFIG_HAVE_KVM_IRQCHIP=y +CONFIG_HAVE_KVM_IRQ_ROUTING=y +CONFIG_HAVE_KVM_DIRTY_RING=y +CONFIG_HAVE_KVM_DIRTY_RING_TSO=y +CONFIG_HAVE_KVM_DIRTY_RING_ACQ_REL=y +CONFIG_KVM_MMIO=y +CONFIG_KVM_ASYNC_PF=y +CONFIG_HAVE_KVM_MSI=y +CONFIG_HAVE_KVM_READONLY_MEM=y +CONFIG_HAVE_KVM_CPU_RELAX_INTERCEPT=y +CONFIG_KVM_VFIO=y +CONFIG_KVM_GENERIC_DIRTYLOG_READ_PROTECT=y +CONFIG_KVM_GENERIC_PRE_FAULT_MEMORY=y +CONFIG_KVM_COMPAT=y +CONFIG_HAVE_KVM_IRQ_BYPASS=m +CONFIG_HAVE_KVM_NO_POLL=y +CONFIG_VIRT_XFER_TO_GUEST_WORK=y +CONFIG_HAVE_KVM_PM_NOTIFIER=y +CONFIG_KVM_GENERIC_HARDWARE_ENABLING=y +CONFIG_KVM_GENERIC_MMU_NOTIFIER=y +CONFIG_KVM_ELIDE_TLB_FLUSH_IF_YOUNG=y +CONFIG_KVM_MMU_LOCKLESS_AGING=y +CONFIG_KVM_GUEST_MEMFD=y +CONFIG_VIRTUALIZATION=y +CONFIG_KVM_X86=m +CONFIG_KVM=m +# CONFIG_KVM_WERROR is not set +# CONFIG_KVM_SW_PROTECTED_VM is not set +# CONFIG_KVM_INTEL is not set +CONFIG_KVM_AMD=m +CONFIG_KVM_AMD_SEV=y +CONFIG_KVM_IOAPIC=y +CONFIG_KVM_SMM=y +CONFIG_KVM_HYPERV=y +# CONFIG_KVM_XEN is not set +# CONFIG_KVM_PROVE_MMU is not set +CONFIG_KVM_MAX_NR_VCPUS=4096 +CONFIG_X86_REQUIRED_FEATURE_ALWAYS=y +CONFIG_X86_REQUIRED_FEATURE_NOPL=y +CONFIG_X86_REQUIRED_FEATURE_CX8=y +CONFIG_X86_REQUIRED_FEATURE_CMOV=y +CONFIG_X86_REQUIRED_FEATURE_CPUID=y +CONFIG_X86_REQUIRED_FEATURE_FPU=y +CONFIG_X86_REQUIRED_FEATURE_PAE=y +CONFIG_X86_REQUIRED_FEATURE_PSE=y +CONFIG_X86_REQUIRED_FEATURE_PGE=y +CONFIG_X86_REQUIRED_FEATURE_MSR=y +CONFIG_X86_REQUIRED_FEATURE_FXSR=y +CONFIG_X86_REQUIRED_FEATURE_XMM=y +CONFIG_X86_REQUIRED_FEATURE_XMM2=y +CONFIG_X86_REQUIRED_FEATURE_LM=y +CONFIG_X86_DISABLED_FEATURE_VME=y +CONFIG_X86_DISABLED_FEATURE_K6_MTRR=y +CONFIG_X86_DISABLED_FEATURE_CYRIX_ARR=y +CONFIG_X86_DISABLED_FEATURE_CENTAUR_MCR=y +CONFIG_X86_DISABLED_FEATURE_PKU=y +CONFIG_X86_DISABLED_FEATURE_OSPKE=y +CONFIG_X86_DISABLED_FEATURE_LAM=y +CONFIG_X86_DISABLED_FEATURE_ENQCMD=y +CONFIG_X86_DISABLED_FEATURE_SGX=y +CONFIG_X86_DISABLED_FEATURE_XENPV=y +CONFIG_X86_DISABLED_FEATURE_TDX_GUEST=y +CONFIG_X86_DISABLED_FEATURE_USER_SHSTK=y +CONFIG_X86_DISABLED_FEATURE_SEV_SNP=y +CONFIG_AS_WRUSS=y +CONFIG_ARCH_CONFIGURES_CPU_MITIGATIONS=y + +# +# General architecture-dependent options +# +CONFIG_HOTPLUG_SMT=y +CONFIG_ARCH_SUPPORTS_SCHED_SMT=y +CONFIG_ARCH_SUPPORTS_SCHED_CLUSTER=y +CONFIG_ARCH_SUPPORTS_SCHED_MC=y +CONFIG_SCHED_SMT=y +CONFIG_SCHED_CLUSTER=y +CONFIG_SCHED_MC=y +CONFIG_HOTPLUG_CORE_SYNC=y +CONFIG_HOTPLUG_CORE_SYNC_DEAD=y +CONFIG_HOTPLUG_CORE_SYNC_FULL=y +CONFIG_HOTPLUG_SPLIT_STARTUP=y +CONFIG_HOTPLUG_PARALLEL=y +CONFIG_GENERIC_IRQ_ENTRY=y +CONFIG_GENERIC_SYSCALL=y +CONFIG_GENERIC_ENTRY=y +CONFIG_KPROBES=y +CONFIG_JUMP_LABEL=y +# CONFIG_STATIC_KEYS_SELFTEST is not set +# CONFIG_STATIC_CALL_SELFTEST is not set +CONFIG_OPTPROBES=y +CONFIG_UPROBES=y +CONFIG_HAVE_EFFICIENT_UNALIGNED_ACCESS=y +CONFIG_ARCH_USE_BUILTIN_BSWAP=y +CONFIG_KRETPROBES=y +CONFIG_KRETPROBE_ON_RETHOOK=y +CONFIG_USER_RETURN_NOTIFIER=y +CONFIG_HAVE_IOREMAP_PROT=y +CONFIG_HAVE_KPROBES=y +CONFIG_HAVE_KRETPROBES=y +CONFIG_HAVE_OPTPROBES=y +CONFIG_HAVE_KPROBES_ON_FTRACE=y +CONFIG_ARCH_CORRECT_STACKTRACE_ON_KRETPROBE=y +CONFIG_HAVE_FUNCTION_ERROR_INJECTION=y +CONFIG_HAVE_NMI=y +CONFIG_TRACE_IRQFLAGS_SUPPORT=y +CONFIG_TRACE_IRQFLAGS_NMI_SUPPORT=y +CONFIG_HAVE_ARCH_TRACEHOOK=y +CONFIG_HAVE_DMA_CONTIGUOUS=y +CONFIG_GENERIC_SMP_IDLE_THREAD=y +CONFIG_ARCH_HAS_FORTIFY_SOURCE=y +CONFIG_ARCH_HAS_SET_MEMORY=y +CONFIG_ARCH_HAS_SET_DIRECT_MAP=y +CONFIG_ARCH_HAS_CPU_FINALIZE_INIT=y +CONFIG_ARCH_HAS_CPU_PASID=y +CONFIG_HAVE_ARCH_THREAD_STRUCT_WHITELIST=y +CONFIG_ARCH_WANTS_DYNAMIC_TASK_STRUCT=y +CONFIG_ARCH_WANTS_NO_INSTR=y +CONFIG_HAVE_ASM_MODVERSIONS=y +CONFIG_HAVE_REGS_AND_STACK_ACCESS_API=y +CONFIG_HAVE_RSEQ=y +CONFIG_HAVE_RUST=y +CONFIG_HAVE_FUNCTION_ARG_ACCESS_API=y +CONFIG_HAVE_HW_BREAKPOINT=y +CONFIG_HAVE_MIXED_BREAKPOINTS_REGS=y +CONFIG_HAVE_USER_RETURN_NOTIFIER=y +CONFIG_HAVE_PERF_EVENTS_NMI=y +CONFIG_HAVE_HARDLOCKUP_DETECTOR_PERF=y +CONFIG_UNWIND_USER=y +CONFIG_HAVE_UNWIND_USER_FP=y +CONFIG_HAVE_PERF_REGS=y +CONFIG_HAVE_PERF_USER_STACK_DUMP=y +CONFIG_HAVE_ARCH_JUMP_LABEL=y +CONFIG_HAVE_ARCH_JUMP_LABEL_RELATIVE=y +CONFIG_MMU_GATHER_TABLE_FREE=y +CONFIG_MMU_GATHER_RCU_TABLE_FREE=y +CONFIG_MMU_GATHER_MERGE_VMAS=y +CONFIG_ARCH_WANT_IRQS_OFF_ACTIVATE_MM=y +CONFIG_MMU_LAZY_TLB_REFCOUNT=y +CONFIG_ARCH_HAVE_NMI_SAFE_CMPXCHG=y +CONFIG_ARCH_HAVE_EXTRA_ELF_NOTES=y +CONFIG_ARCH_HAS_NMI_SAFE_THIS_CPU_OPS=y +CONFIG_HAVE_ALIGNED_STRUCT_PAGE=y +CONFIG_HAVE_CMPXCHG_LOCAL=y +CONFIG_HAVE_CMPXCHG_DOUBLE=y +CONFIG_ARCH_WANT_COMPAT_IPC_PARSE_VERSION=y +CONFIG_ARCH_WANT_OLD_COMPAT_IPC=y +CONFIG_HAVE_ARCH_SECCOMP=y +CONFIG_HAVE_ARCH_SECCOMP_FILTER=y +CONFIG_SECCOMP=y +CONFIG_SECCOMP_FILTER=y +# CONFIG_SECCOMP_CACHE_DEBUG is not set +CONFIG_HAVE_ARCH_KSTACK_ERASE=y +CONFIG_HAVE_STACKPROTECTOR=y +CONFIG_STACKPROTECTOR=y +CONFIG_STACKPROTECTOR_STRONG=y +CONFIG_ARCH_SUPPORTS_LTO_CLANG=y +CONFIG_ARCH_SUPPORTS_LTO_CLANG_THIN=y +CONFIG_LTO_NONE=y +CONFIG_ARCH_SUPPORTS_AUTOFDO_CLANG=y +CONFIG_ARCH_SUPPORTS_PROPELLER_CLANG=y +CONFIG_ARCH_SUPPORTS_CFI=y +CONFIG_HAVE_ARCH_WITHIN_STACK_FRAMES=y +CONFIG_HAVE_CONTEXT_TRACKING_USER=y +CONFIG_HAVE_CONTEXT_TRACKING_USER_OFFSTACK=y +CONFIG_HAVE_VIRT_CPU_ACCOUNTING_GEN=y +CONFIG_HAVE_IRQ_TIME_ACCOUNTING=y +CONFIG_HAVE_MOVE_PUD=y +CONFIG_HAVE_MOVE_PMD=y +CONFIG_HAVE_ARCH_TRANSPARENT_HUGEPAGE=y +CONFIG_HAVE_ARCH_TRANSPARENT_HUGEPAGE_PUD=y +CONFIG_HAVE_ARCH_HUGE_VMAP=y +CONFIG_HAVE_ARCH_HUGE_VMALLOC=y +CONFIG_ARCH_WANT_HUGE_PMD_SHARE=y +CONFIG_ARCH_WANT_PMD_MKWRITE=y +CONFIG_HAVE_ARCH_SOFT_DIRTY=y +CONFIG_HAVE_MOD_ARCH_SPECIFIC=y +CONFIG_MODULES_USE_ELF_RELA=y +CONFIG_ARCH_HAS_EXECMEM_ROX=y +CONFIG_HAVE_IRQ_EXIT_ON_IRQ_STACK=y +CONFIG_HAVE_SOFTIRQ_ON_OWN_STACK=y +CONFIG_SOFTIRQ_ON_OWN_STACK=y +CONFIG_ARCH_HAS_ELF_RANDOMIZE=y +CONFIG_HAVE_ARCH_MMAP_RND_BITS=y +CONFIG_HAVE_EXIT_THREAD=y +CONFIG_ARCH_MMAP_RND_BITS=32 +CONFIG_HAVE_ARCH_MMAP_RND_COMPAT_BITS=y +CONFIG_ARCH_MMAP_RND_COMPAT_BITS=16 +CONFIG_HAVE_ARCH_COMPAT_MMAP_BASES=y +CONFIG_HAVE_PAGE_SIZE_4KB=y +CONFIG_PAGE_SIZE_4KB=y +CONFIG_PAGE_SIZE_LESS_THAN_64KB=y +CONFIG_PAGE_SIZE_LESS_THAN_256KB=y +CONFIG_PAGE_SHIFT=12 +CONFIG_HAVE_OBJTOOL=y +CONFIG_HAVE_JUMP_LABEL_HACK=y +CONFIG_HAVE_NOINSTR_HACK=y +CONFIG_HAVE_NOINSTR_VALIDATION=y +CONFIG_HAVE_UACCESS_VALIDATION=y +CONFIG_HAVE_STACK_VALIDATION=y +CONFIG_OLD_SIGSUSPEND3=y +CONFIG_COMPAT_OLD_SIGACTION=y +CONFIG_COMPAT_32BIT_TIME=y +CONFIG_ARCH_SUPPORTS_RT=y +CONFIG_HAVE_ARCH_VMAP_STACK=y +CONFIG_VMAP_STACK=y +CONFIG_HAVE_ARCH_RANDOMIZE_KSTACK_OFFSET=y +CONFIG_RANDOMIZE_KSTACK_OFFSET=y +CONFIG_RANDOMIZE_KSTACK_OFFSET_DEFAULT=y +CONFIG_ARCH_HAS_STRICT_KERNEL_RWX=y +CONFIG_STRICT_KERNEL_RWX=y +CONFIG_ARCH_HAS_STRICT_MODULE_RWX=y +CONFIG_STRICT_MODULE_RWX=y +CONFIG_ARCH_HAS_CPU_RESCTRL=y +CONFIG_HAVE_ARCH_PREL32_RELOCATIONS=y +CONFIG_ARCH_USE_MEMREMAP_PROT=y +# CONFIG_LOCK_EVENT_COUNTS is not set +CONFIG_ARCH_HAS_MEM_ENCRYPT=y +CONFIG_HAVE_STATIC_CALL=y +CONFIG_HAVE_STATIC_CALL_INLINE=y +CONFIG_HAVE_PREEMPT_DYNAMIC=y +CONFIG_HAVE_PREEMPT_DYNAMIC_CALL=y +CONFIG_ARCH_WANT_LD_ORPHAN_WARN=y +CONFIG_ARCH_SUPPORTS_DEBUG_PAGEALLOC=y +CONFIG_ARCH_SUPPORTS_PAGE_TABLE_CHECK=y +CONFIG_ARCH_HAS_ELFCORE_COMPAT=y +CONFIG_ARCH_HAS_PARANOID_L1D_FLUSH=y +CONFIG_DYNAMIC_SIGFRAME=y +CONFIG_ARCH_HAS_HW_PTE_YOUNG=y +CONFIG_ARCH_HAS_NONLEAF_PMD_YOUNG=y +CONFIG_ARCH_HAS_KERNEL_FPU_SUPPORT=y +CONFIG_ARCH_VMLINUX_NEEDS_RELOCS=y +CONFIG_HAVE_GENERIC_TIF_BITS=y + +# +# GCOV-based kernel profiling +# +# CONFIG_GCOV_KERNEL is not set +CONFIG_ARCH_HAS_GCOV_PROFILE_ALL=y +# end of GCOV-based kernel profiling + +CONFIG_HAVE_GCC_PLUGINS=y +CONFIG_FUNCTION_ALIGNMENT_4B=y +CONFIG_FUNCTION_ALIGNMENT_16B=y +CONFIG_FUNCTION_ALIGNMENT=16 +CONFIG_ARCH_HAS_CPU_ATTACK_VECTORS=y +# end of General architecture-dependent options + +CONFIG_RT_MUTEXES=y +CONFIG_MODULES=y +# CONFIG_MODULE_DEBUG is not set +# CONFIG_MODULE_FORCE_LOAD is not set +CONFIG_MODULE_UNLOAD=y +CONFIG_MODULE_FORCE_UNLOAD=y +# CONFIG_MODULE_UNLOAD_TAINT_TRACKING is not set +# CONFIG_MODVERSIONS is not set +# CONFIG_MODULE_SRCVERSION_ALL is not set +# CONFIG_MODULE_SIG is not set +# CONFIG_MODULE_COMPRESS is not set +# CONFIG_MODULE_ALLOW_MISSING_NAMESPACE_IMPORTS is not set +CONFIG_MODPROBE_PATH="/sbin/modprobe" +# CONFIG_TRIM_UNUSED_KSYMS is not set +CONFIG_MODULES_TREE_LOOKUP=y +CONFIG_BLOCK=y +CONFIG_BLOCK_LEGACY_AUTOLOAD=y +CONFIG_BLK_RQ_ALLOC_TIME=y +CONFIG_BLK_CGROUP_RWSTAT=y +CONFIG_BLK_DEV_BSG_COMMON=y +CONFIG_BLK_ICQ=y +# CONFIG_BLK_DEV_BSGLIB is not set +# CONFIG_BLK_DEV_INTEGRITY is not set +CONFIG_BLK_DEV_WRITE_MOUNTED=y +# CONFIG_BLK_DEV_ZONED is not set +CONFIG_BLK_DEV_THROTTLING=y +CONFIG_BLK_WBT=y +CONFIG_BLK_WBT_MQ=y +# CONFIG_BLK_CGROUP_IOLATENCY is not set +CONFIG_BLK_CGROUP_IOCOST=y +CONFIG_BLK_CGROUP_IOPRIO=y +CONFIG_BLK_DEBUG_FS=y +# CONFIG_BLK_SED_OPAL is not set +# CONFIG_BLK_INLINE_ENCRYPTION is not set + +# +# Partition Types +# +# CONFIG_PARTITION_ADVANCED is not set +CONFIG_MSDOS_PARTITION=y +CONFIG_EFI_PARTITION=y +# end of Partition Types + +CONFIG_BLK_PM=y +CONFIG_BLOCK_HOLDER_DEPRECATED=y +CONFIG_BLK_MQ_STACKING=y + +# +# IO Schedulers +# +CONFIG_MQ_IOSCHED_DEADLINE=y +CONFIG_MQ_IOSCHED_KYBER=m +CONFIG_IOSCHED_BFQ=m +CONFIG_BFQ_GROUP_IOSCHED=y +# CONFIG_BFQ_CGROUP_DEBUG is not set +# end of IO Schedulers + +CONFIG_PREEMPT_NOTIFIERS=y +CONFIG_PADATA=y +CONFIG_ASN1=y +CONFIG_UNINLINE_SPIN_UNLOCK=y +CONFIG_ARCH_SUPPORTS_ATOMIC_RMW=y +CONFIG_MUTEX_SPIN_ON_OWNER=y +CONFIG_RWSEM_SPIN_ON_OWNER=y +CONFIG_LOCK_SPIN_ON_OWNER=y +CONFIG_ARCH_USE_QUEUED_SPINLOCKS=y +CONFIG_QUEUED_SPINLOCKS=y +CONFIG_ARCH_USE_QUEUED_RWLOCKS=y +CONFIG_QUEUED_RWLOCKS=y +CONFIG_ARCH_HAS_NON_OVERLAPPING_ADDRESS_SPACE=y +CONFIG_ARCH_HAS_SYNC_CORE_BEFORE_USERMODE=y +CONFIG_ARCH_HAS_SYSCALL_WRAPPER=y +CONFIG_FREEZER=y + +# +# Executable file formats +# +CONFIG_BINFMT_ELF=y +CONFIG_COMPAT_BINFMT_ELF=y +CONFIG_ELFCORE=y +CONFIG_CORE_DUMP_DEFAULT_ELF_HEADERS=y +CONFIG_BINFMT_SCRIPT=y +CONFIG_BINFMT_MISC=m +CONFIG_COREDUMP=y +# end of Executable file formats + +# +# Memory Management options +# +CONFIG_SWAP=y +CONFIG_ZSWAP=y +# CONFIG_ZSWAP_DEFAULT_ON is not set +CONFIG_ZSWAP_SHRINKER_DEFAULT_ON=y +# CONFIG_ZSWAP_COMPRESSOR_DEFAULT_DEFLATE is not set +CONFIG_ZSWAP_COMPRESSOR_DEFAULT_LZO=y +# CONFIG_ZSWAP_COMPRESSOR_DEFAULT_842 is not set +# CONFIG_ZSWAP_COMPRESSOR_DEFAULT_LZ4 is not set +# CONFIG_ZSWAP_COMPRESSOR_DEFAULT_LZ4HC is not set +# CONFIG_ZSWAP_COMPRESSOR_DEFAULT_ZSTD is not set +CONFIG_ZSWAP_COMPRESSOR_DEFAULT="lzo" +CONFIG_ZSMALLOC=y + +# +# Zsmalloc allocator options +# + +# +# Zsmalloc is a common backend allocator for zswap & zram +# +# CONFIG_ZSMALLOC_STAT is not set +CONFIG_ZSMALLOC_CHAIN_SIZE=8 +# end of Zsmalloc allocator options + +# +# Slab allocator options +# +CONFIG_SLUB=y +CONFIG_KVFREE_RCU_BATCHED=y +# CONFIG_SLUB_TINY is not set +CONFIG_SLAB_MERGE_DEFAULT=y +CONFIG_SLAB_FREELIST_RANDOM=y +CONFIG_SLAB_FREELIST_HARDENED=y +CONFIG_SLAB_BUCKETS=y +# CONFIG_SLUB_STATS is not set +CONFIG_SLUB_CPU_PARTIAL=y +CONFIG_RANDOM_KMALLOC_CACHES=y +# end of Slab allocator options + +CONFIG_SHUFFLE_PAGE_ALLOCATOR=y +# CONFIG_COMPAT_BRK is not set +CONFIG_SPARSEMEM=y +CONFIG_SPARSEMEM_EXTREME=y +CONFIG_SPARSEMEM_VMEMMAP_ENABLE=y +CONFIG_SPARSEMEM_VMEMMAP=y +CONFIG_SPARSEMEM_VMEMMAP_PREINIT=y +CONFIG_ARCH_WANT_OPTIMIZE_DAX_VMEMMAP=y +CONFIG_ARCH_WANT_OPTIMIZE_HUGETLB_VMEMMAP=y +CONFIG_ARCH_WANT_HUGETLB_VMEMMAP_PREINIT=y +CONFIG_HAVE_GUP_FAST=y +CONFIG_NUMA_KEEP_MEMINFO=y +CONFIG_MEMORY_ISOLATION=y +CONFIG_EXCLUSIVE_SYSTEM_RAM=y +CONFIG_HAVE_BOOTMEM_INFO_NODE=y +CONFIG_ARCH_ENABLE_MEMORY_HOTPLUG=y +CONFIG_ARCH_ENABLE_MEMORY_HOTREMOVE=y +CONFIG_MEMORY_HOTPLUG=y +# CONFIG_MHP_DEFAULT_ONLINE_TYPE_OFFLINE is not set +CONFIG_MHP_DEFAULT_ONLINE_TYPE_ONLINE_AUTO=y +# CONFIG_MHP_DEFAULT_ONLINE_TYPE_ONLINE_KERNEL is not set +# CONFIG_MHP_DEFAULT_ONLINE_TYPE_ONLINE_MOVABLE is not set +CONFIG_MEMORY_HOTREMOVE=y +CONFIG_MHP_MEMMAP_ON_MEMORY=y +CONFIG_ARCH_MHP_MEMMAP_ON_MEMORY_ENABLE=y +CONFIG_SPLIT_PTE_PTLOCKS=y +CONFIG_ARCH_ENABLE_SPLIT_PMD_PTLOCK=y +CONFIG_SPLIT_PMD_PTLOCKS=y +CONFIG_COMPACTION=y +CONFIG_COMPACT_UNEVICTABLE_DEFAULT=1 +CONFIG_PAGE_REPORTING=y +CONFIG_MIGRATION=y +CONFIG_DEVICE_MIGRATION=y +CONFIG_ARCH_ENABLE_HUGEPAGE_MIGRATION=y +CONFIG_ARCH_ENABLE_THP_MIGRATION=y +CONFIG_CONTIG_ALLOC=y +CONFIG_PCP_BATCH_SCALE_MAX=5 +CONFIG_PHYS_ADDR_T_64BIT=y +CONFIG_MMU_NOTIFIER=y +CONFIG_KSM=y +CONFIG_DEFAULT_MMAP_MIN_ADDR=65536 +CONFIG_ARCH_SUPPORTS_MEMORY_FAILURE=y +# CONFIG_MEMORY_FAILURE is not set +CONFIG_ARCH_WANT_GENERAL_HUGETLB=y +CONFIG_ARCH_WANTS_THP_SWAP=y +# CONFIG_PERSISTENT_HUGE_ZERO_FOLIO is not set +CONFIG_MM_ID=y +CONFIG_TRANSPARENT_HUGEPAGE=y +# CONFIG_TRANSPARENT_HUGEPAGE_ALWAYS is not set +CONFIG_TRANSPARENT_HUGEPAGE_MADVISE=y +# CONFIG_TRANSPARENT_HUGEPAGE_NEVER is not set +CONFIG_TRANSPARENT_HUGEPAGE_SHMEM_HUGE_NEVER=y +# CONFIG_TRANSPARENT_HUGEPAGE_SHMEM_HUGE_ALWAYS is not set +# CONFIG_TRANSPARENT_HUGEPAGE_SHMEM_HUGE_WITHIN_SIZE is not set +CONFIG_TRANSPARENT_HUGEPAGE_SHMEM_HUGE_ADVISE=y +CONFIG_TRANSPARENT_HUGEPAGE_TMPFS_HUGE_NEVER=y +# CONFIG_TRANSPARENT_HUGEPAGE_TMPFS_HUGE_ALWAYS is not set +# CONFIG_TRANSPARENT_HUGEPAGE_TMPFS_HUGE_WITHIN_SIZE is not set +CONFIG_TRANSPARENT_HUGEPAGE_TMPFS_HUGE_ADVISE=y +CONFIG_THP_SWAP=y +# CONFIG_READ_ONLY_THP_FOR_FS is not set +# CONFIG_NO_PAGE_MAPCOUNT is not set +CONFIG_PAGE_MAPCOUNT=y +CONFIG_PGTABLE_HAS_HUGE_LEAVES=y +CONFIG_HAVE_GIGANTIC_FOLIOS=y +CONFIG_ASYNC_KERNEL_PGTABLE_FREE=y +CONFIG_ARCH_SUPPORTS_HUGE_PFNMAP=y +CONFIG_ARCH_SUPPORTS_PMD_PFNMAP=y +CONFIG_ARCH_SUPPORTS_PUD_PFNMAP=y +CONFIG_NEED_PER_CPU_EMBED_FIRST_CHUNK=y +CONFIG_NEED_PER_CPU_PAGE_FIRST_CHUNK=y +CONFIG_USE_PERCPU_NUMA_NODE_ID=y +CONFIG_HAVE_SETUP_PER_CPU_AREA=y +CONFIG_CMA=y +CONFIG_CMA_DEBUGFS=y +CONFIG_CMA_SYSFS=y +CONFIG_CMA_AREAS=20 +CONFIG_PAGE_BLOCK_MAX_ORDER=10 +CONFIG_MEM_SOFT_DIRTY=y +CONFIG_GENERIC_EARLY_IOREMAP=y +# CONFIG_DEFERRED_STRUCT_PAGE_INIT is not set +CONFIG_PAGE_IDLE_FLAG=y +CONFIG_IDLE_PAGE_TRACKING=y +CONFIG_ARCH_HAS_CACHE_LINE_SIZE=y +CONFIG_ARCH_HAS_CURRENT_STACK_POINTER=y +CONFIG_ARCH_HAS_ZONE_DMA_SET=y +CONFIG_ZONE_DMA=y +CONFIG_ZONE_DMA32=y +CONFIG_ZONE_DEVICE=y +CONFIG_HMM_MIRROR=y +CONFIG_GET_FREE_REGION=y +CONFIG_DEVICE_PRIVATE=y +CONFIG_ARCH_USES_PG_ARCH_2=y +CONFIG_VM_EVENT_COUNTERS=y +# CONFIG_PERCPU_STATS is not set +# CONFIG_GUP_TEST is not set +# CONFIG_DMAPOOL_TEST is not set +CONFIG_ARCH_HAS_PTE_SPECIAL=y +CONFIG_MEMFD_CREATE=y +CONFIG_SECRETMEM=y +CONFIG_ANON_VMA_NAME=y +CONFIG_HAVE_ARCH_USERFAULTFD_WP=y +CONFIG_HAVE_ARCH_USERFAULTFD_MINOR=y +CONFIG_USERFAULTFD=y +CONFIG_PTE_MARKER_UFFD_WP=y +CONFIG_LRU_GEN=y +CONFIG_LRU_GEN_ENABLED=y +# CONFIG_LRU_GEN_STATS is not set +CONFIG_LRU_GEN_WALKS_MMU=y +CONFIG_ARCH_SUPPORTS_PER_VMA_LOCK=y +CONFIG_PER_VMA_LOCK=y +CONFIG_LOCK_MM_AND_FIND_VMA=y +CONFIG_IOMMU_MM_DATA=y +CONFIG_EXECMEM=y +CONFIG_NUMA_MEMBLKS=y +# CONFIG_NUMA_EMU is not set +CONFIG_ARCH_SUPPORTS_PT_RECLAIM=y +CONFIG_PT_RECLAIM=y + +# +# Data Access Monitoring +# +# CONFIG_DAMON is not set +# end of Data Access Monitoring +# end of Memory Management options + +CONFIG_NET=y +CONFIG_WANT_COMPAT_NETLINK_MESSAGES=y +CONFIG_COMPAT_NETLINK_MESSAGES=y +CONFIG_NET_INGRESS=y +CONFIG_NET_EGRESS=y +CONFIG_NET_XGRESS=y +CONFIG_SKB_DECRYPTED=y +CONFIG_SKB_EXTENSIONS=y +CONFIG_NET_DEVMEM=y + +# +# Networking options +# +CONFIG_PACKET=y +CONFIG_PACKET_DIAG=m +# CONFIG_INET_PSP is not set +CONFIG_UNIX=y +CONFIG_AF_UNIX_OOB=y +CONFIG_UNIX_DIAG=m +CONFIG_TLS=m +CONFIG_TLS_DEVICE=y +# CONFIG_TLS_TOE is not set +CONFIG_XFRM=y +CONFIG_XFRM_OFFLOAD=y +CONFIG_XFRM_ALGO=y +CONFIG_XFRM_USER=y +CONFIG_XFRM_USER_COMPAT=m +CONFIG_XFRM_INTERFACE=m +# CONFIG_XFRM_SUB_POLICY is not set +# CONFIG_XFRM_MIGRATE is not set +CONFIG_XFRM_STATISTICS=y +CONFIG_XFRM_AH=y +CONFIG_XFRM_ESP=y +CONFIG_XFRM_IPCOMP=m +CONFIG_NET_KEY=m +# CONFIG_NET_KEY_MIGRATE is not set +CONFIG_XFRM_IPTFS=m +CONFIG_XFRM_ESPINTCP=y +# CONFIG_DIBS is not set +CONFIG_XDP_SOCKETS=y +CONFIG_XDP_SOCKETS_DIAG=m +CONFIG_INET=y +CONFIG_IP_MULTICAST=y +CONFIG_IP_ADVANCED_ROUTER=y +CONFIG_IP_FIB_TRIE_STATS=y +CONFIG_IP_MULTIPLE_TABLES=y +CONFIG_IP_ROUTE_MULTIPATH=y +CONFIG_IP_ROUTE_VERBOSE=y +CONFIG_IP_PNP=y +CONFIG_NET_IPIP=m +CONFIG_NET_IPGRE_DEMUX=m +CONFIG_NET_IP_TUNNEL=y +CONFIG_NET_IPGRE=m +CONFIG_NET_IPGRE_BROADCAST=y +CONFIG_IP_MROUTE_COMMON=y +CONFIG_IP_MROUTE=y +CONFIG_IP_MROUTE_MULTIPLE_TABLES=y +CONFIG_IP_PIMSM_V1=y +CONFIG_IP_PIMSM_V2=y +CONFIG_SYN_COOKIES=y +CONFIG_NET_IPVTI=m +CONFIG_NET_UDP_TUNNEL=y +CONFIG_NET_FOU=m +CONFIG_NET_FOU_IP_TUNNELS=y +CONFIG_INET_AH=m +CONFIG_INET_ESP=y +CONFIG_INET_ESP_OFFLOAD=m +CONFIG_INET_ESPINTCP=y +CONFIG_INET_IPCOMP=m +CONFIG_INET_TABLE_PERTURB_ORDER=16 +CONFIG_INET_XFRM_TUNNEL=m +CONFIG_INET_TUNNEL=y +CONFIG_INET_DIAG=m +CONFIG_INET_TCP_DIAG=m +CONFIG_INET_UDP_DIAG=m +CONFIG_INET_RAW_DIAG=m +CONFIG_INET_DIAG_DESTROY=y +CONFIG_TCP_CONG_ADVANCED=y +CONFIG_TCP_CONG_BIC=m +CONFIG_TCP_CONG_CUBIC=y +CONFIG_TCP_CONG_WESTWOOD=m +CONFIG_TCP_CONG_HTCP=m +CONFIG_TCP_CONG_HSTCP=m +CONFIG_TCP_CONG_HYBLA=m +CONFIG_TCP_CONG_VEGAS=m +CONFIG_TCP_CONG_NV=m +CONFIG_TCP_CONG_SCALABLE=m +CONFIG_TCP_CONG_LP=m +CONFIG_TCP_CONG_VENO=m +CONFIG_TCP_CONG_YEAH=m +CONFIG_TCP_CONG_ILLINOIS=m +CONFIG_TCP_CONG_DCTCP=m +CONFIG_TCP_CONG_CDG=m +CONFIG_TCP_CONG_BBR=m +CONFIG_DEFAULT_CUBIC=y +# CONFIG_DEFAULT_RENO is not set +CONFIG_DEFAULT_TCP_CONG="cubic" +CONFIG_TCP_SIGPOOL=y +CONFIG_TCP_AO=y +CONFIG_TCP_MD5SIG=y +CONFIG_IPV6=y +CONFIG_IPV6_ROUTER_PREF=y +CONFIG_IPV6_ROUTE_INFO=y +CONFIG_IPV6_OPTIMISTIC_DAD=y +CONFIG_INET6_AH=y +CONFIG_INET6_ESP=y +CONFIG_INET6_ESP_OFFLOAD=m +CONFIG_INET6_ESPINTCP=y +CONFIG_INET6_IPCOMP=m +CONFIG_IPV6_MIP6=m +# CONFIG_IPV6_ILA is not set +CONFIG_INET6_XFRM_TUNNEL=m +CONFIG_INET6_TUNNEL=m +CONFIG_IPV6_VTI=m +CONFIG_IPV6_SIT=y +CONFIG_IPV6_SIT_6RD=y +CONFIG_IPV6_NDISC_NODETYPE=y +CONFIG_IPV6_TUNNEL=m +CONFIG_IPV6_GRE=m +CONFIG_IPV6_FOU=m +CONFIG_IPV6_FOU_TUNNEL=m +CONFIG_IPV6_MULTIPLE_TABLES=y +CONFIG_IPV6_SUBTREES=y +CONFIG_IPV6_MROUTE=y +CONFIG_IPV6_MROUTE_MULTIPLE_TABLES=y +CONFIG_IPV6_PIMSM_V2=y +CONFIG_IPV6_SEG6_LWTUNNEL=y +CONFIG_IPV6_SEG6_HMAC=y +CONFIG_IPV6_SEG6_BPF=y +# CONFIG_IPV6_RPL_LWTUNNEL is not set +CONFIG_IPV6_IOAM6_LWTUNNEL=y +CONFIG_NETLABEL=y +CONFIG_MPTCP=y +CONFIG_INET_MPTCP_DIAG=m +CONFIG_MPTCP_IPV6=y +CONFIG_NETWORK_SECMARK=y +CONFIG_NET_PTP_CLASSIFY=y +CONFIG_NETWORK_PHY_TIMESTAMPING=y +CONFIG_NETFILTER=y +CONFIG_NETFILTER_ADVANCED=y + +# +# Core Netfilter Configuration +# +CONFIG_NETFILTER_INGRESS=y +CONFIG_NETFILTER_EGRESS=y +CONFIG_NETFILTER_BPF_LINK=y +# CONFIG_NETFILTER_NETLINK_ACCT is not set +# CONFIG_NETFILTER_NETLINK_QUEUE is not set +# CONFIG_NETFILTER_NETLINK_LOG is not set +# CONFIG_NETFILTER_NETLINK_OSF is not set +CONFIG_NF_CONNTRACK=y +# CONFIG_NF_LOG_SYSLOG is not set +CONFIG_NF_TABLES=y +CONFIG_NETFILTER_XTABLES=y +# end of Core Netfilter Configuration + +# CONFIG_IP_SET is not set +CONFIG_IP_VS=y + +# +# IP: Netfilter Configuration +# +# CONFIG_NF_SOCKET_IPV4 is not set +# CONFIG_NF_TPROXY_IPV4 is not set +# CONFIG_NF_DUP_IPV4 is not set +# CONFIG_NF_LOG_ARP is not set +# CONFIG_NF_LOG_IPV4 is not set +# CONFIG_NF_REJECT_IPV4 is not set +CONFIG_IP_NF_IPTABLES=y +# end of IP: Netfilter Configuration + +# +# IPv6: Netfilter Configuration +# +# CONFIG_NF_SOCKET_IPV6 is not set +# CONFIG_NF_TPROXY_IPV6 is not set +# CONFIG_NF_DUP_IPV6 is not set +# CONFIG_NF_REJECT_IPV6 is not set +# CONFIG_NF_LOG_IPV6 is not set +CONFIG_IP6_NF_IPTABLES=y +# end of IPv6: Netfilter Configuration + +CONFIG_IP_SCTP=y +# CONFIG_RDS is not set +# CONFIG_TIPC is not set +# CONFIG_ATM is not set +# CONFIG_L2TP is not set +CONFIG_BRIDGE=y +# CONFIG_NET_DSA is not set +CONFIG_VLAN_8021Q=y +# CONFIG_LLC2 is not set +# CONFIG_ATALK is not set +# CONFIG_X25 is not set +# CONFIG_LAPB is not set +# CONFIG_PHONET is not set +# CONFIG_6LOWPAN is not set +# CONFIG_IEEE802154 is not set +CONFIG_NET_SCHED=y + +# +# Queueing/Scheduling +# +CONFIG_NET_SCH_HTB=m +CONFIG_NET_SCH_HFSC=m +CONFIG_NET_SCH_PRIO=m +CONFIG_NET_SCH_MULTIQ=m +CONFIG_NET_SCH_RED=m +CONFIG_NET_SCH_SFB=m +CONFIG_NET_SCH_SFQ=m +CONFIG_NET_SCH_TEQL=m +CONFIG_NET_SCH_TBF=m +CONFIG_NET_SCH_CBS=m +CONFIG_NET_SCH_ETF=m +CONFIG_NET_SCH_MQPRIO_LIB=m +CONFIG_NET_SCH_TAPRIO=m +CONFIG_NET_SCH_GRED=m +CONFIG_NET_SCH_NETEM=m +CONFIG_NET_SCH_DRR=m +CONFIG_NET_SCH_MQPRIO=m +CONFIG_NET_SCH_SKBPRIO=m +CONFIG_NET_SCH_CHOKE=m +CONFIG_NET_SCH_QFQ=m +CONFIG_NET_SCH_CODEL=m +CONFIG_NET_SCH_FQ_CODEL=m +CONFIG_NET_SCH_CAKE=m +CONFIG_NET_SCH_FQ=m +CONFIG_NET_SCH_HHF=m +CONFIG_NET_SCH_PIE=m +CONFIG_NET_SCH_FQ_PIE=m +CONFIG_NET_SCH_PLUG=m +CONFIG_NET_SCH_ETS=m +CONFIG_NET_SCH_DUALPI2=m +# CONFIG_NET_SCH_DEFAULT is not set + +# +# Classification +# +# CONFIG_NET_CLS_BASIC is not set +# CONFIG_NET_CLS_ROUTE4 is not set +# CONFIG_NET_CLS_FW is not set +# CONFIG_NET_CLS_U32 is not set +# CONFIG_NET_CLS_FLOW is not set +CONFIG_NET_CLS_CGROUP=y +# CONFIG_NET_CLS_BPF is not set +# CONFIG_NET_CLS_FLOWER is not set +# CONFIG_NET_CLS_MATCHALL is not set +CONFIG_NET_EMATCH=y +CONFIG_NET_CLS_ACT=y +CONFIG_NET_SCH_FIFO=y +# CONFIG_DCB is not set +CONFIG_DNS_RESOLVER=y +# CONFIG_BATMAN_ADV is not set +# CONFIG_OPENVSWITCH is not set +# CONFIG_VSOCKETS is not set +# CONFIG_NETLINK_DIAG is not set +# CONFIG_MPLS is not set +# CONFIG_NET_NSH is not set +# CONFIG_HSR is not set +# CONFIG_NET_SWITCHDEV is not set +CONFIG_NET_L3_MASTER_DEV=y +# CONFIG_QRTR is not set +# CONFIG_NET_NCSI is not set +CONFIG_PCPU_DEV_REFCNT=y +CONFIG_MAX_SKB_FRAGS=17 +CONFIG_RPS=y +CONFIG_RFS_ACCEL=y +CONFIG_SOCK_RX_QUEUE_MAPPING=y +CONFIG_XPS=y +CONFIG_CGROUP_NET_PRIO=y +CONFIG_CGROUP_NET_CLASSID=y +CONFIG_NET_RX_BUSY_POLL=y +CONFIG_BQL=y +CONFIG_BPF_STREAM_PARSER=y +CONFIG_NET_FLOW_LIMIT=y + +# +# Network testing +# +# CONFIG_NET_PKTGEN is not set +# CONFIG_NET_DROP_MONITOR is not set +# end of Network testing +# end of Networking options + +# CONFIG_HAMRADIO is not set +# CONFIG_CAN is not set +CONFIG_BT=y +CONFIG_BT_BREDR=y +CONFIG_BT_RFCOMM=m +CONFIG_BT_RFCOMM_TTY=y +CONFIG_BT_BNEP=m +CONFIG_BT_BNEP_MC_FILTER=y +CONFIG_BT_BNEP_PROTO_FILTER=y +CONFIG_BT_HIDP=m +CONFIG_BT_LE=y +CONFIG_BT_LE_L2CAP_ECRED=y +CONFIG_BT_LEDS=y +# CONFIG_BT_MSFTEXT is not set +# CONFIG_BT_AOSPEXT is not set +CONFIG_BT_DEBUGFS=y +# CONFIG_BT_SELFTEST is not set + +# +# Bluetooth device drivers +# +CONFIG_BT_INTEL=m +CONFIG_BT_RTL=m +CONFIG_BT_HCIBTUSB=m +# CONFIG_BT_HCIBTUSB_AUTOSUSPEND is not set +CONFIG_BT_HCIBTUSB_POLL_SYNC=y +# CONFIG_BT_HCIBTUSB_BCM is not set +# CONFIG_BT_HCIBTUSB_MTK is not set +CONFIG_BT_HCIBTUSB_RTL=y +# CONFIG_BT_HCIUART is not set +# CONFIG_BT_HCIBCM203X is not set +# CONFIG_BT_HCIBCM4377 is not set +# CONFIG_BT_HCIBFUSB is not set +# CONFIG_BT_HCIVHCI is not set +# CONFIG_BT_MRVL is not set +# CONFIG_BT_ATH3K is not set +# CONFIG_BT_INTEL_PCIE is not set +# end of Bluetooth device drivers + +# CONFIG_AF_RXRPC is not set +# CONFIG_AF_KCM is not set +CONFIG_STREAM_PARSER=y +# CONFIG_MCTP is not set +CONFIG_FIB_RULES=y +CONFIG_WIRELESS=y +CONFIG_WEXT_CORE=y +CONFIG_WEXT_PROC=y +CONFIG_CFG80211=y +# CONFIG_NL80211_TESTMODE is not set +# CONFIG_CFG80211_DEVELOPER_WARNINGS is not set +# CONFIG_CFG80211_CERTIFICATION_ONUS is not set +CONFIG_CFG80211_REQUIRE_SIGNED_REGDB=y +CONFIG_CFG80211_USE_KERNEL_REGDB_KEYS=y +CONFIG_CFG80211_DEFAULT_PS=y +# CONFIG_CFG80211_DEBUGFS is not set +CONFIG_CFG80211_CRDA_SUPPORT=y +CONFIG_CFG80211_WEXT=y +CONFIG_MAC80211=y +CONFIG_MAC80211_HAS_RC=y +CONFIG_MAC80211_RC_MINSTREL=y +CONFIG_MAC80211_RC_DEFAULT_MINSTREL=y +CONFIG_MAC80211_RC_DEFAULT="minstrel_ht" +# CONFIG_MAC80211_MESH is not set +# CONFIG_MAC80211_LEDS is not set +# CONFIG_MAC80211_MESSAGE_TRACING is not set +# CONFIG_MAC80211_DEBUG_MENU is not set +CONFIG_MAC80211_STA_HASH_MAX_SIZE=0 +CONFIG_RFKILL=y +CONFIG_RFKILL_LEDS=y +CONFIG_RFKILL_INPUT=y +CONFIG_NET_9P=y +CONFIG_NET_9P_FD=y +# CONFIG_NET_9P_DEBUG is not set +# CONFIG_CAIF is not set +# CONFIG_CEPH_LIB is not set +# CONFIG_NFC is not set +# CONFIG_PSAMPLE is not set +# CONFIG_NET_IFE is not set +CONFIG_LWTUNNEL=y +CONFIG_LWTUNNEL_BPF=y +CONFIG_DST_CACHE=y +CONFIG_GRO_CELLS=y +CONFIG_SOCK_VALIDATE_XMIT=y +CONFIG_NET_SELFTESTS=y +CONFIG_NET_SOCK_MSG=y +CONFIG_PAGE_POOL=y +# CONFIG_PAGE_POOL_STATS is not set +CONFIG_FAILOVER=y +CONFIG_ETHTOOL_NETLINK=y + +# +# Device Drivers +# +CONFIG_HAVE_PCI=y +CONFIG_GENERIC_PCI_IOMAP=y +CONFIG_PCI=y +CONFIG_PCI_DOMAINS=y +CONFIG_PCIEPORTBUS=y +CONFIG_PCIEAER=y +# CONFIG_PCIEAER_INJECT is not set +# CONFIG_PCIE_ECRC is not set +CONFIG_PCIEASPM=y +CONFIG_PCIEASPM_DEFAULT=y +# CONFIG_PCIEASPM_POWERSAVE is not set +# CONFIG_PCIEASPM_POWER_SUPERSAVE is not set +# CONFIG_PCIEASPM_PERFORMANCE is not set +CONFIG_PCIE_PME=y +# CONFIG_PCIE_DPC is not set +# CONFIG_PCIE_PTM is not set +CONFIG_PCI_MSI=y +CONFIG_PCI_QUIRKS=y +CONFIG_PCI_DEBUG=y +# CONFIG_PCI_STUB is not set +CONFIG_PCI_ATS=y +CONFIG_PCI_IDE=y +CONFIG_PCI_TSM=y +CONFIG_PCI_DOE=y +CONFIG_PCI_LOCKLESS_CONFIG=y +# CONFIG_PCI_IOV is not set +# CONFIG_PCI_NPEM is not set +CONFIG_PCI_PRI=y +CONFIG_PCI_PASID=y +# CONFIG_PCIE_TPH is not set +# CONFIG_PCI_P2PDMA is not set +CONFIG_PCI_LABEL=y +# CONFIG_PCIE_BUS_TUNE_OFF is not set +CONFIG_PCIE_BUS_DEFAULT=y +# CONFIG_PCIE_BUS_SAFE is not set +# CONFIG_PCIE_BUS_PERFORMANCE is not set +# CONFIG_PCIE_BUS_PEER2PEER is not set +CONFIG_VGA_ARB=y +CONFIG_VGA_ARB_MAX_GPUS=16 +# CONFIG_HOTPLUG_PCI is not set + +# +# PCI controller drivers +# +# CONFIG_VMD is not set + +# +# Cadence-based PCIe controllers +# +# end of Cadence-based PCIe controllers + +# +# DesignWare-based PCIe controllers +# +# CONFIG_PCI_MESON is not set +# CONFIG_PCIE_DW_PLAT_HOST is not set +# end of DesignWare-based PCIe controllers + +# +# Mobiveil-based PCIe controllers +# +# end of Mobiveil-based PCIe controllers + +# +# PLDA-based PCIe controllers +# +# end of PLDA-based PCIe controllers +# end of PCI controller drivers + +# +# PCI Endpoint +# +# CONFIG_PCI_ENDPOINT is not set +# end of PCI Endpoint + +# +# PCI switch controller drivers +# +# CONFIG_PCI_SW_SWITCHTEC is not set +# end of PCI switch controller drivers + +# CONFIG_PCI_PWRCTRL_SLOT is not set +# CONFIG_PCI_PWRCTRL_TC9563 is not set +# CONFIG_CXL_BUS is not set +# CONFIG_PCCARD is not set +# CONFIG_RAPIDIO is not set +# CONFIG_PC104 is not set + +# +# Generic Driver Options +# +# CONFIG_UEVENT_HELPER is not set +CONFIG_DEVTMPFS=y +CONFIG_DEVTMPFS_MOUNT=y +# CONFIG_DEVTMPFS_SAFE is not set +CONFIG_STANDALONE=y +CONFIG_PREVENT_FIRMWARE_BUILD=y + +# +# Firmware loader +# +CONFIG_FW_LOADER=y +CONFIG_FW_LOADER_DEBUG=y +CONFIG_FW_LOADER_PAGED_BUF=y +CONFIG_FW_LOADER_SYSFS=y +CONFIG_EXTRA_FIRMWARE="" +CONFIG_FW_LOADER_USER_HELPER=y +# CONFIG_FW_LOADER_USER_HELPER_FALLBACK is not set +CONFIG_FW_LOADER_COMPRESS=y +CONFIG_FW_LOADER_COMPRESS_XZ=y +CONFIG_FW_LOADER_COMPRESS_ZSTD=y +# CONFIG_FW_UPLOAD is not set +# end of Firmware loader + +CONFIG_WANT_DEV_COREDUMP=y +CONFIG_ALLOW_DEV_COREDUMP=y +CONFIG_DEV_COREDUMP=y +# CONFIG_DEBUG_DRIVER is not set +CONFIG_DEBUG_DEVRES=y +# CONFIG_DEBUG_TEST_DRIVER_REMOVE is not set +# CONFIG_TEST_ASYNC_DRIVER_PROBE is not set +CONFIG_GENERIC_CPU_DEVICES=y +CONFIG_GENERIC_CPU_AUTOPROBE=y +CONFIG_GENERIC_CPU_VULNERABILITIES=y +CONFIG_REGMAP=y +CONFIG_DMA_SHARED_BUFFER=y +# CONFIG_DMA_FENCE_TRACE is not set +# CONFIG_FW_DEVLINK_SYNC_STATE_TIMEOUT is not set +# end of Generic Driver Options + +# +# Bus devices +# +# CONFIG_MHI_BUS is not set +# CONFIG_MHI_BUS_EP is not set +# end of Bus devices + +CONFIG_CONNECTOR=y +CONFIG_PROC_EVENTS=y + +# +# Firmware Drivers +# + +# +# ARM System Control and Management Interface Protocol +# +# end of ARM System Control and Management Interface Protocol + +# CONFIG_EDD is not set +CONFIG_FIRMWARE_MEMMAP=y +# CONFIG_FW_CFG_SYSFS is not set +CONFIG_SYSFB=y +CONFIG_SYSFB_SIMPLEFB=y +# CONFIG_GOOGLE_FIRMWARE is not set + +# +# EFI (Extensible Firmware Interface) Support +# +CONFIG_EFI_ESRT=y +CONFIG_EFI_DXE_MEM_ATTRIBUTES=y +CONFIG_EFI_RUNTIME_WRAPPERS=y +# CONFIG_EFI_BOOTLOADER_CONTROL is not set +# CONFIG_EFI_CAPSULE_LOADER is not set +# CONFIG_EFI_TEST is not set +# CONFIG_APPLE_PROPERTIES is not set +# CONFIG_RESET_ATTACK_MITIGATION is not set +# CONFIG_EFI_RCI2_TABLE is not set +# CONFIG_EFI_DISABLE_PCI_DMA is not set +CONFIG_EFI_CUSTOM_SSDT_OVERLAYS=y +# CONFIG_EFI_DISABLE_RUNTIME is not set +# CONFIG_EFI_COCO_SECRET is not set +# CONFIG_OVMF_DEBUG_LOG is not set +CONFIG_EFI_SBAT_FILE="" +# end of EFI (Extensible Firmware Interface) Support + +# +# Qualcomm firmware drivers +# +# end of Qualcomm firmware drivers + +# +# Tegra firmware driver +# +# end of Tegra firmware driver +# end of Firmware Drivers + +# CONFIG_FWCTL is not set +# CONFIG_GNSS is not set +# CONFIG_MTD is not set +# CONFIG_OF is not set +CONFIG_ARCH_MIGHT_HAVE_PC_PARPORT=y +# CONFIG_PARPORT is not set +CONFIG_PNP=y +CONFIG_PNP_DEBUG_MESSAGES=y + +# +# Protocols +# +CONFIG_PNPACPI=y +CONFIG_BLK_DEV=y +# CONFIG_BLK_DEV_NULL_BLK is not set +# CONFIG_BLK_DEV_FD is not set +# CONFIG_BLK_DEV_PCIESSD_MTIP32XX is not set +CONFIG_ZRAM=m +CONFIG_ZRAM_BACKEND_LZ4=y +CONFIG_ZRAM_BACKEND_LZ4HC=y +CONFIG_ZRAM_BACKEND_ZSTD=y +CONFIG_ZRAM_BACKEND_DEFLATE=y +CONFIG_ZRAM_BACKEND_842=y +CONFIG_ZRAM_BACKEND_LZO=y +CONFIG_ZRAM_DEF_COMP_LZORLE=y +# CONFIG_ZRAM_DEF_COMP_LZO is not set +# CONFIG_ZRAM_DEF_COMP_LZ4 is not set +# CONFIG_ZRAM_DEF_COMP_LZ4HC is not set +# CONFIG_ZRAM_DEF_COMP_ZSTD is not set +# CONFIG_ZRAM_DEF_COMP_DEFLATE is not set +# CONFIG_ZRAM_DEF_COMP_842 is not set +CONFIG_ZRAM_DEF_COMP="lzo-rle" +CONFIG_ZRAM_WRITEBACK=y +CONFIG_ZRAM_TRACK_ENTRY_ACTIME=y +CONFIG_ZRAM_MEMORY_TRACKING=y +# CONFIG_ZRAM_MULTI_COMP is not set +CONFIG_BLK_DEV_LOOP=y +CONFIG_BLK_DEV_LOOP_MIN_COUNT=8 +CONFIG_BLK_DEV_DRBD=m +# CONFIG_DRBD_FAULT_INJECTION is not set +# CONFIG_BLK_DEV_NBD is not set +# CONFIG_BLK_DEV_RAM is not set +# CONFIG_ATA_OVER_ETH is not set +# CONFIG_BLK_DEV_RBD is not set +# CONFIG_BLK_DEV_UBLK is not set + +# +# NVME Support +# +CONFIG_NVME_CORE=m +CONFIG_BLK_DEV_NVME=m +CONFIG_NVME_MULTIPATH=y +# CONFIG_NVME_VERBOSE_ERRORS is not set +CONFIG_NVME_HWMON=y +# CONFIG_NVME_FC is not set +# CONFIG_NVME_TCP is not set +# CONFIG_NVME_HOST_AUTH is not set +# CONFIG_NVME_TARGET is not set +# end of NVME Support + +# +# Misc devices +# +# CONFIG_AD525X_DPOT is not set +# CONFIG_DUMMY_IRQ is not set +# CONFIG_IBM_ASM is not set +# CONFIG_PHANTOM is not set +# CONFIG_RPMB is not set +# CONFIG_TI_FPC202 is not set +# CONFIG_TIFM_CORE is not set +# CONFIG_ICS932S401 is not set +# CONFIG_ENCLOSURE_SERVICES is not set +# CONFIG_HP_ILO is not set +# CONFIG_APDS9802ALS is not set +# CONFIG_ISL29003 is not set +# CONFIG_ISL29020 is not set +# CONFIG_SENSORS_TSL2550 is not set +# CONFIG_SENSORS_BH1770 is not set +# CONFIG_SENSORS_APDS990X is not set +# CONFIG_HMC6352 is not set +# CONFIG_DS1682 is not set +# CONFIG_SRAM is not set +# CONFIG_DW_XDATA_PCIE is not set +# CONFIG_PCI_ENDPOINT_TEST is not set +# CONFIG_XILINX_SDFEC is not set +# CONFIG_NTSYNC is not set +# CONFIG_C2PORT is not set + +# +# EEPROM support +# +# CONFIG_EEPROM_AT24 is not set +# CONFIG_EEPROM_MAX6875 is not set +CONFIG_EEPROM_93CX6=y +# CONFIG_EEPROM_IDT_89HPESX is not set +# CONFIG_EEPROM_EE1004 is not set +# CONFIG_EEPROM_M24LR is not set +# end of EEPROM support + +# CONFIG_CB710_CORE is not set +# CONFIG_SENSORS_LIS3_I2C is not set +# CONFIG_ALTERA_STAPL is not set +# CONFIG_INTEL_MEI is not set +# CONFIG_VMWARE_VMCI is not set +# CONFIG_GENWQE is not set +# CONFIG_BCM_VK is not set +# CONFIG_MISC_ALCOR_PCI is not set +# CONFIG_MISC_RTSX_PCI is not set +# CONFIG_MISC_RTSX_USB is not set +# CONFIG_UACCE is not set +# CONFIG_PVPANIC is not set +# CONFIG_KEBA_CP500 is not set +# end of Misc devices + +# +# SCSI device support +# +CONFIG_SCSI_MOD=y +# CONFIG_RAID_ATTRS is not set +CONFIG_SCSI_COMMON=y +CONFIG_SCSI=y +CONFIG_SCSI_DMA=y +CONFIG_SCSI_PROC_FS=y + +# +# SCSI support type (disk, tape, CD-ROM) +# +CONFIG_BLK_DEV_SD=y +# CONFIG_CHR_DEV_ST is not set +CONFIG_BLK_DEV_SR=y +CONFIG_CHR_DEV_SG=y +CONFIG_BLK_DEV_BSG=y +# CONFIG_CHR_DEV_SCH is not set +CONFIG_SCSI_CONSTANTS=y +# CONFIG_SCSI_LOGGING is not set +# CONFIG_SCSI_SCAN_ASYNC is not set + +# +# SCSI Transports +# +CONFIG_SCSI_SPI_ATTRS=y +# CONFIG_SCSI_FC_ATTRS is not set +# CONFIG_SCSI_ISCSI_ATTRS is not set +# CONFIG_SCSI_SAS_ATTRS is not set +# CONFIG_SCSI_SAS_LIBSAS is not set +# CONFIG_SCSI_SRP_ATTRS is not set +# end of SCSI Transports + +# CONFIG_SCSI_LOWLEVEL is not set +# CONFIG_SCSI_DH is not set +# end of SCSI device support + +CONFIG_ATA=y +CONFIG_MD=y +CONFIG_BLK_DEV_MD=y +CONFIG_MD_BITMAP=y +# CONFIG_MD_LLBITMAP is not set +CONFIG_MD_AUTODETECT=y +CONFIG_MD_BITMAP_FILE=y +# CONFIG_MD_LINEAR is not set +# CONFIG_MD_RAID0 is not set +# CONFIG_MD_RAID1 is not set +# CONFIG_MD_RAID10 is not set +# CONFIG_MD_RAID456 is not set +# CONFIG_BCACHE is not set +CONFIG_BLK_DEV_DM_BUILTIN=y +CONFIG_BLK_DEV_DM=y +# CONFIG_DM_DEBUG is not set +# CONFIG_DM_UNSTRIPED is not set +# CONFIG_DM_CRYPT is not set +# CONFIG_DM_SNAPSHOT is not set +# CONFIG_DM_THIN_PROVISIONING is not set +# CONFIG_DM_CACHE is not set +# CONFIG_DM_WRITECACHE is not set +# CONFIG_DM_EBS is not set +# CONFIG_DM_ERA is not set +# CONFIG_DM_CLONE is not set +CONFIG_DM_MIRROR=y +# CONFIG_DM_LOG_USERSPACE is not set +# CONFIG_DM_RAID is not set +CONFIG_DM_ZERO=y +# CONFIG_DM_MULTIPATH is not set +# CONFIG_DM_DELAY is not set +# CONFIG_DM_DUST is not set +# CONFIG_DM_INIT is not set +# CONFIG_DM_UEVENT is not set +# CONFIG_DM_FLAKEY is not set +# CONFIG_DM_VERITY is not set +# CONFIG_DM_SWITCH is not set +# CONFIG_DM_LOG_WRITES is not set +# CONFIG_DM_INTEGRITY is not set +# CONFIG_DM_AUDIT is not set +# CONFIG_DM_VDO is not set +# CONFIG_TARGET_CORE is not set +# CONFIG_FUSION is not set + +# +# IEEE 1394 (FireWire) support +# +# CONFIG_FIREWIRE is not set +# CONFIG_FIREWIRE_NOSY is not set +# end of IEEE 1394 (FireWire) support + +# CONFIG_MACINTOSH_DRIVERS is not set +CONFIG_NETDEVICES=y +CONFIG_MII=y +CONFIG_NET_CORE=y +# CONFIG_BONDING is not set +CONFIG_DUMMY=y +# CONFIG_WIREGUARD is not set +# CONFIG_OVPN is not set +# CONFIG_EQUALIZER is not set +# CONFIG_NET_FC is not set +# CONFIG_NET_TEAM is not set +CONFIG_MACVLAN=y +CONFIG_IPVLAN=y +CONFIG_VXLAN=y +# CONFIG_GENEVE is not set +# CONFIG_BAREUDP is not set +# CONFIG_GTP is not set +# CONFIG_PFCP is not set +# CONFIG_AMT is not set +# CONFIG_MACSEC is not set +CONFIG_NETCONSOLE=y +# CONFIG_NETCONSOLE_DYNAMIC is not set +# CONFIG_NETCONSOLE_EXTENDED_LOG is not set +CONFIG_NETPOLL=y +CONFIG_NET_POLL_CONTROLLER=y +# CONFIG_TUN is not set +# CONFIG_TUN_VNET_CROSS_LE is not set +CONFIG_VETH=y +# CONFIG_NLMON is not set +# CONFIG_NETKIT is not set +# CONFIG_ARCNET is not set +# CONFIG_ETHERNET is not set +# CONFIG_FDDI is not set +# CONFIG_HIPPI is not set +CONFIG_MDIO_BUS=y +CONFIG_PHYLINK=m +CONFIG_PHYLIB=y +CONFIG_SWPHY=y +# CONFIG_LED_TRIGGER_PHY is not set +CONFIG_FIXED_PHY=y +# CONFIG_SFP is not set + +# +# MII PHY device drivers +# +# CONFIG_AS21XXX_PHY is not set +# CONFIG_AIR_EN8811H_PHY is not set +# CONFIG_AMD_PHY is not set +# CONFIG_ADIN_PHY is not set +# CONFIG_ADIN1100_PHY is not set +# CONFIG_AQUANTIA_PHY is not set +CONFIG_AX88796B_PHY=y +# CONFIG_BROADCOM_PHY is not set +# CONFIG_BCM54140_PHY is not set +# CONFIG_BCM7XXX_PHY is not set +# CONFIG_BCM84881_PHY is not set +# CONFIG_BCM87XX_PHY is not set +# CONFIG_CICADA_PHY is not set +# CONFIG_CORTINA_PHY is not set +# CONFIG_DAVICOM_PHY is not set +# CONFIG_ICPLUS_PHY is not set +# CONFIG_LXT_PHY is not set +# CONFIG_INTEL_XWAY_PHY is not set +# CONFIG_LSI_ET1011C_PHY is not set +# CONFIG_MARVELL_PHY is not set +# CONFIG_MARVELL_10G_PHY is not set +# CONFIG_MARVELL_88Q2XXX_PHY is not set +# CONFIG_MARVELL_88X2222_PHY is not set +# CONFIG_MAXLINEAR_GPHY is not set +# CONFIG_MAXLINEAR_86110_PHY is not set +# CONFIG_MEDIATEK_GE_PHY is not set +# CONFIG_MICREL_PHY is not set +# CONFIG_MICROCHIP_T1S_PHY is not set +CONFIG_MICROCHIP_PHY=m +# CONFIG_MICROCHIP_T1_PHY is not set +# CONFIG_MICROSEMI_PHY is not set +# CONFIG_MOTORCOMM_PHY is not set +# CONFIG_NATIONAL_PHY is not set +# CONFIG_NXP_CBTX_PHY is not set +# CONFIG_NXP_C45_TJA11XX_PHY is not set +# CONFIG_NXP_TJA11XX_PHY is not set +# CONFIG_NCN26000_PHY is not set +# CONFIG_QCA83XX_PHY is not set +# CONFIG_QCA808X_PHY is not set +# CONFIG_QSEMI_PHY is not set +# CONFIG_REALTEK_PHY is not set +# CONFIG_RENESAS_PHY is not set +# CONFIG_ROCKCHIP_PHY is not set +CONFIG_SMSC_PHY=m +# CONFIG_STE10XP is not set +# CONFIG_TERANETICS_PHY is not set +# CONFIG_DP83822_PHY is not set +# CONFIG_DP83TC811_PHY is not set +# CONFIG_DP83848_PHY is not set +# CONFIG_DP83867_PHY is not set +# CONFIG_DP83869_PHY is not set +# CONFIG_DP83TD510_PHY is not set +# CONFIG_DP83TG720_PHY is not set +# CONFIG_VITESSE_PHY is not set +# CONFIG_XILINX_GMII2RGMII is not set +CONFIG_FWNODE_MDIO=y +CONFIG_ACPI_MDIO=y +# CONFIG_MDIO_BITBANG is not set +# CONFIG_MDIO_BCM_UNIMAC is not set +# CONFIG_MDIO_MVUSB is not set +# CONFIG_MDIO_THUNDER is not set + +# +# MDIO Multiplexers +# + +# +# PCS device drivers +# +# CONFIG_PCS_XPCS is not set +# end of PCS device drivers + +# CONFIG_PPP is not set +# CONFIG_SLIP is not set +CONFIG_USB_NET_DRIVERS=y +CONFIG_USB_CATC=m +CONFIG_USB_KAWETH=m +CONFIG_USB_PEGASUS=m +CONFIG_USB_RTL8150=m +CONFIG_USB_RTL8152=m +CONFIG_USB_LAN78XX=m +CONFIG_USB_USBNET=y +CONFIG_USB_NET_AX8817X=m +CONFIG_USB_NET_AX88179_178A=m +CONFIG_USB_NET_CDCETHER=y +CONFIG_USB_NET_CDC_EEM=m +CONFIG_USB_NET_CDC_NCM=y +CONFIG_USB_NET_HUAWEI_CDC_NCM=m +CONFIG_USB_NET_CDC_MBIM=m +CONFIG_USB_NET_DM9601=m +CONFIG_USB_NET_SR9700=m +CONFIG_USB_NET_SR9800=m +CONFIG_USB_NET_SMSC75XX=m +CONFIG_USB_NET_SMSC95XX=m +CONFIG_USB_NET_GL620A=m +CONFIG_USB_NET_NET1080=m +CONFIG_USB_NET_PLUSB=m +CONFIG_USB_NET_MCS7830=m +CONFIG_USB_NET_RNDIS_HOST=m +CONFIG_USB_NET_CDC_SUBSET_ENABLE=m +CONFIG_USB_NET_CDC_SUBSET=m +CONFIG_USB_ALI_M5632=y +CONFIG_USB_AN2720=y +CONFIG_USB_BELKIN=y +CONFIG_USB_ARMLINUX=y +CONFIG_USB_EPSON2888=y +CONFIG_USB_KC2190=y +CONFIG_USB_NET_ZAURUS=m +CONFIG_USB_NET_CX82310_ETH=m +CONFIG_USB_NET_KALMIA=m +CONFIG_USB_NET_QMI_WWAN=m +CONFIG_USB_HSO=m +CONFIG_USB_NET_INT51X1=m +CONFIG_USB_IPHETH=m +CONFIG_USB_SIERRA_NET=m +CONFIG_USB_VL600=m +CONFIG_USB_NET_CH9200=m +CONFIG_USB_NET_AQC111=m +CONFIG_USB_RTL8153_ECM=y +CONFIG_WLAN=y +# CONFIG_WLAN_VENDOR_ADMTEK is not set +# CONFIG_WLAN_VENDOR_ATH is not set +# CONFIG_WLAN_VENDOR_ATMEL is not set +# CONFIG_WLAN_VENDOR_BROADCOM is not set +# CONFIG_WLAN_VENDOR_INTEL is not set +# CONFIG_WLAN_VENDOR_INTERSIL is not set +# CONFIG_WLAN_VENDOR_MARVELL is not set +CONFIG_WLAN_VENDOR_MEDIATEK=y +CONFIG_MT7601U=m +CONFIG_MT76_CORE=m +CONFIG_MT76_LEDS=y +CONFIG_MT76_USB=m +CONFIG_MT76x02_LIB=m +CONFIG_MT76x02_USB=m +CONFIG_MT76_CONNAC_LIB=m +CONFIG_MT792x_LIB=m +CONFIG_MT792x_USB=m +CONFIG_MT76x0_COMMON=m +CONFIG_MT76x0U=m +# CONFIG_MT76x0E is not set +CONFIG_MT76x2_COMMON=m +# CONFIG_MT76x2E is not set +CONFIG_MT76x2U=m +# CONFIG_MT7603E is not set +CONFIG_MT7615_COMMON=m +# CONFIG_MT7615E is not set +CONFIG_MT7663_USB_SDIO_COMMON=m +CONFIG_MT7663U=m +# CONFIG_MT7915E is not set +CONFIG_MT7921_COMMON=m +CONFIG_MT7921E=m +CONFIG_MT7921U=m +# CONFIG_MT7996E is not set +CONFIG_MT7925_COMMON=m +CONFIG_MT7925E=m +CONFIG_MT7925U=m +# CONFIG_WLAN_VENDOR_MICROCHIP is not set +# CONFIG_WLAN_VENDOR_PURELIFI is not set +# CONFIG_WLAN_VENDOR_RALINK is not set +CONFIG_WLAN_VENDOR_REALTEK=y +# CONFIG_RTL8180 is not set +CONFIG_RTL8187=m +# CONFIG_RTL_CARDS is not set +CONFIG_RTL8XXXU=m +CONFIG_RTL8XXXU_UNTESTED=y +# CONFIG_RTW88 is not set +# CONFIG_RTW89 is not set +# CONFIG_WLAN_VENDOR_RSI is not set +# CONFIG_WLAN_VENDOR_SILABS is not set +# CONFIG_WLAN_VENDOR_ST is not set +# CONFIG_WLAN_VENDOR_TI is not set +# CONFIG_WLAN_VENDOR_ZYDAS is not set +# CONFIG_WLAN_VENDOR_QUANTENNA is not set +# CONFIG_MAC80211_HWSIM is not set +# CONFIG_VIRT_WIFI is not set +# CONFIG_WAN is not set + +# +# Wireless WAN +# +# CONFIG_WWAN is not set +# end of Wireless WAN + +# CONFIG_VMXNET3 is not set +# CONFIG_FUJITSU_ES is not set +# CONFIG_NETDEVSIM is not set +CONFIG_NET_FAILOVER=y +# CONFIG_ISDN is not set + +# +# Input device support +# +CONFIG_INPUT=y +CONFIG_INPUT_LEDS=m +CONFIG_INPUT_FF_MEMLESS=y +CONFIG_INPUT_SPARSEKMAP=m +# CONFIG_INPUT_MATRIXKMAP is not set +CONFIG_INPUT_VIVALDIFMAP=y + +# +# Userland interfaces +# +# CONFIG_INPUT_MOUSEDEV is not set +# CONFIG_INPUT_JOYDEV is not set +CONFIG_INPUT_EVDEV=y + +# +# Input Device Drivers +# +CONFIG_INPUT_KEYBOARD=y +# CONFIG_KEYBOARD_ADP5588 is not set +CONFIG_KEYBOARD_ATKBD=y +# CONFIG_KEYBOARD_QT1050 is not set +# CONFIG_KEYBOARD_QT1070 is not set +# CONFIG_KEYBOARD_QT2160 is not set +# CONFIG_KEYBOARD_DLINK_DIR685 is not set +# CONFIG_KEYBOARD_LKKBD is not set +# CONFIG_KEYBOARD_TCA8418 is not set +# CONFIG_KEYBOARD_LM8323 is not set +# CONFIG_KEYBOARD_LM8333 is not set +# CONFIG_KEYBOARD_MAX7359 is not set +# CONFIG_KEYBOARD_MPR121 is not set +# CONFIG_KEYBOARD_NEWTON is not set +# CONFIG_KEYBOARD_OPENCORES is not set +# CONFIG_KEYBOARD_SAMSUNG is not set +# CONFIG_KEYBOARD_STOWAWAY is not set +# CONFIG_KEYBOARD_SUNKBD is not set +# CONFIG_KEYBOARD_TM2_TOUCHKEY is not set +# CONFIG_KEYBOARD_XTKBD is not set +# CONFIG_KEYBOARD_CYPRESS_SF is not set +CONFIG_INPUT_MOUSE=y +CONFIG_MOUSE_PS2=m +CONFIG_MOUSE_PS2_ALPS=y +CONFIG_MOUSE_PS2_BYD=y +CONFIG_MOUSE_PS2_LOGIPS2PP=y +CONFIG_MOUSE_PS2_SYNAPTICS=y +CONFIG_MOUSE_PS2_SYNAPTICS_SMBUS=y +CONFIG_MOUSE_PS2_CYPRESS=y +CONFIG_MOUSE_PS2_TRACKPOINT=y +# CONFIG_MOUSE_PS2_ELANTECH is not set +# CONFIG_MOUSE_PS2_SENTELIC is not set +# CONFIG_MOUSE_PS2_TOUCHKIT is not set +CONFIG_MOUSE_PS2_FOCALTECH=y +# CONFIG_MOUSE_PS2_VMMOUSE is not set +CONFIG_MOUSE_PS2_SMBUS=y +# CONFIG_MOUSE_SERIAL is not set +# CONFIG_MOUSE_APPLETOUCH is not set +# CONFIG_MOUSE_BCM5974 is not set +# CONFIG_MOUSE_CYAPA is not set +# CONFIG_MOUSE_ELAN_I2C is not set +# CONFIG_MOUSE_VSXXXAA is not set +# CONFIG_MOUSE_SYNAPTICS_I2C is not set +# CONFIG_MOUSE_SYNAPTICS_USB is not set +CONFIG_INPUT_JOYSTICK=y +# CONFIG_JOYSTICK_ANALOG is not set +# CONFIG_JOYSTICK_A3D is not set +# CONFIG_JOYSTICK_ADI is not set +# CONFIG_JOYSTICK_COBRA is not set +# CONFIG_JOYSTICK_GF2K is not set +# CONFIG_JOYSTICK_GRIP is not set +# CONFIG_JOYSTICK_GRIP_MP is not set +# CONFIG_JOYSTICK_GUILLEMOT is not set +# CONFIG_JOYSTICK_INTERACT is not set +# CONFIG_JOYSTICK_SIDEWINDER is not set +# CONFIG_JOYSTICK_TMDC is not set +# CONFIG_JOYSTICK_IFORCE is not set +# CONFIG_JOYSTICK_WARRIOR is not set +# CONFIG_JOYSTICK_MAGELLAN is not set +# CONFIG_JOYSTICK_SPACEORB is not set +# CONFIG_JOYSTICK_SPACEBALL is not set +# CONFIG_JOYSTICK_STINGER is not set +# CONFIG_JOYSTICK_TWIDJOY is not set +# CONFIG_JOYSTICK_ZHENHUA is not set +# CONFIG_JOYSTICK_AS5011 is not set +# CONFIG_JOYSTICK_JOYDUMP is not set +# CONFIG_JOYSTICK_XPAD is not set +# CONFIG_JOYSTICK_PXRC is not set +# CONFIG_JOYSTICK_QWIIC is not set +# CONFIG_JOYSTICK_FSIA6B is not set +# CONFIG_JOYSTICK_SENSEHAT is not set +# CONFIG_JOYSTICK_SEESAW is not set +# CONFIG_INPUT_TABLET is not set +# CONFIG_INPUT_TOUCHSCREEN is not set +# CONFIG_INPUT_MISC is not set +CONFIG_RMI4_CORE=m +# CONFIG_RMI4_I2C is not set +# CONFIG_RMI4_SMB is not set +CONFIG_RMI4_F03=y +CONFIG_RMI4_F03_SERIO=m +CONFIG_RMI4_2D_SENSOR=y +CONFIG_RMI4_F11=y +CONFIG_RMI4_F12=y +# CONFIG_RMI4_F1A is not set +# CONFIG_RMI4_F21 is not set +CONFIG_RMI4_F30=y +# CONFIG_RMI4_F34 is not set +CONFIG_RMI4_F3A=y +# CONFIG_RMI4_F55 is not set + +# +# Hardware I/O ports +# +CONFIG_SERIO=y +CONFIG_ARCH_MIGHT_HAVE_PC_SERIO=y +CONFIG_SERIO_I8042=y +CONFIG_SERIO_SERPORT=y +# CONFIG_SERIO_CT82C710 is not set +CONFIG_SERIO_PCIPS2=y +CONFIG_SERIO_LIBPS2=y +# CONFIG_SERIO_RAW is not set +# CONFIG_SERIO_ALTERA_PS2 is not set +# CONFIG_SERIO_PS2MULT is not set +# CONFIG_SERIO_ARC_PS2 is not set +# CONFIG_USERIO is not set +# CONFIG_GAMEPORT is not set +# end of Hardware I/O ports +# end of Input device support + +# +# Character devices +# +CONFIG_TTY=y +CONFIG_VT=y +CONFIG_CONSOLE_TRANSLATIONS=y +CONFIG_VT_CONSOLE=y +CONFIG_VT_HW_CONSOLE_BINDING=y +CONFIG_UNIX98_PTYS=y +# CONFIG_LEGACY_PTYS is not set +CONFIG_LEGACY_TIOCSTI=y +CONFIG_LDISC_AUTOLOAD=y + +# +# Serial drivers +# +# CONFIG_SERIAL_8250 is not set + +# +# Non-8250 serial port support +# +# CONFIG_SERIAL_UARTLITE is not set +# CONFIG_SERIAL_JSM is not set +# CONFIG_SERIAL_LANTIQ is not set +# CONFIG_SERIAL_SCCNXP is not set +# CONFIG_SERIAL_SC16IS7XX is not set +# CONFIG_SERIAL_ALTERA_JTAGUART is not set +# CONFIG_SERIAL_ALTERA_UART is not set +# CONFIG_SERIAL_ARC is not set +# CONFIG_SERIAL_RP2 is not set +# CONFIG_SERIAL_FSL_LPUART is not set +# CONFIG_SERIAL_FSL_LINFLEXUART is not set +# CONFIG_SERIAL_SPRD is not set +# end of Serial drivers + +CONFIG_SERIAL_NONSTANDARD=y +# CONFIG_MOXA_INTELLIO is not set +# CONFIG_MOXA_SMARTIO is not set +# CONFIG_N_HDLC is not set +# CONFIG_N_GSM is not set +# CONFIG_NOZOMI is not set +# CONFIG_NULL_TTY is not set +# CONFIG_SERIAL_DEV_BUS is not set +# CONFIG_TTY_PRINTK is not set +CONFIG_VIRTIO_CONSOLE=y +# CONFIG_IPMI_HANDLER is not set +CONFIG_HW_RANDOM=y +# CONFIG_HW_RANDOM_TIMERIOMEM is not set +# CONFIG_HW_RANDOM_INTEL is not set +CONFIG_HW_RANDOM_AMD=m +# CONFIG_HW_RANDOM_BA431 is not set +CONFIG_HW_RANDOM_VIA=y +# CONFIG_HW_RANDOM_XIPHERA is not set +# CONFIG_APPLICOM is not set +# CONFIG_MWAVE is not set +CONFIG_DEVMEM=y +CONFIG_NVRAM=m +CONFIG_DEVPORT=y +CONFIG_HPET=y +# CONFIG_HPET_MMAP is not set +# CONFIG_HANGCHECK_TIMER is not set +# CONFIG_TCG_TPM is not set +# CONFIG_TELCLOCK is not set +# CONFIG_XILLYBUS is not set +# CONFIG_XILLYUSB is not set +# end of Character devices + +# +# I2C support +# +CONFIG_I2C=y +CONFIG_ACPI_I2C_OPREGION=y +CONFIG_I2C_BOARDINFO=y +CONFIG_I2C_CHARDEV=y +# CONFIG_I2C_MUX is not set +CONFIG_I2C_HELPER_AUTO=y +CONFIG_I2C_ALGOBIT=m + +# +# I2C Hardware Bus support +# + +# +# PC SMBus host controller drivers +# +# CONFIG_I2C_ALI1535 is not set +# CONFIG_I2C_ALI1563 is not set +# CONFIG_I2C_ALI15X3 is not set +# CONFIG_I2C_AMD756 is not set +# CONFIG_I2C_AMD8111 is not set +# CONFIG_I2C_AMD_MP2 is not set +# CONFIG_I2C_I801 is not set +# CONFIG_I2C_ISCH is not set +# CONFIG_I2C_ISMT is not set +# CONFIG_I2C_PIIX4 is not set +# CONFIG_I2C_NFORCE2 is not set +# CONFIG_I2C_NVIDIA_GPU is not set +# CONFIG_I2C_SIS5595 is not set +# CONFIG_I2C_SIS630 is not set +# CONFIG_I2C_SIS96X is not set +# CONFIG_I2C_VIA is not set +# CONFIG_I2C_VIAPRO is not set +# CONFIG_I2C_ZHAOXIN is not set + +# +# ACPI drivers +# +# CONFIG_I2C_SCMI is not set + +# +# I2C system bus drivers (mostly embedded / system-on-chip) +# +# CONFIG_I2C_DESIGNWARE_CORE is not set +# CONFIG_I2C_EMEV2 is not set +# CONFIG_I2C_OCORES is not set +# CONFIG_I2C_PCA_PLATFORM is not set +# CONFIG_I2C_SIMTEC is not set +# CONFIG_I2C_XILINX is not set + +# +# External I2C/SMBus adapter drivers +# +# CONFIG_I2C_DIOLAN_U2C is not set +# CONFIG_I2C_CP2615 is not set +# CONFIG_I2C_PCI1XXXX is not set +# CONFIG_I2C_ROBOTFUZZ_OSIF is not set +# CONFIG_I2C_TAOS_EVM is not set +# CONFIG_I2C_TINY_USB is not set + +# +# Other I2C/SMBus bus drivers +# +# CONFIG_I2C_MLXCPLD is not set +# CONFIG_I2C_VIRTIO is not set +# end of I2C Hardware Bus support + +# CONFIG_I2C_STUB is not set +# CONFIG_I2C_SLAVE is not set +# CONFIG_I2C_DEBUG_CORE is not set +# CONFIG_I2C_DEBUG_ALGO is not set +# CONFIG_I2C_DEBUG_BUS is not set +# end of I2C support + +# CONFIG_I3C is not set +# CONFIG_SPI is not set +# CONFIG_SPMI is not set +# CONFIG_HSI is not set +CONFIG_PPS=y +# CONFIG_PPS_DEBUG is not set + +# +# PPS clients support +# +# CONFIG_PPS_CLIENT_KTIMER is not set +# CONFIG_PPS_CLIENT_LDISC is not set +# CONFIG_PPS_CLIENT_GPIO is not set +# CONFIG_PPS_GENERATOR is not set + +# +# PTP clock support +# +CONFIG_PTP_1588_CLOCK=y +CONFIG_PTP_1588_CLOCK_OPTIONAL=y +# CONFIG_DP83640_PHY is not set +# CONFIG_PTP_1588_CLOCK_INES is not set +CONFIG_PTP_1588_CLOCK_VMCLOCK=y +# CONFIG_PTP_1588_CLOCK_IDT82P33 is not set +# CONFIG_PTP_1588_CLOCK_IDTCM is not set +# CONFIG_PTP_1588_CLOCK_FC3W is not set +# CONFIG_PTP_1588_CLOCK_MOCK is not set +# CONFIG_PTP_1588_CLOCK_VMW is not set +# CONFIG_PTP_NETC_V4_TIMER is not set +# end of PTP clock support + +# +# DPLL device support +# +# CONFIG_ZL3073X_I2C is not set +# end of DPLL device support + +CONFIG_PINCTRL=y +# CONFIG_DEBUG_PINCTRL is not set +# CONFIG_PINCTRL_AMD is not set +# CONFIG_PINCTRL_CY8C95X0 is not set +# CONFIG_PINCTRL_MCP23S08 is not set +# CONFIG_PINCTRL_SX150X is not set + +# +# Intel pinctrl drivers +# +# CONFIG_PINCTRL_BAYTRAIL is not set +# CONFIG_PINCTRL_CHERRYVIEW is not set +# CONFIG_PINCTRL_LYNXPOINT is not set +# CONFIG_PINCTRL_INTEL_PLATFORM is not set +# CONFIG_PINCTRL_ALDERLAKE is not set +# CONFIG_PINCTRL_BROXTON is not set +# CONFIG_PINCTRL_CANNONLAKE is not set +# CONFIG_PINCTRL_CEDARFORK is not set +# CONFIG_PINCTRL_DENVERTON is not set +# CONFIG_PINCTRL_ELKHARTLAKE is not set +# CONFIG_PINCTRL_EMMITSBURG is not set +# CONFIG_PINCTRL_GEMINILAKE is not set +# CONFIG_PINCTRL_ICELAKE is not set +# CONFIG_PINCTRL_JASPERLAKE is not set +# CONFIG_PINCTRL_LAKEFIELD is not set +# CONFIG_PINCTRL_LEWISBURG is not set +# CONFIG_PINCTRL_METEORLAKE is not set +# CONFIG_PINCTRL_METEORPOINT is not set +# CONFIG_PINCTRL_SUNRISEPOINT is not set +# CONFIG_PINCTRL_TIGERLAKE is not set +# end of Intel pinctrl drivers + +# +# Renesas pinctrl drivers +# +# end of Renesas pinctrl drivers + +CONFIG_GPIOLIB_LEGACY=y +# CONFIG_GPIOLIB is not set +# CONFIG_W1 is not set +# CONFIG_POWER_RESET is not set +# CONFIG_POWER_SEQUENCING is not set +CONFIG_POWER_SUPPLY=y +# CONFIG_POWER_SUPPLY_DEBUG is not set +# CONFIG_POWER_SUPPLY_HWMON is not set +# CONFIG_IP5XXX_POWER is not set +# CONFIG_TEST_POWER is not set +# CONFIG_CHARGER_ADP5061 is not set +# CONFIG_BATTERY_CHAGALL is not set +# CONFIG_BATTERY_CW2015 is not set +# CONFIG_BATTERY_DS2780 is not set +# CONFIG_BATTERY_DS2781 is not set +# CONFIG_BATTERY_DS2782 is not set +# CONFIG_BATTERY_SAMSUNG_SDI is not set +# CONFIG_BATTERY_SBS is not set +# CONFIG_CHARGER_SBS is not set +# CONFIG_BATTERY_BQ27XXX is not set +# CONFIG_BATTERY_MAX17042 is not set +# CONFIG_BATTERY_MAX1720X is not set +# CONFIG_CHARGER_MAX8903 is not set +# CONFIG_CHARGER_LP8727 is not set +# CONFIG_CHARGER_LTC4162L is not set +# CONFIG_CHARGER_MAX77976 is not set +# CONFIG_CHARGER_MAX8971 is not set +# CONFIG_CHARGER_BQ2415X is not set +# CONFIG_BATTERY_GAUGE_LTC2941 is not set +# CONFIG_BATTERY_GOLDFISH is not set +# CONFIG_BATTERY_RT5033 is not set +# CONFIG_CHARGER_RT9756 is not set +# CONFIG_CHARGER_BD99954 is not set +# CONFIG_BATTERY_UG3105 is not set +# CONFIG_FUEL_GAUGE_MM8013 is not set +CONFIG_HWMON=y +# CONFIG_HWMON_DEBUG_CHIP is not set + +# +# Native drivers +# +# CONFIG_SENSORS_AD7414 is not set +# CONFIG_SENSORS_AD7418 is not set +# CONFIG_SENSORS_ADM1025 is not set +# CONFIG_SENSORS_ADM1026 is not set +# CONFIG_SENSORS_ADM1029 is not set +# CONFIG_SENSORS_ADM1031 is not set +# CONFIG_SENSORS_ADM1177 is not set +# CONFIG_SENSORS_ADM9240 is not set +# CONFIG_SENSORS_ADT7410 is not set +# CONFIG_SENSORS_ADT7411 is not set +# CONFIG_SENSORS_ADT7462 is not set +# CONFIG_SENSORS_ADT7470 is not set +# CONFIG_SENSORS_ADT7475 is not set +# CONFIG_SENSORS_AHT10 is not set +# CONFIG_SENSORS_AQUACOMPUTER_D5NEXT is not set +# CONFIG_SENSORS_AS370 is not set +# CONFIG_SENSORS_ASC7621 is not set +# CONFIG_SENSORS_ASUS_ROG_RYUJIN is not set +# CONFIG_SENSORS_AXI_FAN_CONTROL is not set +# CONFIG_SENSORS_K8TEMP is not set +CONFIG_SENSORS_K10TEMP=m +# CONFIG_SENSORS_FAM15H_POWER is not set +# CONFIG_SENSORS_APPLESMC is not set +# CONFIG_SENSORS_ASB100 is not set +# CONFIG_SENSORS_ATXP1 is not set +# CONFIG_SENSORS_CHIPCAP2 is not set +# CONFIG_SENSORS_CORSAIR_CPRO is not set +# CONFIG_SENSORS_CORSAIR_PSU is not set +# CONFIG_SENSORS_DS620 is not set +# CONFIG_SENSORS_DS1621 is not set +# CONFIG_SENSORS_DELL_SMM is not set +# CONFIG_SENSORS_I5K_AMB is not set +# CONFIG_SENSORS_F71805F is not set +# CONFIG_SENSORS_F71882FG is not set +# CONFIG_SENSORS_F75375S is not set +# CONFIG_SENSORS_FSCHMD is not set +# CONFIG_SENSORS_FTSTEUTATES is not set +# CONFIG_SENSORS_GIGABYTE_WATERFORCE is not set +# CONFIG_SENSORS_GL518SM is not set +# CONFIG_SENSORS_GL520SM is not set +# CONFIG_SENSORS_G760A is not set +# CONFIG_SENSORS_G762 is not set +# CONFIG_SENSORS_HIH6130 is not set +# CONFIG_SENSORS_HS3001 is not set +# CONFIG_SENSORS_HTU31 is not set +# CONFIG_SENSORS_I5500 is not set +# CONFIG_SENSORS_CORETEMP is not set +# CONFIG_SENSORS_ISL28022 is not set +# CONFIG_SENSORS_IT87 is not set +# CONFIG_SENSORS_JC42 is not set +# CONFIG_SENSORS_POWERZ is not set +# CONFIG_SENSORS_POWR1220 is not set +# CONFIG_SENSORS_LENOVO_EC is not set +# CONFIG_SENSORS_LINEAGE is not set +# CONFIG_SENSORS_LTC2945 is not set +# CONFIG_SENSORS_LTC2947_I2C is not set +# CONFIG_SENSORS_LTC2990 is not set +# CONFIG_SENSORS_LTC2991 is not set +# CONFIG_SENSORS_LTC4151 is not set +# CONFIG_SENSORS_LTC4215 is not set +# CONFIG_SENSORS_LTC4222 is not set +# CONFIG_SENSORS_LTC4245 is not set +# CONFIG_SENSORS_LTC4260 is not set +# CONFIG_SENSORS_LTC4261 is not set +# CONFIG_SENSORS_LTC4282 is not set +# CONFIG_SENSORS_MAX127 is not set +# CONFIG_SENSORS_MAX16065 is not set +# CONFIG_SENSORS_MAX1619 is not set +# CONFIG_SENSORS_MAX1668 is not set +# CONFIG_SENSORS_MAX197 is not set +# CONFIG_SENSORS_MAX31730 is not set +# CONFIG_SENSORS_MAX31760 is not set +# CONFIG_MAX31827 is not set +# CONFIG_SENSORS_MAX6620 is not set +# CONFIG_SENSORS_MAX6621 is not set +# CONFIG_SENSORS_MAX6639 is not set +# CONFIG_SENSORS_MAX6650 is not set +# CONFIG_SENSORS_MAX6697 is not set +# CONFIG_SENSORS_MAX31790 is not set +# CONFIG_SENSORS_MC34VR500 is not set +# CONFIG_SENSORS_MCP3021 is not set +# CONFIG_SENSORS_TC654 is not set +# CONFIG_SENSORS_TPS23861 is not set +# CONFIG_SENSORS_MR75203 is not set +# CONFIG_SENSORS_LM63 is not set +# CONFIG_SENSORS_LM73 is not set +# CONFIG_SENSORS_LM75 is not set +# CONFIG_SENSORS_LM77 is not set +# CONFIG_SENSORS_LM78 is not set +# CONFIG_SENSORS_LM80 is not set +# CONFIG_SENSORS_LM83 is not set +# CONFIG_SENSORS_LM85 is not set +# CONFIG_SENSORS_LM87 is not set +# CONFIG_SENSORS_LM90 is not set +# CONFIG_SENSORS_LM92 is not set +# CONFIG_SENSORS_LM93 is not set +# CONFIG_SENSORS_LM95234 is not set +# CONFIG_SENSORS_LM95241 is not set +# CONFIG_SENSORS_LM95245 is not set +# CONFIG_SENSORS_PC87360 is not set +# CONFIG_SENSORS_PC87427 is not set +# CONFIG_SENSORS_NCT6683 is not set +# CONFIG_SENSORS_NCT6775 is not set +# CONFIG_SENSORS_NCT6775_I2C is not set +# CONFIG_SENSORS_NCT7363 is not set +# CONFIG_SENSORS_NCT7802 is not set +# CONFIG_SENSORS_NCT7904 is not set +# CONFIG_SENSORS_NPCM7XX is not set +# CONFIG_SENSORS_NZXT_KRAKEN2 is not set +# CONFIG_SENSORS_NZXT_KRAKEN3 is not set +# CONFIG_SENSORS_NZXT_SMART2 is not set +# CONFIG_SENSORS_OCC_P8_I2C is not set +# CONFIG_SENSORS_PCF8591 is not set +# CONFIG_PMBUS is not set +# CONFIG_SENSORS_PT5161L is not set +# CONFIG_SENSORS_SBTSI is not set +# CONFIG_SENSORS_SHT21 is not set +# CONFIG_SENSORS_SHT3x is not set +# CONFIG_SENSORS_SHT4x is not set +# CONFIG_SENSORS_SHTC1 is not set +# CONFIG_SENSORS_SIS5595 is not set +# CONFIG_SENSORS_DME1737 is not set +# CONFIG_SENSORS_EMC1403 is not set +# CONFIG_SENSORS_EMC2103 is not set +# CONFIG_SENSORS_EMC2305 is not set +# CONFIG_SENSORS_EMC6W201 is not set +# CONFIG_SENSORS_SMSC47M1 is not set +# CONFIG_SENSORS_SMSC47M192 is not set +# CONFIG_SENSORS_SMSC47B397 is not set +# CONFIG_SENSORS_SCH5627 is not set +# CONFIG_SENSORS_SCH5636 is not set +# CONFIG_SENSORS_STTS751 is not set +# CONFIG_SENSORS_ADC128D818 is not set +# CONFIG_SENSORS_ADS7828 is not set +# CONFIG_SENSORS_AMC6821 is not set +# CONFIG_SENSORS_INA209 is not set +# CONFIG_SENSORS_INA2XX is not set +# CONFIG_SENSORS_INA238 is not set +# CONFIG_SENSORS_INA3221 is not set +# CONFIG_SENSORS_SPD5118 is not set +# CONFIG_SENSORS_TC74 is not set +# CONFIG_SENSORS_THMC50 is not set +# CONFIG_SENSORS_TMP102 is not set +# CONFIG_SENSORS_TMP103 is not set +# CONFIG_SENSORS_TMP108 is not set +# CONFIG_SENSORS_TMP401 is not set +# CONFIG_SENSORS_TMP421 is not set +# CONFIG_SENSORS_TMP464 is not set +# CONFIG_SENSORS_TMP513 is not set +# CONFIG_SENSORS_TSC1641 is not set +# CONFIG_SENSORS_VIA_CPUTEMP is not set +# CONFIG_SENSORS_VIA686A is not set +# CONFIG_SENSORS_VT1211 is not set +# CONFIG_SENSORS_VT8231 is not set +# CONFIG_SENSORS_W83773G is not set +# CONFIG_SENSORS_W83781D is not set +# CONFIG_SENSORS_W83791D is not set +# CONFIG_SENSORS_W83792D is not set +# CONFIG_SENSORS_W83793 is not set +# CONFIG_SENSORS_W83795 is not set +# CONFIG_SENSORS_W83L785TS is not set +# CONFIG_SENSORS_W83L786NG is not set +# CONFIG_SENSORS_W83627HF is not set +# CONFIG_SENSORS_W83627EHF is not set +# CONFIG_SENSORS_XGENE is not set + +# +# ACPI drivers +# +# CONFIG_SENSORS_ACPI_POWER is not set +# CONFIG_SENSORS_ATK0110 is not set +# CONFIG_SENSORS_ASUS_WMI is not set +# CONFIG_SENSORS_HP_WMI is not set +CONFIG_THERMAL=y +CONFIG_THERMAL_NETLINK=y +CONFIG_THERMAL_STATISTICS=y +# CONFIG_THERMAL_DEBUGFS is not set +CONFIG_THERMAL_CORE_TESTING=m +CONFIG_THERMAL_EMERGENCY_POWEROFF_DELAY_MS=0 +CONFIG_THERMAL_HWMON=y +CONFIG_THERMAL_DEFAULT_GOV_STEP_WISE=y +# CONFIG_THERMAL_DEFAULT_GOV_FAIR_SHARE is not set +# CONFIG_THERMAL_DEFAULT_GOV_USER_SPACE is not set +# CONFIG_THERMAL_DEFAULT_GOV_BANG_BANG is not set +CONFIG_THERMAL_GOV_FAIR_SHARE=y +CONFIG_THERMAL_GOV_STEP_WISE=y +CONFIG_THERMAL_GOV_BANG_BANG=y +CONFIG_THERMAL_GOV_USER_SPACE=y +# CONFIG_THERMAL_GOV_POWER_ALLOCATOR is not set +CONFIG_DEVFREQ_THERMAL=y +CONFIG_PCIE_THERMAL=y +CONFIG_THERMAL_EMULATION=y + +# +# Intel thermal drivers +# +# CONFIG_INTEL_POWERCLAMP is not set +CONFIG_X86_THERMAL_VECTOR=y +# CONFIG_X86_PKG_TEMP_THERMAL is not set +# CONFIG_INTEL_SOC_DTS_THERMAL is not set + +# +# ACPI INT340X thermal drivers +# +# CONFIG_INT340X_THERMAL is not set +# end of ACPI INT340X thermal drivers + +# CONFIG_INTEL_PCH_THERMAL is not set +# CONFIG_INTEL_TCC_COOLING is not set +# CONFIG_INTEL_HFI_THERMAL is not set +# end of Intel thermal drivers + +CONFIG_WATCHDOG=y +# CONFIG_WATCHDOG_CORE is not set +# CONFIG_WATCHDOG_NOWAYOUT is not set +CONFIG_WATCHDOG_HANDLE_BOOT_ENABLED=y +CONFIG_WATCHDOG_OPEN_TIMEOUT=0 +# CONFIG_WATCHDOG_SYSFS is not set +# CONFIG_WATCHDOG_HRTIMER_PRETIMEOUT is not set + +# +# Watchdog Pretimeout Governors +# + +# +# Watchdog Device Drivers +# +# CONFIG_SOFT_WATCHDOG is not set +# CONFIG_WDAT_WDT is not set +# CONFIG_XILINX_WATCHDOG is not set +# CONFIG_ZIIRAVE_WATCHDOG is not set +# CONFIG_CADENCE_WATCHDOG is not set +# CONFIG_DW_WATCHDOG is not set +# CONFIG_MAX63XX_WATCHDOG is not set +# CONFIG_ACQUIRE_WDT is not set +# CONFIG_ADVANTECH_WDT is not set +# CONFIG_ADVANTECH_EC_WDT is not set +# CONFIG_ALIM1535_WDT is not set +# CONFIG_ALIM7101_WDT is not set +# CONFIG_EBC_C384_WDT is not set +# CONFIG_EXAR_WDT is not set +# CONFIG_F71808E_WDT is not set +# CONFIG_SP5100_TCO is not set +# CONFIG_SBC_FITPC2_WATCHDOG is not set +# CONFIG_EUROTECH_WDT is not set +# CONFIG_IB700_WDT is not set +# CONFIG_IBMASR is not set +# CONFIG_WAFER_WDT is not set +# CONFIG_I6300ESB_WDT is not set +# CONFIG_IE6XX_WDT is not set +# CONFIG_INTEL_OC_WATCHDOG is not set +# CONFIG_ITCO_WDT is not set +# CONFIG_IT8712F_WDT is not set +# CONFIG_IT87_WDT is not set +# CONFIG_HP_WATCHDOG is not set +# CONFIG_SC1200_WDT is not set +# CONFIG_PC87413_WDT is not set +# CONFIG_NV_TCO is not set +# CONFIG_60XX_WDT is not set +# CONFIG_SMSC_SCH311X_WDT is not set +# CONFIG_SMSC37B787_WDT is not set +# CONFIG_TQMX86_WDT is not set +# CONFIG_VIA_WDT is not set +# CONFIG_W83627HF_WDT is not set +# CONFIG_W83877F_WDT is not set +# CONFIG_W83977F_WDT is not set +# CONFIG_MACHZ_WDT is not set +# CONFIG_SBC_EPX_C3_WATCHDOG is not set +# CONFIG_NI903X_WDT is not set +# CONFIG_NIC7018_WDT is not set + +# +# PCI-based Watchdog Cards +# +# CONFIG_PCIPCWATCHDOG is not set +# CONFIG_WDTPCI is not set + +# +# USB-based Watchdog Cards +# +# CONFIG_USBPCWATCHDOG is not set +CONFIG_SSB_POSSIBLE=y +# CONFIG_SSB is not set +CONFIG_BCMA_POSSIBLE=y +# CONFIG_BCMA is not set + +# +# Multifunction device drivers +# +CONFIG_MFD_CORE=m +# CONFIG_MFD_AS3711 is not set +# CONFIG_MFD_SMPRO is not set +# CONFIG_PMIC_ADP5520 is not set +# CONFIG_MFD_BCM590XX is not set +# CONFIG_MFD_BD9571MWV is not set +# CONFIG_MFD_AXP20X_I2C is not set +# CONFIG_MFD_CGBC is not set +# CONFIG_MFD_CS40L50_I2C is not set +# CONFIG_MFD_CS42L43_I2C is not set +# CONFIG_MFD_MADERA is not set +# CONFIG_PMIC_DA903X is not set +# CONFIG_MFD_DA9052_I2C is not set +# CONFIG_MFD_DA9055 is not set +# CONFIG_MFD_DA9062 is not set +# CONFIG_MFD_DA9063 is not set +# CONFIG_MFD_DA9150 is not set +# CONFIG_MFD_DLN2 is not set +# CONFIG_MFD_MC13XXX_I2C is not set +# CONFIG_MFD_MP2629 is not set +# CONFIG_MFD_INTEL_QUARK_I2C_GPIO is not set +# CONFIG_LPC_ICH is not set +# CONFIG_LPC_SCH is not set +# CONFIG_MFD_INTEL_LPSS_ACPI is not set +# CONFIG_MFD_INTEL_LPSS_PCI is not set +# CONFIG_MFD_INTEL_PMC_BXT is not set +# CONFIG_MFD_IQS62X is not set +# CONFIG_MFD_JANZ_CMODIO is not set +# CONFIG_MFD_KEMPLD is not set +# CONFIG_MFD_88PM800 is not set +# CONFIG_MFD_88PM805 is not set +# CONFIG_MFD_88PM860X is not set +# CONFIG_MFD_MAX5970 is not set +# CONFIG_MFD_MAX14577 is not set +# CONFIG_MFD_MAX77541 is not set +# CONFIG_MFD_MAX77693 is not set +# CONFIG_MFD_MAX77705 is not set +# CONFIG_MFD_MAX77843 is not set +# CONFIG_MFD_MAX8907 is not set +# CONFIG_MFD_MAX8925 is not set +# CONFIG_MFD_MAX8997 is not set +# CONFIG_MFD_MAX8998 is not set +# CONFIG_MFD_MT6360 is not set +# CONFIG_MFD_MT6370 is not set +# CONFIG_MFD_MT6397 is not set +# CONFIG_MFD_MENF21BMC is not set +# CONFIG_MFD_NCT6694 is not set +# CONFIG_MFD_VIPERBOARD is not set +# CONFIG_MFD_RETU is not set +# CONFIG_MFD_SY7636A is not set +# CONFIG_MFD_RDC321X is not set +# CONFIG_MFD_RT4831 is not set +# CONFIG_MFD_RT5033 is not set +# CONFIG_MFD_RT5120 is not set +# CONFIG_MFD_RC5T583 is not set +# CONFIG_MFD_SI476X_CORE is not set +# CONFIG_MFD_SM501 is not set +# CONFIG_MFD_SKY81452 is not set +# CONFIG_MFD_SYSCON is not set +# CONFIG_MFD_LP3943 is not set +# CONFIG_MFD_LP8788 is not set +# CONFIG_MFD_TI_LMU is not set +# CONFIG_MFD_BQ257XX is not set +# CONFIG_MFD_PALMAS is not set +# CONFIG_TPS6105X is not set +# CONFIG_TPS6507X is not set +# CONFIG_MFD_TPS65086 is not set +# CONFIG_MFD_TPS65090 is not set +# CONFIG_MFD_TI_LP873X is not set +# CONFIG_MFD_TPS6586X is not set +# CONFIG_MFD_TPS65912_I2C is not set +# CONFIG_MFD_TPS6594_I2C is not set +# CONFIG_TWL4030_CORE is not set +# CONFIG_TWL6040_CORE is not set +# CONFIG_MFD_LM3533 is not set +# CONFIG_MFD_TQMX86 is not set +# CONFIG_MFD_VX855 is not set +# CONFIG_MFD_ARIZONA_I2C is not set +# CONFIG_MFD_WM8400 is not set +# CONFIG_MFD_WM831X_I2C is not set +# CONFIG_MFD_WM8350_I2C is not set +# CONFIG_MFD_WM8994 is not set +# CONFIG_MFD_ATC260X_I2C is not set +# CONFIG_MFD_UPBOARD_FPGA is not set +# CONFIG_MFD_MAX7360 is not set +# end of Multifunction device drivers + +# CONFIG_REGULATOR is not set +# CONFIG_RC_CORE is not set +CONFIG_CEC_CORE=m +CONFIG_CEC_NOTIFIER=y + +# +# CEC support +# +# CONFIG_MEDIA_CEC_SUPPORT is not set +# end of CEC support + +# CONFIG_MEDIA_SUPPORT is not set + +# +# Graphics support +# +CONFIG_APERTURE_HELPERS=y +CONFIG_SCREEN_INFO=y +CONFIG_VIDEO=y +# CONFIG_AUXDISPLAY is not set +CONFIG_AGP=y +CONFIG_AGP_AMD64=y +# CONFIG_AGP_INTEL is not set +# CONFIG_AGP_SIS is not set +# CONFIG_AGP_VIA is not set +# CONFIG_VGA_SWITCHEROO is not set +CONFIG_DRM=y + +# +# DRM debugging options +# +# CONFIG_DRM_WERROR is not set +# CONFIG_DRM_DEBUG_MM is not set +# end of DRM debugging options + +CONFIG_DRM_KMS_HELPER=y +CONFIG_DRM_DRAW=y +CONFIG_DRM_PANIC=y +CONFIG_DRM_PANIC_FOREGROUND_COLOR=0xffffff +CONFIG_DRM_PANIC_BACKGROUND_COLOR=0x5e2750 +# CONFIG_DRM_PANIC_DEBUG is not set +CONFIG_DRM_PANIC_SCREEN="user" +# CONFIG_DRM_DEBUG_DP_MST_TOPOLOGY_REFS is not set +# CONFIG_DRM_DEBUG_MODESET_LOCK is not set +CONFIG_DRM_CLIENT=y +CONFIG_DRM_CLIENT_LIB=y +CONFIG_DRM_CLIENT_SELECTION=y +CONFIG_DRM_CLIENT_SETUP=y + +# +# Supported DRM clients +# +CONFIG_DRM_FBDEV_EMULATION=y +CONFIG_DRM_FBDEV_OVERALLOC=100 +# CONFIG_DRM_FBDEV_LEAK_PHYS_SMEM is not set +CONFIG_DRM_CLIENT_LOG=y +CONFIG_DRM_CLIENT_DEFAULT_FBDEV=y +# CONFIG_DRM_CLIENT_DEFAULT_LOG is not set +CONFIG_DRM_CLIENT_DEFAULT="fbdev" +# end of Supported DRM clients + +CONFIG_DRM_LOAD_EDID_FIRMWARE=y +CONFIG_DRM_DISPLAY_HELPER=m +# CONFIG_DRM_DISPLAY_DP_AUX_CEC is not set +# CONFIG_DRM_DISPLAY_DP_AUX_CHARDEV is not set +CONFIG_DRM_DISPLAY_DP_HELPER=y +CONFIG_DRM_DISPLAY_DSC_HELPER=y +CONFIG_DRM_DISPLAY_HDCP_HELPER=y +CONFIG_DRM_DISPLAY_HDMI_CEC_NOTIFIER_HELPER=y +CONFIG_DRM_DISPLAY_HDMI_HELPER=y +CONFIG_DRM_TTM=m +CONFIG_DRM_EXEC=m +CONFIG_DRM_BUDDY=m +CONFIG_DRM_TTM_HELPER=m +CONFIG_DRM_GEM_SHMEM_HELPER=y +CONFIG_DRM_SUBALLOC_HELPER=m +CONFIG_DRM_SCHED=m + +# +# Drivers for system framebuffers +# +CONFIG_DRM_SYSFB_HELPER=y +CONFIG_DRM_SIMPLEDRM=y +# end of Drivers for system framebuffers + +# +# ARM devices +# +# end of ARM devices + +# CONFIG_DRM_RADEON is not set +CONFIG_DRM_AMDGPU=m +# CONFIG_DRM_AMDGPU_SI is not set +# CONFIG_DRM_AMDGPU_CIK is not set +CONFIG_DRM_AMDGPU_USERPTR=y +# CONFIG_DRM_AMD_ISP is not set +# CONFIG_DRM_AMDGPU_WERROR is not set + +# +# ACP (Audio CoProcessor) Configuration +# +CONFIG_DRM_AMD_ACP=y +# end of ACP (Audio CoProcessor) Configuration + +# +# Display Engine Configuration +# +CONFIG_DRM_AMD_DC=y +CONFIG_DRM_AMD_DC_FP=y +# CONFIG_DRM_AMD_SECURE_DISPLAY is not set +# end of Display Engine Configuration + +CONFIG_HSA_AMD=y +CONFIG_HSA_AMD_SVM=y +# CONFIG_DRM_NOUVEAU is not set +# CONFIG_DRM_I915 is not set +# CONFIG_DRM_XE is not set +# CONFIG_DRM_VGEM is not set +# CONFIG_DRM_VKMS is not set +# CONFIG_DRM_VMWGFX is not set +# CONFIG_DRM_GMA500 is not set +# CONFIG_DRM_UDL is not set +# CONFIG_DRM_AST is not set +# CONFIG_DRM_MGAG200 is not set +# CONFIG_DRM_QXL is not set +CONFIG_DRM_PANEL=y + +# +# Display Panels +# +# end of Display Panels + +CONFIG_DRM_BRIDGE=y +CONFIG_DRM_PANEL_BRIDGE=y + +# +# Display Interface Bridges +# +# CONFIG_DRM_I2C_NXP_TDA998X is not set +# CONFIG_DRM_ANALOGIX_ANX78XX is not set +# end of Display Interface Bridges + +# CONFIG_DRM_ETNAVIV is not set +# CONFIG_DRM_HISI_HIBMC is not set +# CONFIG_DRM_APPLETBDRM is not set +# CONFIG_DRM_BOCHS is not set +# CONFIG_DRM_CIRRUS_QEMU is not set +# CONFIG_DRM_GM12U320 is not set +# CONFIG_DRM_VBOXVIDEO is not set +# CONFIG_DRM_GUD is not set +# CONFIG_DRM_ST7571_I2C is not set +# CONFIG_DRM_SSD130X is not set +CONFIG_DRM_PANEL_BACKLIGHT_QUIRKS=m +CONFIG_DRM_PANEL_ORIENTATION_QUIRKS=y + +# +# Frame buffer Devices +# +CONFIG_FB=y +# CONFIG_FB_CIRRUS is not set +# CONFIG_FB_PM2 is not set +# CONFIG_FB_CYBER2000 is not set +# CONFIG_FB_ARC is not set +# CONFIG_FB_ASILIANT is not set +# CONFIG_FB_IMSTT is not set +# CONFIG_FB_VGA16 is not set +CONFIG_FB_UVESA=m +CONFIG_FB_VESA=y +# CONFIG_FB_EFI is not set +# CONFIG_FB_N411 is not set +# CONFIG_FB_HGA is not set +# CONFIG_FB_OPENCORES is not set +# CONFIG_FB_S1D13XXX is not set +# CONFIG_FB_NVIDIA is not set +# CONFIG_FB_RIVA is not set +# CONFIG_FB_I740 is not set +# CONFIG_FB_RADEON is not set +# CONFIG_FB_ATY128 is not set +# CONFIG_FB_ATY is not set +# CONFIG_FB_SAVAGE is not set +# CONFIG_FB_SIS is not set +# CONFIG_FB_NEOMAGIC is not set +# CONFIG_FB_KYRO is not set +# CONFIG_FB_3DFX is not set +# CONFIG_FB_VOODOO1 is not set +# CONFIG_FB_TRIDENT is not set +# CONFIG_FB_PM3 is not set +# CONFIG_FB_CARMINE is not set +# CONFIG_FB_SMSCUFX is not set +# CONFIG_FB_UDL is not set +# CONFIG_FB_IBM_GXT4500 is not set +# CONFIG_FB_VIRTUAL is not set +# CONFIG_FB_METRONOME is not set +# CONFIG_FB_MB862XX is not set +# CONFIG_FB_SM712 is not set +CONFIG_FB_CORE=y +CONFIG_FB_NOTIFY=y +CONFIG_FB_DEVICE=y +CONFIG_FB_CFB_FILLRECT=y +CONFIG_FB_CFB_COPYAREA=y +CONFIG_FB_CFB_IMAGEBLIT=y +CONFIG_FB_SYS_FILLRECT=y +CONFIG_FB_SYS_COPYAREA=y +CONFIG_FB_SYS_IMAGEBLIT=y +# CONFIG_FB_FOREIGN_ENDIAN is not set +CONFIG_FB_SYSMEM_FOPS=y +CONFIG_FB_DEFERRED_IO=y +CONFIG_FB_IOMEM_FOPS=y +CONFIG_FB_IOMEM_HELPERS=y +CONFIG_FB_SYSMEM_HELPERS=y +CONFIG_FB_SYSMEM_HELPERS_DEFERRED=y +CONFIG_FB_MODE_HELPERS=y +# CONFIG_FB_TILEBLITTING is not set +# end of Frame buffer Devices + +# +# Backlight & LCD device support +# +# CONFIG_LCD_CLASS_DEVICE is not set +CONFIG_BACKLIGHT_CLASS_DEVICE=y +# CONFIG_BACKLIGHT_AW99706 is not set +# CONFIG_BACKLIGHT_KTZ8866 is not set +# CONFIG_BACKLIGHT_APPLE is not set +# CONFIG_BACKLIGHT_QCOM_WLED is not set +# CONFIG_BACKLIGHT_SAHARA is not set +# CONFIG_BACKLIGHT_ADP8860 is not set +# CONFIG_BACKLIGHT_ADP8870 is not set +# CONFIG_BACKLIGHT_LM3509 is not set +# CONFIG_BACKLIGHT_LM3639 is not set +# CONFIG_BACKLIGHT_LV5207LP is not set +# CONFIG_BACKLIGHT_BD6107 is not set +# CONFIG_BACKLIGHT_ARCXCNN is not set +# end of Backlight & LCD device support + +CONFIG_HDMI=y +CONFIG_FIRMWARE_EDID=y + +# +# Console display driver support +# +CONFIG_VGA_CONSOLE=y +CONFIG_DUMMY_CONSOLE=y +CONFIG_DUMMY_CONSOLE_COLUMNS=80 +CONFIG_DUMMY_CONSOLE_ROWS=25 +CONFIG_FRAMEBUFFER_CONSOLE=y +# CONFIG_FRAMEBUFFER_CONSOLE_LEGACY_ACCELERATION is not set +CONFIG_FRAMEBUFFER_CONSOLE_DETECT_PRIMARY=y +# CONFIG_FRAMEBUFFER_CONSOLE_ROTATION is not set +# CONFIG_FRAMEBUFFER_CONSOLE_DEFERRED_TAKEOVER is not set +# end of Console display driver support + +# CONFIG_LOGO is not set +# CONFIG_TRACE_GPU_MEM is not set +# end of Graphics support + +# CONFIG_DRM_ACCEL is not set +CONFIG_SOUND=m +CONFIG_SND=m +CONFIG_SND_TIMER=m +CONFIG_SND_PCM=m +CONFIG_SND_PCM_ELD=y +CONFIG_SND_HWDEP=m +CONFIG_SND_RAWMIDI=m +CONFIG_SND_UMP=m +# CONFIG_SND_UMP_LEGACY_RAWMIDI is not set +CONFIG_SND_JACK=y +CONFIG_SND_JACK_INPUT_DEV=y +# CONFIG_SND_OSSEMUL is not set +CONFIG_SND_PCM_TIMER=y +# CONFIG_SND_HRTIMER is not set +CONFIG_SND_DYNAMIC_MINORS=y +CONFIG_SND_MAX_CARDS=32 +# CONFIG_SND_SUPPORT_OLD_API is not set +CONFIG_SND_PROC_FS=y +CONFIG_SND_VERBOSE_PROCFS=y +CONFIG_SND_CTL_FAST_LOOKUP=y +# CONFIG_SND_DEBUG is not set +# CONFIG_SND_CTL_INPUT_VALIDATION is not set +# CONFIG_SND_UTIMER is not set +CONFIG_SND_VMASTER=y +CONFIG_SND_DMA_SGBUF=y +# CONFIG_SND_SEQUENCER is not set +CONFIG_SND_DRIVERS=y +# CONFIG_SND_PCSP is not set +# CONFIG_SND_DUMMY is not set +# CONFIG_SND_ALOOP is not set +# CONFIG_SND_PCMTEST is not set +# CONFIG_SND_MTPAV is not set +# CONFIG_SND_SERIAL_U16550 is not set +# CONFIG_SND_MPU401 is not set +CONFIG_SND_PCI=y +# CONFIG_SND_AD1889 is not set +# CONFIG_SND_ALS300 is not set +# CONFIG_SND_ALS4000 is not set +# CONFIG_SND_ALI5451 is not set +# CONFIG_SND_ASIHPI is not set +# CONFIG_SND_ATIIXP is not set +# CONFIG_SND_ATIIXP_MODEM is not set +# CONFIG_SND_AU8810 is not set +# CONFIG_SND_AU8820 is not set +# CONFIG_SND_AU8830 is not set +# CONFIG_SND_AW2 is not set +# CONFIG_SND_AZT3328 is not set +# CONFIG_SND_BT87X is not set +# CONFIG_SND_CA0106 is not set +# CONFIG_SND_CMIPCI is not set +# CONFIG_SND_OXYGEN is not set +# CONFIG_SND_CS4281 is not set +# CONFIG_SND_CS46XX is not set +# CONFIG_SND_CTXFI is not set +# CONFIG_SND_DARLA20 is not set +# CONFIG_SND_GINA20 is not set +# CONFIG_SND_LAYLA20 is not set +# CONFIG_SND_DARLA24 is not set +# CONFIG_SND_GINA24 is not set +# CONFIG_SND_LAYLA24 is not set +# CONFIG_SND_MONA is not set +# CONFIG_SND_MIA is not set +# CONFIG_SND_ECHO3G is not set +# CONFIG_SND_INDIGO is not set +# CONFIG_SND_INDIGOIO is not set +# CONFIG_SND_INDIGODJ is not set +# CONFIG_SND_INDIGOIOX is not set +# CONFIG_SND_INDIGODJX is not set +# CONFIG_SND_EMU10K1 is not set +# CONFIG_SND_EMU10K1X is not set +# CONFIG_SND_ENS1370 is not set +# CONFIG_SND_ENS1371 is not set +# CONFIG_SND_ES1938 is not set +# CONFIG_SND_ES1968 is not set +# CONFIG_SND_FM801 is not set +# CONFIG_SND_HDSP is not set +# CONFIG_SND_HDSPM is not set +# CONFIG_SND_ICE1712 is not set +# CONFIG_SND_ICE1724 is not set +# CONFIG_SND_INTEL8X0 is not set +# CONFIG_SND_INTEL8X0M is not set +# CONFIG_SND_KORG1212 is not set +# CONFIG_SND_LOLA is not set +# CONFIG_SND_LX6464ES is not set +# CONFIG_SND_MAESTRO3 is not set +# CONFIG_SND_MIXART is not set +# CONFIG_SND_NM256 is not set +# CONFIG_SND_PCXHR is not set +# CONFIG_SND_RIPTIDE is not set +# CONFIG_SND_RME32 is not set +# CONFIG_SND_RME96 is not set +# CONFIG_SND_RME9652 is not set +# CONFIG_SND_SE6X is not set +# CONFIG_SND_SONICVIBES is not set +# CONFIG_SND_TRIDENT is not set +# CONFIG_SND_VIA82XX is not set +# CONFIG_SND_VIA82XX_MODEM is not set +# CONFIG_SND_VIRTUOSO is not set +# CONFIG_SND_VX222 is not set +# CONFIG_SND_YMFPCI is not set + +# +# HD-Audio +# +CONFIG_SND_HDA=m +CONFIG_SND_HDA_HWDEP=y +CONFIG_SND_HDA_RECONFIG=y +# CONFIG_SND_HDA_INPUT_BEEP is not set +# CONFIG_SND_HDA_PATCH_LOADER is not set +CONFIG_SND_HDA_POWER_SAVE_DEFAULT=0 +# CONFIG_SND_HDA_CTL_DEV_ID is not set +CONFIG_SND_HDA_PREALLOC_SIZE=0 +CONFIG_SND_HDA_INTEL=m +# CONFIG_SND_HDA_ACPI is not set +# CONFIG_SND_HDA_CODEC_ANALOG is not set +# CONFIG_SND_HDA_CODEC_SIGMATEL is not set +# CONFIG_SND_HDA_CODEC_VIA is not set +# CONFIG_SND_HDA_CODEC_CONEXANT is not set +# CONFIG_SND_HDA_CODEC_SENARYTECH is not set +# CONFIG_SND_HDA_CODEC_CA0110 is not set +# CONFIG_SND_HDA_CODEC_CA0132 is not set +# CONFIG_SND_HDA_CODEC_CMEDIA is not set +# CONFIG_SND_HDA_CODEC_CM9825 is not set +# CONFIG_SND_HDA_CODEC_SI3054 is not set +# CONFIG_SND_HDA_GENERIC is not set +# CONFIG_SND_HDA_CODEC_REALTEK is not set +# CONFIG_SND_HDA_CODEC_CIRRUS is not set +CONFIG_SND_HDA_CODEC_HDMI=m +CONFIG_SND_HDA_CODEC_HDMI_GENERIC=m +# CONFIG_SND_HDA_CODEC_HDMI_SIMPLE is not set +# CONFIG_SND_HDA_CODEC_HDMI_INTEL is not set +CONFIG_SND_HDA_CODEC_HDMI_ATI=m +# CONFIG_SND_HDA_CODEC_HDMI_NVIDIA is not set +# CONFIG_SND_HDA_CODEC_HDMI_NVIDIA_MCP is not set +# CONFIG_SND_HDA_CODEC_HDMI_TEGRA is not set +CONFIG_SND_HDA_CORE=m +CONFIG_SND_HDA_COMPONENT=y +CONFIG_SND_INTEL_NHLT=y +CONFIG_SND_INTEL_DSP_CONFIG=m +CONFIG_SND_INTEL_SOUNDWIRE_ACPI=m +# end of HD-Audio + +CONFIG_SND_USB=y +CONFIG_SND_USB_AUDIO=m +CONFIG_SND_USB_AUDIO_MIDI_V2=y +# CONFIG_SND_USB_UA101 is not set +# CONFIG_SND_USB_USX2Y is not set +# CONFIG_SND_USB_CAIAQ is not set +# CONFIG_SND_USB_US122L is not set +# CONFIG_SND_USB_US144MKII is not set +# CONFIG_SND_USB_6FIRE is not set +# CONFIG_SND_USB_HIFACE is not set +# CONFIG_SND_BCD2000 is not set +# CONFIG_SND_USB_POD is not set +# CONFIG_SND_USB_PODHD is not set +# CONFIG_SND_USB_TONEPORT is not set +# CONFIG_SND_USB_VARIAX is not set +# CONFIG_SND_SOC is not set +CONFIG_SND_X86=y +CONFIG_HID_SUPPORT=y +CONFIG_HID=y +CONFIG_HID_BATTERY_STRENGTH=y +CONFIG_HIDRAW=y +CONFIG_UHID=m +CONFIG_HID_GENERIC=m +# CONFIG_HID_HAPTIC is not set + +# +# Special HID drivers +# +CONFIG_HID_A4TECH=m +# CONFIG_HID_ACCUTOUCH is not set +# CONFIG_HID_ACRUX is not set +# CONFIG_HID_APPLE is not set +# CONFIG_HID_APPLEIR is not set +# CONFIG_HID_APPLETB_BL is not set +# CONFIG_HID_APPLETB_KBD is not set +# CONFIG_HID_ASUS is not set +# CONFIG_HID_AUREAL is not set +CONFIG_HID_BELKIN=m +CONFIG_HID_BETOP_FF=m +# CONFIG_HID_BIGBEN_FF is not set +CONFIG_HID_CHERRY=m +# CONFIG_HID_CHICONY is not set +# CONFIG_HID_CORSAIR is not set +# CONFIG_HID_COUGAR is not set +# CONFIG_HID_MACALLY is not set +CONFIG_HID_PRODIKEYS=m +# CONFIG_HID_CMEDIA is not set +# CONFIG_HID_CREATIVE_SB0540 is not set +CONFIG_HID_CYPRESS=m +# CONFIG_HID_DRAGONRISE is not set +# CONFIG_HID_EMS_FF is not set +# CONFIG_HID_ELAN is not set +CONFIG_HID_ELECOM=m +# CONFIG_HID_ELO is not set +CONFIG_HID_EVISION=m +CONFIG_HID_EZKEY=m +# CONFIG_HID_FT260 is not set +# CONFIG_HID_GEMBIRD is not set +# CONFIG_HID_GFRM is not set +CONFIG_HID_GLORIOUS=m +# CONFIG_HID_HOLTEK is not set +CONFIG_HID_VIVALDI_COMMON=m +# CONFIG_HID_GOOGLE_STADIA_FF is not set +CONFIG_HID_VIVALDI=m +# CONFIG_HID_GT683R is not set +CONFIG_HID_KEYTOUCH=m +# CONFIG_HID_KYE is not set +# CONFIG_HID_KYSONA is not set +# CONFIG_HID_UCLOGIC is not set +# CONFIG_HID_WALTOP is not set +# CONFIG_HID_VIEWSONIC is not set +# CONFIG_HID_VRC2 is not set +# CONFIG_HID_XIAOMI is not set +# CONFIG_HID_GYRATION is not set +# CONFIG_HID_ICADE is not set +# CONFIG_HID_ITE is not set +CONFIG_HID_JABRA=m +# CONFIG_HID_TWINHAN is not set +# CONFIG_HID_KENSINGTON is not set +# CONFIG_HID_LCPOWER is not set +CONFIG_HID_LED=m +# CONFIG_HID_LENOVO is not set +# CONFIG_HID_LETSKETCH is not set +CONFIG_HID_LOGITECH=m +CONFIG_HID_LOGITECH_DJ=m +CONFIG_HID_LOGITECH_HIDPP=m +CONFIG_LOGITECH_FF=y +CONFIG_LOGIRUMBLEPAD2_FF=y +CONFIG_LOGIG940_FF=y +CONFIG_LOGIWHEELS_FF=y +# CONFIG_HID_MAGICMOUSE is not set +CONFIG_HID_MALTRON=m +# CONFIG_HID_MAYFLASH is not set +# CONFIG_HID_MEGAWORLD_FF is not set +CONFIG_HID_REDRAGON=m +# CONFIG_HID_MICROSOFT is not set +CONFIG_HID_MONTEREY=m +# CONFIG_HID_MULTITOUCH is not set +# CONFIG_HID_NINTENDO is not set +CONFIG_HID_NTI=m +# CONFIG_HID_NTRIG is not set +# CONFIG_HID_NVIDIA_SHIELD is not set +CONFIG_HID_ORTEK=m +# CONFIG_HID_PANTHERLORD is not set +# CONFIG_HID_PENMOUNT is not set +# CONFIG_HID_PETALYNX is not set +# CONFIG_HID_PICOLCD is not set +# CONFIG_HID_PLANTRONICS is not set +CONFIG_HID_PLAYSTATION=m +CONFIG_PLAYSTATION_FF=y +CONFIG_HID_PXRC=m +# CONFIG_HID_RAZER is not set +# CONFIG_HID_PRIMAX is not set +# CONFIG_HID_RETRODE is not set +# CONFIG_HID_ROCCAT is not set +# CONFIG_HID_SAITEK is not set +# CONFIG_HID_SAMSUNG is not set +CONFIG_HID_SEMITEK=m +CONFIG_HID_SIGMAMICRO=m +CONFIG_HID_SONY=m +CONFIG_HID_SPEEDLINK=m +# CONFIG_HID_STEAM is not set +# CONFIG_HID_STEELSERIES is not set +# CONFIG_HID_SUNPLUS is not set +CONFIG_HID_RMI=m +# CONFIG_HID_GREENASIA is not set +# CONFIG_HID_SMARTJOYPLUS is not set +# CONFIG_HID_TIVO is not set +# CONFIG_HID_TOPSEED is not set +CONFIG_HID_TOPRE=m +# CONFIG_HID_THINGM is not set +# CONFIG_HID_THRUSTMASTER is not set +# CONFIG_HID_UDRAW_PS3 is not set +# CONFIG_HID_U2FZERO is not set +# CONFIG_HID_UNIVERSAL_PIDFF is not set +# CONFIG_HID_WACOM is not set +# CONFIG_HID_WIIMOTE is not set +# CONFIG_HID_WINWING is not set +# CONFIG_HID_XINMO is not set +# CONFIG_HID_ZEROPLUS is not set +# CONFIG_HID_ZYDACRON is not set +CONFIG_HID_SENSOR_HUB=m +CONFIG_HID_SENSOR_CUSTOM_SENSOR=m +CONFIG_HID_ALPS=m +# CONFIG_HID_MCP2221 is not set +# end of Special HID drivers + +# +# HID-BPF support +# +# end of HID-BPF support + +# CONFIG_I2C_HID is not set + +# +# Intel ISH HID support +# +# CONFIG_INTEL_ISH_HID is not set +# end of Intel ISH HID support + +# +# AMD SFH HID Support +# +# CONFIG_AMD_SFH_HID is not set +# end of AMD SFH HID Support + +# +# Intel THC HID Support +# +# CONFIG_INTEL_THC_HID is not set +# end of Intel THC HID Support + +# +# USB HID support +# +CONFIG_USB_HID=y +CONFIG_HID_PID=y +CONFIG_USB_HIDDEV=y + +# +# USB HID Boot Protocol drivers +# +CONFIG_USB_KBD=m +CONFIG_USB_MOUSE=m +# end of USB HID Boot Protocol drivers +# end of USB HID support + +CONFIG_USB_OHCI_LITTLE_ENDIAN=y +CONFIG_USB_SUPPORT=y +CONFIG_USB_COMMON=y +# CONFIG_USB_LED_TRIG is not set +# CONFIG_USB_ULPI_BUS is not set +CONFIG_USB_ARCH_HAS_HCD=y +CONFIG_USB=y +CONFIG_USB_PCI=y +CONFIG_USB_PCI_AMD=y +CONFIG_USB_ANNOUNCE_NEW_DEVICES=y + +# +# Miscellaneous USB options +# +CONFIG_USB_DEFAULT_PERSIST=y +# CONFIG_USB_FEW_INIT_RETRIES is not set +CONFIG_USB_DYNAMIC_MINORS=y +# CONFIG_USB_OTG is not set +# CONFIG_USB_OTG_PRODUCTLIST is not set +# CONFIG_USB_OTG_DISABLE_EXTERNAL_HUB is not set +# CONFIG_USB_LEDS_TRIGGER_USBPORT is not set +CONFIG_USB_AUTOSUSPEND_DELAY=2 +CONFIG_USB_DEFAULT_AUTHORIZATION_MODE=1 +CONFIG_USB_MON=y + +# +# USB Host Controller Drivers +# +# CONFIG_USB_C67X00_HCD is not set +CONFIG_USB_XHCI_HCD=y +# CONFIG_USB_XHCI_DBGCAP is not set +CONFIG_USB_XHCI_PCI=y +# CONFIG_USB_XHCI_PCI_RENESAS is not set +# CONFIG_USB_XHCI_PLATFORM is not set +# CONFIG_USB_XHCI_SIDEBAND is not set +CONFIG_USB_EHCI_HCD=y +# CONFIG_USB_EHCI_ROOT_HUB_TT is not set +CONFIG_USB_EHCI_TT_NEWSCHED=y +CONFIG_USB_EHCI_PCI=y +# CONFIG_USB_EHCI_FSL is not set +# CONFIG_USB_EHCI_HCD_PLATFORM is not set +# CONFIG_USB_OXU210HP_HCD is not set +# CONFIG_USB_ISP116X_HCD is not set +# CONFIG_USB_OHCI_HCD is not set +# CONFIG_USB_UHCI_HCD is not set +# CONFIG_USB_SL811_HCD is not set +# CONFIG_USB_R8A66597_HCD is not set +# CONFIG_USB_HCD_TEST_MODE is not set + +# +# USB Device Class drivers +# +CONFIG_USB_ACM=m +# CONFIG_USB_PRINTER is not set +CONFIG_USB_WDM=m +# CONFIG_USB_TMC is not set + +# +# NOTE: USB_STORAGE depends on SCSI but BLK_DEV_SD may also be needed; see USB_STORAGE Help for more info +# +CONFIG_USB_STORAGE=y +# CONFIG_USB_STORAGE_DEBUG is not set +# CONFIG_USB_STORAGE_REALTEK is not set +# CONFIG_USB_STORAGE_DATAFAB is not set +# CONFIG_USB_STORAGE_FREECOM is not set +# CONFIG_USB_STORAGE_ISD200 is not set +# CONFIG_USB_STORAGE_USBAT is not set +# CONFIG_USB_STORAGE_SDDR09 is not set +# CONFIG_USB_STORAGE_SDDR55 is not set +# CONFIG_USB_STORAGE_JUMPSHOT is not set +# CONFIG_USB_STORAGE_ALAUDA is not set +# CONFIG_USB_STORAGE_ONETOUCH is not set +# CONFIG_USB_STORAGE_KARMA is not set +# CONFIG_USB_STORAGE_CYPRESS_ATACB is not set +# CONFIG_USB_STORAGE_ENE_UB6250 is not set +CONFIG_USB_UAS=y + +# +# USB Imaging devices +# +# CONFIG_USB_MDC800 is not set +# CONFIG_USB_MICROTEK is not set +# CONFIG_USBIP_CORE is not set + +# +# USB dual-mode controller drivers +# +# CONFIG_USB_CDNS_SUPPORT is not set +# CONFIG_USB_MUSB_HDRC is not set +# CONFIG_USB_DWC3 is not set +# CONFIG_USB_DWC2 is not set +# CONFIG_USB_CHIPIDEA is not set +# CONFIG_USB_ISP1760 is not set + +# +# USB port drivers +# +# CONFIG_USB_SERIAL is not set + +# +# USB Miscellaneous drivers +# +# CONFIG_USB_EMI62 is not set +# CONFIG_USB_EMI26 is not set +# CONFIG_USB_ADUTUX is not set +# CONFIG_USB_SEVSEG is not set +# CONFIG_USB_LEGOTOWER is not set +# CONFIG_USB_LCD is not set +# CONFIG_USB_CYPRESS_CY7C63 is not set +# CONFIG_USB_CYTHERM is not set +# CONFIG_USB_IDMOUSE is not set +# CONFIG_USB_APPLEDISPLAY is not set +# CONFIG_APPLE_MFI_FASTCHARGE is not set +# CONFIG_USB_LJCA is not set +# CONFIG_USB_USBIO is not set +# CONFIG_USB_SISUSBVGA is not set +# CONFIG_USB_LD is not set +# CONFIG_USB_TRANCEVIBRATOR is not set +# CONFIG_USB_IOWARRIOR is not set +# CONFIG_USB_TEST is not set +# CONFIG_USB_EHSET_TEST_FIXTURE is not set +# CONFIG_USB_ISIGHTFW is not set +# CONFIG_USB_YUREX is not set +# CONFIG_USB_EZUSB_FX2 is not set +# CONFIG_USB_HUB_USB251XB is not set +# CONFIG_USB_HSIC_USB3503 is not set +# CONFIG_USB_HSIC_USB4604 is not set +# CONFIG_USB_LINK_LAYER_TEST is not set +# CONFIG_USB_CHAOSKEY is not set + +# +# USB Physical Layer drivers +# +# CONFIG_NOP_USB_XCEIV is not set +# CONFIG_USB_ISP1301 is not set +# end of USB Physical Layer drivers + +# CONFIG_USB_GADGET is not set +# CONFIG_TYPEC is not set +# CONFIG_USB_ROLE_SWITCH is not set +# CONFIG_MMC is not set +# CONFIG_SCSI_UFSHCD is not set +# CONFIG_MEMSTICK is not set +CONFIG_NEW_LEDS=y +CONFIG_LEDS_CLASS=y +# CONFIG_LEDS_CLASS_FLASH is not set +CONFIG_LEDS_CLASS_MULTICOLOR=m +# CONFIG_LEDS_BRIGHTNESS_HW_CHANGED is not set + +# +# LED drivers +# +# CONFIG_LEDS_AW200XX is not set +# CONFIG_LEDS_LM3530 is not set +# CONFIG_LEDS_LM3532 is not set +# CONFIG_LEDS_LM3642 is not set +# CONFIG_LEDS_PCA9532 is not set +# CONFIG_LEDS_LP3944 is not set +# CONFIG_LEDS_PCA955X is not set +# CONFIG_LEDS_PCA963X is not set +# CONFIG_LEDS_PCA995X is not set +# CONFIG_LEDS_BD2606MVV is not set +# CONFIG_LEDS_BD2802 is not set +# CONFIG_LEDS_TCA6507 is not set +# CONFIG_LEDS_TLC591XX is not set +# CONFIG_LEDS_LM355x is not set +# CONFIG_LEDS_IS31FL319X is not set + +# +# LED driver for blink(1) USB RGB LED is under Special HID drivers (HID_THINGM) +# +# CONFIG_LEDS_BLINKM is not set +# CONFIG_LEDS_MLXREG is not set +# CONFIG_LEDS_USER is not set +# CONFIG_LEDS_NIC78BX is not set + +# +# Flash and Torch LED drivers +# + +# +# RGB LED drivers +# +# CONFIG_LEDS_KTD202X is not set + +# +# LED Triggers +# +CONFIG_LEDS_TRIGGERS=y +# CONFIG_LEDS_TRIGGER_TIMER is not set +# CONFIG_LEDS_TRIGGER_ONESHOT is not set +# CONFIG_LEDS_TRIGGER_HEARTBEAT is not set +# CONFIG_LEDS_TRIGGER_BACKLIGHT is not set +# CONFIG_LEDS_TRIGGER_CPU is not set +# CONFIG_LEDS_TRIGGER_ACTIVITY is not set +# CONFIG_LEDS_TRIGGER_DEFAULT_ON is not set + +# +# iptables trigger is under Netfilter config (LED target) +# +# CONFIG_LEDS_TRIGGER_TRANSIENT is not set +# CONFIG_LEDS_TRIGGER_CAMERA is not set +# CONFIG_LEDS_TRIGGER_PANIC is not set +# CONFIG_LEDS_TRIGGER_NETDEV is not set +# CONFIG_LEDS_TRIGGER_PATTERN is not set +# CONFIG_LEDS_TRIGGER_TTY is not set +# CONFIG_LEDS_TRIGGER_INPUT_EVENTS is not set + +# +# Simatic LED drivers +# +# CONFIG_ACCESSIBILITY is not set +# CONFIG_INFINIBAND is not set +CONFIG_EDAC_ATOMIC_SCRUB=y +CONFIG_EDAC_SUPPORT=y +# CONFIG_EDAC is not set +CONFIG_RTC_LIB=y +CONFIG_RTC_MC146818_LIB=y +CONFIG_RTC_CLASS=y +# CONFIG_RTC_HCTOSYS is not set +CONFIG_RTC_SYSTOHC=y +CONFIG_RTC_SYSTOHC_DEVICE="rtc0" +# CONFIG_RTC_DEBUG is not set +CONFIG_RTC_NVMEM=y + +# +# RTC interfaces +# +CONFIG_RTC_INTF_SYSFS=y +CONFIG_RTC_INTF_PROC=y +CONFIG_RTC_INTF_DEV=y +# CONFIG_RTC_INTF_DEV_UIE_EMUL is not set +# CONFIG_RTC_DRV_TEST is not set + +# +# I2C RTC drivers +# +# CONFIG_RTC_DRV_ABB5ZES3 is not set +# CONFIG_RTC_DRV_ABEOZ9 is not set +# CONFIG_RTC_DRV_ABX80X is not set +# CONFIG_RTC_DRV_DS1307 is not set +# CONFIG_RTC_DRV_DS1374 is not set +# CONFIG_RTC_DRV_DS1672 is not set +# CONFIG_RTC_DRV_MAX6900 is not set +# CONFIG_RTC_DRV_MAX31335 is not set +# CONFIG_RTC_DRV_RS5C372 is not set +# CONFIG_RTC_DRV_ISL1208 is not set +# CONFIG_RTC_DRV_ISL12022 is not set +# CONFIG_RTC_DRV_X1205 is not set +# CONFIG_RTC_DRV_PCF8523 is not set +# CONFIG_RTC_DRV_PCF85363 is not set +# CONFIG_RTC_DRV_PCF8563 is not set +# CONFIG_RTC_DRV_PCF8583 is not set +# CONFIG_RTC_DRV_M41T80 is not set +# CONFIG_RTC_DRV_BQ32K is not set +# CONFIG_RTC_DRV_S35390A is not set +# CONFIG_RTC_DRV_FM3130 is not set +# CONFIG_RTC_DRV_RX8010 is not set +# CONFIG_RTC_DRV_RX8111 is not set +# CONFIG_RTC_DRV_RX8581 is not set +# CONFIG_RTC_DRV_RX8025 is not set +# CONFIG_RTC_DRV_EM3027 is not set +# CONFIG_RTC_DRV_RV3028 is not set +# CONFIG_RTC_DRV_RV3032 is not set +# CONFIG_RTC_DRV_RV8803 is not set +# CONFIG_RTC_DRV_SD2405AL is not set +# CONFIG_RTC_DRV_SD3078 is not set + +# +# SPI RTC drivers +# +CONFIG_RTC_I2C_AND_SPI=y + +# +# SPI and I2C RTC drivers +# +# CONFIG_RTC_DRV_DS3232 is not set +# CONFIG_RTC_DRV_PCF2127 is not set +# CONFIG_RTC_DRV_PCF85063 is not set +# CONFIG_RTC_DRV_RV3029C2 is not set +# CONFIG_RTC_DRV_RX6110 is not set + +# +# Platform RTC drivers +# +# CONFIG_RTC_DRV_CMOS is not set +# CONFIG_RTC_DRV_DS1286 is not set +# CONFIG_RTC_DRV_DS1511 is not set +# CONFIG_RTC_DRV_DS1553 is not set +# CONFIG_RTC_DRV_DS1685_FAMILY is not set +# CONFIG_RTC_DRV_DS1742 is not set +# CONFIG_RTC_DRV_DS2404 is not set +# CONFIG_RTC_DRV_STK17TA8 is not set +# CONFIG_RTC_DRV_M48T86 is not set +# CONFIG_RTC_DRV_M48T35 is not set +# CONFIG_RTC_DRV_M48T59 is not set +# CONFIG_RTC_DRV_MSM6242 is not set +# CONFIG_RTC_DRV_RP5C01 is not set + +# +# on-CPU RTC drivers +# +# CONFIG_RTC_DRV_FTRTC010 is not set +# CONFIG_RTC_DRV_GOLDFISH is not set + +# +# HID Sensor RTC drivers +# +CONFIG_DMADEVICES=y +# CONFIG_DMADEVICES_DEBUG is not set + +# +# DMA Devices +# +CONFIG_DMA_ENGINE=y +CONFIG_DMA_ACPI=y +# CONFIG_ALTERA_MSGDMA is not set +# CONFIG_INTEL_IDMA64 is not set +# CONFIG_INTEL_IDXD is not set +# CONFIG_INTEL_IDXD_COMPAT is not set +# CONFIG_INTEL_IOATDMA is not set +# CONFIG_PLX_DMA is not set +# CONFIG_XILINX_DMA is not set +# CONFIG_XILINX_XDMA is not set +# CONFIG_AMD_PTDMA is not set +# CONFIG_AMD_QDMA is not set +# CONFIG_QCOM_HIDMA_MGMT is not set +# CONFIG_QCOM_HIDMA is not set +# CONFIG_DW_DMAC is not set +# CONFIG_DW_DMAC_PCI is not set +# CONFIG_DW_EDMA is not set +# CONFIG_SF_PDMA is not set +# CONFIG_INTEL_LDMA is not set + +# +# DMA Clients +# +# CONFIG_ASYNC_TX_DMA is not set +# CONFIG_DMATEST is not set + +# +# DMABUF options +# +CONFIG_SYNC_FILE=y +CONFIG_SW_SYNC=y +CONFIG_UDMABUF=y +CONFIG_DMABUF_MOVE_NOTIFY=y +# CONFIG_DMABUF_DEBUG is not set +# CONFIG_DMABUF_SELFTESTS is not set +CONFIG_DMABUF_HEAPS=y +# CONFIG_DMABUF_SYSFS_STATS is not set +CONFIG_DMABUF_HEAPS_SYSTEM=y +CONFIG_DMABUF_HEAPS_CMA=y +# end of DMABUF options + +# CONFIG_UIO is not set +# CONFIG_VFIO is not set +CONFIG_IRQ_BYPASS_MANAGER=m +# CONFIG_VIRT_DRIVERS is not set +CONFIG_TSM=y +CONFIG_VIRTIO_MENU=y +# CONFIG_VDPA is not set +CONFIG_VHOST_IOTLB=m +CONFIG_VHOST_TASK=y +CONFIG_VHOST=m +CONFIG_VHOST_MENU=y +CONFIG_VHOST_NET=m +# CONFIG_VHOST_CROSS_ENDIAN_LEGACY is not set +CONFIG_VHOST_ENABLE_FORK_OWNER_CONTROL=y + +# +# Microsoft Hyper-V guest support +# +# CONFIG_HYPERV is not set +# end of Microsoft Hyper-V guest support + +# CONFIG_GREYBUS is not set +# CONFIG_COMEDI is not set +# CONFIG_GPIB is not set +# CONFIG_STAGING is not set +# CONFIG_GOLDFISH is not set +# CONFIG_CHROME_PLATFORMS is not set +# CONFIG_MELLANOX_PLATFORM is not set +# CONFIG_SURFACE_PLATFORMS is not set +CONFIG_X86_PLATFORM_DEVICES=y +# CONFIG_WMI_BMOF is not set +# CONFIG_X86_PLATFORM_DRIVERS_UNIWILL is not set +# CONFIG_MXM_WMI is not set +# CONFIG_NVIDIA_WMI_EC_BACKLIGHT is not set +# CONFIG_XIAOMI_WMI is not set +# CONFIG_REDMI_WMI is not set +# CONFIG_GIGABYTE_WMI is not set +# CONFIG_ACER_WIRELESS is not set + +# +# AMD HSMP Driver +# +# CONFIG_AMD_HSMP_ACPI is not set +# CONFIG_AMD_HSMP_PLAT is not set +# end of AMD HSMP Driver + +# CONFIG_AMD_HFI is not set +# CONFIG_AMD_3D_VCACHE is not set +# CONFIG_AMD_WBRF is not set +# CONFIG_AMD_ISP_PLATFORM is not set +# CONFIG_ADV_SWBUTTON is not set +# CONFIG_APPLE_GMUX is not set +# CONFIG_ASUS_LAPTOP is not set +# CONFIG_ASUS_WIRELESS is not set +# CONFIG_X86_PLATFORM_DRIVERS_DELL is not set +# CONFIG_AMILO_RFKILL is not set +# CONFIG_FUJITSU_TABLET is not set +# CONFIG_GPD_POCKET_FAN is not set +# CONFIG_X86_PLATFORM_DRIVERS_HP is not set +# CONFIG_WIRELESS_HOTKEY is not set +# CONFIG_IBM_RTL is not set +# CONFIG_SENSORS_HDAPS is not set +# CONFIG_INTEL_IFS is not set +# CONFIG_INTEL_SAR_INT1092 is not set + +# +# Intel Speed Select Technology interface support +# +# CONFIG_INTEL_SPEED_SELECT_INTERFACE is not set +# end of Intel Speed Select Technology interface support + +# CONFIG_INTEL_WMI_SBL_FW_UPDATE is not set +# CONFIG_INTEL_WMI_THUNDERBOLT is not set + +# +# Intel Uncore Frequency Control +# +# CONFIG_INTEL_UNCORE_FREQ_CONTROL is not set +# end of Intel Uncore Frequency Control + +# CONFIG_INTEL_HID_EVENT is not set +# CONFIG_INTEL_VBTN is not set +# CONFIG_INTEL_EHL_PSE_IO is not set +# CONFIG_INTEL_PUNIT_IPC is not set +# CONFIG_INTEL_RST is not set +# CONFIG_INTEL_SMARTCONNECT is not set +# CONFIG_INTEL_TURBO_MAX_3 is not set +# CONFIG_INTEL_VSEC is not set +# CONFIG_LENOVO_WMI_HOTKEY_UTILITIES is not set +# CONFIG_LENOVO_WMI_CAMERA is not set +# CONFIG_YOGABOOK is not set +# CONFIG_LENOVO_WMI_TUNING is not set +# CONFIG_ACPI_QUICKSTART is not set +# CONFIG_MSI_WMI is not set +# CONFIG_TOSHIBA_BT_RFKILL is not set +# CONFIG_TOSHIBA_HAPS is not set +# CONFIG_TOSHIBA_WMI is not set +# CONFIG_ACPI_CMPC is not set +# CONFIG_PANASONIC_LAPTOP is not set +# CONFIG_TOPSTAR_LAPTOP is not set +# CONFIG_SERIAL_MULTI_INSTANTIATE is not set +# CONFIG_INSPUR_PLATFORM_PROFILE is not set +# CONFIG_DASHARO_ACPI is not set +# CONFIG_INTEL_IPS is not set +# CONFIG_INTEL_SCU_PCI is not set +# CONFIG_INTEL_SCU_PLATFORM is not set +# CONFIG_SIEMENS_SIMATIC_IPC is not set +# CONFIG_WINMATE_FM07_KEYS is not set +# CONFIG_TUXEDO_NB04_WMI_AB is not set +CONFIG_ACPI_WMI=y +# CONFIG_ACPI_WMI_LEGACY_DEVICE_NAMES is not set +CONFIG_HAVE_CLK=y +CONFIG_HAVE_CLK_PREPARE=y +CONFIG_COMMON_CLK=y +# CONFIG_COMMON_CLK_MAX9485 is not set +# CONFIG_COMMON_CLK_SI5341 is not set +# CONFIG_COMMON_CLK_SI5351 is not set +# CONFIG_COMMON_CLK_SI544 is not set +# CONFIG_COMMON_CLK_CDCE706 is not set +# CONFIG_COMMON_CLK_CS2000_CP is not set +# CONFIG_XILINX_VCU is not set +# CONFIG_HWSPINLOCK is not set + +# +# Clock Source drivers +# +CONFIG_CLKEVT_I8253=y +CONFIG_I8253_LOCK=y +CONFIG_CLKBLD_I8253=y +# end of Clock Source drivers + +CONFIG_MAILBOX=y +CONFIG_PCC=y +# CONFIG_ALTERA_MBOX is not set +CONFIG_IOMMU_IOVA=y +CONFIG_IOMMU_API=y +CONFIG_IOMMU_SUPPORT=y + +# +# Generic IOMMU Pagetable Support +# +# end of Generic IOMMU Pagetable Support + +# CONFIG_IOMMU_DEBUGFS is not set +# CONFIG_IOMMU_DEFAULT_DMA_STRICT is not set +# CONFIG_IOMMU_DEFAULT_DMA_LAZY is not set +CONFIG_IOMMU_DEFAULT_PASSTHROUGH=y +CONFIG_IOMMU_DMA=y +CONFIG_IOMMU_SVA=y +CONFIG_IOMMU_IOPF=y +CONFIG_AMD_IOMMU=y +# CONFIG_INTEL_IOMMU is not set +# CONFIG_IOMMUFD is not set +CONFIG_IRQ_REMAP=y +CONFIG_GENERIC_PT=y +# CONFIG_DEBUG_GENERIC_PT is not set +CONFIG_IOMMU_PT=y +CONFIG_IOMMU_PT_AMDV1=y +# CONFIG_IOMMU_PT_VTDSS is not set +CONFIG_IOMMU_PT_X86_64=y + +# +# Remoteproc drivers +# +# CONFIG_REMOTEPROC is not set +# end of Remoteproc drivers + +# +# Rpmsg drivers +# +# CONFIG_RPMSG_QCOM_GLINK_RPM is not set +# CONFIG_RPMSG_VIRTIO is not set +# end of Rpmsg drivers + +# +# SOC (System On Chip) specific Drivers +# + +# +# Amlogic SoC drivers +# +# end of Amlogic SoC drivers + +# +# Broadcom SoC drivers +# +# end of Broadcom SoC drivers + +# +# NXP/Freescale QorIQ SoC drivers +# +# end of NXP/Freescale QorIQ SoC drivers + +# +# fujitsu SoC drivers +# +# end of fujitsu SoC drivers + +# +# i.MX SoC drivers +# +# end of i.MX SoC drivers + +# +# Enable LiteX SoC Builder specific drivers +# +# end of Enable LiteX SoC Builder specific drivers + +# CONFIG_WPCM450_SOC is not set + +# +# Qualcomm SoC drivers +# +# end of Qualcomm SoC drivers + +# CONFIG_SOC_TI is not set + +# +# Xilinx SoC drivers +# +# end of Xilinx SoC drivers +# end of SOC (System On Chip) specific Drivers + +# +# PM Domains +# + +# +# Amlogic PM Domains +# +# end of Amlogic PM Domains + +# +# Broadcom PM Domains +# +# end of Broadcom PM Domains + +# +# i.MX PM Domains +# +# end of i.MX PM Domains + +# +# Qualcomm PM Domains +# +# end of Qualcomm PM Domains +# end of PM Domains + +CONFIG_PM_DEVFREQ=y + +# +# DEVFREQ Governors +# +CONFIG_DEVFREQ_GOV_SIMPLE_ONDEMAND=y +CONFIG_DEVFREQ_GOV_PERFORMANCE=y +CONFIG_DEVFREQ_GOV_POWERSAVE=y +CONFIG_DEVFREQ_GOV_USERSPACE=y +CONFIG_DEVFREQ_GOV_PASSIVE=y + +# +# DEVFREQ Drivers +# +CONFIG_PM_DEVFREQ_EVENT=y +# CONFIG_EXTCON is not set +# CONFIG_MEMORY is not set +# CONFIG_IIO is not set +# CONFIG_NTB is not set +# CONFIG_PWM is not set + +# +# IRQ chip support +# +CONFIG_IRQ_MSI_LIB=y +# end of IRQ chip support + +# CONFIG_IPACK_BUS is not set +# CONFIG_RESET_CONTROLLER is not set + +# +# PHY Subsystem +# +# CONFIG_GENERIC_PHY is not set +# CONFIG_USB_LGM_PHY is not set +# CONFIG_PHY_CAN_TRANSCEIVER is not set + +# +# PHY drivers for Broadcom platforms +# +# CONFIG_BCM_KONA_USB2_PHY is not set +# end of PHY drivers for Broadcom platforms + +# CONFIG_PHY_PXA_28NM_HSIC is not set +# CONFIG_PHY_PXA_28NM_USB2 is not set +# CONFIG_PHY_INTEL_LGM_EMMC is not set +# end of PHY Subsystem + +# CONFIG_POWERCAP is not set +# CONFIG_MCB is not set + +# +# Performance monitor support +# +# CONFIG_DWC_PCIE_PMU is not set +# end of Performance monitor support + +CONFIG_RAS=y +# CONFIG_USB4 is not set + +# +# Android +# +# CONFIG_ANDROID_BINDER_IPC is not set +# end of Android + +# CONFIG_LIBNVDIMM is not set +# CONFIG_DAX is not set +CONFIG_NVMEM=y +CONFIG_NVMEM_SYSFS=y +# CONFIG_NVMEM_LAYOUTS is not set +# CONFIG_NVMEM_RMEM is not set + +# +# HW tracing support +# +# CONFIG_STM is not set +# CONFIG_INTEL_TH is not set +# end of HW tracing support + +# CONFIG_FPGA is not set +# CONFIG_TEE is not set +CONFIG_PM_OPP=y +# CONFIG_SIOX is not set +# CONFIG_SLIMBUS is not set +# CONFIG_INTERCONNECT is not set +# CONFIG_COUNTER is not set +# CONFIG_MOST is not set +# CONFIG_PECI is not set +CONFIG_HTE=y +# end of Device Drivers + +# +# File systems +# +CONFIG_DCACHE_WORD_ACCESS=y +CONFIG_VALIDATE_FS_PARSER=y +CONFIG_FS_IOMAP=y +CONFIG_FS_STACK=y +CONFIG_BUFFER_HEAD=y +CONFIG_LEGACY_DIRECT_IO=y +# CONFIG_EXT2_FS is not set +CONFIG_EXT4_FS=y +CONFIG_EXT4_USE_FOR_EXT2=y +CONFIG_EXT4_FS_POSIX_ACL=y +CONFIG_EXT4_FS_SECURITY=y +# CONFIG_EXT4_DEBUG is not set +CONFIG_JBD2=y +# CONFIG_JBD2_DEBUG is not set +CONFIG_FS_MBCACHE=y +# CONFIG_JFS_FS is not set +# CONFIG_XFS_FS is not set +# CONFIG_GFS2_FS is not set +# CONFIG_OCFS2_FS is not set +CONFIG_BTRFS_FS=m +# CONFIG_NILFS2_FS is not set +# CONFIG_F2FS_FS is not set +# CONFIG_FS_DAX is not set +CONFIG_FS_POSIX_ACL=y +CONFIG_EXPORTFS=y +# CONFIG_EXPORTFS_BLOCK_OPS is not set +CONFIG_FILE_LOCKING=y +# CONFIG_FS_ENCRYPTION is not set +# CONFIG_FS_VERITY is not set +CONFIG_FSNOTIFY=y +CONFIG_DNOTIFY=y +CONFIG_INOTIFY_USER=y +CONFIG_FANOTIFY=y +CONFIG_FANOTIFY_ACCESS_PERMISSIONS=y +CONFIG_QUOTA=y +CONFIG_QUOTA_NETLINK_INTERFACE=y +# CONFIG_QUOTA_DEBUG is not set +CONFIG_QUOTA_TREE=y +# CONFIG_QFMT_V1 is not set +CONFIG_QFMT_V2=y +CONFIG_QUOTACTL=y +CONFIG_AUTOFS_FS=m +CONFIG_FUSE_FS=y +# CONFIG_CUSE is not set +# CONFIG_VIRTIO_FS is not set +CONFIG_FUSE_PASSTHROUGH=y +CONFIG_FUSE_IO_URING=y +CONFIG_OVERLAY_FS=m +# CONFIG_OVERLAY_FS_REDIRECT_DIR is not set +CONFIG_OVERLAY_FS_REDIRECT_ALWAYS_FOLLOW=y +# CONFIG_OVERLAY_FS_INDEX is not set +CONFIG_OVERLAY_FS_XINO_AUTO=y +# CONFIG_OVERLAY_FS_METACOPY is not set +# CONFIG_OVERLAY_FS_DEBUG is not set + +# +# Caches +# +CONFIG_NETFS_SUPPORT=y +# CONFIG_NETFS_STATS is not set +# CONFIG_NETFS_DEBUG is not set +# CONFIG_FSCACHE is not set +# end of Caches + +# +# CD-ROM/DVD Filesystems +# +CONFIG_ISO9660_FS=y +# CONFIG_UDF_FS is not set +# end of CD-ROM/DVD Filesystems + +# +# DOS/FAT/EXFAT/NT Filesystems +# +CONFIG_FAT_FS=y +CONFIG_MSDOS_FS=m +CONFIG_VFAT_FS=y +CONFIG_FAT_DEFAULT_CODEPAGE=437 +CONFIG_FAT_DEFAULT_IOCHARSET="iso8859-1" +# CONFIG_FAT_DEFAULT_UTF8 is not set +# CONFIG_EXFAT_FS is not set +# CONFIG_NTFS3_FS is not set +# CONFIG_NTFS_FS is not set +# end of DOS/FAT/EXFAT/NT Filesystems + +# +# Pseudo filesystems +# +CONFIG_PROC_FS=y +CONFIG_PROC_KCORE=y +CONFIG_PROC_VMCORE=y +CONFIG_PROC_VMCORE_DEVICE_DUMP=y +CONFIG_PROC_SYSCTL=y +CONFIG_PROC_PAGE_MONITOR=y +CONFIG_PROC_CHILDREN=y +CONFIG_PROC_PID_ARCH_STATUS=y +CONFIG_PROC_CPU_RESCTRL=y +CONFIG_KERNFS=y +CONFIG_SYSFS=y +CONFIG_TMPFS=y +CONFIG_TMPFS_POSIX_ACL=y +CONFIG_TMPFS_XATTR=y +CONFIG_TMPFS_INODE64=y +CONFIG_TMPFS_QUOTA=y +CONFIG_ARCH_SUPPORTS_HUGETLBFS=y +CONFIG_HUGETLBFS=y +# CONFIG_HUGETLB_PAGE_OPTIMIZE_VMEMMAP_DEFAULT_ON is not set +CONFIG_HUGETLB_PAGE=y +CONFIG_HUGETLB_PAGE_OPTIMIZE_VMEMMAP=y +CONFIG_HUGETLB_PMD_PAGE_TABLE_SHARING=y +CONFIG_ARCH_HAS_GIGANTIC_PAGE=y +CONFIG_CONFIGFS_FS=y +CONFIG_EFIVAR_FS=y +# end of Pseudo filesystems + +CONFIG_MISC_FILESYSTEMS=y +# CONFIG_ORANGEFS_FS is not set +# CONFIG_ADFS_FS is not set +# CONFIG_AFFS_FS is not set +# CONFIG_ECRYPT_FS is not set +# CONFIG_HFS_FS is not set +# CONFIG_HFSPLUS_FS is not set +# CONFIG_BEFS_FS is not set +# CONFIG_BFS_FS is not set +# CONFIG_EFS_FS is not set +# CONFIG_CRAMFS is not set +CONFIG_SQUASHFS=y +# CONFIG_SQUASHFS_FILE_CACHE is not set +CONFIG_SQUASHFS_FILE_DIRECT=y +CONFIG_SQUASHFS_DECOMP_SINGLE=y +CONFIG_SQUASHFS_DECOMP_MULTI=y +CONFIG_SQUASHFS_DECOMP_MULTI_PERCPU=y +CONFIG_SQUASHFS_CHOICE_DECOMP_BY_MOUNT=y +CONFIG_SQUASHFS_MOUNT_DECOMP_THREADS=y +CONFIG_SQUASHFS_XATTR=y +# CONFIG_SQUASHFS_COMP_CACHE_FULL is not set +CONFIG_SQUASHFS_ZLIB=y +CONFIG_SQUASHFS_LZ4=y +CONFIG_SQUASHFS_LZO=y +CONFIG_SQUASHFS_XZ=y +CONFIG_SQUASHFS_ZSTD=y +# CONFIG_SQUASHFS_4K_DEVBLK_SIZE is not set +# CONFIG_SQUASHFS_EMBEDDED is not set +CONFIG_SQUASHFS_FRAGMENT_CACHE_SIZE=3 +# CONFIG_VXFS_FS is not set +# CONFIG_MINIX_FS is not set +# CONFIG_OMFS_FS is not set +# CONFIG_HPFS_FS is not set +# CONFIG_QNX4FS_FS is not set +# CONFIG_QNX6FS_FS is not set +CONFIG_RESCTRL_FS=y +CONFIG_RESCTRL_FS_PSEUDO_LOCK=y +# CONFIG_ROMFS_FS is not set +# CONFIG_PSTORE is not set +# CONFIG_UFS_FS is not set +# CONFIG_EROFS_FS is not set +CONFIG_NETWORK_FILESYSTEMS=y +CONFIG_NLS=y +CONFIG_NLS_DEFAULT="utf8" +CONFIG_NLS_CODEPAGE_437=y +# CONFIG_NLS_CODEPAGE_737 is not set +# CONFIG_NLS_CODEPAGE_775 is not set +# CONFIG_NLS_CODEPAGE_850 is not set +# CONFIG_NLS_CODEPAGE_852 is not set +# CONFIG_NLS_CODEPAGE_855 is not set +# CONFIG_NLS_CODEPAGE_857 is not set +# CONFIG_NLS_CODEPAGE_860 is not set +# CONFIG_NLS_CODEPAGE_861 is not set +# CONFIG_NLS_CODEPAGE_862 is not set +# CONFIG_NLS_CODEPAGE_863 is not set +# CONFIG_NLS_CODEPAGE_864 is not set +# CONFIG_NLS_CODEPAGE_865 is not set +# CONFIG_NLS_CODEPAGE_866 is not set +# CONFIG_NLS_CODEPAGE_869 is not set +# CONFIG_NLS_CODEPAGE_936 is not set +# CONFIG_NLS_CODEPAGE_950 is not set +# CONFIG_NLS_CODEPAGE_932 is not set +# CONFIG_NLS_CODEPAGE_949 is not set +# CONFIG_NLS_CODEPAGE_874 is not set +# CONFIG_NLS_ISO8859_8 is not set +# CONFIG_NLS_CODEPAGE_1250 is not set +# CONFIG_NLS_CODEPAGE_1251 is not set +CONFIG_NLS_ASCII=y +CONFIG_NLS_ISO8859_1=y +# CONFIG_NLS_ISO8859_2 is not set +# CONFIG_NLS_ISO8859_3 is not set +# CONFIG_NLS_ISO8859_4 is not set +# CONFIG_NLS_ISO8859_5 is not set +# CONFIG_NLS_ISO8859_6 is not set +# CONFIG_NLS_ISO8859_7 is not set +# CONFIG_NLS_ISO8859_9 is not set +# CONFIG_NLS_ISO8859_13 is not set +# CONFIG_NLS_ISO8859_14 is not set +# CONFIG_NLS_ISO8859_15 is not set +# CONFIG_NLS_KOI8_R is not set +# CONFIG_NLS_KOI8_U is not set +# CONFIG_NLS_MAC_ROMAN is not set +# CONFIG_NLS_MAC_CELTIC is not set +# CONFIG_NLS_MAC_CENTEURO is not set +# CONFIG_NLS_MAC_CROATIAN is not set +# CONFIG_NLS_MAC_CYRILLIC is not set +# CONFIG_NLS_MAC_GAELIC is not set +# CONFIG_NLS_MAC_GREEK is not set +# CONFIG_NLS_MAC_ICELAND is not set +# CONFIG_NLS_MAC_INUIT is not set +# CONFIG_NLS_MAC_ROMANIAN is not set +# CONFIG_NLS_MAC_TURKISH is not set +CONFIG_NLS_UTF8=y +# CONFIG_DLM is not set +# CONFIG_UNICODE is not set +CONFIG_IO_WQ=y +# end of File systems + +# +# Security options +# +CONFIG_KEYS=y +# CONFIG_KEYS_REQUEST_CACHE is not set +# CONFIG_PERSISTENT_KEYRINGS is not set +# CONFIG_BIG_KEYS is not set +# CONFIG_TRUSTED_KEYS is not set +# CONFIG_ENCRYPTED_KEYS is not set +# CONFIG_KEY_DH_OPERATIONS is not set +# CONFIG_KEY_NOTIFICATIONS is not set +# CONFIG_SECURITY_DMESG_RESTRICT is not set +CONFIG_PROC_MEM_ALWAYS_FORCE=y +# CONFIG_PROC_MEM_FORCE_PTRACE is not set +# CONFIG_PROC_MEM_NO_FORCE is not set +CONFIG_SECURITY=y +CONFIG_HAS_SECURITY_AUDIT=y +CONFIG_SECURITYFS=y +CONFIG_SECURITY_NETWORK=y +# CONFIG_SECURITY_NETWORK_XFRM is not set +CONFIG_SECURITY_PATH=y +# CONFIG_STATIC_USERMODEHELPER is not set +CONFIG_SECURITY_SELINUX=y +# CONFIG_SECURITY_SMACK is not set +# CONFIG_SECURITY_TOMOYO is not set +CONFIG_SECURITY_APPARMOR=y +# CONFIG_SECURITY_APPARMOR_DEBUG is not set +CONFIG_SECURITY_APPARMOR_INTROSPECT_POLICY=y +CONFIG_SECURITY_APPARMOR_HASH=y +CONFIG_SECURITY_APPARMOR_HASH_DEFAULT=y +CONFIG_SECURITY_APPARMOR_EXPORT_BINARY=y +CONFIG_SECURITY_APPARMOR_PARANOID_LOAD=y +# CONFIG_SECURITY_LOADPIN is not set +CONFIG_SECURITY_YAMA=y +# CONFIG_SECURITY_SAFESETID is not set +# CONFIG_SECURITY_LOCKDOWN_LSM is not set +CONFIG_SECURITY_LANDLOCK=y +# CONFIG_SECURITY_IPE is not set +CONFIG_INTEGRITY=y +# CONFIG_INTEGRITY_SIGNATURE is not set +CONFIG_INTEGRITY_AUDIT=y +# CONFIG_IMA is not set +# CONFIG_IMA_SECURE_AND_OR_TRUSTED_BOOT is not set +# CONFIG_EVM is not set +CONFIG_DEFAULT_SECURITY_APPARMOR=y +CONFIG_DEFAULT_SECURITY_DAC=y +CONFIG_LSM="landlock,lockdown,yama,integrity,apparmor" + +# +# Kernel hardening options +# + +# +# Memory initialization +# +CONFIG_CC_HAS_AUTO_VAR_INIT_PATTERN=y +CONFIG_CC_HAS_AUTO_VAR_INIT_ZERO_BARE=y +CONFIG_CC_HAS_AUTO_VAR_INIT_ZERO=y +CONFIG_INIT_STACK_NONE=y +# CONFIG_INIT_STACK_ALL_PATTERN is not set +# CONFIG_INIT_STACK_ALL_ZERO is not set +# CONFIG_INIT_ON_ALLOC_DEFAULT_ON is not set +# CONFIG_INIT_ON_FREE_DEFAULT_ON is not set +CONFIG_CC_HAS_ZERO_CALL_USED_REGS=y +# CONFIG_ZERO_CALL_USED_REGS is not set +# end of Memory initialization + +# +# Bounds checking +# +# CONFIG_FORTIFY_SOURCE is not set +# CONFIG_HARDENED_USERCOPY is not set +# end of Bounds checking + +# +# Hardening of kernel data structures +# +# CONFIG_LIST_HARDENED is not set +# CONFIG_BUG_ON_DATA_CORRUPTION is not set +# end of Hardening of kernel data structures + +CONFIG_RANDSTRUCT_NONE=y +# end of Kernel hardening options +# end of Security options + +CONFIG_CRYPTO=y + +# +# Crypto core or helper +# +CONFIG_CRYPTO_ALGAPI=y +CONFIG_CRYPTO_ALGAPI2=y +CONFIG_CRYPTO_AEAD=y +CONFIG_CRYPTO_AEAD2=y +CONFIG_CRYPTO_SIG=y +CONFIG_CRYPTO_SIG2=y +CONFIG_CRYPTO_SKCIPHER=y +CONFIG_CRYPTO_SKCIPHER2=y +CONFIG_CRYPTO_HASH=y +CONFIG_CRYPTO_HASH2=y +CONFIG_CRYPTO_RNG=y +CONFIG_CRYPTO_RNG2=y +CONFIG_CRYPTO_RNG_DEFAULT=y +CONFIG_CRYPTO_AKCIPHER2=y +CONFIG_CRYPTO_AKCIPHER=y +CONFIG_CRYPTO_KPP2=y +CONFIG_CRYPTO_KPP=y +CONFIG_CRYPTO_ACOMP2=y +CONFIG_CRYPTO_MANAGER=y +CONFIG_CRYPTO_MANAGER2=y +CONFIG_CRYPTO_USER=m +# CONFIG_CRYPTO_SELFTESTS is not set +CONFIG_CRYPTO_NULL=y +CONFIG_CRYPTO_PCRYPT=m +CONFIG_CRYPTO_CRYPTD=m +CONFIG_CRYPTO_AUTHENC=y +CONFIG_CRYPTO_KRB5ENC=m +# CONFIG_CRYPTO_BENCHMARK is not set +# end of Crypto core or helper + +# +# Public-key cryptography +# +CONFIG_CRYPTO_RSA=y +CONFIG_CRYPTO_DH=y +CONFIG_CRYPTO_DH_RFC7919_GROUPS=y +CONFIG_CRYPTO_ECC=y +CONFIG_CRYPTO_ECDH=y +CONFIG_CRYPTO_ECDSA=m +CONFIG_CRYPTO_ECRDSA=m +# end of Public-key cryptography + +# +# Block ciphers +# +CONFIG_CRYPTO_AES=y +CONFIG_CRYPTO_AES_TI=m +CONFIG_CRYPTO_ARIA=m +CONFIG_CRYPTO_BLOWFISH=m +CONFIG_CRYPTO_BLOWFISH_COMMON=m +CONFIG_CRYPTO_CAMELLIA=m +CONFIG_CRYPTO_CAST_COMMON=m +CONFIG_CRYPTO_CAST5=m +CONFIG_CRYPTO_CAST6=m +CONFIG_CRYPTO_DES=m +CONFIG_CRYPTO_FCRYPT=m +CONFIG_CRYPTO_SERPENT=m +CONFIG_CRYPTO_SM4=m +CONFIG_CRYPTO_SM4_GENERIC=m +CONFIG_CRYPTO_TWOFISH=m +CONFIG_CRYPTO_TWOFISH_COMMON=m +# end of Block ciphers + +# +# Length-preserving ciphers and modes +# +CONFIG_CRYPTO_ADIANTUM=m +CONFIG_CRYPTO_CHACHA20=m +CONFIG_CRYPTO_CBC=y +CONFIG_CRYPTO_CTR=y +CONFIG_CRYPTO_CTS=y +CONFIG_CRYPTO_ECB=y +CONFIG_CRYPTO_HCTR2=m +CONFIG_CRYPTO_LRW=m +CONFIG_CRYPTO_PCBC=m +CONFIG_CRYPTO_XCTR=m +CONFIG_CRYPTO_XTS=y +CONFIG_CRYPTO_NHPOLY1305=m +# end of Length-preserving ciphers and modes + +# +# AEAD (authenticated encryption with associated data) ciphers +# +CONFIG_CRYPTO_AEGIS128=m +CONFIG_CRYPTO_CHACHA20POLY1305=m +CONFIG_CRYPTO_CCM=y +CONFIG_CRYPTO_GCM=y +CONFIG_CRYPTO_GENIV=y +CONFIG_CRYPTO_SEQIV=y +CONFIG_CRYPTO_ECHAINIV=y +CONFIG_CRYPTO_ESSIV=m +# end of AEAD (authenticated encryption with associated data) ciphers + +# +# Hashes, digests, and MACs +# +CONFIG_CRYPTO_BLAKE2B=m +CONFIG_CRYPTO_CMAC=y +CONFIG_CRYPTO_GHASH=y +CONFIG_CRYPTO_HMAC=y +CONFIG_CRYPTO_MD4=m +CONFIG_CRYPTO_MD5=y +CONFIG_CRYPTO_MICHAEL_MIC=m +CONFIG_CRYPTO_RMD160=m +CONFIG_CRYPTO_SHA1=y +CONFIG_CRYPTO_SHA256=y +CONFIG_CRYPTO_SHA512=y +CONFIG_CRYPTO_SHA3=y +CONFIG_CRYPTO_SM3_GENERIC=m +CONFIG_CRYPTO_STREEBOG=m +CONFIG_CRYPTO_WP512=m +CONFIG_CRYPTO_XCBC=m +CONFIG_CRYPTO_XXHASH=m +# end of Hashes, digests, and MACs + +# +# CRCs (cyclic redundancy checks) +# +CONFIG_CRYPTO_CRC32C=y +CONFIG_CRYPTO_CRC32=m +# end of CRCs (cyclic redundancy checks) + +# +# Compression +# +CONFIG_CRYPTO_DEFLATE=y +CONFIG_CRYPTO_LZO=y +CONFIG_CRYPTO_842=m +CONFIG_CRYPTO_LZ4=m +CONFIG_CRYPTO_LZ4HC=m +CONFIG_CRYPTO_ZSTD=m +# end of Compression + +# +# Random number generation +# +CONFIG_CRYPTO_DRBG_MENU=y +CONFIG_CRYPTO_DRBG_HMAC=y +CONFIG_CRYPTO_DRBG_HASH=y +CONFIG_CRYPTO_DRBG_CTR=y +CONFIG_CRYPTO_DRBG=y +CONFIG_CRYPTO_JITTERENTROPY=y +CONFIG_CRYPTO_JITTERENTROPY_MEMORY_BLOCKS=64 +CONFIG_CRYPTO_JITTERENTROPY_MEMORY_BLOCKSIZE=32 +CONFIG_CRYPTO_JITTERENTROPY_OSR=1 +CONFIG_CRYPTO_DF80090A=y +# end of Random number generation + +# +# Userspace interface +# +CONFIG_CRYPTO_USER_API=m +CONFIG_CRYPTO_USER_API_HASH=m +CONFIG_CRYPTO_USER_API_SKCIPHER=m +CONFIG_CRYPTO_USER_API_RNG=m +# CONFIG_CRYPTO_USER_API_RNG_CAVP is not set +CONFIG_CRYPTO_USER_API_AEAD=m +# CONFIG_CRYPTO_USER_API_ENABLE_OBSOLETE is not set +# end of Userspace interface + +# +# Accelerated Cryptographic Algorithms for CPU (x86) +# +CONFIG_CRYPTO_AES_NI_INTEL=m +CONFIG_CRYPTO_BLOWFISH_X86_64=m +CONFIG_CRYPTO_CAMELLIA_X86_64=m +CONFIG_CRYPTO_CAMELLIA_AESNI_AVX_X86_64=m +CONFIG_CRYPTO_CAMELLIA_AESNI_AVX2_X86_64=m +CONFIG_CRYPTO_CAST5_AVX_X86_64=m +CONFIG_CRYPTO_CAST6_AVX_X86_64=m +CONFIG_CRYPTO_DES3_EDE_X86_64=m +CONFIG_CRYPTO_SERPENT_SSE2_X86_64=m +CONFIG_CRYPTO_SERPENT_AVX_X86_64=m +CONFIG_CRYPTO_SERPENT_AVX2_X86_64=m +CONFIG_CRYPTO_SM4_AESNI_AVX_X86_64=m +CONFIG_CRYPTO_SM4_AESNI_AVX2_X86_64=m +CONFIG_CRYPTO_TWOFISH_X86_64=m +CONFIG_CRYPTO_TWOFISH_X86_64_3WAY=m +CONFIG_CRYPTO_TWOFISH_AVX_X86_64=m +CONFIG_CRYPTO_ARIA_AESNI_AVX_X86_64=m +CONFIG_CRYPTO_ARIA_AESNI_AVX2_X86_64=m +CONFIG_CRYPTO_ARIA_GFNI_AVX512_X86_64=m +CONFIG_CRYPTO_AEGIS128_AESNI_SSE2=m +CONFIG_CRYPTO_NHPOLY1305_SSE2=m +CONFIG_CRYPTO_NHPOLY1305_AVX2=m +CONFIG_CRYPTO_SM3_AVX_X86_64=m +CONFIG_CRYPTO_GHASH_CLMUL_NI_INTEL=m +# end of Accelerated Cryptographic Algorithms for CPU (x86) + +CONFIG_CRYPTO_HW=y +# CONFIG_CRYPTO_DEV_PADLOCK is not set +# CONFIG_CRYPTO_DEV_ATMEL_ECC is not set +# CONFIG_CRYPTO_DEV_ATMEL_SHA204A is not set +CONFIG_CRYPTO_DEV_CCP=y +CONFIG_CRYPTO_DEV_CCP_DD=m +CONFIG_CRYPTO_DEV_SP_CCP=y +CONFIG_CRYPTO_DEV_CCP_CRYPTO=m +CONFIG_CRYPTO_DEV_SP_PSP=y +# CONFIG_CRYPTO_DEV_CCP_DEBUGFS is not set +# CONFIG_CRYPTO_DEV_NITROX_CNN55XX is not set +# CONFIG_CRYPTO_DEV_QAT_DH895xCC is not set +# CONFIG_CRYPTO_DEV_QAT_C3XXX is not set +# CONFIG_CRYPTO_DEV_QAT_C62X is not set +# CONFIG_CRYPTO_DEV_QAT_4XXX is not set +# CONFIG_CRYPTO_DEV_QAT_420XX is not set +# CONFIG_CRYPTO_DEV_QAT_6XXX is not set +# CONFIG_CRYPTO_DEV_QAT_DH895xCCVF is not set +# CONFIG_CRYPTO_DEV_QAT_C3XXXVF is not set +# CONFIG_CRYPTO_DEV_QAT_C62XVF is not set +# CONFIG_CRYPTO_DEV_SAFEXCEL is not set +# CONFIG_CRYPTO_DEV_AMLOGIC_GXL is not set +CONFIG_ASYMMETRIC_KEY_TYPE=y +CONFIG_ASYMMETRIC_PUBLIC_KEY_SUBTYPE=y +CONFIG_X509_CERTIFICATE_PARSER=y +CONFIG_PKCS8_PRIVATE_KEY_PARSER=m +CONFIG_PKCS7_MESSAGE_PARSER=y +CONFIG_PKCS7_TEST_KEY=m +CONFIG_SIGNED_PE_FILE_VERIFICATION=y +# CONFIG_FIPS_SIGNATURE_SELFTEST is not set + +# +# Certificates for signature checking +# +CONFIG_SYSTEM_TRUSTED_KEYRING=y +CONFIG_SYSTEM_TRUSTED_KEYS="" +# CONFIG_SYSTEM_EXTRA_CERTIFICATE is not set +# CONFIG_SECONDARY_TRUSTED_KEYRING is not set +# CONFIG_SYSTEM_BLACKLIST_KEYRING is not set +# end of Certificates for signature checking + +CONFIG_CRYPTO_KRB5=m +# CONFIG_CRYPTO_KRB5_SELFTESTS is not set +CONFIG_BINARY_PRINTF=y + +# +# Library routines +# +# CONFIG_PACKING is not set +CONFIG_BITREVERSE=y +CONFIG_GENERIC_STRNCPY_FROM_USER=y +CONFIG_GENERIC_STRNLEN_USER=y +CONFIG_GENERIC_NET_UTILS=y +CONFIG_CORDIC=m +# CONFIG_PRIME_NUMBERS is not set +CONFIG_RATIONAL=y +CONFIG_GENERIC_IOMAP=y +CONFIG_ARCH_USE_CMPXCHG_LOCKREF=y +CONFIG_ARCH_HAS_FAST_MULTIPLIER=y +CONFIG_ARCH_USE_SYM_ANNOTATIONS=y +CONFIG_CRC16=y +CONFIG_CRC_CCITT=y +CONFIG_CRC32=y +CONFIG_CRC32_ARCH=y +CONFIG_CRC_OPTIMIZATIONS=y + +# +# Crypto library routines +# +CONFIG_CRYPTO_HASH_INFO=y +CONFIG_CRYPTO_LIB_UTILS=y +CONFIG_CRYPTO_LIB_AES=y +CONFIG_CRYPTO_LIB_ARC4=y +CONFIG_CRYPTO_LIB_GF128MUL=y +CONFIG_CRYPTO_LIB_BLAKE2B=m +CONFIG_CRYPTO_LIB_BLAKE2S_ARCH=y +CONFIG_CRYPTO_LIB_CHACHA=m +CONFIG_CRYPTO_LIB_CHACHA_ARCH=y +CONFIG_CRYPTO_LIB_DES=m +CONFIG_CRYPTO_LIB_MD5=y +CONFIG_CRYPTO_LIB_POLY1305=m +CONFIG_CRYPTO_LIB_POLY1305_ARCH=y +CONFIG_CRYPTO_LIB_POLY1305_GENERIC=y +CONFIG_CRYPTO_LIB_POLY1305_RSIZE=11 +CONFIG_CRYPTO_LIB_POLYVAL=m +CONFIG_CRYPTO_LIB_POLYVAL_ARCH=y +CONFIG_CRYPTO_LIB_SHA1=y +CONFIG_CRYPTO_LIB_SHA1_ARCH=y +CONFIG_CRYPTO_LIB_SHA256=y +CONFIG_CRYPTO_LIB_SHA256_ARCH=y +CONFIG_CRYPTO_LIB_SHA512=y +CONFIG_CRYPTO_LIB_SHA512_ARCH=y +CONFIG_CRYPTO_LIB_SHA3=y +CONFIG_CRYPTO_LIB_SM3=m +# end of Crypto library routines + +CONFIG_XXHASH=y +# CONFIG_RANDOM32_SELFTEST is not set +CONFIG_842_COMPRESS=m +CONFIG_842_DECOMPRESS=m +CONFIG_ZLIB_INFLATE=y +CONFIG_ZLIB_DEFLATE=y +CONFIG_LZO_COMPRESS=y +CONFIG_LZO_DECOMPRESS=y +CONFIG_LZ4_COMPRESS=m +CONFIG_LZ4HC_COMPRESS=m +CONFIG_LZ4_DECOMPRESS=y +CONFIG_ZSTD_COMMON=y +CONFIG_ZSTD_COMPRESS=y +CONFIG_ZSTD_DECOMPRESS=y +CONFIG_XZ_DEC=y +CONFIG_XZ_DEC_X86=y +CONFIG_XZ_DEC_POWERPC=y +CONFIG_XZ_DEC_ARM=y +CONFIG_XZ_DEC_ARMTHUMB=y +CONFIG_XZ_DEC_ARM64=y +CONFIG_XZ_DEC_SPARC=y +CONFIG_XZ_DEC_RISCV=y +# CONFIG_XZ_DEC_MICROLZMA is not set +CONFIG_XZ_DEC_BCJ=y +# CONFIG_XZ_DEC_TEST is not set +CONFIG_DECOMPRESS_GZIP=y +CONFIG_DECOMPRESS_BZIP2=y +CONFIG_DECOMPRESS_LZMA=y +CONFIG_DECOMPRESS_XZ=y +CONFIG_DECOMPRESS_LZO=y +CONFIG_DECOMPRESS_LZ4=y +CONFIG_DECOMPRESS_ZSTD=y +CONFIG_GENERIC_ALLOCATOR=y +CONFIG_INTERVAL_TREE=y +CONFIG_XARRAY_MULTI=y +CONFIG_ASSOCIATIVE_ARRAY=y +CONFIG_HAS_IOMEM=y +CONFIG_HAS_IOPORT=y +CONFIG_HAS_IOPORT_MAP=y +CONFIG_HAS_DMA=y +CONFIG_DMA_OPS_HELPERS=y +CONFIG_NEED_SG_DMA_FLAGS=y +CONFIG_NEED_SG_DMA_LENGTH=y +CONFIG_NEED_DMA_MAP_STATE=y +CONFIG_ARCH_DMA_ADDR_T_64BIT=y +CONFIG_SWIOTLB=y +CONFIG_SWIOTLB_DYNAMIC=y +CONFIG_DMA_NEED_SYNC=y +CONFIG_DMA_CMA=y +CONFIG_DMA_NUMA_CMA=y + +# +# Default contiguous memory area size: +# +CONFIG_CMA_SIZE_MBYTES=0 +CONFIG_CMA_SIZE_SEL_MBYTES=y +# CONFIG_CMA_SIZE_SEL_PERCENTAGE is not set +# CONFIG_CMA_SIZE_SEL_MIN is not set +# CONFIG_CMA_SIZE_SEL_MAX is not set +CONFIG_CMA_ALIGNMENT=8 +# CONFIG_DMA_API_DEBUG is not set +# CONFIG_DMA_MAP_BENCHMARK is not set +CONFIG_SGL_ALLOC=y +CONFIG_CPU_RMAP=y +CONFIG_DQL=y +CONFIG_GLOB=y +# CONFIG_GLOB_SELFTEST is not set +CONFIG_NLATTR=y +CONFIG_LRU_CACHE=m +CONFIG_CLZ_TAB=y +CONFIG_IRQ_POLL=y +CONFIG_MPILIB=y +CONFIG_DIMLIB=y +CONFIG_OID_REGISTRY=y +CONFIG_UCS2_STRING=y +CONFIG_HAVE_GENERIC_VDSO=y +CONFIG_GENERIC_GETTIMEOFDAY=y +CONFIG_GENERIC_VDSO_OVERFLOW_PROTECT=y +CONFIG_VDSO_GETRANDOM=y +CONFIG_FONT_SUPPORT=y +# CONFIG_FONTS is not set +CONFIG_FONT_8x8=y +CONFIG_FONT_8x16=y +CONFIG_SG_POOL=y +CONFIG_ARCH_HAS_PMEM_API=y +CONFIG_ARCH_HAS_CPU_CACHE_INVALIDATE_MEMREGION=y +CONFIG_ARCH_HAS_UACCESS_FLUSHCACHE=y +CONFIG_ARCH_HAS_COPY_MC=y +CONFIG_ARCH_STACKWALK=y +CONFIG_STACKDEPOT=y +CONFIG_STACKDEPOT_MAX_FRAMES=64 +CONFIG_SBITMAP=y +# CONFIG_LWQ_TEST is not set +# end of Library routines + +CONFIG_FIRMWARE_TABLE=y +CONFIG_UNION_FIND=y + +# +# Kernel hacking +# + +# +# printk and dmesg options +# +CONFIG_PRINTK_TIME=y +# CONFIG_PRINTK_CALLER is not set +# CONFIG_STACKTRACE_BUILD_ID is not set +CONFIG_CONSOLE_LOGLEVEL_DEFAULT=7 +CONFIG_CONSOLE_LOGLEVEL_QUIET=3 +CONFIG_MESSAGE_LOGLEVEL_DEFAULT=4 +CONFIG_BOOT_PRINTK_DELAY=y +CONFIG_DYNAMIC_DEBUG=y +CONFIG_DYNAMIC_DEBUG_CORE=y +CONFIG_SYMBOLIC_ERRNAME=y +CONFIG_DEBUG_BUGVERBOSE=y +# CONFIG_DEBUG_BUGVERBOSE_DETAILED is not set +# end of printk and dmesg options + +CONFIG_DEBUG_KERNEL=y +CONFIG_DEBUG_MISC=y + +# +# Compile-time checks and compiler options +# +CONFIG_AS_HAS_NON_CONST_ULEB128=y +CONFIG_DEBUG_INFO_NONE=y +# CONFIG_DEBUG_INFO_DWARF_TOOLCHAIN_DEFAULT is not set +# CONFIG_DEBUG_INFO_DWARF4 is not set +# CONFIG_DEBUG_INFO_DWARF5 is not set +CONFIG_FRAME_WARN=2048 +# CONFIG_STRIP_ASM_SYMS is not set +# CONFIG_READABLE_ASM is not set +# CONFIG_HEADERS_INSTALL is not set +# CONFIG_DEBUG_SECTION_MISMATCH is not set +CONFIG_SECTION_MISMATCH_WARN_ONLY=y +# CONFIG_DEBUG_FORCE_FUNCTION_ALIGN_64B is not set +CONFIG_ARCH_WANT_FRAME_POINTERS=y +CONFIG_FRAME_POINTER=y +CONFIG_OBJTOOL=y +# CONFIG_OBJTOOL_WERROR is not set +# CONFIG_STACK_VALIDATION is not set +# CONFIG_VMLINUX_MAP is not set +# CONFIG_DEBUG_FORCE_WEAK_PER_CPU is not set +# end of Compile-time checks and compiler options + +# +# Generic Kernel Debugging Instruments +# +CONFIG_MAGIC_SYSRQ=y +CONFIG_MAGIC_SYSRQ_DEFAULT_ENABLE=0x01b6 +CONFIG_MAGIC_SYSRQ_SERIAL=y +CONFIG_MAGIC_SYSRQ_SERIAL_SEQUENCE="" +CONFIG_DEBUG_FS=y +CONFIG_DEBUG_FS_ALLOW_ALL=y +# CONFIG_DEBUG_FS_ALLOW_NONE is not set +CONFIG_HAVE_ARCH_KGDB=y +# CONFIG_KGDB is not set +CONFIG_ARCH_HAS_UBSAN=y +# CONFIG_UBSAN is not set +CONFIG_HAVE_ARCH_KCSAN=y +CONFIG_HAVE_KCSAN_COMPILER=y +# CONFIG_KCSAN is not set +# end of Generic Kernel Debugging Instruments + +# +# Networking Debugging +# +# CONFIG_NET_DEV_REFCNT_TRACKER is not set +# CONFIG_NET_NS_REFCNT_TRACKER is not set +# CONFIG_DEBUG_NET is not set +# CONFIG_DEBUG_NET_SMALL_RTNL is not set +# end of Networking Debugging + +# +# Memory Debugging +# +# CONFIG_PAGE_EXTENSION is not set +# CONFIG_DEBUG_PAGEALLOC is not set +CONFIG_SLUB_DEBUG=y +# CONFIG_SLUB_DEBUG_ON is not set +# CONFIG_PAGE_OWNER is not set +# CONFIG_PAGE_TABLE_CHECK is not set +# CONFIG_PAGE_POISONING is not set +# CONFIG_DEBUG_PAGE_REF is not set +# CONFIG_DEBUG_RODATA_TEST is not set +CONFIG_ARCH_HAS_DEBUG_WX=y +CONFIG_DEBUG_WX=y +CONFIG_ARCH_HAS_PTDUMP=y +CONFIG_PTDUMP=y +# CONFIG_PTDUMP_DEBUGFS is not set +CONFIG_HAVE_DEBUG_KMEMLEAK=y +# CONFIG_DEBUG_KMEMLEAK is not set +# CONFIG_PER_VMA_LOCK_STATS is not set +# CONFIG_DEBUG_OBJECTS is not set +# CONFIG_SHRINKER_DEBUG is not set +# CONFIG_DEBUG_STACK_USAGE is not set +# CONFIG_SCHED_STACK_END_CHECK is not set +CONFIG_ARCH_HAS_DEBUG_VM_PGTABLE=y +# CONFIG_DEBUG_VFS is not set +# CONFIG_DEBUG_VM is not set +# CONFIG_DEBUG_VM_PGTABLE is not set +CONFIG_ARCH_HAS_DEBUG_VIRTUAL=y +# CONFIG_DEBUG_VIRTUAL is not set +# CONFIG_DEBUG_MEMORY_INIT is not set +# CONFIG_DEBUG_PER_CPU_MAPS is not set +CONFIG_ARCH_SUPPORTS_KMAP_LOCAL_FORCE_MAP=y +# CONFIG_DEBUG_KMAP_LOCAL_FORCE_MAP is not set +# CONFIG_MEM_ALLOC_PROFILING is not set +CONFIG_HAVE_ARCH_KASAN=y +CONFIG_HAVE_ARCH_KASAN_VMALLOC=y +CONFIG_CC_HAS_KASAN_GENERIC=y +CONFIG_CC_HAS_WORKING_NOSANITIZE_ADDRESS=y +# CONFIG_KASAN is not set +CONFIG_HAVE_ARCH_KFENCE=y +# CONFIG_KFENCE is not set +CONFIG_HAVE_ARCH_KMSAN=y +# end of Memory Debugging + +# CONFIG_DEBUG_SHIRQ is not set + +# +# Debug Oops, Lockups and Hangs +# +# CONFIG_PANIC_ON_OOPS is not set +CONFIG_PANIC_TIMEOUT=0 +CONFIG_LOCKUP_DETECTOR=y +CONFIG_SOFTLOCKUP_DETECTOR=y +# CONFIG_BOOTPARAM_SOFTLOCKUP_PANIC is not set +CONFIG_HAVE_HARDLOCKUP_DETECTOR_BUDDY=y +CONFIG_HARDLOCKUP_DETECTOR=y +# CONFIG_HARDLOCKUP_DETECTOR_PREFER_BUDDY is not set +CONFIG_HARDLOCKUP_DETECTOR_PERF=y +# CONFIG_HARDLOCKUP_DETECTOR_BUDDY is not set +# CONFIG_HARDLOCKUP_DETECTOR_ARCH is not set +CONFIG_HARDLOCKUP_DETECTOR_COUNTS_HRTIMER=y +CONFIG_HARDLOCKUP_CHECK_TIMESTAMP=y +# CONFIG_BOOTPARAM_HARDLOCKUP_PANIC is not set +CONFIG_DETECT_HUNG_TASK=y +CONFIG_DEFAULT_HUNG_TASK_TIMEOUT=120 +CONFIG_BOOTPARAM_HUNG_TASK_PANIC=0 +CONFIG_DETECT_HUNG_TASK_BLOCKER=y +# CONFIG_WQ_WATCHDOG is not set +CONFIG_WQ_CPU_INTENSIVE_REPORT=y +# CONFIG_TEST_LOCKUP is not set +# end of Debug Oops, Lockups and Hangs + +# +# Scheduler Debugging +# +CONFIG_SCHED_INFO=y +CONFIG_SCHEDSTATS=y +# end of Scheduler Debugging + +# CONFIG_DEBUG_PREEMPT is not set + +# +# Lock Debugging (spinlocks, mutexes, etc...) +# +CONFIG_LOCK_DEBUGGING_SUPPORT=y +# CONFIG_PROVE_LOCKING is not set +# CONFIG_LOCK_STAT is not set +# CONFIG_DEBUG_RT_MUTEXES is not set +# CONFIG_DEBUG_SPINLOCK is not set +# CONFIG_DEBUG_MUTEXES is not set +# CONFIG_DEBUG_WW_MUTEX_SLOWPATH is not set +# CONFIG_DEBUG_RWSEMS is not set +# CONFIG_DEBUG_LOCK_ALLOC is not set +# CONFIG_DEBUG_ATOMIC_SLEEP is not set +# CONFIG_DEBUG_LOCKING_API_SELFTESTS is not set +# CONFIG_LOCK_TORTURE_TEST is not set +# CONFIG_WW_MUTEX_SELFTEST is not set +# CONFIG_SCF_TORTURE_TEST is not set +# CONFIG_CSD_LOCK_WAIT_DEBUG is not set +# end of Lock Debugging (spinlocks, mutexes, etc...) + +CONFIG_NMI_CHECK_CPU=y +# CONFIG_DEBUG_IRQFLAGS is not set +CONFIG_STACKTRACE=y +# CONFIG_DEBUG_KOBJECT is not set + +# +# Debug kernel data structures +# +# CONFIG_DEBUG_LIST is not set +# CONFIG_DEBUG_PLIST is not set +# CONFIG_DEBUG_SG is not set +# CONFIG_DEBUG_NOTIFIERS is not set +# CONFIG_DEBUG_MAPLE_TREE is not set +# end of Debug kernel data structures + +# +# RCU Debugging +# +# CONFIG_RCU_SCALE_TEST is not set +# CONFIG_RCU_TORTURE_TEST is not set +# CONFIG_RCU_REF_SCALE_TEST is not set +CONFIG_RCU_CPU_STALL_TIMEOUT=60 +CONFIG_RCU_EXP_CPU_STALL_TIMEOUT=0 +CONFIG_RCU_CPU_STALL_CPUTIME=y +# CONFIG_RCU_TRACE is not set +# CONFIG_RCU_EQS_DEBUG is not set +# end of RCU Debugging + +# CONFIG_DEBUG_WQ_FORCE_RR_CPU is not set +# CONFIG_CPU_HOTPLUG_STATE_CONTROL is not set +CONFIG_LATENCYTOP=y +# CONFIG_DEBUG_CGROUP_REF is not set +CONFIG_USER_STACKTRACE_SUPPORT=y +CONFIG_NOP_TRACER=y +CONFIG_HAVE_RETHOOK=y +CONFIG_RETHOOK=y +CONFIG_HAVE_FUNCTION_TRACER=y +CONFIG_HAVE_DYNAMIC_FTRACE=y +CONFIG_HAVE_DYNAMIC_FTRACE_WITH_REGS=y +CONFIG_HAVE_DYNAMIC_FTRACE_WITH_DIRECT_CALLS=y +CONFIG_HAVE_DYNAMIC_FTRACE_WITH_ARGS=y +CONFIG_HAVE_FTRACE_REGS_HAVING_PT_REGS=y +CONFIG_HAVE_DYNAMIC_FTRACE_NO_PATCHABLE=y +CONFIG_HAVE_DYNAMIC_FTRACE_WITH_JMP=y +CONFIG_HAVE_SYSCALL_TRACEPOINTS=y +CONFIG_HAVE_FENTRY=y +CONFIG_HAVE_OBJTOOL_MCOUNT=y +CONFIG_HAVE_OBJTOOL_NOP_MCOUNT=y +CONFIG_HAVE_C_RECORDMCOUNT=y +CONFIG_HAVE_BUILDTIME_MCOUNT_SORT=y +CONFIG_TRACE_CLOCK=y +CONFIG_RING_BUFFER=y +CONFIG_EVENT_TRACING=y +CONFIG_CONTEXT_SWITCH_TRACER=y +CONFIG_TRACING=y +CONFIG_TRACING_SUPPORT=y +CONFIG_FTRACE=y +CONFIG_TRACEFS_AUTOMOUNT_DEPRECATED=y +# CONFIG_BOOTTIME_TRACING is not set +# CONFIG_FUNCTION_TRACER is not set +# CONFIG_STACK_TRACER is not set +# CONFIG_IRQSOFF_TRACER is not set +# CONFIG_PREEMPT_TRACER is not set +# CONFIG_SCHED_TRACER is not set +# CONFIG_HWLAT_TRACER is not set +# CONFIG_OSNOISE_TRACER is not set +# CONFIG_TIMERLAT_TRACER is not set +# CONFIG_MMIOTRACE is not set +# CONFIG_ENABLE_DEFAULT_TRACERS is not set +# CONFIG_FTRACE_SYSCALLS is not set +# CONFIG_TRACER_SNAPSHOT is not set +CONFIG_BRANCH_PROFILE_NONE=y +# CONFIG_PROFILE_ANNOTATED_BRANCHES is not set +# CONFIG_PROFILE_ALL_BRANCHES is not set +# CONFIG_BLK_DEV_IO_TRACE is not set +CONFIG_KPROBE_EVENTS=y +CONFIG_UPROBE_EVENTS=y +CONFIG_EPROBE_EVENTS=y +CONFIG_BPF_EVENTS=y +CONFIG_DYNAMIC_EVENTS=y +CONFIG_PROBE_EVENTS=y +# CONFIG_SYNTH_EVENTS is not set +# CONFIG_USER_EVENTS is not set +# CONFIG_HIST_TRIGGERS is not set +# CONFIG_TRACE_EVENT_INJECT is not set +# CONFIG_TRACEPOINT_BENCHMARK is not set +# CONFIG_RING_BUFFER_BENCHMARK is not set +# CONFIG_TRACE_EVAL_MAP_FILE is not set +# CONFIG_RING_BUFFER_STARTUP_TEST is not set +# CONFIG_RING_BUFFER_VALIDATE_TIME_DELTAS is not set +# CONFIG_PREEMPTIRQ_DELAY_TEST is not set +# CONFIG_KPROBE_EVENT_GEN_TEST is not set +# CONFIG_RV is not set +# CONFIG_PROVIDE_OHCI1394_DMA_INIT is not set +# CONFIG_SAMPLES is not set +CONFIG_HAVE_SAMPLE_FTRACE_DIRECT=y +CONFIG_HAVE_SAMPLE_FTRACE_DIRECT_MULTI=y +CONFIG_ARCH_HAS_DEVMEM_IS_ALLOWED=y +CONFIG_STRICT_DEVMEM=y +# CONFIG_IO_STRICT_DEVMEM is not set + +# +# x86 Debugging +# +CONFIG_EARLY_PRINTK_USB=y +CONFIG_X86_VERBOSE_BOOTUP=y +CONFIG_EARLY_PRINTK=y +CONFIG_EARLY_PRINTK_DBGP=y +# CONFIG_EARLY_PRINTK_USB_XDBC is not set +# CONFIG_EFI_PGT_DUMP is not set +# CONFIG_DEBUG_TLBFLUSH is not set +CONFIG_HAVE_MMIOTRACE_SUPPORT=y +# CONFIG_X86_DECODER_SELFTEST is not set +CONFIG_IO_DELAY_0X80=y +# CONFIG_IO_DELAY_0XED is not set +# CONFIG_IO_DELAY_UDELAY is not set +# CONFIG_IO_DELAY_NONE is not set +CONFIG_DEBUG_BOOT_PARAMS=y +# CONFIG_CPA_DEBUG is not set +CONFIG_DEBUG_ENTRY=y +# CONFIG_DEBUG_NMI_SELFTEST is not set +CONFIG_X86_DEBUG_FPU=y +# CONFIG_PUNIT_ATOM_DEBUG is not set +CONFIG_UNWINDER_ORC=y +CONFIG_UNWINDER_FRAME_POINTER=y +# end of x86 Debugging + +# +# Kernel Testing and Coverage +# +# CONFIG_KUNIT is not set +# CONFIG_NOTIFIER_ERROR_INJECTION is not set +# CONFIG_FUNCTION_ERROR_INJECTION is not set +# CONFIG_FAULT_INJECTION is not set +CONFIG_ARCH_HAS_KCOV=y +# CONFIG_KCOV is not set +CONFIG_RUNTIME_TESTING_MENU=y +# CONFIG_TEST_DHRY is not set +# CONFIG_LKDTM is not set +# CONFIG_TEST_MIN_HEAP is not set +# CONFIG_TEST_DIV64 is not set +# CONFIG_TEST_MULDIV64 is not set +# CONFIG_BACKTRACE_SELF_TEST is not set +# CONFIG_TEST_REF_TRACKER is not set +# CONFIG_RBTREE_TEST is not set +# CONFIG_REED_SOLOMON_TEST is not set +# CONFIG_INTERVAL_TREE_TEST is not set +# CONFIG_PERCPU_TEST is not set +# CONFIG_ATOMIC64_SELFTEST is not set +# CONFIG_TEST_HEXDUMP is not set +# CONFIG_TEST_KSTRTOX is not set +# CONFIG_TEST_BITMAP is not set +# CONFIG_TEST_UUID is not set +# CONFIG_TEST_XARRAY is not set +# CONFIG_TEST_MAPLE_TREE is not set +# CONFIG_TEST_RHASHTABLE is not set +# CONFIG_TEST_IDA is not set +# CONFIG_TEST_LKM is not set +# CONFIG_TEST_BITOPS is not set +# CONFIG_TEST_VMALLOC is not set +# CONFIG_TEST_BPF is not set +# CONFIG_FIND_BIT_BENCHMARK is not set +# CONFIG_TEST_FIRMWARE is not set +# CONFIG_TEST_SYSCTL is not set +# CONFIG_TEST_UDELAY is not set +# CONFIG_TEST_STATIC_KEYS is not set +# CONFIG_TEST_DYNAMIC_DEBUG is not set +# CONFIG_TEST_KMOD is not set +# CONFIG_TEST_KALLSYMS is not set +# CONFIG_TEST_MEMCAT_P is not set +# CONFIG_TEST_MEMINIT is not set +# CONFIG_TEST_HMM is not set +# CONFIG_TEST_FREE_PAGES is not set +# CONFIG_TEST_FPU is not set +# CONFIG_TEST_CLOCKSOURCE_WATCHDOG is not set +# CONFIG_TEST_OBJPOOL is not set +CONFIG_ARCH_USE_MEMTEST=y +CONFIG_MEMTEST=y +# end of Kernel Testing and Coverage + +# +# Rust hacking +# +# end of Rust hacking +# end of Kernel hacking + +CONFIG_IO_URING_ZCRX=y + +# +# Additional options from older config +# +CONFIG_9P_FS=y +# CONFIG_9P_FS_POSIX_ACL is not set +# CONFIG_9P_FS_SECURITY is not set +# CONFIG_ACERHDF is not set +# CONFIG_ACER_WMI is not set +# CONFIG_ACPI_EC_DEBUGFS is not set +# CONFIG_ACPI_SBS is not set +# CONFIG_ACPI_TAD is not set +# CONFIG_AFS_FS is not set +# CONFIG_AHCI_DWC is not set +# CONFIG_AMD_SECURE_AVIC is not set +CONFIG_ARCH_HAS_CC_PLATFORM=y +CONFIG_ARCH_HAS_DMA_OPS=y +CONFIG_ARCH_HAS_FORCE_DMA_UNENCRYPTED=y +CONFIG_ATA_ACPI=y +CONFIG_ATA_BMDMA=y +CONFIG_ATA_FORCE=y +# CONFIG_ATA_GENERIC is not set +CONFIG_ATA_PIIX=y +CONFIG_ATA_SFF=y +CONFIG_ATA_VERBOSE_ERROR=y +CONFIG_BLK_CGROUP_PUNT_BIO=y +# CONFIG_BRIDGE_CFM is not set +CONFIG_BRIDGE_IGMP_SNOOPING=y +# CONFIG_BRIDGE_MRP is not set +CONFIG_BRIDGE_NETFILTER=y +# CONFIG_BRIDGE_NF_EBTABLES is not set +# CONFIG_BRIDGE_NF_EBTABLES_LEGACY is not set +CONFIG_BRIDGE_VLAN_FILTERING=y +# CONFIG_BTRFS_ASSERT is not set +CONFIG_BTRFS_DEBUG=y +# CONFIG_BTRFS_EXPERIMENTAL is not set +CONFIG_BTRFS_FS_POSIX_ACL=y +# CONFIG_BTRFS_FS_RUN_SANITY_TESTS is not set +# CONFIG_BT_VIRTIO is not set +CONFIG_CDROM=y +# CONFIG_CEPH_FS is not set +# CONFIG_CIFS is not set +# CONFIG_CODA_FS is not set +# CONFIG_COMPAL_LAPTOP is not set +CONFIG_CPU_IDLE_GOV_HALTPOLL=y +# CONFIG_CRYPTO_DEV_VIRTIO is not set +CONFIG_CRYPTO_LIB_AESGCM=y +# CONFIG_DEFAULT_SECURITY_SELINUX is not set +CONFIG_DMA_COHERENT_POOL=y +CONFIG_DMIID=y +CONFIG_DMI_SCAN_MACHINE_NON_EFI_FALLBACK=y +# CONFIG_DMI_SYSFS is not set +# CONFIG_DRM_VIRTIO_GPU is not set +# CONFIG_DRM_XEN_FRONTEND is not set +CONFIG_DYNAMIC_PHYSICAL_MASK=y +CONFIG_FIND_NORMAL_PAGE=y +CONFIG_FW_CACHE=y +CONFIG_GRACE_PERIOD=y +CONFIG_HALTPOLL_CPUIDLE=m +CONFIG_HAVE_KVM_ARCH_GMEM_INVALIDATE=y +CONFIG_HAVE_KVM_ARCH_GMEM_POPULATE=y +CONFIG_HAVE_KVM_ARCH_GMEM_PREPARE=y +CONFIG_HAVE_RELIABLE_STACKTRACE=y +CONFIG_HIBERNATE_CALLBACKS=y +CONFIG_HVC_DRIVER=y +CONFIG_HVC_IRQ=y +CONFIG_HVC_XEN=y +CONFIG_HVC_XEN_FRONTEND=y +# CONFIG_HW_RANDOM_VIRTIO is not set +# CONFIG_INTEL_OAKTRAIL is not set +# CONFIG_INTEL_TDX_GUEST is not set +CONFIG_IP6_NF_FILTER=y +CONFIG_IP6_NF_IPTABLES_LEGACY=y +CONFIG_IP6_NF_MANGLE=y +# CONFIG_IP6_NF_MATCH_AH is not set +# CONFIG_IP6_NF_MATCH_EUI64 is not set +# CONFIG_IP6_NF_MATCH_FRAG is not set +# CONFIG_IP6_NF_MATCH_HL is not set +# CONFIG_IP6_NF_MATCH_IPV6HEADER is not set +# CONFIG_IP6_NF_MATCH_MH is not set +# CONFIG_IP6_NF_MATCH_OPTS is not set +# CONFIG_IP6_NF_MATCH_RPFILTER is not set +# CONFIG_IP6_NF_MATCH_RT is not set +# CONFIG_IP6_NF_MATCH_SRH is not set +CONFIG_IP6_NF_NAT=y +CONFIG_IP6_NF_RAW=y +# CONFIG_IP6_NF_SECURITY is not set +# CONFIG_IP6_NF_TARGET_HL is not set +CONFIG_IP6_NF_TARGET_MASQUERADE=y +# CONFIG_IP6_NF_TARGET_NPT is not set +# CONFIG_IP6_NF_TARGET_REJECT is not set +# CONFIG_IP6_NF_TARGET_SYNPROXY is not set +CONFIG_IPVLAN_L3S=y +# CONFIG_IPVTAP is not set +# CONFIG_IP_NF_ARPFILTER is not set +# CONFIG_IP_NF_ARPTABLES is not set +CONFIG_IP_NF_FILTER=y +CONFIG_IP_NF_IPTABLES_LEGACY=y +CONFIG_IP_NF_MANGLE=y +# CONFIG_IP_NF_MATCH_AH is not set +# CONFIG_IP_NF_MATCH_ECN is not set +# CONFIG_IP_NF_MATCH_RPFILTER is not set +# CONFIG_IP_NF_MATCH_TTL is not set +CONFIG_IP_NF_NAT=y +CONFIG_IP_NF_RAW=y +# CONFIG_IP_NF_SECURITY is not set +# CONFIG_IP_NF_TARGET_ECN is not set +CONFIG_IP_NF_TARGET_MASQUERADE=y +# CONFIG_IP_NF_TARGET_NETMAP is not set +CONFIG_IP_NF_TARGET_REDIRECT=y +# CONFIG_IP_NF_TARGET_REJECT is not set +# CONFIG_IP_NF_TARGET_SYNPROXY is not set +# CONFIG_IP_NF_TARGET_TTL is not set +CONFIG_IP_PNP_BOOTP=y +CONFIG_IP_PNP_DHCP=y +CONFIG_IP_PNP_RARP=y +# CONFIG_IP_VS_DEBUG is not set +# CONFIG_IP_VS_DH is not set +# CONFIG_IP_VS_FO is not set +# CONFIG_IP_VS_FTP is not set +# CONFIG_IP_VS_IPV6 is not set +# CONFIG_IP_VS_LBLC is not set +# CONFIG_IP_VS_LBLCR is not set +# CONFIG_IP_VS_LC is not set +# CONFIG_IP_VS_MH is not set +CONFIG_IP_VS_MH_TAB_INDEX=12 +CONFIG_IP_VS_NFCT=y +# CONFIG_IP_VS_NQ is not set +# CONFIG_IP_VS_OVF is not set +# CONFIG_IP_VS_PROTO_AH is not set +# CONFIG_IP_VS_PROTO_ESP is not set +# CONFIG_IP_VS_PROTO_SCTP is not set +CONFIG_IP_VS_PROTO_TCP=y +CONFIG_IP_VS_PROTO_UDP=y +CONFIG_IP_VS_RR=y +# CONFIG_IP_VS_SED is not set +# CONFIG_IP_VS_SH is not set +CONFIG_IP_VS_SH_TAB_BITS=8 +CONFIG_IP_VS_TAB_BITS=12 +# CONFIG_IP_VS_TWOS is not set +# CONFIG_IP_VS_WLC is not set +# CONFIG_IP_VS_WRR is not set +CONFIG_JOLIET=y +CONFIG_KVM_GENERIC_MEMORY_ATTRIBUTES=y +CONFIG_KVM_GUEST=y +# CONFIG_LEDS_APU is not set +# CONFIG_LEDS_INTEL_SS4200 is not set +# CONFIG_LEDS_MLXCPLD is not set +# CONFIG_LEDS_TRIGGER_DISK is not set +# CONFIG_LENOVO_SE10_WDT is not set +# CONFIG_LENOVO_SE30_WDT is not set +# CONFIG_LENOVO_WMI_GAMEZONE is not set +CONFIG_LLC=y +CONFIG_LOCKD=y +CONFIG_LOCKD_V4=y +CONFIG_LSM_MMAP_MIN_ADDR=65536 +# CONFIG_MACVTAP is not set +CONFIG_MOUSE_PS2_LIFEBOOK=y +# CONFIG_MSEAL_SYSTEM_MAPPINGS is not set +# CONFIG_MSI_LAPTOP is not set +# CONFIG_MSI_WMI_PLATFORM is not set +CONFIG_NETFILTER_FAMILY_BRIDGE=y +CONFIG_NETFILTER_NETLINK=y +# CONFIG_NETFILTER_NETLINK_HOOK is not set +CONFIG_NETFILTER_SKIP_EGRESS=y +# CONFIG_NETFILTER_XTABLES_COMPAT is not set +CONFIG_NETFILTER_XTABLES_LEGACY=y +# CONFIG_NETFILTER_XT_CONNMARK is not set +CONFIG_NETFILTER_XT_MARK=y +CONFIG_NETFILTER_XT_MATCH_ADDRTYPE=y +CONFIG_NETFILTER_XT_MATCH_BPF=y +# CONFIG_NETFILTER_XT_MATCH_CGROUP is not set +# CONFIG_NETFILTER_XT_MATCH_CLUSTER is not set +# CONFIG_NETFILTER_XT_MATCH_COMMENT is not set +# CONFIG_NETFILTER_XT_MATCH_CONNBYTES is not set +# CONFIG_NETFILTER_XT_MATCH_CONNLABEL is not set +# CONFIG_NETFILTER_XT_MATCH_CONNLIMIT is not set +# CONFIG_NETFILTER_XT_MATCH_CONNMARK is not set +CONFIG_NETFILTER_XT_MATCH_CONNTRACK=y +# CONFIG_NETFILTER_XT_MATCH_CPU is not set +# CONFIG_NETFILTER_XT_MATCH_DCCP is not set +# CONFIG_NETFILTER_XT_MATCH_DEVGROUP is not set +# CONFIG_NETFILTER_XT_MATCH_DSCP is not set +# CONFIG_NETFILTER_XT_MATCH_ECN is not set +# CONFIG_NETFILTER_XT_MATCH_ESP is not set +# CONFIG_NETFILTER_XT_MATCH_HASHLIMIT is not set +# CONFIG_NETFILTER_XT_MATCH_HELPER is not set +# CONFIG_NETFILTER_XT_MATCH_HL is not set +# CONFIG_NETFILTER_XT_MATCH_IPCOMP is not set +# CONFIG_NETFILTER_XT_MATCH_IPRANGE is not set +CONFIG_NETFILTER_XT_MATCH_IPVS=y +# CONFIG_NETFILTER_XT_MATCH_L2TP is not set +# CONFIG_NETFILTER_XT_MATCH_LENGTH is not set +# CONFIG_NETFILTER_XT_MATCH_LIMIT is not set +# CONFIG_NETFILTER_XT_MATCH_MAC is not set +# CONFIG_NETFILTER_XT_MATCH_MARK is not set +# CONFIG_NETFILTER_XT_MATCH_MULTIPORT is not set +# CONFIG_NETFILTER_XT_MATCH_NFACCT is not set +# CONFIG_NETFILTER_XT_MATCH_OSF is not set +# CONFIG_NETFILTER_XT_MATCH_OWNER is not set +# CONFIG_NETFILTER_XT_MATCH_PHYSDEV is not set +# CONFIG_NETFILTER_XT_MATCH_PKTTYPE is not set +# CONFIG_NETFILTER_XT_MATCH_POLICY is not set +# CONFIG_NETFILTER_XT_MATCH_QUOTA is not set +# CONFIG_NETFILTER_XT_MATCH_RATEEST is not set +# CONFIG_NETFILTER_XT_MATCH_REALM is not set +# CONFIG_NETFILTER_XT_MATCH_RECENT is not set +CONFIG_NETFILTER_XT_MATCH_SCTP=y +# CONFIG_NETFILTER_XT_MATCH_SOCKET is not set +# CONFIG_NETFILTER_XT_MATCH_STATE is not set +# CONFIG_NETFILTER_XT_MATCH_STATISTIC is not set +# CONFIG_NETFILTER_XT_MATCH_STRING is not set +# CONFIG_NETFILTER_XT_MATCH_TCPMSS is not set +# CONFIG_NETFILTER_XT_MATCH_TIME is not set +# CONFIG_NETFILTER_XT_MATCH_U32 is not set +CONFIG_NETFILTER_XT_NAT=y +# CONFIG_NETFILTER_XT_TARGET_AUDIT is not set +# CONFIG_NETFILTER_XT_TARGET_CHECKSUM is not set +# CONFIG_NETFILTER_XT_TARGET_CLASSIFY is not set +# CONFIG_NETFILTER_XT_TARGET_CONNMARK is not set +# CONFIG_NETFILTER_XT_TARGET_CT is not set +# CONFIG_NETFILTER_XT_TARGET_DSCP is not set +# CONFIG_NETFILTER_XT_TARGET_HL is not set +# CONFIG_NETFILTER_XT_TARGET_HMARK is not set +# CONFIG_NETFILTER_XT_TARGET_IDLETIMER is not set +# CONFIG_NETFILTER_XT_TARGET_LED is not set +# CONFIG_NETFILTER_XT_TARGET_LOG is not set +# CONFIG_NETFILTER_XT_TARGET_MARK is not set +CONFIG_NETFILTER_XT_TARGET_MASQUERADE=y +# CONFIG_NETFILTER_XT_TARGET_NETMAP is not set +# CONFIG_NETFILTER_XT_TARGET_NFLOG is not set +# CONFIG_NETFILTER_XT_TARGET_NFQUEUE is not set +# CONFIG_NETFILTER_XT_TARGET_NOTRACK is not set +# CONFIG_NETFILTER_XT_TARGET_RATEEST is not set +CONFIG_NETFILTER_XT_TARGET_REDIRECT=y +# CONFIG_NETFILTER_XT_TARGET_SECMARK is not set +# CONFIG_NETFILTER_XT_TARGET_TCPMSS is not set +# CONFIG_NETFILTER_XT_TARGET_TCPOPTSTRIP is not set +# CONFIG_NETFILTER_XT_TARGET_TEE is not set +# CONFIG_NETFILTER_XT_TARGET_TPROXY is not set +# CONFIG_NETFILTER_XT_TARGET_TRACE is not set +CONFIG_NET_9P_VIRTIO=y +# CONFIG_NET_9P_XEN is not set +# CONFIG_NET_ACT_BPF is not set +# CONFIG_NET_ACT_CSUM is not set +# CONFIG_NET_ACT_GACT is not set +# CONFIG_NET_ACT_GATE is not set +# CONFIG_NET_ACT_IFE is not set +# CONFIG_NET_ACT_MIRRED is not set +# CONFIG_NET_ACT_MPLS is not set +# CONFIG_NET_ACT_NAT is not set +# CONFIG_NET_ACT_PEDIT is not set +# CONFIG_NET_ACT_POLICE is not set +# CONFIG_NET_ACT_SAMPLE is not set +# CONFIG_NET_ACT_SIMP is not set +# CONFIG_NET_ACT_SKBEDIT is not set +# CONFIG_NET_ACT_SKBMOD is not set +# CONFIG_NET_ACT_TUNNEL_KEY is not set +# CONFIG_NET_ACT_VLAN is not set +CONFIG_NET_CLS=y +CONFIG_NET_CRC32C=y +# CONFIG_NET_EMATCH_CMP is not set +# CONFIG_NET_EMATCH_IPT is not set +# CONFIG_NET_EMATCH_META is not set +# CONFIG_NET_EMATCH_NBYTE is not set +CONFIG_NET_EMATCH_STACK=32 +# CONFIG_NET_EMATCH_TEXT is not set +# CONFIG_NET_EMATCH_U32 is not set +CONFIG_NET_HANDSHAKE=y +# CONFIG_NET_SCH_INGRESS is not set +# CONFIG_NET_TC_SKB_EXT is not set +# CONFIG_NFSD is not set +CONFIG_NFS_ACL_SUPPORT=y +CONFIG_NFS_COMMON=y +CONFIG_NFS_DISABLE_UDP_SUPPORT=y +CONFIG_NFS_FS=y +# CONFIG_NFS_FSCACHE is not set +# CONFIG_NFS_SWAP is not set +CONFIG_NFS_USE_KERNEL_DNS=y +# CONFIG_NFS_USE_LEGACY_DNS is not set +# CONFIG_NFS_V2 is not set +CONFIG_NFS_V3=y +CONFIG_NFS_V3_ACL=y +CONFIG_NFS_V4=y +# CONFIG_NFS_V4_1 is not set +CONFIG_NFT_COMPAT=y +# CONFIG_NFT_CONNLIMIT is not set +CONFIG_NFT_CT=y +# CONFIG_NFT_DUP_IPV4 is not set +# CONFIG_NFT_DUP_IPV6 is not set +# CONFIG_NFT_EXTHDR_DCCP is not set +CONFIG_NFT_FIB=y +CONFIG_NFT_FIB_IPV4=y +CONFIG_NFT_FIB_IPV6=y +# CONFIG_NFT_HASH is not set +# CONFIG_NFT_LIMIT is not set +# CONFIG_NFT_LOG is not set +CONFIG_NFT_MASQ=y +CONFIG_NFT_NAT=y +# CONFIG_NFT_NUMGEN is not set +# CONFIG_NFT_OSF is not set +# CONFIG_NFT_QUOTA is not set +# CONFIG_NFT_REDIR is not set +# CONFIG_NFT_REJECT is not set +# CONFIG_NFT_SOCKET is not set +# CONFIG_NFT_SYNPROXY is not set +# CONFIG_NFT_TPROXY is not set +# CONFIG_NFT_TUNNEL is not set +# CONFIG_NFT_XFRM is not set +# CONFIG_NF_CONNTRACK_AMANDA is not set +# CONFIG_NF_CONNTRACK_BRIDGE is not set +# CONFIG_NF_CONNTRACK_EVENTS is not set +CONFIG_NF_CONNTRACK_FTP=y +# CONFIG_NF_CONNTRACK_H323 is not set +# CONFIG_NF_CONNTRACK_IRC is not set +# CONFIG_NF_CONNTRACK_LABELS is not set +# CONFIG_NF_CONNTRACK_MARK is not set +# CONFIG_NF_CONNTRACK_NETBIOS_NS is not set +# CONFIG_NF_CONNTRACK_PPTP is not set +# CONFIG_NF_CONNTRACK_PROCFS is not set +# CONFIG_NF_CONNTRACK_SANE is not set +# CONFIG_NF_CONNTRACK_SECMARK is not set +# CONFIG_NF_CONNTRACK_SIP is not set +# CONFIG_NF_CONNTRACK_SNMP is not set +CONFIG_NF_CONNTRACK_TFTP=y +# CONFIG_NF_CONNTRACK_TIMEOUT is not set +# CONFIG_NF_CONNTRACK_TIMESTAMP is not set +# CONFIG_NF_CONNTRACK_ZONES is not set +CONFIG_NF_CT_NETLINK=y +CONFIG_NF_CT_PROTO_SCTP=y +CONFIG_NF_CT_PROTO_UDPLITE=y +CONFIG_NF_DEFRAG_IPV4=y +CONFIG_NF_DEFRAG_IPV6=y +# CONFIG_NF_FLOW_TABLE is not set +CONFIG_NF_NAT=y +CONFIG_NF_NAT_FTP=y +CONFIG_NF_NAT_MASQUERADE=y +CONFIG_NF_NAT_REDIRECT=y +CONFIG_NF_NAT_TFTP=y +# CONFIG_NF_TABLES_ARP is not set +# CONFIG_NF_TABLES_BRIDGE is not set +# CONFIG_NF_TABLES_INET is not set +CONFIG_NF_TABLES_IPV4=y +CONFIG_NF_TABLES_IPV6=y +# CONFIG_NF_TABLES_NETDEV is not set +CONFIG_NOINSTR_VALIDATION=y +# CONFIG_NSM is not set +CONFIG_PARAVIRT_CLOCK=y +# CONFIG_PARAVIRT_DEBUG is not set +CONFIG_PARAVIRT_SPINLOCKS=y +# CONFIG_PARAVIRT_TIME_ACCOUNTING is not set +CONFIG_PARAVIRT_XXL=y +# CONFIG_PATA_ACPI is not set +# CONFIG_PATA_ALI is not set +CONFIG_PATA_AMD=y +# CONFIG_PATA_ARTOP is not set +# CONFIG_PATA_ATIIXP is not set +# CONFIG_PATA_ATP867X is not set +# CONFIG_PATA_CMD640_PCI is not set +# CONFIG_PATA_CMD64X is not set +# CONFIG_PATA_CYPRESS is not set +# CONFIG_PATA_EFAR is not set +# CONFIG_PATA_HPT366 is not set +# CONFIG_PATA_HPT37X is not set +# CONFIG_PATA_HPT3X2N is not set +# CONFIG_PATA_HPT3X3 is not set +# CONFIG_PATA_IT8213 is not set +# CONFIG_PATA_IT821X is not set +# CONFIG_PATA_JMICRON is not set +# CONFIG_PATA_LEGACY is not set +# CONFIG_PATA_MARVELL is not set +# CONFIG_PATA_MPIIX is not set +# CONFIG_PATA_NETCELL is not set +# CONFIG_PATA_NINJA32 is not set +# CONFIG_PATA_NS87410 is not set +# CONFIG_PATA_NS87415 is not set +# CONFIG_PATA_OLDPIIX is not set +# CONFIG_PATA_OPTI is not set +# CONFIG_PATA_OPTIDMA is not set +# CONFIG_PATA_PDC2027X is not set +# CONFIG_PATA_PDC_OLD is not set +# CONFIG_PATA_RADISYS is not set +# CONFIG_PATA_RDC is not set +# CONFIG_PATA_RZ1000 is not set +# CONFIG_PATA_SCH is not set +# CONFIG_PATA_SERVERWORKS is not set +# CONFIG_PATA_SIL680 is not set +# CONFIG_PATA_SIS is not set +CONFIG_PATA_TIMINGS=y +# CONFIG_PATA_TOSHIBA is not set +# CONFIG_PATA_TRIFLEX is not set +# CONFIG_PATA_VIA is not set +# CONFIG_PATA_WINBOND is not set +CONFIG_PCI_XEN=y +# CONFIG_PDC_ADMA is not set +# CONFIG_PM_AUTOSLEEP is not set +CONFIG_PM_GENERIC_DOMAINS_SLEEP=y +CONFIG_PM_SLEEP=y +CONFIG_PM_SLEEP_SMP=y +# CONFIG_PM_USERSPACE_AUTOSLEEP is not set +# CONFIG_PM_WAKELOCKS is not set +CONFIG_PTP_1588_CLOCK_KVM=y +CONFIG_RAID6_PQ=m +CONFIG_RAID6_PQ_BENCHMARK=y +CONFIG_REF_TRACKER=y +CONFIG_ROOT_NFS=y +CONFIG_RPCSEC_GSS_KRB5=y +# CONFIG_SAMSUNG_Q10 is not set +# CONFIG_SATA_ACARD_AHCI is not set +CONFIG_SATA_AHCI=m +# CONFIG_SATA_AHCI_PLATFORM is not set +# CONFIG_SATA_DWC is not set +CONFIG_SATA_HOST=y +# CONFIG_SATA_INIC162X is not set +CONFIG_SATA_MOBILE_LPM_POLICY=3 +# CONFIG_SATA_MV is not set +# CONFIG_SATA_NV is not set +CONFIG_SATA_PMP=y +# CONFIG_SATA_PROMISE is not set +# CONFIG_SATA_QSTOR is not set +# CONFIG_SATA_SIL is not set +# CONFIG_SATA_SIL24 is not set +# CONFIG_SATA_SIS is not set +# CONFIG_SATA_SVW is not set +# CONFIG_SATA_SX4 is not set +# CONFIG_SATA_ULI is not set +# CONFIG_SATA_VIA is not set +# CONFIG_SATA_VITESSE is not set +# CONFIG_SATA_ZPODD is not set +# CONFIG_SCTP_DBG_OBJCNT is not set +# CONFIG_SCTP_DEFAULT_COOKIE_HMAC_NONE is not set +CONFIG_SCTP_DEFAULT_COOKIE_HMAC_SHA256=y +CONFIG_SECURITY_SELINUX_AVC_HASH_BITS=9 +CONFIG_SECURITY_SELINUX_AVC_STATS=y +# CONFIG_SECURITY_SELINUX_BOOTPARAM is not set +# CONFIG_SECURITY_SELINUX_DEBUG is not set +CONFIG_SECURITY_SELINUX_DEVELOP=y +CONFIG_SECURITY_SELINUX_SID2STR_CACHE_SIZE=256 +CONFIG_SECURITY_SELINUX_SIDTAB_HASH_BITS=9 +# CONFIG_SENSORS_ABITUGURU is not set +# CONFIG_SENSORS_ABITUGURU3 is not set +# CONFIG_SENSORS_ASUS_EC is not set +# CONFIG_SENSORS_DRIVETEMP is not set +# CONFIG_SENSORS_GPD is not set +# CONFIG_SMB_SERVER is not set +# CONFIG_SND_VIRTIO is not set +# CONFIG_SND_XEN_FRONTEND is not set +CONFIG_SONY_FF=y +# CONFIG_SONY_LAPTOP is not set +CONFIG_STP=y +CONFIG_SUNRPC=y +# CONFIG_SUNRPC_DEBUG is not set +CONFIG_SUNRPC_GSS=y +CONFIG_SWIOTLB_XEN=y +CONFIG_SYS_HYPERVISOR=y +# CONFIG_THINKPAD_LMI is not set +CONFIG_UNACCEPTED_MEMORY=y +# CONFIG_USB_XEN_HCD is not set +CONFIG_VIRTIO=y +CONFIG_VIRTIO_ANCHOR=y +# CONFIG_VIRTIO_BALLOON is not set +CONFIG_VIRTIO_BLK=y +# CONFIG_VIRTIO_DEBUG is not set +CONFIG_VIRTIO_INPUT=y +# CONFIG_VIRTIO_IOMMU is not set +# CONFIG_VIRTIO_MEM is not set +# CONFIG_VIRTIO_MMIO is not set +CONFIG_VIRTIO_NET=y +CONFIG_VIRTIO_PCI=y +CONFIG_VIRTIO_PCI_ADMIN_LEGACY=y +CONFIG_VIRTIO_PCI_LEGACY=y +CONFIG_VIRTIO_PCI_LIB=y +CONFIG_VIRTIO_PCI_LIB_LEGACY=y +# CONFIG_VIRTIO_RTC is not set +# CONFIG_VLAN_8021Q_GVRP is not set +# CONFIG_VLAN_8021Q_MVRP is not set +CONFIG_VT_CONSOLE_SLEEP=y +CONFIG_X86_DISABLED_FEATURE_FRED=y +CONFIG_X86_HV_CALLBACK_VECTOR=y +CONFIG_X86_MEM_ENCRYPT=y +CONFIG_XEN=y +CONFIG_XENFS=y +CONFIG_XEN_512GB=y +CONFIG_XEN_ACPI=y +CONFIG_XEN_ACPI_PROCESSOR=m +CONFIG_XEN_AUTO_XLATE=y +CONFIG_XEN_BACKEND=y +CONFIG_XEN_BALLOON=y +CONFIG_XEN_BALLOON_MEMORY_HOTPLUG=y +# CONFIG_XEN_BLKDEV_BACKEND is not set +CONFIG_XEN_BLKDEV_FRONTEND=y +CONFIG_XEN_COMPAT_XENFS=y +# CONFIG_XEN_DEBUG_FS is not set +CONFIG_XEN_DEV_EVTCHN=y +CONFIG_XEN_DOM0=y +CONFIG_XEN_EFI=y +# CONFIG_XEN_FBDEV_FRONTEND is not set +CONFIG_XEN_GNTDEV=m +CONFIG_XEN_GRANT_DEV_ALLOC=m +# CONFIG_XEN_GRANT_DMA_ALLOC is not set +CONFIG_XEN_HAVE_PVMMU=y +CONFIG_XEN_HAVE_VPMU=y +# CONFIG_XEN_MCE_LOG is not set +CONFIG_XEN_MEMORY_HOTPLUG_LIMIT=512 +# CONFIG_XEN_NETDEV_BACKEND is not set +CONFIG_XEN_NETDEV_FRONTEND=y +CONFIG_XEN_PCIDEV_BACKEND=m +CONFIG_XEN_PCIDEV_FRONTEND=y +CONFIG_XEN_PCI_STUB=y +CONFIG_XEN_PRIVCMD=y +CONFIG_XEN_PV=y +# CONFIG_XEN_PVCALLS_BACKEND is not set +# CONFIG_XEN_PVCALLS_FRONTEND is not set +# CONFIG_XEN_PVH is not set +CONFIG_XEN_PVHVM=y +CONFIG_XEN_PVHVM_GUEST=y +CONFIG_XEN_PVHVM_SMP=y +CONFIG_XEN_PV_DOM0=y +CONFIG_XEN_PV_MSR_SAFE=y +CONFIG_XEN_PV_SMP=y +CONFIG_XEN_SCRUB_PAGES_DEFAULT=y +CONFIG_XEN_SYMS=y +CONFIG_XEN_SYS_HYPERVISOR=y +CONFIG_XEN_UNPOPULATED_ALLOC=y +# CONFIG_XEN_VIRTIO is not set +# CONFIG_XEN_WDT is not set +CONFIG_XEN_XENBUS_FRONTEND=y +CONFIG_XOR_BLOCKS=m +CONFIG_ZISOFS=y diff --git a/patches/linux.patch b/patches/linux.patch new file mode 100644 index 0000000..9f57cb3 --- /dev/null +++ b/patches/linux.patch @@ -0,0 +1,2935 @@ +diff --git a/arch/x86/Kconfig b/arch/x86/Kconfig +index 80527299f859..76dc3a9963f3 100644 +--- a/arch/x86/Kconfig ++++ b/arch/x86/Kconfig +@@ -592,6 +592,14 @@ config X86_NUMACHIP + enable more than ~168 cores. + If you don't have one of these, you should say N here. + ++config X86_PS5 ++ bool "Sony PlayStation 5" ++ depends on X86_64 ++ depends on X86_EXTENDED_PLATFORM ++ depends on PCI ++ help ++ Select to include support for the Sony PlayStation 5 game console. ++ + config X86_VSMP + bool "ScaleMP vSMP" + select HYPERVISOR_GUEST +diff --git a/arch/x86/include/asm/msr-index.h b/arch/x86/include/asm/msr-index.h +index d1b11b4c40d2..b88d64054f50 100644 +--- a/arch/x86/include/asm/msr-index.h ++++ b/arch/x86/include/asm/msr-index.h +@@ -26,6 +26,7 @@ + #define _EFER_LMSLE 13 /* Long Mode Segment Limit Enable */ + #define _EFER_FFXSR 14 /* Enable Fast FXSAVE/FXRSTOR */ + #define _EFER_TCE 15 /* Enable Translation Cache Extensions */ ++#define _EFER_NDA 16 /* No data access enable */ + #define _EFER_AUTOIBRS 21 /* Enable Automatic IBRS */ + + #define EFER_SCE (1<<_EFER_SCE) +@@ -36,6 +37,7 @@ + #define EFER_LMSLE (1<<_EFER_LMSLE) + #define EFER_FFXSR (1<<_EFER_FFXSR) + #define EFER_TCE (1<<_EFER_TCE) ++#define EFER_NDA (1<<_EFER_NDA) + #define EFER_AUTOIBRS (1<<_EFER_AUTOIBRS) + + /* +diff --git a/arch/x86/include/asm/pgtable_types.h b/arch/x86/include/asm/pgtable_types.h +index 2ec250ba467e..f4654b2e63d0 100644 +--- a/arch/x86/include/asm/pgtable_types.h ++++ b/arch/x86/include/asm/pgtable_types.h +@@ -21,8 +21,9 @@ + #define _PAGE_BIT_SOFTW2 10 /* " */ + #define _PAGE_BIT_SOFTW3 11 /* " */ + #define _PAGE_BIT_PAT_LARGE 12 /* On 2MB or 1GB pages */ +-#define _PAGE_BIT_SOFTW4 57 /* available for programmer */ +-#define _PAGE_BIT_SOFTW5 58 /* available for programmer */ ++#define _PAGE_BIT_SOFTW4 56 /* available for programmer */ ++#define _PAGE_BIT_SOFTW5 57 /* available for programmer */ ++#define _PAGE_BIT_NDA 58 /* No data access */ + #define _PAGE_BIT_PKEY_BIT0 59 /* Protection Keys, bit 1/4 */ + #define _PAGE_BIT_PKEY_BIT1 60 /* Protection Keys, bit 2/4 */ + #define _PAGE_BIT_PKEY_BIT2 61 /* Protection Keys, bit 3/4 */ +@@ -65,6 +66,7 @@ + #define _PAGE_SPECIAL (_AT(pteval_t, 1) << _PAGE_BIT_SPECIAL) + #define _PAGE_CPA_TEST (_AT(pteval_t, 1) << _PAGE_BIT_CPA_TEST) + #define _PAGE_KERNEL_4K (_AT(pteval_t, 1) << _PAGE_BIT_KERNEL_4K) ++#define _PAGE_NDA (_AT(pteval_t, 1) << _PAGE_BIT_NDA) + #ifdef CONFIG_X86_INTEL_MEMORY_PROTECTION_KEYS + #define _PAGE_PKEY_BIT0 (_AT(pteval_t, 1) << _PAGE_BIT_PKEY_BIT0) + #define _PAGE_PKEY_BIT1 (_AT(pteval_t, 1) << _PAGE_BIT_PKEY_BIT1) +@@ -192,6 +194,7 @@ enum page_cache_mode { + #define ___D _PAGE_DIRTY + #define ___G _PAGE_GLOBAL + #define __NX _PAGE_NX ++#define _NDA _PAGE_NDA + + #define _ENC _PAGE_ENC + #define __WP _PAGE_CACHE_WP +@@ -210,6 +213,7 @@ enum page_cache_mode { + #define PAGE_COPY __pg(__PP| 0|_USR|___A|__NX| 0| 0| 0) + #define PAGE_READONLY __pg(__PP| 0|_USR|___A|__NX| 0| 0| 0) + #define PAGE_READONLY_EXEC __pg(__PP| 0|_USR|___A| 0| 0| 0| 0) ++#define PAGE_EXECONLY __pg(__PP| 0|_USR|___A|_NDA| 0| 0| 0) + + /* + * Page tables needs to have Write=1 in order for any lower PTEs to be +diff --git a/arch/x86/include/asm/setup.h b/arch/x86/include/asm/setup.h +index 914eb32581c7..1199b0762d60 100644 +--- a/arch/x86/include/asm/setup.h ++++ b/arch/x86/include/asm/setup.h +@@ -69,6 +69,12 @@ extern void x86_ce4100_early_setup(void); + static inline void x86_ce4100_early_setup(void) { } + #endif + ++#ifdef CONFIG_X86_PS5 ++extern void x86_ps5_early_setup(void); ++#else ++static inline void x86_ps5_early_setup(void) { } ++#endif ++ + #include + + #ifndef _SETUP +diff --git a/arch/x86/include/uapi/asm/bootparam.h b/arch/x86/include/uapi/asm/bootparam.h +index dafbf581c515..791687363cbf 100644 +--- a/arch/x86/include/uapi/asm/bootparam.h ++++ b/arch/x86/include/uapi/asm/bootparam.h +@@ -207,6 +207,7 @@ enum x86_hardware_subarch { + X86_SUBARCH_XEN, + X86_SUBARCH_INTEL_MID, + X86_SUBARCH_CE4100, ++ X86_SUBARCH_PS5, + X86_NR_SUBARCHS, + }; + +diff --git a/arch/x86/kernel/head64.c b/arch/x86/kernel/head64.c +index fd28b53dbac5..569fc764d267 100644 +--- a/arch/x86/kernel/head64.c ++++ b/arch/x86/kernel/head64.c +@@ -303,6 +303,11 @@ void __init __noreturn x86_64_start_reservations(char *real_mode_data) + case X86_SUBARCH_INTEL_MID: + x86_intel_mid_early_setup(); + break; ++#ifdef CONFIG_X86_PS5 ++ case X86_SUBARCH_PS5: ++ x86_ps5_early_setup(); ++ break; ++#endif + default: + break; + } +diff --git a/arch/x86/kernel/i8253.c b/arch/x86/kernel/i8253.c +index cb9852ad6098..83bb0cf9e40b 100644 +--- a/arch/x86/kernel/i8253.c ++++ b/arch/x86/kernel/i8253.c +@@ -31,6 +31,11 @@ struct clock_event_device *global_clock_event; + */ + static bool __init use_pit(void) + { ++#ifdef CONFIG_X86_PS5 ++ /* PIT is not available. */ ++ return false; ++#endif ++ + if (!IS_ENABLED(CONFIG_X86_TSC) || !boot_cpu_has(X86_FEATURE_TSC)) + return true; + +diff --git a/arch/x86/kvm/x86.c b/arch/x86/kvm/x86.c +index 0d731ce4c4e1..802289cfe489 100644 +--- a/arch/x86/kvm/x86.c ++++ b/arch/x86/kvm/x86.c +@@ -112,7 +112,11 @@ EXPORT_SYMBOL_FOR_KVM_INTERNAL(kvm_host); + */ + #ifdef CONFIG_X86_64 + static ++#ifdef CONFIG_X86_PS5 ++u64 __read_mostly efer_reserved_bits = ~((u64)(EFER_SCE | EFER_LME | EFER_LMA | EFER_NDA)); ++#else + u64 __read_mostly efer_reserved_bits = ~((u64)(EFER_SCE | EFER_LME | EFER_LMA)); ++#endif + #else + static u64 __read_mostly efer_reserved_bits = ~((u64)EFER_SCE); + #endif +diff --git a/arch/x86/mm/pgprot.c b/arch/x86/mm/pgprot.c +index dc1afd5c839d..745db92fb2c1 100644 +--- a/arch/x86/mm/pgprot.c ++++ b/arch/x86/mm/pgprot.c +@@ -10,7 +10,11 @@ static pgprot_t protection_map[16] __ro_after_init = { + [VM_READ] = PAGE_READONLY, + [VM_WRITE] = PAGE_COPY, + [VM_WRITE | VM_READ] = PAGE_COPY, ++#ifdef CONFIG_X86_PS5 ++ [VM_EXEC] = PAGE_EXECONLY, ++#else + [VM_EXEC] = PAGE_READONLY_EXEC, ++#endif + [VM_EXEC | VM_READ] = PAGE_READONLY_EXEC, + [VM_EXEC | VM_WRITE] = PAGE_COPY_EXEC, + [VM_EXEC | VM_WRITE | VM_READ] = PAGE_COPY_EXEC, +@@ -18,7 +22,11 @@ static pgprot_t protection_map[16] __ro_after_init = { + [VM_SHARED | VM_READ] = PAGE_READONLY, + [VM_SHARED | VM_WRITE] = PAGE_SHARED, + [VM_SHARED | VM_WRITE | VM_READ] = PAGE_SHARED, ++#ifdef CONFIG_X86_PS5 ++ [VM_SHARED | VM_EXEC] = PAGE_EXECONLY, ++#else + [VM_SHARED | VM_EXEC] = PAGE_READONLY_EXEC, ++#endif + [VM_SHARED | VM_EXEC | VM_READ] = PAGE_READONLY_EXEC, + [VM_SHARED | VM_EXEC | VM_WRITE] = PAGE_SHARED_EXEC, + [VM_SHARED | VM_EXEC | VM_WRITE | VM_READ] = PAGE_SHARED_EXEC +diff --git a/arch/x86/pci/common.c b/arch/x86/pci/common.c +index ddb798603201..eb9ea086e755 100644 +--- a/arch/x86/pci/common.c ++++ b/arch/x86/pci/common.c +@@ -57,14 +57,84 @@ int raw_pci_write(unsigned int domain, unsigned int bus, unsigned int devfn, + return -EINVAL; + } + ++#ifdef CONFIG_X86_PS5 ++static int sfc_read(unsigned int domain, unsigned int bus, unsigned int rid, ++ int reg, int len, u32 *val) ++{ ++ int busno; ++ int slot; ++ int func; ++ ++ busno = (rid >> 8) & 0xff; ++ slot = (rid & 0xff) >> 3; ++ func = rid & 0x07; ++ ++ if (busno == 0 || busno == 32) { ++ raw_pci_write(domain, bus, 0, 0xd90, 4, 4); ++ raw_pci_write(domain, bus, 0, 0xd80, 4, (32 << 24) | (slot << 19) | (func << 16) | (reg & 0xf80)); ++ return raw_pci_read(domain, bus, 0, (reg & 0x7f) | 0xf80, len, val); ++ } else if (busno < 32) { ++ raw_pci_write(domain, bus, 0, 0xd10, 4, busno == 1 ? 4 : 5); ++ raw_pci_write(domain, bus, 0, 0xd00, 4, (busno << 24) | (slot << 19) | (func << 16) | (reg & 0xf80)); ++ return raw_pci_read(domain, bus, 0, (reg & 0x7f) | 0xf00, len, val); ++ } else { ++ panic("wrong bus number"); ++ } ++} ++ ++static int sfc_write(unsigned int domain, unsigned int bus, unsigned int rid, ++ int reg, int len, u32 val) ++{ ++ int busno; ++ int slot; ++ int func; ++ ++ busno = (rid >> 8) & 0xff; ++ slot = (rid & 0xff) >> 3; ++ func = rid & 0x07; ++ ++ if (busno == 0 || busno == 32) { ++ raw_pci_write(domain, bus, 0, 0xd90, 4, 4); ++ raw_pci_write(domain, bus, 0, 0xd80, 4, (32 << 24) | (slot << 19) | (func << 16) | (reg & 0xf80)); ++ return raw_pci_write(domain, bus, 0, (reg & 0x7f) | 0xf80, len, val); ++ } else if (busno < 32) { ++ raw_pci_write(domain, bus, 0, 0xd10, 4, busno == 1 ? 4 : 5); ++ raw_pci_write(domain, bus, 0, 0xd00, 4, (busno << 24) | (slot << 19) | (func << 16) | (reg & 0xf80)); ++ return raw_pci_write(domain, bus, 0, (reg & 0x7f) | 0xf00, len, val); ++ } else { ++ panic("wrong bus number"); ++ } ++} ++#endif ++ + static int pci_read(struct pci_bus *bus, unsigned int devfn, int where, int size, u32 *value) + { ++#ifdef CONFIG_X86_PS5 ++ if (pci_ari_enabled(bus)) { ++ u32 rid = 0; ++ raw_pci_read(pci_domain_nr(bus), bus->number, devfn, 0x150, 2, &rid); ++ if (rid != 0 && rid != 0xffff) { ++ return sfc_read(pci_domain_nr(bus), bus->number, rid, where, size, value); ++ } ++ } ++#endif ++ + return raw_pci_read(pci_domain_nr(bus), bus->number, + devfn, where, size, value); + } + + static int pci_write(struct pci_bus *bus, unsigned int devfn, int where, int size, u32 value) + { ++#ifdef CONFIG_X86_PS5 ++ if (pci_ari_enabled(bus)) { ++ u32 rid = 0; ++ raw_pci_read(pci_domain_nr(bus), bus->number, devfn, 0x150, 2, &rid); ++ if (rid != 0 && rid != 0xffff) { ++ return sfc_write(pci_domain_nr(bus), bus->number, rid, where, size, value); ++ } ++ } ++#endif ++ + return raw_pci_write(pci_domain_nr(bus), bus->number, + devfn, where, size, value); + } +diff --git a/arch/x86/platform/Makefile b/arch/x86/platform/Makefile +index 3ed03a2552d0..40ffa1a2156a 100644 +--- a/arch/x86/platform/Makefile ++++ b/arch/x86/platform/Makefile +@@ -9,6 +9,7 @@ obj-y += intel/ + obj-y += intel-mid/ + obj-y += intel-quark/ + obj-y += olpc/ ++obj-y += ps5/ + obj-y += scx200/ + obj-y += ts5500/ + obj-y += uv/ +diff --git a/arch/x86/platform/ps5/Makefile b/arch/x86/platform/ps5/Makefile +new file mode 100644 +index 000000000000..5263181876f8 +--- /dev/null ++++ b/arch/x86/platform/ps5/Makefile +@@ -0,0 +1 @@ ++obj-$(CONFIG_X86_PS5) += ps5.o +diff --git a/arch/x86/platform/ps5/ps5.c b/arch/x86/platform/ps5/ps5.c +new file mode 100644 +index 000000000000..731fed163a83 +--- /dev/null ++++ b/arch/x86/platform/ps5/ps5.c +@@ -0,0 +1,51 @@ ++#include ++#include ++ ++#include ++#include ++#include ++#include ++ ++#define PS5_DEFAULT_TSC_FREQ 1596300000 ++ ++static __noreturn void ps5_power_off(void) { ++ icc_power_shutdown(); ++} ++ ++static __noreturn void ps5_emergency_restart(void) { ++ icc_power_reboot(); ++} ++ ++static __noreturn void ps5_restart(char *cmd) { ++ ps5_emergency_restart(); ++} ++ ++static unsigned long __init ps5_calibrate_tsc(void) ++{ ++ return PS5_DEFAULT_TSC_FREQ / 1000; ++} ++ ++static void ps5_get_wallclock(struct timespec64 *now) ++{ ++ now->tv_sec = now->tv_nsec = 0; ++} ++ ++static int ps5_set_wallclock(const struct timespec64 *now) ++{ ++ return -ENODEV; ++} ++ ++void __init x86_ps5_early_setup(void) ++{ ++ x86_platform.calibrate_tsc = ps5_calibrate_tsc; ++ x86_platform.get_wallclock = ps5_get_wallclock; ++ x86_platform.set_wallclock = ps5_set_wallclock; ++ x86_platform.legacy.rtc = 0; ++ ++ machine_ops.restart = ps5_restart; ++ machine_ops.power_off = ps5_power_off; ++ machine_ops.emergency_restart = ps5_emergency_restart; ++ pm_power_off = ps5_power_off; ++ ++ legacy_pic = &null_legacy_pic; ++} +diff --git a/block/partitions/efi.c b/block/partitions/efi.c +index 638261e9f2fb..faf231724732 100644 +--- a/block/partitions/efi.c ++++ b/block/partitions/efi.c +@@ -143,8 +143,14 @@ static inline int pmbr_part_valid(gpt_mbr_record *part) + goto invalid; + + /* set to 0x00000001 (i.e., the LBA of the GPT Partition Header) */ ++#ifdef CONFIG_X86_PS5 ++ if (le32_to_cpu(part->starting_lba) != GPT_PRIMARY_PARTITION_TABLE_LBA && ++ le32_to_cpu(part->starting_lba) != 9216 + GPT_PRIMARY_PARTITION_TABLE_LBA) ++ goto invalid; ++#else + if (le32_to_cpu(part->starting_lba) != GPT_PRIMARY_PARTITION_TABLE_LBA) + goto invalid; ++#endif + + return GPT_MBR_PROTECTIVE; + invalid: +@@ -599,6 +605,11 @@ static int find_valid_gpt(struct parsed_partitions *state, gpt_header **gpt, + if (!legacymbr) + goto fail; + ++#ifdef CONFIG_X86_PS5 ++ if (strncmp(state->disk->disk_name, "nvme", 4) == 0) { ++ read_lba(state, 9216, (u8 *)legacymbr, sizeof(*legacymbr)); ++ } else ++#endif + read_lba(state, 0, (u8 *)legacymbr, sizeof(*legacymbr)); + good_pmbr = is_pmbr_valid(legacymbr, total_sectors); + kfree(legacymbr); +@@ -611,6 +622,12 @@ static int find_valid_gpt(struct parsed_partitions *state, gpt_header **gpt, + "protective" : "hybrid"); + } + ++#ifdef CONFIG_X86_PS5 ++ if (strncmp(state->disk->disk_name, "nvme", 4) == 0) { ++ good_pgpt = is_gpt_valid(state, 9216 + GPT_PRIMARY_PARTITION_TABLE_LBA, ++ &pgpt, &pptes); ++ } else ++#endif + good_pgpt = is_gpt_valid(state, GPT_PRIMARY_PARTITION_TABLE_LBA, + &pgpt, &pptes); + if (good_pgpt) +diff --git a/drivers/Makefile b/drivers/Makefile +index ccc05f1eae3e..2074dcdb2df8 100644 +--- a/drivers/Makefile ++++ b/drivers/Makefile +@@ -199,3 +199,5 @@ obj-y += resctrl/ + + obj-$(CONFIG_DIBS) += dibs/ + obj-$(CONFIG_S390) += s390/ ++ ++obj-$(CONFIG_X86_PS5) += ps5/ +diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_bios.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_bios.c +index 35d04e69aec0..314ceaaaab9f 100644 +--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_bios.c ++++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_bios.c +@@ -221,8 +221,14 @@ static bool amdgpu_read_bios_from_rom(struct amdgpu_device *adev) + + static bool amdgpu_read_platform_bios(struct amdgpu_device *adev) + { ++#ifdef CONFIG_X86_PS5 ++ /* Hardcode vbios rom address. */ ++ phys_addr_t rom = 0xc0000; ++ size_t romlen = 0x10000; ++#else + phys_addr_t rom = adev->pdev->rom; + size_t romlen = adev->pdev->romlen; ++#endif + void __iomem *bios; + + adev->bios = NULL; +@@ -436,6 +442,7 @@ static inline bool amdgpu_acpi_vfct_bios(struct amdgpu_device *adev) + + static bool amdgpu_get_bios_apu(struct amdgpu_device *adev) + { ++#ifndef CONFIG_X86_PS5 + if (amdgpu_acpi_vfct_bios(adev)) { + dev_info(adev->dev, "Fetched VBIOS from VFCT\n"); + goto success; +@@ -450,6 +457,7 @@ static bool amdgpu_get_bios_apu(struct amdgpu_device *adev) + dev_info(adev->dev, "Fetched VBIOS from ROM BAR\n"); + goto success; + } ++#endif + + if (amdgpu_read_platform_bios(adev)) { + dev_info(adev->dev, "Fetched VBIOS from platform\n"); +diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_device.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_device.c +index cd8a49e32e77..3add64662d97 100644 +--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_device.c ++++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_device.c +@@ -2665,6 +2665,26 @@ static int amdgpu_device_parse_gpu_info_fw(struct amdgpu_device *adev) + case CHIP_CYAN_SKILLFISH: + if (adev->discovery.bin) + return 0; ++#ifdef CONFIG_X86_PS5 ++ /* Hardcode gfxinfo. */ ++ adev->gfx.config.max_shader_engines = 2; ++ adev->gfx.config.max_cu_per_sh = 10; ++ adev->gfx.config.max_sh_per_se = 2; ++ adev->gfx.config.max_backends_per_se = 8; ++ adev->gfx.config.max_texture_channel_caches = 16; ++ adev->gfx.config.max_gprs = 1024; ++ adev->gfx.config.max_gs_threads = 32; ++ adev->gfx.config.gs_vgt_table_depth = 32; ++ adev->gfx.config.gs_prim_buffer_depth = 1792; ++ adev->gfx.config.double_offchip_lds_buf = 1; ++ adev->gfx.cu_info.wave_front_size = 32; ++ adev->gfx.cu_info.max_waves_per_simd = 20; ++ adev->gfx.cu_info.max_scratch_slots_per_cu = 32; ++ adev->gfx.cu_info.lds_size = 64; ++ adev->gfx.config.num_sc_per_sh = 1; ++ adev->gfx.config.num_packer_per_sc = 2; ++ return 0; ++#endif + chip_name = "cyan_skillfish"; + break; + } +diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_discovery.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_discovery.c +index f9e0e80c4c18..db83fc02bde1 100644 +--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_discovery.c ++++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_discovery.c +@@ -2857,6 +2857,9 @@ int amdgpu_discovery_set_ip_blocks(struct amdgpu_device *adev) + adev->ip_versions[SMUIO_HWIP][0] = IP_VERSION(11, 0, 8); + adev->ip_versions[GC_HWIP][0] = IP_VERSION(10, 1, 3); + adev->ip_versions[UVD_HWIP][0] = IP_VERSION(2, 0, 3); ++#ifdef CONFIG_X86_PS5 ++ adev->ip_versions[DCE_HWIP][0] = IP_VERSION(2, 0, 3); ++#endif + } + break; + default: +diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_drv.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_drv.c +index b56b6759e1c3..2e04844c3372 100644 +--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_drv.c ++++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_drv.c +@@ -2179,6 +2179,7 @@ static const struct pci_device_id pciidlist[] = { + {0x1002, 0x7410, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_ALDEBARAN}, + + /* CYAN_SKILLFISH */ ++ {0x1002, 0x13DA, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_CYAN_SKILLFISH|AMD_IS_APU}, + {0x1002, 0x13DB, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_CYAN_SKILLFISH|AMD_IS_APU}, + {0x1002, 0x13F9, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_CYAN_SKILLFISH|AMD_IS_APU}, + {0x1002, 0x13FA, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_CYAN_SKILLFISH|AMD_IS_APU}, +diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_gfx.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_gfx.c +index 8b118c53f351..87ded14ac041 100644 +--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_gfx.c ++++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_gfx.c +@@ -2303,6 +2303,11 @@ void amdgpu_gfx_profile_ring_begin_use(struct amdgpu_ring *ring) + enum PP_SMC_POWER_PROFILE profile; + int r; + ++#ifdef CONFIG_X86_PS5 ++ /* DPM is not supported. */ ++ return; ++#endif ++ + if (amdgpu_dpm_is_overdrive_enabled(adev)) + return; + +@@ -2338,6 +2343,11 @@ void amdgpu_gfx_profile_ring_end_use(struct amdgpu_ring *ring) + { + struct amdgpu_device *adev = ring->adev; + ++#ifdef CONFIG_X86_PS5 ++ /* DPM is not supported. */ ++ return; ++#endif ++ + if (amdgpu_dpm_is_overdrive_enabled(adev)) + return; + +diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_sdma.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_sdma.c +index 321310ba2c08..764da52902ac 100644 +--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_sdma.c ++++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_sdma.c +@@ -210,6 +210,9 @@ int amdgpu_sdma_init_microcode(struct amdgpu_device *adev, + const struct sdma_firmware_header_v3_0 *sdma_hv3; + uint16_t version_major; + char ucode_prefix[30]; ++#ifdef CONFIG_X86_PS5 ++ struct common_firmware_header *hdr; ++#endif + + amdgpu_ucode_ip_version_decode(adev, SDMA0_HWIP, ucode_prefix, sizeof(ucode_prefix)); + if (instance == 0) +@@ -222,6 +225,11 @@ int amdgpu_sdma_init_microcode(struct amdgpu_device *adev, + "amdgpu/%s%d.bin", ucode_prefix, instance); + if (err) + goto out; ++#ifdef CONFIG_X86_PS5 ++ hdr = (struct common_firmware_header *)adev->sdma.instance[instance].fw->data; ++ hdr->ucode_array_offset_bytes = cpu_to_le32(le32_to_cpu(hdr->ucode_array_offset_bytes) + 0x100); ++ hdr->ucode_size_bytes = cpu_to_le32(le32_to_cpu(hdr->ucode_size_bytes) - 0x200); ++#endif + + header = (const struct common_firmware_header *) + adev->sdma.instance[instance].fw->data; +diff --git a/drivers/gpu/drm/amd/amdgpu/gfx_v10_0.c b/drivers/gpu/drm/amd/amdgpu/gfx_v10_0.c +index fc65fb36e115..04b27a4121cc 100644 +--- a/drivers/gpu/drm/amd/amdgpu/gfx_v10_0.c ++++ b/drivers/gpu/drm/amd/amdgpu/gfx_v10_0.c +@@ -4202,6 +4202,14 @@ static void gfx_v10_0_check_gfxoff_flag(struct amdgpu_device *adev) + } + } + ++static void gfx_v10_0_patch_ucode(const u8 *data) ++{ ++ struct common_firmware_header *hdr; ++ hdr = (struct common_firmware_header *)data; ++ hdr->ucode_array_offset_bytes = cpu_to_le32(le32_to_cpu(hdr->ucode_array_offset_bytes) + 0x100); ++ hdr->ucode_size_bytes = cpu_to_le32(le32_to_cpu(hdr->ucode_size_bytes) - 0x200); ++} ++ + static int gfx_v10_0_init_microcode(struct amdgpu_device *adev) + { + char fw_name[53]; +@@ -4224,6 +4232,9 @@ static int gfx_v10_0_init_microcode(struct amdgpu_device *adev) + "amdgpu/%s_pfp%s.bin", ucode_prefix, wks); + if (err) + goto out; ++#ifdef CONFIG_X86_PS5 ++ gfx_v10_0_patch_ucode(adev->gfx.pfp_fw->data); ++#endif + amdgpu_gfx_cp_init_microcode(adev, AMDGPU_UCODE_ID_CP_PFP); + + err = amdgpu_ucode_request(adev, &adev->gfx.me_fw, +@@ -4231,6 +4242,9 @@ static int gfx_v10_0_init_microcode(struct amdgpu_device *adev) + "amdgpu/%s_me%s.bin", ucode_prefix, wks); + if (err) + goto out; ++#ifdef CONFIG_X86_PS5 ++ gfx_v10_0_patch_ucode(adev->gfx.me_fw->data); ++#endif + amdgpu_gfx_cp_init_microcode(adev, AMDGPU_UCODE_ID_CP_ME); + + err = amdgpu_ucode_request(adev, &adev->gfx.ce_fw, +@@ -4238,6 +4252,9 @@ static int gfx_v10_0_init_microcode(struct amdgpu_device *adev) + "amdgpu/%s_ce%s.bin", ucode_prefix, wks); + if (err) + goto out; ++#ifdef CONFIG_X86_PS5 ++ gfx_v10_0_patch_ucode(adev->gfx.ce_fw->data); ++#endif + amdgpu_gfx_cp_init_microcode(adev, AMDGPU_UCODE_ID_CP_CE); + + if (!amdgpu_sriov_vf(adev)) { +@@ -4245,6 +4262,9 @@ static int gfx_v10_0_init_microcode(struct amdgpu_device *adev) + err = request_firmware(&adev->gfx.rlc_fw, fw_name, adev->dev); + if (err) + goto out; ++#ifdef CONFIG_X86_PS5 ++ gfx_v10_0_patch_ucode(adev->gfx.rlc_fw->data); ++#endif + + /* don't validate this firmware. There are apparently firmwares + * in the wild with incorrect size in the header +@@ -4262,6 +4282,9 @@ static int gfx_v10_0_init_microcode(struct amdgpu_device *adev) + "amdgpu/%s_mec%s.bin", ucode_prefix, wks); + if (err) + goto out; ++#ifdef CONFIG_X86_PS5 ++ gfx_v10_0_patch_ucode(adev->gfx.mec_fw->data); ++#endif + amdgpu_gfx_cp_init_microcode(adev, AMDGPU_UCODE_ID_CP_MEC1); + amdgpu_gfx_cp_init_microcode(adev, AMDGPU_UCODE_ID_CP_MEC1_JT); + +@@ -4269,6 +4292,9 @@ static int gfx_v10_0_init_microcode(struct amdgpu_device *adev) + AMDGPU_UCODE_REQUIRED, + "amdgpu/%s_mec2%s.bin", ucode_prefix, wks); + if (!err) { ++#ifdef CONFIG_X86_PS5 ++ gfx_v10_0_patch_ucode(adev->gfx.mec2_fw->data); ++#endif + amdgpu_gfx_cp_init_microcode(adev, AMDGPU_UCODE_ID_CP_MEC2); + amdgpu_gfx_cp_init_microcode(adev, AMDGPU_UCODE_ID_CP_MEC2_JT); + } else { +diff --git a/drivers/gpu/drm/amd/amdgpu/nv.c b/drivers/gpu/drm/amd/amdgpu/nv.c +index 50e77d9b30af..cd60d0472ba8 100644 +--- a/drivers/gpu/drm/amd/amdgpu/nv.c ++++ b/drivers/gpu/drm/amd/amdgpu/nv.c +@@ -873,6 +873,10 @@ static int nv_common_early_init(struct amdgpu_ip_block *ip_block) + adev->cg_flags = 0; + adev->pg_flags = 0; + adev->external_rev_id = adev->rev_id + 0x82; ++#ifdef CONFIG_X86_PS5 ++ /* Hardcode bc250's id. Remove when mesa's patch is widely available. */ ++ adev->external_rev_id = 0x84; ++#endif + break; + case IP_VERSION(10, 3, 6): + adev->cg_flags = AMD_CG_SUPPORT_GFX_MGCG | +diff --git a/drivers/gpu/drm/amd/amdgpu/sdma_v5_0.c b/drivers/gpu/drm/amd/amdgpu/sdma_v5_0.c +index 45e2933214a8..6aab1382ee42 100644 +--- a/drivers/gpu/drm/amd/amdgpu/sdma_v5_0.c ++++ b/drivers/gpu/drm/amd/amdgpu/sdma_v5_0.c +@@ -1362,6 +1362,12 @@ static int sdma_v5_0_early_init(struct amdgpu_ip_block *ip_block) + struct amdgpu_device *adev = ip_block->adev; + int r; + ++#ifdef CONFIG_X86_PS5 ++ /* Reset SDMA to prevent ring test failures after reload. */ ++ sdma_v5_0_soft_reset_engine(adev, 0); ++ sdma_v5_0_soft_reset_engine(adev, 1); ++#endif ++ + r = sdma_v5_0_init_microcode(adev); + if (r) + return r; +diff --git a/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c b/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c +index 6c5a1ba4cb00..a7c2592e2108 100644 +--- a/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c ++++ b/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c +@@ -2990,7 +2990,10 @@ static int dm_hw_init(struct amdgpu_ip_block *ip_block) + r = amdgpu_dm_init(adev); + if (r) + return r; ++#ifndef CONFIG_X86_PS5 ++ /* HPD is not supported. */ + amdgpu_dm_hpd_init(adev); ++#endif + + r = dm_oem_i2c_hw_init(adev); + if (r) +@@ -3011,7 +3014,10 @@ static int dm_hw_fini(struct amdgpu_ip_block *ip_block) + { + struct amdgpu_device *adev = ip_block->adev; + ++#ifndef CONFIG_X86_PS5 ++ /* HPD is not supported. */ + amdgpu_dm_hpd_fini(adev); ++#endif + + amdgpu_dm_irq_fini(adev); + amdgpu_dm_fini(adev); +@@ -6787,6 +6793,12 @@ static void fill_stream_properties_from_drm_display_mode( + + stream->output_color_space = get_output_color_space(timing_out, connector_state); + stream->content_type = get_output_content_type(connector_state); ++ ++#ifdef CONFIG_X86_PS5 ++ /* Hardcode RGB888. */ ++ timing_out->pixel_encoding = PIXEL_ENCODING_RGB; ++ timing_out->display_color_depth = COLOR_DEPTH_888; ++#endif + } + + static void fill_audio_info(struct audio_info *audio_info, +@@ -8163,6 +8175,20 @@ create_validate_stream_for_sink(struct drm_connector *connector, + return stream; + } + ++#ifdef CONFIG_X86_PS5 ++static bool is_ps5_supported(const struct drm_display_mode *mode) ++{ ++ switch (mode->clock) { ++ case 148500: ++ case 241500: ++ case 241700: ++ case 594000: ++ return true; ++ } ++ return false; ++} ++#endif ++ + enum drm_mode_status amdgpu_dm_connector_mode_valid(struct drm_connector *connector, + const struct drm_display_mode *mode) + { +@@ -8176,6 +8202,11 @@ enum drm_mode_status amdgpu_dm_connector_mode_valid(struct drm_connector *connec + */ + struct amdgpu_dm_connector *aconnector = to_amdgpu_dm_connector(connector); + ++#ifdef CONFIG_X86_PS5 ++ if (!is_ps5_supported(mode)) ++ return MODE_ERROR; ++#endif ++ + if ((mode->flags & DRM_MODE_FLAG_INTERLACE) || + (mode->flags & DRM_MODE_FLAG_DBLSCAN)) + return result; +diff --git a/drivers/gpu/drm/amd/display/dc/core/dc_resource.c b/drivers/gpu/drm/amd/display/dc/core/dc_resource.c +index 848c267ef11e..d1ea8035e7a2 100644 +--- a/drivers/gpu/drm/amd/display/dc/core/dc_resource.c ++++ b/drivers/gpu/drm/amd/display/dc/core/dc_resource.c +@@ -204,6 +204,7 @@ enum dce_version resource_parse_asic_id(struct hw_asic_id asic_id) + asic_id.chip_id == DEVICE_ID_NV_13FA || + asic_id.chip_id == DEVICE_ID_NV_13FB || + asic_id.chip_id == DEVICE_ID_NV_13FC || ++ asic_id.chip_id == DEVICE_ID_NV_13DA || + asic_id.chip_id == DEVICE_ID_NV_13DB) { + dc_version = DCN_VERSION_2_01; + break; +diff --git a/drivers/gpu/drm/amd/display/dc/hwss/dce110/dce110_hwseq.c b/drivers/gpu/drm/amd/display/dc/hwss/dce110/dce110_hwseq.c +index 8b8410ef3e47..ca166dc00ac5 100644 +--- a/drivers/gpu/drm/amd/display/dc/hwss/dce110/dce110_hwseq.c ++++ b/drivers/gpu/drm/amd/display/dc/hwss/dce110/dce110_hwseq.c +@@ -1786,6 +1786,11 @@ static void power_down_clock_sources(struct dc *dc) + + static void power_down_all_hw_blocks(struct dc *dc) + { ++#ifdef CONFIG_X86_PS5 ++ /* Ignore this to prevent blackscreen. */ ++ return; ++#endif ++ + power_down_encoders(dc); + + power_down_controllers(dc); +diff --git a/drivers/gpu/drm/amd/display/dc/link/link_dpms.c b/drivers/gpu/drm/amd/display/dc/link/link_dpms.c +index a36762915943..af640139b1f3 100644 +--- a/drivers/gpu/drm/amd/display/dc/link/link_dpms.c ++++ b/drivers/gpu/drm/amd/display/dc/link/link_dpms.c +@@ -35,6 +35,9 @@ + * boundary between link and stream is not clearly defined. + */ + ++#ifdef CONFIG_X86_PS5 ++#include ++#endif + #include "link_dpms.h" + #include "link_hwss.h" + #include "link_validation.h" +@@ -2472,6 +2475,10 @@ void link_set_dpms_off(struct pipe_ctx *pipe_ctx) + /* since current psp not loaded, we need to reset it to default */ + link->panel_mode = panel_mode; + } ++ ++#ifdef CONFIG_X86_PS5 ++ sceHdmiInitVideoConfig(); ++#endif + } + + void link_set_dpms_on( +@@ -2690,4 +2697,17 @@ void link_set_dpms_on( + if (dc_is_hdmi_signal(pipe_ctx->stream->signal)) { + set_avmute(pipe_ctx, false); + } ++ ++#ifdef CONFIG_X86_PS5 ++ struct dc_crtc_timing *t = &pipe_ctx->stream->timing; ++ ++ int w = t->h_addressable; ++ int h = t->v_addressable; ++ int hz = (t->pix_clk_100hz * 100) / (t->h_total * t->v_total); ++ ++ sceHdmiSetVideoConfig(w, h, hz); ++ sceHdmiSetAudioConfig(); ++ sceHdmiDeviceSetVideoMute(0); ++ sceHdmiSetAudioMute(0); ++#endif + } +diff --git a/drivers/gpu/drm/amd/display/dc/link/protocols/link_dp_capability.c b/drivers/gpu/drm/amd/display/dc/link/protocols/link_dp_capability.c +index ad90a0106938..25a9166cbc90 100644 +--- a/drivers/gpu/drm/amd/display/dc/link/protocols/link_dp_capability.c ++++ b/drivers/gpu/drm/amd/display/dc/link/protocols/link_dp_capability.c +@@ -1015,6 +1015,12 @@ bool link_decide_link_settings(struct dc_stream_state *stream, + decide_dp_link_settings(link, link_setting, req_bw); + } + ++#ifdef CONFIG_X86_PS5 ++ /* Hardcode HBR3x4 link setting. */ ++ link_setting->link_rate = LINK_RATE_HIGH3; ++ link_setting->lane_count = LANE_COUNT_FOUR; ++#endif ++ + return link_setting->lane_count != LANE_COUNT_UNKNOWN && + link_setting->link_rate != LINK_RATE_UNKNOWN; + } +@@ -1455,6 +1461,8 @@ void dpcd_set_source_specific_data(struct dc_link *link) + (uint8_t *)(&amd_device_id), + sizeof(amd_device_id)); + ++#ifndef CONFIG_X86_PS5 ++ /* Ignore unsupported dpcd address. */ + if (link->ctx->dce_version >= DCN_VERSION_2_0 && + link->dc->caps.min_horizontal_blanking_period != 0) { + +@@ -1464,6 +1472,7 @@ void dpcd_set_source_specific_data(struct dc_link *link) + DP_SOURCE_MINIMUM_HBLANK_SUPPORTED, (uint8_t *)(&hblank_size), + sizeof(hblank_size)); + } ++#endif + DC_TRACE_LEVEL_MESSAGE(DAL_TRACE_LEVEL_INFORMATION, + WPP_BIT_FLAG_DC_DETECTION_DP_CAPS, + "result=%u link_index=%u enum dce_version=%d DPCD=0x%04X min_hblank=%u branch_dev_id=0x%x branch_dev_name='%c%c%c%c%c%c'", +diff --git a/drivers/gpu/drm/amd/display/dc/link/protocols/link_dp_phy.c b/drivers/gpu/drm/amd/display/dc/link/protocols/link_dp_phy.c +index 49521ac4b0e8..f68e7dae2bfd 100644 +--- a/drivers/gpu/drm/amd/display/dc/link/protocols/link_dp_phy.c ++++ b/drivers/gpu/drm/amd/display/dc/link/protocols/link_dp_phy.c +@@ -63,8 +63,11 @@ void dp_enable_link_phy( + const struct dc_link_settings *link_settings) + { + link->cur_link_settings = *link_settings; ++#ifndef CONFIG_X86_PS5 ++ /* Ignore this call to prevent link training failure. */ + link->dc->hwss.enable_dp_link_output(link, link_res, signal, + clock_source, link_settings); ++#endif + dpcd_write_rx_power_ctrl(link, true); + } + +@@ -79,7 +82,10 @@ void dp_disable_link_phy(struct dc_link *link, + link->type != dc_connection_none) + dpcd_write_rx_power_ctrl(link, false); + ++#ifndef CONFIG_X86_PS5 ++ /* Ignore this call to prevent link training failure. */ + dc->hwss.disable_link_output(link, link_res, signal); ++#endif + /* Clear current link setting.*/ + memset(&link->cur_link_settings, 0, + sizeof(link->cur_link_settings)); +@@ -146,6 +152,11 @@ enum dc_status dp_set_fec_ready(struct dc_link *link, const struct link_resource + enum dc_status status = DC_OK; + uint8_t fec_config = 0; + ++#ifdef CONFIG_X86_PS5 ++ /* Ignore this to prevent flickering. */ ++ return DC_NOT_SUPPORTED; ++#endif ++ + if (!link->dc->config.unify_link_enc_assignment) + link_enc = link_enc_cfg_get_link_enc(link); + ASSERT(link_enc); +@@ -181,6 +192,11 @@ void dp_set_fec_enable(struct dc_link *link, const struct link_resource *link_re + { + struct link_encoder *link_enc = link_res->dio_link_enc; + ++#ifdef CONFIG_X86_PS5 ++ /* Ignore this to prevent flickering. */ ++ return; ++#endif ++ + if (!link->dc->config.unify_link_enc_assignment) + link_enc = link_enc_cfg_get_link_enc(link); + +diff --git a/drivers/gpu/drm/amd/display/include/dal_asic_id.h b/drivers/gpu/drm/amd/display/include/dal_asic_id.h +index 8aea50aa9533..8b647bd95691 100644 +--- a/drivers/gpu/drm/amd/display/include/dal_asic_id.h ++++ b/drivers/gpu/drm/amd/display/include/dal_asic_id.h +@@ -217,6 +217,7 @@ enum { + #define DEVICE_ID_NV_13FA 0x13FA + #define DEVICE_ID_NV_13FB 0x13FB + #define DEVICE_ID_NV_13FC 0x13FC ++#define DEVICE_ID_NV_13DA 0x13DA + #define DEVICE_ID_NV_13DB 0x13DB + #define FAMILY_VGH 144 + #define DEVICE_ID_VGH_163F 0x163F +diff --git a/drivers/gpu/drm/drm_edid.c b/drivers/gpu/drm/drm_edid.c +index 26bb7710a462..281a41166e78 100644 +--- a/drivers/gpu/drm/drm_edid.c ++++ b/drivers/gpu/drm/drm_edid.c +@@ -2219,6 +2219,10 @@ static void connector_bad_edid(struct drm_connector *connector, + edid_block_dump(KERN_DEBUG, edid + i, i); + } + ++#ifdef CONFIG_X86_PS5 ++extern struct drm_edid *real_edid; ++#endif ++ + /* Get override or firmware EDID */ + static const struct drm_edid *drm_edid_override_get(struct drm_connector *connector) + { +@@ -2234,6 +2238,11 @@ static const struct drm_edid *drm_edid_override_get(struct drm_connector *connec + if (!override) + override = drm_edid_load_firmware(connector); + ++#ifdef CONFIG_X86_PS5 ++ if (IS_ERR(override) && real_edid) ++ override = drm_edid_dup(real_edid); ++#endif ++ + return IS_ERR(override) ? NULL : override; + } + +diff --git a/drivers/hwmon/k10temp.c b/drivers/hwmon/k10temp.c +index a5d8f45b7881..3c7b76af13e4 100644 +--- a/drivers/hwmon/k10temp.c ++++ b/drivers/hwmon/k10temp.c +@@ -476,6 +476,7 @@ static int k10temp_probe(struct pci_dev *pdev, const struct pci_device_id *id) + break; + case 0x31: /* Zen2 Threadripper */ + case 0x47: /* Cyan Skillfish */ ++ case 0x48: /* PS5 */ + case 0x60: /* Renoir */ + case 0x68: /* Lucienne */ + case 0x71: /* Zen2 */ +diff --git a/drivers/iommu/amd/init.c b/drivers/iommu/amd/init.c +index 58d6f5ae155f..8dc815dd8ec7 100644 +--- a/drivers/iommu/amd/init.c ++++ b/drivers/iommu/amd/init.c +@@ -3088,6 +3088,8 @@ static void __init free_iommu_resources(void) + free_pci_segments(); + } + ++#ifndef CONFIG_X86_PS5 ++ + /* SB IOAPIC is always on this device in AMD systems */ + #define IOAPIC_SB_DEVID ((0x00 << 8) | PCI_DEVFN(0x14, 0)) + +@@ -3140,6 +3142,8 @@ static bool __init check_ioapic_information(void) + return ret; + } + ++#endif ++ + static void __init free_dma_resources(void) + { + amd_iommu_pdom_id_destroy(); +@@ -3264,8 +3268,11 @@ static int __init early_amd_iommu_init(void) + if (!is_kdump_kernel() || amd_iommu_disabled) + disable_iommus(); + ++#ifndef CONFIG_X86_PS5 ++ /* IOAPIC is not available. */ + if (amd_iommu_irq_remap) + amd_iommu_irq_remap = check_ioapic_information(); ++#endif + + if (amd_iommu_irq_remap) { + struct amd_iommu_pci_seg *pci_seg; +diff --git a/drivers/pci/probe.c b/drivers/pci/probe.c +index cd1cd044aaf9..b2422bea5d3c 100644 +--- a/drivers/pci/probe.c ++++ b/drivers/pci/probe.c +@@ -2869,7 +2869,12 @@ static int next_ari_fn(struct pci_bus *bus, struct pci_dev *dev, int fn) + + pos = pci_find_ext_capability(dev, PCI_EXT_CAP_ID_ARI); + if (!pos) ++#ifdef CONFIG_X86_PS5 ++ /* PCI config via sfc_read does not have ARI capability, so just assume fn + 1. */ ++ return fn + 1; ++#else + return -ENODEV; ++#endif + + pci_read_config_word(dev, pos + PCI_ARI_CAP, &cap); + next_fn = PCI_ARI_CAP_NFN(cap); +diff --git a/drivers/ps5/Makefile b/drivers/ps5/Makefile +new file mode 100644 +index 000000000000..b70ff1467446 +--- /dev/null ++++ b/drivers/ps5/Makefile +@@ -0,0 +1 @@ ++obj-y += spcie.o tpcie.o hdmi.o +diff --git a/drivers/ps5/hdmi.c b/drivers/ps5/hdmi.c +new file mode 100644 +index 000000000000..685e4c431b4b +--- /dev/null ++++ b/drivers/ps5/hdmi.c +@@ -0,0 +1,1022 @@ ++#include ++#include ++#include ++ ++#define HDMI_IC_TYPE_FLAVA3 2 ++#define HDMI_IC_TYPE_VERDE 3 ++ ++struct icc_i2c_msg { ++ u8 code; ++ u16 length; ++ u8 count; ++ u8 data[]; ++} __packed; ++ ++struct i2c_cmd_hdr { ++ u8 major; ++ u8 length; ++ u8 minor; ++ u8 count; ++ u8 data[]; ++} __packed; ++ ++struct i2c_cmd_2_1 { ++ u8 length; ++ u8 reg_high; ++ u8 reg_low; ++ u8 data[]; ++} __packed; ++ ++struct i2c_cmd_write { ++ u8 length; ++ u8 reg_high; ++ u8 reg_low; ++ u8 data[]; ++} __packed; ++ ++struct i2c_cmd_mask { ++ u8 length; ++ u8 reg_high; ++ u8 reg_low; ++ u8 value; ++ u8 mask[]; ++} __packed; ++ ++struct i2c_cmd_delay { ++ u8 length; ++ u8 time_low; ++ u8 time_high; ++ u8 unk_03; ++} __packed; ++ ++struct i2c_cmd_waitset { ++ u8 length; ++ u8 reg_high; ++ u8 reg_low; ++ u8 value; ++} __packed; ++ ++struct i2c_cmd_waitclear { ++ u8 length; ++ u8 reg_high; ++ u8 reg_low; ++ u8 value; ++} __packed; ++ ++struct i2c_cmd_3_5 { ++ u8 length; ++ u8 reg_high; ++ u8 reg_low; ++ u8 value; ++} __packed; ++ ++struct i2c_cmd_5_3 { ++ u8 value; ++} __packed; ++ ++struct i2c_cmd_5_4 { ++ u8 value; ++} __packed; ++ ++struct i2c_cmd_5_5 { ++ u8 value; ++} __packed; ++ ++struct i2c_block { ++ u8 length; ++ u16 reg; ++ u8 data[32]; ++}; ++ ++struct i2c_context { ++ struct i2c_block blocks[128]; ++ int block_index; ++ u8 msg_buf[ICC_MSG_MAX_SIZE - sizeof(struct icc_msg)]; ++ u8 *msg_cur; ++ struct icc_i2c_msg *msg_hdr; ++}; ++ ++static struct i2c_context i2c_ctx; ++ ++static u8 hdmi_ic_type; ++static u8 tmds_polarity; ++static u8 tmds_ch_swap; ++static u8 dp_polarity; ++static u8 dp_ch_swap; ++ ++static void i2c_init(u8 code) ++{ ++ i2c_ctx.msg_cur = i2c_ctx.msg_buf; ++ i2c_ctx.msg_hdr = (struct icc_i2c_msg *)i2c_ctx.msg_cur; ++ ++ i2c_ctx.msg_hdr->code = code; ++ i2c_ctx.msg_hdr->length = 0; ++ i2c_ctx.msg_hdr->count = 0; ++ i2c_ctx.block_index = -1; ++ ++ i2c_ctx.msg_cur += sizeof(*i2c_ctx.msg_hdr); ++} ++ ++static int i2c_exec(void) ++{ ++ u8 buf[ICC_MSG_MAX_SIZE] = {}; ++ struct icc_msg *msg = (struct icc_msg *)buf; ++ int ret; ++ ++ i2c_ctx.msg_hdr->length = i2c_ctx.msg_cur - i2c_ctx.msg_buf; ++ ++ msg->service_id = ICC_SERVICE_ID_HDMI; ++ msg->msg_type = 0; ++ msg->length = sizeof(*msg) + i2c_ctx.msg_hdr->length; ++ memcpy(msg->data, i2c_ctx.msg_hdr, i2c_ctx.msg_hdr->length); ++ ++ ret = icc_query(buf, buf); ++ if (ret) ++ return ret; ++ ++ return 0; ++} ++ ++static void i2c_write_block(struct i2c_block *block, size_t count) ++{ ++ struct i2c_cmd_hdr *hdr = (struct i2c_cmd_hdr *)i2c_ctx.msg_cur; ++ int i; ++ ++ hdr->major = 2; ++ hdr->minor = 2; ++ hdr->count = count; ++ hdr->length = sizeof(*hdr); ++ i2c_ctx.msg_cur += sizeof(*hdr); ++ ++ for (i = 0; i < count; i++) { ++ struct i2c_cmd_write *cmd = (struct i2c_cmd_write *)i2c_ctx.msg_cur; ++ ++ cmd->length = block[i].length; ++ cmd->reg_low = block[i].reg & 0xff; ++ cmd->reg_high = block[i].reg >> 8; ++ memcpy(cmd->data, block[i].data, block[i].length); ++ ++ i2c_ctx.msg_cur += sizeof(*cmd) + cmd->length; ++ hdr->length += sizeof(*cmd) + cmd->length; ++ } ++ ++ i2c_ctx.msg_hdr->count++; ++} ++ ++static void i2c_begin_block(void) ++{ ++ i2c_ctx.block_index = 0; ++} ++ ++static void i2c_end_block(void) ++{ ++ if (i2c_ctx.block_index > 0) ++ i2c_write_block(i2c_ctx.blocks, i2c_ctx.block_index); ++ i2c_ctx.block_index = -1; ++} ++ ++static void i2c_write_data(u16 reg, u8 value[], size_t count) ++{ ++ struct i2c_block *block; ++ bool new_block = i2c_ctx.block_index == -1; ++ ++ if (new_block) ++ i2c_begin_block(); ++ ++ block = &i2c_ctx.blocks[i2c_ctx.block_index++]; ++ block->reg = reg; ++ block->length = count; ++ memcpy(block->data, value, count); ++ ++ if (new_block) ++ i2c_end_block(); ++} ++ ++static void i2c_write(u16 reg, u8 value) ++{ ++ i2c_write_data(reg, &value, 1); ++} ++ ++static void i2c_cmd_2_1(u16 reg, u8 unk) ++{ ++ struct i2c_cmd_hdr *hdr = (struct i2c_cmd_hdr *)i2c_ctx.msg_cur; ++ hdr->major = 2; ++ hdr->minor = 1; ++ hdr->count = 1; ++ hdr->length = sizeof(*hdr); ++ i2c_ctx.msg_cur += sizeof(*hdr); ++ ++ struct i2c_cmd_2_1 *cmd = (struct i2c_cmd_2_1 *)i2c_ctx.msg_cur; ++ cmd->length = 1; ++ cmd->reg_low = reg & 0xff; ++ cmd->reg_high = reg >> 8; ++ cmd->data[0] = unk; ++ i2c_ctx.msg_cur += sizeof(*cmd) + cmd->length; ++ hdr->length += sizeof(*cmd) + cmd->length; ++ ++ i2c_ctx.msg_hdr->count++; ++} ++ ++static void i2c_delay(u16 time) ++{ ++ struct i2c_cmd_hdr *hdr = (struct i2c_cmd_hdr *)i2c_ctx.msg_cur; ++ hdr->major = 3; ++ hdr->minor = 1; ++ hdr->count = 1; ++ hdr->length = sizeof(*hdr); ++ i2c_ctx.msg_cur += sizeof(*hdr); ++ ++ struct i2c_cmd_delay *cmd = (struct i2c_cmd_delay *)i2c_ctx.msg_cur; ++ cmd->length = 0; ++ cmd->time_low = time & 0xff; ++ cmd->time_high = time >> 8; ++ cmd->unk_03 = 0; ++ i2c_ctx.msg_cur += sizeof(*cmd) + cmd->length; ++ hdr->length += sizeof(*cmd) + cmd->length; ++ ++ i2c_ctx.msg_hdr->count++; ++} ++ ++static void i2c_mask(u16 reg, u8 value, u8 mask) ++{ ++ struct i2c_cmd_hdr *hdr = (struct i2c_cmd_hdr *)i2c_ctx.msg_cur; ++ hdr->major = 2; ++ hdr->minor = 3; ++ hdr->count = 1; ++ hdr->length = sizeof(*hdr); ++ i2c_ctx.msg_cur += sizeof(*hdr); ++ ++ struct i2c_cmd_mask *cmd = (struct i2c_cmd_mask *)i2c_ctx.msg_cur; ++ cmd->length = 1; ++ cmd->reg_low = reg & 0xff; ++ cmd->reg_high = reg >> 8; ++ cmd->value = value; ++ cmd->mask[0] = mask; ++ i2c_ctx.msg_cur += sizeof(*cmd) + cmd->length; ++ hdr->length += sizeof(*cmd) + cmd->length; ++ ++ i2c_ctx.msg_hdr->count++; ++} ++ ++static void i2c_waitset(u16 reg, u8 value) ++{ ++ struct i2c_cmd_hdr *hdr = (struct i2c_cmd_hdr *)i2c_ctx.msg_cur; ++ hdr->major = 3; ++ hdr->minor = 2; ++ hdr->count = 1; ++ hdr->length = sizeof(*hdr); ++ i2c_ctx.msg_cur += sizeof(*hdr); ++ ++ struct i2c_cmd_waitset *cmd = (struct i2c_cmd_waitset *)i2c_ctx.msg_cur; ++ cmd->length = 0; ++ cmd->reg_low = reg & 0xff; ++ cmd->reg_high = reg >> 8; ++ cmd->value = value; ++ i2c_ctx.msg_cur += sizeof(*cmd) + cmd->length; ++ hdr->length += sizeof(*cmd) + cmd->length; ++ ++ i2c_ctx.msg_hdr->count++; ++} ++ ++static void i2c_waitclear(u16 reg, u8 value) ++{ ++ struct i2c_cmd_hdr *hdr = (struct i2c_cmd_hdr *)i2c_ctx.msg_cur; ++ hdr->major = 3; ++ hdr->minor = 3; ++ hdr->count = 1; ++ hdr->length = sizeof(*hdr); ++ i2c_ctx.msg_cur += sizeof(*hdr); ++ ++ struct i2c_cmd_waitclear *cmd = (struct i2c_cmd_waitclear *)i2c_ctx.msg_cur; ++ cmd->length = 0; ++ cmd->reg_low = reg & 0xff; ++ cmd->reg_high = reg >> 8; ++ cmd->value = value; ++ i2c_ctx.msg_cur += sizeof(*cmd) + cmd->length; ++ hdr->length += sizeof(*cmd) + cmd->length; ++ ++ i2c_ctx.msg_hdr->count++; ++} ++ ++static void i2c_cmd_3_5(u16 reg, u8 value) ++{ ++ struct i2c_cmd_hdr *hdr = (struct i2c_cmd_hdr *)i2c_ctx.msg_cur; ++ hdr->major = 3; ++ hdr->minor = 5; ++ hdr->count = 1; ++ hdr->length = sizeof(*hdr); ++ i2c_ctx.msg_cur += sizeof(*hdr); ++ ++ struct i2c_cmd_3_5 *cmd = (struct i2c_cmd_3_5 *)i2c_ctx.msg_cur; ++ cmd->length = 0; ++ cmd->reg_low = reg & 0xff; ++ cmd->reg_high = reg >> 8; ++ cmd->value = value; ++ i2c_ctx.msg_cur += sizeof(*cmd) + cmd->length; ++ hdr->length += sizeof(*cmd) + cmd->length; ++ ++ i2c_ctx.msg_hdr->count++; ++} ++ ++static void i2c_cmd_5_3(u8 unk) ++{ ++ struct i2c_cmd_hdr *hdr = (struct i2c_cmd_hdr *)i2c_ctx.msg_cur; ++ hdr->major = 5; ++ hdr->minor = 3; ++ hdr->count = 1; ++ hdr->length = sizeof(*hdr); ++ i2c_ctx.msg_cur += sizeof(*hdr); ++ ++ struct i2c_cmd_5_3 *cmd = (struct i2c_cmd_5_3 *)i2c_ctx.msg_cur; ++ cmd->value = unk; ++ i2c_ctx.msg_cur += sizeof(*cmd); ++ hdr->length += sizeof(*cmd); ++ ++ i2c_ctx.msg_hdr->count++; ++} ++ ++static void i2c_cmd_5_4(u8 event) ++{ ++ struct i2c_cmd_hdr *hdr = (struct i2c_cmd_hdr *)i2c_ctx.msg_cur; ++ hdr->major = 5; ++ hdr->minor = 4; ++ hdr->count = 1; ++ hdr->length = sizeof(*hdr); ++ i2c_ctx.msg_cur += sizeof(*hdr); ++ ++ struct i2c_cmd_5_4 *cmd = (struct i2c_cmd_5_4 *)i2c_ctx.msg_cur; ++ cmd->value = event; ++ i2c_ctx.msg_cur += sizeof(*cmd); ++ hdr->length += sizeof(*cmd); ++ ++ i2c_ctx.msg_hdr->count++; ++} ++ ++static void i2c_cmd_5_5(u8 event) ++{ ++ struct i2c_cmd_hdr *hdr = (struct i2c_cmd_hdr *)i2c_ctx.msg_cur; ++ hdr->major = 5; ++ hdr->minor = 5; ++ hdr->count = 1; ++ hdr->length = sizeof(*hdr); ++ i2c_ctx.msg_cur += sizeof(*hdr); ++ ++ struct i2c_cmd_5_5 *cmd = (struct i2c_cmd_5_5 *)i2c_ctx.msg_cur; ++ cmd->value = event; ++ i2c_ctx.msg_cur += sizeof(*cmd); ++ hdr->length += sizeof(*cmd); ++ ++ i2c_ctx.msg_hdr->count++; ++} ++ ++static int stopHdcpHw(void) ++{ ++ u8 buf[ICC_MSG_MAX_SIZE] = {}; ++ struct icc_msg *msg = (struct icc_msg *)buf; ++ ++ msg->service_id = ICC_SERVICE_ID_GENERAL; ++ msg->msg_type = 0x1f; ++ msg->length = ICC_MSG_MIN_SIZE; ++ ++ return icc_query(buf, buf); ++} ++ ++static void sceDisableEncode(void) ++{ ++ i2c_init(4); ++ i2c_mask(0x705f, 0x80, 0x80); ++ i2c_cmd_5_3(0x00); ++ i2c_mask(0x7021, 0x00, 0xf0); ++ i2c_cmd_2_1(0x7a88, 0xff); ++ i2c_waitclear(0x7a84, 0x01); ++ i2c_cmd_2_1(0x740a, 0xff); ++ i2c_waitclear(0x740a, 0xff); ++ i2c_mask(0x7419, 0x05, 0x07); ++ i2c_mask(0x7a8b, 0x00, 0x07); ++ i2c_delay(100); ++ i2c_exec(); ++} ++ ++static void initIsrForFlava3(void) ++{ ++ i2c_init(0); ++ i2c_begin_block(); ++ i2c_write(0x705f, 0x12); ++ i2c_write(0x6004, 0x80); ++ i2c_write(0x6020, 0x00); ++ i2c_write(0x7007, 0xff); ++ i2c_write(0x100c, 0x01); ++ i2c_write(0x6008, 0xc0); ++ i2c_write(0x6207, 0x00); ++ i2c_write(0x621b, 0x00); ++ i2c_write_data(0x6080, (u8[]){0xff, 0xff, 0xff, 0xff, 0xff, 0xff}, 6); ++ i2c_write_data(0x6090, (u8[]){0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff}, 8); ++ i2c_write_data(0x10e7, (u8[]){0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff}, 8); ++ i2c_write_data(0x10e9, (u8[]){0xff, 0xff}, 2); ++ i2c_write_data(0x10f0, (u8[]){0xff, 0x07, 0x00, 0x0f, 0x00, 0x56, 0x00, 0x00, 0xd0, 0x00}, 10); ++ i2c_write(0x7018, (tmds_polarity == 1) << 1); ++ i2c_end_block(); ++ if (tmds_ch_swap == 1) { ++ i2c_mask(0x701a, 0xb1, 0xff); ++ } ++ i2c_exec(); ++} ++ ++static void initDpForFlava3(void) ++{ ++ i2c_init(0); ++ i2c_begin_block(); ++ i2c_write(0x6a03, 0x04); ++ i2c_write(0x60a2, 0xf1); ++ i2c_write(0x60bf, 0x03); ++ i2c_write(0x60c0, 0xef); ++ i2c_write(0x60c3, 0x4d); ++ i2c_write(0x60c7, 0x85); ++ i2c_write(0x60bf, 0x04); ++ i2c_write(0x60c7, 0x84); ++ if (dp_polarity != 0xff) { ++ i2c_write(0x600e, dp_polarity << 4); ++ } ++ if (dp_ch_swap != 0xff) { ++ i2c_write(0x600b, dp_ch_swap); ++ } ++ i2c_write_data(0x6220, (u8[]){0x40, 0x00, 0x80, 0x00, 0x00, 0x01, 0x02}, 7); ++ i2c_write_data(0x6028, (u8[]){0x01, 0x02}, 2); ++ i2c_write_data(0x6058, (u8[]){0x01, 0x02, 0x03, 0x04}, 4); ++ i2c_write(0x62af, 0x01); ++ i2c_write(0x6207, 0x00); ++ i2c_write(0x621b, 0x00); ++ i2c_write(0x60e0, 0x1e); ++ i2c_write(0x603c, 0x04); ++ i2c_write(0x100e, 0x10); ++ i2c_end_block(); ++ i2c_delay(2); ++ i2c_write(0x6005, 0x01); ++ i2c_delay(2); ++ i2c_write(0x6008, 0x00); ++ i2c_exec(); ++} ++ ++static void initVerde(void) ++{ ++ i2c_init(0); ++ i2c_mask(0x105, 0x00, 0x03); ++ i2c_mask(0x104, 0x00, 0x02); ++ i2c_cmd_2_1(0x400, 0x00); ++ i2c_cmd_2_1(0x3261, 0x02); ++ i2c_begin_block(); ++ i2c_write(0x11, 0x03); ++ i2c_write(0x13, 0xff); ++ i2c_write_data(0x8000, (u8[]){0x00, 0x01, 0x07, 0x00}, 4); ++ i2c_write(0x108, 0x80); ++ i2c_write(0x9000, 0x01); ++ i2c_end_block(); ++ i2c_cmd_5_3(0x00); ++ i2c_exec(); ++} ++ ++void sceHdmiInitVideoConfig(void) ++{ ++ stopHdcpHw(); ++ if (hdmi_ic_type == HDMI_IC_TYPE_FLAVA3) { ++ sceDisableEncode(); ++ initIsrForFlava3(); ++ initDpForFlava3(); ++ } else { ++ initVerde(); ++ } ++} ++EXPORT_SYMBOL(sceHdmiInitVideoConfig); ++ ++static void configParamFlava3Pre(void) ++{ ++ i2c_init(1); ++ i2c_begin_block(); ++ i2c_write_data(0x6224, (u8[]){0x00, 0x01}, 2); ++ i2c_write_data(0x1047, (u8[]){0x00}, 1); ++ i2c_write_data(0x1050, (u8[]){0x00, 0x00, 0x00, 0x00}, 4); ++ i2c_write(0x7215, 0x00); ++ i2c_write(0x7077, 0x00); ++ i2c_write(0x7079, 0x80); ++ i2c_end_block(); ++ i2c_exec(); ++} ++ ++static void configLinkTrainingFlava3(void) ++{ ++ i2c_init(1); ++ i2c_begin_block(); ++ i2c_write_data(0x600c, (u8[]){0x01, 0x00}, 2); ++ i2c_write_data(0x6c00, (u8[]){0x1e, 0x84, 0x00}, 3); ++ i2c_end_block(); ++ i2c_mask(0x6005, 0x01, 0x01); ++ i2c_delay(2); ++ i2c_mask(0x6006, 0x04, 0x04); ++ i2c_delay(2); ++ i2c_write(0x6a03, 0x47); ++ i2c_delay(10); ++ i2c_waitset(0x60f8, 0xff); ++ i2c_waitset(0x60f9, 0x01); ++ i2c_write(0x6a01, 0x4d); ++ i2c_waitset(0x60f9, 0x1a); ++ i2c_waitset(0x6083, 0x02); ++ i2c_exec(); ++} ++ ++static void initHdmiPhyForFlava3_1st(void) ++{ ++ i2c_init(0); ++ i2c_begin_block(); ++ i2c_write(0x7022, 0x03); ++ i2c_write(0x7030, 0x40); ++ i2c_write_data(0x7024, (u8[]){0x04, 0x54}, 2); ++ i2c_write(0x7030, 0x41); ++ i2c_write_data(0x7024, (u8[]){0x04, 0x54}, 2); ++ i2c_write(0x7030, 0x42); ++ i2c_write_data(0x7024, (u8[]){0x04, 0x34}, 2); ++ i2c_write(0x7030, 0x43); ++ i2c_write_data(0x7024, (u8[]){0x04, 0x34}, 2); ++ i2c_write(0x7030, 0x04); ++ i2c_write_data(0x7024, (u8[]){0x04, 0x71}, 2); ++ i2c_write(0x7030, 0x14); ++ i2c_write(0x7025, 0x71); ++ i2c_write(0x7030, 0x24); ++ i2c_write(0x7025, 0x70); ++ i2c_write(0x7030, 0x34); ++ i2c_write(0x7025, 0x77); ++ i2c_write(0x7030, 0x05); ++ i2c_write_data(0x7024, (u8[]){0x04, 0x71}, 2); ++ i2c_write(0x7030, 0x15); ++ i2c_write(0x7025, 0x71); ++ i2c_write(0x7030, 0x25); ++ i2c_write(0x7025, 0x70); ++ i2c_write(0x7030, 0x35); ++ i2c_write(0x7025, 0x77); ++ i2c_write(0x7030, 0x06); ++ i2c_write_data(0x7024, (u8[]){0x04, 0x71}, 2); ++ i2c_write(0x7030, 0x16); ++ i2c_write(0x7025, 0x70); ++ i2c_write(0x7030, 0x26); ++ i2c_write(0x7025, 0x70); ++ i2c_write(0x7030, 0x36); ++ i2c_write(0x7025, 0x77); ++ i2c_end_block(); ++ i2c_exec(); ++} ++ ++static void initHdmiPhyForFlava3_2nd(void) ++{ ++ i2c_init(0); ++ i2c_begin_block(); ++ i2c_write(0x7030, 0x47); ++ i2c_write(0x7024, 0x04); ++ i2c_write(0x7025, 0x37); ++ i2c_write(0x7027, 0x17); ++ i2c_write(0x7030, 0x37); ++ i2c_write(0x7025, 0x71); ++ i2c_write(0x7027, 0x14); ++ i2c_write(0x7030, 0x48); ++ i2c_write(0x7024, 0x04); ++ i2c_write(0x7025, 0x37); ++ i2c_write(0x7027, 0x17); ++ i2c_write(0x7030, 0x38); ++ i2c_write(0x7025, 0x77); ++ i2c_write(0x7027, 0x14); ++ i2c_write(0x7030, 0x49); ++ i2c_write(0x7024, 0x01); ++ i2c_write(0x7030, 0x19); ++ i2c_write(0x7026, 0xcc); ++ i2c_write(0x7030, 0x29); ++ i2c_write(0x7026, 0xdd); ++ i2c_write(0x7030, 0x39); ++ i2c_write(0x7026, 0xef); ++ i2c_write(0x7030, 0x4a); ++ i2c_write(0x7024, 0x01); ++ i2c_write(0x7030, 0x1a); ++ i2c_write(0x7026, 0xcc); ++ i2c_write(0x7030, 0x2a); ++ i2c_write(0x7026, 0xdd); ++ i2c_write(0x7030, 0x3a); ++ i2c_write(0x7026, 0xef); ++ i2c_write(0x7030, 0x4b); ++ i2c_write(0x7024, 0x01); ++ i2c_write(0x7030, 0x1b); ++ i2c_write(0x7026, 0xcc); ++ i2c_write(0x7030, 0x2b); ++ i2c_write(0x7026, 0xdd); ++ i2c_write(0x7030, 0x3b); ++ i2c_write(0x7026, 0xef); ++ i2c_end_block(); ++ i2c_exec(); ++} ++ ++static void mask_7203(void) ++{ ++ i2c_init(1); ++ i2c_mask(0x7203, 0x00, 0x80); ++ i2c_exec(); ++} ++ ++static void setHdmiBasicVideoConfigFlava3(int w, int h, int hz) ++{ ++ i2c_init(1); ++ i2c_mask(0x7021, 0x00, 0xf0); ++ i2c_delay(500); ++ i2c_begin_block(); ++ i2c_write(0x100c, 0x01); ++ i2c_write_data(0x68a0, (u8[]){0x96, 0x04}, 2); ++ i2c_write(0x7005, 0x80); ++ i2c_write(0x7019, 0x00); ++ i2c_write(0x100c, 0x01); ++ i2c_write(0x7005, 0x80); ++ i2c_write(0x7009, 0x00); ++ i2c_write(0x7040, 0x42); ++ i2c_write(0x7225, 0x28); ++ if (h == 1080) { ++ i2c_write_data(0x7227, (u8[]){0x10, 0x00}, 2); ++ i2c_write_data(0x7070, (u8[]){0x10, 0x10, 0x00, 0x00, 0x00, 0x00}, 6); ++ } else if (h == 1440) { ++ i2c_write_data(0x7227, (u8[]){0x04, 0x00}, 2); ++ i2c_write_data(0x7070, (u8[]){0x00, 0x00, 0x00, 0x00, 0x00, 0xfb}, 6); ++ } else if (h == 2160) { ++ i2c_write_data(0x7227, (u8[]){0x06, 0x00}, 2); ++ i2c_write_data(0x7070, (u8[]){0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, 6); ++ } ++ i2c_write(0x70c0, 0xdc); ++ i2c_write(0x621b, 0x00); ++ i2c_write(0x629a, 0x00); ++ i2c_write_data(0x70c4, (u8[]){0x08, 0x08}, 2); ++ i2c_write(0x70c2, 0x00); ++ i2c_write(0x70fe, 0x02); ++ i2c_write(0x70c3, 0x00); ++ i2c_write(0x7018, (tmds_polarity == 1) << 1); ++ if (tmds_ch_swap == 1) { ++ i2c_end_block(); ++ i2c_mask(0x701a, 0xb1, 0xff); ++ i2c_begin_block(); ++ } ++ i2c_write(0x10e7, 0xff); ++ i2c_write(0x7202, 0x20); ++ if (h == 2160) { ++ i2c_write(0x7072, 0x01); ++ i2c_write(0x7074, 0x07); ++ i2c_write(0x7206, 0x80); ++ i2c_write(0x7203, 0x60); ++ i2c_write(0x7011, 0xff); ++ } else { ++ i2c_write(0x7203, 0x60); ++ i2c_write(0x7011, 0xd5); ++ } ++ i2c_end_block(); ++ i2c_waitclear(0x7011, 0xff); ++ i2c_exec(); ++} ++ ++static void setVideoAdditionalConfigFlava3(int w, int h, int hz) ++{ ++ i2c_init(1); ++ i2c_waitset(0x10e7, 0x80); ++ if (h == 2160) { ++ i2c_mask(0x7227, 0x61, 0xff); ++ } ++ // i2c_cmd_2_1(0x7231, 0x00); ++ // i2c_cmd_2_1(0x7232, 0x00); ++ i2c_mask(0x7226, 0x80, 0x80); ++ i2c_mask(0x7228, 0x30, 0x30); ++ i2c_write(0x7204, 0x40); ++ i2c_waitclear(0x7204, 0x40); ++ i2c_delay(10); ++ i2c_begin_block(); ++ if (h == 2160) { ++ i2c_write(0x7019, 0x01); ++ } else { ++ i2c_write(0x7019, 0x00); ++ } ++ i2c_write(0x7419, 0x05); ++ i2c_write(0x740a, 0xff); ++ i2c_end_block(); ++ i2c_waitclear(0x740a, 0xff); ++ i2c_begin_block(); ++ i2c_write(0x7404, 0x00); ++ i2c_write(0x7a88, 0xff); ++ i2c_end_block(); ++ i2c_waitclear(0x7a84, 0x01); ++ i2c_begin_block(); ++ i2c_write(0x7a8b, 0x05); ++ if (h == 2160) { ++ i2c_write(0x7c00, 0x03); ++ i2c_write_data(0x7a80, (u8[]){0xa8, 0x20, 0x00, 0x80}, 4); ++ } ++ i2c_end_block(); ++ if (h == 2160) { ++ i2c_waitclear(0x7a84, 0x01); ++ } ++ i2c_begin_block(); ++ i2c_write(0x7021, 0xff); ++ i2c_write(0x700a, 0x02); ++ i2c_write(0x705f, 0x80); ++ i2c_end_block(); ++ i2c_delay(500); ++ i2c_write(0x7a8b, 0x00); ++ i2c_cmd_5_3(0x01); ++ i2c_exec(); ++} ++ ++static void setHdmiVideoConfigFlava3(int w, int h, int hz) ++{ ++ configParamFlava3Pre(); ++ configLinkTrainingFlava3(); ++ setHdmiBasicVideoConfigFlava3(w, h, hz); ++ initHdmiPhyForFlava3_1st(); ++ initHdmiPhyForFlava3_2nd(); ++ mask_7203(); ++ setVideoAdditionalConfigFlava3(w, h, hz); ++} ++ ++static void linkConfigVerde(int w, int h, int hz) ++{ ++ i2c_init(0); ++ i2c_mask(0x105, 0x00, 0x40); ++ if (h == 1440) { ++ i2c_cmd_2_1(0x400, 0x03); ++ } ++ i2c_begin_block(); ++ i2c_write_data(0x9003, (u8[]){0x1e, 0x04, 0x01, 0x01, 0x00, 0x00, 0x00}, 7); ++ i2c_write(0x4002, 0x03); ++ i2c_end_block(); ++ i2c_exec(); ++} ++ ++static void configDpLinkTrainingVerde(void) ++{ ++ i2c_init(0); ++ i2c_cmd_2_1(0x9002, 0x01); ++ i2c_waitset(0x4001, 0x02); ++ i2c_cmd_2_1(0x11, 0x01); ++ i2c_exec(); ++} ++ ++static void setTmdsConfigVerde(void) ++{ ++ i2c_init(0); ++ i2c_cmd_2_1(0x9200, 0x00); ++ i2c_begin_block(); ++ i2c_write(0x9800, 0x00); ++ i2c_write(0x33b3, 0x1a); ++ i2c_write(0x9831, 0x80); ++ i2c_write_data(0x9810, (u8[]){0x00, 0x79, 0x00, 0x02, 0x0b, 0x00, 0x00}, 7); ++ i2c_end_block(); ++ i2c_waitclear(0x9830, 0x80); ++ i2c_cmd_2_1(0x9830, 0x80); ++ i2c_waitclear(0x9830, 0x80); ++ i2c_cmd_2_1(0x9830, 0x81); ++ i2c_waitclear(0x9830, 0x80); ++ i2c_waitclear(0x108, 0x10); ++ i2c_mask(0x108, 0x11, 0x17); ++ i2c_waitset(0x13, 0x40); ++ i2c_cmd_2_1(0x13, 0x40); ++ i2c_cmd_3_5(0x4001, 0x03); ++ i2c_cmd_2_1(0x11, 0x01); ++ i2c_exec(); ++} ++ ++static void setHdmiBasicVideoConfigVerde(int w, int h, int hz) ++{ ++ i2c_init(0); ++ i2c_begin_block(); ++ if (h == 1080) { ++ i2c_write_data(0x3058, (u8[]){0x02, 0x0d, 0xef, 0x00, 0x28, 0x08, 0x10, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, 18); ++ } else if (h == 1440) { ++ i2c_write_data(0x3058, (u8[]){0x02, 0x0d, 0xff, 0x00, 0x28, 0x08, 0x00, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, 18); ++ } else if (h == 2160) { ++ i2c_write_data(0x3058, (u8[]){0x02, 0x0d, 0x9e, 0x00, 0x28, 0x08, 0x61, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, 18); ++ } ++ i2c_write_data(0x31d0, (u8[]){0x01, 0x19, 0x5f, 0x53, 0x43, 0x45, 0x49, 0x00, 0x00, 0x00, 0x00, 0x50, 0x53, 0x35, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08}, 28); ++ i2c_end_block(); ++ i2c_begin_block(); ++ i2c_write_data(0x3033, (u8[]){0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, 9); ++ i2c_write_data(0x307a, (u8[]){0x01, 0x0a, 0x70, 0x01, 0x00, 0x00, 0x00, 0x00}, 8); ++ i2c_write_data(0x3000, (u8[]){0x56, 0xaa, 0x00, 0x24, 0x00, 0xa8, 0x00, 0x00, 0x08, 0x80}, 10); ++ i2c_end_block(); ++ i2c_cmd_2_1(0x300a, 0x01); ++ i2c_waitclear(0x300c, 0xf3); ++ i2c_waitclear(0x300d, 0xff); ++ i2c_waitclear(0x300e, 0xff); ++ i2c_waitclear(0x300f, 0xff); ++ i2c_waitclear(0x3010, 0xff); ++ i2c_waitclear(0x3011, 0xff); ++ i2c_waitset(0x13, 0x80); ++ i2c_cmd_2_1(0x13, 0x80); ++ i2c_mask(0x105, 0x01, 0x03); ++ i2c_delay(700); ++ i2c_cmd_5_3(0x01); ++ i2c_exec(); ++} ++ ++static void setHdmiVideoConfigVerde(int w, int h, int hz) ++{ ++ linkConfigVerde(w, h, hz); ++ configDpLinkTrainingVerde(); ++ setTmdsConfigVerde(); ++ setHdmiBasicVideoConfigVerde(w, h, hz); ++} ++ ++static void setHdmiAudioConfigBasic(void) ++{ ++ i2c_init(2); ++ i2c_begin_block(); ++ i2c_write(0x62a0, 0x06); ++ i2c_write(0x62a7, 0x13); ++ i2c_write(0x62ac, 0x82); ++ i2c_write(0x62cb, 0x02); ++ i2c_write(0x62cb, 0x03); ++ i2c_write(0x62cb, 0x00); ++ i2c_write(0x70ad, 0x00); ++ i2c_write(0x70af, 0x07); ++ i2c_write(0x70a9, 0x5e); ++ i2c_end_block(); ++ i2c_mask(0x70af, 0x06, 0x06); ++ i2c_mask(0x70b3, 0x02, 0x0f); ++ i2c_mask(0x70ae, 0x80, 0xe0); ++ i2c_mask(0x70ae, 0x05, 0x07); ++ i2c_mask(0x70ac, 0x01, 0x21); ++ i2c_mask(0x70ab, 0x81, 0x89); ++ i2c_mask(0x70a9, 0x08, 0x08); ++ i2c_exec(); ++} ++ ++static void setAudioConfigAdditional(void) ++{ ++ i2c_init(2); ++ i2c_mask(0x70b0, 0x00, 0xff); ++ i2c_mask(0x70b1, 0x79, 0xff); ++ i2c_mask(0x70b2, 0x00, 0xff); ++ i2c_mask(0x70b3, 0x02, 0xff); ++ i2c_mask(0x70b4, 0x0b, 0x0f); ++ i2c_mask(0x70b5, 0x00, 0xff); ++ i2c_mask(0x70b6, 0x00, 0xff); ++ i2c_begin_block(); ++ i2c_write(0x10e7, 0xff); ++ i2c_write(0x7011, 0xa2); ++ i2c_end_block(); ++ i2c_waitset(0x10e7, 0xa2); ++ i2c_mask(0x7267, 0x0b, 0xff); ++ i2c_write(0x7204, 0x10); ++ i2c_waitclear(0x7204, 0x10); ++ i2c_write(0x10e7, 0xff); ++ i2c_mask(0x7203, 0x10, 0x10); ++ i2c_delay(30); ++ i2c_write(0x70a8, 0xc0); ++ i2c_exec(); ++} ++ ++static void sceHdmiSetAudioConfigFlava3(void) ++{ ++ setHdmiAudioConfigBasic(); ++ setAudioConfigAdditional(); ++} ++ ++static void setAudioConfigForVerde(void) ++{ ++ i2c_init(2); ++ i2c_waitclear(0x102, 0x80); ++ i2c_cmd_2_1(0xf1, 0x01); ++ i2c_waitset(0xf2, 0x01); ++ i2c_waitset(0x16, 0x08); ++ i2c_cmd_2_1(0x16, 0x08); ++ i2c_begin_block(); ++ i2c_write(0x9800, 0x00); ++ i2c_write(0x33b3, 0x1a); ++ i2c_write(0x9831, 0x80); ++ i2c_write_data(0x9810, (u8[]){0x00, 0x79, 0x00, 0x02, 0x0b, 0x00, 0x00}, 7); ++ i2c_end_block(); ++ i2c_waitclear(0x9830, 0x80); ++ i2c_cmd_2_1(0x9830, 0x80); ++ i2c_waitclear(0x9830, 0x80); ++ i2c_cmd_2_1(0x9830, 0x81); ++ i2c_waitclear(0x9830, 0x80); ++ i2c_waitclear(0x108, 0x10); ++ i2c_mask(0x108, 0x10, 0x10); ++ i2c_waitclear(0x108, 0x10); ++ i2c_write_data(0x307a, (u8[]){0x01, 0x0a, 0x70, 0x01, 0x00, 0x00, 0x00, 0x00}, 8); ++ i2c_mask(0x3000, 0x40, 0xc0); ++ i2c_mask(0x3005, 0x80, 0xc0); ++ i2c_cmd_2_1(0x300a, 0x01); ++ i2c_waitset(0x13, 0x80); ++ i2c_cmd_2_1(0x13, 0x80); ++ i2c_exec(); ++} ++ ++static void sceHdmiSetAudioConfigVerde(void) ++{ ++ setAudioConfigForVerde(); ++} ++ ++void sceHdmiSetVideoConfig(int w, int h, int hz) ++{ ++ if (hdmi_ic_type == HDMI_IC_TYPE_FLAVA3) { ++ setHdmiVideoConfigFlava3(w, h, hz); ++ } else { ++ setHdmiVideoConfigVerde(w, h, hz); ++ } ++} ++EXPORT_SYMBOL(sceHdmiSetVideoConfig); ++ ++void sceHdmiDeviceSetVideoMute(int mute) ++{ ++ i2c_init(4); ++ if (hdmi_ic_type == HDMI_IC_TYPE_FLAVA3) { ++ i2c_write(0x705f, (mute == 1) << 7); ++ } else { ++ i2c_mask(0x105, mute != 1, 0x03); ++ } ++ i2c_exec(); ++} ++EXPORT_SYMBOL(sceHdmiDeviceSetVideoMute); ++ ++void sceHdmiSetAudioConfig(void) ++{ ++ if (hdmi_ic_type == HDMI_IC_TYPE_FLAVA3) { ++ sceHdmiSetAudioConfigFlava3(); ++ } else { ++ sceHdmiSetAudioConfigVerde(); ++ } ++} ++EXPORT_SYMBOL(sceHdmiSetAudioConfig); ++ ++void sceHdmiSetAudioMute(int mute) ++{ ++ i2c_init(4); ++ if (hdmi_ic_type == HDMI_IC_TYPE_FLAVA3) { ++ i2c_mask(0x70a8, (mute == 1) << 2, 0x04); ++ } else { ++ i2c_cmd_5_5(mute == 1); ++ } ++ i2c_exec(); ++} ++EXPORT_SYMBOL(sceHdmiSetAudioMute); ++ ++void sceControlHdmiEvent(u8 enable) ++{ ++ i2c_init(4); ++ i2c_cmd_5_4(enable); ++ i2c_exec(); ++} ++EXPORT_SYMBOL(sceControlHdmiEvent); ++ ++int getHdmiConfiguration(void) ++{ ++ u8 buf[ICC_MSG_MAX_SIZE] = {}; ++ struct icc_msg *msg = (struct icc_msg *)buf; ++ int ret; ++ ++ msg->service_id = ICC_SERVICE_ID_GENERAL; ++ msg->msg_type = 0x16; ++ msg->length = ICC_MSG_MIN_SIZE; ++ msg->data[0] = 0x10; ++ ++ ret = icc_query(buf, buf); ++ if (ret) ++ return ret; ++ ++ hdmi_ic_type = (msg->data[0x3] == 1) | 2; ++ tmds_polarity = msg->data[0x4] == 1; ++ tmds_ch_swap = msg->data[0x5] == 1; ++ dp_polarity = msg->data[0x6]; ++ dp_ch_swap = msg->data[0x7]; ++ ++ pr_info("HDMI IC Type [%s]\n", hdmi_ic_type == HDMI_IC_TYPE_FLAVA3 ? "FLAVA3" : "VERDE"); ++ pr_info("TMDS Polarity [%s]\n", tmds_polarity ? "Reverse" : "Normal"); ++ pr_info("TMDS Ch Swap [%s]\n", tmds_ch_swap ? "Swap" : "Normal"); ++ pr_info("DP Polarity [0x%x]\n", dp_polarity); ++ pr_info("DP Ch Swap [0x%x]\n", dp_ch_swap); ++ ++ return 0; ++} ++EXPORT_SYMBOL(getHdmiConfiguration); ++ ++const struct drm_edid *real_edid = NULL; ++ ++static void fix_edid(u8 *edid) ++{ ++ u32 sum = 0; ++ int i; ++ ++ // For some reason, PS5 sets 0x01. ++ edid[0] = 0x00; ++ ++ for (i = 0; i < 0x7f; i++) ++ sum += edid[i]; ++ ++ edid[0x7f] = -sum & 0xff; ++} ++ ++void hdmi_notification_handler(struct icc_msg *msg) ++{ ++ if (msg->data[1] == 0x02) { ++ fix_edid(&msg->data[4]); ++ real_edid = drm_edid_alloc(&msg->data[4], *(u16 *)&msg->data[2]); ++ pr_info(KERN_INFO "got real edid\n"); ++ } ++} ++EXPORT_SYMBOL(hdmi_notification_handler); +diff --git a/drivers/ps5/spcie.c b/drivers/ps5/spcie.c +new file mode 100644 +index 000000000000..ad25df4e063a +--- /dev/null ++++ b/drivers/ps5/spcie.c +@@ -0,0 +1,523 @@ ++#include ++#include ++#include ++ ++#define PCI_DEVICE_ID_SPCIE 0x9107 ++#define SPCIE_SUBFUNC_ICC 12 ++#define NUM_IRQS 16 ++ ++#define ICC_QUERY_OFFSET 0 ++#define ICC_REPLY_OFFSET 0x800 ++ ++#define ICC_DOORBELL_OFFSET 0x108000 ++ ++#define ICC_REG_SOW 0x7f0 ++#define ICC_REG_SOR 0x7f4 ++#define ICC_REG_EMW 0xff0 ++#define ICC_REG_EMR 0xff4 ++ ++#define ICC_REG_DOORBELL 0x04 ++#define ICC_REG_INTR_STATUS 0x14 ++#define ICC_REG_INTR_MASK 0x24 ++ ++#define ICC_SEND 0x01 ++#define ICC_ACK 0x02 ++ ++#define ICC_MSG_TYPE_REPLY 0x4000 ++#define ICC_MSG_TYPE_NOTIF 0x8000 ++ ++#define ICC_TIMEOUT_MSECS 12000 ++ ++struct spcie_dev; ++ ++struct spcie_icc_dev { ++ struct pci_dev *pdev; ++ struct spcie_dev *sdev; ++ struct mutex lock; ++ wait_queue_head_t wq; ++ void __iomem *icc_doorbell_base; ++ void __iomem *icc_base; ++ u16 icc_send_xtn_id; ++ u8 notification[ICC_MSG_MAX_SIZE]; ++ u16 notification_length; ++ u8 reply[ICC_MSG_MAX_SIZE]; ++ u16 reply_length; ++ bool reply_ready; ++}; ++ ++struct spcie_dev { ++ struct pci_dev *pdev; ++ void __iomem *bar2; ++ void __iomem *bar4; ++ struct spcie_icc_dev *icc_dev; ++}; ++ ++static struct spcie_icc_dev *icc_dev; ++ ++static u8 indicator_white_dim[] = { ++ 0x03, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x02, 0x00, 0x11, ++ 0x01, 0x00, 0x20, 0x00, 0x01, 0x00, 0x12, 0x01, 0x00, 0x00, 0x00, 0x02, ++ 0x00 ++}; ++ ++static u8 indicator_white_medium[] = { ++ 0x03, 0x00, 0x00, 0x00, 0x10, 0x01, 0x00, 0x00, 0x00, 0x02, 0x00, 0x11, ++ 0x01, 0x00, 0x5F, 0x00, 0x01, 0x00, 0x12, 0x01, 0x00, 0x00, 0x00, 0x02, ++ 0x00 ++}; ++ ++static u8 indicator_white_bright[] = { ++ 0x03, 0x00, 0x00, 0x00, 0x10, 0x01, 0x00, 0x00, 0x00, 0x02, 0x00, 0x11, ++ 0x01, 0x00, 0xFF, 0x00, 0x01, 0x00, 0x12, 0x01, 0x00, 0x00, 0x00, 0x02, ++ 0x00 ++}; ++ ++static u16 icc_checksum(struct icc_msg *msg) ++{ ++ u16 checksum = 0; ++ for (u16 i = 0; i < msg->length; i++) ++ checksum += ((u8 *)msg)[i]; ++ return checksum; ++} ++ ++static int icc_send(u8 *query) ++{ ++ struct icc_msg *msg; ++ ++ msg = (struct icc_msg *)query; ++ if (msg->length < ICC_MSG_MIN_SIZE) ++ msg->length = ICC_MSG_MIN_SIZE; ++ msg->magic = 0x42; ++ msg->unk_04 = 3; ++ msg->id = icc_dev->icc_send_xtn_id++; ++ msg->checksum = icc_checksum(msg); ++ ++ writew(0, icc_dev->icc_base + ICC_REG_SOR); ++ ++ for (u16 i = 0; i < msg->length; i++) ++ writeb(query[i], icc_dev->icc_base + ICC_QUERY_OFFSET + i); ++ ++ writew(1, icc_dev->icc_base + ICC_REG_SOW); ++ ++ writel(ICC_SEND, icc_dev->icc_doorbell_base + ICC_REG_DOORBELL); ++ ++ return 0; ++} ++ ++int icc_query(u8 *query, u8 *reply) ++{ ++ struct icc_msg *msg; ++ u16 checksum, expected; ++ int ret; ++ ++ mutex_lock(&icc_dev->lock); ++ ++ icc_dev->reply_ready = false; ++ ++ icc_send(query); ++ ++ ret = wait_event_interruptible_timeout(icc_dev->wq, icc_dev->reply_ready, ++ msecs_to_jiffies(ICC_TIMEOUT_MSECS)); ++ if (ret == 0) { ++ dev_err(&icc_dev->pdev->dev, "timeout\n"); ++ mutex_unlock(&icc_dev->lock); ++ return -ETIMEDOUT; ++ } else if (ret < 0) { ++ dev_err(&icc_dev->pdev->dev, "interrupted\n"); ++ mutex_unlock(&icc_dev->lock); ++ return -ETIMEDOUT; ++ } ++ ++ memcpy(reply, icc_dev->reply, icc_dev->reply_length); ++ ++ msg = (struct icc_msg *)reply; ++ expected = msg->checksum; ++ msg->checksum = 0; ++ checksum = icc_checksum(msg); ++ if (checksum != expected) { ++ dev_err(&icc_dev->pdev->dev, "checksum mismatch\n"); ++ mutex_unlock(&icc_dev->lock); ++ return -EINVAL; ++ } ++ ++ mutex_unlock(&icc_dev->lock); ++ return 0; ++} ++EXPORT_SYMBOL(icc_query); ++ ++int icc_usbc_set_pdcon_op_mode(u8 PortId, u8 OpMode) ++{ ++ u8 buf[ICC_MSG_MAX_SIZE] = {}; ++ struct icc_msg *msg = (struct icc_msg *)buf; ++ ++ msg->service_id = ICC_SERVICE_ID_USBC; ++ msg->msg_type = 0x10; ++ msg->length = ICC_MSG_MIN_SIZE; ++ msg->data[0] = PortId; ++ msg->data[1] = OpMode; ++ ++ return icc_query(buf, buf); ++} ++EXPORT_SYMBOL(icc_usbc_set_pdcon_op_mode); ++ ++int icc_configuration_set_cpu_info_bit(u8 *bit) ++{ ++ u8 buf[ICC_MSG_MAX_SIZE] = {}; ++ struct icc_msg *msg = (struct icc_msg *)buf; ++ ++ msg->service_id = ICC_SERVICE_ID_GENERAL; ++ msg->msg_type = 0x10; ++ msg->length = ICC_MSG_MIN_SIZE; ++ msg->data[0] = bit[1]; ++ msg->data[1] = bit[0]; ++ ++ return icc_query(buf, buf); ++} ++EXPORT_SYMBOL(icc_configuration_set_cpu_info_bit); ++ ++int icc_configuration_clear_cpu_info_bit(void) ++{ ++ u8 bit[2]; ++ int ret; ++ ++ bit[0] = 0; ++ bit[1] = 0; ++ ret = icc_configuration_set_cpu_info_bit(bit); ++ if (ret) ++ return ret; ++ ++ bit[0] = 0; ++ bit[1] = 1; ++ ret = icc_configuration_set_cpu_info_bit(bit); ++ if (ret) ++ return ret; ++ ++ return 0; ++} ++EXPORT_SYMBOL(icc_configuration_clear_cpu_info_bit); ++ ++__noreturn void icc_power_shutdown(void) ++{ ++ u8 buf[ICC_MSG_MAX_SIZE] = {}; ++ struct icc_msg *msg = (struct icc_msg *)buf; ++ ++ icc_configuration_clear_cpu_info_bit(); ++ ++ msg->service_id = ICC_SERVICE_ID_POWER; ++ msg->msg_type = 1; ++ msg->length = ICC_MSG_MIN_SIZE; ++ msg->data[0] = 0; ++ msg->data[1] = 0; // shutdown ++ msg->data[2] = 2; // depth ++ msg->data[3] = 0; // cause ++ msg->data[4] = 2; // hand ++ *(u32 *)&msg->data[5] = 0; ++ ++ icc_query(buf, buf); ++ while (1); ++} ++EXPORT_SYMBOL(icc_power_shutdown); ++ ++__noreturn void icc_power_reboot(void) ++{ ++ u8 buf[ICC_MSG_MAX_SIZE] = {}; ++ struct icc_msg *msg = (struct icc_msg *)buf; ++ ++ icc_configuration_clear_cpu_info_bit(); ++ ++ msg->service_id = ICC_SERVICE_ID_POWER; ++ msg->msg_type = 1; ++ msg->length = ICC_MSG_MIN_SIZE; ++ msg->data[0] = 0; ++ msg->data[1] = 1; // reboot ++ msg->data[2] = 2; // depth ++ msg->data[3] = 0; // cause ++ msg->data[4] = 2; // hand ++ *(u32 *)&msg->data[5] = 0; ++ ++ icc_query(buf, buf); ++ while (1); ++} ++EXPORT_SYMBOL(icc_power_reboot); ++ ++int icc_button_enable_notification(u8 type, u8 enable) ++{ ++ u8 buf[ICC_MSG_MAX_SIZE] = {}; ++ struct icc_msg *msg = (struct icc_msg *)buf; ++ ++ msg->service_id = ICC_SERVICE_ID_BUTTON; ++ msg->msg_type = 1; ++ msg->length = 0x20; ++ msg->data[0] = type; ++ msg->data[1] = enable; ++ ++ return icc_query(buf, buf); ++} ++EXPORT_SYMBOL(icc_button_enable_notification); ++ ++int icc_button_enable_all_notifications(u8 enable) ++{ ++ int ret; ++ ++ // power button ++ ret = icc_button_enable_notification(0, enable); ++ if (ret) ++ return ret; ++ ++ // eject button ++ ret = icc_button_enable_notification(1, enable); ++ if (ret) ++ return ret; ++ ++ // reset button ++ ret = icc_button_enable_notification(2, enable); ++ if (ret) ++ return ret; ++ ++ return 0; ++} ++EXPORT_SYMBOL(icc_button_enable_all_notifications); ++ ++int icc_thermal_enable_notification(u8 enable) ++{ ++ u8 buf[ICC_MSG_MAX_SIZE] = {}; ++ struct icc_msg *msg = (struct icc_msg *)buf; ++ ++ msg->service_id = ICC_SERVICE_ID_THERMAL; ++ msg->msg_type = 2; ++ msg->length = 0x20; ++ msg->data[0] = enable; ++ ++ return icc_query(buf, buf); ++} ++EXPORT_SYMBOL(icc_thermal_enable_notification); ++ ++int icc_indicator_set_led(u8 setting[], size_t setting_size) ++{ ++ u8 buf[ICC_MSG_MAX_SIZE] = {}; ++ struct icc_msg *msg = (struct icc_msg *)buf; ++ ++ msg->service_id = ICC_SERVICE_ID_INDICATOR; ++ msg->msg_type = 0x20; ++ msg->length = sizeof(*msg) + setting_size; ++ memcpy(msg->data, setting, setting_size); ++ ++ return icc_query(buf, buf); ++} ++EXPORT_SYMBOL(icc_indicator_set_led); ++ ++int icc_indicator_set_led_white(u8 level) ++{ ++ switch (level) { ++ case 0: ++ return icc_indicator_set_led(indicator_white_dim, sizeof(indicator_white_dim)); ++ case 1: ++ return icc_indicator_set_led(indicator_white_medium, sizeof(indicator_white_medium)); ++ case 2: ++ return icc_indicator_set_led(indicator_white_bright, sizeof(indicator_white_bright)); ++ default: ++ return -EINVAL; ++ } ++} ++EXPORT_SYMBOL(icc_indicator_set_led_white); ++ ++int icc_fan_change_servo_pattern(u8 pattern) ++{ ++ u8 buf[ICC_MSG_MAX_SIZE] = {}; ++ struct icc_msg *msg = (struct icc_msg *)buf; ++ ++ msg->service_id = ICC_SERVICE_ID_FAN; ++ msg->msg_type = 0xB; ++ msg->length = 0x20; ++ msg->data[0] = pattern; ++ msg->data[1] = pattern; ++ msg->data[2] = pattern; ++ msg->data[3] = pattern; ++ ++ return icc_query(buf, buf); ++} ++EXPORT_SYMBOL(icc_fan_change_servo_pattern); ++ ++static int icc_notification_handler(u8 service_id, u8 *buf) ++{ ++ struct icc_msg *msg = (struct icc_msg *)buf; ++ ++ if (service_id == ICC_SERVICE_ID_HDMI) { ++ hdmi_notification_handler(msg); ++ } else { ++ printk("service id: %x\n", service_id); ++ print_hex_dump(KERN_INFO, "event: ", DUMP_PREFIX_OFFSET, 16, 1, ++ msg->data, msg->length - sizeof(*msg), true); ++ } ++ ++ return 0; ++} ++ ++static irqreturn_t icc_interrupt(int irq, void *dev) ++{ ++ struct spcie_icc_dev *icc_dev = dev; ++ struct icc_msg *msg; ++ u32 intr_status; ++ ++ while (1) { ++ intr_status = readl(icc_dev->icc_doorbell_base + ICC_REG_INTR_STATUS); ++ if (!intr_status) ++ break; ++ ++ // Ack the interrupt. ++ writel(intr_status, icc_dev->icc_doorbell_base + ICC_REG_INTR_STATUS); ++ ++ if (intr_status & ICC_SEND) { ++ msg = (struct icc_msg *)(icc_dev->icc_base + ICC_REPLY_OFFSET); ++ ++ if (msg->msg_type & ICC_MSG_TYPE_NOTIF) { ++ icc_dev->notification_length = min(msg->length, ICC_MSG_MAX_SIZE); ++ memcpy(icc_dev->notification, msg, icc_dev->notification_length); ++ ++ writew(0, icc_dev->icc_base + ICC_REG_EMW); ++ writew(1, icc_dev->icc_base + ICC_REG_EMR); ++ ++ writel(ICC_ACK, icc_dev->icc_doorbell_base + ICC_REG_DOORBELL); ++ ++ icc_notification_handler(msg->service_id, icc_dev->notification); ++ } else if (msg->msg_type & ICC_MSG_TYPE_REPLY) { ++ icc_dev->reply_length = min(msg->length, ICC_MSG_MAX_SIZE); ++ memcpy(icc_dev->reply, msg, icc_dev->reply_length); ++ ++ writew(0, icc_dev->icc_base + ICC_REG_EMW); ++ writew(1, icc_dev->icc_base + ICC_REG_EMR); ++ ++ writel(ICC_ACK, icc_dev->icc_doorbell_base + ICC_REG_DOORBELL); ++ ++ icc_dev->reply_ready = true; ++ wake_up_interruptible(&icc_dev->wq); ++ } else { ++ dev_err(&icc_dev->pdev->dev, "unknown query\n"); ++ } ++ } ++ } ++ ++ return IRQ_HANDLED; ++} ++ ++static int spcie_icc_init(struct spcie_dev *sdev) ++{ ++ int ret; ++ int vector; ++ ++ icc_dev = devm_kzalloc(&sdev->pdev->dev, sizeof(*icc_dev), GFP_KERNEL); ++ if (!icc_dev) ++ return -ENOMEM; ++ ++ icc_dev->pdev = sdev->pdev; ++ icc_dev->sdev = sdev; ++ ++ sdev->icc_dev = icc_dev; ++ ++ mutex_init(&icc_dev->lock); ++ init_waitqueue_head(&icc_dev->wq); ++ ++ icc_dev->icc_doorbell_base = sdev->bar2 + ICC_DOORBELL_OFFSET; ++ icc_dev->icc_base = sdev->bar4; ++ ++ // Clear status. ++ writel(ICC_SEND | ICC_ACK, icc_dev->icc_doorbell_base + ICC_REG_INTR_STATUS); ++ ++ // Request IRQ for icc subfunc. ++ vector = pci_irq_vector(sdev->pdev, SPCIE_SUBFUNC_ICC); ++ ret = devm_request_irq(&sdev->pdev->dev, vector, icc_interrupt, 0, "icc", icc_dev); ++ if (ret) ++ return ret; ++ ++ // Enable IRQs. ++ writel(ICC_SEND | ICC_ACK, icc_dev->icc_doorbell_base + ICC_REG_INTR_MASK); ++ ++ // Enable notifications. ++ icc_button_enable_all_notifications(1); ++ icc_thermal_enable_notification(1); ++ ++ // Set LED to white dim. ++ icc_indicator_set_led_white(0); ++ ++ // Enable SuperSpeed-USB-C port. ++ icc_usbc_set_pdcon_op_mode(0, 5); ++ ++ // Initialize HDMI. ++ getHdmiConfiguration(); ++ sceControlHdmiEvent(1); ++ sceHdmiInitVideoConfig(); ++ ++ return 0; ++} ++ ++static int spcie_icc_remove(struct spcie_dev *sdev) ++{ ++ int vector; ++ vector = pci_irq_vector(sdev->pdev, SPCIE_SUBFUNC_ICC); ++ devm_free_irq(&sdev->pdev->dev, vector, sdev->icc_dev); ++ return 0; ++} ++ ++static int spcie_probe(struct pci_dev *pdev, const struct pci_device_id *id) ++{ ++ struct spcie_dev *sdev; ++ int ret; ++ ++ sdev = devm_kzalloc(&pdev->dev, sizeof(*sdev), GFP_KERNEL); ++ if (!sdev) ++ return -ENOMEM; ++ ++ sdev->pdev = pdev; ++ ++ sdev->bar2 = pcim_iomap(pdev, 2, 0); ++ if (!sdev->bar2) ++ return -ENOMEM; ++ ++ sdev->bar4 = pcim_iomap(pdev, 4, 0); ++ if (!sdev->bar4) ++ return -ENOMEM; ++ ++ ret = pcim_enable_device(pdev); ++ if (ret) ++ return ret; ++ ++ pci_set_master(pdev); ++ ++ ret = pci_alloc_irq_vectors(pdev, NUM_IRQS, NUM_IRQS, PCI_IRQ_MSI); ++ if (ret < 0) ++ return ret; ++ ++ ret = spcie_icc_init(sdev); ++ if (ret) ++ return ret; ++ ++ pci_set_drvdata(pdev, sdev); ++ ++ return 0; ++} ++ ++static void spcie_remove(struct pci_dev *pdev) ++{ ++ struct spcie_dev *sdev = pci_get_drvdata(pdev); ++ spcie_icc_remove(sdev); ++ pci_free_irq_vectors(pdev); ++} ++ ++static const struct pci_device_id spcie_ids[] = { ++ { PCI_DEVICE(PCI_VENDOR_ID_SONY, PCI_DEVICE_ID_SPCIE) }, ++ { 0, } ++}; ++MODULE_DEVICE_TABLE(pci, spcie_ids); ++ ++static struct pci_driver spcie_driver = { ++ .name = "spcie", ++ .id_table = spcie_ids, ++ .probe = spcie_probe, ++ .remove = spcie_remove, ++}; ++ ++module_pci_driver(spcie_driver); ++ ++MODULE_AUTHOR("Andy Nguyen"); ++MODULE_DESCRIPTION("PlayStation 5 Salina PCI Express glue driver"); ++MODULE_LICENSE("GPL"); +diff --git a/drivers/ps5/tpcie.c b/drivers/ps5/tpcie.c +new file mode 100644 +index 000000000000..17e0fde08d02 +--- /dev/null ++++ b/drivers/ps5/tpcie.c +@@ -0,0 +1,286 @@ ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++ ++#define PCI_DEVICE_ID_TPCIE 0x90EC ++#define TPCIE_SUBFUNC_UART 6 ++#define NUM_IRQS 8 ++ ++#define UART_OFFSET 0x1010100 ++ ++struct tpcie_dev; ++ ++struct tpcie_uart_dev { ++ struct pci_dev *pdev; ++ struct tpcie_dev *tdev; ++ void __iomem *uart_base; ++ struct tty_driver *tty_drv; ++ struct tty_port *tty_port; ++}; ++ ++struct tpcie_dev { ++ struct pci_dev *pdev; ++ void __iomem *bar4; ++ struct tpcie_uart_dev *uart_dev; ++}; ++ ++static struct tpcie_uart_dev *uart_dev; ++ ++static bool tpcie_uart_rx_ready(void) ++{ ++ uint32_t status = readl(uart_dev->uart_base + 0xc); ++ return (status & 0x10) != 0; ++} ++ ++static bool tpcie_uart_tx_ready(void) ++{ ++ uint32_t status = readl(uart_dev->uart_base + 0xc); ++ return (status & 0x800) == 0; ++} ++ ++static void tpcie_uart_putc(char c) ++{ ++ unsigned timeout = 0xffff; ++ while (!tpcie_uart_tx_ready() && --timeout) ++ cpu_relax(); ++ writel(c, uart_dev->uart_base + 0x4); ++} ++ ++static void tpcie_uart_write(struct console *con, const char *s, unsigned int n) ++{ ++ int i; ++ ++ for (i = 0; i < n; ++i) { ++ if (s[i] == '\n') ++ tpcie_uart_putc('\r'); ++ tpcie_uart_putc(s[i]); ++ } ++} ++ ++static ssize_t tpcie_uart_tty_write(struct tty_struct *tty, const u8 *buf, size_t count) ++{ ++ int i; ++ ++ for (i = 0; i < count; i++) { ++ tpcie_uart_putc(buf[i]); ++ } ++ ++ tty_port_tty_wakeup(uart_dev->tty_port); ++ ++ return count; ++} ++ ++static unsigned int tpcie_uart_tty_write_room(struct tty_struct *tty) ++{ ++ return 2048; ++} ++ ++static int tpcie_uart_tty_open(struct tty_struct *tty, struct file *file) ++{ ++ int ret; ++ ++ ret = tty_port_open(uart_dev->tty_port, tty, file); ++ if (ret) ++ return ret; ++ ++ return 0; ++} ++ ++static void tpcie_uart_tty_close(struct tty_struct *tty, struct file *file) ++{ ++ tty_port_close(uart_dev->tty_port, tty, file); ++} ++ ++static struct tty_operations tpcie_uart_tty_ops = { ++ .open = tpcie_uart_tty_open, ++ .close = tpcie_uart_tty_close, ++ .write = tpcie_uart_tty_write, ++ .write_room = tpcie_uart_tty_write_room, ++}; ++ ++static struct tty_port_operations tpcie_uart_port_ops = {}; ++ ++static struct tty_driver *tpcie_uart_device(struct console *c, int *index) ++{ ++ *index = 0; ++ return uart_dev->tty_drv; ++} ++ ++static struct console tpcie_uart_console = { ++ .name = "ttyTitania", ++ .device = tpcie_uart_device, ++ .write = tpcie_uart_write, ++ .index = -1, ++}; ++ ++static irqreturn_t uart_interrupt(int irq, void *dev) ++{ ++ u8 ch; ++ ++ while (tpcie_uart_rx_ready()) { ++ ch = readl(uart_dev->uart_base + 0x0); ++ tty_insert_flip_char(uart_dev->tty_port, ch, TTY_NORMAL); ++ } ++ ++ tty_flip_buffer_push(uart_dev->tty_port); ++ ++ return IRQ_HANDLED; ++} ++ ++static void tcpie_config_msi(struct tpcie_dev *tdev, int subfunc, struct msi_msg *msg) ++{ ++ writel(0xffffffff, tdev->bar4 + 0x120214); ++ writel(0, tdev->bar4 + 0x12020c); ++ ++ writel(msg->address_lo, tdev->bar4 + 0x120204); ++ writel(msg->address_hi, tdev->bar4 + 0x120208); ++ ++ writel(msg->data & ~0x1f, tdev->bar4 + 0x120210); ++ if (subfunc == TPCIE_SUBFUNC_UART) { ++ writel(msg->data & 0x1f, tdev->bar4 + 0x120230); ++ } ++ writel(msg->data & 0x1f, tdev->bar4 + 0x120210 + subfunc * 4); ++ ++ writel(0x33, tdev->bar4 + 0x120200); ++} ++ ++static int tpcie_uart_init(struct tpcie_dev *tdev) ++{ ++ struct tty_driver *drv; ++ struct tty_port *port; ++ struct msi_msg msg; ++ int vector; ++ int ret; ++ ++ uart_dev = devm_kzalloc(&tdev->pdev->dev, sizeof(*uart_dev), GFP_KERNEL); ++ if (!uart_dev) ++ return -ENOMEM; ++ ++ uart_dev->pdev = tdev->pdev; ++ uart_dev->tdev = tdev; ++ ++ tdev->uart_dev = uart_dev; ++ ++ uart_dev->uart_base = tdev->bar4 + UART_OFFSET; ++ ++ drv = tty_alloc_driver(1, 0); ++ drv->owner = THIS_MODULE; ++ drv->driver_name = "tpcie_uart"; ++ drv->name = "ttyTitania"; ++ drv->type = TTY_DRIVER_TYPE_SERIAL; ++ drv->minor_start = 0; ++ drv->num = 1; ++ drv->subtype = SERIAL_TYPE_NORMAL; ++ drv->flags = TTY_DRIVER_RESET_TERMIOS | TTY_DRIVER_REAL_RAW; ++ drv->init_termios = tty_std_termios; ++ tty_set_operations(drv, &tpcie_uart_tty_ops); ++ uart_dev->tty_drv = drv; ++ ++ port = devm_kzalloc(&tdev->pdev->dev, sizeof(*port), GFP_KERNEL); ++ if (!port) ++ return -ENOMEM; ++ ++ tty_port_init(port); ++ tty_port_link_device(port, drv, 0); ++ port->ops = &tpcie_uart_port_ops; ++ uart_dev->tty_port = port; ++ ++ ret = tty_register_driver(drv); ++ if (ret) ++ return ret; ++ ++ register_console(&tpcie_uart_console); ++ ++ // Request IRQ for uart subfunc. ++ vector = pci_irq_vector(tdev->pdev, TPCIE_SUBFUNC_UART); ++ ret = devm_request_irq(&tdev->pdev->dev, vector, uart_interrupt, 0, "uart", uart_dev); ++ if (ret) ++ return ret; ++ ++ // Special MSI configuration. ++ ret = irq_chip_compose_msi_msg(irq_get_irq_data(vector), &msg); ++ if (ret) ++ return ret; ++ ++ tcpie_config_msi(tdev, TPCIE_SUBFUNC_UART, &msg); ++ ++ // Enable IRQs. ++ writel(0x10, uart_dev->uart_base + 0x8); ++ ++ return 0; ++} ++ ++static int tpcie_uart_remove(struct tpcie_dev *tdev) ++{ ++ int vector; ++ vector = pci_irq_vector(tdev->pdev, TPCIE_SUBFUNC_UART); ++ devm_free_irq(&tdev->pdev->dev, vector, tdev->uart_dev); ++ return 0; ++} ++ ++static int tpcie_probe(struct pci_dev *pdev, const struct pci_device_id *id) ++{ ++ struct tpcie_dev *tdev; ++ int ret; ++ ++ tdev = devm_kzalloc(&pdev->dev, sizeof(*tdev), GFP_KERNEL); ++ if (!tdev) ++ return -ENOMEM; ++ ++ tdev->pdev = pdev; ++ ++ tdev->bar4 = pcim_iomap(pdev, 4, 0); ++ if (!tdev->bar4) ++ return -ENOMEM; ++ ++ ret = pcim_enable_device(pdev); ++ if (ret) ++ return ret; ++ ++ pci_set_master(pdev); ++ ++ ret = pci_alloc_irq_vectors(pdev, NUM_IRQS, NUM_IRQS, PCI_IRQ_MSI); ++ if (ret < 0) ++ return ret; ++ ++ writel(0xf, tdev->bar4 + 0x1142000 + 0x100); ++ writel(0xf, tdev->bar4 + 0x1142000 + 0x104); ++ ++ ret = tpcie_uart_init(tdev); ++ if (ret) ++ return ret; ++ ++ pci_set_drvdata(pdev, tdev); ++ ++ return 0; ++} ++ ++static void tpcie_remove(struct pci_dev *pdev) ++{ ++ struct tpcie_dev *tdev = pci_get_drvdata(pdev); ++ tpcie_uart_remove(tdev); ++ pci_free_irq_vectors(pdev); ++} ++ ++static const struct pci_device_id tpcie_ids[] = { ++ { PCI_DEVICE(PCI_VENDOR_ID_SONY, PCI_DEVICE_ID_TPCIE) }, ++ { 0, } ++}; ++MODULE_DEVICE_TABLE(pci, tpcie_ids); ++ ++static struct pci_driver tpcie_driver = { ++ .name = "tpcie", ++ .id_table = tpcie_ids, ++ .probe = tpcie_probe, ++ .remove = tpcie_remove, ++}; ++ ++module_pci_driver(tpcie_driver); ++ ++MODULE_AUTHOR("Andy Nguyen"); ++MODULE_DESCRIPTION("PlayStation 5 Titania PCI Express glue driver"); ++MODULE_LICENSE("GPL"); +diff --git a/include/linux/ps5.h b/include/linux/ps5.h +new file mode 100644 +index 000000000000..9b34ae8f2b73 +--- /dev/null ++++ b/include/linux/ps5.h +@@ -0,0 +1,70 @@ ++#ifndef _LINUX_PS5_H ++#define _LINUX_PS5_H ++ ++#include ++ ++#define ICC_MSG_MIN_SIZE 0x20 ++#define ICC_MSG_MAX_SIZE 0x7f0 ++ ++struct icc_msg { ++ u8 magic; ++ u8 service_id; ++ u16 msg_type; ++ u16 unk_04; ++ u16 id; ++ u16 length; ++ u16 checksum; ++ u8 data[]; ++}; ++ ++enum icc_service_id { ++ ICC_SERVICE_ID_CONFIGURATION = 0x01, ++ ICC_SERVICE_ID_GENERAL = 0x02, ++ ICC_SERVICE_ID_NVS = 0x03, ++ ICC_SERVICE_ID_POWER = 0x04, ++ ICC_SERVICE_ID_DEVICE = 0x05, ++ ICC_SERVICE_ID_UNKNOWN1 = 0x07, ++ ICC_SERVICE_ID_BUTTON = 0x08, ++ ICC_SERVICE_ID_INDICATOR = 0x09, ++ ICC_SERVICE_ID_FAN = 0x0a, ++ ICC_SERVICE_ID_THERMAL = 0x0b, ++ ICC_SERVICE_ID_HDMI = 0x10, ++ ICC_SERVICE_ID_USBC = 0x12, ++ ICC_SERVICE_ID_UNKNOWN3 = 0x13, ++ ICC_SERVICE_ID_CRASH_REPORT = 0x14, ++ ICC_SERVICE_ID_BDDRIVE = 0x15, ++ ICC_SERVICE_ID_UNKNOWN4 = 0x8c, ++ ICC_SERVICE_ID_UNKNOWN5 = 0x8d, ++ ICC_SERVICE_ID_SC_CONFIG = 0x8e, ++ ICC_SERVICE_ID_FLOYD = 0x9a, ++}; ++ ++int icc_query(u8 *query, u8 *reply); ++ ++void sceControlHdmiEvent(u8 enable); ++void sceHdmiInitVideoConfig(void); ++void sceHdmiSetVideoConfig(int w, int h, int hz); ++void sceHdmiDeviceSetVideoMute(int mute); ++void sceHdmiSetAudioConfig(void); ++void sceHdmiSetAudioMute(int mute); ++int getHdmiConfiguration(void); ++ ++int icc_usbc_set_pdcon_op_mode(u8 PortId, u8 OpMode); ++int icc_configuration_set_cpu_info_bit(u8 *bit); ++int icc_configuration_clear_cpu_info_bit(void); ++ ++void __noreturn icc_power_shutdown(void); ++void __noreturn icc_power_reboot(void); ++ ++int icc_button_enable_notification(u8 type, u8 enable); ++int icc_button_enable_all_notifications(u8 enable); ++int icc_thermal_enable_notification(u8 enable); ++ ++int icc_indicator_set_led(u8 setting[], size_t setting_size); ++int icc_indicator_set_led_white(u8 level); ++ ++int icc_fan_change_servo_pattern(u8 pattern); ++ ++void hdmi_notification_handler(struct icc_msg *msg); ++ ++#endif /* _LINUX_PS5_H */ +diff --git a/sound/hda/controllers/intel.c b/sound/hda/controllers/intel.c +index c01108f8cb7f..30b3d81c29a3 100644 +--- a/sound/hda/controllers/intel.c ++++ b/sound/hda/controllers/intel.c +@@ -2624,6 +2624,8 @@ static const struct pci_device_id azx_ids[] = { + AZX_DCAPS_PM_RUNTIME }, + { PCI_VDEVICE(ATI, 0x1308), + .driver_data = AZX_DRIVER_ATIHDMI_NS | AZX_DCAPS_PRESET_ATI_HDMI_NS }, ++ { PCI_VDEVICE(ATI, 0x13ea), ++ .driver_data = AZX_DRIVER_ATIHDMI_NS | AZX_DCAPS_PRESET_ATI_HDMI_NS }, + { PCI_VDEVICE(ATI, 0x157a), + .driver_data = AZX_DRIVER_ATIHDMI_NS | AZX_DCAPS_PRESET_ATI_HDMI_NS }, + { PCI_VDEVICE(ATI, 0x15b3),