From 278cc1ec1bd944ca24a925afe2c539172ac098bc Mon Sep 17 00:00:00 2001 From: Linus Heckemann Date: Tue, 5 Jan 2021 17:49:04 +0100 Subject: [PATCH] Initial commit --- configuration.nix | 15 + emmc-image.nix | 82 + fancontrol.rs | 47 + helios64.nix | 41 + kernel.nix | 4891 +++++++++++++++++ make-btrfs-fs.nix | 74 + ...06cfb43e8ec38afe28278b210dab72e6cac8.patch | 437 ++ patches/kernel/115200baud.patch | 14 + ...f80fc581a8eed7288ed7aca24446054eb616.patch | 38 + patches/kernel/add-board-helios64.patch | 1183 ++++ ...f2817ff2c9bb07472d30e58d904922f1a538.patch | 34 + .../helios64-remove-pcie-ep-gpios.patch | 25 + ...kchip-support-ep-gpio-undefined-case.patch | 29 + patches/uboot/115200baud.patch | 21 + patches/uboot/add-board-helios64.patch | 2184 ++++++++ u-boot.nix | 34 + 16 files changed, 9149 insertions(+) create mode 100644 configuration.nix create mode 100644 emmc-image.nix create mode 100644 fancontrol.rs create mode 100644 helios64.nix create mode 100644 kernel.nix create mode 100644 make-btrfs-fs.nix create mode 100644 patches/kernel/09e006cfb43e8ec38afe28278b210dab72e6cac8.patch create mode 100644 patches/kernel/115200baud.patch create mode 100644 patches/kernel/62dbf80fc581a8eed7288ed7aca24446054eb616.patch create mode 100644 patches/kernel/add-board-helios64.patch create mode 100644 patches/kernel/fa67f2817ff2c9bb07472d30e58d904922f1a538.patch create mode 100644 patches/kernel/helios64-remove-pcie-ep-gpios.patch create mode 100644 patches/kernel/rk3399-pci-rockchip-support-ep-gpio-undefined-case.patch create mode 100644 patches/uboot/115200baud.patch create mode 100644 patches/uboot/add-board-helios64.patch create mode 100644 u-boot.nix diff --git a/configuration.nix b/configuration.nix new file mode 100644 index 0000000..11706bd --- /dev/null +++ b/configuration.nix @@ -0,0 +1,15 @@ +{ config, pkgs, lib, ... }: +{ + imports = [ ./helios64.nix /etc/nixos/defaults.nix ]; + nixpkgs.system = "aarch64-linux"; + networking = { + hostName = "bold"; + hostId = "c7233a9f"; + }; + environment.systemPackages = [ pkgs.sysstat pkgs.cryptsetup ]; + fileSystems."/" = { device = lib.mkForce "/dev/disk/by-label/bold-emmc"; fsType = lib.mkForce "btrfs"; }; + programs.mosh.enable = true; + boot.zfs.extraPools = ["bold"]; + boot.supportedFilesystems = ["zfs"]; + system.stateVersion = "20.09"; +} diff --git a/emmc-image.nix b/emmc-image.nix new file mode 100644 index 0000000..08a1fc2 --- /dev/null +++ b/emmc-image.nix @@ -0,0 +1,82 @@ +{ config, lib, pkgs, ... }: +{ + imports = [ + + ./configuration.nix + ]; + nixpkgs.overlays = [(import ./u-boot.nix)]; + + sdImage.populateRootCommands = '' + mkdir -p ./files/boot + ${config.boot.loader.generic-extlinux-compatible.populateCmd} -c ${config.system.build.toplevel} -d ./files/boot + ''; + system.build.sdImage = with lib; + let + rootfsImage = pkgs.callPackage ./make-btrfs-fs.nix ({ + inherit (config.sdImage) storePaths; + compressImage = true; + populateImageCommands = config.sdImage.populateRootCommands; + volumeLabel = "bold-emmc"; + } // optionalAttrs (config.sdImage.rootPartitionUUID != null) { + uuid = config.sdImage.rootPartitionUUID; + }); + in pkgs.callPackage ({ stdenv, dosfstools, e2fsprogs, + mtools, libfaketime, utillinux, bzip2, zstd }: stdenv.mkDerivation { + name = config.sdImage.imageName; + + nativeBuildInputs = [ dosfstools e2fsprogs mtools libfaketime utillinux bzip2 zstd ]; + + inherit (config.sdImage) compressImage; + + diskUUID = "A8ABB0FA-2FD7-4FB8-ABB0-2EEB7CD66AFA"; + loadUUID = "534078AF-3BB4-EC43-B6C7-828FB9A788C6"; + bootUUID = "95D89D52-CA00-42D6-883F-50F5720EF37E"; + rootUUID = "0340EA1D-C827-8048-B631-0C60D4478796"; + + buildCommand = '' + mkdir -p $out/nix-support $out/sd-image + export img=$out/sd-image/${config.sdImage.imageName} + echo "${pkgs.stdenv.buildPlatform.system}" > $out/nix-support/system + if test -n "$compressImage"; then + echo "file sd-image $img.bz2" >> $out/nix-support/hydra-build-products + else + echo "file sd-image $img" >> $out/nix-support/hydra-build-products + fi + echo "Decompressing rootfs image" + zstd -d --no-progress "${rootfsImage}" -o ./root-fs.img + + # Create the image file sized to fit /boot/firmware and /, plus slack for the gap. + rootSizeBlocks=$(du -B 512 --apparent-size ./root-fs.img | awk '{ print $1 }') + + # rootfs will be at offset 0x8000, so we'll need to account for that. + # And add an additional 20mb slack at the end. + imageSize=$((0x8000 + rootSizeBlocks * 512 + 20 * 1024 * 1024)) + truncate -s $imageSize $img + + sfdisk --no-reread --no-tell-kernel $img < 0 { + pwm = max(pwm, if prev_pwm < MINSTOP { MINSTART } else { MINSTOP }); + pwm = min(pwm, MAXPWM); + } + println!("sensor: {}, pwm: {}", temp, pwm); + write(fan, pwm.to_string()); +} + +fn main() { + let mut fans = Vec::new(); + for hwmon_dir in ["/sys/devices/platform/p6-fan/hwmon", "/sys/devices/platform/p7-fan/hwmon"].iter() { + for dir in read_dir(hwmon_dir).unwrap() { + let mut p = dir.unwrap().path(); + p.push("pwm1"); + if p.exists() { + fans.push(p) + } + } + } + let fans = fans; + loop { + for fan in &fans { + adjust(fan, &PathBuf::from("/sys/devices/virtual/thermal/thermal_zone0/hwmon0/temp1_input")) + } + sleep(Duration::from_secs(5)); + } +} diff --git a/helios64.nix b/helios64.nix new file mode 100644 index 0000000..279d358 --- /dev/null +++ b/helios64.nix @@ -0,0 +1,41 @@ +{ config, pkgs, lib, ... }: +let + crossPkgs = import pkgs.path { system = "x86_64-linux"; crossSystem = "aarch64-linux"; }; +in { + # Fan speed adjustment + systemd.services.fans = { + wantedBy = ["multi-user.target"]; + serviceConfig.ExecStart = pkgs.runCommandCC "fans" { nativeBuildInputs = [ pkgs.rustc ]; } '' + rustc ${./fancontrol.rs} -o $out + ''; + serviceConfig.Restart = "always"; + }; + + boot = { + kernelPackages = pkgs.linuxPackagesFor (pkgs.callPackage ./kernel.nix {}); + #kernelPackages = pkgs.linuxPackages_latest; + kernelParams = ["panic=3" "boot.shell_on_fail"]; + loader.grub.enable = false; + loader.generic-extlinux-compatible.enable = true; + initrd.postDeviceCommands = '' + ( + cd /sys/bus/platform/drivers/sdhci-arasan + while true; do + test -e fe330000.sdhci/mmc_host/mmc*/mmc*/block && break + echo fe330000.sdhci > unbind + echo fe330000.sdhci > bind + sleep 1 + done + ) + ''; + }; + + systemd.services.disable-offload = { + wantedBy = ["sys-devices-platform-fe300000.ethernet-net-eth0.device" "multi-user.targtet"]; + after = ["sys-devices-platform-fe300000.ethernet-net-eth0.device"]; + serviceConfig = { + Type = "oneshot"; + ExecStart = "${pkgs.ethtool}/bin/ethtool --offload eth0 tx off"; + }; + }; +} diff --git a/kernel.nix b/kernel.nix new file mode 100644 index 0000000..f31c6ad --- /dev/null +++ b/kernel.nix @@ -0,0 +1,4891 @@ +{ lib, buildLinux, linux_5_9, runCommandLocal, runCommand, fetchgit, ... }: +let + armbian = fetchgit { + url = https://github.com/armbian/build.git; + #ref = "master"; + rev = "ebb5f4ae7d6ce881fa18bd3fa598ca4605961dce"; + sha256 = "1w1s1i07qpf4wd8df1wkpyvrcw48dvvardifb72l60zkhysabnin"; + }; + patchSkipPattern = "general-(add|rockchip)-overlay|wifi-400[34]|board-renegade-dts-cleanup"; + patch = runCommandLocal "rockchip64-current.patch" { src = armbian; } '' + runHook unpackPhase + cd $sourceRoot + for f in patch/kernel/rockchip64-current/* ; do + if [[ "$f" =~ ${patchSkipPattern} ]] ; then + echo "SKIP $f" + continue + fi + echo "USE $f" + cat "$f" >>$out + echo >>$out + done + ''; + src = runCommand "linux-rockchip64" {} '' + unpackFile ${linux_5_9.src} + cd linux*/ + for f in ${armbian}/patch/kernel/rockchip64-current/* ; do + if [[ "$f" =~ ${patchSkipPattern} ]] ; then + echo "SKIP $f" + continue + fi + echo "USE $f" + patch -p1 <"$f" + done + echo Copying. + cp -r . $out + ''; +in buildLinux { + inherit src; + inherit (linux_5_9) version modDirVersion; + autoModules = false; + kernelPatches = [ + #{ name = "rockchip64-current"; patch = patch; } + { name = "115200 baud"; patch = ./patches/kernel/115200baud.patch; } + ]; + # generated with: cat linux-rockchip64-current.config |grep -v "^#" |grep -v "^$"|sed s/^CONFIG_//g |sed s/=/\ /g + # + # Then need to drop all "" values and "(none)" or so. + # Also drop CRYPTO_AEGIS128_SIMD, as that won't build. + # Drop all CC_/GCC_/LD_/CLANG_ prefixed items. + # See https://github.com/NixOS/nixpkgs/commit/9b67ea9106102d882f53d62890468071900b9647 + # + # Drop these as well... + # + # SIGNED_PE_FILE_VERIFICATION y + # MODULE_SIG_KEY "certs/signing_key.pem" + # SYSTEM_TRUSTED_KEYRING y + # SYSTEM_EXTRA_CERTIFICATE y + # SYSTEM_EXTRA_CERTIFICATE_SIZE 4096 + # SECONDARY_TRUSTED_KEYRING y + # SYSTEM_BLACKLIST_KEYRING y + # + + # Disable these, as they'll spam the console otherwise. + # Something's wrong with the CDC_NCM driver. + # + # See also: https://bugs.launchpad.net/ubuntu/+source/linux/+bug/1832472 + # + # USB_NET_CDC_NCM n + # USB_NET_HUAWEI_CDC_NCM n + # USB_NET_CDC_MBIM n + + structuredExtraConfig = with lib.kernel; { + "IRQ_WORK" = yes; + "BUILDTIME_TABLE_SORT" = yes; + "THREAD_INFO_IN_TASK" = yes; + "INIT_ENV_ARG_LIMIT" = freeform "32"; + "SWAP" = yes; + "SYSVIPC" = yes; + "SYSVIPC_SYSCTL" = yes; + "POSIX_MQUEUE" = yes; + "POSIX_MQUEUE_SYSCTL" = yes; + "CROSS_MEMORY_ATTACH" = yes; + "USELIB" = yes; + "AUDIT" = yes; + "HAVE_ARCH_AUDITSYSCALL" = yes; + "AUDITSYSCALL" = yes; + "GENERIC_IRQ_PROBE" = yes; + "GENERIC_IRQ_SHOW" = yes; + "GENERIC_IRQ_SHOW_LEVEL" = yes; + "GENERIC_IRQ_EFFECTIVE_AFF_MASK" = yes; + "GENERIC_IRQ_MIGRATION" = yes; + "HARDIRQS_SW_RESEND" = yes; + "GENERIC_IRQ_CHIP" = yes; + "IRQ_DOMAIN" = yes; + "IRQ_SIM" = yes; + "IRQ_DOMAIN_HIERARCHY" = yes; + "GENERIC_MSI_IRQ" = yes; + "GENERIC_MSI_IRQ_DOMAIN" = yes; + "IRQ_MSI_IOMMU" = yes; + "HANDLE_DOMAIN_IRQ" = yes; + "IRQ_FORCED_THREADING" = yes; + "SPARSE_IRQ" = yes; + "GENERIC_IRQ_MULTI_HANDLER" = yes; + "GENERIC_TIME_VSYSCALL" = yes; + "GENERIC_CLOCKEVENTS" = yes; + "ARCH_HAS_TICK_BROADCAST" = yes; + "GENERIC_CLOCKEVENTS_BROADCAST" = yes; + "TICK_ONESHOT" = yes; + "NO_HZ_COMMON" = yes; + "NO_HZ_IDLE" = yes; + "NO_HZ" = yes; + "HIGH_RES_TIMERS" = yes; + "PREEMPT" = yes; + "PREEMPT_COUNT" = yes; + "PREEMPTION" = yes; + "TICK_CPU_ACCOUNTING" = yes; + "SCHED_THERMAL_PRESSURE" = yes; + "BSD_PROCESS_ACCT" = yes; + "BSD_PROCESS_ACCT_V3" = yes; + "TASKSTATS" = yes; + "TASK_DELAY_ACCT" = yes; + "TASK_XACCT" = yes; + "TASK_IO_ACCOUNTING" = yes; + "TREE_RCU" = yes; + "PREEMPT_RCU" = yes; + "SRCU" = yes; + "TREE_SRCU" = yes; + "TASKS_RCU_GENERIC" = yes; + "TASKS_RCU" = yes; + "TASKS_RUDE_RCU" = yes; + "TASKS_TRACE_RCU" = yes; + "RCU_STALL_COMMON" = yes; + "RCU_NEED_SEGCBLIST" = yes; + "BUILD_BIN2C" = yes; + "IKCONFIG" = yes; + "IKCONFIG_PROC" = yes; + "IKHEADERS" = module; + "LOG_BUF_SHIFT" = freeform "17"; + "LOG_CPU_MAX_BUF_SHIFT" = freeform "12"; + "PRINTK_SAFE_LOG_BUF_SHIFT" = freeform "13"; + "GENERIC_SCHED_CLOCK" = yes; + "ARCH_SUPPORTS_NUMA_BALANCING" = yes; + "CC_HAS_INT128" = yes; + "ARCH_SUPPORTS_INT128" = yes; + "NUMA_BALANCING" = yes; + "NUMA_BALANCING_DEFAULT_ENABLED" = yes; + "CGROUPS" = yes; + "PAGE_COUNTER" = yes; + "MEMCG" = yes; + "MEMCG_SWAP" = yes; + "MEMCG_KMEM" = yes; + "BLK_CGROUP" = yes; + "CGROUP_WRITEBACK" = yes; + "CGROUP_SCHED" = yes; + "FAIR_GROUP_SCHED" = yes; + "CFS_BANDWIDTH" = yes; + "RT_GROUP_SCHED" = yes; + "CGROUP_PIDS" = yes; + "CGROUP_RDMA" = yes; + "CGROUP_FREEZER" = yes; + "CGROUP_HUGETLB" = yes; + "CPUSETS" = yes; + "PROC_PID_CPUSET" = yes; + "CGROUP_DEVICE" = yes; + "CGROUP_CPUACCT" = yes; + "CGROUP_PERF" = yes; + "CGROUP_BPF" = yes; + "SOCK_CGROUP_DATA" = yes; + "NAMESPACES" = yes; + "UTS_NS" = yes; + "TIME_NS" = yes; + "IPC_NS" = yes; + "USER_NS" = yes; + "PID_NS" = yes; + "NET_NS" = yes; + "SCHED_AUTOGROUP" = yes; + "RELAY" = yes; + "BLK_DEV_INITRD" = yes; + "RD_GZIP" = yes; + "RD_BZIP2" = yes; + "RD_LZMA" = yes; + "RD_XZ" = yes; + "RD_LZO" = yes; + "RD_LZ4" = yes; + "RD_ZSTD" = yes; + "BOOT_CONFIG" = yes; + "CC_OPTIMIZE_FOR_PERFORMANCE" = yes; + "SYSCTL" = yes; + "HAVE_UID16" = yes; + "SYSCTL_EXCEPTION_TRACE" = yes; + "BPF" = yes; + "EXPERT" = yes; + "UID16" = yes; + "MULTIUSER" = yes; + "SYSFS_SYSCALL" = yes; + "FHANDLE" = yes; + "POSIX_TIMERS" = yes; + "PRINTK" = yes; + "PRINTK_NMI" = yes; + "BUG" = yes; + "ELF_CORE" = yes; + "BASE_FULL" = yes; + "FUTEX" = yes; + "FUTEX_PI" = yes; + "HAVE_FUTEX_CMPXCHG" = yes; + "EPOLL" = yes; + "SIGNALFD" = yes; + "TIMERFD" = yes; + "EVENTFD" = yes; + "SHMEM" = yes; + "AIO" = yes; + "IO_URING" = yes; + "ADVISE_SYSCALLS" = yes; + "MEMBARRIER" = yes; + "KALLSYMS" = yes; + "KALLSYMS_ALL" = yes; + "KALLSYMS_BASE_RELATIVE" = yes; + "BPF_LSM" = yes; + "BPF_SYSCALL" = yes; + "ARCH_WANT_DEFAULT_BPF_JIT" = yes; + "BPF_JIT_DEFAULT_ON" = yes; + "ARCH_HAS_MEMBARRIER_SYNC_CORE" = yes; + "RSEQ" = yes; + "HAVE_PERF_EVENTS" = yes; + "PERF_EVENTS" = yes; + "VM_EVENT_COUNTERS" = yes; + "SLUB_DEBUG" = yes; + "SLUB" = yes; + "SLAB_MERGE_DEFAULT" = yes; + "SLUB_CPU_PARTIAL" = yes; + "SYSTEM_DATA_VERIFICATION" = yes; + "PROFILING" = yes; + "TRACEPOINTS" = yes; + "ARM64" = yes; + "64BIT" = yes; + "MMU" = yes; + "ARM64_PAGE_SHIFT" = freeform "12"; + "ARM64_CONT_SHIFT" = freeform "4"; + "ARCH_MMAP_RND_BITS_MIN" = freeform "18"; + "ARCH_MMAP_RND_BITS_MAX" = freeform "33"; + "ARCH_MMAP_RND_COMPAT_BITS_MIN" = freeform "11"; + "ARCH_MMAP_RND_COMPAT_BITS_MAX" = freeform "16"; + "STACKTRACE_SUPPORT" = yes; + "ILLEGAL_POINTER_VALUE" = freeform "0xdead000000000000"; + "LOCKDEP_SUPPORT" = yes; + "TRACE_IRQFLAGS_SUPPORT" = yes; + "GENERIC_BUG" = yes; + "GENERIC_BUG_RELATIVE_POINTERS" = yes; + "GENERIC_HWEIGHT" = yes; + "GENERIC_CSUM" = yes; + "GENERIC_CALIBRATE_DELAY" = yes; + "ZONE_DMA" = yes; + "ZONE_DMA32" = yes; + "ARCH_ENABLE_MEMORY_HOTPLUG" = yes; + "ARCH_ENABLE_MEMORY_HOTREMOVE" = yes; + "SMP" = yes; + "KERNEL_MODE_NEON" = yes; + "FIX_EARLYCON_MEM" = yes; + "PGTABLE_LEVELS" = freeform "4"; + "ARCH_SUPPORTS_UPROBES" = yes; + "ARCH_PROC_KCORE_TEXT" = yes; + "ARCH_SUNXI" = yes; + "ARCH_MESON" = yes; + "ARCH_ROCKCHIP" = yes; + "ARCH_S32" = yes; + "ARM64_WORKAROUND_CLEAN_CACHE" = yes; + "ARM64_ERRATUM_826319" = yes; + "ARM64_ERRATUM_827319" = yes; + "ARM64_ERRATUM_824069" = yes; + "ARM64_ERRATUM_819472" = yes; + "ARM64_ERRATUM_832075" = yes; + "ARM64_ERRATUM_834220" = yes; + "ARM64_ERRATUM_845719" = yes; + "ARM64_ERRATUM_843419" = yes; + "ARM64_ERRATUM_1024718" = yes; + "ARM64_ERRATUM_1418040" = yes; + "ARM64_WORKAROUND_SPECULATIVE_AT" = yes; + "ARM64_ERRATUM_1165522" = yes; + "ARM64_ERRATUM_1319367" = yes; + "ARM64_ERRATUM_1530923" = yes; + "ARM64_WORKAROUND_REPEAT_TLBI" = yes; + "ARM64_ERRATUM_1286807" = yes; + "ARM64_ERRATUM_1463225" = yes; + "ARM64_ERRATUM_1542419" = yes; + "CAVIUM_ERRATUM_22375" = yes; + "CAVIUM_ERRATUM_23144" = yes; + "CAVIUM_ERRATUM_23154" = yes; + "CAVIUM_ERRATUM_27456" = yes; + "CAVIUM_ERRATUM_30115" = yes; + "CAVIUM_TX2_ERRATUM_219" = yes; + "FUJITSU_ERRATUM_010001" = yes; + "HISILICON_ERRATUM_161600802" = yes; + "QCOM_FALKOR_ERRATUM_1003" = yes; + "QCOM_FALKOR_ERRATUM_1009" = yes; + "QCOM_QDF2400_ERRATUM_0065" = yes; + "QCOM_FALKOR_ERRATUM_E1041" = yes; + "SOCIONEXT_SYNQUACER_PREITS" = yes; + "ARM64_4K_PAGES" = yes; + "ARM64_VA_BITS_48" = yes; + "ARM64_VA_BITS" = freeform "48"; + "ARM64_PA_BITS_48" = yes; + "ARM64_PA_BITS" = freeform "48"; + "CPU_LITTLE_ENDIAN" = lib.mkForce yes; + "CPU_BIG_ENDIAN" = lib.mkForce no; + "SCHED_MC" = yes; + #"NR_CPUS" = freeform "256"; + "HOTPLUG_CPU" = yes; + "NUMA" = yes; + "NODES_SHIFT" = freeform "2"; + "USE_PERCPU_NUMA_NODE_ID" = yes; + "HAVE_SETUP_PER_CPU_AREA" = yes; + "NEED_PER_CPU_EMBED_FIRST_CHUNK" = yes; + "HOLES_IN_ZONE" = yes; + "HZ_250" = yes; + "HZ" = freeform "250"; + "SCHED_HRTICK" = yes; + "ARCH_SUPPORTS_DEBUG_PAGEALLOC" = yes; + "ARCH_SPARSEMEM_ENABLE" = yes; + "ARCH_SPARSEMEM_DEFAULT" = yes; + "ARCH_SELECT_MEMORY_MODEL" = yes; + "HAVE_ARCH_PFN_VALID" = yes; + "HW_PERF_EVENTS" = yes; + "SYS_SUPPORTS_HUGETLBFS" = yes; + "ARCH_WANT_HUGE_PMD_SHARE" = yes; + "ARCH_HAS_CACHE_LINE_SIZE" = yes; + "ARCH_ENABLE_SPLIT_PMD_PTLOCK" = yes; + "SECCOMP" = yes; + "PARAVIRT" = yes; + "KEXEC" = yes; + "CRASH_DUMP" = yes; + "XEN_DOM0" = yes; + "XEN" = yes; + "FORCE_MAX_ZONEORDER" = freeform "11"; + "UNMAP_KERNEL_AT_EL0" = yes; + "HARDEN_BRANCH_PREDICTOR" = yes; + "ARM64_SSBD" = yes; + "RODATA_FULL_DEFAULT_ENABLED" = yes; + "ARM64_TAGGED_ADDR_ABI" = yes; + "COMPAT" = yes; + "KUSER_HELPERS" = yes; + "ARMV8_DEPRECATED" = yes; + "SWP_EMULATION" = yes; + "CP15_BARRIER_EMULATION" = yes; + "SETEND_EMULATION" = yes; + "ARM64_HW_AFDBM" = yes; + "ARM64_PAN" = yes; + "ARM64_LSE_ATOMICS" = yes; + "ARM64_USE_LSE_ATOMICS" = yes; + "ARM64_VHE" = yes; + "ARM64_UAO" = yes; + "ARM64_RAS_EXTN" = yes; + "ARM64_CNP" = yes; + "ARM64_PTR_AUTH" = yes; + "CC_HAS_BRANCH_PROT_PAC_RET" = yes; + "CC_HAS_SIGN_RETURN_ADDRESS" = yes; + "AS_HAS_PAC" = yes; + "AS_HAS_CFI_NEGATE_RA_STATE" = yes; + "ARM64_AMU_EXTN" = yes; + "AS_HAS_ARMV8_4" = yes; + "ARM64_TLB_RANGE" = yes; + "ARM64_BTI" = yes; + "CC_HAS_BRANCH_PROT_PAC_RET_BTI" = yes; + "ARM64_E0PD" = yes; + "ARCH_RANDOM" = yes; + "ARM64_SVE" = yes; + "ARM64_MODULE_PLTS" = yes; + "RELOCATABLE" = yes; + "CC_HAVE_STACKPROTECTOR_SYSREG" = yes; + "STACKPROTECTOR_PER_TASK" = yes; + "EFI_STUB" = yes; + "EFI" = yes; + "DMI" = yes; + "SYSVIPC_COMPAT" = yes; + "ARCH_ENABLE_HUGEPAGE_MIGRATION" = yes; + "SUSPEND" = yes; + "SUSPEND_FREEZER" = yes; + "HIBERNATE_CALLBACKS" = yes; + "HIBERNATION" = yes; + "HIBERNATION_SNAPSHOT_DEV" = yes; + "PM_SLEEP" = yes; + "PM_SLEEP_SMP" = yes; + "PM" = yes; + "PM_CLK" = yes; + "PM_GENERIC_DOMAINS" = yes; + "PM_GENERIC_DOMAINS_SLEEP" = yes; + "PM_GENERIC_DOMAINS_OF" = yes; + "CPU_PM" = yes; + "ARCH_HIBERNATION_POSSIBLE" = yes; + "ARCH_HIBERNATION_HEADER" = yes; + "ARCH_SUSPEND_POSSIBLE" = yes; + "CPU_IDLE" = yes; + "CPU_IDLE_MULTIPLE_DRIVERS" = yes; + "CPU_IDLE_GOV_MENU" = yes; + "DT_IDLE_STATES" = yes; + "ARM_CPUIDLE" = yes; + "CPU_FREQ" = yes; + "CPU_FREQ_GOV_ATTR_SET" = yes; + "CPU_FREQ_GOV_COMMON" = yes; + "CPU_FREQ_STAT" = yes; + "CPU_FREQ_DEFAULT_GOV_ONDEMAND" = yes; + "CPU_FREQ_GOV_PERFORMANCE" = yes; + "CPU_FREQ_GOV_POWERSAVE" = yes; + "CPU_FREQ_GOV_USERSPACE" = yes; + "CPU_FREQ_GOV_ONDEMAND" = yes; + "CPU_FREQ_GOV_CONSERVATIVE" = yes; + "CPU_FREQ_GOV_SCHEDUTIL" = yes; + "CPUFREQ_DT" = module; + "CPUFREQ_DT_PLATDEV" = yes; + "ARM_ALLWINNER_SUN50I_CPUFREQ_NVMEM" = no; + "ARM_SCPI_CPUFREQ" = yes; + "ARM_SCPI_PROTOCOL" = yes; + "ARM_SCPI_POWER_DOMAIN" = yes; + "DMIID" = yes; + "ROCKCHIP_SIP" = yes; + "EFI_ESRT" = yes; + "EFI_PARAMS_FROM_FDT" = yes; + "EFI_RUNTIME_WRAPPERS" = yes; + "EFI_GENERIC_STUB" = yes; + "EFI_ARMSTUB_DTB_LOADER" = yes; + "EFI_GENERIC_STUB_INITRD_CMDLINE_LOADER" = yes; + "EFI_CAPSULE_LOADER" = yes; + "EFI_EARLYCON" = yes; + "MESON_SM" = yes; + "ARM_PSCI_FW" = yes; + "HAVE_ARM_SMCCC" = yes; + "HAVE_ARM_SMCCC_DISCOVERY" = yes; + "ARM_SMCCC_SOC_ID" = yes; + "ARCH_SUPPORTS_ACPI" = yes; + "IRQ_BYPASS_MANAGER" = yes; + "VIRTUALIZATION" = yes; + "KVM" = yes; + "HAVE_KVM_IRQCHIP" = yes; + "HAVE_KVM_IRQFD" = yes; + "HAVE_KVM_IRQ_ROUTING" = yes; + "HAVE_KVM_EVENTFD" = yes; + "KVM_MMIO" = yes; + "HAVE_KVM_MSI" = yes; + "HAVE_KVM_CPU_RELAX_INTERCEPT" = yes; + "KVM_VFIO" = yes; + "HAVE_KVM_ARCH_TLB_FLUSH_ALL" = yes; + "KVM_GENERIC_DIRTYLOG_READ_PROTECT" = yes; + "HAVE_KVM_IRQ_BYPASS" = yes; + "HAVE_KVM_VCPU_RUN_PID_CHANGE" = yes; + "KVM_ARM_PMU" = yes; + "KVM_INDIRECT_VECTORS" = yes; + "ARM64_CRYPTO" = yes; + "CRYPTO_SHA256_ARM64" = yes; + "CRYPTO_SHA512_ARM64" = yes; + "CRYPTO_SHA1_ARM64_CE" = yes; + "CRYPTO_SHA2_ARM64_CE" = yes; + "CRYPTO_SHA3_ARM64" = module; + "CRYPTO_SM3_ARM64_CE" = module; + "CRYPTO_SM4_ARM64_CE" = module; + "CRYPTO_GHASH_ARM64_CE" = yes; + "CRYPTO_AES_ARM64" = yes; + "CRYPTO_AES_ARM64_CE" = yes; + "CRYPTO_AES_ARM64_CE_CCM" = yes; + "CRYPTO_AES_ARM64_CE_BLK" = yes; + "CRYPTO_AES_ARM64_NEON_BLK" = yes; + "CRYPTO_CHACHA20_NEON" = yes; + "CRYPTO_POLY1305_NEON" = module; + "CRYPTO_NHPOLY1305_NEON" = module; + "CRYPTO_AES_ARM64_BS" = yes; + "CRASH_CORE" = yes; + "KEXEC_CORE" = yes; + "JUMP_LABEL" = yes; + "UPROBES" = yes; + "HAVE_EFFICIENT_UNALIGNED_ACCESS" = yes; + "HAVE_KPROBES" = yes; + "HAVE_KRETPROBES" = yes; + "HAVE_FUNCTION_ERROR_INJECTION" = yes; + "HAVE_NMI" = yes; + "HAVE_ARCH_TRACEHOOK" = yes; + "HAVE_DMA_CONTIGUOUS" = yes; + "GENERIC_SMP_IDLE_THREAD" = yes; + "GENERIC_IDLE_POLL_SETUP" = yes; + "ARCH_HAS_FORTIFY_SOURCE" = yes; + "ARCH_HAS_KEEPINITRD" = yes; + "ARCH_HAS_SET_MEMORY" = yes; + "ARCH_HAS_SET_DIRECT_MAP" = yes; + "HAVE_ARCH_THREAD_STRUCT_WHITELIST" = yes; + "HAVE_ASM_MODVERSIONS" = yes; + "HAVE_REGS_AND_STACK_ACCESS_API" = yes; + "HAVE_RSEQ" = yes; + "HAVE_FUNCTION_ARG_ACCESS_API" = yes; + "HAVE_HW_BREAKPOINT" = yes; + "HAVE_PERF_REGS" = yes; + "HAVE_PERF_USER_STACK_DUMP" = yes; + "HAVE_ARCH_JUMP_LABEL" = yes; + "HAVE_ARCH_JUMP_LABEL_RELATIVE" = yes; + "MMU_GATHER_TABLE_FREE" = yes; + "MMU_GATHER_RCU_TABLE_FREE" = yes; + "ARCH_HAVE_NMI_SAFE_CMPXCHG" = yes; + "HAVE_ALIGNED_STRUCT_PAGE" = yes; + "HAVE_CMPXCHG_LOCAL" = yes; + "HAVE_CMPXCHG_DOUBLE" = yes; + "ARCH_WANT_COMPAT_IPC_PARSE_VERSION" = yes; + "HAVE_ARCH_SECCOMP_FILTER" = yes; + "SECCOMP_FILTER" = yes; + "HAVE_ARCH_STACKLEAK" = yes; + "HAVE_STACKPROTECTOR" = yes; + "STACKPROTECTOR" = yes; + "STACKPROTECTOR_STRONG" = yes; + "HAVE_CONTEXT_TRACKING" = yes; + "HAVE_VIRT_CPU_ACCOUNTING_GEN" = yes; + "HAVE_IRQ_TIME_ACCOUNTING" = yes; + "HAVE_ARCH_TRANSPARENT_HUGEPAGE" = yes; + "HAVE_ARCH_HUGE_VMAP" = yes; + "HAVE_MOD_ARCH_SPECIFIC" = yes; + "MODULES_USE_ELF_RELA" = yes; + "ARCH_HAS_ELF_RANDOMIZE" = yes; + "HAVE_ARCH_MMAP_RND_BITS" = yes; + "ARCH_MMAP_RND_BITS" = freeform "18"; + "HAVE_ARCH_MMAP_RND_COMPAT_BITS" = yes; + "ARCH_MMAP_RND_COMPAT_BITS" = freeform "11"; + "ARCH_WANT_DEFAULT_TOPDOWN_MMAP_LAYOUT" = yes; + "CLONE_BACKWARDS" = yes; + "OLD_SIGSUSPEND3" = yes; + "COMPAT_OLD_SIGACTION" = yes; + "COMPAT_32BIT_TIME" = yes; + "HAVE_ARCH_VMAP_STACK" = yes; + "VMAP_STACK" = yes; + "ARCH_HAS_STRICT_KERNEL_RWX" = yes; + "STRICT_KERNEL_RWX" = yes; + "ARCH_HAS_STRICT_MODULE_RWX" = yes; + "STRICT_MODULE_RWX" = yes; + "HAVE_ARCH_COMPILER_H" = yes; + "HAVE_ARCH_PREL32_RELOCATIONS" = yes; + "ARCH_USE_MEMREMAP_PROT" = yes; + "ARCH_HAS_RELR" = yes; + "ARCH_HAS_GCOV_PROFILE_ALL" = yes; + "HAVE_GCC_PLUGINS" = yes; + "RT_MUTEXES" = yes; + "BASE_SMALL" = freeform "0"; + "MODULE_SIG_FORMAT" = yes; + "MODULES" = yes; + "MODULE_UNLOAD" = yes; + "MODULE_SIG" = yes; + "MODULE_SIG_ALL" = yes; + "MODULE_SIG_SHA1" = yes; + "MODULE_SIG_HASH" = freeform "sha1"; + "MODULES_TREE_LOOKUP" = yes; + "BLOCK" = yes; + "BLK_SCSI_REQUEST" = yes; + "BLK_CGROUP_RWSTAT" = yes; + "BLK_DEV_BSG" = yes; + "BLK_DEV_BSGLIB" = yes; + "BLK_DEV_INTEGRITY" = yes; + "BLK_DEV_INTEGRITY_T10" = yes; + "BLK_DEV_ZONED" = yes; + "BLK_DEV_THROTTLING" = yes; + "BLK_WBT" = yes; + "BLK_WBT_MQ" = yes; + "BLK_DEBUG_FS" = yes; + "BLK_DEBUG_FS_ZONED" = yes; + "MSDOS_PARTITION" = yes; + "EFI_PARTITION" = yes; + "BLOCK_COMPAT" = yes; + "BLK_MQ_PCI" = yes; + "BLK_MQ_VIRTIO" = yes; + "BLK_PM" = yes; + "MQ_IOSCHED_DEADLINE" = yes; + "MQ_IOSCHED_KYBER" = yes; + "IOSCHED_BFQ" = yes; + "BFQ_GROUP_IOSCHED" = yes; + "PREEMPT_NOTIFIERS" = yes; + "PADATA" = yes; + "ASN1" = yes; + "UNINLINE_SPIN_UNLOCK" = yes; + "ARCH_SUPPORTS_ATOMIC_RMW" = yes; + "MUTEX_SPIN_ON_OWNER" = yes; + "RWSEM_SPIN_ON_OWNER" = yes; + "LOCK_SPIN_ON_OWNER" = yes; + "ARCH_USE_QUEUED_SPINLOCKS" = yes; + "QUEUED_SPINLOCKS" = yes; + "ARCH_USE_QUEUED_RWLOCKS" = yes; + "QUEUED_RWLOCKS" = yes; + "ARCH_HAS_NON_OVERLAPPING_ADDRESS_SPACE" = yes; + "ARCH_HAS_SYSCALL_WRAPPER" = yes; + "FREEZER" = yes; + "BINFMT_ELF" = yes; + "COMPAT_BINFMT_ELF" = yes; + "ARCH_BINFMT_ELF_STATE" = yes; + "ARCH_HAVE_ELF_PROT" = yes; + "ARCH_USE_GNU_PROPERTY" = yes; + "ELFCORE" = yes; + "BINFMT_SCRIPT" = yes; + "BINFMT_MISC" = yes; + "COREDUMP" = yes; + "SELECT_MEMORY_MODEL" = yes; + "SPARSEMEM_MANUAL" = yes; + "SPARSEMEM" = yes; + "NEED_MULTIPLE_NODES" = yes; + "SPARSEMEM_EXTREME" = yes; + "SPARSEMEM_VMEMMAP_ENABLE" = yes; + "SPARSEMEM_VMEMMAP" = yes; + "HAVE_FAST_GUP" = yes; + "ARCH_KEEP_MEMBLOCK" = yes; + "MEMORY_ISOLATION" = yes; + "SPLIT_PTLOCK_CPUS" = freeform "4"; + "MEMORY_BALLOON" = yes; + "BALLOON_COMPACTION" = yes; + "COMPACTION" = yes; + "PAGE_REPORTING" = yes; + "MIGRATION" = yes; + "CONTIG_ALLOC" = yes; + "PHYS_ADDR_T_64BIT" = yes; + "BOUNCE" = yes; + "MMU_NOTIFIER" = yes; + "KSM" = yes; + "DEFAULT_MMAP_MIN_ADDR" = freeform "4096"; + "ARCH_SUPPORTS_MEMORY_FAILURE" = yes; + "TRANSPARENT_HUGEPAGE" = yes; + "TRANSPARENT_HUGEPAGE_MADVISE" = yes; + "CLEANCACHE" = yes; + "FRONTSWAP" = yes; + "CMA" = yes; + "CMA_AREAS" = freeform "7"; + "ZSWAP" = yes; + "ZSWAP_COMPRESSOR_DEFAULT_LZO" = yes; + "ZSWAP_COMPRESSOR_DEFAULT" = freeform "lzo"; + "ZSWAP_ZPOOL_DEFAULT_ZBUD" = yes; + "ZSWAP_ZPOOL_DEFAULT" = freeform "zbud"; + "ZPOOL" = yes; + "ZBUD" = yes; + "Z3FOLD" = yes; + "ZSMALLOC" = yes; + "GENERIC_EARLY_IOREMAP" = yes; + "ARCH_HAS_PTE_DEVMAP" = yes; + "FRAME_VECTOR" = yes; + "ARCH_HAS_PTE_SPECIAL" = yes; + "NET" = yes; + "COMPAT_NETLINK_MESSAGES" = yes; + "NET_INGRESS" = yes; + "NET_EGRESS" = yes; + "NET_REDIRECT" = yes; + "SKB_EXTENSIONS" = yes; + "PACKET" = yes; + "PACKET_DIAG" = module; + "UNIX" = yes; + "UNIX_SCM" = yes; + "UNIX_DIAG" = module; + "TLS" = module; + "TLS_DEVICE" = yes; + "XFRM" = yes; + "XFRM_OFFLOAD" = yes; + "XFRM_ALGO" = module; + "XFRM_USER" = module; + "XFRM_INTERFACE" = module; + "XFRM_SUB_POLICY" = yes; + "XFRM_MIGRATE" = yes; + "XFRM_STATISTICS" = yes; + "XFRM_AH" = module; + "XFRM_ESP" = module; + "XFRM_IPCOMP" = module; + "NET_KEY" = module; + "NET_KEY_MIGRATE" = yes; + "XDP_SOCKETS" = yes; + "INET" = yes; + "IP_MULTICAST" = yes; + "IP_ADVANCED_ROUTER" = yes; + "IP_FIB_TRIE_STATS" = yes; + "IP_MULTIPLE_TABLES" = yes; + "IP_ROUTE_MULTIPATH" = yes; + "IP_ROUTE_VERBOSE" = yes; + "IP_ROUTE_CLASSID" = yes; + "IP_PNP" = yes; + "IP_PNP_DHCP" = yes; + "IP_PNP_BOOTP" = yes; + "IP_PNP_RARP" = yes; + "NET_IPIP" = module; + "NET_IPGRE_DEMUX" = module; + "NET_IP_TUNNEL" = module; + "NET_IPGRE" = module; + "NET_IPGRE_BROADCAST" = yes; + "IP_MROUTE_COMMON" = yes; + "IP_MROUTE" = yes; + "IP_MROUTE_MULTIPLE_TABLES" = yes; + "IP_PIMSM_V1" = yes; + "IP_PIMSM_V2" = yes; + "SYN_COOKIES" = yes; + "NET_IPVTI" = module; + "NET_UDP_TUNNEL" = module; + "NET_FOU" = module; + "NET_FOU_IP_TUNNELS" = yes; + "INET_AH" = module; + "INET_ESP" = module; + "INET_ESP_OFFLOAD" = module; + "INET_IPCOMP" = module; + "INET_XFRM_TUNNEL" = module; + "INET_TUNNEL" = module; + "INET_DIAG" = module; + "INET_TCP_DIAG" = module; + "INET_UDP_DIAG" = module; + "INET_RAW_DIAG" = module; + "INET_DIAG_DESTROY" = yes; + "TCP_CONG_ADVANCED" = yes; + "TCP_CONG_BIC" = module; + "TCP_CONG_CUBIC" = yes; + "TCP_CONG_WESTWOOD" = module; + "TCP_CONG_HTCP" = module; + "TCP_CONG_HSTCP" = module; + "TCP_CONG_HYBLA" = module; + "TCP_CONG_VEGAS" = module; + "TCP_CONG_NV" = module; + "TCP_CONG_SCALABLE" = module; + "TCP_CONG_LP" = module; + "TCP_CONG_VENO" = module; + "TCP_CONG_YEAH" = module; + "TCP_CONG_ILLINOIS" = module; + "TCP_CONG_DCTCP" = module; + "TCP_CONG_CDG" = module; + "TCP_CONG_BBR" = module; + "DEFAULT_RENO" = yes; + "DEFAULT_TCP_CONG" = freeform "reno"; + "TCP_MD5SIG" = yes; + "IPV6" = yes; + "IPV6_ROUTER_PREF" = yes; + "IPV6_ROUTE_INFO" = yes; + "IPV6_OPTIMISTIC_DAD" = yes; + "INET6_AH" = module; + "INET6_ESP" = module; + "INET6_ESP_OFFLOAD" = module; + "INET6_IPCOMP" = module; + "IPV6_MIP6" = module; + "IPV6_ILA" = module; + "INET6_XFRM_TUNNEL" = module; + "INET6_TUNNEL" = module; + "IPV6_VTI" = module; + "IPV6_SIT" = module; + "IPV6_SIT_6RD" = yes; + "IPV6_NDISC_NODETYPE" = yes; + "IPV6_TUNNEL" = module; + "IPV6_GRE" = module; + "IPV6_FOU" = module; + "IPV6_FOU_TUNNEL" = module; + "IPV6_MULTIPLE_TABLES" = yes; + "IPV6_SUBTREES" = yes; + "IPV6_MROUTE" = yes; + "IPV6_MROUTE_MULTIPLE_TABLES" = yes; + "IPV6_PIMSM_V2" = yes; + "IPV6_SEG6_LWTUNNEL" = yes; + "IPV6_SEG6_HMAC" = yes; + "IPV6_SEG6_BPF" = yes; + "NETLABEL" = yes; + "NETWORK_SECMARK" = yes; + "NET_PTP_CLASSIFY" = yes; + "NETWORK_PHY_TIMESTAMPING" = yes; + "NETFILTER" = yes; + "NETFILTER_ADVANCED" = yes; + "BRIDGE_NETFILTER" = module; + "NETFILTER_INGRESS" = yes; + "NETFILTER_NETLINK" = module; + "NETFILTER_FAMILY_BRIDGE" = yes; + "NETFILTER_FAMILY_ARP" = yes; + "NETFILTER_NETLINK_ACCT" = module; + "NETFILTER_NETLINK_QUEUE" = module; + "NETFILTER_NETLINK_LOG" = module; + "NETFILTER_NETLINK_OSF" = module; + "NF_CONNTRACK" = module; + "NF_LOG_COMMON" = module; + "NF_LOG_NETDEV" = module; + "NETFILTER_CONNCOUNT" = module; + "NF_CONNTRACK_MARK" = yes; + "NF_CONNTRACK_SECMARK" = yes; + "NF_CONNTRACK_ZONES" = yes; + "NF_CONNTRACK_EVENTS" = yes; + "NF_CONNTRACK_TIMEOUT" = yes; + "NF_CONNTRACK_TIMESTAMP" = yes; + "NF_CONNTRACK_LABELS" = yes; + "NF_CT_PROTO_DCCP" = yes; + "NF_CT_PROTO_GRE" = yes; + "NF_CT_PROTO_SCTP" = yes; + "NF_CT_PROTO_UDPLITE" = yes; + "NF_CONNTRACK_AMANDA" = module; + "NF_CONNTRACK_FTP" = module; + "NF_CONNTRACK_H323" = module; + "NF_CONNTRACK_IRC" = module; + "NF_CONNTRACK_BROADCAST" = module; + "NF_CONNTRACK_NETBIOS_NS" = module; + "NF_CONNTRACK_SNMP" = module; + "NF_CONNTRACK_PPTP" = module; + "NF_CONNTRACK_SANE" = module; + "NF_CONNTRACK_SIP" = module; + "NF_CONNTRACK_TFTP" = module; + "NF_CT_NETLINK" = module; + "NF_CT_NETLINK_TIMEOUT" = module; + "NF_CT_NETLINK_HELPER" = module; + "NETFILTER_NETLINK_GLUE_CT" = yes; + "NF_NAT" = module; + "NF_NAT_AMANDA" = module; + "NF_NAT_FTP" = module; + "NF_NAT_IRC" = module; + "NF_NAT_SIP" = module; + "NF_NAT_TFTP" = module; + "NF_NAT_REDIRECT" = yes; + "NF_NAT_MASQUERADE" = yes; + "NETFILTER_SYNPROXY" = module; + "NF_TABLES" = module; + "NF_TABLES_INET" = yes; + "NF_TABLES_NETDEV" = yes; + "NFT_NUMGEN" = module; + "NFT_CT" = module; + "NFT_FLOW_OFFLOAD" = module; + "NFT_COUNTER" = module; + "NFT_CONNLIMIT" = module; + "NFT_LOG" = module; + "NFT_LIMIT" = module; + "NFT_MASQ" = module; + "NFT_REDIR" = module; + "NFT_NAT" = module; + "NFT_TUNNEL" = module; + "NFT_OBJREF" = module; + "NFT_QUEUE" = module; + "NFT_QUOTA" = module; + "NFT_REJECT" = module; + "NFT_REJECT_INET" = module; + "NFT_COMPAT" = module; + "NFT_HASH" = module; + "NFT_FIB" = module; + "NFT_FIB_INET" = module; + "NFT_XFRM" = module; + "NFT_SOCKET" = module; + "NFT_OSF" = module; + "NFT_TPROXY" = module; + "NFT_SYNPROXY" = module; + "NF_DUP_NETDEV" = module; + "NFT_DUP_NETDEV" = module; + "NFT_FWD_NETDEV" = module; + "NFT_FIB_NETDEV" = module; + "NF_FLOW_TABLE_INET" = module; + "NF_FLOW_TABLE" = module; + "NETFILTER_XTABLES" = module; + "NETFILTER_XT_MARK" = module; + "NETFILTER_XT_CONNMARK" = module; + "NETFILTER_XT_SET" = module; + "NETFILTER_XT_TARGET_AUDIT" = module; + "NETFILTER_XT_TARGET_CHECKSUM" = module; + "NETFILTER_XT_TARGET_CLASSIFY" = module; + "NETFILTER_XT_TARGET_CONNMARK" = module; + "NETFILTER_XT_TARGET_CONNSECMARK" = module; + "NETFILTER_XT_TARGET_CT" = module; + "NETFILTER_XT_TARGET_DSCP" = module; + "NETFILTER_XT_TARGET_HL" = module; + "NETFILTER_XT_TARGET_HMARK" = module; + "NETFILTER_XT_TARGET_IDLETIMER" = module; + "NETFILTER_XT_TARGET_LED" = module; + "NETFILTER_XT_TARGET_LOG" = module; + "NETFILTER_XT_TARGET_MARK" = module; + "NETFILTER_XT_NAT" = module; + "NETFILTER_XT_TARGET_NETMAP" = module; + "NETFILTER_XT_TARGET_NFLOG" = module; + "NETFILTER_XT_TARGET_NFQUEUE" = module; + "NETFILTER_XT_TARGET_NOTRACK" = module; + "NETFILTER_XT_TARGET_RATEEST" = module; + "NETFILTER_XT_TARGET_REDIRECT" = module; + "NETFILTER_XT_TARGET_MASQUERADE" = module; + "NETFILTER_XT_TARGET_TEE" = module; + "NETFILTER_XT_TARGET_TPROXY" = module; + "NETFILTER_XT_TARGET_TRACE" = module; + "NETFILTER_XT_TARGET_SECMARK" = module; + "NETFILTER_XT_TARGET_TCPMSS" = module; + "NETFILTER_XT_TARGET_TCPOPTSTRIP" = module; + "NETFILTER_XT_MATCH_ADDRTYPE" = module; + "NETFILTER_XT_MATCH_BPF" = module; + "NETFILTER_XT_MATCH_CGROUP" = module; + "NETFILTER_XT_MATCH_CLUSTER" = module; + "NETFILTER_XT_MATCH_COMMENT" = module; + "NETFILTER_XT_MATCH_CONNBYTES" = module; + "NETFILTER_XT_MATCH_CONNLABEL" = module; + "NETFILTER_XT_MATCH_CONNLIMIT" = module; + "NETFILTER_XT_MATCH_CONNMARK" = module; + "NETFILTER_XT_MATCH_CONNTRACK" = module; + "NETFILTER_XT_MATCH_CPU" = module; + "NETFILTER_XT_MATCH_DCCP" = module; + "NETFILTER_XT_MATCH_DEVGROUP" = module; + "NETFILTER_XT_MATCH_DSCP" = module; + "NETFILTER_XT_MATCH_ECN" = module; + "NETFILTER_XT_MATCH_ESP" = module; + "NETFILTER_XT_MATCH_HASHLIMIT" = module; + "NETFILTER_XT_MATCH_HELPER" = module; + "NETFILTER_XT_MATCH_HL" = module; + "NETFILTER_XT_MATCH_IPCOMP" = module; + "NETFILTER_XT_MATCH_IPRANGE" = module; + "NETFILTER_XT_MATCH_IPVS" = module; + "NETFILTER_XT_MATCH_L2TP" = module; + "NETFILTER_XT_MATCH_LENGTH" = module; + "NETFILTER_XT_MATCH_LIMIT" = module; + "NETFILTER_XT_MATCH_MAC" = module; + "NETFILTER_XT_MATCH_MARK" = module; + "NETFILTER_XT_MATCH_MULTIPORT" = module; + "NETFILTER_XT_MATCH_NFACCT" = module; + "NETFILTER_XT_MATCH_OSF" = module; + "NETFILTER_XT_MATCH_OWNER" = module; + "NETFILTER_XT_MATCH_POLICY" = module; + "NETFILTER_XT_MATCH_PHYSDEV" = module; + "NETFILTER_XT_MATCH_PKTTYPE" = module; + "NETFILTER_XT_MATCH_QUOTA" = module; + "NETFILTER_XT_MATCH_RATEEST" = module; + "NETFILTER_XT_MATCH_REALM" = module; + "NETFILTER_XT_MATCH_RECENT" = module; + "NETFILTER_XT_MATCH_SCTP" = module; + "NETFILTER_XT_MATCH_SOCKET" = module; + "NETFILTER_XT_MATCH_STATE" = module; + "NETFILTER_XT_MATCH_STATISTIC" = module; + "NETFILTER_XT_MATCH_STRING" = module; + "NETFILTER_XT_MATCH_TCPMSS" = module; + "NETFILTER_XT_MATCH_TIME" = module; + "NETFILTER_XT_MATCH_U32" = module; + "IP_SET" = module; + "IP_SET_MAX" = freeform "256"; + "IP_SET_BITMAP_IP" = module; + "IP_SET_BITMAP_IPMAC" = module; + "IP_SET_BITMAP_PORT" = module; + "IP_SET_HASH_IP" = module; + "IP_SET_HASH_IPMARK" = module; + "IP_SET_HASH_IPPORT" = module; + "IP_SET_HASH_IPPORTIP" = module; + "IP_SET_HASH_IPPORTNET" = module; + "IP_SET_HASH_IPMAC" = module; + "IP_SET_HASH_MAC" = module; + "IP_SET_HASH_NETPORTNET" = module; + "IP_SET_HASH_NET" = module; + "IP_SET_HASH_NETNET" = module; + "IP_SET_HASH_NETPORT" = module; + "IP_SET_HASH_NETIFACE" = module; + "IP_SET_LIST_SET" = module; + "IP_VS" = module; + "IP_VS_IPV6" = yes; + "IP_VS_TAB_BITS" = freeform "12"; + "IP_VS_PROTO_TCP" = yes; + "IP_VS_PROTO_UDP" = yes; + "IP_VS_PROTO_AH_ESP" = yes; + "IP_VS_PROTO_ESP" = yes; + "IP_VS_PROTO_AH" = yes; + "IP_VS_PROTO_SCTP" = yes; + "IP_VS_RR" = module; + "IP_VS_WRR" = module; + "IP_VS_LC" = module; + "IP_VS_WLC" = module; + "IP_VS_FO" = module; + "IP_VS_OVF" = module; + "IP_VS_LBLC" = module; + "IP_VS_LBLCR" = module; + "IP_VS_DH" = module; + "IP_VS_SH" = module; + "IP_VS_MH" = module; + "IP_VS_SED" = module; + "IP_VS_NQ" = module; + "IP_VS_SH_TAB_BITS" = freeform "8"; + "IP_VS_MH_TAB_INDEX" = freeform "12"; + "IP_VS_FTP" = module; + "IP_VS_NFCT" = yes; + "IP_VS_PE_SIP" = module; + "NF_DEFRAG_IPV4" = module; + "NF_SOCKET_IPV4" = module; + "NF_TPROXY_IPV4" = module; + "NF_TABLES_IPV4" = yes; + "NFT_REJECT_IPV4" = module; + "NFT_DUP_IPV4" = module; + "NFT_FIB_IPV4" = module; + "NF_TABLES_ARP" = yes; + "NF_FLOW_TABLE_IPV4" = module; + "NF_DUP_IPV4" = module; + "NF_LOG_ARP" = module; + "NF_LOG_IPV4" = module; + "NF_REJECT_IPV4" = module; + "NF_NAT_SNMP_BASIC" = module; + "NF_NAT_PPTP" = module; + "NF_NAT_H323" = module; + "IP_NF_IPTABLES" = module; + "IP_NF_MATCH_AH" = module; + "IP_NF_MATCH_ECN" = module; + "IP_NF_MATCH_RPFILTER" = module; + "IP_NF_MATCH_TTL" = module; + "IP_NF_FILTER" = module; + "IP_NF_TARGET_REJECT" = module; + "IP_NF_TARGET_SYNPROXY" = module; + "IP_NF_NAT" = module; + "IP_NF_TARGET_MASQUERADE" = module; + "IP_NF_TARGET_NETMAP" = module; + "IP_NF_TARGET_REDIRECT" = module; + "IP_NF_MANGLE" = module; + "IP_NF_TARGET_CLUSTERIP" = module; + "IP_NF_TARGET_ECN" = module; + "IP_NF_TARGET_TTL" = module; + "IP_NF_RAW" = module; + "IP_NF_SECURITY" = module; + "IP_NF_ARPTABLES" = module; + "IP_NF_ARPFILTER" = module; + "IP_NF_ARP_MANGLE" = module; + "NF_SOCKET_IPV6" = module; + "NF_TPROXY_IPV6" = module; + "NF_TABLES_IPV6" = yes; + "NFT_REJECT_IPV6" = module; + "NFT_DUP_IPV6" = module; + "NFT_FIB_IPV6" = module; + "NF_FLOW_TABLE_IPV6" = module; + "NF_DUP_IPV6" = module; + "NF_REJECT_IPV6" = module; + "NF_LOG_IPV6" = module; + "IP6_NF_IPTABLES" = module; + "IP6_NF_MATCH_AH" = module; + "IP6_NF_MATCH_EUI64" = module; + "IP6_NF_MATCH_FRAG" = module; + "IP6_NF_MATCH_OPTS" = module; + "IP6_NF_MATCH_HL" = module; + "IP6_NF_MATCH_IPV6HEADER" = module; + "IP6_NF_MATCH_MH" = module; + "IP6_NF_MATCH_RPFILTER" = module; + "IP6_NF_MATCH_RT" = module; + "IP6_NF_MATCH_SRH" = module; + "IP6_NF_TARGET_HL" = module; + "IP6_NF_FILTER" = module; + "IP6_NF_TARGET_REJECT" = module; + "IP6_NF_TARGET_SYNPROXY" = module; + "IP6_NF_MANGLE" = module; + "IP6_NF_RAW" = module; + "IP6_NF_SECURITY" = module; + "IP6_NF_NAT" = module; + "IP6_NF_TARGET_MASQUERADE" = module; + "IP6_NF_TARGET_NPT" = module; + "NF_DEFRAG_IPV6" = module; + "DECNET_NF_GRABULATOR" = module; + "NF_TABLES_BRIDGE" = module; + "NFT_BRIDGE_META" = module; + "NFT_BRIDGE_REJECT" = module; + "NF_LOG_BRIDGE" = module; + "NF_CONNTRACK_BRIDGE" = module; + "BRIDGE_NF_EBTABLES" = module; + "BRIDGE_EBT_BROUTE" = module; + "BRIDGE_EBT_T_FILTER" = module; + "BRIDGE_EBT_T_NAT" = module; + "BRIDGE_EBT_802_3" = module; + "BRIDGE_EBT_AMONG" = module; + "BRIDGE_EBT_ARP" = module; + "BRIDGE_EBT_IP" = module; + "BRIDGE_EBT_IP6" = module; + "BRIDGE_EBT_LIMIT" = module; + "BRIDGE_EBT_MARK" = module; + "BRIDGE_EBT_PKTTYPE" = module; + "BRIDGE_EBT_STP" = module; + "BRIDGE_EBT_VLAN" = module; + "BRIDGE_EBT_ARPREPLY" = module; + "BRIDGE_EBT_DNAT" = module; + "BRIDGE_EBT_MARK_T" = module; + "BRIDGE_EBT_REDIRECT" = module; + "BRIDGE_EBT_SNAT" = module; + "BRIDGE_EBT_LOG" = module; + "BRIDGE_EBT_NFLOG" = module; + "BPFILTER" = yes; + "BPFILTER_UMH" = module; + "IP_SCTP" = module; + "SCTP_DBG_OBJCNT" = yes; + "SCTP_DEFAULT_COOKIE_HMAC_MD5" = yes; + "SCTP_COOKIE_HMAC_MD5" = yes; + "SCTP_COOKIE_HMAC_SHA1" = yes; + "INET_SCTP_DIAG" = module; + "RDS" = module; + "RDS_TCP" = module; + "TIPC" = module; + "TIPC_MEDIA_UDP" = yes; + "TIPC_CRYPTO" = yes; + "TIPC_DIAG" = module; + "ATM" = module; + "ATM_CLIP" = module; + "ATM_CLIP_NO_ICMP" = yes; + "ATM_LANE" = module; + "ATM_MPOA" = module; + "ATM_BR2684" = module; + "ATM_BR2684_IPFILTER" = yes; + "L2TP" = module; + "L2TP_DEBUGFS" = module; + "L2TP_V3" = yes; + "L2TP_IP" = module; + "L2TP_ETH" = module; + "STP" = yes; + "GARP" = yes; + "MRP" = yes; + "BRIDGE" = module; + "BRIDGE_IGMP_SNOOPING" = yes; + "BRIDGE_VLAN_FILTERING" = yes; + "HAVE_NET_DSA" = yes; + "NET_DSA" = module; + "NET_DSA_TAG_8021Q" = module; + "NET_DSA_TAG_AR9331" = module; + "NET_DSA_TAG_BRCM_COMMON" = module; + "NET_DSA_TAG_BRCM" = module; + "NET_DSA_TAG_BRCM_PREPEND" = module; + "NET_DSA_TAG_GSWIP" = module; + "NET_DSA_TAG_DSA" = module; + "NET_DSA_TAG_EDSA" = module; + "NET_DSA_TAG_MTK" = module; + "NET_DSA_TAG_KSZ" = module; + "NET_DSA_TAG_RTL4_A" = module; + "NET_DSA_TAG_OCELOT" = module; + "NET_DSA_TAG_QCA" = module; + "NET_DSA_TAG_LAN9303" = module; + "NET_DSA_TAG_SJA1105" = module; + "NET_DSA_TAG_TRAILER" = module; + "VLAN_8021Q" = yes; + "VLAN_8021Q_GVRP" = yes; + "VLAN_8021Q_MVRP" = yes; + "DECNET" = module; + "DECNET_ROUTER" = yes; + "LLC" = yes; + "LLC2" = module; + "ATALK" = module; + "DEV_APPLETALK" = module; + "IPDDP" = module; + "IPDDP_ENCAP" = yes; + "X25" = module; + "LAPB" = module; + "PHONET" = module; + "6LOWPAN" = module; + "6LOWPAN_NHC" = module; + "6LOWPAN_NHC_DEST" = module; + "6LOWPAN_NHC_FRAGMENT" = module; + "6LOWPAN_NHC_HOP" = module; + "6LOWPAN_NHC_IPV6" = module; + "6LOWPAN_NHC_MOBILITY" = module; + "6LOWPAN_NHC_ROUTING" = module; + "6LOWPAN_NHC_UDP" = module; + "IEEE802154" = module; + "IEEE802154_NL802154_EXPERIMENTAL" = yes; + "IEEE802154_SOCKET" = module; + "IEEE802154_6LOWPAN" = module; + "MAC802154" = module; + "NET_SCHED" = yes; + "NET_SCH_CBQ" = module; + "NET_SCH_HTB" = module; + "NET_SCH_HFSC" = module; + "NET_SCH_ATM" = module; + "NET_SCH_PRIO" = module; + "NET_SCH_MULTIQ" = module; + "NET_SCH_RED" = module; + "NET_SCH_SFB" = module; + "NET_SCH_SFQ" = module; + "NET_SCH_TEQL" = module; + "NET_SCH_TBF" = module; + "NET_SCH_CBS" = module; + "NET_SCH_ETF" = module; + "NET_SCH_TAPRIO" = module; + "NET_SCH_GRED" = module; + "NET_SCH_DSMARK" = module; + "NET_SCH_NETEM" = module; + "NET_SCH_DRR" = module; + "NET_SCH_MQPRIO" = module; + "NET_SCH_SKBPRIO" = module; + "NET_SCH_CHOKE" = module; + "NET_SCH_QFQ" = module; + "NET_SCH_CODEL" = module; + "NET_SCH_FQ_CODEL" = module; + "NET_SCH_CAKE" = module; + "NET_SCH_FQ" = module; + "NET_SCH_HHF" = module; + "NET_SCH_PIE" = module; + "NET_SCH_FQ_PIE" = module; + "NET_SCH_INGRESS" = module; + "NET_SCH_PLUG" = module; + "NET_SCH_ETS" = module; + "NET_SCH_DEFAULT" = yes; + "DEFAULT_PFIFO_FAST" = yes; + "DEFAULT_NET_SCH" = freeform "pfifo_fast"; + "NET_CLS" = yes; + "NET_CLS_BASIC" = module; + "NET_CLS_TCINDEX" = module; + "NET_CLS_ROUTE4" = module; + "NET_CLS_FW" = module; + "NET_CLS_U32" = module; + "CLS_U32_PERF" = yes; + "CLS_U32_MARK" = yes; + "NET_CLS_RSVP" = module; + "NET_CLS_RSVP6" = module; + "NET_CLS_FLOW" = module; + "NET_CLS_CGROUP" = module; + "NET_CLS_BPF" = module; + "NET_CLS_FLOWER" = module; + "NET_CLS_MATCHALL" = module; + "NET_EMATCH" = yes; + "NET_EMATCH_STACK" = freeform "32"; + "NET_EMATCH_CMP" = module; + "NET_EMATCH_NBYTE" = module; + "NET_EMATCH_U32" = module; + "NET_EMATCH_META" = module; + "NET_EMATCH_TEXT" = module; + "NET_EMATCH_CANID" = module; + "NET_EMATCH_IPSET" = module; + "NET_EMATCH_IPT" = module; + "NET_CLS_ACT" = yes; + "NET_ACT_POLICE" = module; + "NET_ACT_GACT" = module; + "GACT_PROB" = yes; + "NET_ACT_MIRRED" = module; + "NET_ACT_SAMPLE" = module; + "NET_ACT_IPT" = module; + "NET_ACT_NAT" = module; + "NET_ACT_PEDIT" = module; + "NET_ACT_SIMP" = module; + "NET_ACT_SKBEDIT" = module; + "NET_ACT_CSUM" = module; + "NET_ACT_MPLS" = module; + "NET_ACT_VLAN" = module; + "NET_ACT_BPF" = module; + "NET_ACT_CONNMARK" = module; + "NET_ACT_CTINFO" = module; + "NET_ACT_SKBMOD" = module; + "NET_ACT_IFE" = module; + "NET_ACT_TUNNEL_KEY" = module; + "NET_ACT_CT" = module; + "NET_IFE_SKBMARK" = module; + "NET_IFE_SKBPRIO" = module; + "NET_IFE_SKBTCINDEX" = module; + "NET_SCH_FIFO" = yes; + "DCB" = yes; + "DNS_RESOLVER" = yes; + "BATMAN_ADV" = module; + "BATMAN_ADV_BATMAN_V" = yes; + "BATMAN_ADV_BLA" = yes; + "BATMAN_ADV_DAT" = yes; + "BATMAN_ADV_NC" = yes; + "BATMAN_ADV_MCAST" = yes; + "BATMAN_ADV_DEBUGFS" = yes; + "BATMAN_ADV_DEBUG" = yes; + "BATMAN_ADV_SYSFS" = yes; + "OPENVSWITCH" = module; + "OPENVSWITCH_GRE" = module; + "OPENVSWITCH_VXLAN" = module; + "OPENVSWITCH_GENEVE" = module; + "VSOCKETS" = module; + "VSOCKETS_DIAG" = module; + "VSOCKETS_LOOPBACK" = module; + "VIRTIO_VSOCKETS" = module; + "VIRTIO_VSOCKETS_COMMON" = module; + "NETLINK_DIAG" = module; + "MPLS" = yes; + "NET_MPLS_GSO" = module; + "MPLS_ROUTING" = module; + "MPLS_IPTUNNEL" = module; + "NET_NSH" = module; + "HSR" = module; + "NET_SWITCHDEV" = yes; + "NET_L3_MASTER_DEV" = yes; + "RPS" = yes; + "RFS_ACCEL" = yes; + "XPS" = yes; + "CGROUP_NET_PRIO" = yes; + "CGROUP_NET_CLASSID" = yes; + "NET_RX_BUSY_POLL" = yes; + "BQL" = yes; + "BPF_JIT" = yes; + "NET_FLOW_LIMIT" = yes; + "NET_PKTGEN" = module; + "NET_DROP_MONITOR" = yes; + "HAMRADIO" = yes; + "AX25" = module; + "AX25_DAMA_SLAVE" = yes; + "NETROM" = module; + "ROSE" = module; + "MKISS" = module; + "6PACK" = module; + "BPQETHER" = module; + "BAYCOM_SER_FDX" = module; + "BAYCOM_SER_HDX" = module; + "YAM" = module; + "CAN" = module; + "CAN_RAW" = module; + "CAN_BCM" = module; + "CAN_GW" = module; + "CAN_J1939" = module; + "CAN_VCAN" = module; + "CAN_VXCAN" = module; + "CAN_SLCAN" = module; + "CAN_DEV" = module; + "CAN_CALC_BITTIMING" = yes; + "CAN_GRCAN" = module; + "CAN_KVASER_PCIEFD" = module; + "CAN_XILINXCAN" = module; + "CAN_C_CAN" = module; + "CAN_C_CAN_PLATFORM" = module; + "CAN_C_CAN_PCI" = module; + "CAN_CC770" = module; + "CAN_CC770_ISA" = module; + "CAN_CC770_PLATFORM" = module; + "CAN_M_CAN" = module; + "CAN_M_CAN_PLATFORM" = module; + "CAN_M_CAN_TCAN4X5X" = module; + "CAN_PEAK_PCIEFD" = module; + "CAN_SJA1000" = module; + "CAN_EMS_PCI" = module; + "CAN_F81601" = module; + "CAN_KVASER_PCI" = module; + "CAN_PEAK_PCI" = module; + "CAN_PEAK_PCIEC" = yes; + "CAN_PLX_PCI" = module; + "CAN_SJA1000_ISA" = module; + "CAN_SJA1000_PLATFORM" = module; + "CAN_SOFTING" = module; + "CAN_HI311X" = module; + "CAN_MCP251X" = module; + "CAN_8DEV_USB" = module; + "CAN_EMS_USB" = module; + "CAN_ESD_USB2" = module; + "CAN_GS_USB" = module; + "CAN_KVASER_USB" = module; + "CAN_MCBA_USB" = module; + "CAN_PEAK_USB" = module; + "CAN_UCAN" = module; + "BT" = no; + "AF_RXRPC" = module; + "STREAM_PARSER" = yes; + "FIB_RULES" = yes; + "WIRELESS" = no; + "RFKILL" = module; + "RFKILL_LEDS" = yes; + "RFKILL_INPUT" = yes; + "RFKILL_GPIO" = module; + "NET_9P" = module; + "NET_9P_VIRTIO" = module; + "NET_9P_XEN" = module; + "CEPH_LIB" = module; + "CEPH_LIB_USE_DNS_RESOLVER" = yes; + "NFC" = no; + "PSAMPLE" = module; + "NET_IFE" = module; + "LWTUNNEL" = yes; + "LWTUNNEL_BPF" = yes; + "DST_CACHE" = yes; + "GRO_CELLS" = yes; + "SOCK_VALIDATE_XMIT" = yes; + "NET_SOCK_MSG" = yes; + "NET_DEVLINK" = yes; + "PAGE_POOL" = yes; + "FAILOVER" = module; + "ETHTOOL_NETLINK" = yes; + "HAVE_EBPF_JIT" = yes; + "ARM_AMBA" = yes; + "HAVE_PCI" = yes; + "PCI" = yes; + "PCI_DOMAINS" = yes; + "PCI_DOMAINS_GENERIC" = yes; + "PCI_SYSCALL" = yes; + "PCIEPORTBUS" = yes; + "PCIEAER" = yes; + "PCIEASPM" = yes; + "PCIEASPM_PERFORMANCE" = yes; + "PCIE_PME" = yes; + "PCI_MSI" = yes; + "PCI_MSI_IRQ_DOMAIN" = yes; + "PCI_QUIRKS" = yes; + "PCI_ATS" = yes; + "PCI_IOV" = yes; + "PCI_LABEL" = yes; + "HOTPLUG_PCI" = yes; + "PCIE_ROCKCHIP" = yes; + "PCIE_ROCKCHIP_HOST" = yes; + "PCIE_ROCKCHIP_EP" = yes; + "PCI_ENDPOINT" = yes; + "PCI_ENDPOINT_CONFIGFS" = yes; + "UEVENT_HELPER" = yes; + "DEVTMPFS" = yes; + "DEVTMPFS_MOUNT" = yes; + "STANDALONE" = yes; + "PREVENT_FIRMWARE_BUILD" = yes; + "FW_LOADER" = yes; + "FW_CACHE" = yes; + "WANT_DEV_COREDUMP" = yes; + "ALLOW_DEV_COREDUMP" = yes; + "DEV_COREDUMP" = yes; + "SYS_HYPERVISOR" = yes; + "GENERIC_CPU_AUTOPROBE" = yes; + "GENERIC_CPU_VULNERABILITIES" = yes; + "SOC_BUS" = yes; + "REGMAP" = yes; + "REGMAP_I2C" = yes; + "REGMAP_SPI" = module; + "REGMAP_W1" = module; + "REGMAP_MMIO" = yes; + "REGMAP_IRQ" = yes; + "REGMAP_SCCB" = module; + "DMA_SHARED_BUFFER" = yes; + "GENERIC_ARCH_TOPOLOGY" = yes; + "ARM_CCI" = yes; + "BRCMSTB_GISB_ARB" = yes; + "SUN50I_DE2_BUS" = yes; + "SUNXI_RSB" = module; + "VEXPRESS_CONFIG" = yes; + "MHI_BUS" = module; + "CONNECTOR" = module; + "GNSS" = module; + "GNSS_SERIAL" = module; + "GNSS_MTK_SERIAL" = module; + "GNSS_SIRF_SERIAL" = module; + "GNSS_UBX_SERIAL" = module; + "MTD" = yes; + "MTD_OF_PARTS" = yes; + "MTD_BLKDEVS" = yes; + "MTD_BLOCK" = yes; + "MTD_CFI" = module; + "MTD_GEN_PROBE" = module; + "MTD_MAP_BANK_WIDTH_1" = yes; + "MTD_MAP_BANK_WIDTH_2" = yes; + "MTD_MAP_BANK_WIDTH_4" = yes; + "MTD_CFI_I1" = yes; + "MTD_CFI_I2" = yes; + "MTD_CFI_AMDSTD" = module; + "MTD_CFI_UTIL" = module; + "MTD_COMPLEX_MAPPINGS" = yes; + "MTD_SPI_NOR" = yes; + "MTD_SPI_NOR_USE_4K_SECTORS" = yes; + "MTD_HYPERBUS" = module; + "HBMC_AM654" = module; + "DTC" = yes; + "OF" = yes; + "OF_FLATTREE" = yes; + "OF_EARLY_FLATTREE" = yes; + "OF_KOBJ" = yes; + "OF_DYNAMIC" = yes; + "OF_ADDRESS" = yes; + "OF_IRQ" = yes; + "OF_NET" = yes; + "OF_MDIO" = yes; + "OF_RESERVED_MEM" = yes; + "OF_RESOLVE" = yes; + "OF_OVERLAY" = yes; + "OF_NUMA" = yes; + "OF_CONFIGFS" = yes; + "BLK_DEV" = yes; + "CDROM" = module; + "ZRAM" = module; + "ZRAM_WRITEBACK" = yes; + "BLK_DEV_UMEM" = module; + "BLK_DEV_LOOP" = yes; + "BLK_DEV_LOOP_MIN_COUNT" = freeform "8"; + "BLK_DEV_CRYPTOLOOP" = module; + "BLK_DEV_DRBD" = module; + "BLK_DEV_NBD" = module; + "BLK_DEV_SKD" = module; + "BLK_DEV_SX8" = module; + "BLK_DEV_RAM" = module; + "BLK_DEV_RAM_COUNT" = freeform "8"; + "BLK_DEV_RAM_SIZE" = freeform "4096"; + "ATA_OVER_ETH" = module; + "XEN_BLKDEV_FRONTEND" = yes; + "XEN_BLKDEV_BACKEND" = module; + "VIRTIO_BLK" = yes; + "BLK_DEV_RBD" = module; + "BLK_DEV_RSXX" = module; + "NVME_CORE" = yes; + "BLK_DEV_NVME" = yes; + "NVME_MULTIPATH" = yes; + "NVME_FABRICS" = module; + "NVME_FC" = module; + "NVME_TARGET" = module; + "NVME_TARGET_LOOP" = module; + "NVME_TARGET_FC" = module; + "PHANTOM" = module; + "TIFM_CORE" = module; + "TIFM_7XX1" = module; + "SRAM" = yes; + "XILINX_SDFEC" = module; + "MISC_RTSX" = module; + "EEPROM_AT24" = module; + "EEPROM_AT25" = module; + "EEPROM_LEGACY" = module; + "EEPROM_93CX6" = module; + "EEPROM_EE1004" = module; + "CB710_CORE" = module; + "CB710_DEBUG_ASSUMPTIONS" = yes; + "GENWQE" = module; + "GENWQE_PLATFORM_ERROR_RECOVERY" = freeform "0"; + "MISC_ALCOR_PCI" = module; + "MISC_RTSX_PCI" = module; + "MISC_RTSX_USB" = module; + "HABANA_AI" = module; + "SCSI_MOD" = yes; + "SCSI" = yes; + "SCSI_DMA" = yes; + "BLK_DEV_SD" = yes; + "BLK_DEV_SR" = module; + "CHR_DEV_SG" = module; + "SCSI_ISCSI_ATTRS" = module; + "SCSI_SAS_ATTRS" = yes; + "SCSI_SAS_LIBSAS" = yes; + "SCSI_SAS_ATA" = yes; + "SCSI_SAS_HOST_SMP" = yes; + "SCSI_LOWLEVEL" = yes; + "ISCSI_TCP" = module; + "SCSI_HISI_SAS" = yes; + "SCSI_FDOMAIN" = module; + "SCSI_FDOMAIN_PCI" = module; + "HAVE_PATA_PLATFORM" = yes; + "ATA" = yes; + "SATA_HOST" = yes; + "ATA_VERBOSE_ERROR" = yes; + "ATA_FORCE" = yes; + "SATA_PMP" = yes; + "SATA_AHCI" = yes; + "SATA_MOBILE_LPM_POLICY" = freeform "0"; + "SATA_AHCI_PLATFORM" = yes; + "AHCI_CEVA" = yes; + "AHCI_SUNXI" = module; + "AHCI_XGENE" = yes; + "AHCI_QORIQ" = yes; + "SATA_SIL24" = yes; + "ATA_SFF" = yes; + "ATA_BMDMA" = yes; + "PATA_PLATFORM" = yes; + "PATA_OF_PLATFORM" = yes; + "MD" = yes; + "BLK_DEV_MD" = module; + "MD_LINEAR" = module; + "MD_RAID0" = module; + "MD_RAID1" = module; + "MD_RAID10" = module; + "MD_RAID456" = module; + "MD_MULTIPATH" = module; + "MD_FAULTY" = module; + "MD_CLUSTER" = module; + "BCACHE" = yes; + "BLK_DEV_DM_BUILTIN" = yes; + "BLK_DEV_DM" = module; + "DM_BUFIO" = module; + "DM_BIO_PRISON" = module; + "DM_PERSISTENT_DATA" = module; + "DM_UNSTRIPED" = module; + "DM_CRYPT" = module; + "DM_SNAPSHOT" = module; + "DM_THIN_PROVISIONING" = module; + "DM_CACHE" = module; + "DM_CACHE_SMQ" = module; + "DM_WRITECACHE" = module; + "DM_ERA" = module; + "DM_CLONE" = module; + "DM_MIRROR" = module; + "DM_LOG_USERSPACE" = module; + "DM_RAID" = module; + "DM_ZERO" = module; + "DM_MULTIPATH" = module; + "DM_MULTIPATH_QL" = module; + "DM_MULTIPATH_ST" = module; + "DM_DELAY" = module; + "DM_DUST" = module; + "DM_UEVENT" = yes; + "DM_FLAKEY" = module; + "DM_VERITY" = module; + "DM_VERITY_FEC" = yes; + "DM_SWITCH" = module; + "DM_LOG_WRITES" = module; + "DM_INTEGRITY" = module; + "DM_ZONED" = module; + "TARGET_CORE" = module; + "TCM_IBLOCK" = module; + "TCM_FILEIO" = module; + "TCM_PSCSI" = module; + "TCM_USER2" = module; + "LOOPBACK_TARGET" = module; + "ISCSI_TARGET" = module; + "NETDEVICES" = yes; + "MII" = yes; + "NET_CORE" = yes; + "BONDING" = module; + "DUMMY" = module; + "WIREGUARD" = module; + "EQUALIZER" = module; + "IFB" = module; + "NET_TEAM" = module; + "NET_TEAM_MODE_BROADCAST" = module; + "NET_TEAM_MODE_ROUNDROBIN" = module; + "NET_TEAM_MODE_RANDOM" = module; + "NET_TEAM_MODE_ACTIVEBACKUP" = module; + "NET_TEAM_MODE_LOADBALANCE" = module; + "MACVLAN" = module; + "MACVTAP" = module; + "IPVLAN_L3S" = yes; + "IPVLAN" = module; + "IPVTAP" = module; + "VXLAN" = module; + "GENEVE" = module; + "GTP" = module; + "MACSEC" = module; + "NETCONSOLE" = module; + "NETCONSOLE_DYNAMIC" = yes; + "NETPOLL" = yes; + "NET_POLL_CONTROLLER" = yes; + "TUN" = yes; + "TAP" = module; + "TUN_VNET_CROSS_LE" = yes; + "VETH" = module; + "VIRTIO_NET" = module; + "NLMON" = module; + "NET_VRF" = module; + "ATM_DRIVERS" = yes; + "ATM_DUMMY" = module; + "ATM_TCP" = module; + "ATM_LANAI" = module; + "ATM_ENI" = module; + "ATM_NICSTAR" = module; + "ATM_IDT77252" = module; + "ATM_IDT77252_USE_SUNI" = yes; + "ATM_IA" = module; + "ATM_FORE200E" = module; + "ATM_FORE200E_TX_RETRY" = freeform "16"; + "ATM_FORE200E_DEBUG" = freeform "0"; + "ATM_HE" = module; + "ATM_SOLOS" = module; + "B53" = module; + "B53_SPI_DRIVER" = module; + "B53_MDIO_DRIVER" = module; + "B53_MMAP_DRIVER" = module; + "B53_SRAB_DRIVER" = module; + "B53_SERDES" = module; + "NET_DSA_BCM_SF2" = module; + "NET_DSA_LOOP" = module; + "NET_DSA_LANTIQ_GSWIP" = module; + "NET_DSA_MT7530" = module; + "NET_DSA_MV88E6060" = module; + "NET_DSA_MICROCHIP_KSZ_COMMON" = module; + "NET_DSA_MICROCHIP_KSZ9477" = module; + "NET_DSA_MICROCHIP_KSZ9477_I2C" = module; + "NET_DSA_MICROCHIP_KSZ9477_SPI" = module; + "NET_DSA_MICROCHIP_KSZ8795" = module; + "NET_DSA_MICROCHIP_KSZ8795_SPI" = module; + "NET_DSA_MV88E6XXX" = module; + "NET_DSA_MV88E6XXX_GLOBAL2" = yes; + "NET_DSA_AR9331" = module; + "NET_DSA_SJA1105" = module; + "NET_DSA_QCA8K" = module; + "NET_DSA_REALTEK_SMI" = module; + "NET_DSA_SMSC_LAN9303" = module; + "NET_DSA_SMSC_LAN9303_I2C" = module; + "NET_DSA_SMSC_LAN9303_MDIO" = module; + "NET_DSA_VITESSE_VSC73XX" = module; + "NET_DSA_VITESSE_VSC73XX_SPI" = module; + "NET_DSA_VITESSE_VSC73XX_PLATFORM" = module; + "ETHERNET" = yes; + "MDIO" = module; + "NET_VENDOR_3COM" = yes; + "NET_VENDOR_ADAPTEC" = yes; + "NET_VENDOR_AGERE" = yes; + "NET_VENDOR_ALACRITECH" = yes; + "NET_VENDOR_ALLWINNER" = yes; + "SUN4I_EMAC" = module; + "NET_VENDOR_ALTEON" = yes; + "NET_VENDOR_AMAZON" = yes; + "NET_VENDOR_AMD" = yes; + "AMD_XGBE" = yes; + "NET_VENDOR_AQUANTIA" = yes; + "AQTION" = module; + "NET_VENDOR_ARC" = yes; + "NET_VENDOR_ATHEROS" = yes; + "ATL2" = module; + "ATL1" = module; + "ATL1E" = module; + "ATL1C" = module; + "ALX" = module; + "NET_VENDOR_AURORA" = yes; + "NET_VENDOR_BROADCOM" = yes; + "B44" = module; + "B44_PCI_AUTOSELECT" = yes; + "B44_PCICORE_AUTOSELECT" = yes; + "B44_PCI" = yes; + "BCMGENET" = module; + "BNX2" = module; + "CNIC" = module; + "TIGON3" = module; + "TIGON3_HWMON" = yes; + "BNX2X" = module; + "BNX2X_SRIOV" = yes; + "SYSTEMPORT" = module; + "BNXT" = module; + "BNXT_SRIOV" = yes; + "BNXT_FLOWER_OFFLOAD" = yes; + "BNXT_HWMON" = yes; + "NET_VENDOR_BROCADE" = yes; + "BNA" = module; + "NET_VENDOR_CADENCE" = yes; + "MACB" = yes; + "MACB_USE_HWSTAMP" = yes; + "NET_VENDOR_CAVIUM" = yes; + "THUNDER_NIC_PF" = yes; + "THUNDER_NIC_BGX" = yes; + "THUNDER_NIC_RGX" = yes; + "CAVIUM_PTP" = yes; + "NET_VENDOR_CHELSIO" = yes; + "NET_VENDOR_CISCO" = yes; + "NET_VENDOR_CORTINA" = yes; + "NET_VENDOR_DEC" = yes; + "NET_VENDOR_DLINK" = yes; + "DL2K" = module; + "NET_VENDOR_EMULEX" = yes; + "NET_VENDOR_EZCHIP" = yes; + "NET_VENDOR_GOOGLE" = yes; + "NET_VENDOR_HISILICON" = yes; + "HIX5HD2_GMAC" = yes; + "HNS_MDIO" = yes; + "HNS" = yes; + "HNS_DSAF" = yes; + "HNS_ENET" = yes; + "NET_VENDOR_HUAWEI" = yes; + "NET_VENDOR_I825XX" = yes; + "NET_VENDOR_INTEL" = yes; + "E1000E" = yes; + "IGB" = yes; + "IGB_HWMON" = yes; + "IGBVF" = yes; + "NET_VENDOR_MARVELL" = yes; + "MVMDIO" = yes; + "SKY2" = yes; + "OCTEONTX2_MBOX" = module; + "OCTEONTX2_PF" = module; + "OCTEONTX2_VF" = module; + "NET_VENDOR_MELLANOX" = yes; + "NET_VENDOR_MICREL" = yes; + "NET_VENDOR_MICROCHIP" = yes; + "ENC28J60" = module; + "ENC28J60_WRITEVERIFY" = yes; + "NET_VENDOR_MICROSEMI" = yes; + "MSCC_OCELOT_SWITCH_LIB" = module; + "MSCC_OCELOT_SWITCH" = module; + "NET_VENDOR_MYRI" = yes; + "NET_VENDOR_NATSEMI" = yes; + "NET_VENDOR_NETERION" = yes; + "NET_VENDOR_NETRONOME" = yes; + "NET_VENDOR_NI" = yes; + "NET_VENDOR_8390" = yes; + "NET_VENDOR_NVIDIA" = yes; + "NET_VENDOR_OKI" = yes; + "NET_VENDOR_PACKET_ENGINES" = yes; + "NET_VENDOR_PENSANDO" = yes; + "IONIC" = module; + "NET_VENDOR_QLOGIC" = yes; + "NET_VENDOR_QUALCOMM" = yes; + "QCA7000" = module; + "QCA7000_UART" = module; + "QCOM_EMAC" = module; + "NET_VENDOR_RDC" = yes; + "NET_VENDOR_REALTEK" = yes; + "NET_VENDOR_RENESAS" = yes; + "NET_VENDOR_ROCKER" = yes; + "ROCKER" = module; + "NET_VENDOR_SAMSUNG" = yes; + "NET_VENDOR_SEEQ" = yes; + "NET_VENDOR_SOLARFLARE" = yes; + "NET_VENDOR_SILAN" = yes; + "NET_VENDOR_SIS" = yes; + "NET_VENDOR_SMSC" = yes; + "SMC91X" = yes; + "SMSC911X" = yes; + "NET_VENDOR_SOCIONEXT" = yes; + "NET_VENDOR_STMICRO" = yes; + "STMMAC_ETH" = module; + "STMMAC_PLATFORM" = module; + "DWMAC_GENERIC" = module; + "DWMAC_MESON" = module; + "DWMAC_ROCKCHIP" = module; + "DWMAC_SUNXI" = module; + "DWMAC_SUN8I" = module; + "NET_VENDOR_SUN" = yes; + "NET_VENDOR_SYNOPSYS" = yes; + "NET_VENDOR_TEHUTI" = yes; + "NET_VENDOR_TI" = yes; + "NET_VENDOR_VIA" = yes; + "NET_VENDOR_WIZNET" = yes; + "NET_VENDOR_XILINX" = yes; + "XILINX_AXI_EMAC" = module; + "XILINX_LL_TEMAC" = module; + "MDIO_DEVICE" = yes; + "MDIO_BUS" = yes; + "MDIO_DEVRES" = yes; + "MDIO_BCM_UNIMAC" = module; + "MDIO_BITBANG" = yes; + "MDIO_BUS_MUX" = yes; + "MDIO_BUS_MUX_MESON_G12A" = module; + "MDIO_BUS_MUX_MMIOREG" = yes; + "MDIO_BUS_MUX_MULTIPLEXER" = module; + "MDIO_CAVIUM" = yes; + "MDIO_I2C" = module; + "MDIO_IPQ8064" = module; + "MDIO_MSCC_MIIM" = module; + "MDIO_MVUSB" = module; + "MDIO_SUN4I" = module; + "MDIO_THUNDER" = yes; + "MDIO_XPCS" = module; + "PHYLINK" = yes; + "PHYLIB" = yes; + "SWPHY" = yes; + "LED_TRIGGER_PHY" = yes; + "SFP" = module; + "ADIN_PHY" = module; + "AMD_PHY" = module; + "AQUANTIA_PHY" = module; + "AX88796B_PHY" = module; + "BCM7XXX_PHY" = module; + "BCM87XX_PHY" = module; + "BCM_NET_PHYLIB" = module; + "BROADCOM_PHY" = module; + "BCM84881_PHY" = module; + "CICADA_PHY" = module; + "DAVICOM_PHY" = module; + "DP83TC811_PHY" = module; + "DP83848_PHY" = module; + "DP83869_PHY" = module; + "FIXED_PHY" = yes; + "ICPLUS_PHY" = module; + "LSI_ET1011C_PHY" = module; + "LXT_PHY" = module; + "MARVELL_PHY" = module; + "MARVELL_10G_PHY" = module; + "MESON_GXL_PHY" = module; + "MICREL_PHY" = yes; + "MICROCHIP_PHY" = module; + "MICROCHIP_T1_PHY" = module; + "NATIONAL_PHY" = module; + "AT803X_PHY" = module; + "QSEMI_PHY" = module; + "REALTEK_PHY" = module; + "ROCKCHIP_PHY" = yes; + "VITESSE_PHY" = module; + "PPP" = module; + "PPP_BSDCOMP" = module; + "PPP_DEFLATE" = module; + "PPP_FILTER" = yes; + "PPP_MPPE" = module; + "PPP_MULTILINK" = yes; + "PPPOATM" = module; + "PPPOE" = module; + "PPTP" = module; + "PPPOL2TP" = module; + "PPP_ASYNC" = module; + "PPP_SYNC_TTY" = module; + "SLIP" = module; + "SLHC" = module; + "SLIP_COMPRESSED" = yes; + "SLIP_SMART" = yes; + "SLIP_MODE_SLIP6" = yes; + "USB_NET_DRIVERS" = yes; + "USB_CATC" = module; + "USB_KAWETH" = module; + "USB_PEGASUS" = module; + "USB_RTL8150" = module; + "USB_RTL8152" = module; + "USB_LAN78XX" = module; + "USB_USBNET" = module; + "USB_NET_AX8817X" = module; + "USB_NET_AX88179_178A" = module; + "USB_NET_CDCETHER" = module; + "USB_NET_CDC_EEM" = module; + "USB_NET_CDC_NCM" = module; + "USB_NET_HUAWEI_CDC_NCM" = module; + "USB_NET_CDC_MBIM" = module; + "USB_NET_DM9601" = module; + "USB_NET_SR9700" = module; + "USB_NET_SR9800" = module; + "USB_NET_SMSC75XX" = module; + "USB_NET_SMSC95XX" = module; + "USB_NET_GL620A" = module; + "USB_NET_NET1080" = module; + "USB_NET_PLUSB" = module; + "USB_NET_MCS7830" = module; + "USB_NET_RNDIS_HOST" = module; + "USB_NET_CDC_SUBSET_ENABLE" = module; + "USB_NET_CDC_SUBSET" = module; + "USB_ALI_M5632" = yes; + "USB_AN2720" = yes; + "USB_BELKIN" = yes; + "USB_ARMLINUX" = yes; + "USB_EPSON2888" = yes; + "USB_KC2190" = yes; + "USB_NET_ZAURUS" = module; + "USB_NET_CX82310_ETH" = module; + "USB_NET_KALMIA" = module; + "USB_NET_QMI_WWAN" = module; + "USB_HSO" = module; + "USB_NET_INT51X1" = module; + "USB_CDC_PHONET" = module; + "USB_IPHETH" = module; + "USB_SIERRA_NET" = module; + "USB_VL600" = module; + "USB_NET_CH9200" = module; + "USB_NET_AQC111" = module; + "WLAN" = yes; + "WIRELESS_WDS" = yes; + "ATH_COMMON" = module; + "WLAN_VENDOR_ATH" = yes; + "ATH9K_HW" = module; + "ATH9K_COMMON" = module; + "ATH9K_BTCOEX_SUPPORT" = yes; + "ATH9K" = module; + "ATH9K_PCI" = yes; + "ATH9K_AHB" = yes; + "ATH9K_DYNACK" = yes; + "ATH9K_WOW" = yes; + "ATH9K_RFKILL" = yes; + "ATH9K_PCOEM" = yes; + "ATH9K_PCI_NO_EEPROM" = module; + "ATH9K_HTC" = module; + "CARL9170" = module; + "CARL9170_LEDS" = yes; + "CARL9170_WPC" = yes; + "ATH6KL" = module; + "ATH6KL_SDIO" = module; + "ATH6KL_USB" = module; + "AR5523" = module; + "WIL6210" = module; + "WIL6210_ISR_COR" = yes; + "WIL6210_DEBUGFS" = yes; + "ATH10K" = module; + "ATH10K_CE" = yes; + "ATH10K_PCI" = module; + "ATH10K_AHB" = yes; + "ATH10K_SDIO" = module; + "ATH10K_USB" = module; + "WLAN_VENDOR_ATMEL" = yes; + "ATMEL" = module; + "PCI_ATMEL" = module; + "AT76C50X_USB" = module; + "WLAN_VENDOR_BROADCOM" = yes; + "B43" = module; + "B43_BCMA" = yes; + "B43_SSB" = yes; + "B43_BUSES_BCMA_AND_SSB" = yes; + "B43_PCI_AUTOSELECT" = yes; + "B43_PCICORE_AUTOSELECT" = yes; + "B43_BCMA_PIO" = yes; + "B43_PIO" = yes; + "B43_PHY_G" = yes; + "B43_PHY_N" = yes; + "B43_PHY_LP" = yes; + "B43_PHY_HT" = yes; + "B43_LEDS" = yes; + "B43_HWRNG" = yes; + "B43LEGACY" = module; + "B43LEGACY_PCI_AUTOSELECT" = yes; + "B43LEGACY_PCICORE_AUTOSELECT" = yes; + "B43LEGACY_LEDS" = yes; + "B43LEGACY_HWRNG" = yes; + "B43LEGACY_DEBUG" = yes; + "B43LEGACY_DMA" = yes; + "B43LEGACY_PIO" = yes; + "B43LEGACY_DMA_AND_PIO_MODE" = yes; + "BRCMUTIL" = module; + "BRCMSMAC" = module; + "BRCMFMAC" = module; + "BRCMFMAC_PROTO_BCDC" = yes; + "BRCMFMAC_PROTO_MSGBUF" = yes; + "BRCMFMAC_SDIO" = yes; + "BRCMFMAC_USB" = yes; + "BRCMFMAC_PCIE" = yes; + "BRCM_TRACING" = yes; + "BRCMDBG" = yes; + "WLAN_VENDOR_CISCO" = yes; + "WLAN_VENDOR_INTEL" = yes; + "IPW2100" = module; + "LIBIPW" = module; + "WLAN_VENDOR_INTERSIL" = yes; + "WLAN_VENDOR_MARVELL" = yes; + "LIBERTAS_THINFIRM" = module; + "LIBERTAS_THINFIRM_USB" = module; + "MWL8K" = module; + "WLAN_VENDOR_MEDIATEK" = yes; + "MT7601U" = module; + "MT76_CORE" = module; + "MT76_LEDS" = yes; + "MT76_USB" = module; + "MT76x02_LIB" = module; + "MT76x02_USB" = module; + "MT76x0_COMMON" = module; + "MT76x0U" = module; + "MT76x0E" = module; + "MT76x2_COMMON" = module; + "MT76x2E" = module; + "MT76x2U" = module; + "MT7603E" = module; + "MT7615_COMMON" = module; + "MT7615E" = module; + "WLAN_VENDOR_MICROCHIP" = yes; + "WLAN_VENDOR_RALINK" = yes; + "RT2X00" = module; + "RT2400PCI" = module; + "RT2500PCI" = module; + "RT61PCI" = module; + "RT2800PCI" = module; + "RT2800PCI_RT33XX" = yes; + "RT2800PCI_RT35XX" = yes; + "RT2800PCI_RT53XX" = yes; + "RT2800PCI_RT3290" = yes; + "RT2500USB" = module; + "RT73USB" = module; + "RT2800USB" = module; + "RT2800USB_RT33XX" = yes; + "RT2800USB_RT35XX" = yes; + "RT2800USB_RT3573" = yes; + "RT2800USB_RT53XX" = yes; + "RT2800USB_RT55XX" = yes; + "RT2800_LIB" = module; + "RT2800_LIB_MMIO" = module; + "RT2X00_LIB_MMIO" = module; + "RT2X00_LIB_PCI" = module; + "RT2X00_LIB_USB" = module; + "RT2X00_LIB" = module; + "RT2X00_LIB_FIRMWARE" = yes; + "RT2X00_LIB_CRYPTO" = yes; + "RT2X00_LIB_LEDS" = yes; + "WLAN_VENDOR_REALTEK" = yes; + "RTL8180" = module; + "RTL8187" = module; + "RTL8187_LEDS" = yes; + "RTL_CARDS" = module; + "RTL8192CE" = module; + "RTL8192SE" = module; + "RTL8192DE" = module; + "RTL8723AE" = module; + "RTL8723BE" = module; + "RTL8188EE" = module; + "RTL8192EE" = module; + "RTL8821AE" = module; + "RTL8192CU" = module; + "RTLWIFI" = module; + "RTLWIFI_PCI" = module; + "RTLWIFI_USB" = module; + "RTL8192C_COMMON" = module; + "RTL8723_COMMON" = module; + "RTLBTCOEXIST" = module; + "RTL8XXXU" = module; + "RTW88" = module; + "WLAN_VENDOR_RSI" = yes; + "RSI_91X" = module; + "RSI_SDIO" = module; + "RSI_USB" = module; + "RSI_COEX" = yes; + "WLAN_VENDOR_ST" = yes; + "CW1200" = module; + "CW1200_WLAN_SDIO" = module; + "CW1200_WLAN_SPI" = module; + "WLAN_VENDOR_TI" = yes; + "WL1251" = module; + "WL1251_SPI" = module; + "WL1251_SDIO" = module; + "WL12XX" = module; + "WL18XX" = module; + "WLCORE" = module; + "WLCORE_SPI" = module; + "WLCORE_SDIO" = module; + "WILINK_PLATFORM_DATA" = yes; + "RTL8723DU" = module; + "RTL8723DS" = module; + "RTL8822BU" = module; + "RTL8188EU" = module; + "RTL8821CU" = module; + "88XXAU" = module; + "RTL8189FS" = module; + "RTL8189ES" = module; + "WLAN_VENDOR_ZYDAS" = yes; + "USB_ZD1201" = module; + "ZD1211RW" = module; + "WLAN_VENDOR_QUANTENNA" = yes; + "QTNFMAC" = module; + "QTNFMAC_PCIE" = module; + "MAC80211_HWSIM" = module; + "USB_NET_RNDIS_WLAN" = module; + "VIRT_WIFI" = module; + "WIMAX_I2400M" = module; + "WIMAX_I2400M_USB" = module; + "WIMAX_I2400M_DEBUG_LEVEL" = freeform "8"; + "IEEE802154_DRIVERS" = module; + "IEEE802154_FAKELB" = module; + "IEEE802154_AT86RF230" = module; + "IEEE802154_MRF24J40" = module; + "IEEE802154_CC2520" = module; + "IEEE802154_ATUSB" = module; + "IEEE802154_ADF7242" = module; + "IEEE802154_CA8210" = module; + "IEEE802154_MCR20A" = module; + "IEEE802154_HWSIM" = module; + "XEN_NETDEV_FRONTEND" = module; + "XEN_NETDEV_BACKEND" = module; + "VMXNET3" = module; + "NETDEVSIM" = module; + "NET_FAILOVER" = module; + "INPUT" = yes; + "INPUT_LEDS" = yes; + "INPUT_FF_MEMLESS" = module; + "INPUT_POLLDEV" = module; + "INPUT_MATRIXKMAP" = yes; + "INPUT_MOUSEDEV" = yes; + "INPUT_MOUSEDEV_PSAUX" = yes; + "INPUT_MOUSEDEV_SCREEN_X" = freeform "1024"; + "INPUT_MOUSEDEV_SCREEN_Y" = freeform "768"; + "INPUT_EVDEV" = yes; + "INPUT_KEYBOARD" = yes; + "KEYBOARD_ADC" = module; + "KEYBOARD_ADP5520" = module; + "KEYBOARD_ATKBD" = yes; + "KEYBOARD_QT1050" = module; + "KEYBOARD_GPIO" = yes; + "KEYBOARD_SUN4I_LRADC" = module; + "KEYBOARD_IQS62X" = module; + "KEYBOARD_CROS_EC" = yes; + "INPUT_MOUSE" = yes; + "MOUSE_PS2" = yes; + "MOUSE_PS2_ALPS" = yes; + "MOUSE_PS2_BYD" = yes; + "MOUSE_PS2_LOGIPS2PP" = yes; + "MOUSE_PS2_SYNAPTICS" = yes; + "MOUSE_PS2_SYNAPTICS_SMBUS" = yes; + "MOUSE_PS2_CYPRESS" = yes; + "MOUSE_PS2_TRACKPOINT" = yes; + "MOUSE_PS2_FOCALTECH" = yes; + "MOUSE_PS2_SMBUS" = yes; + "INPUT_TOUCHSCREEN" = no; + "INPUT_MISC" = yes; + "INPUT_MAX77650_ONKEY" = module; + "INPUT_GPIO_BEEPER" = module; + "INPUT_GPIO_DECODER" = module; + "INPUT_GPIO_VIBRA" = module; + "INPUT_AXP20X_PEK" = module; + "INPUT_UINPUT" = module; + "INPUT_RK805_PWRKEY" = yes; + "INPUT_XEN_KBDDEV_FRONTEND" = yes; + "INPUT_RAVE_SP_PWRBUTTON" = module; + "RMI4_CORE" = module; + "RMI4_I2C" = module; + "RMI4_SPI" = module; + "RMI4_SMB" = module; + "RMI4_F03" = yes; + "RMI4_F03_SERIO" = module; + "RMI4_2D_SENSOR" = yes; + "RMI4_F11" = yes; + "RMI4_F12" = yes; + "RMI4_F30" = yes; + "SERIO" = yes; + "SERIO_SERPORT" = module; + "SERIO_AMBAKMI" = yes; + "SERIO_LIBPS2" = yes; + "SERIO_SUN4I_PS2" = module; + "TTY" = yes; + "VT" = yes; + "CONSOLE_TRANSLATIONS" = yes; + "VT_CONSOLE" = yes; + "VT_CONSOLE_SLEEP" = yes; + "HW_CONSOLE" = yes; + "VT_HW_CONSOLE_BINDING" = yes; + "UNIX98_PTYS" = yes; + "LEGACY_PTYS" = yes; + "LEGACY_PTY_COUNT" = freeform "0"; + "LDISC_AUTOLOAD" = yes; + "SERIAL_EARLYCON" = yes; + "SERIAL_8250" = yes; + "SERIAL_8250_16550A_VARIANTS" = yes; + "SERIAL_8250_FINTEK" = yes; + "SERIAL_8250_CONSOLE" = yes; + "SERIAL_8250_DMA" = yes; + "SERIAL_8250_PCI" = module; + "SERIAL_8250_EXAR" = module; + "SERIAL_8250_NR_UARTS" = freeform "8"; + "SERIAL_8250_RUNTIME_UARTS" = freeform "8"; + "SERIAL_8250_DWLIB" = yes; + "SERIAL_8250_FSL" = yes; + "SERIAL_8250_DW" = yes; + "SERIAL_OF_PLATFORM" = yes; + "SERIAL_AMBA_PL010" = yes; + "SERIAL_AMBA_PL010_CONSOLE" = yes; + "SERIAL_AMBA_PL011" = yes; + "SERIAL_AMBA_PL011_CONSOLE" = yes; + "SERIAL_EARLYCON_ARM_SEMIHOST" = yes; + "SERIAL_MESON" = yes; + "SERIAL_MESON_CONSOLE" = yes; + "SERIAL_CORE" = yes; + "SERIAL_CORE_CONSOLE" = yes; + "SERIAL_JSM" = module; + "SERIAL_SIFIVE" = module; + "SERIAL_SCCNXP" = yes; + "SERIAL_SCCNXP_CONSOLE" = yes; + "SERIAL_SC16IS7XX_CORE" = module; + "SERIAL_SC16IS7XX" = module; + "SERIAL_SC16IS7XX_I2C" = yes; + "SERIAL_SC16IS7XX_SPI" = yes; + "SERIAL_ALTERA_JTAGUART" = module; + "SERIAL_ALTERA_UART" = module; + "SERIAL_ALTERA_UART_MAXPORTS" = freeform "4"; + "SERIAL_ALTERA_UART_BAUDRATE" = freeform "115200"; + "SERIAL_XILINX_PS_UART" = yes; + "SERIAL_XILINX_PS_UART_CONSOLE" = yes; + "SERIAL_ARC" = module; + "SERIAL_ARC_NR_PORTS" = freeform "1"; + "SERIAL_RP2" = module; + "SERIAL_RP2_NR_UARTS" = freeform "32"; + "SERIAL_FSL_LPUART" = module; + "SERIAL_FSL_LINFLEXUART" = module; + "SERIAL_CONEXANT_DIGICOLOR" = module; + "SERIAL_SPRD" = module; + "SERIAL_MCTRL_GPIO" = yes; + "SERIAL_NONSTANDARD" = yes; + "ROCKETPORT" = module; + "CYCLADES" = module; + "MOXA_INTELLIO" = module; + "MOXA_SMARTIO" = module; + "SYNCLINKMP" = module; + "SYNCLINK_GT" = module; + "ISI" = module; + "N_HDLC" = module; + "N_GSM" = module; + "NOZOMI" = module; + "NULL_TTY" = module; + "TRACE_ROUTER" = module; + "TRACE_SINK" = module; + "HVC_DRIVER" = yes; + "HVC_IRQ" = yes; + "HVC_XEN" = yes; + "HVC_XEN_FRONTEND" = yes; + "SERIAL_DEV_BUS" = yes; + "SERIAL_DEV_CTRL_TTYPORT" = yes; + "TTY_PRINTK" = module; + "TTY_PRINTK_LEVEL" = freeform "6"; + "VIRTIO_CONSOLE" = yes; + "HW_RANDOM" = module; + "HW_RANDOM_MESON" = module; + "HW_RANDOM_CAVIUM" = module; + "DEVMEM" = yes; + "DEVPORT" = yes; + "I2C" = yes; + "I2C_BOARDINFO" = yes; + "I2C_COMPAT" = yes; + "I2C_CHARDEV" = yes; + "I2C_MUX" = module; + "I2C_ARB_GPIO_CHALLENGE" = module; + "I2C_MUX_GPIO" = module; + "I2C_MUX_GPMUX" = module; + "I2C_MUX_LTC4306" = module; + "I2C_MUX_PCA9541" = module; + "I2C_MUX_PCA954x" = module; + "I2C_MUX_PINCTRL" = module; + "I2C_MUX_REG" = module; + "I2C_DEMUX_PINCTRL" = module; + "I2C_MUX_MLXCPLD" = module; + "I2C_HELPER_AUTO" = yes; + "I2C_SMBUS" = module; + "I2C_ALGOBIT" = yes; + "I2C_CADENCE" = module; + "I2C_CBUS_GPIO" = module; + "I2C_DESIGNWARE_CORE" = yes; + "I2C_DESIGNWARE_PLATFORM" = yes; + "I2C_MESON" = module; + "I2C_MV64XXX" = module; + "I2C_RK3X" = yes; + "I2C_DIOLAN_U2C" = module; + "I2C_ROBOTFUZZ_OSIF" = module; + "I2C_TAOS_EVM" = module; + "I2C_TINY_USB" = module; + "I2C_CROS_EC_TUNNEL" = yes; + "I2C_STUB" = module; + "I2C_SLAVE" = yes; + "I2C_SLAVE_EEPROM" = module; + "I3C" = module; + "CDNS_I3C_MASTER" = module; + "DW_I3C_MASTER" = module; + "SPI" = yes; + "SPI_MASTER" = yes; + "SPI_MEM" = yes; + "SPI_ALTERA" = module; + "SPI_AXI_SPI_ENGINE" = module; + "SPI_BITBANG" = module; + "SPI_CADENCE" = module; + "SPI_DESIGNWARE" = module; + "SPI_DW_PCI" = module; + "SPI_DW_MMIO" = module; + "SPI_NXP_FLEXSPI" = module; + "SPI_GPIO" = module; + "SPI_FSL_LIB" = module; + "SPI_FSL_SPI" = module; + "SPI_MESON_SPICC" = module; + "SPI_MESON_SPIFC" = module; + "SPI_OC_TINY" = module; + "SPI_PL022" = yes; + "SPI_ROCKCHIP" = yes; + "SPI_SUN4I" = module; + "SPI_SUN6I" = module; + "SPI_MXIC" = module; + "SPI_MUX" = module; + "SPI_SPIDEV" = module; + "SPI_LOOPBACK_TEST" = module; + "SPI_TLE62X0" = module; + "SPI_SLAVE" = yes; + "SPI_SLAVE_TIME" = module; + "SPI_SLAVE_SYSTEM_CONTROL" = module; + "SPI_DYNAMIC" = yes; + "SPMI" = yes; + "PPS" = yes; + "PPS_CLIENT_LDISC" = module; + "PPS_CLIENT_GPIO" = module; + "PTP_1588_CLOCK" = yes; + "DP83640_PHY" = module; + "PTP_1588_CLOCK_INES" = module; + "PTP_1588_CLOCK_IDT82P33" = module; + "PTP_1588_CLOCK_IDTCM" = module; + "PINCTRL" = yes; + "GENERIC_PINCTRL_GROUPS" = yes; + "PINMUX" = yes; + "GENERIC_PINMUX_FUNCTIONS" = yes; + "PINCONF" = yes; + "GENERIC_PINCONF" = yes; + "PINCTRL_AS3722" = module; + "PINCTRL_AXP209" = module; + "PINCTRL_ROCKCHIP" = yes; + "PINCTRL_SINGLE" = yes; + "PINCTRL_SX150X" = yes; + "PINCTRL_STMFX" = module; + "PINCTRL_MAX77620" = yes; + "PINCTRL_RK805" = yes; + "PINCTRL_SUNXI" = yes; + "PINCTRL_SUN5I" = yes; + "PINCTRL_SUN6I_A31" = yes; + "PINCTRL_SUN6I_A31_R" = yes; + "PINCTRL_SUN8I_A23" = yes; + "PINCTRL_SUN8I_A33" = yes; + "PINCTRL_SUN8I_A83T" = yes; + "PINCTRL_SUN8I_A83T_R" = yes; + "PINCTRL_SUN8I_A23_R" = yes; + "PINCTRL_SUN8I_H3" = yes; + "PINCTRL_SUN8I_H3_R" = yes; + "PINCTRL_SUN8I_V3S" = yes; + "PINCTRL_SUN9I_A80" = yes; + "PINCTRL_SUN9I_A80_R" = yes; + "PINCTRL_SUN50I_A64" = yes; + "PINCTRL_SUN50I_A64_R" = yes; + "PINCTRL_SUN50I_H5" = yes; + "PINCTRL_SUN50I_H6" = yes; + "PINCTRL_SUN50I_H6_R" = yes; + "PINCTRL_MESON" = yes; + "PINCTRL_MESON_GXBB" = yes; + "PINCTRL_MESON_GXL" = yes; + "PINCTRL_MESON8_PMX" = yes; + "PINCTRL_MESON_AXG" = yes; + "PINCTRL_MESON_AXG_PMX" = yes; + "PINCTRL_MESON_G12A" = yes; + "PINCTRL_MESON_A1" = yes; + "GPIOLIB" = yes; + "GPIOLIB_FASTPATH_LIMIT" = freeform "512"; + "OF_GPIO" = yes; + "GPIOLIB_IRQCHIP" = yes; + "GPIO_SYSFS" = yes; + "GPIO_GENERIC" = yes; + "GPIO_MAX730X" = module; + "GPIO_74XX_MMIO" = module; + "GPIO_ALTERA" = module; + "GPIO_CADENCE" = module; + "GPIO_DWAPB" = module; + "GPIO_EXAR" = module; + "GPIO_GENERIC_PLATFORM" = yes; + "GPIO_GRGPIO" = module; + "GPIO_HLWD" = module; + "GPIO_LOGICVC" = module; + "GPIO_MB86S7X" = module; + "GPIO_PL061" = yes; + "GPIO_SAMA5D2_PIOBU" = module; + "GPIO_SYSCON" = module; + "GPIO_XILINX" = yes; + "GPIO_AMD_FCH" = module; + "GPIO_ADP5588" = module; + "GPIO_ADNP" = module; + "GPIO_GW_PLD" = module; + "GPIO_MAX7300" = module; + "GPIO_MAX732X" = module; + "GPIO_PCA953X" = yes; + "GPIO_PCA953X_IRQ" = yes; + "GPIO_PCF857X" = module; + "GPIO_TPIC2810" = module; + "GPIO_ADP5520" = module; + "GPIO_BD70528" = module; + "GPIO_BD71828" = module; + "GPIO_MAX77620" = yes; + "GPIO_MAX77650" = module; + "GPIO_TQMX86" = module; + "GPIO_UCB1400" = module; + "GPIO_BT8XX" = module; + "GPIO_PCI_IDIO_16" = module; + "GPIO_PCIE_IDIO_24" = module; + "GPIO_RDC321X" = module; + "GPIO_74X164" = module; + "GPIO_MAX3191X" = module; + "GPIO_MAX7301" = module; + "GPIO_MC33880" = module; + "GPIO_PISOSR" = module; + "GPIO_XRA1403" = module; + "GPIO_MOCKUP" = module; + "W1" = module; + "W1_CON" = yes; + "W1_MASTER_MATROX" = module; + "W1_MASTER_DS2490" = module; + "W1_MASTER_DS2482" = module; + "W1_MASTER_DS1WM" = module; + "W1_MASTER_GPIO" = module; + "W1_MASTER_SGI" = module; + "W1_SLAVE_THERM" = module; + "W1_SLAVE_SMEM" = module; + "W1_SLAVE_DS2405" = module; + "W1_SLAVE_DS2408" = module; + "W1_SLAVE_DS2408_READBACK" = yes; + "W1_SLAVE_DS2413" = module; + "W1_SLAVE_DS2406" = module; + "W1_SLAVE_DS2423" = module; + "W1_SLAVE_DS2805" = module; + "W1_SLAVE_DS2430" = module; + "W1_SLAVE_DS2431" = module; + "W1_SLAVE_DS2433" = module; + "W1_SLAVE_DS2438" = module; + "W1_SLAVE_DS250X" = module; + "W1_SLAVE_DS2780" = module; + "W1_SLAVE_DS2781" = module; + "W1_SLAVE_DS28E04" = module; + "W1_SLAVE_DS28E17" = module; + "POWER_AVS" = yes; + "QCOM_CPR" = module; + "ROCKCHIP_IODOMAIN" = yes; + "POWER_RESET" = yes; + "POWER_RESET_BRCMSTB" = yes; + "POWER_RESET_VEXPRESS" = yes; + "POWER_RESET_XGENE" = yes; + "POWER_RESET_SYSCON" = yes; + "POWER_SUPPLY" = yes; + "POWER_SUPPLY_HWMON" = yes; + "GENERIC_ADC_BATTERY" = module; + "CHARGER_ADP5061" = module; + "BATTERY_CW2015" = module; + "BATTERY_DS2760" = module; + "BATTERY_DS2780" = module; + "BATTERY_DS2781" = module; + "BATTERY_DS2782" = module; + "BATTERY_LEGO_EV3" = module; + "BATTERY_SBS" = module; + "CHARGER_SBS" = module; + "MANAGER_SBS" = module; + "BATTERY_BQ27XXX" = module; + "BATTERY_BQ27XXX_I2C" = module; + "BATTERY_BQ27XXX_HDQ" = module; + "CHARGER_AXP20X" = module; + "BATTERY_AXP20X" = module; + "AXP20X_POWER" = module; + "AXP288_FUEL_GAUGE" = module; + "BATTERY_MAX17040" = module; + "BATTERY_MAX17042" = module; + "BATTERY_MAX1721X" = module; + "CHARGER_ISP1704" = module; + "CHARGER_GPIO" = module; + "CHARGER_LT3651" = module; + "CHARGER_DETECTOR_MAX14656" = module; + "CHARGER_MAX77650" = module; + "BATTERY_RT5033" = module; + "CHARGER_UCS1002" = module; + "CHARGER_BD70528" = module; + "HWMON" = yes; + "HWMON_VID" = module; + "SENSORS_AD7314" = module; + "SENSORS_AD7414" = module; + "SENSORS_AD7418" = module; + "SENSORS_ADM1021" = module; + "SENSORS_ADM1025" = module; + "SENSORS_ADM1026" = module; + "SENSORS_ADM1029" = module; + "SENSORS_ADM1031" = module; + "SENSORS_ADM1177" = module; + "SENSORS_ADM9240" = module; + "SENSORS_ADT7X10" = module; + "SENSORS_ADT7310" = module; + "SENSORS_ADT7410" = module; + "SENSORS_ADT7411" = module; + "SENSORS_ADT7462" = module; + "SENSORS_ADT7470" = module; + "SENSORS_ADT7475" = module; + "SENSORS_AS370" = module; + "SENSORS_ASC7621" = module; + "SENSORS_AXI_FAN_CONTROL" = module; + "SENSORS_ARM_SCPI" = module; + "SENSORS_ASPEED" = module; + "SENSORS_ATXP1" = module; + "SENSORS_DRIVETEMP" = module; + "SENSORS_DS620" = module; + "SENSORS_DS1621" = module; + "SENSORS_I5K_AMB" = module; + "SENSORS_F71805F" = module; + "SENSORS_F71882FG" = module; + "SENSORS_F75375S" = module; + "SENSORS_FTSTEUTATES" = module; + "SENSORS_GL518SM" = module; + "SENSORS_GL520SM" = module; + "SENSORS_G760A" = module; + "SENSORS_G762" = module; + "SENSORS_GPIO_FAN" = module; + "SENSORS_HIH6130" = module; + "SENSORS_IIO_HWMON" = module; + "SENSORS_IT87" = module; + "SENSORS_JC42" = module; + "SENSORS_POWR1220" = module; + "SENSORS_LINEAGE" = module; + "SENSORS_LTC2945" = module; + "SENSORS_LTC2947" = module; + "SENSORS_LTC2947_I2C" = module; + "SENSORS_LTC2947_SPI" = module; + "SENSORS_LTC2990" = module; + "SENSORS_LTC4151" = module; + "SENSORS_LTC4215" = module; + "SENSORS_LTC4222" = module; + "SENSORS_LTC4245" = module; + "SENSORS_LTC4260" = module; + "SENSORS_LTC4261" = module; + "SENSORS_MAX1111" = module; + "SENSORS_MAX16065" = module; + "SENSORS_MAX1619" = module; + "SENSORS_MAX1668" = module; + "SENSORS_MAX197" = module; + "SENSORS_MAX31722" = module; + "SENSORS_MAX31730" = module; + "SENSORS_MAX6621" = module; + "SENSORS_MAX6639" = module; + "SENSORS_MAX6642" = module; + "SENSORS_MAX6650" = module; + "SENSORS_MAX6697" = module; + "SENSORS_MAX31790" = module; + "SENSORS_MCP3021" = module; + "SENSORS_TC654" = module; + "SENSORS_ADCXX" = module; + "SENSORS_LM63" = module; + "SENSORS_LM70" = module; + "SENSORS_LM73" = module; + "SENSORS_LM75" = module; + "SENSORS_LM77" = module; + "SENSORS_LM78" = module; + "SENSORS_LM80" = module; + "SENSORS_LM83" = module; + "SENSORS_LM85" = module; + "SENSORS_LM87" = module; + "SENSORS_LM90" = module; + "SENSORS_LM92" = module; + "SENSORS_LM93" = module; + "SENSORS_LM95234" = module; + "SENSORS_LM95241" = module; + "SENSORS_LM95245" = module; + "SENSORS_PC87360" = module; + "SENSORS_PC87427" = module; + "SENSORS_NTC_THERMISTOR" = module; + "SENSORS_NCT6683" = module; + "SENSORS_NCT6775" = module; + "SENSORS_NCT7802" = module; + "SENSORS_NCT7904" = module; + "SENSORS_NPCM7XX" = module; + "SENSORS_OCC_P8_I2C" = module; + "SENSORS_OCC" = module; + "SENSORS_PCF8591" = module; + "PMBUS" = module; + "SENSORS_PMBUS" = module; + "SENSORS_ADM1275" = module; + "SENSORS_BEL_PFE" = module; + "SENSORS_IBM_CFFPS" = module; + "SENSORS_INSPUR_IPSPS" = module; + "SENSORS_IR35221" = module; + "SENSORS_IR38064" = module; + "SENSORS_IRPS5401" = module; + "SENSORS_ISL68137" = module; + "SENSORS_LM25066" = module; + "SENSORS_LTC2978" = module; + "SENSORS_LTC2978_REGULATOR" = yes; + "SENSORS_LTC3815" = module; + "SENSORS_MAX16064" = module; + "SENSORS_MAX20730" = module; + "SENSORS_MAX20751" = module; + "SENSORS_MAX31785" = module; + "SENSORS_MAX34440" = module; + "SENSORS_MAX8688" = module; + "SENSORS_PXE1610" = module; + "SENSORS_TPS40422" = module; + "SENSORS_TPS53679" = module; + "SENSORS_UCD9000" = module; + "SENSORS_UCD9200" = module; + "SENSORS_XDPE122" = module; + "SENSORS_ZL6100" = module; + "SENSORS_PWM_FAN" = module; + "SENSORS_SHT15" = module; + "SENSORS_SHT21" = module; + "SENSORS_SHT3x" = module; + "SENSORS_SHTC1" = module; + "SENSORS_SIS5595" = module; + "SENSORS_DME1737" = module; + "SENSORS_EMC1403" = module; + "SENSORS_EMC2103" = module; + "SENSORS_EMC6W201" = module; + "SENSORS_SMSC47M1" = module; + "SENSORS_SMSC47M192" = module; + "SENSORS_SMSC47B397" = module; + "SENSORS_SCH56XX_COMMON" = module; + "SENSORS_SCH5627" = module; + "SENSORS_SCH5636" = module; + "SENSORS_STTS751" = module; + "SENSORS_SMM665" = module; + "SENSORS_ADC128D818" = module; + "SENSORS_ADS7828" = module; + "SENSORS_ADS7871" = module; + "SENSORS_AMC6821" = module; + "SENSORS_INA209" = module; + "SENSORS_INA2XX" = module; + "SENSORS_INA3221" = module; + "SENSORS_TC74" = module; + "SENSORS_THMC50" = module; + "SENSORS_TMP102" = module; + "SENSORS_TMP103" = module; + "SENSORS_TMP108" = module; + "SENSORS_TMP401" = module; + "SENSORS_TMP421" = module; + "SENSORS_TMP513" = module; + "SENSORS_VEXPRESS" = module; + "SENSORS_VIA686A" = module; + "SENSORS_VT1211" = module; + "SENSORS_VT8231" = module; + "SENSORS_W83773G" = module; + "SENSORS_W83781D" = module; + "SENSORS_W83791D" = module; + "SENSORS_W83792D" = module; + "SENSORS_W83793" = module; + "SENSORS_W83795" = module; + "SENSORS_W83L785TS" = module; + "SENSORS_W83L786NG" = module; + "SENSORS_W83627HF" = module; + "SENSORS_W83627EHF" = module; + "THERMAL" = yes; + "THERMAL_STATISTICS" = yes; + "THERMAL_EMERGENCY_POWEROFF_DELAY_MS" = freeform "0"; + "THERMAL_HWMON" = yes; + "THERMAL_OF" = yes; + "THERMAL_WRITABLE_TRIPS" = yes; + "THERMAL_DEFAULT_GOV_STEP_WISE" = yes; + "THERMAL_GOV_FAIR_SHARE" = yes; + "THERMAL_GOV_STEP_WISE" = yes; + "THERMAL_GOV_BANG_BANG" = yes; + "THERMAL_GOV_USER_SPACE" = yes; + "CPU_THERMAL" = yes; + "CPU_FREQ_THERMAL" = yes; + "DEVFREQ_THERMAL" = yes; + "THERMAL_EMULATION" = yes; + "THERMAL_MMIO" = module; + "SUN8I_THERMAL" = module; + "ROCKCHIP_THERMAL" = yes; + "AMLOGIC_THERMAL" = yes; + "WATCHDOG" = yes; + "WATCHDOG_CORE" = yes; + "WATCHDOG_HANDLE_BOOT_ENABLED" = yes; + "WATCHDOG_OPEN_TIMEOUT" = freeform "0"; + "WATCHDOG_SYSFS" = yes; + "SOFT_WATCHDOG" = module; + "BD70528_WATCHDOG" = module; + "RAVE_SP_WATCHDOG" = module; + "DW_WATCHDOG" = yes; + "RN5T618_WATCHDOG" = module; + "SUNXI_WATCHDOG" = module; + "MESON_GXBB_WATCHDOG" = module; + "MESON_WATCHDOG" = module; + "PCIPCWATCHDOG" = module; + "WDTPCI" = module; + "USBPCWATCHDOG" = module; + "SSB_POSSIBLE" = yes; + "SSB" = module; + "SSB_SPROM" = yes; + "SSB_BLOCKIO" = yes; + "SSB_PCIHOST_POSSIBLE" = yes; + "SSB_PCIHOST" = yes; + "SSB_B43_PCI_BRIDGE" = yes; + "SSB_SDIOHOST_POSSIBLE" = yes; + "SSB_DRIVER_PCICORE_POSSIBLE" = yes; + "SSB_DRIVER_PCICORE" = yes; + "BCMA_POSSIBLE" = yes; + "BCMA" = module; + "BCMA_BLOCKIO" = yes; + "BCMA_HOST_PCI_POSSIBLE" = yes; + "BCMA_HOST_PCI" = yes; + "BCMA_DRIVER_PCI" = yes; + "MFD_CORE" = yes; + "MFD_SUN4I_GPADC" = module; + "MFD_AS3711" = yes; + "MFD_AS3722" = module; + "PMIC_ADP5520" = yes; + "MFD_AAT2870_CORE" = yes; + "MFD_AC100" = module; + "MFD_AXP20X" = module; + "MFD_AXP20X_RSB" = module; + "MFD_CROS_EC_DEV" = yes; + "MFD_IQS62X" = module; + "MFD_MAX77620" = yes; + "MFD_MAX77650" = module; + "UCB1400_CORE" = module; + "MFD_RDC321X" = module; + "MFD_RT5033" = module; + "MFD_RC5T583" = yes; + "MFD_RK808" = yes; + "MFD_RN5T618" = module; + "MFD_SEC_CORE" = yes; + "MFD_SUN6I_PRCM" = yes; + "MFD_SYSCON" = yes; + "MFD_WL1273_CORE" = module; + "MFD_LM3533" = module; + "MFD_TQMX86" = module; + "MFD_VX855" = module; + "MFD_ROHM_BD70528" = module; + "MFD_ROHM_BD71828" = module; + "MFD_STMFX" = module; + "MFD_VEXPRESS_SYSREG" = yes; + "RAVE_SP_CORE" = module; + "REGULATOR" = yes; + "REGULATOR_FIXED_VOLTAGE" = yes; + "REGULATOR_88PG86X" = module; + "REGULATOR_AAT2870" = module; + "REGULATOR_AS3711" = module; + "REGULATOR_AS3722" = module; + "REGULATOR_AXP20X" = module; + "REGULATOR_BD70528" = module; + "REGULATOR_BD71828" = module; + "REGULATOR_FAN53555" = yes; + "REGULATOR_GPIO" = yes; + "REGULATOR_MAX77620" = yes; + "REGULATOR_MAX77650" = module; + "REGULATOR_MCP16502" = module; + "REGULATOR_MP5416" = module; + "REGULATOR_MP8859" = module; + "REGULATOR_MP886X" = module; + "REGULATOR_MPQ7920" = module; + "REGULATOR_PWM" = yes; + "REGULATOR_QCOM_SPMI" = yes; + "REGULATOR_RC5T583" = module; + "REGULATOR_RK808" = yes; + "REGULATOR_RN5T618" = module; + "REGULATOR_ROHM" = module; + "REGULATOR_RT5033" = module; + "REGULATOR_S2MPS11" = yes; + "REGULATOR_SLG51000" = module; + "REGULATOR_SY8824X" = module; + "RC_CORE" = module; + "RC_MAP" = module; + "LIRC" = yes; + "RC_DECODERS" = yes; + "IR_NEC_DECODER" = module; + "IR_RC5_DECODER" = module; + "IR_RC6_DECODER" = module; + "IR_JVC_DECODER" = module; + "IR_SONY_DECODER" = module; + "IR_SANYO_DECODER" = module; + "IR_SHARP_DECODER" = module; + "IR_MCE_KBD_DECODER" = module; + "IR_XMP_DECODER" = module; + "IR_IMON_DECODER" = module; + "IR_RCMM_DECODER" = module; + "RC_DEVICES" = yes; + "RC_ATI_REMOTE" = module; + "IR_HIX5HD2" = module; + "IR_IMON" = module; + "IR_IMON_RAW" = module; + "IR_MCEUSB" = module; + "IR_MESON" = module; + "IR_REDRAT3" = module; + "IR_SPI" = module; + "IR_STREAMZAP" = module; + "IR_IGORPLUGUSB" = module; + "IR_IGUANA" = module; + "IR_TTUSBIR" = module; + "RC_LOOPBACK" = module; + "IR_GPIO_CIR" = module; + "IR_GPIO_TX" = module; + "IR_PWM_TX" = module; + "IR_SUNXI" = module; + "IR_SERIAL" = module; + "IR_SERIAL_TRANSMITTER" = yes; + "IR_SIR" = module; + "RC_XBOX_DVD" = module; + "CEC_CORE" = module; + "CEC_NOTIFIER" = yes; + "CEC_PIN" = yes; + "MEDIA_CEC_RC" = yes; + "CEC_PIN_ERROR_INJ" = yes; + "MEDIA_CEC_SUPPORT" = yes; + "USB_PULSE8_CEC" = module; + "USB_RAINSHADOW_CEC" = module; + "MEDIA_SUPPORT" = module; + "MEDIA_SUBDRV_AUTOSELECT" = yes; + "MEDIA_CAMERA_SUPPORT" = yes; + "MEDIA_ANALOG_TV_SUPPORT" = yes; + "MEDIA_DIGITAL_TV_SUPPORT" = yes; + "MEDIA_RADIO_SUPPORT" = yes; + "MEDIA_SDR_SUPPORT" = yes; + "MEDIA_PLATFORM_SUPPORT" = yes; + "MEDIA_TEST_SUPPORT" = yes; + "VIDEO_DEV" = module; + "MEDIA_CONTROLLER" = yes; + "DVB_CORE" = module; + "VIDEO_V4L2" = module; + "VIDEO_V4L2_I2C" = yes; + "VIDEO_V4L2_SUBDEV_API" = yes; + "VIDEO_FIXED_MINOR_RANGES" = yes; + "VIDEO_TUNER" = module; + "V4L2_H264" = module; + "V4L2_MEM2MEM_DEV" = module; + "V4L2_FWNODE" = module; + "VIDEOBUF_GEN" = module; + "VIDEOBUF_VMALLOC" = module; + "MEDIA_CONTROLLER_DVB" = yes; + "MEDIA_CONTROLLER_REQUEST_API" = yes; + "DVB_MMAP" = yes; + "DVB_NET" = yes; + "DVB_MAX_ADAPTERS" = freeform "8"; + "DVB_DYNAMIC_MINORS" = yes; + "TTPCI_EEPROM" = module; + "MEDIA_USB_SUPPORT" = yes; + "USB_VIDEO_CLASS" = module; + "USB_VIDEO_CLASS_INPUT_EVDEV" = yes; + "USB_GSPCA" = module; + "USB_M5602" = module; + "USB_STV06XX" = module; + "USB_GL860" = module; + "USB_GSPCA_BENQ" = module; + "USB_GSPCA_CONEX" = module; + "USB_GSPCA_CPIA1" = module; + "USB_GSPCA_DTCS033" = module; + "USB_GSPCA_ETOMS" = module; + "USB_GSPCA_FINEPIX" = module; + "USB_GSPCA_JEILINJ" = module; + "USB_GSPCA_JL2005BCD" = module; + "USB_GSPCA_KINECT" = module; + "USB_GSPCA_KONICA" = module; + "USB_GSPCA_MARS" = module; + "USB_GSPCA_MR97310A" = module; + "USB_GSPCA_NW80X" = module; + "USB_GSPCA_OV519" = module; + "USB_GSPCA_OV534" = module; + "USB_GSPCA_OV534_9" = module; + "USB_GSPCA_PAC207" = module; + "USB_GSPCA_PAC7302" = module; + "USB_GSPCA_PAC7311" = module; + "USB_GSPCA_SE401" = module; + "USB_GSPCA_SN9C2028" = module; + "USB_GSPCA_SN9C20X" = module; + "USB_GSPCA_SONIXB" = module; + "USB_GSPCA_SONIXJ" = module; + "USB_GSPCA_SPCA500" = module; + "USB_GSPCA_SPCA501" = module; + "USB_GSPCA_SPCA505" = module; + "USB_GSPCA_SPCA506" = module; + "USB_GSPCA_SPCA508" = module; + "USB_GSPCA_SPCA561" = module; + "USB_GSPCA_SPCA1528" = module; + "USB_GSPCA_SQ905" = module; + "USB_GSPCA_SQ905C" = module; + "USB_GSPCA_SQ930X" = module; + "USB_GSPCA_STK014" = module; + "USB_GSPCA_STK1135" = module; + "USB_GSPCA_STV0680" = module; + "USB_GSPCA_SUNPLUS" = module; + "USB_GSPCA_T613" = module; + "USB_GSPCA_TOPRO" = module; + "USB_GSPCA_TOUPTEK" = module; + "USB_GSPCA_TV8532" = module; + "USB_GSPCA_VC032X" = module; + "USB_GSPCA_VICAM" = module; + "USB_GSPCA_XIRLINK_CIT" = module; + "USB_GSPCA_ZC3XX" = module; + "USB_PWC" = module; + "USB_PWC_INPUT_EVDEV" = yes; + "VIDEO_CPIA2" = module; + "USB_ZR364XX" = module; + "USB_STKWEBCAM" = module; + "USB_S2255" = module; + "VIDEO_USBTV" = module; + "VIDEO_PVRUSB2" = module; + "VIDEO_PVRUSB2_SYSFS" = yes; + "VIDEO_PVRUSB2_DVB" = yes; + "VIDEO_HDPVR" = module; + "VIDEO_STK1160_COMMON" = module; + "VIDEO_STK1160" = module; + "VIDEO_GO7007" = module; + "VIDEO_GO7007_USB" = module; + "VIDEO_GO7007_LOADER" = module; + "VIDEO_GO7007_USB_S2250_BOARD" = module; + "VIDEO_AU0828" = module; + "VIDEO_AU0828_V4L2" = yes; + "VIDEO_AU0828_RC" = yes; + "VIDEO_CX231XX" = module; + "VIDEO_CX231XX_RC" = yes; + "VIDEO_CX231XX_ALSA" = module; + "VIDEO_CX231XX_DVB" = module; + "VIDEO_TM6000" = module; + "VIDEO_TM6000_ALSA" = module; + "VIDEO_TM6000_DVB" = module; + "DVB_USB" = module; + "DVB_USB_DIB3000MC" = module; + "DVB_USB_A800" = module; + "DVB_USB_DIBUSB_MB" = module; + "DVB_USB_DIBUSB_MB_FAULTY" = yes; + "DVB_USB_DIBUSB_MC" = module; + "DVB_USB_DIB0700" = module; + "DVB_USB_UMT_010" = module; + "DVB_USB_CXUSB" = module; + "DVB_USB_M920X" = module; + "DVB_USB_DIGITV" = module; + "DVB_USB_VP7045" = module; + "DVB_USB_VP702X" = module; + "DVB_USB_GP8PSK" = module; + "DVB_USB_NOVA_T_USB2" = module; + "DVB_USB_TTUSB2" = module; + "DVB_USB_DTT200U" = module; + "DVB_USB_OPERA1" = module; + "DVB_USB_AF9005" = module; + "DVB_USB_AF9005_REMOTE" = module; + "DVB_USB_PCTV452E" = module; + "DVB_USB_DW2102" = module; + "DVB_USB_CINERGY_T2" = module; + "DVB_USB_DTV5100" = module; + "DVB_USB_AZ6027" = module; + "DVB_USB_TECHNISAT_USB2" = module; + "DVB_USB_V2" = module; + "DVB_USB_AF9015" = module; + "DVB_USB_AF9035" = module; + "DVB_USB_ANYSEE" = module; + "DVB_USB_AU6610" = module; + "DVB_USB_AZ6007" = module; + "DVB_USB_CE6230" = module; + "DVB_USB_EC168" = module; + "DVB_USB_GL861" = module; + "DVB_USB_LME2510" = module; + "DVB_USB_MXL111SF" = module; + "DVB_USB_RTL28XXU" = module; + "DVB_USB_DVBSKY" = module; + "DVB_USB_ZD1301" = module; + "DVB_TTUSB_BUDGET" = module; + "DVB_TTUSB_DEC" = module; + "SMS_USB_DRV" = module; + "DVB_B2C2_FLEXCOP_USB" = module; + "DVB_AS102" = module; + "VIDEO_EM28XX" = module; + "VIDEO_EM28XX_V4L2" = module; + "VIDEO_EM28XX_ALSA" = module; + "VIDEO_EM28XX_DVB" = module; + "VIDEO_EM28XX_RC" = module; + "USB_AIRSPY" = module; + "USB_HACKRF" = module; + "USB_MSI2500" = module; + "RADIO_ADAPTERS" = yes; + "RADIO_TEA575X" = module; + "RADIO_SI470X" = module; + "USB_SI470X" = module; + "I2C_SI470X" = module; + "RADIO_SI4713" = module; + "USB_SI4713" = module; + "PLATFORM_SI4713" = module; + "I2C_SI4713" = module; + "USB_MR800" = module; + "USB_DSBR" = module; + "RADIO_MAXIRADIO" = module; + "RADIO_SHARK" = module; + "RADIO_SHARK2" = module; + "USB_KEENE" = module; + "USB_RAREMONO" = module; + "USB_MA901" = module; + "RADIO_TEA5764" = module; + "RADIO_SAA7706H" = module; + "RADIO_TEF6862" = module; + "RADIO_WL1273" = module; + "MEDIA_COMMON_OPTIONS" = yes; + "VIDEO_CX2341X" = module; + "VIDEO_TVEEPROM" = module; + "CYPRESS_FIRMWARE" = module; + "VIDEOBUF2_CORE" = module; + "VIDEOBUF2_V4L2" = module; + "VIDEOBUF2_MEMOPS" = module; + "VIDEOBUF2_DMA_CONTIG" = module; + "VIDEOBUF2_VMALLOC" = module; + "VIDEOBUF2_DMA_SG" = module; + "DVB_B2C2_FLEXCOP" = module; + "SMS_SIANO_MDTV" = module; + "SMS_SIANO_RC" = yes; + "V4L_MEM2MEM_DRIVERS" = yes; + "VIDEO_ROCKCHIP_RGA" = module; + "VIDEO_SUN8I_DEINTERLACE" = module; + "VIDEO_SUN8I_ROTATE" = module; + "DVB_PLATFORM_DRIVERS" = yes; + "SDR_PLATFORM_DRIVERS" = yes; + "SMS_SDIO_DRV" = module; + "MEDIA_ATTACH" = yes; + "VIDEO_IR_I2C" = module; + "VIDEO_TVAUDIO" = module; + "VIDEO_TDA7432" = module; + "VIDEO_TDA9840" = module; + "VIDEO_TDA1997X" = module; + "VIDEO_TEA6415C" = module; + "VIDEO_TEA6420" = module; + "VIDEO_MSP3400" = module; + "VIDEO_CS3308" = module; + "VIDEO_CS5345" = module; + "VIDEO_CS53L32A" = module; + "VIDEO_TLV320AIC23B" = module; + "VIDEO_UDA1342" = module; + "VIDEO_WM8775" = module; + "VIDEO_WM8739" = module; + "VIDEO_VP27SMPX" = module; + "VIDEO_SONY_BTF_MPX" = module; + "VIDEO_SAA6588" = module; + "VIDEO_ADV7180" = module; + "VIDEO_ADV7183" = module; + "VIDEO_ADV748X" = module; + "VIDEO_ADV7604" = module; + "VIDEO_ADV7604_CEC" = yes; + "VIDEO_ADV7842" = module; + "VIDEO_ADV7842_CEC" = yes; + "VIDEO_BT819" = module; + "VIDEO_BT856" = module; + "VIDEO_BT866" = module; + "VIDEO_KS0127" = module; + "VIDEO_ML86V7667" = module; + "VIDEO_SAA7110" = module; + "VIDEO_SAA711X" = module; + "VIDEO_TC358743" = module; + "VIDEO_TC358743_CEC" = yes; + "VIDEO_TVP514X" = module; + "VIDEO_TVP5150" = module; + "VIDEO_TVP7002" = module; + "VIDEO_TW2804" = module; + "VIDEO_TW9903" = module; + "VIDEO_TW9906" = module; + "VIDEO_TW9910" = module; + "VIDEO_VPX3220" = module; + "VIDEO_SAA717X" = module; + "VIDEO_CX25840" = module; + "VIDEO_SAA7127" = module; + "VIDEO_SAA7185" = module; + "VIDEO_ADV7170" = module; + "VIDEO_ADV7175" = module; + "VIDEO_ADV7343" = module; + "VIDEO_ADV7393" = module; + "VIDEO_AD9389B" = module; + "VIDEO_AK881X" = module; + "VIDEO_THS8200" = module; + "VIDEO_UPD64031A" = module; + "VIDEO_UPD64083" = module; + "VIDEO_SAA6752HS" = module; + "SDR_MAX2175" = module; + "VIDEO_THS7303" = module; + "VIDEO_M52790" = module; + "VIDEO_I2C" = module; + "VIDEO_ST_MIPID02" = module; + "VIDEO_APTINA_PLL" = module; + "VIDEO_SMIAPP_PLL" = module; + "VIDEO_HI556" = module; + "VIDEO_IMX214" = module; + "VIDEO_IMX219" = module; + "VIDEO_IMX258" = module; + "VIDEO_IMX274" = module; + "VIDEO_IMX290" = module; + "VIDEO_IMX319" = module; + "VIDEO_IMX355" = module; + "VIDEO_OV2640" = module; + "VIDEO_OV2659" = module; + "VIDEO_OV2680" = module; + "VIDEO_OV2685" = module; + "VIDEO_OV5640" = module; + "VIDEO_OV5645" = module; + "VIDEO_OV5647" = module; + "VIDEO_OV6650" = module; + "VIDEO_OV5670" = module; + "VIDEO_OV5675" = module; + "VIDEO_OV5695" = module; + "VIDEO_OV7251" = module; + "VIDEO_OV772X" = module; + "VIDEO_OV7640" = module; + "VIDEO_OV7670" = module; + "VIDEO_OV7740" = module; + "VIDEO_OV8856" = module; + "VIDEO_OV9640" = module; + "VIDEO_OV9650" = module; + "VIDEO_OV13858" = module; + "VIDEO_VS6624" = module; + "VIDEO_MT9M001" = module; + "VIDEO_MT9M032" = module; + "VIDEO_MT9M111" = module; + "VIDEO_MT9P031" = module; + "VIDEO_MT9T001" = module; + "VIDEO_MT9T112" = module; + "VIDEO_MT9V011" = module; + "VIDEO_MT9V032" = module; + "VIDEO_MT9V111" = module; + "VIDEO_SR030PC30" = module; + "VIDEO_NOON010PC30" = module; + "VIDEO_M5MOLS" = module; + "VIDEO_RJ54N1" = module; + "VIDEO_S5K6AA" = module; + "VIDEO_S5K6A3" = module; + "VIDEO_S5K4ECGX" = module; + "VIDEO_S5K5BAF" = module; + "VIDEO_SMIAPP" = module; + "VIDEO_ET8EK8" = module; + "VIDEO_S5C73M3" = module; + "VIDEO_AD5820" = module; + "VIDEO_AK7375" = module; + "VIDEO_DW9714" = module; + "VIDEO_DW9807_VCM" = module; + "VIDEO_ADP1653" = module; + "VIDEO_LM3560" = module; + "VIDEO_LM3646" = module; + "VIDEO_GS1662" = module; + "CXD2880_SPI_DRV" = module; + "MEDIA_TUNER" = no; + "VGA_ARB" = yes; + "VGA_ARB_MAX_GPUS" = freeform "16"; + "DRM" = no; + "LCD_CLASS_DEVICE" = no; + "BACKLIGHT_CLASS_DEVICE" = no; + "HDMI" = no; + "DUMMY_CONSOLE" = yes; + "DUMMY_CONSOLE_COLUMNS" = freeform "80"; + "DUMMY_CONSOLE_ROWS" = freeform "25"; + "SOUND" = no; + "SND" = no; + "HID" = yes; + "HID_BATTERY_STRENGTH" = yes; + "HIDRAW" = yes; + "UHID" = module; + "HID_GENERIC" = yes; + "HID_A4TECH" = module; + "HID_ACCUTOUCH" = module; + "HID_ACRUX" = module; + "HID_ACRUX_FF" = yes; + "HID_APPLE" = module; + "HID_APPLEIR" = module; + "HID_AUREAL" = module; + "HID_BELKIN" = module; + "HID_BETOP_FF" = module; + "HID_BIGBEN_FF" = module; + "HID_CHERRY" = module; + "HID_CHICONY" = module; + "HID_CORSAIR" = module; + "HID_COUGAR" = module; + "HID_MACALLY" = module; + "HID_PRODIKEYS" = module; + "HID_CMEDIA" = module; + "HID_CP2112" = module; + "HID_CREATIVE_SB0540" = module; + "HID_CYPRESS" = module; + "HID_DRAGONRISE" = module; + "DRAGONRISE_FF" = yes; + "HID_EMS_FF" = module; + "HID_ELAN" = module; + "HID_ELECOM" = module; + "HID_ELO" = module; + "HID_EZKEY" = module; + "HID_GEMBIRD" = module; + "HID_GFRM" = module; + "HID_GLORIOUS" = module; + "HID_HOLTEK" = module; + "HOLTEK_FF" = yes; + "HID_GOOGLE_HAMMER" = module; + "HID_GT683R" = module; + "HID_KEYTOUCH" = module; + "HID_KYE" = module; + "HID_UCLOGIC" = module; + "HID_WALTOP" = module; + "HID_VIEWSONIC" = module; + "HID_GYRATION" = module; + "HID_ICADE" = module; + "HID_ITE" = module; + "HID_JABRA" = module; + "HID_TWINHAN" = module; + "HID_KENSINGTON" = module; + "HID_LCPOWER" = module; + "HID_LED" = module; + "HID_LENOVO" = module; + "HID_LOGITECH" = module; + "HID_LOGITECH_DJ" = module; + "HID_LOGITECH_HIDPP" = module; + "LOGITECH_FF" = yes; + "LOGIRUMBLEPAD2_FF" = yes; + "LOGIG940_FF" = yes; + "LOGIWHEELS_FF" = yes; + "HID_MAGICMOUSE" = module; + "HID_MALTRON" = module; + "HID_REDRAGON" = module; + "HID_MICROSOFT" = module; + "HID_MONTEREY" = module; + "HID_MULTITOUCH" = module; + "HID_NTI" = module; + "HID_NTRIG" = module; + "HID_ORTEK" = module; + "HID_PANTHERLORD" = module; + "PANTHERLORD_FF" = yes; + "HID_PENMOUNT" = module; + "HID_PETALYNX" = module; + "HID_PICOLCD" = module; + "HID_PICOLCD_FB" = yes; + "HID_PICOLCD_BACKLIGHT" = yes; + "HID_PICOLCD_LCD" = yes; + "HID_PICOLCD_LEDS" = yes; + "HID_PICOLCD_CIR" = yes; + "HID_PLANTRONICS" = module; + "HID_PRIMAX" = module; + "HID_RETRODE" = module; + "HID_ROCCAT" = module; + "HID_SAITEK" = module; + "HID_SAMSUNG" = module; + "HID_SONY" = module; + "SONY_FF" = yes; + "HID_SPEEDLINK" = module; + "HID_STEAM" = module; + "HID_STEELSERIES" = module; + "HID_SUNPLUS" = module; + "HID_RMI" = module; + "HID_GREENASIA" = module; + "GREENASIA_FF" = yes; + "HID_SMARTJOYPLUS" = module; + "SMARTJOYPLUS_FF" = yes; + "HID_TIVO" = module; + "HID_TOPSEED" = module; + "HID_THINGM" = module; + "HID_THRUSTMASTER" = module; + "THRUSTMASTER_FF" = yes; + "HID_UDRAW_PS3" = module; + "HID_U2FZERO" = module; + "HID_WACOM" = module; + "HID_WIIMOTE" = module; + "HID_XINMO" = module; + "HID_ZEROPLUS" = module; + "ZEROPLUS_FF" = yes; + "HID_ZYDACRON" = module; + "HID_SENSOR_HUB" = module; + "HID_SENSOR_CUSTOM_SENSOR" = module; + "HID_ALPS" = module; + "HID_MCP2221" = module; + "USB_HID" = yes; + "HID_PID" = yes; + "USB_HIDDEV" = yes; + "I2C_HID" = module; + "USB_OHCI_LITTLE_ENDIAN" = yes; + "USB_SUPPORT" = yes; + "USB_COMMON" = yes; + "USB_LED_TRIG" = yes; + "USB_ULPI_BUS" = yes; + "USB_CONN_GPIO" = module; + "USB_ARCH_HAS_HCD" = yes; + "USB" = yes; + "USB_PCI" = yes; + "USB_ANNOUNCE_NEW_DEVICES" = yes; + "USB_DEFAULT_PERSIST" = yes; + "USB_OTG" = yes; + "USB_OTG_FSM" = module; + "USB_LEDS_TRIGGER_USBPORT" = yes; + "USB_AUTOSUSPEND_DELAY" = freeform "2"; + "USB_MON" = module; + "USB_XHCI_HCD" = yes; + "USB_XHCI_PCI" = yes; + "USB_XHCI_PLATFORM" = yes; + "USB_EHCI_HCD" = yes; + "USB_EHCI_ROOT_HUB_TT" = yes; + "USB_EHCI_TT_NEWSCHED" = yes; + "USB_EHCI_PCI" = yes; + "USB_EHCI_FSL" = module; + "USB_EHCI_HCD_PLATFORM" = yes; + "USB_OXU210HP_HCD" = module; + "USB_ISP116X_HCD" = module; + "USB_FOTG210_HCD" = module; + "USB_MAX3421_HCD" = module; + "USB_OHCI_HCD" = yes; + "USB_OHCI_HCD_PCI" = yes; + "USB_OHCI_HCD_PLATFORM" = yes; + "USB_HCD_BCMA" = module; + "USB_HCD_SSB" = module; + "USB_ACM" = module; + "USB_PRINTER" = module; + "USB_WDM" = module; + "USB_TMC" = module; + "USB_STORAGE" = yes; + "USB_STORAGE_REALTEK" = module; + "USB_STORAGE_DATAFAB" = module; + "USB_STORAGE_FREECOM" = module; + "USB_STORAGE_ISD200" = module; + "USB_STORAGE_USBAT" = module; + "USB_STORAGE_SDDR09" = module; + "USB_STORAGE_SDDR55" = module; + "USB_STORAGE_JUMPSHOT" = module; + "USB_STORAGE_ALAUDA" = module; + "USB_STORAGE_ONETOUCH" = module; + "USB_STORAGE_KARMA" = module; + "USB_STORAGE_CYPRESS_ATACB" = module; + "USB_STORAGE_ENE_UB6250" = module; + "USB_UAS" = module; + "USB_MDC800" = module; + "USB_MICROTEK" = module; + "USBIP_CORE" = module; + "USBIP_VHCI_HCD" = module; + "USBIP_VHCI_HC_PORTS" = freeform "8"; + "USBIP_VHCI_NR_HCS" = freeform "1"; + "USBIP_HOST" = module; + "USBIP_VUDC" = module; + "USB_DWC3" = yes; + "USB_DWC3_DUAL_ROLE" = yes; + "USB_DWC3_HAPS" = yes; + "USB_DWC3_MESON_G12A" = module; + "USB_DWC3_OF_SIMPLE" = yes; + "USB_DWC2" = yes; + "USB_DWC2_DUAL_ROLE" = yes; + "USB_DWC2_PCI" = module; + "USB_CHIPIDEA" = yes; + "USB_CHIPIDEA_UDC" = yes; + "USB_CHIPIDEA_HOST" = yes; + "USB_CHIPIDEA_PCI" = yes; + "USB_CHIPIDEA_MSM" = yes; + "USB_CHIPIDEA_IMX" = yes; + "USB_CHIPIDEA_GENERIC" = yes; + "USB_CHIPIDEA_TEGRA" = yes; + "USB_ISP1760" = yes; + "USB_ISP1760_HCD" = yes; + "USB_ISP1761_UDC" = yes; + "USB_ISP1760_DUAL_ROLE" = yes; + "USB_SERIAL" = module; + "USB_SERIAL_GENERIC" = yes; + "USB_SERIAL_SIMPLE" = module; + "USB_SERIAL_AIRCABLE" = module; + "USB_SERIAL_ARK3116" = module; + "USB_SERIAL_BELKIN" = module; + "USB_SERIAL_CH341" = module; + "USB_SERIAL_WHITEHEAT" = module; + "USB_SERIAL_DIGI_ACCELEPORT" = module; + "USB_SERIAL_CP210X" = module; + "USB_SERIAL_CYPRESS_M8" = module; + "USB_SERIAL_EMPEG" = module; + "USB_SERIAL_FTDI_SIO" = module; + "USB_SERIAL_VISOR" = module; + "USB_SERIAL_IPAQ" = module; + "USB_SERIAL_IR" = module; + "USB_SERIAL_EDGEPORT" = module; + "USB_SERIAL_EDGEPORT_TI" = module; + "USB_SERIAL_F81232" = module; + "USB_SERIAL_F8153X" = module; + "USB_SERIAL_GARMIN" = module; + "USB_SERIAL_IPW" = module; + "USB_SERIAL_IUU" = module; + "USB_SERIAL_KEYSPAN_PDA" = module; + "USB_SERIAL_KEYSPAN" = module; + "USB_SERIAL_KLSI" = module; + "USB_SERIAL_KOBIL_SCT" = module; + "USB_SERIAL_MCT_U232" = module; + "USB_SERIAL_METRO" = module; + "USB_SERIAL_MOS7720" = module; + "USB_SERIAL_MOS7840" = module; + "USB_SERIAL_MXUPORT" = module; + "USB_SERIAL_NAVMAN" = module; + "USB_SERIAL_PL2303" = module; + "USB_SERIAL_OTI6858" = module; + "USB_SERIAL_QCAUX" = module; + "USB_SERIAL_QUALCOMM" = module; + "USB_SERIAL_SPCP8X5" = module; + "USB_SERIAL_SAFE" = module; + "USB_SERIAL_SIERRAWIRELESS" = module; + "USB_SERIAL_SYMBOL" = module; + "USB_SERIAL_TI" = module; + "USB_SERIAL_CYBERJACK" = module; + "USB_SERIAL_XIRCOM" = module; + "USB_SERIAL_WWAN" = module; + "USB_SERIAL_OPTION" = module; + "USB_SERIAL_OMNINET" = module; + "USB_SERIAL_OPTICON" = module; + "USB_SERIAL_XSENS_MT" = module; + "USB_SERIAL_WISHBONE" = module; + "USB_SERIAL_SSU100" = module; + "USB_SERIAL_QT2" = module; + "USB_SERIAL_UPD78F0730" = module; + "USB_SERIAL_DEBUG" = module; + "USB_EMI62" = module; + "USB_EMI26" = module; + "USB_ADUTUX" = module; + "USB_SEVSEG" = module; + "USB_LEGOTOWER" = module; + "USB_LCD" = module; + "USB_CYPRESS_CY7C63" = module; + "USB_CYTHERM" = module; + "USB_IDMOUSE" = module; + "USB_FTDI_ELAN" = module; + "USB_APPLEDISPLAY" = module; + "APPLE_MFI_FASTCHARGE" = module; + "USB_SISUSBVGA" = module; + "USB_LD" = module; + "USB_TRANCEVIBRATOR" = module; + "USB_IOWARRIOR" = module; + "USB_TEST" = module; + "USB_EHSET_TEST_FIXTURE" = module; + "USB_ISIGHTFW" = module; + "USB_YUREX" = module; + "USB_EZUSB_FX2" = module; + "USB_HUB_USB251XB" = module; + "USB_HSIC_USB3503" = yes; + "USB_LINK_LAYER_TEST" = module; + "USB_CHAOSKEY" = module; + "USB_ATM" = module; + "USB_SPEEDTOUCH" = module; + "USB_CXACRU" = module; + "USB_UEAGLEATM" = module; + "USB_XUSBATM" = module; + "USB_PHY" = yes; + "NOP_USB_XCEIV" = yes; + "USB_ULPI" = yes; + "USB_ULPI_VIEWPORT" = yes; + "USB_GADGET" = yes; + "USB_GADGET_VBUS_DRAW" = freeform "2"; + "USB_GADGET_STORAGE_NUM_BUFFERS" = freeform "2"; + "U_SERIAL_CONSOLE" = yes; + "USB_SNP_CORE" = module; + "USB_AMD5536UDC" = module; + "USB_NET2280" = module; + "USB_GOKU" = module; + "USB_EG20T" = module; + "USB_MAX3420_UDC" = module; + "USB_LIBCOMPOSITE" = module; + "USB_F_ACM" = module; + "USB_F_SS_LB" = module; + "USB_U_SERIAL" = module; + "USB_U_ETHER" = module; + "USB_U_AUDIO" = module; + "USB_F_SERIAL" = module; + "USB_F_OBEX" = module; + "USB_F_NCM" = module; + "USB_F_ECM" = module; + "USB_F_PHONET" = module; + "USB_F_EEM" = module; + "USB_F_SUBSET" = module; + "USB_F_RNDIS" = module; + "USB_F_MASS_STORAGE" = module; + "USB_F_FS" = module; + "USB_F_UAC1" = module; + "USB_F_UAC2" = module; + "USB_F_UVC" = module; + "USB_F_MIDI" = module; + "USB_F_HID" = module; + "USB_F_PRINTER" = module; + "USB_F_TCM" = module; + "USB_CONFIGFS" = module; + "USB_CONFIGFS_SERIAL" = yes; + "USB_CONFIGFS_ACM" = yes; + "USB_CONFIGFS_OBEX" = yes; + "USB_CONFIGFS_NCM" = yes; + "USB_CONFIGFS_ECM" = yes; + "USB_CONFIGFS_ECM_SUBSET" = yes; + "USB_CONFIGFS_RNDIS" = yes; + "USB_CONFIGFS_EEM" = yes; + "USB_CONFIGFS_MASS_STORAGE" = yes; + "USB_CONFIGFS_F_LB_SS" = yes; + "USB_CONFIGFS_F_FS" = yes; + "USB_CONFIGFS_F_UAC1" = yes; + "USB_CONFIGFS_F_UAC2" = yes; + "USB_CONFIGFS_F_MIDI" = yes; + "USB_CONFIGFS_F_HID" = yes; + "USB_CONFIGFS_F_UVC" = yes; + "USB_CONFIGFS_F_PRINTER" = yes; + "USB_CONFIGFS_F_TCM" = yes; + "USB_ZERO" = module; + "USB_AUDIO" = module; + "USB_ETH" = module; + "USB_ETH_RNDIS" = yes; + "USB_ETH_EEM" = yes; + "USB_G_NCM" = module; + "USB_GADGETFS" = module; + "USB_FUNCTIONFS" = module; + "USB_FUNCTIONFS_ETH" = yes; + "USB_FUNCTIONFS_RNDIS" = yes; + "USB_FUNCTIONFS_GENERIC" = yes; + "USB_MASS_STORAGE" = module; + "USB_GADGET_TARGET" = module; + "USB_G_SERIAL" = module; + "USB_MIDI_GADGET" = module; + "USB_G_PRINTER" = module; + "USB_CDC_COMPOSITE" = module; + "USB_G_NOKIA" = module; + "USB_G_ACM_MS" = module; + "USB_G_MULTI" = module; + "USB_G_MULTI_RNDIS" = yes; + "USB_G_MULTI_CDC" = yes; + "USB_G_HID" = module; + "USB_G_WEBCAM" = module; + "USB_RAW_GADGET" = module; + "TYPEC" = module; + "TYPEC_TCPM" = module; + "TYPEC_TCPCI" = module; + "TYPEC_RT1711H" = module; + "TYPEC_FUSB302" = module; + "TYPEC_UCSI" = module; + "UCSI_CCG" = module; + "TYPEC_HD3SS3220" = module; + "TYPEC_TPS6598X" = module; + "TYPEC_MUX_PI3USB30532" = module; + "TYPEC_DP_ALTMODE" = module; + "USB_ROLE_SWITCH" = yes; + "MMC" = yes; + "PWRSEQ_EMMC" = yes; + "PWRSEQ_SD8787" = module; + "PWRSEQ_SIMPLE" = yes; + "MMC_BLOCK" = yes; + "MMC_BLOCK_MINORS" = freeform "32"; + "MMC_ARMMMCI" = yes; + "MMC_STM32_SDMMC" = yes; + "MMC_SDHCI" = yes; + "MMC_SDHCI_IO_ACCESSORS" = yes; + "MMC_SDHCI_PLTFM" = yes; + "MMC_SDHCI_OF_ARASAN" = yes; + "MMC_SDHCI_OF_ASPEED" = module; + "MMC_SDHCI_CADENCE" = yes; + "MMC_SDHCI_MILBEAUT" = module; + "MMC_MESON_GX" = module; + "MMC_MESON_MX_SDIO" = module; + "MMC_ALCOR" = module; + "MMC_SPI" = yes; + "MMC_DW" = yes; + "MMC_DW_PLTFM" = yes; + "MMC_DW_EXYNOS" = yes; + "MMC_DW_HI3798CV200" = module; + "MMC_DW_K3" = yes; + "MMC_DW_ROCKCHIP" = yes; + "MMC_REALTEK_PCI" = module; + "MMC_REALTEK_USB" = module; + "MMC_SUNXI" = module; + "MMC_CQHCI" = yes; + "MMC_HSQ" = module; + "MMC_SDHCI_XENON" = yes; + "MMC_SDHCI_AM654" = module; + "NEW_LEDS" = yes; + "LEDS_CLASS" = yes; + "LEDS_AN30259A" = module; + "LEDS_CR0014114" = module; + "LEDS_EL15203000" = module; + "LEDS_LM3532" = module; + "LEDS_LM3533" = module; + "LEDS_LM3692X" = module; + "LEDS_GPIO" = yes; + "LEDS_PWM" = module; + "LEDS_REGULATOR" = module; + "LEDS_ADP5520" = module; + "LEDS_MAX77650" = module; + "LEDS_SYSCON" = yes; + "LEDS_MLXREG" = module; + "LEDS_USER" = yes; + "LEDS_TRIGGERS" = yes; + "LEDS_TRIGGER_TIMER" = module; + "LEDS_TRIGGER_ONESHOT" = module; + "LEDS_TRIGGER_DISK" = yes; + "LEDS_TRIGGER_MTD" = yes; + "LEDS_TRIGGER_HEARTBEAT" = yes; + "LEDS_TRIGGER_BACKLIGHT" = module; + "LEDS_TRIGGER_CPU" = yes; + "LEDS_TRIGGER_ACTIVITY" = yes; + "LEDS_TRIGGER_GPIO" = module; + "LEDS_TRIGGER_DEFAULT_ON" = yes; + "LEDS_TRIGGER_TRANSIENT" = module; + "LEDS_TRIGGER_CAMERA" = module; + "LEDS_TRIGGER_PANIC" = yes; + "LEDS_TRIGGER_NETDEV" = module; + "LEDS_TRIGGER_PATTERN" = module; + "LEDS_TRIGGER_AUDIO" = module; + "EDAC_SUPPORT" = yes; + "EDAC" = yes; + "EDAC_LEGACY_SYSFS" = yes; + "EDAC_DMC520" = module; + "RTC_LIB" = yes; + "RTC_CLASS" = yes; + "RTC_HCTOSYS" = yes; + "RTC_HCTOSYS_DEVICE" = freeform "rtc0"; + "RTC_SYSTOHC" = yes; + "RTC_SYSTOHC_DEVICE" = freeform "rtc0"; + "RTC_NVMEM" = yes; + "RTC_INTF_SYSFS" = yes; + "RTC_INTF_PROC" = yes; + "RTC_INTF_DEV" = yes; + "RTC_DRV_AC100" = module; + "RTC_DRV_AS3722" = module; + "RTC_DRV_DS1307" = yes; + "RTC_DRV_MAX77686" = yes; + "RTC_DRV_RK808" = yes; + "RTC_DRV_ISL12026" = module; + "RTC_DRV_X1205" = module; + "RTC_DRV_PCF8523" = module; + "RTC_DRV_PCF85063" = module; + "RTC_DRV_PCF85363" = module; + "RTC_DRV_PCF8563" = module; + "RTC_DRV_PCF8583" = module; + "RTC_DRV_M41T80" = module; + "RTC_DRV_M41T80_WDT" = yes; + "RTC_DRV_BD70528" = module; + "RTC_DRV_BQ32K" = module; + "RTC_DRV_RC5T583" = module; + "RTC_DRV_RC5T619" = module; + "RTC_DRV_S35390A" = module; + "RTC_DRV_FM3130" = module; + "RTC_DRV_RX8010" = module; + "RTC_DRV_RX8581" = module; + "RTC_DRV_RX8025" = module; + "RTC_DRV_EM3027" = module; + "RTC_DRV_RV3028" = module; + "RTC_DRV_RV8803" = module; + "RTC_DRV_S5M" = module; + "RTC_DRV_SD3078" = module; + "RTC_DRV_M41T93" = module; + "RTC_DRV_M41T94" = module; + "RTC_DRV_DS1302" = module; + "RTC_DRV_DS1305" = module; + "RTC_DRV_DS1343" = module; + "RTC_DRV_DS1347" = module; + "RTC_DRV_DS1390" = module; + "RTC_DRV_MAX6916" = module; + "RTC_DRV_R9701" = module; + "RTC_DRV_RX4581" = module; + "RTC_DRV_RX6110" = module; + "RTC_DRV_RS5C348" = module; + "RTC_DRV_MAX6902" = module; + "RTC_DRV_PCF2123" = module; + "RTC_DRV_MCP795" = module; + "RTC_I2C_AND_SPI" = yes; + "RTC_DRV_DS3232" = module; + "RTC_DRV_DS3232_HWMON" = yes; + "RTC_DRV_PCF2127" = module; + "RTC_DRV_RV3029C2" = module; + "RTC_DRV_RV3029_HWMON" = yes; + "RTC_DRV_EFI" = yes; + "RTC_DRV_MESON_VRTC" = module; + "RTC_DRV_PL031" = yes; + "RTC_DRV_SUN6I" = yes; + "RTC_DRV_CADENCE" = module; + "RTC_DRV_HID_SENSOR_TIME" = module; + "DMADEVICES" = yes; + "ASYNC_TX_ENABLE_CHANNEL_SWITCH" = yes; + "DMA_ENGINE" = yes; + "DMA_VIRTUAL_CHANNELS" = module; + "DMA_OF" = yes; + "ALTERA_MSGDMA" = module; + "BCM_SBA_RAID" = module; + "DMA_SUN6I" = module; + "DW_AXI_DMAC" = module; + "FSL_QDMA" = module; + "HISI_DMA" = module; + "MV_XOR_V2" = yes; + "PL330_DMA" = yes; + "PLX_DMA" = module; + "QCOM_HIDMA_MGMT" = yes; + "QCOM_HIDMA" = yes; + "DW_EDMA" = module; + "DW_EDMA_PCIE" = module; + "SF_PDMA" = module; + "DMA_ENGINE_RAID" = yes; + "SYNC_FILE" = yes; + "DMABUF_SELFTESTS" = module; + "UIO" = module; + "VFIO_IOMMU_TYPE1" = yes; + "VFIO_VIRQFD" = yes; + "VFIO" = yes; + "VFIO_PCI" = yes; + "VFIO_PCI_MMAP" = yes; + "VFIO_PCI_INTX" = yes; + "VIRT_DRIVERS" = yes; + "VIRTIO" = yes; + "VIRTIO_MENU" = yes; + "VIRTIO_PCI" = yes; + "VIRTIO_PCI_LEGACY" = yes; + "VIRTIO_VDPA" = module; + "VIRTIO_BALLOON" = yes; + "VIRTIO_INPUT" = module; + "VIRTIO_MMIO" = yes; + "VDPA" = module; + "VDPA_SIM" = module; + "IFCVF" = module; + "VHOST_IOTLB" = module; + "VHOST_RING" = module; + "VHOST" = module; + "VHOST_MENU" = yes; + "VHOST_NET" = module; + "VHOST_SCSI" = module; + "VHOST_VDPA" = module; + "XEN_BALLOON" = yes; + "XEN_SCRUB_PAGES_DEFAULT" = yes; + "XEN_DEV_EVTCHN" = yes; + "XEN_BACKEND" = yes; + "XENFS" = yes; + "XEN_COMPAT_XENFS" = yes; + "XEN_SYS_HYPERVISOR" = yes; + "XEN_XENBUS_FRONTEND" = yes; + "XEN_GNTDEV" = yes; + "XEN_GRANT_DEV_ALLOC" = yes; + "SWIOTLB_XEN" = yes; + "XEN_SCSI_BACKEND" = module; + "XEN_PRIVCMD" = yes; + "XEN_EFI" = yes; + "XEN_AUTO_XLATE" = yes; + "XEN_FRONT_PGDIR_SHBUF" = module; + "STAGING" = yes; + "RTL8192U" = module; + "RTLLIB" = module; + "RTLLIB_CRYPTO_CCMP" = module; + "RTLLIB_CRYPTO_TKIP" = module; + "RTLLIB_CRYPTO_WEP" = module; + "RTL8192E" = module; + "RTL8723BS" = module; + "R8712U" = module; + "RTS5208" = module; + "VT6655" = module; + "VT6656" = module; + "AD9832" = module; + "AD9834" = module; + "FB_SM750" = module; + "STAGING_MEDIA" = yes; + "VIDEO_HANTRO" = module; + "VIDEO_HANTRO_ROCKCHIP" = yes; + "VIDEO_MESON_VDEC" = module; + "VIDEO_ROCKCHIP_VDEC" = module; + "VIDEO_SUNXI" = yes; + "VIDEO_SUNXI_CEDRUS" = module; + "PHY_ROCKCHIP_DPHY_RX0" = module; + "VIDEO_ROCKCHIP_ISP1" = module; + "VIDEO_USBVISION" = module; + "FB_TFT" = module; + "FB_TFT_AGM1264K_FL" = module; + "FB_TFT_BD663474" = module; + "FB_TFT_HX8340BN" = module; + "FB_TFT_HX8347D" = module; + "FB_TFT_HX8353D" = module; + "FB_TFT_HX8357D" = module; + "FB_TFT_ILI9163" = module; + "FB_TFT_ILI9320" = module; + "FB_TFT_ILI9325" = module; + "FB_TFT_ILI9340" = module; + "FB_TFT_ILI9341" = module; + "FB_TFT_ILI9481" = module; + "FB_TFT_ILI9486" = module; + "FB_TFT_PCD8544" = module; + "FB_TFT_RA8875" = module; + "FB_TFT_S6D02A1" = module; + "FB_TFT_S6D1121" = module; + "FB_TFT_SEPS525" = module; + "FB_TFT_SH1106" = module; + "FB_TFT_SSD1289" = module; + "FB_TFT_SSD1305" = module; + "FB_TFT_SSD1306" = module; + "FB_TFT_SSD1331" = module; + "FB_TFT_SSD1351" = module; + "FB_TFT_ST7735R" = module; + "FB_TFT_ST7789V" = module; + "FB_TFT_TINYLCD" = module; + "FB_TFT_TLS8204" = module; + "FB_TFT_UC1611" = module; + "FB_TFT_UC1701" = module; + "FB_TFT_UPD161704" = module; + "FB_TFT_WATTEROTT" = module; + "FUSB_30X" = module; + "FIELDBUS_DEV" = module; + "HMS_ANYBUSS_BUS" = module; + "WFX" = module; + "MFD_CROS_EC" = yes; + "CHROME_PLATFORMS" = yes; + "CROS_EC" = yes; + "CROS_EC_PROTO" = yes; + "CROS_EC_CHARDEV" = yes; + "CROS_EC_LIGHTBAR" = yes; + "CROS_EC_VBC" = yes; + "CROS_EC_DEBUGFS" = yes; + "CROS_EC_SENSORHUB" = yes; + "CROS_EC_SYSFS" = yes; + "CROS_EC_TYPEC" = module; + "CROS_USBPD_NOTIFY" = yes; + "HAVE_CLK" = yes; + "CLKDEV_LOOKUP" = yes; + "HAVE_CLK_PREPARE" = yes; + "COMMON_CLK" = yes; + "COMMON_CLK_RK808" = yes; + "COMMON_CLK_SCPI" = yes; + "COMMON_CLK_SI544" = module; + "COMMON_CLK_CS2000_CP" = yes; + "COMMON_CLK_S2MPS11" = yes; + "CLK_QORIQ" = yes; + "COMMON_CLK_XGENE" = yes; + "COMMON_CLK_PWM" = yes; + "COMMON_CLK_BD718XX" = module; + "COMMON_CLK_MESON_REGMAP" = yes; + "COMMON_CLK_MESON_DUALDIV" = yes; + "COMMON_CLK_MESON_MPLL" = yes; + "COMMON_CLK_MESON_PHASE" = module; + "COMMON_CLK_MESON_PLL" = yes; + "COMMON_CLK_MESON_SCLK_DIV" = module; + "COMMON_CLK_MESON_VID_PLL_DIV" = yes; + "COMMON_CLK_MESON_AO_CLKC" = yes; + "COMMON_CLK_MESON_EE_CLKC" = yes; + "COMMON_CLK_MESON_CPU_DYNDIV" = yes; + "COMMON_CLK_GXBB" = yes; + "COMMON_CLK_AXG" = yes; + "COMMON_CLK_AXG_AUDIO" = module; + "COMMON_CLK_G12A" = yes; + "CLK_SUNXI" = yes; + "CLK_SUNXI_CLOCKS" = yes; + "CLK_SUNXI_PRCM_SUN6I" = yes; + "CLK_SUNXI_PRCM_SUN8I" = yes; + "CLK_SUNXI_PRCM_SUN9I" = yes; + "SUNXI_CCU" = yes; + "SUN50I_A64_CCU" = yes; + "SUN50I_H6_CCU" = yes; + "SUN50I_H6_R_CCU" = yes; + "SUN8I_A83T_CCU" = yes; + "SUN8I_H3_CCU" = yes; + "SUN8I_DE2_CCU" = yes; + "SUN8I_R_CCU" = yes; + "TIMER_OF" = yes; + "TIMER_PROBE" = yes; + "CLKSRC_MMIO" = yes; + "ROCKCHIP_TIMER" = yes; + "ARM_ARCH_TIMER" = yes; + "ARM_ARCH_TIMER_EVTSTREAM" = yes; + "ARM_ARCH_TIMER_OOL_WORKAROUND" = yes; + "FSL_ERRATUM_A008585" = yes; + "HISILICON_ERRATUM_161010101" = yes; + "ARM64_ERRATUM_858921" = yes; + "SUN50I_ERRATUM_UNKNOWN1" = yes; + "MAILBOX" = yes; + "ARM_MHU" = yes; + "PLATFORM_MHU" = yes; + "ROCKCHIP_MBOX" = yes; + "SUN6I_MSGBOX" = yes; + "IOMMU_IOVA" = yes; + "IOMMU_API" = yes; + "IOMMU_SUPPORT" = yes; + "IOMMU_IO_PGTABLE" = yes; + "IOMMU_IO_PGTABLE_LPAE" = yes; + "OF_IOMMU" = yes; + "IOMMU_DMA" = yes; + "ROCKCHIP_IOMMU" = yes; + "ARM_SMMU" = yes; + "ARM_SMMU_DISABLE_BYPASS_BY_DEFAULT" = yes; + "ARM_SMMU_V3" = yes; + "MESON_CANVAS" = module; + "MESON_CLK_MEASURE" = yes; + "MESON_GX_SOCINFO" = yes; + "MESON_GX_PM_DOMAINS" = yes; + "MESON_EE_PM_DOMAINS" = yes; + "MESON_SECURE_PM_DOMAINS" = yes; + "MESON_MX_SOCINFO" = yes; + "SOC_BRCMSTB" = yes; + "ROCKCHIP_GRF" = yes; + "ROCKCHIP_PM_DOMAINS" = yes; + "SUNXI_SRAM" = yes; + "VENDOR_FRIENDLYELEC" = yes; + "PM_DEVFREQ" = yes; + "DEVFREQ_GOV_SIMPLE_ONDEMAND" = yes; + "DEVFREQ_GOV_PERFORMANCE" = module; + "DEVFREQ_GOV_POWERSAVE" = module; + "DEVFREQ_GOV_USERSPACE" = module; + "DEVFREQ_GOV_PASSIVE" = module; + "ARM_RK3328_DMC_DEVFREQ" = yes; + "ARM_RK3399_DMC_DEVFREQ" = yes; + "PM_DEVFREQ_EVENT" = yes; + "DEVFREQ_EVENT_ROCKCHIP_DFI" = yes; + "EXTCON" = yes; + "EXTCON_PTN5150" = module; + "EXTCON_USB_GPIO" = yes; + "IIO" = yes; + "IIO_BUFFER" = yes; + "IIO_BUFFER_CB" = module; + "IIO_KFIFO_BUF" = yes; + "IIO_TRIGGERED_BUFFER" = yes; + "IIO_CONFIGFS" = module; + "IIO_TRIGGER" = yes; + "IIO_CONSUMERS_PER_TRIGGER" = freeform "2"; + "IIO_SW_DEVICE" = module; + "IIO_SW_TRIGGER" = module; + "ADIS16201" = module; + "ADIS16209" = module; + "ADXL345" = module; + "ADXL345_I2C" = module; + "ADXL345_SPI" = module; + "ADXL372" = module; + "ADXL372_SPI" = module; + "ADXL372_I2C" = module; + "BMA180" = module; + "BMA220" = module; + "BMA400" = module; + "BMA400_I2C" = module; + "BMA400_SPI" = module; + "BMC150_ACCEL" = module; + "BMC150_ACCEL_I2C" = module; + "BMC150_ACCEL_SPI" = module; + "DA280" = module; + "DA311" = module; + "DMARD06" = module; + "DMARD09" = module; + "DMARD10" = module; + "HID_SENSOR_ACCEL_3D" = module; + "IIO_ST_ACCEL_3AXIS" = module; + "IIO_ST_ACCEL_I2C_3AXIS" = module; + "IIO_ST_ACCEL_SPI_3AXIS" = module; + "KXSD9" = module; + "KXSD9_SPI" = module; + "KXSD9_I2C" = module; + "KXCJK1013" = module; + "MC3230" = module; + "MMA7455" = module; + "MMA7455_I2C" = module; + "MMA7455_SPI" = module; + "MMA7660" = module; + "MMA8452" = module; + "MMA9551_CORE" = module; + "MMA9551" = module; + "MMA9553" = module; + "MXC4005" = module; + "MXC6255" = module; + "SCA3000" = module; + "STK8312" = module; + "STK8BA50" = module; + "AD_SIGMA_DELTA" = module; + "AD7091R5" = module; + "AD7124" = module; + "AD7266" = module; + "AD7291" = module; + "AD7292" = module; + "AD7298" = module; + "AD7476" = module; + "AD7606" = module; + "AD7606_IFACE_PARALLEL" = module; + "AD7606_IFACE_SPI" = module; + "AD7766" = module; + "AD7768_1" = module; + "AD7791" = module; + "AD7793" = module; + "AD7887" = module; + "AD7923" = module; + "AD7949" = module; + "AD799X" = module; + "AXP20X_ADC" = module; + "AXP288_ADC" = module; + "LTC2496" = module; + "MESON_SARADC" = yes; + "RN5T618_ADC" = module; + "ROCKCHIP_SARADC" = yes; + "SUN4I_GPADC" = module; + "TI_ADC081C" = module; + "TI_ADC0832" = module; + "TI_ADC084S021" = module; + "TI_ADC12138" = module; + "TI_ADC108S102" = module; + "TI_ADC128S052" = module; + "TI_ADC161S626" = module; + "TI_ADS1015" = module; + "TI_ADS7950" = module; + "TI_ADS8344" = module; + "TI_ADS8688" = module; + "TI_ADS124S08" = module; + "XILINX_XADC" = module; + "HMC425" = module; + "BME680" = module; + "BME680_I2C" = module; + "BME680_SPI" = module; + "PMS7003" = module; + "SENSIRION_SGP30" = module; + "SPS30" = module; + "HID_SENSOR_IIO_COMMON" = module; + "HID_SENSOR_IIO_TRIGGER" = module; + "IIO_MS_SENSORS_I2C" = module; + "IIO_ST_SENSORS_I2C" = module; + "IIO_ST_SENSORS_SPI" = module; + "IIO_ST_SENSORS_CORE" = module; + "AD5686" = module; + "AD5686_SPI" = module; + "AD5696_I2C" = module; + "AD5758" = module; + "AD5770R" = module; + "LTC1660" = module; + "TI_DAC5571" = module; + "TI_DAC7311" = module; + "TI_DAC7612" = module; + "IIO_SIMPLE_DUMMY" = module; + "ADF4371" = module; + "ADIS16080" = module; + "ADIS16130" = module; + "ADIS16136" = module; + "ADIS16260" = module; + "ADXRS450" = module; + "BMG160" = module; + "BMG160_I2C" = module; + "BMG160_SPI" = module; + "FXAS21002C" = module; + "FXAS21002C_I2C" = module; + "FXAS21002C_SPI" = module; + "HID_SENSOR_GYRO_3D" = module; + "MPU3050" = module; + "MPU3050_I2C" = module; + "IIO_ST_GYRO_3AXIS" = module; + "IIO_ST_GYRO_I2C_3AXIS" = module; + "IIO_ST_GYRO_SPI_3AXIS" = module; + "ITG3200" = module; + "AM2315" = module; + "DHT11" = module; + "HDC100X" = module; + "HID_SENSOR_HUMIDITY" = module; + "HTS221" = module; + "HTS221_I2C" = module; + "HTS221_SPI" = module; + "HTU21" = module; + "SI7005" = module; + "SI7020" = module; + "ADIS16460" = module; + "FXOS8700" = module; + "FXOS8700_I2C" = module; + "FXOS8700_SPI" = module; + "IIO_ADIS_LIB" = module; + "IIO_ADIS_LIB_BUFFER" = yes; + "ADJD_S311" = module; + "ADUX1020" = module; + "AL3010" = module; + "AL3320A" = module; + "APDS9300" = module; + "APDS9960" = module; + "BH1750" = module; + "BH1780" = module; + "CM32181" = module; + "CM3232" = module; + "CM3323" = module; + "CM3605" = module; + "CM36651" = module; + "GP2AP002" = module; + "GP2AP020A00F" = module; + "IQS621_ALS" = module; + "SENSORS_ISL29018" = module; + "SENSORS_ISL29028" = module; + "ISL29125" = module; + "HID_SENSOR_ALS" = module; + "HID_SENSOR_PROX" = module; + "JSA1212" = module; + "RPR0521" = module; + "SENSORS_LM3533" = module; + "LTR501" = module; + "LV0104CS" = module; + "MAX44000" = module; + "MAX44009" = module; + "NOA1305" = module; + "OPT3001" = module; + "PA12203001" = module; + "SI1133" = module; + "SI1145" = module; + "STK3310" = module; + "ST_UVIS25" = module; + "ST_UVIS25_I2C" = module; + "ST_UVIS25_SPI" = module; + "TCS3414" = module; + "TCS3472" = module; + "SENSORS_TSL2563" = module; + "TSL2583" = module; + "TSL2772" = module; + "TSL4531" = module; + "US5182D" = module; + "VCNL4000" = module; + "VCNL4035" = module; + "VEML6030" = module; + "VEML6070" = module; + "VL6180" = module; + "ZOPT2201" = module; + "AK8974" = module; + "AK8975" = module; + "AK09911" = module; + "BMC150_MAGN" = module; + "BMC150_MAGN_I2C" = module; + "BMC150_MAGN_SPI" = module; + "MAG3110" = module; + "HID_SENSOR_MAGNETOMETER_3D" = module; + "MMC35240" = module; + "IIO_ST_MAGN_3AXIS" = module; + "IIO_ST_MAGN_I2C_3AXIS" = module; + "IIO_ST_MAGN_SPI_3AXIS" = module; + "SENSORS_HMC5843" = module; + "SENSORS_HMC5843_I2C" = module; + "SENSORS_HMC5843_SPI" = module; + "SENSORS_RM3100" = module; + "SENSORS_RM3100_I2C" = module; + "SENSORS_RM3100_SPI" = module; + "HID_SENSOR_INCLINOMETER_3D" = module; + "HID_SENSOR_DEVICE_ROTATION" = module; + "IIO_HRTIMER_TRIGGER" = module; + "IIO_INTERRUPT_TRIGGER" = module; + "IIO_TIGHTLOOP_TRIGGER" = module; + "IIO_SYSFS_TRIGGER" = module; + "IQS624_POS" = module; + "AD5272" = module; + "MAX5432" = module; + "MCP4018" = module; + "MCP41010" = module; + "BMP280" = module; + "BMP280_I2C" = module; + "BMP280_SPI" = module; + "DLHL60D" = module; + "DPS310" = module; + "HID_SENSOR_PRESS" = module; + "ICP10100" = module; + "ISL29501" = module; + "MB1232" = module; + "PING" = module; + "VL53L0X_I2C" = module; + "IQS620AT_TEMP" = module; + "LTC2983" = module; + "MAXIM_THERMOCOUPLE" = module; + "HID_SENSOR_TEMP" = module; + "MLX90614" = module; + "MLX90632" = module; + "TMP006" = module; + "TMP007" = module; + "TSYS01" = module; + "TSYS02D" = module; + "MAX31856" = module; + "PWM" = yes; + "PWM_SYSFS" = yes; + "PWM_CROS_EC" = module; + "PWM_MESON" = module; + "PWM_ROCKCHIP" = yes; + "PWM_SUN4I" = module; + "IRQCHIP" = yes; + "ARM_GIC" = yes; + "ARM_GIC_MAX_NR" = freeform "1"; + "ARM_GIC_V2M" = yes; + "ARM_GIC_V3" = yes; + "ARM_GIC_V3_ITS" = yes; + "ARM_GIC_V3_ITS_PCI" = yes; + "PARTITION_PERCPU" = yes; + "MESON_IRQ_GPIO" = yes; + "ARCH_HAS_RESET_CONTROLLER" = yes; + "RESET_CONTROLLER" = yes; + "RESET_MESON" = yes; + "RESET_MESON_AUDIO_ARB" = module; + "RESET_SIMPLE" = yes; + "RESET_SUNXI" = yes; + "GENERIC_PHY" = yes; + "GENERIC_PHY_MIPI_DPHY" = yes; + "PHY_XGENE" = yes; + "PHY_SUN4I_USB" = module; + "PHY_SUN6I_MIPI_DPHY" = module; + "PHY_SUN9I_USB" = module; + "PHY_SUN50I_USB3" = module; + "PHY_MESON8B_USB2" = module; + "PHY_MESON_GXL_USB2" = module; + "PHY_MESON_G12A_USB2" = module; + "PHY_MESON_G12A_USB3_PCIE" = module; + "PHY_MESON_AXG_PCIE" = yes; + "PHY_MESON_AXG_MIPI_PCIE_ANALOG" = yes; + "PHY_CADENCE_TORRENT" = module; + "PHY_CADENCE_DPHY" = module; + "PHY_CADENCE_SIERRA" = module; + "PHY_FSL_IMX8MQ_USB" = module; + "PHY_MIXEL_MIPI_DPHY" = module; + "PHY_MAPPHONE_MDM6600" = module; + "PHY_ROCKCHIP_DP" = yes; + "PHY_ROCKCHIP_EMMC" = yes; + "PHY_ROCKCHIP_INNO_HDMI" = yes; + "PHY_ROCKCHIP_INNO_USB2" = yes; + "PHY_ROCKCHIP_INNO_DSIDPHY" = module; + "PHY_ROCKCHIP_INNO_USB3" = yes; + "PHY_ROCKCHIP_PCIE" = yes; + "PHY_ROCKCHIP_TYPEC" = yes; + "PHY_ROCKCHIP_USB" = yes; + "PHY_SAMSUNG_USB2" = yes; + "ARM_CCI_PMU" = module; + "ARM_PMU" = yes; + "RAS" = yes; + "DAX" = yes; + "DEV_DAX" = module; + "NVMEM" = yes; + "NVMEM_SYSFS" = yes; + "NVMEM_SPMI_SDAM" = module; + "ROCKCHIP_EFUSE" = yes; + "ROCKCHIP_OTP" = module; + "NVMEM_SUNXI_SID" = module; + "MESON_EFUSE" = module; + "MESON_MX_EFUSE" = module; + "RAVE_SP_EEPROM" = module; + "MULTIPLEXER" = module; + "MUX_ADG792A" = module; + "MUX_ADGS1408" = module; + "MUX_GPIO" = module; + "MUX_MMIO" = module; + "PM_OPP" = yes; + "COUNTER" = module; + "FTM_QUADDEC" = module; + "MOST" = module; + "DCACHE_WORD_ACCESS" = yes; + "VALIDATE_FS_PARSER" = yes; + "FS_IOMAP" = yes; + "EXT2_FS" = yes; + "EXT2_FS_XATTR" = yes; + "EXT2_FS_POSIX_ACL" = yes; + "EXT2_FS_SECURITY" = yes; + "EXT3_FS" = yes; + "EXT3_FS_POSIX_ACL" = yes; + "EXT3_FS_SECURITY" = yes; + "EXT4_FS" = yes; + "EXT4_FS_POSIX_ACL" = yes; + "EXT4_FS_SECURITY" = yes; + "EXT4_KUNIT_TESTS" = module; + "JBD2" = yes; + "FS_MBCACHE" = yes; + "REISERFS_FS" = module; + "REISERFS_PROC_INFO" = yes; + "REISERFS_FS_XATTR" = yes; + "REISERFS_FS_POSIX_ACL" = yes; + "REISERFS_FS_SECURITY" = yes; + "JFS_FS" = module; + "JFS_POSIX_ACL" = yes; + "JFS_SECURITY" = yes; + "JFS_STATISTICS" = yes; + "XFS_FS" = module; + "XFS_QUOTA" = yes; + "XFS_POSIX_ACL" = yes; + "XFS_RT" = yes; + "GFS2_FS" = module; + "GFS2_FS_LOCKING_DLM" = yes; + "OCFS2_FS" = module; + "OCFS2_FS_O2CB" = module; + "OCFS2_FS_USERSPACE_CLUSTER" = module; + "OCFS2_FS_STATS" = yes; + "OCFS2_DEBUG_MASKLOG" = yes; + "BTRFS_FS" = yes; + "BTRFS_FS_POSIX_ACL" = yes; + "NILFS2_FS" = module; + "F2FS_FS" = yes; + "F2FS_STAT_FS" = yes; + "F2FS_FS_XATTR" = yes; + "F2FS_FS_POSIX_ACL" = yes; + "F2FS_FS_SECURITY" = yes; + "F2FS_CHECK_FS" = yes; + "ZONEFS_FS" = module; + "FS_DAX" = yes; + "FS_POSIX_ACL" = yes; + "EXPORTFS" = yes; + "EXPORTFS_BLOCK_OPS" = yes; + "FILE_LOCKING" = yes; + "MANDATORY_FILE_LOCKING" = yes; + "FS_ENCRYPTION" = yes; + "FS_ENCRYPTION_ALGS" = yes; + "FS_VERITY" = yes; + "FS_VERITY_BUILTIN_SIGNATURES" = yes; + "FSNOTIFY" = yes; + "DNOTIFY" = yes; + "INOTIFY_USER" = yes; + "FANOTIFY" = yes; + "FANOTIFY_ACCESS_PERMISSIONS" = yes; + "QUOTA" = yes; + "QUOTA_NETLINK_INTERFACE" = yes; + "PRINT_QUOTA_WARNING" = yes; + "QUOTA_TREE" = module; + "QFMT_V1" = module; + "QFMT_V2" = module; + "QUOTACTL" = yes; + "AUTOFS4_FS" = module; + "AUTOFS_FS" = module; + "FUSE_FS" = yes; + "CUSE" = module; + "VIRTIO_FS" = module; + "OVERLAY_FS" = yes; + "OVERLAY_FS_REDIRECT_ALWAYS_FOLLOW" = yes; + "OVERLAY_FS_XINO_AUTO" = yes; + "FSCACHE" = module; + "FSCACHE_STATS" = yes; + "CACHEFILES" = module; + "ISO9660_FS" = module; + "JOLIET" = yes; + "ZISOFS" = yes; + "UDF_FS" = module; + "FAT_FS" = yes; + "MSDOS_FS" = module; + "VFAT_FS" = yes; + "FAT_DEFAULT_CODEPAGE" = freeform "437"; + "FAT_DEFAULT_IOCHARSET" = freeform "iso8859-1"; + "FAT_DEFAULT_UTF8" = yes; + "EXFAT_FS" = module; + "EXFAT_DEFAULT_IOCHARSET" = freeform "utf8"; + "NTFS_FS" = module; + "NTFS_RW" = yes; + "PROC_FS" = yes; + "PROC_VMCORE" = yes; + "PROC_SYSCTL" = yes; + "PROC_PAGE_MONITOR" = yes; + "PROC_CHILDREN" = yes; + "KERNFS" = yes; + "SYSFS" = yes; + "TMPFS" = yes; + "TMPFS_POSIX_ACL" = yes; + "TMPFS_XATTR" = yes; + "HUGETLBFS" = yes; + "HUGETLB_PAGE" = yes; + "MEMFD_CREATE" = yes; + "ARCH_HAS_GIGANTIC_PAGE" = yes; + "CONFIGFS_FS" = yes; + "EFIVAR_FS" = module; + "MISC_FILESYSTEMS" = yes; + "ORANGEFS_FS" = module; + "ADFS_FS" = module; + "AFFS_FS" = module; + "ECRYPT_FS" = yes; + "ECRYPT_FS_MESSAGING" = yes; + "HFS_FS" = module; + "HFSPLUS_FS" = module; + "BEFS_FS" = module; + "BFS_FS" = module; + "EFS_FS" = module; + "JFFS2_FS" = module; + "JFFS2_FS_DEBUG" = freeform "0"; + "JFFS2_FS_WRITEBUFFER" = yes; + "JFFS2_FS_XATTR" = yes; + "JFFS2_FS_POSIX_ACL" = yes; + "JFFS2_FS_SECURITY" = yes; + "JFFS2_COMPRESSION_OPTIONS" = yes; + "JFFS2_ZLIB" = yes; + "JFFS2_LZO" = yes; + "JFFS2_RTIME" = yes; + "JFFS2_CMODE_FAVOURLZO" = yes; + "CRAMFS" = module; + "CRAMFS_BLOCKDEV" = yes; + "CRAMFS_MTD" = yes; + "SQUASHFS" = yes; + "SQUASHFS_FILE_DIRECT" = yes; + "SQUASHFS_DECOMP_MULTI_PERCPU" = yes; + "SQUASHFS_XATTR" = yes; + "SQUASHFS_ZLIB" = yes; + "SQUASHFS_LZ4" = yes; + "SQUASHFS_LZO" = yes; + "SQUASHFS_XZ" = yes; + "SQUASHFS_ZSTD" = yes; + "SQUASHFS_4K_DEVBLK_SIZE" = yes; + "SQUASHFS_EMBEDDED" = yes; + "SQUASHFS_FRAGMENT_CACHE_SIZE" = freeform "3"; + "VXFS_FS" = module; + "MINIX_FS" = module; + "OMFS_FS" = module; + "HPFS_FS" = module; + "QNX4FS_FS" = module; + "QNX6FS_FS" = module; + "ROMFS_FS" = module; + "ROMFS_BACKED_BY_BLOCK" = yes; + "ROMFS_ON_BLOCK" = yes; + "PSTORE" = yes; + "PSTORE_DEFLATE_COMPRESS" = yes; + "PSTORE_LZ4HC_COMPRESS" = module; + "PSTORE_COMPRESS" = yes; + "PSTORE_DEFLATE_COMPRESS_DEFAULT" = yes; + "PSTORE_COMPRESS_DEFAULT" = freeform "deflate"; + "PSTORE_RAM" = module; + "SYSV_FS" = module; + "UFS_FS" = module; + "UFS_FS_WRITE" = yes; + "EROFS_FS" = module; + "EROFS_FS_XATTR" = yes; + "EROFS_FS_POSIX_ACL" = yes; + "EROFS_FS_SECURITY" = yes; + "NETWORK_FILESYSTEMS" = yes; + "NFS_FS" = module; + "NFS_V2" = module; + "NFS_V3" = module; + "NFS_V3_ACL" = yes; + "NFS_V4" = module; + "NFS_SWAP" = yes; + "NFS_V4_1" = yes; + "NFS_V4_2" = yes; + "PNFS_FILE_LAYOUT" = module; + "PNFS_BLOCK" = module; + "PNFS_FLEXFILE_LAYOUT" = module; + "NFS_V4_1_IMPLEMENTATION_ID_DOMAIN" = freeform "kernel.org"; + "NFS_V4_1_MIGRATION" = yes; + "NFS_V4_SECURITY_LABEL" = yes; + "NFS_FSCACHE" = yes; + "NFS_USE_KERNEL_DNS" = yes; + "NFS_DEBUG" = yes; + "NFS_DISABLE_UDP_SUPPORT" = yes; + "NFSD" = module; + "NFSD_V2_ACL" = yes; + "NFSD_V3" = yes; + "NFSD_V3_ACL" = yes; + "NFSD_V4" = yes; + "NFSD_PNFS" = yes; + "NFSD_BLOCKLAYOUT" = yes; + "NFSD_SCSILAYOUT" = yes; + "NFSD_FLEXFILELAYOUT" = yes; + "NFSD_V4_SECURITY_LABEL" = yes; + "GRACE_PERIOD" = module; + "LOCKD" = module; + "LOCKD_V4" = yes; + "NFS_ACL_SUPPORT" = module; + "NFS_COMMON" = yes; + "SUNRPC" = module; + "SUNRPC_GSS" = module; + "SUNRPC_BACKCHANNEL" = yes; + "SUNRPC_SWAP" = yes; + "RPCSEC_GSS_KRB5" = module; + "SUNRPC_DEBUG" = yes; + "CEPH_FS" = module; + "CEPH_FSCACHE" = yes; + "CEPH_FS_POSIX_ACL" = yes; + "CEPH_FS_SECURITY_LABEL" = yes; + "CIFS" = module; + "CIFS_STATS2" = yes; + "CIFS_ALLOW_INSECURE_LEGACY" = yes; + "CIFS_WEAK_PW_HASH" = yes; + "CIFS_UPCALL" = yes; + "CIFS_XATTR" = yes; + "CIFS_POSIX" = yes; + "CIFS_DEBUG" = yes; + "CIFS_DFS_UPCALL" = yes; + "CIFS_FSCACHE" = yes; + "CODA_FS" = module; + "AFS_FS" = module; + "AFS_FSCACHE" = yes; + "9P_FS" = module; + "9P_FSCACHE" = yes; + "9P_FS_POSIX_ACL" = yes; + "9P_FS_SECURITY" = yes; + "NLS" = yes; + "NLS_DEFAULT" = freeform "utf8"; + "NLS_CODEPAGE_437" = yes; + "NLS_CODEPAGE_737" = module; + "NLS_CODEPAGE_775" = module; + "NLS_CODEPAGE_850" = module; + "NLS_CODEPAGE_852" = module; + "NLS_CODEPAGE_855" = module; + "NLS_CODEPAGE_857" = module; + "NLS_CODEPAGE_860" = module; + "NLS_CODEPAGE_861" = module; + "NLS_CODEPAGE_862" = module; + "NLS_CODEPAGE_863" = module; + "NLS_CODEPAGE_864" = module; + "NLS_CODEPAGE_865" = module; + "NLS_CODEPAGE_866" = module; + "NLS_CODEPAGE_869" = module; + "NLS_CODEPAGE_936" = module; + "NLS_CODEPAGE_950" = module; + "NLS_CODEPAGE_932" = module; + "NLS_CODEPAGE_949" = module; + "NLS_CODEPAGE_874" = module; + "NLS_ISO8859_8" = module; + "NLS_CODEPAGE_1250" = module; + "NLS_CODEPAGE_1251" = module; + "NLS_ASCII" = module; + "NLS_ISO8859_1" = module; + "NLS_ISO8859_2" = module; + "NLS_ISO8859_3" = module; + "NLS_ISO8859_4" = module; + "NLS_ISO8859_5" = module; + "NLS_ISO8859_6" = module; + "NLS_ISO8859_7" = module; + "NLS_ISO8859_9" = module; + "NLS_ISO8859_13" = module; + "NLS_ISO8859_14" = module; + "NLS_ISO8859_15" = module; + "NLS_KOI8_R" = module; + "NLS_KOI8_U" = module; + "NLS_MAC_ROMAN" = module; + "NLS_MAC_CELTIC" = module; + "NLS_MAC_CENTEURO" = module; + "NLS_MAC_CROATIAN" = module; + "NLS_MAC_CYRILLIC" = module; + "NLS_MAC_GAELIC" = module; + "NLS_MAC_GREEK" = module; + "NLS_MAC_ICELAND" = module; + "NLS_MAC_INUIT" = module; + "NLS_MAC_ROMANIAN" = module; + "NLS_MAC_TURKISH" = module; + "NLS_UTF8" = module; + "DLM" = module; + "UNICODE" = yes; + "IO_WQ" = yes; + "KEYS" = yes; + "KEYS_REQUEST_CACHE" = yes; + "PERSISTENT_KEYRINGS" = yes; + "ENCRYPTED_KEYS" = yes; + "KEY_DH_OPERATIONS" = yes; + "SECURITY" = yes; + "SECURITYFS" = yes; + "SECURITY_NETWORK" = yes; + "SECURITY_NETWORK_XFRM" = yes; + "SECURITY_PATH" = yes; + "LSM_MMAP_MIN_ADDR" = freeform "0"; + "HAVE_HARDENED_USERCOPY_ALLOCATOR" = yes; + "HARDENED_USERCOPY" = yes; + "HARDENED_USERCOPY_FALLBACK" = yes; + "FORTIFY_SOURCE" = yes; + "SECURITY_SELINUX" = yes; + "SECURITY_SELINUX_BOOTPARAM" = yes; + "SECURITY_SELINUX_DEVELOP" = yes; + "SECURITY_SELINUX_AVC_STATS" = yes; + "SECURITY_SELINUX_CHECKREQPROT_VALUE" = freeform "1"; + "SECURITY_SELINUX_SIDTAB_HASH_BITS" = freeform "9"; + "SECURITY_SELINUX_SID2STR_CACHE_SIZE" = freeform "256"; + "SECURITY_SMACK" = yes; + "SECURITY_SMACK_NETFILTER" = yes; + "SECURITY_SMACK_APPEND_SIGNALS" = yes; + "SECURITY_TOMOYO" = yes; + "SECURITY_TOMOYO_MAX_ACCEPT_ENTRY" = freeform "2048"; + "SECURITY_TOMOYO_MAX_AUDIT_LOG" = freeform "1024"; + "SECURITY_TOMOYO_POLICY_LOADER" = freeform "/sbin/tomoyo-init"; + "SECURITY_TOMOYO_ACTIVATION_TRIGGER" = freeform "/sbin/init"; + "SECURITY_APPARMOR" = yes; + "SECURITY_APPARMOR_HASH" = yes; + "SECURITY_APPARMOR_HASH_DEFAULT" = yes; + "SECURITY_YAMA" = yes; + "SECURITY_SAFESETID" = yes; + "SECURITY_LOCKDOWN_LSM" = yes; + "SECURITY_LOCKDOWN_LSM_EARLY" = yes; + "LOCK_DOWN_KERNEL_FORCE_NONE" = yes; + "INTEGRITY" = yes; + "INTEGRITY_SIGNATURE" = yes; + "INTEGRITY_ASYMMETRIC_KEYS" = yes; + "INTEGRITY_TRUSTED_KEYRING" = yes; + "INTEGRITY_PLATFORM_KEYRING" = yes; + "LOAD_UEFI_KEYS" = yes; + "INTEGRITY_AUDIT" = yes; + "DEFAULT_SECURITY_APPARMOR" = yes; + "LSM" = freeform "lockdown,yama,integrity,apparmor"; + "INIT_STACK_NONE" = yes; + "INIT_ON_ALLOC_DEFAULT_ON" = yes; + "XOR_BLOCKS" = yes; + "ASYNC_CORE" = module; + "ASYNC_MEMCPY" = module; + "ASYNC_XOR" = module; + "ASYNC_PQ" = module; + "ASYNC_RAID6_RECOV" = module; + "ASYNC_TX_DISABLE_PQ_VAL_DMA" = yes; + "ASYNC_TX_DISABLE_XOR_VAL_DMA" = yes; + "CRYPTO" = yes; + "CRYPTO_ALGAPI" = yes; + "CRYPTO_ALGAPI2" = yes; + "CRYPTO_AEAD" = yes; + "CRYPTO_AEAD2" = yes; + "CRYPTO_SKCIPHER" = yes; + "CRYPTO_SKCIPHER2" = yes; + "CRYPTO_HASH" = yes; + "CRYPTO_HASH2" = yes; + "CRYPTO_RNG" = yes; + "CRYPTO_RNG2" = yes; + "CRYPTO_RNG_DEFAULT" = yes; + "CRYPTO_AKCIPHER2" = yes; + "CRYPTO_AKCIPHER" = yes; + "CRYPTO_KPP2" = yes; + "CRYPTO_KPP" = yes; + "CRYPTO_ACOMP2" = yes; + "CRYPTO_MANAGER" = yes; + "CRYPTO_MANAGER2" = yes; + "CRYPTO_USER" = module; + "CRYPTO_MANAGER_DISABLE_TESTS" = yes; + "CRYPTO_GF128MUL" = yes; + "CRYPTO_NULL" = yes; + "CRYPTO_NULL2" = yes; + "CRYPTO_PCRYPT" = module; + "CRYPTO_CRYPTD" = yes; + "CRYPTO_AUTHENC" = yes; + "CRYPTO_TEST" = module; + "CRYPTO_SIMD" = yes; + "CRYPTO_ENGINE" = yes; + "CRYPTO_RSA" = yes; + "CRYPTO_DH" = yes; + "CRYPTO_ECC" = yes; + "CRYPTO_ECDH" = yes; + "CRYPTO_ECRDSA" = module; + "CRYPTO_CURVE25519" = module; + "CRYPTO_CCM" = yes; + "CRYPTO_GCM" = yes; + "CRYPTO_CHACHA20POLY1305" = yes; + "CRYPTO_AEGIS128" = module; + "CRYPTO_SEQIV" = yes; + "CRYPTO_ECHAINIV" = yes; + "CRYPTO_CBC" = yes; + "CRYPTO_CFB" = module; + "CRYPTO_CTR" = yes; + "CRYPTO_CTS" = yes; + "CRYPTO_ECB" = yes; + "CRYPTO_LRW" = module; + "CRYPTO_OFB" = module; + "CRYPTO_PCBC" = module; + "CRYPTO_XTS" = yes; + "CRYPTO_KEYWRAP" = module; + "CRYPTO_NHPOLY1305" = module; + "CRYPTO_ADIANTUM" = module; + "CRYPTO_ESSIV" = module; + "CRYPTO_CMAC" = yes; + "CRYPTO_HMAC" = yes; + "CRYPTO_XCBC" = yes; + "CRYPTO_VMAC" = yes; + "CRYPTO_CRC32C" = yes; + "CRYPTO_CRC32" = yes; + "CRYPTO_XXHASH" = yes; + "CRYPTO_BLAKE2B" = yes; + "CRYPTO_BLAKE2S" = module; + "CRYPTO_CRCT10DIF" = yes; + "CRYPTO_GHASH" = yes; + "CRYPTO_POLY1305" = yes; + "CRYPTO_MD4" = yes; + "CRYPTO_MD5" = yes; + "CRYPTO_MICHAEL_MIC" = yes; + "CRYPTO_RMD128" = yes; + "CRYPTO_RMD160" = yes; + "CRYPTO_RMD256" = yes; + "CRYPTO_RMD320" = yes; + "CRYPTO_SHA1" = yes; + "CRYPTO_SHA256" = yes; + "CRYPTO_SHA512" = yes; + "CRYPTO_SHA3" = yes; + "CRYPTO_SM3" = module; + "CRYPTO_STREEBOG" = module; + "CRYPTO_TGR192" = yes; + "CRYPTO_WP512" = yes; + "CRYPTO_AES" = yes; + "CRYPTO_AES_TI" = yes; + "CRYPTO_ANUBIS" = yes; + "CRYPTO_ARC4" = module; + "CRYPTO_BLOWFISH" = yes; + "CRYPTO_BLOWFISH_COMMON" = yes; + "CRYPTO_CAMELLIA" = yes; + "CRYPTO_CAST_COMMON" = yes; + "CRYPTO_CAST5" = yes; + "CRYPTO_CAST6" = yes; + "CRYPTO_DES" = yes; + "CRYPTO_FCRYPT" = yes; + "CRYPTO_KHAZAD" = yes; + "CRYPTO_SALSA20" = yes; + "CRYPTO_CHACHA20" = yes; + "CRYPTO_SEED" = yes; + "CRYPTO_SERPENT" = yes; + "CRYPTO_SM4" = module; + "CRYPTO_TEA" = yes; + "CRYPTO_TWOFISH" = yes; + "CRYPTO_TWOFISH_COMMON" = yes; + "CRYPTO_DEFLATE" = yes; + "CRYPTO_LZO" = yes; + "CRYPTO_842" = module; + "CRYPTO_LZ4" = module; + "CRYPTO_LZ4HC" = module; + "CRYPTO_ZSTD" = module; + "CRYPTO_ANSI_CPRNG" = module; + "CRYPTO_DRBG_MENU" = yes; + "CRYPTO_DRBG_HMAC" = yes; + "CRYPTO_DRBG_HASH" = yes; + "CRYPTO_DRBG_CTR" = yes; + "CRYPTO_DRBG" = yes; + "CRYPTO_JITTERENTROPY" = yes; + "CRYPTO_USER_API" = module; + "CRYPTO_USER_API_HASH" = module; + "CRYPTO_USER_API_SKCIPHER" = module; + "CRYPTO_USER_API_RNG" = module; + "CRYPTO_USER_API_AEAD" = module; + "CRYPTO_STATS" = yes; + "CRYPTO_HASH_INFO" = yes; + "CRYPTO_LIB_AES" = yes; + "CRYPTO_LIB_ARC4" = module; + "CRYPTO_LIB_BLAKE2S_GENERIC" = module; + "CRYPTO_LIB_BLAKE2S" = module; + "CRYPTO_ARCH_HAVE_LIB_CHACHA" = yes; + "CRYPTO_LIB_CHACHA_GENERIC" = yes; + "CRYPTO_LIB_CHACHA" = module; + "CRYPTO_LIB_CURVE25519_GENERIC" = module; + "CRYPTO_LIB_CURVE25519" = module; + "CRYPTO_LIB_DES" = yes; + "CRYPTO_LIB_POLY1305_RSIZE" = freeform "9"; + "CRYPTO_ARCH_HAVE_LIB_POLY1305" = module; + "CRYPTO_LIB_POLY1305_GENERIC" = yes; + "CRYPTO_LIB_POLY1305" = module; + "CRYPTO_LIB_CHACHA20POLY1305" = module; + "CRYPTO_LIB_SHA256" = yes; + "CRYPTO_HW" = yes; + "CRYPTO_DEV_ALLWINNER" = yes; + "CRYPTO_DEV_SUN4I_SS" = module; + "CRYPTO_DEV_SUN8I_CE" = module; + "CRYPTO_DEV_SUN8I_SS" = module; + "CRYPTO_DEV_ATMEL_I2C" = module; + "CRYPTO_DEV_ATMEL_ECC" = module; + "CRYPTO_DEV_ATMEL_SHA204A" = module; + "CRYPTO_DEV_NITROX" = module; + "CRYPTO_DEV_NITROX_CNN55XX" = module; + "CRYPTO_DEV_CAVIUM_ZIP" = module; + "CRYPTO_DEV_ROCKCHIP" = module; + "CRYPTO_DEV_VIRTIO" = module; + "CRYPTO_DEV_SAFEXCEL" = module; + "CRYPTO_DEV_CCREE" = module; + "CRYPTO_DEV_HISI_SEC" = module; + "CRYPTO_DEV_AMLOGIC_GXL" = yes; + "CRYPTO_DEV_AMLOGIC_GXL_DEBUG" = yes; + "ASYMMETRIC_KEY_TYPE" = yes; + "ASYMMETRIC_PUBLIC_KEY_SUBTYPE" = yes; + "X509_CERTIFICATE_PARSER" = yes; + "PKCS8_PRIVATE_KEY_PARSER" = module; + "PKCS7_MESSAGE_PARSER" = yes; + "PKCS7_TEST_KEY" = module; + "BINARY_PRINTF" = yes; + "RAID6_PQ" = yes; + "RAID6_PQ_BENCHMARK" = yes; + "LINEAR_RANGES" = yes; + "PACKING" = yes; + "BITREVERSE" = yes; + "HAVE_ARCH_BITREVERSE" = yes; + "GENERIC_STRNCPY_FROM_USER" = yes; + "GENERIC_STRNLEN_USER" = yes; + "GENERIC_NET_UTILS" = yes; + "CORDIC" = module; + "RATIONAL" = yes; + "GENERIC_PCI_IOMAP" = yes; + "ARCH_USE_CMPXCHG_LOCKREF" = yes; + "ARCH_HAS_FAST_MULTIPLIER" = yes; + "ARCH_USE_SYM_ANNOTATIONS" = yes; + "CRC_CCITT" = yes; + "CRC16" = yes; + "CRC_T10DIF" = yes; + "CRC_ITU_T" = yes; + "CRC32" = yes; + "CRC32_SLICEBY8" = yes; + "CRC64" = yes; + "CRC4" = module; + "CRC7" = yes; + "LIBCRC32C" = yes; + "CRC8" = module; + "XXHASH" = yes; + "AUDIT_GENERIC" = yes; + "AUDIT_ARCH_COMPAT_GENERIC" = yes; + "AUDIT_COMPAT_GENERIC" = yes; + "842_COMPRESS" = module; + "842_DECOMPRESS" = module; + "ZLIB_INFLATE" = yes; + "ZLIB_DEFLATE" = yes; + "LZO_COMPRESS" = yes; + "LZO_DECOMPRESS" = yes; + "LZ4_COMPRESS" = module; + "LZ4HC_COMPRESS" = module; + "LZ4_DECOMPRESS" = yes; + "ZSTD_COMPRESS" = yes; + "ZSTD_DECOMPRESS" = yes; + "XZ_DEC" = yes; + "XZ_DEC_X86" = yes; + "XZ_DEC_POWERPC" = yes; + "XZ_DEC_IA64" = yes; + "XZ_DEC_ARM" = yes; + "XZ_DEC_ARMTHUMB" = yes; + "XZ_DEC_SPARC" = yes; + "XZ_DEC_BCJ" = yes; + "XZ_DEC_TEST" = module; + "DECOMPRESS_GZIP" = yes; + "DECOMPRESS_BZIP2" = yes; + "DECOMPRESS_LZMA" = yes; + "DECOMPRESS_XZ" = yes; + "DECOMPRESS_LZO" = yes; + "DECOMPRESS_LZ4" = yes; + "DECOMPRESS_ZSTD" = yes; + "GENERIC_ALLOCATOR" = yes; + "REED_SOLOMON" = module; + "REED_SOLOMON_ENC8" = yes; + "REED_SOLOMON_DEC8" = yes; + "REED_SOLOMON_ENC16" = yes; + "REED_SOLOMON_DEC16" = yes; + "TEXTSEARCH" = yes; + "TEXTSEARCH_KMP" = module; + "TEXTSEARCH_BM" = module; + "TEXTSEARCH_FSM" = module; + "INTERVAL_TREE" = yes; + "XARRAY_MULTI" = yes; + "ASSOCIATIVE_ARRAY" = yes; + "HAS_IOMEM" = yes; + "HAS_IOPORT_MAP" = yes; + "HAS_DMA" = yes; + "DMA_OPS" = yes; + "NEED_SG_DMA_LENGTH" = yes; + "NEED_DMA_MAP_STATE" = yes; + "ARCH_DMA_ADDR_T_64BIT" = yes; + "DMA_DECLARE_COHERENT" = yes; + "ARCH_HAS_SETUP_DMA_OPS" = yes; + "ARCH_HAS_TEARDOWN_DMA_OPS" = yes; + "ARCH_HAS_SYNC_DMA_FOR_DEVICE" = yes; + "ARCH_HAS_SYNC_DMA_FOR_CPU" = yes; + "ARCH_HAS_DMA_PREP_COHERENT" = yes; + "SWIOTLB" = yes; + "DMA_NONCOHERENT_MMAP" = yes; + "DMA_COHERENT_POOL" = yes; + "DMA_REMAP" = yes; + "DMA_DIRECT_REMAP" = yes; + "DMA_CMA" = yes; + "CMA_SIZE_MBYTES" = freeform "128"; + "CMA_SIZE_SEL_MBYTES" = yes; + "CMA_ALIGNMENT" = freeform "8"; + "SGL_ALLOC" = yes; + "CPU_RMAP" = yes; + "DQL" = yes; + "GLOB" = yes; + "GLOB_SELFTEST" = module; + "NLATTR" = yes; + "LRU_CACHE" = module; + "CLZ_TAB" = yes; + "IRQ_POLL" = yes; + "MPILIB" = yes; + "SIGNATURE" = yes; + "DIMLIB" = yes; + "LIBFDT" = yes; + "OID_REGISTRY" = yes; + "UCS2_STRING" = yes; + "HAVE_GENERIC_VDSO" = yes; + "GENERIC_GETTIMEOFDAY" = yes; + "GENERIC_VDSO_TIME_NS" = yes; + "FONT_SUPPORT" = yes; + "FONTS" = yes; + "FONT_8x8" = yes; + "FONT_8x16" = yes; + "FONT_ACORN_8x8" = yes; + "FONT_6x10" = yes; + "FONT_TER16x32" = yes; + "SG_SPLIT" = yes; + "SG_POOL" = yes; + "SBITMAP" = yes; + "PRINTK_TIME" = yes; + "CONSOLE_LOGLEVEL_DEFAULT" = freeform "7"; + "CONSOLE_LOGLEVEL_QUIET" = freeform "4"; + "MESSAGE_LOGLEVEL_DEFAULT" = freeform "4"; + "DYNAMIC_DEBUG" = yes; + "DYNAMIC_DEBUG_CORE" = yes; + "SYMBOLIC_ERRNAME" = yes; + "DEBUG_BUGVERBOSE" = yes; + "ENABLE_MUST_CHECK" = yes; + "FRAME_WARN" = freeform "2048"; + "SECTION_MISMATCH_WARN_ONLY" = yes; + "ARCH_WANT_FRAME_POINTERS" = yes; + "FRAME_POINTER" = yes; + "MAGIC_SYSRQ" = yes; + "MAGIC_SYSRQ_DEFAULT_ENABLE" = freeform "0x1"; + "MAGIC_SYSRQ_SERIAL" = yes; + "DEBUG_FS" = yes; + "DEBUG_FS_ALLOW_ALL" = yes; + "HAVE_ARCH_KGDB" = yes; + "ARCH_HAS_UBSAN_SANITIZE_ALL" = yes; + "DEBUG_KERNEL" = yes; + "DEBUG_MISC" = yes; + "ARCH_HAS_DEBUG_WX" = yes; + "GENERIC_PTDUMP" = yes; + "HAVE_DEBUG_KMEMLEAK" = yes; + "ARCH_HAS_DEBUG_VM_PGTABLE" = yes; + "ARCH_HAS_DEBUG_VIRTUAL" = yes; + "DEBUG_MEMORY_INIT" = yes; + "HAVE_ARCH_KASAN" = yes; + "HAVE_ARCH_KASAN_SW_TAGS" = yes; + "CC_HAS_KASAN_GENERIC" = yes; + "CC_HAS_WORKING_NOSANITIZE_ADDRESS" = yes; + "PANIC_ON_OOPS_VALUE" = freeform "0"; + "PANIC_TIMEOUT" = freeform "0"; + "TEST_LOCKUP" = module; + "SCHED_DEBUG" = yes; + "SCHED_INFO" = yes; + "DEBUG_PREEMPT" = yes; + "LOCK_DEBUGGING_SUPPORT" = yes; + "STACKTRACE" = yes; + "HAVE_DEBUG_BUGVERBOSE" = yes; + "TORTURE_TEST" = module; + "RCU_PERF_TEST" = module; + "RCU_TORTURE_TEST" = module; + "RCU_CPU_STALL_TIMEOUT" = freeform "60"; + "RCU_TRACE" = yes; + "NOP_TRACER" = yes; + "HAVE_FUNCTION_TRACER" = yes; + "HAVE_FUNCTION_GRAPH_TRACER" = yes; + "HAVE_DYNAMIC_FTRACE" = yes; + "HAVE_DYNAMIC_FTRACE_WITH_REGS" = yes; + "HAVE_FTRACE_MCOUNT_RECORD" = yes; + "HAVE_SYSCALL_TRACEPOINTS" = yes; + "HAVE_C_RECORDMCOUNT" = yes; + "TRACE_CLOCK" = yes; + "RING_BUFFER" = yes; + "EVENT_TRACING" = yes; + "CONTEXT_SWITCH_TRACER" = yes; + "TRACING" = yes; + "TRACING_SUPPORT" = yes; + "FTRACE" = yes; + "BRANCH_PROFILE_NONE" = yes; + "UPROBE_EVENTS" = yes; + "BPF_EVENTS" = yes; + "DYNAMIC_EVENTS" = yes; + "PROBE_EVENTS" = yes; + "ARCH_HAS_DEVMEM_IS_ALLOWED" = yes; + "STRICT_DEVMEM" = yes; + "KUNIT" = module; + "ARCH_HAS_KCOV" = yes; + "CC_HAS_SANCOV_TRACE_PC" = yes; + "RUNTIME_TESTING_MENU" = yes; + "BACKTRACE_SELF_TEST" = module; + "RBTREE_TEST" = module; + "REED_SOLOMON_TEST" = module; + "INTERVAL_TREE_TEST" = module; + "PERCPU_TEST" = module; + "ASYNC_RAID6_TEST" = module; + "TEST_STRSCPY" = module; + "TEST_XARRAY" = module; + "TEST_VMALLOC" = module; + "TEST_BPF" = module; + "TEST_BLACKHOLE_DEV" = module; + "TEST_MEMCAT_P" = module; + "TEST_STACKINIT" = module; + "MEMTEST" = yes; + }; +} diff --git a/make-btrfs-fs.nix b/make-btrfs-fs.nix new file mode 100644 index 0000000..10acc68 --- /dev/null +++ b/make-btrfs-fs.nix @@ -0,0 +1,74 @@ +# Builds an ext4 image containing a populated /nix/store with the closure +# of store paths passed in the storePaths parameter, in addition to the +# contents of a directory that can be populated with commands. The +# generated image is sized to only fit its contents, with the expectation +# that a script resizes the filesystem at boot time. +{ pkgs +, lib +# List of derivations to be included +, storePaths +# Whether or not to compress the resulting image with zstd +, compressImage ? false, zstd +# Shell commands to populate the ./files directory. +# All files in that directory are copied to the root of the FS. +, populateImageCommands ? "" +, volumeLabel +, uuid ? "44444444-4444-4444-8888-888888888888" +, btrfs-progs +, libfaketime +, perl +, fakeroot +}: + +let + sdClosureInfo = pkgs.buildPackages.closureInfo { rootPaths = storePaths; }; +in +pkgs.stdenv.mkDerivation { + name = "btrfs-fs.img${lib.optionalString compressImage ".zst"}"; + + nativeBuildInputs = [ btrfs-progs libfaketime perl fakeroot ] + ++ lib.optional compressImage zstd; + + buildCommand = + '' + ${if compressImage then "img=temp.img" else "img=$out"} + ( + mkdir -p ./files + ${populateImageCommands} + ) + + echo "Preparing store paths for image..." + + # Create nix/store before copying path + mkdir -p ./rootImage/nix/store + + xargs -I % cp -a --reflink=auto % -t ./rootImage/nix/store/ < ${sdClosureInfo}/store-paths + ( + GLOBIGNORE=".:.." + shopt -u dotglob + + for f in ./files/*; do + cp -a --reflink=auto -t ./rootImage/ "$f" + done + ) + + # Also include a manifest of the closures in a format suitable for nix-store --load-db + cp ${sdClosureInfo}/registration ./rootImage/nix-path-registration + + # Make a crude approximation of the size of the target image. + # If the script starts failing, increase the fudge factors here. + numInodes=$(find ./rootImage | wc -l) + numDataBlocks=$(du -s -c -B 4096 --apparent-size ./rootImage | tail -1 | awk '{ print int($1 * 1.10) }') + bytes=$((2 * 4096 * $numInodes + 4096 * $numDataBlocks)) + echo "Creating a btrfs image of $bytes bytes (numInodes=$numInodes, numDataBlocks=$numDataBlocks)" + + truncate -s $bytes $img + + faketime -f "1970-01-01 00:00:01" fakeroot mkfs.btrfs -L ${volumeLabel} -U ${uuid} -r ./rootImage $img + + if [ ${builtins.toString compressImage} ]; then + echo "Compressing image" + zstd -v --no-progress ./$img -o $out + fi + ''; +} diff --git a/patches/kernel/09e006cfb43e8ec38afe28278b210dab72e6cac8.patch b/patches/kernel/09e006cfb43e8ec38afe28278b210dab72e6cac8.patch new file mode 100644 index 0000000..4d3f645 --- /dev/null +++ b/patches/kernel/09e006cfb43e8ec38afe28278b210dab72e6cac8.patch @@ -0,0 +1,437 @@ +From 09e006cfb43e8ec38afe28278b210dab72e6cac8 Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?Uwe=20Kleine-K=C3=B6nig?= +Date: Wed, 14 Oct 2020 22:00:30 +0200 +Subject: arm64: dts: rockchip: Add basic support for Kobol's Helios64 +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + +The hardware is described in detail on Kobol's wiki at +https://wiki.kobol.io/helios64/intro/. + +Up to now the following peripherals are working: + + - UART + - Micro-SD card + - eMMC + - ethernet port 1 + - status LED + - temperature sensor on i2c bus 2 + +Signed-off-by: Uwe Kleine-König +Link: https://lore.kernel.org/r/20201014200030.845759-3-uwe@kleine-koenig.org +Signed-off-by: Heiko Stuebner +--- + arch/arm64/boot/dts/rockchip/Makefile | 1 + + .../boot/dts/rockchip/rk3399-kobol-helios64.dts | 372 +++++++++++++++++++++ + 2 files changed, 373 insertions(+) + create mode 100644 arch/arm64/boot/dts/rockchip/rk3399-kobol-helios64.dts + +diff --git a/arch/arm64/boot/dts/rockchip/Makefile b/arch/arm64/boot/dts/rockchip/Makefile +index 26661c7b736b7..28b26a874313e 100644 +--- a/arch/arm64/boot/dts/rockchip/Makefile ++++ b/arch/arm64/boot/dts/rockchip/Makefile +@@ -26,6 +26,7 @@ dtb-$(CONFIG_ARCH_ROCKCHIP) += rk3399-hugsun-x99.dtb + dtb-$(CONFIG_ARCH_ROCKCHIP) += rk3399-khadas-edge.dtb + dtb-$(CONFIG_ARCH_ROCKCHIP) += rk3399-khadas-edge-captain.dtb + dtb-$(CONFIG_ARCH_ROCKCHIP) += rk3399-khadas-edge-v.dtb ++dtb-$(CONFIG_ARCH_ROCKCHIP) += rk3399-kobol-helios64.dtb + dtb-$(CONFIG_ARCH_ROCKCHIP) += rk3399-leez-p710.dtb + dtb-$(CONFIG_ARCH_ROCKCHIP) += rk3399-nanopc-t4.dtb + dtb-$(CONFIG_ARCH_ROCKCHIP) += rk3399-nanopi-m4.dtb +diff --git a/arch/arm64/boot/dts/rockchip/rk3399-kobol-helios64.dts b/arch/arm64/boot/dts/rockchip/rk3399-kobol-helios64.dts +new file mode 100644 +index 0000000000000..2a561be724b22 +--- /dev/null ++++ b/arch/arm64/boot/dts/rockchip/rk3399-kobol-helios64.dts +@@ -0,0 +1,387 @@ ++// SPDX-License-Identifier: (GPL-2.0+ OR MIT) ++/* ++ * Copyright (c) 2020 Aditya Prayoga ++ */ ++ ++/* ++ * The Kobol Helios64 is a board designed to operate as a NAS and optionally ++ * ships with an enclosing that can host five 2.5" hard disks. ++ * ++ * See https://wiki.kobol.io/helios64/intro/ for further details. ++ */ ++ ++/dts-v1/; ++#include "rk3399.dtsi" ++#include "rk3399-opp.dtsi" ++ ++/ { ++ model = "Kobol Helios64"; ++ compatible = "kobol,helios64", "rockchip,rk3399"; ++ ++ avdd_1v8_s0: avdd-1v8-s0 { ++ compatible = "regulator-fixed"; ++ regulator-name = "avdd_1v8_s0"; ++ regulator-always-on; ++ regulator-boot-on; ++ regulator-min-microvolt = <1800000>; ++ regulator-max-microvolt = <1800000>; ++ vin-supply = <&vcc3v3_sys_s3>; ++ }; ++ ++ clkin_gmac: external-gmac-clock { ++ compatible = "fixed-clock"; ++ clock-frequency = <125000000>; ++ clock-output-names = "clkin_gmac"; ++ #clock-cells = <0>; ++ }; ++ ++ leds { ++ compatible = "gpio-leds"; ++ pinctrl-names = "default"; ++ pinctrl-0 = <&sys_grn_led_on &sys_red_led_on>; ++ ++ led-0 { ++ label = "helios64:green:status"; ++ gpios = <&gpio0 RK_PB4 GPIO_ACTIVE_HIGH>; ++ default-state = "on"; ++ }; ++ ++ led-1 { ++ label = "helios64:red:fault"; ++ gpios = <&gpio0 RK_PB5 GPIO_ACTIVE_HIGH>; ++ default-state = "keep"; ++ }; ++ }; ++ ++ vcc1v8_sys_s0: vcc1v8-sys-s0 { ++ compatible = "regulator-fixed"; ++ regulator-name = "vcc1v8_sys_s0"; ++ regulator-always-on; ++ regulator-boot-on; ++ regulator-min-microvolt = <1800000>; ++ regulator-max-microvolt = <1800000>; ++ vin-supply = <&vcc1v8_sys_s3>; ++ }; ++ ++ vcc3v0_sd: vcc3v0-sd { ++ compatible = "regulator-fixed"; ++ enable-active-high; ++ gpio = <&gpio0 RK_PA1 GPIO_ACTIVE_HIGH>; ++ regulator-name = "vcc3v0_sd"; ++ regulator-boot-on; ++ regulator-min-microvolt = <3000000>; ++ regulator-max-microvolt = <3000000>; ++ pinctrl-names = "default"; ++ pinctrl-0 = <&sdmmc0_pwr_h>; ++ vin-supply = <&vcc3v3_sys_s3>; ++ }; ++ ++ vcc3v3_sys_s3: vcc_lan: vcc3v3-sys-s3 { ++ compatible = "regulator-fixed"; ++ regulator-name = "vcc3v3_sys_s3"; ++ regulator-always-on; ++ regulator-boot-on; ++ regulator-min-microvolt = <3300000>; ++ regulator-max-microvolt = <3300000>; ++ vin-supply = <&vcc5v0_sys>; ++ ++ regulator-state-mem { ++ regulator-on-in-suspend; ++ }; ++ }; ++ ++ vcc5v0_sys: vcc5v0-sys { ++ compatible = "regulator-fixed"; ++ regulator-name = "vcc5v0_sys"; ++ regulator-always-on; ++ regulator-boot-on; ++ regulator-min-microvolt = <5000000>; ++ regulator-max-microvolt = <5000000>; ++ vin-supply = <&vcc12v_dcin_bkup>; ++ ++ regulator-state-mem { ++ regulator-on-in-suspend; ++ }; ++ }; ++ ++ vcc12v_dcin: vcc12v-dcin { ++ compatible = "regulator-fixed"; ++ regulator-name = "vcc12v_dcin"; ++ regulator-always-on; ++ regulator-boot-on; ++ regulator-min-microvolt = <12000000>; ++ regulator-max-microvolt = <12000000>; ++ }; ++ ++ vcc12v_dcin_bkup: vcc12v-dcin-bkup { ++ compatible = "regulator-fixed"; ++ regulator-name = "vcc12v_dcin_bkup"; ++ regulator-always-on; ++ regulator-boot-on; ++ regulator-min-microvolt = <12000000>; ++ regulator-max-microvolt = <12000000>; ++ vin-supply = <&vcc12v_dcin>; ++ }; ++}; ++ ++/* ++ * The system doesn't run stable with cpu freq enabled, so disallow the lower ++ * frequencies until this problem is properly understood and resolved. ++ */ ++&cluster0_opp { ++ /delete-node/ opp00; ++ /delete-node/ opp01; ++ /delete-node/ opp02; ++ /delete-node/ opp03; ++ /delete-node/ opp04; ++}; ++ ++&cluster1_opp { ++ /delete-node/ opp00; ++ /delete-node/ opp01; ++ /delete-node/ opp02; ++ /delete-node/ opp03; ++ /delete-node/ opp04; ++ /delete-node/ opp05; ++ /delete-node/ opp06; ++}; ++ ++&cpu_b0 { ++ cpu-supply = <&vdd_cpu_b>; ++}; ++ ++&cpu_b1 { ++ cpu-supply = <&vdd_cpu_b>; ++}; ++ ++&cpu_l0 { ++ cpu-supply = <&vdd_cpu_l>; ++}; ++ ++&cpu_l1 { ++ cpu-supply = <&vdd_cpu_l>; ++}; ++ ++&cpu_l2 { ++ cpu-supply = <&vdd_cpu_l>; ++}; ++ ++&cpu_l3 { ++ cpu-supply = <&vdd_cpu_l>; ++}; ++ ++&emmc_phy { ++ status = "okay"; ++}; ++ ++&gmac { ++ assigned-clock-parents = <&clkin_gmac>; ++ assigned-clocks = <&cru SCLK_RMII_SRC>; ++ clock_in_out = "input"; ++ phy-mode = "rgmii"; ++ phy-supply = <&vcc_lan>; ++ pinctrl-names = "default"; ++ pinctrl-0 = <&rgmii_pins &gphy_reset>; ++ rx_delay = <0x20>; ++ tx_delay = <0x28>; ++ snps,reset-active-low; ++ snps,reset-delays-us = <0 10000 50000>; ++ snps,reset-gpio = <&gpio3 RK_PB7 GPIO_ACTIVE_LOW>; ++ status = "okay"; ++}; ++ ++&i2c0 { ++ clock-frequency = <400000>; ++ i2c-scl-rising-time-ns = <168>; ++ i2c-scl-falling-time-ns = <4>; ++ status = "okay"; ++ ++ rk808: pmic@1b { ++ compatible = "rockchip,rk808"; ++ reg = <0x1b>; ++ interrupt-parent = <&gpio0>; ++ interrupts = <10 IRQ_TYPE_LEVEL_LOW>; ++ clock-output-names = "xin32k", "rk808-clkout2"; ++ pinctrl-names = "default"; ++ pinctrl-0 = <&pmic_int_l>; ++ vcc1-supply = <&vcc5v0_sys>; ++ vcc2-supply = <&vcc5v0_sys>; ++ vcc3-supply = <&vcc5v0_sys>; ++ vcc4-supply = <&vcc5v0_sys>; ++ vcc6-supply = <&vcc5v0_sys>; ++ vcc7-supply = <&vcc5v0_sys>; ++ vcc8-supply = <&vcc3v3_sys_s3>; ++ vcc9-supply = <&vcc5v0_sys>; ++ vcc10-supply = <&vcc5v0_sys>; ++ vcc11-supply = <&vcc5v0_sys>; ++ vcc12-supply = <&vcc3v3_sys_s3>; ++ vddio-supply = <&vcc3v0_s3>; ++ wakeup-source; ++ #clock-cells = <1>; ++ ++ regulators { ++ vdd_cpu_l: DCDC_REG2 { ++ regulator-name = "vdd_cpu_l"; ++ regulator-always-on; ++ regulator-boot-on; ++ regulator-min-microvolt = <750000>; ++ regulator-max-microvolt = <1350000>; ++ regulator-ramp-delay = <6001>; ++ ++ regulator-state-mem { ++ regulator-off-in-suspend; ++ }; ++ }; ++ ++ vcc1v8_sys_s3: DCDC_REG4 { ++ regulator-name = "vcc1v8_sys_s3"; ++ regulator-always-on; ++ regulator-boot-on; ++ regulator-min-microvolt = <1800000>; ++ regulator-max-microvolt = <1800000>; ++ ++ regulator-state-mem { ++ regulator-on-in-suspend; ++ regulator-suspend-microvolt = <1800000>; ++ }; ++ }; ++ ++ vcc_sdio_s0: LDO_REG4 { ++ regulator-name = "vcc_sdio_s0"; ++ regulator-always-on; ++ regulator-boot-on; ++ regulator-min-microvolt = <1800000>; ++ regulator-max-microvolt = <3000000>; ++ ++ regulator-state-mem { ++ regulator-on-in-suspend; ++ regulator-suspend-microvolt = <3000000>; ++ }; ++ }; ++ ++ vcc3v0_s3: LDO_REG8 { ++ regulator-name = "vcc3v0_s3"; ++ regulator-always-on; ++ regulator-boot-on; ++ regulator-min-microvolt = <3000000>; ++ regulator-max-microvolt = <3000000>; ++ ++ regulator-state-mem { ++ regulator-on-in-suspend; ++ regulator-suspend-microvolt = <3000000>; ++ }; ++ }; ++ }; ++ }; ++ ++ vdd_cpu_b: regulator@40 { ++ compatible = "silergy,syr827"; ++ reg = <0x40>; ++ fcs,suspend-voltage-selector = <1>; ++ regulator-name = "vdd_cpu_b"; ++ regulator-always-on; ++ regulator-boot-on; ++ regulator-min-microvolt = <712500>; ++ regulator-max-microvolt = <1500000>; ++ regulator-ramp-delay = <1000>; ++ vin-supply = <&vcc5v0_sys>; ++ ++ regulator-state-mem { ++ regulator-off-in-suspend; ++ }; ++ }; ++}; ++ ++&i2c2 { ++ clock-frequency = <400000>; ++ i2c-scl-rising-time-ns = <160>; ++ i2c-scl-falling-time-ns = <30>; ++ status = "okay"; ++ ++ temp@4c { ++ compatible = "national,lm75"; ++ reg = <0x4c>; ++ }; ++}; ++ ++&io_domains { ++ audio-supply = <&vcc1v8_sys_s0>; ++ bt656-supply = <&vcc1v8_sys_s0>; ++ gpio1830-supply = <&vcc3v0_s3>; ++ sdmmc-supply = <&vcc_sdio_s0>; ++ status = "okay"; ++}; ++ ++&pcie0 { ++ num-lanes = <2>; ++ max-link-speed = <2>; ++ pinctrl-names = "default"; ++ pinctrl-0 = <&pcie_prst &pcie_clkreqn_cpm>; ++ vpcie12v-supply = <&vcc12v_dcin>; ++ vpcie3v3-supply = <&pcie_power>; ++ vpcie1v8-supply = <&avdd_1v8_s0>; ++ vpcie0v9-supply = <&avdd_0v9_s0>; ++ status = "okay"; ++}; ++ ++&pcie_phy { ++ status = "okay"; ++}; ++ ++&pinctrl { ++ gmac { ++ gphy_reset: gphy-reset { ++ rockchip,pins = <3 RK_PB7 RK_FUNC_GPIO &pcfg_output_low>; ++ }; ++ }; ++ ++ leds { ++ sys_grn_led_on: sys-grn-led-on { ++ rockchip,pins = <0 RK_PB4 RK_FUNC_GPIO &pcfg_pull_down>; ++ }; ++ ++ sys_red_led_on: sys-red-led-on { ++ rockchip,pins = <0 RK_PB5 RK_FUNC_GPIO &pcfg_pull_down>; ++ }; ++ }; ++ ++ pmic { ++ pmic_int_l: pmic-int-l { ++ rockchip,pins = <0 RK_PB2 RK_FUNC_GPIO &pcfg_pull_up>; ++ }; ++ }; ++ ++ vcc3v0-sd { ++ sdmmc0_pwr_h: sdmmc0-pwr-h { ++ rockchip,pins = <0 RK_PA1 RK_FUNC_GPIO &pcfg_pull_up>; ++ }; ++ }; ++}; ++ ++&pmu_io_domains { ++ pmu1830-supply = <&vcc3v0_s3>; ++ status = "okay"; ++}; ++ ++&sdhci { ++ bus-width = <8>; ++ mmc-hs200-1_8v; ++ non-removable; ++ vqmmc-supply = <&vcc1v8_sys_s0>; ++ status = "okay"; ++}; ++ ++&sdmmc { ++ bus-width = <4>; ++ cap-sd-highspeed; ++ cd-gpios = <&gpio0 RK_PA7 GPIO_ACTIVE_LOW>; ++ disable-wp; ++ pinctrl-names = "default"; ++ pinctrl-0 = <&sdmmc_clk &sdmmc_cmd &sdmmc_cd &sdmmc_bus4>; ++ vmmc-supply = <&vcc3v0_sd>; ++ vqmmc-supply = <&vcc_sdio_s0>; ++ status = "okay"; ++}; ++ ++&uart2 { ++ status = "okay"; ++}; +-- +cgit 1.2.3-1.el7 diff --git a/patches/kernel/115200baud.patch b/patches/kernel/115200baud.patch new file mode 100644 index 0000000..b0fcdd9 --- /dev/null +++ b/patches/kernel/115200baud.patch @@ -0,0 +1,14 @@ +diff --git a/arch/arm64/boot/dts/rockchip/rk3399-kobol-helios64.dts b/arch/arm64/boot/dts/rockchip/rk3399-kobol-helios64.dts +index 714616618..b1fb824f3 100644 +--- a/arch/arm64/boot/dts/rockchip/rk3399-kobol-helios64.dts ++++ b/arch/arm64/boot/dts/rockchip/rk3399-kobol-helios64.dts +@@ -16,6 +16,11 @@ + compatible = "kobol,helios64", "rockchip,rk3399"; + ++ chosen { ++ bootargs = "earlycon=uart8250,mmio32,0xff1a0000 earlyprintk"; ++ stdout-path = "serial2:115200n8"; ++ }; ++ + adc-keys { + compatible = "adc-keys"; diff --git a/patches/kernel/62dbf80fc581a8eed7288ed7aca24446054eb616.patch b/patches/kernel/62dbf80fc581a8eed7288ed7aca24446054eb616.patch new file mode 100644 index 0000000..475388f --- /dev/null +++ b/patches/kernel/62dbf80fc581a8eed7288ed7aca24446054eb616.patch @@ -0,0 +1,38 @@ +From 62dbf80fc581a8eed7288ed7aca24446054eb616 Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?Uwe=20Kleine-K=C3=B6nig?= +Date: Mon, 2 Nov 2020 16:06:58 +0100 +Subject: dt-bindings: arm: rockchip: Add Kobol Helios64 +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + +Document the new board by Kobol introduced recently in +rockchip/rk3399-kobol-helios64.dts. + +Signed-off-by: Uwe Kleine-König +Acked-by: Rob Herring +Link: https://lore.kernel.org/r/20201102150658.167161-1-uwe@kleine-koenig.org +Signed-off-by: Heiko Stuebner +--- + Documentation/devicetree/bindings/arm/rockchip.yaml | 5 +++++ + 1 file changed, 5 insertions(+) + +diff --git a/Documentation/devicetree/bindings/arm/rockchip.yaml b/Documentation/devicetree/bindings/arm/rockchip.yaml +index 65b4cc2c63f7c..70fa4d98db564 100644 +--- a/Documentation/devicetree/bindings/arm/rockchip.yaml ++++ b/Documentation/devicetree/bindings/arm/rockchip.yaml +@@ -381,6 +381,11 @@ properties: + - khadas,edge-v + - const: rockchip,rk3399 + ++ - description: Kobol Helios64 ++ items: ++ - const: kobol,helios64 ++ - const: rockchip,rk3399 ++ + - description: Mecer Xtreme Mini S6 + items: + - const: mecer,xms6 +-- +cgit 1.2.3-1.el7 + diff --git a/patches/kernel/add-board-helios64.patch b/patches/kernel/add-board-helios64.patch new file mode 100644 index 0000000..8ffcacf --- /dev/null +++ b/patches/kernel/add-board-helios64.patch @@ -0,0 +1,1183 @@ +From 8f81af6941883fdc1d238d85bf282c2a61ffa349 Mon Sep 17 00:00:00 2001 +From: Aditya Prayoga +Date: Tue, 15 Sep 2020 20:04:22 +0700 +Subject: [PATCH] Add board Helios64 + +Signed-off-by: Aditya Prayoga +--- + arch/arm64/boot/dts/rockchip/Makefile | 1 + + .../boot/dts/rockchip/rk3399-kobol-helios64.dts | 1084 +++++++++++++++++ + 2 files changed, 1085 insertions(+) + create mode 100644 arch/arm64/boot/dts/rockchip/rk3399-kobol-helios64.dts + +diff --git a/arch/arm64/boot/dts/rockchip/Makefile b/arch/arm64/boot/dts/rockchip/Makefile +index 473e14e12..b8e6e86e0 100644 +--- a/arch/arm64/boot/dts/rockchip/Makefile ++++ b/arch/arm64/boot/dts/rockchip/Makefile +@@ -25,6 +25,7 @@ dtb-$(CONFIG_ARCH_ROCKCHIP) += rk3399-gru-bob.dtb + dtb-$(CONFIG_ARCH_ROCKCHIP) += rk3399-gru-kevin.dtb + dtb-$(CONFIG_ARCH_ROCKCHIP) += rk3399-gru-scarlet-inx.dtb + dtb-$(CONFIG_ARCH_ROCKCHIP) += rk3399-gru-scarlet-kd.dtb ++dtb-$(CONFIG_ARCH_ROCKCHIP) += rk3399-kobol-helios64.dtb + dtb-$(CONFIG_ARCH_ROCKCHIP) += rk3399-hugsun-x99.dtb + dtb-$(CONFIG_ARCH_ROCKCHIP) += rk3399-khadas-edge.dtb + dtb-$(CONFIG_ARCH_ROCKCHIP) += rk3399-khadas-edge-captain.dtb +diff --git a/arch/arm64/boot/dts/rockchip/rk3399-kobol-helios64.dts b/arch/arm64/boot/dts/rockchip/rk3399-kobol-helios64.dts +new file mode 100644 +index 000000000..fae17f416 +--- /dev/null ++++ b/arch/arm64/boot/dts/rockchip/rk3399-kobol-helios64.dts +@@ -0,0 +1,1150 @@ ++// SPDX-License-Identifier: (GPL-2.0+ OR MIT) ++/* ++ * Copyright (c) 2020 Aditya Prayoga (aditya@kobol.io) ++ */ ++ ++/dts-v1/; ++#include ++#include ++#include ++#include ++#include "rk3399.dtsi" ++#include "rk3399-opp.dtsi" ++ ++/ { ++ model = "Helios64"; ++ compatible = "kobol,helios64", "rockchip,rk3399"; ++ ++ adc-keys { ++ compatible = "adc-keys"; ++ io-channels = <&saradc 1>; ++ io-channel-names = "buttons"; ++ keyup-threshold-microvolt = <1800000>; ++ poll-interval = <100>; ++ ++ user2-button { ++ label = "User Button 2"; ++ linux,code = ; ++ press-threshold-microvolt = <100000>; ++ }; ++ }; ++ ++ beeper: beeper { ++ compatible = "gpio-beeper"; ++ gpios = <&gpio4 RK_PD3 GPIO_ACTIVE_HIGH>; ++ }; ++ ++ clkin_gmac: external-gmac-clock { ++ compatible = "fixed-clock"; ++ clock-frequency = <125000000>; ++ clock-output-names = "clkin_gmac"; ++ #clock-cells = <0>; ++ }; ++ ++ vcc12v_dcin: vcc12v-dcin { ++ compatible = "regulator-fixed"; ++ regulator-name = "vcc12v_dcin"; ++ regulator-always-on; ++ regulator-boot-on; ++ regulator-min-microvolt = <12000000>; ++ regulator-max-microvolt = <12000000>; ++ }; ++ ++ vcc12v_dcin_bkup: vcc12v-dcin-bkup { ++ compatible = "regulator-fixed"; ++ regulator-name = "vcc12v_dcin_bkup"; ++ regulator-always-on; ++ regulator-boot-on; ++ regulator-min-microvolt = <12000000>; ++ regulator-max-microvolt = <12000000>; ++ vin-supply = <&vcc12v_dcin>; ++ }; ++ ++ vcc12v_hdd: vcc12v-hdd { ++ compatible = "regulator-fixed"; ++ regulator-name = "vcc12v_hdd"; ++ regulator-always-on; ++ regulator-boot-on; ++ regulator-min-microvolt = <12000000>; ++ regulator-max-microvolt = <12000000>; ++ vin-supply = <&vcc12v_dcin_bkup>; ++ }; ++ ++ /* switched by pmic_sleep */ ++ vcc1v8_sys_s0: vcc1v8-sys-s0 { ++ compatible = "regulator-fixed"; ++ regulator-name = "vcc1v8_sys_s0"; ++ regulator-always-on; ++ regulator-boot-on; ++ regulator-min-microvolt = <1800000>; ++ regulator-max-microvolt = <1800000>; ++ vin-supply = <&vcc1v8_sys_s3>; ++ }; ++ ++ vcc0v9_s3: vcc0v9-s3 { ++ compatible = "regulator-fixed"; ++ regulator-name = "vcc0v9_s3"; ++ regulator-always-on; ++ regulator-boot-on; ++ regulator-min-microvolt = <900000>; ++ regulator-max-microvolt = <900000>; ++ vin-supply = <&vcc3v3_sys_s3>; ++ }; ++ ++ avdd_0v9_s0: avdd-0v9-s0 { ++ compatible = "regulator-fixed"; ++ regulator-name = "avdd_0v9_s0"; ++ regulator-always-on; ++ regulator-boot-on; ++ regulator-min-microvolt = <900000>; ++ regulator-max-microvolt = <900000>; ++ vin-supply = <&vcc1v8_sys_s3>; ++ }; ++ ++ avdd_1v8_s0: avdd-1v8-s0 { ++ compatible = "regulator-fixed"; ++ regulator-name = "avdd_1v8_s0"; ++ regulator-always-on; ++ regulator-boot-on; ++ regulator-min-microvolt = <1800000>; ++ regulator-max-microvolt = <1800000>; ++ vin-supply = <&vcc3v3_sys_s3>; ++ }; ++ ++ pcie_power: pcie-power { ++ compatible = "regulator-fixed"; ++ enable-active-high; ++ gpio = <&gpio1 RK_PD0 GPIO_ACTIVE_HIGH>; ++ pinctrl-names = "default"; ++ pinctrl-0 = <&pcie_pwr_en>; ++ regulator-name = "pcie_power"; ++ regulator-boot-on; ++ startup-delay-us = <10000>; ++ vin-supply = <&vcc5v0_perdev>; ++ }; ++ ++ vcc3v3_sys_s3: vcc_lan: vcc3v3-sys-s3 { ++ compatible = "regulator-fixed"; ++ regulator-name = "vcc3v3_sys_s3"; ++ regulator-always-on; ++ regulator-boot-on; ++ regulator-min-microvolt = <3300000>; ++ regulator-max-microvolt = <3300000>; ++ vin-supply = <&vcc5v0_sys>; ++ ++ regulator-state-mem { ++ regulator-on-in-suspend; ++ }; ++ }; ++ ++ vcc3v0_sd: vcc3v0-sd { ++ compatible = "regulator-fixed"; ++ regulator-name = "vcc3v0_sd"; ++ regulator-boot-on; ++ regulator-min-microvolt = <3000000>; ++ regulator-max-microvolt = <3000000>; ++ vin-supply = <&vcc3v3_sys_s3>; ++ }; ++ ++ vcc5v0_usb: vcc5v0-usb { ++ compatible = "regulator-fixed"; ++ enable-active-high; ++ gpio = <&gpio1 RK_PC6 GPIO_ACTIVE_HIGH>; ++ pinctrl-names = "default"; ++ pinctrl-0 = <&vcc5v0_usb_en>; ++ regulator-name = "vcc5v0_usb"; ++ regulator-always-on; ++ regulator-boot-on; ++ regulator-min-microvolt = <5000000>; ++ regulator-max-microvolt = <5000000>; ++ vin-supply = <&vcc5v0_perdev>; ++ }; ++ ++ vcc5v0_typec: vcc5v0-typec-regulator { ++ compatible = "regulator-fixed"; ++ enable-active-high; ++ gpio = <&gpio1 RK_PA3 GPIO_ACTIVE_HIGH>; ++ pinctrl-names = "default"; ++ pinctrl-0 = <&fusb0_vbus_en>; ++ regulator-name = "vcc5v0_typec"; ++ vin-supply = <&vcc5v0_usb>; ++ }; ++ ++ vcc5v0_perdev: vcc5v0-perdev { ++ compatible = "regulator-fixed"; ++ regulator-name = "vcc5v0_perdev"; ++ regulator-always-on; ++ regulator-boot-on; ++ regulator-min-microvolt = <5000000>; ++ regulator-max-microvolt = <5000000>; ++ vin-supply = <&vcc12v_dcin_bkup>; ++ }; ++ ++ vcc5v0_hdd: vcc5v0-hdd { ++ compatible = "regulator-fixed"; ++ regulator-name = "vcc5v0_hdd"; ++ regulator-always-on; ++ regulator-boot-on; ++ regulator-min-microvolt = <5000000>; ++ regulator-max-microvolt = <5000000>; ++ vin-supply = <&vcc12v_dcin_bkup>; ++ }; ++ ++ vcc5v0_sys: vcc5v0-sys { ++ compatible = "regulator-fixed"; ++ regulator-name = "vcc5v0_sys"; ++ regulator-always-on; ++ regulator-boot-on; ++ regulator-min-microvolt = <5000000>; ++ regulator-max-microvolt = <5000000>; ++ vin-supply = <&vcc12v_dcin_bkup>; ++ ++ regulator-state-mem { ++ regulator-on-in-suspend; ++ }; ++ }; ++ ++ vdd_log: vdd-log { ++ compatible = "pwm-regulator"; ++ pwms = <&pwm2 0 25000 1>; ++ regulator-name = "vdd_log"; ++ regulator-always-on; ++ regulator-boot-on; ++ regulator-min-microvolt = <830000>; ++ regulator-max-microvolt = <1400000>; ++ vin-supply = <&vcc5v0_sys>; ++ regulator-state-mem { ++ regulator-on-in-suspend; ++ regulator-suspend-microvolt = <900000>; ++ }; ++ }; ++ ++ power_hdd_a: power-hdd-a { ++ compatible = "regulator-fixed"; ++ enable-active-high; ++ gpio = <&gpio1 RK_PA0 GPIO_ACTIVE_HIGH>; ++ pinctrl-names = "default"; ++ pinctrl-0 = <&hdd_a_power>; ++ regulator-name = "power_hdd_a"; ++ regulator-always-on; ++ regulator-boot-on; ++ }; ++ ++ power_hdd_b: power-hdd-b { ++ compatible = "regulator-fixed"; ++ enable-active-high; ++ gpio = <&gpio1 RK_PA1 GPIO_ACTIVE_HIGH>; ++ pinctrl-names = "default"; ++ pinctrl-0 = <&hdd_b_power>; ++ regulator-name = "power_hdd_b"; ++ regulator-always-on; ++ regulator-boot-on; ++ }; ++ ++ usblan_power: usblan-power { ++ compatible = "regulator-fixed"; ++ enable-active-high; ++ gpio = <&gpio1 RK_PC7 GPIO_ACTIVE_HIGH>; ++ pinctrl-names = "default"; ++ pinctrl-0 = <&usb_lan_en>; ++ regulator-name = "usblan_power"; ++ regulator-always-on; ++ regulator-boot-on; ++ vin-supply = <&vcc5v0_usb>; ++ }; ++ ++ fan1: p7-fan { ++ compatible = "pwm-fan"; ++ pwms = <&pwm0 0 40000 0>; ++ cooling-min-state = <0>; ++ cooling-max-state = <3>; ++ #cooling-cells = <2>; ++ cooling-levels = <0 80 170 255>; ++ }; ++ ++ fan2: p6-fan { ++ compatible = "pwm-fan"; ++ pwms = <&pwm1 0 40000 0>; ++ cooling-min-state = <0>; ++ cooling-max-state = <3>; ++ #cooling-cells = <2>; ++ cooling-levels = <0 80 170 255>; ++ }; ++ ++ gpio-charger { ++ compatible = "gpio-charger"; ++ charger-type = "mains"; ++ gpios = <&gpio0 RK_PA2 GPIO_ACTIVE_HIGH>; ++ charge-status-gpios = <&gpio2 RK_PD3 GPIO_ACTIVE_HIGH>; ++ pinctrl-names = "default"; ++ pinctrl-0 = <&ac_present_ap>, <&charger_status>; ++ }; ++ ++ gpio-keys { ++ compatible = "gpio-keys"; ++ autorepeat; ++ pinctrl-names = "default"; ++ pinctrl-0 = <&pwrbtn>, <&user1btn>, <&wake_on_lan>; ++ ++ power { ++ debounce-interval = <100>; ++ gpios = <&gpio0 RK_PA5 GPIO_ACTIVE_LOW>; ++ label = "Power"; ++ linux,code = ; ++ wakeup-source; ++ }; ++ ++ user1-button { ++ debounce-interval = <100>; ++ gpios = <&gpio0 RK_PA3 GPIO_ACTIVE_LOW>; ++ label = "User Button 1"; ++ linux,code = ; ++ wakeup-source; ++ }; ++ }; ++ ++ hdmi_dp_sound: hdmi-dp-sound { ++ status = "okay"; ++ compatible = "rockchip,rk3399-hdmi-dp"; ++ rockchip,cpu = <&i2s2>; ++ rockchip,codec = <&cdn_dp>; ++ }; ++ ++ io_leds: io-gpio-leds { ++ status = "okay"; ++ compatible = "gpio-leds"; ++ pinctrl-names = "default"; ++ pinctrl-0 = <&network_act>, <&usb3_act>, ++ <&sata_act>, <&sata_err_led>; ++ ++ network { ++ label = "helios64:blue:net"; ++ gpios = <&gpio0 RK_PA4 GPIO_ACTIVE_HIGH>; ++ linux,default-trigger = "netdev"; ++ default-state = "off"; ++ }; ++ ++ sata { ++ label = "helios64:blue:hdd-status"; ++ gpios = <&gpio4 RK_PD4 GPIO_ACTIVE_HIGH>; ++ linux,default-trigger = "disk-activity"; ++ default-state = "off"; ++ }; ++ ++ sata_err1 { ++ label = "helios64:red:ata1-err"; ++ gpios = <&gpio2 RK_PA2 GPIO_ACTIVE_HIGH>; ++ default-state = "keep"; ++ }; ++ ++ sata_err2 { ++ label = "helios64:red:ata2-err"; ++ gpios = <&gpio2 RK_PA3 GPIO_ACTIVE_HIGH>; ++ default-state = "keep"; ++ }; ++ ++ sata_err3 { ++ label = "helios64:red:ata3-err"; ++ gpios = <&gpio2 RK_PA4 GPIO_ACTIVE_HIGH>; ++ default-state = "keep"; ++ }; ++ ++ sata_err4 { ++ label = "helios64:red:ata4-err"; ++ gpios = <&gpio2 RK_PA5 GPIO_ACTIVE_HIGH>; ++ default-state = "keep"; ++ }; ++ ++ sata_err5 { ++ label = "helios64:red:ata5-err"; ++ gpios = <&gpio2 RK_PA6 GPIO_ACTIVE_HIGH>; ++ default-state = "keep"; ++ }; ++ ++ usb3 { ++ label = "helios64:blue:usb3"; ++ gpios = <&gpio0 RK_PB3 GPIO_ACTIVE_HIGH>; ++ trigger-sources = <&int_hub_port1>, ++ <&int_hub_port2>, ++ <&int_hub_port3>; ++ linux,default-trigger = "usbport"; ++ default-state = "off"; ++ }; ++ }; ++ ++ pwmleds { ++ compatible = "pwm-leds"; ++ status = "okay"; ++ ++ power-led { ++ label = "helios64:blue:power-status"; ++ pwms = <&pwm3 0 2000000000 0>; ++ max-brightness = <255>; ++ }; ++ }; ++ ++ system_leds: system-gpio-leds { ++ status = "okay"; ++ compatible = "gpio-leds"; ++ pinctrl-names = "default"; ++ pinctrl-0 = <&system_led>; ++ ++ status-led { ++ label = "helios64::status"; ++ gpios = <&gpio0 RK_PB4 GPIO_ACTIVE_HIGH>; ++ linux,default-trigger = "none"; ++ default-state = "on"; ++ mode = <0x23>; ++ }; ++ ++ fault-led { ++ label = "helios64:red:fault"; ++ gpios = <&gpio0 RK_PB5 GPIO_ACTIVE_HIGH>; ++ linux,default-trigger = "panic"; ++ default-state = "keep"; ++ mode = <0x23>; ++ }; ++ }; ++}; ++ ++&cdn_dp { ++ status = "okay"; ++ extcon = <&fusb0>; ++ phys = <&tcphy0_dp>; ++}; ++ ++&cpu_l0 { ++ cpu-supply = <&vdd_cpu_l>; ++}; ++ ++&cpu_l1 { ++ cpu-supply = <&vdd_cpu_l>; ++}; ++ ++&cpu_l2 { ++ cpu-supply = <&vdd_cpu_l>; ++}; ++ ++&cpu_l3 { ++ cpu-supply = <&vdd_cpu_l>; ++}; ++ ++&cpu_b0 { ++ cpu-supply = <&vdd_cpu_b>; ++}; ++ ++&cpu_b1 { ++ cpu-supply = <&vdd_cpu_b>; ++}; ++ ++&emmc_phy { ++ status = "okay"; ++}; ++ ++&gmac { ++ assigned-clocks = <&cru SCLK_RMII_SRC>; ++ assigned-clock-parents = <&clkin_gmac>; ++ clock_in_out = "input"; ++ phy-supply = <&vcc_lan>; ++ phy-mode = "rgmii"; ++ pinctrl-names = "default"; ++ pinctrl-0 = <&rgmii_pins &rgmii_phy_reset>; ++ snps,reset-gpio = <&gpio3 RK_PB7 GPIO_ACTIVE_LOW>; ++ snps,reset-active-low; ++ snps,reset-delays-us = <0 10000 50000>; ++ tx_delay = <0x28>; ++ rx_delay = <0x20>; ++ status = "okay"; ++}; ++ ++&gpu { ++ mali-supply = <&vdd_gpu>; ++ status = "okay"; ++}; ++ ++&i2c0 { ++ clock-frequency = <400000>; ++ i2c-scl-rising-time-ns = <168>; ++ i2c-scl-falling-time-ns = <4>; ++ status = "okay"; ++ ++ rk808: pmic@1b { ++ compatible = "rockchip,rk808"; ++ reg = <0x1b>; ++ #clock-cells = <1>; ++ clock-output-names = "xin32k", "rk808-clkout2"; ++ interrupt-parent = <&gpio0>; ++ interrupts = <10 IRQ_TYPE_LEVEL_LOW>; ++ pinctrl-names = "default"; ++ pinctrl-0 = <&pmic_int_l>; ++ rockchip,system-power-controller; ++ wakeup-source; ++ ++ vcc1-supply = <&vcc5v0_sys>; ++ vcc2-supply = <&vcc5v0_sys>; ++ vcc3-supply = <&vcc5v0_sys>; ++ vcc4-supply = <&vcc5v0_sys>; ++ vcc6-supply = <&vcc5v0_sys>; ++ vcc7-supply = <&vcc5v0_sys>; ++ vcc8-supply = <&vcc3v3_sys_s3>; ++ vcc9-supply = <&vcc5v0_sys>; ++ vcc10-supply = <&vcc5v0_sys>; ++ vcc11-supply = <&vcc5v0_sys>; ++ vcc12-supply = <&vcc3v3_sys_s3>; ++ vddio-supply = <&vcc3v0_s3>; ++ ++ regulators { ++ vdd_center: DCDC_REG1 { ++ regulator-name = "vdd_center"; ++ regulator-always-on; ++ regulator-boot-on; ++ regulator-min-microvolt = <800000>; ++ regulator-max-microvolt = <1000000>; ++ regulator-ramp-delay = <6001>; ++ regulator-state-mem { ++ regulator-on-in-suspend; ++ regulator-suspend-microvolt = <950000>; ++ }; ++ }; ++ ++ vdd_cpu_l: DCDC_REG2 { ++ regulator-name = "vdd_cpu_l"; ++ regulator-always-on; ++ regulator-boot-on; ++ regulator-min-microvolt = <750000>; ++ regulator-max-microvolt = <1350000>; ++ regulator-ramp-delay = <6001>; ++ regulator-state-mem { ++ regulator-off-in-suspend; ++ }; ++ }; ++ ++ vcc_ddr_s3: DCDC_REG3 { ++ regulator-name = "vcc_ddr_s3"; ++ regulator-always-on; ++ regulator-boot-on; ++ regulator-state-mem { ++ regulator-on-in-suspend; ++ }; ++ }; ++ ++ vcc1v8_sys_s3: DCDC_REG4 { ++ regulator-name = "vcc1v8_sys_s3"; ++ regulator-always-on; ++ regulator-boot-on; ++ regulator-min-microvolt = <1800000>; ++ regulator-max-microvolt = <1800000>; ++ regulator-state-mem { ++ regulator-on-in-suspend; ++ regulator-suspend-microvolt = <1800000>; ++ }; ++ }; ++ ++ /* not used */ ++ vcc1v8_dvp: LDO_REG1 { ++ regulator-name = "vcc1v8_dvp"; ++ }; ++ ++ /* not used */ ++ vcc3v0_touch: LDO_REG2 { ++ regulator-name = "vcc3v0_touch"; ++ }; ++ ++ vcc1v8_s3: LDO_REG3 { ++ regulator-name = "vcc1v8_s3"; ++ regulator-always-on; ++ regulator-boot-on; ++ regulator-min-microvolt = <1800000>; ++ regulator-max-microvolt = <1800000>; ++ regulator-state-mem { ++ regulator-on-in-suspend; ++ regulator-suspend-microvolt = <1800000>; ++ }; ++ }; ++ ++ vcc_sdio_s0: LDO_REG4 { ++ regulator-name = "vcc_sdio_s0"; ++ regulator-always-on; ++ regulator-boot-on; ++ regulator-min-microvolt = <1800000>; ++ regulator-max-microvolt = <3000000>; ++ regulator-state-mem { ++ regulator-on-in-suspend; ++ regulator-suspend-microvolt = <3000000>; ++ }; ++ }; ++ ++ /* not used */ ++ vcca3v0_codec: LDO_REG5 { ++ regulator-name = "vcca3v0_codec"; ++ }; ++ ++ vcc1v5_s3: LDO_REG6 { ++ regulator-name = "vcc1v5_s3"; ++ regulator-always-on; ++ regulator-boot-on; ++ regulator-min-microvolt = <1500000>; ++ regulator-max-microvolt = <1500000>; ++ regulator-state-mem { ++ regulator-on-in-suspend; ++ regulator-suspend-microvolt = <1500000>; ++ }; ++ }; ++ ++ /* not used */ ++ vcca1v8_codec: LDO_REG7 { ++ regulator-name = "vcca1v8_codec"; ++ }; ++ ++ vcc3v0_s3: LDO_REG8 { ++ regulator-name = "vcc3v0_s3"; ++ regulator-always-on; ++ regulator-boot-on; ++ regulator-min-microvolt = <3000000>; ++ regulator-max-microvolt = <3000000>; ++ regulator-state-mem { ++ regulator-on-in-suspend; ++ regulator-suspend-microvolt = <3000000>; ++ }; ++ }; ++ ++ vcc3v3_sys_s0: SWITCH_REG1 { ++ regulator-name = "vcc3v3_sys_s0"; ++ regulator-always-on; ++ regulator-boot-on; ++ regulator-min-microvolt = <3300000>; ++ regulator-max-microvolt = <3300000>; ++ regulator-state-mem { ++ regulator-off-in-suspend; ++ }; ++ }; ++ ++ /* not used */ ++ vcc3v3_s0: SWITCH_REG2 { ++ regulator-name = "vcc3v3_s0"; ++ }; ++ }; ++ }; ++ ++ vdd_cpu_b: regulator@40 { ++ compatible = "silergy,syr827"; ++ reg = <0x40>; ++ fcs,suspend-voltage-selector = <1>; ++ pinctrl-names = "default"; ++ pinctrl-0 = <&vsel1_gpio>; ++ regulator-name = "vdd_cpu_b"; ++ regulator-min-microvolt = <712500>; ++ regulator-max-microvolt = <1500000>; ++ regulator-ramp-delay = <40000>; ++ regulator-always-on; ++ regulator-boot-on; ++ vin-supply = <&vcc5v0_sys>; ++ ++ regulator-state-mem { ++ regulator-off-in-suspend; ++ }; ++ }; ++ ++ vdd_gpu: regulator@41 { ++ compatible = "silergy,syr828"; ++ reg = <0x41>; ++ fcs,suspend-voltage-selector = <1>; ++ pinctrl-names = "default"; ++ pinctrl-0 = <&vsel2_gpio>; ++ regulator-name = "vdd_gpu"; ++ regulator-min-microvolt = <712500>; ++ regulator-max-microvolt = <1500000>; ++ regulator-ramp-delay = <1000>; ++ regulator-always-on; ++ regulator-boot-on; ++ vin-supply = <&vcc5v0_sys>; ++ ++ regulator-state-mem { ++ regulator-off-in-suspend; ++ }; ++ }; ++}; ++ ++&i2c2 { ++ clock-frequency = <400000>; ++ i2c-scl-rising-time-ns = <160>; ++ i2c-scl-falling-time-ns = <30>; ++ status = "okay"; ++ ++ gpio-expander@20 { ++ compatible = "nxp,pca9555"; ++ reg = <0x20>; ++ gpio-controller; ++ #gpio-cells = <2>; ++ pinctrl-names = "default"; ++ pinctrl-0 = <&pca0_pins>; ++ interrupt-parent = <&gpio0>; ++ interrupts = <9 IRQ_TYPE_EDGE_FALLING>; ++ interrupt-controller; ++ #interrupt-cells = <2>; ++ vcc-supply = <&vcc3v3_sys_s3>; ++ }; ++ ++ temp@4c { ++ compatible = "onnn,lm75"; ++ reg = <0x4c>; ++ }; ++}; ++ ++&i2c4 { ++ clock-frequency = <400000>; ++ i2c-scl-rising-time-ns = <160>; ++ i2c-scl-falling-time-ns = <30>; ++ status = "okay"; ++ ++ fusb0: typec-portc@22 { ++ compatible = "fcs,fusb302"; ++ reg = <0x22>; ++ interrupt-parent = <&gpio1>; ++ interrupts = ; ++ pinctrl-names = "default"; ++ pinctrl-0 = <&fusb0_int>; ++ vbus-supply = <&vcc5v0_typec>; ++ ++ connector { ++ compatible = "usb-c-connector"; ++ label = "USB-C"; ++ power-role = "dual"; ++ data-role = "dual"; ++ try-power-role = "sink"; ++ source-pdos = ; ++ sink-pdos = ; ++ op-sink-microwatt = <5000000>; ++ ++ extcon-cables = <1 2 5 6 9 10 12 44>; ++ typec-altmodes = <0xff01 1 0x001c0000 1>; ++ ++ ports { ++ #address-cells = <1>; ++ #size-cells = <0>; ++ ++ port@0 { ++ reg = <0>; ++ usb_con_hs: endpoint { ++ remote-endpoint = <&u2phy0_typec_hs>; ++ }; ++ }; ++ port@1 { ++ reg = <1>; ++ usb_con_ss: endpoint { ++ remote-endpoint = <&tcphy0_typec_ss>; ++ }; ++ }; ++ port@2 { ++ reg = <2>; ++ usb_con_sbu: endpoint { ++ remote-endpoint = <&tcphy0_typec_dp>; ++ }; ++ }; ++ }; ++ }; ++ }; ++}; ++ ++/* I2C on UEXT */ ++&i2c7 { ++ status = "okay"; ++}; ++ ++/* External I2C */ ++&i2c8 { ++ status = "okay"; ++}; ++ ++&i2s2 { ++ #sound-dai-cells = <0>; ++ status = "okay"; ++}; ++ ++&io_domains { ++ status = "okay"; ++ bt656-supply = <&vcc1v8_sys_s0>; ++ audio-supply = <&vcc1v8_sys_s0>; ++ sdmmc-supply = <&vcc_sdio_s0>; ++ gpio1830-supply = <&vcc3v0_s3>; ++}; ++ ++&pcie0 { ++ ep-gpios = <&gpio2 RK_PD4 GPIO_ACTIVE_HIGH>; ++ num-lanes = <2>; ++ max-link-speed = <2>; ++ pinctrl-names = "default"; ++ pinctrl-0 = <&pcie_prst &pcie_clkreqn_cpm>; ++ vpcie12v-supply = <&vcc12v_dcin>; ++ vpcie3v3-supply = <&pcie_power>; ++ vpcie1v8-supply = <&avdd_1v8_s0>; ++ vpcie0v9-supply = <&avdd_0v9_s0>; ++ status = "okay"; ++}; ++ ++&pcie_phy { ++ status = "okay"; ++}; ++ ++&pinctrl { ++ buttons { ++ pwrbtn: pwrbtn { ++ rockchip,pins = <0 RK_PA5 RK_FUNC_GPIO &pcfg_pull_up>; ++ }; ++ ++ user1btn: usr1btn { ++ rockchip,pins = <0 RK_PA3 RK_FUNC_GPIO &pcfg_pull_none>; ++ }; ++ }; ++ ++ charger { ++ ac_present_ap: ac-present-ap { ++ rockchip,pins = <0 RK_PA2 RK_FUNC_GPIO &pcfg_pull_none>; ++ }; ++ ++ charger_status: charger-status { ++ rockchip,pins = <2 RK_PD3 RK_FUNC_GPIO &pcfg_pull_none>; ++ }; ++ }; ++ ++ fan { ++ fan1_sense: fan1-sense { ++ rockchip,pins = <4 RK_PC5 RK_FUNC_GPIO &pcfg_pull_none>; ++ }; ++ ++ fan2_sense: fan2-sense { ++ rockchip,pins = <4 RK_PC7 RK_FUNC_GPIO &pcfg_pull_none>; ++ }; ++ }; ++ ++ fusb30x { ++ fusb0_int: fusb0-int { ++ rockchip,pins = ++ <1 RK_PA2 RK_FUNC_GPIO &pcfg_pull_up>; ++ }; ++ ++ fusb0_vbus_en: fusb0-vbus-en { ++ rockchip,pins = ++ <1 RK_PA3 RK_FUNC_GPIO &pcfg_pull_up>; ++ }; ++ }; ++ ++ gmac { ++ rgmii_phy_reset: rgmii-phy-reset { ++ rockchip,pins = ++ <3 RK_PB7 RK_FUNC_GPIO &pcfg_output_low>; ++ }; ++ }; ++ ++ leds { ++ network_act: network-act { ++ rockchip,pins = ++ <0 RK_PA4 RK_FUNC_GPIO &pcfg_pull_down>; ++ }; ++ ++ usb3_act: usb3-act { ++ rockchip,pins = ++ <0 RK_PB3 RK_FUNC_GPIO &pcfg_pull_down>; ++ }; ++ ++ sata_act: sata-act { ++ rockchip,pins = ++ <4 RK_PD4 RK_FUNC_GPIO &pcfg_pull_down>; ++ }; ++ ++ system_led: sys-led { ++ rockchip,pins = ++ <0 RK_PB4 RK_FUNC_GPIO &pcfg_pull_down>, ++ <0 RK_PB5 RK_FUNC_GPIO &pcfg_pull_down>; ++ }; ++ ++ sata_err_led: sata-err-led { ++ rockchip,pins = ++ <2 RK_PA2 RK_FUNC_GPIO &pcfg_pull_down>, ++ <2 RK_PA3 RK_FUNC_GPIO &pcfg_pull_down>, ++ <2 RK_PA4 RK_FUNC_GPIO &pcfg_pull_down>, ++ <2 RK_PA5 RK_FUNC_GPIO &pcfg_pull_down>, ++ <2 RK_PA6 RK_FUNC_GPIO &pcfg_pull_down>; ++ }; ++ }; ++ ++ misc { ++ pca0_pins: pca0-pins { ++ rockchip,pins = ++ <0 RK_PB1 RK_FUNC_GPIO &pcfg_pull_none>; ++ }; ++ ++ wake_on_lan: wake-on-lan { ++ rockchip,pins = ++ <0 RK_PB0 RK_FUNC_GPIO &pcfg_pull_none>; ++ }; ++ }; ++ ++ pcie { ++ pcie_prst: pcie-prst { ++ rockchip,pins = ++ <2 RK_PD4 RK_FUNC_GPIO &pcfg_pull_none>; ++ }; ++ ++ pcie_pwr_en: pcie-pwr-en { ++ rockchip,pins = ++ <1 RK_PD0 RK_FUNC_GPIO &pcfg_pull_none>; ++ }; ++ }; ++ ++ pmic { ++ pmic_int_l: pmic-int-l { ++ rockchip,pins = ++ <0 RK_PB2 RK_FUNC_GPIO &pcfg_pull_up>; ++ }; ++ ++ vsel1_gpio: vsel1-gpio { ++ rockchip,pins = ++ <1 RK_PC1 RK_FUNC_GPIO &pcfg_pull_down>; ++ }; ++ ++ vsel2_gpio: vsel2-gpio { ++ rockchip,pins = ++ <1 RK_PB6 RK_FUNC_GPIO &pcfg_pull_down>; ++ }; ++ }; ++ ++ power { ++ hdd_a_power: hdd-a-power { ++ rockchip,pins = ++ <1 RK_PA0 RK_FUNC_GPIO &pcfg_pull_none>; ++ }; ++ ++ hdd_b_power: hdd-b-power { ++ rockchip,pins = ++ <1 RK_PA1 RK_FUNC_GPIO &pcfg_pull_none>; ++ }; ++ ++ vcc5v0_usb_en: vcc5v0-usb-en { ++ rockchip,pins = ++ <1 RK_PC6 RK_FUNC_GPIO &pcfg_pull_none>; ++ }; ++ ++ sdmmc0_pwr_h: sdmmc0-pwr-h { ++ rockchip,pins = ++ <0 RK_PA1 RK_FUNC_GPIO &pcfg_output_high>; ++ }; ++ ++ usb_lan_en: usb-lan-en { ++ rockchip,pins = ++ <1 RK_PC7 RK_FUNC_GPIO &pcfg_pull_none>; ++ }; ++ }; ++}; ++ ++&pmu_io_domains { ++ pmu1830-supply = <&vcc3v0_s3>; ++ status = "okay"; ++}; ++ ++&pwm0 { ++ status = "okay"; ++}; ++ ++&pwm1 { ++ status = "okay"; ++}; ++ ++&pwm2 { ++ status = "okay"; ++}; ++ ++&pwm3 { ++ status = "okay"; ++}; ++ ++&saradc { ++ vref-supply = <&vcc1v8_s3>; ++ status = "okay"; ++}; ++ ++&sdhci { ++ bus-width = <8>; ++ mmc-hs200-1_8v; ++ // supports-emmc; ++ non-removable; ++ // disable-wp; ++ status = "okay"; ++ vqmmc-supply = <&vcc1v8_sys_s0>; ++}; ++ ++&sdmmc { ++ bus-width = <4>; ++ cap-sd-highspeed; ++ cd-gpios = <&gpio0 RK_PA7 GPIO_ACTIVE_LOW>; // TODO: verify what needs to be done to use implicit CD definition ++ disable-wp; ++ // sd-uhs-sdr104; ++ pinctrl-names = "default"; ++ pinctrl-0 = <&sdmmc_clk &sdmmc_cmd &sdmmc_cd &sdmmc_bus4>; ++ vmmc-supply = <&vcc3v0_sd>; ++ vqmmc-supply = <&vcc_sdio_s0>; ++ status = "okay"; ++}; ++ ++&spi1 { ++ status = "okay"; ++}; ++ ++/* UEXT connector */ ++&spi2 { ++ status = "okay"; ++}; ++ ++&spi5 { ++ status = "okay"; ++}; ++ ++&tcphy0 { ++ extcon = <&fusb0>; ++ status = "okay"; ++}; ++ ++&tcphy0_dp { ++ port { ++ tcphy0_typec_dp: endpoint { ++ remote-endpoint = <&usb_con_sbu>; ++ }; ++ }; ++}; ++ ++&tcphy0_usb3 { ++ port { ++ tcphy0_typec_ss: endpoint { ++ remote-endpoint = <&usb_con_ss>; ++ }; ++ }; ++}; ++ ++&tcphy1 { ++ status = "okay"; ++}; ++ ++&tsadc { ++ /* tshut mode 0:CRU 1:GPIO */ ++ rockchip,hw-tshut-mode = <1>; ++ /* tshut polarity 0:LOW 1:HIGH */ ++ rockchip,hw-tshut-polarity = <1>; ++ status = "okay"; ++}; ++ ++&u2phy0 { ++ status = "okay"; ++ ++ u2phy0_otg: otg-port { ++ status = "okay"; ++ }; ++ ++ u2phy0_host: host-port { ++ phy-supply = <&vcc5v0_usb>; ++ status = "okay"; ++ }; ++ ++ port { ++ u2phy0_typec_hs: endpoint { ++ remote-endpoint = <&usb_con_hs>; ++ }; ++ }; ++}; ++ ++&u2phy1 { ++ status = "okay"; ++ ++ u2phy1_otg: otg-port { ++ status = "okay"; ++ }; ++}; ++ ++&uart0 { ++ pinctrl-names = "default"; ++ pinctrl-0 = <&uart0_xfer>; ++ status = "okay"; ++}; ++ ++&uart2 { ++ status = "okay"; ++}; ++ ++&usb_host0_ehci { ++ status = "okay"; ++}; ++ ++&usb_host0_ohci { ++ status = "okay"; ++}; ++ ++&usbdrd3_0 { ++ status = "okay"; ++}; ++ ++&usbdrd_dwc3_0 { ++ status = "okay"; ++ dr_mode = "otg"; ++}; ++ ++&usbdrd3_1 { ++ status = "okay"; ++}; ++ ++&usbdrd_dwc3_1 { ++ status = "okay"; ++ dr_mode = "host"; ++ ++ #address-cells = <1>; ++ #size-cells = <0>; ++ ++ int_hub: hub@1 { ++ compatible = "usb2109,0815"; ++ reg = <1>; ++ #address-cells = <1>; ++ #size-cells = <0>; ++ ++ int_hub_port1: port@1 { ++ reg = <1>; ++ #trigger-source-cells = <0>; ++ }; ++ ++ int_hub_port2: port@2 { ++ reg = <2>; ++ #trigger-source-cells = <0>; ++ }; ++ ++ int_hub_port3: port@3 { ++ reg = <3>; ++ #trigger-source-cells = <0>; ++ }; ++ ++ usb_lan: device@4 { ++ compatible = "usbbda,8156"; ++ reg = <4>; ++ ++ #address-cells = <2>; ++ #size-cells = <0>; ++ ++ interface@0 { /* interface 0 of configuration 1 */ ++ compatible = "usbbda,8156.config1.0"; ++ reg = <0 1>; ++ }; ++ }; ++ }; ++}; ++ ++&vopb { ++ status = "okay"; ++}; ++ ++&vopb_mmu { ++ status = "okay"; ++}; ++ ++&vopl { ++ status = "okay"; ++}; ++ ++&vopl_mmu { ++ status = "okay"; ++}; +\ No newline at end of file +-- +Created with Armbian build tools https://github.com/armbian/build diff --git a/patches/kernel/fa67f2817ff2c9bb07472d30e58d904922f1a538.patch b/patches/kernel/fa67f2817ff2c9bb07472d30e58d904922f1a538.patch new file mode 100644 index 0000000..499f64b --- /dev/null +++ b/patches/kernel/fa67f2817ff2c9bb07472d30e58d904922f1a538.patch @@ -0,0 +1,34 @@ +From fa67f2817ff2c9bb07472d30e58d904922f1a538 Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?Uwe=20Kleine-K=C3=B6nig?= +Date: Wed, 14 Oct 2020 22:00:29 +0200 +Subject: dt-bindings: vendor-prefixes: Add kobol prefix +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + +The prefix is already used in arm/armada-388-helios4.dts. + +Signed-off-by: Uwe Kleine-König +Acked-by: Rob Herring +Link: https://lore.kernel.org/r/20201014200030.845759-2-uwe@kleine-koenig.org +Signed-off-by: Heiko Stuebner +--- + Documentation/devicetree/bindings/vendor-prefixes.yaml | 2 ++ + 1 file changed, 2 insertions(+) + +diff --git a/Documentation/devicetree/bindings/vendor-prefixes.yaml b/Documentation/devicetree/bindings/vendor-prefixes.yaml +index 2735be1a84709..259faf1b382c0 100644 +--- a/Documentation/devicetree/bindings/vendor-prefixes.yaml ++++ b/Documentation/devicetree/bindings/vendor-prefixes.yaml +@@ -553,6 +553,8 @@ patternProperties: + description: Kionix, Inc. + "^kobo,.*": + description: Rakuten Kobo Inc. ++ "^kobol,.*": ++ description: Kobol Innovations Pte. Ltd. + "^koe,.*": + description: Kaohsiung Opto-Electronics Inc. + "^kontron,.*": +-- +cgit 1.2.3-1.el7 + diff --git a/patches/kernel/helios64-remove-pcie-ep-gpios.patch b/patches/kernel/helios64-remove-pcie-ep-gpios.patch new file mode 100644 index 0000000..d7a9496 --- /dev/null +++ b/patches/kernel/helios64-remove-pcie-ep-gpios.patch @@ -0,0 +1,25 @@ +From e7e9a3a959927094d59b67f46ecc1c5d50190ce8 Mon Sep 17 00:00:00 2001 +From: Aditya Prayoga +Date: Tue, 15 Sep 2020 13:42:02 +0700 +Subject: [PATCH] Remove PCIE ep-gpios from Helios64 + +Signed-off-by: Aditya Prayoga +--- + arch/arm64/boot/dts/rockchip/rk3399-helios64.dts | 1 - + 1 file changed, 1 deletion(-) + +diff --git a/arch/arm64/boot/dts/rockchip/rk3399-kobol-helios64.dts b/arch/arm64/boot/dts/rockchip/rk3399-kobol-helios64.dts +index c065ba82d..002c93912 100644 +--- a/arch/arm64/boot/dts/rockchip/rk3399-kobol-helios64.dts ++++ b/arch/arm64/boot/dts/rockchip/rk3399-kobol-helios64.dts +@@ -721,7 +721,6 @@ + }; + + &pcie0 { +- ep-gpios = <&gpio2 RK_PD4 GPIO_ACTIVE_HIGH>; + num-lanes = <2>; + max-link-speed = <2>; + pinctrl-names = "default"; +-- +Created with Armbian build tools https://github.com/armbian/build + diff --git a/patches/kernel/rk3399-pci-rockchip-support-ep-gpio-undefined-case.patch b/patches/kernel/rk3399-pci-rockchip-support-ep-gpio-undefined-case.patch new file mode 100644 index 0000000..95a6dd6 --- /dev/null +++ b/patches/kernel/rk3399-pci-rockchip-support-ep-gpio-undefined-case.patch @@ -0,0 +1,29 @@ +From 002593cfe8fc7539a6aa2dfb246d832e0b8b8516 Mon Sep 17 00:00:00 2001 +From: Aditya Prayoga +Date: Tue, 15 Sep 2020 13:29:45 +0700 +Subject: [PATCH] PCI: rockchip: support ep-gpio undefined case + +Signed-off-by: Aditya Prayoga +--- + drivers/pci/controller/pcie-rockchip.c | 4 ++-- + 1 file changed, 2 insertions(+), 2 deletions(-) + +diff --git a/drivers/pci/controller/pcie-rockchip.c b/drivers/pci/controller/pcie-rockchip.c +index c53d1322a..e4f42591d 100644 +--- a/drivers/pci/controller/pcie-rockchip.c ++++ b/drivers/pci/controller/pcie-rockchip.c +@@ -119,9 +119,9 @@ int rockchip_pcie_parse_dt(struct rockchip_pcie *rockchip) + } + + if (rockchip->is_rc) { +- rockchip->ep_gpio = devm_gpiod_get(dev, "ep", GPIOD_OUT_HIGH); ++ rockchip->ep_gpio = devm_gpiod_get_optional(dev, "ep", GPIOD_OUT_HIGH); + if (IS_ERR(rockchip->ep_gpio)) { +- dev_err(dev, "missing ep-gpios property in node\n"); ++ dev_err(dev, "invalid ep-gpios property in node\n"); + return PTR_ERR(rockchip->ep_gpio); + } + } +-- +Created with Armbian build tools https://github.com/armbian/build + diff --git a/patches/uboot/115200baud.patch b/patches/uboot/115200baud.patch new file mode 100644 index 0000000..476df41 --- /dev/null +++ b/patches/uboot/115200baud.patch @@ -0,0 +1,21 @@ +From efb3ec2ca3a88530d45c593f051ec53f80a4c4d8 Mon Sep 17 00:00:00 2001 +From: Moritz Angermann +Date: Fri, 4 Dec 2020 17:00:03 +0800 +Subject: [PATCH] Update rk3399-helios64-u-boot.dtsi + +--- + arch/arm/dts/rk3399-kobol-helios64-u-boot.dtsi | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/arch/arm/dts/rk3399-kobol-helios64-u-boot.dtsi b/arch/arm/dts/rk3399-kobol-helios64-u-boot.dtsi +index 27ea5eaa971..3a260c7e126 100644 +--- a/arch/arm/dts/rk3399-kobol-helios64-u-boot.dtsi ++++ b/arch/arm/dts/rk3399-kobol-helios64-u-boot.dtsi +@@ -16,7 +16,7 @@ + + chosen { + bootargs = "earlycon=uart8250,mmio32,0xff1a0000 earlyprintk"; +- stdout-path = "serial2:1500000n8"; ++ stdout-path = "serial2:115200n8"; + u-boot,spl-boot-order = "same-as-spl", &spiflash, &sdmmc, &sdhci; + }; diff --git a/patches/uboot/add-board-helios64.patch b/patches/uboot/add-board-helios64.patch new file mode 100644 index 0000000..aac7635 --- /dev/null +++ b/patches/uboot/add-board-helios64.patch @@ -0,0 +1,2184 @@ +From 0ad85609017068d93c0311c34438db4e43588090 Mon Sep 17 00:00:00 2001 +From: Aditya Prayoga +Date: Tue, 15 Sep 2020 18:41:54 +0700 +Subject: [PATCH] Patching something + +Signed-off-by: Aditya Prayoga +--- + arch/arm/dts/Makefile | 1 + + arch/arm/dts/rk3399-kobol-helios64-u-boot.dtsi | 140 +++ + arch/arm/dts/rk3399-kobol-helios64.dts | 1152 ++++++++++++++++++++++ + arch/arm/mach-rockchip/rk3399/Kconfig | 17 + + board/kobol/helios64/Kconfig | 24 + + board/kobol/helios64/MAINTAINERS | 6 + + board/kobol/helios64/Makefile | 5 + + board/kobol/helios64/helios64.c | 262 +++++ + board/kobol/helios64/sys_otp.c | 248 +++++ + board/kobol/helios64/sys_otp.h | 10 + + configs/helios64-rk3399_defconfig | 149 +++ + include/configs/helios64.h | 47 + + 12 files changed, 2061 insertions(+) + create mode 100644 arch/arm/dts/rk3399-kobol-helios64-u-boot.dtsi + create mode 100644 arch/arm/dts/rk3399-kobol-helios64.dts + create mode 100644 board/kobol/helios64/Kconfig + create mode 100644 board/kobol/helios64/MAINTAINERS + create mode 100644 board/kobol/helios64/Makefile + create mode 100644 board/kobol/helios64/helios64.c + create mode 100644 board/kobol/helios64/sys_otp.c + create mode 100644 board/kobol/helios64/sys_otp.h + create mode 100644 configs/helios64-rk3399_defconfig + create mode 100644 include/configs/helios64.h + +diff --git a/arch/arm/dts/Makefile b/arch/arm/dts/Makefile +index 530d60bf..d9fd6cf1 100644 +--- a/arch/arm/dts/Makefile ++++ b/arch/arm/dts/Makefile +@@ -122,6 +122,7 @@ dtb-$(CONFIG_ROCKCHIP_RK3399) += \ + rk3399-ficus.dtb \ + rk3399-firefly.dtb \ + rk3399-gru-bob.dtb \ ++ rk3399-kobol-helios64.dtb \ + rk3399-khadas-edge.dtb \ + rk3399-khadas-edge-captain.dtb \ + rk3399-khadas-edge-v.dtb \ +diff --git a/arch/arm/dts/rk3399-kobol-helios64-u-boot.dtsi b/arch/arm/dts/rk3399-kobol-helios64-u-boot.dtsi +new file mode 100644 +index 00000000..2988a209 +--- /dev/null ++++ b/arch/arm/dts/rk3399-kobol-helios64-u-boot.dtsi +@@ -0,0 +1,140 @@ ++// SPDX-License-Identifier: GPL-2.0+ ++/* ++ * Copyright (c) 2020 Aditya Prayoga (aditya@kobol.io) ++ */ ++ ++#include "rk3399-u-boot.dtsi" ++#include "rk3399-sdram-lpddr4-100.dtsi" ++/ { ++ aliases { ++ spi0 = &spi1; ++ spi1 = &spi2; ++ spi2 = &spi5; ++ ethernet0 = &gmac; ++ ethernet1 = &usb_lan; ++ }; ++ ++ chosen { ++ bootargs = "earlycon=uart8250,mmio32,0xff1a0000 earlyprintk"; ++ stdout-path = "serial2:1500000n8"; ++ u-boot,spl-boot-order = "same-as-spl", &spiflash, &sdmmc, &sdhci; ++ }; ++ ++ config { ++ u-boot,spl-payload-offset = <0x80000>; /* @ 512KB */ ++ }; ++}; ++ ++&gpio1 { ++ usb-mux-hs { ++ gpio-hog; ++ gpios = ; ++ output-low; ++ line-name = "USB_MUX_HS"; ++ }; ++ ++ usb-mux-oe { ++ gpio-hog; ++ gpios = ; ++ output-high; ++ line-name = "USB_MUX_OE#"; ++ }; ++ ++ soc-flash-wp { ++ gpio-hog; ++ gpios = ; ++ output-low; ++ line-name = "SOC_WP#"; ++ }; ++}; ++ ++&gpio2 { ++ sata-flash-wp { ++ gpio-hog; ++ gpios = ; ++ output-high; ++ line-name = "SATA_WP#_LV"; ++ }; ++}; ++ ++&gpio4 { ++ auto-on-en-d { ++ gpio-hog; ++ gpios = ; ++ output-low; ++ line-name = "AUTO_ON_EN_D"; ++ }; ++ ++ auto-on-en-clk { ++ gpio-hog; ++ gpios = ; ++ output-low; ++ line-name = "AUTO_ON_EN_CLK"; ++ }; ++ ++ board-rev-id-0 { ++ gpio-hog; ++ gpios = ; ++ input; ++ }; ++ ++ board-rev-id-1 { ++ gpio-hog; ++ gpios = ; ++ input; ++ }; ++}; ++ ++&int_hub { ++ compatible = "usb-hub"; ++ usb,device-class = ; ++}; ++ ++&pcie_prst { ++ rockchip,pins = ++ <2 RK_PD4 RK_FUNC_GPIO &pcfg_output_low>; ++}; ++ ++&pcie_pwr_en { ++ rockchip,pins = ++ <1 RK_PD0 RK_FUNC_GPIO &pcfg_output_low>; ++}; ++ ++&pinctrl { ++ usb { ++ usb_mux_hs: usb-mux-hs { ++ rockchip,pins = ++ <1 RK_PA4 RK_FUNC_GPIO &pcfg_pull_none>; ++ }; ++ ++ usb_mux_oe: usb-mux-oe { ++ rockchip,pins = ++ <1 RK_PB5 RK_FUNC_GPIO &pcfg_pull_none>; ++ }; ++ }; ++}; ++ ++&power_hdd_a { ++ startup-delay-us = <10000000>; ++}; ++ ++&spi1 { ++ spiflash: flash@0 { ++ compatible = "jedec,spi-nor"; ++ reg = <0x0>; ++ spi-max-frequency = <25000000>; ++ status = "okay"; ++ m25p,fast-read; ++ u-boot,dm-pre-reloc; ++ }; ++}; ++ ++&vdd_center { ++ regulator-min-microvolt = <950000>; ++ regulator-max-microvolt = <950000>; ++ regulator-init-microvolt = <950000>; ++}; ++ ++&vdd_log { ++ regulator-init-microvolt = <900000>; ++}; +diff --git a/arch/arm/dts/rk3399-kobol-helios64.dts b/arch/arm/dts/rk3399-kobol-helios64.dts +new file mode 100644 +index 00000000..9d067505 +--- /dev/null ++++ b/arch/arm/dts/rk3399-kobol-helios64.dts +@@ -0,0 +1,1152 @@ ++// SPDX-License-Identifier: (GPL-2.0+ OR MIT) ++/* ++ * Copyright (c) 2020 Aditya Prayoga (aditya@kobol.io) ++ */ ++ ++/dts-v1/; ++#include ++#include ++#include ++#include ++#include "rk3399.dtsi" ++#include "rk3399-opp.dtsi" ++ ++/ { ++ model = "Helios64"; ++ compatible = "kobol,helios64", "rockchip,rk3399"; ++ ++ adc-keys { ++ compatible = "adc-keys"; ++ io-channels = <&saradc 1>; ++ io-channel-names = "buttons"; ++ keyup-threshold-microvolt = <1800000>; ++ poll-interval = <100>; ++ ++ user2-button { ++ label = "User Button 2"; ++ linux,code = ; ++ press-threshold-microvolt = <100000>; ++ }; ++ }; ++ ++ beeper: beeper { ++ compatible = "gpio-beeper"; ++ gpios = <&gpio4 RK_PD3 GPIO_ACTIVE_HIGH>; ++ }; ++ ++ clkin_gmac: external-gmac-clock { ++ compatible = "fixed-clock"; ++ clock-frequency = <125000000>; ++ clock-output-names = "clkin_gmac"; ++ #clock-cells = <0>; ++ }; ++ ++ vcc12v_dcin: vcc12v-dcin { ++ compatible = "regulator-fixed"; ++ regulator-name = "vcc12v_dcin"; ++ regulator-always-on; ++ regulator-boot-on; ++ regulator-min-microvolt = <12000000>; ++ regulator-max-microvolt = <12000000>; ++ }; ++ ++ vcc12v_dcin_bkup: vcc12v-dcin-bkup { ++ compatible = "regulator-fixed"; ++ regulator-name = "vcc12v_dcin_bkup"; ++ regulator-always-on; ++ regulator-boot-on; ++ regulator-min-microvolt = <12000000>; ++ regulator-max-microvolt = <12000000>; ++ vin-supply = <&vcc12v_dcin>; ++ }; ++ ++ vcc12v_hdd: vcc12v-hdd { ++ compatible = "regulator-fixed"; ++ regulator-name = "vcc12v_hdd"; ++ regulator-always-on; ++ regulator-boot-on; ++ regulator-min-microvolt = <12000000>; ++ regulator-max-microvolt = <12000000>; ++ vin-supply = <&vcc12v_dcin_bkup>; ++ }; ++ ++ /* switched by pmic_sleep */ ++ vcc1v8_sys_s0: vcc1v8-sys-s0 { ++ compatible = "regulator-fixed"; ++ regulator-name = "vcc1v8_sys_s0"; ++ regulator-always-on; ++ regulator-boot-on; ++ regulator-min-microvolt = <1800000>; ++ regulator-max-microvolt = <1800000>; ++ vin-supply = <&vcc1v8_sys_s3>; ++ }; ++ ++ vcc0v9_s3: vcc0v9-s3 { ++ compatible = "regulator-fixed"; ++ regulator-name = "vcc0v9_s3"; ++ regulator-always-on; ++ regulator-boot-on; ++ regulator-min-microvolt = <900000>; ++ regulator-max-microvolt = <900000>; ++ vin-supply = <&vcc3v3_sys_s3>; ++ }; ++ ++ avdd_0v9_s0: avdd-0v9-s0 { ++ compatible = "regulator-fixed"; ++ regulator-name = "avdd_0v9_s0"; ++ regulator-always-on; ++ regulator-boot-on; ++ regulator-min-microvolt = <900000>; ++ regulator-max-microvolt = <900000>; ++ vin-supply = <&vcc1v8_sys_s3>; ++ }; ++ ++ avdd_1v8_s0: avdd-1v8-s0 { ++ compatible = "regulator-fixed"; ++ regulator-name = "avdd_1v8_s0"; ++ regulator-always-on; ++ regulator-boot-on; ++ regulator-min-microvolt = <1800000>; ++ regulator-max-microvolt = <1800000>; ++ vin-supply = <&vcc3v3_sys_s3>; ++ }; ++ ++ pcie_power: pcie-power { ++ compatible = "regulator-fixed"; ++ enable-active-high; ++ gpio = <&gpio1 RK_PD0 GPIO_ACTIVE_HIGH>; ++ pinctrl-names = "default"; ++ pinctrl-0 = <&pcie_pwr_en>; ++ regulator-name = "pcie_power"; ++ regulator-boot-on; ++ vin-supply = <&vcc5v0_perdev>; ++ }; ++ ++ vcc3v3_sys_s3: vcc_lan: vcc3v3-sys-s3 { ++ compatible = "regulator-fixed"; ++ regulator-name = "vcc3v3_sys_s3"; ++ regulator-always-on; ++ regulator-boot-on; ++ regulator-min-microvolt = <3300000>; ++ regulator-max-microvolt = <3300000>; ++ vin-supply = <&vcc5v0_sys>; ++ }; ++ ++ vcc3v0_sd: vcc3v0-sd { ++ compatible = "regulator-fixed"; ++ enable-active-high; ++ regulator-name = "vcc3v0_sd"; ++ gpio = <&gpio0 RK_PA1 GPIO_ACTIVE_HIGH>; ++ pinctrl-names = "default"; ++ pinctrl-0 = <&sdmmc0_pwr_h>; ++ regulator-boot-on; ++ startup-delay-us = <20000>; ++ regulator-min-microvolt = <3000000>; ++ regulator-max-microvolt = <3000000>; ++ vin-supply = <&vcc3v3_sys_s3>; ++ }; ++ ++ vcc5v0_usb: vcc5v0-usb { ++ compatible = "regulator-fixed"; ++ enable-active-high; ++ gpio = <&gpio1 RK_PC6 GPIO_ACTIVE_HIGH>; ++ pinctrl-names = "default"; ++ pinctrl-0 = <&vcc5v0_usb_en>; ++ regulator-name = "vcc5v0_usb"; ++ regulator-always-on; ++ regulator-boot-on; ++ regulator-min-microvolt = <5000000>; ++ regulator-max-microvolt = <5000000>; ++ vin-supply = <&vcc5v0_perdev>; ++ }; ++ ++ vcc5v0_typec: vcc5v0-typec-regulator { ++ compatible = "regulator-fixed"; ++ enable-active-high; ++ gpio = <&gpio1 RK_PA3 GPIO_ACTIVE_HIGH>; ++ pinctrl-names = "default"; ++ pinctrl-0 = <&fusb0_vbus_en>; ++ regulator-name = "vcc5v0_typec"; ++ vin-supply = <&vcc5v0_usb>; ++ }; ++ ++ vcc5v0_perdev: vcc5v0-perdev { ++ compatible = "regulator-fixed"; ++ regulator-name = "vcc5v0_perdev"; ++ regulator-always-on; ++ regulator-boot-on; ++ regulator-min-microvolt = <5000000>; ++ regulator-max-microvolt = <5000000>; ++ vin-supply = <&vcc12v_dcin_bkup>; ++ }; ++ ++ vcc5v0_hdd: vcc5v0-hdd { ++ compatible = "regulator-fixed"; ++ regulator-name = "vcc5v0_hdd"; ++ regulator-always-on; ++ regulator-boot-on; ++ regulator-min-microvolt = <5000000>; ++ regulator-max-microvolt = <5000000>; ++ vin-supply = <&vcc12v_dcin_bkup>; ++ }; ++ ++ vcc5v0_sys: vcc5v0-sys { ++ compatible = "regulator-fixed"; ++ regulator-name = "vcc5v0_sys"; ++ regulator-always-on; ++ regulator-boot-on; ++ regulator-min-microvolt = <5000000>; ++ regulator-max-microvolt = <5000000>; ++ vin-supply = <&vcc12v_dcin_bkup>; ++ }; ++ ++ vdd_log: vdd-log { ++ compatible = "pwm-regulator"; ++ pwms = <&pwm2 0 25000 1>; ++ regulator-name = "vdd_log"; ++ regulator-always-on; ++ regulator-boot-on; ++ regulator-min-microvolt = <830000>; ++ regulator-max-microvolt = <1400000>; ++ vin-supply = <&vcc5v0_sys>; ++ regulator-state-mem { ++ regulator-on-in-suspend; ++ regulator-suspend-microvolt = <900000>; ++ }; ++ }; ++ ++ power_hdd_a: power-hdd-a { ++ compatible = "regulator-fixed"; ++ enable-active-high; ++ gpio = <&gpio1 RK_PA0 GPIO_ACTIVE_HIGH>; ++ pinctrl-names = "default"; ++ pinctrl-0 = <&hdd_a_power>; ++ regulator-name = "power_hdd_a"; ++ regulator-always-on; ++ regulator-boot-on; ++ }; ++ ++ power_hdd_b: power-hdd-b { ++ compatible = "regulator-fixed"; ++ enable-active-high; ++ gpio = <&gpio1 RK_PA1 GPIO_ACTIVE_HIGH>; ++ pinctrl-names = "default"; ++ pinctrl-0 = <&hdd_b_power>; ++ regulator-name = "power_hdd_b"; ++ regulator-always-on; ++ regulator-boot-on; ++ }; ++ ++ usblan_power: usblan-power { ++ compatible = "regulator-fixed"; ++ enable-active-high; ++ gpio = <&gpio1 RK_PC7 GPIO_ACTIVE_HIGH>; ++ pinctrl-names = "default"; ++ pinctrl-0 = <&usb_lan_en>; ++ regulator-name = "usblan_power"; ++ regulator-always-on; ++ regulator-boot-on; ++ vin-supply = <&vcc5v0_usb>; ++ }; ++ ++ fan1: p7-fan { ++ compatible = "pwm-fan"; ++ pwms = <&pwm0 0 40000 0>; ++ cooling-min-state = <0>; ++ cooling-max-state = <3>; ++ #cooling-cells = <2>; ++ cooling-levels = <0 80 170 255>; ++ }; ++ ++ fan2: p6-fan { ++ compatible = "pwm-fan"; ++ pwms = <&pwm1 0 40000 0>; ++ cooling-min-state = <0>; ++ cooling-max-state = <3>; ++ #cooling-cells = <2>; ++ cooling-levels = <0 80 170 255>; ++ }; ++ ++ gpio-charger { ++ compatible = "gpio-charger"; ++ charger-type = "mains"; ++ gpios = <&gpio0 RK_PA2 GPIO_ACTIVE_HIGH>; ++ charge-status-gpios = <&gpio2 RK_PD3 GPIO_ACTIVE_HIGH>; ++ pinctrl-names = "default"; ++ pinctrl-0 = <&ac_present_ap>, <&charger_status>; ++ }; ++ ++ gpio-keys { ++ compatible = "gpio-keys"; ++ autorepeat; ++ pinctrl-names = "default"; ++ pinctrl-0 = <&pwrbtn>, <&user1btn>, <&wake_on_lan>; ++ ++ power { ++ debounce-interval = <100>; ++ gpios = <&gpio0 RK_PA5 GPIO_ACTIVE_LOW>; ++ label = "Power"; ++ linux,code = ; ++ wakeup-source; ++ }; ++ ++ user1-button { ++ debounce-interval = <100>; ++ gpios = <&gpio0 RK_PA3 GPIO_ACTIVE_LOW>; ++ label = "User Button 1"; ++ linux,code = ; ++ }; ++ }; ++ ++ hdmi_dp_sound: hdmi-dp-sound { ++ status = "okay"; ++ compatible = "rockchip,rk3399-hdmi-dp"; ++ rockchip,cpu = <&i2s2>; ++ rockchip,codec = <&cdn_dp>; ++ }; ++ ++ io_leds: io-gpio-leds { ++ status = "okay"; ++ compatible = "gpio-leds"; ++ pinctrl-names = "default"; ++ pinctrl-0 = <&network_act>, <&usb3_act>, ++ <&sata_act>, <&sata_err_led>; ++ ++ network { ++ label = "helios64:blue:net"; ++ gpios = <&gpio0 RK_PA4 GPIO_ACTIVE_HIGH>; ++ linux,default-trigger = "netdev"; ++ default-state = "off"; ++ }; ++ ++ sata { ++ label = "helios64:blue:hdd-status"; ++ gpios = <&gpio4 RK_PD4 GPIO_ACTIVE_HIGH>; ++ linux,default-trigger = "disk-activity"; ++ default-state = "off"; ++ }; ++ ++ sata_err1 { ++ label = "helios64:red:ata1-err"; ++ gpios = <&gpio2 RK_PA2 GPIO_ACTIVE_HIGH>; ++ default-state = "keep"; ++ }; ++ ++ sata_err2 { ++ label = "helios64:red:ata2-err"; ++ gpios = <&gpio2 RK_PA3 GPIO_ACTIVE_HIGH>; ++ default-state = "keep"; ++ }; ++ ++ sata_err3 { ++ label = "helios64:red:ata3-err"; ++ gpios = <&gpio2 RK_PA4 GPIO_ACTIVE_HIGH>; ++ default-state = "keep"; ++ }; ++ ++ sata_err4 { ++ label = "helios64:red:ata4-err"; ++ gpios = <&gpio2 RK_PA5 GPIO_ACTIVE_HIGH>; ++ default-state = "keep"; ++ }; ++ ++ sata_err5 { ++ label = "helios64:red:ata5-err"; ++ gpios = <&gpio2 RK_PA6 GPIO_ACTIVE_HIGH>; ++ default-state = "keep"; ++ }; ++ ++ usb3 { ++ label = "helios64:blue:usb3"; ++ gpios = <&gpio0 RK_PB3 GPIO_ACTIVE_HIGH>; ++ trigger-sources = <&int_hub_port1>, ++ <&int_hub_port2>, ++ <&int_hub_port3>; ++ linux,default-trigger = "usbport"; ++ default-state = "off"; ++ }; ++ }; ++ ++ pwmleds { ++ compatible = "pwm-leds"; ++ status = "okay"; ++ ++ power-led { ++ label = "helios64:blue:power-status"; ++ pwms = <&pwm3 0 2000000000 0>; ++ max-brightness = <255>; ++ }; ++ }; ++ ++ system_leds: system-gpio-leds { ++ status = "okay"; ++ compatible = "gpio-leds"; ++ pinctrl-names = "default"; ++ pinctrl-0 = <&system_led>; ++ ++ status-led { ++ label = "helios64::status"; ++ gpios = <&gpio0 RK_PB4 GPIO_ACTIVE_HIGH>; ++ linux,default-trigger = "none"; ++ default-state = "on"; ++ mode = <0x23>; ++ }; ++ ++ fault-led { ++ label = "helios64:red:fault"; ++ gpios = <&gpio0 RK_PB5 GPIO_ACTIVE_HIGH>; ++ linux,default-trigger = "panic"; ++ default-state = "keep"; ++ mode = <0x23>; ++ }; ++ }; ++}; ++ ++&cdn_dp { ++ status = "okay"; ++ extcon = <&fusb0>; ++ phys = <&tcphy0_dp>; ++}; ++ ++&cpu_l0 { ++ cpu-supply = <&vdd_cpu_l>; ++}; ++ ++&cpu_l1 { ++ cpu-supply = <&vdd_cpu_l>; ++}; ++ ++&cpu_l2 { ++ cpu-supply = <&vdd_cpu_l>; ++}; ++ ++&cpu_l3 { ++ cpu-supply = <&vdd_cpu_l>; ++}; ++ ++&cpu_b0 { ++ cpu-supply = <&vdd_cpu_b>; ++}; ++ ++&cpu_b1 { ++ cpu-supply = <&vdd_cpu_b>; ++}; ++ ++&cpu_alert0 { ++ temperature = <80000>; ++}; ++ ++&cpu_alert1 { ++ temperature = <95000>; ++}; ++ ++&cpu_crit { ++ temperature = <100000>; ++}; ++ ++&emmc_phy { ++ status = "okay"; ++}; ++ ++&gmac { ++ assigned-clocks = <&cru SCLK_RMII_SRC>; ++ assigned-clock-parents = <&clkin_gmac>; ++ clock_in_out = "input"; ++ phy-supply = <&vcc_lan>; ++ phy-mode = "rgmii"; ++ pinctrl-names = "default"; ++ pinctrl-0 = <&rgmii_pins &rgmii_phy_reset>; ++ snps,reset-gpio = <&gpio3 RK_PB7 GPIO_ACTIVE_LOW>; ++ snps,reset-active-low; ++ snps,reset-delays-us = <0 10000 50000>; ++ tx_delay = <0x28>; ++ rx_delay = <0x20>; ++ status = "okay"; ++}; ++ ++&gpu { ++ mali-supply = <&vdd_gpu>; ++ status = "okay"; ++}; ++ ++&i2c0 { ++ clock-frequency = <400000>; ++ i2c-scl-rising-time-ns = <168>; ++ i2c-scl-falling-time-ns = <4>; ++ status = "okay"; ++ ++ rk808: pmic@1b { ++ compatible = "rockchip,rk808"; ++ reg = <0x1b>; ++ #clock-cells = <1>; ++ clock-output-names = "xin32k", "rk808-clkout2"; ++ interrupt-parent = <&gpio0>; ++ interrupts = <10 IRQ_TYPE_LEVEL_LOW>; ++ pinctrl-names = "default"; ++ pinctrl-0 = <&pmic_int_l>; ++ rockchip,system-power-controller; ++ wakeup-source; ++ ++ vcc1-supply = <&vcc5v0_sys>; ++ vcc2-supply = <&vcc5v0_sys>; ++ vcc3-supply = <&vcc5v0_sys>; ++ vcc4-supply = <&vcc5v0_sys>; ++ vcc6-supply = <&vcc5v0_sys>; ++ vcc7-supply = <&vcc5v0_sys>; ++ vcc8-supply = <&vcc3v3_sys_s3>; ++ vcc9-supply = <&vcc5v0_sys>; ++ vcc10-supply = <&vcc5v0_sys>; ++ vcc11-supply = <&vcc5v0_sys>; ++ vcc12-supply = <&vcc3v3_sys_s3>; ++ vddio-supply = <&vcc3v0_s3>; ++ ++ regulators { ++ vdd_center: DCDC_REG1 { ++ regulator-name = "vdd_center"; ++ regulator-always-on; ++ regulator-boot-on; ++ regulator-min-microvolt = <800000>; ++ regulator-max-microvolt = <1000000>; ++ regulator-ramp-delay = <6001>; ++ regulator-state-mem { ++ regulator-on-in-suspend; ++ regulator-suspend-microvolt = <950000>; ++ }; ++ }; ++ ++ vdd_cpu_l: DCDC_REG2 { ++ regulator-name = "vdd_cpu_l"; ++ regulator-always-on; ++ regulator-boot-on; ++ regulator-min-microvolt = <750000>; ++ regulator-max-microvolt = <1350000>; ++ regulator-ramp-delay = <6001>; ++ regulator-state-mem { ++ regulator-off-in-suspend; ++ }; ++ }; ++ ++ vcc_ddr_s3: DCDC_REG3 { ++ regulator-name = "vcc_ddr_s3"; ++ regulator-always-on; ++ regulator-boot-on; ++ regulator-state-mem { ++ regulator-on-in-suspend; ++ }; ++ }; ++ ++ vcc1v8_sys_s3: DCDC_REG4 { ++ regulator-name = "vcc1v8_sys_s3"; ++ regulator-always-on; ++ regulator-boot-on; ++ regulator-min-microvolt = <1800000>; ++ regulator-max-microvolt = <1800000>; ++ regulator-state-mem { ++ regulator-on-in-suspend; ++ regulator-suspend-microvolt = <1800000>; ++ }; ++ }; ++ ++ /* not used */ ++ vcc1v8_dvp: LDO_REG1 { ++ regulator-name = "vcc1v8_dvp"; ++ }; ++ ++ /* not used */ ++ vcc3v0_touch: LDO_REG2 { ++ regulator-name = "vcc3v0_touch"; ++ }; ++ ++ vcc1v8_s3: LDO_REG3 { ++ regulator-name = "vcc1v8_s3"; ++ regulator-always-on; ++ regulator-boot-on; ++ regulator-min-microvolt = <1800000>; ++ regulator-max-microvolt = <1800000>; ++ regulator-state-mem { ++ regulator-on-in-suspend; ++ regulator-suspend-microvolt = <1800000>; ++ }; ++ }; ++ ++ vcc_sdio_s0: LDO_REG4 { ++ regulator-name = "vcc_sdio_s0"; ++ regulator-always-on; ++ regulator-boot-on; ++ regulator-min-microvolt = <1800000>; ++ regulator-max-microvolt = <3300000>; ++ regulator-state-mem { ++ regulator-suspend-microvolt = <3300000>; ++ }; ++ }; ++ ++ /* not used */ ++ vcca3v0_codec: LDO_REG5 { ++ regulator-name = "vcca3v0_codec"; ++ }; ++ ++ vcc1v5_s3: LDO_REG6 { ++ regulator-name = "vcc1v5_s3"; ++ regulator-always-on; ++ regulator-boot-on; ++ regulator-min-microvolt = <1500000>; ++ regulator-max-microvolt = <1500000>; ++ regulator-state-mem { ++ regulator-on-in-suspend; ++ regulator-suspend-microvolt = <1500000>; ++ }; ++ }; ++ ++ /* not used */ ++ vcca1v8_codec: LDO_REG7 { ++ regulator-name = "vcca1v8_codec"; ++ }; ++ ++ vcc3v0_s3: LDO_REG8 { ++ regulator-name = "vcc3v0_s3"; ++ regulator-always-on; ++ regulator-boot-on; ++ regulator-min-microvolt = <3000000>; ++ regulator-max-microvolt = <3000000>; ++ regulator-state-mem { ++ regulator-on-in-suspend; ++ regulator-suspend-microvolt = <3000000>; ++ }; ++ }; ++ ++ vcc3v3_sys_s0: SWITCH_REG1 { ++ regulator-name = "vcc3v3_sys_s0"; ++ regulator-always-on; ++ regulator-boot-on; ++ regulator-state-mem { ++ regulator-off-in-suspend; ++ }; ++ }; ++ ++ vcc3v3_s0: SWITCH_REG2 { ++ regulator-name = "vcc3v3_s0"; ++ }; ++ }; ++ }; ++ ++ vdd_cpu_b: regulator@40 { ++ compatible = "silergy,syr827"; ++ reg = <0x40>; ++ fcs,suspend-voltage-selector = <1>; ++ pinctrl-names = "default"; ++ pinctrl-0 = <&vsel1_gpio>; ++ vsel-gpios = <&gpio1 RK_PC1 GPIO_ACTIVE_HIGH>; ++ regulator-compatible = "fan53555-reg"; ++ regulator-name = "vdd_cpu_b"; ++ regulator-min-microvolt = <712500>; ++ regulator-max-microvolt = <1500000>; ++ regulator-ramp-delay = <1000>; ++ regulator-always-on; ++ regulator-boot-on; ++ vin-supply = <&vcc5v0_sys>; ++ ++ regulator-state-mem { ++ regulator-off-in-suspend; ++ }; ++ }; ++ ++ vdd_gpu: regulator@41 { ++ compatible = "silergy,syr828"; ++ reg = <0x41>; ++ fcs,suspend-voltage-selector = <1>; ++ pinctrl-names = "default"; ++ pinctrl-0 = <&vsel2_gpio>; ++ vsel-gpios = <&gpio1 RK_PB6 GPIO_ACTIVE_HIGH>; ++ regulator-compatible = "fan53555-reg"; ++ regulator-name = "vdd_gpu"; ++ regulator-min-microvolt = <712500>; ++ regulator-max-microvolt = <1500000>; ++ regulator-ramp-delay = <1000>; ++ regulator-always-on; ++ regulator-boot-on; ++ vin-supply = <&vcc5v0_sys>; ++ ++ regulator-state-mem { ++ regulator-off-in-suspend; ++ }; ++ }; ++}; ++ ++&i2c2 { ++ clock-frequency = <400000>; ++ i2c-scl-rising-time-ns = <160>; ++ i2c-scl-falling-time-ns = <30>; ++ status = "okay"; ++ ++ gpio-expander@20 { ++ compatible = "nxp,pca9555"; ++ reg = <0x20>; ++ gpio-controller; ++ #gpio-cells = <2>; ++ pinctrl-names = "default"; ++ pinctrl-0 = <&pca0_pins>; ++ interrupt-parent = <&gpio0>; ++ interrupts = <9 IRQ_TYPE_EDGE_FALLING>; ++ interrupt-controller; ++ #interrupt-cells = <2>; ++ vcc-supply = <&vcc3v3_sys_s3>; ++ }; ++ ++ temp@4c { ++ compatible = "onnn,lm75"; ++ reg = <0x4c>; ++ vcc-supply = <&vcc3v3_sys_s0>; ++ }; ++}; ++ ++&i2c4 { ++ clock-frequency = <400000>; ++ i2c-scl-rising-time-ns = <160>; ++ i2c-scl-falling-time-ns = <30>; ++ status = "okay"; ++ ++ fusb0: typec-portc@22 { ++ /* For use with typec-fusb302 */ ++ compatible = "fcs,fusb302"; ++ reg = <0x22>; ++ interrupt-parent = <&gpio1>; ++ interrupts = ; ++ pinctrl-names = "default"; ++ pinctrl-0 = <&fusb0_int>; ++ vbus-supply = <&vcc5v0_typec>; ++ status = "okay"; ++ ++ usb_con: connector { ++ compatible = "usb-c-connector"; ++ label = "USB-C"; ++ power-role = "dual"; ++ data-role = "dual"; ++ try-power-role = "sink"; ++ source-pdos = ; ++ sink-pdos = ; ++ op-sink-microwatt = <5000000>; ++ ++ ports { ++ #address-cells = <1>; ++ #size-cells = <0>; ++ ++ port@0 { ++ reg = <0>; ++ usb_con_hs: endpoint { ++ remote-endpoint = <&u2phy0_typec_hs>; ++ }; ++ }; ++ port@1 { ++ reg = <1>; ++ usb_con_ss: endpoint { ++ remote-endpoint = <&tcphy0_typec_ss>; ++ }; ++ }; ++ port@2 { ++ reg = <2>; ++ usb_con_sbu: endpoint { ++ remote-endpoint = <&tcphy0_typec_dp>; ++ }; ++ }; ++ }; ++ }; ++ }; ++}; ++ ++/* I2C on UEXT */ ++&i2c7 { ++ status = "okay"; ++}; ++ ++/* External I2C */ ++&i2c8 { ++ status = "okay"; ++}; ++ ++&i2s2 { ++ #sound-dai-cells = <0>; ++ status = "okay"; ++}; ++ ++&io_domains { ++ status = "okay"; ++ bt656-supply = <&vcc1v8_sys_s0>; ++ audio-supply = <&vcc1v8_sys_s0>; ++ sdmmc-supply = <&vcc_sdio_s0>; ++ gpio1830-supply = <&vcc3v0_s3>; ++}; ++ ++&pcie0 { ++ ep-gpios = <&gpio2 RK_PD4 GPIO_ACTIVE_HIGH>; ++ num-lanes = <2>; ++ max-link-speed = <2>; ++ pinctrl-names = "default"; ++ pinctrl-0 = <&pcie_prst &pcie_clkreqn_cpm>; ++ vpcie12v-supply = <&vcc12v_dcin>; ++ vpcie3v3-supply = <&pcie_power>; ++ vpcie1v8-supply = <&avdd_1v8_s0>; ++ vpcie0v9-supply = <&avdd_0v9_s0>; ++ status = "okay"; ++}; ++ ++&pcie_phy { ++ status = "okay"; ++}; ++ ++&pinctrl { ++ buttons { ++ pwrbtn: pwrbtn { ++ rockchip,pins = <0 RK_PA5 RK_FUNC_GPIO &pcfg_pull_up>; ++ }; ++ ++ user1btn: usr1btn { ++ rockchip,pins = <0 RK_PA3 RK_FUNC_GPIO &pcfg_pull_none>; ++ }; ++ }; ++ ++ charger { ++ ac_present_ap: ac-present-ap { ++ rockchip,pins = <0 RK_PA2 RK_FUNC_GPIO &pcfg_pull_none>; ++ }; ++ ++ charger_status: charger-status { ++ rockchip,pins = <2 RK_PD3 RK_FUNC_GPIO &pcfg_pull_none>; ++ }; ++ }; ++ ++ fan { ++ fan1_sense: fan1-sense { ++ rockchip,pins = <4 RK_PC5 RK_FUNC_GPIO &pcfg_pull_none>; ++ }; ++ ++ fan2_sense: fan2-sense { ++ rockchip,pins = <4 RK_PC7 RK_FUNC_GPIO &pcfg_pull_none>; ++ }; ++ }; ++ ++ fusb30x { ++ fusb0_int: fusb0-int { ++ rockchip,pins = ++ <1 RK_PA2 RK_FUNC_GPIO &pcfg_pull_up>; ++ }; ++ ++ fusb0_vbus_en: fusb0-vbus-en { ++ rockchip,pins = ++ <1 RK_PA3 RK_FUNC_GPIO &pcfg_pull_up>; ++ }; ++ }; ++ ++ gmac { ++ rgmii_phy_reset: rgmii-phy-reset { ++ rockchip,pins = ++ <3 RK_PB7 RK_FUNC_GPIO &pcfg_output_low>; ++ }; ++ }; ++ ++ leds { ++ network_act: network-act { ++ rockchip,pins = ++ <0 RK_PA4 RK_FUNC_GPIO &pcfg_pull_down>; ++ }; ++ ++ usb3_act: usb3-act { ++ rockchip,pins = ++ <0 RK_PB3 RK_FUNC_GPIO &pcfg_pull_down>; ++ }; ++ ++ sata_act: sata-act { ++ rockchip,pins = ++ <4 RK_PD4 RK_FUNC_GPIO &pcfg_pull_down>; ++ }; ++ ++ system_led: sys-led { ++ rockchip,pins = ++ <0 RK_PB4 RK_FUNC_GPIO &pcfg_pull_down>, ++ <0 RK_PB5 RK_FUNC_GPIO &pcfg_pull_down>; ++ }; ++ ++ sata_err_led: sata-err-led { ++ rockchip,pins = ++ <2 RK_PA2 RK_FUNC_GPIO &pcfg_pull_down>, ++ <2 RK_PA3 RK_FUNC_GPIO &pcfg_pull_down>, ++ <2 RK_PA4 RK_FUNC_GPIO &pcfg_pull_down>, ++ <2 RK_PA5 RK_FUNC_GPIO &pcfg_pull_down>, ++ <2 RK_PA6 RK_FUNC_GPIO &pcfg_pull_down>; ++ }; ++ }; ++ ++ misc { ++ pca0_pins: pca0-pins { ++ rockchip,pins = ++ <0 RK_PB1 RK_FUNC_GPIO &pcfg_pull_none>; ++ }; ++ ++ wake_on_lan: wake-on-lan { ++ rockchip,pins = ++ <0 RK_PB0 RK_FUNC_GPIO &pcfg_pull_none>; ++ }; ++ }; ++ ++ pcie { ++ pcie_prst: pcie-prst { ++ rockchip,pins = ++ <2 RK_PD4 RK_FUNC_GPIO &pcfg_pull_none>; ++ }; ++ ++ pcie_pwr_en: pcie-pwr-en { ++ rockchip,pins = ++ <1 RK_PD0 RK_FUNC_GPIO &pcfg_pull_none>; ++ }; ++ }; ++ ++ pmic { ++ pmic_int_l: pmic-int-l { ++ rockchip,pins = ++ <0 RK_PB2 RK_FUNC_GPIO &pcfg_pull_none>; ++ }; ++ ++ vsel1_gpio: vsel1-gpio { ++ rockchip,pins = ++ <1 RK_PC1 RK_FUNC_GPIO &pcfg_pull_down>; ++ }; ++ ++ vsel2_gpio: vsel2-gpio { ++ rockchip,pins = ++ <1 RK_PB6 RK_FUNC_GPIO &pcfg_pull_down>; ++ }; ++ }; ++ ++ power { ++ hdd_a_power: hdd-a-power { ++ rockchip,pins = ++ <1 RK_PA0 RK_FUNC_GPIO &pcfg_pull_none>; ++ }; ++ ++ hdd_b_power: hdd-b-power { ++ rockchip,pins = ++ <1 RK_PA1 RK_FUNC_GPIO &pcfg_pull_none>; ++ }; ++ ++ vcc5v0_usb_en: vcc5v0-usb-en { ++ rockchip,pins = ++ <1 RK_PC6 RK_FUNC_GPIO &pcfg_pull_none>; ++ }; ++ ++ sdmmc0_pwr_h: sdmmc0-pwr-h { ++ rockchip,pins = ++ ; ++ }; ++ ++ usb_lan_en: usb-lan-en { ++ rockchip,pins = ++ <1 RK_PC7 RK_FUNC_GPIO &pcfg_pull_none>; ++ }; ++ }; ++}; ++ ++&pmu_io_domains { ++ pmu1830-supply = <&vcc3v0_s3>; ++ status = "okay"; ++}; ++ ++&pwm0 { ++ status = "okay"; ++}; ++ ++&pwm1 { ++ status = "okay"; ++}; ++ ++&pwm2 { ++ status = "okay"; ++}; ++ ++&pwm3 { ++ status = "okay"; ++}; ++ ++&saradc { ++ vref-supply = <&vcc1v8_s3>; ++ status = "okay"; ++}; ++ ++&sdhci { ++ bus-width = <8>; ++ mmc-hs400-1_8v; ++ mmc-hs200-1_8v; ++ mmc-hs400-enhanced-strobe; ++ supports-emmc; ++ non-removable; ++ status = "okay"; ++}; ++ ++&sdmmc { ++ bus-width = <4>; ++ cap-sd-highspeed; ++ disable-wp; ++ sd-uhs-sdr104; ++ pinctrl-names = "default"; ++ pinctrl-0 = <&sdmmc_clk &sdmmc_cmd &sdmmc_cd &sdmmc_bus4>; ++ vmmc-supply = <&vcc3v0_sd>; ++ vqmmc-supply = <&vcc_sdio_s0>; ++ status = "okay"; ++}; ++ ++&spi1 { ++ status = "okay"; ++}; ++ ++/* UEXT connector */ ++&spi2 { ++ status = "okay"; ++}; ++ ++&spi5 { ++ status = "okay"; ++}; ++ ++&tcphy0 { ++ extcon = <&fusb0>; ++ status = "okay"; ++}; ++ ++&tcphy0_dp { ++ port { ++ tcphy0_typec_dp: endpoint { ++ remote-endpoint = <&usb_con_sbu>; ++ }; ++ }; ++}; ++ ++&tcphy0_usb3 { ++ port { ++ tcphy0_typec_ss: endpoint { ++ remote-endpoint = <&usb_con_ss>; ++ }; ++ }; ++}; ++ ++&tcphy1 { ++ status = "okay"; ++}; ++ ++&tsadc { ++ /* tshut mode 0:CRU 1:GPIO */ ++ rockchip,hw-tshut-mode = <1>; ++ /* tshut polarity 0:LOW 1:HIGH */ ++ rockchip,hw-tshut-polarity = <1>; ++ status = "okay"; ++}; ++ ++&u2phy0 { ++ status = "okay"; ++ extcon = <&fusb0>; ++ ++ u2phy0_otg: otg-port { ++ status = "okay"; ++ ++ port { ++ u2phy0_typec_hs: endpoint { ++ remote-endpoint = <&usb_con_hs>; ++ }; ++ }; ++ }; ++ ++ u2phy0_host: host-port { ++ phy-supply = <&vcc5v0_usb>; ++ status = "okay"; ++ }; ++}; ++ ++&u2phy1 { ++ status = "okay"; ++ ++ u2phy1_otg: otg-port { ++ status = "okay"; ++ }; ++}; ++ ++&uart2 { ++ status = "okay"; ++}; ++ ++&usb_host0_ehci { ++ status = "okay"; ++}; ++ ++&usb_host0_ohci { ++ status = "okay"; ++}; ++ ++&usbdrd3_0 { ++ extcon = <&fusb0>; ++ status = "okay"; ++}; ++ ++&usbdrd_dwc3_0 { ++ status = "okay"; ++ dr_mode = "otg"; ++}; ++ ++&usbdrd3_1 { ++ status = "okay"; ++}; ++ ++&usbdrd_dwc3_1 { ++ status = "okay"; ++ dr_mode = "host"; ++ ++ #address-cells = <1>; ++ #size-cells = <0>; ++ ++ int_hub: hub@1 { ++ compatible = "usb2109,0815"; ++ reg = <1>; ++ #address-cells = <1>; ++ #size-cells = <0>; ++ ++ int_hub_port1: port@1 { ++ reg = <1>; ++ #trigger-source-cells = <0>; ++ }; ++ ++ int_hub_port2: port@2 { ++ reg = <2>; ++ #trigger-source-cells = <0>; ++ }; ++ ++ int_hub_port3: port@3 { ++ reg = <3>; ++ #trigger-source-cells = <0>; ++ }; ++ ++ usb_lan: device@4 { ++ compatible = "usbbda,8156"; ++ reg = <4>; ++ ++ #address-cells = <2>; ++ #size-cells = <0>; ++ ++ interface@0 { /* interface 0 of configuration 1 */ ++ compatible = "usbbda,8156.config1.0"; ++ reg = <0 1>; ++ }; ++ }; ++ }; ++}; ++ ++&vopb { ++ status = "okay"; ++}; ++ ++&vopb_mmu { ++ status = "okay"; ++}; ++ ++&vopl { ++ status = "okay"; ++}; ++ ++&vopl_mmu { ++ status = "okay"; ++}; +diff --git a/arch/arm/mach-rockchip/rk3399/Kconfig b/arch/arm/mach-rockchip/rk3399/Kconfig +index 254b9c5b..5f89bf6e 100644 +--- a/arch/arm/mach-rockchip/rk3399/Kconfig ++++ b/arch/arm/mach-rockchip/rk3399/Kconfig +@@ -26,6 +26,22 @@ config TARGET_PINEBOOK_PRO_RK3399 + with 4Gb RAM, onboard eMMC, USB-C, a USB3 and USB2 port, + 1920*1080 screen and all the usual laptop features. + ++config TARGET_HELIOS64 ++ bool "Kobol Innovations Helios64" ++ select BOARD_LATE_INIT ++ help ++ Helios64 is a Network Attached Storage board based on Rockchip RK3399. ++ ++ Key features of the Helios64 include: ++ * on-board PCIe to 5 Ports SATA Controller JMB585 ++ * on-board USB 3.0 hub (3x USB 3.0 host) ++ * USB Type-C (Support DisplayPort Alt Mode) ++ * on-board 1 Gigabit Ethernet ++ * on-board 2.5 Gigabit Ethernet (Realtek RTL8156) ++ * on-board eMMC ++ * on-board LPDDR4 ++ * SPI, I2C, UART, GPIO ++ + config TARGET_PUMA_RK3399 + bool "Theobroma Systems RK3399-Q7 (Puma)" + help +@@ -151,6 +167,7 @@ endif # BOOTCOUNT_LIMIT + + source "board/firefly/roc-pc-rk3399/Kconfig" + source "board/google/gru/Kconfig" ++source "board/kobol/helios64/Kconfig" + source "board/pine64/pinebook-pro-rk3399/Kconfig" + source "board/pine64/rockpro64_rk3399/Kconfig" + source "board/rockchip/evb_rk3399/Kconfig" +diff --git a/board/kobol/helios64/Kconfig b/board/kobol/helios64/Kconfig +new file mode 100644 +index 00000000..644cdbd8 +--- /dev/null ++++ b/board/kobol/helios64/Kconfig +@@ -0,0 +1,24 @@ ++if TARGET_HELIOS64 ++ ++config SYS_BOARD ++ default "helios64" ++ ++config SYS_VENDOR ++ default "kobol" ++ ++config SYS_CONFIG_NAME ++ default "helios64" ++ ++config BOARD_SPECIFIC_OPTIONS # dummy ++ def_bool y ++ ++config ENV_SECT_SIZE ++ default 0x1000 if ENV_IS_IN_SPI_FLASH ++ ++config ENV_SIZE ++ default 0x8000 ++ ++config ENV_OFFSET ++ default 0x460000 if ENV_IS_IN_SPI_FLASH ++ ++endif +diff --git a/board/kobol/helios64/MAINTAINERS b/board/kobol/helios64/MAINTAINERS +new file mode 100644 +index 00000000..a9c88c79 +--- /dev/null ++++ b/board/kobol/helios64/MAINTAINERS +@@ -0,0 +1,6 @@ ++HELIOS64 BOARD ++M: Aditya Prayoga ++S: Maintained ++F: board/kobol/helios64/ ++F: include/configs/helios64.h ++F: configs/helios64_defconfig +diff --git a/board/kobol/helios64/Makefile b/board/kobol/helios64/Makefile +new file mode 100644 +index 00000000..ab34245a +--- /dev/null ++++ b/board/kobol/helios64/Makefile +@@ -0,0 +1,5 @@ ++# SPDX-License-Identifier: GPL-2.0+ ++# ++# Copyright (C) 2020 Aditya Prayoga ++ ++obj-y := helios64.o sys_otp.o +diff --git a/board/kobol/helios64/helios64.c b/board/kobol/helios64/helios64.c +new file mode 100644 +index 00000000..c7a0efa4 +--- /dev/null ++++ b/board/kobol/helios64/helios64.c +@@ -0,0 +1,262 @@ ++// SPDX-License-Identifier: GPL-2.0+ ++/* ++ * (C) Copyright 2020 Aditya Prayoga (aditya@kobol.io) ++ */ ++ ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++ ++#include "sys_otp.h" ++ ++#ifndef CONFIG_TPL_BUILD ++int board_early_init_f(void) ++{ ++#ifdef CONFIG_SPL_BUILD ++#define GPIO0_BASE 0xff720000 ++#define GRF_BASE 0xff770000 ++ struct rk3399_grf_regs * const grf = (void *)GRF_BASE; ++ struct rockchip_gpio_regs * const gpio = (void *)GPIO0_BASE; ++ ++ /* Turn ON status LED. At this stage, FDT & DM is not initialized yet */ ++ spl_gpio_output(gpio, GPIO(BANK_B, 4), 1); ++#endif ++ return 0; ++} ++#endif ++ ++#ifndef CONFIG_SPL_BUILD ++int board_early_init_r(void) ++{ ++ read_otp_data(); ++ return 0; ++} ++#endif ++ ++#ifdef CONFIG_MISC_INIT_R ++#define GRF_IO_VSEL_BT565_SHIFT 0 ++#define GRF_IO_VSEL_AUDIO_SHIFT 1 ++#define GRF_IO_VSEL_SDMMC_SHIFT 2 ++#define GRF_IO_VSEL_GPIO1830_SHIFT 3 ++ ++#define PMUGRF_CON0_VSEL_SHIFT 8 ++#define PMUGRF_CON0_PMU1830_VOL_SHIFT 9 ++static void setup_iodomain(void) ++{ ++ struct rk3399_grf_regs *grf = ++ syscon_get_first_range(ROCKCHIP_SYSCON_GRF); ++ struct rk3399_pmugrf_regs *pmugrf = ++ syscon_get_first_range(ROCKCHIP_SYSCON_PMUGRF); ++ ++ /* BT565 is in 1.8v domain */ ++ rk_setreg(&grf->io_vsel, 1 << GRF_IO_VSEL_BT565_SHIFT); ++ ++ /* AUDIO is in 1.8v domain */ ++ rk_setreg(&grf->io_vsel, 1 << GRF_IO_VSEL_AUDIO_SHIFT); ++ ++ /* SDMMC is in 3.0v domain */ ++ rk_setreg(&grf->io_vsel, 0 << GRF_IO_VSEL_SDMMC_SHIFT); ++ ++ /* GPIO1830 is in 3.0v domain */ ++ rk_setreg(&grf->io_vsel, 0 << GRF_IO_VSEL_GPIO1830_SHIFT); ++ ++ /* Set GPIO1 1.8v/3.0v source select to PMU1830_VOL */ ++ rk_setreg(&pmugrf->soc_con0, 1 << PMUGRF_CON0_VSEL_SHIFT); ++ rk_setreg(&pmugrf->soc_con0, 0 << PMUGRF_CON0_PMU1830_VOL_SHIFT); ++} ++ ++/* ++ * Swap mmc0 and mmc1 in boot_targets if booted from SD-Card. ++ * ++ * If bootsource is uSD-card we can assume that we want to use the ++ * SD-Card instead of the eMMC as first boot_target for distroboot. ++ * We only want to swap the defaults and not any custom environment a ++ * user has set. We exit early if a changed boot_targets environment ++ * is detected. ++ */ ++static int setup_boottargets(void) ++{ ++ const char *boot_device = ++ ofnode_read_chosen_string("u-boot,spl-boot-device"); ++ char *env_default, *env; ++ ++ if (!boot_device) { ++ debug("%s: /chosen/u-boot,spl-boot-device not set\n", ++ __func__); ++ return -1; ++ } ++ debug("%s: booted from %s\n", __func__, boot_device); ++ ++ env_default = env_get_default("boot_targets"); ++ env = env_get("boot_targets"); ++ if (!env) { ++ debug("%s: boot_targets does not exist\n", __func__); ++ return -1; ++ } ++ debug("%s: boot_targets current: %s - default: %s\n", ++ __func__, env, env_default); ++ ++ if (strcmp(env_default, env) != 0) { ++ debug("%s: boot_targets not default, don't change it\n", ++ __func__); ++ return 0; ++ } ++ ++ /* ++ * Only run, if booting from mmc1 (i.e. /mmc@fe320000) and ++ * only consider cases where the default boot-order first ++ * tries to boot from mmc0 (eMMC) and then from mmc1 ++ * (i.e. external SD). ++ * ++ * In other words: the SD card will be moved to earlier in the ++ * order, if U-Boot was also loaded from the SD-card. ++ */ ++ if (!strcmp(boot_device, "/mmc@fe320000")) { ++ char *mmc0, *mmc1; ++ ++ debug("%s: booted from SD-Card\n", __func__); ++ mmc0 = strstr(env, "mmc0"); ++ mmc1 = strstr(env, "mmc1"); ++ ++ if (!mmc0 || !mmc1) { ++ debug("%s: only one mmc boot_target found\n", __func__); ++ return -1; ++ } ++ ++ /* ++ * If mmc0 comes first in the boot order, we need to change ++ * the strings to make mmc1 first. ++ */ ++ if (mmc0 < mmc1) { ++ mmc0[3] = '1'; ++ mmc1[3] = '0'; ++ debug("%s: set boot_targets to: %s\n", __func__, env); ++ env_set("boot_targets", env); ++ } ++ } ++ ++ return 0; ++} ++ ++static void setup_leds(void) ++{ ++ struct udevice *dev; ++ ++ led_get_by_label("helios64::status", &dev); ++ led_set_state(dev, LEDST_OFF); ++ mdelay(250); ++ led_set_state(dev, LEDST_ON); ++} ++ ++int misc_init_r(void) ++{ ++ const u32 cpuid_offset = 0x7; ++ const u32 cpuid_length = 0x10; ++ u8 cpuid[cpuid_length]; ++ int ret; ++ ++ setup_iodomain(); ++ set_board_info(); ++ ++ ret = rockchip_cpuid_from_efuse(cpuid_offset, cpuid_length, cpuid); ++ if (ret) ++ return ret; ++ ++ ret = rockchip_cpuid_set(cpuid, cpuid_length); ++ if (ret) ++ return ret; ++ ++ if (mac_read_from_otp()) ++ ret = rockchip_setup_macaddr(); ++ ++ setup_boottargets(); ++ setup_leds(); ++ ++ return ret; ++} ++#endif ++ ++#ifdef CONFIG_LAST_STAGE_INIT ++static void auto_power_enable(void) ++{ ++ struct gpio_desc *enable, *clock; ++ ++ if (gpio_hog_lookup_name("AUTO_ON_EN_D", &enable)) { ++ debug("Fail to get AUTO_ON_EN_D\n"); ++ return; ++ } ++ ++ if (gpio_hog_lookup_name("AUTO_ON_EN_CLK", &clock)) { ++ debug("Fail to get AUTO_ON_EN_CLK\n"); ++ return; ++ } ++ ++ dm_gpio_set_value(enable, 1); ++ dm_gpio_set_value(clock, 1); ++ mdelay(10); ++ dm_gpio_set_value(clock, 0); ++} ++ ++int last_stage_init(void) ++{ ++ auto_power_enable(); ++ ++#ifdef CONFIG_PCI ++ scsi_scan(true); ++#endif ++ ++ return 0; ++} ++#endif ++ ++#if defined(CONFIG_DISPLAY_BOARDINFO_LATE) ++int checkboard(void) ++{ ++ int major, minor; ++ ++ printf("Revision: "); ++ ++ if (!get_revision(&major, &minor)) ++ printf("%i.%i - %s\n", major, minor, get_variant()); ++ else ++ printf("UNKNOWN\n"); ++ ++ return 0; ++} ++#endif ++ ++#if defined(CONFIG_OF_LIBFDT) && defined(CONFIG_OF_BOARD_SETUP) ++int ft_board_setup(void *blob, bd_t *bd) ++{ ++ char *env; ++ ++ env = env_get("board_rev"); ++ if (env) ++ fdt_setprop_string(blob, fdt_path_offset(blob, "/"), ++ "kobol,board-rev", env); ++ ++ env = env_get("cpuid#"); ++ if (env) ++ fdt_setprop_string(blob, fdt_path_offset(blob, "/"), ++ "kobol,cpu-id", env); ++ ++ return 0; ++} ++#endif +diff --git a/board/kobol/helios64/sys_otp.c b/board/kobol/helios64/sys_otp.c +new file mode 100644 +index 00000000..3a278346 +--- /dev/null ++++ b/board/kobol/helios64/sys_otp.c +@@ -0,0 +1,248 @@ ++#include ++#include ++#include ++#include ++#include ++#include ++ ++#include "sys_otp.h" ++ ++#define OTP_DEVICE_BUS 0 ++#define OTP_DEVICE_CS 0 ++#define MAX_NUM_PORTS 2 ++ ++enum board_variant { ++ BOARD_VARIANT_INVALID = 0, ++ BOARD_VARIANT_ENG_SAMPLE, ++ BOARD_VARIANT_4G_PROD_NO_ECC, ++ BOARD_VARIANT_MAX ++}; ++ ++struct __attribute__ ((__packed__)) otp_data_t { ++ u8 magic[8]; ++ u8 part_num[16]; ++ u8 variant; ++ u8 revision; ++ u8 serial_num[6]; ++ u8 mfg_year[2]; ++ u8 mfg_month; ++ u8 mfg_day; ++ u8 mac_addr[MAX_NUM_PORTS][6]; ++ u8 reserved[204]; ++ u32 checksum; ++} otp; ++ ++static struct spi_slave *slave; ++static int has_been_read = 0; ++static int data_valid = 0; ++ ++static inline int is_data_valid(void) ++{ ++ return data_valid; ++} ++ ++static inline int is_valid_header(void) ++{ ++ if ((otp.magic[0] == 'H') || (otp.magic[1] == '6') || ++ (otp.magic[2] == '4') || (otp.magic[3] == 'N') || ++ (otp.magic[4] == 'P') || (otp.magic[5] == 'V') || ++ (otp.magic[6] == '1') || (otp.magic[7] == 0)) ++ ++ return 1; ++ ++ return 0; ++} ++ ++static int init_system_otp(int bus, int cs) ++{ ++ int ret; ++ char name[30], *str; ++ struct udevice *dev; ++ ++ snprintf(name, sizeof(name), "generic_%d:%d", bus, cs); ++ str = strdup(name); ++ if (!str) ++ return -ENOMEM; ++ ret = spi_get_bus_and_cs(bus, cs, 25000000, CONFIG_DEFAULT_SPI_MODE, "spi_generic_drv", ++ str, &dev, &slave); ++ return ret; ++} ++ ++#ifdef DEBUG ++/** ++ * show_otp_data - display the contents of the OTP register ++ */ ++static void show_otp_data(void) ++{ ++ u32 i; ++ u32 crc; ++ ++ const char* var_str[BOARD_VARIANT_MAX] = { ++ "Invalid variant", ++ "Engineering Sample", ++ "Production - 4GB non ECC" ++ }; ++ ++ printf("\n"); ++ printf("Register dump: (%lu bytes)\n", sizeof(otp)); ++ for (i = 0; i < sizeof(otp); i++) { ++ if ((i % 16) == 0) ++ printf("%02X: ", i); ++ printf("%02X ", ((u8 *)&otp)[i]); ++ if (((i % 16) == 15) || (i == sizeof(otp) - 1)) ++ printf("\n"); ++ } ++ ++ if (!is_valid_header()) ++ return; ++ ++ printf("Part Number: %s\n", otp.part_num); ++ printf("Variant: %s\n", var_str[otp.variant]); ++ printf("Revision: %x.%x\n", (otp.revision & 0xf0) >> 4, otp.revision & 0x0f); ++ printf("Serial Number: %012llx\n", *((uint64_t*) otp.serial_num) & ++ 0xFFFFFFFFFFFF); ++ printf("Manufacturing Date: %02X-%02X-%04X (DD-MM-YYYY)\n", otp.mfg_day, ++ otp.mfg_month, *(u16*) otp.mfg_year); ++ ++ printf("1GbE MAC Address: %02X:%02X:%02X:%02X:%02X:%02X\n", ++ otp.mac_addr[0][0], otp.mac_addr[0][1], otp.mac_addr[0][2], ++ otp.mac_addr[0][3], otp.mac_addr[0][4], otp.mac_addr[0][5]); ++ ++ printf("2.5GbE MAC Address: %02X:%02X:%02X:%02X:%02X:%02X\n", ++ otp.mac_addr[1][0], otp.mac_addr[1][1], otp.mac_addr[1][2], ++ otp.mac_addr[1][3], otp.mac_addr[1][4], otp.mac_addr[1][5]); ++ ++ crc = crc32(0, (void *)&otp, sizeof(otp) - 4); ++ ++ if (crc == le32_to_cpu(otp.checksum)) ++ printf("CRC: %08x\n\n", le32_to_cpu(otp.checksum)); ++ else ++ printf("CRC: %08x (should be %08x)\n\n", ++ le32_to_cpu(otp.checksum), crc); ++ ++} ++#endif ++ ++int read_otp_data(void) ++{ ++ int ret; ++ u8 dout[5]; ++ ++ if (has_been_read) { ++ if (is_data_valid()) ++ return 0; ++ else ++ goto data_invalid; ++ } ++ ++ ret = init_system_otp(OTP_DEVICE_BUS, OTP_DEVICE_CS); ++ if (ret) ++ return ret; ++ ++ ret = spi_claim_bus(slave); ++ if (ret) { ++ debug("SPI: Failed to claim SPI bus: %d\n", ret); ++ return ret; ++ } ++ ++ dout[0] = 0x48; ++ dout[1] = 0x00; ++ dout[2] = 0x10; /* Security Register #1 */ ++ dout[3] = 0x00; ++ dout[4] = 0x00; /* Dummy Byte */ ++ ++ ret = spi_write_then_read(slave, dout, sizeof(dout), NULL, (u8 *)&otp, ++ sizeof(otp)); ++ ++ spi_release_bus(slave); ++#ifdef DEBUG ++ show_otp_data(); ++#endif ++ ++ has_been_read = (ret == 0) ? 1 : 0; ++ if (!is_valid_header()) ++ goto data_invalid; ++ ++ if (crc32(0, (void *)&otp, sizeof(otp) - 4) == ++ le32_to_cpu(otp.checksum)) ++ data_valid = 1; ++ ++ if (!is_data_valid()) ++ goto data_invalid; ++ ++ return 0; ++ ++data_invalid: ++ printf("Invalid board ID data!\n"); ++ return -1; ++} ++ ++int get_revision(int *major, int *minor) ++{ ++ if (!is_data_valid()) ++ return -1; ++ ++ *major = (otp.revision & 0xf0) >> 4; ++ *minor = otp.revision & 0x0f; ++ ++ return 0; ++} ++ ++const char *get_variant(void) ++{ ++ const char* var_str[BOARD_VARIANT_MAX] = { ++ "Unknown", ++ "Engineering Sample", ++ "4GB non ECC" ++ }; ++ ++ if ((otp.variant < BOARD_VARIANT_ENG_SAMPLE) || ++ (otp.variant >= BOARD_VARIANT_MAX)) ++ return var_str[0]; ++ ++ return var_str[otp.variant]; ++} ++ ++void set_board_info(void) ++{ ++ char env_str[13]; ++ ++ if (!is_data_valid()) ++ return; ++ ++ snprintf(env_str, sizeof(env_str), "%i.%i", (otp.revision & 0xf0) >> 4, otp.revision & 0x0f); ++ env_set("board_rev", env_str); ++ ++ sprintf(env_str, "%012llx", *((uint64_t*) otp.serial_num) & ++ 0xFFFFFFFFFFFF); ++ ++ env_set("serial#", env_str); ++} ++ ++int mac_read_from_otp(void) ++{ ++ unsigned int i; ++ int ret; ++ ++ if (!is_data_valid()) ++ return -1; ++ ++ for (i = 0; i < MAX_NUM_PORTS; i++) { ++ char enetvar[9]; ++ ++ sprintf(enetvar, i ? "eth%daddr" : "ethaddr", i); ++ ++ if (!is_valid_ethaddr(otp.mac_addr[i])) { ++ debug("Not valid %s!\n", enetvar); ++ continue; ++ } ++ ++ /* Only initialize environment variables that are blank ++ * (i.e. have not yet been set) ++ */ ++ if (!env_get(enetvar)) ++ eth_env_set_enetaddr(enetvar, otp.mac_addr[i]); ++ } ++ ++ return ret; ++} +diff --git a/board/kobol/helios64/sys_otp.h b/board/kobol/helios64/sys_otp.h +new file mode 100644 +index 00000000..61f6f3b3 +--- /dev/null ++++ b/board/kobol/helios64/sys_otp.h +@@ -0,0 +1,10 @@ ++#ifndef __HELIOS64_SYS_OTP_H ++#define __HELIOS64_SYS_OTP_H ++ ++int read_otp_data(void); ++void set_board_info(void); ++int get_revision(int *major, int *minor); ++const char *get_variant(void); ++int mac_read_from_otp(void); ++ ++#endif +diff --git a/configs/helios64-rk3399_defconfig b/configs/helios64-rk3399_defconfig +new file mode 100644 +index 00000000..62210055 +--- /dev/null ++++ b/configs/helios64-rk3399_defconfig +@@ -0,0 +1,149 @@ ++CONFIG_ARM=y ++CONFIG_ARCH_ROCKCHIP=y ++CONFIG_SYS_TEXT_BASE=0x00200000 ++CONFIG_SPL_GPIO_SUPPORT=y ++CONFIG_ENV_OFFSET=0x3F8000 ++CONFIG_ROCKCHIP_RK3399=y ++CONFIG_TARGET_HELIOS64=y ++CONFIG_NR_DRAM_BANKS=1 ++CONFIG_DEBUG_UART_BASE=0xFF1A0000 ++CONFIG_DEBUG_UART_CLOCK=24000000 ++CONFIG_SPL_SPI_FLASH_SUPPORT=y ++CONFIG_SPL_SPI_SUPPORT=y ++CONFIG_DEBUG_UART=y ++CONFIG_AHCI=y ++# CONFIG_ANDROID_BOOT_IMAGE is not set ++CONFIG_OF_BOARD_SETUP=y ++CONFIG_USE_PREBOOT=y ++CONFIG_CONSOLE_MUX=y ++CONFIG_SYS_CONSOLE_ENV_OVERWRITE=y ++CONFIG_DEFAULT_FDT_FILE="rockchip/rk3399-kobol-helios64.dtb" ++CONFIG_MISC_INIT_R=y ++CONFIG_VERSION_VARIABLE=y ++# CONFIG_DISPLAY_BOARDINFO is not set ++CONFIG_DISPLAY_BOARDINFO_LATE=y ++CONFIG_BOARD_TYPES=y ++CONFIG_BOARD_EARLY_INIT_F=y ++CONFIG_BOARD_EARLY_INIT_R=y ++CONFIG_LAST_STAGE_INIT=y ++# CONFIG_SPL_RAW_IMAGE_SUPPORT is not set ++CONFIG_SPL_STACK_R=y ++CONFIG_SPL_STACK_R_MALLOC_SIMPLE_LEN=0x10000 ++CONFIG_SPL_I2C_SUPPORT=y ++CONFIG_SPL_POWER_SUPPORT=y ++CONFIG_SPL_SPI_LOAD=y ++CONFIG_TPL=y ++CONFIG_CMD_CONFIG=y ++CONFIG_CMD_BOOTZ=y ++# CONFIG_BOOTM_PLAN9 is not set ++# CONFIG_BOOTM_RTEMS is not set ++# CONFIG_BOOTM_VXWORKS is not set ++CONFIG_CMD_BOOTEFI_HELLO=y ++CONFIG_CMD_BOOTMENU=y ++CONFIG_CRC32_VERIFY=y ++CONFIG_CMD_MD5SUM=y ++CONFIG_MD5SUM_VERIFY=y ++CONFIG_CMD_MEMINFO=y ++CONFIG_CMD_MX_CYCLIC=y ++CONFIG_CMD_SHA1SUM=y ++CONFIG_SHA1SUM_VERIFY=y ++CONFIG_CMD_STRINGS=y ++CONFIG_CMD_ADC=y ++CONFIG_CMD_GPIO=y ++CONFIG_CMD_GPT=y ++CONFIG_CMD_I2C=y ++CONFIG_CMD_MMC=y ++CONFIG_CMD_PCI=y ++CONFIG_CMD_POWEROFF=y ++CONFIG_CMD_READ=y ++CONFIG_CMD_SPI=y ++CONFIG_CMD_USB=y ++CONFIG_CMD_ROCKUSB=y ++CONFIG_CMD_USB_MASS_STORAGE=y ++CONFIG_CMD_EFIDEBUG=y ++CONFIG_CMD_EXCEPTION=y ++CONFIG_CMD_TIME=y ++CONFIG_CMD_PMIC=y ++CONFIG_CMD_REGULATOR=y ++CONFIG_CMD_FS_UUID=y ++CONFIG_PARTITION_TYPE_GUID=y ++CONFIG_SPL_OF_CONTROL=y ++CONFIG_OF_LIVE=y ++CONFIG_DEFAULT_DEVICE_TREE="rk3399-kobol-helios64" ++CONFIG_OF_SPL_REMOVE_PROPS="pinctrl-0 pinctrl-names clock-names interrupt-parent assigned-clocks assigned-clock-rates assigned-clock-parents" ++CONFIG_ENV_IS_IN_MMC=y ++CONFIG_SYS_RELOC_GD_ENV_ADDR=y ++CONFIG_ENV_VARS_UBOOT_RUNTIME_CONFIG=y ++CONFIG_IP_DEFRAG=y ++# CONFIG_DM_DEVICE_REMOVE is not set ++CONFIG_DEVRES=y ++CONFIG_SCSI_AHCI=y ++CONFIG_AHCI_PCI=y ++CONFIG_SPL_FIRMWARE=y ++CONFIG_GPIO_HOG=y ++CONFIG_ROCKCHIP_GPIO=y ++CONFIG_DM_PCA953X=y ++CONFIG_I2C_SET_DEFAULT_BUS_NUM=y ++CONFIG_I2C_DEFAULT_BUS_NUMBER=0x8 ++CONFIG_SYS_I2C_ROCKCHIP=y ++CONFIG_LED=y ++CONFIG_LED_GPIO=y ++CONFIG_MISC=y ++CONFIG_ROCKCHIP_EFUSE=y ++CONFIG_ROCKCHIP_OTP=y ++CONFIG_SUPPORT_EMMC_RPMB=y ++CONFIG_MMC_IO_VOLTAGE=y ++CONFIG_SPL_MMC_IO_VOLTAGE=y ++CONFIG_MMC_UHS_SUPPORT=y ++CONFIG_MMC_HS200_SUPPORT=y ++CONFIG_MMC_DW=y ++CONFIG_MMC_DW_ROCKCHIP=y ++CONFIG_MMC_SDHCI=y ++CONFIG_MMC_SDHCI_SDMA=y ++CONFIG_MMC_SDHCI_ROCKCHIP=y ++CONFIG_SPI_FLASH_WINBOND=y ++CONFIG_PHY_REALTEK=y ++CONFIG_DM_ETH=y ++CONFIG_DM_MDIO=y ++CONFIG_PHY_GIGE=y ++CONFIG_ETH_DESIGNWARE=y ++CONFIG_RGMII=y ++CONFIG_MII=y ++CONFIG_GMAC_ROCKCHIP=y ++CONFIG_PCI=y ++CONFIG_PHY_ROCKCHIP_INNO_USB2=y ++CONFIG_PHY_ROCKCHIP_TYPEC=y ++CONFIG_DM_PMIC_FAN53555=y ++CONFIG_PMIC_RK8XX=y ++CONFIG_SPL_DM_REGULATOR=y ++CONFIG_REGULATOR_PWM=y ++CONFIG_SPL_DM_REGULATOR_FIXED=y ++CONFIG_DM_REGULATOR_GPIO=y ++CONFIG_SPL_DM_REGULATOR_GPIO=y ++CONFIG_REGULATOR_RK8XX=y ++CONFIG_PWM_ROCKCHIP=y ++CONFIG_RAM_RK3399_LPDDR4=y ++CONFIG_DM_RESET=y ++CONFIG_SCSI=y ++CONFIG_DM_SCSI=y ++CONFIG_BAUDRATE=1500000 ++CONFIG_DEBUG_UART_SHIFT=2 ++CONFIG_ROCKCHIP_SPI=y ++CONFIG_SYSRESET=y ++CONFIG_SYSRESET_SYSCON=y ++CONFIG_DM_THERMAL=y ++CONFIG_USB=y ++# CONFIG_SPL_DM_USB is not set ++CONFIG_USB_XHCI_HCD=y ++CONFIG_USB_XHCI_DWC3=y ++CONFIG_USB_EHCI_HCD=y ++CONFIG_USB_EHCI_GENERIC=y ++CONFIG_USB_DWC3=y ++CONFIG_USB_DWC3_GENERIC=y ++CONFIG_USB_GADGET=y ++CONFIG_USB_FUNCTION_ROCKUSB=y ++CONFIG_USB_HOST_ETHER=y ++CONFIG_USB_ETHER_RTL8152=y ++CONFIG_SPL_TINY_MEMSET=y ++CONFIG_ERRNO_STR=y ++CONFIG_HEXDUMP=y +diff --git a/include/configs/helios64.h b/include/configs/helios64.h +new file mode 100644 +index 00000000..6fca9a6b +--- /dev/null ++++ b/include/configs/helios64.h +@@ -0,0 +1,47 @@ ++/* SPDX-License-Identifier: GPL-2.0+ */ ++/* ++ * (C) Copyright 2020 Aditya Prayoga ++ */ ++ ++#ifndef __HELIOS64_H ++#define __HELIOS64_H ++ ++#include ++ ++#define SDRAM_BANK_SIZE (2UL << 30) ++ ++#if defined(CONFIG_ENV_IS_IN_MMC) ++ #define CONFIG_SYS_MMC_ENV_DEV 0 ++#elif defined(CONFIG_ENV_IS_IN_SPI_FLASH) ++ #define CONFIG_ENV_SPI_BUS CONFIG_SF_DEFAULT_BUS ++ #define CONFIG_ENV_SPI_CS CONFIG_SF_DEFAULT_CS ++ #define CONFIG_ENV_SPI_MODE CONFIG_SF_DEFAULT_MODE ++ #define CONFIG_ENV_SPI_MAX_HZ CONFIG_SF_DEFAULT_SPEED ++#endif ++ ++ ++#ifndef CONFIG_SPL_BUILD ++#if CONFIG_IS_ENABLED(SCSI) ++ ++ #define CONFIG_SYS_SCSI_MAX_SCSI_ID 5 ++ #define CONFIG_SYS_SCSI_MAX_LUN 1 ++ #define CONFIG_SYS_SCSI_MAX_DEVICE (CONFIG_SYS_SCSI_MAX_SCSI_ID * \ ++ CONFIG_SYS_SCSI_MAX_LUN) ++ ++ #define BOOT_TARGET_SCSI(func) \ ++ func(SCSI, scsi, 0) ++#else ++ #define BOOT_TARGET_SCSI(func) ++#endif ++ ++#undef BOOT_TARGET_DEVICES ++#define BOOT_TARGET_DEVICES(func) \ ++ BOOT_TARGET_MMC(func) \ ++ BOOT_TARGET_USB(func) \ ++ BOOT_TARGET_SCSI(func) \ ++ BOOT_TARGET_PXE(func) \ ++ BOOT_TARGET_DHCP(func) ++ ++#endif ++ ++#endif +-- +Created with Armbian build tools https://github.com/armbian/build + diff --git a/u-boot.nix b/u-boot.nix new file mode 100644 index 0000000..c3393d9 --- /dev/null +++ b/u-boot.nix @@ -0,0 +1,34 @@ +final: prev: { + ubootHelios64 = + let plat = if true || builtins.currentSystem == "aarch64-linux" then prev + else prev.pkgsCross.aarch64-multiplatform; in + plat.buildUBoot { + # version = "v2020.04.20"; + # See https://gitlab.denx.de/u-boot/custodians/u-boot-amlogic/-/commit/6de936b011fb02d1019a69aea0184cee4a578f59 + # that's the first commit that introduces reading the ethaddr from the efuse! + # src = fetchTarball { + # url = "https://github.com/kobol-io/u-boot/archive/29d63b29550818992e3bcdb1ceb2a0db49d395cc.tar.gz"; + # sha256 = "1lxyjlssalc0c6nxaw2h8xxmazphmqdp4z8lz947s7v2cmbkmgd5"; + # }; + extraConfig = '' + # The default 1_500_000 doesn't work with anything but ftdi modems + # apparently, and all I got are CP2102 and PL2303HX. 1_500_000 isn't + # listed as a supported baudrate, 115_200 is though. + CONFIG_BAUDRATE=115200 + # This one is needed to obtain the cpu-id; + CONFIG_MISC=y + CONFIG_ROCKCHIP_EFUSE=y + # which in turn is used to derive the mac address. + CONFIG_MISC_INIT_R=y + CONFIG_CMD_BTRFS=y + ''; + extraPatches = [ + ./patches/uboot/add-board-helios64.patch + ./patches/uboot/115200baud.patch + ]; + defconfig = "helios64-rk3399_defconfig"; + extraMeta.platforms = [ "aarch64-linux" ]; + BL31 = "${plat.armTrustedFirmwareRK3399}/bl31.elf"; + filesToInstall = ["idbloader.img" "u-boot.itb" ".config"]; + }; +}