From a7d16c1e699700d56c651b8e1e1324cd2be84e0f Mon Sep 17 00:00:00 2001 From: Shengwen Cheng Date: Tue, 17 Jun 2025 20:59:55 +0800 Subject: [PATCH 1/2] linux.config: Enable PCI driver --- configs/linux.config | 925 +++++++++++++++++++++++++++++++++++++++---- 1 file changed, 838 insertions(+), 87 deletions(-) diff --git a/configs/linux.config b/configs/linux.config index cf2a4e5..ed7000a 100644 --- a/configs/linux.config +++ b/configs/linux.config @@ -1,4 +1,8 @@ -CONFIG_CC_VERSION_TEXT="riscv32-buildroot-linux-gnu-gcc.br_real (Buildroot 2024.11.1) 14.2.0" +# +# Automatically generated file; DO NOT EDIT. +# Linux/riscv 6.12.33 Kernel Configuration +# +CONFIG_CC_VERSION_TEXT="riscv32-buildroot-linux-gnu-gcc.br_real (Buildroot 2024.11.1-dirty) 14.2.0" CONFIG_CC_IS_GCC=y CONFIG_GCC_VERSION=140200 CONFIG_CLANG_VERSION=0 @@ -7,12 +11,15 @@ 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_CAN_LINK_STATIC=y CONFIG_CC_HAS_ASM_GOTO_OUTPUT=y CONFIG_CC_HAS_ASM_GOTO_TIED_OUTPUT=y CONFIG_CC_HAS_ASM_INLINE=y CONFIG_CC_HAS_NO_PROFILE_FN_ATTR=y +CONFIG_LD_CAN_USE_KEEP_IN_OVERLAY=y CONFIG_PAHOLE_VERSION=0 CONFIG_IRQ_WORK=y CONFIG_BUILDTIME_TABLE_SORT=y @@ -21,13 +28,28 @@ CONFIG_THREAD_INFO_IN_TASK=y # # General setup # -CONFIG_BROKEN_ON_SMP=y CONFIG_INIT_ENV_ARG_LIMIT=32 # CONFIG_COMPILE_TEST is not set # CONFIG_WERROR is not set CONFIG_LOCALVERSION="" CONFIG_LOCALVERSION_AUTO=y 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_HAVE_KERNEL_UNCOMPRESSED=y +CONFIG_KERNEL_GZIP=y +# 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 is not set +# CONFIG_KERNEL_UNCOMPRESSED is not set CONFIG_DEFAULT_INIT="" CONFIG_DEFAULT_HOSTNAME="(none)" CONFIG_SYSVIPC=y @@ -44,19 +66,28 @@ CONFIG_HAVE_ARCH_AUDITSYSCALL=y # CONFIG_GENERIC_IRQ_SHOW=y CONFIG_GENERIC_IRQ_SHOW_LEVEL=y +CONFIG_GENERIC_IRQ_EFFECTIVE_AFF_MASK=y +CONFIG_GENERIC_IRQ_MIGRATION=y CONFIG_HARDIRQS_SW_RESEND=y CONFIG_IRQ_DOMAIN=y CONFIG_IRQ_DOMAIN_HIERARCHY=y +CONFIG_GENERIC_IRQ_IPI=y +CONFIG_GENERIC_IRQ_IPI_MUX=y +CONFIG_GENERIC_MSI_IRQ=y +CONFIG_GENERIC_IRQ_MATRIX_ALLOCATOR=y CONFIG_IRQ_FORCED_THREADING=y CONFIG_SPARSE_IRQ=y # CONFIG_GENERIC_IRQ_DEBUGFS is not set # end of IRQ subsystem CONFIG_GENERIC_IRQ_MULTI_HANDLER=y -CONFIG_ARCH_CLOCKSOURCE_INIT=y CONFIG_GENERIC_CLOCKEVENTS=y +CONFIG_ARCH_HAS_TICK_BROADCAST=y +CONFIG_GENERIC_CLOCKEVENTS_BROADCAST=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 @@ -82,6 +113,8 @@ CONFIG_PREEMPT_NONE_BUILD=y CONFIG_PREEMPT_NONE=y # CONFIG_PREEMPT_VOLUNTARY is not set # CONFIG_PREEMPT is not set +# CONFIG_PREEMPT_RT is not set +# CONFIG_PREEMPT_DYNAMIC is not set # # CPU/Task time and stats accounting @@ -93,19 +126,22 @@ CONFIG_TICK_CPU_ACCOUNTING=y # CONFIG_PSI is not set # end of CPU/Task time and stats accounting +CONFIG_CPU_ISOLATION=y + # # RCU Subsystem # -CONFIG_TINY_RCU=y +CONFIG_TREE_RCU=y # CONFIG_RCU_EXPERT is not set -CONFIG_SRCU=y -CONFIG_TINY_SRCU=y +CONFIG_TREE_SRCU=y +CONFIG_RCU_STALL_COMMON=y +CONFIG_RCU_NEED_SEGCBLIST=y # end of RCU Subsystem # CONFIG_IKCONFIG is not set # CONFIG_IKHEADERS is not set CONFIG_LOG_BUF_SHIFT=16 -CONFIG_PRINTK_SAFE_LOG_BUF_SHIFT=12 +CONFIG_LOG_CPU_MAX_BUF_SHIFT=12 # CONFIG_PRINTK_INDEX is not set CONFIG_GENERIC_SCHED_CLOCK=y @@ -114,14 +150,16 @@ CONFIG_GENERIC_SCHED_CLOCK=y # # end of Scheduler features +CONFIG_ARCH_WANT_BATCHED_UNMAP_TLB_FLUSH=y CONFIG_CC_IMPLICIT_FALLTHROUGH="-Wimplicit-fallthrough=5" -CONFIG_GCC11_NO_ARRAY_BOUNDS=y +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_CGROUPS is not set # CONFIG_NAMESPACES is not set # CONFIG_CHECKPOINT_RESTORE is not set # CONFIG_SCHED_AUTOGROUP is not set -# CONFIG_SYSFS_DEPRECATED is not set # CONFIG_RELAY is not set CONFIG_BLK_DEV_INITRD=y CONFIG_INITRAMFS_SOURCE="" @@ -136,8 +174,13 @@ CONFIG_RD_ZSTD=y CONFIG_INITRAMFS_PRESERVE_MTIME=y # CONFIG_CC_OPTIMIZE_FOR_PERFORMANCE is not set CONFIG_CC_OPTIMIZE_FOR_SIZE=y +CONFIG_HAVE_LD_DEAD_CODE_DATA_ELIMINATION=y +# CONFIG_LD_DEAD_CODE_DATA_ELIMINATION is not set +CONFIG_LD_ORPHAN_WARN=y +CONFIG_LD_ORPHAN_WARN_LEVEL="warn" CONFIG_SYSCTL=y CONFIG_SYSCTL_EXCEPTION_TRACE=y +CONFIG_SYSCTL_ARCH_UNALIGN_ALLOW=y CONFIG_EXPERT=y CONFIG_MULTIUSER=y # CONFIG_SGETMASK_SYSCALL is not set @@ -146,7 +189,7 @@ CONFIG_FHANDLE=y CONFIG_POSIX_TIMERS=y CONFIG_PRINTK=y CONFIG_BUG=y -CONFIG_BASE_FULL=y +# CONFIG_BASE_SMALL is not set CONFIG_FUTEX=y CONFIG_FUTEX_PI=y CONFIG_EPOLL=y @@ -158,14 +201,16 @@ CONFIG_SHMEM=y # CONFIG_IO_URING is not set CONFIG_ADVISE_SYSCALLS=y CONFIG_MEMBARRIER=y +CONFIG_KCMP=y +# CONFIG_RSEQ is not set +CONFIG_CACHESTAT_SYSCALL=y +# CONFIG_PC104 is not set CONFIG_KALLSYMS=y +# CONFIG_KALLSYMS_SELFTEST is not set # CONFIG_KALLSYMS_ALL is not set -CONFIG_KALLSYMS_BASE_RELATIVE=y -# CONFIG_KCMP is not set -# CONFIG_RSEQ is not set -CONFIG_EMBEDDED=y +CONFIG_ARCH_HAS_MEMBARRIER_CALLBACKS=y +CONFIG_ARCH_HAS_MEMBARRIER_SYNC_CORE=y CONFIG_HAVE_PERF_EVENTS=y -# CONFIG_PC104 is not set # # Kernel Performance Events And Counters @@ -174,17 +219,25 @@ CONFIG_HAVE_PERF_EVENTS=y # end of Kernel Performance Events And Counters # CONFIG_PROFILING is not set + +# +# Kexec and crash features +# +# CONFIG_KEXEC is not set +# end of Kexec and crash features # end of General setup CONFIG_32BIT=y CONFIG_RISCV=y +CONFIG_GCC_SUPPORTS_DYNAMIC_FTRACE=y +CONFIG_RISCV_USE_LINKER_RELAXATION=y CONFIG_ARCH_MMAP_RND_BITS_MIN=8 CONFIG_ARCH_MMAP_RND_COMPAT_BITS_MIN=8 CONFIG_ARCH_MMAP_RND_BITS_MAX=17 CONFIG_ARCH_MMAP_RND_COMPAT_BITS_MAX=17 CONFIG_RISCV_SBI=y CONFIG_MMU=y -CONFIG_PAGE_OFFSET=0xC0000000 +CONFIG_PAGE_OFFSET=0xc0000000 CONFIG_ARCH_FLATMEM_ENABLE=y CONFIG_ARCH_SPARSEMEM_ENABLE=y CONFIG_ARCH_SELECT_MEMORY_MODEL=y @@ -195,22 +248,30 @@ CONFIG_GENERIC_CALIBRATE_DELAY=y CONFIG_GENERIC_CSUM=y CONFIG_GENERIC_HWEIGHT=y CONFIG_FIX_EARLYCON_MEM=y +CONFIG_ILLEGAL_POINTER_VALUE=0 CONFIG_PGTABLE_LEVELS=2 CONFIG_LOCKDEP_SUPPORT=y CONFIG_AS_HAS_INSN=y +CONFIG_AS_HAS_OPTION_ARCH=y # # SoC selection # -# CONFIG_SOC_MICROCHIP_POLARFIRE is not set -# CONFIG_SOC_SIFIVE is not set +# CONFIG_ARCH_MICROCHIP is not set +# CONFIG_ARCH_RENESAS is not set +# CONFIG_ARCH_SIFIVE is not set +# CONFIG_ARCH_SOPHGO is not set # CONFIG_SOC_STARFIVE is not set -# CONFIG_SOC_VIRT is not set +# CONFIG_ARCH_SUNXI is not set +# CONFIG_ARCH_THEAD is not set +# CONFIG_ARCH_VIRT is not set +# CONFIG_ARCH_CANAAN is not set # end of SoC selection # # CPU errata selection # +# CONFIG_ERRATA_ANDES is not set # CONFIG_ERRATA_SIFIVE is not set # CONFIG_ERRATA_THEAD is not set # end of CPU errata selection @@ -223,19 +284,45 @@ CONFIG_ARCH_RV32I=y # CONFIG_ARCH_RV64I is not set # CONFIG_CMODEL_MEDLOW is not set CONFIG_CMODEL_MEDANY=y -CONFIG_MODULE_SECTIONS=y CONFIG_SMP=y +# CONFIG_SCHED_MC is not set +CONFIG_NR_CPUS=32 +CONFIG_HOTPLUG_CPU=y CONFIG_TUNE_GENERIC=y +# CONFIG_NUMA is not set +CONFIG_RISCV_ALTERNATIVE=y # CONFIG_RISCV_ISA_C is not set +CONFIG_TOOLCHAIN_HAS_V=y # CONFIG_RISCV_ISA_ZAWRS is not set +CONFIG_TOOLCHAIN_HAS_ZBB=y +CONFIG_TOOLCHAIN_HAS_VECTOR_CRYPTO=y # CONFIG_RISCV_ISA_ZBA is not set # CONFIG_RISCV_ISA_ZBB is not set +CONFIG_TOOLCHAIN_HAS_ZBC=y # CONFIG_RISCV_ISA_ZBC is not set -CONFIG_TOOLCHAIN_HAS_ZICBOM=y # CONFIG_RISCV_ISA_ZICBOM is not set -CONFIG_TOOLCHAIN_HAS_ZIHINTPAUSE=y +CONFIG_RISCV_ISA_ZICBOZ=y CONFIG_TOOLCHAIN_NEEDS_EXPLICIT_ZICSR_ZIFENCEI=y # CONFIG_FPU is not set +CONFIG_IRQ_STACKS=y +CONFIG_THREAD_SIZE_ORDER=1 +CONFIG_RISCV_MISALIGNED=y +CONFIG_RISCV_PROBE_UNALIGNED_ACCESS=y +# CONFIG_RISCV_EMULATED_UNALIGNED_ACCESS is not set +# CONFIG_RISCV_SLOW_UNALIGNED_ACCESS is not set +# CONFIG_RISCV_EFFICIENT_UNALIGNED_ACCESS is not set + +# +# Vendor extensions +# +CONFIG_RISCV_ISA_VENDOR_EXT=y + +# +# Andes +# +CONFIG_RISCV_ISA_VENDOR_EXT_ANDES=y +# end of Andes +# end of Vendor extensions # end of Platform type # @@ -248,8 +335,11 @@ CONFIG_HZ_250=y CONFIG_HZ=250 CONFIG_SCHED_HRTICK=y # CONFIG_RISCV_SBI_V01 is not set -# CONFIG_KEXEC is not set -# CONFIG_CRASH_DUMP is not set +# CONFIG_RISCV_BOOT_SPINWAIT is not set +CONFIG_ARCH_SUPPORTS_KEXEC=y +CONFIG_ARCH_SUPPORTS_CRASH_DUMP=y +CONFIG_ARCH_DEFAULT_CRASH_DUMP=y +# CONFIG_PARAVIRT is not set # end of Kernel features # @@ -259,12 +349,30 @@ CONFIG_CMDLINE="" # CONFIG_EFI is not set CONFIG_CC_HAVE_STACKPROTECTOR_TLS=y # CONFIG_PHYS_RAM_BASE_FIXED is not set +CONFIG_RISCV_ISA_FALLBACK=y +# CONFIG_BUILTIN_DTB is not set # end of Boot options +CONFIG_ARCH_PROC_KCORE_TEXT=y + # # Power management options # -# CONFIG_PM is not set +CONFIG_SUSPEND=y +CONFIG_SUSPEND_FREEZER=y +# CONFIG_SUSPEND_SKIP_SYNC is not set +CONFIG_PM_SLEEP=y +CONFIG_PM_SLEEP_SMP=y +# CONFIG_PM_AUTOSLEEP is not set +# CONFIG_PM_USERSPACE_AUTOSLEEP is not set +# CONFIG_PM_WAKELOCKS is not set +CONFIG_PM=y +# CONFIG_PM_DEBUG is not set +CONFIG_PM_CLK=y +# CONFIG_WQ_POWER_EFFICIENT_DEFAULT is not set +CONFIG_CPU_PM=y +CONFIG_ARCH_HIBERNATION_POSSIBLE=y +CONFIG_ARCH_SUSPEND_POSSIBLE=y # end of Power management options # @@ -276,19 +384,28 @@ CONFIG_CC_HAVE_STACKPROTECTOR_TLS=y # # CONFIG_CPU_IDLE is not set # end of CPU Idle + +# +# CPU Frequency scaling +# +# CONFIG_CPU_FREQ is not set +# end of CPU Frequency scaling # end of CPU Power Management # CONFIG_VIRTUALIZATION is not set +CONFIG_CPU_MITIGATIONS=y # # General architecture-dependent options # +CONFIG_HOTPLUG_CORE_SYNC=y +CONFIG_HOTPLUG_CORE_SYNC_DEAD=y +CONFIG_GENERIC_ENTRY=y # CONFIG_KPROBES is not set CONFIG_JUMP_LABEL=y # CONFIG_STATIC_KEYS_SELFTEST is not set CONFIG_HAVE_KPROBES=y CONFIG_HAVE_KRETPROBES=y -CONFIG_HAVE_KPROBES_ON_FTRACE=y CONFIG_HAVE_FUNCTION_ERROR_INJECTION=y CONFIG_TRACE_IRQFLAGS_SUPPORT=y CONFIG_HAVE_ARCH_TRACEHOOK=y @@ -299,6 +416,7 @@ CONFIG_ARCH_HAS_FORTIFY_SOURCE=y CONFIG_ARCH_HAS_SET_MEMORY=y CONFIG_ARCH_HAS_SET_DIRECT_MAP=y CONFIG_HAVE_ARCH_THREAD_STRUCT_WHITELIST=y +CONFIG_ARCH_WANTS_NO_INSTR=y CONFIG_HAVE_ASM_MODVERSIONS=y CONFIG_HAVE_REGS_AND_STACK_ACCESS_API=y CONFIG_HAVE_RSEQ=y @@ -307,33 +425,51 @@ 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_LAZY_TLB_REFCOUNT=y CONFIG_HAVE_ARCH_SECCOMP=y CONFIG_HAVE_ARCH_SECCOMP_FILTER=y # CONFIG_SECCOMP is not set +CONFIG_HAVE_ARCH_STACKLEAK=y CONFIG_HAVE_STACKPROTECTOR=y # CONFIG_STACKPROTECTOR is not set CONFIG_LTO_NONE=y +CONFIG_ARCH_SUPPORTS_CFI_CLANG=y CONFIG_HAVE_CONTEXT_TRACKING_USER=y CONFIG_HAVE_IRQ_TIME_ACCOUNTING=y CONFIG_HAVE_MOVE_PUD=y CONFIG_HAVE_MOVE_PMD=y -CONFIG_HAVE_MOD_ARCH_SPECIFIC=y CONFIG_MODULES_USE_ELF_RELA=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_ARCH_MMAP_RND_BITS=8 +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_ARCH_WANT_DEFAULT_TOPDOWN_MMAP_LAYOUT=y CONFIG_CLONE_BACKWARDS=y CONFIG_COMPAT_32BIT_TIME=y +CONFIG_ARCH_SUPPORTS_RT=y +CONFIG_HAVE_ARCH_RANDOMIZE_KSTACK_OFFSET=y +CONFIG_RANDOMIZE_KSTACK_OFFSET=y +# CONFIG_RANDOMIZE_KSTACK_OFFSET_DEFAULT is not set CONFIG_ARCH_OPTIONAL_KERNEL_RWX=y CONFIG_ARCH_OPTIONAL_KERNEL_RWX_DEFAULT=y CONFIG_ARCH_HAS_STRICT_KERNEL_RWX=y -CONFIG_STRICT_KERNEL_RWX=n +# CONFIG_STRICT_KERNEL_RWX is not set CONFIG_ARCH_HAS_STRICT_MODULE_RWX=y CONFIG_STRICT_MODULE_RWX=y # CONFIG_LOCK_EVENT_COUNTS is not set +CONFIG_ARCH_HAS_VDSO_DATA=y +CONFIG_HAVE_PREEMPT_DYNAMIC=y +CONFIG_HAVE_PREEMPT_DYNAMIC_KEY=y +CONFIG_ARCH_WANT_LD_ORPHAN_WARN=y CONFIG_ARCH_SUPPORTS_DEBUG_PAGEALLOC=y CONFIG_ARCH_SUPPORTS_PAGE_TABLE_CHECK=y @@ -346,11 +482,14 @@ CONFIG_ARCH_HAS_GCOV_PROFILE_ALL=y CONFIG_HAVE_GCC_PLUGINS=y # CONFIG_GCC_PLUGINS is not set +CONFIG_FUNCTION_ALIGNMENT=0 +CONFIG_CC_HAS_MIN_FUNCTION_ALIGNMENT=y +CONFIG_CC_HAS_SANE_FUNCTION_ALIGNMENT=y # end of General architecture-dependent options CONFIG_RT_MUTEXES=y -CONFIG_BASE_SMALL=0 CONFIG_MODULES=y +# CONFIG_MODULE_DEBUG is not set # CONFIG_MODULE_FORCE_LOAD is not set CONFIG_MODULE_UNLOAD=y # CONFIG_MODULE_FORCE_UNLOAD is not set @@ -358,10 +497,7 @@ CONFIG_MODULE_UNLOAD=y # CONFIG_MODVERSIONS is not set # CONFIG_MODULE_SRCVERSION_ALL is not set # CONFIG_MODULE_SIG is not set -CONFIG_MODULE_COMPRESS_NONE=y -# CONFIG_MODULE_COMPRESS_GZIP is not set -# CONFIG_MODULE_COMPRESS_XZ is not set -# CONFIG_MODULE_COMPRESS_ZSTD 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 @@ -369,10 +505,10 @@ CONFIG_BLOCK=y # CONFIG_BLOCK_LEGACY_AUTOLOAD is not set # 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_WBT is not set # CONFIG_BLK_DEBUG_FS is not set -# CONFIG_BLK_SED_OPAL is not set # CONFIG_BLK_INLINE_ENCRYPTION is not set # @@ -383,7 +519,9 @@ CONFIG_MSDOS_PARTITION=y CONFIG_EFI_PARTITION=y # end of Partition Types +CONFIG_BLK_MQ_PCI=y CONFIG_BLK_MQ_VIRTIO=y +CONFIG_BLK_PM=y # # IO Schedulers @@ -399,9 +537,18 @@ CONFIG_INLINE_READ_UNLOCK_IRQ=y CONFIG_INLINE_WRITE_UNLOCK=y CONFIG_INLINE_WRITE_UNLOCK_IRQ=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_RWLOCKS=y +CONFIG_QUEUED_RWLOCKS=y CONFIG_ARCH_HAS_MMIOWB=y +CONFIG_MMIOWB=y CONFIG_ARCH_HAS_NON_OVERLAPPING_ADDRESS_SPACE=y +CONFIG_ARCH_HAS_PREPARE_SYNC_CORE_CMD=y +CONFIG_ARCH_HAS_SYNC_CORE_BEFORE_USERMODE=y +CONFIG_ARCH_HAS_SYSCALL_WRAPPER=y +CONFIG_FREEZER=y # # Executable file formats @@ -421,16 +568,18 @@ CONFIG_ARCH_HAS_BINFMT_FLAT=y # CONFIG_SWAP is not set # -# SLAB allocator options +# Slab allocator options # -# CONFIG_SLAB is not set CONFIG_SLUB=y -# CONFIG_SLOB is not set +# CONFIG_SLUB_TINY is not set CONFIG_SLAB_MERGE_DEFAULT=y # CONFIG_SLAB_FREELIST_RANDOM is not set # CONFIG_SLAB_FREELIST_HARDENED is not set +# CONFIG_SLAB_BUCKETS is not set # CONFIG_SLUB_STATS is not set -# end of SLAB allocator options +CONFIG_SLUB_CPU_PARTIAL=y +# CONFIG_RANDOM_KMALLOC_CACHES is not set +# end of Slab allocator options # CONFIG_SHUFFLE_PAGE_ALLOCATOR is not set CONFIG_COMPAT_BRK=y @@ -438,15 +587,18 @@ CONFIG_SELECT_MEMORY_MODEL=y CONFIG_FLATMEM_MANUAL=y # CONFIG_SPARSEMEM_MANUAL is not set CONFIG_FLATMEM=y -CONFIG_SPLIT_PTLOCK_CPUS=4 +CONFIG_ARCH_WANT_OPTIMIZE_DAX_VMEMMAP=y +CONFIG_ARCH_WANT_OPTIMIZE_HUGETLB_VMEMMAP=y +CONFIG_HAVE_GUP_FAST=y +CONFIG_SPLIT_PTE_PTLOCKS=y CONFIG_COMPACTION=y CONFIG_COMPACT_UNEVICTABLE_DEFAULT=1 # CONFIG_PAGE_REPORTING is not set CONFIG_MIGRATION=y +CONFIG_PCP_BATCH_SCALE_MAX=5 # CONFIG_KSM is not set CONFIG_DEFAULT_MMAP_MIN_ADDR=4096 CONFIG_ARCH_WANT_GENERAL_HUGETLB=y -CONFIG_NEED_PER_CPU_KM=y # CONFIG_CMA is not set CONFIG_GENERIC_EARLY_IOREMAP=y # CONFIG_IDLE_PAGE_TRACKING is not set @@ -454,11 +606,17 @@ CONFIG_ARCH_HAS_CURRENT_STACK_POINTER=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 is not set # CONFIG_USERFAULTFD is not set # CONFIG_LRU_GEN is not set +CONFIG_ARCH_SUPPORTS_PER_VMA_LOCK=y +CONFIG_PER_VMA_LOCK=y CONFIG_LOCK_MM_AND_FIND_VMA=y +CONFIG_EXECMEM=y # # Data Access Monitoring @@ -474,7 +632,6 @@ CONFIG_NET=y # # CONFIG_PACKET is not set CONFIG_UNIX=y -CONFIG_UNIX_SCM=y CONFIG_AF_UNIX_OOB=y # CONFIG_UNIX_DIAG is not set # CONFIG_TLS is not set @@ -507,7 +664,6 @@ CONFIG_DEFAULT_TCP_CONG="cubic" # CONFIG_NETWORK_SECMARK is not set # CONFIG_NETWORK_PHY_TIMESTAMPING is not set # CONFIG_NETFILTER is not set -# CONFIG_BPFILTER is not set # CONFIG_IP_DCCP is not set # CONFIG_IP_SCTP is not set # CONFIG_RDS is not set @@ -536,8 +692,15 @@ CONFIG_DEFAULT_TCP_CONG="cubic" # CONFIG_NET_L3_MASTER_DEV is not set # 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_NET_RX_BUSY_POLL=y CONFIG_BQL=y +CONFIG_NET_FLOW_LIMIT=y # # Network testing @@ -568,8 +731,83 @@ CONFIG_FAILOVER=y # Device Drivers # CONFIG_HAVE_PCI=y -# CONFIG_PCI is not set +CONFIG_GENERIC_PCI_IOMAP=y +CONFIG_PCI=y +CONFIG_PCI_DOMAINS=y +CONFIG_PCI_DOMAINS_GENERIC=y +# CONFIG_PCIEPORTBUS 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_PTM is not set +CONFIG_PCI_MSI=y +CONFIG_PCI_QUIRKS=y +# CONFIG_PCI_DEBUG is not set +# CONFIG_PCI_STUB is not set +CONFIG_PCI_ECAM=y +# CONFIG_PCI_IOV is not set +# CONFIG_PCI_PRI is not set +# CONFIG_PCI_PASID is not set +# CONFIG_PCI_DYNAMIC_OF_NODES is not set +# 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_PCI_FTPCI100 is not set +CONFIG_PCI_HOST_COMMON=y +CONFIG_PCI_HOST_GENERIC=y +# CONFIG_PCIE_XILINX is not set + +# +# Cadence-based PCIe controllers +# +# CONFIG_PCIE_CADENCE_PLAT_HOST is not set +# 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 +# +# CONFIG_PCIE_MICROCHIP_HOST is not set +# 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_CXL_BUS is not set # CONFIG_PCCARD is not set +# CONFIG_RAPIDIO is not set # # Generic Driver Options @@ -592,9 +830,14 @@ CONFIG_ALLOW_DEV_COREDUMP=y # CONFIG_DEBUG_DEVRES is not set # CONFIG_DEBUG_TEST_DRIVER_REMOVE is not set # CONFIG_TEST_ASYNC_DRIVER_PROBE is not set +CONFIG_GENERIC_CPU_DEVICES=y +CONFIG_GENERIC_CPU_VULNERABILITIES=y CONFIG_REGMAP=y CONFIG_REGMAP_MMIO=y +CONFIG_DMA_SHARED_BUFFER=y +# CONFIG_DMA_FENCE_TRACE is not set CONFIG_GENERIC_ARCH_TOPOLOGY=y +# CONFIG_FW_DEVLINK_SYNC_STATE_TIMEOUT is not set # end of Generic Driver Options # @@ -604,6 +847,12 @@ CONFIG_GENERIC_ARCH_TOPOLOGY=y # CONFIG_MHI_BUS_EP is not set # end of Bus devices +# +# Cache Drivers +# +# CONFIG_AX45MP_L2_CACHE is not set +# end of Cache Drivers + # CONFIG_CONNECTOR is not set # @@ -616,8 +865,14 @@ CONFIG_GENERIC_ARCH_TOPOLOGY=y # end of ARM System Control and Management Interface Protocol # CONFIG_FIRMWARE_MEMMAP is not set +# CONFIG_FW_CFG_SYSFS is not set # CONFIG_GOOGLE_FIRMWARE is not set +# +# Qualcomm firmware drivers +# +# end of Qualcomm firmware drivers + # # Tegra firmware driver # @@ -636,10 +891,11 @@ CONFIG_OF_ADDRESS=y CONFIG_OF_IRQ=y CONFIG_OF_RESERVED_MEM=y # CONFIG_OF_OVERLAY is not set -CONFIG_OF_DMA_DEFAULT_COHERENT=y # CONFIG_PARPORT is not set CONFIG_BLK_DEV=y # CONFIG_BLK_DEV_NULL_BLK is not set +# CONFIG_BLK_DEV_PCIESSD_MTIP32XX is not set +# CONFIG_ZRAM is not set # CONFIG_BLK_DEV_LOOP is not set # CONFIG_BLK_DEV_DRBD is not set # CONFIG_BLK_DEV_NBD is not set @@ -652,6 +908,7 @@ CONFIG_VIRTIO_BLK=y # # NVME Support # +# CONFIG_BLK_DEV_NVME is not set # CONFIG_NVME_FC is not set # CONFIG_NVME_TCP is not set # end of NVME Support @@ -659,30 +916,55 @@ CONFIG_VIRTIO_BLK=y # # Misc devices # +# CONFIG_AD525X_DPOT is not set # CONFIG_DUMMY_IRQ is not set +# CONFIG_PHANTOM 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_OPEN_DICE is not set # CONFIG_VCPU_STALL_DETECTOR is not set +# CONFIG_NSM 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 is not set +# CONFIG_EEPROM_IDT_89HPESX is not set +# CONFIG_EEPROM_EE1004 is not set # end of EEPROM support +# CONFIG_CB710_CORE is not set + # # Texas Instruments shared transport line discipline # # end of Texas Instruments shared transport line discipline -# -# Altera FPGA firmware download module (requires I2C) -# +# CONFIG_SENSORS_LIS3_I2C is not set +# CONFIG_ALTERA_STAPL is not set # CONFIG_ECHO is not set +# CONFIG_BCM_VK is not set +# CONFIG_MISC_ALCOR_PCI is not set +# CONFIG_MISC_RTSX_PCI is not set # CONFIG_PVPANIC is not set +# CONFIG_KEBA_CP500 is not set # end of Misc devices # @@ -696,6 +978,15 @@ CONFIG_SCSI_MOD=y # CONFIG_ATA is not set # CONFIG_MD 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_NETDEVICES=y CONFIG_NET_CORE=y # CONFIG_BONDING is not set @@ -709,6 +1000,7 @@ CONFIG_NET_CORE=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 is not set @@ -717,14 +1009,17 @@ CONFIG_NET_CORE=y # CONFIG_VETH is not set CONFIG_VIRTIO_NET=y # CONFIG_NLMON is not set +# CONFIG_ARCNET is not set # CONFIG_ETHERNET is not set +# CONFIG_FDDI is not set +# CONFIG_HIPPI is not set # CONFIG_PHYLIB is not set -# CONFIG_PSE_CONTROLLER is not set # CONFIG_MDIO_DEVICE is not set # # PCS device drivers # +# CONFIG_PCS_XPCS is not set # end of PCS device drivers # CONFIG_PPP is not set @@ -742,6 +1037,7 @@ CONFIG_VIRTIO_NET=y # CONFIG_WWAN is not set # end of Wireless WAN +# CONFIG_VMXNET3 is not set # CONFIG_NETDEVSIM is not set CONFIG_NET_FAILOVER=y # CONFIG_ISDN is not set @@ -759,7 +1055,7 @@ CONFIG_INPUT=y # # CONFIG_INPUT_MOUSEDEV is not set # CONFIG_INPUT_JOYDEV is not set -# CONFIG_INPUT_EVDEV is not set +CONFIG_INPUT_EVDEV=y # CONFIG_INPUT_EVBUG is not set # @@ -788,11 +1084,12 @@ CONFIG_TTY=y CONFIG_VT=y CONFIG_CONSOLE_TRANSLATIONS=y CONFIG_VT_CONSOLE=y -CONFIG_HW_CONSOLE=y +CONFIG_VT_CONSOLE_SLEEP=y CONFIG_VT_HW_CONSOLE_BINDING=y CONFIG_UNIX98_PTYS=y CONFIG_LEGACY_PTYS=y CONFIG_LEGACY_PTY_COUNT=256 +CONFIG_LEGACY_TIOCSTI=y CONFIG_LDISC_AUTOLOAD=y # @@ -804,25 +1101,35 @@ CONFIG_SERIAL_8250_DEPRECATED_OPTIONS=y CONFIG_SERIAL_8250_16550A_VARIANTS=y # CONFIG_SERIAL_8250_FINTEK is not set CONFIG_SERIAL_8250_CONSOLE=y +CONFIG_SERIAL_8250_PCILIB=y +CONFIG_SERIAL_8250_PCI=y +CONFIG_SERIAL_8250_EXAR=y CONFIG_SERIAL_8250_NR_UARTS=4 CONFIG_SERIAL_8250_RUNTIME_UARTS=4 # CONFIG_SERIAL_8250_EXTENDED is not set +# CONFIG_SERIAL_8250_PCI1XXXX is not set # CONFIG_SERIAL_8250_DW is not set # CONFIG_SERIAL_8250_RT288X is not set +CONFIG_SERIAL_8250_PERICOM=y CONFIG_SERIAL_OF_PLATFORM=y # # Non-8250 serial port support # +# CONFIG_SERIAL_EARLYCON_SEMIHOST is not set +# CONFIG_SERIAL_EARLYCON_RISCV_SBI is not set # CONFIG_SERIAL_UARTLITE is not set CONFIG_SERIAL_CORE=y CONFIG_SERIAL_CORE_CONSOLE=y +# CONFIG_SERIAL_JSM is not set # CONFIG_SERIAL_SIFIVE 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_XILINX_PS_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_CONEXANT_DIGICOLOR is not set @@ -831,24 +1138,87 @@ CONFIG_SERIAL_CORE_CONSOLE=y # CONFIG_SERIAL_NONSTANDARD is not set # CONFIG_N_GSM is not set +# CONFIG_NOZOMI is not set # CONFIG_NULL_TTY is not set +# CONFIG_HVC_RISCV_SBI is not set # CONFIG_SERIAL_DEV_BUS is not set # CONFIG_TTY_PRINTK is not set # CONFIG_VIRTIO_CONSOLE is not set # CONFIG_IPMI_HANDLER is not set CONFIG_HW_RANDOM=y +# CONFIG_HW_RANDOM_TIMERIOMEM is not set +# CONFIG_HW_RANDOM_BA431 is not set CONFIG_HW_RANDOM_VIRTIO=y +# CONFIG_HW_RANDOM_CCTRNG is not set +# CONFIG_HW_RANDOM_XIPHERA is not set +# CONFIG_APPLICOM is not set CONFIG_DEVMEM=y +CONFIG_DEVPORT=y # CONFIG_TCG_TPM is not set # CONFIG_XILLYBUS is not set -# CONFIG_RANDOM_TRUST_CPU is not set -# CONFIG_RANDOM_TRUST_BOOTLOADER is not set # end of Character devices # # I2C support # -# CONFIG_I2C is not set +CONFIG_I2C=y +CONFIG_I2C_BOARDINFO=y +# CONFIG_I2C_CHARDEV is not set +# CONFIG_I2C_MUX is not set +CONFIG_I2C_HELPER_AUTO=y + +# +# 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_I801 is not set +# CONFIG_I2C_ISCH 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 + +# +# I2C system bus drivers (mostly embedded / system-on-chip) +# +# CONFIG_I2C_CADENCE is not set +# 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_RK3X is not set +# CONFIG_I2C_SIMTEC is not set +# CONFIG_I2C_XILINX is not set + +# +# External I2C/SMBus adapter drivers +# +# CONFIG_I2C_PCI1XXXX is not set +# CONFIG_I2C_TAOS_EVM is not set + +# +# Other I2C/SMBus bus drivers +# +# 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 @@ -872,6 +1242,7 @@ CONFIG_PTP_1588_CLOCK_OPTIONAL=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 is not set # CONFIG_HWMON is not set # CONFIG_THERMAL is not set @@ -884,17 +1255,111 @@ CONFIG_BCMA_POSSIBLE=y # # Multifunction device drivers # +# CONFIG_MFD_ADP5585 is not set +# CONFIG_MFD_ACT8945A is not set +# CONFIG_MFD_AS3711 is not set +# CONFIG_MFD_SMPRO is not set +# CONFIG_MFD_AS3722 is not set +# CONFIG_PMIC_ADP5520 is not set # CONFIG_MFD_ATMEL_FLEXCOM is not set # CONFIG_MFD_ATMEL_HLCDC is not set +# CONFIG_MFD_BCM590XX is not set +# CONFIG_MFD_BD9571MWV is not set +# CONFIG_MFD_AXP20X_I2C is not set +# CONFIG_MFD_CS42L43_I2C is not set # CONFIG_MFD_MADERA is not set +# CONFIG_MFD_MAX5970 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_GATEWORKS_GSC is not set +# CONFIG_MFD_MC13XXX_I2C is not set +# CONFIG_MFD_MP2629 is not set # CONFIG_MFD_HI6421_PMIC is not set -# CONFIG_HTC_PASIC3 is not set +# CONFIG_LPC_ICH is not set +# CONFIG_LPC_SCH 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_88PM886_PMIC is not set +# CONFIG_MFD_MAX14577 is not set +# CONFIG_MFD_MAX77541 is not set +# CONFIG_MFD_MAX77620 is not set +# CONFIG_MFD_MAX77650 is not set +# CONFIG_MFD_MAX77686 is not set +# CONFIG_MFD_MAX77693 is not set +# CONFIG_MFD_MAX77714 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_NTXEC is not set +# CONFIG_MFD_RETU is not set +# CONFIG_MFD_PCF50633 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_RK8XX_I2C is not set +# CONFIG_MFD_RN5T618 is not set +# CONFIG_MFD_SEC_CORE is not set +# CONFIG_MFD_SI476X_CORE is not set # CONFIG_MFD_SM501 is not set +# CONFIG_MFD_SKY81452 is not set +# CONFIG_MFD_STMPE is not set CONFIG_MFD_SYSCON=y -# CONFIG_MFD_TI_AM335X_TSCADC is not set +# CONFIG_MFD_LP3943 is not set +# CONFIG_MFD_LP8788 is not set +# CONFIG_MFD_TI_LMU 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_TPS65217 is not set +# CONFIG_MFD_TI_LP873X is not set +# CONFIG_MFD_TI_LP87565 is not set +# CONFIG_MFD_TPS65218 is not set +# CONFIG_MFD_TPS65219 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_WL1273_CORE is not set +# CONFIG_MFD_LM3533 is not set +# CONFIG_MFD_TC3589X is not set # CONFIG_MFD_TQMX86 is not set +# CONFIG_MFD_VX855 is not set +# CONFIG_MFD_LOCHNAGAR 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_ROHM_BD718XX is not set +# CONFIG_MFD_ROHM_BD71828 is not set +# CONFIG_MFD_ROHM_BD957XMUF is not set +# CONFIG_MFD_ROHM_BD96801 is not set +# CONFIG_MFD_STPMIC1 is not set +# CONFIG_MFD_STMFX is not set +# CONFIG_MFD_ATC260X_I2C is not set +# CONFIG_MFD_QCOM_PM8008 is not set +# CONFIG_MFD_CS40L50_I2C is not set +# CONFIG_MFD_RSMU_I2C is not set # end of Multifunction device drivers # CONFIG_REGULATOR is not set @@ -911,14 +1376,109 @@ CONFIG_MFD_SYSCON=y # # Graphics support # -# CONFIG_DRM is not set +CONFIG_VIDEO=y +# CONFIG_AUXDISPLAY is not set +CONFIG_DRM=y +# CONFIG_DRM_DEBUG_MM is not set +CONFIG_DRM_KMS_HELPER=y +# CONFIG_DRM_PANIC is not set +# CONFIG_DRM_DEBUG_DP_MST_TOPOLOGY_REFS is not set # CONFIG_DRM_DEBUG_MODESET_LOCK is not set +# CONFIG_DRM_FBDEV_EMULATION is not set +# CONFIG_DRM_LOAD_EDID_FIRMWARE is not set +CONFIG_DRM_GEM_SHMEM_HELPER=y + +# +# I2C encoder or helper chips +# +# CONFIG_DRM_I2C_CH7006 is not set +# CONFIG_DRM_I2C_SIL164 is not set +# CONFIG_DRM_I2C_NXP_TDA998X is not set +# CONFIG_DRM_I2C_NXP_TDA9950 is not set +# end of I2C encoder or helper chips # # ARM devices # +# CONFIG_DRM_KOMEDA is not set # end of ARM devices +# CONFIG_DRM_RADEON is not set +# CONFIG_DRM_AMDGPU is not set +# CONFIG_DRM_NOUVEAU is not set +# CONFIG_DRM_XE is not set +# CONFIG_DRM_VGEM is not set +# CONFIG_DRM_VKMS is not set +# CONFIG_DRM_AST is not set +# CONFIG_DRM_MGAG200 is not set +# CONFIG_DRM_QXL is not set +CONFIG_DRM_VIRTIO_GPU=y +CONFIG_DRM_VIRTIO_GPU_KMS=y +CONFIG_DRM_PANEL=y + +# +# Display Panels +# +# CONFIG_DRM_PANEL_ARM_VERSATILE is not set +# CONFIG_DRM_PANEL_SAMSUNG_S6E88A0_AMS452EF01 is not set +# CONFIG_DRM_PANEL_SAMSUNG_S6E8AA0 is not set +# end of Display Panels + +CONFIG_DRM_BRIDGE=y +CONFIG_DRM_PANEL_BRIDGE=y + +# +# Display Interface Bridges +# +# CONFIG_DRM_CHIPONE_ICN6211 is not set +# CONFIG_DRM_CHRONTEL_CH7033 is not set +# CONFIG_DRM_DISPLAY_CONNECTOR is not set +# CONFIG_DRM_ITE_IT6505 is not set +# CONFIG_DRM_LONTIUM_LT8912B is not set +# CONFIG_DRM_LONTIUM_LT9211 is not set +# CONFIG_DRM_LONTIUM_LT9611 is not set +# CONFIG_DRM_LONTIUM_LT9611UXC is not set +# CONFIG_DRM_ITE_IT66121 is not set +# CONFIG_DRM_LVDS_CODEC is not set +# CONFIG_DRM_MEGACHIPS_STDPXXXX_GE_B850V3_FW is not set +# CONFIG_DRM_NWL_MIPI_DSI is not set +# CONFIG_DRM_NXP_PTN3460 is not set +# CONFIG_DRM_PARADE_PS8622 is not set +# CONFIG_DRM_PARADE_PS8640 is not set +# CONFIG_DRM_SAMSUNG_DSIM is not set +# CONFIG_DRM_SIL_SII8620 is not set +# CONFIG_DRM_SII902X is not set +# CONFIG_DRM_SII9234 is not set +# CONFIG_DRM_SIMPLE_BRIDGE is not set +# CONFIG_DRM_THINE_THC63LVD1024 is not set +# CONFIG_DRM_TOSHIBA_TC358762 is not set +# CONFIG_DRM_TOSHIBA_TC358764 is not set +# CONFIG_DRM_TOSHIBA_TC358767 is not set +# CONFIG_DRM_TOSHIBA_TC358768 is not set +# CONFIG_DRM_TOSHIBA_TC358775 is not set +# CONFIG_DRM_TI_DLPC3433 is not set +# CONFIG_DRM_TI_TFP410 is not set +# CONFIG_DRM_TI_SN65DSI83 is not set +# CONFIG_DRM_TI_SN65DSI86 is not set +# CONFIG_DRM_TI_TPD12S015 is not set +# CONFIG_DRM_ANALOGIX_ANX6345 is not set +# CONFIG_DRM_ANALOGIX_ANX78XX is not set +# CONFIG_DRM_ANALOGIX_ANX7625 is not set +# CONFIG_DRM_I2C_ADV7511 is not set +# CONFIG_DRM_CDNS_DSI is not set +# CONFIG_DRM_CDNS_MHDP8546 is not set +# end of Display Interface Bridges + +# CONFIG_DRM_ETNAVIV is not set +# CONFIG_DRM_LOGICVC is not set +# CONFIG_DRM_ARCPGU is not set +# CONFIG_DRM_BOCHS is not set +# CONFIG_DRM_CIRRUS_QEMU is not set +# CONFIG_DRM_SIMPLEDRM is not set +# CONFIG_DRM_SSD130X is not set +# CONFIG_DRM_WERROR is not set +CONFIG_DRM_PANEL_ORIENTATION_QUIRKS=y + # # Frame buffer Devices # @@ -932,24 +1492,107 @@ CONFIG_MFD_SYSCON=y # CONFIG_BACKLIGHT_CLASS_DEVICE is not set # end of Backlight & LCD device support +CONFIG_HDMI=y + # # Console display driver support # -# CONFIG_VGA_CONSOLE is not set CONFIG_DUMMY_CONSOLE=y CONFIG_DUMMY_CONSOLE_COLUMNS=80 CONFIG_DUMMY_CONSOLE_ROWS=25 # end of Console display driver support # end of Graphics support +# CONFIG_DRM_ACCEL is not set CONFIG_SOUND=y CONFIG_SND=y -CONFIG_SND_VIRTIO=y +CONFIG_SND_TIMER=y +CONFIG_SND_PCM=y +CONFIG_SND_JACK=y +CONFIG_SND_JACK_INPUT_DEV=y +# CONFIG_SND_OSSEMUL is not set +CONFIG_SND_PCM_TIMER=y CONFIG_SND_HRTIMER=y - -# -# HID support -# +# CONFIG_SND_DYNAMIC_MINORS is not set +CONFIG_SND_SUPPORT_OLD_API=y +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_SEQUENCER is not set +CONFIG_SND_DRIVERS=y +# 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_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_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_ENS1370 is not set +# CONFIG_SND_ENS1371 is not set +# CONFIG_SND_FM801 is not set +# CONFIG_SND_HDSP is not set +# CONFIG_SND_HDSPM 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_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_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_INTEL is not set +# end of HD-Audio + +CONFIG_SND_HDA_PREALLOC_SIZE=64 +# CONFIG_SND_SOC is not set +CONFIG_SND_VIRTIO=y +CONFIG_HID_SUPPORT=y CONFIG_HID=y # CONFIG_HID_BATTERY_STRENGTH is not set # CONFIG_HIDRAW is not set @@ -971,10 +1614,12 @@ CONFIG_HID_GENERIC=y # CONFIG_HID_DRAGONRISE is not set # CONFIG_HID_EMS_FF is not set # CONFIG_HID_ELECOM is not set +# CONFIG_HID_EVISION is not set # CONFIG_HID_EZKEY is not set # CONFIG_HID_GEMBIRD is not set # CONFIG_HID_GFRM is not set # CONFIG_HID_GLORIOUS is not set +# CONFIG_HID_GOOGLE_STADIA_FF is not set # CONFIG_HID_VIVALDI is not set # CONFIG_HID_KEYTOUCH is not set # CONFIG_HID_KYE is not set @@ -1010,7 +1655,6 @@ CONFIG_HID_GENERIC=y # CONFIG_HID_SEMITEK is not set # CONFIG_HID_SPEEDLINK is not set # CONFIG_HID_STEAM is not set -# CONFIG_HID_STEELSERIES is not set # CONFIG_HID_SUNPLUS is not set # CONFIG_HID_RMI is not set # CONFIG_HID_GREENASIA is not set @@ -1025,8 +1669,16 @@ CONFIG_HID_GENERIC=y # CONFIG_HID_SENSOR_HUB is not set # CONFIG_HID_ALPS is not set # end of Special HID drivers -# end of HID support +# +# HID-BPF support +# +# end of HID-BPF support + +CONFIG_I2C_HID=y +# CONFIG_I2C_HID_OF is not set +# CONFIG_I2C_HID_OF_ELAN is not set +# CONFIG_I2C_HID_OF_GOODIX is not set CONFIG_USB_OHCI_LITTLE_ENDIAN=y # CONFIG_USB_SUPPORT is not set # CONFIG_MMC is not set @@ -1041,21 +1693,29 @@ CONFIG_EDAC_SUPPORT=y # # DMABUF options # -# CONFIG_SYNC_FILE is not set +CONFIG_SYNC_FILE=y +# CONFIG_SW_SYNC is not set +# CONFIG_UDMABUF is not set +# CONFIG_DMABUF_MOVE_NOTIFY is not set +# CONFIG_DMABUF_DEBUG is not set +# CONFIG_DMABUF_SELFTESTS is not set # CONFIG_DMABUF_HEAPS is not set +# CONFIG_DMABUF_SYSFS_STATS is not set # end of DMABUF options -# CONFIG_AUXDISPLAY is not set # CONFIG_UIO is not set # CONFIG_VFIO is not set # CONFIG_VIRT_DRIVERS is not set CONFIG_VIRTIO_ANCHOR=y CONFIG_VIRTIO=y CONFIG_VIRTIO_MENU=y +# CONFIG_VIRTIO_PCI is not set # CONFIG_VIRTIO_BALLOON is not set -# CONFIG_VIRTIO_INPUT is not set +CONFIG_VIRTIO_INPUT=y CONFIG_VIRTIO_MMIO=y # CONFIG_VIRTIO_MMIO_CMDLINE_DEVICES is not set +CONFIG_VIRTIO_DMA_SHARED_BUFFER=y +# CONFIG_VIRTIO_DEBUG is not set # CONFIG_VDPA is not set # CONFIG_VHOST_MENU is not set @@ -1071,7 +1731,21 @@ CONFIG_VIRTIO_MMIO=y 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_SI514 is not set +# CONFIG_COMMON_CLK_SI544 is not set +# CONFIG_COMMON_CLK_SI570 is not set +# CONFIG_COMMON_CLK_CDCE706 is not set +# CONFIG_COMMON_CLK_CDCE925 is not set +# CONFIG_COMMON_CLK_CS2000_CP is not set # CONFIG_COMMON_CLK_AXI_CLKGEN is not set +# CONFIG_COMMON_CLK_RS9_PCIE is not set +# CONFIG_COMMON_CLK_SI521XX is not set +# CONFIG_COMMON_CLK_VC3 is not set +# CONFIG_COMMON_CLK_VC5 is not set +# CONFIG_COMMON_CLK_VC7 is not set # CONFIG_COMMON_CLK_FIXED_MMIO is not set # CONFIG_XILINX_VCU is not set # CONFIG_COMMON_CLK_XLNX_CLKWZRD is not set @@ -1083,7 +1757,6 @@ CONFIG_COMMON_CLK=y CONFIG_TIMER_OF=y CONFIG_TIMER_PROBE=y CONFIG_RISCV_TIMER=y -# CONFIG_MICROCHIP_PIT64B is not set # end of Clock Source drivers # CONFIG_MAILBOX is not set @@ -1138,6 +1811,8 @@ CONFIG_RISCV_TIMER=y # CONFIG_LITEX_SOC_CONTROLLER is not set # end of Enable LiteX SoC Builder specific drivers +# CONFIG_WPCM450_SOC is not set + # # Qualcomm SoC drivers # @@ -1151,10 +1826,36 @@ CONFIG_RISCV_TIMER=y # 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 is not set # 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 # @@ -1164,6 +1865,10 @@ CONFIG_IRQCHIP=y # CONFIG_AL_FIC is not set # CONFIG_XILINX_INTC is not set CONFIG_RISCV_INTC=y +CONFIG_RISCV_APLIC=y +CONFIG_RISCV_APLIC_MSI=y +CONFIG_RISCV_IMSIC=y +CONFIG_RISCV_IMSIC_PCI=y CONFIG_SIFIVE_PLIC=y # end of IRQ chip support @@ -1195,6 +1900,7 @@ CONFIG_SIFIVE_PLIC=y # CONFIG_POWERCAP is not set # CONFIG_MCB is not set # CONFIG_RAS is not set +# CONFIG_USB4 is not set # # Android @@ -1227,6 +1933,7 @@ CONFIG_SIFIVE_PLIC=y # # CONFIG_VALIDATE_FS_PARSER is not set CONFIG_FS_IOMAP=y +CONFIG_BUFFER_HEAD=y # CONFIG_EXT2_FS is not set # CONFIG_EXT3_FS is not set CONFIG_EXT4_FS=y @@ -1244,6 +1951,7 @@ CONFIG_FS_MBCACHE=y # CONFIG_BTRFS_FS is not set # CONFIG_NILFS2_FS is not set # CONFIG_F2FS_FS is not set +# CONFIG_BCACHEFS_FS is not set CONFIG_FS_POSIX_ACL=y CONFIG_EXPORTFS=y # CONFIG_EXPORTFS_BLOCK_OPS is not set @@ -1255,7 +1963,6 @@ CONFIG_FSNOTIFY=y CONFIG_INOTIFY_USER=y # CONFIG_FANOTIFY is not set # CONFIG_QUOTA is not set -CONFIG_AUTOFS4_FS=y CONFIG_AUTOFS_FS=y # CONFIG_FUSE_FS is not set # CONFIG_OVERLAY_FS is not set @@ -1263,7 +1970,6 @@ CONFIG_AUTOFS_FS=y # # Caches # -# CONFIG_FSCACHE is not set # end of Caches # @@ -1279,8 +1985,8 @@ CONFIG_AUTOFS_FS=y # CONFIG_MSDOS_FS is not set # CONFIG_VFAT_FS is not set # CONFIG_EXFAT_FS is not set -# CONFIG_NTFS_FS is not set # CONFIG_NTFS3_FS is not set +# CONFIG_NTFS_FS is not set # end of DOS/FAT/EXFAT/NT Filesystems # @@ -1296,9 +2002,9 @@ CONFIG_SYSFS=y CONFIG_TMPFS=y CONFIG_TMPFS_POSIX_ACL=y CONFIG_TMPFS_XATTR=y +# CONFIG_TMPFS_QUOTA is not set CONFIG_ARCH_SUPPORTS_HUGETLBFS=y # CONFIG_HUGETLBFS is not set -CONFIG_MEMFD_CREATE=y CONFIG_ARCH_HAS_GIGANTIC_PAGE=y # CONFIG_CONFIGFS_FS is not set # end of Pseudo filesystems @@ -1364,9 +2070,11 @@ CONFIG_NLS_CODEPAGE_437=y # # CONFIG_KEYS 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 is not set # CONFIG_SECURITYFS is not set -CONFIG_HAVE_HARDENED_USERCOPY_ALLOCATOR=y # CONFIG_HARDENED_USERCOPY is not set # CONFIG_FORTIFY_SOURCE is not set # CONFIG_STATIC_USERMODEHELPER is not set @@ -1392,6 +2100,13 @@ CONFIG_CC_HAS_ZERO_CALL_USED_REGS=y # CONFIG_ZERO_CALL_USED_REGS is not set # end of Memory initialization +# +# 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 @@ -1409,6 +2124,7 @@ CONFIG_CRYPTO_HASH2=y # CONFIG_CRYPTO_USER is not set CONFIG_CRYPTO_MANAGER_DISABLE_TESTS=y # CONFIG_CRYPTO_NULL is not set +# CONFIG_CRYPTO_PCRYPT is not set # CONFIG_CRYPTO_CRYPTD is not set # CONFIG_CRYPTO_AUTHENC is not set # CONFIG_CRYPTO_TEST is not set @@ -1422,7 +2138,6 @@ CONFIG_CRYPTO_MANAGER_DISABLE_TESTS=y # CONFIG_CRYPTO_ECDH is not set # CONFIG_CRYPTO_ECDSA is not set # CONFIG_CRYPTO_ECRDSA is not set -# CONFIG_CRYPTO_SM2 is not set # CONFIG_CRYPTO_CURVE25519 is not set # end of Public-key cryptography @@ -1449,14 +2164,12 @@ CONFIG_CRYPTO_MANAGER_DISABLE_TESTS=y # CONFIG_CRYPTO_ADIANTUM is not set # CONFIG_CRYPTO_CHACHA20 is not set # CONFIG_CRYPTO_CBC is not set -# CONFIG_CRYPTO_CFB is not set # CONFIG_CRYPTO_CTR is not set # CONFIG_CRYPTO_CTS is not set # CONFIG_CRYPTO_ECB is not set # CONFIG_CRYPTO_HCTR2 is not set # CONFIG_CRYPTO_KEYWRAP is not set # CONFIG_CRYPTO_LRW is not set -# CONFIG_CRYPTO_OFB is not set # CONFIG_CRYPTO_PCBC is not set # CONFIG_CRYPTO_XTS is not set # end of Length-preserving ciphers and modes @@ -1533,6 +2246,11 @@ CONFIG_CRYPTO_CRC32C=y # CONFIG_CRYPTO_USER_API_AEAD is not set # end of Userspace interface +# +# Accelerated Cryptographic Algorithms for CPU (riscv) +# +# end of Accelerated Cryptographic Algorithms for CPU (riscv) + # CONFIG_CRYPTO_HW is not set # @@ -1551,7 +2269,8 @@ CONFIG_GENERIC_NET_UTILS=y # CONFIG_CORDIC is not set # CONFIG_PRIME_NUMBERS is not set CONFIG_RATIONAL=y -CONFIG_GENERIC_PCI_IOMAP=y +CONFIG_ARCH_HAS_FAST_MULTIPLIER=y +CONFIG_ARCH_USE_SYM_ANNOTATIONS=y # # Crypto library routines @@ -1588,20 +2307,27 @@ CONFIG_ZSTD_COMMON=y CONFIG_ZSTD_DECOMPRESS=y # CONFIG_XZ_DEC is not set CONFIG_DECOMPRESS_ZSTD=y +CONFIG_XARRAY_MULTI=y CONFIG_HAS_IOMEM=y +CONFIG_HAS_IOPORT=y CONFIG_HAS_IOPORT_MAP=y CONFIG_HAS_DMA=y CONFIG_DMA_DECLARE_COHERENT=y +CONFIG_ARCH_DMA_DEFAULT_COHERENT=y # CONFIG_DMA_API_DEBUG is not set # CONFIG_DMA_MAP_BENCHMARK is not set +CONFIG_CPU_RMAP=y CONFIG_DQL=y CONFIG_NLATTR=y CONFIG_GENERIC_ATOMIC64=y # CONFIG_IRQ_POLL is not set +CONFIG_DIMLIB=y CONFIG_LIBFDT=y CONFIG_SG_POOL=y +CONFIG_ARCH_HAS_PMEM_API=y CONFIG_ARCH_STACKWALK=y CONFIG_SBITMAP=y +# CONFIG_LWQ_TEST is not set # end of Library routines CONFIG_GENERIC_IOREMAP=y @@ -1638,12 +2364,14 @@ CONFIG_DEBUG_KERNEL=y # Compile-time checks and compiler options # CONFIG_DEBUG_INFO=y +CONFIG_AS_HAS_NON_CONST_ULEB128=y # CONFIG_DEBUG_INFO_NONE is not set # CONFIG_DEBUG_INFO_DWARF_TOOLCHAIN_DEFAULT is not set # CONFIG_DEBUG_INFO_DWARF4 is not set CONFIG_DEBUG_INFO_DWARF5=y # CONFIG_DEBUG_INFO_REDUCED is not set -# CONFIG_DEBUG_INFO_COMPRESSED is not set +CONFIG_DEBUG_INFO_COMPRESSED_NONE=y +# CONFIG_DEBUG_INFO_COMPRESSED_ZLIB is not set # CONFIG_DEBUG_INFO_SPLIT is not set # CONFIG_GDB_SCRIPTS is not set CONFIG_FRAME_WARN=2048 @@ -1652,6 +2380,7 @@ CONFIG_FRAME_WARN=2048 # 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_VMLINUX_MAP is not set @@ -1669,7 +2398,7 @@ CONFIG_DEBUG_FS_ALLOW_ALL=y CONFIG_HAVE_ARCH_KGDB=y CONFIG_HAVE_ARCH_KGDB_QXFER_PKT=y # CONFIG_KGDB is not set -CONFIG_ARCH_HAS_UBSAN_SANITIZE_ALL=y +CONFIG_ARCH_HAS_UBSAN=y # CONFIG_UBSAN is not set CONFIG_HAVE_KCSAN_COMPILER=y # end of Generic Kernel Debugging Instruments @@ -1690,15 +2419,15 @@ CONFIG_HAVE_KCSAN_COMPILER=y # CONFIG_SLUB_DEBUG is not set # CONFIG_PAGE_OWNER is not set # CONFIG_PAGE_POISONING is not set -# CONFIG_DEBUG_RODATA_TEST is not set CONFIG_ARCH_HAS_DEBUG_WX=y # CONFIG_DEBUG_WX is not set CONFIG_GENERIC_PTDUMP=y # CONFIG_PTDUMP_DEBUGFS is not set -# CONFIG_DEBUG_OBJECTS is not set -# CONFIG_SHRINKER_DEBUG 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 @@ -1707,6 +2436,8 @@ CONFIG_ARCH_HAS_DEBUG_VM_PGTABLE=y 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_MEM_ALLOC_PROFILING is not set CONFIG_CC_HAS_KASAN_GENERIC=y CONFIG_CC_HAS_WORKING_NOSANITIZE_ADDRESS=y # end of Memory Debugging @@ -1720,8 +2451,11 @@ CONFIG_CC_HAS_WORKING_NOSANITIZE_ADDRESS=y CONFIG_PANIC_ON_OOPS_VALUE=0 CONFIG_PANIC_TIMEOUT=0 # CONFIG_SOFTLOCKUP_DETECTOR is not set +CONFIG_HAVE_HARDLOCKUP_DETECTOR_BUDDY=y +# CONFIG_HARDLOCKUP_DETECTOR is not set # CONFIG_DETECT_HUNG_TASK is not set # CONFIG_WQ_WATCHDOG is not set +# CONFIG_WQ_CPU_INTENSIVE_REPORT is not set # CONFIG_TEST_LOCKUP is not set # end of Debug Oops, Lockups and Hangs @@ -1732,8 +2466,6 @@ CONFIG_PANIC_TIMEOUT=0 # CONFIG_SCHEDSTATS is not set # end of Scheduler Debugging -# CONFIG_DEBUG_TIMEKEEPING is not set - # # Lock Debugging (spinlocks, mutexes, etc...) # @@ -1765,33 +2497,52 @@ CONFIG_LOCK_DEBUGGING_SUPPORT=y # CONFIG_DEBUG_PLIST is not set # CONFIG_DEBUG_SG is not set # CONFIG_DEBUG_NOTIFIERS is not set -# CONFIG_BUG_ON_DATA_CORRUPTION is not set # CONFIG_DEBUG_MAPLE_TREE is not set # end of Debug kernel data structures -# CONFIG_DEBUG_CREDENTIALS is not set - # # 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=21 +CONFIG_RCU_EXP_CPU_STALL_TIMEOUT=0 +# CONFIG_RCU_CPU_STALL_CPUTIME is not set # 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 is not set +CONFIG_USER_STACKTRACE_SUPPORT=y +CONFIG_HAVE_RETHOOK=y +CONFIG_HAVE_FUNCTION_TRACER=y +CONFIG_HAVE_FUNCTION_GRAPH_TRACER=y +CONFIG_HAVE_FUNCTION_GRAPH_RETVAL=y +CONFIG_HAVE_DYNAMIC_FTRACE=y +CONFIG_HAVE_DYNAMIC_FTRACE_WITH_DIRECT_CALLS=y +CONFIG_HAVE_DYNAMIC_FTRACE_WITH_ARGS=y +CONFIG_HAVE_FTRACE_MCOUNT_RECORD=y CONFIG_HAVE_SYSCALL_TRACEPOINTS=y CONFIG_TRACING_SUPPORT=y # CONFIG_FTRACE is not set # CONFIG_SAMPLES is not set +CONFIG_HAVE_SAMPLE_FTRACE_DIRECT=y +CONFIG_HAVE_SAMPLE_FTRACE_DIRECT_MULTI=y # CONFIG_STRICT_DEVMEM is not set # # riscv Debugging # + +# +# arch/riscv/kernel Testing and Coverage +# +CONFIG_AS_HAS_ULEB128=y +CONFIG_RUNTIME_KERNEL_TESTING_MENU=y +# end of arch/riscv/kernel Testing and Coverage # end of riscv Debugging # From 784eae0c6d287198dcac41944c8fa8d197dc5c5d Mon Sep 17 00:00:00 2001 From: Shengwen Cheng Date: Wed, 18 Jun 2025 16:16:23 +0800 Subject: [PATCH 2/2] [WIP] Implement virtio-pci transport layer --- Makefile | 7 + device.h | 24 ++ main.c | 23 +- minimal.dts | 15 ++ utils.h | 7 + virtio-pci.c | 708 +++++++++++++++++++++++++++++++++++++++++++++++++++ 6 files changed, 782 insertions(+), 2 deletions(-) create mode 100644 virtio-pci.c diff --git a/Makefile b/Makefile index 629d1cd..4fdefdf 100644 --- a/Makefile +++ b/Makefile @@ -16,6 +16,13 @@ OPTS := LDFLAGS := +# virtio-pci +ENABLE_VIRTIOPCI ?= 1 +$(call set-feature, VIRTIOPCI) +ifeq ($(call has, VIRTIOPCI), 1) + OBJS_EXTRA += virtio-pci.o +endif + # virtio-blk ENABLE_VIRTIOBLK ?= 1 $(call set-feature, VIRTIOBLK) diff --git a/device.h b/device.h index c8b1d4b..956ae48 100644 --- a/device.h +++ b/device.h @@ -76,6 +76,27 @@ void u8250_write(hart_t *core, void u8250_check_ready(u8250_state_t *uart); void capture_keyboard_input(); +/* virtio-pci */ +#if SEMU_HAS(VIRTIOPCI) +typedef struct { + void *priv; +} virtio_pci_state_t; + +void virtio_pci_read(hart_t *vm, + virtio_pci_state_t *vpci, + uint32_t addr, + uint8_t width, + uint32_t *value); + +void virtio_pci_write(hart_t *vm, + virtio_pci_state_t *vpci, + uint32_t addr, + uint8_t width, + uint32_t value); + +void virtio_pci_init(virtio_pci_state_t *vpci); +#endif /* SEMU_HAS(VIRTIOPCI) */ + /* virtio-net */ #if SEMU_HAS(VIRTIONET) @@ -366,6 +387,9 @@ typedef struct { vm_t vm; plic_state_t plic; u8250_state_t uart; +#if SEMU_HAS(VIRTIOPCI) + virtio_pci_state_t vpci; +#endif #if SEMU_HAS(VIRTIONET) virtio_net_state_t vnet; #endif diff --git a/main.c b/main.c index 7c7d7b3..f3ebb4b 100644 --- a/main.c +++ b/main.c @@ -125,7 +125,15 @@ static void mem_load(hart_t *hart, return; } - if ((addr >> 28) == 0xF) { /* MMIO at 0xF_______ */ + /* TODO */ + if (addr >= 0x100000 && addr <= 0x200000) { + printf("!!!!!!!!!!!!!!!!!\n\n\n\n\n"); + } + + if ((addr >> 28) == 0x2) { /* MMIO at 0x2_______ */ + virtio_pci_read(hart, &data->vsnd, addr, width, value); + return; + } else if ((addr >> 28) == 0xF) { /* MMIO at 0xF_______ */ /* 256 regions of 1MiB */ switch ((addr >> 20) & MASK(8)) { case 0x0: @@ -192,7 +200,15 @@ static void mem_store(hart_t *hart, return; } - if ((addr >> 28) == 0xF) { /* MMIO at 0xF_______ */ + /* TODO */ + if (addr >= 0x100000 && addr <= 0x200000) { + printf("!!!!!!!!!!!!!!!!!\n\n\n\n\n"); + } + + if ((addr >> 28) == 0x2) { /* MMIO at 0x2_______ */ + virtio_pci_write(hart, &data->vsnd, addr, width, value); + return; + } else if ((addr >> 28) == 0xF) { /* MMIO at 0xF_______ */ /* 256 regions of 1MiB */ switch ((addr >> 20) & MASK(8)) { case 0x0: @@ -668,6 +684,9 @@ static int semu_init(emu_state_t *emu, int argc, char **argv) /* Set up peripherals */ emu->uart.in_fd = 0, emu->uart.out_fd = 1; capture_keyboard_input(); /* set up uart */ +#if SEMU_HAS(VIRTIOPCI) + virtio_pci_init(&(emu->vpci)); +#endif #if SEMU_HAS(VIRTIONET) if (!virtio_net_init(&(emu->vnet), netdev)) fprintf(stderr, "No virtio-net functioned\n"); diff --git a/minimal.dts b/minimal.dts index f5b57a3..efee0c6 100644 --- a/minimal.dts +++ b/minimal.dts @@ -33,6 +33,21 @@ reg-names = "sram0"; }; +#if SEMU_FEATURE_VIRTIOPCI + pci0: pci@21000000 { + compatible = "pci-host-ecam-generic"; + device_type = "pci"; + #address-cells = <3>; + #size-cells = <2>; + bus-range = <0x0 0x0>; /* Use 1 bus only */ + reg = <0x21000000 0x100000>; + + /* Reserve memory for BAR mapping */ + ranges = <0x02000000 0 0x100000 /* PCI memory space (BAR) */ + 0x20000000 0 0x100000>; /* CPU address space, 16MB */ + }; +#endif + soc: soc@F0000000 { #address-cells = <1>; #size-cells = <1>; diff --git a/utils.h b/utils.h index b6c872e..b232fc0 100644 --- a/utils.h +++ b/utils.h @@ -79,6 +79,13 @@ static inline void list_del_init(struct list_head *node) INIT_LIST_HEAD(node); } +#define LIST_HEAD_INIT(name) \ + { \ + .prev = (&name), .next = (&name) \ + } + +#define LIST_HEAD(name) struct list_head name = LIST_HEAD_INIT(name) + #ifndef container_of #define container_of(ptr, type, member) \ __extension__({ \ diff --git a/virtio-pci.c b/virtio-pci.c new file mode 100644 index 0000000..f079ced --- /dev/null +++ b/virtio-pci.c @@ -0,0 +1,708 @@ +#include +#include +#include +#include + +#include "device.h" +#include "riscv.h" +#include "riscv_private.h" +#include "utils.h" + +/* VirtIO PCI information */ +#define VIRTIO_PCI_VENDOR_ID 0x1AF4 +#define VIRTIO_PCI_REVISION_ID 0x0 + +/* Header type register */ +#define PCI_TYPE0_HEADER 0x0 +#define PCI_TYPE1_HEADER 0x1 +#define PCI_MULTI_FUNCTION_DEVICE (0x1 << 7) + +/* Status register */ +#define PCI_STATUS_CAPABILITIES_LIST (0x1 << 4) + +/* BAR (Base Address Register) */ +#define PCI_BAR_CONFIGURATION 0x00000000 /* Non-prefetchable, 32-bit memory */ + +/* Capabilities pointer register */ +#define PCI_CAP_POINTER_OFFSET 0x40 + +/* Command register */ +/* Enable Memory Space (MMIO access through BARs) */ +#define PCI_COMMAND_MEMORY (1 << 1) +/* Enable Bus Mastering (allow device to initiate DMA) */ +#define PCI_COMMAND_MASTER (1 << 2) +/* Disable legacy INTx interrupt (allow only MSI/MSI-X)*/ +#define PCI_COMMAND_INTX_DISABLE (1 << 10) +/* Bitmask of all supported command register bits */ +#define PCI_COMMAND_SUPPORT_MASK \ + (PCI_COMMAND_MEMORY | PCI_COMMAND_MASTER | PCI_COMMAND_INTX_DISABLE) + +/* ECAM (Enhanced Configuration Access Mechanism) */ +#define ECAM_BASE_ADDR 0x21000000 + +#define ECAM_BUS_SHIFT 20 +#define ECAM_DEVICE_SHIFT 15 +#define ECAM_FUNCTION_SHIFT 12 + +#define ECAM_BUS_MASK 0xFF /* 8 bits */ +#define ECAM_DEVICE_MASK 0x1F /* 5 bits */ +#define ECAM_FUNCTION_MASK 0x07 /* 3 bits */ +#define ECAM_CONFIG_MASK 0xFFF /* 12 bits (0 to 4095) */ + +#define ECAM_OFFSET(addr) ((addr) -ECAM_BASE_ADDR) + +#define GET_BUS(addr) ((ECAM_OFFSET(addr) >> ECAM_BUS_SHIFT) & ECAM_BUS_MASK) +#define GET_DEVICE(addr) \ + ((ECAM_OFFSET(addr) >> ECAM_DEVICE_SHIFT) & ECAM_DEVICE_MASK) +#define GET_FUNCTION(addr) \ + ((ECAM_OFFSET(addr) >> ECAM_FUNCTION_SHIFT) & ECAM_FUNCTION_MASK) +#define GET_CONFIG(addr) ((addr) &ECAM_CONFIG_MASK) + +/* PCI capabilities */ +#define CAP_COMMON_SIZE sizeof(struct virtio_pci_cap) +#define CAP_NOTIFY_SIZE sizeof(struct virtio_pci_notify_cap) +#define CAP_ISR_SIZE sizeof(struct virtio_pci_cap) +#define CAP_DEVICE_SIZE sizeof(struct virtio_pci_cap) + +#define CAP_COMMON_START (0x0) +#define CAP_NOTIFY_START (CAP_COMMON_START + CAP_COMMON_SIZE) +#define CAP_ISR_START (CAP_NOTIFY_START + CAP_NOTIFY_SIZE) +#define CAP_DEVICE_START (CAP_ISR_START + CAP_ISR_SIZE) +#define CAP_DEVICE_END (CAP_DEVICE_START + CAP_DEVICE_SIZE) + +enum { + PCI_CONFIG_VENDOR_ID = 0x0, + PCI_CONFIG_DEVICE_ID = 0x2, + PCI_CONFIG_COMMAND = 0x4, + PCI_CONFIG_STATUS = 0x6, + PCI_CONFIG_REVISION_ID = 0x8, + PCI_CONFIG_CLASS_CODE = 0x9, + PCI_CONFIG_CACHE_LINE_SIZE = 0xC, + PCI_CONFIG_MASTER_LATENCY_TIMER = 0xD, + PCI_CONFIG_HEADER_TYPE = 0xE, + PCI_CONFIG_BIST = 0xF, + PCI_CONFIG_BAR0 = 0x10, + PCI_CONFIG_BAR1 = 0x14, + PCI_CONFIG_BAR2 = 0x18, + PCI_CONFIG_BAR3 = 0x1C, + PCI_CONFIG_BAR4 = 0x20, + PCI_CONFIG_BAR5 = 0x24, + PCI_CONFIG_CARDBUS_CIS_POINTER = 0x28, + PCI_CONFIG_SUBSYSTEM_VENDOR_ID = 0x2C, + PCI_CONFIG_SUBSYSTEM_ID = 0x2E, + PCI_CONFIG_EXPANSION_ROM_BASE_ADDRESS = 0x30, + PCI_CONFIG_CAPABILITIES_POINTER = 0x34, + PCI_CONFIG_INTERRUPT_LINE = 0x3C, + PCI_CONFIG_INTERRUPT_PIN = 0x3D, + PCI_CONFIG_MIN_GNT = 0x3E, + PCI_CONFIG_MAX_LAT = 0x3F, +}; + +enum { + VIRTIO_PCI_CAP_COMMON_CFG = 1, /* Common configuration */ + VIRTIO_PCI_CAP_NOTIFY_CFG = 2, /* Notifications */ + VIRTIO_PCI_CAP_ISR_CFG = 3, /* ISR Status */ + VIRTIO_PCI_CAP_DEVICE_CFG = 4, /* Device specific configuration */ + VIRTIO_PCI_CAP_PCI_CFG = 5, /* PCI configuration access */ + VIRTIO_PCI_CAP_SHARED_MEMORY_CFG = 8, /* Shared memory region */ + VIRTIO_PCI_CAP_VENDOR_CFG = 9, /* Vendor-specific data */ +}; + +PACKED(struct virtio_pci_cap { + uint8_t cap_vndr; /* Generic PCI field: PCI_CAP_ID_VNDR */ + uint8_t cap_next; /* Generic PCI field: next ptr. */ + uint8_t cap_len; /* Generic PCI field: capability length */ + uint8_t cfg_type; /* Identifies the structure. */ + uint8_t bar; /* Where to find it. */ + uint8_t id; /* Multiple capabilities of the same type */ + uint8_t padding[2]; /* Pad to full dword. */ + uint32_t offset; /* Offset within bar. */ + uint32_t length; /* Length of the structure, in bytes. */ +}); + +PACKED(struct virtio_pci_notify_cap { + struct virtio_pci_cap cap; + uint32_t notify_off_multiplier; /* Multiplier for queue_notify_off. */ +}); + +PACKED(struct virtio_pci_common_cfg { + /* About the whole device. */ + uint32_t device_feature_select; /* read-write */ + uint32_t device_feature; /* read-only for driver */ + uint32_t driver_feature_select; /* read-write */ + uint32_t driver_feature; /* read-write */ + uint16_t config_msix_vector; /* read-write */ + uint16_t num_queues; /* read-only for driver */ + uint8_t device_status; /* read-write */ + uint8_t config_generation; /* read-only for driver */ + + /* About a specific virtqueue. */ + uint16_t queue_select; /* read-write */ + uint16_t queue_size; /* read-write */ + uint16_t queue_msix_vector; /* read-write */ + uint16_t queue_enable; /* read-write */ + uint16_t queue_notify_off; /* read-only for driver */ + uint64_t queue_desc; /* read-write */ + uint64_t queue_driver; /* read-write */ + uint64_t queue_device; /* read-write */ + uint16_t queue_notif_config_data; /* read-only for driver */ + uint16_t queue_reset; /* read-write */ + + /* About the administration virtqueue. */ + uint16_t admin_queue_index; /* read-only for driver */ + uint16_t admin_queue_num; /* read-only for driver */ +}); + +PACKED(struct virtio_pci_isr { uint8_t isr_status; }); + +struct virtio_pci_config { + int device_cnt; + struct list_head device_list; +}; + +struct virtio_pci_device { + uint16_t device; + uint16_t function_cnt; + struct list_head function_list; + struct list_head list; +}; + +struct virtio_pci_function { + uint16_t function; + + /* PCI configuration header */ + uint16_t device_id; + uint16_t command; + uint8_t class_code[3]; + uint8_t cache_line_size; + uint8_t master_latency_timer; + uint8_t interrupt_line; + uint8_t interrupt_pin; + uint8_t probe_bitmap; + uint32_t guest_bar_base[6]; + + /* PCI Capabilities */ + struct virtio_pci_cap common_cap; + struct virtio_pci_notify_cap notify_cap; + struct virtio_pci_cap isr_cap; + struct virtio_pci_cap device_cap; + + struct virtio_pci_common_cfg common_cfg; + struct virtio_pci_isr isr; + uint16_t *notifications; + void *device_cfg; + uint32_t device_config_size; + + struct list_head list; +}; + +static struct virtio_pci_config vpci_config; + +struct virtio_pci_device *vpci_create_device(void) +{ + struct virtio_pci_device *dev = malloc(sizeof(struct virtio_pci_device)); + if (!dev) + return NULL; + + memset(dev, 0, sizeof(*dev)); + dev->device = vpci_config.device_cnt; + vpci_config.device_cnt++; + INIT_LIST_HEAD(&dev->function_list); + list_push(&dev->list, &vpci_config.device_list); + + return dev; +} + +struct virtio_pci_function *vpci_create_function( + struct virtio_pci_device *vpci_dev) +{ + struct virtio_pci_function *func = + malloc(sizeof(struct virtio_pci_function)); + if (!func) + return NULL; + + memset(func, 0, sizeof(*func)); + func->function = vpci_dev->function_cnt; + func->command = PCI_COMMAND_SUPPORT_MASK; + func->interrupt_line = 0xff; /* Disabled */ + func->interrupt_pin = 0x1; /* Set to the minimum non-zero value */ + vpci_dev->function_cnt++; + list_push(&func->list, &vpci_dev->function_list); + + return func; +} + +static struct virtio_pci_device *vpci_get_device(uint16_t device) +{ + struct virtio_pci_device *dev; + list_for_each_entry (dev, &vpci_config.device_list, list) { + if (dev->device == device) + return dev; + } + + return NULL; +} + +static struct virtio_pci_function *vpci_get_function( + struct virtio_pci_device *vpci_dev, + uint16_t function) +{ + struct virtio_pci_function *func; + list_for_each_entry (func, &vpci_dev->function_list, list) { + if (func->function == function) + return func; + } + + return NULL; +} + +static inline void virtio_pci_bar_set_probe_mode( + struct virtio_pci_function *vpci_func, + int bar_id, + uint32_t reg_value) +{ + if (reg_value == 0xFFFFFFFF) + vpci_func->probe_bitmap |= (0x1 << bar_id); +} + +static inline bool virtio_pci_bar_check_probe_mode( + struct virtio_pci_function *vpci_func, + int bar_id) +{ + return (vpci_func->probe_bitmap & (1 << bar_id)) != 0; +} + +static inline void virtio_pci_set8(uint8_t *ptr, uint8_t value) +{ + *ptr = value; +} + +static inline void virtio_pci_set16(uint16_t *ptr, uint16_t value) +{ + *ptr = value; +} + +static inline void virtio_pci_set32(uint32_t *ptr, uint32_t value) +{ + *ptr = value; +} + +static int virtio_pci_read_width_to_bytes(uint8_t width) +{ + switch (width) { + case RV_MEM_LW: + printf("RV_MEM_LW\n"); + return 4; + case RV_MEM_LHU: + printf("RV_MEM_LHU\n"); + return 2; + case RV_MEM_LH: + printf("RV_MEM_LH\n"); + return 2; + case RV_MEM_LBU: + printf("RV_MEM_LBU\n"); + return 1; + case RV_MEM_LB: + printf("RV_MEM_LB\n"); + return 1; + default: + return -1; + } +} + +static int virtio_pci_write_width_to_bytes(uint8_t width) +{ + switch (width) { + case RV_MEM_SW: + printf("RV_MEM_SW\n"); + return 4; + case RV_MEM_SH: + printf("RV_MEM_SH\n"); + return 2; + case RV_MEM_SB: + printf("RV_MEM_SB\n"); + return 1; + default: + return -1; + } +} + +static inline void virtio_pci_set_cap(struct virtio_pci_cap *cap, + uint8_t cap_vndr, + uint8_t cap_next, + uint8_t cap_len, + uint8_t cfg_type, + uint8_t bar, + uint8_t id, + uint32_t offset, + uint32_t length) +{ + cap->cap_vndr = cap_vndr; + cap->cap_next = cap_next; + cap->cap_len = cap_len; + cap->cfg_type = cfg_type; + cap->bar = bar; + cap->id = id; + cap->offset = offset; + cap->length = length; +} + +static void virtio_pci_set_capabilities(struct virtio_pci_function *vpci_func) +{ + /* First capability (common configuration) at 0x40 */ + uint32_t next_offset = PCI_CAP_POINTER_OFFSET; + + /* Initialize common configuration capability */ + next_offset += sizeof(struct virtio_pci_cap); + virtio_pci_set_cap(&vpci_func->common_cap, 0x9, next_offset, + sizeof(struct virtio_pci_cap), VIRTIO_PCI_CAP_COMMON_CFG, + 0x0, 0x0, 0x0, sizeof(struct virtio_pci_common_cfg)); + + /* Initialize notification capability */ + next_offset += sizeof(struct virtio_pci_notify_cap); + vpci_func->notify_cap.notify_off_multiplier = 0x4; /* 4 bytes */ + uint32_t notify_size = vpci_func->common_cfg.num_queues * + vpci_func->notify_cap.notify_off_multiplier; + virtio_pci_set_cap(&vpci_func->notify_cap.cap, 0x9, next_offset, + sizeof(struct virtio_pci_notify_cap), + VIRTIO_PCI_CAP_NOTIFY_CFG, 0x1, 0x0, 0x0, notify_size); + + /* Initialize ISR capability */ + next_offset += sizeof(struct virtio_pci_notify_cap); + virtio_pci_set_cap(&vpci_func->isr_cap, 0x9, next_offset, + sizeof(struct virtio_pci_cap), VIRTIO_PCI_CAP_ISR_CFG, + 0x2, 0x0, 0x0, sizeof(struct virtio_pci_isr)); + next_offset += sizeof(struct virtio_pci_cap); + + /* Initialize device configuration capability */ + next_offset = 0x0; /* End of the capability list */ + virtio_pci_set_cap(&vpci_func->device_cap, 0x9, next_offset, + sizeof(struct virtio_pci_cap), VIRTIO_PCI_CAP_DEVICE_CFG, + 0x3, 0x0, 0x0, vpci_func->device_config_size); +} + +static void virtio_pci_bar_read_handler(struct virtio_pci_function *vpci_func, + int bar_id, + uint32_t *reg_value) +{ + if (virtio_pci_bar_check_probe_mode(vpci_func, bar_id)) { + if (vpci_func->guest_bar_base[bar_id]) { + /* Resource assignment confirmation */ + virtio_pci_set32((uint32_t *) reg_value, + vpci_func->guest_bar_base[bar_id]); + printf("BAR: Resource assignment confirmation\n"); + } else { + /* Range sizing */ + virtio_pci_set32((uint32_t *) reg_value, 0xFFFFF000); /* TODO */ + printf("BAR: Range sizing\n"); + } + } else { + /* BAR Configuration reading */ + virtio_pci_set32((uint32_t *) reg_value, PCI_BAR_CONFIGURATION); + printf("BAR Read Configuration\n"); + } + printf("BAR%d = 0x%x\n", bar_id, *reg_value); +} + +static void virtio_pci_bar_write_handler(struct virtio_pci_function *vpci_func, + int bar_id, + uint32_t reg_value) +{ + if (virtio_pci_bar_check_probe_mode(vpci_func, bar_id)) + vpci_func->guest_bar_base[bar_id] = reg_value; + virtio_pci_bar_set_probe_mode(vpci_func, bar_id, reg_value); + printf("BAR%d = 0x%x\n", bar_id, reg_value); +} + +static void virtio_pci_cap_list_read_handler( + struct virtio_pci_function *vpci_func, + uint32_t addr, + uint32_t *value, + int bytes) +{ + uintptr_t offset = GET_CONFIG(addr) - PCI_CAP_POINTER_OFFSET; + uint8_t *src = (uint8_t *) value, *dst; + + if (offset < CAP_NOTIFY_START) { + dst = (uint8_t *) &vpci_func->common_cap + (offset - CAP_COMMON_START); + printf("CAP_COMMON_START\n"); + } else if (offset < CAP_ISR_START) { + dst = (uint8_t *) &vpci_func->notify_cap + (offset - CAP_NOTIFY_START); + printf("CAP_NOTIFY_START\n"); + } else if (offset < CAP_DEVICE_START) { + dst = (uint8_t *) &vpci_func->isr_cap + (offset - CAP_ISR_START); + printf("CAP_ISR_START\n"); + } else if (offset < CAP_DEVICE_END) { + dst = (uint8_t *) &vpci_func->device_cap + (offset - CAP_DEVICE_START); + printf("CAP_DEVICE_START\n"); + } else { + fprintf(stderr, "Undefined capability list region.\n"); + return; + } + + memcpy(src, dst, bytes); + + printf("Capability read: offset = %lu, value = 0x%x\n", offset, + *value & MASK(bytes * 8)); +} + +static void virtio_pci_cap_list_write_handler( + struct virtio_pci_function *vpci_func, + uint32_t addr, + uint32_t value, + int bytes) +{ + uintptr_t offset = GET_CONFIG(addr) - PCI_CAP_POINTER_OFFSET; + uint8_t *src, *dst = (uint8_t *) &value; + + if (offset < CAP_NOTIFY_START) { + src = (uint8_t *) &vpci_func->common_cap + (offset - CAP_COMMON_START); + } else if (offset < CAP_ISR_START) { + src = (uint8_t *) &vpci_func->notify_cap + (offset - CAP_NOTIFY_START); + } else if (offset < CAP_DEVICE_START) { + src = (uint8_t *) &vpci_func->isr_cap + (offset - CAP_ISR_START); + } else if (offset < CAP_DEVICE_END) { + src = (uint8_t *) &vpci_func->device_cfg + (offset - CAP_DEVICE_START); + } else { + fprintf(stderr, "Undefined capability list region.\n"); + return; + } + + memcpy(src, dst, bytes); + + printf("Capability write: offset = %lu, value = 0x%x\n", offset, + value & MASK(bytes * 8)); +} + +void virtio_pci_read(hart_t *vm, + virtio_pci_state_t *vpci, + uint32_t addr, + uint8_t width, + uint32_t *value) +{ + int bus = GET_BUS(addr); + int device = GET_DEVICE(addr); + int function = GET_FUNCTION(addr); + + struct virtio_pci_device *vpci_dev = vpci_get_device(device); + struct virtio_pci_function *vpci_func = + vpci_dev ? vpci_get_function(vpci_dev, function) : NULL; + + printf("*** PCI read: 0x%x (bus: %d, dev: %d, func: %d) ***\n", addr, bus, + device, function); + + int bytes = virtio_pci_read_width_to_bytes(width); + if (bytes < 0) { + vm_set_exception(vm, RV_EXC_ILLEGAL_INSN, 0); + return; + } + +#define _(reg) PCI_CONFIG_##reg + switch (GET_CONFIG(addr)) { + case _(VENDOR_ID): { + uint32_t word = + (device < vpci_config.device_cnt) + ? (vpci_func->device_id << 16) | VIRTIO_PCI_VENDOR_ID + : 0xFFFF; + virtio_pci_set32((uint32_t *) value, word); + printf("VENDOR_ID = 0x%x\n", *value & 0xFFFF); + printf("DEVICE_ID = 0x%x\n", (*value >> 16) & 0xFFFF); + return; + } + case _(COMMAND): + virtio_pci_set16((uint16_t *) value, vpci_func->command); + printf("COMMAND = 0x%x\n", *value & 0xFFFF); + return; + case _(STATUS): + /* Set capabilities list bit only */ + virtio_pci_set16((uint16_t *) value, PCI_STATUS_CAPABILITIES_LIST); + printf("STATUS = 0x%x\n", *value & 0xFFFF); + return; + case _(REVISION_ID): { + uint32_t word = (vpci_func->class_code[2] << 24) | + (vpci_func->class_code[1] << 16) | + (vpci_func->class_code[0] << 8) | + VIRTIO_PCI_REVISION_ID; + virtio_pci_set32((uint32_t *) value, word); + printf("REVISION_ID = %d\n", *value & 0xff); + printf("CLASS_CODE = 0x%x\n", (*value >> 8) & 0xFFFFFF); + return; + } + case _(CACHE_LINE_SIZE): + virtio_pci_set8((uint8_t *) value, vpci_func->cache_line_size); + return; + case _(MASTER_LATENCY_TIMER): + virtio_pci_set8((uint8_t *) value, vpci_func->master_latency_timer); + return; + case _(HEADER_TYPE): { + uint8_t byte = (vpci_dev->function_cnt > 1) + ? PCI_TYPE0_HEADER | PCI_MULTI_FUNCTION_DEVICE + : PCI_TYPE0_HEADER; + virtio_pci_set8((uint8_t *) value, byte); + printf("HEADER_TYPE = %d\n", *value & 0xFF); + return; + } + case _(BIST): + virtio_pci_set8((uint8_t *) value, 0x0); + return; + case _(BAR0): + virtio_pci_bar_read_handler(vpci_func, 0x0, value); + return; + case _(BAR1): + virtio_pci_bar_read_handler(vpci_func, 0x1, value); + return; + case _(BAR2): + virtio_pci_bar_read_handler(vpci_func, 0x2, value); + return; + case _(BAR3): + virtio_pci_bar_read_handler(vpci_func, 0x3, value); + return; + case _(BAR4): + virtio_pci_set32((uint32_t *) value, 0x0); + printf("BAR4 = 0x%x\n", *value); + return; + case _(BAR5): + virtio_pci_set32((uint32_t *) value, 0x0); + printf("BAR5 = 0x%x\n", *value); + return; + case _(CARDBUS_CIS_POINTER): + virtio_pci_set32((uint32_t *) value, 0x0); + return; + case _(SUBSYSTEM_VENDOR_ID): + virtio_pci_set16((uint16_t *) value, 0x0); + return; + case _(SUBSYSTEM_ID): + virtio_pci_set16((uint16_t *) value, 0x0); + return; + case _(EXPANSION_ROM_BASE_ADDRESS): + virtio_pci_set32((uint32_t *) value, 0x0); + return; + case _(CAPABILITIES_POINTER): + virtio_pci_set8((uint8_t *) value, PCI_CAP_POINTER_OFFSET); + printf("CAPABILITIES_POINTER = 0x%x\n", *value & 0xFF); + return; + case _(INTERRUPT_LINE): + virtio_pci_set8((uint8_t *) value, vpci_func->interrupt_line); + return; + case _(INTERRUPT_PIN): + virtio_pci_set8((uint8_t *) value, vpci_func->interrupt_pin); + return; + case _(MIN_GNT): + virtio_pci_set8((uint8_t *) value, 0x0); + return; + case _(MAX_LAT): + virtio_pci_set8((uint8_t *) value, 0x0); + return; + default: + virtio_pci_cap_list_read_handler(vpci_func, addr, value, bytes); + return; + } +} + +void virtio_pci_write(hart_t *vm, + virtio_pci_state_t *vpci, + uint32_t addr, + uint8_t width, + uint32_t value) +{ + int bus = GET_BUS(addr); + int device = GET_DEVICE(addr); + int function = GET_FUNCTION(addr); + + struct virtio_pci_device *vpci_dev = vpci_get_device(device); + struct virtio_pci_function *vpci_func = + vpci_dev ? vpci_get_function(vpci_dev, function) : NULL; + + printf("*** PCI write: 0x%x (bus: %d, dev: %d, func: %d) ***\n", addr, bus, + device, function); + + int bytes = virtio_pci_write_width_to_bytes(width); + if (bytes < 0) { + vm_set_exception(vm, RV_EXC_ILLEGAL_INSN, 0); + return; + } + +#define _(reg) PCI_CONFIG_##reg + switch (GET_CONFIG(addr)) { + case _(COMMAND): + uint16_t halfword = value & PCI_COMMAND_SUPPORT_MASK; + virtio_pci_set16((uint16_t *) &vpci_func->command, halfword); + printf("COMMAND = 0x%x (driver), 0x%x (device)\n", value & 0xffff, + halfword); + return; + case _(STATUS): + return; + case _(CACHE_LINE_SIZE): + virtio_pci_set8((uint8_t *) &vpci_func->cache_line_size, value); + return; + case _(MASTER_LATENCY_TIMER): + virtio_pci_set8((uint8_t *) &vpci_func->master_latency_timer, value); + return; + case _(BIST): + return; /* Built-In Self Test can be ignored */ + case _(BAR0): + virtio_pci_bar_write_handler(vpci_func, 0x0, value); + return; + case _(BAR1): + virtio_pci_bar_write_handler(vpci_func, 0x1, value); + return; + case _(BAR2): + virtio_pci_bar_write_handler(vpci_func, 0x2, value); + return; + case _(BAR3): + virtio_pci_bar_write_handler(vpci_func, 0x3, value); + return; + case _(BAR4): + printf("BAR4 = 0x%x\n", value); + return; + case _(BAR5): + printf("BAR5 = 0x%x\n", value); + return; + case _(EXPANSION_ROM_BASE_ADDRESS): + return; + case _(INTERRUPT_LINE): + virtio_pci_set8((uint8_t *) &vpci_func->interrupt_line, value); + return; + default: + virtio_pci_cap_list_write_handler(vpci_func, addr, value, bytes); + return; + } +} + +void virtio_pci_init(virtio_pci_state_t *vpci) +{ + /* Initialize PCI device list */ + INIT_LIST_HEAD(&vpci_config.device_list); + + /* XXX: Add testing device */ + struct virtio_pci_device *vpci_dev = vpci_create_device(); + struct virtio_pci_function *vpci_func = vpci_create_function(vpci_dev); +#if 0 + vpci_func->device_id = 0x1040 + 16; /* VirtIO GPU */ + vpci_func->class_code[0] = 0x00; + vpci_func->class_code[1] = 0x00; /* VGA-compatible */ + vpci_func->class_code[2] = 0x03; /* Display Controller */ +#else + vpci_func->device_id = 0x1040 + 2; /* VirtIO Block Device */ + vpci_func->class_code[0] = 0x01; /* Subclass: SCSI */ + vpci_func->class_code[1] = 0x00; /* Interface: block */ + vpci_func->class_code[2] = 0x01; /* Class: Mass Storage */ +#endif + + /* Initialize VirtIO device */ + // XXX: common config + // XXX: device config +#if 0 + vpci_func->common_cfg.device_feature_select = 0; + vpci_func->common_cfg.device_feature = 0; + vpci_func->common_cfg.driver_feature_select = 0; + vpci_func->common_cfg.driver_feature = 0; + vpci_func->common_cfg.config_msix_vector = 0; + vpci_func->common_cfg.num_queues = 0; + vpci_func->common_cfg.device_status = 0; + vpci_func->common_cfg.config_generation = 0; +#endif + + /* Initialize VirtIO PCI capabilities */ + virtio_pci_set_capabilities(vpci_func); +}